; Please forgive me for the presence of include files here. I started just
; to copy intuition.i because MetaComco's assembler choked on it, but then
; I got carried away. I developed this on a 512k floppy system and I got
; impatient...

EXEC_TYPES_I SET 1

STRUCTURE   MACRO
\1          SET     0 
SOFFSET     SET     \2
            ENDM
SHORT	    MACRO
\1	    EQU	    SOFFSET
SOFFSET	    SET	    SOFFSET+1
	    ENDM
BYTE        MACRO
\1          EQU     SOFFSET
SOFFSET     SET     SOFFSET+1
            ENDM
UBYTE       MACRO
\1          EQU     SOFFSET
SOFFSET     SET     SOFFSET+1
            ENDM
WORD        MACRO
\1          EQU     SOFFSET
SOFFSET     SET     SOFFSET+2
            ENDM
UWORD       MACRO
\1          EQU     SOFFSET
SOFFSET     SET     SOFFSET+2
            ENDM
LONG        MACRO
\1          EQU     SOFFSET
SOFFSET     SET     SOFFSET+4
            ENDM
ULONG       MACRO
\1          EQU     SOFFSET
SOFFSET     SET     SOFFSET+4
            ENDM
APTR        MACRO
\1          EQU     SOFFSET
SOFFSET     SET     SOFFSET+4
            ENDM
STRUCT      MACRO
\1          EQU     SOFFSET
SOFFSET     SET     SOFFSET+\2
            ENDM
BPTR	    MACRO                      
\1	    EQU	    SOFFSET
SOFFSET	    SET	    SOFFSET+4
	    ENDM
BSTR	    MACRO
\1	    EQU	    SOFFSET
SOFFSET     SET	    SOFFSET+4
	    ENDM
LABEL       MACRO
\1          EQU     SOFFSET
            ENDM

BITDEF      MACRO   * prefix,&name,&bitnum
            BITDEF0 \1,\2,B_,\3
\@BITDEF    SET     1<<\3
            BITDEF0 \1,\2,F_,\@BITDEF
            ENDM

BITDEF0     MACRO   * prefix,&name,&type,&value
\1\3\2      EQU     \4
            ENDM


MODE_OLDFILE         EQU   1005   
MODE_NEWFILE         EQU   1006   

    BITDEF  MEM,PUBLIC,0
    BITDEF  MEM,CHIP,1
    BITDEF  MEM,FAST,2
    BITDEF  MEM,CLEAR,16

IECLASS_RAWKEY          EQU   $01
IEQUALIFIER_LCOMMAND    EQU   $0040
IEQUALIFIERB_LCOMMAND   EQU   6
HELPKEY			EQU   $5f
BACKSPACE		EQU   $8
RETURN			EQU   $0d


 STRUCTURE  InputEvent,0
   APTR    ie_NextEvent
   UBYTE   ie_Class
   UBYTE   ie_SubClass
   UWORD   ie_Code
   UWORD   ie_Qualifier
   LABEL   ie_EventAddress
   WORD    ie_X
   WORD    ie_Y
   STRUCT  ie_TimeStamp,8
   LABEL   ie_SIZEOF

 STRUCTURE  LN,0
    APTR    LN_SUCC
    APTR    LN_PRED
    UBYTE   LN_TYPE
    BYTE    LN_PRI
    APTR    LN_NAME
    LABEL   LN_SIZE

 STRUCTURE  IS,LN_SIZE
    APTR    IS_DATA
    APTR    IS_CODE
    LABEL   IS_SIZE

 STRUCTURE  MN,LN_SIZE
    APTR    MN_REPLYPORT
    UWORD   MN_LENGTH
    LABEL   MN_SIZE

 STRUCTURE  IO,MN_SIZE
    APTR    IO_DEVICE
    APTR    IO_UNIT
    UWORD   IO_COMMAND
    UBYTE   IO_FLAGS
    BYTE    IO_ERROR
    LABEL   IO_SIZE
    ULONG   IO_ACTUAL
    ULONG   IO_LENGTH
    APTR    IO_DATA
    ULONG   IO_OFFSET
    LABEL   IOSTD_SIZE
    BITDEF  IO,QUICK,0
DEVINIT     MACRO
         IFC       '\1',''
CMD_COUNT   SET     CMD_NONSTD
         ENDC
         IFNC    '\1',''
