/*
**	$Id: termGlobal.h,v 1.16 92/08/18 16:12:19 olsen Sta Locker: olsen $
**	$Revision: 1.16 $
**	$Date: 92/08/18 16:12:19 $
**
**	Global data definitions and function forward declarations
**
**	Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
**		All Rights Reserved
*/

#include "xproto.h"
#include "xem.h"

	/* Jump table entry. */

typedef BYTE (* __regargs JUMP)(UBYTE Char);

	/* Menu item codes. */

enum	{	MEN_SAVE_AS_PICTURE=1,MEN_SAVE_AS_TEXT,MEN_PRINT_SCREEN,MEN_PRINT_CLIP,MEN_CAPTURE_TO_FILE,
		MEN_CAPTURE_TO_PRINTER,MEN_ICONIFY,MEN_ABOUT,MEN_QUIT,

		MEN_PASTE,

		MEN_EXECUTE_DOS_COMMAND,MEN_EXECUTE_REXX_COMMAND,MEN_SET_CONSOLE,

		MEN_PHONEBOOK,MEN_REDIAL,MEN_DIAL_NUMBER,MEN_PLAY_NUMBER,MEN_SEND_BREAK,
		MEN_HANG_UP,MEN_FLUSH_BUFFER,MEN_RELEASE_DEVICE,

		MEN_UPLOAD_ASCII,MEN_DOWNLOAD_ASCII,MEN_UPLOAD_TEXT,MEN_DOWNLOAD_TEXT,MEN_EDIT_AND_UPLOAD_TEXT,
		MEN_UPLOAD_BINARY,MEN_DOWNLOAD_BINARY,

		MEN_CLEAR_BUFFER,MEN_DISPLAY_BUFFER,MEN_CLOSE_BUFFER,MEN_FREEZE_BUFFER,MEN_OPEN_BUFFER,
		MEN_SAVE_BUFFER_AS,

		MEN_CLEAR_SCREEN,MEN_RESET_FONT,MEN_RESET_STYLES,MEN_RESET_TERMINAL,MEN_SET_EMULATION,

		MEN_SERIAL,MEN_MODEM,MEN_SCREEN,MEN_TERMINAL,MEN_COMMANDS,
		MEN_MISC,MEN_PATH,MEN_TRANSFER_PROTOCOL,MEN_TRANSFER,MEN_MACROS,
		MEN_FAST_MACROS,MEN_HOTKEYS,MEN_SPEECH,MEN_OPEN_SETTINGS,MEN_SAVE_SETTINGS,
		MEN_SAVE_SETTINGS_AS,

		MEN_STATUS_WINDOW,MEN_REVIEW_WINDOW,MEN_PACKET_WINDOW,MEN_FAST_MACROS_WINDOW };


	/* Serial settings. */

enum	{	PARITY_NONE,PARITY_EVEN,PARITY_ODD,PARITY_MARK,PARITY_SPACE };
enum	{	HANDSHAKING_NONE,HANDSHAKING_RTSCTS,HANDSHAKING_RTSCTS_DSR };
enum	{	DUPLEX_FULL,DUPLEX_HALF };
enum	{	FLOW_NONE,FLOW_XON_XOFF };

	/* Terminal settings. */

enum	{	CR_IGNORE,CR_ASCR,CR_ASCRLF };
enum	{	LF_IGNORE,LF_ASLF,LF_ASLFCR };
enum	{	EMULATION_ANSIVT100,EMULATION_ATOMIC,EMULATION_TTY,EMULATION_EXTERNAL };
enum	{	COLOUR_AMIGA,COLOUR_EIGHT,COLOUR_SIXTEEN,COLOUR_MONO };

	/* Protocol types. */

enum	{	PROTOCOL_XMODEM,PROTOCOL_XMODEMCRC,PROTOCOL_YMODEM,PROTOCOL_ZMODEM };

	/* Font types. */

enum	{	FONT_TOPAZ,FONT_IBM };

	/* Status types. */

enum	{	STATUS_READY,STATUS_HOLDING,STATUS_DIALING,STATUS_UPLOAD,
		STATUS_DOWNLOAD,STATUS_BREAKING,STATUS_HANGUP };

	/* Status line modes. */

enum	{	STATUSLINE_DISABLED,STATUSLINE_STANDARD,STATUSLINE_COMPRESSED };

	/* Font scales. */

enum	{	SCALE_NORMAL,SCALE_HALF };
enum	{	SCALE_ATTR_NORMAL,SCALE_ATTR_TOP2X,SCALE_ATTR_BOT2X,SCALE_ATTR_2X };

	/* Character tables. */

enum	{	TABLE_ASCII,TABLE_GFX };

	/* Transfer types. */

enum	{	TRANSFER_BINARY,TRANSFER_TEXT,TRANSFER_ASCII };

	/* Upload panel actions. */

enum	{	UPLOAD_TEXT=1,UPLOAD_BINARY,UPLOAD_IGNORE,UPLOAD_ABORT };

	/* Alert types. */

enum	{	ALERT_NONE,ALERT_BEEP,ALERT_SCREEN,ALERT_BEEP_SCREEN };

	/* Clipboard read errors. */

enum	{	CLIPERR_NONE,CLIPERR_NOTEXT,CLIPERR_IFF,CLIPERR_OPEN,CLIPERR_MEM };

	/* What to print. */

enum	{	PRINT_SCREEN,PRINT_CLIP };

	/* Transfer window boxes and gadgets. */

enum	{	BOX_TRANSFER_1,BOX_TRANSFER_2,BOX_TRANSFER_3,
		BOX_TRANSFER_LEFT1,BOX_TRANSFER_RIGHT1,
		BOX_TRANSFER_LEFT2,BOX_TRANSFER_RIGHT2 };

enum	{	GAD_TRANSFER_ERROR_LIST,
		GAD_TRANSFER_PERCENT,GAD_TRANSFER_TIME,
		GAD_TRANSFER_ABORT,GAD_TRANSFER_SKIP };

	/* Day of week flags. */

#define DAY_MONDAY	(1 << 0)
#define DAY_TUESDAY	(1 << 1)
#define DAY_WEDNESDAY	(1 << 2)
#define DAY_THURSDAY	(1 << 3)
#define DAY_FRIDAY	(1 << 4)
#define DAY_SATURDAY	(1 << 5)
#define DAY_SUNDAY	(1 << 6)

	/* These signal masks will make life a bit easier. */

#define SIG_WINDOW	(1 << Window -> UserPort -> mp_SigBit)
#define SIG_REXX	(1 << TermRexxPort -> mp_SigBit)
#define SIG_SERIAL	(1 << ReadPort -> mp_SigBit)
#define SIG_PACKET	(1 << PacketWindow -> UserPort -> mp_SigBit)
#define SIG_TIMER	(1 << TimePort -> mp_SigBit)
#define SIG_AUDIO	(1 << AudioBlock -> ioa_Request . io_Message . mn_ReplyPort -> mp_SigBit)
#define SIG_REVIEW	((1 << ReviewPort -> mp_SigBit) | (1 << ReviewWindow -> UserPort -> mp_SigBit))
#define SIG_CLIP	(1 << ClipBit)
#define SIG_CHECK	(1 << CheckBit)

	/* Some support macros for gadtools objects. */

#define GT_CHECKED(G)	((((struct Gadget *)(G)) -> Flags & GFLG_SELECTED) ? TRUE : FALSE)
#define GT_DISABLED(G)	((((struct Gadget *)(G)) -> Flags & GFLG_DISABLED) ? TRUE : FALSE)
#define GT_STRING(G)	(((struct StringInfo *)(((struct Gadget *)(G)) -> SpecialInfo)) -> Buffer)
#define GT_INTEGER(G)	(((struct StringInfo *)(((struct Gadget *)(G)) -> SpecialInfo)) -> LongInt)

	/* Definitions to access the line signal setting functions supported by
	 * some IO serial boards (namely the ASDG board).
	 */

#define SIOCMD_SETCTRLLINES	(CMD_NONSTD + 7)
#define SIOB_RTSB		0
#define SIOB_DTRB		1
#define SIOB_RTSF		(1 << SIOB_RTSB)
#define SIOB_DTRF		(1 << SIOB_DTRB)

	/* Kludge: this bit indicates that the shared serial access is enabled. */

#define SERIAL_SHARED		2

	/* YAK (Yet Another Kludge): this bit indicates that a somewhat simpler
	 * and faster screen layout is to be used.
	 */

#define TERMINAL_FASTER		2

	/* Turn time of day into `compressed' format. */

#define DT_GET_TIME(Hour,Minute) ((Minute) / 10 + (Hour) * 6)

	/* Vector offsets for the TimeDate structure. */

enum	{ DT_FIRST_UNIT,DT_NEXT_UNIT };

	/* A handy and short alias. */

#define TICK			(CHECKIT|MENUTOGGLE)

	/* User interface definitions. */

#define SZLV_Display	1		/* Listview includes display */
#define SZLV_String	2		/* Listview includes string */

