Thread View: net.micro.atari
2 messages
2 total messages
Started by Jan Gray
Sun, 12 Jan 1986 22:11
Digital clock desk accessory for Atari 520ST
Author: Jan Gray
Date: Sun, 12 Jan 1986 22:11
Date: Sun, 12 Jan 1986 22:11
175 lines
4292 bytes
4292 bytes
Here is a digital clock desk accessory. It is quite simple - a window
with no contents and a title which displays the time.
Enjoy!
Jan Gray Looking Glass Software, Waterloo, Ont. (519) 884-7473
------------------------------------------------------------------------------
/*
* Digital Clock DA
*
* Written and placed in the public domain by Jan Gray, 1986.
*
* link: accstart,clock,aesbind,osbind
*/
#include "define.h"
#include "gemdefs.h"
#include "osbind.h"
#define NO_WINDOW -1 /* no window opened */
#define NO_POSITION -1 /* window has no position yet */
typedef struct window {
int id;
int x;
int y;
int w;
int h;
} Window;
/*
* Hey Atari and Digital Research! Notice how many global variables I declared?
*/
main()
{
int menuID;
extern int gl_apid;
appl_init();
menuID = menu_register(gl_apid, " Digital Clock");
events(menuID);
}
/*
* Loop processing events, and wake up every thirty seconds to update time.
*/
events(menuID)
int menuID;
{
Window wind;
int event;
int msgbuf[8];
int ret;
wind.id = NO_WINDOW;
wind.x = NO_POSITION;
for (;;) {
event = evnt_multi(MU_MESAG | MU_TIMER,
0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
msgbuf, 30000, 0,
&ret, &ret, &ret, &ret, &ret, &ret);
if (event & MU_MESAG) switch (msgbuf[0]) {
case AC_OPEN:
if (msgbuf[4] == menuID)
if (wind.id == NO_WINDOW)
openWindow(&wind);
else
wind_set(wind.id, WF_TOP, 0, 0, 0, 0);
break;
case AC_CLOSE:
if (msgbuf[3] == menuID)
wind.id = NO_WINDOW;
break;
case WM_CLOSE:
if (msgbuf[3] == wind.id)
closeWindow(&wind);
break;
case WM_MOVED:
wind_set(wind.id, WF_CURRXYWH, msgbuf[4], msgbuf[5],
msgbuf[6], msgbuf[7]);
wind.x = msgbuf[4]; wind.y = msgbuf[5];
wind.w = msgbuf[6]; wind.h = msgbuf[7];
break;
case WM_NEWTOP:
case WM_TOPPED:
if (msgbuf[3] == wind.id)
wind_set(wind.id, WF_TOP, 0, 0, 0, 0);
break;
}
if (event & MU_TIMER && wind.id != NO_WINDOW)
update(&wind);
}
}
/*
* Extract times from stupid DOS time format
*/
#define MINS(t) ((t >> 5) & 0x3f)
#define HRS(t) (t >> 11)
#define DIGIT(d) ((d) + '0')
#define TEMPLATE "hh:mm AM"
#define TEMP_LEN 8
update(wp)
Window *wp;
{
static char time[] = TEMPLATE;
unsigned t = Tgettime();
unsigned hrs = HRS(t);
unsigned hrs12 = (hrs % 12 == 0) ? 12 : hrs % 12;
unsigned mins = MINS(t);
/*
* Do things the hard way: sprintf() would spend too much memory.
*/
time[0] = (hrs12 >= 10) ? DIGIT(1) : ' ';
time[1] = DIGIT(hrs12 % 10);
time[3] = DIGIT(mins / 10);
time[4] = DIGIT(mins % 10);
time[6] = (hrs < 12) ? 'A' : 'P';
wind_set(wp->id, WF_NAME, time, 0, 0);
}
/*
* Create and open a window just big enough to hold the time on its title bar
*/
openWindow(wp)
Window *wp;
{
int workW; /* work area width */
int workH; /* work area height */
int ret;
if (wp->id == NO_WINDOW) {
if (wp->x == NO_POSITION) {
/*
* Position the clock in the centre of the screen.
* This is a hack to determine the size and position
* of the window.
*/
graf_handle(&wp->w, &ret, &ret, &wp->h);
wp->w *= TEMP_LEN + 3;
wind_get(0, WF_WORKXYWH, &wp->x, &wp->y, &workW, &workH);
wp->x += (workW - wp->w) / 2;
wp->y += (workH - wp->h) / 2;
}
wp->id = wind_create(NAME|CLOSER|MOVER, wp->x, wp->y, wp->w, wp->h);
wind_open(wp->id, wp->x, wp->y, wp->w, wp->h);
update(wp);
}
}
closeWindow(wp)
Window *wp;
{
if (wp->id != NO_WINDOW) {
wind_close(wp->id);
wind_delete(wp->id);
wp->id = NO_WINDOW;
}
}
Re: Digital clock desk accessory for Atari 520ST
Author: Felton.PA
Date: Tue, 14 Jan 1986 19:19
Date: Tue, 14 Jan 1986 19:19
12 lines
859 bytes
859 bytes
Hurray!!! We are finally getting some source code for the ST on this dl (just like they have on the Amiga dl). Keep up the good work. As soon as I have something to contribute I will return the favor by posting it. John
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads