[net.micro.mac] MAC TERMINAL EMULATOR

compusci@aecom.UUCP (Yitz Twersky) (04/19/85)

I recieved this from a friend, and I thought maybe you people can use it.


						yitz
...{philabs,cucard,pegasus,ihnp4,rocky2}!aecom!twersky
------------------------------------------------------------------------------
0 REM Terminal program for Macintosh with up/download, 1200 baud, autodial ...
10 REM Overlay to MacTEP v. 1.81
20 REM Overlay by Loftus E. Becker, Jr. - Compuserve 70206,67
30 REM Adds Automatic Dial/Redial (Anchor Mark XII, Hayes Smartmodem),
40 REM     viewing disk files, resetting baud rate, and timer functions
50 REM
1010 REM
1020 REM   Version 1.81 - 6-Apr-84
1030 REM   Dennis F. Brothers - Compuserve 70065,172 - MCI Mail DBROTHERS
1040 REM
1050 REM   Copyright (c) 1984 - Brothers Associates, Wayland MA
1060 REM   Permission is hereby granted for personal, non-commercial
1070 REM   reproduction and use of this program, provided that this
1080 REM   notice is included in any copy.
1090 REM
1100 REM   Modem connections:
1110 REM          Mac   Modem
1120 REM           1      1     (Frame Ground)
1130 REM           3,8    7     (Signal Ground)
1140 REM           5      2     (Transmit Data)
1150 REM           6      20    (+12V -> DTR)
1160 REM           7      8     (CTS <- DCD)
1170 REM           9      3     (Receive Data)
1180 REM
1190 REM
1200 CLEAR ,25000: REM  Allocate extra memory
1205 CALL TEXTFONT(0): CALL TEXTSIZE (12): CALL TEXTFACE (1): CLS
1207 CALL MOVETO (150,20): PRINT "MacTEP v. 1.81"
1209 CALL MOVETO (160, 150): PRINT "Initializing. . . ."
1210 REM
1220 DEFINT A-Z: REM  Default to integers for speed
1230 REM
1240 REM
2000 REM    Define constants
2010 REM
2020 BUFFERSIZE=2048
2030 BUFLIM=BUFFERSIZE\4
2040 REM
2050 FALSE=0: TRUE=-1
2060 REM
2070 LF=10: LF$=CHR$(LF)
2080 CR=13: CR$=CHR$(CR)
2090 XON=17: XON$=CHR$(XON)
2100 XOFF=19: XOFF$=CHR$(XOFF)
2110 REM
2120 CMDB=2: CMDB$=CHR$(CMDB)
2130 CMDE=5: CMDE$=CHR$(CMDE)
2140 CMDR=18: CMDR$=CHR$(CMDR)
2150 CMDT=20: CMDT$=CHR$(CMDT)
2155 GOOD$(1)="CONNECT"
2157 BAD$(1) = "ERROR": BAD$(2) =  "BUSY": BAD$(3) = "NO CARRIER"
2159 START] = TIMER: FINISH] = TIMER
2160 REM
2170 AIN=-6: AOUT=-7
2180 SB1=&H4000: SB15=&H8000: SB2=&HC000FILE: MACTEPB  BAS      A1  04/04/85 09:09:44    City University of New York / University Computer Center     PAGE 002


