;-*-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==_27.+TURNOF ALOWER==_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 - USE 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 BOW C100 CDI DATAME DATAPO DESCRI DISAPP DISPLA DM2500 ERASAB EXECUP FULLDU GLASS GT40 GT44 H19 HALFDU HEATH HEIGHT HELP HP2640 ICO IMLAC ISPEED LA36 LINELE LOSER LOWERC LUNAR MBEE MEMOWR MINIBE MORE NO NOBACK NOBOW NODISP NOERAS NOHALF NOICO NOMORE NOOCO NOOVER NORAW NOSAIL NOSCRO NOSETT NOSTAN NOSUPD NOTABS NOUPPE OCO OMRON OSPEED OVERPR PADCR PADDED PADLF PADTAB PAGESI PRINTI QUERY RAW REFUSE S1GRIN S1SOFT SAIL SAVELI SBEE SCRLCO SCROLL SIMLAC SIMULA SOFTWA SPEED STANDA SUPERB T1061 T35 TABS TEKTRO TELETY TERMIN TI TIMLAC TISILE TT2500 TTYNUM TV UPPERC VT50 VT52 WHOLIN WIDTH Z19 340D] IFSE [Y][>] _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