Ausam/sys/sysd/source/proc5.c
/* other routines */
#include "proc.h"
getuser(uid)
int uid;
{
static struct pwent pe;
pe.pw_uid=uid;
if(getpwlog(&pe, wkbuf, sizeof wkbuf) <= 0)
return("unknown");
return(wkbuf);
}
bomb()
{
/* signal handler
*
* at present just flush with message
*
*/
crash("unexpected termination. output flushed");
}
ttydecode(ttyp)
int *ttyp;
{
printf("ttydecode was passed %o\n", ttyp);
printf("this routine is not yet implemented\n\n");
}
idecode(adr)
char *adr;
{
printf("idecode passd %o\n", adr);
printf("this routine not yet implemented\n");
}
filedecode(adr)
char *adr;
{
printf("filedecode passed %o\n", adr);
printf("this routine not yet implemented\n");
}
textdecode(tp)
unsigned tp;
{
/*
* decode the contents of the text stucture pointed to by tp
*/
register int q;
int te;
struct symbol *sp;
printf(T_PTAB, "Text structure____ _________\n\n");
if(capfflg)
odump(tp, sizeof text[0]);
sp = albin("_text\0\0\0");
te = (tp - sp->s_symval) / sizeof text[0];
if((te < 0) || (te >= NTEXT))
{
printf(T_PTAB, "\"p_textp\" was %u (%o) and bounds are %u (%o) to %u (%o)\n",
tp, tp, sp->s_symval, sp->s_symval,
(sp->s_symval + sizeof text[0] * NTEXT),
(sp->s_symval + sizeof text[0] * NTEXT));
warn("text pointer out of range");
}
printf(T_PTAB, "This structure is element %d of the text array\n",
te);
DEBUG
printf("seek to text array entry");
seek(corefd, tp, 0);
DEBUG
printf("successfully and read it into text\n");
if(read(corefd, text, sizeof text[0]) < 0)
crash("cannont read text area");
if(text[0].x_daddr)
{
/* is on disc */
if(infree(swapmap, (text[0].x_size + 7) >> 3, text[0].x_daddr))
warn("text area in free swap space");
}
if(text[0].x_ccount)
{
/* in core */
if(infree(coremap, text[0].x_size, text[0].x_caddr))
warn("text area in free core");
}
#ifdef SHARED_DATA | LOWER_TEXT_SWAPS
printf(T_PTAB, "\"x_flag\" says text area was ");
if(text[0].x_flag)
{
/* there is something here */
for(q=0; q<NOTFLAG; q++)
{
if((text[0].x_flag >> q) &01)
{
printf("%s", tflag[q]);
text[0].x_flag =& ~(1<<q);
}
}
printf("\n");
}
else
{
printf("normal;\n");
}
if(text[0].x_flag)
{
printf(T_PTAB, "\"x_flag\" is %u (%o)\n",
text[0].x_flag, text[0].x_flag);
warn("unknown text area flag");
}
#endif SHARED_DATA | LOWER_TEXT_SWAPS
printf(T_PTAB, "Disc address \"x_daddr\" is %u (%o), and original inode of prototype \"x_iptr\" is at %u (%o)\n",
text[0].x_daddr, text[0].x_daddr, text[0].x_iptr, text[0].x_iptr);
printf(T_PTAB, "There are \"x_count\" %d (%o) references to the area of size \"x_size\" %d (%o)\n",
text[0].x_count, text[0].x_count, text[0].x_size, text[0].x_size);
printf(T_PTAB, "The core address \"x_caddr\" is %u (%o), and there are \"x_ccount\" %d (%o) loaded references\n",
text[0].x_caddr, text[0].x_caddr, text[0].x_ccount, text[0].x_ccount);
#ifdef SHARED_DATA
printf(T_PTAB, "Shared data inode is at \"x_spid\" %u (%o)\n",
text[0].x_spid, text[0].x_spid);
#endif SHARED_DATA
printf("\n");
}
treedecode(ptr)
int ptr;
{
printf("treedecode passed %o\nnot yet implemented\n\n", ptr);
}
getmap()
{
/*
* read in the coremap and swapmap
*/
register struct symbol *rp;
register unsigned lb;
register struct map *mp;
int i;
DEBUG
printf("into getmap ok\n");
seek(corefd, (rp=albin("_coremap"))->s_symval, 0);
if(read(corefd, coremap, sizeof coremap) != sizeof coremap)
crash("cant read coremap");
DEBUG
{
for(i=0; i<200; i++)
printf("coremap[%d] = %o\n",i, coremap[i]);
}
seek(corefd, (rp=albin("_swapmap"))->s_symval, 0);
if(read(corefd, swapmap, sizeof swapmap) != sizeof swapmap)
crash("cant read swapmap");
DEBUG
{
for(i=0; i<400; i++)
printf("swapmap[%d] = %o\n",i, swapmap[i]);
}
/*
* if necessary output maps
*/
if(capcflg)
{
/* coremap */
DEBUG
printf("output coremap\n");
printf("\n\nCoremap_______ values *64 bytes\n\n");
printf("%10tArea%50tDisposition\n\n");
for(lb = 0, mp = coremap; mp->m_size; mp++)
{
if(lb != mp->m_addr)
printf("%7o - %7o%50tallocated\n",
lb, mp->m_addr);
printf("%7o - %7o%50tfree\n",
mp->m_addr, mp->m_addr + mp->m_size);
lb = mp->m_addr + mp->m_size;
}
if(lb != MAXMEM)
printf("%7o - %7o%50tallocated\n",
lb, MAXMEM);
}
if(capsflg)
{
/* swapmap */
DEBUG
printf("output swapmap\n");
printf("\n\nSwapmap_______ values *64 bytes\n\n");
printf("%10tArea%50tDisposition\n\n");
for(lb = MINSWAP, mp = swapmap; mp->m_size; mp++)
{
if(lb != mp->m_addr)
printf("%7o - %7o%50tallocated\n",
lb, mp->m_addr);
printf("%7o - %7o%50tfree\n",
mp->m_addr, mp->m_addr + mp->m_size);
lb = mp->m_addr + mp->m_size;
}
if(lb != MAXSWAP)
printf("%7o - %7o%50tallocated\n",
lb, MAXSWAP);
}
}
infree(mp, size, addr)
unsigned size, addr;
struct map *mp;
{
register struct map *bp;
/* find bp: bp[-1].m_addr <= addr < bp[0].m_addr */
for(bp=mp; bp->m_size && bp->m_addr <= addr; bp++);
if( bp > mp && (bp-1)->m_addr + (bp-1)->m_size > addr)
return(1);
if(bp->m_size && bp->m_addr < addr + size)
return(1);
return(0);
}
putregs()
{
printf("\n\nLow Core Words and Registers are\n\n");
printf("word0 = %7u (%7o)\n\n", regs.r_word0, regs.r_word0);
printf("word1 = %7u (%7o)\n\n", regs.r_word1, regs.r_word1);
printf("r0 = %7u (%7o)\n\n", regs.r_reg[0], regs.r_reg[0]);
printf("r1 = %7u (%7o)\n\n", regs.r_reg[1], regs.r_reg[1]);
printf("r2 = %7u (%7o)\n\n", regs.r_reg[2], regs.r_reg[2]);
printf("r3 = %7u (%7o)\n\n", regs.r_reg[3], regs.r_reg[3]);
printf("r4 = %7u (%7o)\n\n", regs.r_reg[4], regs.r_reg[4]);
printf("r5 = %7u (%7o)\n\n", regs.r_reg[5], regs.r_reg[5]);
printf("sp = %7u (%7o)\n\n", regs.r_reg[6], regs.r_reg[6]);
printf("pc = %7u (%7o)\n\n", regs.r_reg[7], regs.r_reg[7]);
printf("kdsa6 = %7u (%7o)\n\n", regs.r_kisa6, regs.r_kisa6);
#ifdef BIG_UNIX
printf("kisa5 = %7u (%7o)\n\n", regs.r_kisa5, regs.r_kisa5);
#endif BIG_UNIX
}