10 REM +------------------------------+ 20 REM ! FILTRANS ! 30 REM +------------------------------+ 40 REM Program f|r fil|verf|ring mellan 50 REM ABC-80 med GETFIL och SENDFIL. 60 REM Kompatibelt med ABCTRANS 70 REM Inneh}ller Minimonitor 80 REM av Gunnar Tidner (C) 1981-02-05 90 REM Version 2.0 1982-02-21 100 REM Minne 16 Kbytes f|r flexskiva 110 REM +++++++++++++++++++++++++++++++ 130 Z$="/*" : REM Filslutm{rke 140 B2$=CHR$(2) : REM CTRL-B 150 DIM B$=119,A$=119 160 ; CHR$(12);"LOKAL MODE!" 170 GOSUB 1060 180 ; CUR(5,5);"Vad vill du g|ra?" : ; 190 ; " 1 Half Duplex Terminal" 200 ; " 2 Full Duplex Terminal" 210 ; " 3 System Time ";H%;M%;S% 220 ; " 4 Chain till annat program" 230 ; " 5 Mini-Monitor" 240 ; " 6 Exit" 250 GET S$ : IF ASC(S$)<49 OR ASC(S$)>54 THEN 160 : S%=VAL(S$) 260 ON S% GOTO 270,290,950,920,1200,910 270 OPEN "V24:KB.1" ASFILE 1 : L%=1 : REM Half Duplex (No Echo) 280 GOTO 300 290 OPEN "V24:KA.1" ASFILE 1 : L%=1 : REM Full Duplex (Echo) 300 INPUT #L%,A$ 310 IF A$="SYNK" THEN 360 320 IF A$="SENDFIL" THEN 630 330 IF A$="MONITOR" OR A$="monitor" THEN 1200 340 IF A$="SIGNAL" THEN OUT 6,7 : FOR T=1 TO 3000 : NEXT T : OUT 6,0 : GOTO 300 350 ; A$ : IF LEN(A$)=0 THEN 160 ELSE 300 360 ; "LOKAL MODE Tryck tangent!" : GET C$ 370 ; " *** Mottaga fil ***" 380 ; "Filnamn vid MONITORN:"; : INPUT F1$ 390 ; "Filnamn h{r:"; : INPUT F2$ 400 ; #L%,"Hejsan" 410 INPUT #L%,B$ 420 IF B$<>"SYNK" THEN 400 430 FOR T=1 TO 100 : NEXT T 440 ; #L%,"SYNKSVAR" 450 FOR T=1 TO 100 : NEXT T : REM Synkroniserad 460 ; #L%,F1$ 470 INPUTLINE #L%,B$ : B$=LEFT$(B$,LEN(B$)-2%) 480 IF B$<>"OPENED" THEN ; B$ : FOR T=1 TO 2000 : NEXT T : GOTO 300 490 PREPARE F2$ ASFILE 2 500 FOR I%=1 TO 10000 510 FOR T=1 TO 100 : NEXT T 520 ; #L%,'>' 530 INPUTLINE #L%,B$ 540 IF LEFT$(B$,2%)=Z$ THEN 580 550 ; #2,B$; 560 ; I% 570 NEXT I% 580 CLOSE 2 590 ; "Antal rader=";I%-1% 600 OUT 6,7 : ; "Tryck ner n}gon tangent" : GET \$ : OUT 6,0 610 ; #L%,"Tack!" 620 GOTO 300 630 ; "LOKAL MODE Tryck tangent!" : GET C$ 640 ; " *** S{nda fil ***" 650 ; "Filnamn h{r:"; : INPUT F2$ 660 ; "Lagras vid MONITORN" 670 ; "under filnamn:"; : INPUT F1$ 680 OPEN F2$ ASFILE 2 690 ; #L%,"Hejsan" 700 INPUT #L%,B$ 710 IF B$<>"SENDFIL" THEN 690 720 FOR T=1 TO 100 : NEXT T 730 ; #L%,"SYNKSVAR" 740 FOR T=1 TO 100 : NEXT T 750 ; #L%,F1$ 760 ONERRORGOTO 840 770 FOR I%=1 TO 10000 780 INPUT #L%,A$ 790 INPUTLINE #2,B$ : B$=LEFT$(B$,LEN(B$)-2%) 800 ; I% 810 FOR T=1 TO 100 : NEXT T 820 ; #L%,B$ 830 NEXT I% 840 ; #L%,Z$ 850 CLOSE 2 860 ; "Antal rader=";I%-1% 870 FOR T=1 TO 3000 : NEXT T 880 OUT 6,7 : ; "Tryck ner n}gon tangent" : GET \$ : OUT 6,0 890 ; #L%,"Tack!" 900 GOTO 300 910 END 920 ; CHR$(12);CUR(5,5);"CHAIN till annat program" 930 ; CUR(10,0);"Program-namn:"; : INPUT P$ 940 CHAIN P$ 950 REM Klockan 960 ; CHR$(12)CUR(5,5);"St{ll klockan!" 970 ; CUR(10,5);"H,M,S:"; : INPUT H%,M%,S% 980 REM Set time to 990 REM H% Hours, M% Minutes and 1000 REM S% Seconds 1010 Z=1.8E+5*H%+3000*M%+50*S% 1020 Z1=INT(Z/256) : Z1%= NOT Z1 1030 Z%=( NOT (Z-Z1*256)) OR 4% 1040 POKE 65008%,Z%,Z1%,SWAP%(Z1%) 1050 GOTO 160 1060 REM Read System Time 1070 REM D% Contains number of days 1080 REM H% Contains hours. 1090 REM M% minutes and S% seconds 1100 D%=0 1110 IF (PEEK(65008%) AND 4%)=0% THEN 1110 1120 FOR I%=0% TO 2% 1130 Z%(I%)=255% XOR PEEK(65008%+I%) : NEXT I% 1140 Z1$=ADD$(MUL$(NUM$(256%*Z%(2%)+Z%(1%)),'512',0%),NUM$(Z%(0%)*2%),0%) 1150 IF COMP%(Z1$,'8640000')>-1% THEN D%=D%+1% : Z1$=SUB$(Z1$,'8640000',0%) : GOTO 1150 1160 Z=INT(VAL(Z1$)/100) 1170 H%=Z/3600 : Z=Z-3600*H% 1180 M%=Z/60 : S%=Z-60%*M% 1190 RETURN 1200 ; CHR$(7,12);"Denna ABC-80 {r nu slavad som MONITOR!" 1210 ONERRORGOTO 1370 1220 S1$="SENDFIL" : S2$="GETFIL" : S3$="BYE" 1230 OPEN "V24:CA.1" ASFILE 3 : L%=3 1240 ; #L%,"ABC-80 Mini-Monitor" 1250 ; #L%,"Vad vill du g|ra?" 1260 INPUT #L%,\$ : ; #L%,"" 1270 IF LEN(\$)=0 THEN 1250 ELSE GOSUB 1990 1280 IF INSTR(1%,S1$,\$) THEN V%=1 : GOTO 1400 1290 IF INSTR(1%,S2$,\$) THEN V%=2 : GOTO 1680 1300 IF INSTR(1%,S3$,\$) THEN V%=3 : GOTO 1370 1310 ; #L%;\$;" finns ej!" 1320 ; #L%;"Meny:" : ; #L%,"" 1330 ; #L%;S1$,"h{mta fil" 1340 ; #L%;S2$,"s{nda fil" 1350 ; #L%;S3$,"avsluta" 1360 GOTO 1250 1370 ; #L%,"Remote ABC-80 upph|r att vara Monitor!" 1380 ; CHR$(12)"Jag {r klar! ]terg} till terminal" 1390 OUT 6,7 : FOR T=1 TO 3000 : NEXT T : OUT 6,0 : CLOSE L% : GOTO 270 1400 REM SENDFIL 1410 ONERRORGOTO 1670 1420 FOR T=1 TO 1000 : NEXT T 1430 ; #L%,B2$;"SENDFIL" 1440 INPUT #L%,\$ 1450 IF \$="SYNKSVAR" THEN 1460 ELSE 1420 1460 REM Synkroniserad 1470 INPUT #L%,\$ : IF LEN(\$)=0% THEN 1630 1480 IF LEN(\$)>12 THEN 1240 1490 \$="DR0:"+\$ 1500 ONERRORGOTO 1630 1510 PREPARE \$ ASFILE 2 1520 ; #L%,B2$;\$;" |ppnad, v{ntar p} rad nr 1" 1530 FOR I%=1% TO 2000% 1540 INPUTLINE #L%,A$ 1550 IF LEFT$(A$,2%)=Z$ THEN 1590 ELSE ; #2,A$; 1560 FOR T=1 TO 100 : NEXT T 1570 ; #L%,B2$;'>' 1580 NEXT I% 1590 CLOSE 2 1600 INPUT #L%,A$ 1610 FOR T=1 TO 100 : NEXT T 1620 ; #L%,"Filen har lagrats som ";\$ 1630 ; #L%,"Vill du s{nda n}gon mer fil? (J/N)" 1640 ONERRORGOTO 1240 1650 INPUT #L%,\$ 1660 IF (ASC(\$) AND 223%)=74% OR ASC(\$)=0 THEN 1420 1670 GOTO 1240 1680 REM GETFIL 1690 ONERRORGOTO 1980 1700 FOR T=1 TO 1000 : NEXT T 1710 ; #L%,B2$;"SYNK" 1720 INPUT #L%,\$ 1730 IF \$="SYNKSVAR" THEN 1740 ELSE 1700 1740 REM Synkroniserad 1750 INPUT #L%,\$ : REM Filnamnet 1760 POKE -456%,0% 1770 ONERRORGOTO 1890 1780 IF INSTR(1%,\$,".bac") THEN ; #L%,B2$;\$;" ej ASCII" : GOTO 1920 1790 IF INSTR(1%,\$,".BAC") THEN ; #L%,B2$;\$;" ej ASCII" : GOTO 1920 1800 OPEN \$ ASFILE 2 1810 ; "Get:";\$; : ; #L%,B2$;"OPENED" 1820 INPUT #L%,C$ 1830 FOR I%=1% TO 10000% 1840 INPUTLINE #2,A$ 1850 FOR T=1 TO 100 : NEXT T 1860 ; #L%,B2$;A$; 1870 INPUTLINE #L%,C$ 1880 NEXT I% 1890 IF ERRCODE=21 THEN ; #L%,B2$;"Filen "+\$+" finns ej" : GOTO 1920 1900 ; #L%,B2$;Z$ 1910 INPUT #L%,A$ 1920 FOR T=1 TO 3000 : NEXT T 1930 IF ERRCODE=34 THEN ; #L%,"Slut p} filen ";\$ 1940 ; #L%,"Vill du ha n}gon mer fil? (J/N)" 1950 ONERRORGOTO 1240 1960 INPUT #L%,\$ 1970 IF (ASC(\$) AND 223%)=74% OR ASC(\$)=0 THEN 1700 1980 GOTO 1240 1990 REM Konvertera \$ til stora bokst{ver 2000 X$="" : FOR J%=1 TO LEN(\$) 2010 X$=X$+CHR$((ASC(RIGHT$(\$,J%)) AND 223%)) 2020 NEXT J% : \$=X$ : RETURN