CMD_COUNT   SET       \1
         ENDC
            ENDM

DEVCMD      MACRO   * cmdname
\1          EQU      CMD_COUNT
CMD_COUNT   SET       CMD_COUNT+1
	    ENDM

       DEVINIT 0
       DEVCMD  CMD_INVALID
       DEVCMD  CMD_RESET
       DEVCMD  CMD_READ
       DEVCMD  CMD_WRITE
       DEVCMD  CMD_UPDATE
       DEVCMD  CMD_CLEAR
       DEVCMD  CMD_STOP
       DEVCMD  CMD_START
       DEVCMD  CMD_FLUSH
       DEVCMD  CMD_NONSTD

   DEVINIT
   DEVCMD       IND_ADDHANDLER
   DEVCMD       IND_REMHANDLER
   DEVCMD       IND_WRITEEVENT
   DEVCMD       IND_SETTHRESH
   DEVCMD       IND_SETPERIOD
   DEVCMD       IND_SETMPORT
   DEVCMD       IND_SETMTYPE
   DEVCMD       IND_SETMTRIG

 STRUCTURE  LH,0
    APTR    LH_HEAD
    APTR    LH_TAIL
    APTR    LH_TAILPRED
    UBYTE   LH_TYPE
    UBYTE   LH_pad
    LABEL   LH_SIZE

 STRUCTURE  MP,LN_SIZE
    UBYTE   MP_FLAGS
    UBYTE   MP_SIGBIT
    APTR    MP_SIGTASK
    STRUCT  MP_MSGLIST,LH_SIZE
    LABEL   MP_SIZE

 STRUCTURE LIB,LN_SIZE
    UBYTE   LIB_FLAGS
    UBYTE   LIB_pad
    UWORD   LIB_NEGSIZE
    UWORD   LIB_POSSIZE
    UWORD   LIB_VERSION
    UWORD   LIB_REVISION
    APTR    LIB_IDSTRING
    ULONG   LIB_SUM
    UWORD   LIB_OPENCNT
    LABEL   LIB_SIZE


WINDOWSIZING   equ $0001
WINDOWDRAG     equ $0002
WINDOWDEPTH    equ $0004
WINDOWCLOSE    equ $0008
SMART_REFRESH  equ $0000
ACTIVATE equ $1000


; === NewWindow ==
 STRUCTURE NewWindow,0
    WORD nw_LeftEdge
    WORD nw_TopEdge
    WORD nw_Width
    WORD nw_Height
    BYTE nw_DetailPen
    BYTE nw_BlockPen
    ULONG nw_IDCMPFlags
    LONG nw_Flags
    APTR nw_FirstGadget
    APTR nw_CheckMark
    APTR nw_Title
    APTR nw_Screen
    APTR nw_BitMap
    WORD nw_MinWidth
    WORD nw_MinHeight
    WORD nw_MaxWidth
    WORD nw_MaxHeight
    WORD nw_Type
    LABEL nw_SIZE

   STRUCTURE View,0
   LONG    v_ViewPort
   LONG    v_LOFCprList
   LONG    v_SHFCprList
   WORD    v_DyOffset
   WORD    v_DxOffset
   WORD    v_Modes
   LABEL   v_SIZEOF

 STRUCTURE IntuitionBase,0
	STRUCT	ib_LibNode,LIB_SIZE
	STRUCT	ib_ViewLord,v_SIZEOF
	APTR	ib_ActiveWindow
	APTR	ib_ActiveScreen
	APTR	ib_FirstScreen
	LABEL	ib_SIZEOF

; === Screen ===
; Be aware that this structure is truncated!
 STRUCTURE Screen,0
    APTR sc_NextScreen
    APTR sc_FirstWindow
    WORD sc_LeftEdge
    WORD sc_TopEdge
    WORD sc_Width
    WORD sc_Height
    WORD sc_MouseY
    WORD sc_MouseX
    WORD sc_Flags
    LABEL sc_SIZEOF

WBENCHSCREEN   equ   $0001
CUSTOMSCREEN   equ   $000F