#define SZ_Adjust	TAG_USER+1	/* Adjust object */
#define SZ_AutoWidth	TAG_USER+2	/* Use default width? */
#define SZ_AlignExtra	TAG_USER+3	/* Add extra space to top edge */
#define SZ_NewColumn	TAG_USER+4	/* Start new column */
#define SZ_Lines	TAG_USER+5	/* Number of lines in object */
#define SZ_Chars	TAG_USER+6	/* Number of chars (width) in object */
#define SZ_AlignLeft	TAG_USER+7	/* Align to left border */
#define SZ_AlignRight	TAG_USER+8	/* Align to right border */
#define SZ_AlignCentre	TAG_USER+9	/* Centre it */
#define SZ_AlignBottom	TAG_USER+10	/* Align to window bottom */
#define SZ_GroupCount	TAG_USER+11	/* Create a group with N objects */
#define SZ_GroupNext	TAG_USER+12	/* Skip to next position */
#define SZ_SetLeft	TAG_USER+13	/* Place left to current object, don't touch the left edge position, though. */
#define SZ_SetBelow	TAG_USER+14	/* Place below current object, don't touch the top edge position, though. */
#define SZ_UseLeft	TAG_USER+15	/* Use this coordinate as left edge. */
#define SZ_UseTop	TAG_USER+16	/* Use this coordinate as top edge. */
#define SZ_UseWidth	TAG_USER+17	/* Use this gadget width. */
#define SZ_UseHeight	TAG_USER+18	/* Use this gadget height. */
#define SZ_FullWidth	TAG_USER+19	/* Use full window width for gadget. */
#define SZ_FullHeight	TAG_USER+20	/* Use full window height for gadget. */

	/* Special character treatment. */

struct SpecialKey
{
	UBYTE	Key;
	BYTE	(* Routine)(VOID);
};

	/* Cursor backup data. */

struct CursorData
{
	struct TextFont		*CurrentFont;
	WORD			 CursorX,
				 CursorY;
	BYTE			 Charset;
	BYTE			 CharMode[2];
	BYTE			 Attributes;
	BYTE			 FgPen,
				 BgPen;
	UBYTE			 Style;
};

	/* Global data link. */

struct TermPort
{
	struct MsgPort		 ExecNode;

	struct Window		*TopWindow;

	struct SignalSemaphore	 OpenSemaphore;

	LONG			 ID,OpenCount,HoldIt;
	LONG			 Reserved[5];
};

	/* Support for optimized scrolling routines. */

struct ScrollLineInfo
{
	UBYTE			 Left,Right,
				 ColourMask,
				 Width;
};

	/* A dial list entry. */

struct PhoneNode
{
	struct Node		 VanillaNode;

	UBYTE			 LocalName[50];

	struct PhoneEntry	*Entry;
};

	/* A Fast! macro list entry. */

struct MacroNode
{
	struct MacroNode	*mn_Succ;	/* Modeled after the default Node. */
	struct MacroNode	*mn_Pred;

	WORD			 mn_Pad;	/* Included only for Node compatibility. */

	UBYTE			*mn_Macro;	/* = ln_Name, title */
	UBYTE			*mn_Code;	/* The execution code. */
};

	/* Speech preferences. */

struct SpeechConfig
{
	WORD			Rate,
				Pitch;
	LONG			Frequency;
	BYTE			Sex,
				Volume,
				Enabled,
				Pad;
};

	/* Macro Preferences. */

struct MacroKeys
{
	UBYTE			Keys[4][10][256];
};

	/* term configuration. */

struct Configuration
{
	/* Serial Preferences. */

	ULONG			BaudRate;
	BYTE			BitsPerChar;
	BYTE			Parity;
	BYTE			StopBits;
	BYTE			Handshaking;
	BYTE			Duplex;
	BYTE			HighSpeed;
	ULONG			BreakLength;
	UBYTE			SerialDevice[40];
	LONG			UnitNumber;

	/* Modem Preferences. */

	UBYTE			ModemInit[80];
	UBYTE 			ModemExit[80];
	UBYTE 			ModemHangup[80];
	UBYTE			DialPrefix[80];
	LONG			RedialDelay;
	LONG			DialRetries;
	LONG			DialTimeout;
	BYTE			ConnectAutoCapture;
	BYTE			ConnectAutoBaud;
	BYTE			LogActions;
	UBYTE			NoCarrier[16];
	UBYTE			Connect[16];
	UBYTE			Voice[16];
	UBYTE			Ring[16];
	UBYTE			Busy[16];

	/* Transfer Preferences. */

	UBYTE			Protocol[40];

	/* Startup macro. */

	UBYTE			StartupMacro[256];

	/* Macro Preferences. */

	UBYTE			MacroFile[256];

	/* Screen Preferences. */

	ULONG			DisplayMode;
	UWORD			Colours[16];
	BYTE			MakeScreenPublic;
	BYTE			ShanghaiWindows;

	/* Terminal Preferences. */

	BYTE			CaptureFilter;
	BYTE			DestructiveBackspace;
	BYTE			AudibleBell;
	BYTE			VisibleBell;
	BYTE			EightyColumns;
	BYTE			DisableBlinking;
	BYTE			SendCR;
	BYTE			SendLF;
	BYTE			ColourMode;
	BYTE			Emulation;
	BYTE			Font;

	/* Emulation control. */

	BYTE			CursorApp;
	BYTE			FontScale;
	BYTE			JumpScroll;
	BYTE			AutoWrap;
	BYTE			CursorWrap;
	BYTE			NewLine;
	BYTE			InsertChar;
	BYTE			NumApp;

	/* Path Preferences. */

	UBYTE			DefaultStorage[256];

	UBYTE			TextUploadPath[256];
	UBYTE			TextDownloadPath[256];

	UBYTE			ASCIIUploadPath[256];
	UBYTE			ASCIIDownloadPath[256];

	UBYTE			BinaryUploadPath[256];
	UBYTE			BinaryDownloadPath[256];

	UBYTE			CapturePath[256];
	UBYTE			LogFile[256];
	UBYTE			Editor[256];
	UBYTE			BeepSound[256];

	/* Extension in version 1.9b */

	BYTE			SwapBSDelete;
	BYTE			StripBit8;

	/* Some more extensions... */

	BYTE			RasterEnabled;

	UBYTE			EmulationName[256];

	/* Up-/Download Macros. */

	UBYTE			UploadMacro[256];
	UBYTE			DownloadMacro[256];

	/* Default fast! macro file. */

	UBYTE			FastMacroFile[256];

	/* Program priority. */

	BYTE			Priority;

	/* Override transfer path. */

	BYTE			OverridePath;

	/* Backup config between switching to phone entries. */

	BYTE			BackupConfig;

	/* ZModem auto upload panel enabled? */

	BYTE			AutoUpload;

	/* No dialtone string. */

	UBYTE			NoDialTone[16];

	/* Check carrier upon `CARRIER LOST' message. */

	BYTE			CheckCarrier;

	/* Display the screen title bar? */

	BYTE			TitleBar;

	/* Display the status lines? */

	BYTE			StatusLine;

	/* Drop the DTR signal on hangup? */

	BYTE			DropDTR;

	/* Custom keymap file name. */

	UBYTE			KeyMapName[40];

	/* Serial buffer size. */

	LONG			SerBuffSize;

	/* Maximum log book buffer size. */

	LONG			MaxLogBuffSize;

	/* Is the buffering enabled? */

	BYTE			BufferEnabled;

	/* Receive CR/LF as... */

	BYTE			ReceiveCR;
	BYTE			ReceiveLF;

	/* Set `archived' bit on uploaded files. */

	BYTE			SetArchivedBit;

	/* Open the fast! macro panel on startup? */

	BYTE			OpenFastMacroPanel;

	/* Pass xON/xOFF through to modem? */

	BYTE			PassThrough;

	/* Use system DisplayBeep()? */

	BYTE			SystemBeep;

	/* Alert (Wakeup) type. */

	BYTE			Alert;

	/* Answerback message. */

	UBYTE			AnswerBack[41];

	/* Clipboard unit number. */

	BYTE			ClipboardUnit;

	/* Font settings. */

	UBYTE			FontName[32];
	WORD			FontHeight;

	UBYTE			TextFontName[32];
	WORD			TextFontHeight;

	/* Hard- and software-handshaking. */

	BYTE			HandshakingProtocol;
	BYTE			xONxOFF;

	/* Logoff macro. */

	UBYTE			LogoffMacro[256];

	/* Are the terminal printer commands enabled? */

	BYTE			PrinterEnabled;

	/* Are we to create an NComm-compatible logfile? */

	BYTE			NCommLog;

	BYTE			Pad;

	/* Dialing string suffix. */

	UBYTE			DialSuffix[80];

	/* Clipboard paste line delay. */

	WORD			LineDelay,
				CharDelay;
};

	/* term hotkey configuration. */

struct HotkeysOld
{
	UBYTE			termScreenToFront[256];
	UBYTE			BufferScreenToFront[256];
	UBYTE			SkipDialEntry[256];
	BYTE			CommodityPriority;
	BYTE			HotkeysEnabled;

