home *** CD-ROM | disk | FTP | other *** search
Wrap
10 ' LISTER, TO LIST BASIC PROGRAMS SAVED IN ASCI FORMAT 15 SCREEN 0,0,0:WIDTH 80:COLOR 7,0,0 20 CLS:INPUT "ENTER NAME OF PROGRAM TO BE LISTED";FLNM$ 21 FLNM1$=FLNM$ 30 PRINT :PRINT "HAS PROGRAM `";FLNM$; " ' BEEN SAVED AS ASCI FILE (Y/N) " 40 Q$=INPUT$(1) 50 IF Q$="Y" THEN GOTO 90 60 IF Q$<>"N" THEN 40 70 TEMP$="LIS-TEMP.BAS":PROGRAM$="LISTER":LINUM=80:CHAIN "CONVERT.SUB",65000!,ALL 80 FLNM$="LIS-TEMP.BAS" 90 ON ERROR GOTO 0 100 SCREEN 0:CLS:DEFINT A-Z 110 DIM PREFER$(20) 120 LINE INPUT "TODAY'S DATE: ";TODAY$ 130 ' SET INITIAL FORMAT 140 L.MGN=5:R.MGN=75:B.MGN=8:LN.SPA=1:PG.LEN=66:PG.WID=80:DB.WID=20 150 HEADER$="":INDENT$=SPACE$(8) 160 ' INITIALIZE THE PRINTER, COMPLAIN IF IT'S OFF-LINE 170 ON ERROR GOTO 1460 180 LPRINT CHR$(24);CHR$(127);CHR$(18);:WIDTH"LPT1:",80 190 ON ERROR GOTO 0 200 ' DEFINE F-KEYS 210 KEY 1,"LT MARGIN AT: " 220 KEY 2,"RT MARGIN AT: " 230 KEY 3,"BOTTOM BLANKS:" 240 KEY 4,"WIDTH (MAX'M):" 250 KEY 5,"SINGLE SPACE"+CHR$(13) 260 KEY 6,"DOUBLE SPACE"+CHR$(13) 270 KEY 7,"P'GRAM NAME: " 280 KEY 8,"HEADER: " 290 KEY 9,"REVIEW"+CHR$(13) 300 KEY 10," BEGIN" 310 KEY ON:LOCATE 23,1 320 ' CALL ATTENTION TO F-KEYS 330 ARROW$=STRING$(20,"-") 340 PRINT ARROW$;:COLOR 0,7 350 PRINT "USE F-KEYS TO SET THE LISTING FORMAT";:COLOR 7,0:PRINT ARROW$ 360 RESTORE:FOR I=0 TO 9:READ FKEY$(I):NEXT 370 DATA LT,RT,BO,WI,SI,DO,P',HE,RE," B" 380 ' SET UP LIST OF PREFERRED BREAKPOINTS 390 FOR IP = 0 TO 20: READ Z$: IF Z$<>"END" THEN PREFER$(IP)=Z$: NEXT IP 400 IP=IP-1 410 DATA " ELSE " ," THEN ", ": ", " PRINT" 420 DATA " IF ", " '", " OR ", " AND ", ";" 430 DATA "=", " ", "+", "*", ",", END 435 LOCATE 2,1:GOTO 800 440 'LOOP FOR ADJUSTING RUNTIME PARAMETERS 450 LINE INPUT Z$ 460 FOR I=0 TO 10:IF LEFT$(Z$,2)=FKEY$(I) GOTO 470 ELSE NEXT : GOTO 450 470 ON I+1 GOTO 490,500,510,700,550,560,580,530,790,910 480 ' MARGIN SETTING ROUTINES 490 GOSUB 1520:L.MGN=NUMBA:GOTO 450 500 GOSUB 1520:R.MGN=NUMBA:GOTO 450 510 GOSUB 1520:B.MGN=NUMBA:GOTO 450 520 ' ESTABLISH PAGE HEADERS 530 HEADER$=MID$(Z$,9):GOTO 450 540 ' SINGLE OR DOUBLE SPACE OUTPUT 550 LN.SPA=1:GOTO 450 560 LN.SPA=2:GOTO 450 570 ' GET NAME OF PROGRAM TO BE LISTED 580 FLNM$=MID$(Z$,13) 590 IF LEFT$(FLNM$,1)=" " THEN FLNM$=MID$(FLNM$,2):GOTO 590 600 ' IF THERE'S NO HEADER YET FAKE IT WITH FILE NAME 610 ' REMOVE FILE EXTENSION FROM FLNM$ IF NEEDED 620 IF HEADER$ <> "" THEN 680 630 HEADER$=FLNM$:Q = LEN(HEADER$) 640 FOR Q1 = 1 TO Q 650 IF MID$(HEADER$,Q1,1)="." THEN HEADER$=LEFT$(HEADER$,Q1-1) 660 NEXT Q1 670 HEADER$ = CHR$(34)+HEADER$+CHR$(34) 680 GOTO 450 690 ' PASS MAX-PAGE-WIDTH PARAMETER TO THE MX80 PRINTER 700 GOSUB 1520 710 IF NUMBA>132 THEN PRINT "MAXIMUM PAGE WIDTH IS LIMITED TO 132 CHARACTERS":GOTO 450 720 IF NUMBA>80 AND NUMBA<133 THEN LPRINT CHR$(20); CHR$(15);: WIDTH "LPT1:",132 ELSE WIDTH "LPT1:",80 730 IF NUMBA>66 AND NUMBA<81 THEN LPRINT CHR$(18);CHR$(20); 740 DBL.WID=20 750 IF NUMBA>40 AND NUMBA <67 THEN LPRINT CHR$(15);:DBL.WID=14 760 IF NUMBA<41 THEN LPRINT CHR$(18);:DBL.WID=14 770 PG.WID=NUMBA 780 GOTO 450 790 ' DISPLAY CURRENT PARAMETERS 791 CLS 800 PRINT : PRINT "LEFT MARGIN AT";L.MGN 810 PRINT "RIGHT MARGIN AT";R.MGN 820 PRINT MID$(STR$(B.MGN),2);" BLANK LINES AT PAGE BOTTOM" 830 PRINT "MAXIMUM PAGE WIDTH IS";PG.WID 840 IF LN.SPA=2 THEN PRINT "DOUBLE";ELSE PRINT "SINGLE"; 850 PRINT " LINE SPACING" 860 PRINT "PROGRAM NAME: ";FLNM1$ 870 PRINT "HEADER: ";:IF HEADER$="" THEN GOSUB 1560 ELSE PRINT HEADER$ 880 PRINT 890 GOTO 450 900 ' CHECK PARAMETERS BEFORE ACTUALLY TRYING TO LIST THE PROGRAM 910 LN.LEN=R.MGN-L.MGN+1: IF L.MGN<1 OR L.MGN>R.MGN-20 OR R.MGN<L.MGN+20 OR R.MGN>PG.WID-2 OR B.MGN<5 OR PG.WID<LN.LEN OR LEN(HEADER$)>LN.LEN-10 THEN BEEP:PRINT "CAN'T BEGIN. CHECK THE MARGIN & WIDTH SPECIFICATIONS or LENGTH OF HEADER":GOTO 340 920 ' IF READING A FILE FROM TAPE-THIS STATEMENT SHOULD BE FLNM$="CASL"+FLNM$ 930 ' OPEN THE FILE, COMPLAIN IF NOT POSSIBLE TO DO IT 940 ON ERROR GOTO 1490 950 OPEN FLNM$ FOR INPUT AS #1 960 ON ERROR GOTO 0 970 LPRINT 980 ' TITLE THE FIRST PAGE WITH THE HEADER AND -IF AVAILABLE- THE DATE 990 LPRINT CHR$(DBL.WID); TAB(L.MGN); HEADER$;: IF TODAY$="" THEN LPRINT ELSE LPRINT", LISTED ";TODAY$ 1000 LPRINT :LPRINT 1010 ' FORMAT THE HEADER TO APPEAR AT UPPER RIGHT ON LATTER PAGES 1020 HEADER$=SPACE$(LN.LEN-LEN(HEADER$)-10)+HEADER$ 1030 ' GET THE NEXT BASIC LINE,QUIT IF END OF FILE 1040 PG.NUM=1:LN.CNT=4 1050 IF EOF(1) GOTO 1580 1060 LINE INPUT #1,TAPE$:IF TAPE$="" GOTO 1060 1070 ' RIGHT JUSTIFY THE LINE NUMBER 1080 TAPE$=SPACE$(6-INSTR(TAPE$," "))+TAPE$ 1090 ' CMNT.SW GOVERNS THE BLANK LINE AHEAD OF COMMENT LINE 1100 IF MID$(TAPE$,7,1)<>"'" THEN CMNT.SW=0 1110 IF MID$(TAPE$,7,3)<>"REM" THEN CMNT.SW=0 1120 ' BREAK THE BASIC LINE INTO PRINTER LINES 1130 FOR J = 0 TO 9 1140 IF CMNT.SW=0 AND MID$(TAPE$,7,1)="'" THEN LN$(J)="":J=J+1:CMNT.SW=1 1150 IF CMNT.SW=0 AND MID$(TAPE$,7,3)="REM" THEN LN$(J)="":J=J+1:CMNT.SW=1 1160 ' IT'S EASY IF THE WHOLE LINE FITS AT ONCE 1170 IF LEN(TAPE$)<LN.LEN THEN LN$(J)=TAPE$:GOTO 1330 1180 ' ELSE, CHECK FOR PREFERRED BREAKPOINTS 1190 FOR K=0 TO IP 1200 SITE=0: K$=PREFER$(K) 1210 HI.SITE=SITE:IF SITE<9 THEN SITE=9 1220 SITE=INSTR(SITE+1,TAPE$,K$) 1230 IF SITE >0 AND SITE<=LN.LEN GOTO 1210 1240 IF HI.SITE=0 THEN NEXT K 1250 IF HI.SITE=0 THEN HI.SITE=LN.LEN 1260 ' HI.SITE NOW POINTS TO THE RIGHTMOST BEST BREAKPOINT 1270 ' SPLIT THE LINE THERE AND INDENT ALL BUT THE FIRST ONE 1280 LN$(J)=LEFT$(TAPE$,HI.SITE) 1290 TAPE$=MID$(TAPE$,HI.SITE+1) 1300 TAPE$=INDENT$+TAPE$ 1310 NEXT J 1320 ' WILL THE PACK OF PRINTER LINES FIT ON THIS PAGE 1330 IF LN.CNT<PG.LEN-B.MGN-LN.SPA*(J+1) GOTO 1400 1340 ' NO, SO BEGIN A NEW PAGE WITH HEADER AND PAGE NUMBER 1350 PG.NUM=PG.NUM+1 1360 LPRINT CHR$(12) 1370 LPRINT CHR$(DBL.WID);TAB(L.MGN);HEADER$;", PAGE";PG.NUM 1380 LPRINT:LPRINT:LN.CNT=4 1390 ' EVERYTHING IS GUARANTEED TO FIT, PRINT IT ALL 1400 FOR L=0 TO J:LPRINT CHR$(DBL.WID); TAB(L.MGN); LN$(L): IF LN.SPA=2 THEN LPRINT 1410 NEXT L 1420 ' UPDATE THE LINE COUNT FOR THIS PAGE, AND CYCLE AGAIN 1430 LN.CNT=LN.CNT+(J+1)*LN.SPA 1440 GOTO 1050 1450 ' THE OPERATER- ALERT FOR OFF-LINE PRINTER 1460 PRINT: BEEP: PRINT"THE LINE PRINTER ISN'T READY. CHECK IT .....":PRINT 1470 RESUME 180 1480 ' THE OPERATOR- ALERT FOR A LACK OF DISKETTE DATA 1490 CLOSE:PRINT:BEEP: PRINT"PROBLEMS WITH THE DISKETTE. CHECK IT....." 1500 RESUME 950 1510 ' SUBR TO DECODE A NUMERIC PARAMETER INPUT 1520 NUMBA=VAL(MID$(Z$,15)) 1530 IF NUMBA=0 THEN BEEP: PRINT"<<NUMBER REQUIRED>>" 1540 RETURN 1550 ' SUBR TO NOTE THE LACK OF A FILE NAME OR HEADER 1560 COLOR 0,7:PRINT" NONE SPECIFIED ";:COLOR 7,0:PRINT:RETURN 1570 ' ORDERLY EXIT. RESET THE PRINTER AND F-KEYS, THEN EXIT 1580 LPRINT CHR$(18); CHR$(20): WIDTH "LPT1:",80: BEEP: CLOSE: KEY OFF 1590 KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13):KEY 3,"LOAD"+CHR$(34):KEY 4,"CLS"+CHR$(13):KEY 5,"CONT"+CHR$(13):KEY 6,"SAVE"+CHR$(34):KEY 7,"TRON"+CHR$(13):KEY 8,"TROFF"+CHR$(13):KEY 9,"CLS:FILES"+CHR$(13):KEY 10,"SCREEN 0,0,0"+CHR$(13) 1600 IF Q$="" THEN KILL"LIS-TEMP.BAS" 1610 KEY ON:END