This is BroadcastDaemon.m in view mode; [Download] [Up]
/* Copyright (c) 1992 by NightShade Software. All rights reserved. * You may modify and (hopefully) improve this code if you keep the * original copyright messages, don't sell it, and share your improvements * with with the World. * * NAME * main() -- Broadcast.daemon * * DESCRIPTION * A Workspace daemon used to broadcast a message to the user logged * in to the console from a user logged in remotely. * * COMMENTS/PROBLEMS * You get what you pay for... * * AUTHOR/DATE CREATED * Gary Ritchie/December 22, 1992 * * REVISIONS * */ #import <appkit/Application.h> #import <ListenerAdditions.h> #import <BroadcastListener.h> #import <shared.h> #import "Controller.h" int main(int argc, char *argv[]) { id theController; id theListener; NXDefaultsVector workspaceDefs = {{"LaunchPaths", ""}}; char *orig; char *new; const char *p; char *str, *anotherstr; port_t thePort; /* See if we are already running */ if (thePort = NXPortNameLookup(BROADCASTPORT, NULL)) { port_deallocate(task_self(), thePort); NXLogError("Broadcast.daemon already running\n"); exit(1); } /* The Controller handles the Broadcast messages */ theController = [[Controller alloc] init]; /* We need an Application object for operation of Alert Panels */ [Application new]; [NXApp setDelegate:theController]; /* Install ourself in the Workspace's defaults so that we are * launched every time the user logs in. */ NXRegisterDefaults("Workspace", workspaceDefs); p = NXGetDefaultValue("Workspace", "LaunchPaths"); if (!p) p = ""; orig = NXCopyStringBuffer(p); new = malloc(strlen(orig) + MAXPATHLEN + 1); new[0] = '\0'; str = strtok(orig, ";"); while (str) { anotherstr = strstr(str, "Broadcast.daemon"); if (!anotherstr) { if (strlen(new)) strcat(new, ";"); strcat(new, str); } str = strtok(NULL, ";"); } if (strlen(new)) strcat(new, ";"); strcat(new, argv[0]); NXWriteDefault("Workspace", "LaunchPaths", new); free(orig); free(new); /* Allocate a listener and publicly advertise it */ theListener = [[BroadcastListener alloc] init]; [theListener setDelegate:theController]; if ([theListener publicCheckInAs:BROADCASTPORT]) { [theListener free]; [theController free]; NXLogError("Broadcast.daemon failed to register public port.\n"); exit(1); } [theListener addPort]; [NXApp run]; [NXApp free]; return(0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.