Xinu7/contrib/distodt/src/support.c
/*
* support.c - Support routines for reading the machines database
*
* Author: Steve Chapin/Jim Griffioen
* Dept. of Computer Sciences
* Purdue University
* Date: Fri Jun 10 11:33:19 1988
*
* Copyright (c) 1988 Steve Chapin/Jim Griffioen
*/
#include <stdio.h>
#include <sys/file.h>
#include "../h/bed.h"
#include "../h/bedata.h"
struct odtdata **table, *entry;
int size, cnt;
/*
*---------------------------------------------------------------------------
* readodtdata(ptbl, pnum):
* struct odtdata ***ptbl;
* int *pnum;
*
* will fill the table from the machines database, and then
* will return the table and count of entries read.
*---------------------------------------------------------------------------
*/
struct odtdata **readodtdata(ptbl, pnum)
struct odtdata ***ptbl;
int *pnum;
{
int ifd, savefd, pos;
savefd = dup(0);
if (savefd < 0) {
perror("readodtdata()");
exit(1);
}
if ((ifd = open(IN_FILE, O_RDONLY, 0644)) < 0) {
perror(IN_FILE);
exit(1);
}
if (dup2(ifd, 0) < 0) {
perror("readodtdata() : dup2(ifd, 0)");
exit(1);
}
if (!(table = (struct odtdata **)
malloc(size * sizeof (struct odtdata *)))) {
fprintf(stderr, "Not enough memory for data table.\n");
exit(1);
}
yyparse();
if (dup2(savefd, 0) < 0) {
perror("readodtdata() : dup2(savefd, 0)");
exit(1);
}
*pnum = cnt;
*ptbl = (cnt > 0) ? table : NULL;
close(ifd);
}
/*
*---------------------------------------------------------------------------
* char *newsb(sb)
* char *sb;
*
* makes a new string and copies in the contents of the arg.
*---------------------------------------------------------------------------
*/
char *newsb(sb)
char *sb;
{
char *sb2 = (char *) malloc(strlen(sb) + 1);
strcpy(sb2, sb);
return(sb2);
}
/*
*---------------------------------------------------------------------------
* struct odtdata *makeodt(sb1, sb2, ..., sb8)
* char *sb1, ..., *sb8;
*
* takes the 8 strings it is handed and makes an odt table
* entry from them. Order is this:
*
* sline = sb1;
* bename = sb2;
* dload = sb3;
* betype = sb4;
* dloadpath = sb5;
* baud = sb6;
* class = sb7;
* odttype = sb8;
*---------------------------------------------------------------------------
*/
struct odtdata *makeodt(sb1, sb2, sb3, sb4, sb5, sb6, sb7, sb8)
char *sb1, *sb2, *sb3, *sb4, *sb5, *sb6, *sb7, *sb8;
{
struct odtdata *podtent = (struct odtdata *) malloc(sizeof(struct odtdata));
podtent->sline = sb1;
podtent->bename = sb2;
podtent->dload = sb3;
podtent->betype = sb4;
podtent->dloadpath = sb5;
podtent->baud = sb6;
podtent->class = sb7;
podtent->odttype = sb8;
return(podtent);
}
/*----------------------------------------------------------------------
* getbeconfig - returns a pointer to the odtdata structure
* for backend bename
*----------------------------------------------------------------------
*/
struct odtdata *getbeconfig(beconfig, becount, bename)
struct odtdata *beconfig[]; /* config status of all bends */
int becount; /* number of backends */
char *bename; /* backend name to look for */
{
struct odtdata *bedata; /* be odtdata pointer */
int i; /* counter variable */
for (i=0; i<becount; i++) {
bedata = beconfig[i];
if (strcmp(bedata->bename, bename) == 0) {
return(bedata); /* we found it */
}
}
return(NULL); /* did not find it */
}