home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib16.dsk / P.A.C..bas < prev    next >
BASIC Source File  |  2023-02-26  |  14KB  |  247 lines

  1. 10  REM ********3.2.84**********
  2. 20  REM ** -- -- P.A.C. -- -- **
  3. 30  REM **   BY RUDY A. GUY   **
  4. 40  REM ** COPYRIGHT (C) 1983 **
  5. 50  REM ** BY MICROSPARC, INC **
  6. 60  REM ** LINCOLN, MA. 01773 **
  7. 70  REM ************************
  8. 80  TEXT : HOME 
  9. 90  ONERR  GOTO 9300
  10. 100  REM   : INITIALIZE VARIABLES
  11. 110 O$ =  CHR$(4) +"OPEN DATES,L65":W$ =  CHR$(4) +"WRITE DATES,R":R$ =  CHR$(4) +"READ DATES,R"
  12. 120 OM$ =  CHR$(4) +"OPEN MEMOS,L125":WM$ =  CHR$(4) +"WRITE MEMOS,R":RM$ =  CHR$(4) +"READ MEMOS,R"
  13. 130 C$ =  CHR$(4) +"CLOSE"
  14. 140  DIM MO$(12),DA(12),ME$(15),ME(15),TM(52),TD(52),TY(52),R(52),T1$(15),T2$(15),T3$(15),RE(15)
  15. 150  GOSUB 9100
  16. 160  PRINT  CHR$(4)"RENAME LOCK,LOCK"
  17. 170  PRINT  CHR$(4)"OPEN LOCK": PRINT  CHR$(4)"READ LOCK": INPUT SC$: PRINT  CHR$(4)"CLOSE"
  18. 180  VTAB 20: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **": VTAB 10: PRINT "PLEASE INPUT YOUR SECURITY CODE :____";: HTAB  PEEK(36) -3
  19. 190  FOR I = 1 TO 4: GET A$: IF A$ = ""  THEN TT = TT +1: GOTO 220
  20. 200  PRINT A$;:YN$ = YN$ +A$: NEXT : IF YN$ < >SC$  THEN TT = TT +1: GOTO 220
  21. 210  GOTO 250
  22. 220  IF TT <3  THEN YN$ = "": HOME : GOTO 180
  23. 230  HOME : NEW 
  24. 240  REM  : TITLE PAGE
  25. 250  TEXT : HOME 
  26. 260  VTAB 3: PRINT "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-                                      =-                                      =-                                      =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
  27. 270  VTAB 4:A$ = "-- -- P.A.C. -- --": GOSUB 8000
  28. 280 A$ = "PERSONAL APPOINTMENT CALENDAR": GOSUB 8000
  29. 290 A$ = "BY: RUDY A. GUY": GOSUB 8000
  30. 300  IF FL = 1  THEN FL = 0: RETURN 
  31. 310  VTAB 20: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **": VTAB 12: INPUT "ENTER CURRENT DATE (MM,DD,YY) :";MM,DD,YY
  32. 320  IF MM <1  OR MM >12  OR YY <1  OR YY >99  OR DD <1  THEN 250
  33. 330  IF YY/4 < > INT(YY/4)  AND MM = 2  AND DD >28  THEN 250
  34. 340  IF YY/4 =  INT(YY/4)  AND MM = 2  AND DD >29  THEN 250
  35. 350  IF MM < >2  THEN  IF DD >DA(MM)  THEN 250
  36. 360  IF  LEN( STR$(YY)) = 2  THEN YR$ =  STR$(YY): GOTO 380
  37. 370  IF  LEN( STR$(YY)) <2  THEN YR$ = "0" + STR$(YY)
  38. 380  GOSUB 9500
  39. 390  POKE 34,8: HOME : POKE 32,5: POKE 33,35: HOME 
  40. 400  PRINT "[1] LIST TODAYS' MEMOS": PRINT "[2] LIST MEMOS FOR SELECTED DATE": PRINT "[3] ADD MEMOS TO CALENDAR": PRINT "[4] DELETE ALL MEMOS": PRINT "[5] EXIT PROGRAM"
  41. 410  PRINT : PRINT "SELECT ONE OF THE ABOVE:";: GET A$: PRINT A$: IF  VAL(A$) <1  OR  VAL(A$) >5  THEN 390
  42. 420  TEXT : HOME :R = 0:TM = 0:TD = 0:TY = 0:ME$ = "":PR = 0
  43. 430  ON  VAL(A$) GOSUB 1010,3000,5000,7000,9000
  44. 440  TEXT : HOME :FL = 1: GOSUB 250: GOTO 390
  45. 1000  REM   LIST OUT CURRENT DATES MEMOS
  46. 1010 TM = MM:TD = DD:TY = YY: GOSUB 9010
  47. 1020  PRINT O$: PRINT R$;R: INPUT ME: IF ME = 0  THEN  PRINT C$:FL = 1: VTAB 12: CALL  -958: VTAB 12: PRINT "NO MEMOS FOR "MO$(MM)" "DD", 19"YR$".": VTAB 23: PRINT "PRESS ANY KEY TO RETURN TO MENU.";: GET A$: PRINT : RETURN 
  48. 1030  FOR I = 1 TO ME: INPUT ME(I): NEXT : PRINT C$: IF PR  THEN 1050
  49. 1040  VTAB 12: CALL  -958: VTAB 12: PRINT "DO YOU WANT A PRINT OUT?";: GET A$: PRINT : IF A$ = "Y"  THEN PR = 1
  50. 1050  HOME : VTAB 12: PRINT "READING IN MEMO FILES..."
  51. 1060  FOR I = 1 TO ME: PRINT OM$: PRINT RM$;ME(I):ME$(I) = ""
  52. 1070  CALL  -662: FOR J = 512 TO 637:L =  PEEK(J): IF L = 141  THEN 1090
  53. 1080 L = L -128:ME$(I) = ME$(I) + CHR$(L): NEXT J
  54. 1090  NEXT I: PRINT C$
  55. 1100  IF ME <2  THEN 1190
  56. 1110  FOR I = 1 TO ME -1
  57. 1120  FOR J = I +1 TO ME
  58. 1130  IF  LEFT$(ME$(I),4) < =  LEFT$(ME$(J),4)  THEN 1170
  59. 1140 T$ = ME$(I):T = ME(I)
  60. 1150 ME$(I) = ME$(J):ME(I) = ME(J)
  61. 1160 ME$(J) = T$:ME(J) = T
  62. 1170  NEXT 
  63. 1180  NEXT 
  64. 1190  TEXT : HOME 
  65. 1200  IF PR  THEN  PRINT  CHR$(4);"PR#1": PRINT  CHR$(9);"80N": REM  TURN ON PARALLEL PRINTER IN SLOT 1.
  66. 1210  IF PR  THEN  PRINT "CURRENT DATE : "MO$(MM)" "DD", 19"YR$
  67. 1220  IF AD  AND PR  THEN  PRINT "MEMOS FOR ";MO$(TM)" "TD", 19";TY$
  68. 1230  FOR I = 1 TO 10: IF R = HD(I)  AND PR  THEN  PRINT HD$(I): GOTO 1250
  69. 1240  NEXT 
  70. 1250  IF PR  THEN  GOSUB 5450: REM   PRINT OUT
  71. 1260  PRINT "CURRENT DATE : "MO$(MM)" "DD", 19"YR$
  72. 1270  IF AD  THEN  PRINT "MEMOS FOR ";MO$(TM)" "TD", 19";TY$
  73. 1280  FOR I = 1 TO 10: IF R = HD(I)  THEN  PRINT HD$(I): GOTO 1300
  74. 1290  NEXT 
  75. 1300  VTAB 4: PRINT "________________________________________";:FL = 1: GOSUB 5450
  76. 1310  VTAB 5
  77. 1320  FOR I = 1 TO ME: INVERSE : PRINT "MEMO #";I: NORMAL : PRINT T1$(I)":"T2$(I);T3$(I);: GOSUB 9700: PRINT 
  78. 1330  IF I/3 =  INT(I/3)  AND I < >ME  THEN  GOSUB 1440
  79. 1340  NEXT : GOSUB 1440: TEXT : HOME 
  80. 1350  IF AD  THEN AD = 0: RETURN 
  81. 1360  VTAB 12: PRINT "DO YOU WANT TOMORROWS' MEMOS ?";: GET A$: PRINT A$: IF A$ = "N"  THEN  RETURN 
  82. 1370 TD = TD +1: IF TD >DA(TM)  THEN TD = 1:TM = TM +1: IF TM = 3  AND TY/4 < > INT(TY/4)  THEN R = R +1
  83. 1380 TY$ = YR$
  84. 1390  IF TM >12  THEN TM = 1:TY = TY +1:TY$ =  STR$(TY): IF  LEN(TY$) <2  THEN TY$ = "0" +TY$
  85. 1400 R = R +1
  86. 1410  PRINT O$: PRINT R$;R: INPUT ME: IF ME = 0  THEN  PRINT C$:FL = 1: VTAB 12: CALL  -958: VTAB 12: PRINT "NO MEMOS FOR "MO$(TM)" "TD", 19"TY$".": VTAB 23: PRINT "PRESS ANY KEY TO RETURN TO MENU.";: GET A$: PRINT : RETURN 
  87. 1420 AD = 1: GOSUB 1030
  88. 1430  RETURN 
  89. 1440  REM   DELETE A MEMO
  90. 1450  VTAB 21: PRINT "PRESS <SPACE> TO DELETE ALL MEMOS FOR   THIS DATE, <#> TO DELETE A MEMO, OR     <RETURN> TO CONTINUE.": POKE 34,20
  91. 1460 X =  PEEK( -16384)
  92. 1470  IF X = 141  THEN  POKE  -16368,0: POKE 34,4: HOME : RETURN 
  93. 1480  IF X = 160  THEN  POKE  -16368,0: GOTO 1510
  94. 1490  IF X = 163  THEN  POKE  -16368,0: POKE 34,20: HOME : GOTO 1540
  95. 1500  GOTO 1460
  96. 1510  REM   DELETE ALL MEMOS FOR CURRENT DATE.
  97. 1520  PRINT "ENTER SECURITY CODE TO CONFIRM :";: INPUT "";A$: IF A$ < >SC$  THEN  POKE 34,4: HOME : RETURN 
  98. 1530  PRINT O$: PRINT W$;R: PRINT 0: PRINT C$: POP : RETURN 
  99. 1540  REM   DELETE SINGLE MEMOS
  100. 1550  HOME : PRINT "DELETE WHICH MEMO (0 TO ABORT)";: INPUT DE
  101. 1560  IF DE = 0  THEN  POKE 34,4: HOME : RETURN 
  102. 1570  IF ME = 1  THEN  GOSUB 1530
  103. 1580  FOR J = DE TO ME -1:ME(J) = ME(J +1): NEXT 
  104. 1590 ME = ME -1
  105. 1600  PRINT O$: PRINT W$;R: PRINT ME: FOR I = 1 TO ME: PRINT ME(I): NEXT : PRINT C$
  106. 1610  POP : GOTO 1060
  107. 3000  REM   VIEW ANY DATES MEMOS
  108. 3010  HOME : VTAB 12: PRINT "ENTER DATE FOR MEMOS YOU WISH TO VIEW INTHE FOLLOWING FORM (MM,DD,YY) :";: INPUT "";TM,TD,TY
  109. 3020  IF TM <1  OR TM >12  OR TY <0  OR TY >99  THEN 3010
  110. 3030  IF TD <1  OR TD >DA(TM)  THEN 3010
  111. 3040 TY$ =  STR$(TY): IF  LEN(TY$) <2  THEN TY$ = "0" +TY$
  112. 3050  HOME 
  113. 3060 R = 0: GOSUB 9010
  114. 3070  PRINT O$: PRINT R$;R: INPUT ME: IF ME = 0  THEN  PRINT C$:FL = 1: VTAB 12: CALL  -958: VTAB 12: PRINT "NO MEMOS FOR "MO$(TM)" "TD", 19"TY$".": VTAB 23: PRINT "PRESS ANY KEY TO RETURN TO MENU.";: GET A$: PRINT : RETURN 
  115. 3080 AD = 1: GOSUB 1030
  116. 3090  TEXT : HOME : VTAB 12: PRINT "DO YOU WISH TO SEE ANOTHER DATE ?";: GET A$: PRINT A$: IF A$ = "Y"  THEN 3000
  117. 3100  RETURN 
  118. 5000  REM   ADD A MEMO TO CALENDAR
  119. 5010  PRINT OM$: PRINT RM$;0: INPUT M1: PRINT C$
  120. 5020  PRINT "CURRENT DATE :"MO$(MM)" "DD", 19"YR$
  121. 5030  PRINT "________________________________________": POKE 34,2: HOME 
  122. 5040 ME$ = ""
  123. 5050 M1 = M1 +1
  124. 5060  VTAB 5: PRINT "ENTER TIME FOR MEMO IN MILITARY FASHION.(EXAMPLE 2300 = 11:00 P.M.) :____";: HTAB  PEEK(36) -3: INPUT "";TI$
  125. 5070  IF TI$ = ""  THEN TI$ = "9999": GOTO 5090
  126. 5080  IF  VAL( LEFT$(TI$,2)) >24  OR  VAL( LEFT$(TI$,2)) <0  OR  VAL( MID$ (TI$,3,2)) <0  OR  VAL( MID$ (TI$,3,2)) >59  THEN  HOME : GOTO 5060
  127. 5090  IF  LEN(TI$) < >4  THEN  HOME : GOTO 5060
  128. 5100  VTAB 8: PRINT "ENTER YOUR MEMO:"
  129. 5110  FOR I = 1 TO 120: PRINT "_";: NEXT : GOSUB 9540
  130. 5120  VTAB 18: PRINT "IS THIS INFORMATION CORRECT ?";: GET A$: PRINT : IF A$ = "N"  THEN ME$ = "": TEXT : HOME : GOTO 5000
  131. 5130  HOME : VTAB 4: PRINT "ON HOW MANY DATES DO YOU WANT THIS MEMO STORED ? ( 0 TO EXIT TO MENU.) :";: INPUT "";SM: IF SM >52  THEN  PRINT : PRINT "TOO MANY DATES - 52 IS MAX.)": FOR I = 1 TO 3000: NEXT : GOTO 5130
  132. 5140  IF SM < = 0  THEN  RETURN 
  133. 5150  FOR I = 1 TO SM
  134. 5160  VTAB 7: PRINT "DATE #";I;" (MM,DD,YY) :";: INPUT "";TM(I),TD(I),TY(I)
  135. 5170  IF TM(I) <1  OR TM(I) >12  OR TY(I) <0  OR TY(I) >99  THEN  VTAB 7: CALL  -958: GOTO 5160
  136. 5180  IF TD(I) >DA(TM(I))  THEN  VTAB 7: CALL  -958: GOTO 5160
  137. 5190  IF TY(I) <0  OR TY(I) >99  THEN  VTAB 7: CALL  -958: GOTO 5160
  138. 5200 TM = TM(I):TD = TD(I):R = 0: GOSUB 9010:R(I) = R
  139. 5210  VTAB 7: CALL  -958: NEXT 
  140. 5220  IF SM = 1  THEN  HOME : PRINT : PRINT "IS THIS DATE CORRECT ? ": GOTO 5240
  141. 5230  HOME : PRINT : PRINT "ARE THESE DATES CORRECT ?"
  142. 5240  PRINT : FOR I = 1 TO SM: PRINT TM(I)"/"TD(I)"/";: IF  LEN( STR$(TY(I))) <2  THEN TY$ = "0" + STR$(TY(I)): PRINT TY$,: GOTO 5260
  143. 5250  PRINT  STR$(TY(I)),
  144. 5260  NEXT : PRINT 
  145. 5270  VTAB 4: HTAB 26: GET A$: PRINT A$
  146. 5280  IF A$ = "N"  THEN  HOME : GOTO 5130
  147. 5290  HOME : VTAB 12: PRINT "DO NOT INTERRUPT. FILES BEING WRITTEN TOTHE DISK!": POKE 34,13: HOME 
  148. 5300 ME$ = TI$ +ME$
  149. 5310  PRINT OM$: PRINT WM$;M1: PRINT ME$: PRINT WM$;0: PRINT M1: PRINT C$
  150. 5320  PRINT O$
  151. 5330  FOR J = 1 TO SM: PRINT R$;R(J): INPUT RE
  152. 5340  IF RE = 0  THEN  GOTO 5380
  153. 5350  IF RE = 15  THEN  PRINT : PRINT "THERE ARE ALREADY FIFTEEN MEMOS STORED  FOR "MO$(TM(J))" "TD(J)".": GOTO 5400
  154. 5360  FOR I = 1 TO RE
  155. 5370  INPUT RE(I): NEXT 
  156. 5380 RE = RE +1:RE(RE) = M1
  157. 5390  PRINT W$;R(J): PRINT RE: FOR I = 1 TO RE: PRINT RE(I): NEXT 
  158. 5400  NEXT : PRINT C$
  159. 5410  VTAB 22: PRINT "PRESS <SPACE> FOR ANOTHER MEMO, <RETURN>TO GO BACK TO MENU."
  160. 5420 X =  PEEK( -16384): IF X = 160  THEN  POKE  -16368,0: HOME :ME$ = "": GOTO 5020
  161. 5430  IF X = 141  THEN  POKE  -16368,0: RETURN 
  162. 5440  GOTO 5420
  163. 5450  REM   PRINT OUT DAILY MEMOS.
  164. 5460  PRINT : FOR I = 1 TO ME:T1$(I) =  LEFT$(ME$(I),2):T2$(I) =  MID$ (ME$(I),3,2)
  165. 5470  IF T1$(I) = "99"  THEN T1$(I) = "  ":T2$(I) = "  ":T3$(I) = " ": GOTO 5520
  166. 5480  IF  VAL(T1$(I)) <12  THEN T3$(I) = " AM": GOTO 5520
  167. 5490  IF  VAL(T1$(I)) >12  AND  VAL(T1$(I)) <24  THEN T3$(I) = " PM":T1$(I) =  STR$( VAL(T1$(I)) -12):T1$(I) = "0" +T1$(I): GOTO 5520
  168. 5500  IF T1$(I) = "12"  THEN T3$(I) = " NOON": GOTO 5520
  169. 5510  IF T1$(I) = "00"  OR T1$(I) = "24"  THEN T1$(I) = "12":T3$(I) = " MID."
  170. 5520  IF  LEN(T1$(I)) >2  THEN T1$(I) =  MID$ (T1$(I),2,2)
  171. 5530  NEXT : IF FL = 1  THEN FL = 0: RETURN 
  172. 5540  FOR I = 1 TO ME: PRINT T1$(I)":"T2$(I);T3$(I);: GOSUB 9710: NEXT 
  173. 5550  PRINT  CHR$(4)"PR#0"
  174. 5560  RETURN 
  175. 7000  REM  : RENEW MEMO AND DATES FILES
  176. 7010  TEXT : HOME : VTAB 12: PRINT "THIS OPTION WILL DELETE ALL MEMOS       CURRENTLY STORED. ONCE DELETED, THEY CANNOT BE RECOVERED.  PRESS  <RETURN>  TO  DELETE FILES, <SPACE> TO ABORT."
  177. 7020 X =  PEEK( -16384): IF X = 160  THEN  POKE  -16368,0: RETURN 
  178. 7030  IF X = 141  THEN  POKE  -16368,0: GOTO 7050
  179. 7040  GOTO 7020
  180. 7050  PRINT : PRINT "PLEASE ENTER YOUR SECURITY CODE : ";: INPUT "";A$: IF A$ < >SC$  THEN  RETURN 
  181. 7060  HOME : VTAB 12: PRINT "FILES BEING RENEWED...": POKE 34,13: HOME 
  182. 7070  PRINT O$: FOR I = 1 TO 366: PRINT W$;I: PRINT 0: NEXT : PRINT C$
  183. 7080  PRINT  CHR$(4)"DELETE MEMOS"
  184. 7090  PRINT OM$: PRINT WM$;0: PRINT 0: PRINT C$
  185. 7100  RETURN 
  186. 8000  REM  : CENTERING ROUTINE
  187. 8010  HTAB 20 - LEN(A$)/2: PRINT A$: RETURN 
  188. 9000  TEXT : HOME : END 
  189. 9010  REM   ROUTINE TO DETERMINE WHICH DATES FILE TO OPEN
  190. 9020  IF TM = 1  THEN 9060
  191. 9030  FOR J = 1 TO TM -1
  192. 9040 R = R +DA(J)
  193. 9050  NEXT 
  194. 9060 R = R +TD
  195. 9070  IF TM >2  AND DA(2) = 28  THEN R = R +1
  196. 9080  RETURN 
  197. 9100  REM  : SET UP HOLIDAYS
  198. 9110  FOR I = 1 TO 10: READ HD$(I),HD(I): NEXT 
  199. 9120  FOR I = 1 TO 12: READ MO$(I),DA(I): NEXT 
  200. 9130  RETURN 
  201. 9200  REM  : CREATE SECURITY FILE
  202. 9210  VTAB 20: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **": VTAB 10: PRINT "ENTER A SECURITY CODE : ____";: HTAB ( PEEK(36) -3)
  203. 9220  FOR I = 1 TO 4: GET A$: IF A$ =  CHR$(13)  THEN  PRINT : PRINT "ENTRY ERROR !": FOR I = 1 TO 3000: NEXT :SC$ = "": HOME : GOTO 9210
  204. 9230  PRINT A$;:SC$ = SC$ +A$: NEXT : PRINT 
  205. 9240  PRINT  CHR$(4)"OPEN LOCK": PRINT  CHR$(4)"WRITE LOCK": PRINT SC$: PRINT  CHR$(4)"CLOSE"
  206. 9250  HOME : PRINT "INITIALIZING FILES...": PRINT O$
  207. 9260  FOR I = 1 TO 366: PRINT W$;I: PRINT 0: NEXT : PRINT C$
  208. 9270  PRINT OM$: PRINT WM$;0: PRINT 0: PRINT C$
  209. 9280  GOTO 250
  210. 9300  REM  : ERROR ROUTINES
  211. 9310 ER =  PEEK(222): REM  ERROR TYPE
  212. 9320 EL =  PEEK(218) + PEEK(219) *256
  213. 9330  IF ER = 6  THEN 9200
  214. 9340  IF ER = 254  AND EL = 5130  THEN 5130
  215. 9350  IF ER = 22  THEN FL = 1: GOSUB 250:FL = 0: GOTO 390
  216. 9360  IF ER = 4  THEN  TEXT : HOME : VTAB 12: PRINT "THIS DISK IS WRITE PROTECTED.": END 
  217. 9370  IF ER = 8  THEN  TEXT : HOME : VTAB 12: PRINT "AN I/O ERROR HAS OCCURRED.": END 
  218. 9380  IF ER = 9  THEN  TEXT : HOME : VTAB 12: PRINT "THIS DISK IS FULL.": END 
  219. 9390  IF ER = 254  AND EL <300  THEN  VTAB  PEEK(37): RESUME 
  220. 9400  IF ER = 254  AND EL >300  THEN FL = 1: GOSUB 250:FL = 0: GOTO 390
  221. 9410  TEXT : HOME : VTAB 12: PRINT "ERROR #"ER" OCCURRED IN LINE "EL".": PRINT "PLEASE CONSULT DOS OR APPLESOFT MANUAL.": END 
  222. 9500  REM   CHECK FOR A LEAP YEAR
  223. 9510  IF  INT(YY/4) = YY/4  THEN DA(2) = 29
  224. 9520  RETURN 
  225. 9530  REM  INPUT INFORMATION INTO KEYBOARD BUFFER AMD READ IT BACK OUT.
  226. 9540  VTAB 9: CALL  -662
  227. 9600  FOR I = 512 TO 633:L =  PEEK(I): IF L = 13  OR L = 141  THEN 9620
  228. 9610 ME$ = ME$ + CHR$(L): NEXT 
  229. 9620  IF  LEN(ME$) = 0  THEN  POP : RETURN 
  230. 9630  IF  LEN(ME$) >120  THEN ME$ = "": PRINT "TOO LONG, PLEASE RE-ENTER.": FOR I = 1 TO 3000: NEXT : VTAB 8: CALL  -958: POP : GOTO 5100
  231. 9640  RETURN 
  232. 9650  REM   SCREEN & PRINTOUT FORMATTER
  233. 9700 M1 = 11:M2 = 11:M3 = 39: GOTO 9720
  234. 9710 M1 = 14:M2 = 14:M3 = 79
  235. 9720 N$ =  MID$ (ME$(I),5,( LEN(ME$(I)) -4))
  236. 9730 LN =  LEN(N$): FOR J = M3 -M1 TO 1  STEP  -1:BP$ =  MID$ (N$,J,1): IF BP$ = " "  OR BP$ = ","  OR BP$ = ":"  OR BP$ = "."  OR BP$ = "-"  OR LN < = M3 -M1  THEN 9750
  237. 9740  NEXT : POKE 36,M1: PRINT  LEFT$(N$,M3 -M1 -1);: PRINT "-":J = M3 -M1 -1: GOTO 9760
  238. 9750  POKE 36,M1: PRINT  LEFT$(N$,J): IF LN < = M3 -M1  THEN  RETURN 
  239. 9760 N1$ =  RIGHT$(N$,LN -J)
  240. 9770  IF  LEFT$(N1$,1) = " "  THEN LN =  LEN(N1$) -1:N1$ =  MID$ (N1$,2,LN): GOTO 9770
  241. 9780 LN =  LEN(N1$): FOR J = M3 -M2 TO 1  STEP  -1:BP$ =  MID$ (N1$,J,1): IF BP$ = " "  OR BP$ = ","  OR BP$ = ":"  OR BP$ = "."  OR BP$ = "-"  OR LN < = M3 -M2  THEN 9800
  242. 9790  NEXT : POKE 36,M2: PRINT  LEFT$(N1$,M3 -M2 -1);: PRINT "-":J = M3 -M2 -1:LN =  LEN(N1$): GOTO 9810
  243. 9800  POKE 36,M2: PRINT  LEFT$(N1$,J)
  244. 9810  IF LN < = M3 -M2  THEN  RETURN 
  245. 9820 N1$ =  RIGHT$(N1$,LN -J): GOTO 9770
  246. 9900  DATA    NEW YEARS DAY,1,MEMORIAL DAY,151,INDEPENDENCE DAY,186,COLUMBUS DAY,286,VETERANS' DAY,316,CHRISTMAS EVE,359,CHRISTMAS DAY,360,FLAG DAY,166,HALLOWEEN,305,ST. PATRICKS' DAY,77
  247. 9910  DATA   JANUARY,31,FEBRUARY,28,MARCH,31,APRIL,30,MAY,31,JUNE,30,JULY,31,AUGUST,31,SEPTEMBER,30,OCTOBER,31,NOVEMBER,30,DECEMBER,31