10 REM TOF (INSTRUCTIONS)
100 ? TAB(-1,0);
110 PRINT "BASIC SOURCE-FILE PRINT PROGRAM"
120 PRINT " (COURTESY TETON DATA SYSTEMS)"
130 PRINT "     (JACKSON, WYOMING)"
140 PRINT "         (1/20/78)"
150 ?:?:INPUT "WANT INSTRUCTIONS  (0=NO  1=YES)? ";A
160 IF A=0 GOTO VAR'MP
170 PRINT
180 ?"    This program will type your ALPHA-BASIC source file listings,"
190 ?"with options for listing module titles, page numbers, page titles,"
200 ?"module headings, page lengths and margins!!  You can print up to 20"
210 ?"source files unattended, (if you have enough paper!).  You can print"
220 ?"any page of a file, or any number of pages.  Needless to say, we have"
230 ?"found this to be a very useful program!  A list of module titles"
240 ?"makes a very nice front page index to your program."
250 ?
260 ?"   At the beginning of each page, (or module), of your program merely"
270 ?"insert a 'REM TOF', followed by a space and an optional module title,"
280 ?"enclosed in parenthesis.  The title will be printed, along with the"
290 ?"page heading, at the top of the page.  REMEMBER TO PUT A 'REM TOF' AS"
300 ?"THE FIRST LINE OF YOUR PROGRAM!!."
310 ?
320 ?"    Define your printer as 'PRNTR' in TRMDEF, and have the TRM driver"
330 ?"in system memory.  Load FILPRT.BAS and follow the prompts.  You might"
340 ?"compare a print-out of this program against the original source for"
350 INPUT "an idea of what it can do.    TYPE RETURN TO RUN....";A
1000 REM TOF (MAP VARIABLES)
1010 VAR'MP:
1020 MAP1 WORK'AREA
1040    MAP2 LIN'COUNT,B,1,0
1050    MAP2 PAGE'COUNT,B,1,1
1060    MAP2 PAGE'LENGTH,B,1
1070    MAP2 MARGIN,B,1
1080    MAP2 SOURCE'LIN,S,90
1082    MAP2 LIN'NO,S,5
1084    MAP2 LIN'CHAR,S,80
1090    MAP2 FILE'NAME(20),S,10
1100    MAP2 PAGE'HEADING(20),S,40
1110    MAP2 MODULE'TITLE,S,40
2000 REM TOF (INPUT OPTIONS)
2010 ?TAB(-1,0);
2020 INPUT "TODAY'S DATE (IE. 2/5/77): ";DAT$
2030 INPUT "HOW MANY LINES/PAGE (USUALLY 55-65)? ";PAGE'LENGTH
2040 INPUT "SET MARGIN WHERE (USUALLY 5-10)? ";MARGIN
2050 START:     ?"WANT LIST OF MODULE TITLES?"
2060            INPUT "        (0=NO 1=YES 2=EXIT)"; TTL'LST
2070            IF TTL'LST=1 FLAG=1: GOTO INPT'FIL
2080            IF TTL'LST=2 GOTO FINISH
2090            INPUT "WANT THE WHOLE FILE (0=NO 1=YES)? ";FLAG
2100            IF FLAG=0 THEN FLAG1=1
2110            IF FLAG=1 INPUT "WANT 'TOF' PAGING (0=NO 1=YES)? ";FLAG1
2120            IF FLAG=1 GOTO INPT'FIL
2130            INPUT "HOW MANY PAGES: "; NO'PAGES
2140 PAGE'NO:   INPUT "START WHICH PAGE: "; PAGE'COUNT
2150            IF FLAG2=1 GOTO PRNT
2160 INPT'FIL:  PRINT
2170            ?"TYPE IN THE FILE'NAMES, AND PAGE HEADINGS, YOU WANT PRINTED."
2180            ?"TYPE '*' TO END THE LIST.  YOU MUST ADD '.BAS' TO THE FILE-"
2190            ?"NAME, (YOU MAY SPECIFY OTHER PPN'S THIS WAY)!!":?
2200            FOR R=1 TO 20
2210 INPT1:     ?"FILE #";R;"- ";: INPUT FILE'NAME(R)
2220            IF FILE'NAME(R) <> "*" LOOKUP FILE'NAME(R), CHK
2225            IF CHK=0 ?FILE'NAME(R);" NOT FOUND!";CHR(7): GOTO INPT1
2230            ?TAB(79);TAB(-1,3);"|"
2240            ?TAB(24);TAB(-1,3);TAB(-1,3);
2250            INPUT "PAGE HEADING: |"; PAGE'HEADING(R)
2260            IF FILE'NAME(R)="*" AND TTL'LST=1 GOTO LBL'SRCH
2270            IF FILE'NAME(R)="*" GOTO PRNT
2280            IF FLAG=0 FILE'NAME(R+1)="*": GOTO PRNT
2290            NEXT R
2300            GOTO PRNT
3000 REM TOF (PRINT ROUTINE)
3010 PRNT:      FILE'LIM=R: PAGES=0: LIN'COUNT=0
3040            FOR LOOP=1 TO FILE'LIM
3050            OPEN #1, FILE'NAME(LOOP), INPUT
3055            OPEN #99, "TRM:PRNTR", OUTPUT
3060            IF FLAG1=0 CALL NEXT'PAGE
3070            IF FLAG=0 CALL ADV'PAGE
3080 CYCLE:     INPUT LINE #1, SOURCE'LIN
3090            IF EOF(1)=1 GOTO NEXT'FILE
3110            CALL FORMAT
3140            IF FLAG1=0 GOTO SKP'TOF
3150            IF LIN'CHAR[2;7] = "REM TOF" CALL CHK'TITLE
3200 SKP'TOF:   IF LIN'COUNT=PAGE'LENGTH CALL NEXT'PAGE
3210            ?#99, TAB(MARGIN) LIN'NO; LIN'CHAR
3220            LIN'COUNT=LIN'COUNT + 1
3230            GOTO CYCLE
5000 REM TOF (TITLE SHEET SUB)
5010 LBL'SRCH:  FIL'LIM=R
5020            FOR LOOP=1 TO FIL'LIM
5030            IF FILE'NAME(LOOP)="*" GOTO FINISH
5040            OPEN #99, "TRM:PRNTR", OUTPUT
5050            OPEN #1, FILE'NAME(LOOP), INPUT
5060            GOSUB NEXT'PAGE
5070            PAGE'COUNT=1
5080 LOOP:      INPUT LINE #1, SOURCE'LIN
5090            IF EOF(1)=1 CLOSE #1:CLOSE #99: PAGE'COUNT=1: NEXT LOOP
5100            CALL FORMAT
5110            IF LIN'CHAR[2;7] = "REM TOF" CALL TITLE
5120            GOTO LOOP
5130
5140 TITLE:     MODULE'TITLE=LIN'CHAR[10,-1]
5160            ?#99,TAB(10)"PAGE -";PAGE'COUNT;TAB(21)"LINE - ";LIN'NO;
5170            PRINT #99,TAB(35) MODULE'TITLE
5180            PAGE'COUNT=PAGE'COUNT+1
5190            RETURN
7000 REM TOF (UTILITY SUBROUTINES)
7010 NEXT'PAGE: IF FLAG=0 AND PAGES=NO'PAGES CLOSE #1:CLOSE #99: GOTO FINISH
7020            ?#99, CHR(12): CLOSE #99: OPEN #99,"TRM:PRNTR", OUTPUT
7030            FOR R=1 TO 5000: NEXT
7040            X=40-(INT(LEN(PAGE'HEADING(LOOP))/2))
7050            ?#99,TAB(MARGIN)FILE'NAME(LOOP);TAB(X);PAGE'HEADING(LOOP);
7060            IF TTL'LST=1 ?#99, TAB(72) DAT$: ?#99: RETURN
7070            ?#99,TAB(72)"PAGE "; PAGE'COUNT
7080            ?#99,TAB(MARGIN)MODULE'TITLE; TAB(72)DAT$: ?#99
7090            LIN'COUNT=0
7100            PAGES=PAGES+1: PAGE'COUNT=PAGE'COUNT + 1
7110            RETURN
7120
7130 ADV'PAGE:  FOR LOOP1=1 TO PAGE'COUNT
7140 LOOP1:     INPUT LINE #1, SOURCE'LIN
7150            CALL FORMAT
7160            IF LIN'CHAR[2;7] <> "REM TOF" GOTO LOOP1
7170            NEXT LOOP1
7180            CALL CHK'TITLE
7190            RETURN
7200
7210 NEXT'FILE: CLOSE #1: CLOSE #99
7220            PAGE'COUNT=1
7230            IF FILE'NAME(LOOP+1)="*" THEN GOTO FINISH
7240            NEXT LOOP
7250            GOTO FINISH
7260
7270 CHK'TITLE: MODULE'TITLE = LIN'CHAR[10,-1]
7280            CALL NEXT'PAGE
7290            ?#99,TAB(MARGIN) LIN'NO; " REM TOF"
7300            IF FLAG=0 AND PAGES=1 RETURN
7310            INPUT LINE #1, SOURCE'LIN
7320            CALL FORMAT
7330            RETURN
7340
7350 FORMAT:    CALL SPC
7360            LIN'NO=SOURCE'LIN[1,SPC-1]
7370            LIN'CHAR=SOURCE'LIN[SPC,-1]
7380            RETURN
7390
7400 SPC:       A=INSTR(1,SOURCE'LIN," ")
7410            B=INSTR(1,SOURCE'LIN,CHR(9))
7420            IF A=0 SPC=B: RETURN
7430            IF B=0 SPC=A: RETURN
7440            IF B>A SPC=A: RETURN
7450            IF A>B SPC=B: RETURN
7460
7470 FAIL'SRCH: ?CHR(7); FILE'NAME(R);" NOT FOUND!": GOTO INPT1
65000 REM TOF (FINISH SUB)
65010 FINISH:   PAGE'COUNT=1
65020           ?TAB(10)"0=NEW PRINT PARAMETERS"
65030           ?TAB(10)"1=JUST ANOTHER PAGE"
65040           ?TAB(10)"2=END PROGRAM"
65050           ?:INPUT "FUNCTION:";FLAG2
65060           ON FLAG2+1 GOTO START, PAGE'NO
65070           END