/LNK811.PA /COPYRIGHT 1972, 1973, 1980 /DIGITAL EQUIPMENT CORPORATION /MAYNARD, MASS. 01754 / /THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE /ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION /OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT /AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL /EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. / /LNK811 PROGRAM / /************ / / /EDITED 4/14/80 FOR NEW LONDON DAY /FOR INVALID RECORD SUPPORT / / /************** /TIMOTHY J. DOLAN ?FEB. 31, 1980? /DIGITAL EQUIPMENT - ROLLING MEADOWS /"T"ECHNICAL "B"ACKUP "S"UPPORT "U"NIT /WILLL ENABLE THE TRANSFER OF COS 300 DATA FILES /TO A RSTS/E SYSTEM. / /*********************************** / /ASSEMBLY INSTRUCTIONS / .PAL LNK811.PA / .R ABSLDR / *COSPG0.SV/I / *LNK811.BN$ / .SAVE SYS LNK811.SV 0-4377,14200-17577;200 / /********************************** / /TWO SECTIONS - / / 1. BUILD COMMAND FILE / CREATES A SERIES OF COMMAND RECORDS / CONSISTING OF / $JOB - START OF JOB / $BOF -- RSTS FILE SPECS / $MSG - MESSAGE LINE / $SOD - DATA FILENAME AND LUN / $EOF - END OF RSTS FILE / $EOJ - END OF JOB / ENSURES ALL FILES EXIST AT TIME OF / COMMAND FILE CREATION. / 2. THE "BEGIN" RTN PROMPTS IF XMIT TO START / OPENS AND SENDS ALL COMMAND FIL RECORDS. / IF RECORD IS $SOD, THEN OPENS AND SENDS DATA FILE. / AT EOF ON DATA FILE, CLOSES, AND CONTINUES WITH / COMMAND FILE. AT EOF ON COMMAND FILEE, / SENDS MESSAGE,SENDS "EOT" CODE TO LNK118 AND WAITS / UNTIL EVERYBODY SETTLES DOWNS. / THEN "FINISH" RTN RESTORES PROPER CODE IN / RESIDENT COS CODE. / /THE "RECLOP" RTN HANDLES THE XMIT OF A COS DATA/COMMAND /RECORDS. /SETS COUNT OF 7 TO RETRY SENDING THE SAME RECORD. /LOOKS AT STATUS OF EVERYTHING. /CHECKS IF LINE AVAILABLE FROM RSTS. /CHECKS MESSAGE REQUEST FROM COS 300 KBD /CALLS "RECLEN" TO FIND AND PUT THE BYTE COOUNT. /CLEANS UP THE CHECKSUM AND SENDS IT. /SENDS A CARRIAGE RETURN TO LNK118 AS A DELIMITER. /WAITS FOR A ACK OR NAK /IF ACK - EXITS /IF NAK - RETRYS 7 TIMES /IF NEITHER - AFTER FIFTEEN SECONDS - ABORTS /OTHER NOTES /THE WAIT RTN CHECKS IF RSTS HAS SENT A /XOF AND IF TOO LONG OF A DELAY. /CHECKS IF COS CNTL/C /CHECKS IF RSTS CNTL/C /CHECK "USER NOTES" FOR CAUTIONS IN "INIT" CODE. /******************************** / /CONTROL OCTAL MEANING /CODES / / NAK 25 LNK118 DID NOT GET SAME / LENGTH OR CHECKSUM AS / LNK811 SENT. / ACK 06 LNK118 RECEIVED REC OK / XOF 23 RSTS SENDS TO SUSPEND XMITING / XON 21 RSTS SENDS TO RESUME XMITING / DLE 20 LNK118 OR LNK811 SENDS PRIOR TO MESSAGE / EOT 04 LNK118 OR LNK811 SENDS TO ABORT /FUTURE ENHANCEMENTS FOR SOMEONE ELSE TO DO. / /1. ALLOW COMMAND FILE GENERATION WITHOUT SPECIFIED /DATA FILES EXISTING. /2. ALLOW "RUN LNK811[,CMDFIL][/S]" TO BYPASS /ANY OPERATOR INTEVENTION. /3. ALLOW $SOD RECORD TO CONTAIN SOURCE FILE NAME , IE /$SOD TYPE NAME . THIS WOULD BYPASS THE CONVERT PROCEDURE. / /4. ** MOST INPORTANT ** / ALLOW COS 300 TO RECEIVE SOURCE OR DATA FILES FROM THE / RSTS SYSTEM. /5. IN THE "BEGIN" RTN SOME NOTES EXIST FOR THE /LNK811 PROGRAM TO "ENQ" THE RSTS SYSTEM. PROBABLY A BETTER /WAY WOULD BE TO WAIT UNTIL RSTS SENT LNK811 A "ENQ". /6. MAKE COS KBD RING BUFFER TO ALLOW TYPING MESSAGES /WHILE XMITING. /LNK811.PA / TEST=0 /CHANGE THIS TO 1 IF USING A TERMINAL AS TEST /ELSE TO 0 IF TALKING TO THE LINK SYSTEM IFZERO TEST < INDEVCD=44 /********* CHANGE THIS TO THE KL8J INPUT CODE OUTDVCD=45 > /********* CHANGE THIS TO THE KL8J OUTPUT CODE IFNZRO TEST < INDEVCD=40 OUTDVCD=41 > XTFL=10^OUTDVCD+6000 XTSF=10^OUTDVCD+6001 XTCF=10^OUTDVCD+6002 XTLS=10^OUTDVCD+6006 XKCC=10^INDEVCD+6002 XKRB=10^INDEVCD+6006 XKSF=10^INDEVCD+6001 XKRS=10^INDEVCD+6004 XR11=11 XR12=12 KMOVE=23 KGETC=24 KPUTC=25 KRDOIO=26 KCDOIO=27 LENGTH=44 NMBR=63 M4=66 KINIT=72 KCLOSE=75 SYSHND=77 RECBUF=0000 COSMON=7600 DECIMAL X005=-1 X05=-10 X5=-100 FIVE=-1000 TEN=-2000 FIFTEEN=-3000 OCTAL *0 0000 JMP I .+1 INTERUPT *30 /CHANGE WHERE COS IN/OUT RTNS ARE. COSKBD, KBDIN COSTTY, TTYOUT *100 P7400, 7400 LNKPAUSE, 0 COSPAUSE, 0 XDELY1, 0 XDELY2, 0 CNTOUT,0 XCNTOUT, 0 RECFLG, 0 CCNT, 0 HLDCNT, 0 CHAR, 0 LNKHALT, 0 COSHALT, 0 DFLTLUN, 0 XMSG, 0 MSG, 0 LNKCNT, 0 HOLD1, 0 CKSM, 0 SPCHAR, 0 DOTTYOUT=JMS I COSTTY ASKMSG=JMS I . MSGASK DOMSGOUT=JMS I . MSGOUT DOCRLF=JMS I . CRLF GETLIN=JMS I . LINGET DOSCAN=JMS I . SCAN LINKOUT=JMS I . XTTYOUT DOERROUT=JMS I . OUTERR DOCHECK=JMS I . CHECK DOWAIT=JMS I . WAIT DISMIS=JMP I . INTEREXIT ERR1=JMP I . ERR1RTN ERR2=JMP I . ERR2RTN ERR4=JMP I . ERR4RTN ERR5=JMP I . ERR5RTN ERR6=JMP I . ERR6RTN ERR7=JMP I . ERR7RTN ERR8=JMP I . ERR8RTN ERR9=JMP I . ERR9RTN ERR10=JMP I . ERR10RTN ERR11=JMP I . ERR11RTN ERR12=JMP I . ERR12RTN /************ / / NEWDAY, 0 / / /************ PAGE START, JMP INIT /DO ONE TIME CODE ASK1A, DOMSGOUT /ASK IF THE COMMAND PRMPT6 /FILE IS ALREADY CREATED GETLINE JMP ASK1A TAD I XR12 /SAVE FIRST DCA RESPONSE /CHARACTER ASK1, DOMSGOUT /PRINT PRMPT1 /JOB PROMPT JMS FILEGET /GET A COS COMMAND FILENAME JMP ASK1 /CNTL/U RETURN TAD CCNT /HOLD SNA /ZERO CHAR COUNT ? JMP ASK1 /YES, IGNORE DCA HLDCNT /SAVE CHAR COUNT DOSCAN /SEE IF OKAY JMP ASK1 /NOT OK RETURN JMS FIXUP /FIX THE NAME FIELD TAD HLDCNT /RESTORE DCA CCNT /COUNT TAD (-4 /SAVE THE COMMAND JMS I KMOVE /FILE NAME AND CDF 0 /LUN NAM1-1 HDNAM1-1 TAD RESPONSE /WAS THE TAD (-"Y /RESPONSE SNA CLA /A YES? JMP BEGIN /YES CLA CLL IAC /OPEN UNIT 1 JMS I KINIT /FOR OUTPUT 4210 /1 COS BLOCK IN FIELD 1 400 /MAIN BUFFER HERE NAM1-1 /PTR TO COS NAME TAD (JOB /GO PUT $JOB JMS PUTCMD /AND TEXT ASK2, ASKMSG /ASK FOR MESSAGE ASK3, DOMSGOUT /PRINT PRMPT3 /BOF PROMPT GETLINE /GET FILE SPECS JMP ASK3 /CNTL/U RETURN TAD I XR12 /SEE IF TAD (-"$ /ALL DONE SNA CLA /MEANING ALL DONE WITH DIALOGUE JMP FILEDONE /YES TAD CCNT /HOLD DCA HLDCNT /CHAR COUNT TAD (BOF /GO PUT A $BOF JMS PUTCMD /AND TEXT ASKMSG /ASK FOR MESSAGES ASK4, DOMSGOUT /ASK FOR WHAT COS FILE PRMPT4 /AND LUN JMS FILEGET /GET RESPOSNE JMP ASK4 /CONTROL/U RETURN TAD CCNT /HOLD DCA HLDCNT /CHAR COUNT DOSCAN /SEE IF VALID JMP ASK3 /NO JMS FIXUP /FIX NAME TAD HLDCNT /RESTORE DCA CCNT /CHAR COUNT CLA CLL IAC RAL /OPEN UNIT 2 JMS I KINIT /AS INPUT 0210 /1 COS BLOCK FIELD 1 1000 /MAIN BUFFER NAM1-1 /TO SEE IF IT EXISTS CLA CLL IAC RAL /OK, NOW JMS I KCLOSE /CLOSE THE SAME TAD (SOD /GO PUT A $SOD JMS PUTCMD /AND TEXT ASK5, DOMSGOUT /ASK IF MORE COS DATA PRMPT5 /IN THIS RSTS FILE GETLINE /GET RESPONSE JMP ASK5 /CONTROL/U RETURN TAD I XR12 /GET ONE CHAR TAD (-"Y /AND SEE IF SNA CLA /IT'S A YES ANSWER JMP ASK4 /YES, IT'S A YES DCA CCNT /CLEAR THE TEXT CNT TAD (EOF /GO PUT A $EOF JMS PUTCMD /BUT NO TEXT JMP ASK2 /ASK FOR RSTS FILE SPECS AGAIN FILEDONE, DCA CCNT TAD (EOJ /GO PUT A $EOJ JMS PUTCMD /AND NO TEXT CDF 10 DCA I (RECBUF /WRITE A ZERO LENGTH CDF 0 TAD (11 /ON COMMAND FILE, JMS I KRDOIO /INDICATING EOF RECBUF-1 NOP /EOF RETURN ON WRITE CLA CLL IAC /CLOSE THE COMMAND FILE JMS I KCLOSE /NOW JMP BEGIN /AND START TRANSMISSION /************************ HDNAM1, 0 /KEEP HDNAM2, 0 /THESE HDNAM3, 0 /TO- HDNUM1, 0 /GETHER /************************* RESPONSE, 0 PAGE BEGIN, DOMSGOUT /ASK IF PRMPT7 /TRANSMISSION GETLINE /IS TO START JMP BEGIN /CNTL/U RETURN TAD I XR12 TAD (-"Y SZA CLA /YES ANSWER? JMP DONE /NO, EXIT /DCA HOLD1 /ENQLP, TAD (220 /SEND A DLE /LINKOUT /TAD (215 /SEND A CR /LINKOUT /CLA CLL CMA /SET TO /DCA RECFLG /NON ACK/NAK /DOCHECK /WAIT FOR ANSWER /X5 /ABOUT .5 SEC /SKP /NOTHING YET /JMP BEGIN1 /THE LINK COMPUTER IS ALIVE!!! /ISZ HOLD1 /WAITING TOO LONG? /JMP ENQLP /NO /ERR9 /ABORT, WE WAITED TOO LONG BEGIN1, ISZ XMITFLAG /YES, SET CNTL/C FLAG TAD HDNUM1 /RESET COMMAND DCA I DFLTLU /FILE LUN CLA CLL IAC /OPEN IFN # 1 JMS I KINIT /AS THE COMMAND FILE INBLKS, 0210 /TO READ 1 BLOCKS(2 PAGES INTO DINBUF, 400 /*10400 - *10777 HDNAM1-1 CMNDLP, CDF 0 TAD (11 /READ A RECORD JMS I KRDOIO /FROM THE COMMAND RECBUF-1 /FILE ERR5 /EOF EXIT JMS RECLOP /SEND THIS RECORD TAD (RECBUF /POINT TO DCA XR12 /WORD 1 OF CDF 10 /RECORD TAD I XR12 /GET IT TAD (-0564 /IS IT A "$S" SZA CLA /FOR $SOD RECORD? JMP CMNDLP /NO TAD (RECBUF-1 /YES, POINT TO DCA XR12 /WORD COUNT TAD I XR12 /GET IT TAD (3 /SUBTRACT 3 WORDS CLL RAL /FOR KEYWORD, MULT BY 2 DCA CCNT /STORE # OF BYTES TAD (LINBUF-1 /POINT TO DCA XR12 /KBD BUFFER TAD (6 /START AT POS 6 DCA NAMPOS /IN RECORD RECVRT, TAD (RECBUF /GET THE CDF 10 /COS FILE NAME JMS I KGETC /OUT OF THE $SOD RECORD NAMPOS, 0 SNA /EOR? JMP CVRTDN /YES TAD (237 /MAP TO TTY ASCII DCA I XR12 /STORE IN COS KBD BUFFER ISZ NAMPOS /DO JMP RECVRT /NEXT CVRTDN, TAD (LINBUF-1 /SET UP DCA XR12 /FOR DOSCAN /SCAN ERR12 /BAD $SOD ** FATAL ** JMS FIXUP /CLEAN THE NAME CLA CLL IAC RAL /OPEN TO READ UNIT #2 JMS I KINIT 1410 /MAIN BUFFER OF 6 BLOCKS 1000 /*11000 - *13777 NAM1-1 DATALP, TAD (12 /PUT A DATA JMS I KRDOIO /RECORD RECBUF-1 /TO COMMON JMP DATADN /EOF JMS RECLOP /SEND IT JMP DATALP DATADN, CLA CLL IAC RAL /CLOSE CURRENT JMS I KCLOSE /DATA FILE JMP CMNDLP /GET A COMMAND RECORD EXIT, TAD (204 /SEND A EOT TO THE LINK LINKOUT IFNZRO TEST< TAD (215 LINKOUT /SEND A CR TAD (212 LINKOUT > IFZERO TEST < NOP NOP NOP NOP > DONE, COMEXIT, NOP /FREEBIE NOP NOP CLA CLL /T B S TAD CNTOUT /WAIT UNTIL SZA CLA /THE COS TTY JMP .-2 /DONE, NELLIE TAD XCNTOUT SNA CLA /LINK TTY DONE? JMP FINISH /YES DOWAIT JMP DONE FINISH, NOP NOP /FREEBIES NOP TAD (AND 0002 /RESTORE PROPER CODE DCA I (7745 /IN RESIDENT MONITOR JMP I .+1 /BYE COSMON /BYE XMITFLAG, 0 PAGE /RECLOP IS A STANDARD RECORD HANDLER /GETS CHARS, CALLS CHECKSUM, ENSURES CHARS /SENT EQUAL THE WORD COUNT, SENDS CHECKSUM AND CR /WAITS FOR ACK/NAK, HANDLES RETRY ERRORS AND MESSAGES /ENTER WITH RECORD STORED IN "RECBUF" RECLOP, 0 SUBRECLOP, TAD (-7 /SET CURRENT DCA RETRY /RECORD COUNT SAMREC, TAD CONST /CHECK STATUS CMA DOWAIT /OF EVERYTHING TAD XMSG /DOES LINK WANT SZA CLA /TO SEND A MESSAGE? JMS DOCOSMSG /YES TAD MSG /DOES COS WANT SZA CLA /TO SEND A MESSAGE? JMS DOLNKMSG /GUESS DCA CKSM /CLEAR CHECKSUM VAULE DCA NULL /CLEAR CURRENT RECORD CHAR CNT JMS RECLEN /FIND AND PUT THE RECORD LENGTH DCA RRELC /CLEAR RELATIVE POSITION NXTCHR, TAD (RECBUF /GET A CDF 10 /CHAR FROM JMS I KGETC /THE CURRENT RRELC, 0 /RECORD SNA /EOR? JMP RECDON /YES JMS CHECKSUM /DO CHECKSUM AND SEND CHAR ISZ NULL /COUNT THIS CHAR ISZ RRELC /LOOK AT NEXT CHAR JMP NXTCHR /DO ANOTHER RECDON, TAD NULL /GET CHAR COUNT CLL RAR /DIVIDE BY 2 SNL CLA /OVERFLOW? JMP EVEN /NO TAD (01 /YES, SEND AN EXTRA SPACE JMS CHECKSUM /TO MAKE EVEN ISZ NULL /COUNT THIS SPACE EVEN, TAD CKSM /GET RECORD CHECKSUM AND (177 /MASK TO 7 BIT TAD (-40 / SPA /LESS THAN 40? TAD (40 /YES, ADD IN OFFSET TAD (40 /RESTORE AND (177 /BACK TO 7 BIT LINKOUT /AND SEND IT TAD (215 /SEND A LINKOUT /CR IFNZRO TEST < TAD (212 LINKOUT CLA CLL > /SET TO ACK VALUE IFZERO TEST < NOP NOP CLA CLL CMA > /SET TO NON ACK/NAK DCA RECFLG DOCHECK /WAIT FIFTEEN /FOR A ACK OR A NAK OR A ERR11 /NODA TAD RECFLG /GET FLAG SNA CLA /ACK? JMP I RECLOP /YES ISZ RETRY /NAK, MORE THAN 7? JMP SAMREC /NO, TRY TO SEND SAME RECORD /***************************** SPECIAL CODE ****** /THIS CODE HAS BEEN ADDED BECAUSE SOME RECORDS /HAVE A PREMATURE "EOR" CODE IN THE RECORD /IE WORD COUNT SAYS RECORD IS 100 WORDS(200 BYTES) /BUT BYTE 180 OR 181 MAY CONTAIN A OCTAL '00'. /THIS CAUSES RECORD TO BE SENT 7 TIMES AND LNK118 /COUNTS ONLY 180 OR 181 CHARACTERS SENT VERUS /THE VALUE WE SENT IT. / /THE BASIC PLUS PROGRAM UPON RECEIPT OF "01" /SHOULD DISPLAY TO THE JOB AND COS KBDS /THE COS FILE NAME /REOCRD NUMBER /AND THE RECORD RECEIVED /THE TRANSMISSION WILL CONTINUE UNTIL ALL DONE. /THE COS OPERATOR SHOULD FIX THE RECORD IN QUESTION AND /SEND ONLY THAT RECORD TO LNK118, TO BE MERGED. TAD NEWDAY /GET POS # OF BYTES CIA /PER COS WORD COUNT & MAKE NEG TAD NULL /GET COUNT OF CHARS. SENT SNA CLA /MATCH? ERR4 /THIS EXIT MEANS OTHER PROBLEMS EXIST /WITH THE RECORD(BAD LINE OR CHECKSUM) TAD (201 /SEND SPECIAL CODE TO LNK118 LINKOUT JMP I RECLOP /AND CONTINUE WITH OTHER RECORDS. RETRY, 0 NULL, 0 PAGE /MESSAGE ROUTINE /PRINT PROMPT, GET RESPONSE,DEFAULTS TO NO /IF YES, THEN GET TEXT LINE /AND PUT $MSG AND TEXT IN COMMAND FILE /AND ASK AGAIN MSGASK, 0 DOMSGOUT /PRINT PRMPT2 /MESSAGE PROMPT GETLINE /GET RESPONSE JMP MSGASK+1 /CONTROL U RETURN TAD I XR12 /GET 1ST CHAR TAD (-"Y /TEST A YES SZA CLA /IS IT A Y? JMP I MSGASK /NO GETLINE /GET A MESSAGE LINE JMP .-1 /CONTROL/U RETURN TAD CCNT /SAVE COUNT DCA HLDCNT TAD (XXMSG /GO PUT $MSG JMS PUTCMD /AND TEXT JMP MSGASK+1 /ASK IF MORE MESSAGES /PUT A KEYWORD COMMAND ROUTINE /ENTER WITH AC = PTR TO KEYWORD COMMAND /THIS RTN PUTS THE KEYWORD IN THE COMMAND FILE /AND ANY TEXT /GENERATES WORD CNT AND WRITES RECORD TO COMMAND FILE PUTCMD, 0 DCA HOLD2 /SAVE KEYWORD ADDRESS TAD (-3 /ALL KEYWORDS ARE DCA LPCNT /6 CHARS DCA CHRPOS /RESET CHAR POS PTR LP1, CDF 10 TAD I HOLD2 /GET A KEYWORD WORD BSW /GET HIGH JMS CONVERT /MAP TO 8 BIT NOP /NEED THIS JMS CHARPUT /AND PUT TO RECORD CDF 10 TAD I HOLD2 /GET LOW JMS CONVERT /MAP TO 8 BIT NOP /NEED THIS JMS CHARPUT /PUT TO RECORD ISZ HOLD2 /BUMP TO NEXT TEXT WORD ISZ LPCNT /DONE 3 TIMES? JMP LP1 /NO TAD CCNT /ANY SNA CLA /TEXT? JMP NOTEXT /NO TAD (LINBUF-1 /SET UP PTR DCA XR11 /TO TEXT STRING LP2, TAD I XR11 /GET A CHAR JMS CHARPUT /PUT TO RECORD ISZ CCNT /DONE? JMP LP2 /NO TAD HLDCNT /GET TEXT COUNT CIA /MAKE POSITIVE NOTEXT, TAD (6 /LENGTH OF KEYWORD CLL RAR /GET # OF WORDS CIA /MAKE IT NEGATIVE CDF 10 DCA I (RECBUF /AND STORE IN WORD COUNT CDF 0 TAD (11 /WRITE THIS RECORD JMS I KRDOIO RECBUF-1 /TO THE HLT /EOF ON WRITE ** FATAL ** JMP I PUTCMD /COMMAND FILE CHARPUT, 0 TAD (-237 /MAP TO COS FORMAT CDF 10 JMS I KPUTC /PUT RECBUF /IN CHRPOS, 0 /THIS POSITION ISZ CHRPOS /BUMP TO NEXT POS JMP I CHARPUT /DONE ONE CHAR HOLD2, 0 LPCNT, 0 /THIS WILL READ LINE FROM THE COS KBD /THEN LOOK AT THE LINE STRIPPING OUT ALL SPACES AND TABS /WILL CREATE THE TEXT IN ASCII STORED IN "INBUFF" FILEGET, 0 GETLINE /GET A LINE FROM COS KBD JMP I FILEGET /CNTL/U RETURN ISZ FILEGET /BUMP RETURN TAD CCNT /ZERO SNA CLA /CHAR CNT? JMP I FILEGET /YES TAD XR12 /SET TO START DCA XR11 /OF LINE BUFFER DCA HOLD1 /CLEAR VALID COS CHAR CNT CKNXT, TAD I XR12 /GET A CHAR TAD (-240 /NEG SPACE SNA /IS IT? JMP BAD /YES TAD (240-211 /NEG HORT TAB SNA /IS IT? JMP BAD /YES TAD (211 /RESTORE CHAR DCA I XR11 /AND STORE IT ISZ HOLD1 /COUNT VALID CHAR BAD, ISZ CCNT /DECREMENT COUNT JMP CKNXT /NOT DONE TAD HOLD1 /GET VALID CHAR COUNT CLL RAR /AND ROUND SZL /TO EVEN IAC /NUMBER CLL RAL CIA /MAKE IT NEG DCA CCNT /COUNT TAD (LINBUF-1 /RESET PTR DCA XR12 /FOR SCAN JMP I FILEGET /EXIT STAGE RIGHT PAGE /RECLEN RTN GETS THE WORD COUNT OF CURRENT /RECORD, GETS THE # OF BYTES. RECLEN, 0 CDF 10 TAD I (RECBUF /GET RECORD CDF 0 /LENGTH WORD CIA /MAKE IT POSITIVE CLL RAL /GET # OF BYTES DCA HOLD1 /AND HOLD IT /******** / /SPECIAL FOR NEW LONDON DAY TO PAD BAD RECORDS TAD HOLD1 /GET POS # OF BYTES DCA NEWDAY /AND SAVE FOR LATER /*********** TAD HOLD1 BSW /SHIFT JMS DOLEN /SEND BITS 3 - 5 RTR;RAR JMS DOLEN /SEND BITS 6 - 8 JMS DOLEN /SEND BITS 9 - 11 CLA CLL /TBS(TO BE SURE) JMP I RECLEN /DOLEN RTN ENTERED WITH NUMBER IN LOW 3 BITS, /ADDS OFFSET TO GET RANGE OF 260 - 267 /EXITS WITH ORIG # IN AC FOR THE NEXT ONE. DOLEN, 0 AND (7 /LOW 3 BITS ONLY TAD (21 /ADD OFFSET JMS CHECKSUM /DO CHECKSUM AND SEND TAD HOLD1 /NEED FOR NEXT CALL JMP I DOLEN /CHECKSUM RTN DETERMINES IF CHAR IS A TAB, /ADDS CURRENT CHAR TO PREVIOUS CHECKSUM. CHECKSUM, 0 TAD (-75 /NEG TAB VALUE SNA /IS IT A TAB? TAD (-123 /ADD OFFSET TAD (334 /RESTORE ORIG CHAR DCA CCNT /STORE CHAR TAD CCNT /ADD TO PREVIOUS TAD CKSM /CHECKSUM DCA CKSM TAD CCNT /PUT CHAR IN LINKOUT /OUT BUFFER JMP I CHECKSUM /BYE-BYE SEE YOU IN THE MOVIES /OUTERR SENDS MESSAGES TO THE LINK TTY AND THE COS TTY OUTERR, 0 TAD (TTYOUT /SET TO DCA PUTTER /CALL COS TTY TAD I OUTERR /GET TEXT DCA TXTPTR /STRING PTR DOCRLF /GUESS JMS COMMON /DO COMMON TEXT GETTER TAD (XTTYOUT /SET TO DCA PUTTER /CALL LINK TTY TAD I OUTERR /GET TEXT DCA TXTPTR /STRING PTR TAD (220 /SEND A DLE LINKOUT /TO THE LINK COMPUTER JMS COMMON /DO COMMON TEXT GETTER TAD (215 /SEND A CR LINKOUT /TO THE LINK TTY IFNZRO TEST < TAD (212 LINKOUT CLA CLL > /SET TO ACK VALUE IFZERO TEST < NOP NOP CLA CLL CMA > /SET TO NON ACK/NAK DCA RECFLG /SET RECEIVE FLAG DOCHECK TEN /WAIT NOP /NO ERROR RETURN ISZ OUTERR /BUMP OVER STRING PTR JMP I OUTERR /GUESS /MSGOUT RTN SEND TEXT TO THE COS TTY ONLY MSGOUT, 0 TAD (TTYOUT /SET TO DCA PUTTER /CALL COS TTY TAD I MSGOUT /GET TEXT DCA TXTPTR /STRING PTR DOCRLF /GUESS JMS COMMON /DO COMMON TEXT GETTER ISZ MSGOUT /OVER STRING PTR JMP I MSGOUT /COMMON RTN PULLS PACKED 6 BIT CODE FROM FIELD 1 /CALL RTN TO CONVERT TO 8 BIT CODE /THEN CALLS RTN TO FILL DEVICE BUFFER /RETURNS +1 ON ZERO 6 BIT CODE COMMON, 0 CDF 10 TAD I TXTPTR /GET A CHAR CDF 0 /NATIVE BSW /SHIFT FOR HIGH BYTE JMS CONVERT /MAP TO 8 BIT JMP I COMMON /ALL DONE RETURN JMS I PUTTER /PUT TO LINK OR COS TTY CDF 10 TAD I TXTPTR CDF 0 JMS CONVERT /GET LOW 6 BITS JMP I COMMON /DONE JMS I PUTTER ISZ TXTPTR /NEXT TEXT WORD JMP COMMON+1 /DO NEXT WORD /CONVERT RTN MAPS PACKED 6 BIT CODE TO 8 BIT ASCII /RETURNS +1 IF ZERO 6 BIT CODE /RETURNS +2 IF NON ZERO CODE WITH 8 BIT IN AC CONVERT, 0 AND (77 /6 BITS ONLY SNA /0? JMP I CONVERT /YES ISZ CONVERT /BUMP TO NON ZERO RETURN TAD (-40 SPA /LESS THAN 40? TAD (100 /YES, ADD OFFSET TAD (240 /BRAND NEW 8 BIT CODE JMP I CONVERT /GUESS TXTPTR, 0 PUTTER, 0 PAGE /THE SCAN RTN LOOKS AT THE COS KBD BUFFER /BUILDING A COS DATA FILE NAME INTO NAM1 - 3 /IF A SLASH , INDICATES A LUN TO FOLLOW SCAN, 0 TAD CCNT /GET CHAR COUNT SNA CLA /NO CHARS? JMP I SCAN /EXIT IF NO CHARS DCA NAM1 /CLEAR THE NAME FIELD DCA NAM2 DCA NAM3 TAD (NAM1 /SETUP DCA NAMPTR /PTR TAD (-3 /SETUP DCA NAMMAX /3 LOOPS OF 2 SCANLP, JMS GETC /GET A CHAR JMP SLASH /GOT A SLASH BSW /SAVE HIGH DCA I NAMPTR ISZ CCNT /CHECK COUNT SKP /NOT DONE YET JMP SCANDN /ALL DONE JMS GETC /GET A CHAR JMP SLASH /GO TO SLASH TAD I NAMPTR /GET PREVIOUS DCA I NAMPTR /AND SAVE BOTH ISZ CCNT /CHECK COUNT SKP /NOT DONE YET JMP SCANDN /ALL DONE ISZ NAMPTR /BUMP TO NEXT NAME WORD ISZ NAMMAX /DONE THREE? JMP SCANLP /NO JMS GETC /YES,SEE IF MORE JMP SLASH /GOT SLASH NOW ERR2 /MORE THAN 6 CHARS SCANDN, TAD NAM1 /GET FIRST PART OF NAME SZA CLA /ANYTHING THERE? ISZ SCAN /YES,BUMP TO GOOD RETURN JMP I SCAN /BYE - BYE /THE SLASH RTN ENSURES DATA AFTER THE SLASH IS /THERE /NUMERIC /RANGE 01 - 15 /SETS NUM1 - THE VALID LUN SLASH, CLA CLL /TO BE SURE ISZ CCNT /ANY MORE CHARS? SKP /YES ERR2 /END OF LINE EXIT DCA NUM1 /CLEAR PREVIOUS DCA NUM2 JMS GETC /GET A CHAR ERR2 /ANOTHER SLASH DCA NUM1 /HOLD IT TAD NUM1 TAD (-60 SPA ERR2 /<0 EXIT TAD (60-72 SMA CLA ERR2 /> 9 EXIT TAD NUM1 AND (17 DCA NUM1 ISZ CCNT /DONE? SKP /NO, DO ANOTHER CHAR JMP SLASHDN TAD NUM1 CLL RTL;RAL /MULT BY 8 SZA TAD P2 DCA NUM1 /HOLD TENS POSITION JMS GETC /GET A CHAR ERR2 /ANOTHER SLASH DCA NUM2 /HOLD IT TAD NUM2 TAD (-60 SPA ERR2 /<0 EXIT TAD (60-72 SMA CLA ERR2 /> 9 EXIT SLASHDN, TAD NUM2 /GET ONES PLACE AND (17 TAD NUM1 /GET TENS PLACE SNA ERR2 /ONLY ZERO EXIT DCA NUM1 /HOLD IT TAD NUM1 TAD (-20 SMA CLA ERR2 />17 EXIT TAD NUM1 DCA I DFLTLU JMP SCANDN /GETC RTN GETS A CHAR OUT OF THE COS KBD BUFFER /RETURNS +1 IF CHAR IS A SLASH AC = 0 /RETURNS +2 IF NON SLASH, AC = 6 BITS OF 8 BIT CHAR GETC, 0 TAD I XR12 /GET A CHAR AND (77 /DOWN TO 6 BITS TAD (-57 /NEG 6 BIT SLASH CHAR SNA /IS IT? JMP I GETC /SLASH EXIT TAD (57 /RESTORE CHAR ISZ GETC /NON SLASH RETURN JMP I GETC /**************************** NAM1, 0 /KEEP NAM2, 0 /THESE NAM3, 0 /TO- NUM1, 0 /GETHER /**************************** NUM2, 0 NAMPTR, 0 NAMMAX, 0 P2, 2 /GUESS WHAT THIS RTN DOES /I WILL NOT TELL YOU CRLF, 0 TAD (215 DOTTYOUT TAD (212 DOTTYOUT JMP I CRLF PAGE /** KBDIN RTN WAITS FOR A CHAR TO BE TYPED AT THE COS KBD KBDIN, 0 TAD CONST /VERY SHORT CMA DOWAIT /WAIT TAD CHAR /GET CHAR FLAG SNA /GOT ONE ? JMP KBDIN+1 /NO DCA HOLD1 /YES HOLD IT DCA CHAR /CLEAR CHAR FLAG TAD HOLD1 /GET CHAR AGAIN JMP I KBDIN /THIS RTN FILLS THE LINK TTY RING BUFFER /STORES THE CHARS, BUMPS THE COUNT, TEST WHETHER /IT IS THE FIRST CHAR /THEN IT WAITS IF THE RING BUFFER IS FULL XTTYOUT, 0 CIF 0 /TO PROTECT AGAINST INTERUPTS CDF 10 DCA I XPUT /STORE THE CHAR CLA CLL CMA /COUNT TAD XCNTOUT /THIS DCA XCNTOUT /CHAR TAD I XPUT /GET CHAR SNL /ONLY ONE CHAR? CHG1, XTLS /YES, SEND IT SZL CLA /ONLY ONE CHAR? ISZ XPUT /NO, BUMP PTR TAD I XPUT /GET CHAR CDF 0 SPA /RING LINK? DCA XPUT /YES CLA CLL IAC /SEE IF THE DOCHECK /BUFFER IS FULL FIVE ERR9 /SOMETHING WRONG WITH THE LINK KL8J JMP I XTTYOUT /BUFFER NOT FULL EXIT /THIS RTN FILLS THE COS TTY RING BUFFER /STORES CHARS, BUMP COUNT, TEST WHETHER /FIRST CHAR OR NOT /THEN TESTS/WAITS IF BUFFER IS FULL TTYOUT, 0 CIF 0 /TO PROTECT AGAINST INTERUPTS CDF 10 DCA I PUT /STORE THE CHAR CLA CLL CMA /BUMP THE CHAR COUNT TAD CNTOUT DCA CNTOUT TAD COSPAUSE /GET COS CNTL/S SWT SZA CLA /SET? STL /YES, SET LINK TAD I PUT /GET THE CHAR SNL /ONLY ONE CHAR? TLS /YES SZL CLA /ONLY ONE CHAR? ISZ PUT /NO, BUMP PTR TAD I PUT /GET CHAR CDF 0 SPA /RING LINK? DCA PUT /YES CLA CLL IAC RAL /SEE IF THE BUFFER IS FULL DOCHECK FIFTEEN ERR10 /COS TTY FULL TOO LONG JMP I TTYOUT XPUT, LNKOUT+1 PUT, COSOUT+1 /CHECK RTN TAKES 2 ARGS /ARG1 = AC VALUE TO RTN TO CALL /ARG2 = VALUE TO WAIT /RETURNS +2 IF TIMEOUT /RRTURNS +3 IF OK CHECK, 0 TAD CHKBASE /ADD IN RTN PTR DCA DELAY TAD I CHECK /GET DCA HLDINT /COUNT AND SET IT ISZ CHECK /PT TO BAD RETURN TAD MULT /SET UP INTERNAL DCA MAJOR /MULTIPLIER RESET, TAD HLDINT /RESET THE DCA INNER /INNER COUNT DELAY, HLT /DO THE CHECK SZA CLA /ANY CHANGE JMP CKEXT /YES DOWAIT /NO,WAIT AWHILE ISZ INNER /CHECK INNER CNT JMP DELAY /NOT YET ISZ MAJOR /CHECK JMP RESET /NOT YET SKP /TIME OUT CKEXT, ISZ CHECK /PT TO GOOD RETURN JMP I CHECK CHKBASE, JMS I CHKTAB CHKTAB, CKREC /0 XCKFULL /+1 CKFULL /+2 HLDINT, 0 MAJOR, 0 INNER, 0 MULT, -47 / 39 DECIMAL MAGIC NUMBER ********* MULTIPLIER PAGE /CHECKS IF THE ACK/NAK FLAG CHANGED /RETURNS AC = 0 IF NO CHANGE YET /RETURNS AC = 1 IF ACK RECEIVED /RETURNS AC = 2 IF NAK RECEIVED CKREC, 0 CLA CLL IAC /NON ACK/NAK VALUE TAD RECFLG /GET CURRENT VALUE JMP I CKREC /CHECKS IF THE LINK TTY BUFFER IS FULL /RETURNS AC = 0 IF BUFFER FULL /RETURNS AC > 0 IF BUFFER NOT FULL XCKFULL, 0 TAD (LNKFULL /GET END PT TAD (-LNKOUT /GET START PT TAD XCNTOUT /GET CURRENT CHAR COUNT JMP I XCKFULL /CHECKS IF THE COS TTY BUFFER IS FULL /RETURNS AC = 0 IF BUFFER FULL /RETURNS AC > 0 IF BUFFER NOT FULL CKFULL, 0 TAD (COSFULL /GET END PT TAD (-COSOUT /GET START PT TAD CNTOUT /GET CURRENT CHAR COUNT JMP I CKFULL /LOOP OF .0000164 FOR 8/E /CAUSES DELAY OF .0001 DEC WITH CONST OF -6 /SOME RTNS MAY CALL WITH +5 IN AC /CAUSING ONLY ONE LOOP THRU /AT 9600 BAUD SHOULD ALLOW /4.8 CHARS AT .005 DELAY /3.8 CHARS AT .004 DELAY /2.8 CHARS AT .003 /1.8 CHARS AT .002 / WAIT, 0 TAD CONST /SET LOOP DCA COUNT /COUNT XOFLOP, TAD LNKPAUSE /LINK PAUSE? SNA CLA JMP WAIT1 /NO ISZ XDELY1 /YES,DECREMENT JMP WAIT1 /NOT DONE YET ISZ XDELY2 /DECREMENT MAJOR CNT SKP /JMP XOFLOP /NOT DONE YET ERR6 /TIME OUT ERROR ** FATAL ** WAIT1, TAD COSHALT /DO WE HAVE A COS HALT? SZA CLA ERR7 /YES, ABORT TAD LNKHALT /DO WE HAVE A LINK HALT? SZA CLA ERR8 /YES, ABORT ISZ COUNT /COUNT THIS LOOP JMP XOFLOP /NOT DONE YET JMP I WAIT /GUESS CONST, -6 COUNT, 0 /INTERUPT SKIP CHAIN INTERUPT, DCA AC /SAVE AC RAL /GET LINK DCA LINK /SAVE LINK INCHG2, XKSF /IS IT LINK KBD? SKP /NO JMP XKBDSER /YES CHG3, XTSF /IS IT LINK TTY? SKP /NO JMP XTTYSER /YES FLUSH, TSF /IS IT COS TTY SKP /NO JMP TTYSER /YES FLUSH2, KSF /IS IT COS KBD? SKP /NO JMP KBDSER /YES 6661 /CLEAR PRINTER FLAG NOP /ADD NOP /ANY NOP /OTHER NOP /IOT NOP /CLEARS NOP /HERE INTEREXIT, CLA CLL /TO BE SURE CDF 0 NOP /USE THESE NOP /FOR NOP /YOUR SELF ISZ NULLCNT /BUMP COUNT JMP MQ2 /NOT YET MQ3, ISZ MQTAB /BUMP TO NEXT VALUE TAD (NEWCNT DCA NULLCNT /RESET COUNT TAD I MQTAB /GET NEXT VALUE SZA /END OF TABLE? JMP MQ1 /NO TAD MQTABPT /YES, RESET DCA MQTAB JMP MQ3 /AND DO NEXT MQ1, DCA OLD MQ2, TAD OLD MQL TAD LINK /GET LINK RAR /RESTORED TAD AC /RESTORE AC RMF ION /TURN BACK ON JMP I 0 /RETURN AC, 0 LINK, 0 OLD, 0 NULLCNT, NEWCNT NEWCNT=7700 MQTABPT, MQTAB MQTAB, . 4001;2002;1004;0410;0220;0140;0220;0410;1004;2002;0000 PAGE /THIS SERVICES INTERUPTS FROM THE LINK KBD /CHECKS FOR VARIOUS CONTROL CODES /IF NAK SETS RECFLG = 1 /IF ACK SETS RECFLG = 0 /IF XOF SETS LNKPAUSE = 1 /IF XON SET LNKPAUSE = 0 AND STARTS LINK TTY /IF DLE INDICATES MESSAGE TO FOLLOW /SETS RECEIVE TEXT FLAG /IF LF INDICATES END OF MESSAGE /CLEARS RECEIVE TEXT FLAG AND SET LINE AVAILABLE FLAG /IF EOT INDICATES LINK WANTS TO ABORT, SET LNKHLT = 1 XKBDSER, NOP TAD (200 /OR IN MSB INCHG4, XKRS /GET AND CLEAR FLAG AND (377 /MASK DCA HOLD INCHG5, XKCC /CLEAR FLAG TAD HOLD TAD (-225 SNA /IS IT NAK? JMP XNAKEXT /YES TAD (225-223 SNA /IS IT XOF? JMP XXOFEXT /YES TAD (223-221 SNA /IS IT XON? JMP XXONEXT /YES TAD (221-220 SNA /IS IT DLE? JMP XTXT /YES TAD (220-212 SNA /IS IT A LF JMP XLF /YES, THE LINK IS SET,GO PRINT IT TAD (212-206 SNA /IS IT ACK? JMP XACKEXT /YES TAD (206-204 SNA /IS IT EOT? JMP XHALT /YES CLA CLL /TO BE SURE TAD XXTXT SNA CLA /MSG FLG SET? DISMIS /NO, THEN IGNORE THIS CHAR XLFTRICK, TAD HOLD /GET AND LOAD CHAR DCA I XPUTIN /STORE CHAR CMA /COUNT TAD XCNTIN /THIS DCA XCNTIN /CHAR ISZ XPUTIN /TO NEXT TAD I XPUTIN /GET CHAR/LINK SPA /RING LINK? DCA XPUTIN /YES CLA TAD (120 /HIGH WATER MARK TAD XCNTIN /CURRENT SPA CLA /BUFFER GETTIN FULL? JMP XFULL /YES TAD BUFFULL /NO SNA CLA /HAVE WE SENT A XOF? DISMIS /NO DCA BUFFULL /YES, CLEAR SWT TAD (221 / AND SEND DCA SPCHAR / A XON JMP XFULLEXT XFULL, TAD BUFFULL SZA CLA /HAVE WE SENT A XOF? DISMIS /YES, TRY TO PRINT A COS TTY CHAR TAD (223 /NO,SEND DCA SPCHAR /A XOF CHAR ISZ BUFFULL /AND SET SWT XFULLEXT, TAD XCNTOUT /SEE IF LINK TTY IS QUIET SZA /ANY CHARS TO PRINT? DISMIS /YES JMP EMPTY /WE HAVE A EMPTY BUFFER, FORCE IT XLF, DCA XXTXT /CLEAR STORE TEXT SWT ISZ XMSG /SET LINE READY SWT JMP XLFTRICK /BUT STORE THE LF CHAR XHALT, ISZ LNKHALT /SET HALT SWT DISMIS XTXT, ISZ XXTXT /SET TEXT RECEIVE SWT DISMIS XNAKEXT, IAC /SET NAK RECD XACKEXT, DCA RECFLG /SET ACK RECD DISMIS XXOFEXT, IAC /SET XOF RECD JMP XKBDEXT XXONEXT, TAD LNKPAUSE /DID WE HAVE SZA CLA /A XOF? CHG6, XTFL /YES XKBDEXT, DCA LNKPAUSE /CLEAR/SET DCA XDELY1 /RESET COUNT FOR WAIT INBETWEEN XOF AND XON TAD (-2000 /A MAGIC NUMBER DCA XDELY2 /SO WE WILL COUNT THE DELAY DISMIS HOLD, 0 XXTXT, 0 XPUTIN, LNKIN+1 BUFFULL, 0 XCNTIN, 0 PAGE /THIS SERVICES INTERUPT FROM THE COS TTY /CHECKS IF CNTL/S FROM COS KBD /CHECKS IF ANY CHARS TO PRINT FROM COS RING BUFFER /CHECK/PAUSES IF A LF WAS SENT TTYSER, TAD LFDELAY /WAS LAST SMA CLA /CHAR A LF? JMP DOMORE /NO ISZ LFDELAY /YES, DECREMENT DISMIS /NOT DONE YET DOMORE, TCF /DONE, CLEAR FLAG TAD COSPAUSE /CNTL/S SET? SZA CLA DISMIS /YES DON'T PRINT TAD CNTOUT /NOISE SMA CLA DISMIS /YES ISZ CNTOUT /DECREMENT SKP /MORE TO COME DISMIS /ALL DONE WITH BUFFER ISZ GET /PT TO NEXT CDF 10 TAD I GET /GET CHAR/LINK SPA /RING LINK DCA GET /YES CLA TAD I GET /GET CHAR CDF 0 TLS /PRINT IT TAD (-212 /NEG LF CHAR SZA CLA /IS IT ? DISMIS /NO TAD (-1000 /YES, SET COUNT DCA LFDELAY DISMIS /EXIT /THIS SERVICES INTERUPTS FROM LINK TTY /CHECKS IF A SPECIAL CHAR NEEDS TO BE SENT /IMMEDIATELY, IE XOF OR XON /TAKES CHARS OUT OF LINK RING BUFFER /AND SENDS THEM /CHECKS IF LINK XOF HAS BEEN SENT XTTYSER, IFZERO TEST < NOP NOP NOP NOP NOP > IFNZRO TEST < TAD XLFDELAY SMA CLA JMP XDOMORE ISZ XLFDELAY DISMIS > CHG7, XDOMORE, XTCF /CLEAR FLAG EMPTY, TAD SPCHAR /GET SPECIAL CHAR SZA /ANYTHING? JMP XDONOW /YES, DO IT NOW TAD LNKPAUSE /XOF SZA CLA /ENABLED? DISMIS /YES, DON'T SEND TAD XCNTOUT /NOISE SNA CLA DISMIS /YES ISZ XCNTOUT /DECREMENT COUNT SKP /MORE TO DO DISMIS /ALL DONE ISZ XGET /PTR TO NEXT CDF 10 TAD I XGET /GET A CHAR/LINK SPA /RING LINK? DCA XGET /YES CLA TAD I XGET /GET CHAR CHG8, XDONOW, XTLS /DO IT TILL YOU'RE SATISFIED !!!!! IFNZRO TEST < TAD (-212 SNA CLA TAD (-1000 DCA XLFDELAY > IFZERO TEST < NOP NOP NOP NOP > CLA CLL DCA SPCHAR /CLEAR SPECIAL CHAR FLAG DISMIS /GUESS XLFDELAY, 0 GET, COSOUT XGET, LNKOUT LFDELAY, 0 /THIS SERVICES INTERUPTS FROM THE COS KBD /GET CHAR /CHECK IF XOF OR CNTL/S SET COSPAUSE = 1 /CHECKS IF XON OR CNTL/Q SETS COSPAUSE = 0 /CHECKS IF CNTL/C SETS COSHALT = 1 /CHECKS FOR ESC , SETS MSG = 1 /CHECKS FOR CNTL/O, CLEARS COUNT, RESETS PTRS KBDSER, TAD (200 /OR IN MSB KRS /GET CHAR AND (377 DCA CHAR KCC /CLEAR FLAG TAD CHAR TAD (-233 SNA /IS IT ESC? ISZ MSG /YES,TURN MESSAGE FLAG TAD (233-223 SNA /IS IT XOF? ISZ COSPAUSE /YES TAD (223-221 SNA /IS IT XON? JMP XONEXT /YES TAD (221-217 SNA /IS IT CONTROL/O? JMP CNTLO /YES TAD (217-203 SNA /IS IT CNTL/C? ISZ COSHALT /YES SET HALT FLAG DISMIS /ALL OTHER CHARS. XONEXT, TAD COSPAUSE SZA CLA TFL KBDEXT, DCA COSPAUSE DISMIS CNTLO, DCA CNTOUT CMA TAD PUT DCA GET DISMIS PAGE /GETLINE ROUTINE /FILLS THE COS KBD BUFFER WITH 8 BIT CHARS /EXIT +1 IF CONTROL U SEEN /EXIT +2 ONLY AT CR TIME /ACCEPT ONLY TAB CHAR AND COS CODES /SUPPORTS LINEFEEDS TO ECHO A LINE /SUPPORTS CNTL/U TO DELETE A LINE /SUPPORTS RUBOUTS /IGNORES OTHER CODES 200 - 237 AND 340 - 376 LINGET, 0 TAD (LINBUF-1 /PT TO COS DCA XR12 /KBD BUFFER DCA CCNT /CLEAR CHAR COUNT NXTCHAR, CLA CLL /T B S JMS I COSKBD /GET A CHAR DCA HOLD1 /HOLD IT TAD HOLD1 TAD (-377 /NEG RUBOUT CHAR SNA /IS IT? JMP RUBOUT /YES TAD (377-340 SMA /IS IT > 337? JMP NXTCHAR /YES, IGNORE TAD (340-225 /NEG CONTROL / U SNA /IS IT ? JMP NEWLINE /YES TAD (225-215 /NEG CR SNA /IS IT? JMP LINDONE /YES TAD (215-212 /NEG LF CHAR SNA /IS IT ? JMP REPEAT /YES TAD (212-211 /NEG HORT TAB SNA /IS IT ? JMP CHAROK /YES, OK TO STORE TAD (-27 /CHECK LOW END SPA CLA /< 240 CHAR ? JMP NXTCHAR /YES CHAROK, TAD HOLD1 /GET ORIG CHAR DCA I XR12 /STORE IT ISZ CCNT /COUNT IT TAD RUBSWT /GET SWT SNA CLA /FIRST CHAR AFTER RUBOUT? JMP .+4 /NO TAD (334 /YES,SEND A BACKSLASH DOTTYOUT DCA RUBSWT /CLEAR SWT TAD HOLD1 /TYPE CHAR DOTTYOUT JMP NXTCHAR /DO NEXT CHAR LINDONE, DOCRLF /GUESS TAD (240 /ADD EXTRA SPACE TBS DCA I XR12 TAD CCNT /GET CHAR COUNT CLL RAR /AND ROUND IT SZL IAC CLL RAL CIA /AND MAKE IT NEGATIVE DCA CCNT TAD (LINBUF-1 /RESET PTR TO COS KBD DCA XR12 ISZ LINGET /RETURN +2 OVER CONTROL/U JMP I LINGET /EXIT NEWLINE, DOCRLF /GUESS JMP I LINGET /EXIT +1 RUBOUT, TAD CCNT /ANY CHARS STORED? SNA CLA JMP NXTCHAR /NO CMA /SUBTRACT FROM TAD CCNT /THE CHAR COUNT DCA CCNT TAD RUBSWT /GET RUBOUT SWT SZA CLA /LAST CHAR A RUBOUT? JMP .+3 /YES,DON'T TYPE A BACKSLASH TAD (334 /TYPE A BACKSLASH DOTTYOUT CMA /POINT TO TAD XR12 /PREVIOUS CHAR DCA XR12 TAD I XR12 /GET PREVIOUS CHAR DOTTYOUT /AND ECHO IT CMA /POINT TO TAD XR12 /PREVIOUS CHAR DCA XR12 ISZ RUBSWT /SET RUBOUT SWT JMP NXTCHAR REPEAT, TAD CCNT /ANY CHARS TO SNA /TO ECHO JMP NXTCHAR /NO CIA /MAKE NEGATIVE DCA HOLD1 /FOR COUNT DOCRLF /GUESS TAD (LINBUF-1 /PT TO SOB DCA XR12 RPTLP, TAD I XR12 /GET A CHAR DOTTYOUT /ECHO IT ISZ HOLD1 /COUNT IT JMP RPTLP /DO MORE TAD CCNT /RESET WHERE TAD (LINBUF-1 /WE DCA XR12 /WERE JMP NXTCHAR /DO ANOTHER CHAR RUBSWT, 0 PAGE /THIS REPLACES "00" CHARS IN NAME WITH "01" /AND GENERATES THE PROPER COS CODES FOR FILE LOOKUP FIXUP, 0 TAD (NAM1 /RESET TO DCA GETCH /START OF NAME TAD (-03 /DO THREE INNER LOOPS DCA CCNT FIXLUP, TAD I GETCH /GET AND (7700 /MASK HIGH SZA /WAS IT 0? TAD (4000 /NO TAD (0100 DCA TEMP /HOLD IT TAD I GETCH /GET LOW 6 AND (77 SZA /WAS IT A 0? TAD (40 /NO IAC AND (77 /BACK TO 6 BIT TAD TEMP /RESTORE 6 HIGH DCA I GETCH /RESTORE WORD ISZ GETCH ISZ CCNT /DONE? JMP FIXLUP /NO JMP I FIXUP GETCH, 0 TEMP, 0 /DO FGBG ERROR MESSAGE TO COS TTY ONLY / FATAL ** ERR1RTN, DOMSGOUT ERR1MSG DOCRLF JMP COMEXIT /PRINT INVALID COS FILE NAME /TO THE COS TTY ONLY /RETURN TO EXIT IN SCAN /NON FATAL ERR2RTN, CLA CLL DOMSGOUT ERR2MSG DOCRLF JMP SCANDN+1 /PRINT TOO MANY BAD RECORDS SENT /TO THE COS TTY AND LINK TTY /** FATAL ** ERR4RTN, DOERROUT ERR4MSG JMP EXIT /PRINT ALL DONE WITH TRANSMISSION /TO THE COS TTY AND LINK TTY /ORDERLY EXIT ERR5RTN, DOERROUT ERR5MSG DOMSGOUT /ASK IF MORE PRMPT8 /XMITING GETLINE JMP .-3 /CNTL/U TAD I XR12 TAD (-"Y SZA CLA /YES ANSWER? JMP EXIT /NO CLA CLL IAC /YES,CLOSE JMS I KCLOSE /COMMAND FILE JMP ASK1A /START MODE A /PRINT WAIT TOO LONG BETWEEN LINK XOFF AND XON /TO THE COS TTY ONLY /** FATAL ** ERR6RTN, DCA XCNTOUT /CLEAR LINK OUT COUNT DCA COSPAUSE /TURN OFF COS CNTROL/S TFL /START COS TTY DOMSGOUT ERR6MSG JMP DONE /PRINT COS 300 CNTL/C SEEN /TO COS TTY AND LINK TTY /PSEUDO ORDERLY EXIT ERR7RTN, CLA CLL / DCA COSHALT /YES, CLEAR ERR SWT DCA XCNTOUT /CLEAR LINK OUT CNT CMA /RESET THE GET TAD XPUT /TO THE DCA XGET /PUT-1 TAD TRICK1 /TO PREVENT DCA .-1 /MULTIPLE CALLS TAD XMITFLAG /HAVE STARTED TRANSMISSION? SNA CLA JMP SUBER7RTN /NO, DON'T SEND TO LINK TTY DOERROUT ERR7MSG JMP EXIT SUBER7RTN, DOMSGOUT ERR7MSG TRICK1, JMP COMEXIT /PRINT LINK CONTROL/C SEEN /TO COS TTY ONLY /** FATAL ** ERR8RTN, CLA CLL /WILL HAVE "JMP DONE" DCA LNKHALT /CLEAR ERR SWT DCA XCNTOUT /ZERO LINK CHAR COUNT TAD TRICK2 /TO PREVENT MULTIPLE DCA ERR8RTN /CALLS TAD XMSG /SEE IF SZA CLA /A MESSAGE FOR COS TTY JMS DOCOSMSG /YES TRICK2, JMP DONE /PRINT LINK BUFFER FULL TOO LONG /TO COS TTY ONLY /** FATAL ** ERR9RTN, DOMSGOUT ERR9MSG DCA XCNTOUT /CLEAR THE OUT BUFFER CNT JMP DONE /ENTRY HERE IF COS TTY BUFFER FULL TOO LONG /CLEAR COSPAUSE SWT AND START THE COS TTY /NON FATAL ERR10RTN, 0 DCA COSPAUSE /CLEAR SWT TFL /START TTY JMP I ERR10RTN /RETURN FROM WHERE YOU CAME /PRINT WAITING TOO LONG FOR A LINK ACK OR NAK /TO COS TTY ONLY /** FATAL ** ERR11RTN, DOMSGOUT ERR11MSG JMP DONE /PRINT BAD $SOD RECORD TO COS TTY ONLY / ** FATAL ** ERR12RTN, DOMSGOUT ERR12MSG JMP EXIT PAGE /DOCOSMSG IS CALLED ON RECORD BOUNDARY TIME /IF THERE IS A FULL LINE FROM THE LINK SIDE AVAILBLE DOCOSMSG, 0 DOCRLF /GUESS TAD (207 /SEND A DOTTYOUT /BELL COSTXT, CIF 0 /DISABLE ION WHILE DELICATE ISZ XGETIN /BUMP TO NEXT TAD I XGETIN /GET CHAR/LINK SPA /RING LINK? DCA XGETIN /YES CLA ISZ XCNTIN /COUNT IT NOP /WE DON'T CARE TAD I XGETIN /GET CHAR DOTTYOUT /TYPE IT CIF 0 /DISABLE ION WHILE DELICATE TAD I XGETIN /GET CURRENT CHAR TAD (-212 /NEG LINEFEED CHAR SZA CLA /IS IT? JMP COSTXT /NO CMA /SUBTRACT ONE FROM TAD XMSG /LINK MESSAGE FLAG DCA XMSG TAD (207 /DING DOTTYOUT /DONG JMP I DOCOSMSG /THE MOVIES, SWEET HEART !! XGETIN, LNKIN /THE DOLNKMSG RTN IS ENTERED AT RECORD BOUNDARY TIME /ALLOWS OPERATOR TO TYPE A MESSAGE TO BE SENT TO THE LINK /THIS CODE IS INTERUPTABLE DOLNKMSG, 0 TAD (220 /SEND A DLE CODE TO LINKOUT /THE LINK A S A P X1, DOMSGOUT /PRINT MESSAGE PROMPT MSGPMT DOCRLF /ONE MORE GUESS TAD CNTOUT /WAIT UNTIL THE SZA CLA /COS TTY DONE JMP .-2 /NELLIE GETLINE /GET A LINE FROM COS KBD JMP X1 /CONTROL/U RETURN TAD CCNT /ANY CHARS SNA CLA JMP MSGDON /NODA CHARGET, TAD I XR12 /GET A CHAR FROM COS KBD BUFFER LINKOUT /AND SEND IT ISZ CCNT /COUNT IT JMP CHARGET /NOT DONE YET MSGDON, TAD (215 /SEND A CR TO LINKOUT /THE LINK IFNZRO TEST < TAD (212 LINKOUT CLA CLL > /SET A ACK VALUE IFZERO TEST < NOP NOP CLA CLL CMA > /NON ACK OR NAK VALUE DCA RECFLG /WAIT FOR A ACK/NAK DOCHECK FIFTEEN /WAIT A GOOD LONG TIME ERR11 /TIMEOUT ERROR DCA MSG /WE DON'T CARE WHICH RESPONSE JMP I DOLNKMSG /CLEAR COS MSG SWT AND EXIT PAGE /COS KBD BUFFER AND ONE TIME CODE LIVE HERE /THIS IS NOT A RING BUFFER /INIT CHANGES ALL IMPORTANT REFERENCES OF "AND 0002" /TO A "AND P7400". PLUS SOME MINOR HOUSEKEEPING. /CHECKS/CHANGES IOT'S IF /S SWITCH LINBUF, / * * * * * / / KEEP THESE HERE FOR EASY PATCHING / INCODE, 440 /** CHANGE THIS FOR PROPER CODE OUTCODE, 450 /** "" "" / /* * * * * * * INIT, TAD CHANGE /SET TABLE DCA XR12 /PTR TRICK, TAD I XR12 /GET A ADDRESS SNA /END OF TABLE? JMP TRICKDONE /YES DCA INIT /NO, STORE AS ADDRESS PTR TAD NEWINSTRUCTION /GUESS DCA I INIT /STORE IT JMP TRICK /DO ANOTHER TRICKDONE, TAD I M4 /SET PTR DCA SYSHND /TO SYS HANDLER TAD NMBR /SET PTR DCA DFLTLU /TO DEFAULT LOGICAL UNIT NUMBER TAD K7000 /SET MAX RECORD SIZE = 512 DCA LENGTH TAD (CLA CLL /TO PREVENT ADDITIONAL CALLS DCA START TAD I FLAGS /CHECK IF FGBG IF RUNNING SPA CLA ERR1 /TWO GUESSES DOMSGOUT /SAY HELLO LNKNAM /TO COS TTY DOCRLF /CLARKE WALKER HAVE YOU GUESSED WHAT THIS DOES? TAD I SWITCH /GET THE "RUN" SWITCH TAD (-2300 /GET A NEG "S" SZA CLA /IS IT? JMP NORMAL /NO, USE DEFAULT DEVICE CODES DOMSGOUT SPEC1 /ASK FOR INPUT CODE JMS CHNGIT /GO VALIDATE AND DO IT JMP .-3 /BAD RETURN DOMSGOUT SPEC2 /ASK FOR OUTPUT CODE JMS CHNGIT /GO VALIDATE AND DO IT JMP .-3 /BAD RETURN JMP START /WE IS DONE NOW NORMAL, TAD INCODE /GET DEFAULT INPUT DEVICE CODE DCA HOLD1 JMS CHNGONE /GO SET IT UP TAD OUTCODE /GET DEFAULT OUTPUT DEVICE CODE DCA HOLD1 JMS CHNGONE /GO SET IT UP JMP START /OPEN FIRE MA TES!!!! CHNGIT, 0 GETLINE /GET ANSWER JMP I CHNGIT /CONTROL/U RETURN TAD CCNT /GET CHAR COUNT SNA /ANY? JMP I CHNGIT /NO TAD (2 /ENSURE 2 CHARS. SZA CLA /= 2 ? JMP I CHNGIT /NO ISZ CHNGIT /YES, BUMP TO PSEUDO GOOD RETURN TAD I XR12 /EIGHTS PLACE AND (7 /ONLY 6 BITS BSW /MOVE TO HIGH DCA HOLD1 /HOLD IT TAD I XR12 /GET ONES PLACE AND (7 CLL RTL;RAL /MOVE TO PROPER PLACE TAD HOLD1 /GET PREVIOUS DCA HOLD1 /STORE ALL JMS CHNGONE /GO CHANGE ONE DEV CODE JMP I CHNGIT /DONE WITH THIS ONE CHNGONE, 0 CHGLP, ISZ TABLE /BUMP TO NEXT ENTRY TAD I TABLE /GET ADDRESS PTR SNA /END OF SEGMENT? JMP I CHNGONE /YES DCA CKSM /NO, HOLD ADDRESS TAD I CKSM /GET IOT CODE AND (7007 /MASK OUT THE DEVICE CODE TAD HOLD1 /GET NEW DEVICE CODE DCA I CKSM /AND STORE JMP CHGLP CHANGE, FIRSTADD-1 NEWINSTRUCTION, AND P7400 K7000, 7000 FLAGS, 7772 SWITCH, 7776 FIRSTADDRESS, 4544;5436;5453;5505;5516;5525;5653;7745;0 /THIS A TABLE OF LINK KL8JA IOTS REFERENCES TABLE, .;INCHG2;INCHG4;INCHG5;0 CHG1;CHG3;CHG6;CHG7;CHG8;0 /****************** /THIS IS THE BUFFER FOR TEXT /FROM THE LINK COMPUTER *4200 LNKIN, 0 ZBLOCK 177 *LNKIN+177 LNKINFULL, LNKIN /**************** /THIS IS THE BUFFER FOR TEXT TO /THE COS 300 TTY FIELD 1 *4200 COSOUT, 0 ZBLOCK 2177 *COSOUT+177 COSFULL, COSOUT /****************** /THIS THE BUFFER FOR TEXT TO /THE LINK COMPUTER. *COSFULL+1 LNKOUT, 0 *LNKOUT+1777 LNKFULL, LNKOUT /************************ *LNKFULL+1 MSGPMT, TEXT /WHAT IS THE MESSAGE ?/ INMES, TEXT /IN- / ERR1MSG, TEXT /ERROR FGBG IS RUNNING ABORTING !/ ERR2MSG, TEXT /INVALID FILENAME OR LUN !/ ERR4MSG, TEXT /CURRENT RECORD SENT 7 TIMES - ABORTING ! / ERR5MSG, TEXT /ALL DONE WITH TRANSMISSION / ERR6MSG, TEXT /TOO LONG OF WAIT BETWEEN LINK XOF AND XON ABORTING / ERR7MSG, TEXT /COS 300 CONTROL - C SEEN - ABORTING / ERR9MSG, TEXT /ERROR WITH THE LINK KL8J OUTPUT LINE - ABORTING ! / ERR11MSG, TEXT /WAITING TOO LONG FOR A LINK ACK OR NAK - ABORTING !/ ERR12MSG, TEXT /INVAILD $SOD RECORD ABORTING !!!!/ JOB, TEXT /$JOB / BOF, TEXT /$BOF / XXMSG, TEXT /$MSG / EOF, TEXT /$EOF / SOD, TEXT /$SOD / EOJ, TEXT /$EOJ / PRMPT1, TEXT /ENTER THE COMMAND FILE NAME AND LUN <> / PRMPT2, TEXT /ANY MESSAGES ? / PRMPT3, TEXT /ENTER RSTS FILE SPECS / PRMPT4, TEXT /ENTER COS DATA FILE AND LUN <> / PRMPT5, TEXT /MORE COS DATA IN THIS RSTS FILE ? / PRMPT6, TEXT /IS THE COMMAND FILE ALREADY BUILT ? / PRMPT7, TEXT /DO YOU WISH TO START TRANSMISSION ? / PRMPT8, TEXT /DO YOU WISH TO CONTINUE TRANSMISSION ? / SPEC1, TEXT /INPUT CODE <> ? / SPEC2, TEXT /OUTPUT CODE <> ? / LNKNAM, TEXT /LNK811 VERSION 2.02 / $