ÒC451 LIB9”C451MIN LIB=&GúCREATOR BASc=z0CREATOR DOC 8á%CREATOR OVLØBgCREATOR OVR6A§MENU BASP • R451 LIB\ &/REKEY BASh°REPORTORBAS~=!REPORTOROVL»=$¨ÿÿÿÿ21 DEF FNPH$(X%)=CHR$(X%+128):DEF FNUH(X$)=ASC(X$)-128 100 PRINT 110 PRINT"Enter data............................................Depress E" 120 PRINT"Look up a record......................................Depress L" 130 PRINT"Scan all records......................................Depress S" 140 PRINT"Update a record.......................................Depress U" 150 PRINT"Delete a record.......................................Depress D" 160 PRINT"Exit the program......................................Depress X" 170 PRINT"Initialize the file...................................Depress I" 180 GET 2,1:PRINT" CURRENT NUMBER OF RECORDS IN FILE=";CVI(KP$);:IF CVI(KP$)<1 THEN PRINT"PLEASE INITIALIZE!":ELSE PRINT 185 PRINT"Please depress the key corresponding to your choice." 1000 PRINT CLS$:REM*BEGIN ENTRY 1005 FC=FC+1 10000 REM*BEGIN FILE LOOK UP 10010 GOSUB 27000:'TRY TO FIND THE RECORD 10200 GOSUB 28000:'UNPACK THE FIELDS 10800 GOSUB 29000:'DISPLAY RECORD IF KEY FIELD MATCHES 11000 REM*BEGIN FILE LOOK UP 11010 GOSUB 27000:'TRY TO FIND THE RECORD 11200 GOSUB 28000:'UNPACK THE FIELDS 11800 GOSUB 29000:'DISPLAY RECORD IF KEY FIELD MATCHES 11810 UF$="":PRINT:PRINT"What field number do you want to update? "; 11820 UX$=INKEY$:IF UX$>="0" AND UX$<="9" THEN PRINT UX$;:UF$=UF$+UX$:GOTO 11820 ELSE IF UX$<>CHR$(13) THEN 11820:ELSE UF=VAL(UF$) 11900 REM*BEGIN OUTPUT* 11998 REM*INSERT CHANGED FIELDS AND SEND TO DISK* 12000 REM*BEGIN RECORD DELETE* 12010 GOSUB 27000:'TRY TO FIND THE RECORD 12200 GOSUB 28000:'UNPACK THE FIELDS 12800 GOSUB 29000:'DISPLAY RECORD IF KEY FIELD MATCHES 12900 REM*DELETE CODE WRITTEN INTO ALL FIELDS* 22000 REM*FIELD TITLES FOR DISPLAY* 25000 IF ERL>35000 AND ERL<36000 THEN RESUME 35000:ELSE IF ERR=6 THEN RESUME NEXT 25001 IF ERR=62 THEN PRINT"YOU DIDN'T INITIALIZE YOUR DATA FILE. DO SO!":FOR I=1 TO 1000:NEXT:RUN 25010 PRINT"ERROR ENCOUNTERED IN LINE";ERL 25015 IF ERR=10 THEN PRINT"You have input a number too large for the field type.":RESUME NEXT 25020 IF ERL<10000 AND ERL>1000 THEN PRINT"You have probably made an error in edit specifications." 25030 PRINT"ERROR NUMBER IS";ERR:CLOSE:END 25999 REM*HASHING ALGORITHM 26000 FOR ZZ=1 TO LEN(ZZ$) 26010 SP=ASC(MID$(ZZ$,ZZ,1)):X#=X#+ZZ*(SP+1/SP) 26020 NEXT 26030 IF X#<1E+17 THEN X#=X#*X#:GOTO 26030 26035 SP=ASC(ZZ$)+ASC(RIGHT$(ZZ$,1)):SP=SP-10*(INT(SP/10)):SP=SP+4:X$=STR$(X#):RP=VAL(MID$(X$,SP,4)):X#=0 27000 REM*LOOK FOR THE RECORD* 27020 'NOW WE HAVE INPUT THE KEY FIELD 27030 ZZ$=KF$:GOSUB 26000:KP=RP:'GO TO HASHING ROUTINE AND GET POSITION 27999 REM*UNPACK FIELDS IN RECORD* 28998 RETURN 28999 REM*DISPLAY FOUND RECORD* 29000 PRINT CLS$;:CL=1 29020 READ R$:CX=LEN(G$(I)) 29021 IF CX>10 THEN IF MID$(G$(I),CX-9,10)=" " THEN CX=CX-10:GOTO 29021 29022 IF CX19 THEN GOSUB 41010:GOTO 29024 29026 IF (LC<40 AND LEN(R$)+LEN(G$(I))+37<80) THEN PRINT TAB(40);"#";I;"|";R$;"|";G$(I);:ELSE PRINT:CL=CL+1:GOTO 29024 29030 NEXT:RESTORE:PRINT 29930 IF AN$="S" OR AN$="s" THEN RETURN 29940 PRINT:PRINT"IS THIS IT? (DEPRESS Y IF SO, ANY OTHER IF NOT)"; 29950 AN$=INKEY$:IF AN$="" THEN 29950:ELSE PRINT CHR$(13);STRING$(60,32);:PRINT CHR$(13);:IF AN$<>"Y" THEN GOSUB 27040:GOSUB 28000:GOTO 29000 29960 RETURN 29999 REM*NUMERIC FIELD EDIT CHECK SUBROUTINE* 30000 CD=INSTR(CD$,CHR$(32)):IF CD>1 THEN CD$=LEFT$(CD$,CD-1)+MID$(CD$,CD+1):GOTO 30000:ELSE IF CD=1 THEN CD$=MID$(CD$,2):GOTO 30000 30005 FOR ZZ=1 TO LEN(CD$) 30010 IF MID$(CD$,ZZ,1)<"0" OR MID$(CD$,ZZ,1)>"9" THEN IF MID$(CD$,ZZ,1)<>"." AND MID$(CD$,ZZ,1)<>"-" THEN E=1 30020 NEXT:IF E THEN RETURN 30030 CD=INSTR(CD$,"-"):IF CD>0 AND INSTR(CD+1,CD$,"-")>0 THEN E=1:RETURN:ELSE IF (CD>0 AND CD<>1) THEN E=1:RETURN 30040 CD=INSTR(CD$,"."):IF CD>0 AND INSTR(CD+1,CD$,".")>0 THEN E=1:RETURN 30050 RETURN 30999 REM*ALPHA FIELD EDIT CHECK* 31000 FOR ZZ=1 TO LEN(CD$) 31010 IF MID$(CD$,ZZ,1)<="9" AND MID$(CD$,ZZ,1)>="0" THEN E=1 31020 NEXT 31030 RETURN 32000 REM*INITIALIZE* 32010 PRINT"This will erase all previous data, if any.":PRINT"To continue initialization, depress the C key."; 32030 AN$=INKEY$:IF AN$="" THEN 32030:ELSE IF AN$<>"C" THEN RUN 32035 PRINT CLS$:PRINT"This will take a little while. Please be patient." 32060 PUT 2,I 32070 NEXT:LSET KP$=MKI$(1):PUT 2,1:RUN 34999 REM*BEGIN RECORD SCAN* 35001 INPUT"Numeric or alphabetic scan (N/A):";NS$:NS%=ASC(NS$):NS%=NS% AND 95:NS$=CHR$(NS%):IF NS$<>"N" AND NS$<>"A" THEN 35001 35002 INPUT"Smallest (numeric or alpha) to display:";SM$ 35003 INPUT"Largest (numeric or alpha) to display:";LA$ 35004 INPUT"Should I delay after displaying each record (Y/N)?";DY$:NS%=ASC(DY$):NS%=NS% AND 95:DY$=CHR$(NS%):IF DY$<>"N" AND DY$<>"Y" THEN 35004 35050 GOSUB 28000:'UNPACK THE RECORD 35060 IF NS$="A" AND (G$(NS)LA$) THEN 35965 35070 IF NS$="N" AND (VAL(G$(NS))VAL(LA$)) THEN 35965 35960 GOSUB 29000:'DISPLAY RECORD 35965 IF DY$="Y" THEN 35970 ELSE 35990 35970 FOR J=1 TO 2000:NEXT:'WAIT BEFORE DISPLAYING NEXT RECORD 36000 REM*FIELD LENGTHS AND FIELDING FILE* 36820 FIELD #1,CD% AS DD$,F%(ZZ) AS F$(ZZ):CD%=CD%+F%(ZZ):NEXT:RETURN 38000 CLOSE:NEW 40000 G1=INSTR(G$(UF),"MORE"):IF G1>0 THEN G%=CINT(VAL(G$(UF))+VAL(G$)):G$(UF)=MID$(STR$(G%),FIX(2+SGN(G%)/2)):RETURN 40010 G1=INSTR(G$(UF),"LESS"):IF G1>0 THEN G!=CSNG(-VAL(G$(UF))+VAL(G$)):G$(UF)=MID$(STR$(G!),FIX(2+SGN(G!)/2)):RETURN 40020 G1=INSTR(G$(UF),"+"):IF G1>1 THEN G%=CINT(VAL(G$(UF))+VAL(G$)):G$(UF)=MID$(STR$(G%),FIX(2+SGN(G%)/2)):RETURN 40030 G1=INSTR(G$(UF),"-"):IF G1>1 THEN G!=CSNG(-VAL(G$(UF))+VAL(G$)):G$(UF)=MID$(STR$(G!),FIX(2+SGN(G!)/2)):RETURN 40040 G1=INSTR(G$(UF),"*"):IF G1>0 THEN G%=CINT(VAL(G$(UF))*VAL(G$)):G$(UF)=MID$(STR$(G%),FIX(2+SGN(G%)/2)):RETURN 40050 G1=INSTR(G$(UF),"/"):IF G1>0 THEN G%=CINT(VAL(G$)/VAL(G$(UF))):G$(UF)=MID$(STR$(G%),FIX(2+SGN(G%)/2)):RETURN 40100 RETURN 40500 G3=0:G2=INSTR(G$(UF),"RO"):IF G2 THEN G3=VAL(MID$(G$(UF),G2+2)) 40510 G1=INSTR(G$(UF),"LESS"):IF G1>0 THEN G#=CDBL(-VAL(G$(UF))+VAL(G$)):G$(UF)=MID$(STR$(G#),FIX(2+SGN(G#)/2)):GOTO 40570 40520 G1=INSTR(G$(UF),"+"):IF G1>1 THEN G#=CDBL(VAL(G$(UF))+VAL(G$)):G$(UF)=MID$(STR$(G#),FIX(2+SGN(G#)/2)):GOTO 40570 40530 G1=INSTR(G$(UF),"-"):IF G1>1 THEN G#=CDBL(-VAL(G$(UF))+VAL(G$)):G$(UF)=MID$(STR$(G#),FIX(2+SGN(G#)/2)):GOTO 40570 40540 G1=INSTR(G$(UF),"*"):IF G1>0 THEN G#=CDBL(VAL(G$(UF))*VAL(G$)):G$(UF)=MID$(STR$(G#),FIX(2+SGN(G#)/2)):GOTO 40570 40550 G1=INSTR(G$(UF),"/"):IF G1>0 THEN G#=CDBL(VAL(G$)/VAL(G$(UF))):G$(UF)=MID$(STR$(G#),FIX(2+SGN(G#)/2)):GOTO 40570 40560 G1=INSTR(G$(UF),"MORE"):IF G1>0 THEN G#=CDBL(VAL(G$(UF))+VAL(G$)):G$(UF)=MID$(STR$(G#),FIX(2+SGN(G#)/2)) 40570 IF G2<1 THEN RETURN 40580 G#=CDBL(VAL(G$(UF))) 40590 IF G3 THEN FOR G2=1 TO G3:G#=G#*10:NEXT:G#=FIX(G#+.500001#*SGN(G#)) 40600 IF G3 THEN FOR G2=1 TO G3:G#=G#/10:NEXT:ELSE G#=FIX(G#+.500001#*SGN(G#)) 40610 G$(UF)=MID$(STR$(G#),FIX(2+SGN(G#)/2)):RETURN 41000 IF CL<20 THEN RETURN 41010 PRINT:PRINT"THERE ARE MORE FIELDS! HIT ANY KEY TO SEE THE REST:"; 41015 Y$=INKEY$:IF Y$="" THEN 41015:ELSE PRINT CLS$:CL=0:RETURN :PRINT"THERE ARE MORE FIELDS! HIT ANY KEY TO SEE THE REST:"; 41015 Y$=INÿéa˜ ÓPH$(X%)ðÿ–(X%ò€):˜ ÓUH(X$)ðÿ•(X$)ó€ïad‘6bn‘"Enter data............................................Depress E"}bx‘"Look up a record......................................Depress L"Äb‚‘"Scan all records......................................Depress S" cŒ‘"Update a record.......................................Depress U"Rc–‘"Delete a record.......................................Depress D"™c ‘"Exit the program......................................Depress X"àcª‘"Initialize the file...................................Depress I"Ed´Á ,:‘" CURRENT NUMBER OF RECORDS IN FILE=";ÿ«(KP$);:‹ ÿ«(KP$)ñ Ï ‘"PLEASE INITIALIZE!"::¢ ‘�d¹‘"Please depress the key corresponding to your choice."šdè‘ CLS$:�*BEGIN ENTRY¦díFCðFCò°d'� xiºdØ'� `mÄd0*� HqÎdø*� xiØdÀ+� `mâd.� Hqe".UF$ð"":‘:‘"What field number do you want to update? ";}e,.UX$ðÝ:‹ UX$ïð"0" ÷ UX$ñð"9" Ï ‘ UX$;:UF$ðUF$òUX$:‰ ,. :¢ ‹ UX$ñïÿ–( ) Ï ,.::¢ UFðÿ”(UF$)‡eà.� xi‘e¨/� `m›e2� Hq£eðU:�ÛÎe¨a‹ Ö︈ ÷ Öñ Œ Ï © ¸ˆ::¢ ‹ ×ð Ï © ƒf©a‹ ×ð> Ï ‘"YOU DIDN'T INITIALIZE YOUR DATA FILE. DO SO!":‚ Ið Î è:ƒ:Š>f²a‘"ERROR ENCOUNTERED IN LINE";Öˆf·a‹ ×ð Ï ‘"You have input a number too large for the field type.":© ƒÙf¼a‹ Öñ' ÷ Öïè Ï ‘"You have probably made an error in edit specifications."öfÆa‘"ERROR NUMBER IS";×:Ã:� g�e‚ ZZð Î ÿ’(ZZ$)6gšeSPðÿ•(ÿƒ(ZZ$,ZZ,)):X#ðX#òZZô(SPòõSP)žG1ðÚ(G$(UF),"LESS"):‹ G1ï Ï G#ðÿž(óÿ”(G$(UF))òÿ”(G$)):G$(UF)ðÿƒ(ÿ“(G#),ÿŸ(òÿ„(G#)õ)):‰ zžýqHžG1ðÚ(G$(UF),"+"):‹ G1ï Ï G#ðÿž(ÿ”(G$(UF))òÿ”(G$)):G$(UF)ðÿƒ(ÿ“(G#),ÿŸ(òÿ„(G#)õ)):‰ zž\rRžG1ðÚ(G$(UF),"-"):‹ G1ï Ï G#ðÿž(óÿ”(G$(UF))òÿ”(G$)):G$(UF)ðÿƒ(ÿ“(G#),ÿŸ(òÿ„(G#)õ)):‰ zžºr\žG1ðÚ(G$(UF),"*"):‹ G1ï Ï G#ðÿž(ÿ”(G$(UF))ôÿ”(G$)):G$(UF)ðÿƒ(ÿ“(G#),ÿŸ(òÿ„(G#)õ)):‰ zžsfžG1ðÚ(G$(UF),"/"):‹ G1ï Ï G#ðÿž(ÿ”(G$)õÿ”(G$(UF))):G$(UF)ðÿƒ(ÿ“(G#),ÿŸ(òÿ„(G#)õ)):‰ zžsspžG1ðÚ(G$(UF),"MORE"):‹ G1ï Ï G#ðÿž(ÿ”(G$(UF))òÿ”(G$)):G$(UF)ðÿƒ(ÿ“(G#),ÿŸ(òÿ„(G#)õ))‚szž‹ G2ñ Ï Ž˜s„žG#ðÿž(ÿ”(G$(UF)))ÕsŽž‹ G3 Ï ‚ G2ð Î G3:G#ðG#ô :ƒ:G#ðÿŸ(G#ò¸ ÷Æ€ôÿ„(G#))t˜ž‹ G3 Ï ‚ G2ð Î G3:G#ðG#õ :ƒ::¢ G#ðÿŸ(G#ò¸ ÷Æ€ôÿ„(G#))";A;" OR UF<0 THEN PRINT";Q$;"INVALID FIELD.";Q$;":GOTO 11810":‘ #,"11850 IF UF=0 THEN";SL:‘ #,"11860 PRINT CHR$(13);STRING$(63,32);CHR$(13);"l ‘ #,"11865 ON UF GOSUB ";µl‚ TZð Î Aó:‘ #,ÿƒ(ÿ“(D%(TZ)ó ),);",";:ƒ TZ:‘ #,ÿƒ(ÿ“(D%(A)ó ),):‘ #,"11870 IF UF<>";KF;" THEN 11900 ELSE ZZ$=STRING$(F%(";KF;"),32):LSET ZZ$=G$(";KF;8m‹ RSñ Ï ‘ #,"):FIELD #1,";RS;" AS DL$:LSET DL$=STRING$(";RS;",250):PUT 1,RP:LSET KP$=MKI$(-RP):PUT 2,KP:GOSUB 26000:KP=RP"Ñm"‹ RSð Ï ‘ #,"):FIELD #1,255 AS DL$,1 AS DX$:LSET DL$=STRING$(255,250):LSET DX$=CHR$(250):PUT 1,RP:LSET KP$=MKI$(-RP):PUT 2,KP:GOSUB 26000:KP=RP"†n,‘ #,"11999 FOR I=1 TO ";A;":LSET F$(I)=G$(I):NEXT :PUT 1,RP:G$=";Q$;Q$;":GOTO 11200":‘ #,"27010 PRINT CLS$:GOSUB ";D%(KF)ó ;":KF$=STRING$(F%(";KF;"),32):LSET KF$=G$(";KF;")"Ón6‘ #,"27040 KP=KP+1:IF KP>";MS;" OR KP<2 THEN KP=1:REM CIRCULATE AROUND"yo@‘ #,"27050 GET 2,KP:RP=CVI(KP$):IF RP<-1 THEN 27040:ELSE IF RP=0 THEN ERROR 62:ELSE IF RP=-1 THEN PRINT";Q$;"RECORD NOT FOUND.";Q$;":FOR I=1 TO 2000:NEXT I:RUN"ÌoJ‘ #,"27055 GET 1,RP:IF LEFT$(F$(";KF;"),LEN(ZZ$))=ZZ$ THEN RETURN:ELSE 27040"ÔoT:�Û6p^LNðLNò :‘ #,LN;"ZZ$=STRING$(F%(";KF;"),32):LSET ZZ$=G$(";ÿƒ(ÿ“(KF),);"):GOSUB 26000:KP=RP"uph‘ #,"26040 RP=";ÿƒ(ÿ“(MS),);"*RP/9999:RP=FIX(RP):RETURN"BqrLNðLNò :‘ #,LN;"REM*LOOK FOR RECORD SPACE":LNðLNò :‘ #,LN;"GOSUB ";LNò ;":GOTO";LNò<:LNðLNò :‘ #,LN;"KP=KP+1:IF KP>";MS;" OR KP<2 THEN KP=2":‘ #,"11890 KP=KP+1:IF KP>";MS;" OR KP<2 THEN KP=2"Ïq|‘ #,"11895 GET 2,KP:IF CVI(KP$)<>-1 THEN 11890":‘ #,"11896 GET 2,1:RP=CVI(KP$)+1:LSET KP$=MKI$(RP):PUT 2,1:LSET KP$=MKI$(RP):PUT 2,KP"šr†LNðLNò :‘ #,LN;"GET 2,KP:RP=CVI(KP$):IF RP>0 THEN";LNó :LNðLNò :‘ #,LN;"IF RP<-1 THEN RETURN":LNðLNò :‘ #,LN;"IF RP=0 THEN ERROR 62":LNðLNò :‘ #,LN;"RETURN":LNðLNò :‘ #,LN;"FOR K=1 TO ";AÈr�LNðLNò :‘ #,LN;"LSET F$(K)=G$(K):NEXT "hsšLNðLNò :‘ #,LN;"IF RP<-1 THEN PUT 1,ABS(RP):LSET KP$=MKI$(ABS(RP)):PUT 2,KP:ELSE PK=KP:GET 2,1:KP=1+CVI(KP$):LSET KP$=MKI$(KP):PUT 2,PK:PUT 1,KP:PUT 2,1"õs¤‘ CLS$;"Now we are almost done. We need to ask the operator if he is":‘"done with entry or update. You may choose the message you wish."gt®‘"The operator's input will be limited to a single key depression.":‘"I would suggest something of the form:"¶t¸‘"Are you finished with entry? (Y/N) Enter your choice below:":± … TM$õt‘"If the operator is NOT done, what should the reply be?";=uÌND$ðÝ:‹ ND$ð"" Ï Ì::¢ CV$ðND$:� :ND$ðCV$:‘ ND$:‹ ND$ñ" " Ï ÂxuÖ‘"If the operator IS done, what should the reply be?";";Q$;ND$;Q$;" THEN PRINT";Q$;"PLEASE ANSWER ";ND$;" OR ";ID$;Q$;":GOTO";BL:LNðLNò :‘ #,LN;"FOR I=1 TO ";A;":G$(I)=";Q$;Q$;":NEXT :FC=0:PRINT CLS$:UF=0:G$=";Q$;Q$;":GOTO 1000"øwþ‘"Do you want to cut down on remarks in the generated program?":‘"Please answer Y or N: "; xCV$ðÝ:‹ CV$ð"" Ï ::¢ � :‘ CV$mx‹ CV$ð"Y" Ï ¿"I",,"C451MIN.LIB"::¢ ‹ CV$ð"N" Ï ¿"I",,"C451.LIB"::¢ þ¥x‘ CLS$;"WAIT A MOMENT WHILE I FINISH YOUR PROGRAM."·x&‹ ÿ¯() Ï lÅx0± … #,A$ñx:‹ S3%ñ ÷ ÿ”(A$)ï/u ÷ ÿ”(A$)ñy Ï &yD‹ S4%ñ ÷ ÿ”(A$)ïy ÷ ÿ”(A$)ñœ| Ï &NyN‹ S1%ñ ÷ ÿ”(A$)ïð@� ÷ ÿ”(A$)ñ4� Ï &yX‹ S2%ñ ÷ ÿ”(A$)ïð4� ÷ ÿ”(A$)ñ( � Ï &‘yb‘ #,A$:‰ &—ylÃXzv‘ CLS$;"Your program has been written and saved on the specified drive.":‘"You may now load it and run it, if you wish. Remember, your":‘"data file does NOT exist until you initialize it!"‘z€‘"Thanks for running the CREATOR!":‚ Ið Î Ð:ƒ I:”—z¼�ÃzÆ‘"ERROR NUMBER";×;"AT LINE";Ö:• ¨ ‰ {Б"REMEMBER, ALL FIELDS ARE STRINGS WITHIN THE ARRAY G$()."Ã{Ú‘"TO PERFORM ARITHMETIC ON A FIELD, IT IS NECESSARY TO TAKE ITS":‘"VALUE FIRST, WITH THE VAL COMMAND. FOR EXAMPLE, TO PRINT THE":‘"SUM OF FIELDS 1,2, AND 3 YOU WOULD TYPE THE COMMAND LINE"ë{ä‘"VAL(G$(1))+VAL(G$(2))+VAL(G$(3))"™|î‘:‘"Now, type in a command line which will tell me what operations":‘"I should perform. Please don't type more than 240 characters.":‘"HIT THE RETURN WHEN YOU ARE DONE."ù|ø‘:‘"COMMAND LINE:";:± … CV$:‹ ÿ’(CV$)ïð Ï ‘"TOO LONG! TRY AGAIN!":‰ ø::¢ ‹ ÿ’(CV$)ñ Ï Ž7}Kð:JKð:Jð:‚ Ið Î ÿ’(CV$):‹ ÿƒ(CV$,I,)ðQ$ Ï Jðÿ†(Jó)E} ‹ J Ï  ‚}‹ ÿƒ(CV$,I,)ð")" Ï KðKò::¢ ‹ ÿƒ(CV$,I,)ð"(" Ï JKðJKòË} ƒ I:‹ JKñïK Ï ‘"MISMATCHED PARENTHESES SOMEWHERE. PLEASE TRY AGAIN."~*‹ J Ï ‘"MISMATCHED QUOTATION MARKS (";Q$;") IN YOUR COMMAND. PLEASE TRY AGAIN."9~4‹ Jï ø (JKñïK) Ï øp~>‘"What title should I use for this data:";:± … TI$§~H‹ Ú(TI$,Q$) Ï ‘"NO QUOTATION MARKS ALLOWED.":‰ >RJLðJLò :‘ #,JL;"CL=CL+1:GOSUB 41000":‘ #,JLò;"PRINT CHR$(124);";Q$;TI$;Q$;";CHR$(124);"Ç\‘"If this field is numeric, you may use a formatted print.":‘"If it is not, or you do not wish to print it in a formatted":‘"way, you need not. DO YOU WISH TO USE A FORMATTED PRINT (Y/N)"ófTI$ðÝ:‹ TI$ð"" Ï f::¢ ‹ TI$ð"N" Ï Ê€p‹ TI$ñï"Y" Ï \�€z± …"Number of places to the left of the decimal point=";NL$:‹ ÿ”(NL$)ñ ø ÿ”(NL$)ï Ï ‘"Illegal (0-16 only).":‰ z&�„± …"Number of places to the right of the decimal point";NR$:‹ ÿ”(NR$)ñ ø ÿ”(NL$)òÿ”(NR$)ï Ï ‘"Illegal number of places or illegal total places (0-16).":‰ „P�Ž‘"Do you want to use commas (Y/N): ";ˆ�˜NC$ðÝ:‹ NC$ð"" Ï ˜::¢ ‹ NC$ñï"N" ÷ NC$ñï"Y" Ï ˜’�¢‘ NC$Ì�¬TI$ð"USING"òQ$òØ(ÿ”(NL$),"#"):‹ NC$ð"Y" Ï TI$ðTI$ò","ê�¶‹ ÿ”(NR$)ï Ï TI$ðTI$ò"."‚ÀTI$ðTI$òØ(ÿ”(NR$),"#")òQ$ò";":CV$ðTI$òCV$3‚Ê‘ #,JLò;"PRINT ";CV$~‚Ô‘"Your commands have been accepted. Ready for the next command.":‰ î#")òQ$ò";":CV$ðTI$òCV$3‚Ê‘ #,JLò;"PRINT ";CV$~‚Ô‘"Yoÿòa:�ÛCREATOR; WRITTEN ON 1/16/80 BY BRUCE W. TONKIN.b:�ÛADAPTED FOR CP/M AND MICROSOFT BASIC 5.01 ON 5/11/80Øb:�ÛFOR 4.51 ON 3/18/81, AND FOR MODEL III ON 2/20/83, FOR CP/M AND MBASIC 4.51/5.2+ AGAIN ON 3/23/83; FOR 48K CP/M ON 7/2/83 WITH OVERLAYS; THIS IS THE FIRST OVERLAYjc:�ÛTHIS IS PUBLIC DOMAIN SOFTWARE AND MAY NOT BE SOLD OR INCORPORATED IN ANY COMMERCIAL SOFTWARE WITHOUT THE EXPRESS PERMISSION OF THE AUTHORrc:�Û|c‰ ”•cFXð:‹ ÿ’(CV$)ñ Ï Žðc‚ IIð Î ÿ’(CV$):CV%ðÿ•(ÿƒ(CV$,II,)):‹ CV%ð" ÷ FXð Ï FXð::¢ ‹ CV%ð" ÷ FXð Ï FXðd(‹ CV%ïZ ÷ FXð Ï CV%ðCV% ÷ _3d2ÿƒ(CV$,II,)ðÿ–(CV%):ƒ II:Ž|d”‘ CLS$;"Which field is the key field? Input the field number:";:… KFìdž‘ #,"35005 GET 2,1:KP=CVI(KP$):FOR K=1 TO KP:RP=K:GET 1,K":‘ #,"35010 IF F$(";KF;")>CHR$(249) THEN 35990"ve¨‘ #,"35000 PRINT CLS$:INPUT";Q$;"Field number to scan (1-";A;")";Q$;";NS:IF NS<1 OR NS>";A;" THEN 35000":‘ #,"35990 NEXT K:GOTO";SL±e²LNðè:‚ QRð Î KFó:FTðFTòÿ”(F$(QR)):ƒ QR:� ¼:‰ *‚f¼‘ CLS$;"Now we must describe the input prompts the operator will see,":‘"the edits to be performed, and the kind of data for each field.":‘"To do this, we will ask a series of questions about each field."gÆ‘"To the question KIND OF DATA, the possible responses are:":‘"N..............numeric data, not packed, stored as characters."ŒgБ"PH..............packed half-precision, stored as one character.":‘"PI............packed integer data, stored as two characters."hÚ‘"PS........packed single precision data, stored as 4 characters.":‘"PD........packed double precision data, stored as 8 characters." hä‘"C.........................character data, stored as characters.":‘"To the PROMPT question, type the message the operator will see."riî‘"To the BAD INPUT IF question, type as many edits as you wish of":‘"the form: >999 <";Q$;"A";Q$;" NOT NUMERIC NO ENTRY":‘"LENGTH>9 NOT ALPHA CONTAINS";Q$;"Z";Q$;" >=4 <>6"¸iø‘"Note the quotes around alpha edits. Depress any key for more:";ÑiPZ$ðÝ:‹ PZ$ð"" Ï žj ‘ CLS$;"To the question ERROR MESSAGE, type the message the operator":‘"will see if that error is made. You may signal completion of":‘"edits for any field by just depressing the enter key. To repeat"äj‘"these directions, type HELP. NOW DEPRESS ANY KEY TO CONTINUE:";k PZ$ðÝ:‹ PZ$ð"" Ï  ::¢ ‘:ŽJk*‚ Ið Î A:I$ðÿƒ(ÿ“(I),):‘"FIELD #";I;" LENGTH=";:Lðÿ”(F$(I)):‘ L�k4P$ð"":‘"PROMPT:";:± … P$:‹ P$ð"HELP" Ï � ¼:‰ 4÷k>…"Should the prompt and reply be on the same line (Y/N):";NY$:CV$ðNY$:� :NY$ðCV$:‹ CV$ð"Y" Ï NY$ð";"::¢ NY$ð""ulHK$ð"":‘"KIND OF DATA:";:‹ Lñï ÷ Lñï ÷ Lñï ÷ Lñï Ï ‘"C":K$ð"C"::¢ ± … K$:CV$ðK$:� :K$ðCV$:‹ K$ð"HELP" Ï � ¼:‰ H¹lR‹ K$ð"PH" ø K$ð"PI" ø K$ð"PS" ø K$ð"PD" ø K$ð"C" ø K$ð"N" Ï fúl\‘"INVALID DATA TYPE: USE PH, PI, PS, PD, N OR C ONLY!":‰ Hbmf‹ (K$ð"PH" ÷ Lð) ø (K$ð"PI" ÷ Lð) ø (K$ð"PS" ÷ Lð) ø (K$ð"PD" ÷ Lð) ø (K$ð"N") ø (K$ð"C") Ï z“mp‘"INCORRECT LENGTH FOR VARIABLE TYPE!":‰ HnzLNðLNò :‘ #,LN;"PRINT";Q$;P$;Q$;NY$:BLðLN:‹ K$ñï"C" Ï ‘ #,BLò;"IF UF<>0 AND G$=";Q$;Q$;" THEN G$=G$(";I$;")"ƒn„LNðLNò :‘ #,LN;"LINE INPUT G$(";I$;")";:D%(I)ðLN:‹ OO$ð"N" Ï ‘ #," "::¢ ‘ #,":IF G$(";I$;")=";Q$;OT$;Q$;" THEN";SL£nŽ‹ K$ñï"PI" ÷ K$ñï"PH" Ï ¢Ðn˜‘ #,LNò;"IF UF THEN GOSUB 40000":S1%ðån¢‹ K$ñï"PS" Ï ¶o¬‘ #,LNò;"IF UF THEN GOSUB 40500":S2%ð'o¶‹ K$ñï"PD" Ï ÊToÀ‘ #,LNò;"IF UF THEN GOSUB 40500":S2%ðioÊ‹ K$ñï"PI" Ï ÞïoÔLNðLNò :‘ #,LN;"IF ABS(VAL(G$(";I$;")))>32767 THEN PRINT";Q$;"NUMBER OUT OF RANGE. MUST BE FROM -32767 TO 32767.";Q$;":GOTO";BLpÞ‹ K$ñï"PH" Ï ò„pèLNðLNò :‘ #,LN;"IF ABS(VAL(G$(";I$;")))>127 THEN PRINT";Q$;"NUMBER OUT OF RANGE. MUST BE FROM -127 TO 127.";Q$;":GOTO";BLØpò‹ K$ð"PI" ø K$ð"PH" Ï LNðLNò :‘ #,LN;"IF G$(";I$;")=";Q$;"0";Q$;" THEN";LNòøpü‹ K$ñï"PI" ÷ K$ñï"PH" Ï nqLNðLNò :‘ #,LN;"IF INT(VAL(G$(";I$;")))<>VAL(G$(";I$;")) THEN PRINT";Q$;"MUST BE A WHOLE NUMBER.";Q$;":GOTO";BL¸qBI$ð"":‘"Bad input if:";:± … BI$:CV$ðBI$:� :BI$ðCV$:‹ BI$ð"" Ï ìëq‹ Ú(BI$,"LENGHT")ï Ï ‘"MISSPELLED WORD":‰  r$‹ BI$ð"HELP" Ï � ¼:‰ Dr.‘"Error message:";:± … EM$:‹ EM$ð"HELP" Ï � ¼:‰ . s8‘"Is this a fatal error or a non-fatal error? A fatal error":‘"simply means the operator must try inputting this field until":‘"the input is correct; a non fatal error means the error message"´s=‘"will be printed as a warning, but the (possibly) erroneous":‘"input will be accepted. Depress F if the error is FATAL, or any":‘"other key, if not a fatal error: ";tBFE$ðÝ:‹ FE$ð"" Ï B::¢ CV$ðFE$:� :FE$ðCV$:‘ FE$:‹ FE$ð"F" Ï FE$ð":GOTO"òÿ“(BL)::¢ FE$ð" "?tL‹ Ú(BI$,"NOT NUMERIC") Ï S3%ð:‰ jƒtV‹ Ú(BI$,"NOT ALPHA") Ï S4%ð:‰ t :¢ ‹ Ú(BI$,"NO ENTRY") Ï ~Ãt`‹ Ú(BI$,"CONTAINS") Ï ˆ :¢ ‹ Ú(BI$,"LENGTH") Ï ° :¢ ºujLNðLNò :‘ #,LN;"CD$=G$(";I$;"):E=0:GOSUB 30000:IF E=1 THEN PRINT";Q$;EM$;Q$;FE$:‰ {utLNðLNò :‘ #,LN;"CD$=G$(";I$;"):E=0:GOSUB 31000:IF E=1 THEN PRINT";Q$;EM$;Q$;FE$:‰ Æu~LNðLNò :‘ #,LN;"IF LEN(G$(";I$;"))=0 THEN PRINT";Q$;EM$;Q$;FE$:‰ üuˆFHðÚ(BI$,Q$):‹ FHñ Ï ‘"YOU FORGOT QUOTES.":‰  v’‹ FHñ Ï ¦€vœFH$ðÿƒ(BI$,FHò,):LNðLNò :‘ #,LN;"IF INSTR(G$(";I$;"),";Q$;FH$;Q$;")>0 THEN PRINT";Q$;EM$;Q$;FE$:FHð:‰ Åv¦‘"SYNTAX ERROR. CONTAINS should not be set off by quotes.":‰ 6w°FHðÚ(BI$,"LENGTH"):LNðLNò :‘ #,LN;"IF LEN(G$(";I$;"))";ÿƒ(BI$,FHò);" THEN PRINT";Q$;EM$;Q$;FE$:FHð:‰ twº‹ Ú(BI$,"<")ñ ÷ Ú(BI$,">")ñ ÷ Ú(BI$,"=")ñ Ï Ä :¢ ΧwÄ‘"SYNTAX ERROR. Repeat command, please.":‰ ÃwÎCðÚ(BI$,Q$):‹ Cñ Ï âxØLNðLNò :‘ #,LN;"IF G$(";I$;")";BI$;" THEN PRINT";Q$;EM$;Q$;FE$:FHð:‰ hxâLNðLNò :‘ #,LN;"IF VAL(G$(";I$;"))";BI$;" THEN PRINT";Q$;EM$;Q$;FE$:FHð:‰ ¬xìLNðLNò :‹ K$ð"PI" Ï ‘ #,LN;"G$(";I$;")=MKI$(VAL(G$(";I$;")))"èxö‹ K$ð"PH" Ï ‘ #,LN;"G$(";I$;")=FNPH$(VAL(G$(";I$;")))"9y‹ K$ð"PI" Ï ‘ #,|.òI;"IF UF<>";I$;" THEN G$(";I$;")=MKI$(VAL(G$(";I$;")))"‹y ‹ K$ð"PH" Ï ‘ #,|.òI;"IF UF<>";I$;" THEN G$(";I$;")=FNPH$(VAL(G$(";I$;")))"Êy‹ K$ð"PI" Ï ‘ #,`mòRL;"G$(";I$;")=STR$(CVI(F$(";I$;")))" z‹ K$ð"PH" Ï ‘ #,`mòRL;"G$(";I$;")=STR$(FNUH(F$(";I$;")))"Ez(‹ K$ð"PS" Ï ‘ #,LN;"G$(";I$;")=MKS$(VAL(G$(";I$;")))"–z2‹ K$ð"PS" Ï ‘ #,|.òI;"IF UF<>";I$;" THEN G$(";I$;")=MKS$(VAL(G$(";I$;")))"Õz<‹ K$ð"PS" Ï ‘ #,`mòRL;"G$(";I$;")=STR$(CVS(F$(";I$;")))"{F‹ K$ð"PD" Ï ‘ #,LN;"G$(";I$;")=MKD$(VAL(G$(";I$;")))"a{P‹ K$ð"PD" Ï ‘ #,|.òI;"IF UF<>";I$;" THEN G$(";I$;")=MKD$(VAL(G$(";I$;")))" {Z‹ K$ð"PD" Ï ‘ #,`mòRL;"G$(";I$;")=STR$(CVD(F$(";I$;")))"Ü{d‹ K$ð"N" ø K$ð"C" Ï ‘ #,RLò`m;"G$(";I$;")=F$(";I$;")"|nRLðRLò :LNðLNò :‘ #,LN;"RETURN":ƒ:¹"CREATOR.OVL", ,ALL0|Š:�ÛERROR HANDLER\|Æ‘"ERROR NUMBER";×;"AT LINE";Ö:• ¨ ‰ RLðRLò :LNðLNò :‘ #,LN;"RETURN":ƒ:¹"CREATOR.OVL", ,ALL0|Š:�ÛERROR HANDLER\|Æ‘"ERRORÿÆa ® AóZÛa‚ Ið Î :‘:ƒ Ib‘"CREATOR AND REPORTOR ARE TRADEMARKS OF T.N.T. SOFTWARE, INC."bb(‘"34069 HAINESVILLE ROAD, ROUND LAKE IL 60073. THESE PROGRAMS"¦b2‘"ARE NOT TO BE SOLD WITHOUT THE EXPRESS WRITTEN PERMISSION OF"áb<‘"T.N.T. SOFTWARE, INC. VIOLATORS WILL BE PROSECUTED!"'cF‘"IF YOU GOT THIS PROGRAM FROM A FRIEND, AND WANT DOCUMENTATION,"jcP‘"SEND $10, + $1 POSTAGE & HANDLING, TO T.N.T. SOFTWARE, INC."±cZ‘"A NEWSLETTER IS AVAILABLE FOR $10 PER YEAR IN THE U.S., CANADA,"ùcd‘"AND MEXICO (PUBLISHED QUARTERLY). WRITE AND ASK FOR OUR CATALOG."ÿcn‘8dx‘" CREATOR AND REPORTOR MENU ":‘:‘ad‚‘" You have the following choices: "‘dŒ‘" 1. Write a program using the CREATOR."Éd–‘" 2. Write a report program using the REPORTOR."ñd ‘" 3. Run a program or a report."eª‘" 4. Sort a data file."=e´‘" 5. Create or re-create a key file."ge¾‘" 6. Quit, and exit to BASIC.":‘:‘›eÈ‘" Please depress the number of your choice: ";©eÒAN$ð…$()ÊeÜANðÿ”(AN$):‹ ANñ ø ANï Ï Šfæ‹ ANð Ï ‘ ÿ–( );Ø(<, );ÿ–( );"LOADING THE CREATOR.":Š"CREATOR.BAS"dfð‹ ANð Ï ‘ ÿ–( );Ø(<, );ÿ–( );"LOADING THE REPORTOR.":Š"REPORTOR.BAS"¹fú‹ ANð Ï ‘ ÿ–( );Ø(<, );ÿ–( );"EXITING TO OPERATING SYSTEM FOR CHEAPSORT.":½ýf‹ ANð Ï ‘ ÿ–( );Ø(<, );ÿ–( );"LOADING REKEY.":Š"REKEY.BAS" g‹ ANð Ï ”Vg‘ ÿ–( );Ø(<, );ÿ–( );:‘"What's the name of the program to run: ";ug"± … F$:‘"LOADING ";F$:Š F$BAS" g‹ ANð Ï ”Vg‘ ÿ–( );Ø(<, );ÿ–( );:‘"What's the name10 PRINT"Should this report be on the screen (S), printer (P), or both":PRINT"screen and printer (B)";:INPUT PD$:IF INSTR("SsPpBb",PD$)<1 THEN 10 11 PD$=CHR$(ASC(PD$) AND 95) 15 PRINT"What drive is the data file on (A-P):";:LINE INPUT DR$:IF DR$<"A" OR DR$>"P" THEN 15 17 DF$=DR$+":"+DF$ 18 PRINT"OK, depress any key when the data file is on that drive:"; 19 A$=INKEY$:IF A$="" THEN 19 20 PRINT:PRINT"Are you going to read an index file for a sorted report (Y/N)";:INPUT SR$ 21 IF INSTR("YyNn",SR$)<1 THEN 20: ELSE SR$=CHR$(ASC(SR$) AND 95) 22 IF SR$="N" THEN 29 23 PRINT"Please give me the complete name of your index file. For":PRINT"example, A:MYFILE.INX ";:LINE INPUT SR$ 29 ' 35 IF PD$="S" OR PD$="B" THEN PRINT CLS$ 36 IF SR$<>"N" THEN OPEN"I",2,SR$ 45 DIM CF$(50),T#(50):GOSUB 40000:'DIMENSIONING THE MATRICES WE WILL USE 65 'FOLLOWING ARE THE COLUMN HEADINGS 19990 'PRINTING TOTALS SECTION 30000 'FIELDING THE FILE 30800 TT=0 30810 FIELD#1,(TT) AS DY$,(FF(IX)) AS F$(IX) 30820 TT=TT+FF(IX):NEXT:RETURN 30990 'BEGIN PRINTING THE COLUMN HEADINGS 31000 IF PD$<>"S" THEN LPRINT 31005 IF PD$<>"P" THEN PRINT 31010 READ T:OF%=0:IF MID$(M$,J,1)="M" THEN OF%=LEN(CF$(J))-LEN(H$(J)) 31012 IF PD$<>"P" THEN PRINT TAB(T+OF%);H$(J); 31015 IF PD$<>"S" THEN LPRINT TAB(T+OF%);H$(J); 31020 NEXT:RESTORE 31030 IF PD$<>"P" THEN PRINT:PRINT 31040 IF PD$<>"S" THEN LPRINT:LPRINT 31050 RETURN 31060 'THESE ARE THE TAB SETTINGS 40000 'COLUMN PRINT FORMATS 40100 RETURN 40 IF PD$<>"S" THEN LPRINT:LPRINT 31050 RÿÂa Ìb‘"This is the RE-KEY utility program for CREATOR data files.":‘:‘@b‘"This program will allow you to do the following:"eb(‘"1. Repair a damaged key file."§b2‘"2. Create a new key file for a field not previously a key."c<‘"3. Create added keys for records you may have appended to an":‘" existing data file."McF‘:‘"You must be able to tell me a few things about your data file."dP‘"For example, the record length, the beginning position and":‘"length of the key field, and the maximum number of records":‘"allowed in the file. Of course, you must know the name of the"HdZ‘"data file, as well. DEPRESS ANY KEY TO CONTINUE: ";addAN$ðÝ:‹ AN$ð"" Ï d5en‘"You may not use a packed field as a key field. Record length":‘"can be up to 256, key length up to 255.":‘"When I ask for file names, please give the complete file name,":‘"including the . type and drive!"iex‘:‘"Now give me the complete DATA file name: ";¥e‚± … DF$:‹ DF$ñ"A" ø ÿ’(DF$)ï Ï ‘"Illegal name!":‰ xfŒ‘"Now tell me the maximum number of records allowed in this":‘"file, per data disk: ";Lf–± … MR$:‹ ÿ”(MR$)ñ ø ÿ”(MR$)ïÿ Ï ‘"Illegal number of records!":‰ Œ—f ‘"What is the record length of each record in the data file:";:± … RL$×fª‹ ÿ”(RL$)ï ø ÿ”(RL$)ñ Ï ‘"Illegal record length!":‰  g´‘"What is the name of the proposed KEY file? ";:± … KF$Pg¾‹ KF$ñ"A" ø ÿ’(KF$)ï Ï ‘"Illegal key file name!":‰ ´ÆgÈ‘"What is the beginning position of the key field in the data":‘"record? THIS IS NOT USUALLY THE FIELD NUMBER! ";2hÒ± … ST$:‹ ÿ”(ST$)ñ ø ÿ”(ST$)ïÿ”(RL$) Ï ‘"Illegal starting position: should be from 1 to";ÿ”(RL$):‰ ȲhÜ‘"What is the length of the key field: ";:± … KL$:‹ ÿ”(KL$)ñ ø ÿ”(KL$)ïÿ ø ÿ”(KL$)ïÿ”(RL$) Ï ‘"Illegal key length!":‰ ÜÉhæ¿"R",,DF$,ÿ”(RL$)Úhð¿"R",,KF$,iúÀ #,ÿ”(ST$)ó AS D$,ÿ”(KL$) AS K$#iRL%ðÿ”(RL$):‹ RL%ïÿ Ï RL%ðÿ6iÀ #,RL% AS B$FiMR%ðÿ”(MR$)�i"† R%(MR%):‚ I%ð Î MR%:R%(I%)ðó:ƒ I%:I%ð:KL%ðÿ”(KL$)¿i,É B$ðØ(RL%,ú): ,:‘"RE-KEYING THROUGH RECORD NUMBER ";íi6I%ðI%ò:Á ,I%:F%ðKL%:‹ B$ðØ(RL%,) Ï ¤÷i@‘ I%; jT‹ K$ñÿ–(ú) Ï †j^RPðMSôÿˆ=jhRPðRPò:‹ RPïMR% ø RPñ Ï RPðTjr‹ R%(RP)ñïó Ï hij|R%(RP)ðóI%:‰ 6�j†ZZ$ðÿ�(K$,F%):� ̤j�RPðRPò:‹ RPïMR% ø RPñ Ï RPðÍjš‹ R%(RP)ðó Ï R%(RP)ðI%:‰ 6::¢ �ôj¤à :‘:‘"WRITING KEY POINTERS NOW."k®À #, AS KP$Žr4AðAò:‰ ä¤r>XF$ð"GOSUB 30000"ÊrHAðAó:‘ #,"30805 FOR IX=1 TO ";AørR‚ Ið Î A:‘ #,0uòI;"FF(";I;")=";F%(I):ƒVs„‘ #,"50 DIM F$(";A;"),FF(";A;"),P(";A;"),P$(";A;"),C#(50),P#(";A;"),C(50),C$(50),H$(50)"{sŽ‘ #,"60 ";XF$:XF$ð"GOSUB 30800"ús¢‘ CLS$;"What are your column headings to be? Please enter a legend":‘"for each column you intend to use. Type 999 to end."t¬† C%(2):‚ Jð Î 2:C%(J)ðJ:ƒ)t¶† C$(2)1tÀBð�tÔ‘"Column number";B;:± … C$(B):‹ C$(B)ð"999" Ï C$(B)ð"":BðBó::¢ BðBò:‰ ÔâtÞJð:‚ JJð Î Bó:‹ ÿ’(C$(C%(JJ)))ñÿ’(C$(C%(JJò))) Ï JðC%(JJ):C%(JJ)ðC%(JJò):C%(JJò)ðJ:Jðûtèƒ:‹ J Ï Þ::¢ LNðFEuò‚ Ið Î B:I$ðÿƒ(ÿ“(I),):‘ #,LN;"H$(";I$;")=";Q$;C$(I);Q$:LNðLNò :ƒmuüM$ðØ(2, ):¹"REPORTOR.OVL",,ALLyu† T(2)ðu‘ CLS$;"Now we need to set the tabs for your";B;"columns. Indicate":‘"the tab setting as a number, from 1 to 255."rv‚ Ið Î B:‘"Tab setting for column number";I;":";:± … F1$:T(I)ðÿ”(F1$):‹ T(I)ïÿ ø T(I)ñ Ï ‘"NOT A VALID TAB SETTING!":IðIóxv.ƒ�vB‘ #,"31070 DATA ";»vL‚ Ið Î Bó:‘ #,ÿƒ(ÿ“(T(I)),);",";:ƒÓvj‘ #,ÿƒ(ÿ“(T(B)),) wtLNðLNò :‘ #,LN;"PG=1:'INITIALIZE THE PAGE COUNTER"Fw~‘ #,LNò;"'NOW FOLLOWS THE RECORD RETRIEVAL SECTION"uwˆ‘"Do you want the pages numbered (Y/N)? ";Ïw’CV$ðÝ:‹ CV$ð"" Ï ’::¢ � <:‘ CV$:PG$ðCV$:‹ PG$ñï"Y" ÷ PG$ñï"N" Ï ‘"ILLEGAL!":‰ ˆ÷wœLNðLNò :‘ #,LN;"FOR I=1 TO 32767"-x¦‘ #,LNò;"IF SR$<>";Q$;"N";Q$;" THEN INPUT #2,I"@x°LNðLNò :KZðLN°xº‹ RLñï Ï ‘ #,LNò;"IF ZU$=STRING$(";RL;",0) THEN 20000"::¢ ‘ #,LNò;"IF ZU$=STRING$(255,0) THEN 20000"ÛxÄLNðLNò :‘ #,LN;"ON ERROR GOTO 20000"y΋ PG$ð"Y" Ï ‘"How many lines per page? ";:± … F1$:LPðÿ”(F1$)óiyØ‘ CLS$:Jð:‚ Ið Î A:‹ F%(I)ð ø F%(I)ð ø F%(I)ð ø F%(I)ð Ï Jð:IðA“yâƒ:‹ Jð Ï ‚ Ið Î A:D$(I)ð"C":ƒ:‰ Ü[zì‘"You have some fields which might be packed data. Please tell":‘"me if they are PH (packed half precision), packed integer (PI),":‘"packed single precision (PS) or packed double precision (PD)."§z‚ Ið Î A:‹ F%(I)ñï ÷ F%(I)ñï ÷ F%(I)ñï ÷ F%(I)ñï Ï D$(I)ð"C":‰ d{‘"Field number";I;":Length is";F%(I);": Data type is: ";:… CV$:� <:D$(I)ðCV$:LðF%(I)z{2‹ D$(I)ñï"N" ÷ D$(I)ñï"C" ÷ D$(I)ñï"PH" ÷ D$(I)ñï"PI" ÷ D$(I)ñï"PS" ÷ D$(I)ñï"PD" Ï ‘"ILLEGAL VARIABLE TYPE!":‰ Ð{<‹ (CV$ð"PH" ÷ Lð) ø (CV$ð"PI" ÷ Lð) ø (CV$ð"PS" ÷ Lð) ø (CV$ð"PD" ÷ Lð) Ï _î{F‹ CV$ð"N" ø CV$ð"C" Ï _"|Z‘"ILLEGAL LENGTH FOR THIS VARIABLE TYPE!":‰ B|_‘"Is this correct (Y/N)? ";j|`CV$ðÝ:‹ CV$ð"" Ï `::¢ � <:‘ CV$’|a‹ CV$ð"N" Ï ::¢ ‹ CV$ñï"Y" Ï _˜|dƒµ|Ü‚ Ið Î A:I$ðÿƒ(ÿ“(I),)ü|æLNðLNò :‹ D$(I)ð"C" ø D$(I)ð"N" Ï ‘ #,LN;"P$(";I$;")=F$(";I$;")"8}ð‹ D$(I)ð"PH" Ï ‘ #,LN;"P#(";I$;")=ASC(F$(";I$;"))-128"p}ú‹ D$(I)ð"PI" Ï ‘ #,LN;"P#(";I$;")=CVI(F$(";I$;"))"¨}‹ D$(I)ð"PS" Ï ‘ #,LN;"P#(";I$;")=CVS(F$(";I$;"))"à}‹ D$(I)ð"PD" Ï ‘ #,LN;"P#(";I$;")=CVD(F$(";I$;"))"ü}ƒ:¹"REPORTOR.OVL",,ALL~O Ã:�l~P ‹ ×ð~ ÷ Öð¤ Ï ‘"PROGRAM ALREADY EXISTS. DEPRESS C TO WRITE OVER IT, ANY OTHER":‘"TO QUIT"::¢ n ›~Z Q$ðÝ:‹ Q$ð"" Ï Z ::¢ ‹ Q$ð"C" Ï Ã :© ®»~d ‹ Q$ð"c" Ï Ã :© ®::¢ Ã:�Dn ‹ ×ð4 Ï ‘"YOU ENTERED BASIC WITHOUT SPECIFYING ANY FILES.":‘"YOU NEED AT LEAST TWO. GO BACK TO CP/M AND ENTER BASIC CORRECTLY.":Ã:�ap ‹ ×ð5 ÷ Öð¤ Ï Ã:© ®¡s ‘"ERROR NUMBER";×;"AT LINE";Ö;":PROGRAM ABORTED.":• ¨ ‰ ©x Ã:�·:�ÛREPLACE A STRING WITH ANOTHERúˆ‹ F1%ð Ï SX$ðF1$òÿƒ(SX$,ÿ’(C$(J))ò):Ž,€’SX$ðÿ�(SX$,F1%ó)òF1$òÿƒ(SX$,F1%òÿ’(C$(J))):ŽÛREPLACE A Sÿóa:�ÛREPORTOR; WRITTEN ON 1/16/80 BY BRUCE W. TONKIN/b:�ÛADAPTED FOR CP/M AND MICROSOFT BASIC 5.01 ON 5/11/80Ób:�ÛFOR 4.51 ON 3/18/81, AND FOR MODEL III ON 2/20/83, FOR CP/M AND MBASIC 4.51/5.2+ AGAIN ON 3/23/83; FOR 48K CP/M WITH OVERLAYS ON 7/2/83; THIS IS THE OVERLAYec#:�ÛTHIS IS PUBLIC DOMAIN SOFTWARE AND MAY NOT BE SOLD OR INCORPORATED IN ANY COMMERCIAL SOFTWARE WITHOUT THE EXPRESS PERMISSION OF THE AUTHORoc2‰ "ˆc<FXð:‹ ÿ’(CV$)ñ Ï ŽÉcF‚ IIð Î ÿ’(CV$):CV%ðÿ•(ÿƒ(CV$,II,)):‹ CV%ð" Ï FXðÿ†(FXó)dP‹ FXð ÷ CV%ïZ Ï CV%ðCV% ÷ _:ÿƒ(CV$,II,)ðÿ–(CV%) dZƒ:ŽŠd"‘ CLS$;"Now we must describe what goes into the columns of the report.":‘"You should write sentences of the following form:"¦d,‘"Column name=FIELD(9)"Ãd6‘"Column name=FIELD$(5)" e@‘"IF Column.name.1=Column.name.2 THEN Column.name.3=";Q$;"SAME";Q$3eJ‘"V1=Name1/Name2:V2=100*V1:Name3=V2"aeT‘"IF Name1=";Q$;"OVERDUE";Q$;" THEN SKIP"}e^‘"IF Name2<1 THEN SKIP"bfh‘"Please note that you should use the HEADING NAMES as your":‘"variables. Variables beginning with the letter V are work":‘"variables. You may issue a number of commands on one line, if":‘"you separate them with a colon (:)"öfr‘"Also, note the quotation marks around string constants,":‘"and the $ sign used for string fields.":‘"DEPRESS ANY KEY FOR MORE INFORMATION: ";g|CV$ðÝ:‹ CV$ð"" Ï |Bg†‘:‘"YOU MAY USE THE FOLLOWING VARIABLE NAMES:"rg�‚ Ið Î B:‘ C$(I),:ƒ:‘:‘"TYPE 999 TO EXIT."“gš‘"READY FOR YOUR COMMAND: ";³g¤± … SX$:‹ ÿ”(SX$)ðç Ï Ég®‚ Ið Î B:JðC%(I)ìg¸F1%ðÚ(SX$,C$(J)):‹ F1%ñ Ï þ8hÂJ$ðÿƒ(ÿ“(J),):I$ðÿƒ(ÿ“(I),):‹ ÿƒ(M$,J,)ð"S" Ï F1$ð"C$("::¢ F1$ð"C#("WhÌF1$ðF1$òJ$ò")":� ˆ:‰ ¸]hþƒ‚hF1%ðÚ(SX$,"FIELD"):‹ F1%ñ Ï :¶h‹ F1%ð Ï ‘"FIELDS CANNOT BE RE-DEFINED.":‰ š/iF2%ðÚ(F1%,SX$,"("):F3%ðÚ(F1%,SX$,"$"):F4%ðÚ(F1%,SX$,"#"):‹ (F4%ð ø F4%ïF2%) ÷ (F3%ð ø F3%ïF2%) Ï SY$ð"#"::¢ SY$ð""aiSX$ðÿ�(SX$,F1%ó)ò"P"òSY$òÿƒ(SX$,F1%ò):‰ ªi:‘"I interpret your command to be:":‘ SX$:‘"Is this correct (Y/N)? ";èiDCV$ðÝ:‹ CV$ð"" Ï D::¢ � <:‘ CV$:‹ Ú("YN",CV$)ñ Ï :jN‹ CV$ð"N" Ï ‘"INSTRUCTION DELETED.":‰ šdjXF1%ðÚ(SX$,"SKIP"):‹ F1%ï Ï SX$ðÿ�(SX$,F1%ó)ò"19000"òÿƒ(SX$,F1%ò):‰ XƒjbLNðLNò :‘ #,LN;SX$:‰ †ÂjLNðLNò :‘ #,LN;"FOR J=1 TO ";B;":T#(J)=T#(J)+C#(J):NEXT"Ìj‰  –k‘ CLS$;"All right. Now we need to define the column print formats.":‘"I will ask you to tell me if a column will contain letters or":‘"numbers. If a column contains numbers, but those numbers come"Vl ‘"from an unpacked field, and are not used as numbers (for ":‘"example, phone numbers or ID numbers), then that column should":‘"be formatted as if it were LETTERS. On the other hand, a "m‘"column containing the result of a computation, or a column":‘"containing numbers coming from a PACKED numeric field should":‘"be formatted as NUMBERS. If you do not tell me the correct"Om ‘"format, your report will contain zeros or blanks."fm*† CF$(B):‚ Ið Î B¡m4‘"COLUMN NAME: ";C$(I);": NUMBERS OR LETTERS (N/L)? ";ßm>CV$ðÝ:‹ CV$ð"" Ï >::¢ � <:‘ CV$:‹ Ú("NL",CV$)ñ Ï 4ômH‹ CV$ñï"L" Ï ˜XnR‘"How many characters might be printed in this column";:… FX:‹ FXñ ø FXïÿ Ï ‘"Invalid!":‰ R�n\‹ FXð Ï CF$(I)ð"!"::¢ CF$(I)ð"\"òØ(FXó, )ò"\"—nf‰ üo˜‘"How many digits will be printed to the LEFT of the decimal";:… FX:‹ FXñ ø FXï Ï ‘"Illegal!":‰ ˜o¢CF$(I)ðØ(FX,"#")co¤‹ FXñ Ï ¬::¢ ‘"Do you want the number printed with commas (Y/N)? ";:¡o¦CV$ðÝ:‹ CV$ð"" Ï ¦::¢ � <:‘ CV$:‹ Ú("YN",CV$)ñ Ï ¤Ão¨‹ CV$ð"Y" Ï CF$(I)ðCF$(I)ò","/p¬‘"How many digits will be printed to the RIGHT of the decimal";:… FX:‹ FXñ ø FXï Ï ‘"Illegal!":‰ ¬Vp¶‹ FX Ï CF$(I)ðCF$(I)ò"."òØ(FX,"#")�p»‹ CF$(I)ð"" Ï ‘"ILLEGAL FORMAT!":‰ ˜¸pü‹ Ú(CF$(I),"#") Ï ÿƒ(M$,I,)ð"M"::¢ ÿƒ(M$,I,)ð"S"¾pýƒÚp ¹"REPORTOR.BAS",,ALLq ‚ Ið Î B:‘ #,@�òI;"CF$(";ÿƒ(ÿ“(I),);")=";Q$;CF$(I);Q$:ƒkq ‘ #,"56 M$=";Q$;M$;Q$;":'FIELD TYPES - S = STRING, M =MULTIPLE PRECISION"ïq ‘ CLS$;"How many columns wide is the paper or screen the report will":‘"be printed on";:… FX:‹ FXñ ø FXïÿ Ï ‘"Illegal!":‰  œr LNðLNò :‘ #,LN;"IF L=0 AND PD$<>";Q$;"S";Q$;" THEN LPRINT CHR$(12);TAB(";(FXóÿ’(T$))õ;");TI$";:‹ LPñ Ï ‘ #," "::¢ ‘ #,";TAB(";FXó;");";Q$;"PAGE NUMBER";Q$;";PG"Hs LNðLNò :‘ #,LN;"IF L=0 AND PD$<>";Q$;"P";Q$;" THEN PRINT CHR$(12);TAB(";(FXóÿ’(T$))õ;");TI$";:‹ LPñ Ï ‘ #," "::¢ ‘ #,";TAB(";FXó;");";Q$;"PAGE NUMBER";Q$;";PG"ws. LNðLNò :‘ #,LN;"IF L=0 THEN GOSUB 31000"·s8 ‘ #,"31006 FOR J=1 TO ";B:LNðLNò :‘ #,LN;"FOR J=1 TO ";BösB LNðLNò :‘ #,LN;"READ T:IF PD$=";Q$;"P";Q$;" THEN ";LNòXtL LNðLNò :‘ #,LN;"IF MID$(M$,J,1)=";Q$;"S";Q$;" THEN PRINT TAB(T);:PRINT USING CF$(J);C$(J);"ºtV LNðLNò :‘ #,LN;"IF MID$(M$,J,1)=";Q$;"M";Q$;" THEN PRINT TAB(T);:PRINT USING CF$(J);C#(J);"òt` LNðLNò :‘ #,LN;"IF PD$=";Q$;"S";Q$;" THEN ";LNòVub LNðLNò :‘ #,LN;"IF MID$(M$,J,1)=";Q$;"S";Q$;" THEN LPRINT TAB(T);:LPRINT USING CF$(J);C$(J);"ºud LNðLNò :‘ #,LN;"IF MID$(M$,J,1)=";Q$;"M";Q$;" THEN LPRINT TAB(T);:LPRINT USING CF$(J);C#(J);" vf LNðLNò :‘ #,LN;"NEXT:RESTORE:IF PD$<>";Q$;"S";Q$;" THEN LPRINT:ELSE PRINT"nvh LNðLNò :‘ #,LN;"L=L+1";:‹ LP Ï ‘ #,":IF L>";LP;" THEN PG=PG+1:L=0"::¢ ‘ #,":'LINE COUNTER"ˆvj LNð8J:‘ #,LN;"NEXT"6wl ‹ RLñ Ï ‘ #,KZ;"GET 1,I:IF ZU$=STRING$(";RL;",255) OR ZU$=STRING$(";RL;",250) THEN ";LN::¢ ‘ #,KZ;"GET 1,I:IF ZU$=STRING$(255,250) OR ZU$=STRING$(255,255) THEN ";LNŒwn ‹ RLñ Ï ‘ #,"30801 FIELD #1,";RL;"AS ZU$"::¢ ‘ #,"30801 FIELD #1,255 AS ZU$"êwp ‘ CLS$;"Have you saved any totals you want printed at the end of your":‘"report (Y/N)? ";6xr CV$ðÝ:‹ CV$ð"" Ï r ::¢ � <:‘ CV$:‹ Ú("YN",CV$)ñ Ï ‘"ILLEGAL!":‰ r cxt ‹ CV$ð"N" Ï ‘ #,"20000 CLOSE:END":‰ F y~ ‘ CLS$;"Then you must tell me which variables to print in which columns":‘"of your report. Please be careful here: you CANNOT print":‘"strings in numeric columns, or vice-versa!"×yˆ ‘"You may use the BASIC operations +, *, /, and - (and others)":‘"if you wish. As a default, just hit the enter key: I will":‘"print the grand total for a column, using the same print"z’ ‘"format as the previous data in that column.":LNð Nuz“ ‘ #,LN;"IF PD$<>";Q$;"S";Q$;" THEN LPRINT":LNðLNò :‘ #,LN;"IF PD$<>";Q$;"P";Q$;" THEN PRINT"6{– ‘"If you want to use the totals in your computations, the totals":‘"are stored in the variable array T#(X), where X is the column":‘"number. Feel free to use these totals in computations."D{— ‚ Ið Î Bp{œ ‘"COLUMN NAME: ";C$(I);": DEFAULT IS ";Â{¦ ‹ ÿƒ(M$,I,)ð"S" Ï ‘"BLANK"::¢ ‘"T#(";I;")":‘"COLUMN PRINT FORMAT IS:";CF$(I)÷{° ‘"What should I print in this column: ";:± … CV$|µ ‹ CV$ñðØ(ÿ’(CV$), ) Ï CV$ð""E|º ‹ CV$ð"" Ï ‹ ÿƒ(M$,I,)ð"S" Ï CV$ðQ$òQ$�|Ä ‹ CV$ð"" Ï ‹ ÿƒ(M$,I,)ð"M" Ï CV$ð"T#("òÿƒ(ÿ“(I),)ò")"ô|Î LNðLNò :‘ #,LN;"READ T:IF PD$<>";Q$;"S";Q$;" THEN LPRINT TAB(T);:LPRINT USING CF$(";ÿƒ(ÿ“(I),);");";CV$;";"^}Ø LNðLNò :‘ #,LN;"IF PD$<>";Q$;"P";Q$;" THEN PRINT TAB(T);:PRINT USING CF$(";ÿƒ(ÿ“(I),);");";CV$;";"ò}â ƒ:LNðLNò :‘ #,LN;"IF PD$<>";Q$;"S";Q$;" THEN LPRINT CHR$(12)":LNðLNò :‘ #,LN;"IF PD$<>";Q$;"P";Q$;" THEN PRINT:PRINT";Q$;"END OF REPORT";Q$~ì LNðLNò :‘ #,LN;"CLOSE:END")~F ¿"I",,"R451.LIB"7~G • ¨ ‰ K S~H ± … #,A$:‘ #,A$:‰ G f~K ‘ #,"3 RESET"#L ‘ CLS$;"Your report program has been written. You may run it any time.":‘"If you wish, you may load your program, then re-save it: this":‘"will decrease subsequent program load times."+O Ã:�@P :�ÛERROR HANDLER€s ‘"ERROR NUMBER";×;"AT LINE";Ö;":PROGRAM ABORTED.":• ¨ ‰ ˆx Ã:�­‡:�ÛREPLACE A STRING WITH ANOTHERÙˆ‹ F1%ð Ï SX$ðF1$òÿƒ(SX$,ÿ’(C$(J))ò):Ž €’SX$ðÿ�(SX$,F1%ó)òF1$òÿƒ(SX$,F1%òÿ’(C$(J))):ŽÛREPLACE A STRING WITH ANOTHERÙˆ‹ F1%ð Ï