	ULONG			Reserved[25];
};

struct Hotkeys
{
	UBYTE			termScreenToFront[256];
	UBYTE			BufferScreenToFront[256];
	UBYTE			SkipDialEntry[256];
	BYTE			CommodityPriority;
	BYTE			HotkeysEnabled;

	ULONG			Reserved[25];

	UBYTE			AbortARexx[256];
};

	/* Time/date structure. */

struct TimeDate
{
	LONG			 Count;		/* Table size. */
	WORD			 PayPerUnit[2],	/* Pay for each unit. */
				 SecPerUnit[2];	/* Number of seconds each unit lasts. */
	UBYTE			 Time,		/* The time associated with this entry. */
				 Pad;
};

struct TimeDateNode
{
	struct Node		 VanillaNode;	/* Default node entry. */
	UBYTE			 Buffer[30];	/* Name buffer. */

	UBYTE			 Comment[22];	/* Comment for this entry. */

	BYTE			 Month,		/* Month of year or -1 -> Day = bitmapped days of week. */
				 Day;		/* Day of month or -1 -> standard settings. */

	struct TimeDate		*Table;		/* Table of time/date entries. */
};

struct TimeNode
{
	struct Node		 VanillaNode;	/* Default node entry. */
	UBYTE			 Name[6];	/* Name string. */
	UBYTE			 Time;		/* The time for this entry. */
};

	/* A phonebook entry. */

struct PhoneEntry
{
	struct PhoneNode	*Node;

	struct MinList		 TimeDateList;

	LONG			 Count;

	UBYTE			 Name[30];
	UBYTE			 Number[40];
	UBYTE			 Password[20];
	UBYTE			 UserName[20];

	LONG			 PayPerUnit[2];
	LONG			 SecPerUnit[2];
	LONG			 TimeOfDay[2];

	struct Configuration	 Config;
};

	/* A text box for several lines of text. */

struct TextBox
{
	struct TextBox		*NextBox;		/* Next box in chain. */

	LONG			 Left,Top,		/* Position and size. */
				 Width,Height;

	LONG			 LineWidth,		/* Line width in pixels. */
				 LineHeight;		/* Line height in pixels. */

	LONG			 NumChars,		/* Number of chars per line. */
				 NumLines;		/* Number of lines. */

	STRPTR			*Title,			/* Line titles. */
				*Text;			/* Line texts. */
};

	/* Block marker structure. */

struct BlockMarker
{
		/* The object to manipulate. */

	APTR			Object;

		/* Selection and unselection routines. */

	VOID		 (* Select)(struct BlockMarker *Marker,WORD Left,WORD Top,WORD Width,WORD Height);
	VOID		 (* Unselect)(struct BlockMarker *Marker,WORD Left,WORD Top,WORD Width,WORD Height);

		/* Origin anchor point. */

	WORD			OriginX,
				OriginY;

		/* First and last selected line. */

	WORD			FirstLine,
				LastLine;

		/* First and last selected column. */

	WORD			FirstColumn,
				LastColumn;

		/* Top of display window, lines in the buffer and size of
		 * the display window.
		 */

	WORD			Top,
				Lines,
				Width,
				Height;

		/* Last mouse position. */

	WORD			LastX,
				LastY;

		/* Single character dimensions. */

	WORD			TextFontWidth,
				TextFontHeight;
};

	/* Global data flow <-> term interface. */

struct FlowInfo
{
	BYTE			Changed;

	BYTE			NoCarrier;
	BYTE			ZModemUpload;

	BYTE			Connect;
	BYTE			Voice;
	BYTE			Ring;
	BYTE			Busy;

	BYTE			NoDialTone;
};

	/* A scan sequence, somewhat similar to the FlowInfo
	 * structure.
	 */

struct ScanNode
{
	struct MinNode		 Node;

	UBYTE			*Sequence;	/* Character sequence to be matched. */
	LONG			 Count;		/* Number of characters matched. */
};

	/* Number of buffers to be used for buffered I/O. */

#define BUFFER_NUMBER 2

	/* Auxiliary structure for buffered file I/O. */

struct Buffer
{
	struct Message			 Message;			/* Vanilla message header. */

	BYTE				 Read;				/* Last access has read data. */
	BYTE				 Written;			/* Last access has written data. */

	LONG				 Action;			/* Action to perform. */
	LONG				 ActionData[2];			/* Seek and the like. */
	LONG				 Result;			/* Return value. */

	BPTR				 FileHandle;			/* Dos filehandle. */

	UBYTE				*Data;				/* Data buffer. */
	LONG				 BufLength;			/* Length of data buffer. */

	LONG				 BufPosition;			/* Read/write pointer into buffer. */

	LONG				 ReadBufFull;			/* How many bytes are still to be read from the buffer? */
	LONG				 WriteBufFull;			/* How many bytes are still to be written to the buffer?*/

	LONG				 RealPosition;			/* Real position in file. */
	LONG				 Cached;			/* How many bytes in pre-load cache. */

	UBYTE				*DataBuffer[BUFFER_NUMBER];	/* The data buffers. */
	LONG				 DataLength[BUFFER_NUMBER];	/* The lengths of the data buffers. */
	WORD				 DataCount;			/* Which buffer to use. */
	BYTE				 WriteAccess;			/* TRUE if a write file handle. */
	BYTE				 LastActionFailed;		/* TRUE if last action failed -> abort actions. */

	struct Process			*Child;
	struct Process			*Caller;			/* Synchronization. */

	BPTR				 DirLock;
	struct InfoData __aligned	 InfoData;

	BYTE				 Fresh;				/* TRUE if no read/write access has taken place yet. */
	BYTE				 Used;				/* Did any access take place at all? */
};

	/* xpr serial bits. */

#define ST_PARTYON	(1 << 0)
#define ST_PARTYODD	(1 << 1)
#define ST_7WIRE	(1 << 2)
#define ST_QBREAK	(1 << 3)
#define ST_RADBOOGIE	(1 << 4)
#define ST_SHARED	(1 << 5)
#define ST_EOFMODE	(1 << 6)
#define ST_XDISABLED	(1 << 7)
#define ST_PARTYMARKON	(1 << 8)
#define ST_PARTYMARK	(1 << 9)
#define ST_2BITS	(1 << 10)
#define ST_READ7	(1 << 11)
#define ST_WRITE7	(1 << 12)

	/* Miscellaneous definitions. */

#define MILLION		1000000

#define	ATTR_UNDERLINE	1
#define	ATTR_HIGHLIGHT	2
#define ATTR_BLINK	4
#define	ATTR_INVERSE	8

	/* Status macro (is character printable?). */

#define IsPrintable(c)	(ValidTab[c])
#define IsBlank(c)	((c) > 127 && (c) < 160)

	/* Set the stopwatch pointer. */

#define SetWait(Window)		SetPointer(Window,Stopwatch,16,16,-6,0)
#define SetMarker(Window)	SetPointer(Window,MarkerData,15,15,-8,-7)

	/* Audio channels. */

#define LEFT0F  1
#define RIGHT0F  2
#define RIGHT1F  4
#define LEFT1F  8

	/* Program revision and the approriate info structure. */

struct TermInfo
{
	UWORD	Version;
	UWORD	Revision;
};

extern LONG	TermVersion,
		TermRevision;

extern UBYTE	TermName[],
		TermDate[];

	/* CommandPanel.c */

VOID				CommandPanel(struct Configuration *Config);

	/* CopyPanel.c */

VOID				CopyPanel(struct Configuration *MyConfig);

	/* DatePanel.c */

BYTE				DatePanel(struct TimeDateNode *Node);

	/* DayPanel.c */

BYTE				DayPanel(struct TimeDateNode *Node);

	/* DialPanel.c */

BYTE				DialPanel(VOID);

	/* FastMacroPanel.c */

VOID				FastMacroPanel(VOID);

	/* ImportPanel.c */

VOID				ImportPanel(struct PhoneEntry *Entry,struct List *PhoneList);

	/* MacroPanel.c */

VOID				MacroPanel(struct MacroKeys *MacroKeys);

	/* ModemPanel.c */

BYTE				ModemPanel(struct Configuration *Config);

	/* PathPanel.c */

BYTE				PathPanel(struct Configuration *Config);

	/* PasswordUserPanel.c */

VOID				PasswordUserPanel(struct PhoneEntry *Entry);

	/* PhonePanel.c */

BYTE				PhonePanel(VOID);

	/* RatePanel.c */

VOID				RatePanel(struct List *PhoneList,struct PhoneEntry *Entry);

	/* SerialPanel.c */

BYTE				SerialPanel(struct Configuration *Config);

	/* ScreenPanel.c */

BYTE __regargs			ModeOkay(ULONG ID);
BYTE				ScreenPanel(struct Configuration *Config);

	/* SpeechPanel.c */

VOID				SpeechPanel(VOID);

	/* TerminalPanel.c */

VOID				TerminalPanel(struct Configuration *Config);

	/* TimePanel.c */

