/DECNET/8 V1A TLK TASK / / / / / /COPYRIGHT (C) 1976,1977 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / J.R., S.R. - MAY, 1976 /JR 15-SEP-76 ADDED PDP11 COMPATIBILITY /JR 11-JAN-77 ADDED NSP CYCLE2 COMPATIBILITY / / DECNET/8 RELEASE VERSION 1 / DECNET/8 PATCH LEVEL A / APRIL 8, 1977 / VERSION=1 PATCH="A / / TLK ERROR DEFINES NXTERR=22 /NON-EXISTENT TERMINAL NRBERR=21 /NO RECEIVE BUFFER STXERR=20 /SYNTAX ERROR RCVERR=24 /RECEIVE ERROR RTEERR=25 /REMOTE TERMINAL ERROR / TLK CHARACTER DEFINES QUOCHR="' COLCHR=": UNDCHR="_ / TLK TASK DEFINES INIWT=RUNWT TASK=TLK IFNDEF TLKLOC IFNDEF TLKFLD IFNDEF TLKCHN CUR=TLKFLD CHANNL=TLKCHN CCB=TLKLOC+1000 FIELD CUR%10 *TLKLOC VERSION /VERSION PATCH /AND PATCH IN CORE /MAIN TLK PROCESSING LOOP /WAIT FOR A REQUEST TO RUN LOOP, CLA CLL CDF CUR CAL /SUSPEND OURSELVES SUSPND /'TILL WE MEET AGAIN START, CAL SENDW TTY PROMPT /SEND A PROMPT AND GET A LINE OF INPUT TAD DEFNOD /ASSUME DEFAULT NODE NAME DCA I (NODNAM TAD DEFNOD+1 DCA I (NODNAM+1 TAD DEFNOD+2 DCA I (NODNAM+2 DCA DSTTTY /0 IS DEFAULT TTY NAME (NUMBER) TAD I (CMDBUF SPA SNA /IS LINE EMPTY? JMP NULINE /YES CLA /NO JMS I (PARSE /PARSE OFF THE INPUT LINE DCA ENDCOD TAD I (LINPTR CIA TAD (LINBUF SNA JMP FIN /IGNORE IF NOTHING TO SEND DCA I (LINSIZ /ELSE, STORE SIZE IN TRANSMIT MESSAGE CAL SENDW NSP /SEND A CONNECT INIT CIMSG JMS I (CHKSTA /CHECK OUT STATUS CAL /THEN SEND MESSAGE SENDW NSP TRMSG JMS I (CHKSTA /CHECK OUT STATUS CAL SENDW NSP DIMSG /DISCONNECT FIN, TAD ENDCOD NULINE, SNA CLA JMP START /CR MEANS KEEP TLK RUNNING JMP LOOP /$ MEANS GO AWAY CIMSG, ZBLOCK 3 0 CONINI CHANNL NODNAM DSTNAM DSTTTY /PDP11 OPTIONAL DATA CNFOPT DSTTTY, 0 0 SRCTTY, 0 0 DIALOG, 0 -1 CNFOPT, 0 CONCOD, ZBLOCK 10 TRMSG, ZBLOCK 3 0 TRNSMT CHANNL CDF CUR LINBUF LINSIZ, 0 DEFNOD, TEXT /LOCAL/ NODNAM, ZBLOCK 3 DSTNAM, 0 TEXT /TLK/ ZBLOCK 4 0;0 ENDCOD, 0 PAGE / STATUS CHECK ROUTINE /MUST IMMEDIATELY FOLLOW NSP SYSTEM CALL CHKSTA, 0 AC7776 /BACK UP TO MESSAGE POINTER TAD CHKSTA /GET PTR TO PTR TO MESSAGE DCA STATPT TAD I STATPT /GET PTR TO MESSAGE TAD (3 /GET PTR TO ITS STATUS WORD DCA STATPT TAD I STATPT /GET STATUS AND (77 SNA JMP I CHKSTA /0 MEANS GOOD; RETURN TAD (-CRJST /SEE IF CONNECT REJECT SZA CLA JMP NOTCRJ /NO, JUST PRINT ERROR MESSAGE TAD I (CCBOPL /ANY OPTIONAL DATA? SNA CLA JMP NOTCRJ /NO, JUST PRINT ERROR MSG TAD I (CCBOPT+1 /ELSE REPORT TLK REASON SKP NOTCRJ, TAD I STATPT /PICK UP ERROR CODE AND (77 JMS ERRPRT /PRINT IT, DISCONNECT, THEN EXIT JMP I (FIN /RESTART PROGRAM STATPT, 0 /ROUTINE TO LOOK UP ERROR CODE AND PRINT AMESSAGE /FORCES A DISCONNECT AND EXITS ERRPRT, 0 /ERROR CODE IN AC SNA TAD (CONRSN /INTERRUPT MSG IS PROTOCOL ERROR DCA ERRCOD TAD (ERRTAB DCA ERRPTR ESRCH, TAD I ERRPTR ISZ ERRPTR DCA EMSLOC TAD I ERRPTR ISZ ERRPTR SZA /AT END OF TABLE? TAD ERRCOD /NO, COMPARE AGAINST ERROR CODE SZA CLA JMP ESRCH /NOT A MATCH, KEEP LOOKING CAL SENDW TTY ERRMSG JMS I (SCOL /SCAN TO END OF LINE TAD I (CCBSTA SNA CLA JMP I ERRPRT /QUICK EXIT IF ALREADY DISCONNECTED CAL SENDW NSP DSCMSG /OTHERWISE, DISCONNECT JMP I ERRPRT /RETURN /TABLE TO EQUATE MESSAGES WITH ERROR CODES ERRTAB, MSG2; -DABST MSG3; -DRJST MSG4; -ILLST MSG5; -NODST MSG6; -ERRST MSG7; -LDNST MSG8; -NRBERR MSG9; -CONRSN MSG11; -CRJST MSG12; -STXERR MSG14; -NXTERR MSG99; 0 ERRCOD, 0 ERRPTR, 0 ERRMSG, ZBLOCK 3 IND 0 EMSLOC, 0 DSCMSG, ZBLOCK 3 0 DISCON CHANNL 0 SXERR, CLA TAD (STXERR JMS ERRPRT JMP I (FIN PAGE /ROUTINE TO PARSE A TLK COMMAND LINE OF THE FORM / / NODNAM_DEV:'MESSAGE / / NODNAM_ IS OPTIONAL, DEFAULT IS OUR NODE NAME / DEVICE: IS USUALLY OF FORM TTN OR TTYN AND IS OPTIONAL PARSE, 0 TAD (QUOCHR-COLCHR DCA COLCOD /INITIALIZE PARSER FLAGS TAD (COLCHR-UNDCHR /NO COLON OR UNDERSCORE YET DCA UNDCOD TAD (CMDBUF-1 /SET POINTERS UP DCA CHPTR TAD CHPTR DCA CHPTR2 /CHPTR2 POINTS TO BEGIN OF FIELD PARSLP, ISZ CHPTR /PRE-INCREMENT POINTER TAD I CHPTR /GET CHARACTER (SCAN FOR DELIMITER) SPA SNA JMP I (SXERR /UNEXPECTED END-OF-LINE TAD (-QUOCHR SNA JMP GOTQUO /GOT A QUOTE TAD COLCOD SNA JMP GOTCOL /GOT A COLON TAD UNDCOD SZA CLA JMP PARSLP /NONE OF THE ABOVE, KEEP LOOKING FOR A DELIM /GOT AN UNDERSCORE GOTUND, DCA UNDCOD /FLAG UNDERSCORE SEEN DCA I (NODNAM /CLEAR NODE NAME BUFFER DCA I (NODNAM+1 DCA I (NODNAM+2 TAD (-UNDCHR DCA DELIM TAD (NODNAM /SET POINTER DCA NODNMP AC7775 /ALLOW 3 WORDS MAX DCA NODNMC NODNML, JMS GETCH /GET A CHAR CLL RTL /SHIFT LEFT RTL RTL DCA I NODNMP /STORE LEFT HALF JMS GETCH /GET A CHAR TAD I NODNMP /ADD TO L.H. DCA I NODNMP /STORE ISZ NODNMP ISZ NODNMC JMP NODNML /ITERATE JMS GETCH /FLOW PAST EXCESS CHARACTERS CLA JMP .-2 GOTCOL, DCA UNDCOD /FLAG NO BACK-ARROWS ALLOWED DCA COLCOD /FLAG NO COLONS ALLOWED TAD (-COLCHR DCA DELIM /HANDLE DEVICE NAME, IGNORE LETTERS, PARSE OFF OCTAL NUMBER COLNLP, DCA I (DSTTTY /CLEAR TTY N COLNL1, JMS GETCH /GET A CHARACTER TAD (-70 CLL TAD (10 DCA N SNL JMP COLNL1 /IGNORE NON-DIGITS TAD I (DSTTTY /SHIFT PREVIOUS NUMBER AND (7000 SZA CLA JMP I (SXERR /NUMBER TOO BIG TAD I (DSTTTY CLL RAL RTL TAD N JMP COLNLP /ITERATE N, 0 GETCH, 0 ISZ CHPTR2 TAD I CHPTR2 TAD DELIM SNA CLA JMP CHK TAD I CHPTR2 AND (77 JMP I GETCH CHK, TAD I (DSTTTY AND (7400 SZA CLA JMP I (SXERR /NUMBER TOO BIG JMP PARSLP /OTHERWISE SUCCESSFUL EXIT DELIM, 0 /EITHER -UNDCHR OR -COLCHR / HANDLE APOSTROPHE /GET TEXT TO SEND GOTQUO, TAD (LINBUF DCA LINPTR GOTLUP, ISZ CHPTR TAD I CHPTR SPA SNA JMP I PARSE /RETURN IF EOL DCA I LINPTR ISZ LINPTR JMP GOTLUP CHPTR, 0 CHPTR2, 0 COLCOD, 0 UNDCOD, 0 NODNMP, 0 NODNMC, 0 LINPTR, 0 SCOL, 0 CLA /SCAN TO END OF LINE TAD I CHPTR ISZ CHPTR SMA SZA JMP SCOL+1 DCA I (ENDCOD JMP I SCOL PAGE CCB=. *CCB+120 / TLK AST ROUTINE /SHOULD BE ENTERED ON A DISCONNECT /OTHERWISE IT'S AN ERROR USRAST, TAD CCBRSN /WHY THE AST? AND (77 TAD (-CONRSN SNA /WAS IT A CONNECT? JMP REJCON /YES, REJECT IT TAD (CONRSN-DISRSN SNA CLA /WAS IT A DISCONNECT? JMP CNFDIS /YES, CONFIRM DISCONNECT ERREP, TAD CCBRSN /REPORT THE ERROR JMS I (ERRPRT JMP CCBRTN /RETURN REJCON, CAL /REJECT BOGUS CONNECT SENDW NSP DIMSG JMP ERREP CNFDIS, TAD (LOOP /MOVE MAINLINE BACK TO BEGIN DCA I (CCBPC JMP I (CCBRTN /RETURN FROM AST DIMSG, ZBLOCK 3 0 DISCON CHANNL 0 PROMPT, ZBLOCK 3 NOCRLF+120 CMDBUF TEXT /TLK>/ PAGE CMDBUF, LINBUF, ZBLOCK 120 MSG2, TEXT /TLK> REMOTE TALK ABORTED/ MSG3, TEXT /TLK> CAN'T CONNECT TO REMOTE TLK/ MSG4, TEXT /TLK> PROGRAMMING ERROR/ MSG5, TEXT /TLK> UNKNOWN NODE NAME/ MSG6, TEXT /TLK> NSP ERROR/ MSG7, TEXT /TLK> LINE DOWN/ MSG8, TEXT /TLK> MESSAGE TOO LONG/ MSG9, TEXT /TLK> PROTOCOL ERROR/ MSG11, TEXT /TLK> CONNECT REJECTED BY REMOTE TLK/ MSG12, TEXT /TLK> SYNTAX ERROR/ MSG14, TEXT /TLK> NON-EXISTENT TERMINAL/ MSG99, TEXT /TLK> SYSTEM ERROR/ *CCB+12 0 /OBJECT TYPE=0 TEXT /TLK/ ZBLOCK 4 1;3 PAGE