{IE TERMINAL DRIVER - APM bits are for MOUSE not old system} {Original by Richard Marshall August 1984} {Adapted for Mouse, AJS, Nov 1987} %external %string (255) Copyright %alias "TERMINAL_(C)_RMM" %c = "(C) 1984 Richard M. Marshall" %include "Sysdep.Inc" %include "Terminal.Inc" {APM} %include "Inc:Util.Imp" %external %string (80) EOF Marker %alias "IE_EOF_MARKER" %external %byte V Terminal Model %alias "IE_TT_MODEL" = Visual 200 %external %integer V Terminal Characteristics %alias "IE_TT_CHAR" %external %integer V Terminal Width %alias "IE_TT_WIDTH" = 80 %own %integer Terminal Family %constant %integer Visual = 0, Digital = 1, Freedom = 2, Wyse = 3, Esprit Family = 4, Newbury Family = 5 {Newbury and Esprit have been added for Ian Nixon - they are only supported} {in a small subset of the full terminal spec. Information was provided by} {someone else so accuracy is not guaranteed} {APM}%include "Mouse:Dict.Inc" {APM}%record %format IE Stuff fm (%string (127) Memory, {APM} Last, {APM} Journal File, {APM} Profile File, {APM} Keyboard File, {APM} %byte Terminal, {APM} %integer Line, Position) {APM} {APM}%own %record (IE Stuff fm) %name IE Stuff == Nil {APM}%own %integer Stuff At {APM} {APM}{DEFAULT TERMINAL} {APM} {APM}%external %integer %function Default Terminal %alias "IE_DEF_TER" {APM} %integer At {APM} %string (255) Value {APM} {look up symbol TERMINAL} {APM} Value = Translate Command Symbol ("TERMINAL") {APM} %if Value # "" %start {APM} To Upper (Value) {APM} %result = Visual 55 %if Value = "VISUAL55" {APM} %result = Visual 55 %if Value = "V55" {APM} %result = VT220 %if Value = "VT220" {APM} %result = WY75 %if Value = "WY75" {APM} %result = Visual 200 %if Value = "V200" {APM} %finish !{APM} %if IE Stuff == Nil %start !{APM} Stuff At = Ref Name ("IE_Stuff", Sys Dict) !{APM} IE Stuff == Record (Stuff At) !{APM} %finish !{APM} %if IE Stuff == Nil %start !{APM} %result = Visual 200 !{APM} %else !{APM} %result = IE Stuff_Terminal !{APM} %finish {APM} %result = WY75 {The default option these days} {APM}%end {Default Terminal} {APM} {APM} %external %integerfn get symbol %alias "IE_GET_SYMBOL" {APM} %integer Ch, {APM} Stream = In Stream {APM} {APM} Select Input (0) %if Stream # 0 {APM} Read Symbol (Ch) {APM} Select Input (Stream) %if Stream # 0 {APM} %result = Ch {APM} %end {APM} {APM} @16_3724 %Integer Exempt Mask {Yugh} {APM} {APM} %external %routine set up terminal %alias "IE_SET_UP_TERMINAL" {APM} Set Terminal Mode (Single ! No Page ! No Echo) {APM} Prompt ("") {APM} Exempt Mask = 16_FFFFFFFF {APM} %end {APM} {APM} %external %routine %spec Reset Terminal Characteristics %alias "IE_TT_RESET" {APM} {APM} %externalroutine reset terminal %alias "IE_RESET_TERMINAL" {APM} Reset Terminal Characteristics {APM} Exempt Mask = 0 {APM} Set Terminal Mode (0) {APM} %end {APM} {APM} {PUT SYMBOL} {APM} {APM} %external %routine put symbol %alias "IE_PUT_SYMBOL" %c {APM} (%integer ch) {APM} @ 16_3FA2 %routine print symbol (%integer ch) {APM} {APM} print symbol(ch) {APM} %end !VAX!%external %string (255) %function %spec VAX Terminal Model %c !VAX! %alias "TERMINALMODEL" !VAX!{DEFAULT TERMINAL} !VAX! !VAX!%external %integer %function Default Terminal %alias "IE_DEF_TER" !VAX! %string (255) Term !VAX! %integer T !VAX! !VAX! Term = VAX Terminal Model !VAX! %if Term = "VISUAL200" %start !VAX! T = Visual 200 !VAX! %else %if Term = "VISUAL55" !VAX! T = Visual 55 !VAX! %else %if Term = "VT100" !VAX! T = VT100 !VAX! %else %if Term = "VT220" !VAX! T = VT220 !VAX! %else %if Term = "FREEDOM100" !VAX! T = Freedom 100 !VAX! %else %if Term = "WY50" !VAX! T = WY50 !VAX! %else %if Term = "WY75" !VAX! T = WY 75 !VAX! %finish !VAX! %result = T !VAX!%end {Default Terminal} {PUT STRING} %external %routine put string %alias "IE_PUT_STRING" (%string (255) S) %integer I, ch %for I = 1, 1, length (S) %cycle ch = char no (S, I) put symbol (ch) %if ch >= ' ' %repeat %end {of put string} {PUT INTEGER} %external %routine put integer %alias "IE_PUT_INTEGER" (%integer i) put string (I to S (i, 0)) %end {put integer} {PUT HEX} %external %routine Put Hex %alias "IE_PUT_HEX" (%integer What) %integer I, Digit %for I = 28, -4, 0 %cycle Digit = (What&(2_1111<>I %if Digit > 9 %start Digit = Digit + 'A' - 10 %else Digit = Digit + '0' %finish Put Symbol (Digit) %repeat %end {Put Hex} {APM} {FLUSH SYMBOLS} {APM} {APM} %external %routine flush symbols %alias "IE_FLUSH_SYMBOLS" {APM} {NOP} {APM} %end {APM} {APM} %external %integer %function Interrupted %alias "IE_INTERRUPTED" !{APM} %if Probe Symbol ('C' - 64) %start {Control-C} !{APM} Cancel Input !{APM} %result = 1 !{APM} %finish {APM} {Can we do this in the Mouse ?} {APM} %result = 0 {APM} %end %routine Escape Symbol (%integer S) Put Symbol (ESC) Put Symbol (S) %end {Escape Symbol} %routine Escape String (%string (255) S) Put Symbol (ESC) Put String (S) %end {Escape String} %own %integer Top Margin, Bottom Margin {-SET TERMINAL CHARACTERISTICS-} %external %routine Set Terminal Characteristics %alias "IE_TT_STC" %switch Type (0 : VT52) Top Margin = -1 Bottom Margin = -1 -> Type (Terminal Model) Type (Visual 200): Terminal Characteristics = %c Noisy Insert Ability! %c Delete Character Ability! %c Reverse Scroll Ability! %c Dim Text Ability Terminal Family = Visual EOF Marker = "s``````````l" %return Type (Visual 55): Terminal Characteristics = %c Dynamic Insert Ability! %c Reverse Scroll Ability! %c Dim Text Ability Terminal Family = Visual EOF Marker = "s``````````l" %return Type (VT100): Terminal Characteristics = %c Reverse Scroll Ability! %c Bright Text Ability! %c Reverse Text Ability! %c Blink Text Ability! %c Underline Text Ability! %c Double Height Ability! %c Double Width Ability Terminal Family = Digital EOF Marker = "lqqqqqqqqqqk" Escape String ("[?4l") {Jump Scroll} %return Type (VT220): Terminal Characteristics = %c Dynamic Insert Ability! - Delete Character Ability! %c Reverse Scroll Ability! %c Bright Text Ability! %c Reverse Text Ability! %c Blink Text Ability! %c Supress Cursor Ability! %c Double Height Ability! %c Double Width Ability! %c Underline Text Ability !!! Static Insert Ability! %c Terminal Family = Digital EOF Marker = "lqqqqqqqqqqk" !!! Escape String ("[62;1""p") {VT220 Mode} Escape String ("[?4l") {Jump Scroll} Flush Symbols {APM} Exempt Mask = Exempt Mask & (\(1<<('S' - '@') ! 1<<('Q' - '@'))) %return Type (Freedom 100): Terminal Characteristics = %c Static Insert Ability! %c Delete Character Ability! %c Reverse Scroll Ability! %c Reverse Text Ability! %c Blink Text Ability! %c Supress Cursor Ability! %c Underline Text Ability! %c Line 25 Ability Terminal Family = Freedom EOF Marker = "FKKKKKKKKKKG" Escape Symbol ('m') {Set attribute by character} Escape Symbol ('g') {display User Line} %return Type (WY 50): Terminal Characteristics = %c Static Insert Ability! %c Delete Character Ability! %c Reverse Text Ability! %c Reverse Scroll Ability! %c Supress Cursor Ability! %c Line 25 Ability Terminal Family = Wyse EOF Marker = "2::::::::::3" {APM} Exempt Mask = Exempt Mask & (\(1<<('S' - '@') ! 1<<('Q' - '@'))) %return Type (WY 75): Terminal Characteristics = %c Dynamic Insert Ability! - Delete Character Ability! %c Reverse Text Ability! %c Reverse Scroll Ability! %c Line 25 Ability! %c Supress Cursor Ability !!! Static Insert Ability! %c Terminal Family = Digital {almost} {APM} Exempt Mask = Exempt Mask & (\(1<<('S' - '@') ! 1<<('Q' - '@'))) EOF Marker = "lqqqqqqqqqqk" %return {Following types are not fully supported, added for Ian Nixon} Type (Esprit): Terminal Family = Esprit Family Terminal Characteristics = 0 EOF Marker = "Not In Fully" %return Type (Newbury): Terminal Family = Newbury Family Terminal Characteristics = 0 EOF Marker = "Not In Fully" %return Type (VT52): Terminal Characteristics = %c Dim Text Ability Terminal Family = Visual EOF Marker = "Not In Fully" %return %end {Set Terminal Characteristics} %own %integer Line 25 Enabled = 0 {RESET TERMINAL CHARACTERISICS} %external %routine Reset Terminal Characteristics %alias "IE_TT_RESET" %if Terminal Family = Digital %start !!! Escape String ("[?4h") {Smooth scroll} Escape String ("[1;24r") {Reset Scroll window to whole screen} Top Margin = 0 Bottom Margin = 23 Escape String ("[24;1H") {Cursor bottom left} !!! Escape String ("[61""p") %if Terminal Model = VT220 {VT100 mode} %finish Close Line 25 %if Line 25 Enabled # 0 %end {Reset Terminal Characteristics} {CURSOR} %external %routine Cursor %alias "IE_TT_CURSOR" (%integer X, Y) %if Terminal Family = Visual %start Escape Symbol ('Y') Put Symbol (Y + 32) Put Symbol (X + 32) %else %if Terminal Family = Digital Escape Symbol ('[') Put Integer (Y + 1) Put Symbol (';') Put Integer (X + 1) Put Symbol ('H') %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse Escape Symbol ('=') Put Symbol (Y + 32) Put Symbol (X + 32) %else %if Terminal Family = Esprit Family Escape Symbol (16_11) Put Symbol (X) Put Symbol (Y) %else %if Terminal Family = Newbury Family Put Symbol (16_16) Put Symbol (X + 32) Put Symbol (Y + 32) %finish %end {Cursor} %external %routine Forward Scroll %alias "IE_TT_FS" (%integer Top, Bottom) %if Terminal Family = Visual %start Cursor (0, Top) Escape Symbol ('M') Cursor (0, Bottom) Escape Symbol ('L') %else %if Terminal Family = Digital %unless Top = Top Margin %and %c Bottom = Bottom Margin %start Escape Symbol ('[') Put Integer (Top + 1) Put Symbol (';') Put Integer (Bottom + 1) Put Symbol ('r') Top Margin = Top Bottom Margin = Bottom %finish Cursor (0, Bottom) Escape Symbol ('D') %else {%if Terminal Family = Freedom %or %c} {Terminal Family = Wyse} Cursor (0, Top) Escape Symbol ('R') Cursor (0, Bottom) Escape Symbol ('E') %finish %end {Forward Scroll} %external %routine Reverse Scroll %alias "IE_TT_RS" (%integer Top, Bottom) %if Terminal Family = Visual %start Cursor (0, Bottom) Escape Symbol ('M') Cursor (0, Top) Escape Symbol ('L') %else %if Terminal Family = Digital %unless Top = Top Margin %and %c Bottom = Bottom Margin %start Escape Symbol ('[') Put Integer (Top + 1) Put Symbol (';') Put Integer (Bottom + 1) Put Symbol ('r') Top Margin = Top Bottom Margin = Bottom %finish Cursor (0, Top) Escape Symbol ('M') %else {%if Terminal Family = Freedom %or %c} {Terminal Family = Wyse} Cursor (0, Bottom) Escape Symbol ('R') Cursor (0, Top) Escape Symbol ('E') %finish %end {Reverse Scroll} %external %routine Clear Line %alias "IE_TT_CL" %if Terminal Family = Visual %start %if Terminal Model = VT52 %start Put Symbol (CR) Escape Symbol ('K') %else Escape Symbol ('t') %finish %else %if Terminal Family = Digital Escape String ("[2K") Put Symbol (CR) {Emulate V200} %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse Put Symbol (CR) Escape Symbol ('t') %else %if Terminal Family = Esprit Family Put Symbol (CR) Escape Symbol (16_0F) %else %if Terminal Family = Newbury Family Put Symbol (CR) Put Symbol (16_19) %finish %end {Clear Line} %external %routine Clear Screen %alias "IE_TT_CS" %if Terminal Family = Visual %start %if Terminal Model = VT52 %start Escape Symbol ('H') Escape Symbol ('J') %else Escape Symbol ('v') %finish %else %if Terminal Family = Digital Escape String ("[2J") Cursor (0, 0) %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse Escape Symbol ('+') %else %if Terminal Family = Esprit Family Escape Symbol (16_1C) %else %if Terminal Family = Newbury Family Put Symbol (16_1D) Put Symbol (16_1F) %finish %end {Clear Screen} %external %routine Erase Line %alias "IE_TT_EL" %if Terminal Family = Visual %start Escape Symbol ('x') %else %if Terminal Family = Digital Escape String ("[K") %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse Escape Symbol ('t') %else %if Terminal Family = Esprit Family Escape Symbol (16_0F) %else %if Terminal Family = Newbury Family Put Symbol (16_19) %finish %end {Erase Line} %external %routine Left %alias "IE_TT_C_L" %if Terminal Family = Visual %start Escape Symbol ('D') %else %if Terminal Family = Digital Escape String ("[D") %else {Good for Freedom, Wyse, Esprit, Newsbury - leave as %else case as} {it will usually work on anything} Put Symbol (BS) %finish %end {Left} %external %routine Right %alias "IE_TT_C_R" %if Terminal Family = Visual %start Escape Symbol ('C') %else %if Terminal Family = Digital Escape String ("[C") %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse Put Symbol (FF) %else %if Terminal Family = Esprit Family Put Symbol (16_10) %else %if Terminal Family = Newbury Family Put Symbol (16_18) %finish %end {Right} %external %routine Up %alias "IE_TT_C_U" %if Terminal Family = Visual %start Escape Symbol ('A') %else %if Terminal Family = Digital Escape String ("[A") %else %if Terminal Family = Esprit Family Escape Symbol (FF) %else {%if Terminal Family = Freedom %or %c} {Terminal Family = Wyse %or %c} {Terminal Family = Newbury Family} Put Symbol (VT) %finish %end {Up} %external %routine Down %alias "IE_TT_C_D" %if Terminal Family = Visual %start Escape Symbol ('B') %else %if Terminal Family = Digital Escape String ("[B") %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse Put Symbol (SYN) %else %if Terminal Family = Esprit Family Escape Symbol (VT) %else %if Terminal Family = Newbury Family Put Symbol (LF) %finish %end {Down} {-KEY PACKAGE-} {-KEY NAME-} %external %string (255) %function Key Name %alias "IE_KEY_NAME" (%integer K) %constant %string (20) %array Function Key Names (0 : 128) = %c "DEL", "Unknown Key", {0} "Up", {1} "Down", {2} "Right", {3} "Left", {4} "Unused Key", {5} "Unused Key", {6} "Unused Key", {7} "Unused Key", {8} "Unused Key", {9} "Keypad 0", {10} "Keypad 1", {11} "Keypad 2", {12} "Keypad 3", {13} "Keypad 4", {14} "Keypad 5", {15} "Keypad 6", {16} "Keypad 7", {17} "Keypad 8", {18} "Keypad 9", {1} "Keypad ,", {20} "Keypad .", {21} "Keypad -", {22} "Keypad Enter", {23} "Unused Key", {24} "Unused Key", {25} "Unused Key", {26} "Unused Key", {27} "Unused Key", {28} "Unused Key", {29} "Function Keypad 0", {30} "Function Keypad 1", {31} "Function Keypad 2", {32} "Function Keypad 3", {33} "Function Keypad 4", {34} "Function Keypad 5", {35} "Function Keypad 6", {36} "Function Keypad 7", {37} "Function Keypad 8", {38} "Function Keypad 9", {3} "Function Keypad ,", {40} "Function Keypad .", {4} "Function Keypad -", {42} "Function Enter", {43} "Unused Key", {44} "Unused Key", {45} "Unused Key", {46} "Unused Key", {47} "Unused Key", {48} "Unused Key", {49} "F0", {50} "F1", {51} "F2", {52} "F3", {53} "F4", {54} "F5", {55} "F6", {56} "F7", {57} "F8", {58} "F9", {59} "F10", {60} "F11", {61} "F12", {62} "F13", {6} "F14", {64} "F15", {65} "F16", {66} "F17", {67} "F18", {68} "F19", {69} "F20", {70} "F21", {71} "F22", {72} "F23", {73} "F24", {74} "F25", {75} "F26", {76} "F27", {77} "F28", {78} "F29", {79} "F30", {80} "F31", {81} "F32", {82} "Unused Key", {83} "Unused Key", {84} "Unused Key", {85} "Unused Key", {86} "Unused Key", {87} "Unused Key", {88} "Unused Key", {89} "Unused Key", {90} "Unused Key", {91} "Unused Key", {92} "Unused Key", {93} "Unused Key", {94} "Unused Key", {95} "Unused Key", {96} "Unused Key", {97} "Unused Key", {98} "Unused Key", {99} "Panic!", {100} "PF1", {101} "PF2", {102} "PF3", {103} "PF4", {104} "Home", {105} "BTAB", {106} "CP", {107} "CL", {108} "Find", {109} "Insert Here", {110} "Remove", {111} "Select", {112} "Prev Screen", {113} "Next Screen", {114} "Del Line", {115} "Ins Line", {116} "Del Char", {117} "Ins Char", {118} "CLR", {119} "Print", {120} "Shift Home", {121} "Function PF2", {122} "Function PF3", {123} "Function PF4", {124} "Send", {125} "Ins", {126} "Repl" {127} %if K < ' ' %start %result = "^" . To String (K + '@') %else %if K > '~' %result = Function Key Names (K - 127) %else %result = To String (K) %finish %end {Key Name} {- GET KEY -} %external %byte %function Get Key %alias "IE_KEY_GET" %integer Ch, K, N, Shift = 0, Question = 0 %label Again Again: Ch = Get Symbol %if Ch = ESC %start {Parse an Escape Sequence} K = Unknown Key Ch = Get Symbol %if Ch = '?' %and %c Terminal Family = Visual %start Ch = Get Symbol %if Ch = 'm' %start K = Keypad Minus %else %if Ch = 'M' K = Keypad Enter %else %if Ch = 'l' K = Keypad Comma %else %if Ch = 'n' K = Keypad Dot %else %if 'p' <= Ch <= 'y' K = Keypad 0 + (Ch - 'p') %finish %else %if Ch = 'O' %and %c Terminal Family = Digital Ch = Get Symbol %if 'p' <= Ch <= 'y' %start K = Keypad 0 + Ch - 'p' %else %if 'A' <= Ch <= 'D' K = Up Key + (Ch - 'A') %else %if Ch = 'm' K = Keypad Minus %else %if Ch = 'l' K = Keypad Comma %else %if Ch = 'n' K = Keypad Dot %else %if Ch = 'M' K = Keypad Enter %else %if Ch = 'P' {GOLD Key} %if Shift = 0 %start Shift = 20 -> Again %finish Shift = 0 K = PF1 Key %else %if 'Q' <= Ch <= 'S' K = PF2 Key + Ch - 'Q' %finish K = K + Shift %else %if Ch = '[' %and %c Terminal Family = Digital Ch = Get Symbol %if 'A' <= Ch <= 'D' %start %result = Up Key + Ch - 'A' %else %if Ch = 'H' %result = Home Key %else %if Ch = '@' %result = Key F4 %else %if Ch = 'L' %result = Key F20 %else %if Ch = 'M' %result = Key F5 %else %if Ch = 'K' %result = Key F21 %else %if Ch = '?' Question = 1 Ch = Get Symbol %finish N = 0 %cycle N = N*10 + Ch - '0' Ch = Get Symbol %repeat %until Ch = '~' %or %c Ch = 'i' %if Ch = 'i' %start %if 4 <= N <= 5 %start %if Question = 1 %start %result = Key F1 %else %result = Key F17 %finish %else %if N = 3 %result = Key F2 %else %if N = 1 %result = Key F18 %else %if N = 2 %result = Key F3 %else %if N = 0 %result = Key F19 %else %result = Unknown Key %finish %finish %if 1 <= N <= 6 %start K = Find Key + N - 1 %else %if 17 <= N <= 21 K = Key F6 + N - 17 %else %if 23 <= N <= 26 K = Key F11 + N - 23 %else %if 28 <= N <= 29 K = Help Key + N - 28 %else %if 31 <= N <= 34 K = Key F17 + N - 31 %finish %else %if Ch = ESC %start K = Panic Key %else %if Ch = 'H' K = Home Key %else %if Terminal Family = Visual %if Ch = 'z' %start K = BTAB Key %else %if 'P' <= Ch <= 'R' K = Key F0 + (Ch - 'P') K = K + 1 %if Terminal Model = Visual 55 %else %if ' ' <= Ch <= '*' K = Key F3 + (Ch - ' ') K = K + 1 %if Terminal Model = Visual 55 %else %if 'A' <= Ch <= 'D' K = Up Key + (Ch - 'A') %else %if Terminal Model = Visual 200 %if Ch = '^' %or %c Ch = '-' %start K = Function Keypad Comma %else %if Ch = ']' K = Function Keypad Dot %else %if Ch = 'K' K = Function Keypad 1 %else %if Ch = 'f' K = Function Keypad 2 %else %if Ch = 'J' K = Function Keypad 3 %else %if Ch = 'M' K = Function Keypad 4 %else %if Ch = 'O' K = Function Keypad 5 %else %if Ch = '2' K = Function Keypad 6 %else %if Ch = 'L' K = Function Keypad 7 %else %if Ch = 'i' %or %c Ch = 'j' K = Function Keypad 8 %else %if Ch = '1' K = Function Keypad 9 %else %if Ch = 't' K = CL Key %else %if Ch = 'v' K = CP Key %finish %else %if Terminal Model = Visual 55 %if Ch = 'L' %start K = Function Keypad 1 %else %if Ch = 'v' K = Function Keypad 2 %else %if Ch = 'M' K = Function Keypad 3 %else %if Ch = 'f' K = Function Keypad 4 %else %if Ch = 'K' K = Function Keypad 5 %else %if Ch = 'J' K = Function Keypad 6 %else %if Ch = 'i' %or %c Ch = 'j' K = Function Keypad 7 %else %if Ch = 'O' K = Function Keypad 9 %finish %finish %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse %if Ch = 'T' %start {CLR Line - Gold one} Shift = 1 -> Again %else %if Ch = 'Y' {CLR SCRN - Gold Two} Shift = 2 -> Again %else %if Ch = 'I' K = BTAB Key %else %if Ch = 'R' K = Del Line Key %else %if Ch = 'E' K = Ins Line Key %else %if Ch = 'W' K = Del Char Key %else %if Ch = 'Q' K = Ins Char Key %else %if Ch = 'P' K = Print Key %else %if Terminal Family = Wyse %if Ch = '{' %start K = Shift Home Key %else %if Ch = 'J' K = Prev Screen Key %else %if Ch = 'K' K = Next Screen Key %else %if Ch = 'r' K = Repl Key %else %if Ch = 'q' K = Ins Key %else %if Ch = '7' K = Send Key %finish %finish %finish %finish %else {Ordinary keys in here!} %if Terminal Family = Digital %and - Shift # 0 %start %if '0' <= Ch <= '9' %and - Terminal Model # WY 75 %start K = Key F0 + Ch - '0' %else %if Ch = TAB K = BTAB Key %else K = Ch %finish %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse {All sorts of nasty things here!} %if Ch = SOH %start Ch = Get Symbol %if Terminal Family = Freedom %start %if '@' <= Ch <= 'I' %start K = Key F1 + Ch - '@' %else %if Ch = ' ' K = Key F11 %else K = Key F12 + Ch - 'a' %finish %else {%if Terminal Family = Wyse %if '@' <= Ch <= 'O' %start K = Key F1 + Ch - '@' %else %if '`' <= Ch <= 'o' K = Key F17 + Ch - '`' %finish %finish Ch = Get Symbol {skip the CR} %else %if Ch = VT K = Up Key %else %if Ch = FF K = Right Key %else %if Terminal Family = Freedom %and %c Ch = SYN K = Down Key %else %if Terminal Family = Wyse %and %c Ch = LF K = Down Key %else %if Ch = BS K = Left Key %else %if Ch = {RS} 16_1E K = Home Key %else %if Ch = SUB K = CLR Key %else %if Shift # 0 %if '0' <= Ch <= '9' %start K = Keypad 0 + Ch - '0' %else %if Ch = CR K = Keypad Enter %else %if Ch = '.' K = Keypad Dot %else %if Ch = '-' K = Keypad Minus %else %if Ch = ',' K = Keypad Comma %else %result = Ch %finish K = K + 20 %if Shift = 2 %else K = Ch %finish %else K = Ch %finish %finish %result = K %end {Get Key} %external %routine Keypad On %alias "IE_TT_KP_1" %if Terminal Family = Visual %or %c Terminal Family = Digital %start Escape Symbol ('=') %finish %end {Keypad On} %external %routine Keypad Off %alias "IE_TT_KP_0" %if Terminal Family = Visual %or %c Terminal Family = Digital %start Escape Symbol ('>') Flush Symbols %finish %end {Keypad Off} %external %routine Cursor On %alias "IE_TT_CUR_1" %if Terminal Model = VT220 %or %c Terminal Model = WY 75 %start Escape String ("[?25h") %else %if Terminal Family = Freedom Escape String (".0") %else %if Terminal Family = Wyse Escape String ("`1") %finish %end {Cursor On} %external %routine Cursor Off %alias "IE_TT_CUR_0" %if Terminal Model = VT220 %or %c Terminal Model = WY 75 %start Escape String ("[?25l") %else %if Terminal Family = Freedom Escape String (".1") %else %if Terminal Family = Wyse Escape String ("`0") %finish %end {Cursor Off} %external %routine Dim On %alias "IE_TT_DIM" %if Terminal Family = Visual %start Escape Symbol ('4') %finish %end {Dim On} %external %routine Reverse On %alias "IE_TT_REVERSE" %if Terminal Family = Digital %start Escape String ("[0;7m") %else %if Terminal Family = Freedom Escape String ("G4") %else {%if Terminal Family = Wyse} Escape Symbol (')') %finish %end {Reverse On} %external %routine Feature %alias "IE_TT_FANCY" %if Terminal Family = Visual %start Dim On %else %if Terminal Family = Digital %or %c Terminal Family = Freedom %or %c Terminal Family = Wyse Reverse On %finish %end {Feature} %external %routine Underline On %alias "IE_TT_UNDERLINE" {Digital Only} %if Terminal Family = Digital %start Escape String ("[0;4m") %else {%if Terminal Family = Freedom} Escape String ("G8") %finish %end {Underline On} %external %routine Blink On %alias "IE_TT_BLINK" {Digital Only} %if Terminal Family = Digital %start Escape String ("[0;5m") %else {%if Terminal Family = Freedom Escape String ("G2") %finish %end {Blink On} %external %routine Normal %alias "IE_TT_NORMAL" %if Terminal Family = Visual %start Escape Symbol ('3') %else %if Terminal Family = Digital Escape String ("[m") %else %if Terminal Family = Freedom Escape String ("G0") %else {%if Terminal Family = Wyse} Escape Symbol ('(') %finish %end {Normal} %external %routine Delete Characters %alias "IE_TT_DC" (%integer N) %integer I %if Terminal Family = Visual %start Escape Symbol ('O') %for I = 1, 1, N %else %if Terminal Family = Digital Escape Symbol ('[') Put Integer (N) Put Symbol ('P') %else {%if Terminal Family = Freedom %or %c} {Terminal Family = Wyse} Escape Symbol ('W') %for I = 1, 1, N %finish %end {Delete Characters} %own %integer Insert State = 0 %external %routine Insert On %alias "IE_TT_IC_1" %if Terminal Family = Visual %start Escape Symbol ('i') %if Insert State = 0 Insert State = 1 %else {%if Terminal Family = Digital} Escape String ("[4h") %finish %end {Insert On} %external %routine Insert Off %alias "IE_TT_IC_0" %if Terminal Family = Visual %start Escape Symbol ('j') %if Insert State = 1 Insert State = 0 %else {%if Terminal Family = Digital} Escape String ("[4l") %finish %end {Insert Off} %external %routine Static Insert %alias "IE_TT_IC_S" (%integer N) %integer I %if Terminal Model = VT220 %or %c Terminal Model = WY 75 %start {VT200} Escape Symbol ('[') Put Integer (N) Put Symbol ('@') %else %if Terminal Family = Freedom %or %c Terminal Family = Wyse Escape Symbol ('Q') %for I = 1, 1, N %else %if Terminal Family = Visual {simulate the effect} Insert On Put Symbol (' ') %for I = 1, 1, N Insert Off Left %for I = 1, 1, N %finish %end {Static Insert} %external %routine Graph On %alias "IE_GR_1" %if Terminal Family = Visual %start Escape Symbol ('F') %else %if Terminal Family = Digital Escape String ("(0") %else %if Terminal Family = Freedom Escape Symbol ('$') %else {%if Terminal Family = Wyse} Escape Symbol ('H') Put Symbol (STX) %finish %end {Graph On} %external %routine Graph Off %alias "IE_GR_0" %if Terminal Family = Visual %start Escape Symbol ('G') %else %if Terminal Family = Digital Escape String ("(B") %else %if Terminal Family = Freedom Escape Symbol ('%') %else {%if Terminal Family = Wyse} Escape Symbol ('H') Put Symbol (ETX) %finish %end {Graph Off} %external %routine Yen Sign %alias "IE_GR_YEN" %if Terminal Family = Visual %start Put Symbol ('p') %else %if Terminal Family = Digital Put Symbol ('a') %else %if Terminal Family = Freedom Put Symbol ('A') %else {%if Terminal Family = Wyse} Put Symbol ('?') %finish %end {Yen Sign} %external %routine Degree Sign %alias "IE_GR_DEG" %if Terminal Family = Visual %or %c Terminal Family = Digital %start Put Symbol ('f') %else %if Terminal Family = Freedom Put Symbol ('D') %else {%if Terminal Family = Wyse} Put Symbol ('>') %finish %end {Degree Sign} %external %routine Left T %alias "IE_GR_L_T" %if Terminal Family = Visual %start Put Symbol ('o') %else %if Terminal Family = Digital Put Symbol ('u') %else %if Terminal Family = Freedom Put Symbol ('M') %else {%if Terminal Family = Wyse} Put Symbol ('4') %finish %end {Left T} %external %routine TAB Representation %alias "IE_GR_TAB" %if Terminal Family = Visual %start Put Symbol ('i') %else %if Terminal Family = Digital Put Symbol ('b') %else %if Terminal Family = Freedom Put Symbol ('N') %else {%if Terminal Family = Wyse} Put Symbol ('<') %finish %end {TAB Representation} %external %routine Top Left %alias "IE_GR_TL" %if Terminal Family = Visual %start Put Symbol ('s') %else %if Terminal Family = Digital Put Symbol ('l') %else %if Terminal Family = Freedom Put Symbol ('F') %else {%if Terminal Family = Wyse} Put Symbol ('2') %finish %end {Top Left} %external %routine Horizontal %alias "IE_GR_HOR" %if Terminal Family = Visual %start Put Symbol ('`') %else %if Terminal Family = Digital Put Symbol ('q') %else %if Terminal Family = Freedom Put Symbol ('K') %else {%if Terminal Family = Wyse} Put Symbol (':') %finish %end {Horizontal} %external %routine Vertical %alias "IE_GR_VER" %if Terminal Family = Visual %start Put Symbol ('a') %else %if Terminal Family = Digital Put Symbol ('x') %else {%if Terminal Family = Freedom} Put Symbol ('J') !! %else {%if Terminal Family = Wyse} !! Put Symbol (':') %finish %end {Horizontal} %external %routine Top Right %alias "IE_GR_TR" %if Terminal Family = Visual %start Put Symbol ('l') %else %if Terminal Family = Digital Put Symbol ('k') %else %if Terminal Family = Freedom Put Symbol ('G') %else {%if Terminal Family = Wyse} Put Symbol ('3') %finish %end {Top Right} %external %routine Bottom Right %alias "IE_GR_BR" %if Terminal Family = Visual %start Put Symbol ('m') %else %if Terminal Family = Digital Put Symbol ('j') %else {%if Terminal Family = Freedom} Put Symbol ('H') !! %else {%if Terminal Family = Wyse} !! Put Symbol ('3') %finish %end {Bottom Right} %external %routine Bottom Left %alias "IE_GR_BL" %if Terminal Family = Visual %start Put Symbol ('e') %else %if Terminal Family = Digital Put Symbol ('m') %else {%if Terminal Family = Freedom} Put Symbol ('E') !! %else {%if Terminal Family = Wyse} !! Put Symbol ('3') %finish %end {Bottom Left} %external %routine Right T %alias "IE_GR_R_T" %if Terminal Family = Visual %start Put Symbol ('n') %else %if Terminal Family = Digital Put Symbol ('t') %else {%if Terminal Family = Freedom} Put Symbol ('M') !! %else {%if Terminal Family = Wyse} !! Put Symbol ('3') %finish %end {Right T} %external %routine Top T %alias "IE_GR_T_T" %if Terminal Family = Visual %start Put Symbol ('d') %else %if Terminal Family = Digital Put Symbol ('w') %else %if Terminal Family = Freedom Put Symbol ('N') %else {%if Terminal Family = Wyse} Put Symbol ('3') %finish %end {Top T} %external %routine Bottom T %alias "IE_GR_B_T" %if Terminal Family = Visual %start Put Symbol ('c') %else %if Terminal Family = Digital Put Symbol ('v') %else {%if Terminal Family = Freedom} Put Symbol ('I') !! %else {%if Terminal Family = Wyse} !! Put Symbol ('3') %finish %end {Bottom T} %external %routine Cross %alias "IE_GR_X" %if Terminal Family = Visual %start Put Symbol ('b') %else %if Terminal Family = Digital Put Symbol ('n') %else {%if Terminal Family = Freedom} Put Symbol ('G') !! %else {%if Terminal Family = Wyse} !! Put Symbol ('3') %finish %end {Cross} %external %routine Upper Half Double Height %alias "IE_TT_DHU" %if Terminal Family = Digital %start Escape String ("#3") %finish %end {Upper Half Double Height} %external %routine Lower Half Double Height %alias "IE_TT_DHL" %if Terminal Family = Digital %start Escape String ("#4") %finish %end {Lower Half Double Height} %external %routine Normal Size %alias "IE_TT_NS" %if Terminal Family = Digital %start Escape String ("#5") %finish %end {Normal Size} %external %routine Put Line 25 %alias "IE_PUT_25" (%string (80) Text) %if Terminal Family = Freedom %start Escape Symbol (SO) %if Line 25 Enabled # 0 {disable display} Escape Symbol ('f') {down load text start} Put Symbol (DEL); Put Symbol (DEL) {splodges} Length (Text) = 78 %if Length (Text) > 78 {Trim the text} Put String (Text) Put Symbol (CR) %if Length (Text) < 78 {terminate text} Escape Symbol (SI) Line 25 Enabled = 1 %else %if Terminal Family = Wyse %if Terminal Width = 132 %start {Wider top line in 132 mode!} Length (Text) = 98 %if Length (Text) > 98 %else Length (Text) = 44 %if Length (Text) > 44 %finish Escape Symbol ('F') Put Symbol (ESC); Put Symbol (ESC) {blotches} Put String (Text) Put Symbol (CR) Line 25 Enabled = 1 %else %if Terminal Model = WY 75 %if Terminal Width = 132 %start {Wider top line in 132 mode!} Length (Text) = 128 %if Length (Text) > 128 %else Length (Text) = 76 %if Length (Text) > 76 %finish Escape String ("[>,`") Put Symbol (STX); Put Symbol (STX) Put String (Text) Put Symbol ('`') Line 25 Enabled = 1 %finish %end {Put Line 25} %external %routine Close Line 25 %alias "IE_25_0" %if Line 25 Enabled # 0 %start %if Terminal Family = Freedom %start Escape Symbol (SO) Line 25 Enabled = 0 %else %if Terminal Family = Wyse Escape Symbol ('F') Put Symbol (CR) %else %if Terminal Model = WY 75 Escape STring ("[>,//") %finish %finish %end {Close Line 25} %end %of %file