2190 PARNONE=&H0: PARODD=&H1000: PAREVEN=&H3000
2200 DB5=&H0: DB6=&H800: DB7=&H400: DB8=&HC00
2210 REM
2220 REM
3000 REM  Pre-allocate all variables so arrays don't move
3010 REM
3020 GOSUB 20000
3030 DIM XTABLEARRAY(127)
3040 DIM BUFFERARRAY(BUFFERSIZE/2)
3050 DIM PARAMLIST(39)
3055 DIM PHONENUMBERS$(10,1)
3060 I=0: A=0
3070 TL=0
3080 BR=0: TC=0
3090 L$="": LP]=0: C$="": XL$=""
3100 F$="": FL=0: FP]=0
3105 CHOICE$="": CHOICE=0
3110 TYPEAPPL$=""
3120 XFLAG=FALSE
3130 CRFLAG=FALSE: FLUSH=FALSE
3140 C=0
3150 QUIT=0
3160 REM
3170 CONTROL]=0
3180 TRANSLATE]=0
3190 BPROC]=0
3200 GETFILEINFO]=0
3210 SETFILEINFO]=0
3220 XTABLE]=0
3230 BUFFER]=0: BUFFERT]=0: BUFFERH=0: BUFFERL=0
3240 PARAM]=0
3250 LP]=VARPTR(L$): FP]=VARPTR(F$)
3260 TLP]=0
3270 CRFLAGP]=0: FLUSHP]=0
3280 REM
3290 CONTROL]=VARPTR(CONTROLCODE(0))
3300 TRANSLATE]=VARPTR(TRANSLATECODE(0))
3310 BPROC]=VARPTR(BPROCCODE(0))
3320 GETFILEINFO]=VARPTR(GETFILEINFOCODE(0))
3330 SETFILEINFO]=VARPTR(SETFILEINFOCODE(0))
3340 XTABLE]=VARPTR(XTABLEARRAY(0))
3350 BUFFER]=VARPTR(BUFFERARRAY(0))
3360 BUFFERH=INT(BUFFER]/65536]): BUFFERT]=BUFFER]-(BUFFERH*65536])
3370 IF BUFFERT]<32768] THEN BUFFERL=BUFFERT] ELSE BUFFERL=BUFFERT]-65536]
3380 PARAM]=VARPTR(PARAMLIST(0))
3390 LP]=VARPTR(L$): FP]=VARPTR(F$)
3400 TLP]=VARPTR(TL)
3410 CRFLAGP]=VARPTR(CRFLAG)
3420 FLUSHP]=VARPTR(FLUSH)
3430 REM
3440 REM  Initialize the character translation table
3450 REM
3460 FOR I=0 TO 255:POKE XTABLE]+I,0:NEXT I
3470 FOR I=8 TO 13
3480 POKE XTABLE]+I,I: POKE XTABLE]+128+I,IFILE: MACTEPB  BAS      A1  04/04/85 09:09:44    City University of New York / University Computer Center     PAGE 003


3490 NEXT I
3500 POKE XTABLE]+10,0: POKE XTABLE]+128+10,0
3510 FOR I=32 TO 126
3520 POKE XTABLE]+I,I: POKE XTABLE]+128+I,I
3530 NEXT I
3540 REM
3550 REM
4000 REM   Initialize and display startup information
4010 REM
4015 CALL TEXTFACE(0)
4020 CALL TEXTSIZE(9): CALL TEXTFONT(4):WIDTH 255
4030 CALL PENNORMAL: CALL SHOWPEN: CALL PENMODE(10)
4040 CLS: PRINT: PRINT: PRINT
4050 PRINT  "MacTEP  -  V1.81  -  Copyright (c) 1984, Brothers Associates"
4060 PRINT: PRINT: PRINT
4070 PRINT "  CMD-E displays the Menu."
4080 PRINT "  CMD-T starts and stops ASCII transmit (upload)."
4090 PRINT "  CMD-R starts and stops ASCII receive (download)."
4100 PRINT "  CMD-B starts and stops ASCII Basic receive"
4110 PRINT "             (lines not beginning with a digit are ignored)."
4120 PRINT: PRINT
4130 REM
4140 REM
5000 REM  Set up and OPEN the COM1 port
5010 REM
5020 OPEN "COM1:" AS #1 LEN=BUFFERSIZE
5030 WIDTH #1,255
5040 REM
5050 INPUT "Baud rate: ", BR
5060 TC=(115200]/BR)-2
5070 REM
5080 FOR I=0 TO 49\2: PARAMLIST(I)=0: NEXT I
5090 PARAMLIST(24\2)=AIN
5100 PARAMLIST(26\2)=8
5110 PARAMLIST(28\2)=SB1+PARNONE+DB8+TC
5120 CALL CONTROL](PARAM])
5130 REM
5140 FOR I=0 TO 49\2: PARAMLIST(I)=0: NEXT I
5150 PARAMLIST(24\2)=AOUT
5160 PARAMLIST(26\2)=8
5170 PARAMLIST(28\2)=SB1+PARNONE+DB8+TC
5180 CALL CONTROL](PARAM])
5190 REM
5200 FOR I=0 TO 49\2: PARAMLIST(I)=0: NEXT I
5210 PARAMLIST(24\2)=AIN
5220 PARAMLIST(26\2)=9
5230 PARAMLIST(28\2)=BUFFERH
5240 PARAMLIST(30\2)=BUFFERL
5250 PARAMLIST(32\2)=BUFFERSIZE
5260 CALL CONTROL](PARAM])
5270 REM
5280 FOR I=0 TO 49\2: PARAMLIST(I)=0: NEXT I
5290 PARAMLIST(24\2)=AIN
5300 PARAMLIST(26\2)=10
5310 POKE PARAM]+28,1: REM enable XON/XOFF output handshakeFILE: MACTEPB  BAS      A1  04/04/85 09:09:44    City University of New York / University Computer Center     PAGE 004


