/* $Revision Header * Header built automatically - do not edit! *************
 *
 *	(C) Copyright 1991 by Olaf 'Olsen' Barthel & MXM
 *
 *	Name .....: TermData.c
 *	Created ..: Monday 21-Jan-91 20:12
 *	Revision .: 0
 *
 *	Date            Author          Comment
 *	=========       ========        ====================
 *	21-Jan-91       Olsen           Created this file!
 *
 * $Revision Header ********************************************************/

#include "TermGlobal.h"

	/* Libraries. */

struct ExecBase		*SysBase;
struct DosLibrary	*DOSBase;

struct IntuitionBase	*IntuitionBase;
struct GfxBase		*GfxBase;
struct Library		*GadToolsBase;
struct Library		*DiskfontBase;
struct Library		*UtilityBase;
struct Device		*TimerBase;
struct Library		*AslBase;
struct RxsLib		*RexxSysBase;
struct Library		*IFFParseBase;
struct Library		*CxBase;
struct Library		*LayersBase;
struct Library		*IconBase;
struct Library		*WorkbenchBase;
struct Library		*KeymapBase;

	/* Timer device. */

struct timerequest	*TimeRequest;

	/* Console device. */

struct IOStdReq		*ConsoleRequest;
struct Device		*ConsoleDevice;

	/* Screen & Windows. */

struct Screen		*Screen;
struct Window		*Window;
struct Window		*StatusWindow;
APTR			 OldWindowPtr;

	/* Graphics rendering. */

struct ViewPort		*VPort;
struct RastPort		*RPort;
struct TextFont		*Topaz,
			*IBM,
			*GFX,
			*CurrentFont;
APTR			 VisualInfo;

UWORD ANSIPens[NUMDRIPENS + 1] =
{
	0,4,4,7,4,6,4,0,7,~0
};

UWORD EGAPens[NUMDRIPENS + 1] =
{
	0,8,8,15,8,7,8,0,15,~0
};

UWORD AtomicColours[16] =
{
	0x000,
	0xDDD,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000,
	0x000
};

UWORD EGAColours[16] =
{
	0x000,	/* Black. */
	0xA00,	/* Dark red. */
	0x0A0,	/* Dark green. */
	0xA60,	/* Dark yellow (orange). */
	0x00A,	/* Dark blue. */
	0xA0A,	/* Dark magenta.*/
	0x0AA,	/* Dark cyan. */
	0xBBB,	/* Light grey. */
	0x666,	/* Dark grey. */
	0xF00,	/* Red. */
	0x0F0,	/* Green. */
	0xFF0,	/* Yellow. */
	0x00F,	/* Blue. */
	0xF0F,	/* Magenta. */
	0x0FF,	/* Cyan. */
	0xFFF	/* White. */
};

UWORD ANSIColours[16] =
{
	0x000,	/* Black. */
	0xF00,	/* Red. */
	0x0F0,	/* Green. */
	0xFF0,	/* Yellow. */
	0x00F,	/* Blue. */
	0xF0F,	/* Magenta. */
	0x0FF,	/* Cyan. */
	0xFFF,	/* White. */

	0x000,	/* Black. */
	0xF00,	/* Red. */
	0x0F0,	/* Green. */
	0xFF0,	/* Yellow. */
	0x00F,	/* Blue. */
	0xF0F,	/* Magenta. */
	0x0FF,	/* Cyan. */
	0xFFF	/* White. */
};

UWORD			 DefaultColours[16],BlinkColours[16],StandardColours[16];

	/* DOS data. */

struct Process		*ThisProcess;
struct Task		*StatusTask;
struct Process		*BufferProcess;
struct Process		*RexxProcess;
struct MsgPort		*TermRexxPort;
struct WBStartup	*WBenchMsg;
struct TermPort		*TermPort;
BPTR			 RemoteCurrentDir;

	/* Character conversion. */

struct InputEvent	*FakeInputEvent;

	/* Serial I/O. */

struct IOExtSer		*ReadRequest;
struct IOExtSer		*WriteRequest;
struct MsgPort		*ReadPort;
APTR			 ReadBuffer;

	/* Hotkeys. */

struct Hotkeys		 Hotkeys;

