#include <libgen.h>
#include <cairo.h>
#include <cairo-ft.h>
-#include <cgic.h>
#ifndef CAIRO_HAS_PNG_FUNCTIONS
#error This program requires cairo with PNG support
#define TRUE (1==1)
#define FALSE (!TRUE)
+#if USE_CGIC
static cairo_status_t
stdio_write (void *closure, const unsigned char *data, unsigned int length);
+#endif
double
get_max_width (cairo_t *cr, char *characters);
get_max_height (cairo_t *cr, char *characters);
int
-cgiMain ()
+main (void)
{
+ const char font_filename[] = "/srv/rdworth.org/cgi-bin/Verdana.ttf";
char outputJson = FALSE;
char characters[] = {
int i;
/* QueryString */
- char fontname[20];
int fontsize;
char format[5];
char fillcolor[20];
+
+#if USE_CGIG
+ char fontname[20];
cgiFormStringNoNewlines("fontname", fontname, 20);
cgiFormInteger("fontsize", &fontsize, 50);
cgiFormStringNoNewlines("format", format, 5);
cgiFormStringNoNewlines("fillcolor", fillcolor, 20);
+#endif
int fillcolor_red;
int fillcolor_green;
if ( format[0] == 'j' && format[1] == 's' && format[2] == 'o' && format[3] == 'n' )
outputJson = TRUE;
+#if USE_CGIC
if (outputJson)
{
cgiHeaderContentType("application/json");
} else {
cgiHeaderContentType("image/png");
}
+#endif
int error;
FT_Library library;
FT_Vector kerning;
error = FT_Init_FreeType( &library );
- if ( error )
- printf("error");
+ if ( error ) {
+ fprintf (stderr, "Fatal error initializing freetype.\n");
+ exit (1);
+ }
- error = FT_New_Face( library,"/srv/rdworth.org/cgi-bin/Verdana.ttf",
+ error = FT_New_Face( library, font_filename,
0,
&ft_face );
- if ( error == FT_Err_Unknown_File_Format )
- printf("File opened. Font format unsupported.");
- else if ( error )
- printf("Could not be open or read or broken.");
+ if ( error == FT_Err_Unknown_File_Format ) {
+ fprintf (stderr, "Unsupported font format: %s\n", font_filename);
+ exit (1);
+ } else if ( error ) {
+ fprintf (stderr, "Failed to open file: %s\n", font_filename);
+ exit (1);
+ }
use_kerning = FT_HAS_KERNING( ft_face );
cairo_pattern_destroy (gradient);
*/
+
+#if USE_CGIC
if (outputJson)
{
printf("}");
} else {
cairo_surface_write_to_png_stream (surface, stdio_write, cgiOut);
}
+#endif
cairo_destroy (cr);
return 0;
}
+#if USE_CGIC
static cairo_status_t
stdio_write (void *closure, const unsigned char *data, unsigned int length)
{
else
return CAIRO_STATUS_WRITE_ERROR;
}
+#endif
double
get_max_width(cairo_t *cr, char *characters)