; Assembler header file for OSWord
; Written by DefMod (Dec  9 2012) on Sun Dec  9 15:43:51 2012
; Jonathan Coxhead, jonathan@doves.demon.co.uk, 7 Sept 1995

; OSLib---efficient, type-safe, transparent, extensible,
; register-safe API coverage of RISC OS
; 
; Copyright (c) 1994-2012 Jonathan Coxhead and OSLib maintainers
; 
; Licence:
; 
;    OSLib is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 1, or (at your option)
; any later version - and this with the following clarification and
; special exception:
; 
;    Linking this library statically or dynamically with other modules
; is making a combined work based on this library. Thus, the terms
; and conditions of the GNU General Public License cover the whole
; combination.
; 
;    As a special exception, the copyright holders of this library
; give you permission to link this library with independent modules
; to produce an executable, regardless of the license terms of these
; independent modules, and to copy and distribute the resulting
; executable under terms of your choice, provided that you also meet,
; for each linked independent module, the terms and conditions of the
; license of that module. An independent module is a module which is
; not derived from or based on this library. If you modify this
; library, you may extend this exception to your version of the library,
; but you are not obliged to do so. If you do not wish to do so, delete
; this exception statement from your version.
; 
;    OSLib is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
; 
;    You should have received a copy of the GNU General Public License
; along with this programme; if not, write to the Free Software
; Foundation, Inc, 675 Mass Ave, Cambridge, MA 02139, USA.

        [       :LNOT: :DEF: OSWord_Hdr
        GBLS    OSWord_Hdr

        [       :LNOT: :DEF: Get_Types
        GBLS    Get_Types
        ]
        [       :LNOT: :DEF: Types_Hdr
Get_Types                       SETS    "GET oslib/Types.Hdr"
        |
Get_Types                       SETS    ""
        ]
        $Get_Types

        [       :LNOT: :DEF: Get_OS
        GBLS    Get_OS
        ]
        [       :LNOT: :DEF: OS_Hdr
Get_OS                          SETS    "GET oslib/OS.Hdr"
        |
Get_OS                          SETS    ""
        ]
        $Get_OS

;Symbols for constants
OSWordReadClock_OpLocalString   *       &0
OSWordReadClock_OpLocalBCD      *       &1
OSWordReadClock_OpConvertBCDToString *       &2
OSWordReadClock_OpUTC           *       &3
OSWordWriteClock_OpTimeLocalString *       &8
OSWordWriteClock_OpDateLocalString *       &F
OSWordWriteClock_OpLocalString  *       &18
OSWordPointer_OpDefine          *       &0
OSWordPointer_OpSetBBox         *       &1
OSWordPointer_OpStep            *       &2
OSWordPointer_OpSetPosition     *       &3
OSWordPointer_OpReadPosition    *       &4
OSWordPointer_OpSetUnlinkedPosition *       &5
OSWordPointer_OpReadUnlinkedPosition *       &6
OSWordPointer_OpReadBBox        *       &7
OSWord_CharDefinitionECF1       *       &02
OSWord_CharDefinitionECF2       *       &03
OSWord_CharDefinitionECF3       *       &04
OSWord_CharDefinitionECF4       *       &05
OSWord_CharDefinitionDotDashPattern *       &06

;Symbols for structure offsets and sizes
        ^       0
        #       Byte
OSWordReadClock_Op              *       @

        ^       0
        #       Byte
OSWordWriteClock_Op             *       @

        ^       0
        #       Byte
OSWordPointer_Op                *       @

        ^       0
OSWord_TimerBlock_b             #       5*Byte
OSWord_TimerBlock               *       @

        ^       0
OSWord_CharDefinitionBlock_c    #       Char
OSWord_CharDefinitionBlock_definition #       8*Byte
OSWord_CharDefinitionBlock      *       @

        ^       0
OSWord_PaletteBlock_gcol        #       OS_GCOL
OSWord_PaletteBlock_colour_number #       Byte
OSWord_PaletteBlock_r           #       Byte
OSWord_PaletteBlock_g           #       Byte
OSWord_PaletteBlock_b           #       Byte
OSWord_PaletteBlock             *       @

        ^       0
OSWord_CursorPositionBlock_xprev #       Short
OSWord_CursorPositionBlock_yprev #       Short
OSWord_CursorPositionBlock_x    #       Short
OSWord_CursorPositionBlock_y    #       Short
OSWord_CursorPositionBlock      *       @

        ^       0
OSWordReadClock_LocalStringBlock_op #       OSWordReadClock_Op
        ^       0
OSWordReadClock_LocalStringBlock_string_c #       Char
OSWordReadClock_LocalStringBlock *       @

        ^       0
OSWordReadClock_LocalBCDBlock_op #       OSWordReadClock_Op
        ^       0
OSWordReadClock_LocalBCDBlock_date_and_time #       OS_BCDDateAndTime
OSWordReadClock_LocalBCDBlock   *       @

        ^       0
OSWordReadClock_ConvertBCDToStringBlock_bcd_op #       OSWordReadClock_Op
OSWordReadClock_ConvertBCDToStringBlock_bcd_date_and_time #       OS_BCDDateAndTime
        ^       0
OSWordReadClock_ConvertBCDToStringBlock_string_c #       Char
OSWordReadClock_ConvertBCDToStringBlock *       @

        ^       0
OSWordReadClock_UTCBlock_op     #       OSWordReadClock_Op
        ^       0
OSWordReadClock_UTCBlock_utc    #       OS_DateAndTime
OSWordReadClock_UTCBlock        *       @

        ^       0
OSWordWriteClock_Block_op       #       OSWordWriteClock_Op
OSWordWriteClock_Block_string   #       Char
OSWordWriteClock_Block          *       @
        
        MACRO
$label                          OSWordWriteClock_Block_MEMBERS
$label._op                      #       OSWordWriteClock_Op
        MEND
        
        ^       0
OSWordWriteClock_BlockBase      OSWordWriteClock_Block_MEMBERS
OSWordWriteClock_BlockBase      *       @

        ^       0
OSWordPointer_DefineBlock_reserved #       2*Byte
OSWordPointer_DefineBlock_op    #       OSWordPointer_Op
OSWordPointer_DefineBlock_shape_no #       Byte
OSWordPointer_DefineBlock_width #       Byte
OSWordPointer_DefineBlock_height #       Byte
OSWordPointer_DefineBlock_xactive #       Byte
OSWordPointer_DefineBlock_yactive #       Byte
OSWordPointer_DefineBlock_data  #       Ptr
OSWordPointer_DefineBlock       *       @

        ^       0
OSWordPointer_BBoxBlock_reserved #       3*Byte
OSWordPointer_BBoxBlock_op      #       OSWordPointer_Op
OSWordPointer_BBoxBlock_x0      #       Short
OSWordPointer_BBoxBlock_y0      #       Short
OSWordPointer_BBoxBlock_x1      #       Short
OSWordPointer_BBoxBlock_y1      #       Short
OSWordPointer_BBoxBlock         *       @

        ^       0
OSWordPointer_StepBlock_op      #       OSWordPointer_Op
OSWordPointer_StepBlock_xstep   #       Byte
OSWordPointer_StepBlock_ystep   #       Byte
OSWordPointer_StepBlock         *       @

        ^       0
OSWordPointer_PositionBlock_reserved #       Byte
OSWordPointer_PositionBlock_op  #       OSWordPointer_Op
OSWordPointer_PositionBlock_x   #       Short
OSWordPointer_PositionBlock_y   #       Short
OSWordPointer_PositionBlock     *       @

        ^       0
OSWord_ScreenBaseBlock_reserved #       3*Byte
OSWord_ScreenBaseBlock_type     #       Byte
OSWord_ScreenBaseBlock_base     #       Ptr
OSWord_ScreenBaseBlock          *       @

        ^       0
OSWord_Block_timer              #       OSWord_TimerBlock
        ^       0
OSWord_Block_char_definition    #       OSWord_CharDefinitionBlock
        ^       0
OSWord_Block_palette            #       OSWord_PaletteBlock
        ^       0
OSWord_Block_cursor_position    #       OSWord_CursorPositionBlock
        ^       0
OSWord_Block_string             #       OSWordReadClock_LocalStringBlock
        ^       0
OSWord_Block_bcd                #       OSWordReadClock_LocalBCDBlock
        ^       0
OSWord_Block_convert_bcd_to_string #       OSWordReadClock_ConvertBCDToStringBlock
        ^       0
OSWord_Block_utc                #       OSWordReadClock_UTCBlock
        ^       0
OSWord_Block_write_clock        #       OSWordWriteClock_Block
        ^       0
OSWord_Block_pointer_define     #       OSWordPointer_DefineBlock
        ^       0
OSWord_Block_pointer_bbox       #       OSWordPointer_BBoxBlock
        ^       0
OSWord_Block_pointer_step       #       OSWordPointer_StepBlock
        ^       0
OSWord_Block_pointer_position   #       OSWordPointer_PositionBlock
        ^       0
OSWord_Block_screen_base        #       OSWord_ScreenBaseBlock
        ^       0
OSWord_Block_reserved           #       64*Char
OSWord_Block                    *       @


;Symbols for SWI's and SWI reason codes
XOS_Word                        *       &20007
OS_Word                         *       &7

OSWord_ReadLine                 *       &0

OSWord_ReadSystemClock          *       &1
   ;Entry
   ;  R0 = &1
   ;  R1 = clock (pointer to OSWord_TimerBlock)

OSWord_WriteSystemClock         *       &2
   ;Entry
   ;  R0 = &2
   ;  R1 -> clock (OSWord_TimerBlock)

OSWord_ReadIntervalTimer        *       &3
   ;Entry
   ;  R0 = &3
   ;  R1 = timer (pointer to OSWord_TimerBlock)

OSWord_WriteIntervalTimer       *       &4
   ;Entry
   ;  R0 = &4
   ;  R1 -> timer (OSWord_TimerBlock)

OSWord_ReadIOSpace              *       &5

OSWord_WriteIOSpace             *       &6

OSWord_Sound                    *       &7

OSWord_Envelope                 *       &8

OSWord_ReadGCOL                 *       &9

OSWord_ReadCharDefinition       *       &A
   ;Entry
   ;  R0 = &A
   ;  R1 = definition (pointer to OSWord_CharDefinitionBlock)

OSWord_ReadPalette              *       &B
   ;Entry
   ;  R0 = &B
   ;  R1 = entry (pointer to OSWord_PaletteBlock)

OSWord_WritePalette             *       &C
   ;Entry
   ;  R0 = &C
   ;  R1 -> entry (OSWord_PaletteBlock)

OSWord_ReadCursorPosition       *       &D
   ;Entry
   ;  R0 = &D
   ;  R1 = position (pointer to OSWord_CursorPositionBlock)

OSWord_ReadClock                *       &E

OSWordReadClock_LocalString     *       &E
   ;Entry
   ;  R0 = &E
   ;  R1 = string (pointer to OSWordReadClock_LocalStringBlock)

OSWordReadClock_LocalBCD        *       &E
   ;Entry
   ;  R0 = &E
   ;  R1 = bcd (pointer to OSWordReadClock_LocalBCDBlock)

OSWordReadClock_ConvertBCDToString *       &E
   ;Entry
   ;  R0 = &E
   ;  R1 = convert_bcd_to_String (pointer to OSWordReadClock_ConvertBCDToStringBlock)

OSWordReadClock_UTC             *       &E
   ;Entry
   ;  R0 = &E
   ;  R1 = utc (pointer to OSWordReadClock_UTCBlock)

OSWord_WriteClock               *       &F

OSWordWriteClock_TimeLocalString *       &F
   ;Entry
   ;  R0 = &F
   ;  R1 = time (pointer to OSWordWriteClock_Block)

OSWordWriteClock_DateLocalString *       &F
   ;Entry
   ;  R0 = &F
   ;  R1 = date (pointer to OSWordWriteClock_Block)

OSWordWriteClock_DateAndTimeLocalString *       &F
   ;Entry
   ;  R0 = &F
   ;  R1 = date_and_time (pointer to OSWordWriteClock_Block)

OSWord_EconetTransmit           *       &10

OSWord_EconetReceive            *       &11

OSWord_EconetMiscOp             *       &12

OSWord_EconetImmediateOp        *       &13

OSWord_EconetFSOp               *       &14

OSWord_Pointer                  *       &15

OSWordPointer_Define            *       &15
   ;Entry
   ;  R0 = &15
   ;  R1 = &2 + define (pointer to OSWordPointer_DefineBlock)

OSWordPointer_SetBBox           *       &15
   ;Entry
   ;  R0 = &15
   ;  R1 = &3 + bbox (pointer to OSWordPointer_BBoxBlock)

OSWordPointer_Step              *       &15
   ;Entry
   ;  R0 = &15
   ;  R1 -> step (OSWordPointer_StepBlock)

OSWordPointer_SetPosition       *       &15
   ;Entry
   ;  R0 = &15
   ;  R1 = &1 + pos (pointer to OSWordPointer_PositionBlock)

OSWordPointer_ReadPosition      *       &15
   ;Entry
   ;  R0 = &15
   ;  R1 = &1 + pos (pointer to OSWordPointer_PositionBlock)

OSWordPointer_SetUnlinkedPosition *       &15
   ;Entry
   ;  R0 = &15
   ;  R1 = &1 + pos (pointer to OSWordPointer_PositionBlock)

OSWordPointer_ReadUnlinkedPosition *       &15
   ;Entry
   ;  R0 = &15
   ;  R1 = &1 + pos (pointer to OSWordPointer_PositionBlock)

OSWordPointer_ReadBBox          *       &15
   ;Entry
   ;  R0 = &15
   ;  R1 = &3 + bbox (pointer to OSWordPointer_BBoxBlock)

OSWord_WriteScreenBase          *       &16
   ;Entry
   ;  R0 = &16
   ;  R1 = &3 + screen_base (pointer to OSWord_ScreenBaseBlock)

WordV                           *       &7

        ]
        END
