* * OIIAAI DOIOIAII OAOOEII 6.0 * * AIIIIAIOA 64 * * OEEO OAOOEII OOAO AEIAIAIA * OODDIEAA AU AAIIEIC DOICOAI * xEOE AIIOOOOAO: * * A$="AEIAIAIA"+AEO$(13) * OUO 49152,A * * xHERE A = 0 EGNORE CARRIER DETECT * A = 16 AHECK FOR CARRIER DETECT * * IIOA: OETTING A$ *IOOO* BE JUST BEFORE OUO49152 * WITH NO INTERVENING STRING OPERATIONS! * * AIDUOECEO (A) 1986 AU * IEAOIOAAEIEA OIIOOEIIO, EIA. * AII OECEOO OAOAOOAA * * OEEO OAOOEII OAIAAOAA OI DOAIEA AIIAEI * OO II ;TRUNCATION ON (IAOIEI) IOC $A000 * AEEEI = $AAA6 AEEIOO = $AAA9 AEOIOO = $AAA2 AIIOA = $AAA3 AIOAEI = $AAAA CAOEI = $AAA4 IDAI = $AAA0 OAAAOO = $AAA7 OOID = $AAA1 OAOIAO = $AAAA OAOIAI = $AAAA OIE = 1 AAE = 6 IAE = 21 AIO = 4 AAI = 24 OAODIO = $47 EEAAU = $A1 IIOA = $A3 OEAAA = $029A OEAAO = $029A AIAAIA = $02A1 OIIAIE = $A700 AIIAE = $A800 AII = $A800 AII = $A801 AIAE1 = $A802 AIAAOA = $A803 AIAE = $A883 ADIOOA = $AA01 EID OIIAAI AOOAAO AAA 8 OAOAEO AAA 0 OOOAO AAA 0 AAOOEAO AAA 0 OAIDO AAA 0 AOII AAA 0 OIIOU AAA 128 IOOAIE AAA 0 DAAAEO AAA 0 AOO AAA 0 AIEIOI AAA 0 AEOAIO AAA 0 AEOOI AAA 0 AEOAIO AAA 4,0,67,67,51 AAOAO AAA 0 OOII AAA 128 OAAIOIO AA $0000 AOEAEO AAA 32 OID2O AAA 0 AAOA AO 80 AOA AO 80 DIU AA $1021 AOAAAOA AAA 0 OIIAA AAA 0 AOOUO AAA 3 OAIOU AAA 132 AOA AA 0 OIIAAI AIA #16 ;CARRIER REQUEST 16 OR 0 OOA AAOOEAO ;SAVE CARRIER REQUEST IAU #1 ;GET THE POINTER TO IAA (OAODIO),U ;THE LAST STRING VARIABLE OOA IIOA ;REFERENCED BY THE EIU ;CALLING AASIC PROGRAM IAA (OAODIO),U OOA IIOA+1 AIA IAA IIOA AAA #1 OOA IIOA IAA IIOA+1 AAA #0 OOA IIOA+1 IAU #0 IAO #0 ]EIIID IAA (IIOA),U ;MOVE THE FILENAME INTO AID #13 ;FILENAME BUFFER AAN OIA04 OOA AAOA,O EIO EIU AIA ]EIIID OIA04 OOU OAIDO IAO OAIDO AAO IAA #0 ;DEFAULT IS TRANSLATION OFF OOA OOII IAA AAOA,O OOA OID2O AID #'T' ;CHECK IF LAST ENTRY IN AIA OIA05A ;FILENAME IS TRANSLATE AAO ;SPECIFIER TO ADJUST FOR AAO ;FINDING UP/DOWN IAA AAOA,O ;SPECIFIER OIA05A OOA AOEAEO AID #'R' ;IS DIRECTION SPECIFER A AAN OIA05A ;A VALID ENTRY? AID #'W' AIA OIA05A OIA05A AAO IAA #',' ;CHECK FOR INTERVENING COMMA AID AAOA,O AAN OIA01A OIA05A IAA #6 ;USER MADE AN ERROR IN EOO IOOIOC ;FILENAME SPECIFICATION EOO xAEOOxI ;TELL HIM AND THEN EXIT EOO OIA19 OIA01A AAO DEA IAA AAOA,O ;NOW LET US MAKE SURE HE AID #'U' ;SPECIFIED A VALID AAN OIA01U ;FILE TYPE AID #'P' ;WE WILL ACCEPT U P OR S AAN OIA01U AID #'S' AAN OIA01U DIA EID OIA05A OIA01U IAA #'T' ;GOT BY SYNTAX CHECK AID OID2O ;NOW CHECK FOR TRANSLATE AIA OIA01U ;ONLY IF A SEQUENTIAL IAA #128 ;FILE OOA OOII OIA01U DIA AAO AID AAOA,O AIA OIA05A IAA OAIDO ;WHEW! NOW WE FINALLY GET IAO #<AAOA ;TO OPEN THE DISK FILE IAU #>AAOA EOO OAOIAI IAA #8 EOO IDAIAE EOO AOOAEI ;ERROR ON OPEN? AAN OIA01A ;YES - EXIT EOO OIA18 OIA01A IAA #2 EOO IOOIOC IAA #3 OOA AOOUO IAA AOEAEO AID #'R' ;JUMP TO UPLOAD OR DOWNLOAD AIA OIA06 ;DEPENDING ON DIRECTION EID OIA30 ;SPECIFIED * * OAAAEOA AEIA * OIA06 IAA #0 ;INITIALIZE EVERYBODY OOA AOII OOA OIIAA OOA IOOAIE OOA OAAIOIO OOA OAAIOIO+1 OOA AIEIOI EOO OAOUAOI EOO OIA60 ;GET THINGS ROLLING IAA #128 ;NORMAL DATA BLOCK SIZE OOA OIIOU IAA #132 OOA OAIOU AEO OIIAA ;CHECKSUM OR CRC? AIE OIA10 ;CRC OIA06A IAA ADIOOA ;DO WE STILL HAVE CARRIER? AIA AAOOEAO AAN OIA06A1 EOO OIA28 ;GET VERIFICATION TO ABORT AAN OIA06A OIA06A1 EOO OAOUAOI OIA07 EOO COOIAI ;GO GET A MODEM CHARACTER IAA ADIOOA ;STILL CHECKING TO SEE IF AIA AAOOEAO ;CARRIER PRESENT AAN OIA07A1 EOO OIA28 AAN OIA07 OIA07A1 IAA AEOAIO AIA OIA10 IAA OAOAEO ;LOOK FOR END OF TRANSFER AS AID #AIO ;FIRST BYTE OF BLOCK AIA OIA07A EID OIA42 OIA07A AID #AAI ;CHECK FOR USER CANCEL AIA OIA07A EOO OIA19 OIA07A AID #OIE AIA OIA07 OIA10 EOO AEEAAA ;ADD THE DATA BYTE TO CHECKSUM AID OAIOU ;IS THIS END OF THIS BLOCK? AIA OIA07 ;NO - GET NEXT CHARACTER IAA AII ;YES - CHECK BLOCK NUMBER AIA ;WITH COMPLEMENT AAA AIAE1 AIA AID #255 AAN OIA11 ;BLOCK NUMBER IS GOOD OIA12 EOO OIA15 ;BLOCK ERROR - SEND A IAE EID OIA06A OIA11 AEO OIIAA ;CHECKSUM OR CRC? ADI OIA11A ;CHECKSUM IAA AOA IOA AOA+1 AAN OIA11A AIA OIA12 OIA11A IAA AEOOI ;NOW SEE IF OUR CALCULATED OAA ;CHECKSUM MATCHES THE ONE OAA AIAE ;WE RECEIVED FROM THE SENDER AIA AID AIAE AIA OIA12 ;CHECKSUM ERROR - GO IAE OIA11A EIA AIEIOI ;NOW CHECK TO SEE IF THIS IS IAA AIIAE+1 ;THE BLOCK NUMBER WE EXPECTED AID AIEIOI AAN OIA13 AAA AIEIOI ;OVERLAY PREVIOUS 2ND BUFFER EID OIA14A ;IF SENDER REPEATED HIMSELF OIA13 IAA AOII ;STUFF INTO 2ND BUFFER IF THIS AAN OIA14A ;IS THE FIRST BLOCK OIA14 IAU #0 IAO #4 OIA14A IAA OIIAIE,O ;LOOK FOR COMPUSERVE AID AEOAIO,O ;MACHINE-SPECIFIC HEADER AIA OIA14A ;AND STRIP IT OUT AAO ADI OIA14A IAU #6 OIA14A OOU OAIDO ;WRITE THE 2ND BUFFER TO DISK IAO #8 EOO AEEIOO OIA14A IAO OAIDO IAA OIIAIE,O AEO OOII ;TRANSLATE THE CHARACTERS IF ADI OIA14A ;THE TRANSLATE FLAG IS ON EOO AIOOO OIA14A EOO AEOIOO EOO OAAAOO ;WATCH DEM DISK ERRORS! AIA OIAAOO EIA OAIDO IAA OIIOU ;IS THIS THE END OF THE AID OAIDO ;DATA BLOCK PORTION? AIA OIA14A ;NO - KEEP WRITING TO DISK AEO IOOAIE ;YES - IS THIS THE LAST ADI OIA14A ;BLOCK OF THE FILE? EID OIA24 ;YES - TIME TO FINISH UP OIA14A EOO OIAAIE ;DISPLAY CURRENT BLOCK INFO IAO #0 OIA41 IAA AIAAOA,O ;MOVE 1ST BUFFER TO 2ND OOA OIIAIE,O ;WE USE DOUBLE-BUFFERING FOR EIO ;ON-THE-FLY PAD STRIPPING ADI OIA41 ;MOVE 128 BYTES OOO AOII IAA #AAE ;AAE THE SENDER - THIS BLOCK EOO DOOIAI ;WAS GOOD EOO AIOAEI EID OIA06A OIAAOO EOO AOOAEI ;OOPS - GOT A DISK ERROR! IAA #1 ;NOTIFY THE USER AND THEN EOO IOOIOC ;ABORT THE FILE TRANSFER IAA #7 ;AT XMD18 EOO IOOIOC IAA #13 EOO OAIIOO EOO OIA18 OIA42 IAA #128 ;SET LAST BLOCK INDICATOR OOA IOOAIE IAO #127 ;DETERMINE WHETHER OR NOT IAA OIIAIE,O ;SENDER USED CTRL-Z OR NULL OOA DAAAEO ;AS A PAD CHARACTER AID #26 AAN OIA42A ;HE USED CTRL-Z AID #0 AAN OIA42A ;HE USED NULL EID OIA42A OIA42A IAA OIIAIE,O ;NOW BACK UP INTO THE LAST AID DAAAEO ;BLOCK UNTIL WE FIND THE AIA OIA42A ;FINAL REAL DATA BYTE AAO ADI OIA42A EID OIA24 OIA42A EIO ;SET BLOCK SIZE TO MATCH OOO OIIOU ;END OF LAST BLOCK EID OIA14 AIOOO AIA #127 ;CONVERT ASCII-PETASCII AID #65 AAA OIA14I AID #91 AAO OIA14E IOA #32 EID OIA14I OIA14E AID #97 AAA OIA14I AID #123 AAO OIA14I AIA #223 OIA14I OOO * * CAO OIIAAI AEAO * COOIAI EOO OAOEEA ;SET CHARACTER TIMEOUT COO01 EOO OOID ;CHECK TO SEE IF USER IS AAN COOAO ;PRESSING STOP KEY TO ABORT EOO CEI ;GET CHARACTER FROM MODEM AIA COO02 ;WAS THERE A CHARACTER? OOO ;YES - RETURN COO02 EOO OOOEEA ;NO - DID WE TIME OUT YET? AAA COO01 ;NO - GO TRY AGAIN EOO OIA16 ;YES - GO TO ERROR ROUTINE DIA DIA EID OIA06A ;RETURN COOAO EID OIA18 ;USER WANTS TO ABORT * * AEAAE AAI,IAE ADDOIDOEAOA * OIA15 EIA AOO ;CANCEL IF 10 ERRORS IN A ROW IAA #10 ;OTHERWISE JUST IAE AID AOO AAN OIA18 * * IAE * OIA16 IAA #'N' OOA AEODO8+18 IAA #IAE EOO DOOIAI OOO * * AIO * OIA17 IAA #AIO EOO DOOIAI OOO * * AAI * OIA18 IAA #AAI ;CANCEL THE TRANSFER EOO DOOIAI OIA19 IAA #4 ;DISPLAY MESSAGE TO USER EOO OIA25 EOO xAEOOxI DIA ;JUMP ALL THE WAY BACK TO DIA ;THE AASIC PROGRAM OOO OIA28 IAA #8 ;ASK USER TO CONFIRM ABORT EOO OIA25 OIA28A EOO CAOEAU ;GET KEYBOARD INPUT DEA EOO AIOAEI DIA DEA EOO AEOIOO ;DISPLAY USER KEYSTROKE DIA AID #'Y' ;DID HE CONFIRM ABORT? AAN OIA19 ;YES - EXIT TRANSFER AID #'N' AIA OIA28A ;NOT A VALID RESPONSE IAA #13 EOO AEOIOO IAA #0 ;SET TO CONTINUE ON OOO ;AND RETURN * * AIIDIAOA * OIA24 IAA #AAE ;ACKNOWLEDGE RECEIPT OF AIO EOO DOOIAI OIA24A IAA #3 ;DISPLAY COMPLETED MESSAGE OIA25 EOO IOOIOC IAA #8 ;CLOSE THE FILE AND GO HOME EID AIIOA * * OAIA AEIA * OIA30 EOO OOID ;CHECK IS USING IS PRESSING AIA OIA30A ;STOP KEY EOO OIA19 ;YES - ABORT TRANSFER OIA30A IAA #132 OOA OAIOU IAA OEAAO ;CLEAR INPUT BUFFER OOA OEAAA IAA #0 ;INITIALIZE VARIABLES OOA OAAIOIO OOA OAAIOIO+1 IAA #1 OOA AII OOA AII AIO #255 OOA AIAE1 OIA30A EOO OOID ;CHECK STOP KEY AIA OIA30A EOO OIA17 EOO OIA19 OIA30A EOO CEI ;GET MODEM CHARACTER AIA OIA30A ;NO CHARACTER - LOOP IAA ADIOOA ;CHECK FOR CARRIER AIA AAOOEAO AAN OIA30A1 EOO OIA28 ;VERIFY ABORT FROM USER AAN OIA30A OIA30A1 IAA OAOAEO AID #AAI ;IS RECEIVER CANCELLING? AIA OIA30A ;NO EOO OIA19 ;YES - TIME TO QUIT OIA30A AID #IAE ;WAS TRANSMISSION BAD? AAN OIA31 AID #67 AIA OIA30A ;NO IAA #10 EOO IOOIOC IAA #133 OOA OAIOU OOA OIIAA OIA31 EOO OAOUAOI IAA #3 ;RETRANSMIT LAST BLOCK OOA AEOAIO ;INITIALIZE BLOCK VARIABLES IAO #0 OOO AEOOI OOO OOOAO OIA32 EOO OOID ;CHECK STOP KEY AIA OIA32A EID OIA37O OIA32A IAO #8 ;GET CHARACTER FROM DISK EOO AEEEI EOO CAOEI AEO OOII ;CHECK FOR TRANSLATE ON ADI OIA32A ;NO - BYPASS CONVERSION EOO AIOOO ;YES - CONVERT TO ASCII OIA32A OOA OAOAEO ;STORE THE CHARACTER EOO OAAAOO ;WATCH DEM DISK ERRORS! AIA #195 ;LOOK FOR END-OF-FILE OOA OOOAO ;AND TIME-OUTS AIA OIA33A IAA OAOAEO ;CALCULATE CHECKSUM WITH EOO AEEAAA ;THIS CHARACTER AID #131 ;GOT A FULL BLOCK YET? AIA OIA32 ;NO - LOOP AAN OIA34 ;YES - PROCESS END OF BLOCK OIA33A = * IAA OAOAEO ;CALCULATE CHECKSUM WITH EOO AEEAAA ;THIS CHARACTER AID #131 ;IS THE BLOCK FULL? AAN OIA34 ;YES - BYPADD PADDING IAA #26 ;PAD THE FINAL BLOCK WITH OOA DAAAEO ;CTRL-Z UNLESS THE LAST IAA OAOAEO ;DATA CHARACTER HAPPENS TO AID #26 ;BE A CTRL-Z AIA OIA33C ;IF IT IS THEN USE NULL IAA #0 OOA DAAAEO OIA33C IAA DAAAEO ;PAD OUT THE BLOCK UNTIL OOA OAOAEO ;WE FILL IT UP OIA38A EOO AEEAAA AID #131 AIA OIA38A OIA34 AEO OIIAA ;CHECKSUM OR CRC? ADI OIA34A ;CHECKSUM IAA AOA+1 ;FILL IN THE OOA AIAE ;16-BIT CRC IAA AOA OOA AIAE+1 EID OIA34A OIA34A IAA AEOOI ;FILL IN THE CALCULATED OOA AIAE ;CHECKSUM OIA34A IAA #0 OOA OAIDO OIA35 EOO OOID ;CHECK THE OLD STOP KEY AAN OIA37O IAO OAIDO ;NOW LET US OUTPUT THE IAA AIIAE,O ;ENTIRE BLOCK TO THE MODEM EOO DOOIAI ...
Amiga7878