Ref *ref = (Ref*)calloc(1, sizeof(Ref));
Ref *ref = typecalloc(Ref);
PRIVATE AddressDefList *parse_address_part ARGS1(FILE *, fp){    AddressDefList *address_def_list = NULL;    LexItem lex_item;    BOOL only_one = NO;    lex_item = lex(fp);    if (lex_item == LEX_ALPH_STR || lex_item == LEX_TMPL_STR)	only_one = YES;    else if (lex_item != LEX_OPEN_PAREN  ||	     ((lex_item = lex(fp)) != LEX_ALPH_STR &&	      lex_item != LEX_TMPL_STR)) {	syntax_error(fp, "Expecting a single address or '(' beginning list",		     lex_item);	return NULL;    }    address_def_list = HTList_new();    for(;;) {	Ref *ref = (Ref*)calloc(1, sizeof(Ref));	if (ref == NULL)	    outofmem(__FILE__, "parse_address_part");	ref->name = NULL;	ref->translation = NULL;	StrAllocCopy(ref->name, HTlex_buffer);	HTList_addObject(address_def_list, (void*)ref);	if (only_one || (lex_item = lex(fp)) != LEX_ITEM_SEP)	    break;	/*	** Here lex_item == LEX_ITEM_SEP; after item separator it	** is ok to have one or more newlines (LEX_REC_SEP) and	** they are ignored (continuation line).	*/	do {	    lex_item = lex(fp);	} while (lex_item == LEX_REC_SEP);	if (lex_item != LEX_ALPH_STR && lex_item != LEX_TMPL_STR) {	    syntax_error(fp, "Expecting an address template", lex_item);	    HTList_delete(address_def_list);	    address_def_list = NULL;	    return NULL;	}    }    if (!only_one && lex_item != LEX_CLOSE_PAREN) {	HTList_delete(address_def_list);	address_def_list = NULL;	syntax_error(fp, "Expecting ')' closing address list", lex_item);	return NULL;    }    return address_def_list;}