10 rem file capture program; robert lenoil, author. 15 rem written december 1984. cleaned up for general public february 1985. 20 rem many fixes and additions august 1992, by matt sorrels. 25 print chr$(147); chr$(14); "Now in dumb terminal mode. Press F1 key"; 30 print "to begin receiving file. (Make sure that"; 35 print "host is set for half-duplex.) Press F7" 40 print "key to exit program. 45 print "----------------------------------------"; 50 open 1,2,0,chr$(6) + chr$(0) : open 15,8,15 55 dim hx(22) 60 for i = 0 to 9 : hx(i) = i : next i : for i = 10 to 16 : hx(i) = 0 : next i 65 for i = 17 to 22 : hx(i) = i - 7 : next i 70 get a$ : if a$ = "" then 90 75 if a$ = chr$(133) then 105 80 if a$ = chr$(136) then print "Quitting" : close 1 : end 85 gosub 275 : print#1,a$; 90 get#1,a$ : gosub 170 95 if a$ <> "" then print a$; 100 goto 70 105 f$ = "" : print : input "Local filename"; f$ 110 if f$ = "" then close 15 : close 1 : print "Quitting" : end 115 open 8,8,8,"0:" + f$ + ",p,w" 120 gosub 150 : if en$ > "00" then close 8 : goto 100 125 fi = 0 130 get#1,a$ : if a$ > "" then 130 135 gosub 140 : goto 195 140 print#1,"ok" : return : rem "ok" on remote host -- must be lower case 145 print#1,"ng" : return : rem "ng" on remote host -- must be lower case 150 if st = 0 then en$ = "00" : return 155 input#15,en$,em$,et$,es$ 160 if en$ > "00" then print chr$(18); en$; em$; et$; es$ 165 return 170 rem convert ascii to petascii 175 a = asc(a$ + chr$(0)) : if a > 64 and a < 91 then a = a + 128 180 if a > 96 and a < 123 then a = a - 32 185 if a = 127 then a = 20 190 a$ = chr$(a) : return 195 l$ = "" : ck = 0 200 get#1,a$ : if a$ = "" then 200 205 if a$ = chr$(10) then 215 210 ck = ck + asc(a$) : gosub 170 : l$ = l$ + a$ : goto 200 215 ck$ = "" 220 get#1,a$ : if a$ = "" then 220 225 if a$ <> chr$(10) then ck$ = ck$ + a$ : goto 220 230 if ck = abs(val(ck$)) then 245 235 print chr$(13); chr$(18); "Checksum Error - sending nack" 240 gosub 145 : goto 195 245 if l$ = "" then 255 250 gosub 295 255 if val(ck$) <= 0 then 265 260 print"."; : gosub140 : goto 195 265 close 8 : print chr$(13); f$; " downloaded; returning to terminal mode" 270 goto 70 275 a = asc(a$+chr$(0)) 280 if a > 192 and a < 219 then a = a - 128 : goto 290 285 if a > 64 and a < 91 then a = a + 32 290 a$ = chr$(a) : return 295 if fi <> 1 then gosub 360 300 h1$ = mid$(l$,2,1) : h2$ = mid$(l$,3,1) : gosub 390 : i = h * 2 305 h1$ = mid$(l$,4,1) : h2$ = mid$(l$,5,1) : gosub 390 : ck = h 310 h1$ = mid$(l$,6,1) : h2$ = mid$(l$,7,1) : gosub 390 : ck = ck + h 315 if i = 0 then return 320 for j = 0 to i - 5 step 2 325 h1$ = mid$(l$,j + 8,1) : h2$ = mid$(l$,j + 9,1) : gosub 390 330 print#8,chr$(h); : if st <> 0 then gosub 150 : stop 335 ck = ck + h : next j 340 h1$ = mid$(l$,i + 4,1) : h2$ = mid$(l$,i + 5,1) : gosub 390 : rk = h * 256 345 h1$ = mid$(l$,i + 6,1) : h2$ = mid$(l$,i + 7,1) : gosub 390 : rk = rk + h 350 if ck = rk then return 355 print chr$(13); chr$(18); "Data file bad." : close 8 : close 1 : end 360 rem write out the start address 365 h1$ = mid$(l$,6,1) : h2$ = mid$(l$,7,1) : gosub 390 : print#8,chr$(h); 370 if st <> 0 then gosub 150 : stop 375 h1$ = mid$(l$,4,1) : h2$ = mid$(l$,5,1) : gosub 390 : print#8,chr$(h); 380 if st <> 0 then gosub 150 : stop 385 fi = 1 : return 390 h = hx(asc(h1$) - 48) * 16 + hx(asc(h2$) - 48) 395 return