home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
burroughs6800
/
b68ker.ndl
< prev
next >
Wrap
Text File
|
2020-01-01
|
90KB
|
1,117 lines
% %18000000
% DEFINITIONS FOR APPLE PROTOCOL (WITHIN TTY REQUESTS) %18000100
% %18000200
DEFINE 18000300
UPLOADBLOCKING= 14 # % NUMBER OF RECORDS PER BLOCK 18000400
% FOR UPLOADING, MINUS 1 18000500
, APPLETRANSNO = TALLY[0]# 18000700
, APPLECODE = TALLY[2]# 18000900
, DEQUEUE = APPLETRANSNO [5] # 18001000
, BREAKNOTICE = APPLETRANSNO [6] # 18001100
, WAIT4QUEUED = APPLETRANSNO [7] # 18001200
, STOPONBRK = BREAK:STOPPED # 18001300
, APPLESWITCHBASE (X, Y) 18001400
= BREAK : STOPPED 18001500
, LOSSOFCARRIER : STOPPED 18001600
, BUFOVFL : X 18001700
, STOPBIT : X 18001800
, Y 18001900
# 18002000
, APPLESW97 = APPLESWITCHBASE ( NULL 18002100
, TIMEOUT : STOPPED 18002200
) 18002300
# 18002400
, APPLEERRSW(X,Y)= APPLESWITCHBASE (X,Y) # 18002500
, XMIT(X) = BEGIN 18002600
CRC[0] = CRC[0] + X. 18002700
CHAR= X OR 4"80". % SET PARITY BIT 18002800
TRANSMIT [STOPONBRK]. 18002900
END 18003000
# 18003100
, XMITONE = XMIT(CHAR) # 18003200
, SENDTRANSNO = BEGIN 18003300
CHAR = APPLETRANSNO AND 4"0F". % STRIP OFF [7:4] 18003400
CHAR = CHAR + 4"41". % THIS MAKES ASCII A-P FROM 018003500
XMITONE. 18003600
END 18003700
# 18003800
, SENDHEXCHAR(X)=BEGIN 18003900
IF X >9 THEN CHAR = X + 4"37" %ASCII A-F 18004000
ELSE CHAR = X OR 4"30". %ASCII 0-9 18004100
XMITONE. 18004200
END 18004300
# 18004400
, SENDCRC = BEGIN 18004500
CRC[1] = CRC[0] AND 4"0F". 18004600
CRC[0] = CRC[0] ASR 4. 18004700
SENDHEXCHAR (CRC[0]). 18004800
SENDHEXCHAR (CRC[1]). 18004900
END. 18005000
# 18005100
, SENDPADDING = TRANSMIT "BB" [STOPONBRK] # 18005200
, REPLY (TYPE, FATAL) = % SEND ACKNOWLEDGEMENT OR 18005300
BEGIN % CONTROL MSG TO APPLE 18005400
CODE = ASCII. 18005500
INITIATE TRANSMIT. 18005600
CRC[0] = 0. 18005700
SENDPADDING. 18005800
CODE = BINARY. 18005900
XMIT (ASCIISTX). 18006000
SENDTRANSNO. 18006100
XMIT (TYPE). 18006200
IF FATAL THEN XMIT(ASCIIA) ELSE XMIT(ASCIIB). 18006300
XMIT (ASCIIETX). 18006400
SENDCRC. 18006500
XMIT (ASCIICR). 18006600
FINISH TRANSMIT. 18006700
END 18006800
# 18006900
, STOPTHEAPPLE = 18007000
BEGIN 18007100
REPLY (ASCIICAN, TRUE). 18007200
CODE=ASCII. 18007300
INITIATE RECEIVE. 18007400
RECEIVE (5 SEC) CHAR [97,END:STOPPED]. 18007500
IF CHAR = "S" THEN 18007600
BEGIN 18007700
RECEIVE (150 MILLI) "TOP" [97, FORMATERR:RETRYSTOP]. 18007800
RECEIVE (150 MILLI) CHAR [97, END: STOPPED]. 18007900
END. 18008000
RETRYSTOP: % TRY TO STOP THE APPLE AGAIN 18008100
DISCARDTHEREST (RETRYSTOP,RETRYSTOP1). 18008200
RETRYSTOP1: 18008220
% TOGGLE LAST BIT OF TRANS NBR: ALTERNATE GOOD AND BAD 18008240
% TRANSMISSION NUMBERS TO SHAKE APPLE LOOSE 18008250
APPLETRANSNO=APPLETRANSNO XOR 1. 18008260
GO STOPAPPLE. % TO TRY AGAIN 18008280
END. 18008300
# 18008400
, IFWRONGTRANSNO= 18008500
CHAR = CHAR - 4"41". %CONVERT FROM 7"A->P" TO 0-F 18008600
IF CHAR < 4"10" THEN 18008700
BEGIN 18008800
CHAR = CHAR XOR APPLETRANSNO. %EXPOSE 18008900
CHAR = CHAR AND 4"0F". %DIFFERENCE 18009000
END. 18009100
IF CHAR NEQ 0 % THEN WE RECEIVED WRONG TRANS # 18009200
# 18009300
, INCREMENTTRANS = 18009400
BEGIN 18009500
APPLETRANSNO = APPLETRANSNO + 1. 18009600
APPLETRANSNO[4] = FALSE. 18009700
END 18009800
# 18009900
, MASKOFFPARITY= CHAR[7] = FALSE # 18010000
, RECEIVEONE(X)= RECEIVE (150 MILLI) CHAR [99,END:X] # 18010100
, IFRECEIVE = RECEIVEONE (NAKEND). 18010200
IF CHAR = 18010300
# 18010400
, DISCARDTHEREST (LOOP, EXIT) = 18010500
BEGIN 18010600
RECEIVEONE (EXIT). 18010700
GO LOOP. 18010800
END 18010900
# 18011000
, STOPORSKIPPADDING (WHENSTOP) = 18011100
IF CHAR = "A" THEN % SKIP INITIAL "A"S WHICH ARE 18011200
BEGIN % PADDING INSERTED BY APPLE 18011300
SKIPFIRSTAS: 18011400
IFRECEIVE "A" THEN GO SKIPFIRSTAS. 18011500
END 18011600
ELSE 18011700
IF CHAR = "S" THEN 18011800
BEGIN 18011900
IFRECEIVE "T" THEN 18012000
BEGIN 18012100
IFRECEIVE "O" THEN 18012200
BEGIN 18012300
IFRECEIVE "P" THEN 18012400
BEGIN 18012500
RECEIVEONE (STOPRECEIVED). 18012600
IF FALSE THEN 18012700
BEGIN 18012800
STOPRECEIVED: WHENSTOP. 18012900
END.END.END.END.END 18013000
# 18013100
. 18013200
% 18020000
% DEFINES FOR KERMIT REQUESTS (WITHIN TTY REQUESTS) 18020100
% 18020200
DEFINE 18020300
KERCNT = TALLY [0] # 18020400
, KERSEQ = TALLY [3] # 18020500
, KERCHAR(X) = X + 32 # 18020600
, KERUNCHAR(X) = X - 32 # 18020700
, KERCTL(X) = X XOR 64 # 18020800
, KERRCV = RECEIVE (50 MILLI) # 18020900
, KERRCVCHAR = KERRCV CHAR # 18021000
, KERCALCBCC = 18021100
BEGIN 18021200
KERCNT = CRC[0] AND 4"C0". 18021300
KERCNT = KERCNT ASR 6. 18021400
CRC[0] = CRC[0] + KERCNT. 18021500
CRC[0] = CRC[0] AND 4"3F". 18021600
CRC[0] = KERCHAR (CRC[0]). 18021700
END # 18021800
, KERPKTHEAD (CNT,TYPE) = 18021900
BEGIN 18022000
INITIATE TRANSMIT. 18022100
KERTRANSMIT(SOH). % SEND MARK 18022200
KERTRANSMIT(CNT). % SEND COUNT 18022300
CHAR = KERSEQ. 18022400
KERTRANSMIT(CHAR). % SEND SEQ 18022500
CRC[0] = CNT + CHAR. 18022600
KERTRANSMIT(TYPE). 18022700
CRC[0] = CRC[0] + CHAR. 18022800
END # 18022900
, KERPKTTAIL = 18023000
BEGIN 18023100
KERCALCBCC. 18023200
CHAR = CRC[0]. 18023250
KERTRANSMIT(CHAR). 18023300
IF CHAR = 4"20" THEN KERTRANSMIT(4"58"). % BUG IN ALTOS18023400
KERTRANSMIT(CR). 18023500
FINISH TRANSMIT. 18023600
END # 18023700
, KERREPLY (TYPE) = % SEND AN EMPTY PACKET (E.G. ACK, NAK, BRK) 18023800
BEGIN 18023900
KERPKTHEAD (4"23",TYPE). 18024000
KERPKTTAIL. 18024100
CODE=ASCII 18024200
END # 18024300
. 18024400
22000000
REQUEST READTELETYPE: %************************************************22000200
% TOG 0 NEW LINE 22000400
% TOG 1 CR REQUIRED FOR NEW LINE 22000600
% TOG 2 READ PAPER TAPE 22000800
% TOG 3 ERROR TERMINATION READING PAPER TAPE 22001000
% TOG 4 TURN OFF SEQUENCE MODE 22001200
% TOG 5 PAPERMOTION=TRUE ON LAST OUTPUT 22001400
% TOG 6 END OF PAPER TAPE PUNCH 22001600
% TOG 7 PUNCH PAPER TAPE HEADER 22001800
% CRC 0 TEMPORARY COUNTER 22002000
% CRC 1 TEMPORARY CHARACTER STORAGE 22002200
% TALLY 0 APPLE FILE XFER PROTOTOL XMISSION # 22002400
% TALLY 1 ***** AVAILABLE ***** 22002600
% TALLY 2 APPLE/KERMIT PROTOCOL CONTROL INFO 22002800
%***********************************************************************22003000
DEFINE 22003200
TURNOFFSEQUENCE = TOG[4]#. 22003400
ERROR[0] = 22003600
STOPBIT:STOPBITERR, 22003800
BUFOVFL:BUFOVFLERR, 22004000
BREAK:BROKEN. 22004200
22004400
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22004600
% APPLE PROTOCOL 22004800
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22005000
22005200
DEFINE BEIMPATIENT = APPLECODE [3] # %%%%%%%%%% 22005400
, EOTFOUND = APPLECODE [3] # % DEFINE 22005600
, REPORTDOWNRESULT = APPLECODE [2] # % BITS 22005800
, GETFILENAME = APPLECODE [1] # % IN 22006000
, UPLOADING = APPLECODE [0] # % APPLECODE 22006200
22006400
, FIRSTRECEIVE (TIME,ONEND)= 22006600
RECEIVE (TIME) CHAR [98, END:ONEND 22006800
,CONTROL:CONTROLMSGRECD 22007000
,WRU :CONTROLMSGRECD 22007200
] 22007400
# 22007600
, RECEIVEFIRSTCHAR (TIMELIMIT) = 22007800
FIRSTRECEIVE (TIMELIMIT,STOPPED) # 22007900
, RECEIVECHAR(X) = 22008000
BEGIN 22008200
RECEIVEONE (X). 22008400
MASKOFFPARITY. 22008600
CRC[0] = CRC[0] + CHAR 22008800
END 22009000
# 22009200
, GETHEXCHAR = 22009400
BEGIN 22009600
RECEIVEONE (NAKIT). 22009800
MASKOFFPARITY. 22010000
CHAR = CHAR - 4"30". 22010200
IF CHAR > 9 THEN CHAR = CHAR - 7. % FOR A-F 22010400
IF CHAR > 4"0F" THEN GO BADTEXT. 22010600
END 22010800
# 22011000
, STOREX(X) = STORE X [ENDOFBUFFER : NAKIT] # 22011200
, REPEATTILFULL = 22011400
IF LINECOUNT = UPLOADBLOCKING THEN 22011600
GO RETURNMSG 22011800
ELSE 22012000
BEGIN 22012200
LINECOUNT = LINECOUNT +1. 22012400
GO NEXTDATABLOCK 22012600
END 22012800
# 22013000
. 22013200
% KERMIT DEFINES: 22013210
DEFINE KPKTRCV = 22013215
BEGIN 22013220
KERRCVCHAR [150]. 22013225
CRC[0] = CRC[0] + CHAR. 22013230
END # 22013235
, KERTRANSMIT(WHAT) = TRANSMIT WHAT [BREAK: KBROKEN] # 22013240
, ENFORCEHALFDUP (AGAIN,NEXT) = 22013245
BEGIN 22013250
KERRCVCHAR [BREAK: KBROKEN, BUFOVFL: NULL 22013252
,STOPBIT:NULL, TIMEOUT:NEXT]. 22013255
GO AGAIN 22013260
END # 22013265
. 22013270
ERROR[97] = APPLESW97. 22013400
ERROR[98] = APPLEERRSW (SKIPFIRSTAS,TIMEOUT:NAKIT ). 22013600
ERROR[99] = APPLEERRSW (BADTEXT,TIMEOUT:STOPPED). 22013800
ERROR [150] = BREAK: KBROKEN ,BUFOVFL: KNAK 22013810
,STOPBIT:KNAK ,TIMEOUT: KNAK . 22013820
22014000
CODE=ASCII. 22014005
IF DEQUEUE THEN 22014010
BEGIN 22014015
DEQUEUE=FALSE. 22014020
BREAK[TRANSMIT]=TRUE. 22014025
TERMINATE ERROR. 22014030
END. 22014035
IF APPLECODE = 4"FF" THEN % KERMIT AUTO RCV DATA MODE 22014045
%%%%%%%%%%%%%%%%%%% 22014050
% KERMIT AUTO RECEIVE -- FOR RECEIVING AND ACKING KERMIT 22014055
% "D" PACKETS, UNTIL SOME OTHER PACKET 22014060
% COMES ALONG 22014065
%%%%%%%%%%%%%%%%%% 22014070
BEGIN 22014075
APPLECODE = 0. % ONLY STAY IN RCV MODE IF SPECIFICALLY OK TO DO SO22014080
INITIATE RECEIVE (NULL). 22014085
KERCNT = 2. % ALLOW 1 RETRY LOOKING FOR SOH 22014090
KWAIT1: 22014095
IF KERCNT=0 THEN GO RECVCHAR % DROP OUT OF AUTO RCV 22014100
ELSE 22014105
BEGIN 22014110
RECEIVE (5 SEC) CHAR [BREAK:RECVCHAR % DROP OUT OF AUTO RCV 22014115
,BUFOVFL:KWAIT1, STOPBIT:KWAIT1 22014120
,TIMEOUT:KSENDNAK 22014125
,SOH: KSTARTPKT 22014130
,CONTROL: CONTROLMSGRECD]. 22014132
KWAIT2: KERRCVCHAR [BREAK:BROKEN % DROP OUT OF AUTO RECV 22014135
,BUFOVFL: KWAIT1, STOPBIT:KWAIT2, TIMEOUT: KWAIT3 22014140
,SOH: KSTARTPKT]. 22014145
GO KWAIT2. % KEEP LOOKING FOR SOH 22014150
KWAIT3: KERCNT= KERCNT-1. % DECREMENT SOH WAIT RETRY COUNT 22014155
GO KWAIT1. 22014160
KSTARTPKT: % SOH HAS BEEN RECEIVED: RECEIVE PACKET 22014165
CODE=BINARY. % PREVENT TRANSLATION TO EBCDIC 22014170
CRC[0]=0. 22014175
KPKTRCV. % GET COUNT 22014180
KERCNT= KERUNCHAR (CHAR). 22014185
KERCNT= KERCNT -3. % NUMBER CHARACTERS OF DATA 22014190
KPKTRCV. % GET SEQ 22014195
GETSPACE [KNAK]. 22014200
IF CHAR = KERSEQ THEN 22014205
BEGIN 22014210
KPKTRCV. % GET TYPE 22014215
IF CHAR = 4"44" THEN % "D" PACKET 22014220
BEGIN 22014225
STORE 4"BF". % MARK AS NDL PROCESSED "D" PKT 22014230
KGETDATA: IF KERCNT NEQ 0 THEN % PACKET DATA LOOP 22014235
BEGIN 22014240
KPKTRCV. 22014245
KERCNT= KERCNT - 1. 22014250
IF CHAR = 4"23" THEN % # = QUOTE FOR CNTL CHAR 22014255
IF KERCNT > 0 THEN % WHICH IT SHOULD BE 22014260
BEGIN 22014265
KPKTRCV. % GET QUOTED CHAR 22014270
KERCNT= KERCNT -1. 22014275
IF CHAR NEQ 4"23" THEN % NOTE: "##"="#"22014280
CHAR= KERCTL(CHAR). 22014285
END. 22014290
STORE. 22014295
GO KGETDATA. % LOOP FOR MORE 22014300
END. 22014305
KERRCVCHAR [150]. % GET CRC[0] 22014310
KERCALCBCC. % COMPARE OUR BCC WITH REMOTE'S 22014315
IF CRC[0]=CHAR THEN % BCC OK 22014320
BEGIN 22014325
KACK: ENFORCEHALFDUP (KACK,KSENDACK). 22014330
KSENDACK: KERREPLY (4"59"). % SEND "Y" PKT 22014335
IF KERSEQ = 4"5F" THEN KERSEQ= 4"20" % FOLD SEQ22014340
ELSE KERSEQ= KERSEQ+1. % INCREMENT SEQ 22014345
APPLECODE=4"FF". % STAY IN AUTO RCV MODE 22014350
END 22014355
ELSE % BAD BCC 22014360
IF RETRY = 0 THEN % TOO MANY NAKS 22014365
BEGIN 22014370
KBRK: ENFORCEHALFDUP(KBRK,KSENDBRK). 22014375
KSENDBRK: KERREPLY (4"42"). % SEND "B" PKT 22014380
INITIALIZE TEXT. % SEND FAKE "B" PKT TO PGM 22014385
STORE SOH. 22014390
STORE 4"23". % PKT LENGTH 22014395
CHAR= KERSEQ. 22014396
STORE. % SEQ # 22014400
STORE 4"42". % "B" 22014405
CHAR = CRC[0]. % BCC IS: 22014406
STORE. % SAME AS IN PKT SENT TO RMT 22014410
END 22014415
ELSE % RETRY NOT EXHAUSTED-- SEND NAK PKT 22014420
BEGIN 22014425
KNAK: ENFORCEHALFDUP(KNAK,KSENDNAK). 22014430
KSENDNAK: KERREPLY(4"4E"). % SEND "N" PKT 22014435
RETRY= RETRY - 1. 22014440
APPLECODE=4"FF". % STAY IN AUTO RCV 22014445
KERCNT=0. 22014446
TERMINATE NOINPUT. 22014450
END. END 22014455
ELSE % NOT "D" PKT 22014460
BEGIN 22014465
CRC[0]= CHAR. % SAVE PACKET TYPE 22014470
STORE SOH. 22014475
KERCNT= KERCNT + 3. % RESTORE COUNT 22014480
CHAR= KERCHAR(KERCNT). 22014485
STORE. 22014490
CHAR= KERSEQ. 22014492
STORE. % SEQ # 22014495
CHAR= CRC[0]. % HOLDS PACKET TYPE 22014500
STORE. 22014502
KRCVTEXT: CODE=ASCII. 22014505
KERCNT=0. 22014506
GO RECVTEXT. % GET REST OF PACKET 22014510
END.END 22014515
ELSE % MIS-MATCHED SEQ 22014520
BEGIN 22014525
IF CHAR = 4"5F" AND KERSEQ = 4"20" THEN % WAS REXMITTED22014530
BEGIN 22014535
KERSEQ= 4"5F". 22014540
GO KRTXACK. 22014545
END 22014550
ELSE % NOT RETRANSMIT OF FOLLOWED BY SEQ FOLD AROUND 22014555
BEGIN 22014560
CHAR = CHAR + 1. % BUMP UP RECEIVED PACKET # 22014565
IF CHAR = KERSEQ THEN % PACKET WAS RETRANSMITTED 22014570
BEGIN 22014575
KERSEQ= KERSEQ - 1. % BACK UP OUR PACKET COUNT 22014580
KRTXACK: STORE 4"BF". % RETURN EMPTY PACKET TO PGM 22014585
GO KACK. % RE-ACK THE PACKET 22014590
END 22014595
ELSE % NOT A RETRANSMITTED PACKET 22014600
BEGIN 22014605
KPKTRCV. % GET TYPE 22014610
IF CHAR = 4"53" THEN % "S" PKT 22014615
% SEND GARBAGE TO PGM - THEN WAIT FOR 22014620
% RETRANSMIT OF "S" PACKET 22014625
GO KRCVTEXT 22014630
ELSE % STRAY PACKET -- NAK IT 22014635
GO KNAK. 22014640
END.END.END. 22014645
CODE = ASCII. % NORMAL EXIT 22014650
INITIALIZE RETRY. 22014655
KERCNT= 0. 22014656
GO RETURNMSG. 22014660
KBROKEN: 22014665
CODE=ASCII. 22014670
GO BROKEN. 22014675
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22014680
END.END % OF KERMIT AUTO RECIEVE 22014685
% 22014690
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22014695
ELSE % NORMAL APPLE CODE HERE 22014700
IF APPLECODE NEQ 0 THEN 22014710
BEGIN 22014720
IF BREAKNOTICE AND NOT WAIT4QUEUED THEN 22014800
% WE HAVE TO NOTIFY PROGRAM OF BREAK 22015000
BREAKNOTICE = FALSE % AND THEN GO STOPPED 22015200
ELSE 22015400
IF REPORTDOWNRESULT THEN 22015600
IF APPLECODE = 4"04" THEN % NO OTHER BITS SET (NO ERRS) 22015800
BEGIN 22016000
GETSPACE [TRYAGAIN]. 22016200
STORE DOWNLOADEDOK [ENDOFBUFFER:TRYAGAIN]. 22016400
GO FINISHEDREQUEST. 22016600
END 22016800
ELSE % GO STOPPED 22017000
ELSE 22017200
BEGIN 22017400
LINECOUNT = 0. 22017600
IF GETFILENAME AND BEIMPATIENT THEN RETRY=100. 22017800
NEXTDATABLOCK: 22018000
CODE = ASCII. 22018200
IF GETFILENAME THEN 22018400
BEGIN 22018600
IF WAIT4QUEUED THEN % GO TO XMIT REQUEST ONCE 22018800
BEGIN % SOMETHING IS QUEUED 22019000
LINE(BUSY) = FALSE. 22019200
IF STATION(QUEUED) THEN 22019400
TERMINATE NOINPUT. 22019600
END. 22019800
INITIATE RECEIVE (NULL). 22020000
IF BEIMPATIENT THEN % WE MAY HAVE MISSED THE 22020200
BEGIN % TRANSMISSION, IN WHICH CASE 22020400
APPLETRANSNO = 0. % WE CAN PROD THE APPLE TO 22020600
FIRSTRECEIVE (10 SEC, SKIPFIRSTSTOP). % SEND ANOTHER 22020800
IF FALSE THEN %ONLY IF WE GOT A CR ABOVE 22020840
BEGIN 22020860
SKIPFIRSTSTOP: RECEIVE (150 MILLI) "STOP" [99,FORMATERR:STOPPED]. 22020880
RECEIVE (150 MILLI) CHAR [97,END:STOPSKIPPED]. 22020900
GO STOPPED. % WASN'T A CR 22020920
STOPSKIPPED: RECEIVEFIRSTCHAR(NULL). 22020940
END. 22020960
BEIMPATIENT = FALSE. 22021000
END 22021200
ELSE RECEIVEFIRSTCHAR (NULL). 22021400
INITIALIZE RETRY. 22023400
LINE(BUSY) = TRUE. 22023600
END 22023800
ELSE 22024000
BEGIN 22024200
INITIATE RECEIVE (NULL). 22024400
RECEIVEFIRSTCHAR (5 SEC). 22024600
END. 22024800
STOPORSKIPPADDING (GO STOPPED). 22025000
IF WAIT4QUEUED THEN % WE WANT TO DETECT A "STOP" OR MANUAL 22025200
IGNORETHEREST: % KEYIN, BUT IGNORE ANYTHING ELSE 22025400
DISCARDTHEREST(IGNORETHEREST,TRYAGAIN) 22025600
ELSE GETSPACE [TRYAGAIN]. 22025800
ISTHISSTX: 22026000
IF CHAR=STX THEN 22026200
BEGIN 22026400
STXFOUND: CODE=BINARY. 22026600
CRC[0] = CHAR. 22026800
RECEIVECHAR (NAKIT). 22027000
IF GETFILENAME THEN 22027200
BEGIN 22027400
APPLETRANSNO= CHAR-4"41". 22027600
APPLETRANSNO= APPLETRANSNO AND 4"0F". 22027800
% NOTE THAT BITS 4-7 ARE ZEROED -- 22028000
% BEWARE OF BOOLEANS USING THESE BITS. 22028200
END 22028400
ELSE 22028600
BEGIN 22028800
IFWRONGTRANSNO THEN GO BADTEXT. 22029000
END. 22029200
RECEIVECHAR (NAKIT). 22029400
IF CHAR = ASCIICAN OR CHAR = ASCIISI THEN 22029600
CANNED: DISCARDTHEREST (CANNED,STOPAPPLE) 22029800
ELSE 22030000
IF CHAR = ASCIIACK OR CHAR = ASCIINAK THEN 22030200
GO BADTEXT 22030400
ELSE 22030600
IF CHAR = ASCIISOH THEN % FILE NAME FOLLOWS 22030800
IF GETFILENAME THEN % THIS IS WHAT WE WANT 22031000
BEGIN 22031200
STOREX (FILEFOLLOWS). 22031400
RECEIVECHAR(NAKIT). % PREPARE TO TRANS- 22031600
END % FER TEXT 22031800
ELSE GO NAKIT % UNEXPECTED 22032000
ELSE % THIS IS A BLOCK OF DATA 22032200
IF GETFILENAME THEN GO NAKIT % UNEXPECTED 22032400
ELSE EOTFOUND=FALSE. 22032600
STORETEXT: IF CHAR = ASCIIEOT THEN EOTFOUND=TRUE. 22032800
STOREX (CHAR). 22033000
RECEIVECHAR (NAKIT). 22033200
IF CHAR NEQ ASCIIETX THEN GO STORETEXT. 22033400
22033600
% CHECK CRC: 22033800
GETHEXCHAR. 22034000
CHAR = CHAR ASL 4. 22034200
CRC[0] = CRC[0] XOR CHAR. %CHECK LEFT 4 BITS 22034400
GETHEXCHAR. 22034600
CRC[0] = CRC[0] XOR CHAR. 22034800
CODE=ASCII. 22035000
IF CRC[0] NEQ 0 THEN 22035200
BEGIN 22035400
EOTFOUND=FALSE. 22035600
BADTEXT: DISCARDTHEREST (BADTEXT, NAKIT) 22035800
END 22036000
ELSE % EVERYTHING REC'D OK 22036200
BEGIN 22036400
RECEIVEONE(GOTIT). 22036600
GO NAKIT. % NOT A CR AT END 22036800
GOTIT: INITIALIZE RETRY. 22037000
IF UPLOADING THEN 22037200
IF EOTFOUND THEN 22037400
BEGIN 22037600
FINISHEDREQUEST: APPLECODE=0. 22037800
GO RETURNMSG 22038000
END 22038200
ELSE 22038400
BEGIN 22038600
STOREX(ASCIICR). % MARK RECORD AS GOOD 22038800
REPLY (ASCIIACK, FALSE). 22039000
INCREMENTTRANS. 22039200
REPEATTILFULL. 22039400
END 22039600
ELSE % GETFILENAME 22039800
BEGIN 22040000
WAIT4QUEUED=TRUE. 22040200
GO RETURNMSG. 22040400
END.END.END 22040600
ELSE IF CHAR=NAK THEN GO BADTEXT 22040800
ELSE % KEEP LOOKING FOR STX 22041000
BEGIN 22041200
RECEIVEONE (NAKEND). 22041400
GO ISTHISSTX. 22041600
END. 22041800
22042000
NAKIT: REPLY (ASCIINAK,FALSE). 22042200
NAKEND: IF RETRY > 0 THEN 22042400
BEGIN 22042600
RETRY=RETRY-1. 22042800
IF UPLOADING THEN 22043000
IF LINECOUNT=0 THEN % NO PRIOR RECORDS TO LOOSE 22043200
GO TRYAGAIN % IN THIS BLOCK 22043400
ELSE 22043600
BEGIN 22043800
STOREX(ASCIIETX). % MARK RECORD AS BAD 22044000
REPEATTILFULL. 22044200
END 22044400
ELSE 22044600
BEGIN 22044800
TRYAGAIN: INITIALIZE TEXT. 22045000
PAUSE. 22045200
GO NEXTDATABLOCK. 22045400
END.END. 22045600
22045800
STOPAPPLE: 22046000
STOPTHEAPPLE 22046200
END. 22046400
STOPPED: 22046600
INITIALIZE TEXT. 22046800
INITIALIZE RETRY. 22047000
PAUSE. 22047200
GETSPACE [STOPPED]. % SIGNAL A BREAK 22047400
STORE ASCIICAN [ENDOFBUFFER:STOPPED]. % CONDITION TO PROGRAM 22047600
CODE=ASCII. 22047800
22048000
GETOUT: 22048200
APPLECODE = 0. 22048400
GO ENDOFINPUT. 22048600
22048800
CONTROLMSGRECD: % SOMEONE KEYED IN A CONTROL MESSAGE -- PASS IT 22049000
LINE(BUSY)=TRUE. % ON TO THE MCS 22049200
APPLECODE = 0. 22049400
GETSPACE [CANTGETSPACE]. 22049600
STORE [ENDOFBUFFER:TOOLONG]. 22049800
BREAKNOTICE=TRUE. 22050000
GO RECVTEXT. 22050200
END. 22050400
22050600
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22050800
% END OF APPLE PROTOCOL 22051000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22051200
22051400
22051600
IF NEWLINE THEN 22051800
BEGIN 22052000
NEWLINE=FALSE. 22052200
SENDCR: 22052400
INITIATE TRANSMIT. 22052600
IF CRREQUIRED THEN 22052800
TRANSMIT CR [BREAK:SENDCR]. 22053000
CRREQUIRED = TRUE. 22053200
WAITFORCR. 22053400
TRANSMIT LF [BREAK:SENDCR]. 22053600
FINISH TRANSMIT. 22053800
END. 22054000
IF SEQUENCE THEN 22054200
BEGIN 22054400
INITIATE TRANSMIT. 22054600
TRANSMIT SEQUENCE [BREAK:TERMSEQMODE]. 22054800
TRANSMIT " " [BREAK:TERMSEQMODE]. 22055000
FINISH TRANSMIT. 22055200
NEWLINE = TRUE. 22055400
TURNOFFSEQUENCE = FALSE. 22055600
CONTROLFLAG = FALSE. 22055800
LINE(BUSY) = FALSE. 22056000
IF STATION(QUEUED) THEN 22056200
TERMINATE NOINPUT. 22056400
INITIATE RECEIVE. 22056600
RECVCHARSEQ: 22056800
RECEIVE(NULL) CHAR [0, 22057000
END:TERMSEQMODE, 22057200
"@":TERMSEQMODE, 22057400
"*":TERMSEQMODE, 22057600
WRU:TERMSEQMODE, 22057800
LINEDELETE:DELETELINE, 22058000
BACKSPACE:RECVCHARSEQ, 22058200
CONTROL:NULL]. 22058400
NEWLINE = FALSE. 22058600
END 22058800
ELSE 22059000
BEGIN 22059200
LINE(BUSY)=FALSE. 22059400
IF STATION(QUEUED) THEN 22059600
TERMINATE NOINPUT. 22059800
INITIATE RECEIVE. 22060000
RECVCHAR: 22060200
RECEIVE (NULL) CHAR [0, 22060400
END:ENDOFINPUT, 22060600
BACKSPACE:RECVCHAR, 22060800
LINEDELETE:RECVCHAR, 22061000
CONTROL:NULL, 22061200
WRU:ENDOFINPUT]. 22061400
END. 22061600
LINE(BUSY) = TRUE. 22061800
GETSPACE[CANTGETSPACE]. 22062000
STORE [ENDOFBUFFER:TOOLONG]. 22062200
RECVTEXT: 22062400
RECEIVE (NULL) TEXT[0 22062600
,ENDOFBUFFER:TOOLONG 22062800
,END 22063000
% , WRU THIS LINE REMOVED 22063200
,BACKSPACE:NULL 22063400
,LINEDELETE:DELETELINE 22063600
]. 22063800
ENDOFTEXT: 22064000
IF CHAR = CR THEN % CR IS END CHAR 22064200
CRREQUIRED = FALSE. 22064400
IF SEQUENCE THEN 22064600
BEGIN 22064800
STORE SEQUENCE. 22065000
IF CONTROLFLAG THEN 22065200
TURNOFFSEQUENCE = TRUE. 22065400
IF TURNOFFSEQUENCE THEN 22065600
SEQUENCE = FALSE 22065800
ELSE 22066000
INCREMENT SEQUENCE[SEQOFLOW]. 22066200
END. 22066400
ENDOFINPUT: 22066600
GETSPACE[CANTGETSPACE]. 22066800
TERMINATE LOGICALACK. 22067000
IF CONTROLFLAG THEN % GOT CONTROL MSG-- WAS IT "?BRK"? 22067010
BEGIN 22067020
FETCH. % IGNORE CONTROL CHAR 22067030
FETCH [ENDOFBUFFER:NOTBRK]. 22067040
PAUSE. 22067050
IF CHAR="B" OR CHAR=4"82" THEN 22067060
BEGIN 22067070
FETCH [ENDOFBUFFER:NOTBRK]. 22067080
IF CHAR="R" OR CHAR=4"99" THEN 22067090
BEGIN 22067100
FETCH [ENDOFBUFFER:NOTBRK]. 22067110
IF CHAR="K" OR CHAR=4"92" THEN 22067120
FETCH [ENDOFBUFFER:FAKEBREAK]. 22067130
END.END.END. 22067140
NOTBRK: 22067150
NEWLINE=TRUE. 22067200
RETURNMSG: 22067400
$ SET OMIT = ENHANCED 22067600
TERMINATE NORMAL. 22067800
$ SET OMIT = NOT ENHANCED 22068000
TERMINATE NORMAL [SYSTEMDOWN:NULL]. 22068200
DELAY (10 MILLI). 22068400
GO RETURNMSG. 22068600
$ POP OMIT OMIT 22068800
$ SET AUXLOGIC=AUXCODE 22069000
SEQOFLOW: 22069200
INITIATE TRANSMIT. 22069400
TRANSMIT SEQOVFLMSG [BREAK:TERMSEQMODE]. 22069600
FINISH TRANSMIT. 22069800
SEQERR = TRUE. 22070000
$ POP AUXLOGIC 22070200
TERMSEQMODE: 22070400
LINE(BUSY) = TRUE. 22070600
GETSPACE[CANTGETSPACE]. 22070800
TURNOFFSEQUENCE = TRUE. 22071000
IF CHAR = "@" THEN 22071200
BEGIN 22071400
STORESPEC: 22071600
STORE [ENDOFBUFFER:TOOLONG]. 22071800
GO TO RECVTEXT. 22072000
END. 22072200
IF CHAR = "*" THEN 22072400
GO TO STORESPEC. 22072600
GO TO ENDOFTEXT. 22072800
$ SET AUXLOGIC=AUXCODE % READTELETYPE STOPBITERR 22073000
STOPBITERR: 22073200
LINE(BUSY) = TRUE. 22073400
INITIATE TRANSMIT. 22073600
TRANSMIT ERRMSG [BREAK:NULL]. 22073800
FINISH TRANSMIT. 22074000
IF RETRY > 0 THEN 22074200
BEGIN 22074400
RETRY = RETRY - 1. 22074600
TERMINATE NOINPUT. 22074800
END. 22075000
TERMINATE ERROR. 22075200
BUFOVFLERR: 22075400
LINE(BUSY) = TRUE. 22075600
DELAY(200 MILLI). 22075800
INITIATE TRANSMIT. 22076000
TRANSMIT BUFOVFLMSG [BREAK:NULL]. 22076200
FINISH TRANSMIT. 22076400
TERMINATE ERROR. 22076600
FAKEBREAK: 22076620
DEQUEUE = TRUE. 22076640
LINE(BUSY) = FALSE. 22076660
TERMINATE NOINPUT. 22076680
$ POP AUXLOGIC 22076800
BROKEN: 22077000
LINE(BUSY) = TRUE. 22077200
BREAK[RECEIVE] = FALSE. 22077400
DELAY(200 MILLI). 22077600
DELETELINE: 22077800
INITIATE TRANSMIT. 22078000
TRANSMIT "DEL" [BREAK:NULL]. 22078200
FINISH TRANSMIT. 22078400
NEWLINE=TRUE. 22078600
TERMINATE NOINPUT. 22078800
$ SET AUXLOGIC=AUXCODE % READTELETYPE TOOLONG 22079000
TOOLONG: 22079200
INITIATE TRANSMIT. 22079400
TRANSMIT OVERFLOWMSG [BREAK:NULL]. 22079600
FINISH TRANSMIT. 22079800
INITIATE RECEIVE. 22080000
RECEIVE (NULL) CHAR [0 22080200
,END:ENDOFINPUT 22080400
,WRU:ENDOFINPUT 22080600
,BACKSPACE:NULL 22080800
,LINEDELETE:DELETELINE 22081000
]. 22081200
GO TO TOOLONG. 22081400
$ POP AUXLOGIC 22081600
CANTGETSPACE: 22081800
INITIATE TRANSMIT. 22082000
IF SYSTEMDUMPING THEN 22082200
TRANSMIT DUMPMSG [BREAK:NULL] 22082400
ELSE 22082600
TRANSMIT WAITMSG [BREAK:NULL]. 22082800
FINISH TRANSMIT. 22083000
NEWLINE=TRUE. 22083200
IF NOT STATION(QUEUED) THEN 22083400
BEGIN 22083600
LINE(BUSY)=FALSE. 22083800
TRYFORSPACE: 22084000
IF NOSPACE THEN 22084200
BEGIN 22084400
RECEIVE (5 SEC) CHAR 22084600
[STOPBIT:NULL 22084800
,BUFOVFL:NULL 22085000
,BREAK:NULL 22085200
,TIMEOUT:TRYFORSPACE 22085400
]. 22085600
GO TO CANTGETSPACE. 22085800
END. 22086000
INITIATE TRANSMIT. 22086200
TRANSMIT OKMSG [BREAK:NULL]. 22086400
FINISH TRANSMIT. 22086600
END. 22086800
TERMINATE NOINPUT. 22087000
%***********************************************************************22087200
22087400
REQUEST WRITETELETYPE: %***********************************************22100000
DEFINE FETCHANOTHER = FETCH [ENDOFBUFFER:NOTAPPLEBLOCK] # 22100200
, IFSENDING = FETCHANOTHER. 22100400
IF CHAR = 22100600
# 22100800
, READYTODOWNLOAD = APPLECODE=READYTODOWNLOADOP # 22101000
, KERTRANSMIT(WHAT) = TRANSMIT WHAT [BREAK:KBROKEN] # 22101010
. 22101200
ERROR[97] = APPLESW97. 22101400
ERROR[98] = APPLEERRSW(SKIPFIRSTAS, TIMEOUT:NAKEND ). 22101600
ERROR[99] = APPLEERRSW(NAKED,TIMEOUT:STOPPED). 22101800
22102000
CODE = ASCII. 22102100
IF DEQUEUE THEN 22102150
BEGIN 22102160
BREAK[TRANSMIT]=TRUE. 22102170
GO BROKEN 22102180
END. 22102190
INITIATE TRANSMIT. 22102200
IF NEWLINE THEN 22102400
BEGIN 22102600
NEWLINE=FALSE. 22102800
IF CRREQUIRED THEN 22103000
TRANSMIT CR [BREAK:BROKEN]. 22103200
CRREQUIRED = TRUE. 22103400
WAITFORCR. 22103600
TRANSMIT LF [BREAK:BROKEN]. 22103800
END. 22104000
IF PAGE THEN 22104200
TRANSMIT FF [BREAK:BROKEN]. 22104400
IF PAPERMOTION THEN 22104600
BEGIN 22104800
PRINTEDAFTER = TRUE. 22105000
MOVEPAPER: 22105200
IF CARRIAGE THEN 22105400
BEGIN 22105600
TRANSMIT CR [BREAK:BROKEN]. 22105800
WAITFORCR. 22106000
END. 22106200
IF LINEFEED THEN 22106400
TRANSMIT LF [BREAK:BROKEN]. 22106600
TEMPCOUNTER = SKIPCONTROL. 22106800
IF TEMPCOUNTER = 0 THEN 22107000
IF PAPERMOTION THEN 22107200
GO TO XMITMSG 22107400
ELSE 22107600
GO TO ENDXMIT. 22107800
IF SKIP THEN 22108000
BEGIN 22108200
SKIPLINES: 22108400
IF TEMPCOUNTER NEQ 0 THEN 22108600
BEGIN 22108800
TRANSMIT VT [BREAK:BROKEN]. 22109000
IF ADAPTER LEQ 6 THEN 22109200
DELAY(100 MILLI). 22109400
END. 22109600
END 22109800
ELSE 22110000
IF SPACE THEN 22110200
BEGIN 22110400
TEMPCOUNTER = TEMPCOUNTER - 1. % 1 LF ALREADY DONE 22110600
SPACELINES: 22110800
IF TEMPCOUNTER NEQ 0 THEN 22111000
BEGIN 22111200
TRANSMIT LF [BREAK:BROKEN]. 22111400
TEMPCOUNTER = TEMPCOUNTER - 1. 22111600
GO TO SPACELINES. 22111800
END. 22112000
END. 22112200
IF NOT PAPERMOTION THEN 22112400
GO TO ENDXMIT. 22112600
END 22112800
ELSE 22113000
IF PRINTEDAFTER THEN 22113200
BEGIN 22113400
TRANSMIT CRNULLF [BREAK:BROKEN]. 22113600
WAITFORCR. 22113800
PRINTEDAFTER = FALSE. 22114000
END. 22114200
TEMPCOUNTER = 0. 22114400
IF NOT CARRIAGE THEN 22114600
BEGIN 22114800
22115000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22115200
% APPLE PROTOCOL 22115400
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22115600
22115800
IF DEQUEUE THEN GO STOPPED. % CLEAR OUT ANY QUEUED MESSAGES 22116000
22116200
STARTAPPLE: 22116400
22116600
APPLECODE=0. 22116800
FETCHANOTHER. 22117000
% KERMIT CODE: 22117005
IF CHAR = 4"BF" THEN 22117010
BEGIN 22117015
FETCHANOTHER. % PAD COUNT 22117020
FETCHANOTHER. % PAD CHAR 22117025
FETCHANOTHER. % COUNT 22117030
FETCHANOTHER. % SEQ 22117035
KERSEQ= CHAR. 22117040
FETCHANOTHER. % TYPE 22117045
FETCH [ENDOFBUFFER: KERISOK]. % SHOULD HAVE END OF BUFFER 22117050
IF FALSE THEN % NORMAL PATH--ENTERED IF JUST ENUF CHARS 22117055
BEGIN 22117060
KERISOK: 22117065
CODE=BINARY. 22117066
KERREPLY (4"59"). % SEND "Y" (ACK) PKT 22117070
IF KERSEQ = 4"5F" THEN KERSEQ= 4"20" % FOLD SEQ 22117075
ELSE KERSEQ= KERSEQ + 1. % INCREMENT SEQ 22117080
APPLECODE= 4"FF". % GO INTO AUTO RCV MODE 22117085
KBROKEN: 22117086
CODE=ASCII. 22117088
GO CHECK4RECV. 22117090
END 22117095
ELSE GO NOTAPPLEBLOCK. % NOT A KERMIT AUTO RECV REQUEST AFTER ALL 22117100
END. 22117105
CHAR = CHAR - 4"B0". 22117200
GO TO CHAR ( B0, B1, B2, B3, B4, B5, B6, B7 22117400
, B8, B9, BA, BB, BC 22117600
). 22117800
IF FALSE THEN 22118000
IF FALSE THEN 22118200
B0: APPLECODE=READYTOUPLOADOP 22118400
ELSE IF FALSE THEN 22118600
B1: 22118800
ELSE IF FALSE THEN 22119000
B2: APPLECODE=READYTODOWNLOADOP 22119200
ELSE IF FALSE THEN 22119400
B3: 22119600
ELSE IF FALSE THEN 22119800
B4: APPLECODE=ABORTOP 22120000
ELSE IF FALSE THEN 22120200
B5: APPLECODE=FINISHUPLOADOP 22120400
ELSE IF FALSE THEN 22120600
B6: APPLECODE=DOWNLOADOP 22120800
ELSE IF FALSE THEN 22121000
B7: APPLECODE=FINISHDOWNLOADOP 22121200
ELSE IF FALSE THEN 22121400
B8: APPLECODE=GETFILEOP 22121600
ELSE IF FALSE THEN 22121800
B9: 22122000
ELSE IF FALSE THEN 22122200
BA: % APPLECODE=UPLOADOP % THIS IS NO LONGER SENT TO NDL 22122400
ELSE IF FALSE THEN 22122600
BB: 22122800
ELSE IF FALSE THEN 22123000
BC: APPLECODE=PROMPTOP 22123200
. 22123400
IF APPLECODE NEQ 0 THEN 22123600
BEGIN % AN APPLE REQUEST HAS BEEN MADE: 22123800
WAIT4QUEUED=FALSE. % WE'VE BEEN WAITING TO GET HERE!!! 22124000
IF BREAKNOTICE THEN % NOTIFY PGM THAT A BRK HAS OCCURED 22124200
BEGIN 22124400
BREAKNOTICE=FALSE. 22124600
GO STOPPED 22124800
END 22125000
ELSE 22125200
IF APPLECODE GEQ 4"10" THEN 22125400
BEGIN 22125600
IF APPLECODE GEQ 4"40" THEN 22125800
BEGIN 22126000
CRC[0] = 0. 22126200
SENDPADDING. 22126400
CODE=BINARY. 22126600
XMIT(ASCIISTX). 22126800
IF READYTODOWNLOAD THEN INCREMENTTRANS. 22127000
SENDTRANSNO. 22127200
IF APPLECODE[7] THEN %XMIT CAN OR ACK 22127400
BEGIN 22127600
IF APPLECODE[6] THEN % CAN 22127800
BEGIN 22128000
XMIT(ASCIICAN). 22128200
IF APPLECODE[5] THEN XMIT(ASCIIB) %PROMPT MSG 22128400
ELSE XMIT(ASCIIA). %FATAL MESSAG22128600
APPLECODE = APPLECODE AND 4"1F" 22128800
END 22129000
ELSE % ACK 22129200
BEGIN 22129400
XMIT(ASCIIACK). 22129600
IF APPLECODE[4] THEN 22129800
IF APPLECODE[5] THEN % READYTODOWNLOAD 22130000
ELSE XMIT(ASCIIB) % FINISHUPLOAD 22130200
ELSE XMIT(ASCIIB ). % READYTOUPLOAD 22130400
APPLECODE[7]=APPLECODE[5]. %SET PATIENCE BIT 22130600
APPLECODE =APPLECODE AND 4"9F" 22130800
END.END. 22131000
XMITTEXT: FETCH [ENDOFBUFFER:ENDOFTEXT]. 22131200
XMIT(CHAR). 22131400
GO XMITTEXT. 22131600
ENDOFTEXT: IF APPLECODE[5] THEN XMIT(ASCIIEOT). 22131800
XMIT(ASCIIETX). 22132000
SENDCRC. 22132200
XMIT(ASCIICR). 22132400
CODE=ASCII. 22132600
FINISH TRANSMIT. 22132800
IF NOT APPLECODE[4] THEN GO ENDACK. 22133000
END. 22133200
IF APPLECODE[4] THEN % NEED SOME ACKNOWLEDGEMENT 22133400
BEGIN 22133600
IF TRUE THEN 22133700
BEGIN 22133750
INITIATE RECEIVE. 22133800
RECEIVE (NULL ) CHAR [98,END:STOPPED]. 22134200
APPLECODE=APPLECODE AND 4"1F" %STRIP OFF XMIT CODE 22134600
END 22134610
ELSE 22134620
WAITFORNEXTREPLY: 22134640
RECEIVE (20 SEC) CHAR [98,END:STOPPED]. 22134660
STOPORSKIPPADDING (IF APPLECODE[3] THEN 22134800
GO ENDACK 22135000
ELSE GO STOPPED 22135200
). 22135400
ISTHISSTX: 22135600
IF CHAR = STX THEN 22135800
BEGIN 22136000
STXFOUND: CODE=BINARY. 22136200
RECEIVEONE(NAKEND). 22136400
MASKOFFPARITY. 22136600
CODE=ASCII. 22136800
IFWRONGTRANSNO THEN % WRONG TRANS # 22137000
GO NAKED 22137200
ELSE 22137400
BEGIN 22137600
RECEIVEONE(NAKEND). 22137800
IF CHAR = ACK THEN 22138000
BEGIN 22138200
ACKED: DISCARDTHEREST(ACKED,ACKEND). 22138400
ACKEND: IF APPLECODE[3] THEN GO NAKEND. 22138600
ENDACK: INITIALIZE RETRY. 22138800
INCREMENTTRANS. 22139000
IF APPLECODE[4] AND NOT APPLECODE[3] THEN 22139200
BEGIN % (DOWNLOADING) 22139400
APPLECODE=0. 22139600
GO RETURNMSG 22139800
END. 22140000
APPLECODE=APPLECODE AND 4"07". %STRIP OFF 22140200
% XMIT CODES AND ERR INDICATOR (BIT #3) 22140400
GO CHECK4RECV 22140600
END 22140800
ELSE 22141000
BEGIN 22141200
IF CHAR = CAN THEN 22141400
CANNED: DISCARDTHEREST(CANNED,STOPAPPLE) 22141600
ELSE % EITHER A NAK OR 22141800
% SOMETHING UNEXPECTED 22142000
BEGIN 22142200
NAKED: DISCARDTHEREST(NAKED,NAKEND). 22142400
NAKEND: IF RETRY > 0 THEN 22142600
BEGIN 22142800
RETRY = RETRY - 1. 22143000
CODE=ASCII. 22143200
TERMINATE NOINPUT 22143400
END.END. 22143600
STOPAPPLE: % TELL APPLE TO GO AWAY: 22143800
STOPTHEAPPLE. 22144000
END.END.END 22144200
ELSE IF CHAR = NAK THEN GO NAKED 22144400
ELSE 22144600
BEGIN 22144800
RECEIVEONE (WAITFORNEXTREPLY). 22145000
GO ISTHISSTX 22145200
END. 22145400
STOPPED: 22145600
BREAK[TRANSMIT] = TRUE. 22145800
CODE = ASCII. 22146000
DEQUEUE=TRUE. 22146200
IF APPLECODE=DOWNLOADOP OR APPLECODE=FINISHDOWNLOADOP THEN 22146400
BREAKNOTICE=TRUE 22146600
ELSE APPLECODE=APPLECODE AND 4"0F". % MASK OFF XMIT CODES 22146800
GO BROKEN. 22147000
END.END. 22147200
CHECK4RECV: 22147400
IF APPLECODE NEQ 0 THEN 22147600
BEGIN 22147800
DEQUEUE=TRUE. % ACCEPT NO MORE TRANSMISSIONS UNTIL 22148000
INITIALIZE RETRY % THIS REQUEST HAS BEEN SERVICED 22148200
END. 22148400
GO ENDXMIT 22148600
END. 22148800
22149000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22149200
% END OF APPLE PROTOCOL 22149400
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22149600
22149800
NOTAPPLEBLOCK: 22150000
INITIALIZE TEXT. 22150200
TRANSMIT TEXT[BREAK:BROKEN]. 22150400
GO TO ENDOFMSG. 22150600
END. 22150800
XMITMSG: 22151000
FETCH[ENDOFBUFFER:ENDOFMSG]. 22151200
DELETEBLANKS(TEMPCOUNTER,TEMPSTORAGE,BROKEN). 22151400
IF CHAR = CR THEN 22151600
WAITFORCR. 22151800
GO XMITMSG. 22152000
ENDOFMSG: 22152200
IF NOT PAPERMOTION THEN 22152400
GO TO MOVEPAPER. 22152600
ENDXMIT: 22152800
FINISH TRANSMIT. 22153000
RETURNMSG: 22153200
$ SET OMIT = ENHANCED 22153400
TERMINATE NORMAL. 22153600
$ SET OMIT = NOT ENHANCED 22153800
TERMINATE NORMAL [SYSTEMDOWN:NULL]. 22154000
DELAY (10 MILLI). 22154200
GO RETURNMSG. 22154400
$ POP OMIT OMIT 22154600
BROKEN: 22154800
NEWLINE=TRUE. 22155000
DEQUEUE=TRUE. 22155100
BREAK[TRANSMIT]=TRUE. 22155150
TERMINATE ERROR. 22155200
%***********************************************************************22155400
22155600