5320 POKE PARAM]+29,0: REM disable CTS output handshake
5330 POKE PARAM]+30,XON: REM X-ON handshake character
5340 POKE PARAM]+31,XOFF: REM X-OFF handshake character
5350 POKE PARAM]+32,0: REM no aborts
5360 POKE PARAM]+33,0: REM no events
5370 POKE PARAM]+34,0: REM disable XON/XOFF input flow control
5380 CALL CONTROL](PARAM])
5390 REM
5400 PRINT: PRINT: PRINT
5410 REM
5420 REM
6000 REM   Terminal Mode
6010 REM
6020 CALL PENSIZE(4,1)
6030 XFLAG=FALSE
6040 CALL LINE(0,-4)
6050 IF LOC(1)=0 THEN GOTO 6110
6060    IF LOC(1)>BUFLIM AND NOT XFLAG THEN PRINT #1,XOFF$;: XFLAG=TRUE
6070    L$=INPUT$(LOC(1),#1)
6080    CALL TRANSLATE](XTABLE],LP],TLP])
6090    IF TL<>0 THEN CALL LINE(0,4): PRINT LEFT$(L$,TL);: CALL LINE(0,-4)
6100    IF XFLAG THEN XFLAG=FALSE: PRINT #1,XON$;
6110 C$=INKEY$
6120 IF C$="" THEN GOTO 6050
6130 IF C$=CMDE$ THEN GOTO 30000
6140 IF C$=CMDB$ THEN CALL LINE(0,4): GOTO 7000
6150 IF C$=CMDR$ THEN CALL LINE(0,4): GOTO 8000
6160 IF C$=CMDT$ THEN CALL LINE(0,4): GOTO 9000
6170 PRINT #1,C$;
6180 GOTO 6050
6190 REM
6200 REM
7000 REM Receive (download) BASIC program
7010 REM
7020 CALL PENSIZE(6,1)
7030 XFLAG=FALSE: CRFLAG=TRUE: FLUSH=FALSE
7040 PRINT: LINE INPUT "BASIC File Name: ",F$
7050 IF F$="" THEN GOTO 6000
7060 OPEN F$ FOR OUTPUT AS #2
7070 CALL LINE(0,-2)
7080 QUIT=FALSE
7090 WHILE NOT QUIT
7100    IF LOC(1)=0 THEN GOTO 7210
7110       IF LOC(1)>BUFLIM AND NOT XFLAG THEN PRINT #1,XOFF$;: XFLAG=TRUE
7120       L$=INPUT$(LOC(1),#1)
7130       CALL TRANSLATE](XTABLE],LP],TLP])
7140       IF TL=0 THEN GOTO 7200
7150          CALL LINE(0,2): PRINT LEFT$(L$,TL);: CALL LINE(0,-2)
7160          CALL BPROC](LP],TLP],CRFLAGP],FLUSHP])
7170          IF TL=0 THEN GOTO 7200
7180          IF LOC(1)>BUFLIM AND NOT XFLAG THEN PRINT #1,XOFF$;: XFLAG=TRUE
7190          PRINT #2,LEFT$(L$,TL);
7200       IF XFLAG THEN XFLAG=FALSE: PRINT #1,XON$;
7210    C$=INKEY$
7220    IF C$="" THEN GOTO 7250FILE: MACTEPB  BAS      A1  04/04/85 09:09:44    City University of New York / University Computer Center     PAGE 005


