This is Pctrl.m in view mode; [Download] [Up]
/*
* Pctrl -- plot control
* This object is the app delegate for the gnuplot_x11 spoofer.
*/
#import "Pctrl.h"
@implementation Pctrl
/*
* Handle input from fd.
*/
-handle_input
{
char buf[128], *res, *ncmd;
/*
* Read commands until we run out.
*/
while (1) {
res = fgets(buf, 128, stdin);
if (res == (char *) NULL) {
if (feof(stdin)) {
[NXApp terminate:self];
}
else {
/*
* The most common error here is EWOULDBLOCK.
* This means we've run out of commands for now.
*/
extern int errno;
if (errno != EWOULDBLOCK)
perror("fgets");
return self;
}
}
#if DEBUG
fputs(buf, debug_out);
fflush(debug_out);
#endif
switch (buf[0]) {
case 'R': /* bye bye */
[NXApp terminate:self];
break;
case 'G':
/*
* Enter graphics mode; begin collecting commands.
*/
if (commands) { /* free old commands */
int i;
for (i = 0; i < nc; i++)
free(commands[i]);
free(commands);
commands = (char **) NULL; nc = 0;
}
break;
case 'E': /* end of commands; draw the plot */
[plotview display_commands: commands : nc];
break;
default:
/*
* Append command to command list.
*/
ncmd = (char *) malloc(strlen(buf) + 1);
assert(ncmd != (char *) NULL);
strcpy(ncmd, buf);
if (commands) {
commands = (char **) realloc(commands, sizeof(char *) * (nc + 1));
}
else {
commands = (char **) malloc (sizeof(char *));
nc = 0; /* just in case */
}
assert(commands != (char **) NULL);
commands[nc++] = ncmd;
}
}
return self;
}
/*
* Set to self at init time since fd_handler doesn't
* have access to the object's instance variables.
*/
id myself;
void fd_handler (fd, data)
int fd;
void *data;
{
[myself handle_input];
}
-appDidInit:sender
{
#if DEBUG
debug_out = fopen("gplot.dbg", "w");
if (debug_out == (FILE *) NULL) {
perror("fopen");
[NXApp terminate:self];
return self;
}
#endif
commands = (char **) NULL; nc = 0;
myself = self;
/*
* Call fd_handler when we have pending input.
*/
DPSAddFD(fileno(stdin), fd_handler, (void *)0, 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.