10 REM +++++++++++++++++++++++++++++++++ 11 REM ! Program .... SAFT 12 REM ! Utg}va 1981-09-28 13 REM ! av (c) Hans Nilsson 14 REM ! {ndrat av Gunnar Tidner 15 REM ! Minne 16 Kbytes f|r flexskiva 16 REM ! Ins{nt av 849 17 REM +++++++++++++++++++++++++++++++++ 18 REM 19 REM Screened by +TCP+ 20 REM 21 GOSUB 162 22 DIM A$=132%,L$=120% : ; CHR$(12) 23 H$="0123456789ABCDEF" 24 DIM Q0$=253%,A0$=253% 25 F$="V24:" : F%=1% : T8%=0% 26 ; "Cell f|r Ctrl-B (31865 el -22):" 27 INPUT B2 28 OPEN F$ ASFILE 1% 29 ; : ; "This is ABC-80 Saft" : ; 30 PRINT "0. Terminal mode" 31 PRINT "1. Help" 32 PRINT "2. Send text file from ABC-80" 33 PRINT "3. Receive text file into ABC-80" 34 PRINT "4. Other commands" 35 PRINT "5. Exit from SAFT" 36 ; "Enter choice number:"; : GET G$ : ; G$ : G%=ASC(G$) : IF G%=13% GOTO 52 37 G%=G%-ASC("0") 38 U2%=-1% : U3%=0% : Q%=0% 39 T9%=0% : L9%=0% : U9%=253% 40 IF G%>0% THEN POKE B2,61% 41 ON G%+1% GOTO 52,29,56,86,42,159 42 ; : ; "1. Timing options" 43 PRINT "2. Send byte file from ABC-80" 44 PRINT "3. Receive byte file into ABC-80" 45 PRINT "4. Change terminal parameters" : ; "5. Exit from menu" 46 ; "Enter choice number : "; : GET G$ : ; G$ : G2%=ASC(G$)-ASC("0") 47 ON G2% GOTO 48,56,86,49,29 48 T8%=1% : ; "Timing option selected$" : GOTO 29 49 ; "V24 : "; : INPUT F$ : F$="V24 : "+F$ 50 REM ---- TERMINAL MODE --- 51 OPEN F$ ASFILE 1% 52 POKE B2,2% 53 ; : ; "You are now in terminal mode, type CTRL-P to stop." 54 FOR N=1 TO 2000 : NEXT N 55 INPUT #F%,A$ : GOTO 29 56 REM ---- TRANSMIT FILE --- 57 PRINT "Enter filename"; 58 INPUT I$ : ONERRORGOTO 60 59 OPEN I$ ASFILE 2 : GOTO 63 60 ONERRORGOTO 0 61 PRINT "CAN NOT OPEN FILE$" 62 GOTO 57 63 A$="=+" 64 GOSUB 128 : REM TX MESSAGE 65 GOSUB 133 : REM RX PROMPTER 66 A1$=LEFT$(A$,1) 67 IF A1$="?" THEN A$=S$ : GOTO 64 68 IF Q%=-1% GOTO 81 69 IF A1$="-" GOTO 124 : REM RX ABORT 70 IF A1$<>"+" GOTO 120 : REM ERROR 71 C%=0% : A$="=*" 72 FOR K%=1 TO 21 : IF K%<21 GOTO 74 73 A%=C% AND 255% : GOTO 77 74 GOSUB 138 : REM GET ONE BYTE 75 IF Q%=-1% THEN A$=A$+"ZZ" : GOTO 79 76 A%=Q% : C%=C%+A% 77 A%=CALL(65408%,A%) 78 A$=A$+CHR$(A%/256%)+CHR$(A% AND 255%) 79 NEXT K% 80 S$=A$ : GOTO 64 81 A$="=/" 82 GOSUB 128 : GOSUB 133 83 IF A$<>"+" GOTO 124 84 PRINT "Send done, ";T9%;" bytes, ";L9%;" lines" 85 CLOSE 2% : GOTO 29 86 REM ---- RECEIVE FILE --- 87 PRINT "Enter filename" 88 INPUT A 89 PREPARE A$ ASFILE 2 90 A$="=+" 91 GOSUB 128 : REM TX PROMPTER 92 GOSUB 133 : REM RX LINE 93 A1$=LEFT$(A$,1) 94 IF A1$="+" GOTO 90 95 IF A1$="-" GOTO 126 96 IF A1$="/" GOTO 116 97 IF A1$<>"*" GOTO 123 98 IF LEN(A$)<43 GOTO 123 99 C%=0% 100 FOR K%=1% TO 21% 101 A1$=MID$(A$,K%*2%,1%) 102 IF A1$="Z" GOTO 114 103 A2$=MID$(A$,K%*2%+1%,1%) 104 A%=ASC(A1$)*256%+ASC(A2$) 105 A%=CALL(65438%,A%) 106 IF K%<21% GOTO 110 107 C%=C% AND 255% 108 IF A%<>C% THEN A$="=?" : GOTO 91 109 GOTO 114 110 Q%=A% : T9%=T9%+1% : ; CHR$(Q%); 111 IF G%<>4% AND A%=10% THEN L9%=L9%+1% : GOTO 113 112 GOSUB 156 : REM PRINT ONE BYTE 113 C%=C%+A% 114 NEXT K% 115 GOTO 90 116 IF G%<>4% THEN Q%=3% : GOSUB 156 117 A$="=+" : GOSUB 128 118 ; "Receive done, ";T9%;" bytes, ";L9%;" lines" 119 CLOSE 2% : GOTO 29 120 PRINT "Sender aborted receiver, illegal message" 121 A$="=-" : GOSUB 128 122 CLOSE 2% : GOTO 159 123 PRINT "Receiver aborted sender, illegal message" : GOTO 121 124 PRINT "Sender aborted by receiver$" 125 GOTO 122 126 PRINT "Receiver aborted by sender$" 127 GOTO 122 128 REM --- SLEEP 0.1 S AND TRANSMIT A$ 129 IF T8%>0% THEN FOR I=1 TO 100 : NEXT I 130 PRINT "TX:";A$ 131 PRINT #F%,A$+CHR$(13); 132 RETURN 133 REM ** RECEIVE ONE LINE IN A$ * 134 REM ** STRIPPED FROM = AND CR * 135 INPUT #F%,A$ 136 PRINT "RX:=";A$ 137 RETURN 138 REM --- GET ONE BYTE FROM FILE -- 139 REM ** INTO Q%. EOF-> Q%=-1 ** 140 IF Q%=-1% RETURN 141 IF G%<>4% GOTO 149 142 IF U3%>0% GOTO 146 143 U2%=U2%+1% : ONERRORGOTO 155 144 Z%=CALL(28666%,2%)+CALL(28668%,U2%) 145 U3%=1% : ONERRORGOTO 0 146 Q%=ASC(MID$(Q0$,U3%,1%)) 147 U3%=U3%+1% : IF U3%>U9% THEN U3%=0% 148 T9%=T9%+1% : ; CHR$(Q%); : RETURN 149 IF U3%>0% GOTO 153 150 ONERRORGOTO 155 151 INPUTLINE #2%,L$ : ONERRORGOTO 0 152 L9%=L9%+1% : U3%=1% : U9%=LEN(L$) 153 Q%=ASC(MID$(L$,U3%,1%)) 154 GOTO 147 155 Q%=-1% : RETURN 156 REM --- PRINT ONE BYTE IN Q% - 157 REM --- TO THE RECEIVE FILE -- 158 PRINT #2,CHR$(Q%); : RETURN 159 ; : ; "Good-bye from ABC-SAFT" 160 POKE B2,2% 161 END 162 REM INITIERING AV MASKINKODSRUTIN 163 POKE -128%,197%,123%,67%,31%,31%,31%,31%,205%,147%,255%,79%,120%,205%,147%,255% 164 POKE -113%,111%,97%,193%,201%,230%,15%,33%,193%,255%,95%,22%,0%,25% 165 POKE -100%,126%,201%,122%,205%,180%,255%,23%,23%,23%,23%,230%,240%,87% 166 POKE -87%,123%,205%,180%,255%,230%,15%,178%,38%,0%,111%,201%,254%,65% 167 POKE -74%,250%,190%,255%,214%,65%,198%,10%,201%,214%,48%,201%,48%,49%,50%,51% 168 POKE -59%,52%,53%,54%,55%,56%,57%,65%,66%,67%,68%,69%,70% 169 RETURN