home *** CD-ROM | disk | FTP | other *** search
- /**
- *** WizardClock v1.20
- *** An international calendar clock with WB2.0 design
- *** Written by Stefan Zeiger in Jul-Nov/1991
- *** Released into the Public Domain by ! WIZARD WORKS ! in 1991
- *** Compiler: SAS/C 5.10a (The very, very best !!!)
- ***
- *** Hi, programmer !
- *** I actually wrote WizardClock as an exercise in Workbench 2.0 design.
- *** I've also included some other graphical elements, which aren't used in
- *** WizardClock. Feel free to use those graphx and parts of this program
- *** in your own projects. I've taken the know-how for the timer-device
- *** programming from Jonathan Potter's "JPClock". If you want to use
- *** WizardClock in a commercial product, please let me know it. And,
- *** please, leave my name in it. Thank you. If you want to recompile
- *** WizardClock, you need the file "umain.c" from the "source" directory of
- *** SAS/C 5.10a. Compile it with a "#define TINY" at the beginning of the
- *** source code and a command like
- *** "lc -v -O -ctusr -m0t -d0 -oTinyMain.o umain.c".
- *** Then put the object code to the WizardClock source codes and execute
- *** "LMK". Have fun with this clock, and happy programming,
- *** Stefan.
- ***
- **/
-
-
- /* --------------------------------------------------------------- INCLUDES */
-
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <exec/tasks.h>
- #include <graphics/gfxbase.h>
- #include <graphics/gfx.h>
- #include <graphics/gfxmacros.h>
- #include <intuition/intuitionbase.h>
- #include <intuition/intuition.h>
- #include <libraries/dos.h>
- #include <libraries/dosextens.h>
- #include <devices/audio.h>
- #include <devices/timer.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #include <proto/exec.h>
- #include <proto/dos.h>
- #include <proto/timer.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #include <ctype.h>
- #include "Toggle1.h"
- #include "Toggle2.h"
- #include "DrawGads.h"
- #include "Icons.h"
- #include "Multiple1.h"
- #include "Multiple3.h"
- #include "Sinus.h"
-
-
- /* ---------------------------------------------------------------- DEFINES */
-
- #define LANGUAGE 1
- #define CALENDAR 2
- #define ANALOG 3
- #define DIGITAL 4
- #define ABOUT 5
-
- #define GADGOFF 14
- #define ALARMOFF 102
-
- #define ANALOGX 130
- #define ANALOGY 77
-
-
- /* ------------------------------------------------- DISK ACCESS PROTOTYPES */
-
- #ifndef __ARGS
- #ifdef NARGS
- #define __ARGS(a) ()
- #else
- #define __ARGS(a) a
- #endif
- #endif
-
- extern int open __ARGS((char *, int, ));
- extern int write __ARGS((int, void *, unsigned));
- extern int close __ARGS((int));
-
-
- /* ------------------------------------------------ DISABLE CTRL-C HANDLING */
-
- int CXBRK(void) { return(0); }
- int chkabort(void) { return(0); }
-
-
- /* -------------------------------------------------------------- LSR STUFF */
-
- long _stack = 4000;
- char *_procname = "WizardClock";
- long _priority = 0;
- long _BackGroundIO = 1;
- extern BPTR _Backstdout;
-
-
- /* ------------------------------------------------ LIBRARY BASE STRUCTURES */
-
- struct IntuitionBase *IntuitionBase=NULL;
- struct GfxBase *GfxBase=NULL;
-
-
- /* -------------------------------------------- LANGUAGE SPECIFIC TEXT DATA */
-
- char *English[]=
- {
- /* 00 */ "Sunday ","Monday ","Tuesday ","Wednesday ",
- /* -- */ "Thursday ","Friday ","Saturday ",
- /* 07 */ "Jan","Feb","Mar","Apr","May","Jun",
- /* -- */ "Jul","Aug","Sep","Oct","Nov","Dec",
- /* 19 */ "Mo","Tu","We","Th","Fr","Sa","Su",
- /* 26 */ "Day of the year :","Total :","by Stefan Zeiger",
- /* 29 */ "Released as Public"," Domain by : ","Voice: (49)-6188-2525",
- /* 30 */ "Alarm:"
- };
-
- char *German[]=
- {
- /* 00 */ "Sonntag ","Montag ","Dienstag ","Mittwoch ",
- /* -- */ "Donnerstag","Freitag ","Samstag ",
- /* 07 */ "Jan","Feb","Mär","Apr","Mai","Jun",
- /* -- */ "Jul","Aug","Sep","Okt","Nov","Dez",
- /* 19 */ "Mo","Di","Mi","Do","Fr","Sa","So",
- /* 26 */ "Tag des Jahres : ","Gesamt :","von Stefan Zeiger",
- /* 29 */ "Als Public Domain","freigegeben von :","Tel.: (49)-6188-2525",
- /* 30 */ "Alarm:"
- };
-
- char *French[]=
- {
- /* 00 */ "Dimanche ","Lundi ","Mardi ","Mercredi ",
- /* -- */ "Jeudi ","Vendredi ","Samedi ",
- /* 07 */ "Jan","Fév","Mar","Avr","Mai","Jun",
- /* -- */ "Jul","Aoû","Sep","Oct","Nov","Déc",
- /* 19 */ "Lu","Ma","Me","Je","Ve","Sa","Di",
- /* 26 */ "Jour dans l'an : ","Environ :","par Stefan Zeiger",
- /* 29 */ "Placé dans le do-","maine public par:"," (49)-6188-2525 ",
- /* 30 */ "Alarme"
- };
-
- char **Language=English;
-
-
- /* ------------------------------------------------------ GADGET STRUCTURES */
-
- UBYTE alarm_buffer[10]="00:00:00 ";
- UBYTE alarm_undo_buffer[10];
- struct StringInfo alarm_string_info={alarm_buffer,alarm_undo_buffer,0,10,0,0,0,0,0,0,NULL,NULL,NULL};
- struct Gadget alarm_gadget=
- {
- NULL,
- ALARMOFF+6,103,64,8,
- GADGHCOMP,
- RELVERIFY,
- STRGADGET,
- NULL, /* GadgetRender */
- NULL, /* SelectRender */
- NULL,NULL,(APTR) &alarm_string_info,0,NULL
- };
-
- struct Gadget isalarm_gadget=
- {
- NULL,
- ALARMOFF+85, /* LeftEdge */
- 101, /* TopEdge */
- 26, /* Width */
- 11, /* Height */
- GADGHIMAGE|
- GADGIMAGE,
- GADGIMMEDIATE|
- TOGGLESELECT,
- BOOLGADGET,
- (APTR)&tog1_image,(APTR)&tog2_image,
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget l3_gadget= /* FRENCH */
- {
- NULL,
- 40, /* LeftEdge */
- 50, /* TopEdge */
- 17, /* Width */
- 7, /* Height */
- GADGHNONE,
- GADGIMMEDIATE|
- RELVERIFY,
- BOOLGADGET,
- NULL,NULL,
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget l2_gadget= /* GERMAN */
- {
- &l3_gadget,
- 40, /* LeftEdge */
- 40, /* TopEdge */
- 17, /* Width */
- 7, /* Height */
- GADGHNONE,
- GADGIMMEDIATE|
- RELVERIFY,
- BOOLGADGET,
- NULL,NULL,
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget l1_gadget= /* ENGLISH */
- {
- &l2_gadget, /* NextGadget */
- 40, /* LeftEdge */
- 30, /* TopEdge */
- 17, /* Width */
- 7, /* Height */
- GADGHNONE,
- GADGIMMEDIATE|
- RELVERIFY,
- BOOLGADGET,
- NULL,NULL,
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget p6_gadget=
- {
- &l1_gadget, /* NextGadget */
- GADGOFF+200, /* LeftEdge */
- 130, /* TopEdge */
- 32, /* Width */
- 16, /* Height */
- GADGHCOMP, /* Flags */
- RELVERIFY, /* Activation */
- BOOLGADGET, /* GadgetType */
- NULL, /* GadgetRender */
- NULL, /* SelectRender */
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget p5_gadget=
- {
- &p6_gadget, /* NextGadget */
- GADGOFF+160, /* LeftEdge */
- 130, /* TopEdge */
- 32, /* Width */
- 16, /* Height */
- GADGHCOMP, /* Flags */
- RELVERIFY, /* Activation */
- BOOLGADGET, /* GadgetType */
- NULL, /* GadgetRender */
- NULL, /* SelectRender */
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget p4_gadget=
- {
- &p5_gadget, /* NextGadget */
- GADGOFF+120, /* LeftEdge */
- 130, /* TopEdge */
- 32, /* Width */
- 16, /* Height */
- GADGHCOMP, /* Flags */
- RELVERIFY, /* Activation */
- BOOLGADGET, /* GadgetType */
- NULL, /* GadgetRender */
- NULL, /* SelectRender */
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget p3_gadget=
- {
- &p4_gadget, /* NextGadget */
- GADGOFF+80, /* LeftEdge */
- 130, /* TopEdge */
- 32, /* Width */
- 16, /* Height */
- GADGHCOMP, /* Flags */
- RELVERIFY, /* Activation */
- BOOLGADGET, /* GadgetType */
- NULL, /* GadgetRender */
- NULL, /* SelectRender */
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget p2_gadget=
- {
- &p3_gadget, /* NextGadget */
- GADGOFF+40, /* LeftEdge */
- 130, /* TopEdge */
- 32, /* Width */
- 16, /* Height */
- GADGHCOMP, /* Flags */
- RELVERIFY, /* Activation */
- BOOLGADGET, /* GadgetType */
- NULL, /* GadgetRender */
- NULL, /* SelectRender */
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
- struct Gadget p1_gadget=
- {
- &p2_gadget, /* NextGadget */
- GADGOFF, /* LeftEdge */
- 130, /* TopEdge */
- 32, /* Width */
- 16, /* Height */
- GADGHCOMP, /* Flags */
- RELVERIFY, /* Activation */
- BOOLGADGET, /* GadgetType */
- NULL, /* GadgetRender */
- NULL, /* SelectRender */
- NULL, /* GadgetText */
- NULL, /* MutualExclude */
- NULL, /* SpecialInfo */
- 0, /* GadgetID */
- NULL /* UserData */
- };
-
-
- /* ------------------------------------------------------- INFORMATION PAGE */
-
- UBYTE InformationCount=16;
- char *Information[]=
- {
- "\n\n\033[33mWizard Clock\033[31m v1.20 - The ultimate workbench clock\n",
- "Written by \033[33mStefan Zeiger\033[31m in Jul-Nov/1991\n",
- "Given into the Public Domain by \033[33m! WIZARD WORKS !\033[31m\n",
- "Syntax : \033[33mWizardClock [options]\033[31m\n",
- "Options : \033[33m-d\033[31m : German\n",
- " \033[33m-e\033[31m : English\n",
- " \033[33m-f\033[31m : French\n",
- " \033[33m-I\033[31m : About mode\n",
- " \033[33m-A\033[31m : Analog clock mode\n",
- " \033[33m-D\033[31m : Digital clock mode\n",
- " \033[33m-C\033[31m : Calendar mode\n",
- " \033[33m-L\033[31m : Language selection mode\n",
- " \033[33m-S\033[31m : Speak time at startup\n",
- " \033[33m? \033[31m : Show this information and quit\n",
- "The default options are \033[33m-e -I\033[31m\n",
- "\n\033[33m<RETURN>\033[31m\n"
- };
-
-
- /* ------------------------------------------------------ WINDOW STRUCTURES */
-
- struct Window *my_window=NULL;
- struct NewWindow my_new_window=
- {
- 0, /* LeftEdge */
- 11, /* TopEdge */
- 260, /* Width */
- 155, /* Height */
- 0, /* DetailPen */
- 1, /* BlockPen */
- CLOSEWINDOW| /* IDCMPFlags */
- GADGETDOWN|
- GADGETUP, /* */
- SMART_REFRESH| /* Flags */
- WINDOWCLOSE| /* */
- WINDOWDRAG| /* */
- WINDOWDEPTH| /* */
- ACTIVATE, /* */
- &p1_gadget, /* FirstGadget */
- NULL, /* CheckMark */
- "WizardClock v1.20",
- NULL, /* Screen */
- NULL, /* BitMap */
- NULL, /* MinWidth */
- NULL, /* MinHeight */
- NULL, /* MaxWidth */
- NULL, /* MaxHeight */
- WBENCHSCREEN /* Type */
- };
-
-
- /* ------------------------------------------------- PORT AND MESSAGE STUFF */
-
- struct IntuiMessage *Msg;
- struct timerequest TimeReq;
- struct MsgPort *TimerPort;
-
-
- /* ---------------------------------------------------------- AREA PATTERNS */
-
- UWORD back_pattern[]={0x5555,0xAAAA};
- UWORD full_pattern[]={0xFFFF};
-
-
- /* ------------------------------------------------------------------- FONT */
-
- struct TextAttr topaz_font={"topaz.font",TOPAZ_EIGHTY,FS_NORMAL,FPF_ROMFONT};
- struct IntuiText topaz_text={1,0,JAM2,0,-6,&topaz_font,NULL,NULL};
-
-
- /* ------------------------------------------------------- GLOBAL VARIABLES */
-
- UWORD Mode=ABOUT;
- LONG GMTime;
- struct tm *SYSTime;
- int mday,wday,year,mon,yday,sec,min,hour;
- UWORD Chip, Fast, Total;
- char strbuf[20];
- int oldsec=0,oldday=0,mday2=0,oldhour=0,oldmin=0,wday2=0;
- int totalyear;
- UWORD argcount;
- BOOL SpeakFirst=FALSE;
- int alhour=0,almin=0,alsec=0;
-
-
- /* -------------------------------------------------- FUNCTION DECLARATIONS */
-
- void CleanX(void);
- void __regargs DrawCal(struct RastPort *,ULONG,ULONG);
- void __regargs Tx(struct RastPort *,char *,ULONG,ULONG,UWORD);
- void __regargs WriteDate(UWORD,UWORD,UWORD);
- void __regargs WriteCal(UWORD,UWORD);
- void Calendar(void);
- void CalendarRedraw(void);
- void GetTime(void);
- void Digital(void);
- void DigitalRedraw(void);
- void DigitalEnd(void);
- void DrawGadgets(void);
- void About(void);
- void LanguageStart(void);
- void LanguageRedraw(void);
- void main(int,char **);
- void Analog(void);
- void AnalogRedraw(void);
- BOOL Speak(void);
- void OffGadgets(void);
- void OnGadgets(void);
- void Alarm(void);
- void Beep(void);
-
-
- /* ---------------------------------------------------------- MAIN FUNCTION */
-
- void main(int argc,char **argv)
- {
- ULONG class;
- APTR address;
- BOOL close_me=FALSE;
-
- UBYTE i;
-
- /****** GET THE ARGUMENTS FROM THE CLI ******/
-
- if(argc!=0)
- {
- if(argc>1)
- {
- for(argcount=1;argcount<argc;argcount++)
- {
- if(strcmp(argv[argcount],"?")==NULL)
- {
- Delay(10L);
- if(!_Backstdout) exit((int)0);
- for(i=0;i<InformationCount;i++) Write(_Backstdout,Information[i],strlen(Information[i]));
- Close(_Backstdout);
- exit((int)0);
- }
- if(strcmp(argv[argcount],"-d")==NULL) Language=German;
- if(strcmp(argv[argcount],"-e")==NULL) Language=English;
- if(strcmp(argv[argcount],"-f")==NULL) Language=French;
- if(strcmp(argv[argcount],"-I")==NULL) Mode=ABOUT;
- if(strcmp(argv[argcount],"-A")==NULL) Mode=ANALOG;
- if(strcmp(argv[argcount],"-D")==NULL) Mode=DIGITAL;
- if(strcmp(argv[argcount],"-C")==NULL) Mode=CALENDAR;
- if(strcmp(argv[argcount],"-L")==NULL) Mode=LANGUAGE;
- if(strcmp(argv[argcount],"-S")==NULL) SpeakFirst=TRUE;
- }
- }
- }
-
- /****** CLOSE THAT DAMN BACKSTDOUT ******/
-
- if(_Backstdout) Close(_Backstdout);
-
- /****** PREPARE EVERYTHING ******/
-
- IntuitionBase=(struct IntuitionBase *) OpenLibrary("intuition.library",0);
- if(IntuitionBase==NULL) CleanX();
-
- GfxBase=(struct GfxBase *) OpenLibrary("graphics.library",0);
- if(GfxBase==NULL) CleanX();
-
- my_window=OpenWindow(&my_new_window);
- if(my_window==NULL) CleanX();
-
- if((TimerPort=(struct MsgPort *) CreatePort("Timer Port",0))==NULL) CleanX();
- if(OpenDevice(TIMERNAME,UNIT_VBLANK,(struct IOStdReq *)&TimeReq,0)!=NULL) CleanX();
-
- TimeReq.tr_node.io_Message.mn_ReplyPort=TimerPort;
- TimeReq.tr_node.io_Command=TR_ADDREQUEST;
- TimeReq.tr_node.io_Flags=0;
- TimeReq.tr_node.io_Error=0;
- TimeReq.tr_time.tv_secs=0;
- TimeReq.tr_time.tv_micro=1000000;
- SendIO((struct IOStdReq *) &TimeReq.tr_node);
-
- /****** INITIALIZE GRAPHICS ******/
-
- SetAPen(my_window->RPort,2);
- SetAfPt(my_window->RPort,back_pattern,1);
- RectFill(my_window->RPort,4,11,255,152);
- SetAfPt(my_window->RPort,full_pattern,0);
-
- DrawGadgets();
- GetTime();
-
- if(Mode==DIGITAL) Digital();
- if(Mode==CALENDAR) Calendar();
- if(Mode==ABOUT) About();
- if(Mode==LANGUAGE) LanguageStart();
- if(Mode==ANALOG) Analog();
-
- if(SpeakFirst) Speak();
-
- /****** MAIN LOOP ******/
-
- while(close_me==FALSE)
- {
- oldsec=sec;
- oldday=mday2;
- oldhour=hour;
- oldmin=min;
-
- GetTime();
-
- if(Mode==CALENDAR)
- {
- if(oldday!=mday2) CalendarRedraw();
- }
-
- if(Mode==DIGITAL)
- {
- if(oldsec!=sec) DigitalRedraw();
- }
-
- if(Mode==ANALOG)
- {
- if(oldsec!=sec) AnalogRedraw();
- }
-
- if(isalarm_gadget.Flags & SELECTED)
- {
- if(alhour==hour && almin==min && alsec==sec) Alarm();
- }
-
- Wait(1<<my_window->UserPort->mp_SigBit | 1<<TimerPort->mp_SigBit);
- if((BOOL)(Msg=(struct IntuiMessage *)GetMsg(my_window->UserPort)))
- {
- class=Msg->Class;
- address=Msg->IAddress;
- ReplyMsg((struct IntuiMassage *)Msg);
- switch(class)
- {
- case CLOSEWINDOW:
- close_me=TRUE;
- break;
-
- case GADGETUP:
- if(address==(APTR)&p1_gadget)
- {
- DigitalEnd();
- Mode=ANALOG;
- Analog();
- }
- if(address==(APTR)&alarm_gadget)
- {
- sscanf(alarm_buffer,"%d:%d:%d",&alhour,&almin,&alsec);
- }
- if(address==(APTR)&p2_gadget)
- {
- DigitalEnd();
- Mode=DIGITAL;
- Digital();
- }
- if(address==(APTR)&p3_gadget)
- {
- DigitalEnd();
- Mode=CALENDAR;
- Calendar();
- }
- if(address==(APTR)&p4_gadget)
- {
- DigitalEnd();
- Mode=LANGUAGE;
- LanguageStart();
- }
- if(address==(APTR)&p5_gadget)
- {
- DigitalEnd();
- Mode=ABOUT;
- About();
- }
- if(address==(APTR)&p6_gadget)
- {
- if(Speak()) DisplayBeep(NULL);
- }
- break;
-
- case GADGETDOWN:
- if((address==(APTR)&l1_gadget) && (Mode==LANGUAGE))
- {
- Language=English;
- LanguageRedraw();
- }
- if((address==(APTR)&l2_gadget) && (Mode==LANGUAGE))
- {
- Language=German;
- LanguageRedraw();
- }
- if((address==(APTR)&l3_gadget) && (Mode==LANGUAGE))
- {
- Language=French;
- LanguageRedraw();
- }
- break;
- }
- }
- if((BOOL)(GetMsg(TimerPort)))
- {
- TimeReq.tr_time.tv_secs=0;
- TimeReq.tr_time.tv_micro=1000000;
- SendIO((struct IOStdReq *) &TimeReq.tr_node);
- }
-
- } /* End of main loop */
-
- /****** TERMINATE ******/
-
- CleanX();
- }
-
-
- /* ------------------------------------------------------------- CLEAN EXIT */
-
- void CleanX(void)
- {
- if(my_window) CloseWindow(my_window);
- Wait(1<<TimerPort->mp_SigBit); /* Wait for the */
- GetMsg(TimerPort); /* last message */
- if(TimeReq.tr_node.io_Message.mn_ReplyPort) CloseDevice((struct IOStdReq *)&TimeReq);
- if(TimerPort) DeletePort(TimerPort);
- if(GfxBase) CloseLibrary((struct Library *)GfxBase);
- if(IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
- exit((int)0);
- }
-
-
- /* ------------------------------------------------------ DRAW THE CALENDAR */
-
- void __regargs DrawCal(struct RastPort *rp,ULONG x,ULONG y)
- {
- ULONG xa,ya;
- BYTE i,j;
- UWORD xpos;
-
- /* DRAW THE FIELDS */
-
- for(xa=x,i=0;i<7;xa+=26,i++) DrawImage(rp,&tog1_image,xa,y);
-
- for(ya=y+13,j=0;j<6;ya+=11,j++)
- {
- for(xa=x,i=0;i<7;xa+=26,i++) DrawImage(rp,&tog1_image,xa,ya);
- }
-
- /* WRITE THE DAYS OF THE WEEK */
-
- for(i=0,xpos=x+5;i<6;i++,xpos+=26) Tx(my_window->RPort,Language[19+i],xpos,y+8,1);
- Tx(my_window->RPort,Language[25],x+161,y+8,3);
-
- }
-
-
- /* ------------------------------------------------------------ DRAW A TEXT */
-
- void __regargs Tx(struct RastPort *RP,char *text,ULONG px,ULONG py,UWORD colour)
- {
- topaz_text.IText=text;
- topaz_text.FrontPen=colour;
- PrintIText(RP,&topaz_text,px,py);
- }
-
-
- /* --------------------------------------- WRITE A DATE NUMBER INTO A FIELD */
-
- void __regargs WriteDate(UWORD x,UWORD y,UWORD num)
- {
- char strbuf[3];
- UWORD color;
-
- sprintf(strbuf,"%2d",num);
- if(x==6) color=3; else color=1;
- Tx(my_window->RPort,strbuf,(ULONG)(45+(x*26)),(ULONG)(58+(y*11)),color);
- }
-
-
- /* ----------------------------------------------------- WRITE THE CALENDAR */
-
- void __regargs WriteCal(UWORD start,UWORD length)
- {
- UWORD i,xpos=start,ypos=0;
-
- for(i=1;i<=length;i++)
- {
- WriteDate(xpos,ypos,i);
- xpos++;
- if(xpos==7)
- {
- xpos=0;
- ypos++;
- }
- }
- }
-
-
- /* --------------------------------------------------- DISPLAY THE CALENDAR */
-
- void Calendar(void)
- {
- DrawNeg(my_window->RPort,25,20,210,102);
- CalendarRedraw();
- }
-
-
- /* ---------------------------------------------------- REDRAW THE CALENDAR */
-
- void CalendarRedraw(void)
- {
- UWORD monlen;
- BOOL is29feb=FALSE;
-
- /****** CALCULATE BACK TO THE FIRST DAY IN THE MONTH ******/
-
- if(wday==0) wday=6; else wday--;
- while(mday>1)
- {
- mday--;
- if(wday==0) wday=6; else wday--;
- }
-
- /****** CALCULATE THE LENGTH OF THE MONTH ******/
-
- switch(mon)
- {
- case 0:
- monlen=30;
- break;
- case 1:
- if(year%4==0)
- {
- is29feb=TRUE;
- if(year%100==0)
- {
- is29feb=FALSE;
- if(year%400==0) is29feb=TRUE;
- }
- }
- if(is29feb==TRUE) monlen=29; else monlen=28;
- break;
- case 2:
- monlen=31;
- break;
- case 3:
- monlen=30;
- break;
- case 4:
- monlen=31;
- break;
- case 5:
- monlen=30;
- break;
- case 6:
- monlen=31;
- break;
- case 7:
- monlen=31;
- break;
- case 8:
- monlen=30;
- break;
- case 9:
- monlen=31;
- break;
- case 10:
- monlen=30;
- break;
- case 11:
- monlen=31;
- }
-
- if(year<78) totalyear=year+2000; else totalyear=year+1900;
- sprintf(strbuf,"%s %2d-%s-%4d",Language[SYSTime->tm_wday],SYSTime->tm_mday,Language[(SYSTime->tm_mon)+7],totalyear);
- DrawCal(my_window->RPort,40,37);
- WriteCal(wday,monlen);
- Tx(my_window->RPort,strbuf,43,32,1);
- }
-
-
- /* ---------------------------------------------------- GET THE SYSTEM TIME */
-
- void GetTime(void)
- {
- GMTime=time(NULL);
- SYSTime=localtime(&GMTime);
-
- mday=SYSTime->tm_mday;
- mday2=mday;
- wday=SYSTime->tm_wday;
- wday2=wday;
- year=SYSTime->tm_year;
- mon=SYSTime->tm_mon;
- sec=SYSTime->tm_sec;
- min=SYSTime->tm_min;
- hour=SYSTime->tm_hour;
- yday=SYSTime->tm_yday;
-
- Chip=AvailMem(MEMF_CHIP)>>10;
- Fast=AvailMem(MEMF_FAST)>>10;
- Total=Chip+Fast;
- }
-
-
- /* ---------------------------------------------------------------- DIGITAL */
-
- void Digital(void)
- {
- DrawNeg(my_window->RPort,25,20,210,102);
-
- Tx(my_window->RPort,Language[32],ALARMOFF-54,109,1);
- DrawPos(my_window->RPort,ALARMOFF,100,75,12);
- DrawNeg(my_window->RPort,ALARMOFF+2,101,71,10);
- AddGadget(my_window,&alarm_gadget,(long)(-1));
- AddGadget(my_window,&isalarm_gadget,(long)(-1));
- RefreshGadgets(&p5_gadget,my_window,NULL);
-
- DigitalRedraw();
- }
-
-
- /* ------------------------------------------------------------ END DIGITAL */
-
- void DigitalEnd(void)
- {
- if(Mode==DIGITAL)
- {
- RemoveGadget(my_window,&isalarm_gadget);
- RemoveGadget(my_window,&alarm_gadget);
- RefreshGadgets(&p5_gadget,my_window,NULL);
- }
- }
-
-
- /* --------------------------------------------------------- REDRAW DIGITAL */
-
- void DigitalRedraw(void)
- {
- if(year<78) totalyear=year+2000; else totalyear=year+1900;
- sprintf(strbuf,"%s %2d-%s-%4d",Language[SYSTime->tm_wday],SYSTime->tm_mday,Language[(SYSTime->tm_mon)+7],totalyear);
- Tx(my_window->RPort,strbuf,43,32,1);
- sprintf(strbuf,"%2d : %2d : %2d",hour,min,sec);
- Tx(my_window->RPort,strbuf,82,42,1);
- sprintf(strbuf,"%s %3d",Language[26],yday);
- Tx(my_window->RPort,strbuf,46,57,1);
- sprintf(strbuf,"Chip : %6ld kB",Chip);
- Tx(my_window->RPort,strbuf,50,72,1);
- sprintf(strbuf,"Fast : %6ld kB",Fast);
- Tx(my_window->RPort,strbuf,50,82,1);
- sprintf(strbuf,"%s %6ld kB",Language[27],Total);
- Tx(my_window->RPort,strbuf,50,92,1);
- }
-
-
- /* ------------------------------------------------------- DRAW THE GADGETS */
-
- void DrawGadgets(void)
- {
- DrawImage(my_window->RPort,&Analog_image, GADGOFF+ 0,130);
- DrawImage(my_window->RPort,&Digital_image, GADGOFF+ 40,130);
- DrawImage(my_window->RPort,&Calendar_image,GADGOFF+ 80,130);
- DrawImage(my_window->RPort,&Language_image,GADGOFF+ 120,130);
- DrawImage(my_window->RPort,&About_image, GADGOFF+ 160,130);
- DrawImage(my_window->RPort,&Speaker_image, GADGOFF+ 200,130);
- }
-
-
- /* ------------------------------------------------------------------ ABOUT */
-
- void About(void)
- {
- DrawNeg(my_window->RPort,25,20,210,102);
- Tx(my_window->RPort,"WizardClock v1.20",62,40,1);
- Tx(my_window->RPort,Language[28],62,48,1);
- Tx(my_window->RPort,Language[29],58,56,1);
- Tx(my_window->RPort,Language[30],62,64,1);
- Tx(my_window->RPort,"! Wizard Works !",66,72,1);
-
- Tx(my_window->RPort,"Stefan Zeiger",76,84,1);
- Tx(my_window->RPort,"Seligenstädter Weg 24",48,92,1);
- Tx(my_window->RPort,"D-W-8756 Kahl",76,100,1);
- Tx(my_window->RPort,Language[31],48,108,1);
- }
-
-
- /* ----------------------------------------------------- LANGUAGE SELECTION */
-
- void LanguageStart(void)
- {
- DrawNeg(my_window->RPort,25,20,210,102);
- Tx(my_window->RPort,"English",70,36,1);
- Tx(my_window->RPort,"Deutsch",70,46,1);
- Tx(my_window->RPort,"Français",70,56,1);
- LanguageRedraw();
- }
-
-
- /* ---------------------------------------------- REDRAW LANGUAGE SELECTION */
-
- void LanguageRedraw(void)
- {
- if(Language==English) DrawImage(my_window->RPort,&multi3_image,40,30);
- else DrawImage(my_window->RPort,&multi1_image,40,30);
- if(Language==German) DrawImage(my_window->RPort,&multi3_image,40,40);
- else DrawImage(my_window->RPort,&multi1_image,40,40);
- if(Language==French) DrawImage(my_window->RPort,&multi3_image,40,50);
- else DrawImage(my_window->RPort,&multi1_image,40,50);
- }
-
-
- /* ----------------------------------------------------------------- ANALOG */
-
- void Analog(void)
- {
- LONG xm,ym,xn,yn;
- WORD i;
-
- DrawNeg(my_window->RPort,25,20,210,102);
-
- SetAPen(my_window->RPort,1);
- DrawEllipse(my_window->RPort,ANALOGX,ANALOGY,80,40);
-
- for(i=0;i<60;i+=5)
- {
- xm=ANALOGX+(lcos6(i)/125);
- ym=ANALOGY+(lsin6(i)/250);
- xn=ANALOGX+(lcos6(i)/140);
- yn=ANALOGY+(lsin6(i)/280);
- Move(my_window->RPort,xm,ym);
- Draw(my_window->RPort,xn,yn);
- }
- for(i=0;i<60;i++)
- {
- xm=ANALOGX+(lcos6(i)/125);
- ym=ANALOGY+(lsin6(i)/250);
- xn=ANALOGX+(lcos6(i)/130);
- yn=ANALOGY+(lsin6(i)/260);
- Move(my_window->RPort,xm,ym);
- Draw(my_window->RPort,xn,yn);
- }
-
- AnalogRedraw();
- }
-
-
- /* ---------------------------------------------------------- REDRAW ANALOG */
-
- void AnalogRedraw(void)
- {
- LONG xs,ys,xso,yso;
- LONG xm,ym,xmo,ymo;
- LONG xh,yh,xho,yho;
-
- if(year<78) totalyear=year+2000; else totalyear=year+1900;
- sprintf(strbuf,"%s %2d-%s-%4d",Language[SYSTime->tm_wday],SYSTime->tm_mday,Language[(SYSTime->tm_mon)+7],totalyear);
- xs =ANALOGX+(lcos6((WORD) sec -15)/150);
- ys =ANALOGY+(lsin6((WORD) sec -15)/300);
- xso=ANALOGX+(lcos6((WORD)oldsec -15)/150);
- yso=ANALOGY+(lsin6((WORD)oldsec -15)/300);
- xm =ANALOGX+(lcos6((WORD) min -15)/150);
- ym =ANALOGY+(lsin6((WORD) min -15)/300);
- xmo=ANALOGX+(lcos6((WORD)oldmin -15)/150);
- ymo=ANALOGY+(lsin6((WORD)oldmin -15)/300);
- xh =ANALOGX+(lcos6((WORD)( hour*5)+(WORD)( min/12)-15)/190);
- yh =ANALOGY+(lsin6((WORD)( hour*5)+(WORD)( min/12)-15)/380);
- xho=ANALOGX+(lcos6((WORD)(oldhour*5)+(WORD)(oldmin/12)-15)/190);
- yho=ANALOGY+(lsin6((WORD)(oldhour*5)+(WORD)(oldmin/12)-15)/380);
-
- SetAPen(my_window->RPort,0);
- Move(my_window->RPort,ANALOGX,ANALOGY);
- Draw(my_window->RPort,xso,yso);
- Move(my_window->RPort,ANALOGX,ANALOGY);
- Draw(my_window->RPort,xmo,ymo);
- Move(my_window->RPort,ANALOGX,ANALOGY);
- Draw(my_window->RPort,xho,yho);
-
- SetAPen(my_window->RPort,2);
- Move(my_window->RPort,ANALOGX,ANALOGY);
- Draw(my_window->RPort,xm,ym);
- Move(my_window->RPort,ANALOGX,ANALOGY);
- Draw(my_window->RPort,xh,yh);
- SetAPen(my_window->RPort,3);
- Move(my_window->RPort,ANALOGX,ANALOGY);
- Draw(my_window->RPort,xs,ys);
-
- Tx(my_window->RPort,strbuf,43,32,1);
- }
-
-
- /* ---------------------------------------------------- SPEAK DATE AND TIME */
-
- BOOL Speak(void)
- {
- char *day[] =
- {
- "first",
- "second",
- "third",
- "fourth",
- "fifth",
- "sixth",
- "seventh",
- "eighth",
- "naeinth",
- "tenth",
- "eeleventh",
- "twelvth",
- "thirteenth",
- "fourtenth",
- "fifteenth",
- "sixteenth",
- "seventeenth",
- "eighteenth",
- "naeinteenth",
- "twentie eth",
- "twenty first",
- "twenty second",
- "twenty third",
- "twenty fourth",
- "twenty fifth",
- "twenty sixth",
- "twenty seventh",
- "twenty eighth",
- "twenty naeinth",
- "thirtie eth",
- "thirty first"
- };
-
- char *month[] =
- {
- "january",
- "february",
- "march",
- "aipril",
- "may",
- "june",
- "ju lie",
- "august",
- "september",
- "october",
- "november",
- "deecember"
- };
-
- char *ayear[] =
- {
- "naeinteen naeinty",
- "naeinteen naeintyone",
- "naeinteen naeinty two",
- "naeinteen naeinty three",
- "naeinteen naeinty four",
- "naeinteen naeintyfive",
- "naeinteen naeintysix",
- "naeinteen naeinty seven",
- "naeinteen naeinty eight",
- "naeinteen naeintynine"
- "twothousand",
- "twothousand one",
- "twothousand two",
- "twothousand three",
- "twothousand four",
- "twothousand five",
- "twothousand six",
- "twothousand seven",
- "twothousand eight",
- "twothousand nine",
- "twothousand ten",
- };
-
- char *awday[]=
- {
- "sunday",
- "mannday",
- "tjuesday",
- "wensday",
- "thur sday",
- "fri day",
- "saturday"
- };
-
- char *numb[]=
- {
- "zeero",
- "one",
- "two",
- "three",
- "four",
- "five",
- "six",
- "seven",
- "eight",
- "nine",
- "ten",
- "eelevenn",
- "twelve",
- "thirteen",
- "fourteen",
- "fifteen",
- "sixteen",
- "seventeen",
- "eighteen",
- "naeinteen",
- "twenty ",
- "twenty one",
- "twenty two",
- "twenty three",
- "twenty four",
- "twenty five",
- "twenty six",
- "twenty seven",
- "twenty eight",
- "twenty nine",
- "thirty",
- "thirty one",
- "thirty two",
- "thirty three",
- "thirty four",
- "thirty five",
- "thirty six",
- "thirty seven",
- "thirty eight",
- "thirty nine",
- "fourty",
- "fourty one",
- "fourty two",
- "fourty three",
- "fourty four",
- "fourty five",
- "fourty six",
- "fourty seven",
- "fourty eight",
- "fourty nine",
- "fifty",
- "fifty one",
- "fifty two",
- "fifty three",
- "fifty four",
- "fifty five",
- "fifty six",
- "fifty seven",
- "fifty eight",
- "fifty nine"
- };
-
- char *mn[]=
- {
- "minnits",
- "minnit"
- };
-
- char *sn[]=
- {
- "seccants",
- "seccant"
- };
-
- BOOL rval=FALSE;
- int handle,dummy=0,mode=1,me=0,se=0;
- char buffer[80];
-
- OffGadgets();
- handle=open("SPEAK:opt/p80/s160/m",mode,dummy);
- if(handle==-1) rval=TRUE;
- else
- {
- sprintf(buffer,"today is %s , the %s of %s, %s.",
- awday[wday],day[(mday2)-1],month[mon],
- ayear[(year)-90]);
- write(handle,buffer,strlen(buffer));
-
- if(min==1) me=1;
- if(sec==1) se=1;
-
- sprintf(buffer,"it is %s a clock , %s %s and %s %s.",
- numb[hour],numb[min],mn[me],numb[sec],sn[se]);
- write(handle,buffer,strlen(buffer));
-
- close(handle);
- }
- OnGadgets();
- return(rval);
- }
-
-
- /* -------------------------------------------------------- DISABLE GADGETS */
-
- void OffGadgets(void)
- {
- OffGadget(&p1_gadget,my_window,NULL);
- OffGadget(&p2_gadget,my_window,NULL);
- OffGadget(&p3_gadget,my_window,NULL);
- OffGadget(&p4_gadget,my_window,NULL);
- OffGadget(&p5_gadget,my_window,NULL);
- OffGadget(&p6_gadget,my_window,NULL);
- if(Mode==LANGUAGE)
- {
- OffGadget(&l1_gadget,my_window,NULL);
- OffGadget(&l2_gadget,my_window,NULL);
- OffGadget(&l3_gadget,my_window,NULL);
- }
- if(Mode==DIGITAL)
- {
- OffGadget(&alarm_gadget,my_window,NULL);
- OffGadget(&isalarm_gadget,my_window,NULL);
- }
- }
-
-
- /* --------------------------------------------------------- ENABLE GADGETS */
-
- void OnGadgets(void)
- {
- OnGadget(&p1_gadget,my_window,NULL);
- OnGadget(&p2_gadget,my_window,NULL);
- OnGadget(&p3_gadget,my_window,NULL);
- OnGadget(&p4_gadget,my_window,NULL);
- OnGadget(&p5_gadget,my_window,NULL);
- OnGadget(&p6_gadget,my_window,NULL);
- DrawGadgets();
- if(Mode==LANGUAGE)
- {
- OnGadget(&l1_gadget,my_window,NULL);
- OnGadget(&l2_gadget,my_window,NULL);
- OnGadget(&l3_gadget,my_window,NULL);
- LanguageRedraw();
- }
- if(Mode==DIGITAL)
- {
- OnGadget(&alarm_gadget,my_window,NULL);
- OnGadget(&isalarm_gadget,my_window,NULL);
- }
- }
-
-
- /* ------------------------------------------------------------------ ALARM */
-
- void Alarm(void)
- {
- int i;
-
- OffGadgets();
- for(i=0;i<10;i++)
- {
- DisplayBeep(NULL);
- Beep();
- Delay(5);
- }
- OnGadgets();
- }
-
-
- /* ------------------------------------------------------------------- BEEP */
-
- UBYTE allocationMap[] = { 1, 8, 2, 4 };
-
- void Beep(void)
- {
- struct IOAudio *audioIOB;
- struct MsgPort *replyPort;
- UBYTE *beepWave;
-
- replyPort=(struct MsgPort *) CreatePort(0,0);
- beepWave=(UBYTE *)AllocMem(10,MEMF_CHIP|MEMF_CLEAR);
- if (beepWave!=0) {
- beepWave[0]=100;
- audioIOB=(struct IOAudio *) CreateExtIO(replyPort,sizeof(struct IOAudio));
- if (audioIOB!=NULL) {
- audioIOB->ioa_Request.io_Message.mn_Node.ln_Pri=85;
- audioIOB->ioa_Data=allocationMap;
- audioIOB->ioa_Length=sizeof(allocationMap);
- if (OpenDevice("audio.device",0,(struct IORequest *)audioIOB,0)==0) {
- audioIOB->ioa_Request.io_Command=CMD_WRITE;
- audioIOB->ioa_Request.io_Flags=ADIOF_PERVOL;
- audioIOB->ioa_Data=beepWave;
- audioIOB->ioa_Length=10;
- audioIOB->ioa_Period=3579545/10000;
- audioIOB->ioa_Volume=64;
- BeginIO((struct IORequest *)audioIOB);
- Delay(50);
- CloseDevice((struct IORequest *)audioIOB);
- }
- DeleteExtIO((struct IORequest *)audioIOB);
- }
- FreeMem(beepWave,10);
- }
- DeletePort(replyPort);
- }
-
- /* line 1352 - THE END */
-