* MACHINE DEPENDENT ROUTINES FOR KERMIT * SET FLAGS 1 FOR DIAGNOSTIC VERSION XDEF SYSINI,SYSINIT SYSTEM INITIALIZATION XDEF SYSFIN,SYSFIN SYSTEM FINISH UP XDEF GETIN,GETIN GET INPUT CHARACTER XDEF XMTCHA,XMTCHAR TRANSMIT OUTPUT CHARACTER XDEF CONNEC,CONNECT TALK TO REMOTE COMPUTER XDEF SLEEP,SLEEP DELAY FOR GIVEN NUMBER OF SECONDS XDEF TTYRAW,RAW PUT CONSOLE IN CHARACTER BY CHARACTER I/O XDEF TTYCOO,COOKED PUT CONSOLE IN NORMAL MODE XDEF FILECR,CREATE CREATE A FILE XDEF FLUSH,FLUSH FLUSH OUTPUT BUFFER XDEF FIXNAM,FIXNAME REMOVE QUALIFIER FROM FILE NAME BUFSIZE EQIV 54 WORDS IN A BUFFER SKFZ B1 COMM /KERMIT/RLCCNT,RLBUF(54),LRCCNT,LRBUF(54) * RLCCNT = REMOTE TO LOCAL CHARACTER COUNT * RLBUF = REMOTE TO LOCAL BUFFER * LRCCNT = LOCAL TO REMOTE CHARACTER COUNT * LRBUF = LOCAL TO REMOTE BUFFER MCOM KERMIT ESKP REEN SYSINIT TJM RETURN SAVE RETURN ADDRESS TNK '0313 OPEN TERMINAL OUPUT BLU $I/O SKFZ B1 TNK '0613 OPEN DIAGNOSTIC OUTPUT BLU $I/O TLO SYSINIC REPORT CALL BLJ REPORT ESKP BUC* RETURN AND RETURN SKFZ B1 PORG * SYSINIC DATA '0302 DAC SYSINIE-SYSINIB DAC SYSINIB RORG * SYSINIB DATA " SYSINIT CALLED" SYSINIE EQIV * * REPORT TJM REPJ SAVE RETURN TKM REPK SAVE PARAMETER LIST POINTER TOA '0302 SEND TO TERMINAL TAM 0,K BLU $IOW TMK REPK TOA '0602 SEND TO LO FILE TAM 0,K BLU $IOW BUC* REPJ PORG * REPJ DAC *-* RETURN FROM REPORT REPK DAC *-* PARAMETER LIST POINTER LOCAL DATA 0 0=REMOTE (I.E. HOST), OTHER=LOCAL RORG * * SYSFIN TJM RETURN SAVE RETURN ADDRESS TLO SYSFINC REPORT CALL BLJ REPORT BUC* RETURN AND RETURN PORG * SYSFINC DATA '0302 DAC SYSFINE-SYSFINB DAC SYSFINB SYSFINB DATA " SYSFIN CALLED: " SYSFINQ DATA "REMOTE" SYSFINE EQIV * RORG * ELSE SYSFIN BJL 0 RETURN AT ONCE--DO NOTHING ESKP * RAW TJM RETURN SAVE RETURN ADDRESS SKFZ B1 TLO RAWC REPORT CALL BLJ REPORT TZM !RLCCNT WE HAVE NOT YET SENT ANYTHING ELSE TLO HOTMODE BLU $I/O ESKP BUC* RETURN AND RETURN SKFZ B1 PORG * RAWC DATA '0302 DAC RAWE-RAWB DAC RAWB RAWB DATA " RAW CALLED: " RAWQ DATA "REMOTE" RAWE EQIV * RORG * ELSE HOTMODE DATA '0351 HOT MODE INITIALIZE DATA BUFSIZE INPUT BUFFER SIZE DAC INPUT LOCATION OF INPUT BUFFER ESKP * PORG * INPUT BLOK BUFSIZE INPUT BUFFER INCNT DATA 0 INPUT CHARACTERS LEFT INPLACE BAC INPUT,0 INPUT BUFFER POINTER OUTPL DATA '0352 HOT WRITE OUTCNT DATA 0 OUTPUT CHARACTER COUNT DAC OUTPUT OUTPUT BLOK BUFSIZE OUTPUT BUFFER OUTPUT2 BLOK BUFSIZE SECOND OUTPUT BUFFER IWHICH DATA 0 INDICATES WHICH OUTPUT BUFFER IS USED OUTPLCE BAC OUTPUT,0 OUTPUT BUFFER POINTER RORG * IN1ST BAC INPUT,0 POINTER TO 1ST CHARACTER OF INPUT BUFFER OUT1ST BAC OUTPUT,0 POINTER TO 1ST CHARACTER OF OUTPUT BUFFER OUT2ND BAC OUTPUT2,0 POINTER TO 1ST CHAR. OF 2ND OUTPUT BUFFER * COOKED TJM RETURN SAVE RETURN ADDRESS SKFZ B1 TLO COOKEDC REPORT CALL BLJ REPORT ELSE TLO NORMAL RETURN TERMINAL TO NORMAL MODE BLU $I/O ESKP BUC* RETURN AND RETURN SKFZ B1 PORG * COOKEDC DATA '0302 DAC COOKEDE-COOKEDB DAC COOKEDB COOKEDB DATA " COOKED CALLED: " COOKEDQ DATA "REMOTE" COOKEDE EQIV * RORG * ELSE NORMAL DATA '0351 NORMAL MODE PLEASE DATA -1 DATA 0 ESKP * GETIN EQIV * GAP 1 GET ADDRESS OF TIME-OUT COUNT TIM TIMEOUT GAP 1 GET ADDRESS FOR CHARACTER FROM CONSOLE TIM CONSOLE TJM RETURN SAVE RETURN ADDRESS BLJ FLUSH FLUSH OUTPUT BUFFER TMA INCNT ANY INPUT CHARACTERS LEFT FROM BEFORE? BOP GETIN2 YES--BRANCH TMA IN1ST REWIND BUFFER POINTER TAM INPLACE GETIN0 TNA 10 FOR 1 SECOND COUNT DOWN TAM COUNTDN GETIN1 EQIV * SKFZ B1 TMI M.LRCNT USE THIS IF WE ARE REMOTE CZM LOCAL BOZ *+2 TMI =RLCCNT USE THIS IF WE ARE LOCAL TMA !0,I GET CHARACTER COUNT TNK BUFSIZE AND COPY THE BUFFER TME !1,I TEM INPUT+BUFSIZE,K AOI 1 BWK *-3 SOI BUFSIZE RESTORE I CZA DID WE GET ANY CHARACTERS? BNP *+2 NO--BRANCH TZM !0,I YES--BUFFER IS NOW FREE ELSE TNK '0353 CHECK IF WE HAVE INPUT BLU $I/O ESKP CZA DID WE GET ANY CHARACTERS? BOP GETIN2 YES--BRANCH TOK 12 WAIT A 0.1 SECONDS BLU $DELAY AUM COUNTDN BON GETIN1 BRANCH IF A SECOND HASN'T PASSED YET AOM -1 DECREMENT TIME OUT WORD DAC* TIMEOUT BOP GETIN0 BRANCH IF WE HAVEN'T TIMED OUT YET TZA RETURN A NULL BUC GETIN3 GETIN2 SOA 1 DECREMENT CHARACTERS LEFT TAM INCNT TMJ INPLACE INPUT BUFFER CHARACTER POINTER EMB !0 GET THE CHARACTER EZB BBJ *+1 INCREMENT CHARACTER POINTER TJM INPLACE GETIN3 EQIV * SKFZ B1 TAM GETINSV SAVE THE CHARACTER BLU $OCTASC CONVERT FOR REPORT TKM GETINV TDM GETINV+1 TOA '177 TMA GETINSV GET CHARACTER AGAIN COB " " IS IT A PRINTABLE CHARACTER? BNN *+2 YES--BRANCH TOB "?" NO--USE A QUESTION MARK TBM GETINX STORE IN MESSAGE TLO GETINC REPORT CALL BLJ REPORT TMA GETINSV RESTORE THE CHARACTER ESKP BUC* RETURN AND RETURN PORG * TIMEOUT DAC *-* ADDRESS OF TIME-OUT WORD CONSOLE DAC *-* PLACE TO STORE CHARACTER FROM CONSOLE COUNTDN DATA 0 COUNT DOWN FOR FULL SECOND SKFZ B1 GETINSV DATA 0 GETINC DATA '0302 DAC GETINE-GETINB DAC GETINB GETINB DATA " GETIN CALLED:" GETINV BLOK 3 GETINX DATA " '?' " GETINQ DATA "REMOTE" GETINE EQIV * ESKP RORG * * XMTCHAR TJM RETURN SAVE RETURN ADDRESS TMA* !0,J TMI OUTPLCE RBM !0 STORE IT IN OUTPUT BUFFER BBI *+1 ADVANCE BUFFER POINTER TIM OUTPLCE TMA OUTCNT INCREMENT CHARACTER COUNT AOA 1 TAM OUTCNT SOA 3*BUFSIZE IS THE BUFFER FULL? BON *+2 NO--BRANCH BLJ FLUSH YES--WRITE IT OUT SKFZ B1 TMJ RETURN GET THE CHARACTER AGAIN TMA* !0,J BLU $OCTASC TKM XMTCHAV TDM XMTCHAV+1 TMJ RETURN GET VALUE AGAIN TOA '177 DMA* !0,J COB " " IS IT A PRINTABLE CHARACTER? BNN *+2 YES--BRANCH TOB "?" NO--USE A QUESTION MARK TBM XMTCHAX STORE IN MESSAGE TLO XMTCHAC REPORT CALL BLJ REPORT ESKP TMJ RETURN BJL 1 AND RETURN PORG * SKFZ B1 XMTCHAC DATA '0302 DAC XMTCHAE-XMTCHAB DAC XMTCHAB XMTCHAB DATA " XMTCHAR CALLED:" XMTCHAV BLOK 3 XMTCHAX DATA " '?' " XMTCHAQ DATA "REMOTE" XMTCHAE EQIV * ESKP RETURN BLOK 1 RORG * * FLUSH TJM FLUSHRT SAVE RETURN ADDRESS TMA OUTCNT ANY CHARACTER IN THE BUFFER? BNP FLUSHEX NO--BRANCH SKFZ B1 FLUSH2 TMI =RLCCNT USE IF REMOTE CZM LOCAL BOZ *+2 TMI M.LRCNT USE THIS IF LOCAL CZM !0,I IS THE BUFFER AVAILABLE BNP FLUSH3 YES--BRANCH TOK 12 NO--WAIT 0.1 SECONDS BLU $DELAY BUC FLUSH2 AND TRY AGAIN FLUSH3 EQIV * TMJ M.LRCNT INPUT BUFFER IF REMOTE CZM LOCAL BOZ *+2 TMJ =RLCCNT INPUT BUFFER IF LOCAL TZM !0,J IGNORE RESPONSE TO PREVIOUS MESSAGE TNK BUFSIZE COPY THE OUTPUT BUFFER TMJ OUTPL+2 TMA !0,J TAM !1,I AOI 1 AOJ 1 BWK *-4 SOI BUFSIZE RESTORE I TMA OUTCNT GET OUTPUT COUNT TAM !0,I AND STORE IN BUFFER ELSE TNK '0353 IGNORE RESPONSE (IF ANY) TO PREVIOUS MESSAGE BLU $I/O TLO OUTPL WRITE THE BUFFER BLU $I/O ESKP TZM OUTCNT NO CHARACTERS IN BUFFER NOW TOA IWHICH NOW WHICH BUFFER SHOULD WE USE? AOA 1 TAM IWHICH TME OUT1ST USE IF 1ST BUFFER TLO OUTPUT 1ST BUFFER ADDRESS QBB B0 IS IWHICH ODD? BOZ *+3 NO--BRANCH TME OUT2ND USE IF 2ND BUFFER TLO OUTPUT2 TEM OUTPLCE BUFFER FILL LOCATION TKM OUTPL+2 BUFFER ADDRESS FOR WRITE FLUSHEX BUC* FLUSHRT AND RETURN FLUSHRT PBLOK 1 RETURN ADDRESS TSFZ B1 M.LRCNT LAC RLCCNT+BUFSIZE+1 ADDRESS OF LOCAL TO REMOTE * SLEEP GAP 1 TMA !0,I GET NUMBER OF SECONDS TJM RETURN SKFZ B1 TAM SECONDS BLU $OCTASC TKM SLEEPV TDM SLEEPV+1 TLO SLEEPC BLJ REPORT TMA SECONDS ESKP MYO 120 120 TICKS PER SECOND TAK BLU $DELAY BUC* RETURN SKFZ B1 PORG * SECONDS DATA 0 SLEEPC DATA '0302 DAC SLEEPE-SLEEPB DAC SLEEPB SLEEPB DATA " SLEEP CALLED: " SLEEPV BLOK 3 DATA " " SLEEPQ DATA "REMOTE" SLEEPE EQIV * RORG * ESKP * CREATE GAP 1 TIM SCINITL+1 TO INITIALIZE THE SCANNER TJM RETURN TLO SCINITL BLU $SCINIT TLO GENLIST GET AREANAME FOR GENERATE BLU $AREANM BON CREATE2 BRANCH IF TROUBLE TLO GENLIST BLU $GENERATE CREATE THE FILE CREATE2 EQIV * SKFZ B1 TLO CREATEC REPORT THE CALL BLJ REPORT ESKP BUC* RETURN PORG * SCINITL DATA 6 WORD COUNT DAC *-* BUFFER ADDRESS GENLIST BLOK 4 AREA NAME DATA 0 GRANUAL SIZE DATA 0 MAXIMUM SIZE DATA 0 PACK NUMBER DATA '10000000 BLOCKED FILE DATA 0 PURGE DATE DATA 0 BLOCKING FACTOR DATA 0 SPOOL PDN DATA 3 OWNER WRITE, OWNER DELETE DATA 0 ACCESS LEVEL DATA 0 FORCED STARTING SECTOR BLOK 4 M/TYP# SKFZ B1 CREATEC DATA '0302 DAC CREATEE-CREATEB DAC CREATEB CREATEB DATA " CREATE CALLED: " CREATEQ DATA "REMOTE" CREATEE EQIV * ESKP RORG * * CONNECT EQIV * SKFZ B1 GAP 1 ADDRESS OF DUPLEX WORD TJM RETURN SAVE RETURN ADDRESS TMA !0,I BLU $OCTASC TKM CONNECV TDM CONNECV+1 TFM LOCAL 0=REMOTE (I.E. HOST), OTHER=LOCAL TMD ="LOCAL " TDM SYSFINQ TDM GETINQ TDM SLEEPQ TDM XMTCHAQ TDM RAWQ TDM COOKEDQ TDM CREATEQ TLO CONNECC REPORT CALL BLJ REPORT TZM* M.LRCNT WE HAVE NOT YET SENT ANYTHING TOA 1 RETURN TRUE BUC* RETURN AND RETURN PORG * CONNECC DATA '0302 DAC CONNECE-CONNECB DAC CONNECB CONNECB DATA " CONNECT CALLED: " CONNECV BLOK 3 CONNECE EQIV * RORG * ESKP TZA NO CONNECTION IS POSSIBLE BJL 1 RETURN--BRANCH OVER ARGUMENT * FIXNAME GAP 1 REMOVE ANY GIVEN QUALIFIER TJM RETURN TIJ TNK 20 FIXNAML TMA !0,J GET NEXT CHARACTER BOZ FIXNAMR RETURN AT END-OF-STRING AOJ 1 COB "*" IS THIS AN ASTERISK BOZ FIXNAMC YES--BRANCH BWK FIXNAML LOOP FOR A WHILE FIXNAMR BUC* RETURN DO NOTHING--RETURN FIXNAMC TNK 20 COPY FILE NAME DOWN TMA !0,J TAM !0,I AOI 1 AOJ 1 BWK *-4 BUC* RETURN AND RETURN * END$