/ COMMUNICATIONS HANDLER FOR OS278 and DECmates KERMIT V1.0 30-May-1986 / / 006 Mart 06-Jun-86 Beef up the comms initialisation / to support DECmate III / 005 SSta 04-Jun-86 Mod LDSET to accept an AC argument / containing a pointer to the string. / / 004 SSta 02-Jun-86 Add LDSET routine for G0-G4 and / Level 2 terminal initialisation / / 003 SSta 30-Mar-86 Add Startup job and Composetable / for MCS characters. / / 002 Mart 05-Mar-86 Debugging for Kermit / SSta / / 001 Mart 05-Mar-86 Basic implementation and modification / for the nice Kermit done on that File. / / 000 SSta 30-Mar-86 All thanks to for the big work to / Martyn Hemmings. / / 15/02/85 /******************************************************************* BUFMAX= 150 /maximum buffer size XOFTST= 100 / send xoff when it gets this full XONTST= 10 / send an xon when it enpties to here XOF= 23 / xof code XON= 21 / xon code CTRLZ= 32 / END OF FILE CODE ESC= 33 / TIE= 6045 / terminal int enable SPF= 6040 / set output flag AC0001= CLA CLL IAC AC4000= CLA CLL CML RAR CIDF0= CIF CDF 0 CDF0= CDF 0 / PAGE 0 FIELD 2 *10 /---- index registers *20 /---- normal page zero registers CHRIN, 0 / save char just input F2AC, 0 / end of page 0 now start on program *200 /********************************************************************** / START PROGRAM HERE /********************************************************************** COMINI, 0 JMS V30ST / load compose tables to panel memory / and set for propper character sets JMS INITKB / initialise keyboard interrupts JMS INITCM / INIT COMS INTS CLA CLL ION / start interrupts CDF CIF 00 JMP I COMINI /------------------------ PAGE /******************************************************************** / INTERRUPT CATCHER /******************************************************************** / now check for type of interrupt INTRPT, JMS COMINT / was it a comms int ? SKP / not me JMP INTXIT / was return JMS KEYINT / was it a key board int ? SKP / not me JMP INTXIT / was return JMS COMOINT / was it a comms output int ? SKP / not me JMP INTXIT / was return JMS SCRINT / was it a screen int ? SKP / not me JMP INTXIT / was return / well what the hell are we doimg here then ?? / better return anyway INTXIT, CIF 00 JMP I .+1 INTRES /------------------------------ PAGE /*********************************************************************** / INITIALIZATION /*********************************************************************** / Initialise the keyboard for input / and screen for output INITKB, 0 / initialise term interrupts CLA CLL / CLAEAR AC 6135 / DISABLE CLOCK 6756 / DISABLE RX50 INTS 6365 / CLEAR MODEM INT ENABLE CLA IAC / set bit 11 KIE / send init input command TIE / send init output command 6305 / ENABLE INTS FOR COMMS CLA CLL / CLEAR ACC JMP I INITKB / RETURN INITCM, 0 CLA 6367 / RESET COMMS CHIP CDF 0 / ACCESS REG A TAD (30) / RESET 6366 / REG A CDF 10 / ACCESS REG B 6366 / RESET REG B CDF 0 / REG A CLA TAD (2) / REGISTER 2A 6366 / SELECT CLA TAD (20) / RESET 6366 / LOAD REG 2A CDF 10 / REG B CLA TAD (2) / REGISTER 2B 6366 / SELECT CLA 6366 / LOAD REG 2B CDF 0 / REG A CLA TAD (4) / REGISTER 4A STOP BITS ^ PARITY 6366 / SELECT CLA TAD (104) / RESET 1 STOP BIT NO PARITY 6366 / LOAD REG 4A CDF 0 / REG A CLA TAD (1) / REGISTER 1A STOP BITS ^ PARITY 6366 / SELECT CLA TAD (26) / FIXED 6366 / LOAD REG 1A CDF 10 / REG B CLA TAD (1) / REGISTER 1B STOP BITS ^ PARITY 6366 / SELECT CLA TAD (26) / FIXED 6366 / LOAD REG 1B CDF 0 / REG A CLA TAD (1) / REGISTER 1A STOP BITS ^ PARITY 6366 / SELECT CLA TAD (26) / FIXED 6366 / LOAD REG 1A CLA TAD (0003) / GO WRUIUTE CONTROL REG 3 6366 / SEND CLA TAD (0301) / WRITE 8 BITS AND RECIEVE ENABLE 6366 / SEND CLA TAD (0005) / GO WRITE TO CONTROL 5 6366 / WRITE CLA TAD (150) / ENABLE TRANSMITTER 6366 7325 / AC0003 - EXTERNAL 6362 / SELECT INTERNAL CLK & DTR CLA TAD BAUD / GET DEFAULT BAUD RATE 6363 / SET BAUD 7325 / AC0003 - ENABLE INTERUPTS 6305 / FOR TRANS 6315 / FOR REC JMP I INITCM / RETURN BAUD, 16 / 9600 /--------------------------------- PAGE /*********************************************************************** / COMMUNICATION interrupts /*********************************************************************** COMINT, 0 6301 / TEST FOR COMMS INTERRUPT JMP I COMINT / NOT ME CLA CDF 10 TAD (4002) / SELECT REG 2 TO READ 6366 / SEND INSTRUCTION CLA 6366 AND (7) / ONLY THESE BITS USEFULL CDF 20 TAD (-4) / TRANSMITTER IRQ SZA CLA / SKIP MEANS TRANSMITTER INT JMP COMIN / SOMETHING COMIN IN / TO GET HERE YOU HAVE SENT SOMETHING TO THE COMMS PORT / SET A FLAG SO THAT COMMS OUTPUT CAN BE TESTED AT THE PROPER LEVEL 6310 JMP I COMINT / dummy COMIN, 6306 / TRANSFER INTO ACC 4-11 AND (377) / TAKE OUT THE JUNK DCA CHRIN / SAVE THE COMMS CHAR JUST IN DCA CERRST / CLEAR ERROR STATUS TAD (70) / DISSMISS COM INTERUPT 6366 / COM REG 0 CLA CLL JMS CHKXNF / TEST FOR XON/XOFF JMP COMXONF / XON OR XOF FOUNTY CLA SYSLOC, TAD CICOUNT / GET COUNT JMS TSTFUL / TEST IF BUFFER FULL NOP / FULL SO HOPE THIS OVERWRITES TAD CERRST / ADD IN THE ERROR BITS DCA I COMIBUF / STORE CHAR IN BUFFER ISZ COMIBUF / BUMP ISZ CICOUNT / BUNMP COUNT TAD I COMIBUF / CHECK FOR WRAP SPA DCA COMIBUF / DO WRAP IF NESS CLA / ISZ CHRFUL / SET TO -1 IN TESTFUL IF ALMOST FULL JMP COMXIT / GO FINISH OFF TAD (XOF) / NOW SEND XOFF DCA CMOXOF / SAVE IT CLA IAC / AC0001 DCA ISTOPFLAG / STOPPED INPUT COMXIT, TAD COMBSY / CHECK THE BUSY FLAG SZA CLA / ARE WE BUSY JMS COMOUT / NO ISZ COMINT / SKIP RETURN JMP I COMINT / RETURN TSTFUL, 0 / TEST FOR A FULL BUFFER DCA TCOUNT / SAVE COUNT TAD TCOUNT / GET IT BACJK TAD (-XOFTST) / IOF NEARLY FIULL DCA CHRFUL / WHEN -1 IS STORED STARTS AN XOF TAD TCOUNT / GET COUNT AGAIN TAD (-BUFMAX) / GET MAX BUF SIZE SNA CLA / TEST JMP I TSTFUL / YES FULL TAD CHRIN / GET BACK CHAR ISZ TSTFUL / SKIP RETURN JMP I TSTFUL / RETURN COMXONF,DCA OSTOPFLAG / RESET/SET OUTPUT STOP FLAG JMP COMXIT / EXIT OSTOPFLAG, 0 ISTOPFLAG, 0 CHASEFLAG, 0 COMBSY, 1 CICOUNT, 0 TCOUNT, 0 CMOXOF, XON CMOXON, -XON COMIBUF, IBUF CHRFUL, 0 CERRST, 0 /********************************************************************** / CIN COMMUNICATION INPUT / /********************************************************************** CIN, 0 CLA TAD CICOUNT /GET THE BUFFER COUNT SNA CLA / NOT 0 HENCE SOMETHING IN IT JMP CINIXT / ERROR EXIT CIN2, TAD I BCOMIBUF / READ SPA / TEST FOR WRAP JMP CWRAP MQL / SAVE THE CHAR IOF / STOP INTS WHILE WE SORT THE BUFFER 7240 / AC7777 TAD CICOUNT / DEC COUNT DCA CICOUNT / SAVE ISZ BCOMIBUF / BUMP PTR ION TAD ISTOPFLAG / STOPPED ? SZA CLA /? JMP CIN4 / YES GO TRY TO RESTART CIN3, MQA / RESTORE CHAR ISZ CIN JMP CINIXT / RETURN OK CIN4, TAD CICOUNT / TEST COUNT TAD (-XONTST) / TO SEE IF READY FOR XON SZA CLA / IF 0 THEN TRY TO SEND XON JMP CIN3 / NO CONT. / NOW SEND XON TAD (XON) / GET XON DCA CMOXOF / PUT IN OUTPUT WORD IOF JMS COMOUT / CALL OUTPUT ROUTINE ION CLA CLL DCA ISTOPFLAG / NO LONGER STOPPED JMP CIN3 / CONT. CWRAP, IOF / DON'T LET INTERRUPTS GET IN THE WAY DCA BCOMIBUF / RESET THE BUFFER POINTER JMP CIN2 / GO AND CIN AGAIN AFTER WRAP CINIXT, CDF CIF 00 JMP I CIN BCOMIBUF, IBUF / BOTTOM OF INPUT RING /------------------------------------ PAGE /************************************************************************** / COMMUNICATIONS OUTPUT /************************************************************************** COMOINT, 0 / INTERRUPT LEVEL ROUTINE TO CATCH COM / OUTPUT 6311 / TEST OUTPUT FLAG JMP I COMOINT / NOT SET SO EXIT CLA TAD (50) / 6366 / DISMISS THE INTERUPT TAD (20) / (70) 6366 / cr0a issue end of interrupt command] CLA JMS COMOUT / GO OUTPUT THE CHAR ISZ COMOINT / JMP I COMOINT / SKIP RETURN COMWRA, DCA OCOMBGET / WRAP RING BUFFER SKP COMOUT, 0 DCA GOING / SAY GOING DCA COMBSY / SET BSY FLAG TAD CMOXOF / CHECK FOR XON OR XOF TAD CMOXON / SZA CLA / SKIP IF NOT DOING XON XOFF JMP CMOXXF / GO DO IT TAD COCOUNT / ANY MORE TO DO ? SNA CLA JMP COMX / FINISH IF NOT TAD OSTOPFLAG / STAOP FLAG ? SZA CLA JMP COMX / JUMP IF STOPPED TAD I OCOMBGET / GET CHAR SPA / WRAP ? JMP COMWRA / WRAP IF NESS 6316 / SEND CHAR 7240 / AC7777 TAD COCOUNT / DECREMENT COUNT DCA COCOUNT / SAVE IT ISZ OCOMBGET / INC BUFFER POINTER JMP I COMOUT / RETURN CMOXXF, TAD CMOXOF / GET CONTROL CHAR 6316 / SEND XON OR XOF CLA TAD CMOXOF / GET CHAR JUST SENT CIA / COMPLEMENT IT DCA CMOXON / SAVE JMP I COMOUT / RETURN COMX, ISZ GOING / CLEAR GOING FLAG NOT GOING ISZ COMBSY / CLEAR BUSY FLG JMP I COMOUT / RETURN OCOMBGET, OBUF / OUTPUT RING BOTTOM PTR COCOUNT, 0 / OUTPUT BUFFER COUNT GOING, 1 /****************************************************************** / COUT / Put a char inb the comms output buffer and start / / RETURNS ERROR if buffer full / hase char in acc for retry / SKIP If O.K. /****************************************************************** COUT, 0 AND (377) / ONLY 8 BITS SAVED DCA I COMOPTR / PUT IN THE BUFFER TAD COCOUNT / GET THE OUTPUT BUFFER CNT TAD (-BUFMAX) /test for full SNA CLA JMP COUTF / yes full IOF / dont allow ints while processing buf NOP / MAKE SURE THEY ARE OFF ISZ COCOUNT / bump COUNT ISZ COMOPTR / BUMP PTR TAD I COMOPTR / test for wrap SPA DCA COMOPTR / yes wrap CLA TAD GOING /output remaining SZA CLA / yes JMS COMOUT / start output ION / now let ints rip ISZ COUT / JMP COUTXT / skip RETURN COUTF, TAD I COMOPTR / get back the char COUTXT, CDF CIF 00 JMP I COUT COMOPTR,OBUF /------------------------------------ PAGE /*********************************************************************** / KEYBOARD INPUT SECTION /*********************************************************************** KEYINT, 0 / check for keyboard interrupt CLA KSF / test the input flag JMP I KEYINT / not so do an error exit CLA KRB / keyboard read AND (377) / 8 bits make sence DCA CHRIN / save the char JMS CHKXNF / check for XON or XOFF JMP KEYXONOF / found xon or xoff char CLA TAD KEYCNT / get number in the buffer TAD (-BUFMAX) / test for a full buffer SNA CLA / kip if ok JMP I KEYINT / error return full TAD CHRIN / get back the char DCA I KEYBPTR /save in the buffer ISZ KEYCNT / one more char in the buffer ISZ KEYBPTR / bump the buffer pointer TAD I KEYBPTR / see what is next in the buffer SPA / IF it is neg then wrap around DCA KEYBPTR / put the new buffer pointer in to wrap ISZ KEYINT JMP I KEYINT / RETURN found one KEYXONOF, DCA SCRSTP / reset / set stop flag JMS SCRINT / go do it JMS SCRONT / go do it again if failed NOP / ignore any fail ISZ KEYINT / ok so we found something and dealt with it JMP I KEYINT / return BKEYBPTR, / bottom of input buffer ring/modified KEYBUFF KEYBPTR, KEYBUFF / pointer to buffer /is modified by prog KEYCNT, 0 / number of chars in input buffer /************************************************************************ / CHECK FOR XON OR XOFF / / IF xon then error RETURN with ac 0 / IF xoff then error RETURN with ac 1 / ELSE (none of these ) do a skip RETURN /*********************************************************************** CHKXNF, 0 TAD CHRIN / get char TAD (-XOF) / IS IT AN XOFF? SNA JMP CHKXN1 / yes it was jump to handle it TAD (XOF-XON) / is itan XON SZA CLA / skip if yes ISZ CHKXNF / make a skip rerturn JMP I CHKXNF / return CHKXN1, CLA IAC / AC001 to signal XOFF JMP I CHKXNF / return /************************************************************************* / TTYIN / to check the keyboard buffer for input and get the char / / Called from mainline prog / RETURNS / error if no char in buffer / skip with char in ac if found /************************************************************************ TTYIN, 0 CLA / claer out ac TAD KEYCNT / get buffer count SNA CLA / not 0 hence has something JMP TTYINX / error exit / something to read --- go get it TTY2, TAD I BKEYBPTR / read from buffer SPA / test for buffer wrap JMP KEYWRP / go wrap if ness MQL / save char IOF / Stop int while we sort the buffer 7240 / Ac7777 TAD KEYCNT / dec count DCA KEYCNT / save result ISZ BKEYBPTR / BUMP pointer ION / let ints rip MQA / restore THE CHAR ISZ TTYIN / return JMP TTYINX KEYWRP, IOF / don't let ints get inthe way DCA BKEYBPTR / reset buffer pointer JMP TTY2 / go get next TTYINX, CDF CIF 00 JMP I TTYIN /------------------------------------------ PAGE /*********************************************************************** / SCREEN OUTPUT / INTERRUPT HANDLER / checks to see if output just sent. If so then send the / next char in the buffer /********************************************************************** SCRINT, 0 CLA CLL TSF / test the output flag JMP I SCRINT / no continue the chain SKP / SKIP over the wrap bit SCRWRP, DCA SCRBPTR / deposit here if wrap SKP SCRONT, 0 / dummy int call from key stop function SCROUT, CLA IAC / AC0001 DCA SCRBSY / set the screen busy TCF / reset int flag TAD SCRAUTO / setting auto repeat on off SZA / skip if not JMP SETAUTO / go set the auto on/off TAD SCRCNT / have we got anything to send? SNA CLA / skip if yes JMP SCRU1C / no jump TAD SCRSTP / stop flag set? SZA CLA / Stopped? JMP SCRU1C / jump if stopped TAD I SCRBPTR / get a char SPA / test for wrap JMP SCRWRP / wrpa if required / possible check for terminator in here TLS / print it 7240 / AC7777 TAD SCRCNT / decrement count DCA SCRCNT / and save it ISZ SCRBPTR / bump pointer ISZ SCRINT / bump return address JMP I SCRINT / RETURN done SETAUTO, TLS / print auto on/off ISZ SCRAUTO / bump for nezxt time ISZ SCRINT / bump return address JMP I SCRINT / RETURN done SCRU1C, TAD SCRFLG / are we here to change the setting??? SZA / ?? JMP SCR3 / jump if yes DCA SCRBSY / reset the busy flag TAD SCRSTP / stopped? SNA CLA / ?? 6045 / clear output ints enable ISZ SCRINT / JMP I SCRINT / RETURN done SCR3, CLA / ignore this function for now DCA SCRFLG / ISZ SCRINT / JMP I SCRINT / RETURN BSCRBPTR, SCRBUFF / bottom of ring buff SCRBPTR,SCRBUFF / pointer to screen buff SCRBSY, 0 / screen busy flag SCRAUTO,0 / auto repeat flag SCRCNT, 0 / screen buffer count SCRSTP, 0 / stopped flag SCRFLG, 0 / change setting flag /************************************************************************* / OUTPUT A CHARACTER TO THE SCREEN / / put a char into the output buffer an start the output if ness. / RETURNS: ERROR if the buffer full and has char in / acc for retry / SKIP if OK. /************************************************************************ TTYOU, 0 AND (377) / only 8 bits valid DCA TTYCHR TAD TTYCHR DCA I BSCRBPTR / put into buffer TAD SCRCNT / get the screen count TAD (-BUFMAX) / get the buffer size SNA CLA / test for full JMP TTYFUL / yes full IOF / don't allow ints when updating buff ISZ SCRCNT / bump count TAD SCRBSY / output running ? SNA CLA / ?? JMS STRTOP / force entry if not ISZ BSCRBPTR / bump the pointer TAD I BSCRBPTR / test for wrap SPA / do the buff wrap test DCA BSCRBPTR / reset the buffer CLA CLL ION / let ints through again ISZ TTYOU / return TAD TTYCHR / retrun last character as TLS does JMP TTYOUX / OK. TTYFUL, TAD I BSCRBPTR / get the char back ready for retry TTYOUX, CDF CIF 00 JMP I TTYOU / error return STRTOP, 0 CLA IAC / ac0001 TIE / allow ints SPF / force entry in output CLA CLL JMP I STRTOP / return TTYCHR, 0 /--------------------------------------------- PAGE /++ / V 3 0 S T / / The compose job is a machine copy of the program indicated / in the Slushware Implementation notes . / / All thanks to Kenny A. House /-- V30ST, 0 CLA / just to be shure RDF / save the calling field TAD (CIDF0) / GET THE CONSTANT DCA V30EXIT / AND MAKE AN INSTRUCTION CDF 20 / now change to current field / LBL0, PRQ3 LBL1, 5020 / Read ODT Table from Panel RAM 0004 / From Panel (0)0004 and (0)0005 ODTPTR / Into Local Storage -2 7777 / CLA CLL / Build Prq to read ODT Table TAD ODTPTR DCA LBL3 TAD ODTPTR+1 CLL RTR CLL RAR TAD LBL1 DCA LBL2 / PRQ3 / Read ODT Table LBL2, 0 / (Modified in code) LBL3, 0 / (Modified in code) ODTTAB -70 7777 / TAD I XODT64 / Build PRq to read compose table location SNA JMP LBL8 / No room in panel RAM, Skip cross load DCA LBL7 TAD (4002) / MOVE FROM USER FIELD 2 TAD I XODT65 DCA LBL6 / PRQ3 / Panel request to Crossload Compose Tables LBL6, 0 / (Modified in code) CMPTAB / From User address 'CMPTAB' LBL7, 0 / (Modified in code) CMPTAB-CMPTEN / Move entire table 7777 / Terminator / LBL8, AC0001 / Select Compose Mode on PRQ3 / with PR3 0016 7777 / AC0001 / select uppercase Keyboard from AC11 PRQ3 0011 7777 / CLA CLL PRQ3 / set COM-PORT to 7 bit CSI and DATA 0014 7777 TAD (MSG) / pass pointer to LDSET JMS LDSET / SETUP all G0-G3 and Level 2 Terminal / routine must run after every setup or / Compose will not work. V30EXIT, 0 / WILL GET CIF CDF CALLERFIELD CLA CLL JMP I V30ST / return to caller ODTPTR, ZBLOCK 2 / Pointer to ODT TABLE in Panel RAM / ODTTAB, ZBLOCK 70 XODT56, ODTTAB+56 XODT57, ODTTAB+57 XODT64, ODTTAB+64 XODT65, ODTTAB+65 PAGE /---------------------------------------------------- / LDSET - setup the Terminal haractersets and Level 2 /---------------------------------------------------- / / make shure interrupt is turned of if called from / within Kermit. / / (AC) contains a pointer to MSG / JMS LDSET / LDSET, 0 DCA MSGPTR TLS / send a null to wake him up / required as CAF or a similare PR3 / in non interrupt mode (first time init) / would allowe to hung arround with TSF. LDNXT, CLA CLL / clean up everything TAD I MSGPTR / get the data SNA / all done yet JMP LDEXIT / YES: return to caller TSF / flag set JMP .-1 / wait till set TLS / Print it ISZ MSGPTR / bump up pointer JMP LDNXT / and loop again LDEXIT, CLA CLL / return clean to caller JMP I LDSET / RETUN TO CALLER MSGPTR, 0 / continue with initialisation PAGE /---------------------------------------------------------------------- / Compose tables / / The first table lists possible Dead diacriticals (from NAPLPS / non-spacing diacritical column) and their correspoding imaging / characters. This allows for smaller secondary tables (since , for / example, a single entry suffices for acute and apostrophe).This / table is always 0020 Octal words long. / / Image Dead Name / Code Code / CMPTAB, 200 /200 Vector 140 /201 047 /202 136 /203 176 /204 205 /205 206 /206 207 /207 042 /210 057 /211 212 /212 054 /213 137 /214 215 /215 216 /216 217 /217 / / The next table lists each imaging character (040 - 176) and each / dead Diacritical (200-217), / Pointing each 'first key' to a table of possible 'Second keys'. / Table addresses are relative to the start of compose table area 'CMPTAB' / Invalid 'First Keys' point to a dummy secondary table. Delete is / included for ease of programming , but must point to DUMMY. / / Routine Char Char / Address Code Image / SPACEX-CMPTAB /040 ' ' BANG-CMPTAB /041 '!' DBLQT-CMPTAB /042 '"' DUMMY-CMPTAB /043 '#' DUMMY-CMPTAB /044 '$' DUMMY-CMPTAB /045 DUMMY-CMPTAB /046 ACUTE-CMPTAB /047 LPAREN-CMPTAB /050 RPAREN-CMPTAB /051 STAR-CMPTAB /052 PLUS-CMPTAB /053 COMMA-CMPTAB /054 MINUS-CMPTAB /055 PERIOD-CMPTAB /056 SLASH-CMPTAB /057 ZEROX-CMPTAB /060 ONE-CMPTAB /061 TWO-CMPTAB /062 THREE-CMPTAB /063 DUMMY-CMPTAB /064 DUMMY-CMPTAB /065 DUMMY-CMPTAB /066 DUMMY-CMPTAB /067 DUMMY-CMPTAB /070 DUMMY-CMPTAB /071 DUMMY-CMPTAB /072 DUMMY-CMPTAB /073 LANGLE-CMPTAB /074 EQUAL-CMPTAB /075 RANGLE-CMPTAB /076 QUERY-CMPTAB /077 DUMMY-CMPTAB /100 UPPERA-CMPTAB /101 DUMMY-CMPTAB /102 UPPERC-CMPTAB /103 DUMMY-CMPTAB /104 UPPERE-CMPTAB /105 DUMMY-CMPTAB /106 DUMMY-CMPTAB /107 DUMMY-CMPTAB /110 UPPERI-CMPTAB /111 DUMMY-CMPTAB /112 DUMMY-CMPTAB /113 UPPERL-CMPTAB /114 DUMMY-CMPTAB /115 UPPERN-CMPTAB /116 UPPERO-CMPTAB /117 UPPERP-CMPTAB /120 DUMMY-CMPTAB /121 DUMMY-CMPTAB /122 UPPERS-CMPTAB /123 DUMMY-CMPTAB /124 UPPERU-CMPTAB /125 DUMMY-CMPTAB /126 DUMMY-CMPTAB /127 UPPERX-CMPTAB /130 UPPERY-CMPTAB /131 DUMMY-CMPTAB /132 DUMMY-CMPTAB /133 DUMMY-CMPTAB /134 DUMMY-CMPTAB /135 CIRCUM-CMPTAB /136 ULINE-CMPTAB /137 GRAVE-CMPTAB /140 LOWERA-CMPTAB /141 DUMMY-CMPTAB /142 LOWERC-CMPTAB /143 DUMMY-CMPTAB /144 LOWERE-CMPTAB /145 DUMMY-CMPTAB /146 DUMMY-CMPTAB /147 DUMMY-CMPTAB /150 LOWERI-CMPTAB /151 DUMMY-CMPTAB /152 DUMMY-CMPTAB /153 LOWERL-CMPTAB /154 DUMMY-CMPTAB /155 LOWERN-CMPTAB /156 LOWERO-CMPTAB /157 LOWERP-CMPTAB /160 DUMMY-CMPTAB /161 DUMMY-CMPTAB /162 LOWERS-CMPTAB /163 DUMMY-CMPTAB /164 LOWERU-CMPTAB /165 DUMMY-CMPTAB /166 DUMMY-CMPTAB /167 LOWERX-CMPTAB /170 LOWERY-CMPTAB /171 DUMMY-CMPTAB /172 DUMMY-CMPTAB /173 VRTBAR-CMPTAB /174 DUMMY-CMPTAB /175 TILDE-CMPTAB /176 DUMMY-CMPTAB /177 / DUMMY-CMPTAB /200 GRAVE-CMPTAB /201 ACUTE-CMPTAB /202 CIRCUM-CMPTAB /203 TILDE-CMPTAB /204 DUMMY-CMPTAB /205 DUMMY-CMPTAB /206 DUMMY-CMPTAB /207 DBLQT-CMPTAB /210 DUMMY-CMPTAB /211 STAR-CMPTAB /212 COMMA-CMPTAB /213 DUMMY-CMPTAB /214 DUMMY-CMPTAB /215 DUMMY-CMPTAB /216 DUMMY-CMPTAB /217 / / The secondary tables are each terminated with a 0000. Each entry is / two words: The first is the 2's complement of a character that forms / a valid compose sequence with the first character (that pointed to / this table), the second word is the resulting composed character / DUMMY, 0000 / Dummy table , just a terminator / SPACEX, -042; 042 -047; 047 -136; 136 -140; 140 -176; 176 -052; 260 0000 / / DBLQT, -040; 042 -141; 344 -145; 353 -151; 357 -157; 366 -165; 374 -171; 375 -101; 304 -105; 313 -111; 317 -117; 326 -125; 334 -131; 335 0000 / ACUTE, -040; 047 -101; 301 -105; 311 -111; 315 -117; 323 -125; 332 -141; 341 -145; 351 -151; 355 -157; 363 -165; 372 0000 CIRCUM, -040; 136 -101; 302 -105; 312 -111; 316 -117; 324 -125; 333 -141; 342 -145; 352 -151; 356 -157; 364 -165; 373 -060; 260 -062; 262 -063; 263 -056; 267 -061; 271 -057; 174 0000 / GRAVE, -040; 140 -101; 300 -105; 310 -111; 314 -117; 322 -125; 331 -141; 340 -145; 350 -151; 354 -157; 362 -165; 371 0000 / TILDE, -040; 176 -101; 303 -116; 321 -117; 325 -141; 343 -156; 361 -157; 365 0000 / BANG, -041; 241 -120; 266 -160; 266 -123; 247 -163; 247 0000 / LPAREN, -055; 173 -050; 133 0000 / RPAREN, -055; 175 -051; 135 0000 STAR, -040; 260 -101; 305 -141; 345 0000 / PLUS, -053; 043 -055; 261 0000 / COMMA, -040; 054 -103; 307 -143; 347 0000 / MINUS, -050; 173 -051; 175 -114; 243 -154; 243 -131; 245 -171; 245 -053; 261 0000 / PERIOD, -136; 267 0000 / SLASH, -057; 134 -074; 134 -136; 174 -103; 242 -143; 242 -125; 265 -165; 265 -117; 330 -157; 370 0000 / ZEROX, -123; 247 -163; 247 -130; 250 -170; 250 -103; 251 -143; 251 -136; 260 0000 / ONE, -136; 271 -062; 275 -064; 274 0000 / TWO, -136; 262 0000 THREE, -136; 263 0000 / LANGLE, -074; 253 -057; 134 0000 / EQUAL, -114; 243 -154; 243 -131; 245 -171; 245 0000 / RANGLE, -076; 273 0000 / QUERY, -077; 277 0000 / UPPERA, -101; 100 -141; 100 -137; 252 -140; 300 -047; 301 -136; 302 -176; 303 -042; 304 -052; 305 -105; 306 0000 / LOWERA, -141; 100 -101; 100 -137; 252 -140; 340 -047; 341 -136; 342 -176; 343 -042; 344 -052; 345 -145; 346 0000 / UPPERE, -140; 310 -047; 311 -136; 312 -042; 313 0000 / LOWERE, -140; 350 -047; 351 -136; 352 -042; 353 0000 UPPERI, -140; 314 -047; 315 -136; 316 -042; 317 0000 / LOWERI, -140; 354 -047; 355 -136; 356 -042; 357 0000 / UPPERC, -054; 307 -057; 242 -174; 242 -060; 251 -117; 251 -157; 251 0000 / LOWERC, -054; 347 -057; 242 -174; 242 -060; 251 -157; 251 -117; 251 0000 / UPPERO, -140; 322 -047; 323 -136; 324 -176; 325 -042; 326 -105; 327 -057; 330 -123; 247 -163; 247 -130; 250 -170; 250 -103; 251 -143; 251 -137; 272 0000 / LOWERO, -140; 362 -047; 363 -136; 364 -176; 365 -042; 366 -145; 367 -057; 370 -163; 247 -123; 247 -170; 250 -130; 250 -143; 251 -103; 251 -137; 272 0000 / UPPERU, -140; 331 -047; 332 -136; 333 -042; 334 0000 / LOWERU, -140; 371 -047; 372 -136; 373 -042; 374 0000 / UPPERL, -055; 243 -075; 243 0000 / LOWERL, -055; 243 -075; 243 0000 / UPPERN, -176; 321 0000 / LOWERN, -176; 361 0000 / UPPERP, -041; 266 0000 / LOWERP, -041; 266 0000 / UPPERS, -060; 247 -117; 247 -157; 247 -041; 247 0000 / LOWERS, -060; 247 -157; 247 -117; 247 -041; 247 -163; 337 0000 / UPPERX, -060; 250 -117; 250 -157; 250 0000 LOWERX, -060; 250 -157; 250 -117; 250 0000 / UPPERY, -055; 245 -075; 245 -042; 335 0000 / LOWERY, -055; 245 -075; 245 -042; 375 0000 / ULINE, -101; 252 -141; 252 -117; 272 -157; 272 0000 / VRTBAR, -103; 242 -143; 242 0000 DEGREE, -040; 260 -101; 305 -141; 345 0000 / CMPTEN= . /------------------------------------------------------ / MSG - Esc sequences to setup the Terminal for Connect /------------------------------------------------------ / / MSGLV2 is used from SETUP as only first time init will / set G0 to G3 and do the Locking Shifts to GL and GR / MSG, 033;"(&177;"B&177 / ASCII Set in G0 033;")&177;"0&177 / Line Set in G1 033;"*&177;074 / MCS Set in G2 033;"+&177;076 / TCS Set in G3 033;"}&177 / LS2R 017 / LS0/SI MSGLV2, 033;"[&177;"6&177;"2&177 ";&177;"2&177;""&177;"p&177 / select leve 2 and C1 8bitters 0 / *4000 /************************************************************************* / I/O buffer area /************************************************************************* / screen buffer SCRBUF, ZBLOCK 170 0 SCRBUF / put addres of start here PAGE / keyboard buffer KEYBUF, ZBLOCK 170 0 KEYBUF / addres of start PAGE / comms output buffer OBUF, ZBLOCK 170 0 OBUF / addres of start PAGE / comms input buffer IBUF, ZBLOCK 170 0 IBUF / address of start PAGE /---------------------------------------------------------------