BYTE				TimePanel(UBYTE *StartTime);

	/* TransferPanel.c */

VOID __stdargs			TransferInfo(WORD X,WORD Y,BYTE *String,...);
VOID __stdargs			ShowString(struct Gadget *Gadget,UBYTE *String,...);
VOID				GhostStats(struct Gadget *Gadget);
VOID				ShowStats(struct Gadget *Gadget,LONG Value,LONG Max);
VOID __stdargs			AddTransferInfo(UBYTE *Message,...);
VOID				RefreshTransferWindow(VOID);
BYTE				TransferPanel(UBYTE *Title);
VOID				DeleteTransferPanel(VOID);

	/* UploadPanel.c */

BYTE				UploadPanel(VOID);

	/* Format.asm */

VOID __stdargs			SPrintf(APTR,UBYTE *,...);
VOID __stdargs			VSPrintf(APTR,UBYTE *,va_list);

	/* termAux.c */

VOID				SetDialMenu(BYTE Mode);
VOID				SetTransferMenu(BYTE Mode);
BYTE				PickFont(struct Window *Window,STRPTR Name,WORD *Height,BYTE MonoSpaced);
UBYTE * __regargs		ExtractString(UBYTE *String,UBYTE *Destination,BYTE ReturnEnd);
VOID __regargs			DeleteInterleavedBitMap(struct BitMap *SomeBitMap);
struct BitMap * __regargs	CreateInterleavedBitMap(LONG Width,LONG Height,WORD Depth);
struct Node *			GetListNode(LONG Offset,struct List *List);
struct ConUnit *		GetConUnit(struct MsgPort *);
VOID				AddDownloadObject(UBYTE *Line);
VOID				ClearDownloadObjects(VOID);
struct ScanNode *		SequenceFilter(UBYTE Char);
VOID				AddSequenceObject(UBYTE *Sequence);
VOID				ClearSequenceObjects(VOID);
VOID __stdargs			LogAction(UBYTE *String,...);
VOID				FlushMsg(struct Window *Window);
BYTE				GetString(UBYTE *Prompt,UBYTE *Buffer);
VOID __regargs			WakeUp(struct Window *Window);
VOID				SendAmigaDOSCommand(UBYTE *Name);
VOID __saveds			RexxBackgroundServer(VOID);
VOID				SendARexxCommand(UBYTE *Name);
LONG				ahtoi(UBYTE *String);
VOID __regargs			BlockWindow(struct Window *Window);
VOID __regargs			ReleaseWindow(struct Window *Window);
VOID				BlockWindows(VOID);
VOID				ReleaseWindows(VOID);
LONG				LineRead(BPTR File,UBYTE *Buffer,LONG MaxChars);
VOID				FlowInit(VOID);
VOID				FlowFilter(UBYTE Char);
BYTE				LoadMacros(UBYTE *Name,struct MacroKeys *Keys);
struct MenuItem *		FindThisItem(ULONG MenuID);
LONG				GetFileSize(UBYTE *Name);
struct FileRequester *		GetFile(UBYTE *Title,UBYTE *Directory,UBYTE *Name,UBYTE *Buffer,UBYTE *Pattern,BYTE SaveFlag,BYTE MultiSelect,BYTE DirsOnly,UBYTE *OKText);
VOID				PrintSomething(BYTE Source);
WORD __stdargs			MyEasyRequest(struct Window *Window,UBYTE *Text,UBYTE *Gadgets,...);
VOID				SelectTime(struct PhoneEntry *SomeEntry);
VOID __saveds			StatusServer(VOID);
VOID				CloseWindowSafely(struct Window *Window);
VOID				WaitTime(LONG Secs,LONG Micros);
UBYTE *				GetEnvDOS(UBYTE *Name,UBYTE *Buffer);
BYTE				SetEnvDOS(UBYTE *Name,UBYTE *Value);
VOID				BumpWindow(struct Window *SomeWindow);
VOID				BumpDefault(VOID);
BYTE				WriteIFFData(UBYTE *Name,APTR Data,LONG Size,ULONG Type);
BYTE				ReadIFFData(UBYTE *Name,APTR Data,LONG Size,ULONG Type);
VOID				PushWindow(struct Window *Window);
VOID				PopWindow(VOID);

	/* termBeep.c */

BYTE				CreateBeep(VOID);
VOID				DeleteBeep(VOID);
VOID				ClearAudio(VOID);
VOID				Beep(VOID);
BYTE				OpenSound(UBYTE *Name);

	/* termBuffer.c */

BYTE				LaunchBuffer(VOID);
VOID __saveds			BufferServer(VOID);
VOID				AddLine(UBYTE *Line,LONG Size);
VOID				ClearBuffer(VOID);
VOID				StoreBuffer(APTR Buffer,LONG Size);

	/* termCall.c */

VOID				MakeCall(STRPTR Name,STRPTR Number);
VOID				StopCall(BYTE Finish);

	/* termClip.c */

VOID __saveds			ClipServer(VOID);
BYTE				OpenClip(VOID);
VOID				CloseClip(VOID);
WORD				GetClip(STRPTR Buffer,WORD Len,BYTE Filter);
BYTE				SaveClip(APTR Buffer,LONG Size);
LONG				LoadClip(APTR Buffer,LONG Size);

	/* termConsole.c */

VOID __regargs			CaptureToFile(APTR Buffer,LONG Size);
VOID __regargs			Capture(APTR Buffer,LONG Size);
VOID				ClosePrinterCapture(BYTE Force);
BYTE				OpenPrinterCapture(BYTE Controller);
VOID				PrintRegion(WORD Top,WORD Bottom);
BYTE __regargs			HandleCursor(UBYTE Char);
BYTE				DoBackspace(VOID);
BYTE				DoBeep(VOID);
BYTE				DoLF(VOID);
BYTE				DoShiftIn(VOID);
BYTE				DoShiftOut(VOID);
BYTE				DoCR_LF(VOID);
BYTE				DoFF(VOID);
BYTE				DoLF_FF_VT(VOID);
BYTE				DoCR(VOID);
BYTE				DoTab(VOID);
BYTE				DoEnq(VOID);
BYTE				DoxON(VOID);
BYTE				DoEsc(VOID);
BYTE				DoCsi(VOID);
BYTE __regargs			DoNewEsc(UBYTE Char);
BYTE __regargs			DoNewCsi(UBYTE Char);
VOID __regargs			GfxText(struct RastPort *RPort,STRPTR Buffer,LONG Length);
VOID __stdargs			ConWrites(UBYTE *String,...);
VOID __regargs			ConProcess(register UBYTE *String,register LONG Size);
UBYTE __regargs			KeyConvert(struct IntuiMessage *Massage,UBYTE *Buffer,LONG *Len);

	/* termCrypt.c */

UBYTE *				Encrypt(UBYTE *Source,WORD SourceLen,UBYTE *Destination,UBYTE *Key,WORD KeyLen,BYTE Prefill);
UBYTE *				Decrypt(UBYTE *Source,WORD SourceLen,UBYTE *Destination,UBYTE *Key,WORD KeyLen,BYTE Prefill);
BYTE				CryptPanel(UBYTE *Buffer);

	/* termEmulation.c */

BYTE				DoCancel(VOID);
VOID				CSIFake(VOID);
BYTE __regargs			ParseCode(UBYTE c);
VOID				ClearCursor(VOID);
VOID				DrawCursor(VOID);
VOID				SetCursor(VOID);
VOID __regargs			ClipBlitCursor(UBYTE DoClip,UBYTE DoMove); 
VOID				BackupRender(VOID);
VOID __regargs			ShiftChar(LONG Size);
VOID				DownLine(VOID);
VOID				ResetCursor(VOID);
UBYTE *				Ignore(VOID);
UBYTE * __regargs		ScrollUp(UBYTE *Buffer);
UBYTE * __regargs		ScrollDown(UBYTE *Buffer);
UBYTE *				CursorScrollDown(VOID);
UBYTE *				CursorScrollUp(VOID);
UBYTE *				NextLine(VOID);
UBYTE *				SaveCursor(VOID);
UBYTE * __regargs		FontStuff(UBYTE *);
UBYTE *				LoadCursor(VOID);
UBYTE * __regargs		ScaleFont(UBYTE *);
UBYTE *				AlignmentTest(VOID);
UBYTE *				SetTab(VOID);
UBYTE * __regargs		RequestTerminal(UBYTE *Buffer);
UBYTE *				Reset(VOID);
UBYTE * __regargs		RequestInformation(UBYTE *Buffer);
UBYTE * __regargs		SetSomething(UBYTE *Buffer);
UBYTE * __regargs		PrinterController(UBYTE *Buffer);
UBYTE * __regargs		NumericAppMode(UBYTE *Buffer);
UBYTE * __regargs		MoveCursor(UBYTE *Buffer);
UBYTE * __regargs		EraseLine(UBYTE *Buffer);
UBYTE * __regargs		EraseScreen(UBYTE *Buffer);
UBYTE * __regargs		EraseCharacters(UBYTE *Buffer);
UBYTE * __regargs		InsertCharacters(UBYTE *Buffer);
UBYTE * __regargs		InsertLine(UBYTE *Buffer);
UBYTE * __regargs		ClearLine(UBYTE *Buffer);
UBYTE * __regargs		SetTabs(UBYTE *Buffer);
UBYTE * __regargs		SetAbsolutePosition(UBYTE *Buffer);
UBYTE * __regargs		SetAttributes(UBYTE *Buffer);
UBYTE * __regargs		SetRegion(UBYTE *Buffer);
VOID				ResetCursor(VOID);

	/* termFastMacros.c */

