Return-Path: Received: from SU-AI.ARPA by Xerox.ARPA ; 18 MAR 85 17:13:58 PST Date: 18 Mar 85 17:13 PST From: Martin Frost Subject: SAIL terminal emulation To: Spreitzer.pa Len forwarded to me your inquiry about emulating a SAIL terminal. First, the DM 2500 is a reasonable terminal to emulate, although you actually might want to use SAIL's DMWAITS service (for DM3025s modified specially for use with SAIL's WAITS operating system), which you could easily emulate. The list of Datamedia display features that we use is given in the UUO Manual, available online at SAIL via READ UUO. I've included the relevant section later in this message. Secondly, to get all 9 bits of input from the user's keyboard through to WAITS, there are a couple of possibilities, namely: (1) EDIT-key mode (so-called because some keyboards have a key labelled EDIT that controls the 8th bit, that is, the parity bit) and (2) no-EDIT-key mode. EDIT-key mode is the simpler scheme but it requires the link to WAITS to pass all 8 bits of data per byte. Telnet should be capable of doing that (but you'll have to experiment to see if it really is). In this scheme, the 8th bit (formerly the parity bit) becomes the WAITS CONTROL bit, and to turn on the META bit in a character (the 9th bit), you simply prefix that character with an octal 200 character (known as the "add-META" character). Thus, to get CONTROL-META-A, you would send two bytes, namely, a 200 and then a 301 (both octal). If you use the DMWAITS display type on SAIL, then certain special character combinations give you the various special terminal facilities, such as: hold typeout, unhold typeout, clear line editor, etc. A few special characters, namely, or-sign, beta, and equivalence sign, are used for some of the special functions, and to get the text meanings of these characters you have to prefix them with the quoting character, NULL, which also doubles as the WAITS ESCAPE character (not to be confused with the ASCII escape character). I can give you details on these things as necessary. The alternative input form for getting 9 bits in is to use only 7-bit bytes (no-EDIT-key mode), thus ensuring that you can get through the computers in the way (maybe). However, in this scheme, a lot of special mapping needs to be done (either by your program, or by the user, but since you have a couple of "bucky-bit" keys (shift type keys) for the 8th and 9th bits, it's certainly desireable to make them as compatible to SAIL's CONTROL and META keys as possible). In this mode, most of the ASCII control characters are used specially, including four characters that mean add "zero, one, the other, or both" of CONTROL and META to the next character. So you would do a bunch of translating, although it's not terribly messy. Excerpt from the UUO Manual, section 13.4: Datamedia Display Output OCTAL CHAR ^CHAR EFFECT ON A DATAMEDIA 000 NULL ^@ no-op. 001  ^A no-op. 002  ^B home. Moves cursor to upper-left corner. 003  ^C no-op. 004  ^D no-op. 005  ^E no-op. 006  ^F no-op. 007  ^G bell. Beeps the DM's audio tone. 010  ^H back cursor. Moves left one column unless at left margin. 011 TAB ^I tab. Moves to next tab stop. Normally need not be quoted. 012 LF ^J linefeed. Moves down a line, or to top line from bottom. 013 VT ^K tab clear. Clears any tab stop at current column. 014 FF ^L set cursor position from next two bytes. See ** below. 015 CR ^M carriage return. Moves to left margin and down a line. 016  ^N blink on. Subsequent characters will be blinking. See * below. 017  ^O protected field on. Subsequent characters will be bold. See *. 020  ^P insert/delete on. Enters insert/delete mode. See ***. 021  ^Q transmit page to computer. This character never sent to DM. 022  ^R transmit page to printer. This character never sent to DM. 023  ^S transmit line to computer. This character never sent to DM. 024  ^T no-op. 025  ^U no-op. 026  ^V no-op. 027  ^W erase from cursor to end of line. 030  ^X cancel. Turns off blink, protected field, ID, & roll modes. 031  ^Y set tab. Sets a tab stop at current column. 032 ~ ^Z up cursor. Move up a line unless on top line. 033  ^[ no-op. 034  ^\ forward cursor. Moves right a column, to next line from end. 035  ^] roll on. Turns on roll mode. See **** below. 036  ^^ master clear. Clears screen, tabs, and all modes but roll. 037  ^_ erase screen. Clears unprotected text, all modes but roll. * Stanford DM terminals have a hardward modification that interchanges the effect of the blink-on and protected-field-on characters and that disables the protectedness of characters sent with protected-field mode on. Thus, with this mod, BLINK-ON will cause subsequent characters to appear as bold, and PROTECTED-FIELD-ON will cause subsequent characters to appear as blinking and not be protected. Furthermore, blinking protected-field characters that are moved by ID operations will stop blinking. ** The FF character is used to move the cursor to an arbitrary X-Y position on the screen. The position is determined by the next two bytes after the FF. The first of these two bytes sets the X-position and the second the Y-position. The actual X- or Y-position set by a byte is determined from the octal value of the byte XORed with 140 and counting lines from 0 to =23 and columns from 0 to =79. X- and Y-position characters that are out of range of the screen will select a position of 0. If the X- or Y-position character is one of the characters: home (^B), FF (^L), transmit page (^Q or ^R), cancel (^X), master clear (^^), or erase screen (^_), then the cursor positioning command is aborted and the aborting command is executed instead. *** In Insert/Delete (ID) mode, the following four control characters have these special effects rather than those listed above. Other control characters have undefined effects in ID mode. OCTAL CHAR ^CHAR EFFECT IN ID MODE (CURSOR STAYS PUT) 010  ^H delete character. Characters to the right shift left one space. 012 LF ^J add row. A blank line is inserted, lines below move down. 032 ~ ^Z delete row. Lines below move up one line. 034  ^\ add character. Space is inserted, chars to the right move right. **** In roll mode, a CR or LF sent while on the last line of the display will cause the insertion of a blank line at the bottom of the screen to force the whole screen text to scroll up one line. The cursor is left at the bottom instead of moving to the top line as it would if roll mode were off. Note that roll mode can only be cleared by the cancel character, ^X.