(******************************************************************
****
****    Name:   ConLib.mod
****
****    Author: Bjørn Reese
****
****    Template of Oberon Module for 'con.library'
****
****    WARNING!! Not tested at all!
****
******************************************************************)

MODULE ConLib;

IMPORT	e :Exec;

  ADDRESS * = e.ADDRESS;
  CHARDEFSIZE * = 36;
  IGNOREVALUE * = -1;

TYPE
  ConBase * = STRUCT
    con_Lib * : e.Library;		(* Library Node *)
    con_SegList * : ADDRESS;		(* Segment List [from LoadSeg()] *)
    con_IntBase * : ADDRESS;		(* Intuition Base *)
    con_MathBase * : ADDRESS;		(* MathFFP Base *)
  END;
  ConBasePtr * = POINTER TO ConBase;
  ConHandle * = STRUCT
    cnh_CDBase * : ADDRESS;		(* Base of Console Device *)
    cnh_Window * : ADDRESS;		(* Our Intuition Window *)
    cnh_UserPort * : ADDRESS;		(* UserPort for Window *)
    cnh_Unit * : ADDRESS;		(* ConUnit *)
    cnh_WriteIO * : ADDRESS;		(* Our Write IO Port *)
    cnh_Signal * : LONGSET;		(* SignalSet [for Wait()] *)
    cnh_ExLength * : INTEGER;		(* Extra Space for String Formatting *)
    cnh_CursorStatus * : INTEGER;	(* Current Cursor Status [on/off] *)
    cnh_PadSpace * : CHAR;		(* Char for Leading Spaces in Numbers *)
    cnh_PadZero * : CHAR;		(* Char for Leading Zeros in Numbers *)
    cnh_PadGroup * : CHAR;		(* Char for Group Classifying *)
    cnh_PadString * : CHAR;		(* Char for Unused String Positions *)
    cnh_DecimalPoint * : CHAR;		(* Char for Decimal Point *)
    cnh_FloatE * : CHAR;		(* Char for Floating Point Exponent *)
    cnh_EchoTable * : ARRAY CHARDEFSIZE OF SHORTINT;	(* BitTable for Echo Chars *)
    cnh_UserNotes * : ARRAY 8 OF ADDRESS;	(* List of Pointers to UserNotes *)
    cnh_MsgHandler * : ADDRESS;		(* Pointer to a User Message Handler *)
    cnh_Reserved * : ARRAY 4 OF LONGINT;
  END;
  ConHandlePtr * = POINTER TO ConHandle;
  ConInfo * = STRUCT
    cin_XPos * : INTEGER;		(* Cursor X Position *)
    cin_YPos * : INTEGER;		(* Cursor Y Position *)
    cin_XSize * : INTEGER;		(* Chars per Line *)
    cin_YSize * : INTEGER;		(* Lines in Window *)
    cin_Styles * : INTEGER;		(* Text Styles *)
    cin_FgCol * : INTEGER;		(* ForeGround Color *)
    cin_BgCol * : INTEGER;		(* BackGround Color *)
    cin_Reserved * : ARRAY 4 OF LONGINT;
  END;
  ConInfoPtr * = POINTER TO ConInfo;
  AcceptStructure * = STRUCT
    acc_XStart * : INTEGER;		(* Start X Position *)
    acc_YStart * : INTEGER;		(* Start Y Position *)
    acc_Styles * : INTEGER;		(* Text Styles *)
    acc_FgCol * : INTEGER;		(* ForeGround Color *)
    acc_BgCol * : INTEGER;		(* BackGround Color *)
    acc_ExitFlags * : LONGSET;		(* IDCMP Exit Flags *)
    acc_Class * : LONGSET;		(* Copy of im_Class *)
    acc_Code * : INTEGER;		(* Copy of im_Code *)
    acc_Qualifier * : INTEGER;		(* Copy of im_Qualifier *)
    acc_IAddress * : ADDRESS;		(* Copy of im_IAddress *)
    acc_MouseX * : INTEGER;		(* Copy of im_MouseX *)
    acc_MouseY * : INTEGER;		(* Copy of im_MouseY *)
    acc_Seconds * : LONGINT;		(* Copy of im_Seconds *)
    acc_Micros * : LONGINT;		(* Copy of im_Micros *)
    acc_IDCMPWindow : ADDRESS;		(* Copy of im_IDCMPWindow *)
    acc_ValidTable * : ARRAY CHARDEFSIZE OF SHORTINT;	(* BitTable of Valid Chars *)
    acc_ExitTable * : ARRAY CHARDEFSIZE OF SHORTINT;	(* BitTable of Exit Chars *)
    acc_Char * : CHAR;			(* ASCII char *)
    acc_Pad001 * : SHORTINT;		(* Nothing serious *)
    acc_Reserved * : ARRAY 4 OF LONGINT;
  END;
  AcceptStructurePtr * = POINTER TO AcceptStructure;
  EAcceptStructure * = STRUCT
    accs_InputBuffer * : ADDRESS;	(* Pointer to Input Buffer *)
    accs_UndoBuffer * : ADDRESS;	(* Pointer to Work Buffer *)
    accs_MaxLength * : INTEGER;		(* Maximum Length of Text [incl. NULL] *)
    accs_FieldLen * : INTEGER;		(* Length of Input Field [incl. NULL] *)
    accs_Length * : INTEGER;		(* Current Length of Text [excl. NULL] *)
    accs_Position * : INTEGER;		(* Current Position in Text *)
    accs_DispPos * : INTEGER;		(* First Displayed Position in Text *)
    accs_Reserved * : ARRAY 4 OF LONGINT;
  END;
  EAcceptStructurePtr * = POINTER TO EAcceptStructure;

