44a08dab1a0924c7296cf20bbcf9bd686353b80b
[gapil.git] / sources / BarCode.c
1 /* BarCode.c
2  * 
3  * Copyright (C) 2002 Simone Piccardi
4  * 
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or (at
8  * your option) any later version.
9  * 
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  * 
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */
19 /****************************************************************
20  *
21  * Program barcode 
22  * CGI for barcode generation
23  *
24  * Author: Simone Piccardi
25  * Jun. 2002
26  *
27  * Usage: cgi-bin for apache.
28  * Called by downloading something like:
29  * http://localhost/cgi-bin/barcode?string
30  * where string is the code to be converted
31  *
32  * $Id: BarCode.c,v 1.3 2002/06/23 22:03:28 piccardi Exp $ 
33  *
34  ****************************************************************/
35 /* 
36  * Include needed headers
37  */
38 #include <sys/types.h>   /* predefined types */
39 #include <sys/stat.h>    /* stat deinitiions */
40 #include <unistd.h>      /* include unix standard library */
41 /* */
42 #include <stdio.h>       /* include standard I/O library */
43 #include <stdlib.h>      /* include standard library */
44 #include <string.h>      /* include string library */
45 #include <wait.h>        /* include wait call */
46 #include <fcntl.h>
47 #include <assert.h>
48 #include <time.h>
49
50 #include"macros.h"
51 void WriteMess(char *mess);
52
53
54 /* Program begin */
55 int main(int argc, char *argv[], char *envp[])
56 {
57 /*
58  * Variables definition  
59  */
60     FILE *file1, *file2, *file3;
61     char content[]="Content-type: image/jpeg\n\n";
62     /* 
63      * Begin
64      */
65     /* write mime-type to stout */ 
66     write(STDOUT_FILENO, content, strlen(content));
67     /* convert PDF to JPEG */
68     file1 = popen("gs -q -sDEVICE=jpeg -sOutputFile=- -", "w");
69     /* convert EPS to PDF*/
70     dup2(fileno(file1), STDOUT_FILENO);  /* set epstopdf stdout to file1 */
71     file2 = popen("epstopdf --filter", "w");
72 //    file2 = popen("eps2eps", "w");
73     /* create barcode */
74     dup2(fileno(file2), STDOUT_FILENO);  /* set barcode stdout to file2 */
75     file3 = popen("barcode -E", "w");     
76     write(fileno(file3), argv[1], strlen(argv[1]));
77     exit(0);
78 }
79 /*
80  * Routine to produce an HTML error message on output 
81  */
82 void WriteMess(char *mess)
83 {
84     printf("Content-type: text/html\n\n");
85     perror(mess);
86     printf("<br>\n");
87 }