xref: /original-bsd/usr.bin/tn3270/api/astosc.c (revision f1656be1)
1 /*
2  * Copyright (c) 1988 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of California at Berkeley. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  *
12  *	@(#)astosc.c	3.2 (Berkeley) 03/28/88
13  */
14 
15 #include <ctype.h>
16 
17 #include "../general/general.h"
18 
19 #include "../ctlr/function.h"
20 
21 #include "astosc.h"
22 
23 struct astosc astosc[256] = {
24 #include "astosc.out"
25 };
26 
27 /* compare two strings, ignoring case */
28 
29 static
30 ustrcmp(string1, string2)
31 register char *string1;
32 register char *string2;
33 {
34     register int c1, c2;
35 
36     while ((c1 = (unsigned char) *string1++) != 0) {
37 	if (isupper(c1)) {
38 	    c1 = tolower(c1);
39 	}
40 	if (isupper(c2 = (unsigned char) *string2++)) {
41 	    c2 = tolower(c2);
42 	}
43 	if (c1 < c2) {
44 	    return(-1);
45 	} else if (c1 > c2) {
46 	    return(1);
47 	}
48     }
49     if (*string2) {
50 	return(-1);
51     } else {
52 	return(0);
53     }
54 }
55 
56 
57 /*
58  * This routine takes a string and returns an integer.  It may return
59  * -1 if there is no other integer which corresponds to the
60  * string.  -1 implies an error.
61  */
62 
63 int
64 ascii_to_index(string)
65 register char *string;
66 {
67     register struct astosc *this;
68 
69     for (this = astosc; this <= &astosc[highestof(astosc)]; this++) {
70 	if ((this->name != 0) && (ustrcmp(this->name, string) == 0)) {
71 	    return this-astosc;
72 	}
73     }
74     return -1;
75 }
76