home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib24b.dsk / NAVIGATOR.2.bas < prev    next >
BASIC Source File  |  2023-02-26  |  6KB  |  166 lines

  1. 10  REM ************************
  2. 20  REM *     NAVIGATOR.2      *
  3. 30  REM *  LISTING FORMATTER   *
  4. 40  REM *    BY LEE SWOBODA    *
  5. 50  REM *  COPYRIGHT (C) 1985  *
  6. 60  REM *  BY MICROSPARC, INC  *
  7. 70  REM *  CONCORD, MA. 01742  *
  8. 80  REM ************************
  9. 90  REM 
  10. 100  REM 
  11. 110 D$ =  CHR$(4)
  12. 120  HOME 
  13. 130 EF = 1: ONERR  GOTO 1210
  14. 140  PRINT D$"OPEN NAVIGATOR.TXT"
  15. 150  PRINT D$"READ NAVIGATOR.TXT"
  16. 160  INPUT NAME$,AUTH$,DT$,SELECT,COMMENTS,LMARGIN,RMARGIN,LPAGE,BMARGIN,D1,D2,SLOT
  17. 170  PRINT D$"CLOSE"
  18. 180  POKE 216,0
  19. 190  REM --------------
  20. 200  REM DEFAULT VALUES
  21. 210  REM --------------
  22. 220 SLOT$ = "PR#" + STR$(SLOT)
  23. 230 PAGE = 0: REM PAGE NUMBER
  24. 240 LNLGTH = RMARGIN -LMARGIN: REM    LINE LENGTH
  25. 250 HEADER$(1) = NAME$
  26. 260  FOR I = 1 TO LNLGTH - LEN(NAME$) -9
  27. 270 HEADER$(1) = HEADER$(1) +" "
  28. 280  NEXT I
  29. 290 HEADER$(1) = HEADER$(1) +"PAGE "
  30. 300 HEADER$(2) = AUTH$
  31. 310  FOR I = 1 TO LNLGTH - LEN(AUTH$) -9
  32. 320 HEADER$(2) = HEADER$(2) +" "
  33. 330  NEXT I
  34. 340 HEADER$(2) = HEADER$(2) +DT$
  35. 350  FOR I = 1 TO LNLGTH
  36. 360 HEADER$(3) = HEADER$(3) +"-"
  37. 370  NEXT I
  38. 380 LPAGE = LPAGE -BMARGIN
  39. 390  DIM A$(40)
  40. 400  PRINT D$SLOT$: PRINT  CHR$(9)"80N"
  41. 410  GOSUB 1470
  42. 420 EF = 2: ONERR  GOTO 1210
  43. 430  PRINT D$"OPEN EXX,D"D1
  44. 440  PRINT D$"READ EXX"
  45. 450  REM ------------
  46. 460  REM BUILD STRING
  47. 470  REM ------------
  48. 480 B$ = ""
  49. 490  GET A$
  50. 500  IF A$ =  CHR$(13) GOTO 530
  51. 510 B$ = B$ +A$: IF  LEN(B$) = 248  THEN B$ = "<<< LISTED LINE TOO LONG FOR NAVIGATOR >>>": GOSUB 1650: GOTO 610
  52. 520  GOTO 490
  53. 530 B =  VAL(B$)
  54. 540  IF B = 0 GOTO 490
  55. 550 A$ =  STR$(B)
  56. 560 B =  LEN(A$)
  57. 570 A$ =  LEFT$(A$ +"       ",6)
  58. 580 B$ =  RIGHT$(B$, LEN(B$) -B -1)
  59. 590  IF  LEFT$(B$,1) = " "  THEN B$ =  RIGHT$(B$, LEN(B$) -1): GOTO 590
  60. 600 B$ = A$ +B$
  61. 610  REM -------------
  62. 620  REM FORMAT STRING
  63. 630  REM -------------
  64. 640 J = 1: REM STRING SUBSCRIPT
  65. 650 L = 0: REM SUBSTRING LENGTH 
  66. 660 K =  LEN(B$)
  67. 670  IF  MID$ (B$,7,3) = "REM"  OR  MID$ (B$,7,4) = "DATA"  THEN RFLAG = 1
  68. 680 A$(1) = ""
  69. 690 B$ = B$ +" "
  70. 700  REM FORMAT LINES
  71. 710 QFLAG = 0
  72. 720  FOR I = 1 TO K
  73. 730 L = L +1
  74. 740 A$ =  MID$ (B$,I,1)
  75. 750  IF A$ <" "  THEN A$ = "^" + CHR$( ASC(A$) +224): REM   CONTROL CHARACTERS
  76. 760  IF A$ =  CHR$(34)  THEN QFLAG =   NOT QFLAG: REM STRINGS
  77. 770  IF QFLAG  AND A$ = " "  THEN A$ =  CHR$(126): REM CHANGE SPACE TO TILDE
  78. 780  IF QFLAG  OR RFLAG GOTO 910
  79. 790  IF  MID$ (A$(J),7,2) = "IF"  AND  MID$ (B$,I,4) = "GOTO"  THEN J = J +1:A$(J) = "        ":L = 9: GOTO 860
  80. 800  IF  MID$ (A$(J),7,2) = "IF"  AND  MID$ (B$,I,4) = "THEN"  THEN J = J +1:A$(J) = "        ":L = 9: GOTO 860
  81. 810  IF  MID$ (B$,7,2) = "IF"  AND  MID$ (A$(J),5,1) < >":"  AND  MID$ (B$,I,4) = "GOTO"  THEN J = J +1:A$(J) = "        ":L = 9: GOTO 830
  82. 820  IF  MID$ (B$,7,2) = "IF"  AND  MID$ (A$(J),5,1) < >":"  AND  MID$ (B$,I,4) = "THEN"  THEN J = J +1:A$(J) = "        ":L = 9: GOTO 830
  83. 830  IF A$ < >":" GOTO 860
  84. 840  IF  MID$ (B$,I -3,4) = "MEM:" GOTO 860
  85. 850 J = J +1:A$(J) = "    : ":A$ = "":L = 6: REM NEWLINE
  86. 860  IF I <7 GOTO 910
  87. 870  IF A$ = " "  AND  RIGHT$(A$(J),1) = " " GOTO 920
  88. 880  IF A$ = " "  AND  RIGHT$(A$(J),1) = "(" GOTO 920
  89. 890  IF A$ = " "  AND  MID$ (B$,I +1,1) = "(" GOTO 920
  90. 900  IF A$ = ","  THEN A$ = ", "
  91. 910 A$(J) = A$(J) +A$
  92. 920  NEXT I
  93. 930  REM -----------
  94. 940  REM PRINT LINES
  95. 950  REM -----------
  96. 960  GOSUB 1540: IF LCOUNT +J >(LPAGE)  THEN  GOSUB 1410: REM  NEW PAGE? 
  97. 970  FOR I = 1 TO J
  98. 980  IF  MID$ (A$(I),9,4) = "THEN"  THEN TFLAG = 1
  99. 990  IF COMMENTS = 0  AND  MID$ (A$(I),7,3) = "REM" GOTO 1170: REM SKIP REMARKS?
  100. 1000  IF  MID$ (B$,7,3) = "REM"  AND R1 = 0  THEN  PRINT :R1 = 1:LCOUNT = LCOUNT +1: REM  SKIP LINE BEFORE REMARK 
  101. 1010  IF  MID$ (B$,7,3) < >"REM"  AND R1 = 1  THEN  PRINT :R1 = 0:LCOUNT = LCOUNT +1: REM  SKIP LINE AFTER REMARK(S)
  102. 1020 LCOUNT = LCOUNT +1
  103. 1030  IF  MID$ (A$(I),7,3) = "FOR"  THEN INDENT = INDENT +5:LNLGTH = LNLGTH -5: REM      INDENT FOR...NEXT LOOPS
  104. 1040  REM PRINT THE LINE
  105. 1050  PRINT  CHR$(1) SPC( LMARGIN);
  106. 1060  IF  MID$ (A$(I),5,1) < >":" GOTO 1090
  107. 1070  IF TFLAG  THEN  PRINT "    ";
  108. 1080  PRINT  SPC( INDENT)A$(I): GOTO 1120
  109. 1090  PRINT  LEFT$(A$(I),6);
  110. 1100  IF  MID$ (A$(I),7,3) < >"REM"  AND  MID$ (A$(I),7,4) < >"DATA"  THEN  PRINT  SPC( INDENT);
  111. 1110  PRINT  MID$ (A$(I),7, LEN(A$(I)))
  112. 1120  IF  MID$ (A$(I),7,4) < >"NEXT" GOTO 1170
  113. 1130  IF INDENT >4  THEN LNLGTH = LNLGTH +5:INDENT = INDENT -5: REM      UNINDENT FOR...NEXT LOOP
  114. 1140  FOR Z = 7 TO 80
  115. 1150  IF  MID$ (A$(I),Z,1) = ","  THEN  IF INDENT >4  THEN LNLGTH = LNLGTH +5:INDENT = INDENT -5
  116. 1160  NEXT Z
  117. 1170  NEXT I
  118. 1180 RFLAG = 0: REM  CANCEL "REM" FLAG
  119. 1190 TFLAG = 0: REM CANCEL "THEN" FLAG
  120. 1200  GOTO 480
  121. 1210  REM  ===
  122. 1220  REM END
  123. 1230  REM ===
  124. 1240 E =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219): POKE 216,0
  125. 1250  IF EF = 2  AND E = 5 GOTO 1300
  126. 1260  HOME : VTAB 12: PRINT "ERROR #"E" IN LINE "EL"."
  127. 1270  PRINT : PRINT "PRESS <ESC> TO QUIT,": PRINT "OR ANY OTHER KEY TO TRY AGAIN."
  128. 1280  GET Z$: PRINT : IF Z$ =  CHR$(27)  THEN  PRINT D$"CLOSE": END 
  129. 1290  ON EF GOTO 130,420,1390
  130. 1300  FOR I = 1 TO LPAGE +BMARGIN -LCOUNT
  131. 1310  PRINT 
  132. 1320  NEXT I
  133. 1330  IF SELECT = 3  THEN  PRINT D$"RUN NAVIGATOR.3,D"D1
  134. 1340  PRINT D$"PR#0"
  135. 1350  PRINT D$"CLOSE"
  136. 1360  PRINT D$"DELETE EXX"
  137. 1370  PRINT D$"OPEN EXE": PRINT D$"CLOSE EXE": PRINT D$"DELETE EXE"
  138. 1380  PRINT D$"OPEN EX1": PRINT D$"CLOSE EX1": PRINT D$"DELETE EX1"
  139. 1390  POKE 216,0
  140. 1400  END 
  141. 1410  REM ============
  142. 1420  REM PRINT HEADER
  143. 1430  REM ============
  144. 1440  FOR P = 1 TO LPAGE +BMARGIN -LCOUNT
  145. 1450  PRINT 
  146. 1460  NEXT P
  147. 1470 PAGE = PAGE +1
  148. 1480  PRINT  SPC( LMARGIN)HEADER$(1)PAGE
  149. 1490  PRINT  SPC( LMARGIN)HEADER$(2)
  150. 1500  PRINT  SPC( LMARGIN)HEADER$(3)
  151. 1510  PRINT 
  152. 1520 LCOUNT = 4
  153. 1530  RETURN 
  154. 1540 SI = LNLGTH -10:I = 1
  155. 1550 T$ = A$(I)
  156. 1560  IF  LEN(T$) < = SI GOTO 1630
  157. 1570  IF  LEFT$(T$,6) = "      " GOTO 1590
  158. 1580 SI = SI -5 *( MID$ (T$,7,3) = "FOR") +5 *( MID$ (T$,7,4) = "NEXT"): IF SI >LNLGTH -10  THEN SI = LNLGTH -10
  159. 1590 K = J:L = SI -1
  160. 1600 AL$ =  MID$ (A$(I),L,1): IF AL$ < >" "  AND AL$ < >"$"  AND AL$ < >","  AND AL$ < > CHR$(126)  THEN L = L -1: GOTO 1600
  161. 1610 A$(K +1) = A$(K):K = K -1: IF K > = I GOTO 1610
  162. 1620 A$(I) =  LEFT$(T$,L):A$(I +1) = "      " + MID$ (T$,L +1):J = J +1
  163. 1630 I = I +1: IF I < = J GOTO 1550
  164. 1640  RETURN 
  165. 1650  GET AA$: IF AA$ < > CHR$(13) GOTO 1650
  166. 1660  RETURN