251 lines
5.5 KiB
C
251 lines
5.5 KiB
C
/*
|
|
QU4.C
|
|
*/
|
|
|
|
#include <p_std.h>
|
|
#include <p_date.h>
|
|
#include <p_file.h>
|
|
#include <wlib.h>
|
|
#include <hwif.h>
|
|
|
|
|
|
LOCAL_D TEXT *cmds[]=
|
|
{
|
|
"iInches/Centimetres",
|
|
"mMiles/Kilometres",
|
|
"lPounds/Kilogrammes",
|
|
"pPints/Litres",
|
|
"fFahrenheit/Centigrade",
|
|
"dDay of week",
|
|
"cCombinations",
|
|
"tTime difference",
|
|
"hHoroscope",
|
|
"nNow",
|
|
"wPassword",
|
|
"eEncrypt",
|
|
"uDecrypt",
|
|
"sSignificance",
|
|
"zFile size",
|
|
"xExit",
|
|
NULL
|
|
};
|
|
|
|
LOCAL_D H_MENU_DATA mdata[]=
|
|
{
|
|
"Conversions",5,
|
|
"Calendar",5,
|
|
"Secret",3,
|
|
"Special",3,
|
|
NULL
|
|
};
|
|
|
|
GLDEF_D TEXT ** _cmds=(&cmds[0]);
|
|
GLDEF_D H_MENU_DATA * _mdata=(&mdata[0]);
|
|
|
|
|
|
LOCAL_D UINT MainWid;
|
|
|
|
LOCAL_D VOID *ttH;
|
|
LOCAL_D UWORD ttMonth=1;
|
|
LOCAL_D UWORD ttSuffix=1;
|
|
LOCAL_D UWORD ttDay=1;
|
|
LOCAL_D UWORD ttCentury=2;
|
|
LOCAL_D UWORD ttSeconds=2;
|
|
|
|
|
|
LOCAL_C INT AddNoYesChoiceList(TEXT *pmt,UWORD *pval)
|
|
{
|
|
return(uAddChoiceList(pmt,pval,"No","Yes",NULL));
|
|
}
|
|
|
|
LOCAL_C VOID TimeNow(VOID)
|
|
{
|
|
INT values;
|
|
H_DI_TEXT txt;
|
|
TEXT buf[48];
|
|
|
|
txt.str=(&buf[0]);
|
|
do
|
|
{
|
|
if (uOpenDialog(NULL))
|
|
return;
|
|
uZTStoBCS(&buf[0],"Time is now");
|
|
txt.type=H_DTEXT_ALIGN_CENTRE;
|
|
if (uAddDialogItem(H_DIALOG_TEXT,NULL,&txt))
|
|
return;
|
|
values=0;
|
|
if (ttMonth==2)
|
|
values=H_TIME_FORMAT_MONTH_NAME;
|
|
if (ttDay==2)
|
|
values|=H_TIME_FORMAT_DAY_NAME;
|
|
if (ttSuffix==2)
|
|
values|=H_TIME_FORMAT_SUFFIX;
|
|
if (ttCentury==1)
|
|
values|=H_TIME_FORMAT_NO_CENTURY;
|
|
if (ttSeconds==1)
|
|
values|=H_TIME_FORMAT_NO_SECONDS;
|
|
hTTSetFormat(ttH,values);
|
|
hTTSetTime(ttH,H_TIME_SET_NOW,NULL);
|
|
buf[0]=hTTSenseString(ttH,H_TIME_SENSE_BOTH,&buf[1]);
|
|
txt.type=H_DTEXT_ALIGN_CENTRE|H_DTEXT_UNDERLINE;
|
|
if (uAddDialogItem(H_DIALOG_TEXT,NULL,&txt))
|
|
return;
|
|
if (AddNoYesChoiceList("Give month name",&ttMonth))
|
|
return;
|
|
if (AddNoYesChoiceList("Give day name",&ttDay))
|
|
return;
|
|
if (AddNoYesChoiceList("Use date suffix",&ttSuffix))
|
|
return;
|
|
if (AddNoYesChoiceList("Show century",&ttCentury))
|
|
return;
|
|
if (AddNoYesChoiceList("Show seconds",&ttSeconds))
|
|
return;
|
|
} while (uRunDialog()>0);
|
|
}
|
|
|
|
LOCAL_C VOID SetUpDiDate(H_DI_DATE *pdate,P_DAYSEC *pds)
|
|
{
|
|
ULONG sdate;
|
|
|
|
sdate=p_date();
|
|
p_sttods(&sdate,pds);
|
|
pdate->value=(&pds->day);
|
|
pdate->low=0;
|
|
pdate->high=H_LAST_DAY;
|
|
}
|
|
|
|
LOCAL_C VOID DayOfWeek(VOID)
|
|
{
|
|
P_DAYSEC ds;
|
|
H_DI_DATE date;
|
|
TEXT buf[40];
|
|
H_DI_TEXT txt;
|
|
|
|
SetUpDiDate(&date,&ds);
|
|
do
|
|
{
|
|
p_nmday(&buf[1],p_wkday(ds.day));
|
|
buf[0]=p_slen(&buf[1]);
|
|
txt.str=(&buf[0]);
|
|
txt.type=H_DTEXT_ALIGN_LEFT;
|
|
if (uOpenDialog("Find day of week"))
|
|
return;
|
|
if (uAddDialogItem(H_DIALOG_DATE,"Date",&date))
|
|
return;
|
|
if (uAddDialogItem(H_DIALOG_TEXT,"Day of week",&txt))
|
|
return;
|
|
} while (uRunDialog()>0);
|
|
}
|
|
|
|
LOCAL_C VOID FileSize(VOID)
|
|
{
|
|
TEXT fname[P_FNAMESIZE+2];
|
|
H_DI_FSEL fsel;
|
|
P_INFO info;
|
|
TEXT buf[30];
|
|
|
|
fname[0]=0;
|
|
fsel.fname=(&fname[0]);
|
|
fsel.flags=H_FILE_PICK_SELECTOR;
|
|
FOREVER
|
|
{
|
|
if (uOpenDialog("Find file size"))
|
|
return;
|
|
if (uAddDialogItem(H_DIALOG_FSEL,"File:",&fsel))
|
|
return;
|
|
if (uRunDialog()<=0)
|
|
return;
|
|
fname[1+fname[0]]=0;
|
|
if (!uErrorValue(p_finfo(&fname[1],&info)))
|
|
{
|
|
p_atos(&buf[0],"File size is %lu bytes",info.size);
|
|
wInfoMsg(&buf[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
LOCAL_C VOID ManageCommand(INT keycode)
|
|
{
|
|
INT index;
|
|
TEXT buf[40];
|
|
|
|
switch (keycode)
|
|
{
|
|
case 'd':
|
|
DayOfWeek();
|
|
break;
|
|
case 'n':
|
|
TimeNow();
|
|
break;
|
|
case 'z':
|
|
FileSize();
|
|
break;
|
|
case 'x':
|
|
p_exit(0);
|
|
default:
|
|
index=uLocateCommand(keycode);
|
|
if (index>=0)
|
|
{
|
|
p_atos(&buf[0],"You chose `%s'",cmds[index]+1);
|
|
wInfoMsg(&buf[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
LOCAL_C VOID MainLoop(VOID)
|
|
{
|
|
INT ret;
|
|
WMSG_KEY key;
|
|
|
|
FOREVER
|
|
{
|
|
uGetKey(&key);
|
|
if (key.keycode&W_SPECIAL_KEY)
|
|
ManageCommand(key.keycode&(~W_SPECIAL_KEY));
|
|
else if (key.keycode==W_KEY_MENU && !(key.modifiers&W_CTRL_MODIFIER))
|
|
{
|
|
ret=uPresentMenus();
|
|
if (ret>0)
|
|
ManageCommand(ret);
|
|
}
|
|
}
|
|
}
|
|
|
|
LOCAL_C VOID ReduceScreenSize(VOID)
|
|
{
|
|
W_WINDATA wd;
|
|
|
|
wd.extent.tl.x=wd.extent.tl.y=0;
|
|
wd.extent.width=189;
|
|
wd.extent.height=80;
|
|
wSetWindow(MainWid,W_WIN_EXTENT,&wd);
|
|
if (uErrorValue(wCheckPoint()))
|
|
p_exit(0);
|
|
}
|
|
|
|
LOCAL_C VOID CreateGC(VOID)
|
|
{
|
|
INT hgc;
|
|
|
|
hgc=gCreateGC0(MainWid);
|
|
if (hgc<0)
|
|
p_exit(hgc);
|
|
}
|
|
|
|
LOCAL_C VOID SpecificInit(VOID)
|
|
{
|
|
MainWid=uFindMainWid();
|
|
ReduceScreenSize();
|
|
CreateGC();
|
|
gBorder(W_BORD_CORNER_4);
|
|
wsEnable();
|
|
ttH=hTTOpen();
|
|
}
|
|
|
|
GLDEF_C VOID main(VOID)
|
|
{
|
|
uCommonInit();
|
|
SpecificInit();
|
|
MainLoop();
|
|
}
|