/* QU4.C */ #include #include #include #include #include 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(); }