ghb@ecsvax.UUCP (05/25/84)
< Some fewmets -- from the dragon > Here is the latest version of the Macintosh terminal package from Compuserve..... Please note that it does have NEW pinouts for the cables. George Brett ...decvax!mcnc!ecsvax!ghb NCECS POB 12035 RTP NC 27709 (919)549-0671 < have fun > ------------------- cut here ----------------- 1000 REM MacTEP - Macintosh Terminal Emulator Program 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 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) 2160 REM 2170 AIN=-6: AOUT=-7 2180 SB1=&H4000: SB15=&H8000: SB2=&HC000 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) 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 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 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 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 exits to the Macintosh desktop." 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 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 PRINT: PRINT "Exiting...": SYSTEM 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 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$; 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 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 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 25020 REM 25030 END