home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / telecomm / terms / term-4.1-source.lha / Extras / Source / term-Source.lha / termData.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-17  |  29.9 KB  |  1,205 lines

  1. /*
  2. **    termData.c
  3. **
  4. **    Global data structures.
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. BOOLEAN             DebugFlag;
  13.  
  14.     /* Libraries. */
  15.  
  16. struct ExecBase        *SysBase;
  17. struct DosLibrary    *DOSBase;
  18. struct Library        *GTLayoutBase;
  19.  
  20. struct IntuitionBase    *IntuitionBase;
  21. struct GfxBase        *GfxBase;
  22. struct RxsLib        *RexxSysBase;
  23. struct LocaleBase    *LocaleBase;
  24. struct Library        *GadToolsBase,
  25.             *TimerBase,
  26.             *ConsoleDevice,
  27.             *DiskfontBase,
  28.             *UtilityBase,
  29.             *AslBase,
  30.             *IFFParseBase,
  31.             *CxBase,
  32.             *IconBase,
  33.             *LayersBase,
  34.             *TranslatorBase,
  35.             *WorkbenchBase,
  36.             *AmigaGuideBase,
  37.             *XEmulatorBase,
  38.             *XProtocolBase,
  39.             *DataTypesBase,
  40.             *OwnDevUnitBase;
  41.  
  42. BYTE             Kick30;
  43.  
  44.     /* Timer device. */
  45.  
  46. struct timerequest    *TimeRequest;
  47. struct MsgPort        *TimePort;
  48.  
  49.     /* Console device. */
  50.  
  51. struct IOStdReq        *ConsoleRequest;
  52. struct KeyMap        *KeyMap;
  53. BPTR             KeySegment;
  54.  
  55.     /* Screen & Windows. */
  56.  
  57. struct Screen        *Screen,
  58.             *DefaultPubScreen,
  59.             *SharedScreen;
  60. struct Window        *Window;
  61. LONG             WindowWidth,
  62.              WindowHeight,
  63.              WindowLeft,
  64.              WindowTop;
  65. struct Window        *StatusWindow;
  66. struct Gadget        *StatusGadget;
  67. UWORD             StatusOffset;
  68. APTR             OldWindowPtr;
  69. struct BitMap        *InterleavedBitMap;
  70. UBYTE __far         ScreenTitle[80];
  71. UBYTE             DepthMask;
  72. LONG             RenderPens[4],
  73.              MappedPens[2][32],
  74.              SafeTextPen;
  75. struct DrawInfo        *DrawInfo;
  76. LONG             ScreenWidth,
  77.              ScreenHeight;
  78. BYTE             UseMasking;
  79. struct IBox         WindowBox = { -1,-1,-1,-1 };
  80.  
  81. struct BlockMarker    *WindowMarker;
  82. ULONG             ClickSecs,ClickMicros;
  83. BYTE             FirstClick = TRUE,HoldClick = FALSE;
  84. LONG             ClickX,ClickY;
  85.  
  86.     /* Workbench AppWindow support. */
  87.  
  88. struct AppWindow    *WorkbenchWindow;
  89. struct MsgPort        *WorkbenchPort;
  90.  
  91.     /* Graphics rendering. */
  92.  
  93. struct ViewPort        *VPort;
  94. struct RastPort        *RPort;
  95. struct Region        *ClipRegion,
  96.             *OldRegion;
  97. struct TextFont        *GFX,
  98.             *CurrentFont,
  99.             *UserTextFont;
  100. WORD             UserFontHeight,
  101.              UserFontWidth,
  102.              UserFontBase;
  103. UBYTE __far         UserFontName[40];
  104. struct TextFont        *TextFont;
  105. WORD             TextFontHeight,
  106.              TextFontWidth,
  107.              TextFontBase;
  108. struct TTextAttr     TextAttr;
  109. UBYTE __far         TextFontName[40];
  110. struct TTextAttr     UserFont;
  111. struct TagItem         TagDPI[2];
  112. APTR             VisualInfo;
  113. UWORD             FontRightExtend;
  114.  
  115. ULONG            (*  ReadAPen)(struct RastPort *RPort);
  116. ULONG            (*  ReadBPen)(struct RastPort *RPort);
  117. ULONG            (*  ReadDrMd)(struct RastPort *RPort);
  118. ULONG            (*  SetWrMsk)(struct RastPort *RPort,ULONG Mask);
  119.  
  120. UWORD MonoPens[] =
  121. {
  122.     0,1,1,1,1,1,0,0,1,    0,1,1,(UWORD)~0
  123. };
  124.  
  125. UWORD StandardPens[] =
  126. {
  127.     0,1,1,2,1,3,1,0,2,    1,2,1,(UWORD)~0
  128. };
  129.  
  130. UWORD ANSIPens[] =
  131. {
  132.     0,4,7,7,4,6,7,0,6,    0,7,0,(UWORD)~0
  133. };
  134.  
  135. UWORD EGAPens[] =
  136. {
  137.     0,15,15,15,8,7,15,0,7,    0,15,0,(UWORD)~0
  138. };
  139.  
  140. UWORD AtomicColours[16] =
  141. {
  142.     0x000,
  143.     0xDDD,
  144.     0x000,
  145.     0x000,
  146.     0x000,
  147.     0x000,
  148.     0x000,
  149.     0x000,
  150.     0x000,
  151.     0x000,
  152.     0x000,
  153.     0x000,
  154.     0x000,
  155.     0x000,
  156.     0x000,
  157.     0x000
  158. };
  159.  
  160. UWORD EGAColours[16] =
  161. {
  162.     0x000,    /* Black. */
  163.     0xA00,    /* Dark red. */
  164.     0x0A0,    /* Dark green. */
  165.     0xA60,    /* Dark yellow (orange). */
  166.     0x00A,    /* Dark blue. */
  167.     0xA0A,    /* Dark magenta.*/
  168.     0x0AA,    /* Dark cyan. */
  169.     0xBBB,    /* Light grey. */
  170.     0x666,    /* Dark grey. */
  171.     0xF00,    /* Red. */
  172.     0x0F0,    /* Green. */
  173.     0xFF0,    /* Yellow. */
  174.     0x00F,    /* Blue. */
  175.     0xF0F,    /* Magenta. */
  176.     0x0FF,    /* Cyan. */
  177.     0xFFF    /* White. */
  178. };
  179.  
  180. UWORD ANSIColours[16] =
  181. {
  182.     0x000,    /* Black. */
  183.     0xF00,    /* Red. */
  184.     0x0F0,    /* Green. */
  185.     0xFF0,    /* Yellow. */
  186.     0x00F,    /* Blue. */
  187.     0xF0F,    /* Magenta. */
  188.     0x0FF,    /* Cyan. */
  189.     0xFFF,    /* White. */
  190.  
  191.     0x000,    /* Black. */
  192.     0xF00,    /* Red. */
  193.     0x0F0,    /* Green. */
  194.     0xFF0,    /* Yellow. */
  195.     0x00F,    /* Blue. */
  196.     0xF0F,    /* Magenta. */
  197.     0x0FF,    /* Cyan. */
  198.     0xFFF    /* White. */
  199. };
  200.  
  201. UWORD             DefaultColours[32],
  202.              BlinkColours[32],
  203.              NormalColours[32],
  204.              StandardColours[32],
  205.              PaletteSize = 16;
  206.  
  207.     /* Line/Column offset tables. */
  208.  
  209. LONG            *OffsetXTable,
  210.             *OffsetYTable;
  211.  
  212.     /* DOS data. */
  213.  
  214. struct Process        *ThisProcess;
  215. struct Process        *StatusProcess;
  216. struct Task        *BufferTask;
  217. struct Process        *RexxProcess;
  218. struct MsgPort        *TermRexxPort;
  219. struct WBStartup    *WBenchMsg;
  220. BPTR             WBenchLock;
  221. struct TermPort        *TermPort;
  222. BYTE             CheckBit    = -1,
  223.              OwnDevBit    = -1;
  224. BYTE             InRexx;
  225. WORD             LimitCount    = -1;
  226. UBYTE __far         LimitMacro[MAX_FILENAME_LENGTH];
  227. LONG             CantQuit;
  228.  
  229.     /* Character conversion. */
  230.  
  231. struct InputEvent    *FakeInputEvent;
  232.  
  233.     /* Serial I/O. */
  234.  
  235. struct IOExtSer        *ReadRequest;
  236. struct IOExtSer        *WriteRequest;
  237. struct MsgPort        *ReadPort;
  238. APTR             ReadBuffer,
  239.              HostReadBuffer;
  240. UBYTE            *SerialMessage;
  241. ULONG             DTERate,
  242.              SerialBufferSize;
  243. BYTE             ProcessIO = TRUE;
  244.  
  245. UBYTE __far         NewDevice[MAX_FILENAME_LENGTH];
  246. LONG             NewUnit;
  247. BYTE             UseNewDevice,
  248.              UseNewUnit;
  249.  
  250. LONG BaudRates[] =
  251. {
  252.     110,    300,    600,    1200,    2400,    4800,    7200,
  253.     9600,    12000,    14400,    19200,    31250,    38400,    57600,
  254.     64000,    76800,    115200,    230400,    345600,    460800,    576000,
  255.     614400,    691200,    806400,    921600
  256. };
  257.  
  258. LONG             NumBaudRates = sizeof(BaudRates) / sizeof(LONG);
  259.  
  260. struct RendezvousSemaphore    RendezvousSemaphore;
  261.  
  262.     /* Localization support. */
  263.  
  264. struct Catalog        *Catalog;
  265. struct Locale        *Locale;
  266.  
  267.     /* Hotkeys. */
  268.  
  269. struct Hotkeys         Hotkeys;
  270.  
  271. struct NewBroker NewTermBroker =
  272. {
  273.     NB_VERSION,
  274.     "term",
  275.     "term © 1990-1994 by Olaf Barthel",
  276.     "Terminal program",
  277.     0,0,0,NULL,0
  278. };
  279.  
  280.     /* Static default fonts. */
  281.  
  282. struct TextAttr DefaultFont =
  283. {
  284.     (UBYTE *)"topaz.font",
  285.     8,
  286.     FS_NORMAL,
  287.     FPF_ROMFONT | FPF_DESIGNED
  288. };
  289.  
  290. struct TextAttr GFXFont =
  291. {
  292.     (UBYTE *)"GFX.font",
  293.     8,
  294.     FS_NORMAL,
  295.     FPF_DISKFONT
  296. };
  297.  
  298.     /* Character lookup tables. */
  299.  
  300. BYTE IsPrintable[256] =
  301. {
  302.     0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,
  303.     0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,
  304.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  305.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  306.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  307.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  308.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  309.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
  310.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  311.     0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
  312.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  313.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  314.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  315.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  316.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  317.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  318. };
  319.  
  320. BYTE IsGlyph[256] =
  321. {
  322.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  323.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  324.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  325.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  326.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  327.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  328.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  329.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
  330.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  331.     0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
  332.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  333.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  334.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  335.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  336.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  337.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  338. };
  339.  
  340. BYTE CharType[256] =
  341. {
  342.     0,0,0,0,0,0,0,0,0,0,6,0,0,7,0,0,
  343.     0,5,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
  344.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  345.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  346.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  347.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  348.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  349.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  350.     2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,
  351.     0,0,0,0,0,3,1,1,1,1,0,0,0,0,0,0,
  352.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  353.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  354.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  355.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  356.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  357.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  358. };
  359.  
  360.     /* IBM <-> ISO font conversion. */
  361.  
  362. UBYTE __far IBMConversion[256] =
  363. {
  364.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x00,0x00,
  365.     0x00,0x11,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0x00,
  366.     0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
  367.     0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
  368.     0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
  369.     0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
  370.     0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
  371.     0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
  372.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  373.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  374.     0x00,0xAD,0x9B,0x9C,0x00,0x9D,0x00,0x15,0x00,0x00,0xA6,0x00,0x00,0x00,0xAE,0x00,
  375.     0xF8,0xF1,0xFD,0x00,0x00,0xE6,0x14,0xF9,0x00,0x00,0xA7,0xAF,0xAC,0xAB,0x00,0xA8,
  376.     0x00,0x00,0x00,0x00,0x8E,0x8F,0x92,0x80,0x00,0x90,0x00,0x00,0x00,0x00,0x00,0x00,
  377.     0x00,0xA5,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,0x9A,0x00,0x00,0xE1,
  378.     0x85,0xA0,0x83,0x00,0x84,0x86,0x91,0x87,0x8A,0x82,0x88,0x89,0x8D,0xA1,0x8C,0x00,
  379.     0x00,0xA4,0x95,0xA2,0x93,0x00,0x94,0x00,0x00,0x97,0xA3,0x96,0x81,0x00,0x00,0x98
  380. };
  381.  
  382.     /* Table of graphics characters. */
  383.  
  384. BYTE GfxTable[256] =
  385. {
  386.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  387.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  388.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  389.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  390.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  391.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  392.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  393.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  394.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  395.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  396.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  397.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  398.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  399.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  400.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  401.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  402. };
  403.  
  404.     /* Special character treatment. */
  405.  
  406. struct SpecialKey SpecialKeys[13] =
  407. {
  408.     BEL,    DoBeep,        /* Ring the bell. */
  409.     XON,    DoxON,        /* Flow control - stop output. */
  410.     BKS,    DoBackspace,    /* Erase a character. */
  411.     ENT,    DoLF_FF_VT,    /* Enter key. */
  412.     FFD,    DoFF,        /* Form feed. */
  413.     VTB,    DoLF_FF_VT,    /* Vertical tab (huh?). */
  414.     RET,    DoCR,        /* Return key. */
  415.     TAB,    DoTab,        /* Move to next tab stop. */
  416.     SI,    DoShiftIn,    /* Change to graphics mode */
  417.     SO,    DoShiftOut,    /* Change out of graphics mode. */
  418.     ENQ,    DoEnq,        /* Transmit answerback message. */
  419.     ESC,    DoEsc,        /* Start new control sequence. */
  420.     CSI,    DoCsi        /* Start new control sequence. */
  421. };
  422.  
  423. JUMP *SpecialTable;
  424.  
  425. BYTE AbortMap[256] =
  426. {
  427.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  428.     0,0,0,0,0,0,0,0,1,0,1,2,0,0,0,0,
  429.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  430.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  431.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  432.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  433.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  434.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  435.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  436.     0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,
  437.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  438.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  439.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  440.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  441.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  442.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  443. };
  444.  
  445. JUMP *AbortTable;
  446.  
  447. VOID (*  ConDump)(STRPTR,LONG);
  448. VOID (*  ConOutput)(STRPTR,LONG);
  449. VOID (*  ConProcessData)(register STRPTR,register LONG);
  450.  
  451.     /* Shared global string formatting buffer. */
  452.  
  453. UBYTE __far SharedBuffer[512];
  454.  
  455.     /* Some more handy buffers. */
  456.  
  457. UBYTE __far ARexxCommandBuffer[256],AmigaDOSCommandBuffer[256];
  458.  
  459.     /* Screen pull-down-menu. */
  460.  
  461. struct NewMenu TermMenu[] =
  462. {
  463.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  464.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)0},
  465.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_SAVE_AS_PICTURE},
  466.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_SAVE_AS_TEXT},
  467.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  468.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)0},
  469.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_PRINT_SCREEN},
  470.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_PRINT_SCREEN_AS_GFX},
  471.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_PRINT_CLIP},
  472.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  473.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)0},
  474.     {   NM_SUB, NULL,         0 , TICK,    0, (APTR)MEN_CAPTURE_TO_FILE},
  475.     {   NM_SUB, NULL,         0 , TICK,    0, (APTR)MEN_CAPTURE_TO_PRINTER},
  476.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  477.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_ICONIFY},
  478.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  479.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_ABOUT},
  480.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  481.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_QUIT},
  482.  
  483.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  484.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_COPY},
  485.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_PASTE},
  486.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLEAR},
  487.  
  488.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  489.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_EXECUTE_DOS_COMMAND},
  490.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_EXECUTE_REXX_COMMAND},
  491.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  492.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_RECORD},
  493.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_RECORD_LINE},
  494.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  495.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_EDIT_TRAPS},
  496.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_DISABLE_TRAPS},
  497.  
  498.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  499.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_PHONEBOOK},
  500.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_REDIAL},
  501.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DIAL_NUMBER},
  502.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  503.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SEND_BREAK},
  504.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_HANG_UP},
  505.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  506.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_WAIT},
  507.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  508.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_FLUSH_BUFFER},
  509.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RELEASE_DEVICE},
  510.  
  511.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  512.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_UPLOAD_ASCII},
  513.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DOWNLOAD_ASCII},
  514.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  515.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_UPLOAD_TEXT},
  516.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DOWNLOAD_TEXT},
  517.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_EDIT_AND_UPLOAD_TEXT},
  518.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  519.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_UPLOAD_BINARY},
  520.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DOWNLOAD_BINARY},
  521.  
  522.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  523.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLEAR_BUFFER},
  524.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DISPLAY_BUFFER},
  525.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLOSE_BUFFER},
  526.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  527.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_FREEZE_BUFFER},
  528.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  529.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_OPEN_BUFFER},
  530.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SAVE_BUFFER_AS},
  531.  
  532.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  533.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLEAR_SCREEN},
  534.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RESET_FONT},
  535.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RESET_STYLES},
  536.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RESET_TERMINAL},
  537.  
  538.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  539.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SERIAL},
  540.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_MODEM},
  541.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SCREEN},
  542.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_TERMINAL},
  543.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SET_EMULATION},
  544.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLIPBOARD},
  545.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CAPTURE},
  546.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_COMMANDS},
  547.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_MISC},
  548.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_PATH},
  549.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_TRANSFER_PROTOCOL},
  550.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  551.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_TRANSFER},
  552.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_TRANSLATION},
  553.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_MACROS},
  554.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CURSORKEYS},
  555.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_FAST_MACROS},
  556.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_HOTKEYS},
  557.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SPEECH},
  558.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SOUND},
  559.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RATES},
  560.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SET_CONSOLE},
  561.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  562.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_OPEN_SETTINGS},
  563.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SAVE_SETTINGS},
  564.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SAVE_SETTINGS_AS},
  565.  
  566.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  567.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_STATUS_WINDOW},
  568.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_REVIEW_WINDOW},
  569.     {  NM_ITEM, NULL,         0 , CHECKIT,    0, (APTR)MEN_PACKET_WINDOW},
  570.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_FAST_MACROS_WINDOW},
  571.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_UPLOAD_QUEUE_WINDOW},
  572.  
  573.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  574.     {   NM_END, 0,             0 , 0,        0, (APTR)0}
  575. };
  576.  
  577. struct Menu    *Menu;
  578. struct Image    *AmigaGlyph,
  579.         *CheckGlyph;
  580.  
  581. LONG MenuLabels[] =
  582. {
  583.     MSG_TERMDATA_PROJECT_MEN,
  584.     MSG_TERMDATA_SAVE_SCREEN_AS_MEN,
  585.     MSG_TERMDATA_SAVE_AS_PICTURE_MEN,
  586.     MSG_TERMDATA_SAVE_AS_TEXT_MEN,
  587.     MSG_TERMDATA_PRINT_MEN,
  588.     MSG_TERMDATA_PRINT_SCREEN_MEN,
  589.     MSG_TERMDATA_PRINT_SCREEN_GFX_MEN,
  590.     MSG_TERMDATA_PRINT_CLIP_MEN,
  591.     MSG_TERMDATA_CAPTURE_MEN,
  592.     MSG_TERMDATA_CAPTURE_TO_FILE_MEN,
  593.     MSG_TERMDATA_CAPTURE_TO_PRINTER_MEN,
  594.     MSG_TERMDATA_ICONIFY_MEN,
  595.     MSG_TERMDATA_ABOUT_MEN,
  596.     MSG_TERMDATA_QUIT_MEN,
  597.  
  598.     MSG_TERMDATA_EDIT_MEN,
  599.     MSG_TERMDATA_COPY_MEN,
  600.     MSG_TERMDATA_PASTE_MEN,
  601.     MSG_TERMDATA_CLEAR_MEN,
  602.  
  603.     MSG_TERMDATA_COMMANDS_MEN,
  604.     MSG_TERMDATA_EXECUTE_DOS_COMMAND_MEN,
  605.     MSG_TERMDATA_EXECUTE_REXX_COMMAND_MEN,
  606.     MSG_TERMDATA_RECORD_MEN,
  607.     MSG_TERMDATA_RECORD_LINE_MEN,
  608.     MSG_TERMDATA_EDIT_TRAPS_MEN,
  609.     MSG_TERMDATA_DISABLE_TRAPS_MEN,
  610.  
  611.     MSG_TERMDATA_PHONE_MEN,
  612.     MSG_TERMDATA_PHONEBOOK_MEN,
  613.     MSG_TERMDATA_REDIAL_MEN,
  614.     MSG_TERMDATA_DIAL_NUMBER_MEN,
  615.     MSG_TERMDATA_SEND_BREAK_MEN,
  616.     MSG_TERMDATA_HANG_UP_MEN,
  617.     MSG_TERMDATA_WAIT_MEN,
  618.     MSG_TERMDATA_FLUSH_BUFFER_MEN,
  619.     MSG_TERMDATA_RELEASE_DEVICE_MEN,
  620.  
  621.     MSG_TERMDATA_XFER_MEN,
  622.     MSG_TERMDATA_UPLOAD_ASCII_MEN,
  623.     MSG_TERMDATA_DOWNLOAD_ASCII_MEN,
  624.     MSG_TERMDATA_UPLOAD_TEXT_MEN,
  625.     MSG_TERMDATA_DOWNLOAD_TEXT_MEN,
  626.     MSG_TERMDATA_EDIT_AND_UPLOAD_TEXT_MEN,
  627.     MSG_TERMDATA_UPLOAD_BINARY_MEN,
  628.     MSG_TERMDATA_DOWNLOAD_BINARY_MEN,
  629.  
  630.     MSG_TERMDATA_BUFFER_MEN,
  631.     MSG_TERMDATA_CLEAR_BUFFER_MEN,
  632.     MSG_TERMDATA_DISPLAY_BUFFER_MEN,
  633.     MSG_TERMDATA_CLOSE_BUFFER_MEN,
  634.     MSG_TERMDATA_FREEZE_BUFFER_MEN,
  635.     MSG_TERMDATA_OPEN_BUFFER_MEN,
  636.     MSG_TERMDATA_SAVE_BUFFER_AS_MEN,
  637.  
  638.     MSG_TERMDATA_SCREEN_MEN,
  639.     MSG_TERMDATA_CLEAR_SCREEN_MEN,
  640.     MSG_TERMDATA_RESET_FONT_MEN,
  641.     MSG_TERMDATA_RESET_STYLES_MEN,
  642.     MSG_TERMDATA_RESET_TERMINAL_MEN,
  643.  
  644.     MSG_TERMDATA_SETTINGS_MEN,
  645.     MSG_TERMDATA_SERIAL_MEN,
  646.     MSG_TERMDATA_MODEM_MEN,
  647.     MSG_TERMDATA_SCREEN_PREFS_MEN,
  648.     MSG_TERMDATA_TERMINAL_MEN,
  649.     MSG_TERMDATA_SET_EMULATION_MEN,
  650.     MSG_TERMDATA_CLIPBOARD_PREFS_MEN,
  651.     MSG_TERMDATA_CAPTURE_PREFS_MEN,
  652.     MSG_TERMDATA_COMMANDS_PREFS_MEN,
  653.     MSG_TERMDATA_MISC_MEN,
  654.     MSG_TERMDATA_PATH_MEN,
  655.     MSG_TERMDATA_TRANSFER_PROTOCOL_MEN,
  656.     MSG_TERMDATA_TRANSFER_MEN,
  657.     MSG_TERMDATA_TRANSLATION_MEN,
  658.     MSG_TERMDATA_MACROS_MEN,
  659.     MSG_TERMDATA_CURSORKEYS_MEN,
  660.     MSG_TERMDATA_FAST_MACROS_MEN,
  661.     MSG_TERMDATA_HOTKEYS_MEN,
  662.     MSG_TERMDATA_SPEECH_MEN,
  663.     MSG_TERMDATA_SOUND_MEN,
  664.     MSG_AREACODES_MEN,
  665.     MSG_TERMDATA_SET_CONSOLE_MEN,
  666.     MSG_TERMDATA_OPEN_SETTINGS_MEN,
  667.     MSG_TERMDATA_SAVE_SETTINGS_MEN,
  668.     MSG_TERMDATA_SAVE_SETTINGS_AS_MEN,
  669.  
  670.     MSG_TERMDATA_WINDOWS_MEN,
  671.     MSG_TERMDATA_STATUS_WINDOW_MEN,
  672.     MSG_TERMDATA_REVIEW_WINDOW_MEN,
  673.     MSG_TERMDATA_PACKET_WINDOW_MEN,
  674.     MSG_TERMDATA_FAST_MACROS_WINDOW_MEN,
  675.     MSG_TERMDATA_UPLOAD_QUEUE_WINDOW_MEN,
  676.  
  677.     MSG_TERMDATA_DIALING_MEN
  678. };
  679.  
  680.     /* Pointer. */
  681.  
  682. UWORD __chip Stopwatch[(1 + 16 + 1) * 2] =
  683. {
  684.     0x0000,0x0000,
  685.  
  686.     0x0400,0x07C0,
  687.     0x0000,0x07C0,
  688.     0x0100,0x0380,
  689.     0x0000,0x07E0,
  690.     0x07C0,0x1FF8,
  691.     0x1FF0,0x3FEC,
  692.     0x3FF8,0x7FDE,
  693.     0x3FF8,0x7FBE,
  694.     0x7FFC,0xFF7F,
  695.     0x7EFC,0xFFFF,
  696.     0x7FFC,0xFFFF,
  697.     0x3FF8,0x7FFE,
  698.     0x3FF8,0x7FFE,
  699.     0x1FF0,0x3FFC,
  700.     0x07C0,0x1FF8,
  701.     0x0000,0x07E0,
  702.  
  703.     0x0000,0x0000
  704. };
  705.  
  706.     /* Cross-hatch pattern. */
  707.  
  708. ULONG __chip Crosshatch = 0x5555AAAA;
  709.  
  710.     /* Ghosting pattern, slightly different from the cross-hatch pattern. */
  711.  
  712. ULONG __chip Ghosting = 0x44441111;
  713.  
  714.     /* Configuration. */
  715.  
  716. struct Configuration    *Config,
  717.             *PrivateConfig,
  718.             *BackupConfig;
  719. struct SpeechConfig     SpeechConfig;
  720. BYTE             English = TRUE;
  721. BYTE             Status;
  722. BYTE             Online,WasOnline;
  723. ULONG             OnlineMinutes,OnlinePlus;
  724. UWORD             PublicModes;
  725. struct SignalSemaphore     OnlineSemaphore;
  726.  
  727. UBYTE __far         LastConfig[MAX_FILENAME_LENGTH];
  728. UBYTE __far         DefaultPubScreenName[MAXPUBSCREENNAME + 1],
  729.              SomePubScreenName[MAXPUBSCREENNAME + 1];
  730.  
  731.     /* Capture file. */
  732.  
  733. struct Buffer        *FileCapture;
  734. BPTR             PrinterCapture;
  735. UBYTE __far         CaptureName[MAX_FILENAME_LENGTH];
  736. BYTE             StandardPrinterCapture,
  737.              ControllerActive;
  738. LONG             BufferFlushCount;
  739. VOID            (* __regargs CaptureData)(register APTR Data,register LONG Size);
  740.  
  741.     /* Buffer. */
  742.  
  743. UBYTE            **BufferLines;
  744. LONG             Lines;
  745. struct SignalSemaphore    *BufferSemaphore,
  746.              BufferTaskSemaphore;
  747. LONG             MaxLines = 100;
  748. LONG             BufferSpace;
  749. BYTE             BufferClosed;
  750. BYTE             BufferFrozen;
  751.  
  752. struct MinList         ReviewBufferHistory,
  753.              TextBufferHistory;
  754.  
  755.     /* Sound support.c */
  756.  
  757. struct SoundConfig     SoundConfig;
  758. BYTE             SoundChanged = FALSE;
  759.  
  760.     /* Phonebook. */
  761.  
  762. struct PhoneEntry    **Phonebook;
  763. LONG             PhoneSize;
  764. LONG             NumPhoneEntries;
  765. UBYTE __far         PhonePassword[256];
  766. BYTE             PhonePasswordUsed,
  767.              RebuildMenu;
  768. UBYTE __far         Password[100];
  769. UBYTE __far         UserName[100];
  770. UBYTE __far         GlobalPassword[256];
  771.  
  772. UBYTE __far         CurrentBBSName[40],
  773.              CurrentBBSNumber[100],
  774.              CurrentBBSComment[100];
  775.  
  776. UBYTE __far         LastPhone[MAX_FILENAME_LENGTH];
  777. UBYTE __far         LastKeys[MAX_FILENAME_LENGTH];
  778. UBYTE __far         LastMacros[MAX_FILENAME_LENGTH];
  779. UBYTE __far         LastCursorKeys[MAX_FILENAME_LENGTH];
  780. UBYTE __far         LastTranslation[MAX_FILENAME_LENGTH];
  781. UBYTE __far         LastSpeech[MAX_FILENAME_LENGTH];
  782. UBYTE __far         LastSound[MAX_FILENAME_LENGTH];
  783.  
  784. struct MacroKeys    *MacroKeys;
  785. struct CursorKeys    *CursorKeys;
  786.  
  787.     /* Console stuff. */
  788.  
  789. UBYTE            *StripBuffer;
  790. UWORD             LastLine,LastColumn,LastPixel;
  791. BYTE             Charset,Attributes,FgPen,BgPen;
  792. WORD             CursorX,CursorY,Top,Bottom;
  793. BYTE             UseRegion,RegionSet,InSequence,Quiet,Blocking;
  794. BYTE            *TabStops;
  795. UWORD             TabStopMax;
  796. BYTE             CharMode[2];
  797.  
  798. BYTE             ResetDisplay,
  799.              DisplayReopened,
  800.              FixPubScreenMode,
  801.              FixScreenSize,
  802.              Apocalypse;
  803.  
  804. struct SignalSemaphore     TerminalSemaphore;    // Protection from shape changers
  805.  
  806.     /* Flow filter. */
  807.  
  808. STRPTR             AttentionBuffers[SCAN_COUNT];
  809. BYTE             BaudPending,FullCheck,UseFlow;
  810. UBYTE             BaudBuffer[80],BaudCount;
  811.  
  812. struct FlowInfo         FlowInfo;
  813.  
  814. STRPTR             DataHold;
  815. LONG             DataSize;
  816.  
  817.     /* Transfer data. */
  818.  
  819. BYTE             BinaryTransfer;
  820. LONG             TransferBits;
  821.  
  822. VOID            (*  ConTransfer)(STRPTR,LONG);
  823.  
  824. UBYTE            *DownloadPath;
  825. BYTE             Uploading;
  826. BYTE             DidTransfer;
  827.  
  828. struct Window        *TransferWindow,
  829.             *TransferPerfWindow;
  830. UBYTE __far         TransferTitleBuffer[256];
  831. BOOLEAN             TransferZoomed = FALSE;
  832. STRPTR             TransferWindowTitle;
  833.  
  834. struct LayoutHandle    *TransferHandle;
  835. struct Menu        *TransferMenu;
  836. struct Gadget        *TransferGadgetArray[GAD_TRANSFER_SKIP + 1];
  837. struct List         TransferInfoList;
  838.  
  839. struct FileTransferInfo    *FileTransferInfo;
  840.  
  841. struct XPR_IO        *XprIO;
  842. UBYTE __far         ProtocolOptsBuffer[256];
  843. BYTE             NewLibrary,NewOptions;
  844. BOOLEAN             XPRCommandSelected;
  845. UBYTE __far         LastXprLibrary[MAX_FILENAME_LENGTH];
  846. UBYTE __far         ConvNumber[30],ConvNumber10[30];
  847. BYTE             UsesZModem,SendAbort,TransferAborted,TransferFailed,TransferError;
  848.  
  849.     /* The standard ZModem cancel sequence
  850.      * (ten CAN chars followed by ten
  851.      * BS chars).
  852.      */
  853.  
  854. UBYTE ZModemCancel[] =
  855. {
  856.     24,24,24,24,24,24,24,24,24,24,8,8,8,8,8,8,8,8,8,8
  857. };
  858.  
  859.     /* Pay per minute. */
  860.  
  861. LONG             CurrentPay;
  862. LONG             PayPerUnit[2];
  863. LONG             SecPerUnit[2];
  864. LONG             WhichUnit;
  865. struct PhoneEntry    *ChosenEntry;
  866. BYTE             ChosenInUse;
  867. struct List        *PatternList,
  868.             *ChosenPattern;
  869. UBYTE __far         LastPattern[MAX_FILENAME_LENGTH];
  870. BYTE             PatternsChanged;
  871. struct SignalSemaphore     PatternSemaphore;
  872.  
  873.     /* Execute a command/script. */
  874.  
  875. UBYTE __far         WindowName[256];
  876.  
  877. ULONG             BlockNestCount;
  878. BYTE             WeAreBlocking;
  879.  
  880.     /* Dial list. */
  881.  
  882. struct List        *DialList;
  883. BYTE             SendStartup;
  884. LONG             FirstDialMenu;
  885. struct RexxMsg        *DialMsg;
  886.  
  887.     /* TermMain data. */
  888.  
  889. BYTE             ReleaseSerial;
  890. BYTE             ResetSerial;
  891. BYTE             MainTerminated,
  892.              IconTerminated = TRUE,
  893.              DoIconify = FALSE,
  894.              DoDial = DIAL_IGNORE,
  895.              KeepQuiet;
  896.  
  897. BYTE             ConfigChanged,PhonebookChanged,TranslationChanged,
  898.              MacroChanged,CursorKeysChanged,FastMacrosChanged,
  899.              HotkeysChanged,SpeechChanged,BufferChanged;
  900.  
  901.     /* Upload/Download paths. */
  902.  
  903. UBYTE __far         LastDownload[MAX_FILENAME_LENGTH];
  904. UBYTE __far         LastUpload[MAX_FILENAME_LENGTH];
  905.  
  906.     /* String gadget hooks. */
  907.  
  908. struct Window        *CommandWindow;
  909. struct Gadget        *CommandGadget;
  910.  
  911. BYTE             ClipInput,
  912.              ClipXerox,
  913.              ClipPrefix;
  914.  
  915.     /* Text sending. */
  916.  
  917. UBYTE __far         SendPrompt[256];
  918. LONG             SendPromptLen;
  919. BYTE            (*  SendLine)(register STRPTR,register LONG);
  920.  
  921.     /* Packet window. */
  922.  
  923. struct Window        *PacketWindow;
  924. struct Gadget        *PacketGadgetArray[2];
  925. struct Menu        *PacketMenu;
  926. struct Gadget        *PacketGadgetList;
  927. struct List         PacketHistoryList;
  928.  
  929.     /* Some more colour control flags. */
  930.  
  931. BYTE             Initializing,LoadColours;
  932.  
  933.     /* The character raster. */
  934.  
  935. UBYTE            *Raster,*RasterAttr;
  936. LONG             RasterWidth,RasterHeight;
  937. BYTE             Marking;
  938. struct SignalSemaphore    *RasterSemaphore;
  939. BYTE             RasterEnabled = TRUE;
  940.  
  941.     /* Generic lists. */
  942.  
  943. struct GenericList    *GenericListTable[GLIST_COUNT];
  944.  
  945.     /* File version test. */
  946.  
  947. ULONG VersionProps[2] =
  948. {
  949.     ID_TERM,
  950.     ID_VERS
  951. };
  952.  
  953.     /* Window stack. */
  954.  
  955. struct Window        *TopWindow;
  956.  
  957. struct Window        *WindowStack[5];
  958. WORD             WindowStackPtr;
  959.  
  960.     /* Global term ID. */
  961.  
  962. LONG             TermID;
  963. UBYTE __far         TermIDString[MAXPUBSCREENNAME + 1];
  964. UBYTE __far         RexxPortName[256];
  965.  
  966.     /* Fast! macros. */
  967.  
  968. struct List         FastMacroList;
  969. LONG             FastMacroCount;
  970. UBYTE __far         LastFastMacros[MAX_FILENAME_LENGTH];
  971. struct Window        *FastWindow;
  972. WORD             FastWindowLeft        = -1,
  973.              FastWindowTop        = -1,
  974.              FastWindowHeight    = -1;
  975.  
  976.     /* Double-buffered file locking. */
  977.  
  978. struct List         DoubleBufferList;
  979. struct SignalSemaphore     DoubleBufferSemaphore;
  980.  
  981.     /* XEM interface. */
  982.  
  983. struct XEM_IO        *XEM_IO;
  984. ULONG             XEM_Signal;
  985. struct XEmulatorHostData XEM_HostData;
  986. UBYTE            *OptionTitle;
  987. struct List         XEM_MacroList;
  988. struct XEmulatorMacroKey *XEM_MacroKeys;
  989. UBYTE __far         EmulationName[40];
  990.  
  991. struct List         EmptyList;
  992.  
  993.     /* Screen scrolling support. */
  994.  
  995. UWORD             ScrollLineFirst,ScrollLineLast,
  996.              ScrollLineCount;
  997. struct ScrollLineInfo    *ScrollLines;
  998.  
  999.     /* term review buffer. */
  1000.  
  1001. struct Window        *ReviewWindow;
  1002.  
  1003.     /* Background information. */
  1004.  
  1005. ULONG             BytesIn,
  1006.              BytesOut;
  1007. struct DateStamp     SessionStart;
  1008. struct Window        *InfoWindow;
  1009.  
  1010.     /* Gadget support routines */
  1011.  
  1012. LONG             InterWidth,
  1013.              InterHeight;
  1014.  
  1015.     /* Character translation. */
  1016.  
  1017. struct TranslationEntry    **SendTable,
  1018.             **ReceiveTable;
  1019.  
  1020.     /* Window alignment information. */
  1021.  
  1022. struct WindowInfo WindowInfoTable[] =
  1023. {
  1024.     WINDOW_PACKET,    WC_ALIGNBELOW|WC_EXPANDWIDTH,    0,0,0,0,
  1025.     WINDOW_STATUS,    WC_ALIGNRIGHT,            0,0,0,0,
  1026.     WINDOW_FILE,    NULL,                0,0,0,0,
  1027.     WINDOW_REVIEW,    WC_ALIGNTOP|WC_EXPANDWIDTH,    0,0,0,0,
  1028.     WINDOW_FAST,    WC_ALIGNTOP|WC_ALIGNSIDE,    0,0,0,0,
  1029.     WINDOW_FONT,    NULL,                0,0,0,0,
  1030.     WINDOW_SCREEN,    NULL,                0,0,0,0,
  1031.     WINDOW_PERF,    NULL,                0,0,0,0,
  1032. };
  1033.  
  1034.     /* New user interface. */
  1035.  
  1036. extern ULONG HookEntry();
  1037.  
  1038. struct Hook LocaleHook =
  1039. {
  1040.     {NULL},
  1041.     (HOOKFUNC)HookEntry,
  1042.     (HOOKFUNC)LocaleHookFunc
  1043. };
  1044.  
  1045.     /* AmigaGuide hook. */
  1046.  
  1047. struct Hook GuideHook =
  1048. {
  1049.     {NULL},
  1050.     (HOOKFUNC)GuideSetupHook
  1051. };
  1052.  
  1053.     /* Special queue management. */
  1054.  
  1055. struct MsgQueue    *SpecialQueue;
  1056.  
  1057.     /* Phonebook edit list support. */
  1058.  
  1059. STRPTR        *EditLabels;
  1060. struct List    *EditList;
  1061. struct Node    *EditNode;
  1062.  
  1063.     /* Window and Screen backfill hook. */
  1064.  
  1065. struct Hook BackfillHook =
  1066. {
  1067.     {NULL},
  1068.     (HOOKFUNC)BackfillRoutine
  1069. };
  1070.  
  1071.     /* Intercept data going through SerWrite. */
  1072.  
  1073. BOOLEAN (*SerWriteBypass)(STRPTR Buffer,LONG Size);
  1074.  
  1075.     /* The incredibly shrinking file name. */
  1076.  
  1077. UBYTE __far    ShrunkenName[MAX_FILENAME_LENGTH],
  1078.         OriginalName[MAX_FILENAME_LENGTH];
  1079.  
  1080.     /* Terminal emulation task. */
  1081.  
  1082. struct MsgQueue        *TerminalQueue;
  1083.  
  1084.     /* DNet/ParaBIT support. */
  1085. /*
  1086. struct DChannel        *NetChannel;
  1087. struct MsgPort        *NetListen;
  1088. ULONG             NetSigMask;
  1089. BOOLEAN             NetTerminated;
  1090. */
  1091.  
  1092.     /* AppIcon data. */
  1093.  
  1094. STATIC UWORD DropData[304] =
  1095. {
  1096.     0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1097.     0x0000,0x0000,0x2000,0x1000,0x0000,0x0000,0xF000,0x1000,
  1098.     0x0000,0x0001,0x9800,0x1000,0x0000,0x0003,0x1C3E,0x1000,
  1099.     0x0000,0x0003,0xFC30,0x1000,0x0000,0x0000,0x01FF,0x1000,
  1100.     0x0000,0x0000,0x01FC,0x1000,0x0000,0x0060,0x0000,0x1000,
  1101.     0x0000,0x001F,0xFFFF,0xF000,0x0000,0x0000,0x0000,0x0000,
  1102.     0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0700,0x0000,
  1103.     0x07FF,0xFFFE,0x0700,0x0000,0x07FF,0xFFEE,0x0700,0x0000,
  1104.     0x0755,0x555E,0x0700,0x0000,0x07AA,0xAAAE,0x1FC0,0x0000,
  1105.     0x0755,0x555E,0x0F80,0x0000,0x07AA,0xAAAE,0x0700,0x0000,
  1106.     0x0755,0x555E,0x0200,0x0000,0x07AA,0xAAAE,0x0000,0x0000,
  1107.     0x0755,0x555E,0x0000,0x0000,0x07FF,0xFFFE,0x0000,0x0000,
  1108.     0x07FF,0xFFFE,0x0000,0x0000,0x07FF,0xFFFC,0x0000,0x0000,
  1109.     0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFF,0xE000,0x0000,
  1110.     0x7FFF,0xFEFF,0xE000,0x0000,0x7FFF,0xFEF0,0x0000,0x0000,
  1111.     0x7FE5,0x54E7,0xFF80,0x0000,0x7FFF,0xFF8E,0x0FC0,0x0000,
  1112.     0x7FFF,0xFFBD,0xFCF0,0x0000,0x0FFF,0xFFFF,0xFEE0,0x0000,
  1113.     0x0FFF,0xFFFB,0xD700,0x0000,0x0000,0x0007,0xAF80,0x0000,
  1114.     0x0000,0x000F,0xFF80,0x0000,0x0000,0x0007,0xFF00,0x0000,
  1115.  
  1116.     0x0000,0x007F,0xFFFE,0x0000,0x0000,0x007F,0xFFFF,0x8000,
  1117.     0x0000,0x0060,0x20FF,0xE000,0x0000,0x0060,0xF0FF,0xE000,
  1118.     0x0000,0x0061,0x98FF,0xE000,0x0000,0x0063,0x1CBF,0xE000,
  1119.     0x0000,0x0063,0xFCB7,0xE000,0x0000,0x007F,0xFDFF,0xE000,
  1120.     0x0000,0x007F,0xFDFF,0xE000,0x0000,0x007F,0xFFFF,0xE000,
  1121.     0x0000,0x001F,0xFFFF,0xE000,0x0000,0x0000,0x0000,0x0000,
  1122.     0x0000,0x0000,0x0000,0x0000,0x07FF,0xFFFC,0x0000,0x0000,
  1123.     0x0FFF,0xFFFC,0x0000,0x0000,0x0EAA,0xAABC,0x0000,0x0000,
  1124.     0x0F55,0x555C,0x0000,0x0000,0x0EAA,0xAABC,0x0000,0x0000,
  1125.     0x0F55,0x555C,0x0000,0x0000,0x0EAA,0xAABC,0x0000,0x0000,
  1126.     0x0F55,0x555C,0x0000,0x0000,0x0EAA,0xAABC,0x0000,0x0000,
  1127.     0x0FFF,0xFFFC,0x0000,0x0000,0x0FFF,0xFFFC,0x0000,0x0000,
  1128.     0x0FFF,0xFFFC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1129.     0x7FFF,0xFFFF,0xC000,0x0000,0xFFFF,0xFFFF,0xC000,0x0000,
  1130.     0xFFEA,0xABFF,0xC000,0x0000,0xFFE0,0x03FF,0xFF00,0x0000,
  1131.     0xFFFF,0xFFFF,0xFFC0,0x0000,0xFFFF,0xFFFF,0xF9E0,0x0000,
  1132.     0x0000,0x007F,0xFDE0,0x0000,0x1FFF,0xFFC7,0xAF00,0x0000,
  1133.     0x0000,0x0007,0x5F00,0x0000,0x0000,0x000F,0xFF80,0x0000,
  1134.     0x0000,0x001F,0xFF00,0x0000,0x0000,0x0000,0x0000,0x0000
  1135. };
  1136.  
  1137. STATIC struct Image DropImage =
  1138. {
  1139.     0,0,
  1140.     52,38,2,
  1141.     DropData,
  1142.     0x03,0x00,
  1143.     NULL
  1144. };
  1145.  
  1146. struct DiskObject DropIcon =
  1147. {
  1148.     WB_DISKMAGIC,
  1149.     WB_DISKVERSION,
  1150.  
  1151.     NULL,
  1152.     175,18,
  1153.     52,39,
  1154.     0x0005,
  1155.     0x0003,
  1156.     0x0001,
  1157.     &DropImage,
  1158.     NULL,
  1159.     NULL,
  1160.     NULL,
  1161.     NULL,
  1162.     NULL,
  1163.     NULL,
  1164.  
  1165.     WBTOOL,
  1166.     NULL,
  1167.     NULL,
  1168.     NO_ICON_POSITION,
  1169.     NO_ICON_POSITION,
  1170.     NULL,
  1171.     NULL,
  1172.     8192
  1173. };
  1174.  
  1175.     /* Remember some of the incoming data. */
  1176.  
  1177. BOOL    RememberOutput,
  1178.     RememberInput,
  1179.  
  1180.     Recording,
  1181.     RecordingLine;
  1182.  
  1183.     /* Trap settings. */
  1184.  
  1185. BOOLEAN        WatchTraps;
  1186. BOOLEAN        TrapsChanged;
  1187. UBYTE        LastTraps[MAX_FILENAME_LENGTH];
  1188.  
  1189.     /* CR/LF receiver translation data. */
  1190.  
  1191. LONG        (* __regargs Translate_CR_LF)(register STRPTR Data,register LONG Size);
  1192.  
  1193.     /* End of line conversion labels. */
  1194.  
  1195. STRPTR EOL_Labels[] =
  1196. {
  1197.     "-",
  1198.     "«CR»",
  1199.     "«LF»",
  1200.     "«CR»«LF»",
  1201.     "«LF»«CR»",
  1202.  
  1203.     NULL
  1204. };
  1205.