|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 5159 (0x1427) Types: TextFile Names: »parse.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/quipu/parse.c«
/* parse.c - */ #ifndef lint static char *rcsid = "$Header: /f/osi/quipu/RCS/parse.c,v 6.0 89/03/18 23:41:47 mrose Rel $"; #endif /* * $Header: /f/osi/quipu/RCS/parse.c,v 6.0 89/03/18 23:41:47 mrose Rel $ * * * $Log: parse.c,v $ * Revision 6.0 89/03/18 23:41:47 mrose * Release 5.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 "quipu/ds_error.h" #include "cmd_srch.h" #define PARSE_BUFFER 10000 static char parse_buffer [PARSE_BUFFER]; Entry getentry_block (file,p_parent,fname,check) FILE * file; Entry p_parent; char * fname; char check; { extern char * parse_file; extern int parse_status; extern int parse_line; Entry entryptr; int dtype; char *version; Entry get_entries_aux (); parse_status = 0; parse_line = 0; parse_file = fname; if (check) if (get_header (file,&dtype,&version) != OK) { parse_line = 0; parse_error ("File %s not loaded",fname); parse_file = NULLCP; return (NULLENTRY); } entryptr = get_entries_aux (file,p_parent,check,version,dtype); if (parse_status != 0) { parse_line = 0; parse_error ("File %s not loaded",fname); parse_file = NULLCP; 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; return (entryptr); } char * getline (file) FILE * file; { extern int parse_line; char * ptr; extern char * TidyString (); while ( fgets (parse_buffer,PARSE_BUFFER,file) != NULLCP) { parse_line++; ptr = SkipSpace (parse_buffer); if (*ptr != '#') return (TidyString(ptr)); } return (NULLCP); } 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 verison specified",NULLCP); return (NOTOK); } *versionptr = strdup (ptr); return (OK); } Attr_Sequence get_attributes_aux (file) FILE * file; { Attr_Sequence as = NULLATTR; char * ptr; if ((ptr = getline (file)) == NULLCP) return (NULLATTR); while ( *ptr != 0 ) { as = as_merge (as,str2as(ptr)); if ((ptr = getline (file)) == NULLCP) break; } return (as); } Attr_Sequence get_attributes (file) FILE * file; { extern int parse_status; extern int parse_line; parse_status = 0; parse_line = 0; return (get_attributes_aux (file)); } Entry get_entry_aux (file,parent,check,dtype) FILE * file; Entry parent; char check; int dtype; { Entry eptr; char * ptr; extern RDN parse_rdn; struct DSError err; extern int print_parse_errors; extern int parse_line; int save; extern PS opt; eptr = get_default_entry (parent); eptr->e_data = dtype; if ((ptr = getline (file)) == NULLCP) return (NULLENTRY); while (*ptr == 0) if ((ptr = getline (file)) == NULLCP) return (NULLENTRY); if ((eptr->e_name = str2rdn (ptr)) == NULLRDN) { parse_error ("invalid rdn %s",ptr); check = FALSE; } parse_rdn = eptr->e_name; eptr->e_attributes = get_attributes_aux (file); if (check) { save = parse_line; parse_line = 0; if (unravel_attribute (eptr,&err,FALSE) != OK) { parse_error ("Error in entry ending line %d...",(char *) save); if (print_parse_errors) ds_error (opt,&err); } if (check_schema (eptr,NULLATTR,&err,FALSE) != OK) { parse_error ("Schema error in entry ending line %d...",(char *) save); if (print_parse_errors) ds_error (opt,&err); } parse_line = save; } parse_rdn = NULLRDN; return (eptr); } Entry get_entry (file,parent,check,dtype) FILE * file; Entry parent; char check; int dtype; { extern int parse_status; extern int parse_line; parse_status = 0; parse_line = 0; return (get_entry_aux (file,parent,check,dtype)); } /* ARGSUSED */ Entry get_entries_aux (file,parent,check,version,dtype) FILE * file; Entry parent; char check; char * version; int dtype; { Entry eptr = NULLENTRY; Entry top = NULLENTRY; Entry trail; while (feof(file) == 0) { if ((eptr = get_entry_aux (file,parent,check,dtype)) == NULLENTRY) continue; if ( top == NULLENTRY) { top = eptr; trail = eptr; } else { trail->e_sibling = eptr; trail = eptr; } } return (top); } Entry get_entries (file,parent,check,version,dtype) FILE * file; Entry parent; char check; char * version; int dtype; { extern int parse_status; extern int parse_line; parse_status = 0; parse_line = 0; return (get_entries_aux (file,parent,check,version,dtype)); }