0010 REM ***************************************************** 0020 REM * * 0030 REM * KERMIT RDOS * 0040 REM * =================== * 0050 REM * * 0060 REM * KERMIT PROTOCOL MANUAL CLOSELY EXEPT FOR USER * 0070 REM * INTERACTION, WHICH USES A MORE INTERACTIVE * 0080 REM * DIALOGUE . * 0090 REM * THIS VERSION IS A MODIFICATION FOR RDOS OF THE * 0100 REM * VERSION OF TORBJORN ALM & PER LINDBERG FOR THE * 0110 REM * ABC-800. * 0120 REM * * 0130 REM * MODIFIER LE 06/12/85 REMI CASTONGUAY * 0140 REM * * 0150 REM * MODIFIER LEGEREMENT POUR L'ECLIPSE * 0160 REM ***************************************************** 0170 REM 0180 DIM RECPKT$[80],PACKET$[80],INBUFF$[512],SP$[25],B$[90],QUO$[1],H$[1] 0190 DIM DUMMY$[1],FILE$[60],S$[80],F$[1],AA$[60],FNQ$[10] 0200 DIM SPAR$[100],INCHR$[90],TYPE$[100],X$[1],MESSAG$[90],REPLY$[90] 0210 DIM BUFFER$[90],DATAX$[80],DATA$[80],DEBUG$[3] 0220 DIM H1$[1],H2$[2],H3$[3],H4$[4],CONTRO$[32] 0230 LET MAXPCK=78 \ SOH=1 \ MAXTRY=500 \ MYPAD=0 \ MYCHAR=0 \ MYEOL=13 0240 LET MYTIME=5 \ MAXTIM=20 \ MINTIM=2 \ TRUE=-1 \ FALSE=0 0250 LET SP=32 \ DEL=127 \ EOL=13 \ OK=0 \ BLOC=0 \ CTES=0 0260 LET SP$=FILL$(32) \ QUO$="#" \ MYQUOT=ASC(QUO$) 0270 LET PORT=2 \ RET%=3 \ ER=0 \ TIMINT=5 \ ETC=38 \ FIN=0 0272 LET LREC=0 0280 FOR I=0 TO 31 0290 LET CONTRO$[0]=CHR$(I,1) 0300 NEXT I 0310 CLOSE 0320 STMA 7,0 0330 LET DEBUG=0 \ DEBUG$="OFF" \ ENV%=PORT 0340 PRINT @(-30) 0350 GOSUB 5180 : PRINT MENU - INPUT COMMAND 0360 ON F THEN GOTO 4800, 0410, 0490, 0570, 0620 0370 ON IKEY THEN GOTO 0250 0380 REM ************************** 0390 REM RECEIVE FILES FROM REMOTE 0400 REM ************************** 0410 GOSUB 3500 : STATE TABLE SWITCHER FOR RECEIVE FILES 0420 IF STATE THEN PRINT @(19,1);"OK ";SP$ ELSE PRINT @(19,1);"RCEIV FAILED";SP$ 0430 PRINT "" 0440 INPUT USING "","",@(-10,1),X$ 0450 GOTO 0310 0460 REM ************************** 0470 REM SEND FILE TO REMOTE 0480 REM ************************** 0490 GOSUB 4940 : INPUT FILE NAMES - CHECK FILES 0500 IF NFILE<0 THEN GOTO 0310 0510 GOSUB 2100 : SEND SUPERVISOR 0520 IF STATE THEN PRINT @(19,1);"OK";SP$ ELSE PRINT @(19,1);"SEND FAILED";SP$ 0530 PRINT "" 0540 INPUT USING "","",@(-10,1),X$ 0550 GOTO 0310 0560 REM ************************* 0570 REM END OF KERMIT SESSION 0580 REM ************************* 0590 PRINT @(15,20);"END OF KERMIT SESSION" 0600 CLOSE 0610 END 0620 IF DEBUG THEN GOTO 0650 0630 LET DEBUG=1 \ DEBUG$="ON " 0640 GOTO 0350 0650 LET DEBUG=0 \ DEBUG$="OFF" 0660 GOTO 0350 0670 REM ******************************* 0680 REM SEND MY PARAMETERS TO OTHER END 0690 REM ******************************* 0700 LET SPAR$=CHR$(MAXPCK+32,1),CHR$(MYTIME+32,1),CHR$(MYPAD+32,1) 0702 LET SPAR$[0]=CHR$(OR(MYCHAR,64)),CHR$(MYEOL+32,1),CHR$(MYQUOT,1) 0705 LET SPAR$[0]="&","1"," " 0710 RETURN 0720 REM ************************** 0730 REM UNPACK DATA FROM OTHER END 0740 REM ************************** 0750 LET SPSIZ=MIN(ASC(S$[1,1])-32,80) 0760 LET TIMINT=ASC(S$[2,2])-32 0770 LET PAD=ASC(S$[3,3])-32 0780 LET PADCHR=ASC(S$[4,4])-32 0790 LET PADCHR=OR(PADCHR,64) 0800 LET EOL=ASC(S$[5,5])-32 0810 LET QUOTE=ASC(S$[6,6])-32 0820 RETURN 0830 REM *********************** 0840 REM UNPACK A PACKET TO FILE 0850 REM B$ = PACKET BUFFER 0860 REM *********************** 0870 LET B$="" 0880 FOR I=1 TO LEN(PACKET$) 0890 LET H$=PACKET$[I,I] 0900 LET K=POS("#&",H$,1) 0910 ON K THEN GOSUB 0960, 1030 0920 LET B$[0]=H$ 0930 NEXT I 0940 WRITE FILE[2],B$[1,LEN(B$)] 0950 RETURN 0960 REM 0970 GOSUB 1220 0980 IF POS("&#",H$,1) THEN RETURN 0990 LET H=OR(ASC(H$),64) 1000 IF AND(ASC(H$),64) THEN LET H=H-64 1010 LET H$=CHR$(H) 1020 RETURN 1030 REM 1040 GOSUB 1220 1050 IF H$="#" THEN GOSUB 1080 1060 GOSUB 1140 1070 RETURN 1080 REM 1090 GOSUB 1220 1100 LET K=POS("&#",H$,1) 1110 ON K THEN GOTO 1140, 1140 1120 GOSUB 1170 1130 RETURN 1140 REM 1150 LET H$=CHR$(OR(ASC(H$),128)) 1160 RETURN 1170 REM 1180 LET H=OR(ASC(H$),64) 1190 IF AND(ASC(H$),64) THEN LET H=H-64 1200 LET H$=CHR$(H) 1210 RETURN 1220 REM 1230 LET I=I+1 \ H$=PACKET$[I,I] 1240 RETURN 1250 REM ************************** 1260 REM FILL BUFFER, RETURN SIZE 1270 REM ************************** 1280 LET B$="" 1290 IF EOF(2) THEN GOTO 1440 1300 IF LEN(INBUFF$)=0 THEN IF LREC THEN GOTO 1501 ELSE GOSUB 1460 1310 IF EOF(2) THEN GOTO 1440 1320 LET H$=INBUFF$[1,1] \ H1$="" 1330 IF ASC(H$)>127 THEN GOSUB 5350 ELSE LET H2$=H$ 1340 LET I=LEN(H2$) \ H$=H2$[I,I] 1350 IF POS("#&",H$,1) THEN GOSUB 5400 ELSE LET H3$=H2$ 1360 LET I=LEN(H3$) \ H$=H3$[I,I] 1370 IF POS(CONTRO$,H$,1) THEN GOSUB 5450 ELSE LET H4$=H3$ 1380 LET B$[0]=H4$ 1390 IF LEN(INBUFF$)>=2 THEN LET INBUFF$=INBUFF$[2] ELSE LET INBUFF$="" 1400 IF LEN(B$)>=SPSIZ-8 THEN GOTO 1420 1410 GOTO 1290 1420 LET PACKET$=B$ 1430 RETURN 1440 LET STATE=ASC("Z") 1450 RETURN 1460 BLOCK READ FILE[2,BLOC],INBUFF$ 1470 LET BLOC=BLOC+1 1480 RETURN 1490 LET B$[0]=H$ 1500 GOTO 1390 1501 REM 1502 IF TOBUFF=LAST THEN GOTO 1440 1504 LET TOBUFF=TOBUFF+1 1506 READ FILE[2],INBUFF$[1,LREC] 1508 GOTO 1310 1510 REM *************************************** 1520 REM SEND PACKET TO OTHER END - CALL BY NAME 1530 REM *************************************** 1540 STMA 8,4 1550 STMA 6,0 1560 STMA 6,1 1570 STMA 6,2 1580 LET BUFFER$=CHR$(SOH),CHR$(LENGTH+35),CHR$(NUM+32),CHR$(TYPE),DATA$ 1590 LET CHKSUM=LENGTH+NUM+TYPE+67 1600 LET I=1 1610 IF I>LENGTH THEN GOTO 1650 1620 LET CHKSUM=CHKSUM+ASC(DATA$[I,I]) 1630 LET I=I+1 1640 GOTO 1610 1650 LET CHKSUM=AND((CHKSUM+AND(CHKSUM,192)/64),63) 1660 LET BUFFER$=BUFFER$,CHR$(CHKSUM+32),CHR$(EOL),CHR$(10) 1670 LET MESSAG$=BUFFER$ 1680 GOSUB 5540 : GET LA LIGNE AU COMPLET 1690 LET H$=CHR$(TYPE) 1700 PRINT @(15,1);"SEND PACKET ";COMP;" ";H$;" ";NUMTRY 1710 RETURN 1720 REM ******************************************************* 1730 REM RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 1740 REM ******************************************************* 1760 STMA 6,0 1770 STMA 6,1 1780 STMA 6,2 1790 IF TIMINT>MAXTIM THEN LET TIMINT=MYTIME 1800 IF TIMINTSOH THEN GOTO 2070 1850 GOSUB 5120 : GET LINE CHAR ONE BY ONE 1860 IF T<0 THEN GOTO 1850 ELSE IF T=SOH THEN GOTO 2020 1870 LET CHKSUM=T \ L=T-35 \ LENGTH=T 1875 IF L+5<>LEN(INCHR$) THEN GOTO 2070 1880 GOSUB 5120 : GET LINE CHAR ONE BY ONE 1890 IF T<0 THEN GOTO 1880 ELSE IF T=SOH THEN GOTO 2020 1900 LET CHKSUM=CHKSUM+T \ NUM=T-32 1910 GOSUB 5120 : GET LINE CHAR ONE BY ONE 1920 IF T<0 THEN GOTO 1910 ELSE IF T=SOH THEN GOTO 2020 1930 LET CHKSUM=CHKSUM+T \ TYPE=T \ DATAX$="" 1940 FOR I=1 TO L 1950 GOSUB 5120 : GET LINE CHAR ONE BY ONE 1960 IF T<0 THEN GOTO 1950 ELSE IF T=SOH THEN GOTO 2020 1970 LET CHKSUM=CHKSUM+T 1980 LET DATAX$[0]=CHR$(T,1) 1990 NEXT I 2000 GOSUB 5120 : GET LINE CHAR ONE BY ONE 2010 IF T<0 THEN GOTO 2000 2020 LET CHKSUM=AND((CHKSUM+AND(CHKSUM,192)/64),63) 2030 IF CHKSUM<>T-32 THEN GOTO 2070 2040 LET H$=CHR$(TYPE) 2050 PRINT @(15,40);"RECEIVE PACKET ";COMP;" ";H$;" ";NUMTRY 2060 RETURN 2070 LET TYPE=0 2080 RETURN 2090 REM *************** 2100 REM SEND SUPERVISOR 2110 REM *************** 2120 LET STATE=ASC("S") \ N=0 \ NUMTRY=0 \ COMP=0 \ TOBUFF=0 2130 IF DEBUG THEN GOSUB 2330 2140 LET H$=CHR$(STATE) 2150 LET K=POS("DFZSBCA",H$,1)+1 2160 ON K THEN GOTO 2170, 2190, 2210, 2230, 2250, 2270, 2290, 2310 2170 LET STATE=FALSE 2180 RETURN 2190 GOSUB 2820 : SEND DATA FILE 2200 GOTO 2140 2210 GOSUB 2580 : SEND FILE HEADER 2220 GOTO 2140 2230 GOSUB 3090 : SEND END-OF-FILE 2240 GOTO 2140 2250 GOSUB 2360 : SENAMETERS, GET OTHER SIDE'S BACK 2260 GOTO 2140 2270 GOSUB 3320 : SEND BREAK (EOT) 2280 GOTO 2140 2290 LET STATE=TRUE 2300 RETURN 2310 LET STATE=FALSE 2320 RETURN 2330 OPEN FILE[6,0],"LOG.LOG" 2340 RETURN 2350 REM ***************************************** 2360 REM SENAMETERS, GET OTHER SIDE'S BACK 2370 REM ***************************************** 2380 IF NUMTRY>MAXTRY THEN GOTO 2550 2390 LET NUMTRY=NUMTRY+1 2400 GOSUB 0680 : SEND MY PARAMETERS TO OTHER END 2410 LET PACKET$=SPAR$ 2420 LET TYPE=ASC("S") \ NUM=N \ LENGTH=9 \ DATA$=PACKET$ 2430 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 2440 GOSUB 1730 : RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 2450 LET RECPKT$=DATAX$ 2460 IF TYPE<>ASC("Y") THEN IF TYPE<>ASC("S") THEN GOTO 2380 2470 IF N<>NUM THEN GOTO 2380 2480 LET S$=RECPKT$ 2490 GOSUB 0730 : UNPACK DATA FROM OTHER END 2500 IF EOL=0 THEN LET EOL=13 2510 IF QUOTE=0 THEN LET QUOTE=ASC(QUO$) 2520 LET NUMTRY=0 \ N=AND((N+1),63) \ COMP=COMP+1 2530 LET STATE=ASC("F") 2540 RETURN 2550 LET STATE=ASC("A") 2560 RETURN 2570 REM **************** 2580 REM SEND FILE HEADER 2590 REM **************** 2600 IF OK=1 THEN GOSUB 5000 2610 PRINT @(11,40);"SENDING FILE: ";FILE$ 2620 IF NUMTRY>MAXTRY THEN GOTO 2790 2630 LET NUMTRY=NUMTRY+1 2640 LET LENGTH=LEN(FILE$) 2650 LET TYPE=ASC("F") \ NUM=N \ DATA$=FILE$ 2660 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 2670 GOSUB 1730 : RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 2680 LET RECPKT$=DATAX$ 2690 LET H$=CHR$(TYPE) 2700 LET K=POS("NY",H$,1)+1 2710 ON K THEN GOTO 2650, 2650, 2730, 2780 2720 LET NUM=AND((NUM-1),63) 2730 IF N<>NUM THEN RETURN 2740 LET NUMTRY=0 \ N=AND((N+1),63) \ COMP=COMP+1 2750 GOSUB 1260 : FILL BUFFER, RETURN SIZE 2760 LET SIZ=LEN(PACKET$) 2770 LET STATE=ASC("D") 2780 RETURN 2790 LET STATE=ASC("A") 2800 RETURN 2810 REM ************** 2820 REM SEND DATA FILE 2830 REM ************** 2840 LET TYPE=ASC("D") \ NUM=N \ LENGTH=SIZ \ DATA$=PACKET$ 2850 IF NUMTRY>MAXTRY THEN GOTO 3040 2860 LET NUMTRY=NUMTRY+1 2870 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 2880 GOSUB 1730 : RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 2890 LET RECPKT$=DATAX$ 2900 LET H$=CHR$(TYPE) 2910 LET K=POS("NY",H$,1)+1 2920 ON K THEN GOTO 2930, 2930, 2960, 2930 2930 LET TYPE=ASC("D") 2940 LET LENGTH=SIZ \ DATA$=B$ \ NUM=N 2950 GOTO 2850 2960 IF N<>NUM THEN GOTO 2930 2970 LET OLDTRY=NUMTRY \ NUMTRY=0 \ N=AND((N+1),63) \ COMP=COMP+1 2980 GOSUB 1260 : FILL BUFFER, RETURN SIZE 2990 LET PACKET$=B$ 3000 LET SIZ=LEN(PACKET$) 3010 IF SIZ=0 THEN GOTO 3060 3020 LET STATE=ASC("D") 3030 RETURN 3040 LET STATE=ASC("A") 3050 RETURN 3060 LET STATE=ASC("Z") 3070 RETURN 3080 REM **************** 3090 REM SEND END-OF-FILE 3100 REM **************** 3110 IF NUMTRY>MAXTRY THEN GOTO 3270 3120 LET NUMTRY=NUMTRY+1 3130 LET TYPE=ASC("Z") \ NUM=N \ LENGTH=0 \ DATA$="" 3140 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 3150 GOSUB 1730 : RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 3160 LET RECPKT$=DATAX$ 3170 LET H$=CHR$(TYPE) 3180 LET K=POS("NY",H$,1)+1 3190 ON K THEN GOTO 3270, 3200, 3210, 3260 3200 LET NUM=AND((NUM-1),63) 3210 IF N<>NUM THEN RETURN 3220 LET NUMTRY=0 \ N=AND((N+1),63) \ COMP=COMP+1 3230 CLOSE FILE[2] 3240 IF NFILE<>1 THEN GOTO 3290 3250 LET STATE=ASC("F") \ OK=1 3260 RETURN 3270 LET STATE=ASC("A") 3280 RETURN 3290 LET STATE=ASC("B") 3300 RETURN 3310 REM **************** 3320 REM SEND BREAK (EOT) 3330 REM **************** 3340 IF NUMTRY>MAXTRY THEN GOTO 3470 3350 LET TYPE=ASC("B") \ NUM=N \ LENGTH=0 \ DATA$="" 3360 LET NUMTRY=NUMTRY+1 3370 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 3380 GOSUB 1730 : RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 3390 LET RECPKT$=DATAX$ 3400 LET H$=CHR$(TYPE) 3410 LET K=POS("NY",H$,1)+1 3420 ON K THEN GOTO 3470, 3430, 3440, 3460 3430 LET NUM=AND((NUM-1),63) 3440 IF N<>NUM THEN RETURN 3450 LET NUMTRY=0 \ N=AND((N+1),63) \ STATE=ASC("C") \ COMP=COMP+1 3460 RETURN 3470 LET STATE=ASC("A") 3480 RETURN 3490 REM ************************************** 3500 REM STATE TABLE SWITCHER FOR RECEIVE FILES 3510 REM ************************************** 3520 LET FIL=0 \ STATE=ASC("R") \ N=0 \ NUMTRY=0 \ COMP=0 3530 IF DEBUG THEN GOSUB 3680 3550 LET H$=CHR$(STATE) 3560 LET K=POS("DFRCA",H$,1)+1 3570 ON K THEN GOTO 3575, 3580, 3600, 3620, 3640, 3660 3575 LET STATE=FALSE 3577 RETURN 3580 GOSUB 4380 : RECEIVE DATA 3590 GOTO 3550 3600 GOSUB 3950 : RECEIVE FILE HEADER 3610 GOTO 3550 3620 GOSUB 3710 : RECEIVE INITIALIZATION 3630 GOTO 3550 3640 LET STATE=TRUE 3650 RETURN 3660 LET STATE=FALSE 3670 RETURN 3680 OPEN FILE[6,0],"LOG.LOG" 3690 RETURN 3700 REM ********************** 3710 REM RECEIVE INITIALIZATION 3720 REM ********************** 3730 IF NUMTRY>MAXTRY THEN GOTO 3920 3740 LET NUMTRY=NUMTRY+1 3750 LET MESSAG$="" 3760 GOSUB 5540 : GET LA LIGNE AU COMPLET 3770 GOSUB 1730 : RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 3780 LET PACKET$=DATAX$ 3790 IF TYPE<>ASC("S") THEN GOTO 3880 3800 LET S$=PACKET$ 3810 GOSUB 0730 : UNPACK DATA FROM OTHER END 3820 GOSUB 0680 : SEND MY PARAMETERS TO OTHER END 3830 LET PACKET$=SPAR$ 3840 LET TYPE=ASC("Y") \ NUM=N \ LENGTH=9 \ DATA$=PACKET$ 3850 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 3860 LET OLDTRY=NUMTRY \ NUMTRY=0 \ N=AND((N+1),63) \ STATE=ASC("F") 3865 LET COMP=COMP+1 3870 RETURN 3880 LET TYPE=ASC("N") \ NUM=N \ LENGTH=0 \ DATA$="" \ NUMTRY=NUMTRY+1 3890 IF NUMTRY>MAXTRY THEN GOTO 3920 3900 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 3910 GOTO 3770 3920 LET STATE=ASC("A") 3930 RETURN 3940 REM ******************* 3950 REM RECEIVE FILE HEADER 3960 REM ******************* 3970 IF NUMTRY>MAXTRY THEN GOTO 4350 3980 LET NUMTRY=NUMTRY+1 3990 GOSUB 1730 : RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 4000 LET PACKET$=DATAX$ 4010 LET H$=CHR$(TYPE) 4020 LET K=POS("SZFB",H$,1)+1 4030 ON K THEN GOTO 4040, 4070, 4150, 4220, 4300, 4330 4040 LET STATE=ASC("N") \ NUM=N \ LENGTH=0 \ DATA$="" 4050 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4060 GOTO 3990 4070 LET OLDTRY=OLDTRY+1 4080 IF OLDTRY>MAXTRY THEN GOTO 4040 4090 LET STATE=ASC("R") \ N,COMP=0 4100 RETURN 4110 LET PACKET$=SPAR$ \ TYPE=ASC("Y") \ NUM=N \ LENGTH=6 \ DATA$=PACKET$ 4120 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4130 LET NUMTRY=0 4140 RETURN 4150 LET OLDTRY=OLDTRY+1 4160 IF OLDTRY>MAXTRY THEN GOTO 4040 4170 IF NUM<>AND((N+1),63) THEN GOTO 4040 4180 LET TYPE=ASC("Y") \ NUM=N \ LENGTH=0 \ DATA$="" 4190 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4200 LET NUMTRY=0 4210 RETURN 4220 IF NUM<>N THEN GOTO 4040 4230 LET AA$=PACKET$ 4240 PRINT @(11,40);"FILE NAME: ";AA$ 4250 GOSUB 5310 : CREATE NEW FILE 4260 LET TYPE=ASC("Y") \ NUM=N \ LENGTH=0 \ DATA$="" 4270 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4280 LET OLDTRY=NUMTRY \ NUMTRY=0 \ N=AND((N+1),63) \ STATE=ASC("D") 4285 LET COMP=COMP+1 4290 RETURN 4300 IF NUM<>N THEN GOTO 4040 4310 LET TYPE=ASC("Y") \ NUM=N \ LENGTH=0 \ DATA$="" \ STATE=ASC("C") \ FIN=1 4320 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4330 RETURN 4340 PRINT @(15,1);"COULD NOT CREATE";PACKET$ 4350 LET STATE=ASC("A") 4360 RETURN 4370 REM ************ 4380 REM RECEIVE DATA 4390 REM ************ 4400 IF NUMTRY>MAXTRY THEN GOTO 4780 4410 LET NUMTRY=NUMTRY+1 4420 GOSUB 1730 : RECEIVE PACKET, STORE LEN,NUM ET RETURN TYPE 4430 LET PACKET$=DATAX$ 4440 LET H$=CHR$(TYPE) 4450 LET K=POS("DFZ",H$,1)+1 4460 ON K THEN GOTO 4750, 4470, 4600, 4690, 4770 4470 IF NUM=N THEN GOTO 4550 ELSE LET OLDTRY=OLDTRY+1 4480 IF OLDTRY>MAXTRY THEN GOTO 4780 4490 IF NUM=AND((N-1),63) THEN GOTO 4510 4500 IF NUM<>N THEN GOTO 4750 4510 LET TYPE=ASC("Y") \ LENGTH=0 \ DATA$="" \ NUMTRY=NUMTRY+1 4520 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4530 LET NUMTRY=0 4540 RETURN 4550 GOSUB 0840 : UNPACK A PACKET TO FILE 4560 LET TYPE=ASC("Y") \ LENGTH=0 \ DATA$="" \ NUM=N 4570 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4580 LET OLDTRY=NUMTRY \ NUMTRY=0 \ N=AND((N+1),63) \ STATE=ASC("D") 4585 LET COMP=COMP+1 4590 RETURN 4600 LET OLDTRY=OLDTRY+1 4610 IF OLDTRY>MAXTRY THEN GOTO 4780 4620 IF NUM=AND((N-1),63) THEN GOTO 4650 4630 LET STATE=ASC("A") 4640 RETURN 4650 LET TYPE=ASC("Y") \ LENGTH=0 \ DATA$="" 4660 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4670 LET NUMTRY=0 4680 RETURN 4690 IF NUM<>N THEN GOTO 4780 4700 LET TYPE=ASC("Y") \ NUM=N \ LENGTH=0 \ DATA$="" 4710 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4720 CLOSE FILE[2] 4730 LET N=AND((N+1),63) \ STATE=ASC("F") \ COMP=COMP+1 4740 RETURN 4750 LET TYPE=ASC("N") \ LENGTH=0 \ DATA$="" 4760 GOSUB 1520 : SEND PACKET TO OTHER END - CALL BY NAME 4770 GOTO 4400 4780 LET STATE=ASC("A") 4790 RETURN 4800 REM ***************************************** 4810 REM SET PORT I/O 4820 REM ***************************************** 4830 IF PORT=2 THEN GOTO 4850 4835 LET PORT,ENV%=2 4840 GOTO 0350 4850 LET PORT,ENV%=5 4860 GOTO 0350 4930 REM ****************************** 4940 REM INPUT FILE NAMES - CHECK FILES 4950 REM ****************************** 4960 INPUT USING "",@(13,1),"SPECIFY FILE NAMES:",@(-10,-60),AA$ 4970 IF LEN(AA$)<>0 THEN GOTO 5000 4980 LET NFILE=0 4990 RETURN 5000 REM 5010 LET K=POS(AA$,",",1) 5020 IF K THEN LET FILE$=AA$[1,K-1] \ AA$=AA$[(K+1),LEN(AA$)] \ NFILE=1 \ BLOC=0 5030 IF K THEN GOTO 5050 : ON ERR THEN GOTO 3970 5040 LET FILE$=AA$ \ NFILE=0 \ BLOC,W=0 5045 LET K=POS(FILE$,"/",1) 5047 IF K THEN GOTO 5100 5050 REM ON ERR THEN GOTO 3970 5060 OPEN FILE[2,4],FILE$ 5070 RETURN 5080 PRINT @(14,1);"FILE ";FILE$;" DOES NOT EXIST - ABORT !!!!!!" 5090 LET NFILE=-1 5095 RETURN 5100 LET LREC=VAL(FILE$[K+1,LEN(FILE$)],W) 5101 LET FILE$=FILE$[1,K-1],FILL$(32) 5102 OPEN FILE[2,6],FILE$ 5104 POSITION FILE[2,6] 5105 READ FILE[2],LAST 5106 POSITION FILE[2,0] 5107 IF LREC=300 THEN POSITION FILE[2,LREC] 5108 RETURN 5110 REM ************************ 5120 REM GET LINE CHAR ONE BY ONE 5130 REM ************************ 5140 LET V=V+1 5150 LET T=ASC(INCHR$[V,V]) 5160 RETURN 5170 REM ************************** 5180 REM PRINT MENU - INPUT COMMAND 5190 REM ************************** 5200 PRINT @(1,1);" K E R M I T F O R S U P E R D O S " 5210 PRINT @(-28);@(-28) 5220 PRINT @(4,1);"P PORT I/O DEBUG: ";DEBUG$ 5230 PRINT @(5,1);"R RECEIVE FILES FROM HOST PORT: ";PORT 5240 PRINT @(6,1);"S SEND FILES TO HOST" 5250 PRINT @(7,1);"D DEBUG MODE" 5260 PRINT @(8,1);"E EXIT KERMIT" 5270 INPUT USING "",@(11,1),"SPECIFY FUNCTION :",@(-10,-1),F$ 5280 LET F=(POS("PpRrSsEeDd",F$,1)+1)/2 5290 IF F=0 THEN GOTO 5270 ELSE RETURN 5300 REM *************** 5310 REM CREATE NEW FILE 5320 REM *************** 5322 LET K=POS(AA$,".",1) 5324 IF K THEN LET AA$=AA$[1,K-1],FILL$(32) 5330 OPEN FILE[2,0],AA$ 5340 RETURN 5350 REM **************** 5360 REM QUOTE 8 BIT 5370 REM **************** 5380 LET H2$="&",CHR$(AND(ASC(H$),127)) \ H1$="&" 5390 RETURN 5400 REM *************************** 5410 REM QUOTE A CHAR "#" AND "&" 5420 REM *************************** 5430 LET H3$=H1$,"#",H$ 5440 RETURN 5450 REM ********************* 5460 REM QUOTE CHAR CONTROL 5470 REM ********************* 5480 IF I>1 THEN LET H4$=H3$[1,I-1] ELSE LET H4$="" 5490 LET H=OR(ASC(H$),64) 5500 IF AND(ASC(H$),64) THEN LET H=H-64 5510 LET H4$=H4$,"#",CHR$(H,1) 5520 RETURN 5530 REM ******************************* 5540 REM GET LA LIGNE AU COMPLET 5550 REM ******************************* 5560 IF FIN THEN GOTO 5640 5570 LET REPLY$="" 5580 IF DEBUG THEN WRITE FILE[6],MESSAG$ 5590 STMD 1,ENV%,50,MESSAG$,REPLY$ 5600 IF SYS(22)=0 THEN IF CTES>30 THEN GOTO 0600 ELSE GOTO 5660 5610 IF DEBUG THEN WRITE FILE[6],REPLY$ 5620 LET INCHR$=REPLY$[1,LEN(REPLY$)] \ CTES=0 5630 RETURN 5640 STMD 1,ENV%,0,MESSAG$ 5650 RETURN 5660 LET CTES=CTES+1 5670 GOTO 5590