This is Reporter.m in view mode; [Download] [Up]
/* Run a command, with buffered output to a text object. */ #import <stdio.h> #import <appkit/TextField.h> #import <appkit/Panel.h> #import "Reporter.h" #import "Subprocess.h" int strlen(char *s); char *strcpy(char *s1, char *s2); int strcmp(char *s1, char *s2); char *malloc(unsigned u); char *realloc(char *b, unsigned u); void free(char *b); int system(char *cmd); char *getname(int uid); int getuid(); /* ====================================================================== */ @implementation Reporter /* ---------------------------------------------------------------------- */ /* Refresh display, by running the command. */ - refresh:sender { outputBuffer= NULL; if (!text) { printf("Reporter: nowhere to put output!\n"); } if (!process) { process= [Subprocess new]; /* first time--make new process object */ } [process init:command withDelegate:self andPtySupport:NO andStdErr:YES]; return self; } /* ---------------------------------------------------------------------- */ /* Return the command that we run when we refresh. */ - (char*)command { return command; } /* ---------------------------------------------------------------------- */ /* Set the command to be run; make copy of command string if asked to. */ - setCommand:(char*)cmd andCopy:(BOOL)yesno { if (yesno) { command= malloc(strlen(cmd)+1); strcpy(command,cmd); } else { command= cmd; } return self; } /* ---------------------------------------------------------------------- */ /* Set the command to be run. */ - setCommand:(char*)cmd { return [self setCommand:cmd andCopy:NO]; } /* ---------------------------------------------------------------------- */ /* Return the text object that we display into. */ - text { return text; } /* ---------------------------------------------------------------------- */ /* Set the text object that we will display into. */ - setText:(id)txt { text= txt; return self; } /* ====================================================================== */ /* Subprocess Delegation */ /* ---------------------------------------------------------------------- */ /* Buffer the output from the process. */ -subprocessOutput:(char *)buffer { if (outputBuffer) { outputBuffer= realloc(outputBuffer,strlen(outputBuffer)+strlen(buffer)+2); } else { outputBuffer= malloc(strlen(buffer)+1); outputBuffer[0]= '\0'; } strcpy(outputBuffer+strlen(outputBuffer), buffer); return self; } /* ---------------------------------------------------------------------- */ /* Deal with end of subprocess: display buffered output. */ - subprocessDone { if (outputBuffer) { [text setStringValue:outputBuffer]; free(outputBuffer); outputBuffer= NULL; } else { [text setStringValue:""]; } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.