BSD 3 release
[unix-history] / usr / src / cmd / px / utilities.c
#include "stdio.h"
#include "h00vars.h"
#include "h01errs.h"
#include "h02opcs.h"
/*
* allocate a block of storage on the heap
*/
char *palloc(need)
long need;
{
extern char *malloc();
register char *memblk, *ptr;
memblk = malloc(need);
if (memblk == 0)
error(EOUTOFMEM);
if (memblk == (char *)(-1))
error(ETRASHHEAP);
for(ptr=memblk; ptr<memblk+need; ptr++)
*ptr = 0;
return(memblk);
}
/*
* Free a block of storage on the stack
*/
pfree(ptr)
char *ptr;
{
extern long free();
if (ptr == 0)
error(ENILPTR);
else if (free(ptr) == -1)
error(ETRASHHEAP);
}
\f
/*
* Constant set constructor (yechh!)
*/
#define sets int short
sets *pcttot(uprbp, lwrb, n, av)
int uprbp, lwrb, n;
sets av;
{
register int l, h;
register sets *set, *ap;
ap = &av;
set = &ap[2 * n];
while(--n >= 0) {
if ((l = *ap++ - lwrb) < 0 || l > uprbp ||
(h = *ap++ - lwrb) < 0 || h > uprbp)
error(ECTTOT);
while (l <= h) {
set[l >> 4] = set[l >> 4] | 1 << (l & 017);
l++;
}
}
return(set);
}
\f
char pd_date[] = {
8, 9, 10, 4, 5, 6, 10, 22, 23, 10, 0
};
char *ctime();
pdattim(op, alfap)
register char *alfap;
{
register char *ap, *cp, *dp;
long a;
int i;
time(&a);
cp = ctime(&a);
ap = alfap;
if (op == O_DATE)
for (dp = pd_date; *dp; *ap++ = cp[*dp++]);
else
for (cp = cp + 10, i = 10; i; *ap++ = *cp++, i--);
}
\f
psexit(code)
long code;
{
pmflush();
if (mode == PIX && nodump == 0) {
fputs("Execution terminated",stderr);
if (code)
fputs(" abnormally",stderr);
fputc('.',stderr);
fputc('\n',stderr);
}
stats();
exit(code);
}