DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T p

⟦29817dd9a⟧ TextFile

    Length: 4426 (0x114a)
    Types: TextFile
    Names: »parse2.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« 
        └─⟦de7628f85⟧ 
            └─⟦this⟧ »isode-6.0/quipu/parse2.c« 

TextFile

/* parse2.c - */

#ifndef	lint
static char *rcsid = "$Header: /f/osi/quipu/RCS/parse2.c,v 7.2 90/01/11 18:37:23 mrose Exp $";
#endif

/* 
 * $Header: /f/osi/quipu/RCS/parse2.c,v 7.2 90/01/11 18:37:23 mrose Exp $
 *
 *
 * $Log:	parse2.c,v $
 * Revision 7.2  90/01/11  18:37:23  mrose
 * real-sync
 * 
 * Revision 7.1  89/12/19  16:20:42  mrose
 * sync
 * 
 * Revision 7.0  89/11/23  22:17:57  mrose
 * Release 6.0
 * 
 */

/*
 *				  NOTICE
 *
 *    Acquisition, use, and distribution of this module and related
 *    materials are subject to the restrictions of a license agreement.
 *    Consult the Preface in the User's Manual for the full terms of
 *    this agreement.
 *
 */

#include "quipu/util.h"
#include "quipu/entry.h"
#include "cmd_srch.h"

Entry getentry_block_aux (), get_entry_aux();
extern LLog * log_dsap;
char * getline ();
rdn_print ();
int master_edbs = 0;
int slave_edbs = 0;

Entry getentry_block (p_parent,fname)
Entry p_parent;
char * fname;
{
    return getentry_block_aux (p_parent,fname, fopen (fname, "r"));
}

Entry getentry_block_aux (p_parent,fname,file)
Entry p_parent;
char * fname;
FILE *file;
{
extern char * parse_file;
extern int parse_status;
extern int parse_line;
Entry entryptr;
int   dtype;
char *version;
Entry get_entries_aux ();
extern int errno;

	if (file == NULL) {
		LLOG (log_dsap,LLOG_NOTICE,("WARNING - Can't open \"%s\" (%d)- should I be able to ?",fname,errno));
		return (NULLENTRY);
	}

	LLOG (log_dsap,LLOG_NOTICE,("Loading \"%s\"",fname));

	parse_status = 0;
	parse_line   = 0;
	parse_file = fname;

	if (get_header (file,&dtype,&version) != OK) {
		parse_line = 0;
		parse_error ("File %s not loaded",fname);
		parse_file = NULLCP;
		(void) fclose (file);
		return (NULLENTRY);
	}

	entryptr = get_entries_aux (file,p_parent,version,dtype);

	if ((parse_status != 0) || (entryptr == NULLENTRY)) {
		parse_line = 0;
		parse_error ("File %s not loaded",fname);
		parse_file = NULLCP;
		(void) fclose (file);
		return (NULLENTRY);
	}

        if ( p_parent != NULLENTRY ) {
       	        p_parent->e_edbversion = version;
               	if ((dtype == E_DATA_MASTER) || (dtype == E_TYPE_SLAVE)) 
                       	p_parent->e_allchildrenpresent = TRUE;
       	}

	parse_file = NULLCP;

	if (dtype == E_DATA_MASTER)
		master_edbs++;
	if (dtype == E_TYPE_SLAVE)
		slave_edbs++;

	(void) fclose (file);
	return (entryptr);
}

get_header (file,typeptr,versionptr)
FILE * file;
int * typeptr;
char ** versionptr;
{
char * ptr;
static CMD_TABLE cmd_header [] = {
	"MASTER",	E_DATA_MASTER,
	"SLAVE",	E_TYPE_SLAVE,
	"CACHE",	E_TYPE_CACHE_FROM_MASTER,
	0,		-1,
	};

	if ((ptr = getline (file)) == NULLCP) {
		parse_error ("NULL file !!!",NULLCP);
		return (NOTOK);
	}

	if ((*typeptr = cmd_srch (ptr,cmd_header)) == -1) {
		parse_error ("File type %s not recognised",ptr);
		return (NOTOK);
	}

	if ((ptr = getline (file)) == NULLCP) {
		parse_error ("No version specified",NULLCP);
		return (NOTOK);
	}
	*versionptr = strdup (ptr);
	
	return (OK);
}


/* ARGSUSED */
Entry get_entries_aux (file,parent,version,dtype)
FILE * file;
Entry parent;
char * version;
int dtype;
{
Entry eptr = NULLENTRY;
Entry top = NULLENTRY;
Entry trail;
Entry find_sibling();

#ifdef TURBO_LOAD
	if ( ! turbo_start(file)) {
		parse_error ("Turbo load failed",NULLCP);
		return NULLENTRY;
	}
#endif

	while (feof(file) == 0) {
		if ((eptr = get_entry_aux (file,parent,dtype)) == NULLENTRY)
			continue;
		if ( top == NULLENTRY) {
			top = eptr;
			trail = eptr;
		} else {
#ifdef TURBO_LOAD
			if ( turbo_insert(eptr->e_name) != OK )
#else
                        if (find_sibling (eptr->e_name,top) != NULLENTRY)
#endif
			{
				pslog (log_dsap,LLOG_EXCEPTIONS,"Duplicate entry for",rdn_print,(caddr_t)eptr->e_name);
				parse_error ("Non Unique RDN",NULLCP);
			}
			trail->e_sibling = eptr;
			trail = eptr;
		}
	}

#ifdef TURBO_LOAD
	turbo_end();
#endif

	return (top);
}


Entry get_entries (file,parent,version,dtype)
FILE * file;
Entry parent;
char * version;
int dtype;
{
extern int parse_status;
extern int parse_line;

	parse_status = 0;
	parse_line   = 0;

	return (get_entries_aux (file,parent,version,dtype));
}

Entry find_sibling (object,start)
RDN object;
Entry start;
{
	if (start == NULLENTRY) 
		return (NULLENTRY);

	while (rdn_cmp (start->e_name, object) != OK) {
		start = start->e_sibling ;
		if ( start == NULLENTRY ) 
			return (NULLENTRY);
	}
	return (start);
}