File:  [Research Unix] / researchv9 / jerq / sgs / libsdp / push_id.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:22:00 2018 UTC (8 years, 3 months ago) by root
Branches: belllabs, MAIN
CVS tags: researchv9-SUN3_old, researchv9-SUN3, HEAD
researchv9-SUN3(old)

static char ID[] = "@(#) push_id.c: 1.1 3/16/82";
#include "sdp.h"
#include "define3.h"

#ifdef SHORT
#define PU01	"PU01 "
#define PU02	"PU02 "
#else
#define PU01	"%s","PU01 -- error return from stk2search\n"
#define PU02	"%s","PU02 -- error return from fault\n"
#endif

extern FATAL() ;
extern struct LIBFILE *Glib_file ;
extern fault() ;
extern framesearch() ;
extern stk2search() ;

int					/* SUCCESS or ERROR */
push_id(sp,id,howmuch)
struct SPACE	*sp ;
ITEMID		id ;
unsigned	howmuch ;
{
	register int		frame ;
	register int		offset ;
	register int		stack ;
	register struct MANAGER	*manager ;
	register struct STAXINFO *pntr ;

	if(howmuch < sizeof(ITEMID)+sizeof(unsigned))
		return(SUCCESS) ;
	manager = (sp->environ)->manp ;

	if( (stack = stk2search(sp,howmuch)) == ERROR )
		ERR_RET(PU01,ERROR)

	if( (frame = framesearch(sp,id)) == NOTFOUND )
		frame = fault(sp,id) ;

	if(frame == ERROR)
		ERR_RET(PU02,ERROR)

	offset = id % (sp->environ)->frame_size ;
	pntr = (struct STAXINFO *)(manager[frame].frame_pntr + offset) ;
	pntr->top = sp->staxinfo[stack].top ;
	pntr->size = (long)howmuch ;
	sp->staxinfo[stack].top = id ;
	sp->staxinfo[stack].depth++  ;
	manager[frame].ref_chng = WRTN ;
	return(SUCCESS) ;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.