/*
    ####             #    #     # #
    #   #            #    #       #          The FreeWare C library for 
    #   #  ##   ###  #  # #     # ###             RISC OS machines
    #   # #  # #     # #  #     # #  #   ___________________________________
    #   # ####  ###  ##   #     # #  #                                      
    #   # #        # # #  #     # #  #    Please refer to the accompanying
    ####   ### ####  #  # ##### # ###    documentation for conditions of use
    ________________________________________________________________________

    File:    KernelSWIs.h
    Author:  Copyright  1993, 1994 Jason Howat
                         1995       Sergio Monesi
    Version: 1.03 (02 Sep 1995)
    Purpose: General low level SWI veneers.
    Mods:    07 Jun 1995 Sergio Monesi: Added OS_SWINumberTo/FromString
             13 Jul 1995 Sergio Monesi: Added OS_GSTrans
             02 Sep 1995 JH Added osbyte_WRITEVDUDRIVERBANK and 
                            osbyte_WRITEDISPLAYHARDWAREBANK.
*/

#ifndef __dl_kernelswis_h
#define __dl_kernelswis_h

#ifdef __cplusplus
extern "C" {
#endif


#ifndef __dl_core_h
#include "Core.h"
#endif


/* OS_Byte and OS_Word -----------------------------------------------------
 *
 */
typedef enum
{
  osbyte_DISPLAYOSVERSION = 0,
  osbyte_SPECIFYINPUT = 2,
  osbyte_SPECIFYOUTPUT,
  osbyte_CURSORKEYSTATUS,
  osbyte_WRITEPRINTERDRIVERTYPE,
  osbyte_WRITEPRINTERIGNORECHAR,
  osbyte_WRITERS423RXRATE,
  osbyte_WRITERS423TXRATE,
  osbyte_WRITEDURATION1STFLASHCOLOUR,
  osbyte_WRITEDURATION2NDFLASHCOLOUR,
  osbyte_WRITEKEYREPEATDELAY,
  osbyte_WRITEKEYREPEATRATE,
  osbyte_DISABLEEVENT,
  osbyte_ENABLEEVENT,
  osbyte_FLUSHBUFFER,
  osbyte_RESETFUNCTIONKEYS = 18,
  osbyte_WAITFORVSYNC,
  osbyte_RESETFONTDEFINITIONS,
  osbyte_FLUSHSELECTEDBUFFER,
  osbyte_RESETGROUPOFFONTDEFINITIONS = 25,
  osbyte_RW_COUNTRYNUMBER = 70,
  osbyte_RW_ALPHABET = 71,
  osbyte_RW_KEYBOARD = 71,
  osbyte_SELECTPOINTER = 106,
  osbyte_ACTIVATEMOUSE = 106,
  osbyte_WRITEVDUDRIVERBANK = 112,
  osbyte_WRITEDISPLAYHARDWAREBANK,
  osbyte_WRITESHADOWSTATE,
  osbyte_READVDUSTATUS = 117,
  osbyte_REFLECTKEYBOARDSTATUSINLEDS,
  osbyte_KEYBOARDSCAN = 121,
  osbyte_KEYBOARDSCANNOSHIFT,
  osbyte_CLEARESCAPECONDITION = 124,
  osbyte_SETESCAPECONDITION,
  osbyte_ACKNOWLEDGEESCAPECONDITION,
  osbyte_CHECKFOREOF,
  osbyte_GETBUFFERORMOUSESTATUS,
  osbyte_SCANFORKEY = 129,
  osbyte_READOSIDENTIFIER = 129,
  osbyte_READTEXTCURSORPOSITION = 134,
  osbyte_READCHARACTERATTEXTCURSOR = 135,
  osbyte_READSCREENMODE = 135,
  osbyte_INSERTCHARACTERCODEINTOBUFFER = 138,
  osbyte_WRITEFSOPTIONS,
  osbyte_ISSUEMODULESERVICECALL = 143,
  osbyte_SETTVCHARACTERISTICS,
  osbyte_GETCHARACTERFROMBUFFER,
  osbyte_EXAMINEBUFFERSTATUS = 152,
  osbyte_INSERTCHARACTERINTOBUFFER,
  osbyte_RW_ASYNCCOMMSSTATE = 156,
  osbyte_READVDUVARIABLE = 160,
  osbyte_READCMOSRAM,
  osbyte_WRITECMOSRAM,
  osbyte_RW_GENERALGRAPHICSINFO,
  osbyte_READOUTPUTCURSORPOSITION = 165,
  osbyte_RW_50HZCOUNTER = 176,
  osbyte_READINPUTSOURCE,
  osbyte_RW_RS423INPUTINTERPTRETATION = 181,
  osbyte_RW_NOIGNORESTATE,
  osbyte_RW_RS423BUSYFLAG = 191,
  osbyte_READRS423CONTROLBYTE,
  osbyte_RW_FLASHCOUNTER,
  osbyte_READDURATION2NDFLASHCOLOUR,
  osbyte_READDURATION1STFLASHCOLOUR,
  osbyte_RW_KEYREPEATDELAY,
  osbyte_RW_KEYREPEATRATE,
  osbyte_RW_EXECFILEHANDLE,
  osbyte_RW_SPOOLFILEHANDLE,
  osbyte_RW_BREAKESCAPEEFFECT,
  osbyte_RW_KEYBOARDDISABLEFLAG,
  osbyte_RW_KEYBOARDSTATUSBYTE,
  osbyte_RW_RS423INPUTBUFFERMINSPACE,
  osbyte_RW_RS423IGNOREFLAG,
  osbyte_RW_BELLCHANNEL = 211,
  osbyte_RW_BELLVOLUME,
  osbyte_RW_BELLFREQUENCY,
  osbyte_RW_BELLDURATION,
  osbyte_RW_FUNCTIONKEYSTRINGLENGTH = 216,
  osbyte_RW_PAGEDMODELINECOUNT,
  osbyte_RW_BYTESINVDUQUEUE,
  osbyte_RW_TABKEYCODE,
  osbyte_RW_ESCAPECHARACTER,
  osbyte_RW_INTERPRETATIONOFBUFFERCODES_C0_CF,
  osbyte_RW_INTERPRETATIONOFBUFFERCODES_D0_DF,
  osbyte_RW_INTERPRETATIONOFBUFFERCODES_E0_EF,
  osbyte_RW_INTERPRETATIONOFBUFFERCODES_F0_FF,
  osbyte_RW_FUNCTIONKEYINTERPRETATION,
  osbyte_RW_SHIFTFUNCTIONKEYINTERPRETATION,
  osbyte_RW_CTRLFUNCTIONKEYINTERPRETATION,
  osbyte_RW_CTRLSHIFTFUNCTIONKEYINTERPRETATION,
  osbyte_RW_ESCAPEKEYSTATUS,
  osbyte_RW_ESCAPEEFFECTS,
  osbyte_RW_CHARACTERDESTINATIONSTATUS = 236,
  osbyte_RW_CURSORKEYSTATUS,
  osbyte_RW_NUMERICKEYPADINTERPRETATION,
  osbyte_READCOUNTRYFLAG = 240,
  osbyte_READRS423BAUDRATES = 242,
  osbyte_READTIMERSWITCHSTATE,
  osbyte_READPRINTERDRIVERTYPE = 245,
  osbyte_RW_PRINTERIGNORECHARACTER,
  osbyte_RW_BREAKKEYACTIONS,
  osbyte_READVDUDRIVERSCREENBANK = 250,
  osbyte_READDISPLAYSCREENBANK,
  osbyte_READLASTBREAKTYPE = 253,
  osbyte_RW_EFFECTOFSHIFTCTRLONNUMERICKEYPAD,
  osbyte_RW_BOOTOPTION
} osbyte_number;

os_error *OS_Byte(osbyte_number reason, int r1in, int r2in,
                                        int *r1out, int *r2out);


typedef enum
{
  osword_READLINE = 0,
  osword_READSYSCLOCK,
  osword_WRITESYSCLOCK,
  osword_READINTERVALTIMER,
  osword_WRITEINTERVALTIMER,
  osword_READPIXELCOLOUR = 9,
  osword_READCHARACTERDEFN,
  osword_READPALETTE,
  osword_WRITEPALETTE,
  osword_READGFXCURSORS,
  osword_READCMOSCLOCK,
  osword_WRITECMOSCLOCK,
  osword_DEFINEPOINTERANDMOUSE = 21,
  osword_WRITESCREENBASE
} osword_number;

os_error *OS_Word(osword_number reason, void *param_block);



extern BOOL OS_ReadVarVal(char *varname, char *buf, int bufsize);
/*  Read an OS Variable value.
 *  Fills buf with the variable's value. Returns TRUE if it succeeds
 */




typedef enum
{
  modevar_MODEFLAGS = 0,
  modevar_RIGHTCOLUMN,
  modevar_BOTTOMROW,
  modevar_NCOLOUR,
  modevar_XEIGFACTOR,
  modevar_YEIGFACTOR,
  modevar_LINELENGTH,
  modevar_SCREENSIZE,
  modevar_YSHIFTFACTOR,
  modevar_LOG2BPP,
  modevar_LOG2BPC,
  modevar_XWINDOWLIMIT,
  modevar_YWINDOWLIMIT
} mode_variable;

extern os_error *OS_ReadModeVariable(int mode, mode_variable variable,
                                     int *value);


os_error *OS_SWINumberToString( int number, char *buffer, int size);
/*
Purpose:  Converts a SWI number to the corresponding string.
            (SWI veneer for SWI OS_NumberToString)
Inputs:   number - the SWI number
          buffer - the buffer where the string will be stored
          size - the size of the buffer
Outputs:  -
Returns:  NULL if no errors, otherwise a pointer to the error
Errors:   -
SeeAlso:  OS_SWINumberFromString; SWI
*/


os_error *OS_SWINumberFromString( char *string, int *number);
/*
Purpose:  Converts a string to a SWI number.
          (SWI veneer for SWI OS_NumberFromString)
Inputs:   string - the string to convert
Outputs:  number - the resulting SWI number
Returns:  NULL if no errors, otherwise a pointer to the error
Errors:   -
SeeAlso:  OS_SWINumberToString; SWI
*/



os_error *OS_GSTrans(char *string, char *buffer, int size, char **end);
/*
Purpose:  Convert a string using GS operations.
          (SWI veneer for SWI OS_GSTrans)
Inputs:   string - the string to convert
          buffer - the buffer where the converted string will be stored
          size - the size of the buffer
Outputs:  end - pointer to the character after terminator
Returns:  NULL if no errors, otherwise a pointer to the error
*/



os_error *OS_CLI(char *cmd);
/*
Purpose:  Executes a *-command
          (SWI veneer for SWI OS_CLI)
Inputs:   cmd - the command string
Returns:  NULL if no errors, otherwise a pointer to the error
*/



#ifdef __cplusplus
}
#endif


#endif