7230    IF (C$=CMDB$) OR (C$=CMDR$) THEN QUIT=TRUE: GOTO 7250
7240    PRINT #1,C$;
7250    WEND
7260 CALL LINE(0,2)
7270 CLOSE #2
7280 IF RIGHT$(F$,1)<>":" THEN TYPEAPPL$="MSBAMSBA": GOSUB 10000
7290 PRINT: PRINT "BASIC Receive Ended": PRINT
7300 GOTO 6000
7310 REM
7320 REM
8000 REM Receive (download) ASCII file
8010 REM
8020 CALL PENSIZE(6,1)
8030 XFLAG=FALSE
8040 PRINT: LINE INPUT "Receive File Name: ",F$
8050 IF F$="" THEN GOTO 6000
8060 OPEN F$ FOR OUTPUT AS #2
8070 CALL LINE(0,-2)
8080 QUIT=FALSE
8090 WHILE NOT QUIT
8100    IF LOC(1)=0 THEN GOTO 8190
8110       IF LOC(1)>BUFLIM AND NOT XFLAG THEN PRINT #1,XOFF$;: XFLAG=TRUE
8120       L$=INPUT$(LOC(1),#1)
8130       CALL TRANSLATE](XTABLE],LP],TLP])
8140       IF TL=0 THEN GOTO 8180
8150       CALL LINE(0,2): PRINT LEFT$(L$,TL);: CALL LINE(0,-2)
8160       IF LOC(1)>BUFLIM AND NOT XFLAG THEN PRINT #1,XOFF$;: XFLAG=TRUE
8170       PRINT #2,LEFT$(L$,TL);
8180       IF XFLAG THEN XFLAG=FALSE: PRINT #1,XON$;
8190    C$=INKEY$
8200    IF C$="" THEN GOTO 8230
8210    IF (C$=CMDB$) OR (C$=CMDR$) THEN QUIT=TRUE: GOTO 8230
8220    PRINT #1,C$;
8230    WEND
8240 CALL LINE(0,2)
8250 CLOSE #2
8260 IF RIGHT$(F$,1)<>":" THEN TYPEAPPL$="TEXTMACA": GOSUB 10000
8270 PRINT: PRINT "Receive Ended": PRINT
8280 GOTO 6000
8290 REM
8300 REM
9000 REM Transmit (upload) ASCII file
9010 REM
9020 CALL PENSIZE(2,1)
9030 XFLAG=FALSE
9040 PRINT: LINE INPUT "Transmit File Name: ",F$
9050 IF F$="" THEN GOTO 6000
9060 OPEN F$ FOR INPUT AS #2
9070 CALL LINE(0,-6)
9080 QUIT=FALSE
9090 WHILE NOT (EOF(2) OR QUIT)
9100    IF LOC(1)<>0 THEN GOTO 9150
9110       LINE INPUT #2,XL$
9120       IF XL$<>"" THEN FOR I=1 TO LEN(XL$): PRINT #1,MID$(XL$,I,1);: NEXT I
9130       PRINT #1,CR$;FILE: MACTEPB  BAS      A1  04/04/85 09:09:44    City University of New York / University Computer Center     PAGE 006


