Added various origin projects
[name-generation.git] / element-lists / names-2.0.1 / src / readdata.c
1 /* Names v2.01 Copyright 1995 by Michael Harvey */
2
3 #include <string.h>
4 #include <ctype.h>
5 #include "names.h"
6
7 #define BUF 256
8 char buf[BUF];
9
10 #ifdef TURBOC
11 #define strncasecmp(d,s,n) strnicmp(d,s,n)
12 #endif
13
14 char * label[6] =
15 {
16 "PRE","MID","SUF","NOUN","NADJ","ADJ"
17 };
18
19 char * strlwr(char *buf)
20 /* "string-lower": convert string to lower case */
21 {
22 char *p;
23
24 for (p=buf; *p; p++)
25 if (*p>='A' && *p<='Z')
26 *p += ('a'-'A');
27
28 return buf;
29 }
30
31 int findmode(char * buf)
32 {
33 int i;
34 for (i=0; i<NONE; i++)
35 {
36 if (strncasecmp(buf,label[i],strlen(label[i])) == 0)
37 return i;
38 }
39 dprint1("* findmode: unknown directive \"#%s\"\n",buf);
40 return NONE;
41 }
42
43 void addelem(int mode, char * buf)
44 {
45 char *p;
46
47 if (mode<0 || mode>=NONE)
48 {
49 dprint("* addelem: bad mode (%d)\n",mode);
50 return;
51 }
52
53 if (siz[mode] < DATASIZ)
54 {
55 dprint3(" addelem(%s)\n",buf);
56 p = strdup(buf);
57 if (p==NULL)
58 {
59 dprint("* addelem: strdup() failed\n");
60 }
61 else
62 {
63 data[mode][siz[mode]] = p;
64 siz[mode]++;
65 }
66 }
67 else dprint("* addelem: array full\n");
68 }
69
70 void readdata(FILE *inFile)
71 {
72 char *p;
73
74 int mode = NONE;
75
76 if (inFile)
77 {
78 while (fgets(buf, BUF, inFile) != NULL)
79 {
80 dprint3(" readdata: \"%s\"",buf);
81
82 if (cvt) strlwr(buf);
83
84 /* find end of string */
85 for(p=buf; *p; p++) ;
86
87 /* p now points to '\0' */
88 /* find last character */
89 --p;
90 while (p>buf && isspace(*p))
91 --p;
92 /* now we're on the last character */
93 if (!isspace(*p)) p++;
94 *p='\0';
95
96 *p=0;
97
98 if (*buf == '#')
99 mode = findmode(buf+1);
100 else
101 addelem(mode,buf);
102 }
103 }
104 else { dprint("Null FILE pointer in readdata()"); }
105 }
106