|
|
1.1 root 1: static char ID[] = "@(#) push_id.c: 1.1 3/16/82";
2: #include "sdp.h"
3: #include "define3.h"
4:
5: #ifdef SHORT
6: #define PU01 "PU01 "
7: #define PU02 "PU02 "
8: #else
9: #define PU01 "%s","PU01 -- error return from stk2search\n"
10: #define PU02 "%s","PU02 -- error return from fault\n"
11: #endif
12:
13: extern FATAL() ;
14: extern struct LIBFILE *Glib_file ;
15: extern fault() ;
16: extern framesearch() ;
17: extern stk2search() ;
18:
19: int /* SUCCESS or ERROR */
20: push_id(sp,id,howmuch)
21: struct SPACE *sp ;
22: ITEMID id ;
23: unsigned howmuch ;
24: {
25: register int frame ;
26: register int offset ;
27: register int stack ;
28: register struct MANAGER *manager ;
29: register struct STAXINFO *pntr ;
30:
31: if(howmuch < sizeof(ITEMID)+sizeof(unsigned))
32: return(SUCCESS) ;
33: manager = (sp->environ)->manp ;
34:
35: if( (stack = stk2search(sp,howmuch)) == ERROR )
36: ERR_RET(PU01,ERROR)
37:
38: if( (frame = framesearch(sp,id)) == NOTFOUND )
39: frame = fault(sp,id) ;
40:
41: if(frame == ERROR)
42: ERR_RET(PU02,ERROR)
43:
44: offset = id % (sp->environ)->frame_size ;
45: pntr = (struct STAXINFO *)(manager[frame].frame_pntr + offset) ;
46: pntr->top = sp->staxinfo[stack].top ;
47: pntr->size = (long)howmuch ;
48: sp->staxinfo[stack].top = id ;
49: sp->staxinfo[stack].depth++ ;
50: manager[frame].ref_chng = WRTN ;
51: return(SUCCESS) ;
52: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.