|
|
1.1 ! root 1: /******************************************************************* ! 2: * * ! 3: * File: CIFPLOT/alloc3.c * ! 4: * Written by Dan Fitzpatrick * ! 5: * copyright 1980 -- Regents of the University of California * ! 6: * * ! 7: ********************************************************************/ ! 8: ! 9: #include <stdio.h> ! 10: #include "defs.h" ! 11: #include "globals.h" ! 12: #include "parser_defs.h" ! 13: #include "structs.h" ! 14: #include "out_structs.h" ! 15: ! 16: IMPORT GetQueue(); ! 17: IMPORT PutQueue(); ! 18: IMPORT InitQueue(); ! 19: IMPORT sbrk(); ! 20: ! 21: ! 22: #define REQUESTSIZE 64 ! 23: ! 24: Queue FreeLItems,FreeLTrans,FreeLIEdges,FreeLDesc,FreeLComm,FreeLEdges; ! 25: Queue FreeLText,FreeHolders; ! 26: ! 27: int acnt0,acnt1,acnt2,acnt3,acnt4,acnt5,acnt6,acnt7,acnt8,acnt9; ! 28: int bcnt0,bcnt1,bcnt2,bcnt3,bcnt4,bcnt5,bcnt6,bcnt7,bcnt8,bcnt9; ! 29: ! 30: InitGet() ! 31: { ! 32: InitQueue(&FreeLItems); ! 33: InitQueue(&FreeLTrans); ! 34: InitQueue(&FreeLIEdges); ! 35: InitQueue(&FreeLEdges); ! 36: InitQueue(&FreeLDesc); ! 37: InitQueue(&FreeLComm); ! 38: InitQueue(&FreeLText); ! 39: InitQueue(&FreeHolders); ! 40: } ! 41: ! 42: int * ! 43: Get(q,n,id) ! 44: Queue *q; ! 45: int n,id; ! 46: { ! 47: int i,*d; ! 48: char *p; ! 49: #ifdef ADEBUG ! 50: switch(id) { ! 51: case 0x1234de5c: ! 52: acnt1++; ! 53: break; ! 54: case 0x1234ed9e: ! 55: acnt2++; ! 56: break; ! 57: case 0x1235ed9e: ! 58: acnt3++; ! 59: break; ! 60: case 0x123417e4: ! 61: acnt4++; ! 62: break; ! 63: case 0x123417e3: ! 64: acnt5++; ! 65: break; ! 66: case 0x12347ec7: ! 67: acnt6++; ! 68: break; ! 69: case 0x1234c033: ! 70: acnt7++; ! 71: break; ! 72: case 0x123477a8: ! 73: acnt8++; ! 74: break; ! 75: default: ! 76: acnt0++; ! 77: break; ! 78: } ! 79: #endif ! 80: ! 81: if((p=(char *) GetQueue(q)) == NIL) { ! 82: p = (char *) sbrk(REQUESTSIZE*(sizeof(int) + n)); ! 83: if(((int) p) <= 0) Error("No more memory",INTERNAL); ! 84: for(i=0; i < REQUESTSIZE * (sizeof(int) + n); i += (sizeof(int) + n)) ! 85: PutQueue(&(p[i]),q); ! 86: p = (char *) GetQueue(q); ! 87: } ! 88: d = (int *) p; ! 89: *d = id; ! 90: return(++d); ! 91: } ! 92: ! 93: nedge * ! 94: AllocHolder() ! 95: /* This is not handle by get because ID's are not used and ! 96: * storage is returned by concating onto the end of the queue */ ! 97: { ! 98: nedge *p; ! 99: int i; ! 100: ! 101: if((p = (nedge *) GetQueue(&FreeHolders)) == NIL) { ! 102: p = (nedge *) sbrk(REQUESTSIZE*sizeof(nedge)); ! 103: if(((int) p) <= 0) Error("No more memory",INTERNAL); ! 104: for(i=0; i<REQUESTSIZE; i++) { ! 105: PutQueue(&(p[i]),&FreeHolders); ! 106: } ! 107: p = (nedge *) GetQueue(&FreeHolders); ! 108: } ! 109: return(p); ! 110: } ! 111: ! 112: FreeGet(p,q,id) ! 113: int *p; ! 114: Queue *q; ! 115: int id; ! 116: { ! 117: #ifdef ADEBUG ! 118: switch(id) { ! 119: case 0x1234de5c: ! 120: bcnt1++; ! 121: break; ! 122: case 0x1234ed9e: ! 123: bcnt2++; ! 124: break; ! 125: case 0x1235ed9e: ! 126: bcnt3++; ! 127: break; ! 128: case 0x123417e4: ! 129: bcnt4++; ! 130: break; ! 131: case 0x123417e3: ! 132: bcnt5++; ! 133: break; ! 134: case 0x12347ec7: ! 135: bcnt6++; ! 136: break; ! 137: case 0x1234c033: ! 138: bcnt7++; ! 139: break; ! 140: case 0x123477a8: ! 141: bcnt8++; ! 142: break; ! 143: default: ! 144: bcnt0++; ! 145: break; ! 146: } ! 147: #endif ! 148: if(*(--p) != id) ! 149: Error("Bad ID number in Free",INTERNAL); ! 150: PutQueue(p,q); ! 151: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.