This is Controller.m in view mode; [Download] [Up]
/*
This class was created to control all portions of the graphical interface
from within logo for the NeXT. The old logo code only has the id of
Controller.m
Created by :
Gary F. Desrochers (garyd@slate.mines.colorado.edu)
Sean Kerstiens (skerstie@slate.mines.colorado.edu)
Created For:
Colorado School of Mines.
Last edited:
June 22,1992
*/
#import <streams/streams.h>
#import "Controller.h"
#import <appkit/View.h>
#import <appkit/TextField.h>
#import <appkit/Text.h>
#import <stdio.h>
#import <appkit/Button.h>
#import <appkit/MenuCell.h>
#import <appkit/ButtonCell.h>
#import <appkit/ScrollView.h>
#import <appkit/Control.h>
#import "CommandScroll.h"
#import <setjmp.h>
#import "DrawView.h"
// This is the New logo routine that sends a string to the logo part of the
// program.(must end in a carrage return.
extern int actOnString();
@implementation Controller
+new
{
id newId = [super new];
// Call our initialize routine.
return [newId initialize];
}
- sendString:(char *) cBuffer;
{
// sendString sends out one string to the lexical analyser.
// It could be changed to allow for multiple strings being sent.
// This is not allowed right now.
int retval;
// This is the Memory stream that the logo readchar will get
// it's information from.
aStream = NXOpenMemory(NULL,0,NX_READWRITE);
if (aStream == NULL)
{
fprintf(stderr,"Error: STDERR NXStream not made.\n");
return self;
}
// Print the temporary buffer to the Stream.
NXPrintf(aStream,"%s\0",cBuffer);
// Now send it. If it returns with a 0 that means it was a bye
// statement so quit.
if ((retval=actOnString(aStream,self)))
{
[self flush];
[idQuit performClick:self];
}
// Now close the memory stream.
NXCloseMemory(aStream, NX_FREEBUFFER);
return [self flush];
}
-initialize
{
// Initialize now only sets up stdout to print to the character array
// tbuff.
setbuf(stdout,tbuff);
return self;
}
- drawTurtle:(int)hide: (double)angle :(double)tox :(double)toy;
{
// This is for comunication to the DrawView routine to tell it to
// display or erase the turtle.
return [idDrawing drawTurtleWith:angle :tox: toy: hide];
}
- drawLine:(double)type :(double)fromx :(double)fromy :(double)tox: (double)toy;
{
// This comunicates to the DrawView to draw the line needed.
return [idDrawing drawLine:type :fromx :fromy :tox: toy];
}
- clearScreen
{
// This comunicates to the DrawView when to clear the screen.
[idDrawing clearScreen];
return self;
}
- flush
// flush is undefined in the logo.h file and this routine is
// put in it's place. There is an error here. If the stdout
// gets bigger then IPBUFSIZE it will dump to the Console.
// It shouldn't get that big unless there is some big unix command
// being run from within logo. (Yes you can run unix stuff while
// within logo.
{
int index;
// First check if anything in it. If there isn't then skip fflush.
// If there is then append it using appendString inside CommandScroll.
// Then clear the tbuff because otherwise the stuff inside it, on a
// rewind will spill into the Console.
// Then rewind.
if(tbuff[0] != '\0')
{
[idErrorOut appendString:tbuff];
for(index=0;index != IPBUFSIZE;index++)
tbuff[index] = '\0';
rewind(stdout);
}
return self;
}
// CommandScroll Delegation
- userEntered:(char *)buffer;
// This is the userEntered routine that is called from CommandScroll.
// It gets a string and sends it to sendString within this class.
// If the string starts with a ? then it is not sent. Right now it is
// Just echoed out.
{
if(buffer[0] == '?')
{
return [idErrorOut appendString:buffer];
}
else
{
return [self sendString:buffer];
}
}
- printRequest:sender
// This sends a print request to the Draw View..
{
return [idDrawing print];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.