This is unix.m in view mode; [Download] [Up]
#include "logo.h"
#include <setjmp.h>
#include <signal.h>
char *ostring;
FILE *ofile;
#ifdef DEBUG
int memtrace=0;
extern int yydebug;
#endif
#ifdef PAUSE
int errpause=0;
seterrpause() {
errpause++;
}
clrerrpause() {
errpause = 0;
}
#endif
struct object *stringform(arg)
register struct object *arg;
{
char str[IBUFSIZ];
struct object *bigsave();
#ifdef DEBUG
int omemt;
omemt = memtrace;
memtrace = 0;
#endif
ostring = &str[0];
str[0] = '\0'; /* in case of empty */
tyobj(arg);
ostring = 0;
#ifdef DEBUG
memtrace = omemt;
#endif
return (bigsave(str));
}
putch(ch)
register ch;
{
if (ch != -1) {
putchar(ch);
}
return (ch);
}
/* VARARGS */
char *cpystr(to,f1,f2,f3,f4,f5,f6,f7,f8,f9,f0)
register char *to;
char *f1,*f2,*f3,*f4,*f5,*f6,*f7,*f8,*f9,*f0;
{
char *out,**in;
out = to;
in = &f1;
while (*in) {
strcpy(out,*in);
out += strlen(*in);
in++;
}
return (out);
}
jmp_buf env;
extern errrec();
/* int floflo() { */
void floflo() {
signal(SIGFPE,floflo);
puts("Arithmetic overflow.");
errhand();
}
#ifdef NEXT
int enter()
#else
enter()
#endif NEXT
{
register x;
#ifdef NEXT
int yyiret;
#endif NEXT
if (x=setjmp(env)) {
return(x);
} else {
onintr(errrec,1);
signal(SIGFPE,floflo);
#ifdef NEXT
while(!(yyiret = yyparse())) yyprompt(1);
#else NEXT
return (yyparse());
#endif NEXT
}
}
leave(val)
{
putchar('\n');
longjmp(env,val);
}
int sigarg;
int (*intfun)();
/* void sigquit(); */
extern void sigquit();
#ifdef PAUSE
int pausesig = PAUSESIG;
int othersig = OTHERSIG;
int psigflag = 0;
/* sigpaws() { /* User signals a pause request */
void sigpaws() { /* User signals a pause request */
signal(pausesig,sigpaws);
psigflag++;
}
#endif
onintr(inttf,val)
register int (*inttf)(),val;
{
sigarg = val;
#ifdef PAUSE
signal(othersig,sigquit);
signal(pausesig,sigpaws);
#else
signal(SIGINT,sigquit);
signal(SIGQUIT,sigquit);
#endif
intfun = inttf;
}
#ifdef DEBUG
int deb_quit=0;
#endif
/* sigquit() */
void sigquit()
{
#ifdef DEBUG
if(deb_quit) abort();
#endif
alarm(0);
#ifdef PAUSE
signal(othersig,sigquit);
#else
signal(SIGINT,sigquit);
signal(SIGQUIT,sigquit);
#endif
(*intfun)(sigarg);
}
#ifdef DEBUG
setdebquit() {
deb_quit++;
}
setmemtrace() {
memtrace++;
}
setyaccdebug() {
yydebug++;
}
#endif
#ifdef PAUSE
setipause() {
pausesig = SIGINT;
othersig = SIGQUIT;
}
setqpause() {
pausesig = SIGQUIT;
othersig = SIGINT;
}
#endif
putc1(cha)
register cha;
{
if(ostring)
{
*ostring++=cha;
*ostring=0;
}
else if(ofile)fputc(cha,ofile);
else putchar(cha);
}
sputs(str)
register char *str;
{
register char c;
if(ofile)
while (c = *str++) fputc(c&0177,ofile);
else if(ostring){
while (c = *str++) {
if (c & 0200) *ostring++ = '\\';
*ostring++ = c & 0177 ;
}
*ostring = '\0';
}
else
while (c = *str++) fputc(c&0177,stdout);
}
nputs(str)
register char *str;
{
register char c;
while (c = *str++) fputc(c,stdout);
}
/*VARARGS*/
pf1(str,a1,a2,a3,a4)
register char *str;
struct object *a1,*a2,*a3,*a4;
{
register c;
register struct object **arg;
#ifdef DEBUG
int omemt;
omemt = memtrace;
memtrace = 0;
#endif
arg= &a1;
while(c= *str++){
if(c=='%'){
c= *str++;
if(c=='d'){
if(ostring){
sprintf(ostring,"%d",(int)(*arg++));
ostring+=strlen(ostring);
}else if(ofile)
fprintf(ofile,"%d",(int)(*arg++));
else printf("%d",(int)(*arg++));
} else if(c=='o'){
if(ostring){
sprintf(ostring,"%o",(int)(*arg++));
ostring+=strlen(ostring);
}else if(ofile)
fprintf(ofile,"%o",(int)(*arg++));
else printf("%o",(int)(*arg++));
} else if(c=='s'){
if(ostring){
strcpy(ostring,(char *)(*arg++));
ostring += strlen(ostring);
} else if (ofile)
fprintf(ofile,"%s",(char *)(*arg++));
else printf("%s",(char *)(*arg++));
} else if(c=='l'){
if(!listp(*arg)){
if(emptyp(*arg)) sputs("empty");
else if(stringp(*arg) && !nump(*arg))
putc1('\"');
}
fty1(*arg++);
} else if(c=='p') {
if(!stringp(*arg)) {
*arg=stringform(*arg);
sputs((*arg)->obstr);
mfree(*arg);
} else sputs((*arg)->obstr);
arg++;
}
else putc1(c);
}
else putc1(c);
}
#ifdef DEBUG
memtrace = omemt;
#endif
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.