quran: don't use mmap()
[cnoor.git] / cnoor.c
blobde6e3a2e0ccb942630ccf66fa33f43232d0735f0
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 quran *quran, struct quran *trans, int sura)
19 char buf[16 * 1024];
20 int start = sura_start(sura);
21 int ayas = sura_ayas(sura);
22 int i;
23 for (i = 0; i < ayas; i++) {
24 int juz = juz_start(sura, i + 1);
25 int sajda = sajda_kind(sura, i + 1);
26 if (juz) {
27 sprintf(buf, "%d\n", juz);
28 txtwin_append(buf, "juz");
30 quran_aya(quran, buf, LENGTH(buf), start + i);
31 txtwin_append(buf, "quran");
32 sprintf(buf, " %d ", i + 1);
33 txtwin_append(buf, "num");
34 if (sajda != SAJDA_NONE) {
35 char *s = sajda == SAJDA_RECOM ? "*" : "**";
36 txtwin_append(s, "sajda");
38 if (trans) {
39 quran_aya(trans, buf, LENGTH(buf), start + i);
40 txtwin_append("\n", NULL);
41 txtwin_append(buf, "trans");
43 txtwin_append("\n\n", NULL);
47 static void set_tags(void)
49 int i;
50 for (i = 0; i < LENGTH(styles); i++)
51 txtwin_tag(styles[i].name, styles[i].fg,
52 styles[i].bg, styles[i].font);
55 int show(int sura)
57 char name[128];
58 struct quran *quran;
59 struct quran *trans = NULL;
60 sprintf(name, "%d(%s)", sura, sura_name(sura));
61 quran = quran_alloc(QURAN_PATH);
62 if (TRANS_PATH)
63 trans = quran_alloc(TRANS_PATH);
64 txtwin_init(name);
65 set_tags();
66 ins_sura(quran, trans, sura);
67 txtwin_loop();
68 txtwin_free();
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;