9140       IF LOC(1)=0 THEN GOTO 9200
9150       IF LOC(1)>BUFLIM AND NOT XFLAG THEN PRINT #1,XOFF$;: XFLAG=TRUE
9160       L$=INPUT$(LOC(1),#1)
9170       CALL TRANSLATE](XTABLE],LP],TLP])
9180       IF TL<>0 THEN CALL LINE(0,6): PRINT LEFT$(L$,TL);: CALL LINE(0,-6)
9190       IF XFLAG THEN XFLAG=FALSE: PRINT #1,XON$;
9200    C$=INKEY$
9210    IF C$="" THEN GOTO 9240
9220    IF C$=CMDT$ THEN QUIT=TRUE: GOTO 9250
9230    PRINT #1,C$;
9240    IF LOC(1)<>0 THEN GOTO 9150
9250    WEND
9260 CALL LINE(0,6)
9270 CLOSE #2
9280 PRINT: PRINT "Transmit Ended": PRINT
9290 GOTO 6000
9300 REM
9310 REM
10000 REM  Subroutine to set type and application of a file
10010 REM
10020 FL=LEN(F$)
10030 F$=CHR$(FL)+F$
10040 FOR I=0 TO 79: POKE PARAM]+I,0: NEXT I
10050 POKE PARAM]+19,PEEK(FP]+2)
10060 POKE PARAM]+20,PEEK(FP]+3)
10070 POKE PARAM]+21,PEEK(FP]+4)
10080 CALL GETFILEINFO](PARAM])
10090 FOR I=1 TO 8
10100 POKE PARAM]+31+I,ASC(MID$(TYPEAPPL$,I,1))
10110 NEXT I
10120 CALL SETFILEINFO](PARAM])
10130 RETURN
10140 REM
10150 REM
20000 REM Set up Control ROM call
20010 REM
20020 DIM CONTROLCODE(25)
20030 RESTORE 20100
20040 I=0
20050 READ A:CONTROLCODE(I)=A
20060 I=I+1
20070 IF A<>-1 THEN GOTO 20050
20080 REM
20090 REM
20100 REM Machine language code to invoke Control ROM function
20110 REM
20120 DATA &H4E56, &HFFF8, &H48EE, &H0101, &HFFF8, &H206E, &H0008, &HA004
20130 DATA &H4CEE, &H0101, &HFFF8, &H4E5E, &H4E75
20140 DATA -1
20150 REM
20160 REM
21000 REM Set up Translate ML routine
21010 REM
21020 DIM TRANSLATECODE(50)
21030 RESTORE 21100FILE: MACTEPB  BAS      A1  04/04/85 09:09:44    City University of New York / University Computer Center     PAGE 007


21040 I=0
21050 READ A:TRANSLATECODE(I)=A
21060 I=I+1
21070 IF A<>-1 THEN GOTO 21050
21080 REM
21090 REM
21100 REM Machine language code to translate strings
21110 REM
21120 DATA &H4E56, &HFFE8, &H48EE, &H0707, &HFFE8, &H226E, &H000C, &H4281
21130 DATA &H1219, &HE181, &H1219, &H4282, &H1419, &HE182, &H1419, &HE182
21140 DATA &H1419, &H2042, &H2248, &H246E, &H0010, &H4282, &H4A41, &H6712
21150 DATA &H4280, &H1018, &H12B2, &H0000, &H6704, &H5289, &H5242, &H5341
21160 DATA &H66F0, &H206E, &H0008, &H3082, &H4CEE, &H0707, &HFFE8, &H4E5E
21170 DATA &H4E75
21180 DATA -1
21190 REM
21200 REM
22000 REM Set up Process BASIC ML routine
22010 REM
22020 DIM BPROCCODE(100)
22030 RESTORE 22100
22040 I=0
22050 READ A:BPROCCODE(I)=A
22060 I=I+1
22070 IF A<>-1 THEN GOTO 22050
22080 REM
22090 REM
22100 REM Machine language code to process BASIC program
22110 REM
22120 DATA &H4E56, &HFFE0, &H48EE, &H1F07, &HFFE0, &H206E, &H0014, &H5488
22130 DATA &H4280, &H1018, &HE180, &H1018, &HE180, &H1018, &H2040, &H2248
22140 DATA &H246E, &H0010, &H266E, &H000C, &H286E, &H0008, &H3212, &H4282
22150 DATA &H4A41, &H6746, &H1018, &H0C00, &H000D, &H661A, &H4A54, &H6708
22160 DATA &H4254, &H36BC, &H0001, &H602E, &H4A53, &H662A, &H36BC, &H0001
22170 DATA &H12C0, &H5242, &H6020, &H4A54, &H661C, &H4A53, &H6712, &H0C00
22180 DATA &H0030, &H6D06, &H0C00, &H0039, &H6F06, &H38BC, &H0001, &H6006
22190 DATA &H4253, &H12C0, &H5242, &H5341, &H66BA, &H3482, &H4CEE, &H1F07
22200 DATA &HFFE0, &H4E5E, &H4E75
22210 DATA -1
22220 REM
22230 REM
23000 REM Set up GetFileInfo ROM call
23010 REM
23020 DIM GETFILEINFOCODE(25)
23030 RESTORE 23100
23040 I=0
23050 READ A: GETFILEINFOCODE(I)=A
23060 I=I+1
23070 IF A<>-1 THEN GOTO 23050
23080 REM
23090 REM
23100 REM Machine language code to invoke GetFileInfo ROM function
23110 REM
23120 DATA &H4E56, &HFFF8, &H48EE, &H0101, &HFFF8, &H206E, &H0008, &HA00C
23130 DATA &H4CEE, &H0101, &HFFF8, &H4E5E, &H4E75FILE: MACTEPB  BAS      A1  04/04/85 09:09:44    City University of New York / University Computer Center     PAGE 008