; === Window ==
 STRUCTURE Window,0
    APTR wd_NextWindow
    WORD wd_LeftEdge
    WORD wd_TopEdge
    WORD wd_Width
    WORD wd_Height
    WORD wd_MouseY
    WORD wd_MouseX
    WORD wd_MinWidth
    WORD wd_MinHeight
    WORD wd_MaxWidth
    WORD wd_MaxHeight
    LONG wd_Flags
    APTR wd_MenuStrip
    APTR wd_Title
    APTR wd_FirstRequest
    APTR wd_DMRequest
    WORD wd_ReqCount
    APTR wd_WScreen
    APTR wd_RPort
    BYTE wd_BorderLeft
    BYTE wd_BorderTop
    BYTE wd_BorderRight
    BYTE wd_BorderBottom
    APTR wd_BorderRPort
    APTR wd_FirstGadget
    APTR wd_Parent
    APTR wd_Descendant
    APTR wd_Pointer
    BYTE wd_PtrHeight
    BYTE wd_PtrWidth
    BYTE wd_XOffset
    BYTE wd_YOffset
    ULONG wd_IDCMPFlags
    APTR wd_UserPort
    APTR wd_WindowPort
    APTR wd_MessageKey
    BYTE wd_DetailPen
    BYTE wd_BlockPen
    APTR wd_CheckMark
    APTR wd_ScreenTitle
    SHORT wd_GZZMouseX
    SHORT wd_GZZMouseY
    SHORT wd_GZZWidth
    SHORT wd_GZZHeight
    APTR wd_ExtData
    APTR wd_UserData
    APTR wd_WLayer
    LABEL wd_Size

 STRUCTURE  IV,0
    APTR    IV_DATA
    APTR    IV_CODE
    APTR    IV_NODE
    LABEL   IV_SIZE
    BITDEF  S,SAR,15
    BITDEF  S,TQE,14
    BITDEF  S,SINT,13
 STRUCTURE  SH,LH_SIZE
    UWORD   SH_PAD
    LABEL   SH_SIZE

; Note that the following structure is truncated!

 STRUCTURE  ExecBase,LIB_SIZE
  UWORD SoftVer
  WORD  LowMemChkSum
  ULONG ChkBase
  APTR  ColdCapture
  APTR  CoolCapture
  APTR  WarmCapture
  APTR  SysStkUpper
  APTR  SysStkLower
  ULONG MaxLocMem
  APTR DebugEntry
  APTR DebugData
  APTR AlertData
  APTR RsvdExt
  WORD  ChkSum
  LABEL  IntVects
  STRUCT   IVTBE,IV_SIZE
  STRUCT   IVDSKBLK,IV_SIZE
  STRUCT   IVSOFTINT,IV_SIZE
  STRUCT   IVPORTS,IV_SIZE
  STRUCT   IVCOPER,IV_SIZE
  STRUCT   IVVERTB,IV_SIZE
  STRUCT   IVBLIT,IV_SIZE
  STRUCT   IVAUD0,IV_SIZE
  STRUCT   IVAUD1,IV_SIZE
  STRUCT   IVAUD2,IV_SIZE
  STRUCT   IVAUD3,IV_SIZE
  STRUCT   IVRBF,IV_SIZE
  STRUCT   IVDSKSYNC,IV_SIZE
  STRUCT   IVEXTER,IV_SIZE
  STRUCT   IVINTEN,IV_SIZE
  STRUCT   IVNMI,IV_SIZE
  APTR  ThisTask
  LABEL SYSBASESIZE

 STRUCTURE  TC,LN_SIZE
    UBYTE   TC_FLAGS
    UBYTE   TC_STATE
    BYTE    TC_IDNESTCNT
    BYTE    TC_TDNESTCNT
    ULONG   TC_SIGALLOC
    ULONG   TC_SIGWAIT
    ULONG   TC_SIGRECVD
    ULONG   TC_SIGEXCEPT
    UWORD   TC_TRAPALLOC
    UWORD   TC_TRAPABLE
    APTR    TC_EXCEPTDATA
    APTR    TC_EXCEPTCODE
    APTR    TC_TRAPDATA
    APTR    TC_TRAPCODE
    APTR    TC_SPREG
    APTR    TC_SPLOWER
    APTR    TC_SPUPPER
    APTR    TC_SWITCH
    APTR    TC_LAUNCH
    STRUCT  TC_MEMENTRY,LH_SIZE
    APTR    TC_Userdata
    LABEL   TC_SIZE

 STRUCTURE CommandLineInterface,0
    LONG   cli_Result2         
    BSTR   cli_SetName         
    BPTR   cli_CommandDir      
    LONG   cli_ReturnCode      
    BSTR   cli_CommandName     
    LONG   cli_FailLevel       
    BSTR   cli_Prompt          
    BPTR   cli_StandardInput   
    BPTR   cli_CurrentInput    
    BSTR   cli_CommandFile     
    LONG   cli_Interactive     
    LONG   cli_Background      
    BPTR   cli_CurrentOutput   
    LONG   cli_DefaultStack    
    BPTR   cli_StandardOutput  
    BPTR   cli_Module          
    LABEL  cli_SIZEOF          

 STRUCTURE Process,0
    STRUCT  pr_Task,TC_SIZE
    STRUCT  pr_MsgPort,MP_SIZE  
    WORD    pr_Pad              
    BPTR    pr_SegList          
    LONG    pr_StackSize        
    APTR    pr_GlobVec          
    LONG    pr_TaskNum          
    BPTR    pr_StackBase        
    LONG    pr_Result2          
    BPTR    pr_CurrentDir       
    BPTR    pr_CIS              
    BPTR    pr_COS              
    APTR    pr_ConsoleTask      
    APTR    pr_FileSystemTask   
    BPTR    pr_CLI              
    APTR    pr_ReturnAddr       
    APTR    pr_PktWait          
    APTR    pr_WindowPtr        
    LABEL   pr_SIZEOF           

