mirror of
https://github.com/PDP-10/its.git
synced 2026-01-28 12:59:20 +00:00
1507 lines
38 KiB
Plaintext
Executable File
1507 lines
38 KiB
Plaintext
Executable File
;-*-MIDAS-*-
|
||
|
||
TITLE TCTYP ;SET THE CHARACTERISTICS OF A TTY.
|
||
|
||
.INSRT RMS;MACROS >
|
||
|
||
TYIC==1
|
||
TYOC==2
|
||
DSKIC==3 ;READING .INFO.;TCTYP ORDER
|
||
|
||
BEG: MOVE P,[-30,,PDL-1]
|
||
.OPEN TYOC,[1,,'TTY]
|
||
.LOSE %LSFIL
|
||
SYSCAL SSTATU,[REPEAT 5,2000,,
|
||
2000,,MNAME ? 2000,,MVERS] ;WHICH MACHINE ARE WE ON?
|
||
.LOSE %LSSYS
|
||
MOVE A,ALOSE1+1
|
||
MOVS B,MNAME ;EXCEPT ON AI MACHINE, DATAPOINTS ARE 106 CHARS WIDE.
|
||
CAIE B,(SIXBIT/AI/)
|
||
MOVEM A,ADATA1+1
|
||
MOVE A,[CMD,,CMD+1]
|
||
SETZM CMD ;CLEAR OUT COMMAND BUFFER SINCE .BREAK 12,..RJCL
|
||
BLT A,CMDE ;STOPS AT FIRST NONZERO WORD (CMDE+1).
|
||
.BREAK 12,[..RJCL,,CMD] ;GET COMMAND LINE FROM DDT.
|
||
MOVEI A,[ASCIZ /Command string too long?/]
|
||
SKIPE CMDE
|
||
JRST ERRET
|
||
CALL TTYOPN ;INITIALLY ASSUME USER'S TTY'S TYPE BEING CHANGED.
|
||
SKIPN CMD
|
||
JRST DESC ;NULL COMMAND => DESCRIBE USER'S TTY.
|
||
MOVE A,[440700,,CMD]
|
||
MOVEM A,CMDBP
|
||
JRST LP
|
||
|
||
SIXIN: SETZ B, ;B GETS SIXBIT CMD NAME, PADDED WITH BLANKS.
|
||
SETO J, ;J GETS SIXBIT CMD NAME, PADDED WITH _'S.
|
||
MOVE C,[440600,,B]
|
||
MOVE I,[440600,,J]
|
||
MOVE A,CMDBP ;REMEMBER BP TO START OF CMD SO ERR MSG
|
||
MOVEM A,CMDOBP ;CAN TYPE IT OUT.
|
||
RET
|
||
|
||
LP1: ILDB D,CMDBP
|
||
CAIE D,^_ ;CONVERT ALL POSSIBLE JCL TERMINATORS TO CR.
|
||
CAIN D,^C
|
||
MOVEI D,^M
|
||
SKIPN D
|
||
MOVEI D,^M
|
||
CAIL D,140 ;CONVERT LOWER CASE TO UPPER.
|
||
SUBI D,40
|
||
CAIN D,"?
|
||
JRST AHELP
|
||
CAIL D,"$ ;"." AND NON-SQUOZE ARE DELIMITERS.
|
||
CAILE D,"%
|
||
CAIL D,"0
|
||
CAILE D,"9
|
||
CAIL D,"A
|
||
CAILE D,"Z
|
||
RET ;THIS CHAR IS A DELIMITER.
|
||
SUBI D,40 ;NO, CONVERT TO SIXBIT.
|
||
TLNE C,77^4
|
||
IDPB D,C
|
||
TLNE I,77^4
|
||
IDPB D,I
|
||
JRST LP1
|
||
|
||
LP: CALL SIXIN ;READ IN A COMMAND.
|
||
ANO: CALL LP1
|
||
;B HAS NAME OF CMD, IN SIXBIT, PADDED WITH SPACES,
|
||
;J HAS SIXBIT NAME PADDED WITH _'S. ANY KEYWORD THAT THE TYPED
|
||
;COMMAND IS AN ABBREVIATION FOR MUST LIE BETWEEN THOSE 2 VALUES.
|
||
LP2: JUMPE B,LP3 ;IGNORE NULL COMMANDS.
|
||
MOVSI E,-KEYTBL/2 ;AOBJN -> KEYWORD TABLE.
|
||
LP4: CAMLE B,KEYTAB(E) ;MOVE UP TO 1ST KEYWD ABOVE BOTTOM OF RANGE
|
||
AOBJN E,[AOJA E,LP4]
|
||
CAMGE J,KEYTAB(E)
|
||
JRST ILLCMD ;IF THAT IS BEYOND THE RANGE, ILLEGAL CMD.
|
||
CAMN B,KEYTAB(E) ;IF USER HAS GIVEN WHOLE NAME OF A COMMAND,
|
||
JRST LP5 ;THAT'S GOOD, EVEN IF IT ABBREVIATES OTHER COMMANDS.
|
||
CAML J,KEYTAB+2(E)
|
||
JRST AMBCMD ;IF THERE ARE 2 KEYWDS IN RANGE, AMBIGUOUS CMD.
|
||
LP5: CALL @KEYTAB+1(E)
|
||
SETOM NONNUL ;DONE AFTER ALL CMDS EXCEPT TTYNUM.
|
||
;COME HERE IMMEDIATELY IF COMMAND IS NULL,
|
||
;OTHERWISE COME AFTER PROCESSING IT. THUS, REACH HERE FOR EACH
|
||
;NON-ALPHAMERIC CHAR THAT DOESN'T COME BETWEEN A CMD AND ITS ARG.
|
||
LP3: CAIE D,"- ;- AND + SIGNIFY A BIT NAME.
|
||
CAIN D,"+
|
||
JRST PM ;READ IN THE NAME OF THE BIT TO BE SET.
|
||
CAIE D,^M ;NO MORE CMDS => MAKE THE CHANGES.
|
||
JRST LP
|
||
SKIPL NONNUL ;NO COMMANDS EXCEPT TTYNUM =>
|
||
JRST DESC ;DESCRIBE SPEC'D TTY.
|
||
SKIPL A,SLINEL ;OVERRIDE DEFAULTED LINEL WITH SPEC'D IF ANY.
|
||
MOVEM A,TCMXH
|
||
SKIPL A,SPAGEH
|
||
MOVEM A,TCMXV
|
||
SKIPL A,SROL ;EXPLICITLY SPEC'D TTYROL OVERRIDES THAT FROM BASIC CMD.
|
||
MOVEM A,TTYROL
|
||
SKIPE PSPECD ;IF A BASIC COMMAND FOR A PRINTING TERMINAL WAS GIVEN,
|
||
JRST [ MOVE A,TTYTYP ;AND THIS TTY IS STY'S ALTER-EGO
|
||
TRNE A,%TYSTY
|
||
SKIPE PADDED ;AND WE HAVEN'T EXPLICITLY RQ'D PADDING,
|
||
JRST .+1
|
||
SKIPGE OSPEED ;OR RQ'D PADDING FOR A SPCIFIC SPEED
|
||
JRST .+1
|
||
MOVEI A,7*%TPPCR+7*%TPPLF
|
||
ANDCAM A,TTYOPT ;THE DEFAULT IS NO PADDING.
|
||
JRST .+1]
|
||
SKIPE PADRTN ;IF WE GAVE A BASIC COMMAND FOR A TYPE OF TTY WITH
|
||
CALL @PADRTN ;SPEED-DEPENDENT DEFAULT PADDING, PUT THE DEFAULT IN TTYOPT
|
||
MOVE A,SOPTON ;TURN ON TTYOPT BITS SPECD AS ON.
|
||
IORM A,TTYOPT
|
||
MOVE A,SOPTOF ;TURN OFF THOSE SPEC'D OFF.
|
||
ANDCAM A,TTYOPT
|
||
MOVE A,SSMTON ;TURN ON OR OFF TTYSMT BITS WHOSE STATES HAVE BEEN SPECIFIED.
|
||
IORM A,TTYSMT
|
||
MOVE A,SSMTOF
|
||
ANDCAM A,TTYSMT
|
||
SKIPE DESCFL ;IF USER WANTS JUST A DESCRIPTION =>
|
||
JRST DESC ;GIVE HIM ONE.
|
||
.OPEN TYIC,TTYOPI
|
||
JRST TTYOPR
|
||
MOVE B,OTCTYP
|
||
CAIE B,%TNSFW ;IF TTY IS NOW A SOFTWARE TTY, AND IT'S A STY, PROBABLY SUPDUP
|
||
JRST SUPDP1
|
||
MOVE B,TCTYP
|
||
CAIN B,%TNSFW
|
||
JRST SUPDP1
|
||
MOVE B,TTYTYP
|
||
TRNE B,%TYSTY
|
||
SKIPE NOSUPDUP ;SO UNLESS USER SAID NOSUPDUP TO OVERRIDE, DON'T LET HIM CHANGE IT.
|
||
JRST SUPDP1
|
||
JSP A,ERRET
|
||
ASCIZ /You must not change the basic type of a SUPDUP terminal./
|
||
|
||
SUPDP1: MOVE B,TTYTYP ;If the hardware sas this is a PDP-11 TV,
|
||
TRNN B,%TY11T
|
||
JRST TV1
|
||
MOVE B,TCTYP ;Don't allow it to be set to any other basic type.
|
||
CAIN B,%TNTV
|
||
JRST TV1
|
||
JSP A,ERRET
|
||
ASCIZ /You must not change the basic type of a TV terminal./
|
||
|
||
TV1: SKIPE DEBUGP
|
||
.VALUE
|
||
SYSCAL CNSSET,[1000,,TYIC ? TCMXV ? TCMXH ? TCTYP ? TTYCOM ? TTYOPT]
|
||
.LOSE %LSSYS
|
||
SYSCAL TTYVAR,[1000,,TYIC ? ['TTYROL] ? TTYROL]
|
||
JFCL
|
||
SYSCAL TTYVAR,[%CLIMM,,TYIC ? ['SMARTS] ? TTYSMT]
|
||
JFCL
|
||
SKIPL ISPEED ;SET SPEEDS
|
||
JRST .+4
|
||
HRRE A,ISPEED
|
||
SYSCAL TTYVAR,[1000,,TYIC ? ['ISPEED] ? A]
|
||
.LOSE %LSSYS
|
||
SKIPL OSPEED
|
||
JRST .+4
|
||
HRRE A,OSPEED
|
||
SYSCAL TTYVAR,[1000,,TYIC ? ['OSPEED] ? A]
|
||
.LOSE %LSSYS
|
||
MOVE A,SWHOLI ;IF USER HAS GIVEN A "WHOLINE" COMMAND,
|
||
CAMN A,[MOVE]
|
||
JRST EXIT
|
||
SYSCAL WHOLIN,[1000,,TYIC ? A ? 1000,,-1] ;PASS IT ON TO SYSTEM.
|
||
JFCL
|
||
EXIT: MOVE A,TTYOPI ;OPEN FOR SUPER IMAGE OUTPUT
|
||
HRLI A,47
|
||
.OPEN TYOC,A
|
||
.LOSE %LSFIL
|
||
SKIPE INIRTN ;CHECK FOR SPECIAL INITIALIZATIONS
|
||
CALL @INIRTN
|
||
LDB A,[$TPPTB,,TTYOPT] ;SEE IF SHOULD SET TABS
|
||
JUMPE A,EXIT1 ;NO
|
||
SKIPE TABPP ;DON'T DO THIS IF USER SAYS NOT TO
|
||
SKIPN TABP ;OR IF NO REASON TO
|
||
JRST EXIT1
|
||
MOVE A,TABCLR ;CLEAR ALL TABS ON ALL KINDS OF TERMINALS
|
||
.IOT TYOC,A
|
||
MOVE A,TABSET ;NOW SET APPROPRIATE NUMBER OF TABS
|
||
MOVE B,TCMXH ;=(LINEL+7)/8
|
||
ADDI B,7
|
||
LSH B,-3
|
||
LSH B,1 ;10 CHARS PER TAB = 2 WORDS
|
||
MOVNS B ;SET COUNT IN POINTER
|
||
HRL A,B
|
||
.IOT TYOC,A
|
||
EXIT1: .SUSET [.ROPTION,,A]
|
||
TLNE A,%OPDDT ;DON'T .VALUE IF SUPERIOR ISN'T DDT
|
||
SKIPL TTYNUM ;NO NEED FOR :NEWTTY IF WE SET SOME OTHER TTY.
|
||
.BREAK 16,140000
|
||
.VALUE [ASCIZ/:KILL
|
||
:NEWTTY /]
|
||
|
||
; CHARACTER SEQUENCES TO MUNG WITH TABS
|
||
|
||
TABCLR: .+1-TABCLE,,.+1
|
||
.BYTE 7
|
||
15 ? 33 ? 10 ? 33 ? "2 ;ESCAPE BACKSPACE WORKS ON SOME TERMINALS
|
||
;ESCAPE 2 WORKS ON MOST TERMINALS
|
||
REPEAT 20.,[
|
||
11 ? 33 ? "2 ;AND SOME SUCH AS MEMOWRECK NEED LOTS OF ESCAPE 2'S
|
||
]
|
||
15 ;THEN RETURN CARRIAGE AGAIN FOR TAB SETTING
|
||
.BYTE
|
||
TABCLE:
|
||
|
||
;Maximum reasonable number of tabs is 256/8=32
|
||
;although line lengths longer than 120 don't completely work some losers
|
||
;use them anyway.
|
||
TABSET: .+1-TABSEE,,.+1
|
||
REPEAT 32., ASCII/1 / ;2 WORDS = 10 CHARS FOR EACH TAB STOP
|
||
TABSEE::
|
||
|
||
;INITIALIZE LLL O-GROUP GRINNELL SYSTEM TERMINAL.
|
||
S1SINI: HRROI A,[ASCIC /I/] ; GO INTO SUPDUP MODE
|
||
.IOT TYOC,A ; ...
|
||
JRST EXIT1
|
||
|
||
;INITIALIZE HDS CONCEPT-100 (C100)
|
||
HDSINI: ;;Output magic string, for documentation look in CRTSTY
|
||
;;This initializes everything, clears the screen, and sets the tabs
|
||
MOVE A,HDSFRB
|
||
.IOT TYOC,A
|
||
JRST EXIT1 ;DON'T WANT NORMAL TAB SETTING SO DON'T POPJ
|
||
|
||
HDSFRB: -240./5,,.+1 ;Midas objects to the formfeed in the literal
|
||
ASCIC/Uf758lNHo& |