* *.[ch]: Whitespace changes -- added space after SCM_VALIDATE_*
[bpt/guile.git] / libguile / strorder.c
CommitLineData
78a0461a 1/* Copyright (C) 1995, 1996, 1999 Free Software Foundation, Inc.
0f2d19dd
JB
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2, or (at your option)
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; see the file COPYING. If not, write to
82892bed
JB
15 * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
16 * Boston, MA 02111-1307 USA
0f2d19dd
JB
17 *
18 * As a special exception, the Free Software Foundation gives permission
19 * for additional uses of the text contained in its release of GUILE.
20 *
21 * The exception is that, if you link the GUILE library with other files
22 * to produce an executable, this does not by itself cause the
23 * resulting executable to be covered by the GNU General Public License.
24 * Your use of that executable is in no way restricted on account of
25 * linking the GUILE library code into it.
26 *
27 * This exception does not however invalidate any other reasons why
28 * the executable file might be covered by the GNU General Public License.
29 *
30 * This exception applies only to the code released by the
31 * Free Software Foundation under the name GUILE. If you copy
32 * code from other Free Software Foundation releases into a copy of
33 * GUILE, as the General Public License permits, the exception does
34 * not apply to the code that you add in this way. To avoid misleading
35 * anyone as to the status of such modified files, you must delete
36 * this exception notice from them.
37 *
38 * If you write modifications of your own for GUILE, it is your choice
39 * whether to permit this exception to apply to your modifications.
82892bed 40 * If you do not wish that, delete this exception notice. */
6e8d25a6
GB
41
42/* Software engineering face-lift by Greg J. Badros, 11-Dec-1999,
43 gjb@cs.washington.edu, http://www.cs.washington.edu/homes/gjb */
0f2d19dd
JB
44\f
45
46#include <stdio.h>
47#include "_scm.h"
20e6290e 48#include "chars.h"
0f2d19dd 49
6e8d25a6 50#include "scm_validate.h"
20e6290e 51#include "strorder.h"
0f2d19dd
JB
52\f
53
6e8d25a6
GB
54GUILE_PROC1 (scm_string_equal_p, "string=?", scm_tc7_rpsubr,
55 (SCM s1, SCM s2),
56"")
57#define FUNC_NAME s_scm_string_equal_p
0f2d19dd
JB
58{
59 register scm_sizet i;
dbe26481 60 register unsigned char *c1, *c2;
3b3b36dd
GB
61 SCM_VALIDATE_ROSTRING (1,s1);
62 SCM_VALIDATE_ROSTRING (2,s2);
0f2d19dd
JB
63
64 i = SCM_ROLENGTH (s2);
65 if (SCM_ROLENGTH (s1) != i)
66 {
67 return SCM_BOOL_F;
68 }
dbe26481
MD
69 c1 = SCM_ROUCHARS (s1);
70 c2 = SCM_ROUCHARS (s2);
0f2d19dd
JB
71 while (0 != i--)
72 if (*c1++ != *c2++)
73 return SCM_BOOL_F;
74 return SCM_BOOL_T;
75}
6e8d25a6 76#undef FUNC_NAME
0f2d19dd 77
6e8d25a6
GB
78GUILE_PROC1 (scm_string_ci_equal_p, "string-ci=?", scm_tc7_rpsubr,
79 (SCM s1, SCM s2),
80"")
81#define FUNC_NAME s_scm_string_ci_equal_p
0f2d19dd
JB
82{
83 register scm_sizet i;
84 register unsigned char *c1, *c2;
3b3b36dd
GB
85 SCM_VALIDATE_ROSTRING (1,s1);
86 SCM_VALIDATE_ROSTRING (2,s2);
6e8d25a6 87
0f2d19dd
JB
88 i = SCM_ROLENGTH (s2);
89 if (SCM_ROLENGTH (s1) != i)
90 {
91 return SCM_BOOL_F;
92 }
93 c1 = SCM_ROUCHARS (s1);
94 c2 = SCM_ROUCHARS (s2);
95 while (0 != i--)
96 if (scm_upcase(*c1++) != scm_upcase(*c2++))
97 return SCM_BOOL_F;
98 return SCM_BOOL_T;
99}
6e8d25a6 100#undef FUNC_NAME
0f2d19dd 101
6e8d25a6
GB
102GUILE_PROC1 (scm_string_less_p, "string<?", scm_tc7_rpsubr,
103 (SCM s1, SCM s2),
104"")
105#define FUNC_NAME s_scm_string_less_p
0f2d19dd
JB
106{
107 register scm_sizet i, len, s2len;
108 register unsigned char *c1, *c2;
109 register int c;
110
3b3b36dd
GB
111 SCM_VALIDATE_ROSTRING (1,s1);
112 SCM_VALIDATE_ROSTRING (2,s2);
0f2d19dd 113 len = SCM_ROLENGTH (s1);
dd054d41
MD
114 s2len = SCM_ROLENGTH (s2);
115 if (len>s2len) len = s2len;
0f2d19dd
JB
116 c1 = SCM_ROUCHARS (s1);
117 c2 = SCM_ROUCHARS (s2);
118
119 for (i = 0;i<len;i++) {
120 c = (*c1++ - *c2++);
121 if (c>0)
122 return SCM_BOOL_F;
123 if (c<0)
124 return SCM_BOOL_T;
125 }
126 {
127 SCM answer;
156dcb09 128 answer = SCM_BOOL(s2len != len);
0f2d19dd
JB
129 return answer;
130 }
131}
6e8d25a6 132#undef FUNC_NAME
0f2d19dd 133
6e8d25a6
GB
134GUILE_PROC1 (scm_string_leq_p, "string<=?", scm_tc7_rpsubr,
135 (SCM s1, SCM s2),
136"")
137#define FUNC_NAME s_scm_string_leq_p
0f2d19dd
JB
138{
139 return SCM_BOOL_NOT (scm_string_less_p (s2, s1));
140}
6e8d25a6 141#undef FUNC_NAME
0f2d19dd 142
6e8d25a6
GB
143GUILE_PROC1 (scm_string_gr_p, "string>?", scm_tc7_rpsubr,
144 (SCM s1, SCM s2),
145"")
146#define FUNC_NAME s_scm_string_gr_p
0f2d19dd
JB
147{
148 return scm_string_less_p (s2, s1);
149}
6e8d25a6 150#undef FUNC_NAME
0f2d19dd 151
6e8d25a6
GB
152GUILE_PROC1 (scm_string_geq_p, "string>=?", scm_tc7_rpsubr,
153 (SCM s1, SCM s2),
154"")
155#define FUNC_NAME s_scm_string_geq_p
0f2d19dd
JB
156{
157 return SCM_BOOL_NOT (scm_string_less_p (s1, s2));
158}
6e8d25a6 159#undef FUNC_NAME
0f2d19dd 160
6e8d25a6
GB
161GUILE_PROC1 (scm_string_ci_less_p, "string-ci<?", scm_tc7_rpsubr,
162 (SCM s1, SCM s2),
163"")
164#define FUNC_NAME s_scm_string_ci_less_p
0f2d19dd
JB
165{
166 register scm_sizet i, len, s2len;
167 register unsigned char *c1, *c2;
168 register int c;
3b3b36dd
GB
169 SCM_VALIDATE_ROSTRING (1,s1);
170 SCM_VALIDATE_ROSTRING (2,s2);
0f2d19dd 171 len = SCM_ROLENGTH (s1);
dd054d41
MD
172 s2len = SCM_ROLENGTH (s2);
173 if (len>s2len) len = s2len;
0f2d19dd
JB
174 c1 = SCM_ROUCHARS (s1);
175 c2 = SCM_ROUCHARS (s2);
176 for (i = 0;i<len;i++) {
177 c = (scm_upcase(*c1++) - scm_upcase(*c2++));
178 if (c>0) return SCM_BOOL_F;
179 if (c<0) return SCM_BOOL_T;
180 }
156dcb09 181 return SCM_BOOL(s2len != len);
0f2d19dd 182}
6e8d25a6 183#undef FUNC_NAME
0f2d19dd 184
6e8d25a6
GB
185GUILE_PROC1 (scm_string_ci_leq_p, "string-ci<=?", scm_tc7_rpsubr,
186 (SCM s1, SCM s2),
187"")
188#define FUNC_NAME s_scm_string_ci_leq_p
0f2d19dd
JB
189{
190 return SCM_BOOL_NOT (scm_string_ci_less_p (s2, s1));
191}
6e8d25a6 192#undef FUNC_NAME
0f2d19dd 193
6e8d25a6
GB
194GUILE_PROC1 (scm_string_ci_gr_p, "string-ci>?", scm_tc7_rpsubr,
195 (SCM s1, SCM s2),
196"")
197#define FUNC_NAME s_scm_string_ci_gr_p
0f2d19dd
JB
198{
199 return scm_string_ci_less_p (s2, s1);
200}
6e8d25a6 201#undef FUNC_NAME
0f2d19dd 202
6e8d25a6
GB
203GUILE_PROC1 (scm_string_ci_geq_p, "string-ci>=?", scm_tc7_rpsubr,
204 (SCM s1, SCM s2),
205"")
206#define FUNC_NAME s_scm_string_ci_geq_p
0f2d19dd
JB
207{
208 return SCM_BOOL_NOT (scm_string_ci_less_p (s1, s2));
209}
6e8d25a6 210#undef FUNC_NAME
0f2d19dd
JB
211
212\f
1cc91f1b 213
0f2d19dd
JB
214void
215scm_init_strorder ()
0f2d19dd
JB
216{
217#include "strorder.x"
218}
219