1 /*	hdb.c	1.1	(Berkeley) 83/07/09
2  *
3  * Copyright -C- 1982 Barry S. Roitblat
4  *
5  *      This file contains database routines for the hard copy programs of the
6  * gremlin picture editor.
7  */
8 
9 #include "gprint.h"
10 
11 
12 /* imports from c */
13 
14 extern char *malloc();
15 extern char *strcpy();
16 extern char *sprintf();
17 
18 /* imports from point.c */
19 
20 extern POINT *PTInit();
21 extern POINT *PTMakePoint();
22 
23 ELT *DBInit()
24 /*
25  *      This routine returns a pointer to an initialized database element
26  * which would be the only element in an empty list.
27  */
28 
29 {
30     return(NULL);
31 }  /* end DBInit */
32 
33 ELT *DBCreateElt(type, pointlist, brush, size, text, db)
34 int type, brush, size;
35 POINT *pointlist;
36 char *text;
37 ELT *(*db) ;
38 /*
39  *      This routine creates a new element with the specified attributes and
40  * links it into database.
41  */
42 
43 {
44     register ELT *temp;
45 
46     temp = (ELT *) malloc(sizeof(ELT));
47     temp->nextelt = *db;
48     temp->type = type;
49     temp->ptlist = pointlist;
50     temp->brushf = brush;
51     temp->size = size;
52     temp->textpt = text;
53     *db = temp;
54     return(temp);
55 } /* end CreateElt */
56 
57 ELT *DBRead(file, orient, pos)
58 register FILE *file;
59 int *orient;
60 POINT *pos;
61 /*
62  *      This routine reads the specified file into a database and
63  * returns a pointer to that database.  Orient and pos are also set
64  * from the file.
65  */
66 
67 {
68     register int i;
69     register int done;
70     ELT *elist;
71     POINT *plist;
72     char  string[100], *txt;
73     float x, y;
74     int len, type, brush, size;
75 
76     elist = DBInit();
77     (void) fscanf(file,"%s",string);
78     if (strcmp(string, "gremlinfile")) {
79         fprintf(stderr, "not gremlin file\n");
80         return(elist);
81     }
82     (void) fscanf(file, "%d%f%f", orient, &x, &y);
83     pos->x = x;
84     pos->y = y;
85 
86     done = FALSE;
87     while (!done) {
88         if (fscanf(file,"%d", &type) == EOF) {
89             fprintf(stderr, "error in file format\n");
90             return(elist);
91         }
92         if (type < 0) {		/* no more data */
93             done = TRUE;
94             (void) fclose(file);
95         } else {
96             (void) fscanf(file, "%f%f", &x, &y);
97             plist = PTInit();
98             while ((x != -1) && (y != -1)) { /* pointlist terminated by -1,-1 */
99                 (void) PTMakePoint(x, y, &plist);
100                 (void) fscanf(file, "%f%f", &x, &y);
101             }
102             (void) fscanf(file, "%d%d", &brush, &size);
103             (void) fscanf(file, "%d", &len);
104             txt = malloc((unsigned) len + 1);
105             (void) getc(file);        /* throw away space character */
106             for (i=0; i<len; ++i) {
107                 txt[i] = getc(file);
108 	    }
109             txt[len] = '\0';
110             (void) DBCreateElt(type, plist, brush, size, txt, &elist);
111         }  /* end else */
112     }  /* end while not done */;
113     return(elist);
114 } /* end DBRead */
115 
116