Emacs upgrade part 2
chris at umcp-cs.UUCP
chris at umcp-cs.UUCP
Tue Aug 23 00:11:14 AEST 1983
: Run this shell script with "sh" not "csh"
PATH=:/bin:/usr/bin:/usr/ucb
export PATH
all=FALSE
if [ $1x = -ax ]; then
all=TRUE
fi
/bin/echo 'Extracting newproc.ml'
sed 's/^X//' <<'//go.sysin dd *' >newproc.ml
(declare-global last-line)
(declare-buffer-specific last-line)
(if (! (is-bound lisp-prompt))
(setq-default lisp-prompt
"[0-9][0-9]*_\\|[0-9][0-9]*<[0-9][0-9]*> \\|<[0-9]*>: ")
)
(declare-buffer-specific lisp-prompt)
(if (! (is-bound shell-prompt)) (setq-default shell-prompt "% "))
(declare-buffer-specific shell-prompt)
(defun
(pr-newline
(end-of-line)
(if (eobp)
(newline)
(progn com
(beginning-of-line)
(if (looking-at shell-prompt) (region-around-match 0)
(looking-at lisp-prompt) (region-around-match 0))
(set-mark)
(end-of-line)
(forward-character)
(setq com (region-to-string))
(end-of-file)
(set-mark)
(insert-string com)
)
)
(setq last-line (region-to-string))
(region-to-process (active-process))
(set-mark)
)
)
(defun
(pr-output samebuf oldbuf sameplace
(setq samebuf (= (setq oldbuf (current-buffer-name)) MPX-process))
(temp-use-buffer MPX-process)
(setq sameplace (= (dot) (mark)))
(exchange-dot-and-mark)
(insert-string (process-output))
(if sameplace (set-mark))
(exchange-dot-and-mark)
(temp-use-buffer oldbuf)
(if samebuf (sit-for 0))
)
)
(defun (stop-shell (stop-process "shell")))
(defun
(shell old-ucof
(pop-to-buffer "shell")
(setq needs-checkpointing 0)
(setq old-ucof use-csh-option-f)
(setq use-csh-option-f 1)
(if (< (process-status "shell") 0)
(start-filtered-process "exec csh -i" "shell" "pr-output"))
(setq use-csh-option-f old-ucof)
(local-bind-to-key "pr-newline" '^m')
(local-bind-to-key "send-eot" '')
(local-bind-to-key "send-int-signal" '\177')
(local-bind-to-key "send-quit-signal" '^\')
(local-bind-to-key "grab-last-line" "\e=")
(local-bind-to-key "stop-shell" "\e\^Z")
(end-of-file)
(set-mark)
(novalue)
)
)
(defun
(new-shell name old-ucof
(setq name (arg 1 ": new-shell (buffer name) "))
(pop-to-buffer name)
(use-abbrev-table "shell")
(use-syntax-table "shell")
(setq abbrev-mode 1)
(setq needs-checkpointing 0)
(setq old-ucof use-csh-option-f)
(setq use-csh-option-f 1)
(if (< (process-status name) 0)
(start-filtered-process "exec csh -i" name "pr-output"))
(setq use-csh-option-f old-ucof)
(local-bind-to-key "pr-newline" '^m')
(local-bind-to-key "send-eot" '')
(local-bind-to-key "send-int-signal" '\177')
(local-bind-to-key "send-quit-signal" '^\')
(local-bind-to-key "grab-last-line" "\e=")
(local-bind-to-key "stop-shell" "\e\^Z")
(end-of-file)
(set-mark)
(novalue)
)
)
(defun
(send-eot
(if (eobp)
(eot-process (active-process))
(delete-next-character)
)
)
)
(defun
(send-int-signal
(int-process (active-process))))
(defun
(send-quit-signal
(quit-process (active-process))))
(defun (lisp-kill-output
(end-of-file)
(beginning-of-line)
(set-mark)
(previous-line)
(re-search-reverse "^[0-9][0-9]*\.")
(next-line)
(erase-region)
(backward-character)
(insert-string " [output flushed]")
(end-of-file)
(set-mark)
))
(defun
(lisp old-ucof
(pop-to-buffer "lisp")
(setq needs-checkpointing 0)
(if (bobp)
(progn
(electric-lisp-mode)
(local-bind-to-key "lisp-kill-output" "\^X\^K")))
(setq old-ucof use-csh-option-f)
(setq use-csh-option-f 1)
(if (< (process-status "lisp") 0)
(start-filtered-process "exec /usr/local/lisp" "lisp" "pr-output"))
(setq use-csh-option-f old-ucof)
(local-bind-to-key "pr-newline" '^m')
(local-bind-to-key "send-eot" '')
(local-bind-to-key "send-int-signal" '\177')
(local-bind-to-key "send-quit-signal" '^\')
(local-bind-to-key "grab-last-line" "\e=")
(end-of-file)
(set-mark)
(novalue)
)
)
(defun
(grab-last-line
(end-of-file)
(set-mark)
(insert-string last-line)
(delete-previous-character)
)
)
(defun (shell-cd
(if (= (- (dot) (mark)) 2)
(progn (cd (get-tty-string ": cd "))
(insert-string " " (working-directory))
(pr-newline)
0)
1)))
(save-excursion
(temp-use-buffer "shell")
(use-abbrev-table "shell")
(setq abbrev-mode 1)
(define-local-abbrev "~" (getenv "HOME"))
(define-hooked-local-abbrev "cd" "cd" "shell-cd")
(use-syntax-table "shell")
(modify-syntax-entry "w ~")
(novalue))
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 664 newproc.ml
/bin/echo -n ' '; /bin/ls -ld newproc.ml
fi
/bin/echo 'Extracting mtyconnect.c'
sed 's/^X//' <<'//go.sysin dd *' >mtyconnect.c
X/* mtyconnect.c - connect to a tty under the control of 4.1 bsd Emacs */
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
X/* This is the other side of the unexpected process handling system for
use with Gosling Emacs. This routine should be loaded in with a
program that wants to access another terminal while the user of that
terminal is running Emacs.
usage: char *ttyptr;
if ((fd = ttyconnnect (ttyptr)) == -1) {
perror (ttyptr);
return;
}
If ttyconnect() doesn't return -1, then it returns a valid fd. You can
use this descriptor for read()s and write()s. To close the connection,
just close() it.
*/
static alf;
static al () { alf++; }
#define ALWAIT 10
ttyconnect (tty) char *tty; {
register fd;
char mpxf[40];
struct stat s;
int otime;
int (*ofunc) (), (*signal ()) ();
strcpy (mpxf, "/tmp");
strcat (mpxf, tty);
mpxf[8] = '_'; /* NOTE: ASSUMES THAT tty IS OF THE FORM
/dev/ttyXX */
if (stat (mpxf, &s) == 0 && ((s & S_IFMT) == S_IFMPC)) {
otime = alarm (0);
alf = 0;
ofunc = signal (SIGALRM, al);
alarm (ALWAIT);
fd = open (mpxf, 2);
signal (SIGALRM, ofunc);
if (fd < 0 && alf) { /* open failed, alarm went off */
alarm (otime > ALWAIT ? otime - ALWAIT : 1);
return -1;
}
alarm (otime);
return fd;
}
return -1;
}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 644 mtyconnect.c
/bin/echo -n ' '; /bin/ls -ld mtyconnect.c
fi
/bin/echo 'Extracting ttyconnect.c'
sed 's/^X//' <<'//go.sysin dd *' >ttyconnect.c
X/* ttyconnect.c - connect to a tty under the control of 4.1a bsd Emacs */
#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#ifndef BSD41c
#include <net/in.h>
#else BSD41c
#include <netinet/in.h>
#endif BSD41c
X/* This is the other side of the unexpected process handling system for
use with Gosling Emacs. This routine should be loaded in with a
program that wants to access another terminal while the user of that
terminal is running Emacs.
usage: char *ttyptr;
if ((fd = ttyconnnect (ttyptr)) == -1) {
perror (ttyptr);
return;
}
If ttyconnect() doesn't return -1, then it returns a valid fd. You can
use this descriptor for read()s and write()s. To close the connection,
just close() it. One warning: the file descriptor returned acts much
like one returned from a pipe() call. Hence lseek()s won't work, and
if the other side closes the connection and you try and write to it,
SIGPIPE is generated.
*/
#ifdef BSD41c
X/* Modified for 4.1cBSD 27 June 1983 by Chris Kent */
#endif BSD41c
#ifndef BSD41c
#define SO_OPTIONS (SO_DONTLINGER | SO_KEEPALIVE)
#endif BSD41c
#define IPPORT_EMACS 010000
#ifndef BSD41c
#define htons(x) (((x << 8) & 0xff00) | ((x >> 8) & 0xff))
#define ntohs(x) (((x << 8) & 0xff00) | ((x >> 8) & 0xff))
#endif BSD41c
#define ATIME ((unsigned) 20)
#define NOTOK (-1)
X/* */
extern int errno;
int *alrmser ();
int ttyconnect (ttyptr)
char *ttyptr;
{
int sd,
tty_port,
timer;
int (*astat) ();
char localname[BUFSIZ],
*localptr = localname;
long iaddr;
struct sockaddr_in tty_socket,
*tsock = &tty_socket,
emacs_socket,
*esock = &emacs_socket;
struct stat st;
if (stat (ttyptr, &st) == NOTOK)
return NOTOK;
if ((st.st_mode & S_IFMT) != S_IFCHR) {
errno = ENOTTY;
return NOTOK;
}
tty_port = IPPORT_EMACS | minor (st.st_rdev);
gethostname (localname, sizeof localname);
if ((iaddr = rhost (&localptr)) == NOTOK) {
errno = ENETDOWN;
return NOTOK;
}
tsock -> sin_family = AF_INET;
tsock -> sin_port = 0;
#ifdef vax
tsock -> sin_port = htons (tsock -> sin_port);
#endif
#ifndef BSD41c
tsock -> sin_addr.s_addr = (u_long) 0;
if ((sd = socket (SOCK_STREAM, NULL, tsock, SO_OPTIONS)) == NOTOK)
#else BSD41c
tsock -> sin_addr.s_addr = (u_long) INADDR_ANY;
if ((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
#endif BSD41c
return NOTOK;
#ifdef BSD41c
if(bind(sd, tsock, sizeof(*tsock)) < 0)
return NOTOK;
#endif BSD41c
#ifdef vax
tsock -> sin_port = ntohs (tsock -> sin_port);
#endif
esock -> sin_family = AF_INET;
esock -> sin_port = tty_port;
#ifdef vax
esock -> sin_port = htons (esock -> sin_port);
#endif
esock -> sin_addr.s_addr = (u_long) iaddr;
astat = signal (SIGALRM, alrmser);
if ((timer = alarm (ATIME)) > 0)
if ((timer -= ATIME) < 0)
timer = 1;
#ifndef BSD41c
if (connect (sd, esock) == NOTOK)
#else BSD41c
if (connect (sd, esock, sizeof(*esock)) == NOTOK)
#endif BSD41c
switch (errno) {
default:
perror ("unable to complete socket");
case EINTR:
case EISCONN:
case ETIMEDOUT:
case ECONNREFUSED:
close (sd);
signal (SIGALRM, astat);
alarm (timer);
return NOTOK;
}
#ifdef vax
esock -> sin_port = ntohs (esock -> sin_port);
#endif
signal (SIGALRM, astat);
alarm (timer);
return sd;
}
X/* ARGSUSED */
static int *alrmser (sig)
int sig;
{
}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 664 ttyconnect.c
/bin/echo -n ' '; /bin/ls -ld ttyconnect.c
fi
/bin/echo 'Extracting dsp.c'
sed 's/^X//' <<'//go.sysin dd *' >dsp.c
X/* Display routines */
X/* Copyright (c) 1981,1980 James Gosling */
#include "config.h"
#include "keyboard.h"
#include "buffer.h"
#include "window.h"
#include "display.h"
#include <sys/ioctl.h>
#include <sgtty.h>
#include <stdio.h>
extern QuitDoRstDsp; /* Set while in raw */
struct sgttyb old; /* The initial tty mode bits */
InitDsp () {
struct sgttyb sg;
extern char _sobuf[];
gtty (0, &old);
sg = old;
QuitDoRstDsp++;
sg.sg_flags = (sg.sg_flags & ~(ECHO | CRMOD | XTABS)) | RAW;
stty (0, &sg);
ScreenGarbaged = 1;
setbuf (stdout, _sobuf);
term_init ();
if (tt.t_window) (*tt.t_window) (0);
}
RstDsp () {
if (tt.t_window) (*tt.t_window) (0);
(*tt.t_topos) (ScreenLength, 1);
(*tt.t_wipeline) (0, ScreenWidth);
(*tt.t_cleanup) ();
fflush (stdout);
stty (0, &old);
QuitDoRstDsp = 0;
}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 664 dsp.c
/bin/echo -n ' '; /bin/ls -ld dsp.c
fi
/bin/echo 'Extracting sleep.c'
sed 's/^X//' <<'//go.sysin dd *' >sleep.c
X/* Version of sleep() that uses new signal mechanism */
X/* ACT 5-Nov-1982 */
#include <signal.h>
static alarmed;
int (*sigset())();
sleep(n)
unsigned n;
{
int sleepx();
unsigned altime;
int (*alsig)();
if (n==0)
return;
altime = alarm(1000); /* time to maneuver */
if (altime) { /* alarm already set */
if (altime > n)
altime -= n;/* alarm should go off again later */
else {
n = altime;/* sleep ends early */
altime = 1;/* and alarm goes off again later */
}
}
alsig = sigset(SIGALRM, sleepx);
alarmed = 0;
alarm(n);
while (!alarmed)
pause();
sigset(SIGALRM, alsig);
alarm(altime);
}
static
sleepx()
{
alarmed++;
}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 664 sleep.c
/bin/echo -n ' '; /bin/ls -ld sleep.c
fi
--
In-Real-Life: Chris Torek, Univ of MD Comp Sci
UUCP: {seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet: chris at umcp-cs ARPA: chris.umcp-cs at UDel-Relay
More information about the Comp.sources.unix
mailing list