CONST
  DEFMODE_ALL * = 0;
  DEFMODE_NEW * = 1;
  DEFMODE_ADD * = 2;
  DEFMODE_REM * = 3;
  DEFMODE_GET * = 4;
  DEFALL * = 0;
  DEFNONE * = 00020000H;
  DEFALFANUM * = 00040000H;
  DEFALFA * = 00060000H;
  DEFNUMERIC * = 00080000H;
  DEFDECIMAL * = 000A0000H;
  DEFHEX * = 000C0000H;
  DEFOCTAL * = 000E0000H;
  DEFBINARY * = 00100000H;
  DEFFLOAT * = 00120000H;
  CURSOROFF * = 0;
  CURSORON * = 1;
  ACCB_ERASE * = 31;
  ACCF_ERASE * = 80000000H;
  ACCB_RAWKEY * = 28;
  ACCF_RAWKEY * = 10000000H;
  ACCB_DUALKEY * = 27;
  ACCF_DUALKEY * = 08000000H;
  ACCB_UPKEY * = 26;
  ACCF_UPKEY * = 04000000H;
  ACCB_ECHO * = 25;
  ACCF_ECHO * = 0200000H;
  ACCB_WAIT * = 24;
  ACCF_WAIT * = 01000000H;
  ACCB_JUSTIFIED * = 22;
  ACCF_JUSTIFIED * = 00400000H;
  ACCB_CONTINUE * = 21;
  ACCF_CONTINUE * = 00200000H;
  ACCB_OVERWRITE * = 20;
  ACCF_OVERWRITE * = 00100000H;
  ACCB_LASTEXIT * = 19;
  ACCF_LASTEXIT * = 00080000H;
  ACCB_FULLSTOP * = 18;
  ACCF_FULLSTOP * = 00040000H;
  ACCB_NOAMIGA * = 17;
  ACCF_NOAMIGA * = 00020000H;
  ACCB_NOSTDAMIGA * = 16;
  ACCF_NOSTDAMIGA * = 00010000H;
  ACCB_NOSCROLL * = 15;
  ACCF_NOSCROLL * = 00008000H;
  SGFB_PLAIN * = 0;
  SGFF_PLAIN * = 0000H;
  SGFB_BOLD * = 1;
  SGFF_BOLD * = 0001H;
  SGFB_ITALIC * = 2;
  SGFF_ITALIC * = 0002H;
  SGFB_UNDERLINED * = 3;
  SGFF_UNDERLINED * = 0004H;
  CNV_DECIMAL * = 00000001H;
  CNV_HEX * = 00000002H;
  CNV_OCTAL * = 00000003H;
  CNV_BINARY * = 00000004H;
  CNV_SIGNED * = 00010000H;
  CNV_LEADSPACE * = 00020000H;
  AKEY_NONE * = 0;
  AKEY_HELP * = 5;
  AKEY_BS * = 8;
  AKEY_TAB * = 9;
  AKEY_LF * = 10;
  AKEY_RETURN * = 13;
  AKEY_ARROWRG * = 17;
  AKEY_ARROWLF * = 18;
  AKEY_ARROWUP * = 19;
  AKEY_ARROWDN * = 20;
  AKEY_ESC * = 27;
  AKEY_DEL * = 127;
  AKEY_F1 * = 129;
  AKEY_F2 * = 130;
  AKEY_F3 * = 131;
  AKEY_F4 * = 132;
  AKEY_F5 * = 133;
  AKEY_F6 * = 134;
  AKEY_F7 * = 135;
  AKEY_F8 * = 136;
  AKEY_F9 * = 137;
  AKEY_F10 * = 138;
  AKEY_CSI * = 155;
 
