This is Appender.m in view mode; [Download] [Up]
#import "Appender.h"
#import <appkit/Application.h>
#import <appkit/ScrollView.h>
#import <appkit/Text.h>
#import <dpsclient/dpsclient.h>
#import <appkit/publicWraps.h>
#import <strings.h>
#define BlinkRate 1. // one second
static void blink(DPSTimedEntry teNumber, double now, char *userData)
{
id person = (Appender *)userData;
[person blinkDude];
};
@implementation Appender
- init;
{
[super init];
[NXApp loadNibSection:"HandleDeputy.nib" owner:self];
currentPosition = 0;
strcpy(theChars, "_");
DPSAddTimedEntry(BlinkRate, (DPSTimedEntryProc)blink,
(void *)self, NX_BASETHRESHOLD);
return self;
};
//appends the string passed to the doc view of the scroll view
- appendToText:(const char *)newText
{
static char cleanText[1024];
int backLength=0;
strcpy(cleanText, newText);
[self textFilter:cleanText:&backLength];
[[scrollView docView] setSel:currentPosition :currentPosition+backLength+1];
[[scrollView docView] replaceSel:cleanText];
[[scrollView docView] scrollSelToVisible];
currentPosition += strlen(cleanText);
currentPosition -= backLength;
return self;
}
- blinkDude;
{
if (theChars[0] == '_') theChars[0] = ' ';
else theChars[0] = '_';
[[scrollView docView] setSel:currentPosition :currentPosition + 1];
[[scrollView docView] replaceSel:theChars];
return self;
};
- docView;
{
return [scrollView docView];
}
#define BEEP '\x007'
#define BACKSPACE '\x008'
#define SX '\x002' // erase left character, I guess
- textFilter: (char *)filtrate: (int *)length;
{
int i, j;
unsigned int numBackSpace = 0;
for (i = 0, j = 0; i < strlen(filtrate); i++)
{
switch (filtrate[i])
{
case BEEP:
NXBeep();
break;
case BACKSPACE:
case SX:
if (numBackSpace % 2) currentPosition--;
numBackSpace++;
break;
default:
filtrate[j++] = filtrate[i];
break;
}
}
filtrate[j] = 0;
*length = numBackSpace / 2;
return self;
};
- inputToApp:(char *)in;
{
[super inputToApp:in];
return self;
};
- outputFromApp:(char *)out;
{
#ifdef Debug
{
int i;
printf("<<");
for (i = 0; i < strlen(out); i++)
printf("%x,", out[i]);
printf(">>");
fflush(stdout);
}
#endif
[self appendToText: out];
return self;
};
//prints the doc view of the scroll view
- print:sender
{
[[scrollView docView] printPSCode:self];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.