aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--configure.ac2
-rw-r--r--lib/.gitignore4
-rw-r--r--lib/Makefile.am15
-rw-r--r--lib/diag.c (renamed from src/diag.c)77
-rw-r--r--lib/forlan.c258
-rw-r--r--lib/forlan.h123
-rw-r--r--lib/forlangrm.y237
-rw-r--r--lib/forlanlex.l137
-rw-r--r--lib/libeclat.h33
-rw-r--r--src/Makefile.am1
-rw-r--r--src/cmdline.opt10
-rw-r--r--src/config.c2
-rw-r--r--src/eclat.c77
-rw-r--r--src/eclat.h19
-rw-r--r--src/error.c64
-rw-r--r--tests/.gitignore1
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/forlan01.at77
-rw-r--r--tests/testsuite.at4
-rw-r--r--tests/tforlan.c100
21 files changed, 1092 insertions, 155 deletions
diff --git a/NEWS b/NEWS
index a38e2aa..ebe5900 100644
--- a/NEWS
+++ b/NEWS
@@ -1,14 +1,14 @@
1Eclat NEWS -- history of user-visible changes. 2012-09-19 1Eclat NEWS -- history of user-visible changes. 2012-09-22
2Copyright (C) 2012 Sergey Poznyakoff 2Copyright (C) 2012 Sergey Poznyakoff
3See the end of file for copying conditions. 3See the end of file for copying conditions.
4 4
5Please send Eclat bug reports to <gray+eclat@gnu.org.ua> 5Please send Eclat bug reports to <gray+eclat@gnu.org.ua>
6 6
7 7
8No news is good news. 8Version 0.1 - No news is good news.
9 9
10========================================================================= 10=========================================================================
11Copyright information: 11Copyright information:
12 12
13Copyright (C) 2012 Sergey Poznyakoff 13Copyright (C) 2012 Sergey Poznyakoff
14 14
diff --git a/configure.ac b/configure.ac
index fd22d37..b0aba5e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,12 +24,14 @@ dnl AC_CONFIG_LIBOBJ_DIR([src])
24 24
25# Enable silent rules by default: 25# Enable silent rules by default:
26AM_SILENT_RULES([yes]) 26AM_SILENT_RULES([yes])
27 27
28# Checks for programs. 28# Checks for programs.
29AC_PROG_CC 29AC_PROG_CC
30AC_PROG_LEX
31AC_PROG_YACC
30AC_PROG_RANLIB 32AC_PROG_RANLIB
31 33
32# Checks for header files. 34# Checks for header files.
33AC_HEADER_STDC 35AC_HEADER_STDC
34AC_CHECK_HEADERS([getopt.h]) 36AC_CHECK_HEADERS([getopt.h])
35 37
diff --git a/lib/.gitignore b/lib/.gitignore
new file mode 100644
index 0000000..e0d9b22
--- /dev/null
+++ b/lib/.gitignore
@@ -0,0 +1,4 @@
1forlangrm.c
2forlangrm.h
3forlangrm.output
4forlanlex.c
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 2c1d3a8..50b28a5 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -15,12 +15,18 @@
15# along with Eclat. If not, see <http://www.gnu.org/licenses/>. 15# along with Eclat. If not, see <http://www.gnu.org/licenses/>.
16 16
17noinst_LIBRARIES=libeclat.a 17noinst_LIBRARIES=libeclat.a
18 18
19libeclat_a_SOURCES=\ 19libeclat_a_SOURCES=\
20 base64.c\ 20 base64.c\
21 diag.c\
22 forlan.c\
23 forlan.h\
24 forlangrm.h\
25 forlangrm.y\
26 forlanlex.l\
21 hmac_sha1.c\ 27 hmac_sha1.c\
22 libeclat.h\ 28 libeclat.h\
23 q2url.c\ 29 q2url.c\
24 qaddparm.c\ 30 qaddparm.c\
25 qcreat.c\ 31 qcreat.c\
26 qencode.c\ 32 qencode.c\
@@ -30,6 +36,15 @@ libeclat_a_SOURCES=\
30 sha1.h\ 36 sha1.h\
31 urlencode.c\ 37 urlencode.c\
32 xmltree.c 38 xmltree.c
33 39
34AM_LDFLAGS = $(CURL_LIBS) 40AM_LDFLAGS = $(CURL_LIBS)
35INCLUDES = -I$(top_srcdir)/grecs/src/ $(CURL_CFLAGS) 41INCLUDES = -I$(top_srcdir)/grecs/src/ $(CURL_CFLAGS)
42
43forlanlex.c: forlangrm.h
44forlangrm.c forlangrm.h: forlangrm.y
45
46AM_YFLAGS=-tdv
47AM_LFLAGS=-dvp
48
49
50
diff --git a/src/diag.c b/lib/diag.c
index 30ffa34..d061e9e 100644
--- a/src/diag.c
+++ b/lib/diag.c
@@ -11,18 +11,33 @@
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details. 12 GNU General Public License for more details.
13 13
14 You should have received a copy of the GNU General Public License 14 You should have received a copy of the GNU General Public License
15 along with Eclat. If not, see <http://www.gnu.org/licenses/>. */ 15 along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
16 16
17#include "eclat.h" 17#include "libeclat.h"
18#include <string.h>
19#include <sysexits.h>
18 20
19const char *program_name; 21const char *program_name;
22struct debug_category debug_category[LIBECLAT_DBG_MAX];
23int debug_avail;
20 24
21void 25void
22vdiag(grecs_locus_t const *locus, const char *qual, const char *fmt, va_list ap) 26set_program_name(const char *arg)
27{
28 program_name = strrchr(arg, '/');
29 if (!program_name)
30 program_name = arg;
31 else
32 program_name++;
33}
34
35void
36vdiag(grecs_locus_t const *locus, const char *qual, const char *fmt,
37 va_list ap)
23{ 38{
24 if (program_name) 39 if (program_name)
25 fprintf(stderr, "%s: ", program_name); 40 fprintf(stderr, "%s: ", program_name);
26 41
27 if (locus) { 42 if (locus) {
28 size_t size = 0; 43 size_t size = 0;
@@ -103,6 +118,64 @@ debug_printf(const char *fmt, ...)
103 va_list ap; 118 va_list ap;
104 119
105 va_start(ap, fmt); 120 va_start(ap, fmt);
106 vdiag(NULL, "debug", fmt, ap); 121 vdiag(NULL, "debug", fmt, ap);
107 va_end(ap); 122 va_end(ap);
108} 123}
124
125static struct debug_category *
126find_category(const char *arg, size_t len)
127{
128 struct debug_category *dp;
129
130 for (dp = debug_category; dp < debug_category + debug_avail; dp++)
131 if (dp->length == len && memcmp(dp->name, arg, len) == 0)
132 return dp;
133 return NULL;
134}
135
136int
137parse_debug_level(const char *arg)
138{
139 unsigned long lev;
140 char *p;
141 size_t len = strcspn(arg, ".");
142 struct debug_category *dp;
143
144 if (arg[len] == 0) {
145 lev = strtoul(arg, &p, 10);
146 if (*p)
147 return -1;
148 for (dp = debug_category; dp < debug_category + debug_avail;
149 dp++)
150 dp->level = lev;
151 return 0;
152 }
153
154 dp = find_category(arg, len);
155 if (!dp)
156 return -1;
157
158 p = (char*) arg + len;
159 if (*p == 0)
160 lev = 100;
161 else if (*p != '.')
162 return -1;
163 else {
164 lev = strtoul(p + 1, &p, 10);
165 if (*p)
166 return -1;
167 }
168 dp->level = lev;
169 return 0;
170}
171
172int
173debug_register(char *name)
174{
175 if (debug_avail >= LIBECLAT_DBG_MAX)
176 die(EX_SOFTWARE, "no more debug slots available");
177 debug_category[debug_avail].name = grecs_strdup(name);
178 debug_category[debug_avail].length = strlen(name);
179 debug_category[debug_avail].level = 0;
180 return debug_avail++;
181}
diff --git a/lib/forlan.c b/lib/forlan.c
new file mode 100644
index 0000000..0854d08
--- /dev/null
+++ b/lib/forlan.c
@@ -0,0 +1,258 @@
1/* This file is part of Eclat.
2 Copyright (C) 2012 Sergey Poznyakoff.
3
4 Eclat is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3, or (at your option)
7 any later version.
8
9 Eclat is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
16
17#include "libeclat.h"