Files
sibo-playground/code/SIBOSDK/include/p_file.h
T

299 lines
13 KiB
C
Raw Normal View History

2026-07-06 18:01:36 +01:00
/* HEADER - P_FILE.H
Copyright (C) Psion PLC 1991-92
VER DATE BY DESCRIPTION
===== ======== === ===========
1.00F 26/04/90 NSM First relase
1.10F 07/07/92 NSM Second release
*/
#ifndef P_FILE_H
#define P_FILE_H
#include <stdepoc.h>
#define P_MAXDEVNAME 4
typedef void (*P_DEVICE)(void);
typedef struct /* IO request packet */
{
short int *pstat; /* where to write completion status */
unsigned char *a1; /* first parameter */
unsigned char *a2; /* second parameter */
} P_RQPKT;
/* all I/O control blocks must start with this header */
typedef struct p_icb /* I/O control block header */
{
struct p_icb *picb; /* ptr to current ICB in chain */
int (*vec)(); /* strategy entry point */
} P_ICB;
/* IO request - as passed to strategy functions */
typedef struct
{
unsigned int func; /* function number */
P_RQPKT r; /* request packet */
} P_IRQ;
/* Wait Handler defines */
#define P_SIGNAL_UNUSED 0 /* signal not used by waithandler */
#define P_SIGNAL_ENABLE 1 /* signal used by handler,I/O's still pending */
#define P_SIGNAL_DISABLE 2 /* signal used by handler,no I/O's pending */
/* open service mode flags */
#define P_FOPEN 0x0000 /* Open i/o service */
#define P_FCREATE 0x0001 /* Create file */
#define P_FREPLACE 0x0002 /* Replace file */
#define P_FAPPEND 0x0003 /* Append records */
#define P_FUNIQUE 0x0004 /* Unique file open */
#define P_FSER_MASK 0x000f /* File service mask */
#define P_FSTREAM 0x0000 /* Stream access to a binary file */
#define P_FSTREAM_TEXT 0x0010 /* Stream access to a text file */
#define P_FTEXT 0x0020 /* Record access to a text file */
#define P_FDIR 0x0030 /* Record access to a directory file */
#define P_FFORMAT 0x0040 /* Format a device */
#define P_FDEVICE 0x0050 /* Record access to device name list */
#define P_FNODE 0x0060 /* Record access to node name list */
#define P_FMT_MASK 0x00f0 /* File format mask */
#define P_FUPDATE 0x0100 /* Read and write access */
#define P_FRANDOM 0x0200 /* Random access */
#define P_FSHARE 0x0400 /* File can be shared */
#define P_FACC_MASK 0x0f00 /* mask for access types */
#define P_FLOWDENSITY 0x1000
/* p_io/p_iow function constants */
/* Generic I/O functions */
#define P_FPANIC 0 /* Panic the device */
#define P_FREAD 1 /* Read */
#define P_FWRITE 2 /* Write */
#define P_FCLOSE 3 /* Close */
#define P_FCANCEL 4 /* Cancel io */
#define P_FATTACH 5 /* attach this pseudo device */
#define P_FDETACH 6 /* detach this pseudo device */
#define P_FSET 7 /* set channel characteristics */
#define P_FSENSE 8 /* sense channel characteristics */
#define P_FFLUSH 9 /* Flush buffers */
/* Now follows the device specific functions */
/* Timer device driver */
#define P_FRELATIVE P_FREAD /* Relative timer */
#define P_FABSOLUTE P_FWRITE /* Absolute timer */
/* Files */
#define P_FSEEK 10 /* Seek */
#define P_FSETEOF 11 /* Set end of file */
/* Data Link I/O + wserv */
#define P_FCONNECT 10 /* Queue a link connect request */
#define P_FDISCONNECT 11 /* Disconnect the link */
/* wserv functions */
#define P_FWRITE_REPLY 12 /* P_FWRITE + read a reply from the server */
/* Serial/llmac */
#define P_FTEST 10 /* return no. of bytes in serial receieve buffer */
#define P_FCTRL 11 /* serial port control lines */
#define P_FINQ 12 /* inquire of device capabilities */
#define P_FRSUPER 13 /* read a supervisory frame (p_llmac) */
#define P_FSTOP 14 /* stop LLMAC mode */
#define P_FSTART 15 /* start LLMAC mode */
/* Serial LDD to Serial PDD I/O defines */
#define P_FENABLE 16 /* Enable transmit interrupts */
#define P_FSETINT 17 /* set the serial Interrupt code ptrs */
/* modem functions */
#define P_FMINIT 16 /* modem initialization function */
#define P_FMDIAL 17 /* modem dial function */
#define P_FMWAITCALL 18 /* wait for an incoming call */
#define P_FMSENSE 19 /* Sense Modem characteristics */
#define P_FMSET 20 /* Set Modem characteristics */
#define P_FMCANCEL 21 /* Cancel outstanding mode request */
#define P_FMWRITE 22 /* Write a configuration string to modem with timeout */
/* p_seek() mode constants */
#define P_FABS 1 /* Position absolute in the file */
#define P_FEND 2 /* Position relative from the end of file */
#define P_FCUR 3 /* Position relative to the current pos */
#define P_FRSENSE 4 /* Sense the record position */
#define P_FRSET 5 /* Set the record position */
#define P_FREWIND 6 /* Rewind a text file */
/* IRDA Defines */
#define P_FIRDISCONNECT 4 /* Disconnect from remote machine */
#define P_FIRAWAITCONNECT 5 /* Wait for a connection from a remote machine */
#define P_FIRDISCOVER 6 /* Discover remote machines */
#define P_FIRSELECT 7 /* Select a remote machine */
#define P_FIRMAKECONNECT 8 /* Make a connection to a remote machine */
/* file errors */
#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) /* E_GEN_NOMEMORY */
#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 E_FILE_EXIST ExistsErr /* File already exists */
#define E_FILE_NXIST NotExistsErr /* File does not exist */
#define E_FILE_WRITE WriteErr /* Write to file failed */
#define E_FILE_READ ReadErr /* Read from file failed */
#define E_FILE_EOF EofErr /* Read past end of file */
#define E_FILE_FULL FullErr /* Disk/serial read buffer full */
#define E_FILE_NAME NameErr /* Invalid file name */
#define E_FILE_ACCESS AccessErr /* Access denied */
#define E_FILE_LOCKED LockedErr /* Record or file locked */
#define E_FILE_DEVICE DeviceErr /* Device does not exist */
#define E_FILE_DIR DirErr /* Directory does not exist */
#define E_FILE_RECORD RecordErr /* Record too large */
#define E_FILE_RDONLY ReadOnlyErr /* File has read only access */
#define E_FILE_INV IoInvalidErr /* Invalid I/O operation */
#define E_FILE_PENDING PendingErr /* I/O pending (not yet completed) */
#define E_FILE_VOLUME VolumeErr /* Invalid volume */
#define E_FILE_CANCEL CancelErr /* Async operation was cancelled */
#define E_FILE_ALLOC IoAllocErr /* No memory for control block */
#define E_FILE_DISC DisconnectErr /* link is disconnected */
#define E_FILE_CONNECT ConnectErr /* link already connected */
#define E_FILE_RETRAN ReTransmitErr /* Retransmission threshold exceeded */
#define E_FILE_LINE LineErr /* Physical link failure */
#define E_FILE_INACT InActivityErr /* Inactivity timer expired */
#define E_FILE_PARITY ParityErr /* Serial parity error */
#define E_FILE_FRAME FrameErr /* Serial framing error */
#define E_FILE_OVERRUN OverrunErr /* Serial overrun error */
#define E_MDM_CONFAIL ModemConnectErr /* modem can't connect to remote modem */
#define E_MDM_BUSY ModemBusyErr /* remote number busy */
#define E_MDM_NOANS ModemNoAnswerErr /* there was no answer */
#define E_MDM_BLACKLIST ModemBlacklistErr /* number blacklisted by the modem*/
#define E_FILE_NOTREADY NotReadyErr /* Drive not ready error */
#define E_FILE_UNKNOWN UnknownErr /* Unknown media in drive */
#define E_FILE_DIRFULL DirFullErr /* Root dir full error */
#define E_FILE_PROTECT WriteProtectErr /* Device write protect */
#define E_FILE_CORRUPT CorruptMediaErr /* Media is corrupt */
#define E_FILE_ABORT AbortErr /* User aborted operation error */
#define E_FILE_ERASE EraseErr /* Failed to Erase Flash pack */
#define E_FILE_INVALID InvalidFileErr /* Invalid file for DBF system */
/* defines for changing directories */
#define P_CD_ROOT 0 /* goto root directory */
#define P_CD_PARENT 1 /* goto parent directory */
#define P_CD_SUBDIR 2 /* goto subdirectory */
/* masks for status flag of P_INFO */
#define P_FAWRITE 0x01 /* can the file be written to? */
#define P_FAHIDDEN 0x02 /* set if file is hidden */
#define P_FASYSTEM 0x04 /* set if file is a system file */
#define P_FAVOLUME 0x08 /* set if the name is a volume name */
#define P_FADIR 0x10 /* set if file is a directory file */
#define P_FAMOD 0x20 /* has the file been modified? */
#define P_FAREAD 0x100 /* can the file be read? */
#define P_FAEXEC 0x200 /* is the file executable? */
#define P_FASTREAM 0x400 /* is the file a byte stream file? */
#define P_FATEXT 0x800 /* is it a text file? */
/* File system File information - p_finfo() */
typedef struct {
unsigned short int version; /* for future expansion */
unsigned short int status; /* status bits */
unsigned long int size; /* size of the file */
unsigned long int modst; /* system time of last modification */
unsigned char spare[4]; /* spare bytes for future expansion */
} 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 /* Worth compressing deleted records */
#define P_FMEDIA_DYNAMIC 0x4000 /* Media size is dynamic */
#define P_FMEDIA_INTERNAL 0x2000 /* Media is internal */
#define P_FMEDIA_DUAL_DENSITY 0x1000
#define P_FMEDIA_FORMATTABLE 0x800
/* File System Device information - p_dinfo() */
typedef struct {
unsigned short int version; /* for future expansion */
unsigned short int mediatype; /* what type of device is this */
unsigned short int removable; /* is device removable or not */
unsigned long int size; /* size of the device */
unsigned long int free; /* amount of device still free */
char name[P_VOLUMENAME]; /* the volume name of the device */
short int batterystate; /* Device battery status */
unsigned char spare[16]; /* spare bytes for future expansion */
} P_DINFO;
#define P_FSYSTYPE_FLAT 0
#define P_FSYSTYPE_HIER 1
/* File System Node information - p_ninfo() */
typedef struct {
unsigned short int version; /* for future expansion */
unsigned short int type; /* file system type (flat/hierarchical...) */
unsigned short int formattable; /* TRUE if node supports format cmds else FALSE */
unsigned char spare[26]; /* spare bytes for future expansion */
} P_NINFO;
/* Flag defines for p_fparse */
#define P_PWILD_ANY 0x01 /* contains one or more wildcards */
#define P_PWILD_NAME 0x02 /* the name field contains wildcards */
#define P_PWILD_EXT 0x04 /* the extension contains wildcards */
/* Full file system parse - p_fparse() */
#define P_FSYSNAMESIZE 5
typedef struct {
unsigned char system; /* file system name length */
unsigned char device; /* device name length */
unsigned char path; /* path name length */
unsigned char name; /* name length */
unsigned char ext; /* extension length */
unsigned char flags; /* information on the presence of wildcards */
} P_FPARSE;
#define P_FBLKSHIFT 9 /* Block shift factor */
#define P_FBLKSIZE 0x200 /* Block size */
#define P_FMAXRSIZE 0x100 /* Maximum text record size */
#define P_FMAXSSIZE 0x4000 /* Maximum stream read/write length */
#define P_FSIZRPOS sizeof(long int) /* array size for storing r/w position */
#define P_MAXDEV 128 /* Maximum device name size */
#define P_MAXPATH 128 /* Maximum path size */
#define P_MAXNAME 128 /* Maximum name size */
#define P_MAXEXTN 128 /* Maximum extension size */
#define P_FNAMESIZE 128 /* Maximum file name size */
/* BINARY FILE SIGNATURE FOR APPLICATION FILES */
typedef struct
{
char app_id[3]; /* application id */
unsigned char chk_sum; /* application id checksum */
unsigned char file_vn; /* file version number */
unsigned char app_vn; /* application version number */
} P_FSIG;
#ifdef __cplusplus
extern "C" {
#endif
extern void cdecl p_inst(P_DEVICE *,...);
#pragma save,call(reg_param =>(bx,cx,di,si,dx),reg_saved =>(bx,cx,dx,si,di,EPOC_SAVE))
extern int p_fparse(const char *,const char *,char *,P_FPARSE *);
extern int f_fparse(const char *,const char *,char *,P_FPARSE *);
extern int p_fparseasync(const char *,const char *,char *,P_FPARSE *,short int *);
extern int p_finfo(const char *,P_INFO *);
extern int p_finfoasync(const char *,P_INFO *,short int *);
extern int p_ninfo(const char *,P_NINFO *);
extern int p_ninfoasync(const char *,P_NINFO *,short int *);
extern int p_dinfo(const char *,P_DINFO *);
extern int p_dinfoasync(const char *,P_DINFO *,short int *);
#pragma restore
#ifdef __cplusplus
}
#endif
#endif // P_FILE_H