This is StatusMonitor.m in view mode; [Download] [Up]
/* Written 8/12/93 by Max Hailperin <max@nic.gac.edu>, Math/CS department, Gustavus Adolphus College. Public domain, no warranty. Please share any improvements with me. */ /* Generated by Interface Builder */ #import "StatusMonitor.h" #import "GACUPSSpeaker.h" #import <appkit/appkit.h> #import <dpsclient/dpsclient.h> #import <time.h> #define PERIOD 5.0 static void handleTE(DPSTimedEntry te, double now, void *monitor){ [(id)monitor update:(id)monitor]; } static char *timeString(time_t time){ static char buf[100]; strftime(buf, sizeof(buf), "%X", localtime((time_t*)&time)); return buf; } static char *tenthsToStr(int tenths){ static char buf[100]; sprintf(buf, "%d.%d", tenths/10, tenths%10); return buf; } @implementation StatusMonitor - appDidInit:sender { NXDefaultsVector defaults = {{"Hostname", "localhost"}, {NULL, NULL}}; NXRegisterDefaults([NXApp appName], defaults); [hostnameField setStringValue:NXGetDefaultValue([NXApp appName], "Hostname")]; [panel makeKeyAndOrderFront:self]; [hostnameField selectText:self]; speaker = [[GACUPSSpeaker alloc] init]; return [self newHost:hostnameField]; } - windowWillClose:sender { [NXApp terminate:self]; return self; } - update:sender { int systemMode, inverterStatus, alarmStatus, ACInputVolts, ACOutputVolts, ACOutputDeciAmperes, ACLoadVA, batteryDeciVolts, deciHertz, minutes, ambientTemp, ROMVersion, time; if(![speaker systemMode: &systemMode inverterStatus: &inverterStatus alarmStatus: &alarmStatus ACInputVolts: &ACInputVolts ACOutputVolts: &ACOutputVolts ACOutputDeciAmperes: &ACOutputDeciAmperes ACLoadVA: &ACLoadVA batteryDeciVolts: &batteryDeciVolts deciHertz: &deciHertz minutes: &minutes ambientTemp: &ambientTemp ROMVersion: &ROMVersion time: &time]){ [systemModeCell setStringValue:(systemMode?"Normal":"Shutdown")]; [inverterStatusCell setStringValue:(inverterStatus?"On":"Off")]; #ifdef FAKEALARMS alarmStatus = FAKEALARMS; // to help me debug #endif {int i; for(i = 0; i < [alarms cellCount]; i++) [[alarms findCellWithTag:i] setTextGray: ((alarmStatus&(1<<i))?NX_BLACK:NX_DKGRAY)]; } [ACInputVoltsCell setIntValue:ACInputVolts]; [ACOutputVoltsCell setIntValue:ACOutputVolts]; [ACOutputAmperesCell setStringValue:tenthsToStr(ACOutputDeciAmperes)]; [ACLoadVACell setIntValue:ACLoadVA]; [batteryVoltageCell setStringValue:tenthsToStr(batteryDeciVolts)]; [frequencyCell setStringValue:tenthsToStr(deciHertz)]; [minutesCell setIntValue:minutes]; [ambientTempCell setIntValue:ambientTemp]; [ROMRevisionCell setIntValue:ROMVersion]; [timeCell setStringValue:timeString(time)]; } return self; } - newHost:sender { static DPSTimedEntry te; static char portName[1024]; port_t daemonPort; if(te){ DPSRemoveTimedEntry(te); te = 0; } NXWriteDefault([NXApp appName], "Hostname", [sender stringValue]); if(!*portName) sprintf(portName, "%s.daemon", [NXApp appName]); daemonPort = NXPortFromName(portName, [sender stringValue]); if(daemonPort == PORT_NULL){ NXRunAlertPanel([NXApp appName], "No GACUPS daemon found on this host.", "OK", NULL, NULL); } else { [speaker setSendPort:daemonPort]; [self update:self]; te = DPSAddTimedEntry(PERIOD, handleTE, (void*)self, NX_BASETHRESHOLD); } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.