VAR
  con* [4] : ConBasePtr;

PROCEDURE OpenCon * {con, -30} (ConWindow {8}:ADDRESS; CursorMode {0}:INTEGER):ADDRESS;
PROCEDURE CloseCon * {con, -36} (ConHandle {8}:ADDRESS);
PROCEDURE DoFormat * {con, -42} (ConHandle {8}, String {9}, FormatArgs {10}, TextBuffer {11}:ADDRESS; BufferSize {0}: LONGINT):ADDRESS;
PROCEDURE UserNotes * {con, -48} (ConHandle {8}, UserText {9}:ADDRESS; NoteNumber {0}:INTEGER);
PROCEDURE DefineChars * {con, -54} (Mode {0}:INTEGER; BitTable {9}, ArrayOfChars {10}:ADDRESS);
PROCEDURE DisplayRaw * {con, -60} (ConHandle {8}, String {9}:ADDRESS; MaxLength {0}:LONGINT);
PROCEDURE Display * {con, -66} (ConHandle {8}, String {9}, FormatArgs {10}:ADDRESS; MaxLength {0}:LONGINT);
PROCEDURE Accept * {con, -72} (ConHandle {8}, AcceptStructure {9}:ADDRESS; Flags {0}:LONGINT):LONGINT;
PROCEDURE AcceptString * {con, -78} (ConHandle {8}, AcceptStructure {9}:ADDRESS; Flags {0}:LONGINT):LONGINT;
PROCEDURE SetMsgHandler * {con, -84} (ConHandle {8}, NewMsgHandler {9}:ADDRESS):ADDRESS;
PROCEDURE GetInfo * {con, -90} (ConHandle {8}, ConInfo {9}:ADDRESS):ADDRESS;
PROCEDURE SetGfx * {con, -96} (ConHandle {8}:ADDRESS; Styles {0}, FgCol {1}, BgCol {2}:INTEGER);
PROCEDURE GotoXY * {con, -102} (ConHandle {8}:ADDRESS; X {0}, Y {1}: INTEGER);
PROCEDURE Cursor * {con, -108} (ConHandle {8}:ADDRESS; Mode {0}:INTEGER);
PROCEDURE Scroll * {con, -114} (ConHandle {8}:ADDRESS; Step {0}:INTEGER);
PROCEDURE Convert * {con, -120} (String {9}, ResultBuffer {10}:ADDRESS; Flags {0}:LONGINT; MaxLength {1}:INTEGER):ADDRESS;

END ConLib.
