|
|
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.