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

  1. 10  REM ********08/01/85********
  2. 20  REM *     NAVIGATOR.3      *
  3. 30  REM *  FLOW CHART PRINTER  *
  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 4430
  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  REM --------------
  19. 190  REM DEFAULT VALUES
  20. 200  REM --------------
  21. 210  DIM A$(40),B$(40),C$(40)
  22. 220 LCOUNT = 9: REM  LINE COUNT
  23. 230 PAGE = 0: REM PAGE NUMBER
  24. 240 LNLGTH = RMARGIN -LMARGIN: REM LINE LENGTH
  25. 250 LPAGE = LPAGE -BMARGIN
  26. 260 LOOP = 0: REM LOOP FLAG
  27. 270 PRNT = 0: REM OUTPUT FLAG -> VIDEO SCREEN
  28. 280 INPT = 0: REM INPUT FLAG <- KEYBOARD
  29. 290 SLOT$ = "PR#" + STR$(SLOT)
  30. 300 U$ =  CHR$(95): REM UNDERSCORE
  31. 310 S$ =  CHR$(92): REM BACKSLASH
  32. 320 V$ =  CHR$(124): REM VERTICAL LINE 
  33. 330  FOR I = 1 TO 30
  34. 340 BLANK$ = BLANK$ + CHR$(32)
  35. 350  NEXT I
  36. 360  FOR I = 1 TO 42
  37. 370 UNDERLN$ = UNDERLN$ +U$
  38. 380  NEXT I
  39. 390 FLOW$ = V$
  40. 400 K = 1: REM SUB-LINE SUBSCRIPT
  41. 410 B$(1) = BLANK$ +FLOW$
  42. 420  REM -----
  43. 430  REM START
  44. 440  REM -----
  45. 450  IF SELECT = 2  THEN  PRINT D$SLOT$: PRINT  CHR$(9)"80N"
  46. 460  GOSUB 4340: REM PRINT HEADER  
  47. 470  PRINT  LEFT$(BLANK$,22) LEFT$(UNDERLN$,17)
  48. 480  PRINT  LEFT$(BLANK$,21)V$ LEFT$(BLANK$,17)V$
  49. 490  PRINT  LEFT$(BLANK$,21)V$"      START      "V$
  50. 500  PRINT  LEFT$(BLANK$,21)V$ LEFT$(UNDERLN$,17)V$
  51. 510  PRINT BLANK$FLOW$
  52. 520 EF = 2: ONERR  GOTO 3980
  53. 530  PRINT D$"OPEN EXX,D"D1
  54. 540  PRINT D$"READ EXX"
  55. 550  REM ------------
  56. 560  REM BUILD STRING
  57. 570  REM ------------
  58. 580 B$ = ""
  59. 590  GET A$
  60. 600  IF A$ =  CHR$(13)  THEN QFLAG = 0: GOTO 630
  61. 610 B$ = B$ +A$: IF  LEN(B$) >249  THEN B$(1) = "<<< LISTED LINE TOO LONG FOR NAVIGATOR >>>": GOSUB 4470:K = 1:EF = 2: GOTO 3570
  62. 620  GOTO 590
  63. 630 EF = 0: PRINT  CHR$(1);
  64. 640 B =  VAL(B$)
  65. 650  IF B = 0 GOTO 590
  66. 660 A$ =  STR$(B)
  67. 670 B =  LEN(A$)
  68. 680 A$ =  LEFT$(A$ +"       ",6)
  69. 690 B$ =  RIGHT$(B$, LEN(B$) -B -1)
  70. 700  IF  LEFT$(B$,1) = " "  THEN B$ =  RIGHT$(B$, LEN(B$) -1): GOTO 700
  71. 710 B$ = A$ +B$
  72. 720  IF  MID$ (B$,7,3) = "REM"  OR  MID$ (B$,7,4) = "DATA" GOTO 1600
  73. 730  REM ------------
  74. 740  REM FORMAT LINES
  75. 750  REM ------------
  76. 760 JJ = 1: REM  STRING SUBSCRIPT
  77. 770  IF DOS = 1  THEN DOS = 0
  78. 780 KK =  LEN(B$)
  79. 790 C$(1) = ""
  80. 800  FOR MM = 1 TO KK
  81. 810 A$ =  MID$ (B$,MM,1)
  82. 820  IF A$ =  CHR$(4)  THEN DOS = 1
  83. 830  IF  MID$ (A$(JJ),7,8) = "PRINT D$"  OR  MID$ (A$(JJ),7,14) = "PRINT CHR$ (4)"  THEN DOS = 1
  84. 840  IF A$ <" "  THEN A$ = "^" + CHR$( ASC(A$) +224): REM CONTROL CHARACTERS
  85. 850  IF A$ =  CHR$(34)  THEN QFLAG =   NOT QFLAG: REM  STRINGS
  86. 860  IF QFLAG  AND A$ = " "  THEN A$ =  CHR$(126): REM CHANGE SPACE TO TILDE
  87. 870  IF QFLAG GOTO 980: REM DO NOT FORMAT STRINGS
  88. 880  IF A$ < >":" GOTO 910
  89. 890  IF  MID$ (B$,MM -3,4) = "MEM:" GOTO 910
  90. 900  IF  MID$ (B$,7,2) < >"IF"  AND  MID$ (C$(JJ),7,2) < >"IF"  THEN JJ = JJ +1:C$(JJ) = "      ":A$ = "": REM   NEW LINE
  91. 910  IF MM <7 GOTO 980
  92. 920  IF A$ = " "  AND  RIGHT$(C$(JJ),1) = " " GOTO 990
  93. 930  IF A$ = " "  AND  RIGHT$(C$(JJ),1) = "(" GOTO 990
  94. 940  IF A$ = " "  AND  MID$ (B$,II +1,1) = "(" GOTO 990
  95. 950  IF A$ = ","  THEN A$ = ", "
  96. 960  IF  MID$ (B$,MM,8) = "PRINT D$"  OR  MID$ (B$,MM,15) = "PRINT  CHR$ (4)"  THEN DOS = 1
  97. 970  IF A$ = ";"  THEN A$ = "; "
  98. 980 C$(JJ) = C$(JJ) +A$
  99. 990  NEXT MM
  100. 1000  REM ---
  101. 1010  REM  DOS
  102. 1020  REM ---
  103. 1030  FOR II = 1 TO JJ
  104. 1040 B$ = C$(II)
  105. 1050  REM 
  106. 1060  REM SCAN FOR CHANGES IN CONTROL
  107. 1070  REM 
  108. 1080  IF DOS = 0 GOTO 1380
  109. 1090 L1 =  LEN(B$)
  110. 1100  FOR I = 15 TO L1
  111. 1110  IF  MID$ (B$,I,4) = "PR#0"  THEN PRNT = 0:SHAPE = 2:FLAG = 1: GOTO 1860
  112. 1120  IF  MID$ (B$,I,4) = SLOT$  THEN PRNT = 1:SHAPE = 2:FLAG = 3: GOTO 1860
  113. 1130  IF  MID$ (B$,I,4) = "OPEN"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  114. 1140  IF  MID$ (B$,I,6) = "VERIFY"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  115. 1150  IF  MID$ (B$,I,6) = "APPEND"  THEN SHAPE = 2:FLAG = 4:DOS = 2: GOTO 1860
  116. 1160  IF  MID$ (B$,I,4) = "EXEC"  THEN SHAPE = 2:FLAG = 5: GOTO 1860
  117. 1170  IF  MID$ (B$,I,6) = "DELETE"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  118. 1180  IF  MID$ (B$,I,5) = "CLOSE"  AND INPT = 6  THEN INPT = 0:SHAPE = 2:FLAG = 4:DOS = 1: GOTO 1860
  119. 1190  IF  MID$ (B$,I,5) = "CLOSE"  AND PRNT = 6  THEN PRNT = 0:SHAPE = 2:FLAG = 4:DOS = 1: GOTO 1860
  120. 1200  IF  MID$ (B$,I,5) = "WRITE"  THEN PRNT = 6:SHAPE = 2:FLAG = 4:DOS = 2: GOTO 1860
  121. 1210  IF  MID$ (B$,I,4) = "READ"  THEN INPT = 6:SHAPE = 2:FLAG = 5:DOS = 2: GOTO 1860
  122. 1220  IF  MID$ (B$,I,5) = "BLOAD"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  123. 1230  IF  MID$ (B$,I,4) = "BRUN"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  124. 1240  IF  MID$ (B$,I,3) = "CAT"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  125. 1250  IF  MID$ (B$,I,7) = "CATALOG"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  126. 1260  IF  MID$ (B$,I,5) = "CHAIN"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  127. 1270  IF  MID$ (B$,I,6) = "CREATE"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  128. 1280  IF  MID$ (B$,I,5) = "FLUSH"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  129. 1290  IF  MID$ (B$,I,3) = "FRE"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  130. 1300  IF  MID$ (B$,I,4) = "LOCK"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  131. 1310  IF  MID$ (B$,I,6) = "PREFIX"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  132. 1320  IF  MID$ (B$,I,6) = "RENAME"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  133. 1330  IF  MID$ (B$,I,3) = "RUN"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  134. 1340  IF  MID$ (B$,I,4) = "SAVE"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  135. 1350  IF  MID$ (B$,I,5) = "STORE"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  136. 1360  IF  MID$ (B$,I,6) = "UNLOCK"  THEN SHAPE = 2:FLAG = 4: GOTO 1860
  137. 1370  NEXT I
  138. 1380  REM ---------------
  139. 1390  REM DETERMINE SHAPE
  140. 1400  REM ---------------
  141. 1410 SHAPE = 1
  142. 1420  IF  MID$ (B$,7,5) = "PRINT"  THEN SHAPE = 2
  143. 1430  IF  MID$ (B$,7,5) = "INPUT"  THEN SHAPE = 2
  144. 1440  IF  MID$ (B$,7,3) = "GET"  THEN SHAPE = 2
  145. 1450  IF  MID$ (B$,7,2) = "IF"  THEN SHAPE = 3
  146. 1460  REM --------------
  147. 1470  REM DETERMINE FLAG
  148. 1480  REM --------------
  149. 1490  IF SHAPE < >2 GOTO 1560
  150. 1500 FLAG = 1
  151. 1510  IF  MID$ (B$,7,5) = "PRINT"  AND PRNT = 0  THEN FLAG = 1
  152. 1520  IF ( MID$ (B$,7,5) = "INPUT"  OR  MID$ (B$,7,3) = "GET")  AND INPT = 0  THEN FLAG = 2
  153. 1530  IF  MID$ (B$,7,5) = "PRINT"  AND PRNT = 1  THEN FLAG = 3
  154. 1540  IF  MID$ (B$,7,5) = "PRINT"  AND PRNT = 6  THEN FLAG = 4
  155. 1550  IF ( MID$ (B$,7,5) = "INPUT"  OR  MID$ (B$,7,3) = "GET")  AND INPT = 6  THEN FLAG = 5
  156. 1560  REM  ---------------------------------- 
  157. 1570  REM  HANDLE REMARKS AND DATA STATEMENTS
  158. 1580  REM  ----------------------------------  
  159. 1590  IF  MID$ (B$,7,3) < >"REM"  AND  MID$ (B$,7,4) < >"DATA" GOTO 1710
  160. 1600  IF COMMENTS = 0  AND  MID$ (B$,7,3) = "REM" GOTO 580
  161. 1610 B$ = B$ +" "
  162. 1620 L2 = 1
  163. 1630 L1 = LNLGTH -25
  164. 1640  IF LCOUNT +3 >(LPAGE)  THEN  GOSUB 4180
  165. 1650  IF  MID$ (B$,L1,1) < >" "  AND  MID$ (B$,L1,1) < >","  THEN L1 = L1 -1: IF L1 >LNLGTH -35 GOTO 1650
  166. 1660  PRINT  LEFT$(B$(K),8) LEFT$(B$,6) MID$ (B$(K),15,31)" " MID$ (B$,L2 +5,L1 -5):LCOUNT = LCOUNT +1
  167. 1670 B$ = "      " + MID$ (B$,L1 +1, LEN(B$))
  168. 1680  IF  LEN(B$) >LNLGTH -25 GOTO 1620
  169. 1690  PRINT  LEFT$(B$(K),31) MID$ (B$,L2 +5,L1 -5):LCOUNT = LCOUNT +1
  170. 1700  GOTO 580
  171. 1710  REM -------------------
  172. 1720  REM HANDLE CONDITIONALS
  173. 1730  REM -------------------
  174. 1740  IF  MID$ (B$,7,2) < >"IF" GOTO 1860
  175. 1750 L1 =  LEN(B$)
  176. 1760 ARROW$ = "--->"
  177. 1770 FLOW = 0
  178. 1780  FOR I = 10 TO L1
  179. 1790  IF  MID$ (B$,I,4) = "THEN"  THEN FLOW = 1:L2 = I: IF  MID$ (B$,I +5,5) = "GOSUB"  THEN FLOW = 3:ARROW$ = "--->"
  180. 1800  IF  MID$ (B$,I,4) = "GOTO"  THEN FLOW = 2:L2 = I
  181. 1810  IF FLOW >0  THEN I = L1 +1
  182. 1820  NEXT I
  183. 1830 ARROW$ = ARROW$ + MID$ (B$,L2 -1,L1)
  184. 1840 B$ =  LEFT$(B$,L2 -2)
  185. 1850  REM #11000
  186. 1860  REM ---------
  187. 1870  REM FORM TEXT
  188. 1880  REM ---------
  189. 1890 L2 = 29
  190. 1900  IF SHAPE = 2  THEN L2 = 23
  191. 1910  IF SHAPE = 3  THEN L2 = 27
  192. 1920 LNUM$ =  LEFT$(B$,5)
  193. 1930 L1 =  LEN(B$)
  194. 1940 J = 1
  195. 1950  FOR I = 7 TO L1  STEP L2
  196. 1960 A$(J) =  MID$ (B$,I,L2 +1)
  197. 1970 A$(J) =  LEFT$(A$(J) +BLANK$,L2)
  198. 1980 J = J +1
  199. 1990  NEXT I
  200. 2000 J = J -1
  201. 2010  IF L1 <L2 +5  THEN A$(1) =  LEFT$( LEFT$(BLANK$,(L2 -L1 +6)/2) +A$(1) +BLANK$,L2)
  202. 2020  ON SHAPE GOTO 2030,2310,3030
  203. 2030  REM -------
  204. 2040  REM SHAPE 1
  205. 2050  REM -------
  206. 2060 B$(1) =  LEFT$(BLANK$,14) +" " + LEFT$(UNDERLN$,15) +"V" + LEFT$(UNDERLN$,15) +" "
  207. 2070  IF FLOW$ = " "  THEN B$(1) =  LEFT$(B$(1),30) +U$ + MID$ (B$(1),32, LEN(B$(1))):FLOW$ = V$
  208. 2080 B$(2) =  LEFT$(BLANK$,8) +LNUM$ +" " +V$ + LEFT$(BLANK$ +BLANK$,31) +V$
  209. 2090  FOR I = 1 TO J
  210. 2100 B$(I +2) =  LEFT$(BLANK$,14) +V$ +" " +A$(I) +" " +V$
  211. 2110  NEXT I
  212. 2120 B$(J +3) =  LEFT$(BLANK$,14) +V$ + LEFT$(UNDERLN$,31) +V$
  213. 2130 L =  INT(J/2) +3
  214. 2140  IF  MID$ (B$,7,4) = "GOTO"  THEN B$(L) = B$(L) +"--->" + MID$ (B$,11, LEN(B$)):FLOW$ = " "
  215. 2150  IF  MID$ (B$,7,5) = "GOSUB"  THEN B$(L) = B$(L) +"--->" + MID$ (B$,12, LEN(B$))
  216. 2160  IF  MID$ (B$,7,2) < >"ON" GOTO 2270
  217. 2170  FOR AA = 10 TO  LEN(B$)
  218. 2180  IF  MID$ (B$,AA,4) = "GOTO" GOTO 2210
  219. 2190  NEXT AA
  220. 2200  IF AA =  > LEN(B$) GOTO 2220
  221. 2210 B$(L) = B$(L) +"--->" + MID$ (B$,AA +4, LEN(B$)):FLOW$ = " ": GOTO 2260
  222. 2220  FOR AA = 10 TO  LEN(B$)
  223. 2230  IF  MID$ (B$,AA,5) = "GOSUB" GOTO 2250
  224. 2240  NEXT AA
  225. 2250 B$(L) = B$(L) +"--->" + MID$ (B$,AA +5, LEN(B$)):FLOW$ = "V"
  226. 2260  IF  LEN(B$(L)) >LNLGTH +(LMARGIN)  THEN B$(L +1) = B$(L +1) +"     " + MID$ (B$(L),LNLGTH +LMARGIN, LEN(B$(L))):B$(L) =  LEFT$(B$(L),LNLGTH +LMARGIN)
  227. 2270  IF  MID$ (B$,7,6) = "RETURN"  OR  MID$ (B$,7,3) = "END"  THEN FLOW$ = " "
  228. 2280 B$(J +4) = BLANK$ +FLOW$
  229. 2290 K = J +4
  230. 2300  GOTO 3490
  231. 2310  REM -------
  232. 2320  REM SHAPE 2
  233. 2330  REM -------
  234. 2340  FOR I = 1 TO J
  235. 2350 D$(I) = A$(I)
  236. 2360  NEXT I
  237. 2370  IF J >2 GOTO 2410
  238. 2380 J = J +1
  239. 2390 D$(J) =  LEFT$(BLANK$,L2)
  240. 2400  GOTO 2370
  241. 2410 L1 = 19
  242. 2420 B$(J +3) =  LEFT$(BLANK$,L1 -1) +S$ + LEFT$(UNDERLN$,23) +"/"
  243. 2430 B1$ = " "
  244. 2440 B1 = 2
  245. 2450  FOR K = J TO 1  STEP  -1
  246. 2460 B$(K +2) =  LEFT$(BLANK$,L1 -B1) +S$ +B1$ +D$(K) +B1$ +"/"
  247. 2470 B1$ = B1$ +" "
  248. 2480 B1 = B1 +1
  249. 2490  NEXT K
  250. 2500 B$(2) =  LEFT$(BLANK$,L1 -6 -B1) +LNUM$ +" " +S$ + LEFT$(BLANK$ +BLANK$,L2 +2 *B1 -2) +"/"
  251. 2510 B$(1) =  LEFT$(BLANK$,L1 -B1) + LEFT$(UNDERLN$,L2/2 +B1) +"V" + LEFT$(UNDERLN$,L2/2 +B1) +" "
  252. 2520  IF FLOW$ = " "  THEN B$(1) =  LEFT$(B$(1),30) +U$ + MID$ (B$(1),32, LEN(B$(1))):FLOW$ = V$
  253. 2530  ON FLAG GOSUB 2570,2680,2790,2900,2900
  254. 2540 B$(J +4) = BLANK$ +FLOW$
  255. 2550 K = J +4
  256. 2560  GOTO 3490
  257. 2570  REM ------
  258. 2580  REM SCREEN
  259. 2590  REM ------
  260. 2600 K =  INT((J +3)/2) +1
  261. 2610 B$(K -3) = B$(K -3) +"    " + LEFT$(UNDERLN$,10)
  262. 2620 B$(K -2) = B$(K -2) +"    /          " +S$: REM 4/10 SPACES
  263. 2630 B$(K -1) = B$(K -1) +"    /            " +V$: REM 4/12 SPACES
  264. 2640 B$(K) = B$(K) +"--->(    VIDEO    " +V$
  265. 2650 B$(K +1) = B$(K +1) +"      " +S$ + LEFT$(BLANK$,12) +V$
  266. 2660 B$(K +2) = B$(K +2) + LEFT$(BLANK$,8) +S$ + LEFT$(UNDERLN$,10) +"/"
  267. 2670  RETURN 
  268. 2680  REM --------
  269. 2690  REM KEYBOARD
  270. 2700  REM --------
  271. 2710 K =  INT((J +3)/2) +1
  272. 2720 B$(K -3) = B$(K -3) +"    " + LEFT$(UNDERLN$,13)
  273. 2730 B$(K -2) = B$(K -2) +"    /            /": REM 4/12/ SPACES
  274. 2740 B$(K -1) = B$(K -1) +"    /            /": REM 4/12/ SPACES
  275. 2750 B$(K) = B$(K) +"<---/  KEYBOARD  /"
  276. 2760 B$(K +1) = B$(K +1) +"    /            /": REM 4/12/ SPACES
  277. 2770 B$(K +2) = B$(K +2) +"    /" + LEFT$(UNDERLN$,12) +"/"
  278. 2780  RETURN 
  279. 2790  REM -------
  280. 2800  REM PRINTER
  281. 2810  REM -------
  282. 2820 K =  INT((J +3)/2) +1
  283. 2830 B$(K -3) = B$(K -3) +"  " + LEFT$(UNDERLN$,13)
  284. 2840 B$(K -2) = B$(K -2) +"  " +V$ + LEFT$(BLANK$,13) +V$
  285. 2850 B$(K -1) = B$(K -1) +"   " +V$ +"   PRINTER   " +V$
  286. 2860 B$(K) = B$(K) +"--->" +V$ + LEFT$(BLANK$,13) +V$
  287. 2870 B$(K +1) = B$(K +1) +"     " +V$ +"       " + LEFT$(UNDERLN$,6) +V$
  288. 2880 B$(K +2) = B$(K +2) +"      " +V$ + LEFT$(UNDERLN$,6) +"/"
  289. 2890  RETURN 
  290. 2900  REM ----
  291. 2910  REM DISK
  292. 2920  REM ----
  293. 2930 ARROW$ = "--->"
  294. 2940  IF FLAG = 5  THEN ARROW$ = "<---"
  295. 2950 K =  INT((J +3)/2) +1
  296. 2960 B$(K -3) = B$(K -3) +"   " + LEFT$(UNDERLN$,14)
  297. 2970 B$(K -2) = B$(K -2) +"   /" + LEFT$(BLANK$,14) +S$
  298. 2980 B$(K -1) = B$(K -1) +"   " +V$ +"      DISK      " +V$
  299. 2990 B$(K) = B$(K) +ARROW$ +V$ +S$ + LEFT$(UNDERLN$,14) +"/" +V$
  300. 3000 B$(K +1) = B$(K +1) +"     " +V$ + LEFT$(BLANK$,16) +V$
  301. 3010 B$(K +2) = B$(K +2) +"       " +S$ + LEFT$(UNDERLN$,14) +"/"
  302. 3020  RETURN 
  303. 3030  REM -------
  304. 3040  REM SHAPE 3
  305. 3050  REM -------
  306. 3060 L =  INT(J/2)
  307. 3070  IF J/2 = L  THEN J = J +1:A$(J) =  LEFT$(BLANK$,L2)
  308. 3080 L1 = 17
  309. 3090 B$(1) =  LEFT$(BLANK$,L1) + LEFT$(UNDERLN$,13) +"V" + LEFT$(UNDERLN$,13)
  310. 3100  IF FLOW$ = " "  THEN B$(1) =  LEFT$(B$(1),30) +U$ + MID$ (B$(1),32, LEN(B$(1))):FLOW$ = V$
  311. 3110 B$(2) =  LEFT$(BLANK$,L1 -9) +LNUM$ +"   /" + LEFT$(BLANK$,27) +S$
  312. 3120  IF L = 0  THEN B$(3) =  LEFT$(BLANK$,L1 -2) +"( " +A$(1) +" )": GOTO 3280
  313. 3130 B1$ = " "
  314. 3140 B1 = 2
  315. 3150  FOR K = 1 TO L
  316. 3160 B$(K +2) =  LEFT$(BLANK$,L1 -B1) +"/" +B1$ +A$(K) +B1$ +S$
  317. 3170 B1$ = B1$ +" "
  318. 3180 B1 = B1 +1
  319. 3190  NEXT K
  320. 3200 B$(L +3) =  LEFT$(BLANK$,L1 -B1) +"(" +B1$ +A$(K) +B1$ +")"
  321. 3210 B1$ = " "
  322. 3220 B1 = 1
  323. 3230  FOR K = L TO 1  STEP  -1
  324. 3240 B$(K +L +3) =  LEFT$(BLANK$,L1 -B1 -1) +S$ +B1$ +A$(L +K +1) +B1$ +"/"
  325. 3250 B1 = B1 +1
  326. 3260 B1$ = B1$ +" "
  327. 3270  NEXT K
  328. 3280 B$(J +3) =  LEFT$(BLANK$,L1 -1) +S$ + LEFT$(UNDERLN$,27) +"/"
  329. 3290 B$(J +4) = BLANK$ +FLOW$
  330. 3300  REM PAD LINES WITH BLANKS
  331. 3310 L1 =  LEN(B$(L +3)) +5
  332. 3320  FOR I = L +4 TO J +4
  333. 3330 B$(I) =  LEFT$(B$(I) +BLANK$,L1)
  334. 3340  NEXT I
  335. 3350  REM ADD TEXT
  336. 3360 K = L +3
  337. 3370 B$(K) = B$(K) +ARROW$
  338. 3380 L2 = RMARGIN
  339. 3390  IF  LEN(B$(K)) <L2 GOTO 3470
  340. 3400  IF  MID$ (B$(K),L2,1) < >":"  AND  MID$ (B$(K),L2,1) < >" "  AND  MID$ (B$(K),L2,1) < >","  AND  MID$ (B$(K),L2,1) < > CHR$(126)  AND  MID$ (B$(K),L2,1) < >";"  THEN L2 = L2 -1: IF L2 >RMARGIN -10 GOTO 3400
  341. 3410 ARROW$ =  MID$ (B$(K),L2 +1, LEN(B$(K)))
  342. 3420 B$(K) =  LEFT$(B$(K),L2)
  343. 3430 K = K +1
  344. 3440  IF K >J +4  THEN B$(K) =  LEFT$( LEFT$(B$(K -1),31) +BLANK$,L1)
  345. 3450 B$(K) = B$(K) +ARROW$
  346. 3460  GOTO 3380
  347. 3470  IF K <J +4  THEN K = J +4
  348. 3480  GOTO 3490
  349. 3490  REM ===========
  350. 3500  REM PRINT LINES
  351. 3510  REM ===========
  352. 3520  REM 
  353. 3530  REM ----------
  354. 3540  REM MARK LOOPS
  355. 3550  REM ----------
  356. 3560  REM 
  357. 3570  IF LCOUNT +K >(LPAGE)  THEN  GOSUB 4180
  358. 3580  IF LOOP = 0 GOTO 3660
  359. 3590  FOR I = 1 TO K
  360. 3600  IF I = 2 GOTO 3620
  361. 3610 B$(I) =  LEFT$(B$(I),12 -2 *LOOP) + RIGHT$(": : : : : : : ",2 *LOOP) + MID$ (B$(I),13,79)
  362. 3620  NEXT I
  363. 3630  IF  MID$ (B$,7,4) = "NEXT" GOTO 3760
  364. 3640  IF  MID$ (B$,7,3) = "FOR" GOTO 3660
  365. 3650  GOTO 3880
  366. 3660  REM ----------
  367. 3670  REM START LOOP
  368. 3680  REM ----------
  369. 3690  IF  MID$ (B$,7,3) < >"FOR" GOTO 3880
  370. 3700 B$(L) =  LEFT$(B$(L),10 -2 *LOOP) + RIGHT$("..............",4 +2 *LOOP) + MID$ (B$(L),15,79): REM 14 PERIODS
  371. 3710 LOOP = LOOP +1
  372. 3720  FOR I = L +1 TO K
  373. 3730 B$(I) =  LEFT$(B$(I),12 -2 *LOOP) + RIGHT$(": : : : : : : ",2 *LOOP) + MID$ (B$(I),13,79)
  374. 3740  NEXT I
  375. 3750  GOTO 3880
  376. 3760  REM --------
  377. 3770  REM  END LOOP
  378. 3780  REM --------
  379. 3790 LOOP = LOOP -1
  380. 3800 B$(L) =  LEFT$(B$(L),10 -2 *LOOP) + LEFT$(":.............",4 +2 *LOOP) + MID$ (B$(L),15,79): REM 13 PERIODS AFTER COLON
  381. 3810  FOR I = 7 TO 80
  382. 3820  IF  MID$ (B$,I,1) = ","  THEN LOOP = LOOP -1
  383. 3830  NEXT I
  384. 3840  FOR I = L +1 TO K
  385. 3850 B$(I) =  LEFT$(B$(I),12 -2 *(LOOP +1)) +" " + MID$ (B$(I),14 -2 *(LOOP +1),79)
  386. 3860  IF LOOP = 0  THEN B$(I) =  LEFT$(BLANK$,12) + MID$ (B$(I),13)
  387. 3870  NEXT I
  388. 3880  REM -----
  389. 3890  REM PRINT
  390. 3900  REM -----
  391. 3910 LCOUNT = LCOUNT +K
  392. 3920  FOR I = 1 TO K
  393. 3930  PRINT B$(I)
  394. 3940  NEXT I
  395. 3950 B$(K) =  LEFT$(B$(K),31)
  396. 3960  NEXT II
  397. 3970  GOTO 580
  398. 3980  REM ---
  399. 3990  REM END
  400. 4000  REM ---
  401. 4010  IF  PEEK(222) < >5 GOTO 4430
  402. 4020  IF LCOUNT >LPAGE -5  THEN  GOSUB 4180
  403. 4030  IF FLOW$ = V$  THEN  PRINT  LEFT$(BLANK$,22) LEFT$(UNDERLN$,8)"V" LEFT$(UNDERLN$,8)
  404. 4040  IF FLOW$ = " "  THEN  PRINT  LEFT$(BLANK$,22) LEFT$(UNDERLN$,17)
  405. 4050  PRINT  LEFT$(BLANK$,21)V$ LEFT$(BLANK$,17)V$
  406. 4060  PRINT  LEFT$(BLANK$,21)V$"       END       "V$
  407. 4070  PRINT  LEFT$(BLANK$,21)V$ LEFT$(UNDERLN$,17)V$
  408. 4080  POKE 216,0
  409. 4090  FOR I = 5 TO LPAGE +BMARGIN -LCOUNT
  410. 4100  PRINT 
  411. 4110  NEXT I
  412. 4120  PRINT D$"PR#0"
  413. 4130  PRINT D$"CLOSE"
  414. 4140  PRINT D$"OPEN EXE": PRINT D$"CLOSE EXE": PRINT D$"DELETE EXE"
  415. 4150  PRINT D$"OPEN EX1": PRINT D$"CLOSE EX1": PRINT D$"DELETE EX1"
  416. 4160  PRINT D$"OPEN EXX,D"D1: PRINT D$"CLOSE EXX": PRINT D$"DELETE EXX"
  417. 4170  NEW 
  418. 4180  REM ============
  419. 4190  REM PRINT HEADER
  420. 4200  REM ============
  421. 4210  PRINT  LEFT$(B$(K),30);
  422. 4220  IF FLOW$ = V$  THEN  PRINT "V   CONTINUED ON PAGE "PAGE +1:LCOUNT = LCOUNT +1
  423. 4230  IF FLOW$ < >V$  THEN  PRINT "    CONTINUED ON PAGE "PAGE +1:LCOUNT = LCOUNT +1
  424. 4240  GOSUB 4280
  425. 4250  PRINT BLANK$FLOW$" CONTINUED FROM PAGE "PAGE -1
  426. 4260 LCOUNT = 5
  427. 4270  RETURN 
  428. 4280  REM ----------
  429. 4290  REM PRINT TEXT
  430. 4300  REM ----------
  431. 4310  FOR X = 1 TO LPAGE +BMARGIN -LCOUNT
  432. 4320  PRINT 
  433. 4330  NEXT X
  434. 4340 PAGE = PAGE +1
  435. 4350  PRINT  SPC( LMARGIN)NAME$ SPC( LNLGTH - LEN(NAME$) -9)"PAGE "PAGE
  436. 4360  PRINT  SPC( LMARGIN)AUTH$ SPC( LNLGTH - LEN(AUTH$) -9)DT$
  437. 4370  PRINT  SPC( LMARGIN);
  438. 4380  FOR X = 1 TO LNLGTH
  439. 4390  PRINT "-";
  440. 4400  NEXT X
  441. 4410  PRINT : PRINT 
  442. 4420  RETURN 
  443. 4430 E =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219): POKE 216,0
  444. 4440  HOME : VTAB 12: PRINT "ERROR #"E" IN LINE "EL".": PRINT : PRINT "PRESS <ESC> TO QUIT,": PRINT "OR ANY OTHER KEY TO TRY AGAIN."
  445. 4450  GET Z$: IF Z$ < > CHR$(27)  THEN  ON EF GOTO 130,4460
  446. 4460  PRINT D$"PR#0": PRINT D$"CLOSE": END 
  447. 4470  GET A$: IF A$ < > CHR$(13) GOTO 4470
  448. 4480  RETURN