/* Dieses Source wurde mit der Programmier-Umgebung CSH V4.17 von M.Buehler und S.Gluekler geschrieben. ######################################################################### Programmname : WBUhr.c Version : V1.0 Autor : S. Gluekler / sgluekle@hsr.ch Datum : 28.12.99 Updates : - Beschreibung : Kleine, nette Uhr in der Workbench-Leiste ######################################################################### */ #include #include #include #include #include #include #include #include #include #include #include #include #include #define PRG_NAME "WBUhr" #define PRG_VERSION "V1.0" #define PRG_AUTHOR "Stefan Gluekler" #define COLOR_NUMMER_HINTERGRUND 2 #define COLOR_NUMMER_TEXT 1 #define SPRACHE_DEUTSCH 0 #define SPRACHE_ENGLISCH 7 #define WINDOW_ANZ_ZEICHEN 22 #define WINDOW_BREITE WINDOW_ANZ_ZEICHEN*8 struct GfxBase *GfxBase; struct IntuitionBase *IntuitionBase; struct Library *ScreenNotifyBase; struct Window *Window; struct RastPort *RP; struct NewWindow NewWindow = { 0,0, WINDOW_BREITE,9, COLOR_NUMMER_HINTERGRUND,COLOR_NUMMER_HINTERGRUND, IDCMP_VANILLAKEY, WFLG_BORDERLESS|WFLG_WBENCHWINDOW, NULL,NULL,NULL,NULL,NULL, 0,0,0,0, WBENCHSCREEN }; unsigned char sprache=SPRACHE_ENGLISCH; unsigned char WindowOpen(void); void WriteText(char *text); void ReadIcon(char *argument0,unsigned short arg_anz); int main(int argc, char **argv) { register unsigned char exit_flag=1; register unsigned short alt_sec=99; register struct tm *tm_zeit; struct IntuiMessage *my_message; struct MsgPort *screennotify_p; struct ScreenNotifyMessage *screennotify_m; APTR screennotify_handle; unsigned char screennotify_library=0; unsigned char window_is_open; unsigned long zeit; char textstring[WINDOW_ANZ_ZEICHEN+2]; char *tage[] = { "Son","Mon","Die","Mit","Don","Fre","Sam", "Sun","Mon","Tue","Wed","Thu","Fri","Sat" }; if ((IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L))==0) return(99); if ((GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0L))==0) { CloseLibrary(IntuitionBase); return(99); } if ((ScreenNotifyBase=(struct Library *)OpenLibrary(SCREENNOTIFY_NAME,0L))!=0) { if (screennotify_p=CreateMsgPort()) { if (screennotify_handle=AddWorkbenchClient(screennotify_p,0)) screennotify_library=1; else { DeleteMsgPort(screennotify_p); CloseLibrary(ScreenNotifyBase); } } else CloseLibrary(ScreenNotifyBase); } ReadIcon(argv,argc); if (WindowOpen()==0) { if (screennotify_library) CloseLibrary(ScreenNotifyBase); CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); return(99); } window_is_open=1; sprintf(textstring,"%s %s",PRG_NAME,PRG_VERSION); WriteText(textstring); Delay(50); sprintf(textstring,"(C) %s",PRG_AUTHOR); WriteText(textstring); Delay(50); while(exit_flag) { if (screennotify_library) { if (screennotify_m=(struct ScreenNotifyMessage *)GetMsg(screennotify_p)) { if (screennotify_m->snm_Type==SCREENNOTIFY_TYPE_WORKBENCH) { if (screennotify_m->snm_Value) { if (WindowOpen()==0) exit_flag=0; else window_is_open=1; } else { CloseWindow(Window); window_is_open=0; } } ReplyMsg((struct Message *)screennotify_m); } } if (window_is_open) { time(&zeit); tm_zeit=localtime(&zeit); if (alt_sec!=tm_zeit->tm_sec) { alt_sec=tm_zeit->tm_sec; sprintf(textstring," %s %02d-%02d-%02d %02d:%02d:%02d",tage[tm_zeit->tm_wday+sprache],tm_zeit->tm_mday,tm_zeit->tm_mon+1,(tm_zeit->tm_year)%100,tm_zeit->tm_hour,tm_zeit->tm_min,tm_zeit->tm_sec); WriteText(textstring); while ((my_message = (struct IntuiMessage *)GetMsg( Window->UserPort))) { if (my_message->Class==IDCMP_VANILLAKEY && my_message->Code==27) exit_flag=0; ReplyMsg( my_message ); } } } Delay(10); } if (window_is_open) CloseWindow(Window); if (screennotify_library) { while (!RemWorkbenchClient(screennotify_handle)) Delay(10); DeleteMsgPort(screennotify_p); CloseLibrary(ScreenNotifyBase); } CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); return(0); } void ReadIcon(char *argument0,unsigned short arg_anz) { char PrgName[120]; char *zeiger; struct DiskObject *myDiskObject; struct IconBase *IconBase; struct WBStartup *Wbs; if (IconBase=(struct Library *)OpenLibrary("icon.library",0)) { Wbs=(struct WBStartup *)argument0; strcpy(PrgName,""); if (arg_anz==0 && Wbs && Wbs->sm_NumArgs>0 && Wbs->sm_ArgList[Wbs->sm_NumArgs-1].wa_Lock) { NameFromLock(Wbs->sm_ArgList[Wbs->sm_NumArgs-1].wa_Lock,PrgName,sizeof(PrgName)); if (strlen(PrgName)>0 && PrgName[strlen(PrgName)-1]!=':' && PrgName[strlen(PrgName)-1]!='/') strcat(PrgName,"/"); strcat(PrgName,Wbs->sm_ArgList[Wbs->sm_NumArgs-1].wa_Name); } else GetProgramName(PrgName,sizeof(PrgName)); if (strlen(PrgName)) { if ((myDiskObject=GetDiskObject(PrgName))) { if ((zeiger=FindToolType(myDiskObject->do_ToolTypes,"GERMAN"))) { if (!strlen(zeiger) || !stricmp(zeiger,"YES") || !stricmp(zeiger,"ON") || !stricmp(zeiger,"JA")) sprache=SPRACHE_DEUTSCH; } FreeDiskObject(myDiskObject); } } CloseLibrary(IconBase); } } unsigned char WindowOpen(void) { NewWindow.LeftEdge=IntuitionBase->ActiveScreen->Width-(WINDOW_BREITE+35); if ((Window=(struct Window *)OpenWindow(&NewWindow))==0) return(0); RP=(struct RastPort *)Window->RPort; SetAPen(RP,COLOR_NUMMER_HINTERGRUND); Move(RP,0,0); Draw(RP,WINDOW_BREITE,0); SetAPen(RP,COLOR_NUMMER_TEXT); SetBPen(RP,COLOR_NUMMER_HINTERGRUND); return(1); } void WriteText(char *text) { char txtstring[WINDOW_ANZ_ZEICHEN+2]; sprintf(txtstring,"%-22.22s",text); Move(RP,0,7); Text(RP,txtstring,strlen(txtstring)); }