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