VOID				RefreshFastWindow(WORD Height);
VOID				CloseFastWindow(VOID);
BYTE				OpenFastWindow(VOID);
struct MacroNode *		NewFastMacro(UBYTE *Macro,UBYTE *Code);
VOID				RemFastMacro(struct MacroNode *Node);
struct MacroNode *		GetFastMacro(LONG Offset);
VOID				ClearFastMacroList(struct List *List);
LONG				GetFastMacroOffset(struct MacroNode *MacroNode);
VOID __regargs			MoveList(struct List *From,struct List *To);
BYTE				SaveFastMacros(UBYTE *Name);
BYTE				LoadFastMacros(UBYTE *Name);

	/* termFileBuffer.c */

LONG __stdargs			BPrintf(struct Buffer *Buffer,UBYTE *Format,...);

BYTE __regargs			BufferClose(struct Buffer *Buffer);
struct Buffer * __regargs	BufferOpen(UBYTE *Name,UBYTE *AccessMode);
LONG __regargs			BufferRead(struct Buffer *Buffer,UBYTE *Destination,LONG Size);
LONG __regargs			BufferWrite(struct Buffer *Buffer,UBYTE *Source,LONG Size);
BYTE __regargs			BufferSeek(struct Buffer *Buffer,LONG Offset,LONG Origin);

	/* termGadTools.c */

LONG				SZ_ResetMaxWidth(VOID);
VOID __regargs			SZ_UpdateMaxWidth(UBYTE Type,STRPTR Title,LONG Chars,STRPTR *Choices);
LONG				SZ_GetWindowWidth(VOID);
LONG				SZ_GetWindowHeight(VOID);
LONG				SZ_GetLeftEdge(VOID);
LONG				SZ_GetTopEdge(VOID);
VOID __regargs			SZ_SetTopEdge(LONG Top);
VOID __regargs			SZ_SetLeftEdge(LONG Left);
VOID __regargs			SZ_SetAbsoluteTop(LONG Top);
VOID __regargs			SZ_SetAbsoluteLeft(LONG Left);
VOID __regargs			SZ_SetWidth(LONG Width);
VOID __regargs			SZ_GetDimension(LONG *Width,LONG *Height);
LONG __regargs			SZ_TextWidth(STRPTR String);
VOID __regargs			SZ_AddLeftOffset(LONG Offset);
LONG __stdargs			SZ_LeftOffsetN(LONG DataArray,...);
LONG __regargs			SZ_LeftOffsetDelta(LONG From,LONG To);
VOID				SZ_SizeCleanup();
BYTE __regargs			SZ_SizeSetup(struct Screen *Screen,struct TextAttr *TextAttr,BYTE Title);
LONG __regargs			SZ_Height(UBYTE Type,LONG Lines,BYTE Display);
LONG __regargs			SZ_Width(UBYTE Type,STRPTR Title,LONG Chars,STRPTR *Choices);

VOID __regargs			SZ_FreeBox(struct TextBox *Box);
VOID __regargs			SZ_FreeBoxes(struct TextBox *FirstBox);
LONG __regargs			SZ_BoxWidth(LONG Chars);
LONG __regargs			SZ_BoxHeight(LONG Lines);
struct TextBox * __stdargs	SZ_CreateTextBox(struct TextBox **FirstBox,...);
VOID __stdargs			SZ_SetBoxTitles(struct TextBox *Box,STRPTR Array,...);
VOID __stdargs			SZ_PrintLine(struct RastPort *RPort,struct TextBox *Box,LONG Line,STRPTR String,...);
VOID __regargs			SZ_DrawBox(struct RastPort *RPort,struct TextBox *Box);
VOID __regargs			SZ_DrawBoxes(struct RastPort *RPort,struct TextBox *FirstBox);

VOID				KeySelect(struct Gadget **GadgetList,WORD Last,UBYTE Key,struct Window *Window,struct Gadget **Gadget,ULONG *Class,ULONG *Code);

	/* termIdentify.c */

VOID				Identify(UBYTE *Name);

	/* termInfo.c */

BYTE				ShowInfo(BYTE Ticks);

	/* termInit.c */

BYTE				DisplayReset(VOID);
struct Process *		SegmentSplit(STRPTR Name,BYTE Pri,LONG StackSize,APTR Function);
struct KeyMap *			LoadKeyMap(STRPTR Name);
VOID				ConfigSetup(VOID);
BYTE				DeleteDisplay(VOID);
UBYTE *				CreateDisplay(BYTE FirstSetup);
VOID				CloseAll(VOID);
UBYTE *				OpenAll(STRPTR ConfigPath);

	/* termHotkeys. */

VOID				ShutdownCx(VOID);
BYTE				SetupCx(VOID);
BYTE				LoadHotkeys(STRPTR Filename,struct Hotkeys *Keys);

	/* termLocale.c */

VOID __regargs			LocaleOpen(STRPTR CatalogName,STRPTR BuiltIn,LONG Version);
VOID				LocaleClose(VOID);
VOID				LanguageCheck(VOID);
WORD __regargs			GadToolsStrlen(STRPTR String);
WORD __regargs			GadToolsLongestString(WORD From,WORD To);
STRPTR __regargs		LocaleSeconds(WORD Seconds);
STRPTR __regargs		SmallCurrency(VOID);
STRPTR __regargs		CreateSum(LONG Quantity,BYTE UseCurrency);
VOID __regargs			LocalizeString(STRPTR *Strings,WORD From,WORD To);
VOID __regargs			LocalizeMenu(struct NewMenu *Menu,WORD From);
STRPTR __regargs		LocaleString(LONG ID);

	/* termMain.c */

LONG __saveds			main(VOID);
VOID __saveds			HandleInput(VOID);
BYTE				HandleWindow(VOID);
BYTE				HandleSerial(VOID);
VOID				HandleCode(ULONG Code,ULONG Qualifier,struct MenuItem *MenuItem);
VOID				HandleMenu(ULONG Code,ULONG Qualifier);

	/* termMarker.c */

VOID				BM_Draw(struct BlockMarker *Marker,VOID (*Select)(APTR Object,WORD Left,WORD Top,WORD Width,WORD Height));
VOID				BM_ClearMark(struct BlockMarker *Marker);
struct BlockMarker *		BM_SetMark(APTR Object,APTR Select,APTR Unselect,WORD Width,WORD Height,WORD Top,WORD Lines,WORD X,WORD Y,WORD TextFontWidth,WORD TextFontHeight);
VOID				BM_ExtendMark(struct BlockMarker *Marker,WORD X,WORD Y,WORD Delta);
VOID				BM_WindowUpdate(struct BlockMarker *Marker,WORD TopDelta,WORD X);

VOID				ToggleSelect(struct BlockMarker *Marker,WORD Left,WORD Top,WORD Width,WORD Height);
VOID __regargs			WriteTrimmedString(struct IFFHandle *Handle,STRPTR String,WORD Len);
WORD __regargs			TrimLength(STRPTR String,WORD Len);
VOID				MarkClip(BYTE SingleChar,BYTE Xerox);

	/* termPacket.c */

VOID				ClearPacketHistory(VOID);
VOID __saveds __asm		PacketKey(register __a0 struct Hook *Hook,register __a1 ULONG *Msg,register __a2 struct SGWork *Work);
BYTE				HandlePacket(VOID);
VOID				AddPacketHistory(UBYTE *Buffer);
VOID				DeletePacketWindow(BYTE WindowOnly);
BYTE				CreatePacketWindow();

	/* termPhone.c */

VOID				RemoveDialEntry(LONG Entry);
VOID				RemoveDialNode(struct PhoneNode *Node);
VOID				SortToList(struct PhoneNode *PhoneNode);
VOID				FreeDialList(VOID);
VOID				SetPrefToDefaults(struct Configuration *Config,UBYTE *PathBuffer);
VOID				UpdatePrefs(struct Configuration *Config);
struct List *			CreatePhoneList(VOID);
VOID				DeletePhoneList(struct List *PhoneList);
VOID				SortPhoneEntries(VOID);
VOID				SortTimeTable(struct TimeDateNode *Node);
VOID __regargs			FreeTimeDateNode(struct TimeDateNode *Node);
VOID				FreeTimeDateList(struct List *List);
VOID				CopyTimeDateList(struct List *From,struct List *To,BYTE SkipFirst);
VOID				AdaptTimeDateNode(struct TimeDateNode *Node);
struct TimeDateNode *		CreateTimeDateNode(BYTE Month,BYTE Day,UBYTE *Comment,LONG Count);
struct List *			BuildTimeList(struct TimeDateNode *Node);
BYTE				ResizeTimeDateNode(struct TimeDateNode *Node,LONG Count,UBYTE Time);
BYTE				DeleteTimeDateNode(struct TimeDateNode *Node,LONG Index);
VOID				RemPhoneEntry(LONG Num);
BYTE				NewPhoneEntry(VOID);
struct PhoneEntry **		CreatePhonebook(LONG Size,LONG *AllocSize,BYTE CreateEntries);
VOID				DeletePhonebook(struct PhoneEntry **,LONG Size,BYTE FreeEntries);
BYTE				SavePhonebook(UBYTE *Name);
BYTE				LoadPhonebook(UBYTE *Name);

	/* termRaster.c */

