show info with i key
[cnoor.git] / cnoor.c
blob22171d6182ebf78b3cace04507870f0f846be2d0
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 int 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 char name[128];
59 struct txtwin *tw;
60 struct quran *quran;
61 struct quran *trans = NULL;
62 sprintf(name, "%d(%s)", sura, sura_name(sura));
63 tw = txtwin_alloc(name);
64 quran = quran_alloc(QURAN_PATH);
65 if (TRANS_PATH)
66 trans = quran_alloc(TRANS_PATH);
67 set_tags(tw);
68 ins_sura(tw, quran, trans, sura);
69 txtwin_loop(tw);
70 txtwin_free(tw);
71 if (trans)
72 quran_free(trans);
73 quran_free(quran);
74 return 0;
77 int main(int argc, char **argv)
79 int sura;
80 if (argc == 1 || !strcmp(argv[1], "-h")) {
81 printf("usage: %s sura_number\n", argv[0]);
82 return 0;
84 sura = atoi(argv[1]);
85 if (sura <= 0 || sura > 114) {
86 fprintf(stderr, "cnoor: invalid sura number\n");
87 return 1;
89 txtwin_gtk_init(argc, argv);
90 show(sura);
91 return 0;