/*---------------------------------------------------------------------------* | PDFlib - A library for dynamically generating PDF files | +---------------------------------------------------------------------------+ | Copyright (c) 1997-1999 Thomas Merz. All rights reserved. | +---------------------------------------------------------------------------+ | This software is not in the public domain. It is subject to the | | "Aladdin Free Public License". See the file license.txt for details. | | This license grants you the right to use and redistribute PDFlib | | under certain conditions. Among other things, the license requires | | that the copyright notice and this notice be preserved on all copies. | | This requirement extends to ports to other programming languages. | | | | In short, you are allowed to develop and use PDFlib-based software | | as long as you don't sell it. Commercial use of PDFlib requires a | | commercial license which can be obtained from the author of PDFlib. | | Contact information can be found in the accompanying PDFlib manual. | | PDFlib is distributed with no warranty of any kind. Commercial users, | | however, will receive warranty and support statements in writing. | *---------------------------------------------------------------------------*/ /* pdfclock.c * * A little PDFlib application to draw an analog clock. * */ #include #include #include "pdflib.h" #define RADIUS 200.0 #define MARGIN 20.0 int main(int argc, char *argv[]) { PDF *p; float alpha; time_t timer; struct tm ltime; p = PDF_new(); if (PDF_open_file(p, "pdfclock_c.pdf") == -1) { fprintf(stderr, "Error: cannot open PDF file pdfclock_c.pdf.\n"); exit(2); } PDF_set_info(p, "Creator", "pdfclock.c"); PDF_set_info(p, "Author", "Thomas Merz"); PDF_set_info(p, "Title", "PDF clock (C)"); PDF_begin_page(p, (unsigned int) (2 * (RADIUS + MARGIN)), (unsigned int) (2 * (RADIUS + MARGIN))); PDF_translate(p, RADIUS + MARGIN, RADIUS + MARGIN); PDF_setrgbcolor(p, 0.0, 0.0, 1.0); PDF_save(p); /* minute strokes */ PDF_setlinewidth(p, 2.0); for (alpha = 0; alpha < 360; alpha += 6) { PDF_rotate(p, 6.0); PDF_moveto(p, RADIUS, 0.0); PDF_lineto(p, (float) (RADIUS-MARGIN/3), 0.0); PDF_stroke(p); } PDF_restore(p); PDF_save(p); /* 5 minute strokes */ PDF_setlinewidth(p, 3.0); for (alpha = 0; alpha < 360; alpha += 30) { PDF_rotate(p, 30.0); PDF_moveto(p, RADIUS, 0.0); PDF_lineto(p, RADIUS-MARGIN, 0.0); PDF_stroke(p); } time(&timer); ltime = *localtime(&timer); /* draw hour hand */ PDF_save(p); PDF_rotate(p, (float)(-((ltime.tm_min/60.0) + ltime.tm_hour - 3.0) * 30.0)); PDF_moveto(p, -RADIUS/10, -RADIUS/20); PDF_lineto(p, RADIUS/2, 0.0); PDF_lineto(p, -RADIUS/10, RADIUS/20); PDF_closepath(p); PDF_fill(p); PDF_restore(p); /* draw minute hand */ PDF_save(p); PDF_rotate(p, (float) (-((ltime.tm_sec/60.0) + ltime.tm_min - 15.0) * 6.0)); PDF_moveto(p, -RADIUS/10, -RADIUS/20); PDF_lineto(p, RADIUS * 0.8, 0.0); PDF_lineto(p, -RADIUS/10, RADIUS/20); PDF_closepath(p); PDF_fill(p); PDF_restore(p); /* draw second hand */ PDF_setrgbcolor(p, 1.0, 0.0, 0.0); PDF_setlinewidth(p, 2); PDF_save(p); PDF_rotate(p, (float) -((ltime.tm_sec - 15.0) * 6.0)); PDF_moveto(p, -RADIUS/5, 0.0); PDF_lineto(p, RADIUS, 0.0); PDF_stroke(p); PDF_restore(p); /* draw little circle at center */ PDF_circle(p, 0, 0, (float) RADIUS/30); PDF_fill(p); PDF_restore(p); PDF_end_page(p); PDF_close(p); PDF_delete(p); exit(0); }