23140 DATA -1
23150 REM
23160 REM
24000 REM Set up SetFileInfo ROM call
24010 REM
24020 DIM SETFILEINFOCODE(25)
24030 RESTORE 24100
24040 I=0
24050 READ A: SETFILEINFOCODE(I)=A
24060 I=I+1
24070 IF A<>-1 THEN GOTO 24050
24080 REM
24090 REM
24100 REM Machine language code to invoke SetFileInfo ROM function
24110 REM
24120 DATA &H4E56, &HFFF8, &H48EE, &H0101, &HFFF8, &H206E, &H0008, &HA00D
24130 DATA &H4CEE, &H0101, &HFFF8, &H4E5E, &H4E75
24140 DATA -1
24150 REM
24160 REM
25000 RETURN
25010 REM
29990 REM
30000 REM Main Menu Routine
30010 REM
30015 REM *** THIS LINE GAVE TROUBLE - OUT *** PRINT #1, XOFF$
30020 CLS: CALL MOVETO(150, 20): PRINT " MacTEP 1.81 Menu": PRINT: PRINT
30030 PRINT TAB (12);"1.     Autodial Functions."
30040 PRINT TAB (12);"2.     Reset Baud Rate (currently "; BR; ")."
30050 PRINT TAB (12);"3.     View Disk File."
30060 PRINT TAB (12);"4.     Exit to Basic."
30070 PRINT TAB (12);"5.     Exit to System."
30080 PRINT TAB (12);"6.     Timer Functions."
30085 PRINT TAB (12);"7.     Return to Terminal Mode."
30090 PRINT: PRINT
30100 PRINT TAB (10);"Enter your selection: ";
30110 CHOICE$=INKEY$: IF CHOICE$="" THEN GOTO 30110
30120 PRINT CHOICE$: CHOICE=VAL(CHOICE$)
30130 IF CHOICE < 1 THEN PRINT "Use number between 1 and 7.":GOTO 30100
30135 IF CHOICE > 7 THEN PRINT "Use number between 1 and 7.":GOTO 30100
30140 ON CHOICE GOTO 31000, 32000, 33000, 34000, 35000, 36000, 37000
31000 REM Autodial Routine
31010 RESTORE 31050 : REM In case we come back here
31015 I=1
31020 READ PHONENUMBERS$(I,0)
31025    IF VAL(PHONENUMBERS$(I,0))<0 THEN TL=I-1: GOTO 31060
31030 READ PHONENUMBERS$(I,1):I=I+1: GOTO 31020
31050 REM
31051 DATA Washington Apple Pi, 986-8085
31052 DATA CompuServe, 1-254-7113
31053 DATA Tymshare, 1-703-691-8200
31059 DATA -1
31060 CLS: CALL MOVETO(150,20): PRINT "Phone Number Menu":PRINT:PRINT
31070 FOR I=1 TO TL: PRINT I; TAB(15); PHONENUMBERS$(I,0);
31075    PRINT TAB(43); PHONENUMBERS$(I,1): NEXT IFILE: MACTEPB  BAS      A1  04/04/85 09:09:44    City University of New York / University Computer Center     PAGE 009


