This is EtermHandle.m in view mode; [Download] [Up]
#import <appkit/Application.h>
#import <appkit/ScrollView.h>
#import "Appender.h"
#import "EtermHandle.h"
extern int kc_keyforcode(int code, int flags);
@implementation EtermHandle
- (BOOL)acceptsFirstResponder
{
return YES;
}
// We shouldn't give up first responder status since we have to catch
// the keyDown event. Other events will however be passed to next
// responder if there is any.
- resignFirstResponder;
{
return nil;
};
/*
* Keyboard input is given to the child apps process.
*/
- keyDown: (NXEvent *)theEvent;
{
NXEvent eventbuf;
static char buf[1024];
int i = 0;
int code;
if (theEvent->flags & NX_NUMERICPADMASK &&
theEvent->data.key.charCode >= 0xac &&
theEvent->data.key.charCode <= 0xaf) {
/* Arrow keys (left, up, right, down) */
buf[i++] = "\002\020\006\016"[theEvent->data.key.charCode - 0xac];
}
else if (theEvent->flags & NX_NUMERICPADMASK &&
theEvent->data.key.charCode == 0x03) {
/* Enter key */
buf[i++] = '\r';
}
else if (theEvent->flags & NX_ALTERNATEMASK) {
/* Handle ALT key as a META key */
code = kc_keyforcode(theEvent->data.key.keyCode, theEvent->flags);
if (code != -1) {
buf[i++] = code | 0x80;
}
}
else buf[i++] = theEvent->data.key.charCode;
/* Grab as many keypressed events as we can from a modal event loop */
while (i < sizeof(buf) &&
(theEvent = [NXApp peekNextEvent:NX_ALLEVENTS into:&eventbuf]) &&
theEvent->type == NX_KEYDOWN &&
!(theEvent->flags & NX_COMMANDMASK)) {
theEvent = [NXApp getNextEvent:NX_ALLEVENTS];
if (theEvent->flags & NX_NUMERICPADMASK &&
theEvent->data.key.charCode >= 0xac &&
theEvent->data.key.charCode <= 0xaf) {
/* Arrow keys (left, up, right, down) */
buf[i++] = "\002\020\006\016"[theEvent->data.key.charCode - 0xac];
}
else if (theEvent->flags & NX_NUMERICPADMASK &&
theEvent->data.key.charCode == 0x03) {
/* Enter key */
buf[i++] = '\r';
}
else if (theEvent->flags & NX_ALTERNATEMASK) {
/* Handle ALT key as a META key */
code = kc_keyforcode(theEvent->data.key.keyCode, theEvent->flags);
if (code != -1) {
buf[i++] = code | 0x80;
}
}
else buf[i++] = theEvent->data.key.charCode;
}
buf[i] = 0; // close the string
[deputy inputToApp:buf];
return self;
}
- window;
{
return responseWindow;
};
- windowDidBecomeKey:sender;
{
[responseWindow makeFirstResponder:self];
[self setNextResponder: [deputy docView]];
return self;
};
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.