From: Ken Thompson Date: Sat, 24 Nov 1979 21:53:49 +0000 (-0800) Subject: BSD 3 development X-Git-Tag: BSD-3~649 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/a70c50dc73d964c605b7552f8ccd0871571678ef BSD 3 development Work on file usr/src/cmd/apl/a9.c Co-Authored-By: Ross Harvey Co-Authored-By: Douglas Lanam Synthesized-from: 3bsd --- diff --git a/usr/src/cmd/apl/a9.c b/usr/src/cmd/apl/a9.c new file mode 100644 index 0000000000..2185a9e5fa --- /dev/null +++ b/usr/src/cmd/apl/a9.c @@ -0,0 +1,193 @@ +#include "apl.h" + +ex_dibm() +{ +int inde, fsize; +char fname[128]; +register i; +register char *a, *b; + + inde = topfix(); + a = fetch1(); + if(a->type!=CH) { + if(a->size==0||a->size==1&&fuzz(*a->datap,0.0)==0) { + push(newdat(DA,1,0)); + switch(inde) { + case 1: + if(i=ifile) + close(i); + ifile = 0; + return; + case 2: + case 3: + if((i=ofile)&&i!=1) + close(i); + ofile = 1; + return; + default: + error("mibm D"); + } + } + error("mibm T"); + } + if(a->rank!=1) + error("dibm R"); + if(!(1<=a->size&&a->size<128)) + error("fnam L"); + fsize = a->size; + b = a->datap; + a = fname; + for(i=0; inxtblk!=-1) { + freesum += runthru->size; + runthru = runthru->nxtblk; + } + datum = freesum + runthru->size; + } + break; + + case 24: /* starting time */ + p = stime; + + tod: + p = localtime(p); + datum = 60.*(p[0]+60.*(p[1]+60.*p[2])); + break; + + case 25: /* date */ + time(t); + p = t; + goto dt; + + /* + * non standard I functions + */ + + case 28: /* starting date */ + p = stime; + + dt: + p = localtime(p); + datum = p[5]+100.*(p[3]+100.*(p[4]+1)); + break; + + case 29: /* iorg */ + datum = thread.iorg; + break; + + case 30: /* width */ + datum = thread.width; + break; + + case 31: /* digits */ + datum = thread.digits; + break; + + case 32: + { + int shellpid, oldsignal, termproc; + + oldsignal = signal(2, 1); + if(!(shellpid=fork())) + execl("/bin/csh","-",0); + else + while((termproc=wait(&termproc))!=-1) + if(termproc==shellpid) + break; + signal(2, oldsignal); + push(newdat(DA,1,0)); + return; + } + } + p = newdat(DA, 0, 1); + p->datap[0] = datum; + push(p); +}