home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib19a.dsk / APRIL.1984 / SOURCE.EDITOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  6KB  |  166 lines

  1. 10  REM   **********************
  2. 20  REM   *    SOURCE.EDITOR   *
  3. 30  REM   *   BY JOHN WHITNEY  *
  4. 40  REM   * COPYRIGHT (C) 1984 *
  5. 50  REM   * BY MICROSPARC, INC *
  6. 60  REM   * LINCOLN, MA. 01773 *
  7. 70  REM   **********************
  8. 80  REM   ******************************
  9. 90  REM   *  THIS PROGRAM WILL CREATE  *
  10. 100  REM  *  AND EDIT ASSEMBLER SOURCE *
  11. 110  REM  *  PROGRAMS TO BE ASSEMBLED  *
  12. 120  REM  *  BY THE ASSEMBLER PROGRAM  *
  13. 130  REM  *                            *
  14. 140  REM  ******************************
  15. 150  REM  *** SET UP ***
  16. 160 D$ =  CHR$(4)
  17. 170  DIM A$(250),A(250)
  18. 180  HOME : VTAB 22: PRINT "** COPYRIGHT 1984 BY MICROSPARC, INC. **"
  19. 190  VTAB 2: INVERSE : PRINT "SOURCE EDITOR": NORMAL 
  20. 200  GOSUB 1440: ONERR  GOTO 1600
  21. 210  VTAB 6: CALL  -958: INPUT "ENTER FILE NAME: ";PR$: IF  LEN(PR$) = 0  OR  LEN(PR$) >15  OR  VAL(PR$) >0  THEN 210
  22. 220  VTAB 8: CALL  -958: PRINT D$"OPEN"PR$: PRINT D$"CLOSE"
  23. 230  VTAB 8: INPUT "IS THIS A NEW FILE? (Y/N): ";NP$
  24. 240  IF NP$ = "N"  THEN  GOSUB 1090: GOTO 280
  25. 250  IF NP$ = "Y"  OR NP$ = ""  THEN  PRINT : GOTO 300
  26. 260  VTAB 8: CALL  -958: GOTO 230
  27. 270  REM  *** EDIT PROGRAM ***
  28. 280  PRINT : PRINT "EDIT"
  29. 290  GOSUB 870
  30. 300  IF L$ = ""  THEN L$ = "I 99999": GOSUB 390: GOTO 280
  31. 310  IF  VAL(L$) < >0  THEN  GOSUB 510: GOTO 280
  32. 320  IF  LEFT$(L$,2) = "D "  THEN  GOSUB 590: GOTO 280
  33. 330  IF  LEFT$(L$,1) = "L"  THEN  GOSUB 710: GOTO 280
  34. 340  IF  LEFT$(L$,1) = "P"  THEN  PRINT D$"PR#1": GOSUB 710: PRINT D$"PR#0": GOTO 280
  35. 350  IF  LEFT$(L$,1) = "?"  THEN  GOSUB 1350: GOTO 280
  36. 360  IF  LEFT$(L$,2) = "I "  THEN  GOSUB 390: GOTO 280
  37. 370  IF  LEFT$(L$,4) = "SAVE"  THEN 1200
  38. 380  PRINT "INVALID COMMAND": GOTO 280
  39. 390  REM  *** INPUT ***
  40. 400  PRINT "INPUT"
  41. 410 N = 0:NL = 1
  42. 420  IF A(N) < >0  AND NL < VAL( MID$ (L$,3)) +1  THEN N = A(N):NL = NL +1: GOTO 420
  43. 430  PRINT NL":"
  44. 440  GOSUB 870
  45. 450  IF L$ = ""  THEN  RETURN 
  46. 460 J = 1
  47. 470  IF A$(J) < >""  THEN J = J +1: GOTO 470
  48. 480 A$(J) = L$
  49. 490 A(J) = A(N):A(N) = J:N = J:NL = NL +1
  50. 500  GOTO 430
  51. 510  REM *** RE ENTER LINE ***
  52. 520 N = 0
  53. 530  FOR J = 1 TO  VAL(L$)
  54. 540  IF A(N) = 0  THEN  PRINT "LINE NOT FOUND": RETURN 
  55. 550 N = A(N)
  56. 560  NEXT 
  57. 570  PRINT  VAL(L$);":": PRINT A$(N);:L$ = A$(N) + LEFT$("                                        ",40 - LEN(A$(N))): HTAB 1: GOSUB 900: IF L$ = ""  THEN  RETURN : REM  40 SPACES BETWEEN QUOTES
  58. 580 A$(N) = L$: RETURN 
  59. 590  REM  *** DELETE LINE ***
  60. 600 LN =  VAL( MID$ (L$,2)) -1
  61. 610  IF LN <0  THEN  PRINT "LINE NOT FOUND": RETURN 
  62. 620 N = 0
  63. 630  IF LN = 0  THEN 680
  64. 640  FOR J = 1 TO LN
  65. 650  IF A(N) = 0  THEN  PRINT "LINE NOT FOUND": RETURN 
  66. 660 N = A(N)
  67. 670  NEXT 
  68. 680 A$(A(N)) = ""
  69. 690 A(N) = A(A(N))
  70. 700  RETURN 
  71. 710  REM  *** LIST ***
  72. 720  IF  LEN(L$) <3  THEN LS = 0:LE = 0: GOTO 790
  73. 730 LS =  VAL( MID$ (L$,3))
  74. 740  IF  LEN(L$) <4  THEN 780
  75. 750  FOR K = 4 TO  LEN(L$)
  76. 760  IF  MID$ (L$,K,1) = ","  OR  MID$ (L$,K,1) = " "  THEN LE =  VAL( MID$ (L$,K +1)): GOTO 790
  77. 770  NEXT 
  78. 780 LE = LS
  79. 790  IF LE = 0  THEN LE = 99999
  80. 800 N = 0
  81. 810  FOR J = 1 TO LE
  82. 820 N = A(N)
  83. 830  IF N = 0  THEN 860
  84. 840  IF J > = LS  THEN  PRINT J;":";A$(N)
  85. 850  NEXT 
  86. 860  RETURN 
  87. 870  REM  *** GET LINE ***
  88. 880 L$ = "                                        "
  89. 890  REM   L$= 40 SPACES
  90. 900 CC = 1
  91. 910  IF CC <1  THEN CC = 1
  92. 920  IF CC >39  THEN CC = 39
  93. 930  HTAB CC: GET KB$
  94. 940  IF  ASC(KB$) = 8  THEN CC = CC -1: GOTO 910
  95. 950  IF  ASC(KB$) = 21  THEN CC = CC +1: GOTO 920
  96. 960  IF  ASC(KB$) = 13  THEN 1040
  97. 970  IF  ASC(KB$) = 24  THEN  PRINT  CHR$(92): GOTO 880
  98. 980  IF  ASC(KB$) = 27  THEN CC = 10: GOTO 930
  99. 990  ON  ASC(KB$) <32 GOTO 930: PRINT KB$;
  100. 1000  IF CC = 1  THEN L$ = KB$ + MID$ (L$,2):CC = CC +1: GOTO 930
  101. 1010  IF CC = 39  THEN L$ =  LEFT$(L$,38): HTAB CC: PRINT " ";: GOTO 930
  102. 1020 L$ =  LEFT$(L$,CC -1) +KB$ + MID$ (L$,CC +1)
  103. 1030 CC = CC +1: GOTO 930
  104. 1040  IF CC = 1  THEN L$ = "": GOTO 1060
  105. 1050 L$ =  LEFT$(L$,CC -1)
  106. 1060  HTAB 1: PRINT L$; SPC( 40 -C)
  107. 1070  PRINT 
  108. 1080  RETURN 
  109. 1090  REM  *** READ FILE ***
  110. 1100 A(0) = 1: ONERR  GOTO 1600
  111. 1110  PRINT D$"OPEN "PR$
  112. 1120  PRINT D$"READ "PR$
  113. 1130 N = N +1
  114. 1140  INPUT A$(N)
  115. 1150  IF  MID$ (A$(N),10,3) = "EOF"  THEN A$(N) = "":N = N -1:A(N) = 0: GOTO 1180
  116. 1160 A(N) = N +1
  117. 1170  GOTO 1130
  118. 1180  PRINT D$"CLOSE "PR$: POKE 216,0
  119. 1190  RETURN 
  120. 1200  REM  *** SAVE ***
  121. 1210  ONERR  GOTO 1600
  122. 1220  PRINT : PRINT D$"OPEN "PR$: PRINT D$"CLOSE": PRINT D$"DELETE "PR$
  123. 1230  PRINT D$"OPEN "PR$
  124. 1240  PRINT D$"WRITE "PR$
  125. 1250 N = 0
  126. 1260  PRINT  CHR$(34)A$(A(N)) CHR$(34)
  127. 1270 LN = N
  128. 1280 N = A(N)
  129. 1290  IF A(N) < >0  THEN 1260
  130. 1300  IF  MID$ (A$(LN),10,3) < >"EOF"  THEN  PRINT  CHR$(34)"         EOF" CHR$(34)
  131. 1310  PRINT D$"CLOSE "PR$
  132. 1320  INPUT "DO YOU WISH TO ASSEMBLE YOUR FILE? (Y/N)";K$: IF K$ = "Y"  THEN  PRINT D$"RUN BASIC.ASSEMBLER"
  133. 1330  HOME : POKE 216,0: END 
  134. 1340  REM  HELP SCREEN
  135. 1350  HOME : INVERSE : PRINT "COMMANDS:                              ": NORMAL 
  136. 1360  PRINT "L         LIST ENTIRE PROGRAM"
  137. 1370  PRINT : PRINT "L N       LIST LINE N"
  138. 1380  PRINT : PRINT "L N,M     LIST LINES N THROUGH M"
  139. 1390  PRINT : PRINT "D N       DELETE LINE N"
  140. 1400  PRINT : PRINT "I N       INPUT LINES AFTER N"
  141. 1410  PRINT : PRINT "P (N(,M)) PRINT LISTING"
  142. 1420  PRINT : PRINT "SAVE      SAVE THE PROGRAM TO DISK"
  143. 1430  PRINT : PRINT "N         EDIT LINE N"
  144. 1434  PRINT : PRINT "<ESC>     TAB (ONLY IN EDIT OR INPUT)"
  145. 1436  PRINT : PRINT "?         THIS HELP SCREEN": RETURN 
  146. 1440  DIM PN(15)
  147. 1450 PN(1) = 66:PN(2) = 89:PN(3) = 32
  148. 1460 PN(4) = 74:PN(5) = 79:PN(6) = 72
  149. 1470 PN(7) = 78:PN(8) = 32:PN(9) = 87
  150. 1480 PN(10) = 72:PN(11) = 73:PN(12) = 84
  151. 1490 PN(13) = 78:PN(14) = 69:PN(15) = 89
  152. 1500  FOR VN = 1 TO 15
  153. 1510  VTAB 4
  154. 1520  FOR VO = VN TO 1  STEP  -1
  155. 1530  PRINT  CHR$(PN(16 -VO));
  156. 1540  NEXT VO
  157. 1550  PRINT 
  158. 1560  NEXT VN
  159. 1570  PRINT 
  160. 1580  RETURN 
  161. 1590  REM  ERROR TRAP FOR SAVE
  162. 1600  POKE 216,0: PRINT : PRINT D$"CLOSE"
  163. 1610  IF  PEEK(222) = 5  THEN  PRINT D$"DELETE"PR$: PRINT  CHR$(7)"FILE NOT ON THIS DISK": PRINT "PRESS ANY KEY =>";: GET A$: PRINT : RUN 
  164. 1620  IF  PEEK(222) = 16  THEN  PRINT  CHR$(7)"INVALID FILE NAME. PRESS ANY KEY =>";: GET A$: PRINT : RUN 
  165. 1630  IF  PEEK(222) = 6  THEN  PRINT "PUT IN DISK WITH BASIC.ASSEMBLER": PRINT "AND PRESS ANY KEY +>";: GET A$: PRINT : GOTO 1310
  166. 1700  PRINT  CHR$(7)"DISK ERROR #"; PEEK(222);" IN LINE "; PEEK(218) + PEEK(219) *256