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