xterm-29.patch.txt

XFree86 3.1.2Gb - xterm patch #29 - T.Dickey
 
This patch does the following:
 
        + corrects the restoration of color for bold/underline color mode
 
        + adds a resource 'decTerminalID' to control the reporting level of
          xterm (e.g., VT100, VT220).
 
        + uses the new resource to implement/correct the DA1, DA2 and
          DECRPTUI reports.
 
        + change valid-response code in DECRQSS from 0 to 1 (the manual says 0,
          but the VT420 terminal I've been testing on says 1).
 
All of these changes are based on vttest 2.6
 
(Most of the volume in the patch is to add 2 more state tables for parsing
the 2nd/3rd device-attribute controls).
 
--------------------------------------------------------------------------------
 doc/specs/xterm/ctlseqs.ms |    4 
 programs/xterm/VTPrsTbl.c  |  656 ++++++++++++++++++++++++++++++++++++++++++++!
 programs/xterm/VTparse.def |    4 
 programs/xterm/VTparse.h   |    6 
 programs/xterm/charproc.c  |  117 +++++!!!
 programs/xterm/misc.c      |    2 
 programs/xterm/ptyx.h      |    4 
 programs/xterm/xterm.man   |   14 
 8 files changed, 754 insertions, 1 deletion, 52 modifications
--------------------------------------------------------------------------------
Index: ctlseqs.ms
*** /build/x11r6/XFree86-3.1.2Gb/xc/doc/specs/xterm/ctlseqs.ms  Tue Aug 13 14:51:20 1996
--- /build/x11r6/XFree86-current/xc/doc/specs/xterm/ctlseqs.ms  Sun Sep 15 22:00:25 1996
***************
*** 462,472 ****
    \*m         \(-> SGR
  .br
  \fIxterm\fP responds with
! \*(Dc\*0\*$\*r\*(Pt\*s\*(ST
  for valid requests, replacing the \*(Pt with the corresponding \*(Cs
  string,
  or
! \*(Dc\*1\*$\*r\*(Pt\*s\*(ST
  for invalid requests.
  .
  .sp
--- 462,472 ----
    \*m         \(-> SGR
  .br
  \fIxterm\fP responds with
! \*(Dc\*1\*$\*r\*(Pt\*s\*(ST
  for valid requests, replacing the \*(Pt with the corresponding \*(Cs
  string,
  or
! \*(Dc\*0\*$\*r\*(Pt\*s\*(ST
  for invalid requests.
  .
  .sp
Index: VTPrsTbl.c
*** /build/x11r6/XFree86-3.1.2Gb/xc/programs/xterm/VTPrsTbl.c   Tue Aug 13 14:51:20 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/VTPrsTbl.c   Sun Sep 15 21:51:25 1996
***************
*** 357,363 ****
  CASE_PRINT,
  };
  
! Const PARSE_T csi_table[] =           /* ESC [ */
  {
  /*    NUL             SOH             STX             ETX     */
  CASE_IGNORE,
--- 357,363 ----
  CASE_PRINT,
  };
  
! Const PARSE_T csi_table[] =           /* CSI */
  {
  /*    NUL             SOH             STX             ETX     */
  CASE_IGNORE,
***************
*** 436,443 ****
  CASE_ESC_SEMI,
  /*    <               =               >               ?       */
  CASE_IGNORE,
! CASE_IGNORE,
! CASE_IGNORE,
  CASE_DEC_STATE,
  /*    @               A               B               C       */
  CASE_ICH,
--- 436,443 ----
  CASE_ESC_SEMI,
  /*    <               =               >               ?       */
  CASE_IGNORE,
! CASE_DEC3_STATE,
! CASE_DEC2_STATE,
  CASE_DEC_STATE,
  /*    @               A               B               C       */
  CASE_ICH,
***************
*** 1005,1011 ****
  CASE_GROUND_STATE,
  };
  
! Const PARSE_T dec_table[] =           /* ESC [ ? */
  {
  /*    NUL             SOH             STX             ETX     */
  CASE_IGNORE,
--- 1005,1011 ----
  CASE_GROUND_STATE,
  };
  
! Const PARSE_T dec_table[] =           /* CSI ? */
  {
  /*    NUL             SOH             STX             ETX     */
  CASE_IGNORE,
***************
*** 1152,1157 ****
--- 1152,1805 ----
  CASE_GROUND_STATE,
  CASE_XTERM_RESTORE,
  CASE_XTERM_SAVE,
+ /*    t               u               v               w       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    x               y               z               {       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    |               }               ~               DEL     */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      0x80            0x81            0x82            0x83    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x84            0x85            0x86            0x87    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x88            0x89            0x8a            0x8b    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x8c            0x8d            0x8e            0x8f    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x90            0x91            0x92            0x93    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x94            0x95            0x96            0x97    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x98            0x99            0x9a            0x9b    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x9c            0x9d            0x9e            0x9f    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      nobreakspace    exclamdown      cent            sterling        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      currency        yen             brokenbar       section         */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      diaeresis       copyright       ordfeminine     guillemotleft   */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      notsign         hyphen          registered      macron          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      degree          plusminus       twosuperior     threesuperior   */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      acute           mu              paragraph       periodcentered  */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      cedilla         onesuperior     masculine       guillemotright  */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      onequarter      onehalf         threequarters   questiondown    */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Agrave          Aacute          Acircumflex     Atilde          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Adiaeresis      Aring           AE              Ccedilla        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Egrave          Eacute          Ecircumflex     Ediaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Igrave          Iacute          Icircumflex     Idiaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Eth             Ntilde          Ograve          Oacute          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Ocircumflex     Otilde          Odiaeresis      multiply        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Ooblique        Ugrave          Uacute          Ucircumflex     */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Udiaeresis      Yacute          Thorn           ssharp          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      agrave          aacute          acircumflex     atilde          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      adiaeresis      aring           ae              ccedilla        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      egrave          eacute          ecircumflex     ediaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      igrave          iacute          icircumflex     idiaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      eth             ntilde          ograve          oacute          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      ocircumflex     otilde          odiaeresis      division        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      oslash          ugrave          uacute          ucircumflex     */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      udiaeresis      yacute          thorn           ydiaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ };
+ 
+ Const PARSE_T dec2_table[] =          /* CSI > */
+ {
+ /*    NUL             SOH             STX             ETX     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*    EOT             ENQ             ACK             BEL     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_BELL,
+ /*    BS              HT              NL              VT      */
+ CASE_BS,
+ CASE_TAB,
+ CASE_VMOT,
+ CASE_VMOT,
+ /*    NP              CR              SO              SI      */
+ CASE_VMOT,
+ CASE_CR,
+ CASE_SO,
+ CASE_SI,
+ /*    DLE             DC1             DC2             DC3     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*    DC4             NAK             SYN             ETB     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*    CAN             EM              SUB             ESC     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_ESC,
+ /*    FS              GS              RS              US      */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*    SP              !               "               #       */
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ /*    $               %               &               '       */
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ /*    (               )               *               +       */
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ /*    ,               -               .               /       */
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ /*    0               1               2               3       */
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ /*    4               5               6               7       */
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ /*    8               9               :               ;       */
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_IGNORE,
+ CASE_ESC_SEMI,
+ /*    <               =               >               ?       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    @               A               B               C       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    D               E               F               G       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    H               I               J               K       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_DECSED,
+ CASE_DECSEL,
+ /*    L               M               N               O       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    P               Q               R               S       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    T               U               V               W       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    X               Y               Z               [       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    \               ]               ^               _       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    `               a               b               c       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_DA2,
+ /*    d               e               f               g       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    h               i               j               k       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    l               m               n               o       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    p               q               r               s       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    t               u               v               w       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    x               y               z               {       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    |               }               ~               DEL     */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      0x80            0x81            0x82            0x83    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x84            0x85            0x86            0x87    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x88            0x89            0x8a            0x8b    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x8c            0x8d            0x8e            0x8f    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x90            0x91            0x92            0x93    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x94            0x95            0x96            0x97    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x98            0x99            0x9a            0x9b    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      0x9c            0x9d            0x9e            0x9f    */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*      nobreakspace    exclamdown      cent            sterling        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      currency        yen             brokenbar       section         */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      diaeresis       copyright       ordfeminine     guillemotleft   */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      notsign         hyphen          registered      macron          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      degree          plusminus       twosuperior     threesuperior   */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      acute           mu              paragraph       periodcentered  */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      cedilla         onesuperior     masculine       guillemotright  */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      onequarter      onehalf         threequarters   questiondown    */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Agrave          Aacute          Acircumflex     Atilde          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Adiaeresis      Aring           AE              Ccedilla        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Egrave          Eacute          Ecircumflex     Ediaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Igrave          Iacute          Icircumflex     Idiaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Eth             Ntilde          Ograve          Oacute          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Ocircumflex     Otilde          Odiaeresis      multiply        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Ooblique        Ugrave          Uacute          Ucircumflex     */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      Udiaeresis      Yacute          Thorn           ssharp          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      agrave          aacute          acircumflex     atilde          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      adiaeresis      aring           ae              ccedilla        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      egrave          eacute          ecircumflex     ediaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      igrave          iacute          icircumflex     idiaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      eth             ntilde          ograve          oacute          */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      ocircumflex     otilde          odiaeresis      division        */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      oslash          ugrave          uacute          ucircumflex     */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*      udiaeresis      yacute          thorn           ydiaeresis      */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ };
+ 
+ Const PARSE_T dec3_table[] =          /* CSI = */
+ {
+ /*    NUL             SOH             STX             ETX     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*    EOT             ENQ             ACK             BEL     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_BELL,
+ /*    BS              HT              NL              VT      */
+ CASE_BS,
+ CASE_TAB,
+ CASE_VMOT,
+ CASE_VMOT,
+ /*    NP              CR              SO              SI      */
+ CASE_VMOT,
+ CASE_CR,
+ CASE_SO,
+ CASE_SI,
+ /*    DLE             DC1             DC2             DC3     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*    DC4             NAK             SYN             ETB     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*    CAN             EM              SUB             ESC     */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_ESC,
+ /*    FS              GS              RS              US      */
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ CASE_IGNORE,
+ /*    SP              !               "               #       */
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ /*    $               %               &               '       */
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ /*    (               )               *               +       */
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ /*    ,               -               .               /       */
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ CASE_ESC_IGNORE,
+ /*    0               1               2               3       */
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ /*    4               5               6               7       */
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ /*    8               9               :               ;       */
+ CASE_ESC_DIGIT,
+ CASE_ESC_DIGIT,
+ CASE_IGNORE,
+ CASE_ESC_SEMI,
+ /*    <               =               >               ?       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    @               A               B               C       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    D               E               F               G       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    H               I               J               K       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_DECSED,
+ CASE_DECSEL,
+ /*    L               M               N               O       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    P               Q               R               S       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    T               U               V               W       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    X               Y               Z               [       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    \               ]               ^               _       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    `               a               b               c       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_DECRPTUI,
+ /*    d               e               f               g       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    h               i               j               k       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    l               m               n               o       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ /*    p               q               r               s       */
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
+ CASE_GROUND_STATE,
  /*    t               u               v               w       */
  CASE_GROUND_STATE,
  CASE_GROUND_STATE,
Index: VTparse.def
*** /build/x11r6/XFree86-3.1.2Gb/xc/programs/xterm/VTparse.def  Tue Aug 13 14:51:20 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/VTparse.def  Sun Sep 15 21:42:20 1996
***************
*** 108,110 ****
--- 108,114 ----
  CASE_ANSI_LEVEL_2
  CASE_ANSI_LEVEL_3
  CASE_MC
+ CASE_DEC2_STATE
+ CASE_DA2
+ CASE_DEC3_STATE
+ CASE_DECRPTUI
Index: VTparse.h
*** /build/x11r6/XFree86-3.1.2Gb/xc/programs/xterm/VTparse.h    Tue Aug 13 14:51:20 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/VTparse.h    Sun Sep 15 21:48:11 1996
***************
*** 39,44 ****
--- 39,46 ----
  extern Const PARSE_T csi_quo_table[];
  extern Const PARSE_T csi_table[];
  extern Const PARSE_T dec_table[];
+ extern Const PARSE_T dec2_table[];
+ extern Const PARSE_T dec3_table[];
  extern Const PARSE_T eigtable[];
  extern Const PARSE_T esc_sp_table[];
  extern Const PARSE_T esc_table[];
***************
*** 162,164 ****
--- 164,170 ----
  #define CASE_ANSI_LEVEL_2 99
  #define CASE_ANSI_LEVEL_3 100
  #define CASE_MC 101
+ #define CASE_DEC2_STATE 102
+ #define CASE_DA2 103
+ #define CASE_DEC3_STATE 104
+ #define CASE_DECRPTUI 105
Index: charproc.c
*** /build/x11r6/XFree86-3.1.2Gb/xc/programs/xterm/charproc.c   Sun Sep  1 07:56:12 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/charproc.c   Sun Sep 15 21:47:26 1996
***************
*** 238,243 ****
--- 238,244 ----
  #define XtNcolorBDMode "colorBDMode"
  #define XtNdynamicColors "dynamicColors"
  #define XtNunderLine "underLine"
+ #define XtNdecTerminalID "decTerminalID"
  
  #define XtCAlwaysHighlight "AlwaysHighlight"
  #define XtCAppcursorDefault "AppcursorDefault"
***************
*** 286,291 ****
--- 287,293 ----
  #define XtCColorMode "ColorMode"
  #define XtCDynamicColors "DynamicColors"
  #define XtCUnderLine "UnderLine"
+ #define XtCDecTerminalID "DecTerminalID"
  
  #define       doinput()               (bcnt-- > 0 ? *bptr++ : in_put())
  
***************
*** 319,324 ****
--- 321,327 ----
  static  int   defaultNMarginBell = N_MARGINBELL;
  static  int   defaultMultiClickTime = MULTICLICKTIME;
  static  int   defaultBellSuppressTime = BELLSUPPRESSMSEC;
+ static        int     default_DECID = MIN_DECID;
  static        char *  _Font_Selected_ = "yes";  /* string is arbitrary */
  
  #if OPT_BLINK_CURS
***************
*** 684,689 ****
--- 687,695 ----
  {XtNunderLine, XtCUnderLine, XtRBoolean, sizeof(Boolean),
        XtOffsetOf(XtermWidgetRec, screen.underline),
        XtRBoolean, (XtPointer) &defaultTRUE},
+ {XtNdecTerminalID, XtCDecTerminalID, XtRInt, sizeof(int),
+       XtOffsetOf(XtermWidgetRec, screen.terminal_id),
+       XtRInt, (XtPointer) &default_DECID},
  };
  
  static void VTClassInit PROTO((void));
***************
*** 1050,1055 ****
--- 1056,1071 ----
                        parsestate = dec_table;
                        break;
  
+                case CASE_DEC2_STATE:
+                       /* enter dec2 mode */
+                       parsestate = dec2_table;
+                       break;
+ 
+                case CASE_DEC3_STATE:
+                       /* enter dec3 mode */
+                       parsestate = dec3_table;
+                       break;
+ 
                 case CASE_ICH:
                        /* ICH */
                        if((row = param[0]) < 1)
***************
*** 1191,1212 ****
                 case CASE_DA1:
                        /* DA1 */
                        if (param[0] <= 0) {    /* less than means DEFAULT */
                                count = 0;
                                reply.a_type   = CSI;
!                               reply.a_pintro = '?';
!                               if (screen->ansi_level >= 1) {
!                                       reply.a_param[count++] = screen->ansi_level + 60;
!                                       reply.a_param[count++] = 1; /* 132-columns */
!                                       reply.a_param[count++] = 2; /* printer */
!                                       if (screen->ansi_level > 1) {
!                                               reply.a_param[count++] = 6; /* selective-erase */
!                                               reply.a_param[count++] = 8; /* user-defined-keys */
!                                       }
!                                       reply.a_param[count++] = 15; /* technical characters */
!                               } else {
!                                       reply.a_param[count++] = 1; /* STP: VT100 */
!                                       reply.a_param[count++] = 2; /* AVO: 132-columns */
!                               }
                                reply.a_nparam = count;
                                reply.a_inters = 0;
                                reply.a_final  = 'c';
--- 1207,1264 ----
                 case CASE_DA1:
                        /* DA1 */
                        if (param[0] <= 0) {    /* less than means DEFAULT */
+                           count = 0;
+                           reply.a_type   = CSI;
+                           reply.a_pintro = '?';
+ 
+                           /* The first param corresponds to the highest
+                            * operating level (i.e., service level) of the
+                            * emulation.  A DEC terminal can be setup to
+                            * respond with a different DA response, but
+                            * there's no control sequence that modifies this.
+                            * We set it via a resource.
+                            */
+                           if (screen->terminal_id < 200) {
+                               switch (screen->terminal_id) {
+                               case 102:
+                                   reply.a_param[count++] = 6; /* VT102 */
+                                   break;
+                               case 101:
+                                   reply.a_param[count++] = 1; /* VT101 */
+                                   reply.a_param[count++] = 0; /* no options */
+                                   break;
+                               default: /* VT100 */
+                                   reply.a_param[count++] = 1; /* VT100 */
+                                   reply.a_param[count++] = 2; /* AVO */
+                                   break;
+                               }
+                           } else {    
+                               reply.a_param[count++] = 60 + screen->terminal_id/100;
+                               reply.a_param[count++] = 1; /* 132-columns */
+                               /* reply.a_param[count++] = 2; NO printer */
+                               reply.a_param[count++] = 6; /* selective-erase */
+                               reply.a_param[count++] = 8; /* user-defined-keys */
+                               reply.a_param[count++] = 15; /* technical characters */
+                           }
+                           reply.a_nparam = count;
+                           reply.a_inters = 0;
+                           reply.a_final  = 'c';
+                           unparseseq(&reply, screen->respond);
+                       }
+                       parsestate = groundtable;
+                       break;
+ 
+                case CASE_DA2:
+                       /* DA2 */
+                       if ((screen->terminal_id >= 200)
+                        && (param[0] <= 0)) {  /* less than means DEFAULT */
                                count = 0;
                                reply.a_type   = CSI;
!                               reply.a_pintro = '>';
! 
!                               reply.a_param[count++] = 1; /* VT220 */
!                               reply.a_param[count++] = 0; /* Version */
!                               reply.a_param[count++] = 0; /* options (none) */
                                reply.a_nparam = count;
                                reply.a_inters = 0;
                                reply.a_final  = 'c';
***************
*** 1215,1220 ****
--- 1267,1285 ----
                        parsestate = groundtable;
                        break;
  
+                case CASE_DECRPTUI:
+                       /* DECRPTUI */
+                       if ((screen->terminal_id >= 400)
+                        && (param[0] <= 0)) {  /* less than means DEFAULT */
+                               unparseputc1(DCS, screen->respond);
+                               unparseputc('!',  screen->respond);
+                               unparseputc('|',  screen->respond);
+                               unparseputc('0',  screen->respond);
+                               unparseputc1(ST,  screen->respond);
+                       }
+                       parsestate = groundtable;
+                       break;
+ 
                 case CASE_TBC:
                        /* TBC */
                        if ((row = param[0]) <= 0) /* less than means default */
***************
*** 1372,1379 ****
                                /* keyboard status */
                                reply.a_param[count++] = 27;
                                reply.a_param[count++] = 1; /* North American */
!                               reply.a_param[count++] = 0; /* ready */
!                               reply.a_param[count++] = 0; /* LK201 */
                                break;
                        }
  
--- 1437,1446 ----
                                /* keyboard status */
                                reply.a_param[count++] = 27;
                                reply.a_param[count++] = 1; /* North American */
!                               if (screen->terminal_id >= 400) {
!                                       reply.a_param[count++] = 0; /* ready */
!                                       reply.a_param[count++] = 0; /* LK201 */
!                               }
                                break;
                        }
  
***************
*** 1419,1427 ****
  
                 case CASE_DECREQTPARM:
                        /* DECREQTPARM */
!                       if ((row = param[0]) == DEFAULT)
                                row = 0;
!                       if (row == 0 || row == 1) {
                                reply.a_type = CSI;
                                reply.a_pintro = 0;
                                reply.a_nparam = 7;
--- 1486,1495 ----
  
                 case CASE_DECREQTPARM:
                        /* DECREQTPARM */
!                       if (screen->terminal_id < 200) { /* VT102 */
!                           if ((row = param[0]) == DEFAULT)
                                row = 0;
!                           if (row == 0 || row == 1) {
                                reply.a_type = CSI;
                                reply.a_pintro = 0;
                                reply.a_nparam = 7;
***************
*** 1435,1440 ****
--- 1503,1509 ----
                                reply.a_inters = 0;
                                reply.a_final  = 'x';
                                unparseseq(&reply, screen->respond);
+                           }
                        }
                        parsestate = groundtable;
                        break;
***************
*** 1482,1487 ****
--- 1551,1562 ----
                 case CASE_DECRC:
                        /* DECRC */
                        CursorRestore(term, &screen->sc);
+                       if_OPT_ISO_COLORS(screen,{
+                               if (term->flags & BOLD)
+                                       setColorBD();
+                               if (term->flags & UNDERLINE)
+                                       setColorUL();
+                       })
                        parsestate = groundtable;
                        break;
  
***************
*** 3159,3164 ****
--- 3234,3245 ----
     new->screen.scrolllines = request->screen.scrolllines;
     new->screen.scrollttyoutput = request->screen.scrollttyoutput;
     new->screen.scrollkey = request->screen.scrollkey;
+    new->screen.terminal_id = request->screen.terminal_id;
+    if (new->screen.terminal_id < MIN_DECID)
+        new->screen.terminal_id = MIN_DECID;
+    if (new->screen.terminal_id > MAX_DECID)
+        new->screen.terminal_id = MAX_DECID;
+    new->screen.ansi_level = (new->screen.terminal_id / 100);
     new->screen.visualbell = request->screen.visualbell;
     new->screen.TekEmu = request->screen.TekEmu;
     new->misc.re_verse = request->misc.re_verse;
Index: misc.c
*** /build/x11r6/XFree86-3.1.2Gb/xc/programs/xterm/misc.c       Tue Aug 20 15:08:28 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/misc.c       Sun Sep 15 21:59:28 1996
***************
*** 881,887 ****
                                okay = False;
  
                        unparseputc1(DCS, screen->respond);
!                       unparseputc(okay ? '0' : '1', screen->respond);
                        unparseputc('$', screen->respond);
                        unparseputc('r', screen->respond);
                        if (okay)
--- 881,887 ----
                                okay = False;
  
                        unparseputc1(DCS, screen->respond);
!                       unparseputc(okay ? '1' : '0', screen->respond);
                        unparseputc('$', screen->respond);
                        unparseputc('r', screen->respond);
                        if (okay)
Index: ptyx.h
*** /build/x11r6/XFree86-3.1.2Gb/xc/programs/xterm/ptyx.h       Fri Aug 23 12:47:18 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/ptyx.h       Sun Sep 15 21:27:09 1996
***************
*** 188,193 ****
--- 188,196 ----
  #define       APC     0x9F
  #define       RDEL    0xFF
  
+ #define MIN_DECID 100                 /* emulate VT100 */
+ #define MAX_DECID 420                 /* ...through VT420 */
+ 
  #define NMENUFONTS 9                  /* entries in fontMenu */
  
  #define       NBOX    5                       /* Number of Points in box      */
***************
*** 462,467 ****
--- 465,471 ----
        char            curgl;          /* Current GL setting.          */
        char            curgr;          /* Current GR setting.          */
        char            curss;          /* Current single shift.        */
+       int             terminal_id;    /* 100=vt100, 220=vt220, etc.   */
        int             ansi_level;     /* 0=vt100, 1,2,3 = vt100 ... vt320 */
        int             scroll_amt;     /* amount to scroll             */
        int             refresh_amt;    /* amount to refresh            */
Index: xterm.man
*** /build/x11r6/XFree86-3.1.2Gb/xc/programs/xterm/xterm.man    Fri Aug 23 12:47:18 1996
--- /build/x11r6/XFree86-current/xc/programs/xterm/xterm.man    Sun Sep 15 19:58:11 1996
***************
*** 702,711 ****
  This specifies the color to use to display underlined characters if
  the ``colorULMode'' resource is enabled.
  .TP 8
! .B "underLine (\fPclass\fB UnderLine)"
! This specifies whether or not text with the underline attribute should be
! underlined.  It may be desirable to disable underlining when color is being
! used for the underline attribute.
  .TP 8
  .B "dynamicColors (\fPclass\fB DynamicColors)"
  Specifies whether or not escape sequences to change colors assigned to
--- 702,711 ----
  This specifies the color to use to display underlined characters if
  the ``colorULMode'' resource is enabled.
  .TP 8
! .B "decTerminalID (\fPclass\fB DecTerminalID)"
! Specifies the emulation level (100=VT100, 220=VT220, etc.), used to determine
! the type of response to a DA control sequence.
! The default is 100.
  .TP 8
  .B "dynamicColors (\fPclass\fB DynamicColors)"
  Specifies whether or not escape sequences to change colors assigned to
***************
*** 900,905 ****
--- 900,910 ----
  Specifies the key and button bindings for menus, selections, ``programmed
  strings,'' etc.  See \fBACTIONS\fP below.
  .TP 8
+ .B "underLine (\fPclass\fB UnderLine)"
+ This specifies whether or not text with the underline attribute should be
+ underlined.  It may be desirable to disable underlining when color is being
+ used for the underline attribute.
+ .TP 8
  .B "visualBell (\fPclass\fB VisualBell)"
  Specifies whether or not a visible bell (i.e. flashing) should be used instead
  of an audible bell when Control-G is received.  The default is ``false.''
***************
*** 1224,1230 ****
  .PP
  Clicking button two moves the display to a position in the saved text
  that corresponds to the pointer's position in the scrollbar.
- .PP
  .PP
  Unlike the VT102 window, the Tektronix window does not allow the copying of
  text.
--- 1229,1234 ----