1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-28 12:59:20 +00:00
Files
PDP-10.its/src/syseng/tctyp.153
2016-11-07 21:23:04 +01:00

1507 lines
38 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;-*-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&4!0"4!1"4"5"14"6"24"7"34"8"44"9"54":"64";"74"<"84"="94">"0 ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ] ] ] ] ] ] ] ] ]
/
;INITIALIZE TELERAY T1061
RAYINI: ;;Output magic string, for documentation look in CRTSTY
MOVE A,[-95./5,,[ASCII/jG F F F F F F F F F
/]]
.IOT TYOC,A
JRST EXIT1 ;DON'T WANT NORMAL TAB SETTING SO DON'T POPJ
;INITIALIZE DM2500 BY SENDING A ^X (CANCEL COMMAND)
DTMINI: HRROI A,[ASCIC //]
.IOT TYOC,A
POPJ P,
;INITIALIZE H19
;  flush any ANSI sequence in progress to avoid < screen turd,
; < ANSI on, [?2h ANSI off, G graphics off, O insert off,
; q inverse off, \ hold-screen off, w auto-wrap off,
; y8 auto-LF off, y9 auto-CR off, y5 cursor on, y1 25th-line off.
H19INI: MOVE A,[-30./5,,[ASCIC /<[?2hGOq\wy8y9y5y1/]]
.IOT TYOC,A
JRST EXIT1
;Initialize AAA
AAAINI: MOVE A,[-60./5,,[ASCIC /[>27;29;30;33;34;35;37;40;46;51l[>52h/]]
.IOT TYOC,A ;look in CRTSTY for documentation
MOVE A,[-1,,[ASCIC /[/]]
.IOT TYOC,A
MOVE C,[440700,,AAHGHT] ;get BP to numeric arg in C
MOVE E,TCMXV ;get screen height in e
PUSHJ P,STFNUM ;stuff it into numeric arg
IBP C ;that was memory allocation
IBP C ;bump the byte pointer three times
IBP C ;to skip over the three ;'s
MOVE E,TCMXV ;now stuff the screen height again
PUSHJ P,STFNUM ;for screen height parameter
MOVE A,[-3,,AAHGHT] ;spit out numeric args and
.IOT TYOC,A ;command char
SYSCAL SCPOS,[1000,,tyoc ? 1000,,0 ? 1000,,0] ;we homed the cursor
.LOSE %LSSYS
JRST EXIT1
STFNUM: MOVE A,E
IDIVI A,10. ;divide by 10 for high digit
ADDI A,"0 ;make high digit ascii
IDPB A,C ;put in buffer
SUBI A,"0 ;un-ascii high digit
IMULI A,10. ;find out what we printed
SUB E,A ;take it from what we had to get low digit
ADDI E,"0 ;make low digit ascii
IDPB E,C ;put in buffer
POPJ P,
AAHGHT: ASCIC /48;;;48p/
;COME HERE AFTER READING A "-" OR A "+":
;READ IN THE NAME OF THE DESIRED BIT, AND SPECIFY IT TO BE
;TURNED ON OR OFF IN TTYOPT BY SETTING IT IN SOPTON, SOPTOF,
;OR TURNED ON OR OFF DIRECTLY IN TTYCOM.
PM: MOVEM D,PMSVD ;REMEMBER WHETHER TO SET OR CLEAR THE BIT.
CALL SIXIN ;READ IN NAME OF BIT.
CALL LP1
JUMPE B,LP3 ;NAME IS NULL => DO NOTHING.
MOVSI E,-BITTBL/2
PMLP4: CAMLE B,BITTAB(E) ;SEARCH THE BIT NAME TABLE
AOBJN E,[AOJA E,PMLP4] ;(JUST LIKE SEARCH AT LP4)
CAMGE J,BITTAB(E)
JRST ILLBIT
CAML J,BITTAB+2(E)
JRST AMBBIT
PM1: HLRZ B,BITTAB+1(E) ;WHICH HALFWORD IS BIT IN?
HRRZ C,BITTAB+1(E) ;WHICH BIT IN THE HALFWORD?
TRZE B,400000
HRLZS C ;SIGN OF BITTAB WD => LEFT HALF.
MOVE J,PMSVD
CAIN J,"- ;TO CLEAR THE BIT, MAKE B ODD
IORI B,1 ;(B IS ALWAYS ORIGINALLY EVEN)
IORM C,@PMXCTT(B) ;ARRANGE BIT TO BE SET DESIRED WAY,
XORI B,1 ;CANCEL ANY PLAN TO SET IT THE OTHER WAY
ANDCAM C,@PMXCTT(B)
SETOM NONNUL
JRST LP3 ;HANDLE THE DELIMITER AFTER THE BIT NAME.
PMXCTT: SOPTON
SOPTOF
TTYCOM ;BITS ARE SET OR CLEARED IN TTYCOM DIRECTLY,
JUNK ;SINCE THE BASIC COMMANDS DON'T TOUCH IT.
SSMTON
SSMTOF
;TABLE OF BIT NAMES, IN NUMERICAL ORDER OF SIXBIT NAMES.
;EACH ENTRY HAS 2 WDS. 1ST WD HAS SIXBIT NAME.
;2ND WD: SIGN SET => BIT IS IN LH OF WORD
; REST OF LH IS IDX IN PMXCTT ASSUMING BIT IS TO BE SET.
; 0 FOR TTYOPT, 2 FOR TTYCOM, 4 FOR TTYSMT
; RH IS THE BIT IN HALFWORD SPEC'D BY LH.
BITTAB:
IRPS X,Y,[CICO COCO CQRY CRFS
OALT OCID OCLC OERS OFCI OHDX
OLID OLWR OMOR OMVB OMVU
OOVR ORAW OROL OSA1 OSAI
P11T PCBS PMTA PORS PPRN PRSC PTEL
QBNK QGPH QREC QSET QVIR QXOR
RGHC RGIN]
T%!X:SIXBIT/%T!X/
IFE "Y&1,[400000]+<"Y&-2>,,%T!X
TERMIN
SETZ-1 ? 0
BITTBL==.-BITTAB
ILLBIT: JSP A,AMBBI1
ASCIZ /Illegal/
AMBBIT: JSP A,AMBBI1
ASCIZ /Ambiguous/
AMBBI1: CALL ATYPE
JSP A,AMBCM2
ASCIZ / bit name: /
;COME HERE WHEN USER'S CMD DOESN'T ABBREVIATE ANY KEYWD.
ILLCMD: JSP A,AMBCM1
ASCIZ/Illegal/
;USER'S COMMAND ABBREVIATES SEVERAL KEYWDS.
AMBCMD: JSP A,AMBCM1
ASCIZ/Ambiguous/
AMBCM1: CALL ATYPE ;SAY WHAT KIND OF ERROR THIS IS.
MOVEI A,[ASCIZ/ command: /]
AMBCM2: CALL ATYPE
MOVEI A,0 ;PUT A NULL AFTER THE CMD, TO STOP THE ATYPE.
DPB A,CMDBP
MOVE A,CMDOBP ;START TYPEING FROM THE 1ST CHAR OF THE CMD.
CALL ATYPE1
JRST ERRET1
ARGERR: MOVEI A,[ASCIZ /Missing numeric argument?/]
JRST ERRET
ATTYER: MOVEI A,[ASCIZ/TTYNUM not 1st spec?/]
ERRET: CALL ATYPE
ERRET1: .RESET TYIC,
MOVEI A,[ASCIZ/
see .INFO.;TCTYP ORDER /]
CALL ATYPE
SKIPE DEBUGP
.VALUE
.BREAK 16,60000 ;KILL SELF AND THROW AWAY INPUT.
AHELP: SYSCAL OPEN,[1000,,DSKIC ? ['DSK,,] ? [SIXBIT/TCTYP/]
[SIXBIT/ORDER/] ? ['.INFO.]]
.VALUE [ASCIZ/:BUG TCTYP .INFO.;TCTYP ORDER IS MISSING
:KILL /]
AHELP1: .IOT DSKIC,A
CAIN A,^L
JRST AHELP2
.IOT TYOC,A
JRST AHELP1
AHELP2: SKIPE DEBUGP
.VALUE
.BREAK 16,140000
ADM2500:
ADATAM: JSP A,[ CALL ATYPSP
MOVEI A,ADTM3 ;SET UP PADDING ROUTINE FOR LATER
MOVEM A,PADRTN
MOVEI A,DTMINI
MOVEM A,INIRTN
RET ]
ADTM1: %TNDTM ? 79. ? 24. ? [ASCIZ /Datamedia/]
%TOMVU+%TOMVB+%TOERS+%TOLWR+%TOCID+%TOLID,,%TPORS
1 ? 0
ADTM3: CALL ADTM2 ;COMPUTE DESIRED PADDING CODE, THEN STORE IN TTYOPT.
DPB A,[$TPPCR,,TTYOPT]
RET
ADTM2: HRRZ B,OSPEED
SETZ A,
CAIGE B,10
JUMPN B,ADTM4
IRPS SP,,1200. 2400. 4800. 9600.
CAIL B,SP
MOVEI A,1+.IRPCNT
TERMIN
RET
ADTM4: CAIN B,5 ;DECODE OLD-FASHIONED SPEED CODE IN B.
MOVEI A,1
CAIN B,6
MOVEI A,2
CAIN B,7
MOVEI A,4
RET
ALUNAR: JSP A,ATYPSP
%TNDTM ? 79. ? 24. ? [ASCIZ /Lunar/]
%TOMVU+%TOMVB+%TOERS+%TOLWR,,%TPORS
1 ? 0
AS1GRI: JSP A,ATYPSP
%TNDTM ? 84. ? 42. ? [ASCIZ /S1GRIN/]
%TOMVU+%TOMVB+%TOERS+%TOLWR+%TOLID+%TOCID,,%TPORS+%TPMTA+%TPRSC
5 ? 0
AS1SOF: MOVEI A,[ %TNSFW ? 84. ? 42. ? [ASCIZ /S1SOFT/]
%TOMVU+%TOMVB+%TOERS+%TOLWR+%TOLID+%TOCID+%TOSAI,,%TPMTA+%TPRSC
5 ? 0 ]
PUSHJ P,ATYPSP
MOVEI A,S1SINI
MOVEM A,INIRTN
POPJ P,
AC100: MOVEI A,AC100A
PUSHJ P,ATYPSP
MOVEI A,AC100P
MOVEM A,PADRTN
MOVEI A,HDSINI
MOVEM A,INIRTN
POPJ P,
;%TOCID turned on 4/18/81 since it works on new C100s and ITS's > 1200 or so
;and this version of TCTYP already has bugs that break old C100's so why not
;add a few more? There may not be any old C100's left anyway.
AC100A: %TNHDS ? 78. ? 24. ? [ASCIZ/C100/] ;LAST COLUMN LOSES TOTALLY
%TOMVU+%TOMVB+%TOERS+%TOLWR+%TOLID+%TOCID,,%TPORS+3*%TPPTB
1 ? 0
AC100P: CALL AC100Q
DPB A,[$TPPCR,,TTYOPT]
RET
AC100Q: HRRZ B,OSPEED ;C-100 PAD CODE IS 0 AT OR BELOW 1200, 1 ABOVE
MOVEI A,0
CAILE B,1200.
MOVEI A,1
POPJ P,
AT1061: MOVEI A,ARAYA
PUSHJ P,ATYPSP
MOVEI A,RAYINI
MOVEM A,INIRTN
POPJ P,
ARAYA: %TNRAY ? 79. ? 24. ? [ASCIZ/T1061/]
%TOMVU+%TOMVB+%TOERS+%TOLWR+%TOLID+%TOCID,,%TPORS+3*%TPPTB
1 ? 0
ADATAP: JSP A,ATYPSD
ADATA1: %TNDP ? 71. ? 25. ? [ASCIZ/Datapoint/]
%TOMVU+%TOMVB+%TOERS,,7*%TPPCR+%TPORS ;ADATA1+1 SET TO 70. AT STARTUP EXCEPT ON AI MACHINE.
1 ? 0
ADISAP:
ALOSER: JSP A,ATYPSD
ALOSE1: %TNODP ? 70. ? 25. ? [ASCIZ/Disappoint/]
%TOMVU+%TOMVB+%TOERS,,7*%TPPCR+%TPORS
1 ? 0
ATT2500: JSP A,ATYPSP
%TNDP ? 72. ? 30. ? [ASCIZ /TT2500/]
%TOMVU+%TOMVB+%TOERS,,7*%TPPCR+%TPORS
1 ? 0
ATYPSD: CALL ATYPSP ;SET MODE FOR DATAPOINT: FIRST SET MOST VARS,
MOVEI A,ADATA3 ;SET UP A ROUTINE THAT WILL COMPUTE THE DEFAULT PADDING,
MOVEM A,PADRTN ;ONCE WE KNOW WHAT SPEED TO ASSUME.
RET
ADATA3: CALL ADATA2 ;COMPUTE DESIRED PADDING CODE, THEN STORE IN TTYOPT.
DPB A,[$TPPCR,,TTYOPT]
RET
ADATA2: HRRZ B,OSPEED
SETZ A,
CAIGE B,10
JUMPN B,ADATA4
CAIL B,1200.
MOVEI A,3
CAIL B,2400.
MOVEI A,4
JUMPN B,CPOPJ
MOVE B,TTYTYP
TRNE B,%TYSTY
MOVEI A,4 ;ON STY ASSUME 2400
RET
ADATA4: CAIN B,6 ;DECODE OLD-FASHIONED SPEED CODE IN B.
MOVEI A,4
CAIN B,5
MOVEI A,3
RET
ASOFTW: JSP A,ATYPSP
ASOFT1: %TNSFW ? 95. ? 37. ? [ASCIZ/Software/]
%TOMVU+%TOMVB+%TOOVR+%TOERS,, ;THESE ARE RANDOM - HOW CAN TCTYP KNOW
0 ? 0 ;WHAT THE SOFTWARE TTY'S STY PROGRAM WANTS?
AIMLAC: JSP A,ATYPSP
AIMLA1: %TNSFW ? 89. ? 44. ? [ASCIZ/Imlac/]
%TOMVU+%TOMVB+%TOOVR+%TOERS+%TOLWR+%TOCID+%TOLID,,
10. ? %TQIM1,,
ATIMLA: JSP A,ATYPSP
ATIML1: %TNSFW ? 89. ? 44. ? [ASCIZ/Timlac/]
%TOMVU+%TOMVB+%TOOVR+%TOERS+%TOLWR+%TOFCI+%TOCID+%TOLID,,%TPCBS+%TPORS
10. ? %TQIM1,,
ASIMLA: JSP A,ATYPSP
ASIML1: %TNSFW ? 89. ? 50. ? [ASCIZ/Simlac/]
%TOMVU+%TOMVB+%TOOVR+%TOERS+%TOLWR+%TOSAI+%TOFCI+%TOCID+%TOLID,,%TPCBS+%TPORS
10. ? %TQIM4,,
ATEKTR: JSP A,ATYPSP
ATEK1: %TNTEK ? 72. ? 35. ? [ASCIZ/Tektronix/]
%TOMVU+%TOOVR+%TOMVB+%TOLWR+%TOMOR,,%TPORS
0 ? 0
ATV: JSP A,ATYPSP
ATV1: %TNTV ? 95. ? 37. ? [ASCIZ/TV/]
%TOMVU+%TOMVB+%TOERS+%TOSAI+%TOLWR+%TOOVR+%TOFCI+%TOCID+%TOLID,,%TP11T+%TPRSC
4 ? %TQGRF+%TQVIR+%TQREC+%TQXOR+<.DPB 14,<.BP %TQHGT>>+<.DPB 6,<.BP %TQWID>>,,%TRSCN
ASIMUL: JSP A,ATYPSP ;STANFORD TELNET DATAPOINT SIMULATOR.
ASIMU1: %TNDP ? 121 ? 45 ? [ASCIZ/Simulator/]
%TOMVU+%TOMVB+%TOERS+%TOLWR,,%TPORS
0 ? 0
AGT40: JSP A,ATYPSP
AGT40A: %TNDP ? 71. ? 40 ? [ASCIZ/GT40/]
%TOMVU+%TOMVB+%TOERS+%TOOVR+%TOLWR,,%TPORS
1 ? 0
AGT44: JSP A,ATYPSP
AGT44A: %TNDP ? 71. ? 42. ? [ASCIZ/GT44/]
%TOMVU+%TOMVB+%TOERS+%TOOVR+%TOLWR,,%TPORS
1 ? 0
A340D: JSP A,ATYPSP
A340D1: %TNDP ? 117 ? 50 ? [ASCIZ /340D/]
%TOMVU+%TOMVB+%TOERS+%TOLWR,,%TPORS
0 ? 0
AOMRON: AHP2640:
JSP A,ATYPSP
AHP26A: %TNESC ? 78. ? 24. ? [ASCIZ/HP2640/]
%TOERS+%TOMVB+%TOMVU+%TOLWR+%TOLID+%TOCID,,%TPORS
1 ? 0
AH19: AZ19: AHEATH:
MOVEI A,AH19A
PUSHJ P,ATYPSP
MOVEI A,H19INI
MOVEM A,INIRTN
POPJ P,
AH19A: %TNH19 ? 79. ? 24. ? [ASCIZ/H19/]
%TOERS+%TOMVB+%TOMVU+%TOLWR+%TOLID+%TOCID,,%TPORS+3*%TPPTB
1 ? 0
AAAA: AAMBAS:
MOVEI A,AAAA1
PUSHJ P,ATYPSP
MOVEI A,AAAINI
MOVEM A,INIRTN
POPJ P,
AAAA1: %TNAAA ? 79. ? 48. ? [ASCIZ/AAA/]
%TOERS+%TOMVB+%TOMVU+%TOLWR+%TOLID+%TOCID,,%TPORS+%TPMTA+2*%TPPTB
1 ? 0
AVT52: MOVEI A,AVT52A
CALL ATYPSP ;DO THE NORMAL SETTING, FROM VECTOR <-A
MOVEI A,AVT52B
MOVEM A,PADRTN
RET
AVT52B: HRRZ A,OSPEED ;IF SPEED IS 4800 OR MORE
MOVEI B,2*%TPPTB
CAIL A,4800.
ANDCAM B,TTYOPT ;DON'T USE ABSOLUTE POSITIONING.
RET
AVT52A: %TNESC ? 79. ? 24. ? [ASCIZ/VT52/]
%TOERS+%TOMVB+%TOMVU+%TOLWR,,%TPORS+3*%TPPTB
1 ? 0
AVT50: JSP A,ATYPSP
AVT50A: %TNESC ? 79. ? 12. ? [ASCIZ/VT50/]
%TOERS+%TOMVB+%TOMVU,,%TPORS
1 ? 0
AMINIB: AMBEE:
JSP A,ATYPSP
AMBEE1: %TNESC ? 78. ? 25. ? [ASCIZ/Minibee4/]
%TOERS+%TOMVB+%TOMVU+%TOLWR,,%TPORS+1*%TPPTB
1 ? 0
ASBEE: ASUPERB:
JSP A,ATYPSP
ASBEE1: %TNESC ? 78. ? 25. ? [ASCIZ /StupidBee/]
%TOERS+%TOMVB+%TOMVU+%TOLWR,,%TPORS+1*%TPPTB
1 ? 0
APRINT: SETOM PSPECD ;INDICATE HAVE SPEC'D TTY AS PRINTING
JSP A,ATYPS1
APRIN1: %TNPRT ? 79. ? MOVE ? [ASCIZ/Printing/]
%TOMVB+%TOOVR+%TORAW,,%TPORS+%TPPCR
1 ? 0
ATELET:
AT35: SETOM PSPECD ;INDICATE HAVE SPEC'D TTY AS PRINTING
JSP A,ATYPSP
AT35A: %TNPRT ? 107 ? MOVE ? [ASCIZ/Teletype/]
%TOALT+%TOOVR,,%TPORS+%TPPCR
1 ? 0
AEXECU: SETOM PSPECD ;INDICATE HAVE SPEC'D TTY AS PRINTING
JSP A,ATYPSP
AEXEC1: %TNPRT ? 79. ? MOVE ? [ASCIZ/Execuport/]
%TOMVB+%TOOVR,,%TPORS+4*%TPPCR
1 ? 0
ATI:: ;DEFINE "TI" COMMAND SINCE "TI" IS AMBIGUOUS DUE TO "TIMLAC".
ATISIL: SETOM PSPECD
JSP A,ATYPSP
ATISI1: %TNPRT ? 79. ? MOVE ? [ASCIZ/TIsilent/]
%TOMVB\%TOLWR\%TOOVR,,%TPORS+1*%TPPCR
1 ? 0
AGLASS: SETOM PSPECD
JSP A,ATYPSP
AGLASA: %TNPRT ? 79. ? 24. ? [ASCIZ/Glass/]
%TOMVB\%TOLWR,,%TPORS
1 ? 0
ACDI: SETOM PSPECD
JSP A,ATYPSP
ACDI1: %TNPRT ? 79. ? MOVE ? [ASCIZ /CDI/]
%TOMVB+%TOOVR,,%TPORS+2*%TPPCR
1 ? 0
ALA36: SETOM PSPECD
JSP A,ATYPSP
ALA36A: %TNPRT ? 131. ? MOVE ? [ASCIZ /LA36/]
%TOMVB+%TOOVR+%TOLWR,,%TPORS
1 ? 0
AMEMOW: SETOM PSPECD ;INDICATE HAVE SPEC'D TTY AS PRINTING
SETOM TABP ;INDICATE SHOULD SET TAB STOPS.
JSP A,ATYPSP
AMEMO1: %TNMEM ? 119. ? MOVE ? [ASCIZ/Memowreck/]
%TOMVB+%TOOVR+%TOLWR,,6*%TPPCR+4*%TPPLF+%TPORS
1 ? 0
ATERMI: SETOM PSPECD ;INDICATE HAVE SPEC'D TTY AS PRINTING
SETOM TABP ;INDICATE SHOULD SET TAB STOPS.
MOVEI A,ATERM1
CALL ATYPSP
JSP A,[ MOVEM A,PADRTN ? RET]
HRRE B,OSPEED
MOVEI A,ATERM2
CALL SPDLUK
DPB B,[$TPPLF,,TTYOPT]
RET
ATERM1: %TNTRM ? 119. ? MOVE ? [ASCIZ/Terminet/]
%TOMVB+%TOOVR+%TOLWR,,%TPORS
1 ? 0
ATERM2: 110.,,1 ;SPEED CODE TRANSLATIONS TO %TPPLF FOR TERMINETS
150.,,2
300.,,3
600.,,4
1200.,,5
-1
;A POINTS AT A SPEED TABLE, B HAS A SPEED, LOOK IT UP AND RETURN RH IN B. BASHES A.
;SPEED TABLES ARE A BUNCH OF SPEED,,DATA, IN INCREASING ORDER, TERMINATED BY -1
SPDLUK: PUSH P,C
PUSH P,D
HRRZ C,B ;-1 AND -2 SPEEDS BECOME BIG NUMBERS
MOVEI B,0 ;ASSUME 0 IF ALL SPEEDS IN TABLE TOO FAST
SPDLU1: HLRZ D,(A) ;GET SPEED OF THIS TABLE ENTRY
CAMLE D,C ;SKIP IF APPLIES
JRST SPDLU2 ;TOO HIGH, DOESN'T APPLY
HRRZ B,(A) ;APPLIES, GET IT
SKIPL 1(A) ;SKIP IF END OF TABLE REACHED
AOJA A,SPDLU1
SPDLU2: POP P,D
POP P,C
RET
;A POINTS TO A VECTOR HOLDING: NEW TCTYP, NEW NORMAL LINEL,
;NEW NORMAL PAGE SIZE, POINTER TO ASCII NAME OF TTY TYPE, AND
;NORMAL SETTINGS OF SEVERAL TTYOPT BITS (THOSE CLEARED AT ATYPS1)
;FOLLOWED BY THE TTYROL AND TTYSMT SETTINGS.
;COME TO ATYPSP IF TTY CAN'T BE HALFDUPLEX, ELSE ATYPS1.
ATYPSP: MOVSI B,%TOHDX+%TOALT
ANDCAM B,TTYOPT
ATYPS1: MOVE B,[%TOMVB+%TOMVU+%TOERS+%TOOVR+%TOSAI+%TOLWR+%TORAW+%TOFCI+%TOLID+%TOCID,,<
%TPORS+7*%TPPCR+7*%TPPLF+7*%TPPTB+%TP11T+%TPPRN+%TPMTA+%TPRSC>]
ANDCAM B,TTYOPT
MOVE B,4(A)
IORM B,TTYOPT
MOVE B,5(A)
MOVEM B,TTYROL
MOVE B,6(A)
MOVEM B,TTYSMT
SETZM PADRTN
SETZM INIRTN
HRLZS A
HRRI A,TCTYP
BLT A,TCMXV
RET
AWIDTH:
ALINEL: CALL RDNUM
CAILE A,10
MOVEM A,SLINEL
RET
APAGES:
AHEIGH: CALL RDNUM
CAILE A,5
MOVEM A,SPAGEH
RET
ASCRLC: CALL RDNUM
MOVEM A,SROL
RET
AWHOLI: CALL RDNUM
SUBI A,1
MOVE B,TTYOPT ;"WHOLINE" COMMAND ALLOWED ONLY ON TV TTY'S.
TRNE B,%TP11T
MOVEM A,SWHOLI
RET
ASAVEL: CALL RDNUM
SETZ B,
JUMPE A,ASAVEZ
SUBI A,1
ASAVEN: ADDI B,1 ;B = LOG4(A)
LSH A,-2
JUMPN A,ASAVEN
CAILE B,7
MOVEI B,7
ASAVEZ: DPB B,[.BP %TRLSV,TTYSMT] ;SET %TRLSV BITS
RET
;PUT TTY IN ^_Q MODE - QUERY ON ^_C'S.
AQUERY: MOVSI B,%TCRFS
ANDCAM B,TTYCOM
MOVSI B,%TCQRY
IORM B,TTYCOM
RET
;PUT TTY IN ^_R MODE - REFUSE ^_C'S.
AREFUS: MOVSI B,%TCQRY
ANDCAM B,TTYCOM
MOVSI B,%TCRFS
IORM B,TTYCOM
RET
;PUT TTY IN ^_A MODE - ACCEPT ALL ^_C'S (THE DEFAULT MODE)
AACCEP: MOVSI B,%TCRFS+%TCQRY
ANDCAM B,TTYCOM
RET
IF2 [
AFULLD==<T%OHDX-BITTAB>_27.+TURNOF
ALOWER==<T%OCLC-BITTAB>_27.+TURNOF
]
;DISPATCH HERE FOR COMMANDS TO TURN A BIT ON OR OFF.
;THE BITTAB IDX OF THE ENTRY FOR THE BIT SHOULD BE IN THE TOP 9 BITS
;OF THE KEYTAB DISPATCH WORD (POINTED TO BY KEYTAB+1(E)).
TURNON: TDZA B,B
TURNOF: MOVEI B,"-
MOVEM B,PMSVD ;SAY WHETHER TO SET OR CLEAR.
LDB E,[331100,,KEYTAB+1(E)]
JRST PM1
APADDE: SETOM PADDED ;OVERRIDE DEFAULTING OF STY TTY'S TO NON-PADDED.
RET
ANOSUP: SETOM NOSUPDUP ;OVERRIDE REFUSAL TO CHANGE TCTYP OF SUPDUP TTY.
RET
ANOBOW: SKIPA J,[ANDCAM B,CSA]
ABOW: MOVE J,[IORM B,CSA]
MOVEI B,200000
MOVE A,TTYTYP
TRNE A,%TY11T
XCT J
RET
APADCR: MOVSI J,$TPPCR
JRST APADSET
APADLF: MOVSI J,$TPPLF
JRST APADSET
APADTA: MOVSI J,$TPPTB
SETOM TABP ;INDICATE SHOULD SET TAB STOPS.
APADSET:CALL RDNUM
CAIG A,7
CAIGE A,0
RET ;PADDING CODES ARE 3 BITS LONG.
APADS1: HRRI J,SOPTON ;TURN ON THE BITS THAT ARE ON IN THE SPEC'D CODE,
DPB A,J
HRRI J,SOPTOF ;AND TURN THE OTHERS OFF.
SETCA A,
DPB A,J
RET
ANOTAB: TDZA A,A ;TTY DOESN'T UNDERSTAND TABS (SAME AS PADTAB 0).
ATABS: MOVEI A,1 ;TTY DOS UNDERSTAND TABS (SAME AS PADTAB 1).
SETOM TABP ;CAUSE THE TERMINAL'S TABS TO BE SET.
MOVSI J,$TPPTB
JRST APADS1
ANOSET: SETZM TABPP ;NOSETTAB COMMAND INHIBITS AUTOMATIC SETTING OF TABS
RET
;SPEED <N> - USE <N> AS THE SPEED FOR COMPUTING DEFAULT PADDING
;SETTINGS FOR DATAPOINTS, TERMINETS, ETC.
ASPEED: CALL RSPEED ;SPEED TO A
HRROM A,OSPEED ;SET OUTPUT SPEED
HRROM A,ISPEED ;SET INPUT SPEED
RET
AISPEE: CALL RSPEED
HRROM A,ISPEED
RET
AOSPEE: CALL RSPEED
HRROM A,OSPEED
RET
RSPEED: MOVE B,TCTYP
CAIN B,%TNTV
JRST RSPEE2
CALL RDNUM ;READ A SPEED ARG, PUT NUMBER OF BAUDS IN A
MOVSI B,-SPDTBL ;LOOK UP SPEC'D SPEED IN TABLE.
RSPEE1: CAME A,SPDTAB(B)
AOBJN B,RSPEE1
JUMPL B,CPOPJ ;FOUND SPEED, RETURN IT
JSP A,ERRET ;BAD VALUE FOR SPEED.
ASCIZ/Impossible speed requested?/
RSPEE2: JSP A,ERRET
ASCIZ /You are using :TCTYP to set the speed of a TV.
Please send a message to :BUG TCTYP telling that
you got this message./
;ALLOWED SPEEDS
SPDTAB: 0 ? 600. ? 110. ? 150.
300. ? 1200. ? 1800. ? 2400.
4800. ? 9600. ? 25000. ? 40000.
50000. ? 80000.
SPDTBL==.-SPDTAB
;"DESCRIBE" COMMAND - INSTEAD OF CHANGING TTY, GIVE COMPLETE
;DESCRIPTION OF WHAT IT IS OR WOULD BE LIKE.
ADESCR: SETOM DESCFL ;CAUSE DESC TO BE REACHED AT
RET ;END OF COMMAND STRING.
;DESCRIBE SELECTED TTY.
DESC: SETZM HPOS
MOVE A,TCTYP ;DISPATCH ON TTY'S MAIN TYPE.
XCT DESCTB(A)
;C -> VECTOR: TCTYP, NORMAL TCMXH, NORMAL TCMXV, [ASCIZ/NAME OF TTY TYPE/], NORMAL TTYOPT SETTING
DESCP1: MOVE A,3(C)
CALL ATYPE ;PRINT TYPE OF TTY.
MOVSI D,-DESCTL
DESC0: SKIPE DESCFL ;IF WANT ALL PARAMS' VALUES,
JRST DESC0A
XCT DESCT1(D) ;OR IF ACTUAL VALUE
XCT DESCT2(D) ;AND NORMAL VALUE
CAMN A,B ;ARE DIFFERENT,
JRST DESC0B
DESC0A: MOVE A,DESCT3(D)
CALL DTYPE ;PRINT THE NAME OF THE PARAMETER
XCT DESCT1(D) ;GET THE ACTUAL VALUE
XCT DESCT4(D) ;AND PRINT IT
DESC0B: AOBJN D,DESC0
CALL DESCOP ;DESCRIBE STATE OF TTYOPT BITS.
CALL DESCSM ;DESCRIBE STATE OF TTYSMT BITS.
CALL DESCCM ;DESCRIBE STATE OF TTYCOM BITS.
MOVE A,TTYTYP
TRNN A,%TY11T
JRST DESC1E
MOVEI A,[ASCIZ //]
MOVEI B,200000
TDNN B,CSA
CALL DESC1D
CALL DTYPE
MOVEI A,[ASCIZ /BOW/]
CALL ATYPE
JRST DESC1X ;TV'S DON'T HAVE SPEED
DESC1E: SKIPE DESCFL ;IF GIVING LONG DESCRIPTION, PRINT THE LINE SPEED.
CALL DESCSP
DESC1X: SKIPE DEBUGP
.VALUE
.BREAK 16,140000
;PRINT LINE SPEED OR SPEEDS
DESCSP: HRRE A,ISPEED
HRRE B,OSPEED
CAME A,B ;BOTH DIRECTIONS THE SAME => JUST PRINT ONCE.
JRST DESC1S
MOVEI A,[ASCIZ/Speed /]
CALL DTYPE
HRRE A,OSPEED
JRST SPTYPE
DESC1S: MOVEI A,[ASCIZ/ISpeed /] ;ELSE PRINT BOTH DIRECTIONS' SPEEDS.
CALL DTYPE
HRRE A,ISPEED
CALL SPTYPE
MOVEI A,[ASCIZ/OSpeed /]
CALL DTYPE
HRRE A,OSPEED
JRST SPTYPE
;PRINT SPEED IN A. INDICATE THAT 0 MEANS UNSPECIFIED.
SPTYPE: JUMPN A,DNTYPE
MOVEI A,[ASCIZ /0 (Unspecified)/]
JRST ATYPE
;DESCRIBE THE SETTINGS OF SOME BITS IN TTYCOM.
DESCCM: MOVE J,TTYCOM
MOVEI A,[ASCIZ /Accept/]
SKIPE DESCFL ;PRINT "ACCEPT" IF IT'S TRUE, BUT ONLY IN DESC MODE
TLNE J,%TCRFS+%TCQRY ;SINCE "ACCEPT" IS THE DEFAULT.
CAIA
CALL DTYPE
IRPS X,Z,%TCICO+%TCOCO+%TCQRY %TCRFS,Y,,ICO OCO Query Refuse
MOVEI A,[ASCIZ//]
TLNN J,X
IFB Z, JRST .+4
.ELSE CALL DESC1D
CALL DTYPE
MOVEI A,[ASCIZ /Y/]
CALL ATYPE
TERMIN
RET
;DESCRIBE CURRENT STATE OF TTYOPT BITS.
DESCOP: MOVE J,4(C) ;NORMAL STATE OF TTYOPT BITS
TLO J,%TOMOR
MOVE D,TCTYP ;TELNET TTYS NORMALLY HAVE %TPTEL ON
MOVE B,TTYTYP
CAIE D,%TNSFW
TRNN B,%TYSTY
CAIA
TRO J,%TPTEL
XOR J,TTYOPT ;NORMALLY PRINT ONLY BITS THAT DIFFER.
IOR J,DESCFL ;BUT IF "DESCR" COMMAND, PRINT ALL.
MOVSI D,-BITTBL/2
DESC1A: HRRZ B,BITTAB+1(D) ;FIND THE BIT FOR THIS FLAG.
SKIPGE BITTAB+1(D)
HRLZS B
HLRZ A,BITTAB+1(D)
TRNN A,377777 ;CONSIDER ONLY TTYOPT BITS IN THIS LOOP.
TDNN J,B ;IS IT ONE OF THOSE WE SHOULD PRINT?
JRST DESC1B ;NO, GO ON TO NEXT.
TLNE B,%TOALT+%TOMOR+%TOCLC+%TOROL+%TOHDX+%TOSA1+%TOERS+%TOMVU+%TOMVB+%TOOVR+%TORAW ;SOME BITS HAVE SPECIAL CMDS
JRST DESC1C ;FOR THEM, PRINT OUT SUCH CMDS.
MOVEI A,[ASCIZ/+/] ;TYPE "+" IF BIT IS ON,
TDNN B,TTYOPT
MOVEI A,[ASCIZ/-/] ;ELSE "-".
CALL DTYPE
MOVE A,BITTAB(D) ;PRINT THE NAME OF THE BIT.
CALL SIXTYP
DESC1B: AOBJN D,[AOJA D,DESC1A]
RET
;DESCRIBE THE STATE OF THE TTYSMT BITS.
DESCSM: MOVE J,TTYSMT ;IN DESCRIBE MODE, MENTION ALL NONZERO TTYSMT BITS.
SKIPN DESCFL
MOVE J,6(C) ;IN NON-DESCRIBE MODE, MENTION ALL ABNORMAL TTYSMT BITS.
MOVSI D,-BITTBL/2
DESCS0: HRRZ B,BITTAB+1(D) ;FIND THE BIT FOR THIS FLAG.
SKIPGE BITTAB+1(D)
HRLZS B
HLRZ A,BITTAB+1(D)
ANDI A,77
CAIN A,4 ;CONSIDER ONLY THE TTYSMT BITS IN THIS LOOP.
TDNN J,B ;IS IT ONE OF THOSE WE SHOULD PRINT?
JRST DESCS1 ;NO, GO ON TO NEXT.
MOVEI A,[ASCIZ/+/] ;TYPE "+" IF BIT IS ON,
TDNN B,TTYSMT
MOVEI A,[ASCIZ/-/] ;ELSE "-".
CALL DTYPE
MOVE A,BITTAB(D) ;PRINT THE NAME OF THE BIT.
CALL SIXTYP
DESCS1: AOBJN D,[AOJA D,DESCS0]
RET
DESC1D: MOVEI A,[ASCIZ /No /]
SKIPE DESCFL
POPJ P,
AOS (P)
POPJ2: AOS (P)
POPJ1: AOS (P)
POPJ P,
DESC1C: SAVE B
MOVEI A,[0]
CALL DTYPE ;PRINT A COMMA OR CR.
MOVEI A,[ASCIZ/No /] ;IFF THE BIT IS OFF, FIRST PRINT "NO".
MOVE B,(P)
TDNN B,TTYOPT
CALL ATYPE
REST B
IRPS X,,MVU RAW ERS OVR MVB ALT MOR ROL CLC HDX SA1,Y,,Display Raw Erasable Overprint Backspace Standardize More Scroll Uppercase Halfduplex Sail
TLNE B,%TO!X
MOVEI A,[ASCIZ/Y/]
TERMIN
CALL ATYPE
JRST DESC1B
DESCTB: JRST DESCP ;TYPE 0 => DISTINGUISH BETWEEN T35, MEMOWRECK.
JRST DESCD ;TYPE 1 => DISTINGUISH BETWEEN GT40 AND DATAPOINT.
MOVEI C,ALOSE1
MOVEI C,AIMLA1
MOVEI C,ATEK1
MOVEI C,ATV1
MOVEI C,AMEMO1
JRST DESCS ; TYPE 7 => DISTINGUISH BETWEEN SIMLAC AND SOFTWARE
MOVEI C,ATERM1
JRST DESCV ;DISTINGUISH VT50, VT52, MBEE
MOVEI C,ADTM1
MOVEI C,ARAYA
MOVEI C,AC100A
MOVEI C,AH19A
MOVEI C,AAAA1
IFN .-DESCTB-%TNMAX, .ERR DESCTB WRONG SIZE
DESCT1: MOVE A,TCMXH ;GET ACTUAL VALUE OF PARAM.
MOVE A,TCMXV ;INDEXED BY PARAMETER #.
LDB A,[$TPPCR,,TTYOPT]
LDB A,[$TPPLF,,TTYOPT]
LDB A,[$TPPTB,,TTYOPT]
CALL [ MOVE A,WHOLIN
AOJA A,CPOPJ]
MOVE A,TTYROL
CALL DESLSV
DESCTL==.-DESCT1
DESCT2: MOVE B,1(C) ;GET NORMAL VALUE OF PARAM.
MOVE B,2(C)
CALL DESCC
CALL DESCL
CALL DEST
SETZ B,
MOVE B,5(C)
SETZ B,
DESCT3: [ASCIZ/Linel=/] ;NAME OF PARAM.
[ASCIZ/Pagesize=/]
[ASCIZ/Padcr=/]
[ASCIZ/Padlf=/]
[ASCIZ/Padtab=/]
[ASCIZ/Wholine=/]
[ASCIZ/Scrlcount=/]
[ASCIZ/Savelines=/]
DESCT4: CALL DNTYPE ;INSTRUCTION TO DISPLAY VALUE (IN A)
CALL DNTYPE
CALL DNTYPE
CALL DNTYPE
CALL DNTYPE
CALL DNTYPE
CALL DNTYPE
CALL DNTYPE
;PUT IN B THE DEFAULT VALUE OF PADCR.
DESCC: SKIPE B,(C)
CAIL B,3 ;DATAPOINT?
JRST DESCDM
LDB B,[$TPPCR,,4(C)] ;DATAPOINT: VALUE MAY BE IN TTYOPT SETTING,
CAIE B,7
RET
SAVE A ;BUT MAY BE SPEED-DEPENDENT.
CALL ADATA2 ;COMPUTE NORMAL PADDING FOR DPT.
MOVE B,A
POPAJ: REST A
RET
DESCDM: CAIE B,%TNDTM ;CHECK FOR DATAMEDIA
JRST DSCDM1
MOVSI B,%TOLID
TDNN B,TTYOPT
JRST DSCDM1
SAVE A
CALL ADTM2 ;GET SPEED-DEPENDENT PAD CODE
MOVE B,A
JRST POPAJ
DSCDM1: CAIE B,%TNHDS ;C-100 ALSO HAS SPEED-DEPENDENT PAD CODE
JRST DSCDM2
SAVE A
CALL AC100Q
MOVE B,A
JRST POPAJ
DSCDM2: LDB B,[$TPPCR,,4(C)] ;NO, VALUE IS IN THE TTYOPT SETTING.
RET
DESCL: MOVE B,(C)
CAIE B,%TNTRM
JRST [ LDB B,[$TPPLF,,4(C)]
RET ]
MOVE B,OSPEED ;GET NORMAL VALUE OF PADLF FOR TERMINET
PUSH P,A
MOVEI A,ATERM2
CALL SPDLUK
POP P,A
RET
DEST: LDB B,[$TPPTB,,4(C)] ;DEFAULT PADDING OF TABS IS PROBABLY IN VECTOR
CAIE C,AVT52A
RET
SAVE A ;BUT FOR VT52'S THAT CAN BE OVERRIDDEN.
HRRZ A,OSPEED
CAIL A,4800.
TRZ B,2
JRST POPAJ
DESLSV: LDB A,[.BP %TRLSV,TTYSMT] ;CURRENT VALUE OF %TRLSV
SKIPN A
RET ;zero => 0
LSH A,1 ;CR(A)=2N
HRLI A,1 ;CL(A)=2^0
LSH A,(A) ;CL(A)=2^CR(A)=2^(2N)=4^N
HLRZ A,A ;N => 4^N
RET
;IT'S A PRINTING TTY, BUT WHICH KIND?
DESCP: LDB C,[$TPPCR,,TTYOPT]
SKIPE C,DESCPT(C) ;DIFFERENT PRINTING TTYS DISTINGUISHED BY PADDING.
JRST DESCP2
MOVEI C,APRIN1 ;NORMAL PADDING => SAY JUST "PRINTING"
MOVE A,TCMXH
CAIL A,100. ;UNLESS WIDTH SUGGESTS LA36
MOVEI C,ALA36A
; CAIN A,79. ;DON'T TRY TO GUESS DIFFERENT 80-COLUMN PRINTERS
; MOVEI C,ATISI1
MOVE A,TTYOPT
TLNE A,%TORAW
MOVEI C,APRIN1 ;RAW MODE => JUST SAY "PRINTING".
TLNN A,%TOOVR
MOVEI C,AGLASA ; SAY IT'S A GLASS TTY IF IT CAN'T OVERPRINT(WIN!)
TLNN A,%TOMVB
MOVEI C,AT35A ;SAY IT'S A TELETYPE IF IT CAN'T BACKSPACE.
DESCP2: MOVE A,TTYTYP
TRNN A,%TYSTY ;SET UP DEFAULT VALUE OF PADCR.
JRST DESCP1
MOVE A,4(C) ;ON AN STY TTY,
TRNN A,7*%TPPCR+7*%TPPLF
JRST DESCP1 ;FOR A TTY THAT NEEDS PADDING,
XOR A,TTYOPT
ANDI A,7*%TPPCR+7*%TPPLF
SKIPN PADDED
JUMPN A,DESCP3 ;PADDING AGREES WITH NON-STY DEFAULT => "PADDED"
MOVEI A,[ASCIZ/Padded /]
CALL ATYPE
JRST DESCP1
DESCP3: MOVEI A,7*%TPPCR+7*%TPPLF
ANDCAM A,4(C) ;ELSE, DEFAULT PADDING ON STY TTY IS 0.
JRST DESCP1
DESCPT: 0
0
ACDI1 ? APRIN1 ? AEXEC1 ? AMEMO1
0
;EITHER A DATAPOINT OR A GT40, BUT WHICH?
;IF NOT STANDARD FOR A GT40, SAY A DATAPOINT.
DESCD: LDB A,[$TPPCR,,TTYOPT]
MOVEI C,ADATA1 ;IF PADDED, IT'S A DATAPOINT,
SKIPE DESCFL
JRST DESCP1
JUMPN A,DESCP1
MOVE A,TCMXV
CAIN A,40 ;IF HEIGHT NOT 40, A DATAPOINT.
MOVEI C,AGT40A
CAIN A,42.
MOVEI C,AGT44A
JRST DESCP1
; SOFTWARE TTY. SEE IF ITS AN IMLAC TOO, TO DO SIMLAC
DESCS: MOVEI C,ASOFT1
MOVE A,TTYSMT
TLNN A,%TQIM4+%TQIM1 ;SOME SORT OF IMLAC?
JRST DESCP1
MOVE A,TTYOPT ;DISTINGUISH "SMART" ONES BY CBS PROTOCOL
MOVEI C,AIMLA1
TRNN A,%TPCBS
JRST DESCP1
MOVEI C,ATIML1 ;"SMART" IMLAC WITHOUT SAIL HACKERY (PDL'S)
TLNE A,%TOSAI
MOVEI C,ASIML1 ;"SMART" IMLAC WITH SAIL HACKS (JLK'S)
JRST DESCP1
;SOME KIND OF DISPLAY TERMINAL THAT USES ESCAPE SEQUENCES
;DISTINGUISH VT50, VT52, MBEE BY SCREEN SIZE
DESCV: MOVEI C,AVT52A
MOVE A,TCMXV
CAIN A,12.
MOVEI C,AVT50A
CAIN A,25.
JRST [ MOVEI C,AMBEE1
MOVE A,TTYOPT
TLNE A,%TOLID+%TOCID
MOVEI C,ASBEE1
JRST DESCP1]
CAIE A,24.
JRST DESCP1
MOVE A,TCMXH
CAIE A,78.
JRST DESCP1
MOVEI C,AHP26A
JRST DESCP1
;PRINT ASCII STRING, BUT CR FIRST IF TOO FAR FROM LEFT MARGIN,
;OTHERWISE TYPE A COMMA FIRST.
DTYPE: MOVE B,HPOS
CALL [ CAIL B,50.
JRST CRLF
JRST COMMA]
;PRINT ASCIZ STRING <- ADDRESS IN A. CLOBBERS A,B.
ATYPE: HRLI A,440700
ATYPE1: ILDB B,A
JUMPE B,CPOPJ
SAVE [ATYPE1]
CTYPE1: AOS HPOS
CTYPE: .IOT TYOC,B
CPOPJ: RET
COMMA: MOVEI B,",
JRST CTYPE1
CRLF: SETZM HPOS ;OUTPUT CRLF, RESET HPOS.
MOVEI B,^M
CALL CTYPE
MOVEI B,^J
JRST CTYPE
;PRINT SIXBIT WORD IN A, CLOBBERING A AND B.
SIXTYP: SETZ B,
ROTC A,6
ADDI B,40
CALL CTYPE1
JUMPN A,SIXTYP
RET
;PRINT (IN OCTAL) THE NUMBER IN A.
OTYPE: IDIVI A,10
HRLM B,(P)
SKIPE A
CALL OTYPE
HLRZ B,(P)
ADDI B,"0
JRST CTYPE1
;PRINT NUMBER (IN A) IN DECIMAL.
DNTYPE: IDIVI A,10.
HRLM B,(P)
SKIPE A
CALL DNTYPE
HLRZ B,(P)
ADDI B,"0
JRST CTYPE1
;OPEN THE TTY SPEC'D IN TTYOPI AND TTYOPO
;(INITIALLY THE USER'S TTY BUT CHANGED IN ATTYNUM,
;IN WHICH CASE THE TTY # SHOULD STILL BE IN A)
TTYOPN: .OPEN TYIC,TTYOPI
.LOSE %LSFIL
MOVEI A,TYIC
TTYOP1: SYSCAL CNSGET,[1000,,(A)
2000,,TCMXV
2000,,TCMXH
2000,,TCTYP
2000,,TTYCOM
2000,,TTYOPT
2000,,TTYTYP]
.LOSE %LSSYS
MOVE B,TCTYP
MOVEM B,OTCTYP
MOVE B,[-8,,['TTYROL ? MOVEM TTYROL ? 'SMARTS ? MOVEM TTYSMT
'ISPEED ? MOVEM ISPEED ? 'OSPEED ? MOVEM OSPEED]]
SYSCAL TTYVAR,[MOVEI (A) ? B]
JFCL
HRRZS ISPEED
HRRZS OSPEED
SYSCAL WHOLIN,[1000,,(A) ? 2000,,WHOLIN]
SETOM WHOLIN
SYSCAL CORBLK,[MOVEI %CBWRT ? MOVEI %JSELF ? MOVEI TVPAGE ? MOVEI %JSTVB ? MOVEI 7]
JFCL
SYSCAL TVWHER,[1000,,(A) ? MOVEM B ? MOVEM B]
RET
TRO B,7400
LSH B,24
.SUSET [.STVCREG,,B]
RET
TTYOPR: JSP A,ERRET
ASCIZ/Specified TTY is in use/
;TTYNUM OPTION. FOLLOW BY TTY # DESIRED.
;CAUSES THAT TTY TO BE USED INSTEAD OF USER'S TTY.
;ERROR IF NOT 1ST SPEC.
ATTYNU: SKIPE NONNUL
JRST ATTYER
CALL RONUM ;READ TTY #
MOVEM A,TTYNUM
SAVE A
MOVEI B,'T00
MOVEM B,TTYOPI
DPB A,[300,,TTYOPI] ;SET TTYOPI TO MENTION THAT TTY.
LSH A,-3
DPB A,[60300,,TTYOPI]
REST A
AOS (P) ;SKIP RETURN SO NONNUL WON'T BE SET.
IORI A,400000
JRST TTYOP1
;READ IN A NUMBER (FROM CMDBP). RDNUM READS DECIMAL; RONUM READS OCTAL.
;THE NUMBER IS RETURNED IN A. THE TERMINATOR IS LEFT IN D. B IS CLOBBERED.
;ALSO SUPPORTS POSTFIX K MEANING MULTIPLY BY 1000.
RDNUM: SKIPA B,[10.]
RONUM: MOVEI B,10
SETZ A,
RNUM0: ILDB D,CMDBP
CAIN D,40 ;ALLOW EXTRA SPACES BEFORE THE NUMBER.
JRST RNUM0
CAIL D,"0 ;BARF IF WE DON'T FIND AT LEAST ONE DIGIT WHEN WE WANT A NUMBER.
CAILE D,"9
JRST ARGERR
CAIA
RNUM1: ILDB D,CMDBP ;MUST USE D SO THAT TERMINATING CHAR ENDS UP THERE.
CAIL D,"0
CAILE D,"9
JRST RNUM2 ;NOT A DIGIT
IMULI A,(B)
ADDI A,-"0(D)
JRST RNUM1
RNUM2: CAIN D,".
JRST [ ILDB D,CMDBP ;ALLOW "."'S AFTER A NUMBER, AND IGNORE THEM,
JRST RNUM2] ;SINCE THEY SOMETIMES USED TO BE NECESSARY.
CAIE D,"K
CAIN D,"k
CALL RNUM3
CAIE D,^_ ;CONVERT ALL POSSIBLE JCL TERMINATORS TO CR.
CAIN D,^C
MOVEI D,^M
SKIPN D
MOVEI D,^M
CAIGE D,"0
RET ;PUNCTUATION
JRST ARGERR
RNUM3: MOVE A,B
IMULI A,1000.
ILDB D,CMDBP
RET
NONONO==0 ;NONO!X IS DEFINED IF X STARTS WITH "NO".
;;;*** Hey loser! If you add any new commands, fix the documentation in
;;;*** .INFO.;TCTYP ORDER at the same time!
KEYTAB:
IRPS X,Y,[AAA ACCEPT AMBASS BACKSP<OMVB> BOW C100 CDI DATAME DATAPO
DESCRI DISAPP DISPLA<OMVU> DM2500 ERASAB<OERS> EXECUP FULLDU GLASS
GT40 GT44 H19 HALFDU<OHDX> HEATH HEIGHT HELP HP2640 ICO<CICO> IMLAC ISPEED
LA36 LINELE LOSER LOWERC LUNAR MBEE MEMOWR MINIBE MORE<OMOR> NO
NOBACK<OMVB> NOBOW NODISP<OMVU> NOERAS<OERS> NOHALF<OHDX> NOICO<CICO>
NOMORE<OMOR> NOOCO<COCO> NOOVER<OOVR> NORAW<ORAW> NOSAIL<OSA1>
NOSCRO<OROL> NOSETT NOSTAN<OALT> NOSUPD NOTABS NOUPPE<OCLC> OCO<COCO>
OMRON OSPEED OVERPR<OOVR> PADCR PADDED PADLF PADTAB PAGESI PRINTI
QUERY RAW<ORAW> REFUSE S1GRIN S1SOFT SAIL<OSA1> SAVELI SBEE SCRLCO
SCROLL<OROL> SIMLAC SIMULA SOFTWA SPEED STANDA<OALT> SUPERB T1061 T35
TABS TEKTRO TELETY TERMIN TI TIMLAC TISILE TT2500 TTYNUM TV UPPERC<OCLC>
VT50 VT52 WHOLIN WIDTH Z19 340D]
IFSE [Y][>] <T%!X-BITTAB>_27.+TEM
EXPUNG TEM
.ELSE [ .1STWD SIXBIT/X/
IFSN [Y][<] A!X
.ELSE [ IFDEF NONO!X,TEM==TURNOF
.ELSE TEM==TURNON
]] TERMIN
SETZ-1 ? 0
KEYTBL==.-KEYTAB
CMDBP: 0 ;BP FOR READING FROM CMD.
CMDOBP: 0 ;BP TO BEGINNING OF CMD, FOR ERR MSGS TO TYPE IT OUT.
SLINEL: -1 ;SPEC'D LINEL, OR -1 IF LINEL NOT SPEC'D.
SPAGEH: -1 ;SPEC'D PAGEH, OR -1 IF NOT SPEC'D.
SWHOLIN: MOVE ;SPEC'D WHOLIN, OR MOVE IF NOT SPEC'D.
SOPTON: 0 ;THESE BITS SHOULD BE SET IN TTYOPT
SOPTOF: 0 ;THESE SHOULD BE CLEARED.
SSMTON: 0 ;THESE BITS SHOULD BE SET IN TTYSMT
SSMTOF: 0 ;THESE SHOULD BE CLEARED.
SROL: -1 ;NOT -1 => IS EXPLICITLY SPEC'D SCROLL COUNT.
JUNK: 0 ;STUFF DEPOSITED HERE TO THROW IT AWAY.
TCTYP: 0 ;INIT'D TO ORIGINAL TCTYP OF TTY,
;SET IF SPEC THE TYPE OF TTY.
TCMXH: 0 ;ORIGINAL LINEL, OR LINEL DEFAULTED
;WHEN TCTYP SPEC'D.
TCMXV: 0 ;PAGEHEIGHT, OTHERWISE LIKE TCMXH.
TTYCOM: 0 ;ORIGINAL OR ALTERED TTYCOM
TTYOPT: 0 ;ORIGINAL OR ALTERED TTYOPT.
TTYTYP: 0 ;TTYTYP VAR (NOT CHANGED BY THIS PROGRAM)
TTYROL: 0 ;TTYROL VAR (# LINES TO SCROLL BY, IF CAN SCROLL).
TTYSMT: 0 ;ORIGINAL OR ALTERED SMARTS VARIABLE.
OSPEED: 0 ;RH HAS OUTPUT SPEED, FROM TTYTYP OR FROM SPEED COMMAND.
;SIGN IS SET IFF SPEC'D BY SPEED COMMAND.
ISPEED: 0 ;SAME FOR INPUT
OTCTYP: 0 ;ORIGINAL TCTYP OF TTY, NOT CHANGED BY COMMANDS.
PADRTN: 0 ;ADDRESS OF A ROUTINE THAT WILL DEFAULT THE PADDING SETTINGS
;IN TTYOPT ACCORDING TO THE LINE SPEED IN OSPEED. USED
;FOR DATAPOINTS, TERMINETS, ETC. THAT HAVE SPEED-CONTROLLED DEFAULTS
;SO THAT THE OSPEED COMMAND CAN FOLLOW THE BASIC COMMAND.
INIRTN: 0 ;ADDRESS OF INITIALIZE-TERMINAL ROUTINE IF NOT 0
WHOLIN: -1 ;CURRENT VALUE OF WHOLIN VAR ( -1 MEANS NO WHOLINE)
;THE WHOLINE COMMAND'S ARG IS 1 + THE WHOLINE VAR'S VALUE.
TTYOPI: 'TTY ;(OR 'TNM) OPEN TTY FOR INPUT.
TTYNUM: -1 ;# OF SPEC'D TTY, OR -1 IF USING OUR TREE'S CONSOLE.
NONNUL: 0 ;-1 IF ANY SPEC EXCEPT TTYNUM SEEN.
DESCFL: 0 ;-1 => "DESCRIBE" COMMAND SEEN.
HPOS: 0 ;HORIZ CURSOR POS, WHILE DESC IS EXECUTING.
PMSVD: 0
DEBUGP: 0 ;-1 => DEBUG MODE, DON'T :KILL SELF OR ACTUALLY
;TRY TO ALTER THE TTY.
TTINUSE:0 ;-1 => LOOKING AT A TTY IN USE BY SOMEONE ELSE.
;THAT MEANS IT IS IMPOSSIBLE TO ALTER IT.
MNAME: 0 ;SIXBIT NAME OF THIS SYSTEM (AI, ML OR DM)
MVERS: 0 ;SIXBIT VERSION NUMBER OF THIS ITS.
PADDED: 0 ;-1 => A "PADDED" COMMAND WAS GIVEN.
NOSUPDUP: 0 ;-1 => BE WILLING TO CHANGE BASIC TYPE OF SUPDUP TTY.
PSPECD: 0 ;-1 => A PRINTING TTY BASIC COMMAND WAS GIVEN.
TABP: 0 ;-1 => A CHANGE WAS MADE THAT INDICATES THAT THE TAB
;STOPS SHOULD BE SET UP (PADTAB, TERMINET OR MEMOWRECK).
TABPP: -1 ;-1 => OK TO SET TABS AUTOMATICALLY, 0 => USER SAYS NOT TO
CMD: BLOCK 40
CMDE: 0 ? -1 ;-1 PROTECTS PDL; CMDE NONZERO MEANS JCL IS TOO LONG.
PDL: BLOCK 30
PAT:
PATCH": BLOCK 40
CONSTA
VARIAB
TVPAGE==<.+1777>/2000 ;PAGE # TO MAP LAST TV PAGE, FOR BOW AND NOBOW COMMADS.
CSA==TVPAGE*2000+1777
END BEG