v07i052: CRISP release 1.9 part 31/32
Brandon S. Allbery - comp.sources.misc
allbery at uunet.UU.NET
Thu Jun 22 13:58:00 AEST 1989
Posting-number: Volume 7, Issue 52
Submitted-by: fox at marlow.UUCP (Paul Fox)
Archive-name: crisp1.9/part32
#!/bin/sh
# this is part 11 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file ./undo.c continued
#
CurArch=11
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file ./undo.c"
sed 's/^X//' << 'SHAR_EOF' >> ./undo.c
X curbp->b_nummod--;
X re_goto(undop);
X pos = ftell(ufp);
X while (undop->u_length > 0) {
X fseek(ufp, pos, 0);
X n = undop->u_length;
X if (n > sizeof buf)
X n = sizeof buf;
X fread(buf, n, 1, ufp);
X linsert(buf, n);
X pos += n;
X undop->u_length -= n;
X }
X if (undo_state == UNDO)
X re_goto(undop);
X break;
X case GOTO:
X re_goto(undop);
X break;
X
X case DELETE:
X curbp->b_nummod--;
X re_goto(undop);
X ldelete(undop->u_length);
X break;
X
X case RAISE:
X raise_anchor();
X break;
X
X case DROP:
X drop_anchor();
X *curbp->b_anchor = undop->u_anchor;
X break;
X case SCRAP:
X undoing_scrap = TRUE;
X k_undo();
X undoing_scrap = FALSE;
X break;
X default:
X ewprintf("undo: opcode error");
X }
X /*if (hooked)
X curwp->w_flag |= WFHARD;*/
X u_atend = FALSE;
X/* fseek(ufp, 0l, 2);*/
X return 0;
X}
Xstatic void
Xre_goto(undop)
Xstruct undo *undop;
X{
X win_modify(WFMOVE);
X *cur_line = undop->u_line;
X *cur_col = (u_int16) undop->u_col;
X win_modify(WFMOVE);
X}
Xstatic
Xread_last_undo(undop, up)
Xstruct undo *undop;
Xundo_info *up;
X{
X fseek(ufp, up->u_last, 0);
X if (fread((char *) undop, sizeof *undop, 1, ufp) != 1) {
X fseek(ufp, 0l, 2);
X u_atend = TRUE;
X ewprintf("undo: I/O error");
X return -1;
X }
X u_atend = FALSE;
X return 0;
X}
SHAR_EOF
echo "File ./undo.c is complete"
chmod 0444 ./undo.c || echo "restore of ./undo.c fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./unix.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./unix.c &&
X/**************************************************************
X *
X * CRISP - Custom Reduced Instruction Set Programmers Editor
X *
X * (C) Paul Fox, 1989
X * 43, Jerome Close Tel: +44 6284 4222
X * Marlow
X * Bucks.
X * England SL7 1TX
X *
X *
X * Please See COPYRIGHT notice.
X *
X **************************************************************/
X
X# include "list.h"
X# if defined(SYSV)
X# include <termio.h>
X static struct termio ot; /* entry state of the terminal */
X static struct termio nt; /* editor's terminal state */
X# else
X# include <sys/time.h>
X# include <sgtty.h>
X struct sgttyb ot;
X struct sgttyb nt;
X# define TCGETA TIOCGETP
X# define TCSETA TIOCSETN
X# endif
X
XSCCSID("@(#) unix.c 1.6, (C) 1989, P. Fox");
X
X/*---------------------------------------
X/* Directory entries for CRISP under VMS.
X/*---------------------------------------*/
Xchar *termcap_dir = "/etc/termcap";
Xchar *bhelp = "/usr/local/crisp/help";
Xchar *bpath = "/usr/local/crisp/macros;.;/usr/local/crisp/src";
X
X
X
X# define CENTISECONDS 5 /* x0.1 seconds */
Xvoid ttflush();
Xextern int ega43_flag;
Xint console_mode = -1; /* Only used on EGA screen. */
X
Xextern unsigned char kbdq;
Xint kbdflgs = 0; /* saved keyboard fd flags */
X
Xstatic int ttyactivep = FALSE;
X/*
X * This function gets called once, to set up
X * the terminal channel. This version turns off flow
X * control. This may be wrong for your system, but no
X * good solution has really been found (daveb).
X */
Xvoid
Xsys_open()
X{
X if (ttyactivep)
X return;
X# if defined(CONS_GET)
X /*----------------------------------------
X /* We want to handle the peculiarities of
X /* EGA 43 line mode on those systems that
X /* support it. We need to handle things
X /* like ALT-Z being used to change screen
X /* modes. Setting old_ega_flag to -1
X /* ensures that when the sub-shells exit
X /* we make sure the screen is in the right
X /* mode.
X /*----------------------------------------*/
X {
X int val;
X extern int old_ega_flag;
X static int old_mode = -1;
X if (old_mode == -1)
X old_mode = console_mode = ioctl(0, CONS_GET, &val);
X else
X old_ega_flag = -1;
X }
X# endif
X
X ioctl(0, TCGETA, &ot);
X nt = ot; /* save entry state */
X# if defined(SYSV)
X nt.c_cc[VINTR] = 'Y' & 0x1f; /* Default interrupt key. */
X nt.c_cc[VQUIT] = 0xff;
X nt.c_cc[VMIN] = 1; /* one character read is OK */
X nt.c_cc[VTIME] = 0; /* Never time out. */
X nt.c_iflag |= IGNBRK;
X nt.c_iflag &= ~( ICRNL | INLCR | ISTRIP | IXON | IXOFF );
X nt.c_oflag &= ~OPOST;
X nt.c_cflag |= CS8; /* allow 8th bit on input */
X nt.c_cflag &= ~PARENB; /* Don't check parity */
X nt.c_lflag &= ~( ECHO | ICANON/* | ISIG*/ );
X
X kbdflgs = fcntl( 0, F_GETFL, 0 );
X# else /* BSD */
X nt.sg_flags |= RAW;
X nt.sg_flags &= ~(ECHO|CRMOD);
X# endif
X
X ioctl(0, TCSETA, &nt);
X
X ttyactivep = TRUE;
X}
Xsys_timeout(yes)
X{
X# if defined(SYSV)
X if (yes) {
X nt.c_cc[VTIME] = CENTISECONDS;
X nt.c_cc[VMIN] = 0;
X }
X else {
X nt.c_cc[VTIME] = 0;
X nt.c_cc[VMIN] = 1;
X }
X ioctl(0, TCSETA, &nt);
X# endif
X}
X/*
X * This function gets called just
X * before we go back home to the shell. Put all of
X * the terminal parameters back.
X */
Xvoid
Xsys_close()
X{
X if (!ttyactivep)
X return;
X ioctl(0, TCSETA, &ot);
X fcntl( 0, F_SETFL, kbdflgs);
X ttyactivep = FALSE;
X# if defined(SW_ENHC80x25)
X switch (console_mode) {
X case M_ENH_C80x43:
X ioctl(1, SW_ENHC80x43, 0);
X break;
X case M_ENH_C80x25:
X ioctl(1, SW_ENHC80x25, 0);
X break;
X }
X# endif
X}
Xsys_checkc()
X{ char kbdq = 0;
X
X fcntl(0, F_SETFL, kbdflgs | O_NDELAY);
X read(0, &kbdq, 1);
X fcntl(0, F_SETFL, kbdflgs);
X return kbdq;
X}
Xsys_getchar(fd, buf, cnt)
Xchar *buf;
X{
X return read(fd, buf, cnt);
X}
Xchar *
Xsys_delim()
X{
X return "/";
X}
SHAR_EOF
chmod 0444 ./unix.c || echo "restore of ./unix.c fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./version.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./version.c &&
X# include "def.h"
X
Xint version_number = (1*100) + 9;
X
Xchar *version = "CRISP v1.9, (C) by P. Fox";
SHAR_EOF
chmod 0444 ./version.c || echo "restore of ./version.c fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./vms.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./vms.c &&
X/**************************************************************
X *
X * CRISP - Custom Reduced Instruction Set Programmers Editor
X *
X * (C) Paul Fox, 1989
X * 43, Jerome Close Tel: +44 6284 4222
X * Marlow
X * Bucks.
X * England SL7 1TX
X *
X *
X * Please See COPYRIGHT notice.
X *
X **************************************************************/
X
X# include <stdio.h>
X# include <ssdef.h>
X# include <stsdef.h>
X# include <ttdef.h>
X# include <tt2def.h>
X# include <iodef.h>
X# include <descrip.h>
X/*
XNotes on VMS implementation:
X
X1. Backups not supported since
X (a) VMS does not support link() and unlink()
X (b) and VMS supports version numbers anyway.
X2. Filenames can be in the normal VMS format or the
X Unix style can be used: /dev/dir1/dir2/file
X (same as dev:[dir1.dir2]file ).
X3. Node-names are not supported.
X4. If the user uses the DEC-shell, then CRISP may hang trying to
X parse unexpected path names.
X5. Changing directory and editing relative files will fail.
X*/
X# define CENTISECONDS 5 /* x0.1 Read ahead timeout*/
X
X/*---------------------------------------
X/* Directory entries for CRISP under VMS.
X/*---------------------------------------*/
Xchar *termcap_dir = "crisp_library:[etc]termcap.dat";
Xchar *bhelp = "crisp_library:[help]";
Xchar *bpath = "crisp_library:[macros];crisp_library:[src]";
X
Xstatic struct iosb {
X short status;
X short offset;
X short term;
X short termlen;
X } input_iosb;
X
Xstatic struct sensemode {
X short status;
X unsigned char xmit_baud;
X unsigned char rcv_baud;
X unsigned char crfill;
X unsigned char lffill;
X unsigned char parity;
X unsigned char unused;
X char class;
X char type;
X short scr_wid;
X unsigned long tt_char : 24,
X scr_len : 8;
X unsigned long tt2_char;
X };
X
Xstatic int input_ef = 0;
Xstatic int input_chan = 0;
Xstatic int timeout_flag = FALSE;
Xstatic $DESCRIPTOR (input_dsc, "TT");
Xstatic struct sensemode old_gtty;
X
Xstatic int sys_first_time = 0;
X# ifdef FRED_BLOGGS
Xmain()
X{
X int ch;
X do {
X ch = sys_getchar();
X printf("ch='%c' %d %02x\n", ch, ch, ch);
X }
X while (ch != 'X');
X sys_close();
X}
X# endif
Xsys_open()
X{ struct sensemode sg;
X
X if (sys_first_time)
X return;
X sys_first_time = 1;
X
X if (input_chan == 0) {
X int status = SYS$ASSIGN(&input_dsc, &input_chan, 0, 0);
X if (!(status & 1))
X LIB$STOP(status);
X }
X if (input_ef == 0) {
X LIB$GET_EF(&input_ef);
X SYS$CLREF(input_ef);
X }
X
X SYS$QIOW(0, input_chan, IO$_SENSEMODE, &old_gtty, 0, 0,
X &old_gtty.class, 12, 0, 0, 0, 0);
X
X sg = old_gtty;
X sg.tt_char |= TT$M_PASSALL | TT$M_NOECHO | TT$M_EIGHTBIT;
X sg.tt_char &= ~TT$M_TTSYNC;
X sg.tt2_char |= TT2$M_PASTHRU | TT2$M_XON;
X
X SYS$QIOW(0, input_chan, IO$_SETMODE, &input_iosb, 0, 0,
X &sg.class, 12, 0, 0, 0, 0);
X
X}
Xsys_close()
X{
X if (!sys_first_time)
X return;
X
X SYS$QIOW(0, input_chan, IO$_SETMODE, &input_iosb, 0, 0,
X &old_gtty.class, 12, 0, 0, 0, 0);
X}
Xsys_timeout(yes)
X{
X timeout_flag = yes;
X}
X# define MAX_INPUT 128
Xstatic unsigned char input_buffer[MAX_INPUT];
Xstatic int iptr = MAX_INPUT + 1;
Xstatic int icnt = 0;
Xsys_cancel_io()
X{
X SYS$CANCEL(input_chan);
X}
Xsys_checkc()
X{
X return iptr < icnt;
X}
X
Xsys_getchar(fd, buf, cnt)
Xunsigned char *buf;
X{
X if (iptr >= icnt) {
X SYS$QIOW(0, input_chan,
X IO$_READVBLK | (timeout_flag ? IO$M_TIMED : 0),
X &input_iosb, 0, 0,
X &input_buffer, 1, 2, 0, 0, 0);
X if (input_iosb.status != SS$_NORMAL)
X return 0;
X iptr = 0;
X icnt = 1;
X }
X *buf = input_buffer[iptr++];
X return 1;
X}
Xsys_write(fd, buf, cnt)
Xunsigned char *buf;
X{
X SYS$QIOW(0, input_chan, IO$_WRITEVBLK,
X &input_iosb, 0, 0,
X buf, cnt, 0, 0, 0, 0);
X}
X/*
X/* We need to put in VMS style wild card expansions.
X/**/
Xchar **
Xshell_expand(filename)
Xchar *filename;
X{ char **buf = chk_alloc(sizeof (char *) * 2);
X
X buf[0] = strdup(filename);
X buf[1] = 0;
X return buf;
X}
Xchar *
Xsys_delim()
X{
X return "";
X}
Xchar *
Xsys_fname_unix_to_vms(src, dst, size)
Xchar *src;
Xchar *dst;
X{ int slash_count = 0;
X char *orig_src = src;
X char *orig_dst = dst;
X char *strchr();
X
X size--;
X if (*src != '/' && strchr(src, '/') != NULL) {
X *dst++ = '[';
X *dst++ = '.';
X size -= 2;
X slash_count = 2;
X }
X while (*src) {
X if (*src != '/') {
X if (size-- <= 0)
X break;
X *dst++ = *src++;
X continue;
X }
X src++;
X switch (slash_count++) {
X case 0: break;
X case 1: *dst++ = ':';
X size--;
X if (strchr(src, '/')) {
X *dst++ = '[';
X size--;
X }
X break;
X default:
X if (strchr(src, '/') == 0)
X *dst++ = ']';
X else
X *dst++ = '.';
X size--;
X break;
X }
X }
X *dst = 0;
X return orig_dst;
X}
Xchar *
Xvms_filename_canon(buf)
Xchar *buf;
X{ register char *cp;
X register char *cp1;
X
X for (cp = buf; *cp; cp++) {
X /*----------------------------------------
X /* Map fred:[dir1.dir2.][dir3]... to
X /* fred:[dir1.dir2.dir3]...
X /*----------------------------------------*/
X if (*cp == '.' && cp[1] == ']' && cp[2] == '[') {
X strcpy(cp+1, cp+3);
X continue;
X }
X /*----------------------------------------
X /* Map fred:[dir1.dir2][.dir3]... to
X /* fred:[dir1.dir2.dir3]...
X /*----------------------------------------*/
X if (*cp == ']' && cp[1] == '[' && cp[2] == '.') {
X strcpy(cp, cp+2);
X cp--;
X continue;
X }
X /*----------------------------------------
X /* Map fred:[dir1.dir2][dir3]... to
X /* fred:[dir3]...
X /*----------------------------------------*/
X if (*cp == '[') {
X extern char *strchr();
X cp1 = strchr(buf, '[');
X if (cp1 != cp)
X strcpy(cp1, cp);
X }
X }
X
X /*----------------------------------------
X /* Map fred:[dir1.dir2.-.dir3]... to
X /* fred:[dir1.dir3]...
X /*
X /* we do this after the others so that
X /* we can ensure theres only one PPN left.
X /*----------------------------------------*/
X for (cp = buf; *cp && *cp != '['; )
X cp++;
X while (*cp && *cp != ']') {
X if (*cp == '.' && cp[1] == '-') {
X for (cp1 = cp-1; *cp1 != '['; cp1--)
X if (*cp1 == '.')
X break;
X strcpy(cp1, cp+2);
X cp = cp1;
X }
X else
X cp++;
X }
X return buf;
X}
X
X/*
X * Run a command. The "cmd" is a pointer to a command string, or NULL if you
X * want to run a copy of DCL in the subjob (this is how the standard routine
X * LIB$SPAWN works. You have to do wierd stuff with the terminal on the way in
X * and the way out, because DCL does not want the channel to be in raw mode.
X */
Xsystem(cmd)
Xregister char *cmd;
X{
X struct dsc$descriptor cdsc;
X struct dsc$descriptor *cdscp;
X long status;
X long substatus;
X long iosb[2];
X
X sys_close();
X sys_first_time = 0;
X cdscp = NULL; /* Assume DCL. */
X if (cmd && (strcmp(cmd, "/bin/sh") == 0 || strcmp(cmd, "/bin/csh") == 0))
X cmd = NULL;
X if (cmd != NULL) { /* Build descriptor. */
X cdsc.dsc$a_pointer = cmd;
X cdsc.dsc$w_length = strlen(cmd);
X cdsc.dsc$b_dtype = DSC$K_DTYPE_T;
X cdsc.dsc$b_class = DSC$K_CLASS_S;
X cdscp = &cdsc;
X }
X status = LIB$SPAWN(cdscp, 0, 0, 0, 0, 0, &substatus, 0, 0, 0);
X if (status != SS$_NORMAL)
X substatus = status;
X sys_open();
X if (status!=SS$_NORMAL || (iosb[0]&0xFFFF)!=SS$_NORMAL)
X return (FALSE);
X if ((substatus&STS$M_SUCCESS) == 0) /* Command failed. */
X return (FALSE);
X return (TRUE);
X}
SHAR_EOF
chmod 0444 ./vms.c || echo "restore of ./vms.c fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./wild.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./wild.c &&
X/**************************************************************
X *
X * CRISP - Custom Reduced Instruction Set Programmers Editor
X *
X * (C) Paul Fox, 1989
X * 43, Jerome Close Tel: +44 6284 4222
X * Marlow
X * Bucks.
X * England SL7 1TX
X *
X *
X * Please See COPYRIGHT notice.
X *
X **************************************************************/
X# include <stdio.h>
X# include <sys/types.h>
X# include <sys/stat.h>
X# include "m-machine.h"
X# include "gdir.h"
X
X# if !defined(lint)
Xstatic char sccsid[] = "@(#) wild.c 1.11, (C) 1988, P. Fox";
X# endif
X
X# define SHE_TOO_MANY_NAMES -1
X# define TRUE 1
X# define FALSE 0
X
X# define MAX_NAMES 1024
X# define NAME_SIZE 128
X
X# ifdef TESTING_WILD
Xmain(argc, argv)
Xchar **argv;
X{
X char lbuf[256];
X char **files;
X int i;
X extern char **shell_expand();
X while (1) {
X printf("Filename: ");
X gets(lbuf);
X if (lbuf[strlen(lbuf) - 1] == '\n')
X lbuf[strlen(lbuf) - 1] = NULL;
X files = shell_expand(lbuf);
X if (files == (char **) NULL) {
X printf("Expansion error.\n");
X continue;
X }
X for (i = 0; files[i]; i++) {
X if (files[i][0])
X printf("%s ", files[i]);
X chk_free(files[i]);
X }
X chk_free(files);
X putchar('\n');
X }
X}
X# endif
X/*---------------------------*/
Xwild_match(file, str)
Xregister char *file;
Xregister char *str;
X{ register char *cp;
X char *start_str = str;
X int low, hi;
X
X while (*str) {
X switch (*str) {
X case '*':
X if (start_str == str && file[0] == '.')
X return FALSE;
X str++;
X if (*str == NULL)
X return TRUE;
X for (cp = file + strlen(file) - 1;
X cp >= file; cp--)
X if (wild_match(cp, str))
X return TRUE;
X return FALSE;
X case '?':
X if (*file == NULL)
X return FALSE;
X str++;
X break;
X case '[':
X if (*file == NULL)
X return FALSE;
X str++;
X while (1) {
X if (*str == ']' || *str == NULL)
X return FALSE;
X hi = low = *str++;
X if (*str == '-') {
X hi = str[1];
X str += 2;
X }
X if (*file >= low && *file <= hi) {
X file++;
X break;
X }
X }
X while (*str)
X if (*str++ == ']')
X break;
X break;
X default:
X if (*file == NULL || *file++ != *str++)
X return FALSE;
X break;
X }
X }
X return *str == NULL;
X}
X/*--------------------------*/
X# if !defined(VMS)
X# include <pwd.h>
Xint shell_error;
Xextern char *chk_alloc();
Xchar **
Xshell_expand(file)
Xchar *file;
X{ char name[128];
X struct passwd *pwd;
X struct passwd *getpwuid();
X struct passwd *getpwnam();
X unsigned short getuid();
X char **shell_wild();
X char **shell_delete();
X char *cp;
X
X if (file[0] != '~')
X return shell_wild(file);
X if (*++file == '/') {
X file++;
X pwd = getpwuid(getuid());
X }
X else {
X for (cp = name; *file && *file != '/'; )
X *cp++ = *file++;
X if (*file == '/')
X file++;
X *cp = NULL;
X pwd = getpwnam(name);
X }
X
X sprintf(name, "%s/%s", pwd->pw_dir, file);
X endpwent();
X return shell_wild(name);
X}
Xchar **
Xshell_delete(files, wild)
Xchar **files;
X{ int i;
X if (files == NULL || !wild)
X return files;
X for (i = 0; files[i]; i++) {
X struct stat stat_buf;
X if (files[i][0] == NULL)
X continue;
X if (stat(files[i], &stat_buf) < 0)
X files[i][0] = NULL;
X }
X return files;
X
X}
Xchar **
Xshell_wild(file)
Xchar *file;
X{ int i, j, k;
X int ecnt;
X char *cp;
X char suffix[64];
X char **names;
X int name_cnt = 0;
X char *wild_expand();
X char *get_sname();
Xstatic int compare();
X int found_wild = FALSE;
X
X shell_error = 0;
X names = (char **) chk_alloc(MAX_NAMES * sizeof(char*));
X
X if (file[0] == '/') {
X names[0] = chk_alloc(NAME_SIZE);
X strcpy(names[0], "/");
X file++;
X name_cnt = 1;
X }
X
X do {
X extern char *strpbrk();
X char *prefix;
X suffix[0] = NULL;
X file = get_sname(file, suffix);
X if (suffix[0] && strpbrk(suffix, "*?[")) {
X found_wild = TRUE;
X j = name_cnt;
X for (i = 0; i <= j; i++) {
X if (i == j) {
X if (j == 0)
X prefix = NULL;
X else
X break;
X }
X else {
X prefix = names[i];
X if (prefix[0] == NULL)
X continue;
X }
X for (ecnt = 0; ; ecnt++) {
X if ((cp = wild_expand(prefix, suffix, ecnt)) == NULL) {
X if (j)
X names[i][0] = NULL;
X break;
X }
X names[name_cnt] = chk_alloc(NAME_SIZE);
X if (prefix) {
X if (prefix[strlen(prefix)-1] == '/')
X sprintf(names[name_cnt],
X "%s%s", prefix, cp);
X else
X sprintf(names[name_cnt],
X "%s/%s", prefix, cp);
X }
X else
X strcpy(names[name_cnt], cp);
X if (++name_cnt >= MAX_NAMES-1) {
X she_error(name_cnt, names, name_cnt);
X return NULL;
X }
X }
X }
X }
X else {
X if (name_cnt == 0) {
X names[0] = chk_alloc(NAME_SIZE);
X strcpy(names[0], suffix);
X name_cnt = 1;
X }
X else
X for (k = 0; k < name_cnt; k++) {
X strcat(names[k], "/");
X strcat(names[k], suffix);
X }
X }
X }
X while (file);
X names[name_cnt] = NULL;
X qsort(names, name_cnt, sizeof(char *), compare);
X return shell_delete(names, found_wild);
X}
Xstatic
Xcompare(p1, p2)
Xchar **p1, **p2;
X{
X return strcmp(*p1, *p2);
X}
Xshe_error(err, names, name_cnt)
Xchar **names;
X{ int i;
X shell_error = err;
X for (i = 0; i < name_cnt; i++)
X chk_free(names[i]);
X chk_free(names);
X}
Xchar *
Xwild_expand(prefix, suffix, cnt)
Xchar *prefix;
Xchar *suffix;
X{ static DIR *dirp = NULL;
X struct dirent *de;
X static char name[DIRSIZ+1];
X
X if (dirp == NULL) {
X if ((dirp = opendir(prefix ? prefix : ".")) == NULL) {
X return (char *) NULL;
X }
X }
X while ((de = readdir(dirp)) != (struct dirent *) NULL) {
X strncpy(name, de->d_name, DIRSIZ);
X name[DIRSIZ] = NULL;
X if (wild_match(name, suffix))
X return name;
X }
X closedir(dirp);
X dirp = NULL;
X return (char *) NULL;
X
X}
Xchar *
Xget_sname(file, buf)
Xregister char *file;
Xregister char *buf;
X{
X if (*file == NULL)
X return (char *) NULL;
X while (*file && *file != '/')
X *buf++ = *file++;
X if (*file == '/')
X file++;
X *buf = NULL;
X return *file ? file : NULL;
X}
X# endif
SHAR_EOF
chmod 0444 ./wild.c || echo "restore of ./wild.c fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./window.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./window.c &&
X/**************************************************************
X *
X * CRISP - Custom Reduced Instruction Set Programmers Editor
X *
X * (C) Paul Fox, 1989
X * 43, Jerome Close Tel: +44 6284 4222
X * Marlow
X * Bucks.
X * England SL7 1TX
X *
X *
X * Please See COPYRIGHT notice.
X *
X **************************************************************/
X#include "list.h"
X
XSCCSID("@(#) window.c 1.9, (C) 1988, P. Fox");
X
Xvoid w_title();
Xextern char *bname();
XWINDOW *new_window();
Xu_int16 win_num = 0;
Xint border_flag = TRUE;
Xint w_layer = 0;
Xborders()
X{ register WINDOW *wp;
X extern int sgarbf;
X int oflag = border_flag;
X
X accumulator = border_flag;
X if (argv[1].l_flags != F_NULL)
X border_flag = argv[1].l_int != 0;
X else
X border_flag = !border_flag;
X
X if (border_flag == oflag)
X return;
X for (wp = wheadp; wp; wp = wp->w_wndp)
X if (wp->w_tiled != W_POPUP) {
X if (border_flag) {
X wp->w_tiled = W_ROOT;
X/* wp->w_h--;*/
X }
X else {
X wp->w_tiled = 0;
X/* wp->w_h++;*/
X }
X }
X sgarbf = TRUE;
X}
X/*
X * Split the current window. A window
X * smaller than 3 lines cannot be split.
X * The only other error that is possible is
X * a "malloc" failure allocating the structure
X * for the new window.
X */
XWINDOW *
Xsplitwind()
X{
X register WINDOW *wp;
X
X if (curwp->w_h <= 3) {
X ewprintf("Window would be too small.");
X return NULL;
X }
X wp = new_window();
X curwp->w_flag |= WFHARD;
X *wp = *curwp;
X
X wp->w_ttitle = wp->w_btitle = NULL;
X wp->w_popup = FALSE;
X ++curbp->b_nwnd; /* Displayed twice. */
X wp->w_num = win_num++;
X wp->w_bufp = curbp;
X wp->w_force = 0;
X wp->w_h = curwp->w_h / 2 - 1;
X curwp->w_h -= wp->w_h;
X wp->w_y = curwp->w_y + curwp->w_h;
X curwp->w_h--;
X wp->w_old_line = wp->w_line = wp->w_top_line = 1;
X if (curwp->w_top_line + curwp->w_h < curwp->w_line) {
X curwp->w_top_line = curwp->w_line - (curwp->w_h / 2);
X if (curwp->w_top_line < 1)
X curwp->w_top_line = 1;
X }
X curwp->w_old_line = curwp->w_line;
X wp->w_tiled = W_ROOT;
X win_append(wp);
X
X w_title(wp, bname(curbp->b_fname), "");
X
X return wp;
X}
Xwin_append(win)
XWINDOW *win;
X{ register WINDOW *wp;
X
X for (wp = wheadp; wp->w_wndp; )
X wp = wp->w_wndp;
X wp->w_wndp = win;
X win->w_wndp = NULL;
X}
Xcreate_window()
X{ register WINDOW *wp = new_window();
X
X if (wp == NULL)
X return 0;
X
X win_append(wp);
X
X wp->w_old_line = wp->w_top_line = wp->w_line = 1;
X wp->w_num = win_num++;
X
X wp->w_x = (u_char) (argv[1].l_int + 1);
X wp->w_y = (u_char) (argv[4].l_int + 1);
X wp->w_h = (u_char) (argv[2].l_int - argv[4].l_int - 1);
X wp->w_w = (u_char) (argv[3].l_int - argv[1].l_int - 1);
X if (wp->w_y >= nrow)
X wp->w_y = nrow -1;
X if (wp->w_y + wp->w_h >= nrow - 2)
X wp->w_h = nrow - wp->w_y - 3;
X
X wp->w_tiled = W_POPUP;
X wp->w_force = TRUE;
X wp->w_popup = TRUE;
X wp->w_flag = WFHARD;
X wp->w_prev = curwp;
X w_title(wp, "", get_str(5));
X
X curwp = wp;
X
X return 0;
X}
Xvoid
Xw_title(wp, top, bottom)
XWINDOW *wp;
Xchar *top;
Xchar *bottom;
X{
X if (wp->w_ttitle && top)
X chk_free(wp->w_ttitle);
X if (wp->w_btitle && bottom)
X chk_free(wp->w_btitle);
X if (top)
X wp->w_ttitle = strdup(top);
X if (bottom)
X wp->w_btitle = strdup(bottom);
X}
X
Xattach_buffer()
X{ extern BUFFER *numberb();
X BUFFER *bp = numberb((u_int16) argv[1].l_int);
X char buf[128];
X
X if (bp == NULL) {
X ewprintf("attach_buffer: no such buffer");
X return -1;
X }
X detach_buffer(curwp);
X curwp->w_bufp = bp;
X bp->b_nwnd++;
X curwp->w_old_line = 1;
X curwp->w_top_line = bp->b_top;/*1; /*bp->b_line;*/
X curwp->w_line = bp->b_line;
X curwp->w_col = bp->b_col;
X curwp->w_flag |= WFHARD;
X curbp = bp;
X
X strcpy(buf, curbp->b_title ? curbp->b_title : curbp->b_fname);
X w_title(curwp, bname(buf), (char *) NULL);
X return 0;
X}
Xdel_window()
X{ WINDOW *wp = curwp->w_prev;
X WINDOW *wp1;
X
X if (wheadp == curwp)
X wheadp = curwp->w_wndp;
X else {
X for (wp1 = wheadp; wp1; wp1 = wp1->w_wndp)
X if (wp1->w_wndp == curwp) {
X wp1->w_wndp = curwp->w_wndp;
X break;
X }
X if (wp1 == NULL)
X panic("del_window: window not found.");
X }
X if (curwp->w_bufp == curbp && curbp) {
X curbp->b_line = curwp->w_line;
X curbp->b_col = curwp->w_col;
X curbp->b_top = curwp->w_top_line;
X curbp->b_nwnd--;
X }
X if (curwp->w_btitle)
X chk_free(curwp->w_btitle);
X if (curwp->w_ttitle)
X chk_free(curwp->w_ttitle);
X chk_free((char *) curwp);
X curwp = wp;
X/* curbp = wp->w_bufp;*/
X for (wp = wheadp; wp; wp = wp->w_wndp)
X wp->w_flag |= WFHARD;
X return 0;
X}
X
Xinq_screen_size()
X{
X if (argv[1].l_flags != F_NULL)
X argv[1].l_sym->s_int = nrow;
X if (argv[2].l_flags != F_NULL)
X argv[2].l_sym->s_int = ncol;
X return 0;
X}
Xinq_window_size()
X{
X accumulator = curwp->w_h;
X
X if (argv[1].l_flags != F_NULL)
X argv[1].l_sym->s_int = curwp->w_h;
X if (argv[2].l_flags != F_NULL)
X argv[2].l_sym->s_int = curwp->w_w - 2;
X if (argv[3].l_flags != F_NULL)
X argv[3].l_sym->s_int = curwp->w_indent;
X
X return 0;
X}
X
Xinq_w()
X{
X accumulator = curwp->w_num;
X return 0;
X}
Xset_window()
X{ register WINDOW *wp;
X
X for (wp = wheadp; wp; wp = wp->w_wndp)
X if (wp->w_num == (u_int16) argv[1].l_int) {
X curwp = wp;
X/* curbp = wp->w_bufp;*/
X break;
X }
X return 0;
X}
XWINDOW *
Xvsplitwind()
X{
X register WINDOW *wp;
X int w;
X
X if (curwp->w_w < 16) {
X ewprintf("Window would be too small.");
X return 0;
X }
X wp = new_window();
X *wp = *curwp;
X wp->w_indent = curwp->w_indent = 0;
X wp->w_btitle = wp->w_ttitle = NULL;
X wp->w_tiled = W_ROOT;
X ++curbp->b_nwnd; /* Displayed twice. */
X
X w = wp->w_w;
X wp->w_w /= 2;
X curwp->w_w = (u_char) (w - wp->w_w - 1);
X wp->w_x = curwp->w_x + curwp->w_w + 1;
X
X wp->w_num = win_num++;
X wp->w_force = 0;
X wp->w_wndp = wheadp;
X
X win_append(wp);
X
X curwp->w_flag |= WFHARD;
X wp->w_flag |= WFHARD;
X
X w_title(wp, bname(curbp->b_fname), "");
X return wp;
X}
X
Xwindow_color()
X{
X return 0;
X}
Xwin_modify(flag)
X{
X wwin_modify(curwp, flag);
X}
Xwwin_modify(wp, flag)
Xregister WINDOW *wp;
X{ register int line = *cur_line;
X
X if (wp->w_bufp != curbp)
X return;
X
X if (flag & WFDELL & wp->w_flag) /* That really is '&' and '&' */
X flag |= WFHARD;
X if (flag == WFMOVE && curbp->b_anchor)
X flag = WFEDIT;
X wp->w_flag |= flag;
X if ((wp->w_flag & WFEDIT) == 0)
X return;
X if (wp->w_mined == 0 || wp->w_mined > line)
X wp->w_mined = line;
X if (wp->w_maxed < line)
X wp->w_maxed = line;
X}
Xset_buffer_bottom(wp)
XWINDOW *wp;
X{ int new_top_line = wp->w_line - wp->w_h + 1;
X
X if (new_top_line < 1)
X new_top_line = 1;
X if (new_top_line != wp->w_top_line) {
X wp->w_top_line = new_top_line;
X wwin_modify(wp, WFHARD);
X }
X}
XWINDOW *
Xnew_window()
X{ static WINDOW null_window = {0};
X WINDOW *wp = (WINDOW *) chk_alloc(sizeof (WINDOW));
X
X *wp = null_window;
X wp->w_layer = w_layer++;
X return wp;
X}
SHAR_EOF
chmod 0444 ./window.c || echo "restore of ./window.c fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./word.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./word.c &&
X/************************************************************************
X * Code to implement portable mappings to and from internal word *
X * and byte order. Note we dont use the standard htons() and *
X * htonl() because these are only available on systems with the *
X * socket library. This code is so that we can generate machine *
X * independent .cm files. This currently works for 68020s and *
X * 80386's, and Vaxes, but will probably need changing for other *
X * machines. *
X ************************************************************************/
X# include "list.h"
X
Xstatic short one = 1;
Xstatic char *onep = (char *) &one;
X
Xstatic char one234[4] = {1,2,3,4};
X
XWGET16(n)
X{ short s = (short) n;
X
X if (*onep == 0)
X return s;
X return ((s >> 8) & 0xff) | ((s & 0xff) << 8);
X}
Xlong
XWGET32(n)
Xlong n;
X{ long l = *(long *) one234;
X unsigned char buf[4];
X
X *(long *) buf = n;
X if (l == 0x01020304)
X return n;
X if (l == 0x04030201)
X return ((long) buf[0] << 24) | ((long) buf[1] << 16) |
X (buf[2] << 8) | buf[3];
X printf("l=%08lx, What?\n", l);
X abort();
X /* NOTREACHED */
X}
Xvoid
XLPUT16(lp, n)
XLIST *lp;
Xregister int n;
X{
X register u_char *cp = (u_char *) lp;
X
X *++cp = (u_char) (n >> 8);
X *++cp = (u_char) n;
X}
Xvoid
XLPUT32(lp, n)
XLIST *lp;
Xregister long n;
X{
X register u_char *cp = (u_char *) lp;
X
X *++cp = (u_char) (n >> 24);
X *++cp = (u_char) (n >> 16);
X *++cp = (u_char) (n >> 8);
X *++cp = (u_char) n;
X}
Xlong
XLGET32(lp)
Xregister LIST *lp;
X{
X return ((long) lp[1] << 24) | (long) lp[2] << 16 |
X (long) lp[3] << 8 | (long) lp[4];
X}
Xu_int16
XLGET16(lp)
Xregister LIST *lp;
X{
X return (u_int16) (lp[1] << 8) | lp[2];
X}
Xswap_words(warray, size)
Xregister u_int32 *warray;
X{ register int i;
X
X for (i = 0; i < size; i++, warray++)
X *warray = WGET32(*warray);
X}
X
X/**************************************************************/
X/*
X/* If porting to a new system, the following:
X/*
X/* a.out 01020304
X/*
X/* should generate:
X/*
X/* 03 04 01 02 03 04
X/*
X/* as output in order for the .cm files to be portable
X/* across to other CPU types.
X/**************************************************************/
X# if 0
Xmain(argc, argv)
Xchar **argv;
X{ long l;
X int i;
X char buf[6];
X
X sscanf(argv[1], "%lx", &l);
X i = l & 0xffff;
X *(short *) buf = WGET16(i);
X *(long *) (buf+2) = WGET32(l);
X for (i = 0; i < 6; i++)
X printf("%c", buf[i]);
X}
X# endif
SHAR_EOF
chmod 0444 ./word.c || echo "restore of ./word.c fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./m-sun3os3.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./m-sun3os3.h &&
X/************************************************************************
X * *
X * CRISP - Custom Reduced Instruction Set Programmers Editor *
X * *
X * (C) Paul Fox, 1989 *
X * 43, Jerome Close Tel: +44 6284 4222 *
X * Marlow *
X * Bucks. *
X * England SL7 1TX *
X * *
X * *
X * Please See COPYRIGHT notice. *
X * *
X * This file contains various conditional compilation flags *
X * which are needed to support different operating systems. *
X * Different versions of this file are supplied for various *
X * operating systems. You should set up a link between the *
X * m-machine.h file and the m- file describing your system. If *
X * your system isn't supported then simply modify the *
X * definitions below as appropriate. You may need to change the *
X * code as well depending on your system. *
X ************************************************************************/
X
X/************************************************************************
X * One of the following should be set to indicate machine type. *
X * Some of the definitions may apply to more than one machine *
X * type, eg SUN may be more indicative of BSD, but I dont have a *
X * generic BSD to try this out on. *
X ************************************************************************/
X# define SUN
X/*# define SYSV*/
X/*#define VMS*/
X/************************************************************************
X * Some combination of the following may need to be set for *
X * operating system dependent features which dont fit under the *
X * general category of operating system features. *
X ************************************************************************/
X# define BSD
X/*# define XENIX*/
X
X/************************************************************************
X * DIRSIZ_DEFINED should be define'd if the POSIX directory *
X * access include files are wrong. (Are they wrong or right ?) *
X ************************************************************************/
X# define DIRSIZ_DEFINED
X/*#undef DIRSIZ_DEFINED*/
X
X/************************************************************************
X * The following # define is used to control the use of the enum *
X * OPCODE typedef in the list.h. It doesn't matter if you set *
X * this to 'int' as below, but if it is undefined then it is *
X * easier to debug the CRISP lisp-code. Older Unix C compilers *
X * do not treat enum's and int's as the same type and will *
X * complain during compilation. *
X ************************************************************************/
X# define OPCODE int
X/*#undef OPCODE */
X
X
X/************************************************************************
X * If you have support for pty's in your kernel, then define *
X * HAVE_PTY. If not #undef it, and normal unnamed pipes will be *
X * used instead. *
X ************************************************************************/
X# undef HAVE_PTY
X/*# define HAVE_PTY*/
X
X/************************************************************************
X * SELECT should be defined if we can do a select() on the *
X * keyboard and on the process pty's/pipes. This will tend to be *
X * true on BSD systems, and Sys V.4. Alas, poll() isn't *
X * generally applicable on V.3 because the standard pipe and tty *
X * drivers are streams modules. *
X ************************************************************************/
X/*# undef SELECT*/
X# define SELECT
X
X/************************************************************************
X * CRISP defines a typedef called u_char. Some Unix systems also *
X * define this type in one of the system header files *
X * (/usr/include/sys/types.h) which causes a compilation error. *
X * If you have this typedef in your system header file, then *
X * #define U_CHAR. Otherwise undefine it. *
X ************************************************************************/
X/*#undef U_CHAR*/
X# define U_CHAR
X
X
X
SHAR_EOF
chmod 0644 ./m-sun3os3.h || echo "restore of ./m-sun3os3.h fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./m-sun3os4.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./m-sun3os4.h &&
X/************************************************************************
X * *
X * CRISP - Custom Reduced Instruction Set Programmers Editor *
X * *
X * (C) Paul Fox, 1989 *
X * 43, Jerome Close Tel: +44 6284 4222 *
X * Marlow *
X * Bucks. *
X * England SL7 1TX *
X * *
X * *
X * Please See COPYRIGHT notice. *
X * *
X * This file contains various conditional compilation flags *
X * which are needed to support different operating systems. *
X * Different versions of this file are supplied for various *
X * operating systems. You should set up a link between the *
X * m-machine.h file and the m- file describing your system. If *
X * your system isn't supported then simply modify the *
X * definitions below as appropriate. You may need to change the *
X * code as well depending on your system. *
X ************************************************************************/
X
X
X/************************************************************************
X * One of the following should be set to indicate machine type. *
X * Some of the definitions may apply to more than one machine *
X * type, eg SUN may be more indicative of BSD, but I dont have a *
X * generic BSD to try this out on. *
X ************************************************************************/
X# define SUN
X/*# define SYSV*/
X/*#define VMS*/
X/************************************************************************
X * Some combination of the following may need to be set for *
X * operating system dependent features which dont fit under the *
X * general category of operating system features. *
X ************************************************************************/
X# define BSD
X/*# define XENIX*/
X
X/************************************************************************
X * DIRSIZ_DEFINED should be define'd if the POSIX directory *
X * access include files are wrong. (Are they wrong or right ?) *
X ************************************************************************/
X# define DIRSIZ_DEFINED
X/*#undef DIRSIZ_DEFINED*/
X
X/************************************************************************
X * The following # define is used to control the use of the enum *
X * OPCODE typedef in the list.h. It doesn't matter if you set *
X * this to 'int' as below, but if it is undefined then it is *
X * easier to debug the CRISP lisp-code. Older Unix C compilers *
X * do not treat enum's and int's as the same type and will *
X * complain during compilation. *
X ************************************************************************/
X/*# define OPCODE int*/
X#undef OPCODE
X
X
X/************************************************************************
X * If you have support for pty's in your kernel, then define *
X * HAVE_PTY. If not #undef it, and normal unnamed pipes will be *
X * used instead. *
X ************************************************************************/
X# define HAVE_PTY
X
X/************************************************************************
X * SELECT should be defined if we can do a select() on the *
X * keyboard and on the process pty's/pipes. This will tend to be *
X * true on BSD systems, and Sys V.4. Alas, poll() isn't *
X * generally applicable on V.3 because the standard pipe and tty *
X * drivers are streams modules. *
X ************************************************************************/
X# define SELECT
X
X/************************************************************************
X * CRISP defines a typedef called u_char. Some Unix systems also *
X * define this type in one of the system header files *
X * (/usr/include/sys/types.h) which causes a compilation error. *
X * If you have this typedef in your system header file, then *
X * #define U_CHAR. Otherwise undefine it. *
X ************************************************************************/
X/*#undef U_CHAR*/
X# define U_CHAR
X
X
X
SHAR_EOF
chmod 0644 ./m-sun3os4.h || echo "restore of ./m-sun3os4.h fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./m-sysv.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./m-sysv.h &&
X/************************************************************************
X * *
X * CRISP - Custom Reduced Instruction Set Programmers Editor *
X * *
X * (C) Paul Fox, 1989 *
X * 43, Jerome Close Tel: +44 6284 4222 *
X * Marlow *
X * Bucks. *
X * England SL7 1TX *
X * *
X * *
X * Please See COPYRIGHT notice. *
X * *
X * This file is suitable for the following operating systems: *
X * *
X * Microport V.3/386 *
X * Interactive V.3/386 *
X * *
X ************************************************************************/
X
X/************************************************************************
X * One of the following should be set to indicate machine type. *
X * Some of the definitions may apply to more than one machine *
X * type, eg SUN may be more indicative of BSD, but I dont have a *
X * generic BSD to try this out on. *
X ************************************************************************/
X/*# define SUN*/
X# define SYSV
X/*#define VMS*/
X/************************************************************************
X * Some combination of the following may need to be set for *
X * operating system dependent features which dont fit under the *
X * general category of operating system features. *
X ************************************************************************/
X/*# define BSD*/
X/*# define XENIX*/
X
X/************************************************************************
X * DIRSIZ_DEFINED should be define'd if the POSIX directory *
X * access include files are wrong. (Are they wrong or right ?) *
X ************************************************************************/
X/*# define DIRSIZ_DEFINED*/
X#undef DIRSIZ_DEFINED
X
X/************************************************************************
X * The following # define is used to control the use of the enum *
X * OPCODES typedef in the list.h. It doesn't matter if you set *
X * this to 'int' as below, but if it is undefined then it is *
X * easier to debug the CRISP lisp-code. Older Unix C compilers *
X * do not treat enum's and int's as the same type and will *
X * complain during compilation. *
X ************************************************************************/
X/*# define OPCODE int*/
X#undef OPCODE
X
X
X/************************************************************************
X * If you have support for pty's in your kernel, then define *
X * HAVE_PTY. If not #undef it, and normal unnamed pipes will be *
X * used instead. *
X ************************************************************************/
X# undef HAVE_PTY
X/*# define HAVE_PTY*/
X
X
X/************************************************************************
X * SELECT should be defined if we can do a select() on the *
X * keyboard and on the process pty's/pipes. This will tend to be *
X * true on BSD systems, and Sys V.4. Alas, poll() isn't *
X * generally applicable on V.3 because the standard pipe and tty *
X * drivers are streams modules. *
X ************************************************************************/
X# undef SELECT
X/*# define SELECT*/
X
X/************************************************************************
X * CRISP defines a typedef called u_char. Some Unix systems also *
X * define this type in one of the system header files *
X * (/usr/include/sys/types.h) which causes a compilation error. *
X * If you have this typedef in your system header file, then *
X * #define U_CHAR. Otherwise undefine it. *
X ************************************************************************/
X#undef U_CHAR
X/*# define U_CHAR*/
X
X
X
SHAR_EOF
chmod 0644 ./m-sysv.h || echo "restore of ./m-sysv.h fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./m-sysv3.2.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./m-sysv3.2.h &&
X/************************************************************************
X * *
X * CRISP - Custom Reduced Instruction Set Programmers Editor *
X * *
X * (C) Paul Fox, 1989 *
X * 43, Jerome Close Tel: +44 6284 4222 *
X * Marlow *
X * Bucks. *
X * England SL7 1TX *
X * *
X * *
X * Please See COPYRIGHT notice. *
X * *
X * This file is suitable for the following operating systems: *
X * *
X * Interactive V.3.2/386 *
X * *
X ************************************************************************/
X
X/************************************************************************
X * One of the following should be set to indicate machine type. *
X * Some of the definitions may apply to more than one machine *
X * type, eg SUN may be more indicative of BSD, but I dont have a *
X * generic BSD to try this out on. *
X ************************************************************************/
X/*# define SUN*/
X# define SYSV
X/*#define VMS*/
X/************************************************************************
X * Some combination of the following may need to be set for *
X * operating system dependent features which dont fit under the *
X * general category of operating system features. *
X ************************************************************************/
X/*# define BSD*/
X/*# define XENIX*/
X
X/************************************************************************
X * DIRSIZ_DEFINED should be define'd if the POSIX directory *
X * access include files are wrong. (Are they wrong or right ?) *
X ************************************************************************/
X/*# define DIRSIZ_DEFINED*/
X#undef DIRSIZ_DEFINED
X
X/************************************************************************
X * The following # define is used to control the use of the enum *
X * OPCODE typedef in the list.h. It doesn't matter if you set *
X * this to 'int' as below, but if it is undefined then it is *
X * easier to debug the CRISP lisp-code. Older Unix C compilers *
X * do not treat enum's and int's as the same type and will *
X * complain during compilation. *
X ************************************************************************/
X/*# define OPCODE int*/
X#undef OPCODE
X
X
X/************************************************************************
X * If you have support for pty's in your kernel, then define *
X * HAVE_PTY. If not #undef it, and normal unnamed pipes will be *
X * used instead. *
X ************************************************************************/
X# undef HAVE_PTY
X/*# define HAVE_PTY*/
X
X
X/************************************************************************
X * SELECT should be defined if we can do a select() on the *
X * keyboard and on the process pty's/pipes. This will tend to be *
X * true on BSD systems, and Sys V.4. Alas, poll() isn't *
X * generally applicable on V.3 because the standard pipe and tty *
X * drivers are streams modules. *
X ************************************************************************/
X# undef SELECT
X/*# define SELECT*/
X
X/************************************************************************
X * CRISP defines a typedef called u_char. Some Unix systems also *
X * define this type in one of the system header files *
X * (/usr/include/sys/types.h) which causes a compilation error. *
X * If you have this typedef in your system header file, then *
X * #define U_CHAR. Otherwise undefine it. *
X ************************************************************************/
X#undef U_CHAR
X/*# define U_CHAR*/
X
X/************************************************************************
X * If EGA43 is defined, then the Unix V.3.2 ioctl() for putting *
X * PC display into 43 line mode is available. *
X ************************************************************************/
X# define EGA43
X/* #undef EGA43*/
X
X
SHAR_EOF
chmod 0644 ./m-sysv3.2.h || echo "restore of ./m-sysv3.2.h fails"
mkdir . >/dev/null 2>&1
echo "x - extracting ./m-vms.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > ./m-vms.h &&
X/************************************************************************
SHAR_EOF
echo "End of part 11"
echo "File ./m-vms.h is continued in part 12"
echo "12" > s2_seq_.tmp
exit 0
--
===================== Reuters Ltd PLC,
Tel: +44 628 891313 x. 212 Westthorpe House,
UUCP: fox%marlow.uucp at idec.stc.co.uk Little Marlow,
Bucks, England SL7 3RQ
More information about the Comp.sources.misc
mailing list