]> git.mxchange.org Git - simgear.git/blob - simgear/metar/Charcmp.cpp
Patch from Erik Hofman:
[simgear.git] / simgear / metar / Charcmp.cpp
1 #include "Local.h"     /* standard header file */
2  
3 /********************************************************************/
4 /*                                                                  */
5 /*  Title:         charcmp                                          */
6 /*  Organization:  W/OSO242 - GRAPHICS AND DISPLAY SECTION          */
7 /*  Date:          12 Dec 1995                                      */
8 /*  Programmer:    CINDY L. CHONG                                   */
9 /*  Language:      C/370                                            */
10 /*                                                                  */
11 /*  Abstract:      This function will compare each character in the */
12 /*                 string match with each character in the pattern  */
13 /*                 which is made up of characters.   The str can    */
14 /*                 be longer than the pattern.                      */
15 /*                                                                  */
16 /*  External Functions Called:                                      */
17 /*                 None.                                            */
18 /*                                                                  */
19 /*  Input:         str is a pointer to char                         */
20 /*                 pattern is a pointer to char                     */
21 /*                                                                  */
22 /*  Output:        Return true if str matches pattern,              */
23 /*                 otherwise, return false                          */
24 /*                                                                  */
25 /*  Modification History:                                           */
26 /*                 None.                                            */
27 /*                                                                  */
28 /********************************************************************/
29  
30 bool charcmp(char *str, char *pattern)
31 {
32  
33  
34    /**********************************************************/
35    /* Loop while str and pattern is not equal to null, then  */
36    /* inscreases str and pattern by one                      */
37    /**********************************************************/
38  
39    for (; *pattern != '\0'; pattern++)
40    {
41       if (*str == '\0')
42          return FALSE;
43  
44       /************************************************************/
45       /* If pattern match str, then increase str and jump out the */
46       /* case and read next char of the str and pattern           */
47       /************************************************************/
48  
49       if ( isspace(*pattern) )
50          pattern = nxtalpha(pattern);
51  
52       switch( *pattern )
53       {
54          case 'c':
55             if ( !isalnum(*str++) )
56             {
57                return FALSE;
58             }
59             break;
60  
61          case 'a':
62             if ( !isalpha(*str) )
63             {
64                return FALSE;
65             }
66             str++;
67             break;
68  
69          case 'n':
70             if ( !iscntrl(*str++) )
71             {
72                return FALSE;
73             }
74             break;
75  
76          case 'd':
77             if ( !isdigit(*str) )
78             {
79                return FALSE;
80             }
81             str++;
82             break;
83  
84          case 'g':
85             if ( !isgraph(*str++) )
86             {
87                return FALSE;
88             }
89             break;
90  
91          case 'i':
92             if ( !islower(*str++) )
93             {
94                return FALSE;
95             }
96             break;
97  
98          case 'p':
99             if ( !isprint(*str++) )
100             {
101                return FALSE;
102             }
103             break;
104  
105          case 't':
106             if ( !ispunct(*str++) )
107             {
108                return FALSE;
109             }
110             break;
111  
112          case 'w':
113             if ( !isspace(*str++) )
114             {
115                return FALSE;
116             }
117             break;
118  
119          case 'u':
120             if ( !isupper(*str++) )
121             {
122                return FALSE;
123             }
124             break;
125  
126          case 's':
127             if (*str++ != ' ')
128             {
129                return FALSE;
130             }
131             break;
132  
133          case 'm':
134             if ( !isspace(*str) )
135             {
136                return FALSE;
137             }
138             else
139             {
140                while ( isspace(*str) )
141                   str++;
142             }
143             break;
144  
145          case '\'':
146             pattern++;
147             if (*pattern != *str)
148             {
149                return FALSE;
150             }
151             pattern++;
152             str++;
153             break;
154  
155          default:
156             return FALSE;
157  
158       } /* end switch */
159  
160    } /* end for */
161  
162    return (TRUE);
163 }