VOID				DeleteRaster(VOID);
BYTE				CreateRaster(VOID);
VOID __regargs			RasterEraseScreen(BYTE Mode);
VOID __regargs			RasterEraseLine(BYTE Mode);
VOID __regargs			RasterEraseCharacters(WORD Chars);
VOID __regargs			RasterClearLine(WORD Lines,WORD Top);
VOID __regargs			RasterInsertLine(WORD Lines,WORD Top);
VOID __regargs			RasterScrollRegion(WORD Direction,WORD RasterTop,WORD RasterBottom,WORD RasterLines);
VOID __regargs			RasterShiftChar(WORD Size);
VOID __regargs			RasterPutString(UBYTE *String,WORD Length);

	/* termReview.c */

VOID				DeleteReview(VOID);
BYTE				CreateReview(VOID);
VOID				UpdateReview(BYTE Force);
BYTE				HandleReview(VOID);

	/* termRexx.c */

BYTE				SendRexxCommand(struct RexxHost *HostPort,STRPTR CommandString,STRPTR FileExtension,STRPTR HostName);
VOID				FreeRexxCommand(struct RexxMsg *RexxMessage);
VOID				ReplyRexxCommand(struct RexxMsg *RexxMessage,LONG Primary,LONG Secondary,STRPTR Result);
STRPTR				GetToken(STRPTR String,LONG *StartChar,STRPTR AuxBuff,LONG MaxLength);

STRPTR 				QueryBaud(VOID);
STRPTR 				QueryDataBits(VOID);
STRPTR 				QueryParity(VOID);
STRPTR 				QueryStopBits(VOID);
STRPTR 				QueryHandshaking(VOID);
STRPTR 				QueryDuplex(VOID);
STRPTR 				QueryHighspeed(VOID);
STRPTR 				QueryBreakLength(VOID);
STRPTR 				QuerySerialDevice(VOID);
STRPTR 				QueryUnitNumber(VOID);
STRPTR 				QueryModemInit(VOID);
STRPTR 				QueryModemExit(VOID);
STRPTR 				QueryDialPrefix(VOID);
STRPTR 				QueryRedialDelay(VOID);
STRPTR 				QueryDialRetries(VOID);
STRPTR 				QueryDialTimeout(VOID);
STRPTR 				QueryConnectAutoBaud(VOID);
STRPTR 				QueryNoCarrier(VOID);
STRPTR 				QueryConnect(VOID);
STRPTR 				QueryError(VOID);
STRPTR 				QueryVoice(VOID);
STRPTR 				QueryRing(VOID);
STRPTR 				QueryBusy(VOID);
STRPTR 				QueryOkay(VOID);
STRPTR 				QueryProtocol(VOID);
STRPTR 				QueryProtocolOptions(VOID);
STRPTR 				QueryMacroFile(VOID);
STRPTR 				QueryDisplay(VOID);
STRPTR 				QueryPublicScreen(VOID);
STRPTR 				QueryShanghai(VOID);
STRPTR 				QueryCaptureFilter(VOID);
STRPTR 				QueryDSBackSpace(VOID);
STRPTR 				QueryAudBell(VOID);
STRPTR 				QueryVisBell(VOID);
STRPTR 				QueryEightyColumns(VOID);
STRPTR 				QuerySendCR(VOID);
STRPTR 				QuerySendLF(VOID);
STRPTR 				QueryColourMode(VOID);
STRPTR 				QueryEmulation(VOID);
STRPTR 				QueryFont(VOID);
STRPTR 				QueryStatus(VOID);
STRPTR 				QuerySerial(VOID);
STRPTR 				QueryStartup(VOID);
STRPTR 				QueryRequesters(VOID);
STRPTR 				QueryTimeout(VOID);
STRPTR 				QueryLine(VOID);
STRPTR 				QueryLines(VOID);
STRPTR 				QueryColumns(VOID);
STRPTR 				QueryCursor(VOID);
STRPTR 				QueryModemHangup(VOID);
STRPTR 				QueryAutoCapture(VOID);
STRPTR 				QueryLogActions(VOID);
STRPTR 				QueryBlinking(VOID);
STRPTR 				QueryCursorMode(VOID);
STRPTR 				QueryFontScale(VOID);
STRPTR 				QueryJumpScroll(VOID);
STRPTR 				QueryCharacterWrap(VOID);
STRPTR 				QueryCursorWrap(VOID);
STRPTR 				QueryNewLine(VOID);
STRPTR 				QueryInsert(VOID);
STRPTR 				QueryNumeric(VOID);
STRPTR 				QueryDefaultStore(VOID);
STRPTR 				QueryTUploadPath(VOID);
STRPTR 				QueryTDownloadPath(VOID);
STRPTR 				QueryAUploadPath(VOID);
STRPTR 				QueryADownloadPath(VOID);
STRPTR 				QueryBUploadPath(VOID);
STRPTR 				QueryBDownloadPath(VOID);
STRPTR 				QueryCapturePath(VOID);
STRPTR 				QueryLogFile(VOID);
STRPTR 				QueryEditor(VOID);
STRPTR 				QueryBeepSound(VOID);
STRPTR 				QueryCaptureState(VOID);
STRPTR 				QueryDownloads(VOID);
STRPTR 				QueryScreenAddress(VOID);
STRPTR 				QuerySpeechFile(VOID);
STRPTR 				QuerySpeechRate(VOID);
STRPTR 				QuerySpeechPitch(VOID);
STRPTR 				QuerySpeechFrequency(VOID);
STRPTR 				QuerySpeechVolume(VOID);
STRPTR 				QuerySpeechSex(VOID);
STRPTR 				QuerySpeech(VOID);

VOID				RexxSetBaud(STRPTR String);
VOID				RexxSetDataBits(STRPTR String);
VOID				RexxSetParity(STRPTR String);
VOID				RexxSetStopBits(STRPTR String);
VOID				RexxSetHandshaking(STRPTR String);
VOID				RexxSetDuplex(STRPTR String);
VOID				RexxSetHighSpeed(STRPTR String);
VOID				RexxSetBreakLength(STRPTR String);
VOID				RexxSetSerialDevice(STRPTR String);
VOID				RexxSetUnitNumber(STRPTR String);
VOID				RexxSetModemInit(STRPTR String);
VOID				RexxSetModemExit(STRPTR String);
VOID				RexxSetDialPrefix(STRPTR String);
VOID				RexxSetRedialDelay(STRPTR String);
VOID				RexxSetDialRetries(STRPTR String);
VOID				RexxSetDialTimeout(STRPTR String);
VOID				RexxSetConnectAutoBaud(STRPTR String);
VOID				RexxSetNoCarrier(STRPTR String);
VOID				RexxSetConnect(STRPTR String);
VOID				RexxSetError(STRPTR String);
VOID				RexxSetVoice(STRPTR String);
VOID				RexxSetRing(STRPTR String);
VOID				RexxSetBusy(STRPTR String);
VOID				RexxSetOkay(STRPTR String);
VOID				RexxSetScreenMode(STRPTR String);
VOID				RexxSetFilter(STRPTR String);
VOID				RexxSetBackspace(STRPTR String);
VOID				RexxSetCR(STRPTR String);
VOID				RexxSetLF(STRPTR String);
VOID				RexxSet80Columns(STRPTR String);
VOID				RexxSetColourMode(STRPTR String);
VOID				RexxSetEmulation(STRPTR String);
VOID				RexxSetStartup(STRPTR String);
VOID				RexxSetFont(STRPTR String);
VOID				RexxSetProtocol(STRPTR String);
VOID				RexxSetProtocolOptions(STRPTR String);
VOID				RexxSetMacro(STRPTR String);
VOID				RexxSetColour(STRPTR String);
VOID				RexxSetScreen(STRPTR String);
VOID				RexxSetBell(STRPTR String);
VOID				RexxSetMacroFile(STRPTR String);
VOID				RexxSetRequesters(STRPTR String);
VOID				RexxSetTimeout(STRPTR String);
VOID				RexxSetSerial(STRPTR String);
VOID				RexxSetModemHangup(STRPTR String);
VOID				RexxSetAutoCapture(STRPTR String);
VOID				RexxSetLogActions(STRPTR String);
VOID				RexxSetBlinking(STRPTR String);
VOID				RexxSetCursorMode(STRPTR String);
VOID				RexxSetFontScale(STRPTR String);
VOID				RexxSetJumpScroll(STRPTR String);
VOID				RexxSetCharacterWrap(STRPTR String);
VOID				RexxSetCursorWrap(STRPTR String);
VOID				RexxSetNewLine(STRPTR String);
VOID				RexxSetInsert(STRPTR String);
VOID				RexxSetNumeric(STRPTR String);
VOID				RexxSetDefaultStore(STRPTR String);
VOID				RexxSetTUploadPath(STRPTR String);
VOID				RexxSetTDownloadPath(STRPTR String);
VOID				RexxSetAUploadPath(STRPTR String);
VOID				RexxSetADownloadPath(STRPTR String);
VOID				RexxSetBUploadPath(STRPTR String);
VOID				RexxSetBDownloadPath(STRPTR String);
VOID				RexxSetCapturePath(STRPTR String);
VOID				RexxSetLogFile(STRPTR String);
VOID				RexxSetEditor(STRPTR String);
VOID				RexxSetSpeechRate(STRPTR String);
VOID				RexxSetSpeechPitch(STRPTR String);
VOID				RexxSetSpeechFrequency(STRPTR String);
VOID				RexxSetSpeechVolume(STRPTR String);
VOID				RexxSetSpeechSex(STRPTR String);
VOID				RexxSetSpeech(STRPTR String);

