|
|
1.1 ! root 1: #include "univ.h" ! 2: ! 3: char **ICache; ! 4: Carte ***CCache; ! 5: Index I_SIZE, C_SIZE; ! 6: ! 7: void CacheOp(p) ! 8: Protocol p; ! 9: { ! 10: Index i; ! 11: register size; ! 12: register Carte *c; ! 13: register Index *rcv; ! 14: ! 15: i = RcvShort(); ! 16: switch( (int) p ){ ! 17: case P_I_DEFINE: ! 18: assert(!ICache); ! 19: I_SIZE = i; ! 20: ICache = (char **) Alloc(MJR(I_SIZE) * sizeof(char*) ); ! 21: break; ! 22: case P_C_DEFINE: ! 23: assert(!CCache); ! 24: C_SIZE = i; ! 25: CCache = (Carte***) Alloc(MJR(C_SIZE) * sizeof(Carte*) ); ! 26: break; ! 27: case P_I_CACHE: ! 28: if( !ICache[MJR(i)] ) GCAlloc(MNR(I_SIZE), &ICache[MJR(i)]); ! 29: RcvString( &ICache[MJR(i)][MNR(i)] ); ! 30: break; ! 31: case P_C_CACHE: ! 32: size = RcvUChar(); ! 33: if( !CCache[MJR(i)] ) CCache[MJR(i)] = ! 34: (Carte**) Alloc(MNR(C_SIZE) * sizeof(Carte*) ); ! 35: assert( !CCache[MJR(i)][MNR(i)] ); ! 36: c = (Carte*) GCAlloc(CARTESIZE(size), &CCache[MJR(i)][MNR(i)]); ! 37: c->attrib = RcvUChar(); ! 38: for( rcv = c->bin; size-- >= 0; *rcv++ = RcvShort()) {} ! 39: c->size = RcvUChar(); /* recursive size */ ! 40: c->width = RcvUChar(); /* recursive widest */ ! 41: break; ! 42: default: ! 43: ProtoErr( "CacheOp(): " ); ! 44: ! 45: } ! 46: } ! 47: ! 48: char *IndexToStr(i) ! 49: Index i; ! 50: { ! 51: assert( !(MJR(i)&CARTE) && ICache[MJR(i)] && MJR(i)<MJR(I_SIZE) ); ! 52: return &ICache[MJR(i)][MNR(i)]; ! 53: } ! 54: ! 55: Carte *IndexToCarte(i) ! 56: Index i; ! 57: { ! 58: assert( MJR(i)&CARTE ); ! 59: i &= ~(CARTE<<8); ! 60: assert(MJR(i)<MJR(C_SIZE) && CCache[MJR(i)] && CCache[MJR(i)][MNR(i)]); ! 61: return CCache[MJR(i)][MNR(i)]; ! 62: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.