ftp.nice.ch/pub/next/tools/frontends/LispListener.1.0v2.N.bs.tar.gz#/LispListener/improved-lispEvaluate.m

This is improved-lispEvaluate.m in view mode; [Download] [Up]

#import <appkit/Listener.h>
#include <stdio.h>
#import <servers/netname.h>
extern port_t       name_server_port;
#define TRUE -1
#define FALSE 0

int send_message(port_t send_port, char *selector, char *string_argument)
{
    static NXMessage msg_buf[MSG_SIZE_MAX];
    NXMessage *send_msg = msg_buf;
    int err,len, moffset, msize;
    msg_type_t *st;

    send_msg->header.msg_type = MSG_TYPE_NORMAL;
    send_msg->header.msg_id = NX_SELECTORPMSG;
    send_msg->header.msg_simple = TRUE;
    send_msg->header.msg_remote_port = send_port;
    send_msg->header.msg_local_port = PORT_NULL;

    send_msg->sequenceType.msg_type_name = MSG_TYPE_INTEGER_32;
    send_msg->sequenceType.msg_type_size = sizeof(int) * 8;
    send_msg->sequenceType.msg_type_number = 1;
    send_msg->sequenceType.msg_type_inline = TRUE;
    send_msg->sequenceType.msg_type_longform = FALSE;
    send_msg->sequenceType.msg_type_deallocate = FALSE;

    send_msg->actionType.msg_type_name = MSG_TYPE_BYTE;
    send_msg->actionType.msg_type_size = 8;
    send_msg->actionType.msg_type_inline = TRUE;
    send_msg->actionType.msg_type_longform = FALSE;
    send_msg->actionType.msg_type_deallocate = FALSE;

    send_msg->sequence = 1;

    len = strlen(selector) + 1;
    send_msg->actionType.msg_type_number = len;
    bcopy(selector, send_msg->action, len);

    moffset = (int)(send_msg->action - (char *)send_msg) + ((len + 3) / 4) * 4;
    msize = moffset + sizeof(msg_type_t) + ((len + 3) / 4);

    st = (msg_type_t *)((char *)send_msg + moffset);
    st->msg_type_inline = TRUE;
    st->msg_type_longform = FALSE;
    st->msg_type_deallocate = FALSE;

    len = strlen(string_argument) + 1;
    st->msg_type_name = MSG_TYPE_BYTE;
    st->msg_type_size = 8;
    st->msg_type_number = len;
    bcopy(string_argument, ((char *)st + sizeof(msg_type_t)), len);

    send_msg->header.msg_size = ((char *)st-(char *)send_msg) +
    				sizeof(msg_type_t) + ((len + 3) / 4) * 4;
    return msg_send(send_msg,SEND_TIMEOUT,30*1000); /* thirty sec timeout */
}

#define MAXSTRSIZE (987654321)
/*  kludged to get long msgs */	
main() 
{
    char tmp[NX_MAXMESSAGE], *p;
    port_t send_port;
    int i, j=0,  done=0, err = netname_look_up(name_server_port, "", "Lisp", &send_port);
    if (err) exit(1);
    while (!done && (j<MAXSTRSIZE)) {
	p = tmp;
	for (i=0; i<(NX_MAXMESSAGE-1000); i++) {
	    if ((*p++=getchar()) == EOF) {
		p--;
		done=TRUE;
		break;
	    }
	    j++;
	}
	if (tmp[0]) {
	    if (done) {if (p[-1] != '\n')  *p++ = '\n';}; 
	    *p = '\0';

	/*    fprintf(stdout,"i = %d \n j = %d \n %s ",i,j,tmp); */
	    
	    err = send_message(send_port,"appEvaluate:",tmp);
	    if (err) exit(1);
	    }
	for (i=0; i<(NX_MAXMESSAGE); i++) {
	    tmp[i] = '\0';}	
    }
    if (j != MAXSTRSIZE)
	exit(0);
}



These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.