struct NewBroker NewTermBroker =
{
	NB_VERSION,
	"term",
	"term © 1990,91 by MXM",
	"Terminal program",
	0,0,0,NULL,0
};

	/* Static default fonts. */

struct TextAttr DefaultFont =
{
	(UBYTE *)"topaz.font",
	8,
	FS_NORMAL,
	FPF_ROMFONT
};

struct TextAttr IBMFont =
{
	(UBYTE *)"IBM.font",
	8,
	FS_NORMAL,
	FPF_DISKFONT
};

struct TextAttr GFXFont =
{
	(UBYTE *)"GFX.font",
	8,
	FS_NORMAL,
	FPF_DISKFONT
};

	/* Audio data. */

UBYTE AnyChannel[4] =
{
	LEFT0F,
	LEFT1F,
	RIGHT0F,
	RIGHT1F,
};

UBYTE __chip SineWave[8] =
{
	90,
	127,
	90,
	0,
	-90,
	-127,
	-90,
	0
};

struct IOAudio	*AudioBlock;

	/* Character lookup tables. */

BYTE ValidTab[256] =
{
	0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
	0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
};

	/* IBM <-> Amiga/DEC font conversion. */

UBYTE IBMConversion[256] =
{
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x00,0x00,
	0x00,0x11,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0x00,
	0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
	0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
	0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
	0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
	0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
	0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0xAD,0x9B,0x9C,0x00,0x9D,0x00,0x15,0x00,0x00,0xA6,0x00,0x00,0x00,0xAE,0x00,
	0xF8,0xF1,0xFD,0x00,0x00,0xE6,0x14,0xF9,0x00,0x00,0xA7,0xAF,0xAC,0xAB,0x00,0xA8,
	0x00,0x00,0x00,0x00,0x8E,0x8F,0x92,0x80,0x00,0x90,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0xA5,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,0x9A,0x00,0x00,0xE1,
	0x85,0xA0,0x83,0x00,0x84,0x86,0x91,0x87,0x8A,0x82,0x88,0x89,0x8D,0xA1,0x8C,0x00,
	0x00,0xA4,0x95,0xA2,0x93,0x00,0x94,0x00,0x00,0x97,0xA3,0x96,0x81,0x00,0x00,0x98
};

	/* Special character treatment. */

struct SpecialKey SpecialKeys[SPECIALKEYS] =
{
	BEL,	DoSomeBeep,	/* Ring the bell. */
	XON,	XOn,		/* Flow control - stop output. */
	BKS,	DoBackspace,	/* Erase a character. */
	ENT,	DoLF_FF_VT,	/* Enter key. */
	FFD,	DoFF,		/* Form feed. */
	VTB,	DoLF_FF_VT,	/* Vertical tab (huh?). */
	RET,	DoCR,		/* Return key. */
	TAB,	DoTab,		/* Move to next tab stop. */
	'\16',	DoShiftIn,	/* ^N Change to graphics mode */
	'\17',	DoShiftOut,	/* ^O Change out of graphics mode. */
	'\30',	DoCancel,	/* Cancel ESC sequence. */
	'\32',	DoCancel	/* Cancel ESC sequence. */
};

UBYTE SpecialMap[256];

	/* Shared global string formatting buffer. */

UBYTE SharedBuffer[512];

	/* Screen pull-down-menu. */