STRPTR 				RexxBreak(VOID);
STRPTR 				RexxTUpload(STRPTR String);
STRPTR 				RexxTDownload(STRPTR String);
STRPTR 				RexxBDownload(STRPTR String);
STRPTR 				RexxBUpload(STRPTR String);
STRPTR 				RexxWrite(STRPTR String,STRPTR String2);
STRPTR 				RexxResetStyles(VOID);
STRPTR 				RexxClearScreen(VOID);
STRPTR 				RexxSaveILBM(STRPTR String);
STRPTR 				RexxHangUp(VOID);
STRPTR 				RexxGetString(STRPTR String);
STRPTR 				RexxCommand(STRPTR String,STRPTR String2);
STRPTR 				RexxMessage(STRPTR String,STRPTR String2);
STRPTR 				RexxPutClip(STRPTR String,STRPTR String2);
STRPTR 				RexxGetClip(VOID);
STRPTR 				RexxDelay(STRPTR String);
STRPTR 				RexxDial(STRPTR String);
STRPTR 				RexxInput(STRPTR String);
STRPTR 				RexxPrinter(STRPTR String);
STRPTR 				RexxMacros(STRPTR String);
STRPTR 				RexxSpeech(STRPTR String);
STRPTR 				RexxConfig(STRPTR String);
STRPTR 				RexxPhone(STRPTR String);
STRPTR 				RexxCapture(STRPTR String);
STRPTR 				RexxBuffer(STRPTR String);
STRPTR 				RexxFirstDownload(VOID);
STRPTR 				RexxNextDownload(VOID);
STRPTR 				RexxLastDownload(VOID);
STRPTR 				RexxWaitString(STRPTR String);
STRPTR 				RexxToneDial(STRPTR String);
STRPTR 				RexxSimpleRequest(STRPTR String,STRPTR String2);
STRPTR 				RexxTwoGadRequest(STRPTR String,STRPTR String2);
STRPTR 				RexxFileRequest(STRPTR String,STRPTR String2);
STRPTR 				RexxSpeak(STRPTR String,STRPTR String2);

VOID				QuietExit(VOID);
VOID				TermExit(VOID);
VOID				Rexx2Front(VOID);
VOID				Term2Front(VOID);
VOID				Display2Front(VOID);
VOID				CloseDisplay(VOID);

BYTE				RexxASyncCommand(struct RexxMsg *RexxMsg,STRPTR Arg1,STRPTR Arg2);
VOID				RexxSyncCommand(struct RexxMsg *RexxMsg,STRPTR Arg1,STRPTR Arg2);

VOID __saveds			RexxServer(VOID);
VOID				HandleRexx(VOID);

	/* termSaveILBM. */

LONG				SaveRPort(struct RastPort *RPort,struct ViewPort *VPort,LONG LeftEdge,LONG TopEdge,LONG Width,LONG Height,LONG ParentWidth,LONG ParentHeight,LONG Cookie,STRPTR Name);

	/* termScale.c */

VOID				DeleteScale(VOID);
BYTE				CreateScale(VOID);
VOID __regargs			PrintScaled(UBYTE *Buffer,LONG Size,UBYTE Scale);

	/* termScroll.c */

VOID __regargs			ScrollLineRectFill(struct RastPort *RPort,WORD MinX,WORD MinY,WORD MaxX,WORD MaxY);
VOID __regargs			ScrollLineRaster(struct RastPort *RPort,WORD DeltaX,WORD DeltaY,WORD MinX,WORD MinY,WORD MaxX,WORD MaxY);

VOID __regargs			ScrollLineEraseScreen(BYTE Mode);
VOID __regargs			ScrollLineEraseLine(BYTE Mode);
VOID __regargs			ScrollLineEraseCharacters(WORD Chars);
VOID __regargs			ScrollLineShiftChar(WORD Size);
VOID __regargs			ScrollLinePutString(WORD Length);

	/* termSerial.c */

VOID				XOn(VOID);
VOID __regargs			SetFlags(struct IOExtSer *SomeRequest);
VOID __regargs			GetFlags(struct Configuration *Config,struct IOExtSer *SomeRequest);
VOID __regargs			SerialCommand(UBYTE *String);
VOID __regargs			SerWrite(APTR Buffer,LONG Size);
VOID				ClearSerial(VOID);
BYTE				DropDTR(VOID);
STRPTR				GetSerialError(LONG Error,BYTE *Reset);
VOID				DeleteSerial(VOID);
UBYTE *				CreateSerial(VOID);

	/* termSpeech. */

VOID				DeleteSpeech(VOID);
BYTE				CreateSpeech(VOID);
VOID				Say(UBYTE *String,...);
VOID				SpeechSetup(VOID);

	/* termStatus.c */

VOID				RefreshInfoWindow(VOID);
VOID				CloseInfoWindow(VOID);
VOID				OpenInfoWindow(VOID);

	/* termStringHook.c */

VOID __saveds __asm		CommandKey(register __a0 struct Hook *Hook,register __a1 ULONG *Msg,register __a2 struct SGWork *Work);

	/* termToneDial.c */

VOID				DeleteTone(VOID);
BYTE				ToneDial(UBYTE *Number);

	/* termTransfer.c */

VOID				SendTextFile(UBYTE *TheFile);
VOID				StartXprReceive(BYTE Type);
BYTE				StartXprSend(BYTE Type);
BYTE				ASCIISetup(VOID);
VOID				ASCIIShutdown(VOID);

	/* termXEM.c */

BYTE				SetEmulatorOptions(BYTE Mode);
VOID				CloseEmulator(VOID);
BYTE				OpenEmulator(UBYTE *Name);
VOID				SetupXEM_MacroKeys(struct MacroKeys *Keys);

	/* termXPR.c */

LONG __saveds __asm		xpr_fopen(register __a0 UBYTE *FileName,register __a1 UBYTE *AccessMode);
LONG __saveds __asm		xpr_fclose(register __a0 struct Buffer *File);
LONG __saveds __asm		xpr_fread(register __a0 APTR Buffer,register __d0 LONG Size,register __d1 LONG Count,register __a1 struct Buffer *File);
LONG __saveds __asm		xpr_fwrite(register __a0 APTR Buffer,register __d0 LONG Size,register __d1 LONG Count,register __a1 struct Buffer *File);
ULONG __saveds __asm		xpr_sread(register __a0 UBYTE *Buffer,register __d0 ULONG Size,register __d1 LONG Timeout);
LONG __saveds __asm		xpr_swrite(register __a0 UBYTE *Buffer,register __d0 LONG Size);
LONG __saveds			xpr_sflush(VOID);
LONG __saveds __asm		xpr_update(register __a0 struct XPR_UPDATE *UpdateInfo);
LONG __saveds			xpr_chkabort(VOID);
LONG __saveds __asm		xpr_gets(register __a0 UBYTE *Prompt,register __a1 UBYTE *Buffer);
LONG __saveds __asm		xpr_setserial(register __d0 LONG Status);
LONG __saveds __asm		xpr_ffirst(register __a0 UBYTE *Buffer,register __a1 UBYTE *Pattern);
LONG __saveds __asm		xpr_fnext(register __d0 LONG OldState,register __a0 UBYTE *Buffer,register __a1 UBYTE *Pattern);
LONG __saveds __asm		xpr_finfo(register __a0 UBYTE *FileName,register __d0 LONG InfoType);
LONG __saveds __asm		xpr_fseek(register __a0 struct Buffer *File,register __d0 LONG Offset,register __d1 LONG Origin);
ULONG __saveds __asm		xpr_options(register __d0 LONG NumOpts,register __a0 struct xpr_option **Opts);
LONG __saveds __asm		xpr_unlink(register __a0 UBYTE *FileName);
LONG __saveds			xpr_squery(VOID);
LONG __saveds __asm		xpr_getptr(register __d0 LONG InfoType);
LONG __saveds __asm		xpr_stealopts(register __a0 UBYTE *Prompt,register __a1 UBYTE *Buffer);