31180 PRINT TL+1, "Dial a number to be entered.": PRINT: PRINT
31190 PRINT TAB (12);"Enter your choice: ";
31200 C$=INKEY$:IF C$="" THEN GOTO 31200 ELSE C=VAL(C$): PRINT C$
31210 IF C<1 THEN PRINT CHR$(7): GOTO 31060
31220 IF C =< TL THEN F$=PHONENUMBERS$(C,1) ELSE LINE INPUT "Phone number: ", F$
31230 C$="": PRINT #1, "ATM1DT "+F$
31240 IF LOC(1) = 0 THEN GOTO 31290
31250     C=ASC(INPUT$(1,1)) AND &H7F
31260     PRINT CHR$(C);: IF C>28 THEN C$= C$+CHR$(C)
31290 IF INSTR(C$,BAD$(1)) OR INSTR(C$,BAD$(2)) THEN GOTO 31230
31295 IF INSTR(C$,BAD$(3)) THEN GOTO 31230
31300 IF INSTR(C$, GOOD$(1)) THEN  START] = TIMER:  GOTO 6000
31310 L$=INKEY$: IF L$=CMDE$ THEN GOTO 30000 ELSE GOTO 31240
32000 CLOSE #1: GOTO 4000
33000 LINE INPUT "Name of file to read: ", F$: IF F$="" THEN 30000
33010 ON ERROR GOTO 33500
33020 OPEN F$ FOR INPUT AS #2
33030 WHILE NOT EOF(2)
33040    LINE INPUT #2, XL$: PRINT XL$
33050    WEND
33055 CLOSE #2: PRINT: PRINT "Press any key to continue. "
33057 C$=INKEY$: IF C$="" THEN 33057
33060 ON ERROR GOTO 0: GOTO 30000
33500 CLOSE #2: PRINT "No such file.  Available files are:": FILES
33510 RESUME 33000
34000 CLOSE: CALL TEXTFONT(1): CALL TEXTFACE(0): CALL TEXTSIZE(12)
34005 PRINT "Back to Basic.": END
35000 CLOSE: SYSTEM
36000 REM Timer Functions
36010 CLS: CALL MOVETO(150, 50): PRINT "Timer functions":PRINT: PRINT
36020 PRINT TAB (12); "1.    Display Elapsed Time."
36030 PRINT TAB (12); "2.    Reset Starting Time."
36040 PRINT: PRINT: PRINT TAB (12); " Date is "; DATE$
36045 PRINT TAB (12); " Time is "; TIME$: PRINT: PRINT
36050 PRINT TAB (12); "Enter your selection: ";
36060 C$=INKEY$: IF C$="" THEN 36060 ELSE PRINT C$
36070 IF VAL(C$)<1 OR VAL(C$)>2 THEN PRINT CHR$(7): GOTO 36010
36080 ON VAL(C$) GOTO 36100, 36200
36100 FINISH] = TIMER: PRINT: PRINT
36110 ELAPSEDMIN% = INT((FINISH] - START]) /60*100) /100
36115 PRINT TAB (10); "Elapsed time is "; ELAPSEDMIN% ; " minutes."
36120 FOR I = 1 TO 2000: NEXT I: GOTO 30000
36200 START] = TIMER: PRINT "Timer reset": FOR I = 1 TO 2000: NEXT I: GOTO 30000
37000 PRINT #1, XON$: GOTO 6000