static char sccsid
[] = "@(#)dc.c 4.3 (Berkeley) %G%";
register struct blk
*p
,*q
;
if(((c
= readc())>='0' && c
<= '9')|| (c
>='A' && c
<='F') || c
== '.'){
printf("all %ld rel %ld headmor %ld\n",all
,rel
,headmor
);
printf("nbytes %ld\n",nbytes
);
if(savk
>k
&& savk
>sk1
&& savk
>sk2
){
if(dscale() != 0)continue;
if(irem
!= 0)release(irem
);
if(dscale() != 0)continue;
p
= add0(rem
,skd
-(skr
+k
));
error("sqrt of neg number\n");
if(sunputc(arg1
) != 0)error("exp not an integer\n");
if(sfbeg(arg1
) == 0 && sbackc(arg1
)<0){
if((c
= sbackc(p
)) == 0)n
+= 1;
p
= copy(inbas
,length(inbas
)+1);
while(sfbeg(q
) == 0)l
= l
*100+sbackc(q
);
if((c
= sbackc(t
))>9)n
++;
p
= copy(basptr
,length(basptr
)+1);
if((c
= readc()) == ']'){
error("scale too big\n");
p
= copy(scalptr
,length(scalptr
)+1);
if(readptr
== &readstk
[0]){
if(*readptr
!= 0)release(*readptr
);
if(readptr
<= &readstk
[1])exit(0);
if(*readptr
!= 0)release(*readptr
);
if(*readptr
!= 0)release(*readptr
);
if(stkptr
== &stack
[0])printf("empty stack\n");
for(ptr
= stkptr
; ptr
> &stack
[0];){
if(stkptr
== &stack
[0])printf("empty stack\n");
if(stkerr
== 0)release(p
);
if(sfree
== 0)goto sempty
;
for(n
= 0;n
< PTRSZ
-1;n
++)sputc(q
,0);
error("symbol table overflow\n");
while(sfeof(p
) == 0)release(getwd(p
));
sptr
= stable
[c
] = sfree
;
if(sfree
== 0)goto sempty
;
if((sfbeg(q
) == 0) && ((c
= sbackc(q
))<0)){
error("index too big\n");
if(sfbeg(q
) == 0)c
= c
*100+sbackc(q
);
error("index too big\n");
sptr
= stable
[n
] = sfree
;
if(sfree
== 0)goto sempty
;
p
= salloc((c
+PTRSZ
)*PTRSZ
);
if(length(p
)-PTRSZ
< c
*PTRSZ
){
q
= copy(p
,(c
+PTRSZ
)*PTRSZ
);
if((sfbeg(q
) == 0) && ((c
= sbackc(q
))<0)){
error("index too big\n");
if(sfbeg(q
) == 0)c
= c
*100+sbackc(q
);
error("index too big\n");
if(length(p
)-PTRSZ
>= c
*PTRSZ
){
putwd(q
, (struct blk
*)0);
if((readptr
!= &readstk
[0]) && (*readptr
!= 0)){
if((*readptr
)->rd
== (*readptr
)->wt
)
if(readptr
++ == &readstk
[RDSKSZ
]){
error("nesting depth\n");
if((c
= readc()) != '\n')unreadc(c
);
if(++readptr
== &readstk
[RDSKSZ
]){
error("nesting depth\n");
while((c
= readc()) == '!')command();
while((c
= readc()) != '\n'){
if(c
== '\\')sputc(p
,readc());
if(command() == 1)goto execute
;
if(cond(c
) == 1)goto execute
;
printf("%o is unimplemented\n",c
);
struct blk
*ddivd
,*ddivr
;
int divsign
,remsign
,offset
,divcarry
;
int carry
, dig
,magic
,d
,dd
;
register struct blk
*p
,*divd
,*divr
;
errorrt("divide by 0\n");
divr
= copy(ddivr
,length(ddivr
));
divd
= copy(ddivd
,length(ddivd
));
if(sfbeg(divd
) == 0 && sbackc(divd
) == -1){
offset
= length(divd
) - length(divr
);
if(offset
< 0)goto ddone
;
c
= c
*100 + (sfbeg(divr
)?0:sbackc(divr
));
c
= (c
*100 +(sfbeg(divr
)?0:sbackc(divr
)))*2;
dd
= sfbeg(divd
)?0:sbackc(divd
);
dd
= sfbeg(divd
)?0:sbackc(divd
);
if(magic
!= 0)td
= td
<<3;
d
= sgetc(divr
)*dig
+carry
;
d
= d
-(sfeof(divxyz
)?0:sgetc(divxyz
))-carry
;
if(--offset
>= 0)divd
->wt
--;
if(divcarry
!= 0)salterc(p
,divcarry
);
if(sbackc(p
) == 0)truncate(p
);
if(divsign
< 0)chsign(p
);
if(sbackc(divd
) == 0)truncate(divd
);
if(remsign
<0)chsign(divd
);
if(divr
!= ddivr
)release(divr
);
register struct blk
*dd
,*dr
;
if(sfbeg(dr
) == 1 || (sfbeg(dr
) == 0 && sbackc(dr
) == 0)){
errorrt("divide by 0\n");
if(c
< 0)r
= removr(dd
,-c
);
register struct blk
*q
,*s
,*r
;
while(sfeof(p
) == 0)sputc(r
,sgetc(p
));
if(sfeof(rem
) == 0)sputc(q
,sgetc(rem
));
if((n
&1) != 1)c
= c
*100+(sfbeg(p
)?0:sbackc(p
));
while((c
-= nn
)>=0)nn
+=2;
nn
= sfbeg(t
)?0:sbackc(t
);
register struct blk
*r
,*e
,*p
;
p
= copy(base
,length(base
));
if(sfbeg(e
) != 0)goto edone
;
if((c
= length(base
)) == 0){
if((c
= sgetc(base
))<=1){
if (signal(SIGINT
, SIG_IGN
) != SIG_IGN
)
setbuf(stdout
,(char *)NULL
);
while(svargc
>0 && svargv
[1][0] == '-'){
if(svargc
<=0)curfile
= stdin
;
else if((curfile
= fopen(svargv
[1],"r")) == NULL
){
printf("can't open file %s\n",svargv
[1]);
stkbeg
= stkptr
= &stack
[0];
while(sptr
< &symlst
[TBLSZ
-1]){
while(readptr
!= &readstk
[0]){
if(*readptr
!= 0){release(*readptr
);}
printf("out of stack space\n");
register struct blk
*p
,*q
;
if(c
>= 'A' && c
<= 'F')c
= c
- 'A' + 10;
else if(c
>= '0' && c
<= '9')c
-= '0';
if(c
!= 0)sputc(chptr
,c
);
/* returns pointer to struct with ct 0's & p */
register struct blk
*q
,*t
;
q
= salloc(length(p
)+(ct
+1)/2);
register struct blk
*mp
,*mq
,*mr
;
mr
= salloc(length(mp
)+length(mq
));
mcr
= sfeof(mr
)?0:slookc(mr
);
mt
= cp
*cq
+ carry
+ mcr
;
mcr
= sfeof(mr
)?0:slookc(mr
);
if((readptr
!= &readstk
[0]) && (*readptr
!= 0)){
if(sfeof(*readptr
) == 0)return(lastchar
= sgetc(*readptr
));
lastchar
= getc(curfile
);
if(lastchar
!= EOF
)return(lastchar
);
if(readptr
!= &readptr
[0]){
if(*readptr
== 0)curfile
= stdin
;
if((readptr
!= &readstk
[0]) && (*readptr
!= 0)){
register struct blk
*p
,*q
,*dec
;
printf("%c",sgetc(hptr
));
p
= copy(hptr
,length(hptr
));
if((obase
== 0) || (obase
== -1)){
dout
= ((dig
/10) + dig
) /logo
;
while(sfbeg(strptr
) == 0)OUTC(sbackc(strptr
));
while(sfeof(strptr
) == 0)OUTC(sgetc(strptr
));
register struct blk
*q
,*t
,*s
;
s
= salloc(cc
= length(q
));
while(cc
-- > 0)sputc(s
,sgetc(t
));
while((sfbeg(p
) == 0) && ((p
->rd
-p
->beg
-1)*2 >= sc
)){
if((c
<10) && (f
== 1))printf("0%d",c
);
if((p
->rd
-p
->beg
)*2 > sc
){
if(sc
> (p
->rd
-p
->beg
)*2){
while(sc
>(p
->rd
-p
->beg
)*2){
printf("hex digit > 16");
sputc(strptr
,c
<10?c
+'0':c
-10+'A');
register struct blk
*t
,*q
;
if(flg
== 1)t
= salloc(0);
sputc(t
,sfeof(rem
)?'0':sgetc(rem
)+'0');
while(l
-- > 0)sputc(strptr
,'0');
while(sfbeg(t
) == 0)sputc(strptr
,sbackc(t
));
while(l
-- > 0)sputc(strptr
,'0');
size
= length(a1
)>length(a2
)?length(a1
):length(a2
);
n1
= sfeof(a1
)?0:sgetc(a1
);
n2
= sfeof(a2
)?0:sgetc(a2
);
if(carry
!= 0)sputc(p
,carry
);
while(sfbeg(p
) == 0 && (c
= sbackc(p
)) == 0);
if(sfbeg(p
) == 0 && sbackc(p
) == -1){
while((c
= sbackc(p
)) == 99){
register struct blk
*p
,*q
;
register struct blk
*q
,*r
;
while(sfeof(p
) == 0)sputc(q
,sgetc(p
));
register struct blk
*q
,*s
,*t
;
register (*savint
)(),pid
,rpid
;
while((c
= readc()) != '\n')*sl
++ = c
;
execl("/bin/sh","sh","-c",line
,0);
savint
= signal(SIGINT
, SIG_IGN
);
while((rpid
= wait(&retcode
)) != pid
&& rpid
!= -1);
if(subt() != 0)return(1);
if(c
== '<' || c
== '>' || c
== NE
){
if((cc
<0 && (c
== '<' || c
== NG
)) ||
(cc
>0) && (c
== '>' || c
== NL
)){
register struct blk
*p
,*q
;
if(s
== 0){putwd(q
, (struct blk
*)NULL
);}
register struct blk
*hdr
;
ptr
= malloc((unsigned)size
);
if((ptr
= malloc((unsigned)size
)) == 0)
if((hdr
= hfree
) == 0)hdr
= morehd();
hfree
= (struct blk
*)hdr
->rd
;
hdr
->rd
= hdr
->wt
= hdr
->beg
= ptr
;
register struct blk
*h
,*kk
;
hfree
= h
= (struct blk
*)malloc(HEADSZ
);
if((hfree
= h
= (struct blk
*)malloc(HEADSZ
)) == 0)
while(h
<hfree
+(HEADSZ
/BLK
))(h
++)->rd
= (char *)++kk
;
register struct blk
*hdr
;
ptr
= nalloc(hptr
->beg
, (unsigned)size
);
if((ptr
= nalloc(hptr
->beg
, (unsigned)size
)) == NULL
){
printf("copy size %d\n",size
);
if((hdr
= hfree
) == 0)hdr
= morehd();
hfree
= (struct blk
*)hdr
->rd
;
hdr
->rd
= hdr
->beg
= ptr
;
while(ptr
<hdr
->last
)*ptr
++ = '\0';
printf("%s %o rd %o wt %o beg %o last %o\n",s1
,hptr
,hptr
->rd
,hptr
->wt
,hptr
->beg
,hptr
->last
);
while(p
< hptr
->wt
)printf("%d ",*p
++);
nbytes
+= nn
- hptr
->last
;
p
= realloc(hptr
->beg
, (unsigned)n
);
hptr
->beg
= realloc(hptr
->beg
, (unsigned)(hptr
->last
-hptr
->beg
));
if((p
= realloc(hptr
->beg
, (unsigned)n
)) == 0)
hptr
->wt
= hptr
->last
= hptr
->rd
= p
+n
;
if(nn
>hptr
->wt
)hptr
->wt
= nn
;
if(hptr
->rdw
== hptr
->lastw
)more(hptr
);
if(hptr
->rdw
> hptr
->wtw
)hptr
->wtw
= hptr
->rdw
;
if((size
=(hptr
->last
-hptr
->beg
)*2) == 0)size
=1;
p
= realloc(hptr
->beg
, (unsigned)size
);
hptr
->beg
= realloc(hptr
->beg
, (unsigned)(hptr
->last
-hptr
->beg
));
if((p
= realloc(hptr
->beg
,(unsigned)size
)) == 0)
hptr
->rd
= hptr
->rd
-hptr
->beg
+p
;
hptr
->wt
= hptr
->wt
-hptr
->beg
+p
;
printf("out of space: %s\n",s
);
printf("all %ld rel %ld headmor %ld\n",all
,rel
,headmor
);
printf("nbytes %ld\n",nbytes
);
/* printf("got to garbage %s\n",s); */
if(((int)p
->beg
& 01) != 0){
while((q
= getwd(p
)) != NULL
){
if(((int)q
->beg
& 01) != 0){
printf("array %o elt %d odd\n",i
-ARRAYST
,ct
);
printf("tmps %o p %o\n",tmps
,p
);
printf("odd ptr %o hdr %o\n",p
->beg
,p
);
newp
= realloc(p
->beg
, (unsigned)(p
->last
-p
->beg
));
if(newp
== NULL
)ospace("redef");
nbytes
-= p
->last
- p
->beg
;
register struct wblk
*wp
;
register struct wblk
*wp
;
if (wp
->wtw
== wp
->lastw
)
register struct wblk
*wp
;