10 static char abuf
[1 << 16];
15 static int aya_offset(int fd
, int aya
)
18 if (aaya
> aya
|| apos
== -1) {
23 read(fd
, abuf
, sizeof(abuf
));
26 while (!(s
= memchr(abuf
+ acur
, '\n', sizeof(abuf
) - acur
))) {
30 read(fd
, abuf
, sizeof(abuf
));
38 struct quran
*quran_alloc(char *path
)
40 struct quran
*quran
= xmalloc(sizeof(struct quran
));
42 memset(quran
, 0, sizeof(quran
));
43 quran
->fd
= open(path
, O_RDONLY
);
46 for (i
= 0; i
< NAYA
+ 1; i
++)
47 quran
->ayas
[i
] = aya_offset(quran
->fd
, i
);
51 void quran_aya(struct quran
*quran
, char *buf
, int len
, int aya
)
54 if (quran
->ayas
[aya
] + len
> quran
->ayas
[aya
+ 1])
55 len
= quran
->ayas
[aya
+ 1] - quran
->ayas
[aya
] - 1;
56 lseek(quran
->fd
, quran
->ayas
[aya
], 0);
57 n
= read(quran
->fd
, buf
, len
);
58 while (n
> 0 && (buf
[n
- 1] == '\r' || buf
[n
- 1] == '\n'))
63 void quran_free(struct quran
*quran
)
73 {"Al-Faatiha", 7}, {"Al-Baqara", 286}, {"Aal-i-Imraan", 200},
74 {"An-Nisaa", 176}, {"Al-Maaida", 120}, {"Al-An'aam", 165},
75 {"Al-A'raaf", 206}, {"Al-Anfaal", 75}, {"At-Tawba", 129},
76 {"Yunus", 109}, {"Hud", 123}, {"Yusuf", 111},
77 {"Ar-Ra'd", 43}, {"Ibrahim", 52}, {"Al-Hijr", 99},
78 {"An-Nahl", 128}, {"Al-Israa", 111}, {"Al-Kahf", 110},
79 {"Maryam", 98}, {"Taa-Haa", 135}, {"Al-Anbiyaa", 112},
80 {"Al-Hajj", 78}, {"Al-Muminoon", 118}, {"An-Noor", 64},
81 {"Al-Furqaan", 77}, {"Ash-Shu'araa", 227}, {"An-Naml", 93},
82 {"Al-Qasas", 88}, {"Al-Ankaboot", 69}, {"Ar-Room", 60},
83 {"Luqman", 34}, {"As-Sajda", 30}, {"Al-Ahzaab", 73},
84 {"Saba", 54}, {"Faatir", 45}, {"Yaseen", 83},
85 {"As-Saaffaat", 182}, {"Saad", 88}, {"Az-Zumar", 75},
86 {"Al-Ghaafir", 85}, {"Fussilat", 54}, {"Ash-Shura", 53},
87 {"Az-Zukhruf", 89}, {"Ad-Dukhaan", 59}, {"Al-Jaathiya", 37},
88 {"Al-Ahqaf", 35}, {"Muhammad", 38}, {"Al-Fath", 29},
89 {"Al-Hujuraat", 18}, {"Qaaf", 45}, {"Adh-Dhaariyat", 60},
90 {"At-Tur", 49}, {"An-Najm", 62}, {"Al-Qamar", 55},
91 {"Ar-Rahmaan", 78}, {"Al-Waaqia", 96}, {"Al-Hadid", 29},
92 {"Al-Mujaadila", 22}, {"Al-Hashr", 24}, {"Al-Mumtahana", 13},
93 {"As-Saff", 14}, {"Al-Jumu'a", 11}, {"Al-Munaafiqoon", 11},
94 {"At-Taghaabun", 18}, {"At-Talaaq", 12}, {"At-Tahrim", 12},
95 {"Al-Mulk", 30}, {"Al-Qalam", 52}, {"Al-Haaqqa", 52},
96 {"Al-Ma'aarij", 44}, {"Nooh", 28}, {"Al-Jinn", 28},
97 {"Al-Muzzammil", 20}, {"Al-Muddaththir", 56}, {"Al-Qiyaama", 40},
98 {"Al-Insaan", 31}, {"Al-Mursalaat", 50}, {"An-Naba", 40},
99 {"An-Naazi'aat", 46}, {"Abasa", 42}, {"At-Takwir", 29},
100 {"Al-Infitaar", 19}, {"Al-Mutaffifin", 36}, {"Al-Inshiqaaq", 25},
101 {"Al-Burooj", 22}, {"At-Taariq", 17}, {"Al-A'laa", 19},
102 {"Al-Ghaashiya", 26}, {"Al-Fajr", 30}, {"Al-Balad", 20},
103 {"Ash-Shams", 15}, {"Al-Lail", 21}, {"Ad-Dhuhaa", 11},
104 {"Ash-Sharh", 8}, {"At-Tin", 8}, {"Al-Alaq", 19},
105 {"Al-Qadr", 5}, {"Al-Bayyina", 8}, {"Az-Zalzala", 8},
106 {"Al-Aadiyaat", 11}, {"Al-Qaari'a", 11}, {"At-Takaathur", 8},
107 {"Al-Asr", 3}, {"Al-Humaza", 9}, {"Al-Fil", 5},
108 {"Quraish", 4}, {"Al-Maa'un", 7}, {"Al-Kawthar", 3},
109 {"Al-Kaafiroon", 6}, {"An-Nasr", 3}, {"Al-Masad", 5},
110 {"Al-Ikhlaas", 4}, {"Al-Falaq", 5}, {"An-Naas", 6}
113 int sura_ayas(int sura
)
115 return suras
[sura
- 1].ayas
;
118 char *sura_name(int sura
)
120 return suras
[sura
- 1].name
;
123 int sura_start(int sura
)
127 for (i
= 0; i
< sura
- 1; i
++)
132 int aya_num(int sura
, int aya
)
134 return sura_start(sura
) + aya
;
137 #define AYAHASH(sura, aya) (((sura) << 10) | (aya))
139 int juz_start(int sura
, int aya
)
141 switch (AYAHASH(sura
, aya
)) {
144 case AYAHASH(2, 142):
146 case AYAHASH(2, 253):
152 case AYAHASH(4, 148):
156 case AYAHASH(6, 111):
166 case AYAHASH(12, 53):
172 case AYAHASH(18, 75):
178 case AYAHASH(25, 21):
180 case AYAHASH(27, 56):
182 case AYAHASH(29, 46):
184 case AYAHASH(33, 31):
186 case AYAHASH(36, 28):
188 case AYAHASH(39, 32):
190 case AYAHASH(41, 47):
194 case AYAHASH(51, 31):
206 int sajda_kind(int sura
, int aya
)
208 switch (AYAHASH(sura
, aya
)) {
209 case AYAHASH(7, 206):
211 case AYAHASH(13, 15):
213 case AYAHASH(16, 50):
215 case AYAHASH(17, 109):
217 case AYAHASH(19, 58):
219 case AYAHASH(22, 18):
221 case AYAHASH(22, 77):
223 case AYAHASH(25, 60):
225 case AYAHASH(27, 26):
227 case AYAHASH(32, 15):
229 case AYAHASH(38, 24):
231 case AYAHASH(41, 38):
233 case AYAHASH(53, 62):
235 case AYAHASH(84, 21):
237 case AYAHASH(96, 19):