xref: /csrg-svn/usr.bin/tn3270/api/astosc.c (revision 31245)
1 #include <ctype.h>
2 
3 #include "../general/general.h"
4 
5 #include "../ctlr/function.h"
6 
7 #include "astosc.h"
8 #include "state.h"
9 
10 struct astosc astosc[256] = {
11 #include "astosc.out"
12 };
13 
14 /* compare two strings, ignoring case */
15 
16 static
17 ustrcmp(string1, string2)
18 register char *string1;
19 register char *string2;
20 {
21     register int c1, c2;
22 
23     while ((c1 = (unsigned char) *string1++) != 0) {
24 	if (isupper(c1)) {
25 	    c1 = tolower(c1);
26 	}
27 	if (isupper(c2 = (unsigned char) *string2++)) {
28 	    c2 = tolower(c2);
29 	}
30 	if (c1 < c2) {
31 	    return(-1);
32 	} else if (c1 > c2) {
33 	    return(1);
34 	}
35     }
36     if (*string2) {
37 	return(-1);
38     } else {
39 	return(0);
40     }
41 }
42 
43 
44 /*
45  * This routine takes a string and returns an integer.  It may return
46  * STATE_NULL if there is no other integer which corresponds to the
47  * string.  STATE_NULL implies an error.
48  */
49 
50 int
51 ascii_to_index(string)
52 register char *string;
53 {
54     register struct astosc *this;
55 
56     for (this = astosc; this <= &astosc[highestof(astosc)]; this++) {
57 	if (ustrcmp(this->name, string) == 0) {
58 	    return this-astosc;
59 	}
60     }
61     return STATE_NULL;
62 }
63