home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib25b.dsk / ECF.bas < prev    next >
BASIC Source File  |  2023-02-26  |  24KB  |  494 lines

  1. 1  HIMEM: 19456:CC$ = "*********" +"": GOTO 4190: REM 9 *'S
  2. 2  REM **********************
  3. 3  REM *        ECF         *
  4. 4  REM * EXECUTIVE CARD FILE*
  5. 5  REM *    BY JIM GANZ     *
  6. 6  REM * COPYRIGHT (C) 1985 *
  7. 7  REM * BY MICROSPARC, INC *
  8. 8  REM * CONCORD, MA  01742 *
  9. 9  REM **********************
  10. 90  REM ** MEMORY MOVE SUBROUTINE **
  11. 100  POKE M1,OS - INT(OS/M4) *M4: POKE M1 +1, INT(OS/M4)
  12. 110  POKE M2,OE - INT(OE/M4) *M4: POKE M2 +1, INT(OE/M4)
  13. 120  POKE M3,NS - INT(NS/M4) *M4: POKE M3 +1, INT(NS/M4)
  14. 130  CALL MV: RETURN 
  15. 140  REM ** EXCHANGE CARDS **
  16. 150 OS = 20481 +494 *(S1 -1):OE = OS +493:NS = 37905: GOSUB 90
  17. 160 NS = OS:OS = 20481 +494 *(S2 -1):OE = OS +493: GOSUB 90
  18. 170 NS = OS:OS = 37905:OE = 38398: GOSUB 90
  19. 180 S$ = C$(S1):C$(S1) = C$(S2):C$(S2) = S$
  20. 190  RETURN 
  21. 200  REM ** HARDCOPY **
  22. 210  POKE 34,17: HOME : ON  PEEK( -1101) = 6 GOTO 240: VTAB 19: PRINT "(1) PRINT CARD WITH UPPER & LOWER CASE": PRINT "(2) PRINT CARD IN UPPER CASE ONLY"
  23. 220  PRINT : PRINT "SELECT ( )";: HTAB 9: GET X$: IF X$ <"1"  OR X$ >"2"  THEN  CALL BL: GOTO 220
  24. 230  PRINT X$:UP = (X$ = "2"): POKE  -16368,0
  25. 240  PRINT D$"PR#"PS
  26. 250  PRINT : PRINT CF$": "ND$", CARD #"X
  27. 260  PRINT DA$
  28. 270  FOR P = 1 TO 13: PRINT " ";: FOR P1 = MEM(P) TO MEM(P) +37
  29. 280 P2 =  PEEK(P1)
  30. 290  IF UP  THEN  PRINT  CHR$(P2 +192 *(P2 <32) +128 *(P2 >31  AND P2 <64));: GOTO 310
  31. 300  PRINT  CHR$(P2 +224 *(P2 <32) +128 *(P2 >31  AND P2 <64));
  32. 310  NEXT : PRINT : NEXT 
  33. 320  PRINT DA$: PRINT D$"PR#0
  34. 330  HOME : RETURN 
  35. 340  REM ** DIVIDER DIRECTORY **
  36. 350  HOME : PRINT "DIVIDERS:": PRINT 
  37. 360  FOR S = 1 TO ND  STEP 4: FOR A = 0 TO 3
  38. 370  HTAB 10 *A +1: PRINT ND$(S +A);
  39. 380  NEXT : PRINT : NEXT : PRINT : PRINT 
  40. 390 FL = 1: VTAB 17: CALL  -868: IF   NOT  LEN(DV$)  THEN 410
  41. 400  VTAB 17: HTAB 33 - LEN(DV$): PRINT "DEFAULT="DV$;
  42. 410  VTAB 18: CALL  -868: VTAB 18: INPUT "WHICH SECTION? ";ND$:SS$ = ND$: GOSUB 610:ND$ = ST$: IF   NOT  LEN(ND$)  AND  LEN(DV$)  THEN  VTAB 18: HTAB 16: PRINT DV$: RETURN 
  43. 420  IF ND$ = DV$  THEN  RETURN 
  44. 430 DV$ = ND$:FL = 0: FOR S = 1 TO ND:FL = FL +S *(ND$(S) = DV$): NEXT :DN = FL: IF   NOT FL  THEN DV$ = "": CALL BL: GOTO 390
  45. 440  PRINT D$"BLOADECF."CF$"."DN",A$5000": RETURN 
  46. 450  REM ** CARDFILE DIRECTORY **
  47. 460 VF = 1: PRINT D$"VERIFY"FI$:VF = 0
  48. 470  PRINT D$"OPEN"FI$",L83": PRINT D$"READ"FI$",R0"
  49. 480  INPUT NC:TC = NC
  50. 490  IF   NOT NC  THEN  PRINT D$"CLOSE": GOTO 540
  51. 500  FOR S = 1 TO NC
  52. 510  PRINT D$"READ"FI$",R"S
  53. 520  INPUT CF$(S):TC = TC -( LEFT$(CF$(S),1) = "^"): NEXT 
  54. 530  PRINT D$"CLOSE
  55. 540  VTAB 9: IF   NOT NC  THEN  PRINT "NO CARDFILES ON THIS DISK": GOTO 580
  56. 550  PRINT "CARDFILES:";
  57. 560  FOR S = 1 TO NC: HTAB 12: IF  LEFT$(CF$(S),1) < >"^"  THEN  PRINT CF$(S)
  58. 570  NEXT 
  59. 580  PRINT : RETURN 
  60. 590  REM ** CARD DISPLAY **
  61. 600  TEXT : HOME : CALL CA: RETURN 
  62. 610  REM  ** LC TO UC CONVERSION **
  63. 620  IF   NOT  LEN(SS$)  THEN  RETURN 
  64. 630 ST$ = "": FOR II = 1 TO  LEN(SS$):S9 =  ASC( MID$ (SS$,II,1))
  65. 640  IF S9 >96  AND S9 <123  THEN S9 = S9 -32
  66. 650 ST$ = ST$ + CHR$(S9): NEXT : RETURN 
  67. 660  REM  ** CHECK FOR ALPHANUMERIC STRING **
  68. 670 EF = 0: FOR II = 1 TO  LEN(SS$):S9 =  ASC( MID$ (SS$,II,1)): IF S9 < >46  AND (S9 <48  OR (S9 >57  AND S9 <65)  OR (S9 >90  AND S9 <97)  OR S9 >122)  THEN EF = 1:II =  LEN(SS$)
  69. 680  NEXT : RETURN 
  70. 690  REM ** EDIT CARD **
  71. 700 FL = 0
  72. 710  PRINT : HTAB 12: PRINT "EDIT AN INDEX CARD
  73. 720  VTAB 11: PRINT "(1) ADD A NEW CARD 
  74. 730  PRINT : PRINT "(2) EDIT AN EXISTING CARD
  75. 740  PRINT : PRINT "(3) RETURN TO MAIN MENU
  76. 750  VTAB 18: PRINT "SELECT (1-3) OR <ESC> ( )";: HTAB 24
  77. 760  GET S$: PRINT S$;:S =  VAL(S$): IF S$ = ES$  THEN S = 3
  78. 770  IF S <1  OR S >3  OR (S = 2  AND   NOT C)  OR (S = 1  AND   NOT (ND *35 -C))  THEN  PRINT  CHR$(7): GOTO 750
  79. 780  ON S GOTO 790,1220,4180
  80. 790  GOSUB 590
  81. 800  HTAB 13: PRINT "CARDFILE: "CF$
  82. 810  VTAB 19: PRINT "CTRL-C.....CLEAR CARD" SPC( 19)"CTRL-K/J OR ARROWS....CURSOR UP/DOWN"
  83. 820  IF  PEEK( -1101) < >6  THEN  PRINT "ESC........UPPERCASE SHIFT FOR NEXT CHARCTRL-A/S...UPPER/LOWERCASE SHIFT LOCK 
  84. 830  PRINT "CTRL-F.....FILE THIS CARD": PRINT "CTRL-Q.....QUIT; RETURN TO MENU";
  85. 840  POKE 32,1: POKE 33,38: POKE 34,3
  86. 850  VTAB 4: HTAB 1: CALL 825
  87. 860  TEXT : NORMAL : IF FL = 2  THEN FL = 0: RETURN 
  88. 870  IF  PEEK(6) = 145  THEN 1440
  89. 880  VTAB 19: HTAB 1: CALL  -958: VTAB 21: PRINT "STAND BY
  90. 890  FOR S = 1 TO 13:OS = MEM(S):OE = OS +37:NS = 37905 +(S -1) *38: GOSUB 90: NEXT 
  91. 900 SD = 1: RESTORE : FOR S = 1 TO 7: READ S$:SD = SD -(S$ < >ND$(S)): NEXT : IF SD <0  THEN SD = 0
  92. 910  GOSUB 4400: IF SD  THEN 970
  93. 920  GOSUB 340
  94. 930  IF   NOT  LEN(DV$)  THEN 1440
  95. 940  IF  PEEK(20480) = 35  THEN  PRINT : PRINT "THERE IS NO ROOM IN THAT SECTION.": PRINT : GOSUB 390: GOTO 930
  96. 950  GOTO 1130
  97. 960  REM STANDARD DIVIDERS
  98. 970  FOR S = 37905 TO 38398:S$ = "": IF  PEEK(S)  AND  PEEK(S) <27  THEN S$ =  CHR$( PEEK(S) +64):S = 38398: NEXT : GOTO 1010
  99. 980  IF  PEEK(S) >192  AND  PEEK(S) <219  THEN S$ =  CHR$( PEEK(S) -128):S = 38398: NEXT : GOTO 1010
  100. 990  IF  PEEK(S)  AND S$ = ""  THEN S$ = "A":S = 38398: NEXT : GOTO 1010
  101. 1000  NEXT : GOTO 4380
  102. 1010  FOR S = 1 TO ND
  103. 1020  FOR A = 1 TO  LEN(ND$(S))
  104. 1030  IF  MID$ (ND$(S),A,1) = S$  THEN ND$ = ND$(S):A =  LEN(ND$(S)):DN = S:S = ND
  105. 1040  NEXT : NEXT : IF ND$ = DV$  THEN 1060
  106. 1050 DV$ = ND$: PRINT : GOSUB 440
  107. 1060  IF  PEEK(20480) = 35  THEN  PRINT : PRINT "NOTE: THERE IS NO ROOM IN THE "ND$: PRINT "SECTION OF THIS CARDFILE...":S$ = "N": GOTO 1120
  108. 1070  PRINT "THE CURRENT CARD WILL BE PLACED IN THE
  109. 1080  PRINT  CHR$(34)DV$ CHR$(34);
  110. 1090  PRINT " DIVIDER SECTION... OK (Y/N)? ";
  111. 1100  GET S$: PRINT S$
  112. 1110  IF S$ < >"Y"  AND S$ < >"N"  THEN  PRINT : GOTO 1070
  113. 1120  IF S$ = "N"  THEN  GOSUB 340: GOTO 930
  114. 1130  PRINT : PRINT "INSERTING
  115. 1140 OS = 37905:OE = 38398:NS = 20481 +494 * PEEK(20480): GOSUB 90
  116. 1150  POKE 20480, PEEK(20480) +1
  117. 1160 C = C +1
  118. 1170  PRINT D$"OPEN"FI$",L83
  119. 1180  PRINT D$"WRITE"FI$",R"TS
  120. 1190  PRINT CF$: PRINT ND: FOR S = 1 TO ND: PRINT ND$(S): NEXT : PRINT C
  121. 1200  PRINT D$"CLOSE
  122. 1210  GOTO 1430
  123. 1220  REM EDIT EXISTING CARD
  124. 1230  GOSUB 340
  125. 1240  IF   NOT  LEN(DV$)  THEN 1440
  126. 1250 NC =  PEEK(20480): PRINT 
  127. 1260  VTAB 20: CALL  -868: IF   NOT NC  THEN  VTAB 20: PRINT "THERE ARE NO CARDS IN THAT SECTION.":DV$ = "": PRINT : GOSUB 390: GOTO 1240
  128. 1270  VTAB 20: CALL  -868: VTAB 20: PRINT "EDIT CARD NUMBER (1-"NC;: INPUT ")? ";S$:S =  VAL(S$): IF S <1  OR S >NC  THEN 1270
  129. 1280  GOSUB 590
  130. 1290  HTAB 13: PRINT "CARDFILE: "CF$;: INVERSE : HTAB 2: PRINT DV$
  131. 1300  HTAB 2: PRINT S" OF "NC: NORMAL 
  132. 1310 ST = 20481 +494 *(S -1): FOR A = 1 TO 13:OS = ST +(A -1) *38:OE = OS +37:NS = MEM(A): GOSUB 90: NEXT 
  133. 1320  VTAB 19: PRINT "IS THIS THE CARD YOU WANT (Y/N)?";: GET A$: PRINT A$: IF A$ < >"Y"  AND A$ < >"N"  AND A$ < > CHR$(121)  AND A$ < > CHR$(110)  THEN 1320
  134. 1330  IF A$ = "N"  OR A$ =  CHR$(110)  THEN  GOSUB 4410: GOTO 1220
  135. 1340 FL = 2: GOSUB 810
  136. 1350  POKE 34,17: HOME : VTAB 19
  137. 1360  PRINT "(1) RE-FILE THIS CARD": PRINT 
  138. 1370  PRINT "(2) RETURN TO MENU
  139. 1380  PRINT : PRINT "SELECT ( ) OR <ESC>";
  140. 1390  HTAB 9: GET A$: IF (A$ <"1"  OR A$ >"2")  AND A$ < >ES$  THEN 1390
  141. 1400  PRINT A$: IF A$ = "2"  OR A$ = ES$  THEN 1440
  142. 1410  HOME : VTAB 20: PRINT "INSERTING
  143. 1420  FOR A = 1 TO 13:OS = MEM(A):OE = OS +37:NS = ST +(A -1) *38: GOSUB 90: NEXT 
  144. 1430  PRINT D$"BSAVEECF."CF$"."DN",A20480,L"1 +494 * PEEK(20480)
  145. 1440  GOSUB 4400: GOTO 690
  146. 1450  REM ** SCAN CARD **
  147. 1460  PRINT : HTAB 12: PRINT "SCAN INDEX CARD(S)
  148. 1470  VTAB 10: PRINT "(1) VIEW THE ENTIRE FILE
  149. 1480  PRINT : PRINT "(2) VIEW A SPECIFIC SECTION
  150. 1490  PRINT : PRINT "(3) VIEW A SPECIFIC CARD
  151. 1500  PRINT : PRINT "(4) RETURN TO MAIN MENU
  152. 1510  VTAB 19: PRINT "SELECT (1-4) OR <ESC> ( )";: HTAB 24
  153. 1520  GET S$: PRINT S$;:S =  VAL(S$): IF S$ = ES$  THEN S = 4
  154. 1530  IF S <1  OR S >4  THEN  PRINT  CHR$(7): GOTO 1510
  155. 1540  ON S GOTO 1550,1770,1950,4180
  156. 1550  REM VIEW ENTIRE FILE
  157. 1560  GOSUB 590
  158. 1570 FL = 0:DV$ = ""
  159. 1580  HTAB 13: PRINT "CARDFILE: "CF$
  160. 1590  FOR SS = 1 TO ND:ND$ = ND$(SS)
  161. 1600  POKE 34,17: HOME 
  162. 1610  PRINT D$"BLOADECF."CF$"."SS",A$5000"
  163. 1620 A =  PEEK(20480): IF   NOT (A)  THEN  VTAB 20: PRINT "(THERE ARE NO CARDS IN "ND$" SECTION)": FOR A = 1 TO 2500: NEXT : NEXT : GOTO 2100
  164. 1630  FOR X = 1 TO A: POKE 34,0: CALL CA: INVERSE : VTAB 1: HTAB 2: PRINT ND$: HTAB 2: PRINT X" OF "A: NORMAL 
  165. 1640 ST = 20481 +494 *(X -1): FOR Y = 1 TO 13:OS = ST +(Y -1) *38:OE = OS +37:NS = MEM(Y): GOSUB 90: NEXT 
  166. 1650  VTAB 19: PRINT "(1) GO ON TO THE NEXT CARD
  167. 1660  PRINT "(2) GO ON TO THE NEXT SECTION
  168. 1670  PRINT "(3) PRINT HARDCOPY OF THIS CARD
  169. 1680  PRINT "(4) RETURN TO THE MENU
  170. 1690  PRINT : PRINT "SELECT ( ) OR <ESC>";
  171. 1700  POKE  -16368,0: HTAB 9: GET S$:S =  VAL(S$) +4 *(S$ = ES$): IF S <1  OR S >4  THEN  CALL BL: GOTO 1700
  172. 1710  PRINT S;: VTAB 18: PRINT : ON S GOTO 1750,1720,1730,1740
  173. 1720 X = A: GOTO 1750
  174. 1730  GOSUB 200: GOTO 1750
  175. 1740 X = A:SS = ND: NEXT : GOTO 1760
  176. 1750  NEXT : CALL CA:FL = FL +A: IF FL = C  THEN  POKE 34,17: HOME : VTAB 20: PRINT "THERE ARE NO MORE CARDS IN THE FILE...": FOR A = 1 TO 3000: NEXT :SS = ND
  177. 1760  NEXT : GOTO 2100
  178. 1770  REM VIEW SECTION
  179. 1780  GOSUB 340
  180. 1790  IF   NOT  LEN(DV$)  THEN 2100
  181. 1800  GOSUB 590
  182. 1810  HTAB 13: PRINT "CARDFILE: "CF$
  183. 1820 A =  PEEK(20480): IF   NOT (A)  THEN  VTAB 20: PRINT "(THERE ARE NO CARDS IN "DV$" SECTION)": FOR A = 1 TO 2500: NEXT :DV$ = "": GOTO 2100
  184. 1830  FOR X = 1 TO A: TEXT : CALL CA: INVERSE : VTAB 1: HTAB 2: PRINT DV$: HTAB 2: PRINT X" OF "A: NORMAL 
  185. 1840 ST = 20481 +494 *(X -1): FOR Y = 1 TO 13:OS = ST +(Y -1) *38:OE = OS +37:NS = MEM(Y): GOSUB 90: NEXT 
  186. 1850  POKE 34,17: VTAB 19: PRINT "(1) GO ON TO THE NEXT CARD
  187. 1860  PRINT "(2) PRINT HARDCOPY OF THIS CARD
  188. 1870  PRINT "(3) RETURN TO THE MENU
  189. 1880  PRINT : PRINT "SELECT ( ) OR <ESC>";
  190. 1890  HTAB 9: GET S$:S =  VAL(S$) +3 *(S$ = ES$): IF S <1  OR S >3  THEN  CALL BL: GOTO 1890
  191. 1900  PRINT S
  192. 1910  ON S GOTO 1940,1920,1930
  193. 1920 ND$ = DV$: GOSUB 200: GOTO 1940
  194. 1930 X = A
  195. 1940  NEXT : GOTO 2100
  196. 1950  REM VIEW CARD
  197. 1960  GOSUB 340
  198. 1970  IF   NOT  LEN(DV$)  THEN 2100
  199. 1980  PRINT 
  200. 1990 X =  PEEK(20480): VTAB 20: CALL  -868: IF   NOT X  THEN  VTAB 20: PRINT "THERE ARE NO CARDS IN THAT SECTION.":DV$ = "": PRINT : GOSUB 390: GOTO 1970
  201. 2000  PRINT "WHICH CARD (1-"X;: INPUT ")? ";S$:S =  VAL(S$): IF S <1  OR S >X  THEN  CALL BL: GOTO 1980
  202. 2010  GOSUB 590: HTAB 13: PRINT "CARDFILE: "CF$
  203. 2020  INVERSE : VTAB 1: HTAB 2: PRINT DV$: HTAB 2: PRINT S" OF "X: NORMAL 
  204. 2030 ST = 20481 +494 *(S -1): FOR Y = 1 TO 13:OS = ST +(Y -1) *38:OE = OS +37:NS = MEM(Y): GOSUB 90: NEXT 
  205. 2040  POKE 34,17: VTAB 19
  206. 2050  PRINT "(1) PRINT HARDCOPY OF THIS CARD": PRINT 
  207. 2060  PRINT "(2) RETURN TO MENU
  208. 2070  PRINT : PRINT "SELECT ( ) OR <ESC>";
  209. 2080  HTAB 9: GET S$: IF (S$ <"1"  OR S$ >"2")  AND S$ < >ES$  THEN  CALL BL: GOTO 2080
  210. 2090  IF S$ = "1"  THEN ND$ = DV$:X = S: GOSUB 200
  211. 2100  GOSUB 4400: GOTO 1450
  212. 2110  REM ** REMOVE CARD **
  213. 2120  PRINT : HTAB 10: PRINT "REMOVE AN INDEX CARD 
  214. 2130  VTAB 10: HTAB 5: PRINT "NOTE THAT ONCE A CARD HAS BEEN
  215. 2140  HTAB 5: PRINT "REMOVED IT CANNOT BE RESTORED... 
  216. 2150  VTAB 14: PRINT "(1) REMOVE AN INDEX CARD": PRINT 
  217. 2160  PRINT "(2) RETURN TO MAIN MENU": PRINT : PRINT 
  218. 2170  PRINT "SELECT ( ) OR <ESC>";
  219. 2180  HTAB 9: GET S$: IF (S$ <"1"  OR S$ >"2")  AND S$ < >ES$  THEN  CALL BL: GOTO 2180
  220. 2190  PRINT S$: IF S$ = "2"  OR S$ = ES$  THEN 4180
  221. 2200  GOSUB 340
  222. 2210  IF   NOT  LEN(DV$)  THEN 2440
  223. 2220  PRINT 
  224. 2230 A =  PEEK(20480): VTAB 20: CALL  -868: IF   NOT (A)  THEN  VTAB 20: PRINT "THERE ARE NO CARDS IN THAT SECTION.":DV$ = "": PRINT : GOSUB 390: GOTO 2210
  225. 2240  PRINT "WHICH CARD (1-"A;: INPUT ")? ";S$:X =  VAL(S$): IF X <1  OR X >(A)  THEN 2220
  226. 2250  GOSUB 590: HTAB 13: PRINT "CARDFILE: "CF$
  227. 2260  INVERSE : VTAB 1: HTAB 2: PRINT DV$: HTAB 2: PRINT X" OF "A: NORMAL 
  228. 2270 ST = 20481 +494 *(X -1): FOR Y = 1 TO 13:OS = ST +(Y -1) *38:OE = OS +37:NS = MEM(Y): GOSUB 90: NEXT 
  229. 2280  VTAB 19: PRINT "(1) DELETE THIS CARD FROM THE FILE": PRINT 
  230. 2290  PRINT "(2) RETURN TO THE MENU
  231. 2300  PRINT : PRINT "SELECT ( ) OR <ESC>";
  232. 2310  HTAB 9: GET S$: IF (S$ <"1"  OR S$ >"2")  AND S$ < >ES$  THEN  CALL BL: GOTO 2310
  233. 2320  PRINT S$: IF S$ = "2"  OR S$ = ES$  THEN 2440
  234. 2330  POKE 34,17: HOME 
  235. 2340  IF A = X  THEN 2360
  236. 2350 OS = 20481 +494 *(A -1):OE = OS +493:NS = ST: GOSUB 90
  237. 2360  POKE 20480,A -1
  238. 2370  PRINT D$"DELETEECF."CF$"."DN
  239. 2380  PRINT D$"BSAVEECF."CF$"."DN",A20480,L"1 +494 * PEEK(20480)
  240. 2390 C = C -1
  241. 2400  PRINT D$"OPEN"FI$",L83
  242. 2410  PRINT D$"WRITE"FI$",R"TS
  243. 2420  PRINT CF$: PRINT ND: FOR S = 1 TO ND: PRINT ND$(S): NEXT : PRINT C
  244. 2430  PRINT D$"CLOSE
  245. 2440  GOSUB 4400: GOTO 2110
  246. 2450  REM ** SORT/SHUFFLE CARDS **
  247. 2460  PRINT : HTAB 11: PRINT "SORT/SHUFFLE CARDS
  248. 2470  PRINT : PRINT "DIVIDERS:": PRINT : GOSUB 360
  249. 2480  IF   NOT  LEN(DV$)  THEN 4180
  250. 2490 NC =  PEEK(20480):SF = 0: VTAB 20: CALL  -868
  251. 2500  IF NC <2  THEN  PRINT  CHR$(7): VTAB 20: PRINT "THERE ARE TOO FEW CARDS IN THAT SECTION.":DV$ = "": GOSUB 390: GOTO 2480
  252. 2510  PRINT : PRINT "STAND BY": IF NC < >35  THEN  FOR S = NC +1 TO 35:C$(S) = ".........": NEXT : REM (9 PERIODS)
  253. 2520  FOR S = 1 TO NC:C$(S) = ""
  254. 2530 MEM = 20481 +494 *(S -1)
  255. 2540  POKE 252, INT(MEM/256): POKE 251,MEM -256 * PEEK(252)
  256. 2550  POKE 37773, INT((MEM +494)/256): POKE 37772,MEM +494 -256 * PEEK(37773)
  257. 2560  CALL 37774
  258. 2570 C$(S) = CC$
  259. 2580  NEXT 
  260. 2590  TEXT : HOME 
  261. 2600  PRINT "CARDFILE:";: INVERSE : PRINT  LEFT$(CF$,14);: NORMAL : HTAB 33 - LEN(DV$): PRINT "SECTION:";: INVERSE : PRINT DV$;: NORMAL : PRINT DA$
  262. 2610 S = 35: VTAB 17: PRINT DA$
  263. 2620  FOR X = 1 TO S
  264. 2630  IF X = 1  OR X = 15  OR X = 29  THEN  VTAB 3
  265. 2640  HTAB 1 +(X <10) +14 *(X >14) +14 *(X >28)
  266. 2650  PRINT X" "C$(X);
  267. 2660  IF X <29  THEN  PRINT 
  268. 2670  NEXT : VTAB 24: PRINT  LEFT$(DA$,39);: POKE 2039,173
  269. 2680  VTAB 18: POKE 34,17: POKE 35,23: HOME 
  270. 2690  HTAB 7: PRINT "ECF INDEX CARD SHUFFLER MENU": PRINT DA$;
  271. 2700  PRINT "(1) DISPLAY AN INDEX CARD
  272. 2710  PRINT "(2) EXCHANGE INDEX CARDS
  273. 2720  PRINT "(3) SORT ALPHABETICALLY
  274. 2730  PRINT "(4) RETURN TO MAIN MENU";
  275. 2740  HTAB 28: PRINT "SELECT ( )";
  276. 2750  HTAB 36: GET S$: IF (S$ <"1"  OR S$ >"4")  AND S$ < >ES$  THEN  CALL BL: GOTO 2750
  277. 2760  IF S$ = ES$  THEN S$ = "4"
  278. 2770  PRINT S$;: HOME : PRINT 
  279. 2780  ON  VAL(S$) GOTO 2790,2860,2950,2970
  280. 2790  PRINT : PRINT "DISPLAY CARD NO. (1-"NC;: INPUT "): ";S$:S =  VAL(S$)
  281. 2800  IF S <1  OR S >NC  THEN  HOME : GOTO 2690
  282. 2810  GOSUB 590
  283. 2820  HTAB 13: PRINT "CARDFILE: "CF$
  284. 2830  INVERSE : VTAB 1: HTAB 2: PRINT DV$: HTAB 2: PRINT S" OF "NC: NORMAL 
  285. 2840 ST = 20481 +494 *(S -1): FOR Y = 1 TO 13:OS = ST +(Y -1) *38:OE = OS +37:NS = MEM(Y): GOSUB 90: NEXT 
  286. 2850  VTAB 21: INPUT "PRESS <RETURN> FOR MENU ";S$: GOTO 2590
  287. 2860 SF = 1: PRINT "FIRST CARD (1-"NC;: INPUT ") : ";S1$: PRINT 
  288. 2870 S1 =  VAL(S1$): IF   NOT S1  OR S1 >NC  THEN  CALL BL: GOTO 2680
  289. 2880  VTAB 2 +S1 *(S1 <15) +(S1 -14) *(S1 >14  AND S1 <29) +(S1 -28) *(S1 >28): HTAB 4 +14 *(S1 >14) +14 *(S1 >28): FLASH : PRINT C$(S1);: NORMAL 
  290. 2890  VTAB 21: HTAB 1
  291. 2900  PRINT "SECOND CARD (1-"NC;: INPUT "): ";S2$: HOME 
  292. 2910 S2 =  VAL(S2$): IF   NOT S2  OR S2 >NC  OR S1 = S2  THEN  CALL BL: GOTO 2940
  293. 2920  VTAB 2 +S2 *(S2 <15) +(S2 -14) *(S2 >14  AND S2 <29) +(S2 -28) *(S2 >28): HTAB 4 +14 *(S2 >14) +14 *(S2 >28): FLASH : PRINT C$(S2);: NORMAL 
  294. 2930  VTAB 21: HTAB 1: GOSUB 140
  295. 2940  TEXT :S = NC: GOTO 2620
  296. 2950 SF = 1: PRINT "SORTING ";:FL = 0: FOR S = 1 TO NC -1: IF C$(S) >C$(S +1)  THEN S1 = S:S2 = S +1:FL = 1: GOSUB 140
  297. 2960  NEXT : ON FL +1 GOTO 2940,2950
  298. 2970  IF SF  THEN  PRINT "STAND BY": PRINT D$"BSAVEECF."CF$"."DN",A20480,L"1 +494 *NC
  299. 2980  GOTO 4380
  300. 2990  REM ** CREATE CARDFILE **
  301. 3000  PRINT : HTAB 12: PRINT "CREATE A CARDFILE
  302. 3010  GOSUB 450: IF NC = 10  THEN  PRINT "MAXIMUM OF 10 CARDFILES ALLOWED!": PRINT "PRESS ANY KEY FOR MENU": WAIT  -16384,128: POKE  -16368,0: GOTO 4180
  303. 3020 VP =  PEEK(37) +1: PRINT "NEW CARDFILE NAME (9 CHARS): ";: FOR S = 1 TO 9: PRINT  CHR$(95);: NEXT : HTAB 30: INPUT "";CF$
  304. 3030  IF  LEN(CF$) >9  OR  LEN(CF$) <1  THEN  VTAB VP: CALL BL: CALL  -958: GOTO 3020
  305. 3040 SS$ = CF$: GOSUB 670: IF EF  THEN  VTAB  PEEK(37): CALL  -868: CALL BL: GOTO 3020
  306. 3050  PRINT : PRINT "STANDARD ALPHABETICAL DIVIDERS (Y/N)? ";
  307. 3060  GET S$: IF S$ < >"Y"  AND S$ < >"N"  THEN  CALL BL: GOTO 3060
  308. 3070  PRINT S$: IF S$ = "Y"  THEN ND = 7: RESTORE : FOR S = 1 TO ND: READ ND$(S): NEXT : GOTO 3160
  309. 3080  FOR S = 1 TO 7:ND$(S) = "": NEXT 
  310. 3090  PRINT : PRINT "HOW MANY DIVIDERS (2-7)? ";
  311. 3100  GET ND$:ND =  VAL(ND$): IF ND <2  OR ND >7  THEN  CALL BL: GOTO 3100
  312. 3110  HOME : PRINT ND$: FOR S = 1 TO ND: PRINT 
  313. 3120  PRINT "DIVIDER LABEL #"S" (6 CHARS)";
  314. 3130 VP =  PEEK(37) +1: HTAB 29: FOR I = 1 TO 6: PRINT  CHR$(95);: NEXT : HTAB 27: INPUT ": ";ND$(S): IF  LEN(ND$(S)) >6  OR  LEN(ND$(S)) <1  THEN  VTAB VP: CALL BL: CALL  -958: GOTO 3120
  315. 3140 SS$ = ND$(S): GOSUB 670: IF EF  THEN  VTAB  PEEK(37): CALL BL: GOTO 3130
  316. 3150  NEXT 
  317. 3160  PRINT : PRINT "STAND BY"
  318. 3170  PRINT D$"OPEN"FI$",L83
  319. 3180  PRINT D$"WRITE"FI$",R0
  320. 3190  PRINT NC +1
  321. 3200  PRINT D$"WRITE"FI$",R"NC +1
  322. 3210  PRINT CF$: PRINT ND
  323. 3220  FOR S = 1 TO ND: PRINT ND$(S): NEXT : PRINT 0
  324. 3230  PRINT D$"CLOSE
  325. 3240  POKE 20480,0:TS = NC +1
  326. 3250  FOR S = 1 TO ND
  327. 3260  PRINT D$"BSAVEECF."CF$"."S",A20480,L1 
  328. 3270  NEXT :C = 0:DV$ = ""
  329. 3280  GOTO 4180
  330. 3290  REM ** SELECT CARDFILE **
  331. 3300  PRINT : HTAB 12: PRINT "SELECT A CARDFILE
  332. 3310  GOSUB 450: IF   NOT TC  THEN  PRINT : INPUT "PRESS <RETURN> ";S$: GOTO 4180
  333. 3320  INPUT "WHICH ONE? ";CF$
  334. 3330 SS$ = CF$: GOSUB 610:CF$ = ST$
  335. 3340 FL = 0: FOR S = 1 TO NC:FL = FL +(CF$ = CF$(S)): NEXT : IF   NOT FL  THEN 3700
  336. 3350  FOR S = 1 TO 7:ND$(S) = "": NEXT 
  337. 3360  PRINT D$"OPEN"FI$",L83
  338. 3370  FOR S = 1 TO NC
  339. 3380  PRINT D$"READ"FI$",R"S
  340. 3390  INPUT S$: IF S$ = CF$  THEN TS = S:S = NC: NEXT : GOTO 3410
  341. 3400  NEXT 
  342. 3410  PRINT D$"READ"FI$",R"TS
  343. 3420  INPUT CF$,ND
  344. 3430  FOR S = 1 TO ND: INPUT ND$(S): NEXT : INPUT C
  345. 3440  PRINT D$"CLOSE
  346. 3450 DV$ = "": GOTO 4180
  347. 3460  REM ** DELETE CARDFILE **
  348. 3470  PRINT : HTAB 12: PRINT "DELETE A CARDFILE
  349. 3480  GOSUB 450: IF   NOT TC  THEN  PRINT : INPUT "PRESS <RETURN> ";S$: GOTO 4180
  350. 3490  INVERSE : PRINT "DELETE";: NORMAL : INPUT " WHICH FILE? ";S$
  351. 3500  PRINT 
  352. 3510 FL = 0: FOR S = 1 TO NC:FL = FL +(S$ = CF$(S)): NEXT : IF   NOT FL  THEN 4180
  353. 3520  PRINT "PRESS 'D' TO DELETE THE FILE, ANY OTHER KEY TO RETURN TO MENU: ";
  354. 3530  GET A$: PRINT A$: IF A$ < >"D"  THEN 4180
  355. 3540  PRINT 
  356. 3550  PRINT "STAND BY
  357. 3560  PRINT D$"OPEN"FI$",L83
  358. 3570  FOR S = 1 TO NC
  359. 3580  PRINT D$"READ"FI$",R"S
  360. 3590  INPUT CF$: IF CF$ = S$  THEN TS = S:S = NC: NEXT : GOTO 3610
  361. 3600  NEXT 
  362. 3610  PRINT D$"READ"FI$",R"TS
  363. 3620  INPUT S$,ND
  364. 3630  FOR S = 1 TO ND: INPUT ND$(S): NEXT 
  365. 3640  PRINT D$"CLOSE"
  366. 3650  FOR S = 1 TO ND
  367. 3660  PRINT D$"BSAVEECF."S$"."S",A20480,L1": PRINT D$"DELETEECF."S$"."S
  368. 3670  NEXT 
  369. 3680  PRINT D$"OPEN"FI$",L83": GOSUB 4910
  370. 3690  PRINT D$"WRITE"FI$",R0": PRINT NC -1: PRINT D$"CLOSE"
  371. 3700 CF$ = "":C = 0:ND = 7:DV$ = "": GOTO 4180
  372. 3710  REM ** DISK MODE **
  373. 3720  TEXT : HOME : POKE 216,0: ONERR  GOTO 3840
  374. 3730  PRINT "DISK MODE - ENTER DISK COMMAND OR ";: INVERSE : PRINT "RETURN";: NORMAL 
  375. 3740  IF PD  THEN  PRINT " (USE 'PREFIX,D-' TO CHANGE DRIVE.)"
  376. 3750  PRINT DA$: POKE 34,2
  377. 3760 A$ = "": PRINT 
  378. 3770  PRINT ":";: CALL  -657
  379. 3780  FOR S = 512 TO 767:S$ =  CHR$( PEEK(S)): IF S$ < > CHR$(141)  THEN A$ = A$ +S$: NEXT : GOTO 3800
  380. 3790 S = 767: NEXT 
  381. 3800  IF   NOT  LEN(A$)  THEN DD =  PEEK(43624):DS =  PEEK(43626): ONERR  GOTO 4830
  382. 3810  IF   NOT  LEN(A$)  THEN 4380
  383. 3820  PRINT D$A$
  384. 3830  GOTO 3760
  385. 3840  CALL BL: PRINT : PRINT "DISK ERROR! CODE => " PEEK(222): GOTO 3760
  386. 3850  REM ** CHANGE SLOTS/DRIVES **
  387. 3860  PRINT : HTAB 11: PRINT "CHANGE SLOTS/DRIVES 
  388. 3870  VTAB 10: PRINT "(1) CURRENT PRINTER SLOT = "PS
  389. 3880  PRINT :MS = 4 -2 *PD:MS$ = " (1-3)": IF PD  THEN MS$ = " ( 1 )"
  390. 3890  IF   NOT PD  THEN  PRINT "(2) CURRENT DISK SLOT = "DS
  391. 3900  PRINT 
  392. 3910  IF   NOT PD  THEN  PRINT "(3) CURRENT DISK DRIVE = "DD
  393. 3920  IF   NOT PD  THEN  PRINT 
  394. 3930  PRINT "("MS") RETURN TO MAIN MENU 
  395. 3940  VTAB 19
  396. 3950  PRINT "UPDATE"MS$" OR <ESC> ( )";: HTAB 24
  397. 3960  GET S$: PRINT S$;:S =  VAL(S$) +MS *(S$ = ES$)
  398. 3970  IF S <1  OR S >MS  THEN  PRINT  CHR$(7): GOTO 3940
  399. 3980  IF S = MS  THEN  IF PS < >DS  THEN 4180
  400. 3990  IF S = MS  THEN 4130
  401. 4000  HTAB 1: CALL  -868: HTAB 1
  402. 4010  PRINT "ENTER NEW ";
  403. 4020  IF S = 1  THEN  PRINT "PRINTER SLOT (1-6): ";
  404. 4030  IF S = 2  THEN  PRINT "DISK SLOT (1-6): ";
  405. 4040  IF S = 3  THEN  PRINT "DISK DRIVE (1-2): ";
  406. 4050  GET A$: PRINT A$;
  407. 4060 A =  VAL(A$)
  408. 4070  IF A <1  OR A >6  OR (A >2  AND S = 3)  THEN  CALL BL: GOTO 4000
  409. 4080  IF S = 1  THEN PS = A
  410. 4090  IF S = 2  THEN DS = A
  411. 4100  IF S = 3  THEN DD = A
  412. 4110  POKE 43624,DD: POKE 43626,DS
  413. 4120  HOME : IF PS < >DS  THEN 3850
  414. 4130  VTAB 6: CALL BL: PRINT 
  415. 4140  FLASH : PRINT "ERROR";: NORMAL : PRINT ": PRINTER SLOT = DISK SLOT
  416. 4150  GOTO 3870
  417. 4160  REM ** EXIT
  418. 4170  TEXT : HOME : END 
  419. 4180  HOME : GOTO 4520
  420. 4190  REM ** INITIALIZATION **
  421. 4200 D$ =  CHR$(4):ES$ =  CHR$(27):PD = ( PEEK(48896) = 76)
  422. 4210  IF  PEEK(768) < >169  THEN  PRINT D$"BLOADECF.ML"
  423. 4220  PRINT D$"BLOADECF.TEXTCOMP"
  424. 4230  IF  PEEK( -1101) = 6  THEN  FOR X = 907 TO 909: POKE X,234: NEXT 
  425. 4240 MV = 958:CA = 768:BL =  -198
  426. 4250 FI$ = "ECF.INDEXFILE
  427. 4260  DIM MEM(13),C$(35)
  428. 4270 M1 = 60:M2 = 62:M3 = 66:M4 = 256
  429. 4280  DATA ABC,DEF,GHI,JKLM,NOPQ,RST,UVWXYZ
  430. 4290  DATA 1409,1537,1665,1793,1921,1065,1193,1321,1449,1577,1705,1833,1961
  431. 4300  FOR S = 1 TO 40
  432. 4310 DA$ = DA$ +"-": NEXT 
  433. 4320 PS = 1:ND = 7
  434. 4330 DD =  PEEK(43624)
  435. 4340 DS =  PEEK(43626)
  436. 4350  FOR S = 1 TO 7: READ S$: NEXT 
  437. 4360  FOR S = 1 TO 13: READ MEM(S): NEXT 
  438. 4370  ONERR  GOTO 4830
  439. 4380  GOSUB 4400
  440. 4390  GOTO 4520
  441. 4400  REM ** MAIN MENU **
  442. 4410  TEXT : HOME 
  443. 4420  HTAB 10: PRINT  LEFT$(DA$,21)
  444. 4430  INVERSE : HTAB 10: PRINT  SPC( 21)
  445. 4440  HTAB 10: PRINT " EXECUTIVE CARD FILE"
  446. 4450  NORMAL : HTAB 10: PRINT  LEFT$(DA$,21)
  447. 4460  HTAB 15: PRINT "BY JIM GANZ"
  448. 4470  PRINT DA$
  449. 4480  VTAB 23: PRINT DA$;
  450. 4490  PRINT "** COPYRIGHT 1985 BY MICROSPARC, INC **";
  451. 4500  POKE 34,5: POKE 35,22
  452. 4510  HOME : RETURN 
  453. 4520  VTAB 6: PRINT 
  454. 4530  IF PD  THEN  PRINT D$"PREFIX": INPUT PF$
  455. 4540  PRINT "MENU OF OPTIONS:
  456. 4550  PRINT 
  457. 4560  PRINT "1) EDIT AN INDEX CARD
  458. 4570  PRINT "2) SCAN INDEX CARD(S)
  459. 4580  PRINT "3) REMOVE INDEX CARD(S) 
  460. 4590  PRINT "4) SORT/SHUFFLE CARDS
  461. 4600  PRINT 
  462. 4610  PRINT "5) CREATE A CARDFILE
  463. 4620  PRINT "6) SELECT A CARDFILE
  464. 4630  PRINT "7) DELETE A CARDFILE
  465. 4640  PRINT 
  466. 4650  PRINT "8) ENTER DISK MODE 
  467. 4660  PRINT "9) CHANGE SLOTS/DRIVES    
  468. 4670  PRINT "0) EXIT TO BASIC 
  469. 4680  VTAB 9: HTAB 24: PRINT "# CARDS: "C
  470. 4690  HTAB 24: PRINT "ROOM FOR "ND *35 -C: PRINT 
  471. 4700  HTAB 24: PRINT "PRINTER SLOT = "PS
  472. 4710  IF PD GOTO 4740
  473. 4720  HTAB 24: PRINT "DISK SLOT    = "DS
  474. 4730  HTAB 24: PRINT "DISK DRIVE   = "DD: GOTO 4750
  475. 4740  HTAB 24: PRINT "PREFIX       = ": HTAB 24: PRINT PF$
  476. 4750  VTAB 22: PRINT "ACTIVE CARDFILE: ";: IF   NOT  LEN(CF$)  THEN  PRINT  CHR$(91)"NONE]";: GOTO 4770
  477. 4760  PRINT  CHR$(34)CF$ CHR$(34);
  478. 4770  VTAB 19: HTAB 28: PRINT "SELECT ( )";: HTAB 36
  479. 4780 S =  FRE(S): POKE  -16368,0
  480. 4790  GET S$:S =  VAL(S$): PRINT S$;
  481. 4800  IF (S$ <"0"  OR S$ >"9")  OR (  NOT  LEN(CF$)  AND S  AND S <5)  OR (  NOT C  AND (S >1  AND S <5))  THEN  CALL BL: GOTO 4770
  482. 4810  HOME 
  483. 4820  ON S +1 GOTO 4160,690,1450,2110,2450,2990,3290,3460,3710,3850
  484. 4830  REM ** ERROR TRAP **
  485. 4840  CALL  -3288: TEXT : HOME : NORMAL 
  486. 4850  CALL BL: PRINT 
  487. 4860  PRINT D$"CLOSE": IF  PEEK(222) = 6  AND VF = 1  THEN  PRINT "NO INDEX FILE ON THIS DISK.  INSERT": PRINT "CORRECT DATA DISK OR QUIT AND RUN": PRINT "'CREATE.INDEX' TO SET UP INDEX FILE.":VF = 0: GOTO 4890
  488. 4870  IF  PEEK(222) = 255 GOTO 4380
  489. 4880  PRINT "ERROR #" PEEK(222)" HAS OCCURRED IN LINE " PEEK(218) + PEEK(219) *256
  490. 4890  PRINT : PRINT "PRESS ANY KEY TO RETURN TO MAIN MENU";: GET Z$: PRINT : GOTO 4370
  491. 4900  REM ** MOVE CARDFILES DOWN
  492. 4910  ON TS = NC GOTO 4930: FOR S = TS +1 TO NC: PRINT D$"READ"FI$",R"S: INPUT S$,ND: FOR I = 1 TO ND: INPUT DV$(I): NEXT 
  493. 4920  PRINT D$"WRITE"FI$",R"S -1: PRINT S$: PRINT ND: FOR I = 1 TO ND: PRINT DV$(I): NEXT : PRINT 0: NEXT S
  494. 4930  RETURN