[comp.sources.mac] Waiting -- A Processor Monitor under MultiFinder

erik@hpsadla.HP (Erik Kilk) (11/14/87)

[Waiting  --  A Processor Monitor under MultiFinder]

Here is a little application you can run under MultiFinder and let
sit in the background.  It puts up a tiny title-less window with an
indicator representing how much time it is waiting for processing
time.  This is one calculation of how busy your computer is.  The
indicator draws a filled in arc where a full circle represents one
full second (or more).  Try running an editor and watch it while
you are typing.  When activated, you can drag the window around by
just grabbing anywhere in its contents.  Its position will be saved
for the next time the program is run.  Partial sources are included.
The rest is SimpleTools 3 which is a general purpose event loop
manager and will be posted here in the near future (SimpleTools 2 was
posted here months ago).

[Moderator's note:  The binary has been posted to comp.binaries.mac.]

Erik Kilk

---
#!/bin/sh
# shar:	Shell Archiver
#	Run the following text with /bin/sh to create:
#	Waiting.c
sed 's/^X//' << 'SHAR_EOF' > Waiting.c
X#include <Quickdraw.h>
X#include <EventMgr.h>
X#include <ResourceMgr.h>
X#include "simple.h"
X
Xextern long Ticks 		: 0x16A;
Xextern long yieldTime;
Xextern Rect	dragrect;
X
Xtypedef struct wait_data {
X			Point windtop;
X			int yield;
X			int res1, res2, res3;
X} wait_data;
X
Xlong		leaving_time;
XRect		whole;
XWindowPtr 	thewindow;
XPoint		top;
Xwait_data	**data;
X
Xidle ()
X{
X	long		time_away, angle;
X	time_away 	= Ticks - leaving_time;
X	angle 		= time_away * 6L;
X	if (angle > 360L) angle = 360L;
X	SetPort (thewindow);
X	EraseArc (&whole, 0, (int) angle - 350);
X	PaintArc (&whole, 0, (int) angle);
X	leaving_time = Ticks;
X}
X
Xmovewindow(x,y,windp,event)	
Xint x,y;			
XWindowPtr windp;		
XEventRecord *event;
X{
X  	DragWindow (windp, event->where, &dragrect);
X}
X
Xgot_about ()
X{
X	Alert (1000, 0L);
X}
X
Xgot_quit ()
X{
X	if (data != 0L) {
X		top.h = thewindow -> portRect.left;
X		top.v = thewindow -> portRect.top;
X		SetPort (thewindow);
X		LocalToGlobal (&top);
X		HLock (data);
X		(**data).windtop 	= top;
X		(**data).yield 		= (int) yieldTime;
X		HUnlock (data);
X		ChangedResource (data);
X		WriteResource (data);
X	} 
X  	ExitToShell();
X}
X
Xget_data ()
X{
X	data = (wait_data **) GetResource ('WAIT', 0);
X	top.h = -1; top.v = -1; yieldTime = -1;
X	if (data) {
X		HLock (data);
X		top 		= (**data).windtop;
X		yieldTime 	= (long) (**data).yield;
X		HUnlock (data);
X	}
X	if (!PtInRect (top, &dragrect)) {
X		top.h = 2;
X		top.v = 22;
X	}
X	if (yieldTime <= 0 || yieldTime > 1000)
X		yieldTime = 1;
X}
X
Xmain ()
X{
X	simpletools ("About Waiting...");
X	menu (applestring, "About Waiting...", got_about);
X	menu (applestring, "About Waiting...", itemenable);
X	menu ("File", "Quit/Q", got_quit);
X	SetRect (&whole, 1, 1, 11, 11);
X	wprocid 	= 3;
X	windmenu	= 0;
X	get_data ();
X	thewindow 	= window ("Waiting",top.h,top.v,top.h+12,top.v+12,0L,0L, 
X						idle, movewindow);
X	run (idle);
X	leaving_time = Ticks;
X	runsimpletools ();
X}
SHAR_EOF
exit
---