struct Gadget *			CreateAllGetsGadgets(BYTE LoadGadget,UBYTE *String,UBYTE *Prompt,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge,struct Screen *Screen);

BYTE				ProtocolSetup(VOID);
VOID				SaveProtocolOpts(VOID);
BYTE				SelectProtocol(UBYTE *Name,struct Window *ParentWindow);

	/* termData.c */

extern struct ExecBase		*SysBase;
extern struct DosLibrary	*DOSBase;

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

extern struct timerequest	*TimeRequest;
extern struct MsgPort		*TimePort;

extern struct IOStdReq		*ConsoleRequest;
extern struct Device		*ConsoleDevice;
extern struct KeyMap		*KeyMap;
extern BPTR			 KeySegment;

extern struct Screen		*Screen;
extern struct Window		*Window;
extern struct Window		*StatusWindow;
extern UWORD			 StatusOffset;
extern APTR			 OldWindowPtr;
extern struct BitMap		*InterleavedBitMap;
extern struct Requester		*RequesterList;

extern struct ViewPort		*VPort;
extern struct RastPort		*RPort;
extern struct TextFont		*Topaz,*GFX,*CurrentFont,*UserTextFont;
extern WORD			 UserFontHeight,UserFontWidth,UserFontBase;
extern struct TextAttr		 UserFont;
extern struct TextFont		*TextFont;
extern WORD			 TextFontHeight,TextFontWidth,TextFontBase;
extern struct TextAttr		 TextAttr;
extern UBYTE			 TextFontName[40],UserFontName[40];
extern APTR			 VisualInfo;

extern UWORD			 StandardPens[];
extern UWORD			 ANSIPens[];
extern UWORD			 EGAPens[];
extern UWORD			 AtomicColours[16];
extern UWORD			 EGAColours[16];
extern UWORD			 ANSIColours[16];
extern UWORD			 DefaultColours[16];
extern UWORD			 BlinkColours[16];
extern UWORD			 StandardColours[16];

extern struct Process		*ThisProcess;
extern struct Process		*RexxProcess,
				*RexxBackgroundProcess;
extern struct MsgPort		*TermRexxPort;
extern struct Process		*StatusProcess;
extern struct Process		*BufferProcess;
extern struct WBStartup		*WBenchMsg;
extern BYTE			 ClipBit,
				 CheckBit;

extern struct InputEvent	*FakeInputEvent;

extern struct IOExtSer		*ReadRequest;
extern struct IOExtSer		*WriteRequest;
extern struct MsgPort		*ReadPort;
extern APTR			 ReadBuffer,
				 HostReadBuffer;
extern UBYTE			*SerialMessage;

extern struct Hotkeys		 Hotkeys;
extern struct NewBroker		 NewTermBroker;

extern struct TextAttr		 DefaultFont;
extern struct TextAttr		 GFXFont;

extern UBYTE			 AnyChannel[4];

extern UBYTE __chip		 SineWave[8];

extern struct IOAudio		*AudioBlock;

extern UWORD __chip		 Stopwatch[(1 + 16 + 1) * 2];
extern UWORD __chip		 MarkerData[(1 + 15 + 1) * 2];

extern BYTE			 ValidTab[256];
extern UBYTE			 IBMConversion[256];
extern BYTE			 GfxTable[256];

extern struct SpecialKey	 SpecialKeys[13];
extern JUMP			*SpecialTable;

extern BYTE			 AbortMap[256];
extern JUMP			*AbortTable;

extern UBYTE			 SharedBuffer[512];

extern struct NewMenu		 TermMenu[];
extern struct Menu		*Menu;

extern struct TermPort		*TermPort;

extern struct Configuration	 Config;
extern struct Configuration	 PrivateConfig;
extern struct SpeechConfig	 SpeechConfig;
extern BYTE			 English;
extern BYTE			 Status;
extern BYTE			 Online,WasOnline;
extern struct Configuration	*BackupConfig;
extern UWORD			 PublicModes;

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

extern ULONG			 ModeID[16];

extern struct Buffer		*FileCapture;
extern BPTR			 PrinterCapture;
extern UBYTE			 CaptureName[256];
extern BYTE			 StandardPrinterCapture,
				 ControllerActive;

extern UBYTE			**BufferLines;
extern LONG			 Lines;
extern struct SignalSemaphore	*BufferSemaphore;
extern LONG			 MaxLines;
extern LONG			 BufferSpace;
extern BYTE			 BufferClosed;
extern BYTE			 BufferFrozen;

extern struct PhoneEntry	**Phonebook;
extern LONG			 PhoneSize;
extern LONG			 NumPhoneEntries;
extern UBYTE			 PhonePassword[256];
extern BYTE			 PhonePasswordUsed;

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

extern struct MacroKeys		*MacroKeys;

extern UBYTE			*StripBuffer;

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

extern BYTE			 ResetDisplay,DisplayReopened;

extern UBYTE			*AttentionBuffers[8],AttentionCount[8],FlowCount;
extern BYTE			 BaudPending,FullCheck;
extern UBYTE			 BaudBuffer[80],BaudCount;

extern struct FlowInfo		 FlowInfo;

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

extern struct Window		*TransferWindow;
extern struct Menu		*TransferMenu;
extern struct Gadget		*TransferGadgetArray[GAD_TRANSFER_SKIP + 1];
extern struct List		 TransferInfoList;
extern struct TextBox		*TransferBoxArray[BOX_TRANSFER_RIGHT2 + 1],
				*TransferBoxList;

extern UBYTE			*DownloadPath;
extern BYTE			 Uploading;
extern BYTE			 DidTransfer;

extern struct Library		*XProtocolBase;
extern struct XPR_IO		*XprIO;

extern UBYTE			 ProtocolOptsBuffer[256];
extern BYTE			 NewLibrary,NewOptions;
extern UBYTE			 LastXprLibrary[256];
extern UBYTE			 ConvNumber[30],ConvNumber10[30];
extern BYTE			 UsesZModem,SendAbort,TransferAborted;

extern UBYTE			 ZModemCancel[20];

extern LONG			 CurrentPay;
extern LONG			 PayPerUnit[2];
extern LONG			 SecPerUnit[2];
extern LONG			 WhichUnit;
extern UBYTE			 Password[20];
extern UBYTE			 UserName[20];
extern struct PhoneEntry	*ChosenEntry;
extern BYTE			 ChosenInUse;

extern UBYTE			 WindowName[256];

extern BYTE			 WeAreBlocking;

extern struct List		*DialList;

extern BYTE			 SendStartup;

extern BYTE			 ReleaseSerial;
extern BYTE			 ResetSerial;
extern BYTE			 BatchMode;
extern BYTE			 SerialSet;
extern BYTE			 MainTerminated;

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

extern struct Hook		 CommandHook;
extern BYTE			 DontActivate;
extern UBYTE			 CommandWorkBuffer[256];
extern struct StringExtend	 CommandExtend;
extern struct Window		*CommandWindow;
extern struct Gadget		*CommandGadget;
extern struct Gadget		*ActiveGadget;

extern struct Process		*ClipProcess;
extern struct MsgPort		*ClipPort;
extern BYTE			 ClipInput,ClipXerox;

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

extern struct NewMenu		 GetsMenu[];

extern BYTE			 Initializing,LoadColours;

extern UBYTE			*Raster,*RasterAttr;
extern WORD			 RasterWidth,RasterHeight;
extern BYTE			 Marking;

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

extern struct List		 SequenceList;
extern LONG			 SequenceCount;

extern ULONG			 VersionProps[2];

extern BYTE			 ExitQuietly;

extern struct Window		*RexxWindow;

extern struct Window		*TopWindow;
extern struct Window		*WindowStack[5];
extern WORD			 WindowStackPtr;

extern LONG			 TermID;
extern UBYTE			 TermIDString[];

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

extern struct List		 DoubleBufferList;
extern struct SignalSemaphore	 DoubleBufferSemaphore;

extern struct XEM_IO		*XEM_IO;
extern ULONG			 XEM_Signal;
extern struct XEmulatorHostData	 XEM_HostData;
extern UBYTE			*OptionTitle;
extern struct List		 XEM_MacroList;
extern struct XEmulatorMacroKey	*XEM_MacroKeys;
extern UBYTE			 EmulationName[40];

extern struct List		 EmptyList;

extern UBYTE			 ScrollLineFirst,ScrollLineLast,
				 ScrollLineCount;
extern struct ScrollLineInfo	*ScrollLines;

extern struct MsgPort		*ReviewPort;
extern struct Window		*ReviewWindow;

extern ULONG			 BytesIn,
				 BytesOut;
extern struct DateStamp		 SessionStart;
extern struct Window		*InfoWindow;

extern LONG			 InterWidth,
				 InterHeight;
