source: libcaca/trunk/src/cacaclock.c @ 4778

Last change on this file since 4778 was 4778, checked in by Jean-Yves Lamoureux, 10 years ago
  • Removed unused variable
File size: 4.3 KB
Line 
1/*
2 *  cacaclock     Text-mode clock display
3 *  Copyright (c) 2011 Jean-Yves Lamoureux <jylam@lnxscene.org>
4 *                All Rights Reserved
5 *
6 *  This program is free software. It comes without any warranty, to
7 *  the extent permitted by applicable law. You can redistribute it
8 *  and/or modify it under the terms of the Do What The Fuck You Want
9 *  To Public License, Version 2, as published by Sam Hocevar. See
10 *  http://sam.zoy.org/wtfpl/COPYING for more details.
11 */
12
13#include "config.h"
14
15#if !defined(__KERNEL__)
16#   include <time.h>   
17#   include <stdio.h>
18#   include <string.h>
19#   include <stdlib.h>
20#endif
21
22#include "caca.h"
23
24#define CACACLOCKVERSION "0.1"
25
26static void usage(int argc, char **argv)
27{
28        fprintf(stderr, "Usage: %s [OPTIONS]... <IMAGE>\n", argv[0]);
29        fprintf(stderr, "Convert IMAGE to any text based available format.\n");
30        fprintf(stderr, "Example : %s -w 80 -f ansi ./caca.png\n\n", argv[0]);
31        fprintf(stderr, "Options:\n");
32        fprintf(stderr, "  -h, --help\t\t\tThis help\n");
33        fprintf(stderr, "  -v, --version\t\t\tVersion of the program\n");
34        fprintf(stderr, "  -f, --font=FONT\t\tUse FONT for time display\n");
35        fprintf(stderr, "  -d, --dateformat=FORMAT\tUse FORMAT as strftime argument (default %%R:%%S)\n");
36}
37
38
39static void version(void)
40{
41        printf(
42                        "cacaclock Copyright 2011 Jean-Yves Lamoureux\n"
43                        "Internet: <jylam@lnxscene.org> Version: %s (libcaca %s), date: %s\n"
44                        "\n"
45                        "cacaclock, along with its documentation, may be freely copied and distributed.\n"
46                        "\n"
47                        "The latest version of cacaclock is available from the web site,\n"
48                        "        http://caca.zoy.org/wiki/libcaca in the libcaca package.\n"
49                        "\n",
50                        CACACLOCKVERSION, caca_get_version(), __DATE__);
51}
52
53
54
55static char* get_date(char *format) {
56        time_t  currtime;                                                   
57        char *charTime = malloc(101);                                     
58
59        time(&currtime);                                                     
60        strftime(charTime, 100,format,localtime(&currtime));
61
62        return charTime;
63}
64
65int main(int argc, char *argv[]) {
66
67        caca_canvas_t *cv;
68        caca_canvas_t *figcv;
69        caca_display_t *dp;
70        uint32_t w, h, fw, fh;
71
72        char *format = "%R:%S";
73        char *font   = "/usr/share/figlet/mono12.tlf";
74
75
76        for(;;)
77        {
78                int option_index = 0;
79                static struct caca_option long_options[] =
80                {
81                        { "font",        1, NULL, 'f' },
82                        { "dateformat",  1, NULL, 'd' },
83                        { "help",        0, NULL, 'h' },
84                        { "version",     0, NULL, 'v' },
85                };
86                int c = caca_getopt(argc, argv, "f:d:hv",
87                                long_options, &option_index);
88                if(c == -1)
89                        break;
90
91                switch(c)
92                {
93                        case 'h': /* --help       */
94                                usage(argc, argv);
95                                return 0;
96                                break;
97                        case 'v': /* --version    */
98                                version();
99                                return 0;
100                                break;
101                        case 'f': /* --font       */
102                                font = caca_optarg;
103                                break;
104                        case 'd': /* --dateformat */
105                                format = caca_optarg;
106                                break;
107                        default:
108                                return 1;
109                                break;
110                }
111        }
112
113
114
115        cv = caca_create_canvas(0, 0);
116        figcv = caca_create_canvas(0, 0);
117        if(!cv || !figcv)
118        { 
119                fprintf(stderr, "%s: unable to initialise libcaca\n", argv[0]);
120                return 1;
121        }
122
123        if(caca_canvas_set_figfont(figcv, font))
124        { 
125                fprintf(stderr, "Could not open font\n");
126                return -1;
127        }
128
129
130        dp = caca_create_display(cv);
131        if(!dp) {
132                printf("Can't open window. CACA_DRIVER problem ?\n");
133                return -1;
134        }
135
136        caca_set_color_ansi(figcv, CACA_DEFAULT, CACA_DEFAULT);
137        caca_clear_canvas(cv);
138        for(;;) {
139                caca_event_t ev;
140
141                while(caca_get_event(dp, CACA_EVENT_KEY_PRESS
142                                        | CACA_EVENT_QUIT, &ev, 1))
143                { 
144                        if(caca_get_event_type(&ev))
145                                goto end;
146                }
147                char *d = get_date(format);
148                uint32_t o = 0;
149
150                // figfont API is not complete, and does not alloq us to put a string
151                // at another position than 0,0
152                // So, we have to create a canvas which will hold the figfont string,
153                // then blit this canvas to the main one at the desired position.
154                caca_clear_canvas(cv);
155                caca_clear_canvas(figcv);
156                while(d[o])
157                { 
158                        caca_put_figchar(figcv, d[o++]);
159                }
160                caca_flush_figlet (figcv);
161                fw = caca_get_canvas_width (figcv);
162                fh = caca_get_canvas_height(figcv);     
163
164                free(d);
165
166                w = caca_get_canvas_width (cv);
167                h = caca_get_canvas_height(cv);
168                uint32_t x = (w/2) - (fw/2);
169                uint32_t y = (h/2) - (fh/2);
170
171                caca_blit(cv, x, y, figcv, NULL);
172                caca_refresh_display(dp);
173                usleep(250000);
174        }
175end:
176
177        caca_free_canvas(figcv);
178        caca_free_canvas(cv);
179        caca_free_display(dp);
180
181        return 0;
182}
Note: See TracBrowser for help on using the repository browser.