10 REM DATAFILE 2.6 (C)1983 BY MIKE KONSHAK 12 POKE53280,13:POKE53281,11:PRINT"[158]":GOSUB16:IFX=0THENGOTO66 14 GOTO68 16 D$=CHR$(0):MR$=D$:DR$=D$:S=0:B1$=CHR$(10):PW=0:CW=0:B$=CHR$(32) 18 NC=0:NL=0:PG=0:F1=0:F2=0:F3=0:L$=D$:RL=0:SB$=D$:CR$=CHR$(13):HN$=D$:ID$=D$ 20 A$=D$:C$=D$:T%=0:I$=D$:CK=0:I=0:J=0:K=0:L=0:M=0:N=0:RW=5:SF=0:Z=0:E$="EOF" 22 MEM=31000:EN=0:EM$=D$:ET=0:ES=0:A1$=D$:A2$=D$:A3$=D$:RETURN 24 DIM F$(F+1),T%(F+1),L%(F+1):RETURN 26 DIM REC$(R+1,F+1),ML$(9,4),PC(10),TT$(5),HC$(9),K%(R+1):RETURN 28 REM--GET 30 GETA$:IFA$=""THEN30 32 RETURN 34 REM--CREATE 36 IFCK<>0THENGOSUB394 38 PRINT"[147]  INITIALIZE DATAFILE " 40 CLR:GOSUB16:INPUT"HOW MANY FIELDS IN EACH RECORD? 0 [157][157][157][157]";F:IFF=0THEN68 42 GOSUB24:FORI=1TOF 44 PRINT"FIELD #";I:PRINT"TITLE ? > " 46 PRINT"LENGTH? 0 " 48 PRINT"";TAB(6);:INPUTF$(I):PRINTTAB(6);:INPUTL%(I):NEXTI 50 REM--COMPUTE # RECORDS 52 FORJ=0TOF:RL=RL+L%(J):NEXTJ:RL=RL+3*(F+1)+5:R=INT((MEM-12*(F+1)-2100)/RL) 54 PRINT" YOUR SELECTIONS WILL ALLOW APPROX" 56 PRINTR;"RECORDS. A[146]CCEPT OR R[146]EJECT?" 58 GOSUB30:IFA$="R"THEN38 60 IFA$="A"THENGOSUB26:CK=1:GOTO68 62 GOTO58 64 REM--MENU 66 PRINT"[147]  DATAFILE 2.6 (C)1983 BY MIKE KONSHAK ":GOTO70 68 PRINT"[147]  DATAFILE MENU " 70 PRINT" C[146]REATE NEW FILE Q[146]UIT PROGRAM 72 [153]" AWAITDD RECORD TO CURRENT FILE" 74 [153]" MWAITODIFY RECORD IN CURRENT FILE" 76 [153]" DWAITELETE RECORD IN CURRENT FILE" 78 [153]" RWAITEAD OLD FILE FROM DISK" 80 [153]" PWAITRINT RECORDS BY SELECTION 82 PRINT" V[146]IEW FILE ON SCREEN 84 [153]" SWAITORT RECORDS BY FIELD 86 PRINT" W[146]RITE NEW FILE TO DISK 88 [153]" FWAITORMAT A DISK $WAIT DISK DIRECTORY 90 PRINT"  PRESS THE APPROPRIATE KEY " 92 PRINT" THERE ARE";X;"RECORDS IN MEMORY" 94 IFR>0THENPRINT" SPACE FOR";R-X;"MORE RECORDS[145]" 96 GOSUB30:IFA$="A"THENGOSUB350:GOTO124 98 IFA$="M"THENGOSUB350:GOTO244 100 IFA$="D"THENGOSUB350:GOTO272 102 IFA$="C"THEN36 104 IFA$="R"THEN170 106 IFA$="P"THENGOSUB354:GOTO356 108 IFA$="V"THENGOSUB350:GOTO192 110 IFA$="W"THENGOSUB350:GOTO144 112 IFA$="S"THENGOSUB350:GOTO304 114 IFA$="Q"THEN342 116 IFA$="F"THEN402 118 IFA$="$"THEN422 120 GOTO96 122 REM--ADD RECORDS 124 FORI=X+1TOR:PRINT"[147]PRESS THE RETURN[146] KEY AFTER EACH ENTRY" 126 PRINT"PRESS RETURN[146] WITHOUT ANY ENTRY TO STOP" 128 PRINT"RECORD NUMBER ";I;"" 130 FORN=1TOF 132 PRINTF$(N);" >[157][157][157]";:INPUTREC$(I,N):IFREC$(I,N)=""THENREC$(I,N)=">" 134 IFLEN(REC$(I,N))>L%(N)THENGOSUB140:GOTO132 136 IFREC$(I,1)=">"THEN X=I-1:CK=1:GOTO68 138 NEXTN:K%(I)=I:NEXTI:X=R:CK=1:GOTO68 140 PRINT"CANNOT EXCEED";L%(N);" CHARACTERS":RETURN 142 REM--SAVE 144 PRINT"[147]ENTER NAME OF CURRENT FILE TO BE SAVED" 146 PRINT"(12 CHARACTERS MAX). ANY EXISTING FILE" 148 PRINT"WITH THE SAME NAME WILL BE SCRATCHED." 150 PRINT" ";NF$:INPUT"[145]";NF$:IFNF$=""THEN68 152 OPEN15,8,15:PRINT#15,"S0:DF] "+LEFT$(NF$,8)+"!OLD":GOSUB414 154 PRINT#15,"R0:DF] "+LEFT$(NF$,8)+"!OLD=DF] "+NF$:GOSUB414 156 OPEN5,8,5,"0:DF] "+NF$+",S,W":GOSUB414 158 PRINT#5,R;CR$;F;CR$;X:GOSUB414:FORN=1TOF:PRINT#5,F$(N);CR$;L%(N):NEXTN 160 FORI=1TOX:PRINT"SAVING RECORD #";I;"[145][145]" 162 FORN=1TOF:PRINT#5,REC$(I,N):NEXTN:GOSUB414:NEXTI:PRINT 164 FORI=1TOX:PRINT"SAVING POINTERS";I;"[145][145]":PRINT#5,K%(I):NEXTI:GOSUB414 166 PRINT#5,E$:CLOSE5:CLOSE15:CK=0:GOTO68 168 REM--LOAD 170 IFCK<>0THENGOSUB394 172 CLR:GOSUB16:PRINT"[147]ENTER NAME OF FILE TO BE LOADED":INPUTNF$ 174 OPEN15,8,15:OPEN5,8,5,"0:DF] "+NF$+",S,R":GOSUB414 176 INPUT#5,R,F,X:GOSUB414:GOSUB24:GOSUB26:FORN=1TOF:INPUT#5,F$(N),L%(N):NEXTN 178 FORI=1TOX:PRINT"READING RECORD #";I;"[145][145]" 180 FORN=1TOF:INPUT#5,REC$(I,N):NEXTN:GOSUB414:NEXTI:PRINT 182 FORI=1TOX:PRINT"READING POINTERS";I;"[145][145]":INPUT#5,K%(I):NEXTI 184 GOSUB414:S=ST:IFS<>0THEN188 186 INPUT#5,E$ 188 CLOSE5:CLOSE15:GOTO68 190 REM--VIEW 192 I=1 194 IFI=0THEN68 196 IFI>XTHEN68 198 PRINT"[147]RECORD NUMBER[146]";I;" IN FILE[146] ";NF$;"" 200 FORN=1TOF:PRINT F$(N);": ";REC$(K%(I),N):NEXTN 202 PRINT" N[146]EXT, L[146]AST, J[146]UMP, F[146]IND, E[146]XIT TO MENU" 204 GOSUB30:IFA$="N"THENI=I+1:GOTO194 206 IFA$="L"THENI=I-1:GOTO194 208 IFA$="J"THEN216 210 IFA$="F"THEN218 212 IFA$="E"THEN68 214 GOTO204 216 INPUT"JUMP TO RECORD NUMBER";I:GOTO194 218 PRINT"[147] FIND RECORDS WITH COMMON ITEMS " 220 FORN=1TOF:PRINT" ";N;"[146] ";F$(N):NEXTN 222 INPUT"WHICH FIELD IS TO BE SEARCHED? 0 [157][157][157][157]";SF:IFSF=0THEN68 224 IFSF<1ORSF>FTHENPRINT"[145][145][145]":GOTO222 226 PRINT"ENTER COMMON ITEM[146] ":PRINT"(THE ENTIRE STRING IS NOT REQUIRED)" 228 PRINT"";F$(SF);"[146] ";:INPUTT$ 230 FORI=1TOX:PRINT"SEARCHING RECORD";I;"[145][145]" 232 IFT$=LEFT$(REC$(K%(I),SF),LEN(T$))THEN236 234 GOTO240 236 PRINT"[147] RECORD #";I;"":FORN=1TOF:PRINTF$(N);": ";REC$(K%(I),N):NEXTN 238 PRINT" N[146]EXT RECORD":GOSUB30 240 NEXTI:GOTO68 242 REM--MODIFY 244 PRINT"[147]MODIFY WHICH RECORD? ENTER #[146] OR A[146]LL":INPUTMR$:IFMR$=D$THEN68 246 IFMR$="A"THENMR$=D$:GOTO254 248 I=VAL(MR$):MR$=D$ 250 IFI>XTHENGOSUB348:GOTO244 252 GOSUB256:GOTO68 254 FORI=1TOX:GOSUB256:NEXTI:GOTO68 256 PRINT"[147]TO MODIFY RECORD NUMBER";I;", MAKE CHANGES" 258 PRINT"AS EACH FIELD IS DISPLAYED, THEN RETURN[146]" 260 FORN=1TOF:PRINTF$(N)":":PRINT" ";REC$(K%(I),N) 261 IF LEN(REC$(K%(I),N))>36 THEN PRINT"[145]"; 262 PRINT"[145] ";:INPUTREC$(K%(I),N) 264 IFLEN(REC$(K%(I),N))>L%(N)THENGOSUB140:GOTO260 266 IFREC$(K%(I),N)=""THENREC$(K%(I),N)=">" 268 NEXTN:CK=1:RETURN 270 REM--DELETE 272 PRINT"[147]DELETE WHICH RECORD? ENTER #[146] OR A[146]LL" 274 INPUTDR$:IFDR$=D$THEN68 276 IFDR$="A"THENDR$=D$:GOTO282 278 I=VAL(DR$):DR$=D$:IFI>XTHENGOSUB348:GOTO274 280 GOSUB284:GOTO68 282 FORI=1TOX:GOSUB284:NEXTI:GOTO68 284 PRINT"[147]TO DELETE RECORD NUMBER";I;", PRESS" 286 PRINT"SHIFT[146] D[146], PRESS SPACE BAR[146] TO ADVANCE" 288 FORN=1TOF:PRINTF$(N);" ";REC$(K%(I),N):NEXTN 290 GOSUB30:IFA$="[196]"THEN294:REM SHIFTED D 292 CK=1:RETURN 294 PRINT"DELETING RECORD";I:PRINT"RECORDS MAY NOW BE OUT OF ORDER" 296 FORN=1TOF:REC$(K%(I),N)=REC$(X,N):REC$(X,N)="":NEXTN 298 FORJ=1TOX:IFK%(J)=XTHENK%(J)=K%(X):K%(X)=0:X=X-1:GOTO292 300 NEXTJ 302 REM--SORT 304 PRINT"[147]  SORT RECORDS IN ASCENDING ORDER " 306 FOR N=1TOF:PRINT" ";N;"[146] ";F$(N):NEXTN 308 INPUT"WHICH FIELD IS TO BE SORTED? 0 [157][157][157][157]";SF:IFSF=0THEN68 310 IFSF>F THENPRINT"[145][145][145]":GOTO308 312 PRINT" PLEASE WAIT[146]":M=X 314 M=INT(M/2):IFM=0THENCK=1:GOTO68 316 J=1:K=X-M 318 I=J 320 L=I+M 322 PRINT"SORTING [157][157][157][157][157]";I;"[145]" 324 IF REC$(K%(I),SF)<=REC$(K%(L),SF) THEN328 326 T%(N)=K%(I):K%(I)=K%(L):K%(L)=T%(N):I=I-M:IFI>0THEN320 328 J=J+1:IFJ>KTHEN314 330 GOTO318 332 REM--QUIT 334 PRINT"[147] YOU HAVE NOT SAVED YOUR CHANGES! 336 [153]" DO YOU REALLY WANT TO QUIT? YWAIT OR NWAIT 338 GOSUB30:IFA$="Y" THEN344 340 GOTO68 342 IFCK<>0THEN334 344 PRINT"[147]DATAFILE TERMINATED":END 346 REM--ERROR CHECK 348 PRINT" NO SUCH RECORD EXISTS":RETURN 350 IFR>0THENRETURN 352 PRINT"[147] NO FILES IN MEMORY":FORI=1TO1000:NEXTI:GOTO68 354 IFX<1THENGOSUB352:GOTO68 356 REM--LOAD PRINT 358 PRINT"[147]  PRINTER MAIN MENU " 360 PRINT" PRINT RECORDS USING: 362 [153]" RWAITEPORTS AND LISTS 364 PRINT" M[146]AILING LABELS 366 [153]" UWAITSER DEFINED SUBPROGRAM 368 PRINT" E[146]XIT TO MAIN MENU 370 [153]"  PRESS THE APPROPRIATE KEY " 372 [141]30:[139]A$[178]"R"[167]384 374 [139]A$[178]"E"[167]68 376 [139]A$[178]"U"[167]386 378 [139]A$[178]"M"[167]382 380 [137]372 382 [153]"LOAD LOADING MAILING LABEL SUBPROGRAM":[147]"DFMAIL",8 384 [153]"LOAD LOADING REPORT/LISTING SUBPROGRAM":[147]"DFREPORT",8 386 [153]"LOAD ENTER NAME OF SUBPROGRAM" 388 [153]"";SB$:[133]"ON";SB$:[139]SB$[178]D$[167]358 389 [159]15,8,15:[159]5,8,5,"0:"[170]SB$[170]",P,R":[141]414:[139] EN[178]62 [167] 416 390 [147]SB$,8 392 [143]--WARNING 394 [153]"LOAD THIS WILL DESTROY THE FILE IN MEMORY! 396 PRINT" SAVE THE FILE FIRST? Y[146] OR N[146]":GOSUB30:IFA$="N"THENRETURN 398 GOTO68 400 REM--NEW DISK 402 PRINT"[147] ARE YOU SURE? Y[146] OR N[146] 404 [141]30:[139]A$[178]"N"[167]68 406 [139]A$[179][177]"Y"[167]68 408 [133]" DISK NAME,IDWAIT";HN$,ID$:[139]HN$[178]D$[167]68 410 [159]15,8,15:[152]15,"NEW0:"[170]HN$[170]","[170]ID$:[141]414:[160]15:[137]68 412 [143]--DISK ERROR 414 [132]15,EN,EM$,ET,ES:[139](EN[179]20)[176](EN[178]62)[167][142] 416 [153]"DISK ERRORWAIT"EN"CMD, "EM$","ET"CMD,"ES 418 [153]"PRESS ANY KEYWAIT TO RETURN TO MENU":[141]30:[160]5:[160]15:[137]68 420 [143]--DIRECTORY 422 [159]15,8,15:[159]1,8,0,"$0":[153]"LOAD":[141]414 424 [161]#1,A1$,A2$ 426 [161]#1,A1$,A2$ 428 [161]#1,A1$,A2$ 430 [139]A1$[179][177]""[167]A0[178][198](A1$) 432 [139]A2$[179][177]""[167]A0[178]A0[170][198](A2$)[172]256 434 [153][202]([196](A0),2);[163]3); 436 [161]#1,A2$:[139]ST[179][177]0[167]454 438 [139]A2$[179][177][199](34)[167]436 440 [161]#1,A2$:[139]A2$[179][177][199](34)[167][153]""A2$"WAIT";:[137]440 442 [161]#1,A2$:[139]A2$[178][199](32)[167]442 444 [153][163]20);:A3$[178]"" 446 A3$[178]A3$[170]A2$:[161]#1,A2$:[139]A2$[179][177]""[167]446 448 [153][200](A3$,3) 450 [161]A$:[139]A$[179][177]""[167][141]458 452 [139]ST[178]0[167]426 454 [153]" BLOCKS FREE";:A0[178]0 456 [160]1:[160]15:[153][163]25)"PRESS ANY KEYWAIT":[141]30:[137]68 458 [141]30:[142]