NEWLIST      MACRO   * list
          MOVE.L  \1,(\1)
          ADDQ.L  #LH_TAIL,(\1)
          CLR.L   LH_TAIL(\1)
          MOVE.L  \1,(LH_TAIL+LN_PRED)(\1)
          ENDM

NT_MSGPORT      EQU     4
NT_MESSAGE      EQU     5
PA_SIGNAL       EQU  0

DosF	MACRO
        move.l  _DOSBase,a6
        jsr     _LVO\1(A6)
        ENDM

ExecF	MACRO                   Same as CALL except, call exec
        move.L  _SysBase,A6	lib instead of dos lib....
        jsr     _LVO\1(A6)
        ENDM

LibF	macro
	jsr	_LVO\1(a6)
	endm

IntF	macro
	move.l	_IntuitionBase,a6
	jsr	_LVO\1(A6)
	endm


Ucase	macro
	andi.b	#%01011111,\1
	endm

_LVOOpenDevice                    equ	-444
_LVOOpenLibrary                   equ	-552
_LVOCloseDevice                   equ	-450
_LVODoIO                          equ	-456
_LVOSignal                        equ	-324
_LVOFindTask                      equ	-294
_LVOAllocSignal                   equ	-330
_LVOWait                          equ	-318
_LVOOpenWindow                    equ	-204
_LVOCloseWindow                   equ	-72
_LVOAllocMem                      equ	-198
_LVOUnLoadSeg                     equ	-156
_LVOCreateProc                    equ	-138
_LVOCloseLibrary                  equ	-414
_LVOFreeSignal                    equ	-336
_LVOFreeMem                       equ	-210
_LVOSetWindowTitles               equ	-276
_LVOPermit                        equ	-138
_LVOForbid                        equ	-132
_LVOSizeWindow                    equ	-288
_LVOCurrentDir                    equ	-126

DOCMD		equ	1
DOMAC		equ	2
NOMEM		equ	101
NOSIG		equ	102
NOINPUT		equ	103
NOCONSOLE	equ	104


ClearWindow	macro
	lea	ClrWindowStr(pc),a0
	bsr	ConWriteLine
	endm

UhOh	macro	
	lea	\1(pc),a0
	bra	ProcessError
	endm


 STRUCTURE KeyRec,0
 	APTR	kr_Next			; Next record
	APTR	kr_Prev			; Previous record
	UWORD	kr_Qual			; Key qualifier
	UWORD	kr_Key			; Key 
	STRUCT	kr_MacStr,80		; Definiton of key
	STRUCT  kr_KeyStr,20		; Key description.
	LABEL	kr_SIZEOF

Debug	set	0

;------ Bit positions for key qualifiers
L_SHIFT		equ	0
R_SHIFT		equ	1
CLOCK		equ	2
CONTROL		equ	3
L_ALT		equ	4
R_ALT		equ	5
L_AMIGA		equ	6
R_AMIGA		equ	7
KPAD		equ	8
