|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1890 (0x762)
Types: TextFile
Notes: UNIX file
Names: »alc.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦f4b8d8c84⟧ UNIX Filesystem
└─⟦this⟧ »cmd/tsort/alc.c«
#include <stdio.h>
#include <mdata.h>
#include "tsort.h"
#define BUMP 2048 /* twice minimum space to get from malloc */
/*
* Blockp is a pointer to a block of memory from which the
* various allocation routines will get memory. Blockc is
* the number of bytes left in the block. When these bytes
* are all used up, then malloc is called for BUMP more
* bytes. This save malloc from going over all the small
* blocks.
*/
static char *blockp;
static int blockc = 0;
/*
* Alloc functions exactly like malloc with two exceptions
* 1. It tries to get memory from blockp/blockc if
* possible.
* 2. It never returns NULL, but instead exits with
* an error message if there is no memory left.
*/
static char *
alloc(size)
register unsigned size;
{
register char *result;
char *malloc();
/*
* for alignment constraints.
*/
size += ALSTRUCT - 1;
size -= size % ALSTRUCT;
if (blockc >= size) {
blockc -= size;
result = blockp;
blockp += size;
return (result);
}
if (size < BUMP / 2) {
result = (char *)malloc(size + BUMP);
blockp = result + size;
blockc = BUMP;
} else
result = (char *)malloc(size);
if (result == NULL)
die("out of memory");
return (result);
}
/*
* Newword returns a pointer to a word with the ancestors
* field set to NULL and the name field set to "str".
*/
struct word *
newword(str)
register char *str;
{
register struct word *result;
result = (struct word *) alloc( sizeof(struct word));
result->name = alloc(strlen(str) + 1);
strcpy(result->name, str);
result->ancestors = NULL;
return (result);
}
/*
* Newwordl returns a pointer to a wordlist with the element
* field set to "wrd".
*/
struct wordlist *
newwordl(wrd)
register struct word *wrd;
{
register struct wordlist *result;
result = (struct wordlist *) alloc( sizeof(struct wordlist));
result->element = wrd;
return (result);
}