home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 15 / CDACTUAL15.iso / cdactual / program / basic / QBLIST10.ZIP / QBLIST.BAS < prev    next >
Encoding:
BASIC Source File  |  1992-10-25  |  15.1 KB  |  706 lines

  1. DECLARE SUB DataStmtLine ()
  2. DECLARE SUB PressAKey ()
  3. DECLARE SUB ListFunc ()
  4. DECLARE SUB ListSubs ()
  5. DECLARE SUB FunctionList ()
  6. DECLARE SUB WriteLine ()
  7. DECLARE SUB SplitLine ()
  8. DECLARE SUB MainRoutine ()
  9. DECLARE SUB EojRoutine ()
  10. DECLARE SUB EndOfList ()
  11. DECLARE SUB MainModuleList ()
  12. DECLARE SUB SubRoutineList ()
  13. DECLARE SUB CompleteList ()
  14. DECLARE SUB WaitforAnswer (A$)
  15. DECLARE SUB ScreenTitle ()
  16. DECLARE SUB SubTitle ()
  17. DECLARE SUB MainModule ()
  18. DECLARE SUB ProgramTitle ()
  19. DECLARE SUB OpenFiles ()
  20.  
  21. COMMON SHARED Line$, FileName$, SubName$, Today$, TheTime$, FullPageCount
  22. COMMON SHARED SubPageCount, LineCount, SubRoutineType, SubType$
  23. COMMON SHARED Line1$, Line2$, Line3$, Line4$, LineLen
  24.  
  25. REM **********************************
  26. REM * Set Printer To 12 CPI at 8 LPI *
  27. REM **********************************
  28.  
  29. ON ERROR GOTO ErrorHandler
  30.  
  31. Today$ = DATE$
  32. TheTime$ = TIME$
  33.  
  34. Redo:
  35.  
  36. CALL MainRoutine
  37.  
  38. ErrorHandler:
  39. SOUND 1000, 2
  40. PRINT
  41. ErrorCode = ERR
  42. SELECT CASE ErrorCode
  43.  CASE 64
  44.   PRINT "Bad File Name ==> "; FileName$; " <=="
  45.   INPUT "Please Press Any Key To Continue"; A$
  46.   RESUME Redo
  47.  CASE 53
  48.   PRINT "File Not Found ==> "; FileName$; " <=="
  49.   INPUT "Please Press Any Key To Continue"; A$
  50.   RESUME Redo
  51.  CASE ELSE
  52.   PRINT "ERROR CODE = "; ErrorCode
  53.   PRINT "ErrorHandler Not Setup For This Error"
  54.   INPUT "Please Press Any Key To Continue"; A$
  55.   CALL EojRoutine
  56. END SELECT
  57.  
  58. END
  59.  
  60. SUB CompleteList
  61.  
  62. START$ = "Y"
  63.  
  64. DO
  65.  LINE INPUT #1, Line$
  66.  LinesRead = LinesRead + 1
  67.   IF LEFT$(Line$, 4) = "SUB " THEN
  68.     NamePosition = 5
  69.     GOSUB GetSubName
  70.     CALL ProgramTitle
  71.     SubPageCount = 1
  72.     SubRoutineType = 2
  73.     CALL SubTitle
  74.     START$ = "N"
  75.   ELSEIF LEFT$(Line$, 8) = "FUNCTION" THEN
  76.     NamePosition = 10
  77.     GOSUB GetSubName
  78.     CALL ProgramTitle
  79.     SubPageCount = 1
  80.     SubRoutineType = 3
  81.     CALL SubTitle
  82.     START$ = "N"
  83.   ELSEIF (LEFT$(Line$, 4) <> "SUB " OR LEFT$(Line$, 8) <> "FUNCTION") AND START$ = "Y" THEN
  84.      SubPageCount = 1
  85.      CALL ProgramTitle
  86.      SubName$ = FileName$
  87.      SubRoutineType = 1
  88.      CALL SubTitle
  89.      START$ = "N"
  90.   END IF
  91. START$ = "N"
  92. CALL WriteLine
  93. LOOP WHILE NOT EOF(1)
  94.  
  95. PRINT #2, CHR$(12)
  96. CLOSE #1, #2
  97. CALL EndOfList
  98. CALL MainRoutine
  99.  
  100. GetSubName:
  101.   
  102. SpacePos = INSTR(NamePosition, Line$, " ")
  103.  IF SpacePos = 0 THEN
  104.     SpacePos = LEN(Line$)
  105.     SpacePos = SpacePos - (NamePosition - 1)
  106.     SubName$ = MID$(Line$, NamePosition, SpacePos)
  107.  ELSEIF SpacePos > 0 AND NamePosition = 5 THEN
  108.     SpacePos = SpacePos - 4
  109.     SubName$ = MID$(Line$, 5, SpacePos - 1)
  110.  ELSEIF SpacePos > 0 AND NamePosition = 10 THEN
  111.     SpacePos = SpacePos - 9
  112.     SubName$ = MID$(Line$, 10, SpacePos - 1)
  113.  END IF
  114. RETURN
  115.  
  116. END SUB
  117.  
  118. SUB DataStmtLine
  119.  
  120. CommaPos = 0
  121. LastComma = 0
  122. SaveLastComma = 0
  123. Line1$ = ""
  124. Line2$ = ""
  125. Line3$ = ""
  126. Line4$ = ""
  127.  
  128. DO
  129.   LastComma = INSTR(LastComma + 1, Line$, ",")
  130.   IF LastComma <> 0 THEN SaveLastComma = LastComma
  131.   IF LastComma <= 80 AND LastComma <> 0 THEN CommaPos = SaveLastComma
  132. LOOP UNTIL LastComma = 0
  133. Line1$ = LEFT$(Line$, CommaPos)
  134.  
  135. IF LineLen > 80 AND LineLen <= 160 THEN
  136.    Line2$ = MID$(Line$, CommaPos + 1, LineLen - CommaPos)
  137.    EXIT SUB
  138. END IF
  139. LastComma = 0
  140. Temp$ = MID$(Line$, CommaPos + 1, LineLen - CommaPos)
  141. DO
  142.   LastComma = INSTR(LastComma + 1, Temp$, ",")
  143.   IF LastComma <> 0 THEN SaveLastComma = LastComma
  144.   IF LastComma <= 80 AND LastComma <> 0 THEN CommaPos = SaveLastComma
  145. LOOP UNTIL LastComma = 0
  146. Line2$ = LEFT$(Temp$, CommaPos)
  147. LastComma = 0
  148.  
  149. IF LineLen > 160 AND LineLen <= 240 THEN
  150.    Line3$ = MID$(Temp$, CommaPos + 1, LineLen - CommaPos)
  151.    EXIT SUB
  152. END IF
  153. LastComma = 0
  154. Temp$ = MID$(Temp$, CommaPos + 1, LineLen - CommaPos)
  155. DO
  156.   LastComma = INSTR(LastComma + 1, Temp$, ",")
  157.   IF LastComma <> 0 THEN SaveLastComma = LastComma
  158.   IF LastComma <= 80 AND LastComma <> 0 THEN CommaPos = SaveLastComma
  159. LOOP UNTIL LastComma = 0
  160. Line3$ = LEFT$(Temp$, CommaPos)
  161. LastComma = 0
  162.  
  163. IF LineLen > 240 AND LineLen <= 255 THEN
  164.    Line4$ = MID$(Temp$, CommaPos + 1, LineLen - LastComma)
  165.    EXIT SUB
  166. END IF
  167. LastComma = 0
  168. Temp$ = MID$(Temp$, CommaPos + 1, LineLen - CommaPos)
  169. DO
  170.   LastComma = INSTR(LastComma + 1, Temp$, ",")
  171.   IF LastComma <> 0 THEN SaveLastComma = LastComma
  172.   IF LastComma <= 80 AND LastComma <> 0 THEN CommaPos = SaveLastComma
  173. LOOP UNTIL LastComma = 0
  174. Line4$ = LEFT$(Temp$, CommaPos)
  175.  
  176. END SUB
  177.  
  178. SUB EndOfList
  179.  
  180. LOCATE 20, 12, 0
  181. PRINT "===> End Of List, Please Press Any Key To Continue <==="
  182. SOUND 1000, 2
  183. CALL WaitforAnswer(A$)
  184.  
  185. END SUB
  186.  
  187. SUB EojRoutine
  188.  
  189. CLOSE #1, #2
  190. CLS
  191. SYSTEM
  192.  
  193. END SUB
  194.  
  195. SUB FunctionList
  196.  
  197. StartFunc:
  198. CALL ScreenTitle
  199. DO
  200. LOCATE 6, 1
  201. PRINT "Please Enter Function To List"
  202. PRINT "(L)ist To List Functions"
  203. INPUT "Or (Q)uit to End ==> "; FuncTofind$
  204. LOOP WHILE FuncTofind$ = ""
  205. IF UCASE$(FuncTofind$) = "QUIT" OR UCASE$(FuncTofind$) = "Q" THEN
  206.  CALL EndOfList
  207.  CALL MainRoutine
  208. END IF
  209. IF UCASE$(FuncTofind$) = "LIST" OR UCASE$(FuncTofind$) = "L" THEN
  210.  CALL ListFunc
  211.  CALL EndOfList
  212.  CALL MainRoutine
  213. END IF
  214.  
  215. LineCount = 4
  216. FoundFunc$ = "N"
  217.  
  218. FindFunc:
  219. DO
  220.    LINE INPUT #1, Line$
  221.    IF LEFT$(Line$, 8) = "FUNCTION" THEN GOSUB FoundFunc
  222. LOOP UNTIL EOF(1) OR FoundFunc$ = "Y"
  223.  
  224. IF FoundFunc$ = "Y" THEN
  225.   PRINT #2, CHR$(12)
  226.   CLOSE #1, #2
  227.   CALL EndOfList
  228.   CALL MainRoutine
  229. END IF
  230.  
  231. IF FoundFunc$ = "N" THEN
  232.   PRINT SPC(10); "===> FUNCTION "; UCASE$(FuncTofind$); " Not Found <==="
  233.   SOUND 1000, 2
  234.   PRINT "Please Press Any Key To Continue"
  235.   CALL WaitforAnswer(A$)
  236.   CLOSE #1, #2
  237.   CALL OpenFiles
  238.   GOTO StartFunc
  239. END IF
  240.  
  241. FoundFunc:
  242.   SpacePos = INSTR(10, Line$, " ")
  243.   IF SpacePos = 0 THEN
  244.      SpacePos = LEN(Line$)
  245.      SpacePos = SpacePos - 9
  246.      FuncName$ = MID$(Line$, 10, SpacePos)
  247.   ELSEIF SpacePos > 0 THEN
  248.      SpacePos = SpacePos - 9
  249.      FuncName$ = MID$(Line$, 10, SpacePos - 1)
  250.   END IF
  251.   IF UCASE$(FuncName$) = UCASE$(FuncTofind$) THEN
  252.     CALL ProgramTitle
  253.     SubRoutineType = 3
  254.     SubName$ = FuncName$
  255.     CALL SubTitle
  256.     FoundFunc$ = "Y"
  257.     GOSUB PrintFunc
  258.   END IF
  259. RETURN
  260.  
  261. PrintFunc:
  262.   DO
  263.     CALL WriteLine
  264.     LINE INPUT #1, Line$
  265.   LOOP UNTIL LEFT$(Line$, 4) = "SUB " OR LEFT$(Line$, 8) = "FUNCTION" OR EOF(1)
  266. RETURN
  267.  
  268. END SUB
  269.  
  270. SUB ListFunc
  271.  
  272. X = 1
  273. GOSUB FuncHeading
  274. FuncFound$ = "N"
  275.  
  276. DO
  277.   LINE INPUT #1, Line$
  278.   IF LEFT$(Line$, 8) = "FUNCTION" THEN
  279.     GOSUB ListFunc
  280.     FuncFound$ = "Y"
  281.   END IF
  282. LOOP WHILE NOT EOF(1)
  283.  
  284. IF FuncFound$ = "N" THEN PRINT SPC(31); "No Functions Found"
  285. CALL EndOfList
  286. CLOSE #1
  287. OPEN FileName$ FOR INPUT AS #1
  288. CALL FunctionList
  289.  
  290. ListFunc:
  291.   SpacePos = INSTR(10, Line$, " ")
  292.   IF SpacePos = 0 THEN
  293.      SpacePos = LEN(Line$)
  294.      SpacePos = SpacePos - 9
  295.      FuncName$ = MID$(Line$, 10, SpacePos)
  296.   ELSEIF SpacePos > 0 THEN
  297.          SpacePos = SpacePos - 9
  298.          FuncName$ = MID$(Line$, 10, SpacePos - 1)
  299.   END IF
  300. PRINT FuncName$
  301. X = X + 1
  302. IF X > 10 THEN
  303.   CALL PressAKey
  304.   GOSUB FuncHeading
  305.   X = 1
  306. END IF
  307. RETURN
  308.  
  309. FuncHeading:
  310.   CALL ScreenTitle
  311.   PRINT SPC(31); "List Of Functions"
  312.   PRINT SPC(31); "-----------------"
  313. RETURN
  314.  
  315. END SUB
  316.  
  317. SUB ListSubs
  318.  
  319. X = 1
  320. GOSUB SubHeading
  321. SubFound$ = "N"
  322.  
  323. DO
  324.   LINE INPUT #1, Line$
  325.   IF LEFT$(Line$, 4) = "SUB " THEN
  326.     GOSUB ListSub
  327.     SubFound$ = "Y"
  328.   END IF
  329. LOOP WHILE NOT EOF(1)
  330.  
  331. IF SubFound$ = "N" THEN PRINT SPC(30); "No SubRoutines Found"
  332. CALL EndOfList
  333. CLOSE #1
  334. OPEN FileName$ FOR INPUT AS #1
  335. CALL SubRoutineList
  336.  
  337. ListSub:
  338.   SpacePos = INSTR(5, Line$, " ")
  339.   IF SpacePos = 0 THEN
  340.      SpacePos = LEN(Line$)
  341.      SpacePos = SpacePos - 4
  342.      SubName$ = MID$(Line$, 5, SpacePos)
  343.   ELSEIF SpacePos > 0 THEN
  344.          SpacePos = SpacePos - 4
  345.          SubName$ = MID$(Line$, 5, SpacePos - 1)
  346.   END IF
  347. PRINT SubName$
  348. X = X + 1
  349. IF X > 10 THEN
  350.   CALL PressAKey
  351.   GOSUB SubHeading
  352.   X = 1
  353. END IF
  354. RETURN
  355.  
  356. SubHeading:
  357.   CALL ScreenTitle
  358.   PRINT SPC(30); "List Of SubRoutines"
  359.   PRINT SPC(30); "-------------------"
  360. RETURN
  361.  
  362. END SUB
  363.  
  364. SUB MainModuleList
  365.  
  366. LineCount = 4
  367. START$ = "Y"
  368. SubName$ = FileName$
  369. CALL ProgramTitle
  370. SubRoutineType = 1
  371. CALL SubTitle
  372.  
  373. DO
  374.  LINE INPUT #1, Line$
  375.   IF LEFT$(Line$, 4) = "SUB " AND (START$ = "Y" OR START$ = "N") THEN
  376.     IF LEFT$(Line$, 8) = "FUNCTION" AND (START$ = "Y" OR START$ = "N") THEN
  377.       PRINT #2, SPC(10); "No Main Module"
  378.       CLOSE #1
  379.       CALL EndOfList
  380.       CALL MainRoutine
  381.     END IF
  382.   END IF
  383. START$ = "N"
  384. IF LEFT$(Line$, 4) = "SUB " OR LEFT$(Line$, 8) = "FUNCTION" THEN EXIT DO
  385. CALL WriteLine
  386. LOOP WHILE NOT EOF(1)
  387.  
  388. PRINT #2, CHR$(12)
  389. CLOSE #1, #2
  390. CALL EndOfList
  391. CALL MainRoutine
  392.  
  393. END SUB
  394.  
  395. SUB MainRoutine
  396.  
  397. FullPageCount = 1
  398. SubPageCount = 1
  399. LineCount = 4
  400.  
  401. CALL ScreenTitle
  402. DO
  403. LOCATE 6, 1
  404. PRINT "Please Enter Program To List"
  405. INPUT "Or (Q)uit To End ==> "; FileName$
  406. LOOP WHILE FileName$ = ""
  407. IF UCASE$(FileName$) = "QUIT" OR UCASE$(FileName$) = "Q" THEN CALL EojRoutine
  408. FileName$ = UCASE$(FileName$ + ".BAS")
  409.  
  410. CALL OpenFiles
  411.  
  412. DO
  413. CALL ScreenTitle
  414. PRINT SPC(22); "(1) Complete": PRINT ""
  415. PRINT SPC(22); "(2) Main Moudule": PRINT
  416. PRINT SPC(22); "(3) SubRoutine": PRINT
  417. PRINT SPC(22); "(4) Function": PRINT
  418. PRINT SPC(22); "(5) Quit"
  419. Retry:
  420. LOCATE 16, 1
  421. PRINT "Please Enter Type Of Listing You Want ==> "
  422. LOCATE 16, 43, 1
  423. CALL WaitforAnswer(A$)
  424. Answer = VAL(A$)
  425. LOCATE 16, 43, 1
  426. PRINT A$
  427. SELECT CASE Answer
  428.  CASE IS = 1
  429.    LOCATE 17, 1
  430.    PRINT "                          "
  431.    CALL CompleteList
  432.    CALL EndOfList
  433.  CASE IS = 2
  434.    LOCATE 17, 1
  435.    PRINT "                          "
  436.    CALL MainModuleList
  437.    CALL EndOfList
  438.  CASE IS = 3
  439.    CALL SubRoutineList
  440.    CALL EndOfList
  441.  CASE IS = 4
  442.    CALL FunctionList
  443.    CALL EndOfList
  444.  CASE IS = 5
  445.    CALL EojRoutine
  446.  CASE ELSE
  447.    LOCATE 17, 1
  448.    SOUND 1000, 2
  449.    PRINT "==> Invalid Selection <=="
  450.    GOTO Retry
  451. END SELECT
  452. LOOP
  453.  
  454. END SUB
  455.  
  456. SUB OpenFiles
  457.  
  458. OPEN FileName$ FOR INPUT AS #1
  459. DotPos = INSTR(FileName$, ".")
  460. OutName$ = LEFT$(FileName$, DotPos - 1)
  461. OutName$ = OutName$ + ".LST"
  462. OPEN OutName$ FOR OUTPUT AS #2
  463.  
  464. END SUB
  465.  
  466. SUB PressAKey
  467.  
  468. LOCATE 20, 12, 0
  469. PRINT "===> Please Press Any Key To Continue <==="
  470. SOUND 1000, 2
  471. CALL WaitforAnswer(A$)
  472.  
  473. END SUB
  474.  
  475. SUB ProgramTitle
  476.  
  477. PRINT #2, CHR$(12)
  478. PRINT #2, SPC(10); "Program Listing Of "; FileName$;
  479. PRINT #2, " As Of "; Today$; " At "; TheTime$;
  480. PRINT #2, "            Page "; USING "###"; FullPageCount
  481. FullPageCount = FullPageCount + 1
  482.  
  483. END SUB
  484.  
  485. SUB ScreenTitle
  486.  
  487. CLS
  488. COLOR 15, 1
  489. PRINT "DATE = "; DATE$;
  490. LOCATE 1, 66
  491. PRINT "TIME = "; TIME$
  492. PRINT
  493. PRINT SPC(22); "Qbasic Or QuickBasic Program Lister"
  494. PRINT SPC(22); "-----------------------------------"
  495.  
  496. END SUB
  497.  
  498. SUB SplitLine
  499.  
  500. BlankPos = 0
  501. LastBlank = 0
  502. SaveLastBlank = 0
  503. Line1$ = ""
  504. Line2$ = ""
  505. Line3$ = ""
  506. Line4$ = ""
  507.  
  508. DO
  509.   LastBlank = INSTR(LastBlank + 1, Line$, " ")
  510.   IF LastBlank <> 0 THEN SaveLastBlank = LastBlank
  511.   IF LastBlank <= 80 AND LastBlank <> 0 THEN BlankPos = SaveLastBlank
  512. LOOP UNTIL LastBlank = 0
  513. Line1$ = LEFT$(Line$, BlankPos)
  514.  
  515. IF LineLen > 80 AND LineLen <= 160 THEN
  516.    Line2$ = MID$(Line$, BlankPos + 1, LineLen - BlankPos)
  517.    EXIT SUB
  518. END IF
  519. LastBlank = 0
  520. Temp$ = MID$(Line$, BlankPos + 1, LineLen - BlankPos)
  521. DO
  522.   LastBlank = INSTR(LastBlank + 1, Temp$, " ")
  523.   IF LastBlank <> 0 THEN SaveLastBlank = LastBlank
  524.   IF LastBlank <= 80 AND LastBlank <> 0 THEN BlankPos = SaveLastBlank
  525. LOOP UNTIL LastBlank = 0
  526. Line2$ = LEFT$(Temp$, BlankPos)
  527. LastBlank = 0
  528.  
  529. IF LineLen > 160 AND LineLen <= 240 THEN
  530.    Line3$ = MID$(Temp$, BlankPos + 1, LineLen - BlankPos)
  531.    EXIT SUB
  532. END IF
  533. LastBlank = 0
  534. Temp$ = MID$(Temp$, BlankPos + 1, LineLen - BlankPos)
  535. DO
  536.   LastBlank = INSTR(LastBlank + 1, Temp$, " ")
  537.   IF LastBlank <> 0 THEN SaveLastBlank = LastBlank
  538.   IF LastBlank <= 80 AND LastBlank <> 0 THEN BlankPos = SaveLastBlank
  539. LOOP UNTIL LastBlank = 0
  540. Line3$ = LEFT$(Temp$, BlankPos)
  541. LastBlank = 0
  542.  
  543. IF LineLen > 240 AND LineLen <= 255 THEN
  544.    Line4$ = MID$(Temp$, BlankPos + 1, LineLen - LastBlank)
  545.    EXIT SUB
  546. END IF
  547. LastBlank = 0
  548. Temp$ = MID$(Temp$, BlankPos + 1, LineLen - BlankPos)
  549. DO
  550.   LastBlank = INSTR(LastBlank + 1, Temp$, " ")
  551.   IF LastBlank <> 0 THEN SaveLastBlank = LastBlank
  552.   IF LastBlank <= 80 AND LastBlank <> 0 THEN BlankPos = SaveLastBlank
  553. LOOP UNTIL LastBlank = 0
  554. Line4$ = LEFT$(Temp$, BlankPos)
  555.  
  556. END SUB
  557.  
  558. SUB SubRoutineList
  559.  
  560. StartSub:
  561. CALL ScreenTitle
  562. DO
  563. LOCATE 6, 1
  564. PRINT "Please Enter SubRoutine To List"
  565. PRINT "(L)ist To List SubRoutines"
  566. INPUT "Or (Q)uit to End ==> "; SubToFind$
  567. LOOP WHILE SubToFind$ = ""
  568. IF UCASE$(SubToFind$) = "QUIT" OR UCASE$(SubToFind$) = "Q" THEN
  569.  CLOSE #1, #2
  570.  CALL EndOfList
  571.  CALL MainRoutine
  572. END IF
  573. IF UCASE$(SubToFind$) = "LIST" OR UCASE$(SubToFind$) = "L" THEN
  574.  CALL ListSubs
  575. END IF
  576.  
  577. LineCount = 4
  578. FoundSub$ = "N"
  579.  
  580. FindSub:
  581. DO
  582.    LINE INPUT #1, Line$
  583.    IF LEFT$(Line$, 4) = "SUB " THEN GOSUB FoundSub
  584. LOOP UNTIL EOF(1) OR FoundSub$ = "Y"
  585.  
  586. IF FoundSub$ = "Y" THEN
  587.   PRINT #2, CHR$(12)
  588.   CLOSE #1, #2
  589.   CALL EndOfList
  590.   CALL MainRoutine
  591. END IF
  592.  
  593. IF FoundSub$ = "N" THEN
  594.   PRINT SPC(10); "===> Sub Routine "; UCASE$(SubToFind$); " Not Found <==="
  595.   SOUND 1000, 2
  596.   PRINT "Please Press Any Key To Continue"
  597.   CALL WaitforAnswer(A$)
  598.   CLOSE #1, #2
  599.   CALL OpenFiles
  600.   GOTO StartSub
  601. END IF
  602.  
  603. FoundSub:
  604.   SpacePos = INSTR(5, Line$, " ")
  605.   IF SpacePos = 0 THEN
  606.      SpacePos = LEN(Line$)
  607.      SpacePos = SpacePos - 4
  608.      SubName$ = MID$(Line$, 5, SpacePos)
  609.   ELSEIF SpacePos > 0 THEN
  610.      SpacePos = SpacePos - 4
  611.      SubName$ = MID$(Line$, 5, SpacePos - 1)
  612.   END IF
  613.   IF UCASE$(SubName$) = UCASE$(SubToFind$) THEN
  614.     CALL ProgramTitle
  615.     SubRoutineType = 2
  616.     CALL SubTitle
  617.     FoundSub$ = "Y"
  618.     GOSUB PrintSub
  619.   END IF
  620. RETURN
  621.  
  622. PrintSub:
  623.   DO
  624.     CALL WriteLine
  625.     LINE INPUT #1, Line$
  626.   LOOP UNTIL LEFT$(Line$, 4) = "SUB " OR LEFT$(Line$, 8) = "FUNCTION" OR EOF(1)
  627. RETURN
  628.  
  629. END SUB
  630.  
  631. SUB SubTitle
  632.  
  633. IF SubRoutineType = 1 THEN SubType$ = "Main Module"
  634. IF SubRoutineType = 2 THEN SubType$ = "Sub Routine"
  635. IF SubRoutineType = 3 THEN SubType$ = "Function"
  636.  
  637. PRINT #2, SPC(29); SubName$; " ("; SubType$; ")";
  638. PRINT #2, " Page "; USING "###"; SubPageCount
  639. PRINT #2, SPC(10); STRING$(80, 45)
  640. PRINT #2,
  641. SubPageCount = SubPageCount + 1
  642. LineCount = 4
  643.  
  644. END SUB
  645.  
  646. SUB WaitforAnswer (A$)
  647.  
  648. Answer$ = ""
  649. A$ = ""
  650.  DO
  651.    A$ = UCASE$(INKEY$)
  652.  LOOP WHILE A$ = ""
  653.  
  654. END SUB
  655.  
  656. SUB WriteLine
  657.  
  658. LineLen = LEN(Line$)
  659.  
  660. DataWord = INSTR(1, Line$, "DATA ")
  661. IF DataWord <> 0 AND LineLen > 80 THEN
  662.    CALL DataStmtLine
  663.    GOTO Skip
  664. END IF
  665.  
  666. IF LineLen <= 80 THEN
  667.    PRINT #2, SPC(10); Line$
  668.    LineCount = LineCount + 1
  669.    GOSUB HeadRtn:
  670.    EXIT SUB
  671. END IF
  672.  
  673. IF LineLen > 80 THEN
  674.    CALL SplitLine
  675. Skip:
  676.    PRINT #2, SPC(10); Line1$
  677.    LineCount = LineCount + 1
  678.    GOSUB HeadRtn
  679.    PRINT #2, SPC(4); "<<*>> ";
  680.    PRINT #2, Line2$
  681.    LineCount = LineCount + 1
  682.    GOSUB HeadRtn
  683.    IF Line3$ = "" THEN EXIT SUB
  684.    PRINT #2, SPC(4); "<<*>> ";
  685.    PRINT #2, Line3$
  686.    LineCount = LineCount + 1
  687.    GOSUB HeadRtn
  688.    IF Line4$ = "" THEN EXIT SUB
  689.    PRINT #2, SPC(4); "<<*>> ";
  690.    PRINT #2, Line4$
  691.    LOCATE 17, 1
  692.    LineCount = LineCount + 1
  693.    GOSUB HeadRtn
  694. END IF
  695. EXIT SUB
  696.  
  697. HeadRtn:
  698.    IF LineCount = 82 THEN
  699.    CALL ProgramTitle
  700.    CALL SubTitle
  701. END IF
  702. RETURN
  703.  
  704. END SUB
  705.  
  706.