quran: add sura names and remove enum sajda
[cnoor.git] / cnoor.c
blob36c9a41ae010896e49d35817453dfd715dd17ce0
1 /*
2 * cnoor - a small framebuffer/GTK+ Quran viewer
4 * Copyright (C) 2009-2011 Ali Gholami Rudi
6 * This program is released under GNU GPL version 2.
7 */
8 #include <ctype.h>
9 #include <stdlib.h>
10 #include <stdio.h>
11 #include <string.h>
12 #include "config.h"
13 #include "txtwin.h"
14 #include "quran.h"
15 #include "util.h"
17 static void ins_sura(struct txtwin *tw, struct quran *quran,
18 struct quran *trans, int sura)
20 char buf[16 * 1024];
21 int start = sura_start(sura);
22 int ayas = sura_ayas(sura);
23 int i;
24 for (i = 0; i < ayas; i++) {
25 int juz = juz_start(sura, i + 1);
26 enum sajda sajda = sajda_kind(sura, i + 1);
27 if (juz) {
28 sprintf(buf, "%d\n", juz);
29 txtwin_append(tw, buf, "juz");
31 quran_aya(quran, buf, LENGTH(buf), start + i);
32 txtwin_append(tw, buf, "quran");
33 sprintf(buf, " %d ", i + 1);
34 txtwin_append(tw, buf, "num");
35 if (sajda != SAJDA_NONE) {
36 char *s = sajda == SAJDA_RECOM ? "*" : "**";
37 txtwin_append(tw, s, "sajda");
39 if (trans) {
40 quran_aya(trans, buf, LENGTH(buf), start + i);
41 txtwin_append(tw, "\n", NULL);
42 txtwin_append(tw, buf, "trans");
44 txtwin_append(tw, "\n\n", NULL);
48 static void set_tags(struct txtwin *tw)
50 int i;
51 for (i = 0; i < LENGTH(styles); i++)
52 txtwin_tag(tw, styles[i].name, styles[i].fg,
53 styles[i].bg, styles[i].font);
56 int show(int sura)
58 struct txtwin *tw;
59 struct quran *quran;
60 struct quran *trans = NULL;
61 tw = txtwin_alloc();
62 quran = quran_alloc(QURAN_PATH);
63 if (TRANS_PATH)
64 trans = quran_alloc(TRANS_PATH);
65 set_tags(tw);
66 ins_sura(tw, quran, trans, sura);
67 txtwin_loop(tw);
68 txtwin_free(tw);
69 if (trans)
70 quran_free(trans);
71 quran_free(quran);
72 return 0;
75 int main(int argc, char **argv)
77 int sura;
78 if (argc == 1 || !strcmp(argv[1], "-h")) {
79 printf("usage: %s sura_number\n", argv[0]);
80 return 0;
82 sura = atoi(argv[1]);
83 if (sura <= 0 || sura > 114) {
84 fprintf(stderr, "cnoor: invalid sura number\n");
85 return 1;
87 txtwin_gtk_init(argc, argv);
88 show(sura);
89 return 0;