build: add the SIBO SDK

This commit is contained in:
2026-07-06 18:01:36 +01:00
parent d76326729c
commit 64e484448c
757 changed files with 97167 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
/*
DIYHWIF.C
Started by DavidW, 6/11/92
Routines to access some dialog item classes
*/
#include <dtedit.g>
#include <chlist.g>
#include <hwif.h>
#include <hwif.g>
GLREF_D PR_DLGBOX *DatDialogPtr;
GLDEF_C VOID hDTClose(VOID *dte)
{
p_send2(dte,O_DESTROY);
}
GLDEF_C VOID hDTSet(VOID *dte,H_SE_DTEDIT *sdte)
{
p_send3(dte,O_WN_SET,sdte);
}
GLDEF_C VOID hDTSense(VOID *dte,H_SE_DTEDIT *sdte)
{
p_send3(dte,O_WN_SENSE,sdte);
}
GLDEF_C INT hDTSelfCheck(VOID *dte)
{
INT ret;
ret=p_send2(dte,O_LG_SELF_CHECK);
return(ret!=LG_CHECK_OK && ret!=LG_CHECK_OK_CHANGED);
}
GLDEF_C VOID hDTEmphasise(VOID *dte,INT flag)
{
p_send3(dte,O_WN_EMPHASISE,flag);
}
GLDEF_C INT hDTHandleKey(VOID *dte,INT keycode,INT modifier)
{
return(p_send4(dte,O_WN_KEY,keycode,modifier));
}
GLDEF_C VOID *hDTOpen(H_DTEDIT *dte)
{
VOID *self;
PR_WIN win;
self=uCheckHandle(p_new(CAT_HWIF_HWIM,C_DTEDIT));
if (self)
{
win.win.id=dte->win;
p_send4(self,O_WN_INIT,dte,&win);
p_send5(self,O_LG_SET_ID_POS,dte->win,&dte->pos,dte->width);
hDTEmphasise(self,dte->emph);
}
return(self);
}
GLDEF_C VOID hSetVarrayInChlist(INT index,INT nsel,VOID *varray)
{
SE_CHLIST set;
set.nsel=nsel;
set.data=varray;
set.set_flags=SE_CHLIST_DATA|SE_CHLIST_NSEL|SE_CHLIST_RETAIN;
p_send4(DatDialogPtr,O_WN_SET,index,&set);
}
GLDEF_C VOID uSetDialogUline(INT pos,INT on)
{
DLGBOX_ITEM *pitm;
pitm=(DatDialogPtr->dlgbox.count>7)?
DatDialogPtr->dlgbox.u.pitm+pos:
&DatDialogPtr->dlgbox.u.item[pos];
if (on)
pitm->flags|=DLGBOX_ITEM_UNDERLINED;
else
pitm->flags&=(~DLGBOX_ITEM_UNDERLINED);
}
+276
View File
@@ -0,0 +1,276 @@
/*
EHWIF.C
Started by DavidW, 5/12/91
Edit box extension to h layer of hwif
*/
#include <edit.g>
#include <edwin.g>
#include <scrimg.g>
#include <hwif.g>
#include <hwif.h>
GLDEF_D UWORD _ebControlFormat=FALSE;
#define EebH ((PR_EDWIN *)ebH)
#pragma save,ENTER_CALL
LOCAL_C INT DoEntersend(VOID *ebH,INT method,VOID *p1,VOID *p2,VOID *p3)
{
p_send5(ebH,method,p1,p2,p3);
return(0);
}
#pragma restore
LOCAL_C INT Entersend(VOID *ebH,INT method,VOID *p1,VOID *p2,VOID *p3)
{
INT ret;
ret=p_enter6(DoEntersend,ebH,method,p1,p2,p3);
if (ret<-1)
uErrorValue(ret);
return(ret);
}
#define V (VOID*)
GLDEF_C INT hEBCompleteFormat(VOID *ebH)
{
PR_SCRIMG *scrimg;
INT ret;
scrimg=EebH->edwin.scrimg;
if (!scrimg->scrimg.formatting)
return(0);
ret=Entersend(scrimg,O_SI_SET,0,0,0);
p_send2(scrimg->scrimg.wrap,O_AO_CANCEL);
return(ret);
}
GLDEF_C INT hEBHandleKey(VOID *ebH,INT keycode,INT modifier)
{
INT ret;
if (keycode==W_KEY_RETURN)
modifier|=W_SHIFT_MODIFIER;
ret=Entersend(ebH,O_WN_KEY,V keycode,V modifier,NULL);
if (!ret && !_ebControlFormat)
ret=hEBCompleteFormat(ebH);
return(ret);
}
GLDEF_C VOID hEBClose(VOID *ebH)
{
p_send2(ebH,O_DESTROY);
}
GLDEF_C TEXT *hEBSenseText(VOID *ebH)
{
SE_EDWIN sense;
p_send3(ebH,O_WN_SENSE,&sense);
return(sense.buf);
}
GLDEF_C INT hEBSetText(VOID *ebH,TEXT *pb,INT blen)
{
SE_EDWIN set;
set.buf=pb;
set.len=blen;
return(Entersend(ebH,O_WN_SET,&set,NULL,NULL));
}
GLDEF_C VOID hEBEmphasise(VOID *ebH,INT flag)
{
p_send3(ebH,O_WN_EMPHASISE,flag);
}
GLDEF_C INT hEBSetSelect(VOID *ebH,INT aoff,INT coff)
{
SET_EDWIN set;
set.flags=SET_EDWIN_CURSOR|SET_EDWIN_ANCHOR;
set.anchor=aoff;
set.cursor=coff;
return(Entersend(ebH,O_EW_SET,&set,NULL,NULL));
}
GLDEF_C INT hEBSenseSelect(VOID *ebH,UWORD *top)
{
return(p_send3(EebH->edwin.scrimg,O_SI_GET_SELECT,top));
}
GLDEF_C INT hEBSetClipText(VOID *ebH,TEXT *pb,INT blen)
{
return(Entersend(EebH->edwin.clip,O_EP_SET_TEXT,pb,V blen,0));
}
GLDEF_C TEXT *hEBSenseClipText(VOID *ebH)
{
TEXT *pb;
p_send3(EebH->edwin.clip,O_EF_SENSE_BUF,&pb);
return(pb);
}
GLDEF_C INT hEBEvaluate(VOID *ebH)
{
return(Entersend(ebH,O_EW_EVALUATE,NULL,NULL,NULL));
}
GLDEF_C INT hEBChangeWidth(VOID *ebH,INT width)
{
P_EXTENT ext;
p_send3(ebH,O_EW_SENSE_SIZE,&ext);
EebH->edwin.margins.right+=width-ext.width;
ext.width=width;
return(Entersend(ebH,O_EW_SET_SIZE,&ext,NULL,NULL));
}
GLDEF_C INT hEBSetMargin(VOID *ebH,UINT right)
{
INT ret;
UINT oright;
oright=EebH->edwin.margins.right;
EebH->edwin.margins.right=right;
ret=Entersend(EebH->edwin.scrimg,
O_SI_STYLE_CHANGED,SCRIMG_STCHNG_DOC,NULL,NULL);
if (ret<0)
EebH->edwin.margins.right=oright;
return(ret);
}
GLDEF_C UINT hEBSenseMargin(VOID *ebH)
{
return(EebH->edwin.margins.right);
}
GLDEF_C INT hEBInsert(VOID *ebH,TEXT *pb,INT blen)
{
return(Entersend(ebH,O_EW_INSERT,pb,V blen,NULL));
}
GLDEF_C INT hEBReplace(VOID *ebH,TEXT *replace,INT backwards)
{
return(Entersend(ebH,O_EW_REPLACE,replace,V backwards,NULL));
}
GLDEF_C INT hEBCopy(VOID *ebH)
{
if (!(EebH->edwin.select))
return(1);
return(Entersend(ebH,O_EW_REPLACE_CLIP,NULL,NULL,NULL));
}
GLDEF_C INT hEBPaste(VOID *ebH)
{
if (!(p_send2(EebH->edwin.clip,O_EP_SENSE_LEN)))
return(1);
return(Entersend(ebH,O_EW_PASTE_CLIP,NULL,NULL,NULL));
}
GLDEF_C INT hEBFind(VOID *ebH,TEXT *str,INT flags)
{
return(p_send4(ebH,O_EW_FIND,str,flags));
}
GLDEF_C INT hEBSenseChanged(VOID *ebH)
{
return(EebH->edwin.change);
}
GLDEF_C VOID hEBClearChanged(VOID *ebH)
{
EebH->edwin.change=FALSE;
}
GLDEF_C VOID hEBSetCWidth(VOID *ebH,INT cwidth)
{
SCRIMG_WIN win;
p_send3(EebH->edwin.scrimg,O_SI_SENSE,&win);
win.cwidth=cwidth;
Entersend(EebH->edwin.scrimg,O_SI_SET,&win,NULL,NULL);
}
GLDEF_C INT hEBShowSymbols(VOID *ebH,INT flag)
{
SCRLAY_STYLE style;
p_send3(EebH->edwin.scrlay,O_SL_SENSE,&style);
style.options=FALSE;
if (flag)
style.options=SCRLAY_SHOW_SPACES|SCRLAY_SHOW_LFS;
p_send3(EebH->edwin.scrlay,O_SL_SET,&style);
return(Entersend(EebH->edwin.scrimg,O_SI_STYLE_CHANGED,0,0,0));
}
GLDEF_C VOID *hEBOpen(INT flags,H_EDIT_BOX *heb)
{
VOID *ebH;
IN_EDWIN in;
IN_EDWIN_X inx;
PR_WIN win;
ebH=uCheckHandle(p_new(CAT_HWIF_HWIM,C_EDWIN));
if (!ebH)
return(NULL);
win.win.id=heb->win;
in.vulen=heb->vulen;
in.flags=flags|IN_EDWIN_VULEN_PIXELS
|IN_EDWIN_NO_AUTOSELECT|IN_EDWIN_POSITION_SUPPLIED;
in.maxlen=heb->maxchars;
in.contents[0]=0;
inx.vislines=heb->vislines;
inx.pos=heb->pos;
inx.font=heb->font;
inx.style=heb->style;
inx.leading.total=heb->lead_tot;
inx.leading.top=heb->lead_top;
inx.clip=NULL;
if (Entersend(ebH,O_WN_INIT,&in,&win,&inx))
{
hEBClose(ebH);
return(NULL);
}
return(ebH);
}
GLDEF_C VOID *hEBSenseDoc(VOID *ebH)
{
return(EebH->edwin.doc);
}
GLDEF_C INT hEDCapacity(VOID *doc,UINT maxlen)
{
return(Entersend(doc,O_EP_CAPACITY,V (maxlen+1),NULL,NULL));
}
GLDEF_C INT hEDInsert(VOID *doc,UINT pos,VOID *buf,UINT len)
{
return(Entersend(doc,O_EP_INSERT,V pos,buf,V len));
}
GLDEF_C INT hEBDocChanged(VOID *ebH)
{
UINT doclen;
doclen=p_send2(EebH->edwin.doc,O_EP_SENSE_LEN);
EebH->edwin.clen=doclen+1;
return(Entersend(EebH->edwin.scrimg,O_SI_DOC_CHANGED,V doclen,NULL,NULL));
}
GLDEF_C INT hEBPosToXL(void *ebH,H_SCRLAY_PLX *plx)
{
return(p_send3(EebH->edwin.scrlay,O_SL_POS_TO_XL,plx));
}
+209
View File
@@ -0,0 +1,209 @@
/*
HHWIF.C
Started by Huw 11/3/91
Routines for supplying menus and dialogs for non OOP users
such as OPL/W
*/
#include <hwif.g>
#include <hwif.h>
#include <gate.g>
#include <p_gen.h>
#include <epoc.h>
GLREF_D PR_GATE *DatGate;
GLDEF_D UWORD _UseFullScreen;
GLDEF_D UWORD *_GreyLines;
GLDEF_D UWORD *_MenuPositions;
GLDEF_D UWORD _SmallFontDialog;
GLDEF_C INT hIFInit(VOID *console)
/*
Initialise HWIM interface
*/
{
if (!(DatGate=p_new(CAT_HWIF_HWIM,C_GATE)))
return(E_GEN_NOMEMORY);
if (_UseFullScreen)
p_send2(DatGate,O_GT_XW_ENABLE);
return(p_send3(DatGate,O_GT_INIT,console));
}
GLDEF_C INT hMenuOpen()
/*
Create a new menu bar
*/
{
return(p_send2(DatGate,O_GT_MENU_OPEN));
}
GLDEF_C INT hMenuAdd(TEXT *title,VOID *menu)
/*
Add another menu to the menu bar
*/
{
return(p_send4(DatGate,O_GT_MENU_ADD,title,menu));
}
GLDEF_C INT hMenuRun()
/*
Display and use the menu bar
Note that due to the addition of 'gate.g.dx' in os 356 and above, the
property 'gate.g.ulines' is in different places on different models.
Older models will be expecting the greyline data to be where later
models look for 'gate.g.dx', so a test is required to determine where
to copy the greyline data to.
*/
{
if (_GreyLines)
{
p_bcpy((BYTE *)&DatGate->gate.g.ulines[0]-((p_version()>0x355f)?0:
sizeof(DLG_X_CONSTANTS)),_GreyLines,16*sizeof(UWORD));
}
return(p_send3(DatGate,O_GT_MENU_RUN,_MenuPositions));
}
GLDEF_C VOID hMenuClose()
/*
Close an incomplete menu bar down
*/
{
p_send2(DatGate,O_GT_MENU_CLOSE);
}
GLDEF_C INT hDlgOpen(TEXT *title)
/*
Create a new dialog
*/
{
INT method;
method=O_GT_DIAL_OPEN;
if (_SmallFontDialog)
{
method=O_GT_DIAL_SOPEN;
_SmallFontDialog=FALSE;
}
return(p_send3(DatGate,method,title));
}
GLDEF_C INT hDlgAdd(UWORD type,TEXT *prompt,VOID *data)
/*
Add an item to the dialog
*/
{
return(p_send5(DatGate,O_GT_DIAL_ADD,type,prompt,data));
}
GLDEF_C INT hDlgRun()
/*
Display and use the dialog
*/
{
return(p_send2(DatGate,O_GT_DIAL_RUN));
}
GLDEF_C VOID hDlgClose()
/*
Close an incomplete dialog down
*/
{
p_send2(DatGate,O_GT_DIAL_CLOSE);
}
GLDEF_C VOID *hCardOpen()
/*
Open a menu card for building
*/
{
return((VOID *)p_send2(DatGate,O_GT_CARD_OPEN));
}
GLDEF_C INT hCardAdd(VOID *hand,INT index,INT accel,TEXT *str)
/*
Add an item to a menu card
*/
{
H_CARD card;
card.accel=accel;
card.str=str;
return(p_send5(DatGate,O_GT_CARD_ADD,hand,index,&card));
}
GLDEF_C VOID hCardClose(VOID *hand)
/*
Discard a menu card
*/
{
p_send3(DatGate,O_GT_CARD_CLOSE,hand);
}
GLDEF_C VOID *hChoiceOpen()
/*
Open a choice list for building
*/
{
return((VOID *)p_send2(DatGate,O_GT_CHOICE_OPEN));
}
GLDEF_C INT hChoiceAdd(VOID *hand,INT index,TEXT *str)
/*
Add an item to a choice list
*/
{
H_CHOICE choice;
choice.str=str;
return(p_send5(DatGate,O_GT_CHOICE_ADD,hand,index,&choice));
}
GLDEF_C VOID hChoiceClose(VOID *hand)
/*
Discard a choice list
*/
{
p_send3(DatGate,O_GT_CHOICE_CLOSE,hand);
}
GLDEF_C VOID *hButtonOpen()
/*
Open a action list for building
*/
{
return((VOID *)p_send2(DatGate,O_GT_BUTTON_OPEN));
}
GLDEF_C INT hButtonAdd(VOID *hand,INT index,INT key,TEXT *str)
/*
Add a button to an action list
*/
{
H_BUTTON but;
but.keycode=key;
but.str=str;
return(p_send5(DatGate,O_GT_BUTTON_ADD,hand,index,&but));
}
GLDEF_C VOID hButtonClose(VOID *hand)
/*
Discard an action list
*/
{
p_send3(DatGate,O_GT_BUTTON_CLOSE,hand);
}
GLDEF_C INT hDlgPosition(INT x,INT y)
{
return(p_send4(DatGate,O_GT_DIAL_POSITION,x,y));
}
GLDEF_C UINT hLastSystemKey(UINT *pmodifiers)
{
return(p_send3(DatGate,O_GT_LAST_KEY,pmodifiers));
}
+23
View File
@@ -0,0 +1,23 @@
IMAGE hwif
EXTERNAL olib
EXTERNAL hwim
INCLUDE lprinter.g
INCLUDE help.g
CLASS hprinter lprinter
{
REPLACE lpr_read
REPLACE lpr_sense_text
PROPERTY
{
INT (*sense)(WDR_PRINT *);
}
}
CLASS hhelpdlg helpdlg
{
REPLACE destroy
}
+339
View File
@@ -0,0 +1,339 @@
/* HEADER - HWIF.H
Copyright (C) Psion PLC 1992
VER DATE BY DESCRIPTION
===== ======== === ===========
1.20F 08/11/92 DWW New version for Developers Conference
2.00F 01/12/93 DWW Version 2 C SDK
*/
#ifndef HWIF_H
#define HWIF_H
#include <p_graf.h>
#include <wlib.h>
#ifdef STDEPOC_H
# include <p_cons.h>
#else
# ifndef EPOCCONS_H
# include <epoccons.h>
# endif
#endif
typedef struct
{
char *title;
unsigned short int nlines;
} H_MENU_DATA;
#define H_DIALOG_TEXT 0
#define H_DIALOG_CHOICE 1
#define H_DIALOG_NUMBER 2
#define H_DIALOG_FLOAT 3
#define H_DIALOG_TIME 4
#define H_DIALOG_DATE 5
#define H_DIALOG_EDIT 6
#define H_DIALOG_SEDIT 7
#define H_DIALOG_XINPUT 8
#define H_DIALOG_FSEL 9
#define H_DIALOG_BUTTONS 10
typedef struct
{
char *str;
unsigned short int type;
} H_DI_TEXT;
#define H_DTEXT_ALIGN_LEFT 0
#define H_DTEXT_ALIGN_RIGHT 1
#define H_DTEXT_ALIGN_CENTRE 2
#define H_DTEXT_BOLD 0x100
#define H_DTEXT_UNDERLINE 0x200
#define H_DTEXT_SELECTABLE 0x400
typedef struct
{
union
{
unsigned short int *sel;
unsigned short int count;
} u;
void *menu;
} H_DI_CHOICE;
typedef struct
{
long int *value;
long int low;
long int high;
} H_DI_NUMBER;
typedef struct
{
double *value;
double low;
double high;
} H_DI_FLOAT;
typedef struct
{
unsigned long int *value;
unsigned long int low;
unsigned long int high;
unsigned short int type;
} H_DI_TIME;
#define H_DTIME_SHOW_SECONDS 1
#define H_DTIME_DURATION 2
typedef struct
{
unsigned long int *value;
unsigned long int low;
unsigned long int high;
} H_DI_DATE;
#define H_LAST_DAY 93501l
#define H_FIRST_SYS_DAY 25567l
#define H_LAST_SYS_DAY 75276l
typedef struct
{
char *str;
unsigned short int len;
} H_DI_EDIT;
typedef struct
{
char *str;
unsigned short int len;
unsigned short int width;
} H_DI_SEDIT;
typedef struct
{
char *str;
} H_DI_XINPUT;
typedef struct
{
char *fname;
unsigned short int flags;
} H_DI_FSEL;
typedef struct
{
char *str;
short int accel;
} H_CARD;
typedef struct
{
char *str;
} H_CHOICE;
typedef struct
{
char *str;
unsigned short int keycode;
} H_BUTTON;
#define W_EVENT_KEY (CONS_SPECIAL_EVENT*256)
#define H_FILE_ALLOW_DIRS 0x02
#define H_FILE_JUST_DIRS 0x04
#define H_FILE_FORCE_NXIST 0x08
#define H_FILE_NO_AUTOQUERY 0x10
#define H_FILE_ACCEPT_NULL 0x20
#define H_FILE_SET_DEFEXT 0x40
#define H_FILE_CAN_WILDCARD 0x80
#define H_FILE_RESTRICT_LIST H_FILE_FORCE_NXIST
#define H_FILE_PICK_SELECTOR 0
#define H_FILE_NEW_EDITOR 0x01
#define H_PRINT_PAGE 0x01
#define H_PRINT_LINE 0x02
#define H_PRINT_RIGHT 0x04
#define H_PRINT_TEXT 0x10
#define H_PRINT_KEEP 0x8000
#define H_PRINT_STY_UNDERLINE 0x01
#define H_PRINT_STY_BOLD 0x02
#define H_PRINT_STY_ITALIC 0x04
#define H_PRINT_STY_SUPER 0x08
#define H_PRINT_STY_SUB 0x10
typedef struct
{
short int flags;
short int typf;
short int fheight;
short int style;
short int down;
short int indent;
short int height;
short int right;
char *buf;
unsigned short int blen;
} H_PRINT;
#define H_TIME_SET_SDATE 0
#define H_TIME_SET_DATE 1
#define H_TIME_SET_DAYSEC 2
#define H_TIME_SET_NOW 3
#define H_TIME_SENSE_BOTH 3
#define H_TIME_SENSE_DATE 4
#define H_TIME_SENSE_TIME 5
#define H_TIME_FORMAT_NO_DAY 0x0004
#define H_TIME_FORMAT_NO_MONTH 0x0008
#define H_TIME_FORMAT_NO_YEAR 0x0010
#define H_TIME_FORMAT_MONTH_NAME 0x0020
#define H_TIME_FORMAT_SUFFIX 0x0040
#define H_TIME_FORMAT_DAY_NAME 0x0080
#define H_TIME_FORMAT_NO_CENTURY 0x0100
#define H_TIME_FORMAT_NO_SECONDS 0x0200
#define H_ALARM_TIMED 2
#define H_ALARM_UNTIMED 1
typedef struct
{
unsigned short int maxchars;
unsigned short int vulen;
unsigned short int vislines;
P_POINT pos;
unsigned short int win;
unsigned short int font;
unsigned short int style;
unsigned short int lead_tot;
unsigned short int lead_top;
} H_EDIT_BOX;
typedef struct
{
unsigned short int pos;
short int line;
short int x;
} H_SCRLAY_PLX;
#define H_EDIT_BOX_CLIPBOARD 0x0040
#define H_EDIT_BOX_LEFT_CURSOR 0x0200
#define H_EDIT_BOX_FONT 0x1000
#define H_EDIT_BOX_LEADING 0x2000
#define H_EDIT_BOX_VISLINES 0x4000
#define HEB_FIND_BACKWARDS 0x01
#define HEB_FIND_CASESENS 0x02
#define H_DTEDIT_DDMMYYYY 0x0000
#define H_DTEDIT_HHMMSS 0x1100
#define H_DTEDIT_HHMM 0x0100
#define H_DTEDIT_HHMMSS_D 0x1300
#define H_DTEDIT_HHMM_D 0x0300
#define H_DTEDIT_SET_VALUE 0x0001
#define H_DTEDIT_SET_LOW 0x0002
#define H_DTEDIT_SET_HIGH 0x0004
typedef struct
{
unsigned short int flags;
long int value;
long int low;
long int high;
P_POINT pos;
unsigned short int win;
unsigned short int width;
unsigned short int emph;
} H_DTEDIT;
typedef struct
{
unsigned short int flags;
long int value;
long int low;
long int high;
} H_SE_DTEDIT;
#ifdef __cplusplus
extern "C" {
#endif
extern int hIFInit(void *);
extern int hMenuOpen(void);
extern int hMenuAdd(char *,void *);
extern int hMenuRun(void);
extern void hMenuClose(void);
extern int hDlgOpen(char *);
extern int hDlgAdd(unsigned short int,char *,void *);
extern int hDlgRun(void);
extern void hDlgClose(void);
extern int hDlgPosition(int x,int y);
extern void *hCardOpen(void);
extern int hCardAdd(void *,int,int,char *);
extern void hCardClose(void *);
extern void *hChoiceOpen(void);
extern int hChoiceAdd(void *,int,char *);
extern void hChoiceClose(void *);
extern void *hButtonOpen(void);
extern int hButtonAdd(void *,int,int,char *);
extern void hButtonClose(void *);
extern void hEnsurePath(char *fname);
extern void hSetUpStatusNames(char *pb);
extern int hCrackCommandLine(void);
extern int hIsDbfCompressible(void *dH);
extern int hDTMFString(char *zts);
extern unsigned int hLastSystemKey(unsigned int *pmodifiers);
extern void uCommonInit(void);
extern void uEnableGrey(void);
extern void uGetKey(WMSG_KEY *pkey);
extern void uGetKeyA(short int *pstat,WMSG_KEY *pkey);
extern void uCancelGetKeyA(void);
extern int uKeyPressOutstanding(void);
extern void uEscape(unsigned short int flag);
extern unsigned int uFindMainWid(void);
extern void uForceToFront(void);
extern void uErrorString(char *message);
extern int uErrorValue(int ret);
extern void *uCheckHandle(void *handle);
extern void uZTStoBCS(char *bcs,char *zts);
extern int uOpenDialog(char *title);
extern int uAddDialogItem(int type,char *prompt,void *data);
extern int uRunDialog(void);
extern int cdecl uAddButtonList(char *but,int code,...);
extern int uBeginDCL(H_DI_CHOICE *pch);
extern int uGrowDCL(H_DI_CHOICE *pch,char *choice);
extern int uAddDCL(char *prompt,unsigned short int *nsel,H_DI_CHOICE *pch);
extern int cdecl uAddChoiceList(char *prompt,unsigned short int *nsel,char *choice,...);
extern int cdecl uDialogMenu(char *title,char *pb,...);
extern void cdecl uDisplayText(char *pb,...);
extern int uPresentMenus(void);
extern void uAddGreyUline(unsigned char,unsigned short int *plines);
extern void uSetDialogUline(int pos,int on);
extern int uLocateCommand(int accel);
extern void hPrintSetupDialog(void);
extern void hPrint(int printline(H_PRINT *));
extern void hPrinterSetupDialog(void);
extern void hPrintSetSI(unsigned int subsqind);
extern int hPrintSensePageWidth(void);
extern int hPrintSenseBufWidth(char *buf,int blen);
extern void hHelpSubSystem(int startid,int indexid);
extern void *hTTOpen(void);
extern int hTTSetTime(void *handle,int type,void *data);
extern int hTTSenseString(void *handle,int type,char *buf);
extern void hTTSetFormat(void *handle,int values);
extern void hTTSetAbbreviations(void *handle,int dayabb,int monabb);
extern void hTTClose(void *handle);
extern int hEBHandleKey(void *ebH,int keycode,int modifier);
extern int hEBCompleteFormat(void *ebH);
extern char *hEBSenseText(void *ebH);
extern int hEBSetText(void *ebH,char *pb,int blen);
extern void hEBEmphasise(void *ebH,int flag);
extern int hEBSetSelect(void *ebH,int aoff,int coff);
extern int hEBSenseSelect(void *ebH,unsigned short int *top);
extern int hEBSetClipText(void *ebH,char *pb,int blen);
extern char *hEBSenseClipText(void *ebH);
extern int hEBEvaluate(void *ebH);
extern int hEBSetMargin(void *ebH,unsigned int right);
extern unsigned int hEBSenseMargin(void *ebH);
extern int hEBChangeWidth(void *ebH,int width);
extern void hEBSetCWidth(void *ebH,int cwidth);
extern int hEBInsert(void *ebH,char *pb,int blen);
extern int hEBReplace(void *ebH,char *replace,int backwards);
extern int hEBCopy(void *ebH);
extern int hEBPaste(void *ebH);
extern int hEBFind(void *ebH,char *str,int flags);
extern int hEBSenseChanged(void *ebH);
extern void hEBClearChanged(void *ebH);
extern int hEBShowSymbols(void *ebH,int flag);
extern void *hEBOpen(int flags,H_EDIT_BOX *heb);
extern void hEBClose(void *ebH);
extern void *hEBSenseDoc(void *ebH);
extern int hEDCapacity(void *doc,unsigned int maxlen);
extern int hEDInsert(void *doc,unsigned int pos,void *buf,unsigned int len);
extern int hEBDocChanged(void *ebH);
extern int hEBPosToXL(void *ebH,H_SCRLAY_PLX *plx);
extern void hDeclareAppRcb(void *rcb);
extern void *hInitAppRcb(void);
extern int hSetSystemResLang(int lang);
extern void hRequestReplacePack(void *rcb,char *fname);
extern void *hDTOpen(H_DTEDIT *dte);
extern void hDTClose(void *dte);
extern void hDTSet(void *dte,H_SE_DTEDIT *sdte);
extern void hDTSense(void *dte,H_SE_DTEDIT *sdte);
extern int hDTSelfCheck(void *dte);
extern int hDTHandleKey(void *dte,int keycode,int modifier);
extern void hDTEmphasise(void *dte,int flag);
extern void hSetVarrayInChlist(int index,int nsel,void *varray);
extern void hOODialog(int catHandle,int classno,int resid,void *rbuf);
extern int hLoadOwnDyl(int index);
#ifdef __cplusplus
}
#endif
#endif // HWIF_H
+17
View File
@@ -0,0 +1,17 @@
#system epoc img
#model small jpi
#message "HWIF library project file"
#compile hwif.cat
#compile hhwif.c
#compile xhwif.c
#compile uhwif.c
#compile phwif.c
#compile thwif.c
#compile ehwif.c
#compile rhwif.c
#compile diyhwif.c
#dolink hwif.lib
+18
View File
@@ -0,0 +1,18 @@
#system epoc img
#model small jpi
#message "HWIFO library project file"
#compile hwif.cat
#dolink dummy.lib
#compile hhwif.c
#compile xhwif.c
#compile uhwif.c
#compile phwif.c
#compile thwif.c
#compile ehwif.c
#compile rhwif.c
#compile diyhwif.c
#dolink hwifo.lib
+20
View File
@@ -0,0 +1,20 @@
hwifsrc.prj ! releases source files
read.me ! read me for distribution
release.txt ! list of changes between releases
!
hwif.pr ! TS project file
hwifo.pr ! Alternative project file
make.bat ! Makes HWIF.LIB & HWIFO.LIB
ts.red ! Redirector (for completeness)
!
hwif.cat ! printing subclass definition
hhwif.c ! original h layer of hwif
xhwif.c ! later additions to h layer of hwif
uhwif.c ! u layer of hwif
phwif.c ! printing routines
thwif.c ! time manipulation routines
ehwif.c ! edit box routines
rhwif.c ! resource file routines
diyhwif.c ! DIY dialog item routines
!
hwif.h ! header file (releasable)
+4
View File
@@ -0,0 +1,4 @@
@echo off
tscx /m hwif /v0
tscx /m hwif /v0
tscx /m hwifo /v0
+216
View File
@@ -0,0 +1,216 @@
/*
PHWIF.C
Started by DavidW, 5/12/91
Printing extension to h layer of hwif
Help subsystem extension added 3/8/92
*/
#include <hwimman.g>
#include <hactive.g>
#include <p_gen.h>
#include <hwif.h>
#include <hwif.g>
#include <gate.g>
GLREF_D PR_WSERV *w_ws;
GLREF_D PR_HWIMMAN *w_am;
GLREF_D PR_GATE *DatGate;
GLREF_D UWORD DatLocked;
typedef struct
{
INT (*f)(WDR_PRINT *);
} GATE_PRINTER;
typedef struct
{
HANDLE catHand;
INT class;
DL_DATA d;
} GATE_OOD;
#define GATE_FORCE_WSERV_LEAVE FALSE
#pragma save,ENTER_CALL
LOCAL_C INT EditPrintContext(VOID *junk)
{
p_send2(w_ws,O_WS_EDIT_PRINT_CONTEXT);
return(0);
}
LOCAL_C INT EditPrinterSetup(VOID *junk)
{
p_send2(w_ws,O_WS_EDIT_PDEV_SETUP);
return(0);
}
#define _phand ((PR_HPRINTER *)(w_ws->wserv.filelist))
LOCAL_C INT DoPrint(VOID *par)
{
_phand=p_new(CAT_HWIF_HWIF,C_HPRINTER);
if (!_phand)
return(E_GEN_NOMEMORY);
_phand->hprinter.sense=((GATE_PRINTER *)par)->f;
p_send2(_phand,O_LPR_INIT);
return(0);
}
LOCAL_C INT HelpSubSystem(VOID *par)
{
p_send3(w_ws,O_WS_DO_HELP,(INT)par);
p_reclass(CAT_HWIF_HWIF,C_HHELPDLG,w_ws->wserv.dial);
p_send2(w_am,O_AM_START);
return(0);
}
#define _dld ((GATE_OOD *)par)
LOCAL_C INT LaunchDialog(VOID *par)
{
p_send5(w_ws,O_WS_DO_DIAL,_dld->catHand,_dld->class,&_dld->d);
return(0);
}
#pragma restore
LOCAL_C UINT ConsoleOff(UWORD state,UINT leavestate)
/*
Set the console read off or on dependent on state
Also enable or disable leaves from the Window Server.
Return the old value of the disable leaves status.
*/
{
UINT func;
func=P_SCR_DISABLE_READS;
p_iow4(DatGate->gate.concb,P_FSET,&func,&state);
return(wDisableLeaves(leavestate));
}
LOCAL_C VOID ViaGate(
#pragma save,ENTER_CALL
INT func(VOID *),VOID *par)
#pragma restore
{
INT leavestate;
INT ret;
PR_WAOTSTAT *waotstat;
leavestate=ConsoleOff(TRUE,GATE_FORCE_WSERV_LEAVE);
w_ws->wserv.flags&=(~PR_WSERV_FROM_HWIF);
DatLocked++;
ret=p_enter2(func,par);
DatLocked--;
w_ws->wserv.flags|=PR_WSERV_FROM_HWIF;
ConsoleOff(FALSE,leavestate);
if (ret)
uErrorValue(ret);
waotstat=DatGate->gate.waotstat;
while (waotstat->waotstat.count)
{
p_iosignal();
(waotstat->waotstat.count)--;
}
}
LOCAL_C VOID ViaClearGate(
#pragma save,ENTER_CALL
INT func(VOID *),VOID *par)
#pragma restore
/* new function for 2.04, avoid trouble when HELP pressed */
{
INT old;
old=w_ws->wserv.help_index_id;
w_ws->wserv.help_index_id=0;
ViaGate(func,par);
w_ws->wserv.help_index_id=old;
}
GLDEF_C VOID hPrintSetupDialog(VOID)
{
ViaClearGate(EditPrintContext,NULL);
}
GLDEF_C VOID hPrint(INT sense(H_PRINT *))
{
GATE_PRINTER g;
g.f=(INT (*)(WDR_PRINT *))sense;
ViaClearGate(DoPrint,&g);
if (_phand)
{
p_send2(_phand,O_DESTROY);
_phand=NULL;
}
}
GLDEF_C VOID hPrinterSetupDialog(VOID)
{
ViaClearGate(EditPrinterSetup,NULL);
}
GLDEF_C VOID hHelpSubSystem(INT startid,INT indexid)
{
INT old;
old=w_ws->wserv.help_index_id;
w_ws->wserv.help_index_id=indexid;
ViaGate(HelpSubSystem,(VOID *)startid);
w_ws->wserv.help_index_id=old;
}
GLDEF_C VOID hOODialog(INT catHandle,INT class,INT resid,VOID *rbuf)
{
GATE_OOD dld;
dld.catHand=catHandle;
dld.class=class;
dld.d.id=resid;
dld.d.rbuf=rbuf;
dld.d.pdlg=NULL;
ViaClearGate(LaunchDialog,&dld);
}
GLDEF_C VOID hPrintSetSI(UINT subsqind)
{
_phand->lprinter.subsqind=subsqind;
}
GLDEF_C INT hPrintSensePageWidth(VOID)
{
return(_phand->lprinter.width);
}
GLDEF_C INT hPrintSenseBufWidth(TEXT *buf,INT blen)
{
return(p_send4(_phand,O_LPR_SENSE_BUF_WIDTH,buf,blen));
}
#define S_METHOD_CALL call(reg_param =>(bx,dx,si,di),reg_saved =>(ds))
#pragma S_METHOD_CALL
METHOD INT hprinter_lpr_sense_text(PR_HPRINTER *self,WDR_PRINT *pr)
{
return((self->hprinter.sense)(pr));
}
METHOD VOID hprinter_lpr_read(PR_HPRINTER *self,INT x,WDR_PRINT *pr)
{ /* added for Hwif 2.02 as workaround for lprinter bug */
self->lprinter.defer.flags&=(~WDR_PRINT_PAGE);
p_supersend4(self,O_LPR_READ,x,pr);
}
METHOD VOID hhelpdlg_destroy(PR_HHELPDLG *self)
{
p_supersend2(self,O_DESTROY);
p_send2(w_am,O_AM_STOP);
}
+11
View File
@@ -0,0 +1,11 @@
To build your own copy of HWIF.LIB
----------------------------------
Make sure that the OOP component of the SDK has been installed,
as well as the CORE and HWIFSRC components.
In the HWIFSRC directory, type "MAKE".
The HWIF.LIB created should differ in only four bytes - a date stamp in
the library header - from that installed into \SIBOSDK\LIB from the HWIF
component of the SDK.
+48
View File
@@ -0,0 +1,48 @@
Version 2.05 - 7th Dec 94
-------------------------
Made by DavidW:
1. Re-wrote uCommonInit to support W_CTBY_S3_SCR mode (if the new
static _S3UseFullScreen is set), to remove all hard-wired sizes
(these are now calculated dynamically at run-time), to resize the
default graphics window to use every pixel on the screen, and to
simplify the overall logic of the routine.
2. Now test in hDlgOpen for whether a new static _SmallFontDialog is
set, and if so create the dialog using O_GT_DIAL_SOPEN instead of
O_GT_DIAL_OPEN (and clear the flag so that it won't affect any
subsequent dialogs).
Version 2.04 - 1st Aug 94
-------------------------
Made by DavidW:
1. Introduced new function ViaClearGate as a layer around ViaGate
that clears w_ws->wserv.help_index_id before entry, and restores
the original value on completion. This is to avoid problems if
the user presses HELP when inside (a) an OO dialog (b) a
sub-dialog of the Print Setup or Printer Setup suites (c) the
Printing dialog. (These problems would only show up if another
menu item has been highlighted last, apart from the first item in
the first menu.)
Version 2.03 - 31st July 94
---------------------------
Made by DavidW:
1. Now creates HWIFO.LIB as well as HWIF.LIB, to ease the task of
HWIF programmers who want to add OO features to their apps.
HWIF.CAT is now a separate releasable.
Version 2.02 - 23rd Mar 94
--------------------------
Made by DavidW:
1. Added new replacement method lpr_read to hprinter class, to clear
PRINT_PAGE bit in defer.flags, to workaround bug in lprinter class
in which a line printed with PRINT_PAGE which needed to be
word-wrapped would throw a new page for each extra line generated.
Version 2.01 - 7th Feb 94
-------------------------
Made by DavidW:
1. Added function hEBPosToXL and struct definition H_SCRLAY_PLX
allowing access to the scrlay method O_SL_POS_TO_XL.
2. Changed "class" to "classno" in one function definition, to be
more C++ friendly.
+74
View File
@@ -0,0 +1,74 @@
/*
RHWIF.C
Started by DavidW, 1/11/92
Resource file extension to Hwif
*/
#include <appman.g>
#include <wlib.h>
#include <hwif.h>
#include <hwif.g>
#include <epoc.h>
#include <p_gen.h>
#include <s_.rsg>
GLREF_D PR_APPMAN *w_am;
GLREF_D WORD DatLocked;
GLREF_D VOID *DatCommandPtr;
GLDEF_C VOID hDeclareAppRcb(VOID *rcb)
{
w_am->appman.rcb=rcb;
}
GLDEF_C VOID *hInitAppRcb(VOID)
{ /* create and initialise resource file object */
INT ret;
VOID *rcb; /* resource file object handle */
rcb=p_new(1,C_RSCFILE);
ret=p_entersend3(rcb,O_RS_INIT,DatCommandPtr); /* pass file name */
if (ret<0) /* no resource file found */
p_exit(ret); /* fatal (programmer) error */
hDeclareAppRcb(rcb);
return(rcb);
}
GLDEF_C INT hSetSystemResLang(INT lang)
{
TEXT name[12]; /* eg "ROM::s_.~04" */
P_INFO junk;
VOID *srcb;
INT ret;
p_atos(&name[0],"ROM::S_.~%02d",lang);
if (p_finfo(&name[0],&junk))
return(E_FILE_NXIST);
srcb=p_new(CAT_HWIF_OLIB,C_RSCFILE);
if (!srcb)
return(E_GEN_NOMEMORY);
ret=p_entersend3(srcb,O_RS_INIT,&name[0]);
if (!ret)
{
p_send2(w_am->appman.srcb,O_DESTROY);
w_am->appman.srcb=srcb;
}
return(ret);
}
GLDEF_C VOID hRequestReplacePack(VOID *rcb,TEXT *fname)
{
TEXT buf[50];
p_send4(w_am,O_AM_LOAD_RES_BUF,-SYS_REPLACE_DISK,&buf[0]);
do
{
DatLocked++;
wsAlertW(WS_ALERT_CLIENT,0,&buf[0],0);
DatLocked--;
} while (p_entersend3(rcb,O_RS_INIT,fname)<0);
}
+48
View File
@@ -0,0 +1,48 @@
/*
THWIF.C
Started by DavidW, 6/12/91
Time text extension to h layer of hwif
*/
#include <hwif.g>
#include <htime.g>
#include <hwif.h>
GLDEF_C VOID *hTTOpen(VOID)
{
return(uCheckHandle(p_new(CAT_HWIF_HWIM,C_HTIME)));
}
GLDEF_C INT hTTSetTime(VOID *handle,INT type,VOID *data)
{
return(p_send4(handle,O_TO_SET,type,data));
}
GLDEF_C INT hTTSenseString(VOID *handle,INT type,TEXT *buf)
{
return(p_send4(handle,O_TO_SENSE,type,buf));
}
#define TIME_DEFAULTS (PR_TIME_NO_SECS|PR_TIME_DAY_NAME|PR_TIME_SUFFIX_NAME|PR_TIME_MONTH_NAME|PR_TIME_FORCE_UPDATE_FORMAT)
GLDEF_C VOID hTTSetFormat(VOID *handle,INT values)
{
p_send3(handle,O_TO_SET_FORMAT,NULL);
((PR_TIME *)handle)->time.f.flags&=(~TIME_DEFAULTS);
((PR_TIME *)handle)->time.f.flags|=values;
}
GLDEF_C VOID hTTSetAbbreviations(VOID *handle,INT dayabb,INT monabb)
{
p_send4(handle,O_TO_SET_ABBREVIATIONS,dayabb,monabb);
((PR_TIME *)handle)->time.f.flags|=PR_TIME_ABBREVIATE;
}
GLDEF_C VOID hTTClose(VOID *handle)
{
p_send2(handle,O_DESTROY);
}
+385
View File
@@ -0,0 +1,385 @@
/*
UHWIF.C
Started by DavidW, 8/11/91
Utility layer of hwif
*/
#include <p_std.h>
#include <p_gen.h>
#include <p_file.h>
#include <p_cons.h>
#include <wlib.h>
#include <hwif.h>
GLREF_D UWORD DatLocked;
GLREF_D WSERV_SPEC *wserv_channel;
GLREF_D VOID *winHandle;
GLREF_D UWORD _UseFullScreen;
GLDEF_D UWORD _S3UseFullScreen;
GLREF_D TEXT ** _cmds;
GLREF_D H_MENU_DATA * _mdata;
LOCAL_C VOID Check(INT val)
{
if (val)
p_exit(val);
}
GLDEF_C VOID uCommonInit(VOID)
{
INT val;
UINT func;
CONSOLE_INFO cinfo;
W_WINDATA wd;
p_linklib(0);
if (winHandle)
{
val=FALSE;
func=P_SCR_CURSOR;
Check(p_iow4(winHandle,P_FSET,&func,&val));
goto exit;
}
Check(p_open(&winHandle,"CON:",0));
if (_UseFullScreen || _S3UseFullScreen)
{
if ((wserv_channel->conn.info.version_id&WS_VERSION_MASK)
<WS_VERSION_4)
_UseFullScreen=FALSE;
else
{
val=0;
if (_S3UseFullScreen)
val=W_CTBY_S3_SCR;
func=P_SCR_COMPATIBILITY;
Check(p_iow4(winHandle,P_FSET,&func,&val));
}
}
p_iow3(winHandle,P_FINQ,&cinfo);
wd.extent.tl.x=wd.extent.tl.y=0;
wd.extent.width=(wserv_channel->conn.info.pixels.x+1)/cinfo.char_width;
wd.extent.height=(wserv_channel->conn.info.pixels.y+1)/cinfo.line_height;
func=P_SCR_WSET;
Check(p_iow4(winHandle,P_FSET,&func,&wd.extent));
wd.extent.width=wserv_channel->conn.info.pixels.x;
wd.extent.height=wserv_channel->conn.info.pixels.y;
wSetWindow(cinfo.window_handle,W_WIN_EXTENT,&wd);
Check(wCheckPoint());
exit:
hIFInit(winHandle);
}
GLDEF_C VOID uEnableGrey(VOID)
{
UINT func;
UINT flags;
func=P_SCR_GREY;
flags=TRUE;
Check(p_iow4(winHandle,P_FSET,&func,&flags));
}
GLDEF_C VOID uGetKey(WMSG_KEY *pkey)
{
p_iow3(winHandle,P_EVENT_READ,pkey);
}
GLDEF_C VOID uGetKeyA(WORD *pstat,WMSG_KEY *pkey)
{
p_ioc4(winHandle,P_EVENT_READ,pstat,pkey);
}
GLDEF_C VOID uCancelGetKeyA(VOID)
{
p_iow2(winHandle,P_FCANCEL);
}
GLDEF_C INT uKeyPressOutstanding(VOID)
{
UWORD flag;
p_iow3(winHandle,P_FTEST,&flag);
return(flag);
}
GLDEF_C VOID uEscape(UWORD flag)
{
UINT func;
func=P_SCR_ESCAPE;
p_iow4(winHandle,P_FSET,&func,&flag);
}
GLDEF_C UINT uFindMainWid(VOID)
{
CONSOLE_INFO info;
p_iow3(winHandle,P_FINQ,&info);
return(info.window_handle);
}
GLDEF_C VOID uForceToFront(VOID)
{
wClientPosition(0,0);
wFlush();
}
GLDEF_C VOID uErrorString(TEXT *message)
{
uForceToFront();
DatLocked++;
wsAlertW(WS_ALERT_CLIENT,0,message,0);
DatLocked--;
}
GLDEF_C INT uErrorValue(INT ret)
{
TEXT buf[64];
if (ret)
{
p_errs(&buf[0],ret);
uErrorString(&buf[0]);
}
return(ret);
}
GLDEF_C VOID *uCheckHandle(VOID *hand)
{
if (!hand)
uErrorValue(E_GEN_NOMEMORY);
return(hand);
}
GLDEF_C VOID uZTStoBCS(TEXT *bcs,TEXT *zts)
{
p_bcpy(bcs+1,zts,*bcs=p_slen(zts));
}
GLDEF_C INT uOpenDialog(TEXT *title)
{
TEXT buf[64];
if (title)
{
uZTStoBCS(&buf[0],title);
title=(&buf[0]);
}
return(uErrorValue(hDlgOpen(title)));
}
GLDEF_C INT uAddDialogItem(INT type,TEXT *prompt,VOID *data)
{
TEXT buf[64];
if (prompt)
{
uZTStoBCS(&buf[0],prompt);
prompt=(&buf[0]);
}
return(uErrorValue(hDlgAdd(type,prompt,data)));
}
GLDEF_C INT uRunDialog(VOID)
{
INT ret;
DatLocked++;
ret=hDlgRun();
DatLocked--;
if (ret<0)
uErrorValue(ret);
return(ret);
}
GLDEF_C INT CDECL uAddButtonList(TEXT *but,INT code,...)
{
TEXT buf[40];
INT count;
TEXT **pbut;
INT *pcode;
VOID *buts;
buts=uCheckHandle(hButtonOpen());
if (!buts)
return(-1);
count=1;
pbut=(&but);
pcode=(&code);
while (*pbut)
{
uZTStoBCS(&buf[0],*pbut);
if (uErrorValue(hButtonAdd(buts,count++,*pcode,&buf[0])))
goto CleanUp;
pcode+=2;
pbut+=2;
}
if (!uAddDialogItem(H_DIALOG_BUTTONS,0,(VOID *)buts))
return(0);
CleanUp:
hButtonClose(buts);
return(-1);
}
GLDEF_C INT uBeginDCL(H_DI_CHOICE *pch)
{
pch->u.count=1;
pch->menu=uCheckHandle(hChoiceOpen());
return(!(INT)pch->menu);
}
GLDEF_C INT uGrowDCL(H_DI_CHOICE *pch,TEXT *choice)
{
TEXT buf[64];
uZTStoBCS(&buf[0],choice);
if (!uErrorValue(hChoiceAdd(pch->menu,pch->u.count++,&buf[0])))
return(0);
hChoiceClose(pch->menu);
return(-1);
}
GLDEF_C INT uAddDCL(TEXT *prompt,UWORD *nsel,H_DI_CHOICE *pch)
{
pch->u.sel=nsel;
if (!uAddDialogItem(H_DIALOG_CHOICE,prompt,pch))
return(0);
hChoiceClose(pch->menu);
return(-1);
}
GLDEF_C INT CDECL uAddChoiceList(TEXT *prompt,UWORD *nsel,TEXT *choice,...)
{
TEXT **pchoice;
H_DI_CHOICE ch;
if (uBeginDCL(&ch))
return(-1);
pchoice=(&choice);
while (*pchoice)
{
if (uGrowDCL(&ch,*pchoice++))
return(-1);
}
return(uAddDCL(prompt,nsel,&ch));
}
GLDEF_C INT uLocateCommand(INT accel)
{
INT i;
TEXT **pcmd;
TEXT *cmd;
i=0;
pcmd=_cmds;
while ((cmd=*pcmd++)!=0)
{
if (*cmd==accel)
return(i);
i++;
}
return(-1);
}
GLDEF_C INT uPresentMenus(VOID)
{
INT ret;
VOID *card[16];
VOID *loc;
INT cardindex;
TEXT **pcmd;
TEXT *cmd;
H_MENU_DATA *mdata;
INT pos;
INT nitems;
TEXT buf[64];
if (uErrorValue(hMenuOpen()))
return(0);
mdata=_mdata;
pcmd=_cmds;
cardindex=0;
while (mdata->title)
{
loc=uCheckHandle(hCardOpen());
if (!loc)
goto TidyUp;
card[cardindex++]=loc;
nitems=mdata->nlines;
pos=1;
while (nitems--)
{
cmd=(*pcmd++);
uZTStoBCS(&buf[0],cmd+1);
if (uErrorValue(hCardAdd(loc,pos++,*cmd,&buf[0])))
goto TidyUp;
}
uZTStoBCS(&buf[0],mdata->title);
if (uErrorValue(hMenuAdd(&buf[0],loc)))
goto TidyUp;
mdata++;
}
DatLocked++;
ret=hMenuRun();
DatLocked--;
if (ret>=0)
goto CleanUp;
uErrorValue(ret);
TidyUp:
hMenuClose();
ret=0;
CleanUp:
while (cardindex)
hCardClose(card[--cardindex]);
return(ret);
}
GLDEF_C VOID uAddGreyUline(UBYTE accel,UWORD *plines)
{
*(plines+(accel/16))|=(1<<(accel%16));
}
GLDEF_C INT CDECL uDialogMenu(TEXT *title,TEXT *pb,...)
{
TEXT **ppb;
H_DI_TEXT txt;
TEXT buf[64];
if (uOpenDialog(title))
return(0);
txt.type=H_DTEXT_ALIGN_LEFT|H_DTEXT_SELECTABLE;
txt.str=(&buf[0]);
ppb=(&pb);
while (*ppb)
{
uZTStoBCS(&buf[0],*ppb++);
if (uAddDialogItem(H_DIALOG_TEXT," ",&txt))
return(0);
}
return(uRunDialog());
}
GLDEF_C VOID CDECL uDisplayText(TEXT *pb,...)
{
TEXT **ppb;
H_DI_TEXT txt;
TEXT buf[64];
if (uOpenDialog(NULL))
return;
txt.type=H_DTEXT_ALIGN_LEFT;
txt.str=(&buf[0]);
ppb=(&pb);
while (*ppb)
{
uZTStoBCS(&buf[0],*ppb++);
if (uAddDialogItem(H_DIALOG_TEXT,NULL,&txt))
return;
}
uRunDialog();
}
+144
View File
@@ -0,0 +1,144 @@
/*
XHWIF.C
Started by DavidW, 8/11/91
Later additions to h layer of hwif
*/
#include <p_std.h>
#include <p_file.h>
#include <p_sys.h>
#include <p_object.h>
#include <epoc.h>
GLREF_D TEXT *DatUsedPathNamePtr;
GLREF_D TEXT *DatCommandPtr;
GLREF_D TEXT *DatProcessNamePtr;
GLREF_D TEXT *DatStatusNamePtr;
GLDEF_C VOID hEnsurePath(TEXT *fname)
/*
Ensure that the path of the specified path exists.
All errors are ignored.
*/
{
P_FPARSE crk;
TEXT buf[P_FNAMESIZE];
if (!p_fparse(fname,NULL,&buf[0],&crk))
{
buf[crk.system+crk.device+crk.path]=0;
p_mkdir(&buf[0]);
}
}
GLDEF_C VOID hSetUpStatusNames(TEXT *pb)
{
TEXT buf[P_FNAMESIZE];
P_FPARSE crk;
DatUsedPathNamePtr=pb;
p_fparse(pb,0,&buf[0],&crk);
DatStatusNamePtr=pb+P_FSYSNAMESIZE+crk.device+crk.path;
}
GLDEF_C INT hCrackCommandLine(VOID)
{
INT ret;
TEXT *pb;
pb=DatCommandPtr;
pb+=p_slen(pb)+1;
if (!*pb++)
ret=0;
else
{
ret=(*pb++);
DatProcessNamePtr=pb;
pb+=p_slen(pb)+1;
pb+=p_slen(pb)+1;
if (*pb)
hSetUpStatusNames(pb);
else
DatStatusNamePtr=DatProcessNamePtr;
}
return(ret);
}
GLDEF_C INT hIsDbfCompressible(VOID *dH)
{
return(*((UWORD *)dH+19)&P_FMEDIA_COMPRESSIBLE);
}
typedef struct
{
UWORD toneLengthTicks;
UWORD delayLengthTicks;
UWORD pauseLengthTicks;
UBYTE dialOutCode[6];
} DTMF_ENVAR;
LOCAL_C VOID ReadDTMFEnvar(DTMF_ENVAR *penv)
{
INT len;
UBYTE buf[P_ENVMAX];
len=p_getenviron("D$X",3,&buf[0]);
if (len==sizeof(DTMF_ENVAR))
p_bcpy(penv,&buf[0],sizeof(DTMF_ENVAR));
else
{
penv->toneLengthTicks=8;
penv->delayLengthTicks=8;
penv->pauseLengthTicks=48;
}
}
GLDEF_C INT hDTMFString(TEXT *zts)
{
E_DIAL c;
DTMF_ENVAR env;
INT oldsnd_state;
INT ret;
VOID *snd;
INT i;
ReadDTMFEnvar(&env);
c.toneLengthTicks=env.toneLengthTicks;
c.delayLengthTicks=env.delayLengthTicks;
c.pauseLengthTicks=env.pauseLengthTicks;
oldsnd_state=p_getsnd();
p_setsnd((oldsnd_state&~E_SOUND_DISABLE)|E_SOUND_DEVICE);
for (i=3;i;i--)
{
if (!(ret=p_open(&snd,"SND:",0)))
break;
p_sleep(1);
}
if (!ret)
{
p_iow4(snd,E_FDIAL,zts,&c);
p_close(snd);
}
p_setsnd(oldsnd_state);
return(ret);
}
GLDEF_C INT hLoadOwnDyl(INT index)
{
INT DylHandle;
VOID *fcb;
INT ret;
DylHandle=0;
ret=p_openlib(&fcb,DatCommandPtr);
if (!ret)
{
p_loadfilelib(fcb,index,&DylHandle,TRUE);
p_close(fcb);
}
return(DylHandle);
}