/* Release 3.00 */

/*-------------------------------------------------------------------------*
*                                                                          *
*  string.h -  Definitions for string and memory functions.                *
*                                                                          *
*  COPYRIGHT (C) 1991 Psion PLC. All Rights Reserved.                      *
*                                                                          *
*--------------------------------------------------------------------------*/
#include <stdepoc.h>

#ifndef EPOCDEFS_H
#define EPOCDEFS_H

#ifndef _TIME_DEF
#define _TIME_DEF
typedef long time_t;
#endif

typedef int INT,HANDLE;
typedef unsigned int UINT;
typedef signed char BYTE;
typedef unsigned char UBYTE;
typedef short int WORD;
typedef unsigned short int UWORD;
typedef long int LONG;
typedef unsigned long int ULONG;
typedef double DOUBLE;
typedef float FLOAT;
typedef char TEXT;

typedef struct _mblock
    {
    unsigned int mlen;
    struct _mblock *mnext;
    } _MBLOCK;

#define P_FOPEN 0x0000
#define P_FCREATE 0x0001
#define P_FREPLACE 0x0002
#define P_FAPPEND 0x0003
#define P_FUNIQUE 0x0004
#define P_FSER_MASK 0x000f
#define P_FSTREAM 0x0000
#define P_FSTREAM_TEXT 0x0010
#define P_FTEXT 0x0020
#define P_FDIR 0x0030
#define P_FFORMAT 0x0040
#define P_FDEVICE 0x0050
#define P_FNODE 0x0060
#define P_FMT_MASK 0x00f0
#define P_FUPDATE 0x0100
#define P_FRANDOM 0x0200
#define P_FSHARE 0x0400
#define P_FACC_MASK 0x0f00
#define P_FLOWDENSITY   0x1000

#define P_FPANIC 0
#define P_FREAD 1
#define P_FWRITE 2
#define P_FCLOSE 3
#define P_FCANCEL 4
#define P_FATTACH 5
#define P_FDETACH 6
#define P_FSET 7
#define P_FSENSE 8
#define P_FFLUSH 9
#define P_FRELATIVE P_FREAD
#define P_FABSOLUTE P_FWRITE
#define P_FSEEK 10
#define P_FSETEOF 11
#define P_FWRITE_REPLY 12
#define P_FTEST 10
#define P_FCTRL 11
#define P_FINQ 12
#define P_FRSUPER 13
#define P_FSTOP 14
#define P_FSTART 15
#define P_FENABLE 16
#define P_FSETINT 17
#define P_FABS 1
#define P_FEND 2
#define P_FCUR 3
#define P_FRSENSE 4
#define P_FRSET 5
#define P_FREWIND 6

#define NoErr 0
#define FailErr (-1)
#define ArgumentErr (-2)
#define OsErr (-3)
#define NotSupportedErr (-4)
#define UnderflowErr (-5)
#define OverflowErr (-6)
#define RangeErr (-7)
#define DivideByZeroErr (-8)
#define InUseErr (-9)
#define NoMemoryErr (-10)
#define NoSegmentsErr (-11)
#define NoSemaphoreErr (-12)
#define NoProcessErr (-13)
#define AlreadyOpenErr (-14)
#define NotOpenErr (-15)
#define ImageErr (-16)
#define NoReceiverErr (-17)
#define NoDevicesErr (-18)
#define NoFileSystemErr (-19)
#define FailedToStartErr (-20)
#define ExistsErr (-32)
#define NotExistsErr (-33)
#define WriteErr (-34)
#define ReadErr (-35)
#define EofErr (-36)
#define FullErr (-37)
#define NameErr (-38)
#define AccessErr (-39)
#define LockedErr (-40)
#define DeviceErr (-41)
#define DirErr (-42)
#define RecordErr (-43)
#define ReadOnlyErr (-44)
#define IoInvalidErr (-45)
#define PendingErr (-46)
#define VolumeErr (-47)
#define CancelErr (-48)
#define IoAllocErr (-10)
#define DisconnectErr (-50)
#define ConnectErr (-51)
#define ReTransmitErr (-52)
#define LineErr (-53)
#define InActivityErr (-54)
#define ParityErr (-55)
#define FrameErr (-56)
#define OverrunErr (-57)
#define ModemConnectErr (-58)
#define ModemBusyErr (-59)
#define ModemNoAnswerErr (-60)
#define ModemBlacklistErr (-61)
#define NotReadyErr (-62)
#define UnknownErr (-63)
#define DirFullErr (-64)
#define WriteProtectErr (-65)
#define CorruptMediaErr (-66)
#define AbortErr (-67)
#define EraseErr (-68)
#define InvalidFileErr (-69)

#define P_CD_ROOT 0
#define P_CD_PARENT 1
#define P_CD_SUBDIR 2

#define P_FAWRITE 0x01
#define P_FAHIDDEN 0x02
#define P_FASYSTEM 0x04
#define P_FAVOLUME 0x08
#define P_FADIR 0x10
#define P_FAMOD 0x20
#define P_FAREAD 0x100
#define P_FAEXEC 0x200
#define P_FASTREAM 0x400
#define P_FATEXT 0x800

typedef struct
    {
    UWORD version;
    UWORD status;
    ULONG size;
    ULONG modst;
    UBYTE spare[4];
    } P_INFO;

