home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************/
- /* */
- /* This magnificient piece of software is real PD, so you do not need to */
- /* send any money to me, but I would like to receive some good sourcecodes */
- /* especially for OS2.0 [ amiga, of course ;-) ] */
- /* */
- /***************************************************************************/
- /* */
- /* PS: most of this program is stolen from several commodities written */
- /* by Stefan Sticht. Thank you very much ;-) */
- /* */
- /***************************************************************************/
- /* */
- /* Michael Illgner */
- /* Theodorstr. 27 */
- /* W-4790 Paderborn */
- /* Germany */
- /* Tel.: 05251/26488 or 05251/60-2331 */
- /* */
- /* email: fillg1@uni-paderborn.de */
- /* */
- /***************************************************************************/
-
- #define COM_NAME "MemClock"
- #define VERSION "V1.05"
- #define RETRY_TEXT "Retry|Cancel"
- #define LIB_ERROR "%s (V%ld+) can't be opened!"
-
- #define CX_PRIORITY "CX_PRIORITY"
- #define DEF_PRIORITY 0
- #define TT_UPDATE "UPDATE"
- #define DEF_UPDATE 10
- #define TT_LEFT "LEFT"
- #define DEF_LEFT 370
- #define TT_TOP "TOP"
- #define DEF_TOP 0
- #define TT_WIDTH "WIDTH"
- #define DEF_WIDTH 270
- #define TT_HEIGHT "HEIGHT"
- #define DEF_HEIGHT 14
-
- char Version[] = "\0$VER: " COM_NAME " " VERSION;
-
- char Help[] = "\033[1m" COM_NAME "\033[0m " VERSION " (Public Domain) by Michael Illgner\n"
- "Usage: " COM_NAME " [" CX_PRIORITY "=<n>] [" TT_UPDATE "=<clock update time>] "
- "[" TT_LEFT " = <n>] [ " TT_TOP " = <n>] [ " TT_WIDTH " = <n>] ["
- TT_HEIGHT " = <n>]\n";
-
-
-
- struct Library *CxBase = NULL;
- struct MsgPort *CxPort = NULL;
- struct Window *ClockWindow = NULL;
- ULONG CxSigFlag = 0;
- CxObj *Broker = NULL;
-
- ULONG Update;
-
-
- struct NewBroker nb =
- {
- NB_VERSION, COM_NAME, COM_NAME " " VERSION, "clock and memory display",
- NBU_NOTIFY|NBU_UNIQUE, 0, 0, NULL, 0
- };
-
- struct NewWindow nw =
- {
- DEF_LEFT, DEF_TOP, DEF_WIDTH, DEF_HEIGHT, 0, 1, NULL, WFLG_DRAGBAR,
- NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, WBENCHSCREEN
- };
-
- IX TimeIX =
- {
- IX_VERSION, IECLASS_TIMER, 0, 0, 0, 0, 0
- };
-
- /* disable SAS/C stack checking, saving some bytes */
- void chkabort(void) {}
-
- /* use sprintf from ROM */
- void sprintf(char *, char *, ...);
-
- /* don't forget ro link with ddebug.lib */
- #ifdef DEBUG
- void DPutStr(char *);
- void DPrintF(char *, ...);
- #endif
-
- /* a simple requester, stolen from Stefan Sticht */
- long SimpleRequest(char *Title, char *Gadgets, char *Text, ...)
- {
- static struct EasyStruct SimpleReq =
- {
- sizeof(struct EasyStruct),
- 0L,
- NULL, NULL, NULL
- };
- va_list ap;
- long rc;
-
- va_start(ap, Text);
- SimpleReq.es_Title = (UBYTE *)Title;
- SimpleReq.es_TextFormat = (UBYTE *)Text;
- SimpleReq.es_GadgetFormat = (UBYTE *)Gadgets;
-
- rc = EasyRequestArgs(NULL, &SimpleReq, NULL, ap);
- va_end(ap);
-
- return rc;
- }
-
- /* more comfortable than OpenLibrary() */
- struct Library *OpenLib(char *Name, ULONG Version)
- {
- struct Library *Lib;
- BOOL Ok = TRUE;
-
- do
- {
- if (!(Lib = OpenLibrary(Name, Version)))
- {
- if (IntuitionBase) Ok = SimpleRequest(COM_NAME":", RETRY_TEXT, LIB_ERROR, Name, Version);
- else Ok = FALSE;
- }
- } while (!Lib && Ok);
-
- return Lib;
- }
-
- void Process(void)
- {
- struct Message *Msg;
- ULONG MsgID, MsgType;
- BOOL quit = FALSE;
- ULONG sig;
-
- do
- {
- sig = Wait(SIGBREAKF_CTRL_C | CxSigFlag);
-
- if (sig & SIGBREAKF_CTRL_C) quit = TRUE;
-
- if (sig & CxSigFlag) while (Msg = GetMsg(CxPort))
- {
- MsgID = CxMsgID((CxMsg *)Msg);
- MsgType = CxMsgType((CxMsg *)Msg);
-
- ReplyMsg(Msg);
-
- switch(MsgType)
- {
- case CXM_IEVENT :
- break;
- case CXM_COMMAND :
- switch(MsgID)
- {
- case CXCMD_UNIQUE:
- case CXCMD_KILL:
- quit = TRUE;
- break;
- case CXCMD_DISABLE:
- ActivateCxObj(Broker, FALSE);
- break;
- case CXCMD_ENABLE:
- ActivateCxObj(Broker, TRUE);
- break;
- }
- break;
- }
- }
- } while (!quit);
- }
-
- void __saveds TimerProc(CxMsg *cm)
- {
- struct InputEvent *ie;
- static ULONG OldSecs = 0;
- ULONG Hour, Min, Sec;
- ULONG Chip, Fast;
- char TimeStr[40];
-
- if (ie = (struct InputEvent *)CxMsgData(cm))
- {
- if ((ie->ie_TimeStamp.tv_secs - OldSecs) >= Update)
- {
- OldSecs = ie->ie_TimeStamp.tv_secs;
- Sec = OldSecs % 60;
- Min = (OldSecs / 60) % 60;
- Hour = (OldSecs / 3600) % 24;
-
- Fast = AvailMem(MEMF_FAST) / 1024;
- Chip = AvailMem(MEMF_CHIP) / 1024;
-
- sprintf(TimeStr, "Chip:%4ldk Fast:%5ldk %2ld:%02ld:%02ld", Chip, Fast, Hour, Min, Sec);
- SetWindowTitles(ClockWindow, TimeStr, (UBYTE *)~0);
- }
- }
- }
-
- void __saveds __stdargs main(int argc, char *argv[])
- {
- char **ToolTypes;
- struct Message *Msg;
- CxObj *Timer, *TimerFilter;
-
- if ((argc > 1) && (*argv[1] == '?'))
- {
- Write(Output(), Help, sizeof(Help)-1);
- return;
- }
-
- if (IntuitionBase = OpenLib("intuition.library", 37))
- {
- if (CxBase = OpenLib("commodities.library", 37))
- {
- if (IconBase = OpenLib("icon.library", 37))
- {
- ToolTypes = ArgArrayInit(argc, argv);
- Update = ArgInt(ToolTypes, TT_UPDATE, DEF_UPDATE);
- nw.LeftEdge = ArgInt(ToolTypes, TT_LEFT, DEF_LEFT);
- nw.TopEdge = ArgInt(ToolTypes, TT_TOP, DEF_TOP);
- nw.Width = ArgInt(ToolTypes, TT_WIDTH, DEF_WIDTH);
- nw.Height = ArgInt(ToolTypes, TT_HEIGHT, DEF_HEIGHT);
-
- if (CxPort = CreateMsgPort())
- {
- CxSigFlag = 1L << CxPort->mp_SigBit;
- nb.nb_Pri = ArgInt(ToolTypes, CX_PRIORITY, DEF_PRIORITY);
- nb.nb_Port = CxPort;
-
- if (Broker = CxBroker(&nb, NULL))
- {
- if (TimerFilter = CxFilter(NULL))
- {
- AttachCxObj(Broker, TimerFilter);
- SetFilterIX(TimerFilter, &TimeIX);
- if (Timer = CxCustom(TimerProc, NULL))
- {
- AttachCxObj(TimerFilter, Timer);
- if (ClockWindow = OpenWindow(&nw))
- {
- ActivateCxObj(Broker, TRUE);
- Process();
- ActivateCxObj(Broker, FALSE);
-
- CloseWindow(ClockWindow);
- }
- }
- DeleteCxObj(Broker);
- }
- }
-
- Forbid();
- while (Msg = GetMsg(CxPort)) ReplyMsg(Msg);
- DeleteMsgPort(CxPort);
- Permit();
- }
- ArgArrayDone();
- CloseLibrary(IconBase);
- }
- CloseLibrary(CxBase);
- }
- CloseLibrary(IntuitionBase);
- }
- }
-