X-Git-Url: https://jxself.org/git/?p=pdp10-muddle.git;a=blobdiff_plain;f=mim%2Fdevelopment%2Fmim%2Fvax%2Ftty%2Fttyterm.mud;fp=mim%2Fdevelopment%2Fmim%2Fvax%2Ftty%2Fttyterm.mud;h=a6da4663aec2672c2516c938b730cd100b0974e6;hp=0000000000000000000000000000000000000000;hb=d73ace3f3292e320b461b8fcd2e9f5dc5d9684d7;hpb=d530283ea60fb0ddcc28e9c5bd072456afe06e07 diff --git a/mim/development/mim/vax/tty/ttyterm.mud b/mim/development/mim/vax/tty/ttyterm.mud new file mode 100644 index 0000000..a6da466 --- /dev/null +++ b/mim/development/mim/vax/tty/ttyterm.mud @@ -0,0 +1,491 @@ +"Interpreted output routines--used for echoing and NORMAL-OUT." + +> + + +) + "AUX" (TC ) (TTY ) + (TD )) + #DECL ((CHANNEL) CHANNEL (CHRS) (LENGTH) + (TC) TTY-CHANNEL (TTY) TTY (TD) TTY-DESC) + + ; "If we don't know where the cursor is, go to top of screen" + + )> + + .CHRS>> + ) + ( + >) + (>>)> + + )) + #DECL ((CT) FIX (LASTCHR CHR) CHARACTER) + *177*> CHARACTER>> + > + > + 32> + <==? 127>>> + ; "Normal character" + ) + (<==? .CHR ;"Char Alt"> + ) + (<==? .CHR ;"Char C.R."> + + + 0> + >)>) + (<==? .CHR ;"Char L.F."> + ;"Char C.R."> + ;"Char C.R."> + + 0> + >)>)> + ) + (<==? .CHR ;"Char Tab"> + ) (LEN <- 8 >)) + > <- 1>> + >>) + (T + + )>>) + (<==? .CHR ;"Char Bell"> + ; "Ring bell, don't move cursor" + ) + ( ;"Char "> + ; "Rubout is normally invisible, so ,NULL will work." + %<- 1>> + *177*>>>)> + + + )>>) + (.LENGTH)>> + +; "Called with a tuple of chars to be dumped. Handles ! stuff, including + invocation of LF. Chars seen here need no special handlng." +) + (WIDTH <- 1>)) + #DECL ((CHANNEL) CHANNEL (TC) TTY-CHANNEL (TTY) TTY (TD) TTY-DESC + (CHARS) (X WIDTH) FIX) + + > .WIDTH> + ; "Line overflow" + + ; "Stuff out a CR" + ;"Char C.R."> + + ; "Go to next line -- may provoke --More-- and friends" + )> + + > + .CHARS>> + +) (TTY )) + #DECL ((CHANNEL) CHANNEL (TC) TTY-CHANNEL (TTY) TTY (NEW) ) + > + ) + (T + )>> + + + +) + (Y ) (HEIGHT ) (MODE ) + (MORE? <>) (MORE-LINES > + -1) + (T + + >)>)) + #DECL ((CHANNEL) CHANNEL (TC) TTY-CHANNEL (TTY) TTY (TD) TTY-DESC + (Y LIN HEIGHT MODE) FIX (MORE?) ) + + > + + <- .HEIGHT 1>> + .MORE-LINES>>) + (T + <==? <+ .LIN 1> .HEIGHT>)>) + ( + >> + <==? .Y <- .HEIGHT 1>>) + (T + > + + .MORE-LINES>>)>> + ; "Need a more" + >)> + + > + ; "Not a more, but scrolling" + .HEIGHT>> + ; "Update last in, to trigger halt at screen bottom" + 1>> + <- .HEIGHT 1>>> + > + ; "Pad only if scrolling" + <- .HEIGHT 1>> + >)>) + (T + ; "Down cursor wraps if at bottom" + + )>)>> + +)) + #DECL ((CHANNEL) CHANNEL (TC) TTY-CHANNEL (TTY) TTY (TD) TTY-DESC + (MODE) FIX (ICHR) CHARACTER) + + + + + ) + (>)> + + + T % ;"Char Space" + ;"Char ">>) + (T + ;"Char Cntl-Q" + <> % ;"Char Cntl-Q" + ;"Char Cntl-S">>)> + + + <>)>> + +) (OM ) + CHR Q) + #DECL ((CHANNEL) CHANNEL (TC) TTY-CHANNEL + (RETURNS) (CHECK-QUEUE?) + (DONT Q) ) + >> + >>> + > CHARACTER>> + >)> + + <==? .Q .DONT>) + ()> + >)>)>) + (T + <>>> + + <==? .DONT .CHR>) + ()>> + )>)> + + + <==? .CHR .RETURNS>> + > + )>>)> + + .CHR> + >> + + +"Buffered input routines" + + + + + + + + + +> + ; "Scroll mode" + > + ; "Normal mode" + ) + (T ; "ITS mode" + >)>) + (T + ; "Wrap mode" + >)>> + +) + (IMAGE? ) + (ECHO? ) + (BUFFER ) (TTY )) + #DECL ((TC) TTY-CHANNEL (BUF CBUF END) STRING (TOT AVAIL CONT) FIX + (IMAGE? ECHO?) (CHANNEL) CHANNEL + (BUFFER) (MODE) FIX + (PROMPT) ) + .CONT>> + + ) + (T + + > + + + + + > + > + + + ) (TTY ) + (ECHRS ) RC TERM?) + #DECL ((RC) (CHR) CHARACTER (IJFN) FIX + (ECHRS) STRING (TERM?) (TTY) TTY) + > + <1 .CBUF .CHR> + > + + > + > + >>>> + ; "Echo char in these cases" + + )> + ; "Done. Do this before checking for editing char" + >)> + > + <==? .CHR > + <==? .CHR >> + + + + > + ) + (<==? .CHR > + ;"Char Cntl-W") + (<==? .CHR > + ;"Char Cntl-U")> + .PROMPT> + > + > + >) + (<==? .CHR ;"Char Cntl-L"> + + )> + + > + >; "Now know where we start" + ) + (<==? .CHR ;"Char Cntl-D"> + + + )> + > + > + ) + (<==? .CHR > + ;"...") + (T + > + <==? .CHR >> + <1 .CBUF > + > + > + > + + )> + <1 .CBUF > + )> + > + > + > + + )>)> + )>>)>> + + >> + ;"Char Space" + ;"Char Tab" + ;"Char L.F." + ;"Char C.R." + ;"Char -" + ;"Char /" + ;"Char .">> +; "BUFFER is: initial buf, current buf, space left in buf, + total chrs in buf" +)) + #DECL ((CHANNEL) CHANNEL (TC) TTY-CHANNEL (TTY) TTY (WHICH) CHARACTER + (BUFFER) (KC) CHARACTER (VERT) FIX + (PROMPT) ) + > + ;"Char Bell">) + (<==? .WHICH ;"Char "> + >> + >> + 1>> + 1>> + ;"Char L.F."> + 0> + <==? <1 >> + ;"Char C.R.">> + >> + 1>> + 1>>)> + ) + ( ;"Char Tab"> + <==? .KC ;"Char C.R.">> + .PROMPT> + .OY> + >) + (T + >)> + ) + ( > + ;"Char Alt">> + ) + (T + )>) + (<==? .WHICH ;"Char Cntl-W"> + ) + (<==? .WHICH ;"Char Cntl-U"> + )>> + +) (CHRS ) (UP 0) + (NBREAKFLAG <>) (TC ) (TTY ) + (OX ) (OY ) NX NY) + #DECL ((CHANNEL) CHANNEL (BUFFER) + (CCT UP) FIX (STOP CHRS) STRING (TC) TTY-CHANNEL (TTY) TTY + (PROMPT) ) + + )> + > + >>> .STOP> + > + > + )>) + (T + )> + ;"Char L.F."> + ; "First, kill everything after the linefeed" + > + > + + + > + > + + ; "Now, delete the CR if there" + + <==? <1 > ;"Char C.R.">> + > + >)>)>> + ; "Update the buffer" + + + ; "And do the delete" + .PROMPT> + ; "Computes new cursor pos, but doesn't move cursor" + > + > + + + + + )> + > 0> + > 1>>)> + + + )>>) + (T + )> + > + +; "Takes channel, buffer, # lines moved up. Positions screen cursor at + end of current buffer. If CONT is non-zero, and have erased into that, + and CONT doesn't start at beginning of line, will do wrong thing with + horizontal position. VERT is then used to find new vertical position." +) + "AUX" IH (VLOSER? <>) + (LINES 0) NEWY HEIGHT (TC )) + #DECL ((CHANNEL) CHANNEL (BUFFER) + (HEIGHT NEWY VERT) FIX (MOVE? VLOSER?) + (PROMPT) (TC) TTY-CHANNEL) + > + ; "Sigh. Don't know where the text starts" + + + + + ) + (T + >)> + ) + (CT ) + (T )>) + CHR (BB )>) + (WIDTH )) + #DECL ((WIDTH CT) FIX (CHR) CHARACTER (BB) STRING) + + > + > + > + ) + (T + )>)> + > + > + > + 32> + 127>> + <==? .CHR ;"Char Alt">> + >) + (<==? .CHR ;"Char C.R."> + ) + (<==? .CHR ;"Char L.F."> + >) + (<==? .CHR ;"Char Tab"> + >>>) + (>)> + > + > + >)>> + 0>> + .VERT>>) + ( .LINES>>)> + >> + >) + ( + .HEIGHT>>>)> + > + ) + (T + )>) + (T + + )>>