#define P_VOLUMENAME    32
#define P_FMEDIA_UNKNOWN 0
#define P_FMEDIA_FLOPPY 1
#define P_FMEDIA_HARDDISK 2
#define P_FMEDIA_FLASH 3
#define P_FMEDIA_RAM 4
#define P_FMEDIA_ROM 5
#define P_FMEDIA_WRITEPROTECTED 6
#define P_FMEDIA_COMPRESSIBLE 0x8000
#define P_FMEDIA_DYNAMIC 0x4000
#define P_FMEDIA_INTERNAL 0x2000
#define P_FMEDIA_DUAL_DENSITY 0x1000
#define P_FMEDIA_FORMATTABLE 0x800

typedef struct {
    UWORD version;
    UWORD mediatype;
    UWORD removable;
    ULONG size;
    ULONG free;
    UBYTE name[P_VOLUMENAME];
    WORD batterystate;
    UBYTE spare[16];
    } P_DINFO;

#define P_FSYSTYPE_FLAT 0
#define P_FSYSTYPE_HIER 1
typedef struct {
    UWORD version;
    UWORD type;
    UWORD formattable;
    UBYTE spare[26];
    } P_NINFO;

#define P_PWILD_ANY 0x01
#define P_PWILD_NAME 0x02
#define P_PWILD_EXT 0x04
#define P_FSYSNAMESIZE 5

typedef struct {
    UBYTE system;
    UBYTE device;
    UBYTE path;
    UBYTE name;
    UBYTE ext;
    UBYTE flags;
    } P_FPARSE;

#define P_FBLKSHIFT 9
#define P_FBLKSIZE 0x200
#define P_FMAXRSIZE 0x100
#define P_FMAXSSIZE 0x4000
#define P_FSIZRPOS sizeof(LONG)
#define P_MAXDEV 128
#define P_MAXPATH 128
#define P_MAXNAME 128
#define P_MAXEXTN 128
#define P_FNAMESIZE 128

typedef struct
    {
    ULONG day;
    ULONG sec;
    } P_DAYSEC;

typedef struct
    {
    UBYTE year;
    UBYTE month;
    UBYTE day;
    UBYTE hour;
    UBYTE minute;
    UBYTE second;
    UWORD yrday;
    } P_DATE;

#define P_SCR_ATTRB 0
#define P_SCR_SCROLL 1
#define P_SCR_CLR 2
#define P_SCR_POSA 3
#define P_SCR_POSR 4
#define P_SCR_WSET 5
#define P_SCR_SLOCK 6
#define P_SCR_WLOCK 7
#define P_SCR_NEL 8
#define P_SCR_CURSOR 9
#define P_SCR_ESCAPE 10

typedef struct
    {
    short int x; /* Horizontal coordinate */ 
    short int y; /* Vertical coordinate */ 
    } P_POINT;
typedef struct
    {
    P_POINT tl; /* Top left point */ 
    P_POINT br; /* Bottom right point */ 
    } P_RECT;
typedef struct
    {
    P_RECT r; /* Rectangle */ 
    P_POINT p; /* Point */ 
    } P_RECTP;
typedef struct
    {
    P_POINT tl; /* Top left point */ 
    unsigned short int width; /* Width */ 
    unsigned short int height; /* Height */ 
    } P_EXTENT;

#define _E_SEARCH 0x10
#define _E_EXEC 0x20

extern char _pname[P_FNAMESIZE];
extern P_FPARSE _pinfo;
extern void *winHandle;

#ifdef __cplusplus
extern "C" {
#endif
extern int _allocInfo(_MBLOCK **,_MBLOCK **);
extern _MBLOCK *_heapTop(void);
extern int _iopen(char **_handle,char *_name,int _mode);
extern int _iow2(char *handle,int _func);
extern int _iow3(char *handle,int _func,void *);
extern int _iow4(char *handle,int _func,void *,void *);
extern int _parse(const char *_in,char *_rel,char *_out,P_FPARSE *_info);
extern void _convTimeToDos(ULONG t,int *date,int *time);
extern void _FsChanToName(void *handle,char *name);
extern int _FsChanToMode(void *handle);
extern int _isloc(const char *path);
extern void _systemTimeToDaySeconds(time_t secs,P_DAYSEC *pDs);
extern time_t _daySecondsToSystemTime(P_DAYSEC *pDs);
extern void _daySecondsToDate(P_DAYSEC *pDs,P_DATE *pDate);
extern int _dateToDaySeconds(P_DATE *pDate,P_DAYSEC *pDs);
extern int _fileInfo(const char *path,P_INFO *pI);
extern int _fileSetModTime(const char *path,time_t time);
extern void _getPath(char *path);
extern void _setPath(char *path);
extern time_t _date(void);
extern void _sleepTenths(unsigned long tenths);
extern int _execc(const char *path,char **argv,int mode);
extern int __execc(char *path,char *command);
extern int _logon(int handle,WORD *stat);
extern void _waitStat(WORD *stat);
extern int _resume(int pid);
extern char *_getErrorText(int error,char *buffer);
#pragma save,call(inline=>on)
static void _dummy(void) = {0xCD,0xD4};
#pragma restore
#ifdef __cplusplus
}
#endif
#endif

