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