struct NewMenu TermMenu[] =
{
	{ NM_TITLE, "Project",				 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Open Preferences...",		"O", 0, 0, (APTR)MEN_OPEN},
	{  NM_ITEM, "Save Preferences",			 0 , 0, 0, (APTR)MEN_SAVE},
	{  NM_ITEM, "Save Preferences As...",		"S", 0, 0, (APTR)MEN_SAVEAS},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Print Screen",			"P", 0, 0, (APTR)MEN_PRINTSCREEN},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Iconify",				"I", 0, 0, (APTR)MEN_ICONIFY},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "About...",				"?", 0, 0, (APTR)MEN_ABOUT},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Quit...",				"Q", 0, 0, (APTR)MEN_QUIT},

	{ NM_TITLE, "Utilities",			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Set Console Window...",		"W", 0, 0, (APTR)MEN_SETCONSOLE},
	{  NM_ITEM, "Execute AmigaDOS Command...",	"A", 0, 0, (APTR)MEN_DOSCOMMAND},
	{  NM_ITEM, "Execute ARexx Command...",		"R", 0, 0, (APTR)MEN_REXXCOMMAND},
	{  NM_ITEM, "Edit File...",			".", 0, 0, (APTR)MEN_EDIT},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Paste Clipboard Contents",		"V", 0, 0, (APTR)MEN_PASTE},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Packet Window...",			"-", 0, 0, (APTR)MEN_PACKET},

	{ NM_TITLE, "Capture & Buffer",			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Clear Buffer",			"K", 0, 0, (APTR)MEN_CLEARBUFFER},
	{  NM_ITEM, "Display Buffer...",		"B", 0, 0, (APTR)MEN_DISPLAYBUFFER},
	{  NM_ITEM, "Close Buffer",			"J", 0, 0, (APTR)MEN_CLOSEBUFFER},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Load Buffer...",			"(", 0, 0, (APTR)MEN_LOADBUFFER},
	{  NM_ITEM, "Save Buffer...",			")", 0, 0, (APTR)MEN_SAVEBUFFER},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Capture To Disk...",		"[", CHECKIT|MENUTOGGLE, 0, (APTR)MEN_CAPTUREDISK},
	{  NM_ITEM, "Capture To Printer",		"]", CHECKIT|MENUTOGGLE, 0, (APTR)MEN_CAPTUREPRINTER},

	{ NM_TITLE, "Transfer",				 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Upload Text...",			"T", 0, 0, (APTR)MEN_UPLOADTEXT},
	{  NM_ITEM, "Download Text...",			"G", 0, 0, (APTR)MEN_DOWNLOADTEXT},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Upload ASCII...",			">", 0, 0, (APTR)MEN_SEND},
	{  NM_ITEM, "Download ASCII...",		"<", 0, 0, (APTR)MEN_RECEIVE},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Upload Files(s)...",		"U", 0, 0, (APTR)MEN_UPLOAD},
	{  NM_ITEM, "Download File(s)...",		"D", 0, 0, (APTR)MEN_DOWNLOAD},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Transfer Options...",		"7", 0, 0, (APTR)MEN_XFERPROTOCOL},
	{  NM_ITEM, "Select Transfer Protocol...",	"8", 0, 0, (APTR)MEN_SELECTXFER},

	{ NM_TITLE, "Modem",				 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Phonebook...",			"F", 0, 0, (APTR)MEN_PHONEBOOK},
	{  NM_ITEM, "Dial...",				"L", 0, 0, (APTR)MEN_DIAL},
	{  NM_ITEM, "Redial...",			"E", 0, 0, (APTR)MEN_REDIAL},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Play Number...",			":", 0, 0, (APTR)MEN_PLAY},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Send Break",			"X", 0, 0, (APTR)MEN_SENDBREAK},
	{  NM_ITEM, "Hang Up",				"H", 0, 0, (APTR)MEN_HANGUP},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Release Serial Device...",		"Z", 0, 0, (APTR)MEN_RELEASE},

	{ NM_TITLE, "Display",				 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Reset Styles",			"Y", 0, 0, (APTR)MEN_RESETSTYLES},
	{  NM_ITEM, "Clear Screen",			"C", 0, 0, (APTR)MEN_CLEARSCREEN},
	{  NM_ITEM, "Reset Terminal",			"\\", 0, 0, (APTR)MEN_RESETTERMINAL},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Save Screen (IFF-ILBM)...",	 0 , 0, 0, (APTR)MEN_SAVEILBM},
	{  NM_ITEM, "Save Screen (ASCII)...",		 0 , 0, 0, (APTR)MEN_SAVEASCII},

	{ NM_TITLE, "Preferences",			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Serial...",			"1", 0, 0, (APTR)MEN_SERIAL},
	{  NM_ITEM, "Modem...",				"2", 0, 0, (APTR)MEN_MODEM},
	{  NM_ITEM, "Screen...",			"3", 0, 0, (APTR)MEN_SCREEN},
	{  NM_ITEM, "Terminal...",			"4", 0, 0, (APTR)MEN_TERMINAL},
	{  NM_ITEM, "Startup...",			"5", 0, 0, (APTR)MEN_STARTUP},
	{  NM_ITEM, "Paths...",				"6", 0, 0, (APTR)MEN_PATH},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Keyboard Macros...",		"M", 0, 0, (APTR)MEN_MACROS},
	{  NM_ITEM, "Fast! Macros...",			"!", 0, 0, (APTR)MEN_FASTMACROS},
	{  NM_ITEM, "Hotkeys...",			"+", 0, 0, (APTR)MEN_HOTKEYS},
	{  NM_ITEM, "Speech...",			"*", 0, 0, (APTR)MEN_SPEECH},
	{  NM_ITEM, NM_BARLABEL,			 0 , 0, 0, (APTR)0},
	{  NM_ITEM, "Emulation...",			"9", 0, 0, (APTR)MEN_EMULATION},
	{   NM_END, 0,					 0 , 0, 0, (APTR)0},
};

struct Menu		*Menu;

	/* Pointer. */

UWORD __chip Stopwatch[(2 + 16) * 2] =
{
	0x0000,0x0000,

	0x0400,0x07C0,
	0x0000,0x07C0,
	0x0100,0x0380,
	0x0000,0x07E0,
	0x07C0,0x1FF8,
	0x1FF0,0x3FEC,
	0x3FF8,0x7FDE,
	0x3FF8,0x7FBE,
	0x7FFC,0xFF7F,
	0x7EFC,0xFFFF,
	0x7FFC,0xFFFF,
	0x3FF8,0x7FFE,
	0x3FF8,0x7FFE,
	0x1FF0,0x3FFC,
	0x07C0,0x1FF8,
	0x0000,0x07E0,

	0x0000,0x0000
};

	/* Configuration. */

struct Configuration	 Config;
struct Configuration	 PrivateConfig;
struct SpeechConfig	 SpeechConfig;
BYTE			 Status;
BYTE			 Online;
UWORD			 PublicModes;

UBYTE			 LastConfig[256];
UBYTE			 DefaultPubScreen[MAXPUBSCREENNAME];

	/* These are the sixteen more or less different display modes the
	 * term main and buffer display screens will be opened in.
	 */

ULONG ModeID[16] =
{
	DEFAULT_MONITOR_ID|HIRES_KEY,
	DEFAULT_MONITOR_ID|HIRESLACE_KEY,
	DEFAULT_MONITOR_ID|SUPER_KEY,
	DEFAULT_MONITOR_ID|SUPERLACE_KEY,
	DEFAULT_MONITOR_ID|VGAPRODUCT_KEY,
	DEFAULT_MONITOR_ID|VGAPRODUCTLACE_KEY,

	PAL_MONITOR_ID|HIRES_KEY,
	PAL_MONITOR_ID|HIRESLACE_KEY,
	PAL_MONITOR_ID|SUPER_KEY,
	PAL_MONITOR_ID|SUPERLACE_KEY,

	NTSC_MONITOR_ID|HIRES_KEY,
	NTSC_MONITOR_ID|HIRESLACE_KEY,
	NTSC_MONITOR_ID|SUPER_KEY,
	NTSC_MONITOR_ID|SUPERLACE_KEY,

	A2024TENHERTZ_KEY,
	A2024FIFTEENHERTZ_KEY
};

	/* Capture file. */

struct Buffer		*FileCapture;
BPTR			 PrinterCapture;
UBYTE			 CaptureName[256];

	/* Buffer. */

UBYTE			**BufferLines;
LONG			 Lines;
struct SignalSemaphore	*BufferSemaphore;
LONG			 MaxLines = 100;
LONG			 BufferSpace;
BYTE			 BufferClosed = FALSE;

	/* Phonebook. */

struct PhoneEntry	**Phonebook;
LONG			 PhoneSize;

LONG			 NumPhoneEntries;

UBYTE			 LastPhone[256];
UBYTE			 LastKeys[256];
UBYTE			 LastMacros[256];
UBYTE			 LastSpeech[256];

struct MacroKeys	*MacroKeys;

	/* Console stuff. */

UWORD			 LastLine,LastColumn;
BYTE			 Charset,Attributes,FgPen,BgPen;
WORD			 CursorX,CursorY,Top,Bottom;
BYTE			 UseRegion,RegionSet,InSequence,Quiet;
BYTE			 TabStops[1024];

struct CursorData	 CursorBackup;

BYTE			 ResetDisplay = FALSE,Escape = FALSE;

	/* Flow filter. */

UBYTE			*AttentionBuffers[7],AttentionCount[7],FlowCount;
BYTE			 BaudPending,FullCheck;
UBYTE			 BaudBuffer[20],BaudCount;

struct FlowInfo		 FlowInfo;

	/* Transfer data. */

LONG			 FileCount,FileCountMax;
struct WBArg		*FileArg;
BYTE			 MultipleFiles,FileMatch,BinaryTransfer;
struct AnchorPath	*FileAnchor;
LONG			 TransferBits;

UBYTE			*DownloadPath;
BYTE			 Uploading;

struct Window		*TransferWindow;
struct Menu		*TransferMenu;
struct Gadget		*TransferGadgetArray[5];

struct Library		*XProtocolBase;
struct XPR_IO		*XprIO;

UBYTE			 ProtocolOptsBuffer[256];
BYTE			 NewLibrary,NewOptions;
UBYTE			 LastXprLibrary[60];
BYTE			 UsesZModem;

	/* Pay per minute. */

LONG			 CurrentPay;
LONG			 PayPerUnit[2];
LONG			 SecPerUnit[2];
LONG			 TimeOfDay[2];
WORD			 PreferredTime;
UBYTE			 Password[40];

	/* Execute a command/script. */

UBYTE			 WindowName[256];

	/* Rexx server info. */

BYTE			 WeAreBlocking;

	/* "Sub" Dial panel. */

struct List		*SubList;
LONG			 SubItemNum;
struct Window		*SubWindow;
LONG			 SubListNum;

BYTE			 SendStartup;

	/* TermMain data. */

BYTE			 ReleaseSerial;
BYTE			 ResetSerial;
BYTE			 BatchMode;

	/* Upload/Download paths. */

UBYTE			 LastDownload[256];
UBYTE			 LastUpload[256];

	/* String gadgets hooks. */

struct Hook		 CommandHook;
BYTE			 DontActivate;

struct Window		*CommandWindow;
struct Gadget		*CommandGadget;
struct Gadget		*ActiveGadget;

struct Process		*ClipProcess;
struct MsgPort		*ClipPort;

	/* Packet window. */

struct Window		*PacketWindow;
struct Gadget		*PacketGadgetArray[1];
struct Menu		*PacketMenu;
struct Gadget		*PacketGadgetList;
struct List		 PacketHistoryList;

	/* Some more colour control flags. */

BYTE			 Initializing,LoadColours;

	/* The character raster. */

UBYTE			*Raster,*RasterAttr;
WORD			 RasterWidth,RasterHeight;

	/* File download tracking. */

struct SignalSemaphore	*DownloadSemaphore;
struct List		 DownloadList;
LONG			 DownloadLineCount;
struct Node		*DownloadNode;

	/* Rexx scanning sequences. */

struct List		 SequenceList;
LONG			 SequenceCount;

	/* File version test. */

ULONG VersionProps[2] =
{
	'TERM',
	'VERS'
};

	/* Cause a rexx command to terminate without waiting. */

BYTE			 ExitQuietly;

	/* The ARexx output window. */

struct Window		*RexxWindow;

	/* Window stack. */

struct Window		*TopWindow;

struct Window		*WindowStack[5];
WORD			 WindowStackPtr;

	/* Global term ID. */

LONG			 TermID;
UBYTE			 TermIDString[40];

	/* Fast! macros. */

struct List		 FastMacroList;
LONG			 FastMacroCount;
UBYTE			 LastFastMacros[256];
struct Window		*FastWindow;
struct Gadget		*FastGadget;

	/* Double-buffered file locking. */

struct List		 DoubleBufferList;
struct SignalSemaphore	 DoubleBufferSemaphore;

	/* XEM interface. */

struct confuncs		*Console;
ULONG			 ExtSigs;
UBYTE			*OptionTitle;
BYTE			 NewEmulatorPlease;
BYTE			 EmulationSetupError;

UBYTE *EmulationErrorStrings[8] =
{
	"Failed to load emulation module",
	"Failed to create handshake port",
	"Failed to create emulation process",
	"Emulation module did not respond to handshake",
	"Emulation module does not match current interface revision",
	"Emulation module failed initialization",
	"Failed to allocate emulation resources",
	"Failed to create window console"
};
