summaryrefslogtreecommitdiffstats
path: root/kdeprint/lpd/make_driver_db_lpd.c
diff options
context:
space:
mode:
Diffstat (limited to 'kdeprint/lpd/make_driver_db_lpd.c')
-rw-r--r--kdeprint/lpd/make_driver_db_lpd.c112
1 files changed, 112 insertions, 0 deletions
diff --git a/kdeprint/lpd/make_driver_db_lpd.c b/kdeprint/lpd/make_driver_db_lpd.c
new file mode 100644
index 000000000..e907dbf2c
--- /dev/null
+++ b/kdeprint/lpd/make_driver_db_lpd.c
@@ -0,0 +1,112 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+
+#include <config.h>
+
+#define BUFFER_SIZE 1024
+
+int parseRhsPrinterDb(const char *filename, FILE *out);
+
+int main(int argc, char *argv[])
+{
+ FILE *out;
+
+ if (argc != 3)
+ {
+ fprintf(stderr,"usage: make_driver_db_lpd <dbdirectory> <dbfilename>\n");
+ exit(-1);
+ }
+ out = fopen(argv[2],"w");
+ if (out == NULL)
+ {
+ fprintf(stderr,"Unable to open DB file: %s\n",argv[2]);
+ exit(-1);
+ }
+ /* first parse RHS driver DB */
+ if (!parseRhsPrinterDb("/usr/lib/rhs/rhs-printfilters/printerdb",out))
+ fprintf(stderr,"Unable to parse RHS DB file\n");
+ return 0;
+}
+
+char* skipSpaces(char *c)
+{
+ char *cc = c;
+ while (cc && *cc && isspace(*cc)) cc++;
+ return cc;
+}
+
+int parseRhsPrinterDb(const char *filename, FILE *out)
+{
+ FILE *in;
+ char buffer[BUFFER_SIZE], *c;
+
+ in = fopen(filename,"r");
+ if (in == NULL)
+ return 0;
+ while (fgets(buffer,BUFFER_SIZE,in))
+ {
+ c = skipSpaces(buffer); /* skip leading white spaces */
+ if (c == NULL || *c == '#') /* empty line or comment line */
+ continue;
+ if (strncmp(c,"StartEntry:",11) == 0) /* start a new entry */
+ {
+ fprintf(out,"\n");
+ fprintf(out,"FILE=%s\n",filename);
+ c = skipSpaces(c+11);
+ if (c)
+ fprintf(out,"MODELNAME=%s",c);
+ }
+ else if (strncmp(c,"Description:",12) == 0)
+ {
+ char *c1, *c2;
+ c1 = strchr(c+12,'{');
+ c2 = strchr(c+12,'}');
+ if (c1 && c2)
+ {
+ char model[BUFFER_SIZE], manuf[BUFFER_SIZE];
+ char *c3;
+
+ *c2 = 0;
+ c1++;
+ c3 = strchr(c1,' ');
+ if (c3)
+ {
+ *c3 = 0;
+ c3++;
+ strlcpy(manuf,c1, sizeof(manuf));
+ strlcpy(model,c3, sizeof(model));
+ }
+ else
+ {
+ strlcpy(model,c1, sizeof(model));
+ strlcpy(manuf,"PrintTool (RH)", sizeof(manuf));
+ }
+ fprintf(out,"MANUFACTURER=%s\n",manuf);
+ fprintf(out,"MODEL=%s\n",model);
+ fprintf(out,"DESCRIPTION=%s %s\n",manuf,model);
+ }
+ }
+ }
+ return 1;
+}