0005 ! PCX 9-14-94 !
0006 USER OFF
0010 DESTROY ALL 
0020 DIM E1(15),A$[120],Q$[120]
0030 T$=CHR$(13)&CHR$(10)
0040 SETUP 2400,30,10,0,1,T$
0050 Q$=""
0060 DISP "Waiting"
0070 Q$=SERIAL$(100,"")
0080 IF Q$="" THEN 70
0090 Q=VAL(Q$)
0100 ON Q GOSUB 120,360,430,540,810,1000,1920,1330,1840,1840
0110 GOTO 50
0120 DISP "Contact established"
0130 CALL SCOPE("SAVE","DATA",Q)
0140 IF Q=0 THEN 190
0150 ASSIGN #2 TO *
0160 ASSIGN #2 TO SAVE
0170 READ #2;E1(),F$
0180 GOTO 200
0190 F$="?"
0200 IF F$="NOFILE" THEN F$="?"
0210 IF F$<>"?" THEN GOSUB 570 @ RETURN 
0220 GOSUB 720
0230 RETURN 
0240 RETURN 
0250 CALL SCOPE(F$,"DATA",Q)
0260 IF Q=1 THEN 300
0270 F$="?"
0280 D$="?"
0290 RETURN 
0300 CALL SCOPE(D$,"DATA",Q)
0310 IF Q=0 THEN D$="?"
0320 RETURN 
0330 CALL SCOPE(P$,"TEXT",Q)
0340 IF Q=0 THEN P$="?"
0350 RETURN 
0360 P$=""
0370 P$=SERIAL$(100,"+")
0380 DISP P$
0390 IF P$="" THEN 370
0400 GOSUB 330
0410 Q$=SERIAL$(0,P$)
0420 RETURN 
0430 ASSIGN #3 TO *
0440 ASSIGN #3 TO P$
0450 DISP "Sending "&P$
0460 ON ERROR GOTO 510
0470 READ #3;A$
0480 I=LEN(A$)
0490 Q$=SERIAL$(0,A$[1,I])
0500 GOTO 470
0510 OFF ERROR
0520 Q$=SERIAL$(0,"?")
0530 RETURN 
0540 F$=""
0550 F$=SERIAL$(100,"+")
0560 IF F$="" THEN 550
0570 K=POS(F$,":")
0580 IF K=0 THEN K=POS(F$,".")
0590 IF K=0 THEN K=LEN(F$)+1
0600 D$=F$[1,K-1]&"D"&F$[K,LEN(F$)]
0610 P$=F$[1,K-1]&"P"&F$[K,LEN(F$)]
0620 GOSUB 250
0630 IF F$="?" THEN 720
0640 ASSIGN #1 TO *
0650 ASSIGN #1 TO F$
0660 READ #1,1;F1
0670 IF D$="?" THEN 750
0680 ASSIGN #4 TO *
0690 ASSIGN #4 TO D$
0700 READ #4,0;D1
0710 GOTO 760
0720 F1=0
0730 D$="?"
0740 P$="?"
0750 D1=0
0760 DISP SERIAL$(0,F$)
0770 DISP SERIAL$(0,STR$(F1))
0780 DISP SERIAL$(0,STR$(D1))
0790 IF P$="?" THEN GOSUB 410 ELSE GOSUB 400
0800 RETURN 
0810 FOR I=1 TO 5
0820 Q$=SERIAL$(100,"+")
0830 IF Q$="?" THEN RETURN 
0840 ON I GOTO 850,890,900,910,940
0850 P=VAL(Q$)
0860 IF F8=0 THEN 950
0870 P=P+F1
0880 GOTO 950
0890 N=VAL(Q$) @ GOTO 950
0900 E=VAL(Q$) @ GOTO 950
0910 Z=VAL(Q$)
0920 IF D1=0 THEN I=5
0930 GOTO 950
0940 D1$=Q$[1,D1]
0950 NEXT I
0960 DISP "Receiving "&STR$(P)
0970 PRINT #1,P+4;N,E,Z
0980 IF D1<>0 THEN PRINT #4,P;D1$
0990 GOTO 810
1000 Q$=SERIAL$(100,"+")
1010 P1=VAL(Q$)
1020 Q$=SERIAL$(100,"+")
1030 P2=VAL(Q$)
1040 IF F8=0 THEN 1070
1050 P1=F1+1
1060 P2=999999999
1070 FOR P=P1 TO P2
1080 ON ERROR GOTO 1300
1090 READ #1,P+4;N,E,Z
1100 OFF ERROR
1110 P9$=STR$(P)
1120 N$=STR$(N)
1130 E$=STR$(E)
1140 Z$=STR$(Z)
1150 IF N=-999999 AND E=-999999 AND F8=0 THEN 1290
1160 DISP "Sending "&P9$
1170 Q$=SERIAL$(0,P9$)
1180 Q$=SERIAL$(0,N$)
1190 Q$=SERIAL$(0,E$)
1200 Q$=SERIAL$(0,Z$)
1205 IF N=-999999 AND E=-999999 THEN 1300
1210 IF D1=0 THEN 1290
1220 ON ERROR GOTO 1260
1230 READ #4,P;D1$
1240 OFF ERROR
1250 IF D1$<>"" THEN 1270
1260 D1$=CHR$(27)
1270 OFF ERROR
1280 Q$=SERIAL$(0,D1$)
1290 NEXT P
1300 OFF ERROR
1310 DISP SERIAL$(0,"?")
1320 RETURN 
1330 P$=""
1340 DISP SERIAL$(0,"+")
1350 P$=SERIAL$(100,"")
1360 DISP P$
1370 IF P$="" THEN 1350
1380 IF P$="?" THEN RETURN 
1390 CALL SCOPE(P$,"",Q)
1400 IF Q=0 THEN 1470
1410 DISP SERIAL$(0,"-")
1420 Q$=""
1430 Q$=SERIAL$(100,"")
1440 IF Q$="-" THEN 1330
1450 IF Q$="" THEN 1430
1460 PURGE P$
1470 ASSIGN #3 TO *
1480 ON ERROR GOTO 1530
1490 CREATE TEXT "T9432149",1
1495 COPY "T9432149" TO P$
1496 PURGE "T9432149"
1500 ASSIGN #3 TO P$
1510 OFF ERROR
1520 GOTO 1560
1530 OFF ERROR
1540 DISP SERIAL$(0,ERRM$)
1550 GOTO 1330
1560 Q$=SERIAL$(100,"+")
1570 Q=VAL(Q$)
1580 I=POS(P$,":PORT")
1590 IF I=0 THEN 1620
1600 Q2=MEM(VAL(P$[I+6,LEN(P$)-1]))
1610 GOTO 1640
1620 Q2=MEM
1630 IF POS(P$,".") THEN Q2=Q+1
1640 IF Q2>Q THEN 1680
1650 OFF ERROR
1660 DISP SERIAL$(0,"-")
1670 RETURN 
1680 ASSIGN #3 TO *
1690 IF POS(P$,":") THEN 1740
1695 IF NOT POS(P$,".") THEN 1740
1700 ON ERROR GOTO 1650
1710 PURGE P$
1720 CREATE TEXT P$,Q
1730 OFF ERROR
1740 ASSIGN #3 TO P$
1750 DISP "Receiving "&P$
1760 Q$=""
1770 Q$=SERIAL$(120,"+")
1780 IF Q$="" THEN 1770
1790 IF Q$="?" THEN 1820
1800 PRINT #3;Q$
1810 GOTO 1760
1820 ASSIGN #3 TO *
1830 RETURN 
1840 F8=1
1850 D8=D1
1860 D1=0
1870 Q=Q-8
1880 ON Q GOSUB 1000,810
1890 D1=D8
1900 F8=0
1910 RETURN 
1920 ASSIGN #1 TO *
1930 ASSIGN #3 TO *
1940 ASSIGN #4 TO *
1950 DISP 
1960 END 
1970 SUB SCOPE(F1$,F2$,Q)
1980 DISP F1$
1990 Q=0
2000 IF NOT POS(F1$,":") THEN 2040
2010 G1$=F1$[1,POS(F1$,":")-1]
2020 G2$=F1$[POS(F1$,":"),LEN(F1$)]
2030 GOTO 2100
2040 IF NOT POS(F1$,".") THEN 2080
2050 G1$=F1$[1,POS(F1$,".")-1]
2060 G2$=F1$[POS(F1$,"."),LEN(F1$)]
2070 GOTO 2100
2080 G1$=F1$
2090 G2$=":MAIN"
2100 G1$=G1$&"        "[LEN(G1$)+1,8]
2110 I=0
2120 I=I+1
2130 IF CAT$(I,G2$)="" THEN 2190
2140 IF G1$<>CAT$(I,G2$)[1,8] THEN 2120
2150 IF F2$="" THEN 2170
2160 IF F2$<>CAT$(I,G2$)[12,15] THEN 2190
2170 Q=1
2180 DISP F1$&" found"
2190 END SUB 
2200 END 
