universal NetDef - common definitions for universal network subttl provan - 1982 STUPID==-1 ;Temporary IMP's, aborted by RESET. search f,s search MacTen ; make coding convenient $reloc $high comment \ common definitions which will be needed by most everybody \ subttl compilation control symbols ifndef FtChck,< FtChck==:-1 > ; on to do checksumming of messages. ; (when off, assumes checksums of +0 means ; "no checksum", which is not true in ; the later specs.) ifndef debug,< debug==-1 > ; off if code is bug free subttl protocol definitions .lnkip==^d155 ; IP's protocol number in 1822 "link" field. .iptcp==^d6 ; TCP's protocol number according to IP. .ipicm==^d1 ; ICMP's protocol number according to ICMP. .ipudp==^d17 ; UDP's protocol number according to IP. subttl constants desirable for their neumonic meaning ful.wd==^d36 ; the number of bits in a dec-10 word hlf.wd==^d18 ; the number of bits in a half word net.wd==^d32 ; the number of bits in a net word net.by==^d8 ; the number of bits in a net byte msk.hw==mask.(<^d16>,<^d35>) ; mask for complementing checksum half word. wd2byt==2 ; how to shift from words to bytes byt2wd==-wd2byt ; how to shift from bytes to words oct2by==^d3 ; how to shift from an octet of bytes into bytes. byt2bt==^d3 ; how to shift from bytes to bits. subttl define fields of a leader with 32 bit words ; macros to define fields in leaders, and manipulate the fields ; (much of this is from ideas in MACTEN.) ;MACROS TO DEFINE AND LOAD/STORE A BYTE LOCATION ;MACRO DefFd. (BYTE NAME, Offset into leader, first bit, length of field> ; all numbers in all three numerical arguments are interpreted as DECIMAL. DEFINE DefFd.(NAM$,LOC$,Pos$,Wid$),< ..OLD==10 ;; get old radix radix 10 ;; do this part in decimal ..Pos== ..Wid== ..Loc== ..TYP==3 ;; assume just a random byte IFE <..Pos>!<..Wid-ful.wd>,..TYP==0 ;; full network word IFE <..Pos-hlf.wd>!<..Wid-hlf.wd>,..TYP==1 ;; part of net word in ... IFE <..Pos>!<..Wid-hlf.wd>,..TYP==2 ;; ...or of dec-10 word DF%%ST (\..TYP,NAM$,\..Loc,\<..Pos+..Wid-1>,\..Wid) PURGE ..OLD,..TYP,..Loc,..Pos,..Wid > subttl define fields in some random storage location ; use these marcos to define groups of storage symbolically ; without defining any real space for them. ; call to start a block of storage, with optional starting offsets define BkIni. (Word1$<0>, Bit1$<0>), < %%off== ; start with first word wanted %%bit== ; and first bit wanted > ; call to define each field in the group. two arguments: name of ; the field and width of the field in bits (defaults to 1 full word). ; does not allocate the storage. next call will start at the same spot. define BkDef. (Nam$, Wid$), < ifndef %%off,< ;; discourage caller from not initializing. printx ? Must call BkIni. before defining storage. BkIni. ;; take evasive action > ..Old==10 radix 10 ..Wid== ..Typ==3 ;; assume it's a random byte ifge ..Wid-ful.wd,< ;; allocating at least a full word? BkNxW% ;; need to start words on word boundaries ..Typ==0 ;; this is a type 0 (full word) alocation > ife ..Wid-hlf.wd,< ;; allocating exactly a 1/2 word? BkNxH% ;; half words should start on half words ifn %%bit,< ..Typ==1 > ;; of word ife %%bit,< ..Typ==2 > ;; of word > ife ..Typ-3,< ;; is it a random byte? ifg <%%bit+..Wid>-ful.wd,< ;; yes. is there ;; enough room for it? BkNxW% ;; not in this word. > > DF%%ST (\..TYP,NAM$,\%%off,\<%%bit+..Wid-1>,\..Wid) %%loff==%%off ;; remember last offset PURGE ..OLD,..TYP,..Wid > ; end of BkDef. ;; same as BkDef., except the storage is allocated. the next call to ;; either will define space after this spot. define BkNxt. (Nam$, Wid$), < BkDef. Nam$, ;; define the right stuff ..Old==10 radix 10 ;; make sure to read width in base 10 ;; now allocate that storage %%bit==%%bit+ ;; assign those bits radix ..Old ;; back to starting radix ifge %%bit-ful.wd,< ;; allocated all of this word? %%off==%%off+<<%%bit+ful.wd-1>/ful.wd> ;; yes. save space %%bit==0 ;; start next byte at start of word > PURGE ..Old > define BkOff. (Nam$), < ifndef %%loff,< printx ? BkOff. definition for 'Nam$' does not follow a definition. > ifdef %%loff,< Nam$'==%%loff ;; define symbol > > define BkEnd. (Len$), < BkNxW% ;; go to the next word ifnb ,< Len$'==%%off > ;; get the final offset purge %%bit,%%off,%%loff ;; make sure nobody tries to ;; use these. > ; macros that help out the above macros. the BkNxW% may be of use ; to other users, but the BkNxH% should not be used except above. ; guarentee that we start the next field on a word boundary define BkNxW%, < ifn %%bit,< %%off==%%off+1 ;; next word %%bit==0 ;; at the start of it > > ; guarentee the next field start at the next 1/2 word boundary define BkNxH%, < ifn %%bit,< ;; not already at a word boundary ifn %%bit-hlf.wd,< ;; nor a 1/2 word boundary ifg %%bit-hlf.wd,< ;; beyond the middle 1/2 BkNxW% ;; move on the next word > ifn %%bit,< ;; still not settled %%bit==hlf.wd ;; move to middle 1/2 word > > > > subttl THIS IS A HELPER MACRO FOR INTERNAL USE ; call this macro only from storage defining macros. arguments: ; TYP$ - 0 if a full word, 1 is , 2 is , 3 if byte. ; NAM$ - name of field to be defined. ; LOC$ - offset from word zero of block. ; POS$ - right most bit. bit 0 is 0. (only used if Type 3) ; WID$ - width of field. (only used if Type 3) ; all of the last three arguments should be passed in as decimal digits; ; normal calling sequence: ; ..Old==10 ; Radix 10 ; DF%%ST (\..Typ,Nam$,\..Loc,\..Pos,\..Wid) DEFINE DF%%ST (TYP$,NAM$,LOC$,POS$,WID$),< RADIX ..OLD DEFINE NAM$ (OPS,AC,E,Cond),< ifidn ,< ;; no condition means simple movement ..C==0 IRP OPS,< IFE TYP$-..C,< STOPI ;; the IFE's that follow are to strip possible surrounding ;; angle brackets from OPS. IFN 3-..C,< ife 0, OPS ,^d'Loc$'+'E > IFE 3-..C,< ife 0, OPS ,[POINT WID$,^d'Loc$'+'E,POS$] > > ..C==..C+1 > PURGE ..C > ;; end of IFIDN ifdif ,< ;; a condition means it's an INCR/DECR ife Typ$,< OPS'Cond ,^d'Loc$'+'E > ;; simple word ifn Typ$,< ;; not a simple word pushj p,[ ;; allow us to skip this test $'OPS ('Cond,,Nam$,) ;; call that version ] ;; end the literal > ;; end of IFN Typ$ > ;; end of IFDIF > ;; end of NAM$ definition > ;; end of DF%%ST definition subttl support for odd instruction to odd bytes ; these macros may be called if someone tries to do something ; odd (AOS) to an odd sort of location (a byte). it would ; be wise to avoid misallocating space like this, probably, ; but we make sure these macros are defined so nobody gets ; surprised. if the byte is a full word, these operations ; are trivial (single instructions) and handled before these ; macros are called. ; all of these macros are called from within literals via PUSHJ P, ; what to do to AOS a byte define $AOS (Cond$,AC$,Nam$,E$), < ifb ,< ;; if there is no AC provided... push p,0 ;; ...let the assembler use 0, but ;; save it first. note that caller ;; can't use 0 to index, so we're ;; relatively safe using this reg. > load. ,Nam$, ;; get the byte or whatever aos'Cond$ ;; INCR it ifnb ,< ;; only if there is a condition sos (p) ;; remeber not to skip return > stor. ,Nam$, ;; put the byte back in its storage ifb ,< ;; was there an AC provided? pop p,0 ;; no. restore 0 which we stole > ifnb ,< ;; only if we ever skip pjrst cpopj1## ;; skip return (unless return ;; address was SOSed before) > ifb ,< ;; we never skip on any condition popj p, ;; normal return > > ; what to do to SOS a byte define $SOS (Cond$,AC$,Nam$,E$), < ifb ,< ;; if there is no AC provided... push p,0 ;; ...let the assembler use 0, but ;; save it first. note that caller ;; can't use 0 to index, so we're ;; relatively safe using this reg. > load. ,Nam$, ;; get the byte or whatever sos'Cond$ ;; INCR it ifnb ,< ;; only if there is a condition sos (p) ;; remeber not to skip return > stor. ,Nam$, ;; put the byte back in its storage ifb ,< ;; was there an AC provided? pop p,0 ;; no. restore 0 which we stole > ifnb ,< ;; only if we ever skip pjrst cpopj1## ;; skip return (unless return ;; address was SOSed before) > ifb ,< ;; we never skip on any condition popj p, ;; normal return > > ; what to do to do a CAM to a byte define $CAM (Cond$,AC$,Nam$,E$), < ifn T1-,< ;; use T1 unless that's the AC$ push p,t1 ;; save the scratch register load. t1,Nam$, ;; get the value to be compared cam'Cond$ ,t1 ;; do they compare? pjrst tpopj## ;; no. normal return pjrst tpopj1## ;; yes. skip return > ;; using T1 for scratch ife T1-,< ;; otherwise use T2 push p,t2 ;; save the scratch register load. t2,Nam$, ;; get the value to be compared cam'Cond$ ,t2 ;; do they compare? pjrst t2popj## ;; no. normal return pjrst t2poj1## ;; yes. skip return > ;; using T2 for scratch > ;; end of $CAM ; what to do to do a SKIP on a byte define $SKIP (Cond$,AC$,Nam$,E$), < ifnb ,< ;; provided with an AC load. ,Nam$, ;; get the value jump'Cond$ ,cpopj1## ;; skip return if AC matches condition popj p, ;; else normal return > ifb ,< ;; if user doesn't give an AC to work with push p,t1 ;; save T1 load. t1,Nam$, ;; get the value jump'Cond$ t1,tpopj1## ;; restore T1 and skip return pjrst tpopj## ;; restore T1 and don't skip > > subttl macros for handle storage locations declared above ;MACRO LOAD. (AC, BYTE NAME, Block location (may be indexed AC)) ; WILL LOAD AC WITH THE CONTENTS OF THE BYTE. ;MACRO STOR. IS IDENTICAL EXCEPT THE AC IS STORED INTO THE BYTE. ;MACRO ZERO. IS IDENTICAL (FIRST ARG IGNORED) EXCEPT ZERO IS STORED, ; trashing the AC if the byte is not a full or half word. ;MACRO ones. IS IDENTICAL (FIRST ARG IGNORED) EXCEPT -1 IS STORED, ; trashing the AC if the byte is not a full or half word. DEFINE LOAD. (AC$,STR$,E$),< STR$ (,,)> DEFINE STOR. (AC$,STR$,E$),< STR$ (,,)> DEFINE ZERO. (AC$,STR$,E$),< STR$ (, skipa dpb>>,,)> DEFINE ones. (AC$,STR$,E$),< STR$ (,[-1] skipa dpb>>,,)> ; macro INCR. ( , , , ) ; increment the given byte in the given block, loading the resulting ; value into AC, and skip on condition: "n", "e", "g", "ge", "l", "le", ; "a", or "", just like the endings to the AOS instruction (what a ; coincedence!). may be blank. define Incr. (AC$,Str$,E$,Cond$<>),< Str$ (AOS,,,) > define Decr. (AC$,Str$,E$,Cond$<>),< Str$ (SOS,,,) > ; compare the contents of AC to a storage location and skip on condition. define Cam. (AC$,Str$,E$,Cond$<>),< Str$ (CAM,,,) > ; compare the contents of the operand to zero and skip on condition, ; loading value into the AC if this field is not blank. define Skip. (AC$,Str$,E$,Cond$<>),< Str$ (SKIP,,,) > subttl standard port definitions ; these are the stardard port descriptors for standard protocols ; if different port descriptors are ever used, ICMDDB will have ; to be taught about handling different protocols. StdPrt==0 ; stand port word in the leader is the first word. DefFd. StdSP, StdPrt, 0, 16 ; source port of message DefFd. StdDP, StdPrt, 16, 16 ; destination port subttl BIB - buffer information block ; used to keep track of where and why a buffer stream exists. ;;!------------------------------------|------------------------------------! ;;! back pointer in transmission queue | forward pointer in transmission q ! ;;!------------------------------------|------------------------------------! ;;! pointer to first buffer of message | pointer to next BIB in retran q ! ;;!------------------------------------|------------------------------------! ;;! sequence number of next byte after the end of this message ! ;;!------------------------------------|------------------------------------! ;;! uptime of system last time this message was sent, OR ! ;;! zero if this message has never been sent or is now being sent, OR ! ;;! -1 if this message is now being sent and should be deleted after ! ;;! being sent ;;!------------------------------------|------------------------------------! ; offset definitions for stardard buffer information block BkIni. ; start the block BkDef. BIBTQ ; entire transmission queue pointer. BkOff. BibTQO ; pointer to transmission queue. BkNxt. BIBLTQ,hlf.wd ;(LH) pointer to BIB of previous message in ; transmission queue, or zero if none. BkNxt. BIBNTQ,hlf.wd ;(RH) pointer to BIB of next message in ; transmission queue, or zero if none. BkNxt. BIBMes,hlf.wd ;(LH) pointer to first buffer in the stream BkNxt. BIBRTQ,hlf.wd ;(RH) pointer to BIB of next message in the ; restranmission queue. BkNxt. BIBSeq ; sequence number of the first byte after ; message. BkNxt. BIBTim ; uptime of system last time this buffer was ; transmitted. BkEnd. BIBLen ; close the block, get the length subttl NBH - network buffer header ; this header appears at the start of each buffer of data within ; the network code. ;;!------------------------------------|------------------------------------! ;;! count of 8 bit bytes here | pointer to next buffer in stream ! ;;!------------------------------------|------------------------------------! BkIni. ; start the block BkNxt. NBHCnt,hlf.wd ;(LH) number of 8 bit bytes contained in this buffer. ; (word count for 36 bit buffers outbound.) BkNxt. NBHNxt,hlf.wd ;(RH) pointer to next buffer in stream (or 0 if none) BkOff. NBHNof ; offset to word with NBHNxt in it. BkEnd. NBHLen ; get the length of the header NBfByt==*4 ; number of data bytes in a network buffer. NBfB36==<*^d9>/2 ; number of bytes in a 36 bit buffer IFN FTCUDP,< NBfRct==4 ; number of bytes used by a raw mode data count >;IFN FTCUDP ;SOME DEFINITION DEFINITIONS: DEFINE XXD(A,N,C)< A==N ..XX==N> DEFINE XXP(A,C)< A==<..XX==..XX+1>> DEFINE XXS(A,C)< A==:<..XX==..XX+1>> DEFINE XX(A,N,C)< IFNDEF A,> DEFINE XXX(A,C)< A==..XX> DEFINE XXM(A,N,C)< A==..XX+1 ..XX==..XX+N> subttl IMP DDB DEFINITIONS ;DEVIOS BITS(RIGHT HALF) XX IODATA,2000, THERE IS DATA READY FOR INPUT ;(LEFT HALF) BITS 13-17 STANDARD (40, 20,10, 4, 2, 1) XX IOBRKF,100, BREAK CHAR SEEN IN ASCII ;IMP SPECIFIC STUFF XXD IMPCLR,DEVLSD+1, WHERE TO START CLEARING XXX IMPIOS, IMP NCP STATUS ;LEFT HALF COPIED IN DEVIOS LEFT HALF XX AllcWt,2000, ALLOCATION WAIT xx StatWt,4000, waiting for a change of state XX IDATWT,10000, INPUT DATA WAIT XX ALLWAT,16600, ALL WAIT BITS ; right half xx TrgDwn,1b27, target host went down xx TimFlg,1b28, user timeout flag IFN STUPID,< xx TmpFlg,1b29, temporary IMP aborted by RESET >;IFN STUPID XXP IMPBYT, (150) RESIDUAL BYTE COUNT (ASYNCH I/O) XXP IMPPTR, (150) POINTER TO RESIDUAL BYTES xxp PDBTop, first address in pseudo DDB xxx NetAdr, address of host on this network to send ; messages to to get them to our host. xxp OBfTop, end of output area (used by ImpMak in ImpSer) XXx OBFByt, REMEMBERS Bytes SENT FOR FLOW CONTROL XXP OBFLST, ADDRESS OF LAST BUFFER IN OUTPUT STREAM XXP OBFFST, ADDRESS OF FIRST BUFFER IN OUTPUT STREAM XXP OBFTHS, ADDRESS OF BUFFER CURRENTLY BEING FILLED XXP OBFPC, ADDRESS OF ROUTINE TO GET NEXT BYTE ifn FtChck,< ; checksumming word xxp ObfCsm, temporary holding place for checksum of ; message to this point (accurate copy ; is in P3). > XXP OBFBC, BYTE COUNT REMAINING IN BUFFER XXP OBFPNT, ADDRESS OF LAST WORD FILLED IN BUFFER IFN FTCUDP,< xxp OBfCtl, output buffer control word ; left half - control bits xx OB.Raw,1, user is supplying ip and protocol leaders ; monitor is to supply checksum, length, etc xx OB.Chk,2, user is supplying entire IP datagram (not used) xx OB.Lcl,4, DDB has wildcard local address (network) xx OB.Rmt,10, DDB has wildcard remote address xx OB.Rsk,40, DDB has wildcard remote socket ; right half - used for pointers, counters while processing headers xxp OBfDBC, raw mode Output Datagram Byte Count >;IFN FTCUDP xxx OBfBot, end of output area (used by ImpMak in ImpSer) XXP IBfTop, top of input area (used by TCPSer) XXx IBFTHS, ADDRESS OF BUFFER CURRENTLY BEING EMPTIED XXP IBFLST, ADDRESS OF LAST BUFFER waiting to be ; read by input. XXP IBFPNT, ADDRESS OF LAST WORD PLACED IN BUFFER XXP IBFPC, ADDRESS OF NEXT BYTE INPUT ROUTINE XXP IBFBC, COUNT OF BITS LEFT IN THE BUFFER XXP IBFByt, COUNT OF BITS INPUT BUT NOT REALLOCATED XXP ABFLST, ADDRESS OF LAST BUFFER of assembled 32 ; bit buffer stream. IFN FTCUDP,< xxp IBfCtl, output buffer control word ; left half - control bits xx IB.Raw,1, user wants complete IP datagram passed to it xx IB.Icm,2, user wants ICMP messages passed to it ; right half - used for pointers, counters while processing headers xxp IBfDBC, raw mode Input Datagram Byte Count >;IFN FTCUDP xxx IBfBot, bottom of input area ; data area for our IP level protocl xxp RmtAdr, address of remote site xxp LclAdr, this should be our address xxp SerTyp, type of service (write only at this point) xxp Protcl, protocol above IP xxp MsgLen, length of the data in the message in bytes ; area for TCP data or similar protocols xxp RmtPrt, remote port number of connection xxp LclPrt, local port number of connection xxp State, TCP connection state xxp Future, queue of messages which arrived out of ; sequence. messages are kept in order ; of their ending sequence number. ; duplicates are discarded. xxp SndBts, bits to send on next TCP message xxp SndISS, initial send sequence number xxp SndNxt, sequence number of next byte to be sent xxp SndLst, sequence number of last message sent xxp SndUna, sequence number of first byte which is not ; yet acknowleged. xxp SndWnd, number of bytes we have permission to send ; (accounts for bytes currently queued for ; transmission) xxp SndLWd, SndNxt value last time SndWnd was updated. xxp SndUrg, urgent pointer for output xxp SndPsh, if set set PUSH at last packet to go in ; the current output buffer xxp SndMax, maximum message size for other TCP (or 0) xxp RcvIRS, initial send sequence number of other site xxp RcvNxt, sequence number we are expecting next xxp RcvRed, sequence number of last byte actually read ; by "user", set each time RcvWnd is updated. xxp RcvWnd, number of bytes we are prepared to accept. xxp RcvHld, number of bytes we're holding from window xxp RcvThr, threshhold: when RcvHld gets this big it's ok ; to update RcvWnd: no getting silly window. xxp RcvUrg, incoming urgent pointer. xxp RcvFin, have seen an incoming FIN for this connection xxx PDBBot, end of area needed for pseudo DDB ; timers and such xxp RetrnQ, retransmission queue xxp RTTime, retransmission delay time (in ticks) xxp RTHold, held retransmission time while probing 0 window xxp UTTime, time to use for user time-out (in seconds) xxp UTTimr, user time-out timer (in seconds) xxp GTimer, general time-out timer for the following: ; 1. in S%TimW state, times out time-wait. ; 2. when owning job is 0, times out incoming ; connection waiting for a matching ; Listen (waiting for server to start). ; always measures seconds 'till timeout. ; data area for TelNet protocol XXP OTTYC, TEMPORARY TTY CHARACTER STORAGE XXP ITTYC, TEMPORARY CHARACTER SAVE AREA FOR TTY LINK XXP TTYLIN, TTY FLAGS AND LDB ADDRESS XX TTYJOB,1B18, IMP IS CONNECTED TO A TTY CONTROLLING A JOB XX TTYPTR,1B19, TTY PRINTER IS ATTACHED XX TTYKBD,1B20, TTY KEYBOARD IS ATTACHED XX TTYCRL,1B21, LAST CHARACTER WAS CR XX TTYXWT,1B22, JOB WAITING UNTIL CROSSPATCH BROKEN ;THE FOLLOWING ARE THE IMP REQUEST FLAGS, INDICATING WHAT CLOCK-LEVEL ; SERVICES MUST BE PERFORMED FOR THIS DDB. XX IRTIIO,1B23, TTY INPUT TO CROSSPATCHED IMP OUTPUT XX IRIITO,1B24, IMP INPUT TO CROSSPATCHED TTY OUTPUT XX IRTOIO,1B25, OUTPUT FROM IMP TTY TO IMP XX IRIITI,1B26, INPUT FROM IMP TO TTY LINE XX TTYRQF,IRTIIO!IRIITO!IRTOIO!IRIITI, ALL TTY REQUEST FLAGS XXP TELWRD, TELNET CONTROL STUFF XX IACFLG,1B0, CURRENTLY INTERPRETING COMMAND (MUST BE SIGN) XX LSGAFG,1B1, LOCAL SUPPRESS-GA OPTION IN EFFECT XX FSGAFG,1B2, FOREIGN SUPPRESS-GA OPTION IN EFFECT XX INSWAT,1B3, HAVE DATA MARK--WAITING FOR INS XX SYNCLR,1B4, CLEAR TTY OUTPUT BUFFER ON SYNCH XX OPTCHR,377B17, TELNET OPTION CHARACTER BEING PROCESSED ;BITS 18-35 ARE FOR THE TELNET COROUTINE LINKAGE XXP ECPEND, NO. OF ECHO NEGOTIATION REPLIES PENDING XXP TELOWD, FOR TELNET OUTPUT CODE AND MORE BITS XX XPTECH,1B1, EXPECTING REPLY TO ECHO NEGOTIATION XX XPTSGA,1B2, EXPECTING REPLY TO SUPRESS GA NEGOTIATION XX LLCPWN,1B3, FLAG TO PERMIT TOTAL ECHO SUPRESSION XX IECHO,1B4, BIT SET BY TALK IMPUUO - DISALLOWS SERVER ECHOING XX TELOMR,1B5, TELNET OUTPUT COROUTINE HAS MORE TO SAY XX TelFnc,377B17, TELNET function being output ;BITS 18-35 ARE TELNET OUTPUT COROUTINE ADDRESS XXP ISHREG, TEMP DATA STORAGE FOR ASSEMBLING A WORD XXP USRPAR, ARBITRARY USER-DEFINED CONNECTION PARAMETERS XXS IMPDDS, LENGTH OF IMP DDB ;SOME MACROS PI== 4 ;ELSE MACRO WON'T ASSIGN VALUE UNTIL PASS 2 ;MACRO TO CHECK FOR IMP INTERRUPT CHANNEL TURNED OFF AND HALT IF NOT. ; USE AT THE START OF CRITICAL ROUTINES THAT MUST BE CALLED WITH ; INTERRUPTS OFF. DEFINE CHKINT < IFN DEBUG,< CONSZ PI,IMPBTS## ;SKIP IF IMP CHANNEL OFF JSR INDERR ;HALT IF NOT >> ;OTHER PARAMETERS XX UBUFL,^D128, USER BUFFER SIZE ; some definitions about our network. this assumes a class A network, ; which is OK since these values are only used when thinking about ; inerfacing to our local network. if you try to host this software ; on a class B or C network, these are the symbols to watch out for. xx NetMsk,037700000000 ; mask of network value of address xx HstMsk,000077600000 ; mask of host value of address xx LogMsk,000000177400 ; mask of logical host (in IP, ; but must be zero in 1822.) xx ImpMsk,000000000377 ; mask of imp value of address ;TELETYPE STUFF XX .CHETX,"C"&^O37, ^C (ETX) PDP-10 ESCAPE XX .CHCNO,"O"&^O37, ^O SUPRESSES OUTPUT XX .CHDLE,"N"&^O37, ^N QUOTES NEXT CHARACTER XX .CHCNC,"_"&^O37, ^_ (US) IS LOCAL ESCAPE CHARACTER XX .CHESC,"^"&^O37, ^^ (RS) IS NETWORK ESCAPE CHARACTER XX .CHLF,^O12, LINE FEED XX .CHCR,^O15, CARRAIGE RETURN XX .CHEOL,.CHLF, LINE FEED IS STANDARD END OF LINE ;TELNET PROTOCOL STUFF .TNIAC==:^D255 ;INTERPRET FOLLOWING AS COMMAND .TNSE==^D241 ;END SUBNEGOTIATION PARAMETERS .TNNOP==^D241 ;NO-OP .TNDM== ^D242 ;DATA MARK .TNBRK==^D243 ;BREAK (OR REVERSE BREAK) .TNIP== ^D244 ;INTERRUPT PROCESS .TNAO==:^D245 ;ABORT OUTPUT .TNAYT==^D246 ;ARE YOU THERE .TNEC== ^D247 ;ERASE CHARACTER .TNEL== ^D248 ;ERASE LINE .TNGA== ^D249 ;GO AHEAD .TNSB== ^D250 ;SUB-NEGOTIATE .TNWIL==:^D251 ;WILL .TNWNT==:^D252 ;WON'T .TNDO== ^D253 ;DO .TNDNT==^D254 ;DON'T .TOBIN==0 ;TRANSMIT BINARY OPTION .TOECH==:1 ;ECHO OPTION .TORCP==2 ;RECONNECTION PROTOCOL OPTION .TOSGA==3 ;SUPPRESS GO-AHEAD OPTION .TOAMS==4 ;APPROXIMATE MESSAGE SIZE OPTION .TOSTT==5 ;STATUS OPTION .TOTIM==6 ;TIMING MARK OPTION .TORCT==7 ;REMOTE CONT. TRANS AND ECHOING .TOXOL==^D255 ;EXTENDED OPTIONS LIST OPTION ;STILL MORE xx MesDLN,^d16, amount of space to keep track of imp-host ; message types in the gettab tables. must ; be at least as big as MesDSN in IMPSER. xx ICMLen,^d20, amount of space to keep track of ICMP ; message types in the gettab tables. must ; be bigger than ICMCnt in IPSer. ; maximum seqment lifetime xx MSL,1*^d60 ; max segment lifetime (1 minute) $lit end