home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib34a.dsk / AUGUST.1988 / NIBBLETERM.bas < prev    next >
BASIC Source File  |  2023-02-26  |  17KB  |  216 lines

  1. 10  REM   **********************
  2. 20  REM   * NIBBLETERM         *
  3. 30  REM   * BY ERIC C. MUELLER *
  4. 40  REM   * COPYRIGHT(C) 1988  *
  5. 50  REM   * MICROSPARC, INC.   *
  6. 60  REM   * CONCORD, MA 01742  *
  7. 70  REM   **********************
  8. 80  IF  PEEK(64435) < >6  THEN  HOME : VTAB 12: PRINT "THIS PROGRAM REQUIRES AN APPLE IIE, IIC, OR IIGS.": VTAB 23: END 
  9. 90  PRINT  CHR$(4);"pr#3": HOME 
  10. 100  ONERR  GOTO 1830
  11. 110  HIMEM: 25600: REM  HIMEM: $6400 (BFR AT $6800; DVR AT $9100)
  12. 120  PRINT  CHR$(4);"BLOADNT.OBJ1": REM    load general driver 
  13. 130  CALL 37120 +39: REM  reserve memory
  14. 140 BS = 37120:ZP = 8: REM  base address and zero-page byte
  15. 150 D$ =  CHR$(4)
  16. 160  GOTO 1060: REM  PREPARE MODEM
  17. 170  POKE  -16368,0: POKE 35,22: POKE 34,1: HOME : POKE 34,2: VTAB 7: POKE 1403,13: INVERSE : PRINT  SPC( 55): VTAB 16: POKE 1403,13: PRINT  SPC( 55): FOR I = 8 TO 15: VTAB I: POKE 1403,13: PRINT " ";: POKE 1403,67: PRINT " ";: NEXT : NORMAL 
  18. 180 A$ = "    ":HF = 1: GOSUB 1600:HF = 0: VTAB 9: FOR I = 1 TO 5: POKE 1403,15: PRINT J$(I): NEXT 
  19. 190  VTAB 14: POKE 1403,15: PRINT "Q. Quit to Applesoft";: POKE 1403,46: PRINT "?. Catalog/Prefix";:
  20. 200  VTAB 21: IF CN% = 1  THEN A$ = "+- press SPACE to re-enter terminal mode -+": GOSUB 1420
  21. 210  VTAB 19:XX =  PEEK(224) + PEEK(225) *256:XX = XX -(104 *256):YY = 10495 -XX:P$ = "100": ON XX = 0 GOTO 220:P$ = "0": ON YY = 0 GOTO 220:P$ =  STR$(100 - VAL( MID$ ( STR$(XX/10495),2,2))): REM  make percentage
  22. 220 A$ =  STR$(XX) +" bytes used, " + STR$(YY) +" bytes free (" +P$ +"%)": GOSUB 1420:ZZ =  FRE(0)
  23. 230  WAIT  -16384,128: GET L$: GOSUB 1460: FOR I = 1 TO 12: IF L$ < >C$(I)  THEN  NEXT : ON (L$ = "?") GOTO 2130: FOR I = 1 TO 10:P =  PEEK( -16336): NEXT : GOTO 230
  24. 240 X = I:I = 999: NEXT :CAC = 0: ON X GOTO 520,920,1560,1500,2030,950,1780,1660,890,420,470,290
  25. 250  DATA  "D. Dial a number","H. Hang up telephone","C. Toggle copy on/off","K. Clear copy buffer","T. Toggle show line on/off","A. Toggle autosave"
  26. 260  DATA  "V. View copy buffer","W. Write copy buffer","!. Send break signal","B. Baud rate change"
  27. 270  END 
  28. 280 :
  29. 290  IF CN% = 0  THEN 230
  30. 300  HOME 
  31. 310  VTAB 1: POKE 1403,66: INVERSE : PRINT "Open-Apl: Menu": NORMAL 
  32. 320  CALL BS +3: REM   go into terminal mode
  33. 330  VTAB 1: POKE 1403,66: INVERSE : PRINT "     ":A$ = " ": GOSUB 1600: REM  RESET TOP LINE
  34. 340  IF  PEEK(ZP) = 0  THEN 170: REM  open-apple hit
  35. 350  IF  PEEK(ZP) = 2  THEN  HOME : VTAB 12:A$ = "Saving buffer as: " +AF$ + RIGHT$("00" + STR$(AC),2): GOSUB 1420:A$ = AF$ + RIGHT$("00" + STR$(AC),2):CAC = 1: GOSUB 1720:AC = AC +1: POKE ZP,1: CALL BS +27: GOTO 320: REM  AUTOS
  36. 360  HOME :A$ = "Carrier Lost":CN% = 0: CALL BS +51: REM  flush
  37. 370  VTAB 12: GOSUB 1420: VTAB 22: PRINT "press return for the menu...";: GET A$
  38. 380  GOTO 170
  39. 390  END 
  40. 400 :
  41. 410 :
  42. 420 BD =  PEEK(772) +1 -(3 *( PEEK(772) = 2)): REM  bump baud up one
  43. 430  POKE ZP,BD: CALL BS +6: REM  change baud rate
  44. 440  GOTO 230: REM   back to main menu
  45. 450 :
  46. 460 :
  47. 470  HOME : IF CN% = 1  THEN  PRINT : PRINT "You are still connected!"
  48. 480  PRINT "Are you sure you want to quit? N"; CHR$(8);: GET L$: IF L$ < >"Y"  AND L$ < >"y"  THEN 170
  49. 490  TEXT : HOME : PRINT : CALL BS +48: END : REM  GIVE UP MEMORY
  50. 500 :
  51. 510 :
  52. 520 A$ = "    ": GOSUB 1600: PRINT "What number do you want to dial?":TB = 10:RD = 0: CALL BS +51: REM   FLUSH BUFFER     
  53. 530  FOR I = 1 TO 7: VTAB 4 +I: PRINT  SPC( TB);I;"."; SPC( 2);NA$(I);: POKE 1403,TB +41: PRINT NU$(I): NEXT 
  54. 540  VTAB 12: PRINT : PRINT  SPC( TB);"8. Make a phonebook entry"
  55. 550  PRINT : PRINT  SPC( TB);"9. Quick dial a number": PRINT : PRINT  SPC( TB);"Q. Return to main menu"
  56. 560  VTAB 22: POKE 1403,0: PRINT "Choose: ";
  57. 570  GET L$: IF (L$ <"1"  OR L$ >"9")  AND L$ < >"q"  AND L$ < >"Q"  AND L$ < > CHR$(27)  AND L$ < > CHR$(13)  THEN 570
  58. 580  IF L$ = "Q"  OR L$ =  CHR$(27)  OR L$ =  CHR$(13)  OR L$ = "q"  THEN 170
  59. 590  IF L$ = "8"  THEN 750: REM  new number for phone book
  60. 600  IF L$ <"8"  THEN A$ = NU$( VAL(L$)): ON A$ = "-" GOTO 520: HOME : PRINT "Dialing ";NA$( VAL(L$));" at ";A$;"...": GOTO 630: REM  dial from phonebook
  61. 610  IF L$ = "9"  THEN  HOME : PRINT "Enter number to dial: ";: GOSUB 2060:A$ = IN$
  62. 620  IF L$ = "9"  AND A$ = ""  THEN 520
  63. 630  CALL BS +51: REM  flush buffer out to be sure
  64. 640  FOR I = 1 TO  LEN(A$): POKE 511 +I, ASC( MID$ (A$,I,1)): NEXT 
  65. 650  POKE ZP, LEN(A$): CALL BS +21: REM  dial number
  66. 660  PRINT : PRINT :V =  PEEK(37):F =  FRE(0)
  67. 670  PRINT "Waiting for carrier..."
  68. 680  IF   NOT RD  THEN  VTAB 20: PRINT "(press return for the menu or any other key to re-dial)"
  69. 690  CALL BS +24: REM  wait for connect
  70. 700 CN% =  PEEK(ZP): IF CN% = 1  THEN 290: REM   right into term mode
  71. 710  IF CN% = 0  AND   NOT RD  THEN JJENN$ = A$:A$ = "Unable to Connect": CALL BS +51: HOME : GOTO 840
  72. 720  IF CN% = 0  THEN 740
  73. 730 X = CN%:CN% = 0: CALL BS +42: ON X = 128 +27  OR X = 128 +13 GOTO 170: POKE  -16368,0: ON RD GOTO 520: REM  Rtn for menu or any other key for re-dial, UNLESS we're doing continuious re-dialing
  74. 740  HOME : PRINT "Re-dialing ";A$;"...":X =  FRE(0): ON   NOT RD GOTO 630: VTAB 20: PRINT "(press any key to stop continuious dialing)": VTAB 3: GOTO 630
  75. 750  VTAB 12: POKE 1403,0: CALL  -958: PRINT : PRINT  SPC( TB);"Replace which entry? ";: GET L$: IF L$ >"7"  OR L$ <"1"  THEN 520
  76. 760 L =  VAL(L$): VTAB 12: POKE 1403,0: CALL  -958
  77. 770  PRINT : PRINT "Enter the name of system #";L;":": PRINT ":";: FOR I = 1 TO 35: PRINT "_";: NEXT : FOR I = 1 TO 36: PRINT  CHR$(8);: NEXT 
  78. 780  PRINT ":";: GOSUB 2060:A$ = IN$: ON A$ = "" GOTO 520: IF  LEN(A$) >35  THEN  VTAB 12: POKE 1403,0: CALL  -958: PRINT : PRINT "Name too long!": GOTO 770
  79. 790  PRINT : PRINT "Enter the number for system #";L;":": PRINT ":";: FOR I = 1 TO 14: PRINT "_";: NEXT : FOR I = 1 TO 14: PRINT  CHR$(8);: NEXT 
  80. 800  GOSUB 2060:B$ = IN$
  81. 810 X =  FRE(0): IF  LEN(B$) >21  OR B$ = ""  THEN  VTAB 14: POKE 1403,0: CALL  -958: PRINT : PRINT "Number too long!": GOTO 790
  82. 820 NU$(L) = B$:NA$(L) = A$: VTAB 12: POKE 1403,0: CALL  -958: PRINT : PRINT "Storing phonebook...": PRINT D$"OPEN NT.PHONEBOOK": PRINT D$"WRITE NT.PHONEBOOK": FOR I = 1 TO 7: PRINT NA$(I): PRINT  CHR$(34);NU$(I): NEXT : PRINT D$"CLOSE"
  83. 830  GOTO 520
  84. 840  VTAB 10: GOSUB 1420: VTAB 12: HTAB 15: PRINT "Do you want to continually re-dial this number? Y"; CHR$(8);
  85. 850  GOSUB 1450: IF L$ = "N"  OR L$ =  CHR$(27)  THEN 520
  86. 860 RD = 1:A$ = JJENN$:X =  FRE(0): GOTO 740
  87. 870 :
  88. 880 :
  89. 890  CALL BS +18: GOTO 180: REM  send break signal
  90. 900 :
  91. 910 :
  92. 920  ON CN% = 0 GOTO 180: HOME :CN% = 0: VTAB 12: PRINT "Hanging up telephone...": CALL BS +33: GOTO 170: REM  call hangup routine if connected
  93. 930 :
  94. 940 :
  95. 950  HOME : IF AU = 1  THEN AU = 0: POKE ZPBYTE,0: CALL BS +15:AC = 0:A$ = "Autosave Disabled": GOTO 370
  96. 960 A$ = "Menu": GOSUB 1600: IF  PEEK(224) < >0  OR  PEEK(225) > <104  THEN  PRINT "If you continue, you will erase what is in the buffer now!": PRINT 
  97. 970  PRINT "Enable autosave? N"; CHR$(8);
  98. 980  GOSUB 1450: IF L$ = "n"  OR L$ = "N"  OR L$ =  CHR$(27)  OR L$ =  CHR$(13)  THEN 170
  99. 990  PRINT "Yes": PRINT : PRINT "Enter filename to save as (max. 13 characters):": PRINT ":";: GOSUB 2060:AF$ = IN$: IF AF$ = ""  THEN 180
  100. 1000 A$ = AF$: GOSUB 1010:AF$ = A$: ON  LEN(AF$) <14  AND NF < >0 GOTO 1020:A$ = "Illegal filename": GOTO 370: REM  TURN AUTOSAVE BACK OFF
  101. 1010 NF = 1:B$ = "": FOR NC = 1 TO  LEN(A$):L$ =  MID$ (A$,NC,1): GOSUB 1460:B$ = B$ +L$:NA =  ASC(L$):NF = ((NA >64  AND NA <91)  OR (NA = 46)  OR (NA >47  AND NA <58  AND NC >1))  AND NF = 1: NEXT :A$ = B$: RETURN : REM  check filename
  102. 1020  IF  PEEK(770) = 0  THEN  POKE ZP,1: CALL BS +27: REM  DO BUFFER ACTION: TURN IT ON IF IT'S OFF
  103. 1030 AU = 1: HOME : VTAB 14:A$ = "Files will be called '" +AF$ +"01', '" +AF$ +"02', and so on": GOSUB 1420:A$ = "Autosave Enabled":AC = 1: POKE ZP,129: CALL BS +15: GOTO 370: REM  ENABLE & CLEAR BUFFER
  104. 1040 :
  105. 1050 :
  106. 1060  HOME : INVERSE : POKE 35,23: POKE 34,2: PRINT  CHR$(12);: NORMAL : VTAB 5:A$ = "   N I B B L E T E R M   ":X$ = "": GOSUB 1420: FOR I = 1 TO  LEN(A$):X$ = X$ +" ": NEXT : VTAB 4:A$ = X$: GOSUB 1420: PRINT : GOSUB 1420
  107. 1070 A$ = "  By Eric C. Mueller  ": VTAB 9: GOSUB 1420
  108. 1080 A$ = " Copyright 1988 by Microsparc, Inc. ": VTAB 14: GOSUB 1420
  109. 1090 A$ = " please wait, reading telephone book and setup information... ": VTAB 20: GOSUB 1420
  110. 1100  NORMAL : VTAB 22: POKE 1403,0: CALL  -958: REM  clear out bottom two lines to black
  111. 1110  FOR I = 1 TO 31:SP$ = SP$ +" ": NEXT : DIM C$(12),J$(7),DF$(12),P(12),F(12)
  112. 1120  FOR I = 1 TO 10  STEP 2: READ A$: READ B$:J$((I +1)/2) = A$ + LEFT$(SP$,31 - LEN(A$)) +B$:C$(I) =  LEFT$(A$,1):C$(I +1) =  LEFT$(B$,1): NEXT : REM  build menu
  113. 1130 C$(I) = "Q":C$(I +1) = " ": REM  QUIT AND CONNECT are final two commands
  114. 1140  VTAB 1: POKE 1403,0: INVERSE : PRINT  SPC( 80): VTAB 1: PRINT "NibbleTerm (c)1988          Copy:      Autosave:      Baud Rt:         "; SPC( 10): NORMAL : REM  9/6/6/9 spaces
  115. 1150  VTAB 24: POKE 1403,2: PRINT "[";: POKE 1403,76: PRINT "]";: POKE 35,22: VTAB 23: POKE 1403,2: FOR I = 3 TO 77: PRINT "_";: NEXT : VTAB 10
  116. 1160  POKE 216,0: ONERR  GOTO 1270
  117. 1170  PRINT : VTAB 22: PRINT D$;"OPENNT.CONFIG": PRINT D$;"READNT.CONFIG": INPUT SL: INPUT BD: INPUT MT: PRINT D$;"CLOSENT.CONFIG": POKE 216,0: ONERR  GOTO 1830
  118. 1180  POKE ZP,123: CALL BS +48: PRINT D$"bloadnt.obj";MT: CALL BS +39: REM  load driver depending on modem type
  119. 1190  VTAB 22: POKE ZP,SL: CALL BS: REM  POKE SLOT AND INIT MODEM
  120. 1200 XX =  FRE(0):XX =  PEEK(ZP)
  121. 1210  IF XX = 1  THEN  FOR I = 1 TO 1999: NEXT : POKE ZP,SL: CALL BS
  122. 1220  POKE ZP,BD: CALL BS +6: REM  SET UP default baud rate
  123. 1230  POKE 216,0
  124. 1240 X =  FRE(0): VTAB 21: PRINT : PRINT D$;"OPEN NT.PHONEBOOK": PRINT D$;"READ NT.PHONEBOOK": FOR I = 1 TO 7: INPUT NA$(I): INPUT NU$(I): NEXT : PRINT D$"CLOSE": REM  read in phonebook
  125. 1250  POKE 216,0: ONERR  GOTO 1830
  126. 1260  GOTO 170: REM  and begin program
  127. 1270  POKE 216,0: ONERR  GOTO 1830
  128. 1280  POKE 34,17: HOME : POKE ZP,0: FOR BE = 768 TO 778: READ BR: POKE BE,BR: NEXT : CALL 768: IF  PEEK(ZP) = 0  THEN MT = 2: GOTO 1320: DATA  56,32,31,254,176,4,169,255,133,8,96: REM  i.d. IIGS
  129. 1290  HOME : PRINT : PRINT "Are you using the GS modem port or a Super Serial card? (G/S): ";:V =  PEEK(37):H =  PEEK(1403): PRINT : PRINT : PRINT "If you're using a Datalinker or Epic modem, pick 'S'.": VTAB V +1: POKE 1403,H
  130. 1300  GET X$: IF X$ < >"G"  AND X$ < >"S"  AND X$ < >"s"  AND X$ < >"g"  THEN 1300
  131. 1310 MT = 2 +(X$ = "G"  OR X$ = "g"): REM  MT = 2 for SSC; MT = 3 for GS
  132. 1320  IF ( PEEK(64435) = 6  AND  PEEK(64448) = 0)  OR MT = 3  THEN SL = 2: GOTO 1350: REM  Apple IIc & GS port has modem in slot two
  133. 1330  POKE 34,17: HOME : PRINT : PRINT "What slot is it modem in? ";
  134. 1340  GET SL$:SL =  VAL(SL$): IF SL <1  OR SL >7  THEN 1340
  135. 1350  POKE 34,17: PRINT : HOME : POKE 34,2: PRINT : PRINT "What would you like to use as a default baud rate (enter 0 to use 300 baud, 1 touse 1200 baud, or 2 to use 2400 baud): 1"; CHR$(8);
  136. 1360  GET BD$:BD =  VAL(BD$): ON BD <0  OR BD >2 GOTO 1360: IF BD$ =  CHR$(13)  THEN BD = 1: REM  set default of 1200
  137. 1370  VTAB 5: PRINT D$"CLOSE": PRINT D$"OPENNT.CONFIG": PRINT D$"CLOSE": PRINT D$"DELETENT.CONFIG": PRINT D$"OPENNT.CONFIG": PRINT D$"WRITENT.CONFIG": PRINT SL: PRINT BD: PRINT MT: PRINT D$"CLOSE": REM  save modem info
  138. 1380  PRINT D$"opennt.phonebook": PRINT D$"close": PRINT D$"deletent.phonebook": PRINT D$"opennt.phonebook": PRINT D$"writent.phonebook": FOR I = 1 TO 7: PRINT "(empty)": PRINT "-": NEXT : PRINT D$"CLOSE"
  139. 1390  CALL 54915: GOTO 1180: REM  reset stack & return
  140. 1400 :
  141. 1410 :
  142. 1420  POKE 1403,(40 -( LEN(A$)/2)) -1: PRINT A$: RETURN : REM  center line
  143. 1430 :
  144. 1440 :
  145. 1450  GET L$: IF L$ > <"Y"  AND L$ > <"N"  AND L$ < >"y"  AND L$ < >"n"  AND L$ < > CHR$(27)  AND L$ < > CHR$(13)  THEN 1450
  146. 1460 L$ =  CHR$( ASC(L$) -(32 *( ASC(L$) >95))): REM  convert to uppercase
  147. 1470  RETURN 
  148. 1480 :
  149. 1490 :
  150. 1500 A$ = "Menu": GOSUB 1600: PRINT "Clear buffer? N"; CHR$(8);
  151. 1510  GOSUB 1450: IF L$ =  CHR$(27)  OR L$ =  CHR$(13)  OR L$ = "N"  OR L$ = "n"  THEN 170
  152. 1520  POKE ZP,128: CALL BS +27: REM  128 = code to clear buffer
  153. 1530  PRINT "Yes":A$ = "Buffer empty": GOTO 370
  154. 1540 :
  155. 1550 :
  156. 1560  POKE ZP,1: CALL BS +27: REM  toggle buffer status
  157. 1570  GOTO 230: REM  Back to menu
  158. 1580 :
  159. 1590 :
  160. 1600  VTAB 1: POKE 1403,71: INVERSE : PRINT A$;
  161. 1610  ON  PEEK(1403) = 0 GOTO 1620: PRINT " ";: GOTO 1610
  162. 1620  NORMAL : ON HF GOTO 1630: HOME 
  163. 1630  RETURN 
  164. 1640 :
  165. 1650 :
  166. 1660  IF  PEEK(224) = 0  AND  PEEK(225) = 104  THEN  HOME :A$ = "Buffer Empty": GOTO 370
  167. 1670 A$ = "Menu": GOSUB 1600: PRINT "Write buffer to disk? N"; CHR$(8);: GOSUB 1450: IF L$ = "N"  OR L$ = "n"  OR L$ =  CHR$(27)  OR L$ =  CHR$(13)  THEN 170
  168. 1680  HOME :BL = ( PEEK(224) +( PEEK(225) *256)) -(104 *256):BX =  INT(BL/512)
  169. 1690 BX = BX +1 *  NOT BX: IF BX = 2  THEN BX = 3
  170. 1700  PRINT : PRINT "Buffer length is "BL" bytes (";BX;" disk block"; CHR$( ASC("s") *(BX < >1));")": REM  print s if non-one
  171. 1710  PRINT : PRINT "Enter filename: ";: GOSUB 2060:A$ = IN$: ON A$ = "" GOTO 180: GOSUB 1010: IF  LEN(A$) >15  OR NF = 0  THEN A$ = "Illegal filename": GOTO 370
  172. 1720 BL = ( PEEK(224) +( PEEK(225) *256)) -(104 *256): REM  in case we're coming in from the autosave hook
  173. 1730  PRINT D$;"CREATE";A$;",TTXT": PRINT D$;"BSAVE";A$;",TTXT,A$6800,L";BL: REM  save buffer
  174. 1740  IF AC  AND CAC  THEN CAC = 0: POKE ZP,128: CALL BS +27: RETURN : REM  IF AUTOSAVE on and called from autosave, CLEAR AND RETURN
  175. 1750 A$ = "Buffer Saved": HOME : GOTO 370
  176. 1760 :
  177. 1770 :
  178. 1780  IF  PEEK(224) = 0  AND  PEEK(225) = 104  THEN A$ = "Buffer Empty": HOME : GOTO 370
  179. 1790 A$ = "": GOSUB 1600: VTAB 2: INVERSE : PRINT  SPC( 80);: VTAB 2: POKE 1403,0:A$ = "SPACE BAR to start/stop; RETURN for menu; 1...9 controls speed": GOSUB 1420: NORMAL : POKE 34,3: PRINT 
  180. 1800  CALL BS +45: POKE 34,2: PRINT : PRINT : PRINT : VTAB 21: INVERSE : POKE 1403,0:A$ = "  Press any key for the menu  ": GOSUB 1420: NORMAL : VTAB 2: POKE 1403,0: PRINT  SPC( 80): WAIT  -16384,128: GET L$: GOTO 170: REM  VIEW BUFFER
  181. 1810 :
  182. 1820 :
  183. 1830  POKE 216,0: ONERR  GOTO 1830
  184. 1840  NORMAL : PRINT D$"close"
  185. 1850 ER =  PEEK(222):LN =  PEEK(218) + PEEK(219) *256:O = 0
  186. 1860  IF ER = 4  THEN A$ = "Your disk is write protected.": GOTO 370
  187. 1870  IF LN = 120  OR LN = 1180  THEN 2040
  188. 1880  IF ER = 6  OR ER = 7  THEN A$ = "Specified path/file not found.": GOTO 370
  189. 1890  IF ER = 8  THEN A$ = "Disk I/O error.": GOTO 370
  190. 1900  IF ER = 9  THEN A$ = "Disk is full; please use another.": GOTO 370
  191. 1910  IF ER = 10  THEN A$ = "That file is locked.": GOTO 370
  192. 1920  IF ER = 12  THEN Z$ = "Fatal memory error.  Restart machine.": GOTO 1970
  193. 1930  IF ER = 17  THEN A$ = "Your directory is full.  Please change directories.": GOTO 370
  194. 1940  IF ER = 19  OR ER = 13  THEN A$ = "That file already exists.  Please use a different name.": GOTO 370
  195. 1950  IF ER = 225  THEN Z$ = "CTRL-C pressed": GOTO 1970: REM  ctrl-c means exit 
  196. 1960 Z$ = "Error #" + STR$(ER) +" in line #" + STR$(LN)
  197. 1970  HOME :H = 40 -( LEN(Z$)/2): INVERSE : FOR I = 1 TO  LEN(Z$) +4: VTAB 10: POKE 1403,H -4 +I: PRINT " ": VTAB 14: POKE 1403,H -4 +I: PRINT " ": NEXT : VTAB 10:A$ = "ERROR!": GOSUB 1420: VTAB 11: POKE 1403,H -3: PRINT " ";
  198. 1980  POKE 1403,H +I -5: PRINT " ";: VTAB 13: POKE 1403,H -3: PRINT " ";: POKE 1403,H +I -5: PRINT " ": VTAB 12: POKE 1403,H -3: PRINT " ";: POKE 1403,H +I -5: PRINT " ";: NORMAL : POKE 1403,H -1: PRINT Z$
  199. 1990  IF CN%  THEN  VTAB 7: HTAB 7: PRINT "##### You are still connected---your phone is off-hook! #####"
  200. 2000  IF O = 0  THEN  VTAB 21:A$ = "Press return to exit": GOSUB 1420: POKE  -16368,0: GET L$: TEXT : HOME : CALL 37120 +48: END 
  201. 2010  IF O = 1  THEN  VTAB 21:A$ = "Please correct error and press return to continue": GOSUB 1420: POKE  -16368,0: WAIT  -16384,128: GET L$: RESUME : REM  CONTINUE
  202. 2020  VTAB 21:A$ = "Press return for the menu": GOSUB 1420: POKE  -16368,0: WAIT  -16384,128: GET L$: GOTO 170
  203. 2030  CALL BS +9: GOTO 180: REM  toggle show line on/off
  204. 2040  IF LN = 120  THEN  TEXT : HOME : VTAB 23: HTAB 1: PRINT "error loading file NT.OBJ...press Return to exit ";: POKE  -16368,0: GET A$: HOME : VTAB 23: END 
  205. 2050  TEXT : HOME : VTAB 23: PRINT "FILE NT.OBJ";MT;" NOT FOUND...PRESS RETURN TO EXIT ";: POKE  -16368,0: GET A$: TEXT : HOME : VTAB 23: CALL 37120 +48: END 
  206. 2060 IN$ = "":LE = 0:IMAX = 36
  207. 2070  GET IA$: IF IA$ =  CHR$(13)  THEN  RETURN 
  208. 2080  IF LE = IMAX  THEN  GOTO 2100
  209. 2090  IF IA$ > = " "  AND IA$ < = "~"  THEN  PRINT IA$;:LE = LE +1:IN$ = IN$ +IA$: GOTO 2070
  210. 2100  IF LE >1  AND IA$ =  CHR$(8)  THEN  CALL  -1008: PRINT " ";: CALL  -1008:LE = LE -1:IN$ =  LEFT$(IN$,LE): GOTO 2070
  211. 2110  IF LE = 1  AND IA$ =  CHR$(8)  THEN  CALL  -1008: PRINT " ";: CALL  -1008: GOTO 2060
  212. 2120  PRINT  CHR$(7);: GOTO 2070
  213. 2130  HOME : PRINT : PRINT "Enter prefix or press Return ": PRINT ":";: GOSUB 2060
  214. 2140  IF IN$ < >""  THEN  PRINT  CHR$(4)"PREFIX ";IN$
  215. 2150  PRINT  CHR$(4)"CATALOG"
  216. 2160  PRINT : PRINT "Press Return to continue ";: POKE  -16368,0: GET A$: HOME : GOTO 170