10 REM================================================================== 20 REM============== Print a BASIC source program =================== 30 REM=== This program prints a source listing of a BASIC program ==== 40 REM=== and prints all remarks statements (REM) in emphasized ===== 50 REM=== font. ALSO, certain printer control statements are ===== 60 REM=== recognized when they are the only comment on a REM stmt===== 70 REM=== For example: ===== 80 REM=== REM $s4 will space 4 lines on the printer ===== 90 REM=== REM $pa will eject to top of next page ===== 100 REM================================================================== 110 REM $s1 ' 120 ON ERROR GOTO 900 ' 130 TIMEOUT.COUNT=0 ' 140 PTIME$ = TIME$ 150 CLS : KEY OFF ' Clear screen 160 LOCATE 12,10 : PRINT "Note: Drive B and filetype of BAS is assumed" 170 LOCATE 13,10 : PRINT "Also: Pgm must have been saved using ASCII option" 180 LOCATE 10,10 : COLOR 0,7 ' Center query for file name 190 LINE INPUT " Enter the name of the BASIC source program: ";AAA$ 200 COLOR 7,0 210 GOSUB 380 220 OPEN "b:"+AAA$+".bas" FOR INPUT AS 1 230 LC = -1 240 IF EOF(1) THEN 290 250 LINE INPUT#1,REC$ 260 GOSUB 770 ' check for enough vertical space 270 GOSUB 500 ' check for print control and print line if required 280 GOTO 240 290 CLOSE 1 300 CLS : KEY ON : LPRINT CHR$(12) ' Final page skip 310 END 320 REM $S3 330 REM================================================================== 340 REM====================== SUBROUTINE ============================== 350 REM========= Convert lower case letters to upper case ============= 360 REM================================================================== 370 REM $s1 ' 380 FOR I = 1 TO LEN(AAA$) 390 AA$ = MID$(AAA$,I,1) 400 IF ASC(AA$)=>97 AND ASC(AA$)<= 122 THEN AA$ = CHR$(ASC(AA$)-32) 410 MID$(AAA$,I,1) = AA$ 420 NEXT I 430 FOR I = 1 TO 8-LEN(AAA$) 440 AAA$ = AAA$+" " 450 NEXT I 460 RETURN 470 REM $pa 480 REM================================================================== 490 REM========================= SUBROUTINE =========================== 500 REM============= Check for special printer control rem's =========== 510 REM================================================================== 520 REM $s1 ' 530 FOR I = 1 TO 8 540 AA$ = MID$(REC$,I,3) 550 IF AA$="REM" THEN GOTO 580 560 NEXT I 570 GOTO 730 580 AA$ = MID$(REC$,I+4,1) 590 PC$= CHR$(27)+CHR$(69) ' Turn ON emphasized for rem stmt 600 IF AA$ <> "$" THEN 730 ' Check for REM $ format 602 AA$=MID$(REC$,I+5,1) ' If so, pick up next character 610 IF AA$ <> "S" AND AA$ <> "s" THEN 700 'Check for Line Space cmd 620 AA = VAL(MID$(REC$,I+6,1)) 630 IF AA<1 OR AA>9 THEN RETURN ' 640 FOR I = 1 TO AA 650 LPRINT " " 660 LC = LC-1 670 NEXT I 680 PC$= CHR$(27)+CHR$(70) ' Turn OFF emphasized font 690 RETURN 700 IF AA$<>"p" AND AA$<>"P" THEN 730 ' Check for page eject 710 GOSUB 840 ' Issue page eject 720 RETURN ' 730 LPRINT PC$;REC$ 740 PC$=CHR$(27)+CHR$(70) 750 RETURN 760 REM $S3 770 REM================================================================== 780 REM========================= SUBROUTINE =========================== 790 REM================ Check for vertical spacing =================== 800 REM================================================================== 810 REM $s1 ' 820 IF LC > 0 THEN 880 830 IF LC < 0 THEN 850 840 LPRINT CHR$(12) ' skip to top of page 850 LC = 55 860 LPRINT CHR$(14)+CHR$(27)+CHR$(71)+DATE$+STRING$(4,32)+"PGM: "+AAA$+STRING$(4,32)+PTIME$ 870 LPRINT CHR$(27)+CHR$(72)+CHR$(27)+CHR$(20)+" ":LPRINT" " : LPRINT " " 880 LC = LC-1 890 RETURN 900 REM $pa ' 910 REM =============================================================== 920 REM == Error trapping routine, intended primarily to handle ===== 930 REM == device timeout on the printer when too much page ===== 940 REM == ejecting is done. ===== 950 REM =============================================================== 960 REM $s1 ' 970 IF ERR <> 24 THEN 1030 ' 980 TIMEOUT.COUNT=TIMEOUT.COUNT+1 ' Incr number of timeouts 990 IF TIMEOUT.COUNT<10 THEN RESUME NEXT ' give it 10 1000 CLS : BEEP : BEEP ' 1010 PRINT "Program aborted due to too many device timeouts" 1020 END ' 1030 CLS : BEEP :BEEP ' 1040 PRINT "Program aborted due to error code = ";ERR 1050 END ' ' 1040 PRINT "Program aborted due to error code = ";ERR 1050 END