-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy patheclock.xdapp.c
More file actions
90 lines (78 loc) · 3.07 KB
/
eclock.xdapp.c
File metadata and controls
90 lines (78 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
* Copyright (c) 2018, Xdevelnet (xdevelnet at xdevelnet dot org)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <cdfel.c> // https://github.com/xdevelnet/cdfel
#include <time.h>
#include "webappconstants.h"
FCGX_Request request;
int writer_cb(void *buffer, unsigned long amount, void *aaa) {
FCGX_PutStr(buffer, amount, request.out);
return CDFEL_OK;
}
int hour_angle(int hours, int mins) {
if (hours >= 12) hours-= 12; // 0 .. 24 to 0 .. 12
return hours * 30 + mins / 2;
}
int mins_angle(int mins) {
return mins * 6;
}
int app(int success, int failure) {
CDFEL_INIT(rt, writer_cb);
time_t rawtime;
struct tm *timeinfo;
while (1) {
FCGX_Accept_r(&request);
time(&rawtime);
timeinfo = localtime(&rawtime);
int hangle = hour_angle(timeinfo->tm_hour, timeinfo->tm_min) - 90;
int mangle = mins_angle(timeinfo->tm_min) - 90;
CDFEL_RANGE(rt, pass_additional_headers, strizeof(pass_additional_headers));
CDFEL_RANGE(rt, p1, strizeof(p1));
CDFEL_SIGNED(rt, mangle);
CDFEL_RANGE(rt, p2, strizeof(p2));
CDFEL_SIGNED(rt, mangle);
CDFEL_RANGE(rt, p3, strizeof(p3));
CDFEL_SIGNED(rt, mangle);
CDFEL_RANGE(rt, p4, strizeof(p4));
CDFEL_SIGNED(rt, mangle);
CDFEL_RANGE(rt, p5, strizeof(p5));
CDFEL_SIGNED(rt, hangle);
CDFEL_RANGE(rt, p6, strizeof(p6));
CDFEL_SIGNED(rt, hangle);
CDFEL_RANGE(rt, p7, strizeof(p7));
CDFEL_SIGNED(rt, hangle);
CDFEL_RANGE(rt, p8, strizeof(p8));
CDFEL_SIGNED(rt, hangle);
CDFEL_RANGE(rt, p9, strizeof(p9));
CDFEL_SIGNED(rt, timeinfo->tm_hour);
CDFEL_CSTRING(rt, ":");
if (timeinfo->tm_min < 10) CDFEL_CSTRING(rt, "0");
CDFEL_SIGNED(rt, timeinfo->tm_min);
CDFEL_CSTRING(rt, ":");
if (timeinfo->tm_sec < 10) CDFEL_CSTRING(rt, "0");
CDFEL_SIGNED(rt, timeinfo->tm_sec);
CDFEL_RANGE(rt, p10, strizeof(p10));
CDFEL_DONE(rt);
FCGX_Finish_r(&request);
}
return success;
}