|
|
1.1 root 1: /*
2: ** include file for memory manager routines
3: ** (c) 1988 Philip Zimmermann
4: */
5:
6: /* Elaborate protection mechanisms to assure no redefinitions of types...*/
7: #ifndef BYTESTUFF
8: #define BYTESTUFF
9: typedef unsigned char byte; /* values are 0-255 */
10: typedef byte *byteptr; /* pointer to byte */
11: typedef char *string; /* pointer to ASCII character string */
12: #endif /* if BYTESTUFF not already defined */
13: #ifndef WORDSTUFF
14: #define WORDSTUFF
15: typedef unsigned short word16; /* values are 0-65536 */
16: typedef unsigned long word32; /* values are 0-4294967296 */
17: #endif /* if WORDSTUFF not already defined */
18:
19: typedef byte *ptr; /* pointer type definition */
20:
21: #define nil (void *)0 /* nil pointer */
22: #ifndef NULL
23: #define NULL (void *)0 /* nil pointer--UNIX nomenclature */
24: #endif
25:
26: typedef unsigned short p_range; /* values are 0-65536 */
27: /* Note that the p_range type may be expanded to 32 bits
28: for larger partitions, if 64K is not big enough.
29: */
30:
31: /*
32: ** partsize - returns size of partition in bytes
33: ** Used to declare storage for a memory partition array of bytes.
34: ** Computed from the block size, the number of blocks, plus overhead.
35: */
36: /* alignptr operator aligns storage to ptr boundary */
37: #define alignptr(bsize) ( (((bsize)+sizeof(ptr)-1)/sizeof(ptr))*sizeof(ptr) )
38: /* partheadsize is overhead storage required for partition */
39: #define partheadsize alignptr(sizeof(ptr)+sizeof(short))
40: #define partsize(bsize,nblocks) (alignptr(bsize)*(nblocks)+partheadsize)
41:
42: void pcreat2(ptr part, word16 bsize, word16 nblocks);
43: /* Initialize a memory manager partition. */
44:
45: /* pcreate is similar to pcreat2, but with slightly different arguments. */
46: #define pcreate(part,psize,bsize) \
47: pcreat2(part,alignptr(bsize),(psize-partheadsize)/alignptr(bsize))
48:
49: #ifndef _NOMALLOC /* malloc library routine available */
50: ptr partalloc(word16 bsize, word16 nblocks);
51: /* Allocate and initialize a memory partition. */
52: #endif
53:
54: ptr gblock(register ptr part);
55: /* Get a memory block from partition. */
56:
57: ptr rblock(register ptr part, register ptr addr);
58: /* Release a memory block to partition. */
59:
60: #ifndef _NOPRINTF /* printf available */
61: void dumpfree(ptr part);
62: /* Dump partition free list in hex. */
63: #endif
64:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.