;/* uptime.c - Execute me to compile me with SAS C 5.10 LC -b1 -cfis -j73 uptime.c Blink FROM LIB:c.o,uptime.o TO uptime LIBRARY LIB:LC.lib,LIB:Amiga.lib quit */ /* Uses SAS C getreg() */ #include <exec/types.h> #include <exec/memory.h> #include <dos/dos.h> #include <dos/dosextens.h> #include <dos/datetime.h> #include <utility/date.h> #include <dos.h> #include <clib/exec_protos.h> #include <clib/dos_protos.h> #include <clib/utility_protos.h> #include <stdlib.h> struct Library *UtilityBase; LONG main(void); LONG main(void) { struct InfoData *infodata; struct DeviceList *ramdevice; struct DateStamp *now; LONG currenttime, boottime; BPTR lock; LONG vargs[3]; LONG rc = RETURN_FAIL; /* Fails silently if < 37 */ if (UtilityBase = OpenLibrary("utility.library", 37)) { if (infodata = AllocMem(sizeof(struct InfoData), MEMF_CLEAR)) { if (now = AllocMem(sizeof(struct DateStamp), MEMF_CLEAR)) { if (lock = Lock("RAM:", SHARED_LOCK)) { if ((Info(lock, infodata)) == DOSTRUE) { /* Make C pointer */ ramdevice = BADDR(infodata->id_VolumeNode); boottime = SMult32(ramdevice->dl_VolumeDate.ds_Days, 86400) + SMult32(ramdevice->dl_VolumeDate.ds_Minute, 60) + SDivMod32(ramdevice->dl_VolumeDate.ds_Tick, TICKS_PER_SECOND ); DateStamp(now); currenttime = SMult32(now->ds_Days, 86400) + SMult32(now->ds_Minute, 60) + SDivMod32(now->ds_Tick, TICKS_PER_SECOND); currenttime -= boottime; if (currenttime > 0) { vargs[0] = UDivMod32(currenttime, 86400); vargs[1] = getreg(1); vargs[1] = UDivMod32(vargs[1], 3600); vargs[2] =getreg(1); vargs[2] = UDivMod32(vargs[2], 60); /* * Passing the address of the array allows the VPrintf() * function to access the array contents. Keep in mind * that VPrintf() does _NOT_ know how many elements are * really valid in the final parameter, and will gleefully * run past the valid arguments. */ VFPrintf(Output(), "up for %ld days, %ld hours, %ld minutes\n", vargs ); rc = RETURN_OK; } } UnLock(lock); } FreeMem(now, sizeof(struct DateStamp)); } FreeMem(infodata, sizeof(struct InfoData)); } CloseLibrary(UtilityBase); } exit(rc); }