chiark / gitweb /
bible-kjv (4.28) unstable; urgency=low
[bible-kjv.git] / debian / randverse.c
1 /* 
2         Produce random bible verses
3                                         */
4
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include <stdio.h>
8 #include <string.h>
9 #include <sys/time.h>
10
11 typedef struct
12 {
13   char* t;
14   int n;
15   int *p;
16 } book ;
17
18 int main(int argc, char **argv)
19 {
20   int bkno, chno, vno, i;
21   int tv;
22   char cmd[32], opt[32] = "";
23   struct timeval t;
24   long int ii;
25
26   int genesis[50] = {31, 25, 24, 26, 32, 22, 24, 22, 29, 32, 32, 20, 18, 24, 21, 16, 27, 33, 38, 18, 34, 24, 20, 67, 34, 35, 46, 22, 35, 43, 55, 32, 20, 31, 29, 43, 36, 30, 23, 23, 57, 38, 34, 34, 28, 34, 31, 22, 33, 26};
27   
28   int exodus[40] = {22, 25, 22, 31, 23, 30, 25, 32, 35, 29, 10, 51, 22, 31, 27, 36, 16, 27, 25, 26, 36, 31, 33, 18, 40, 37, 21, 43, 46, 38, 18, 35, 23, 35, 35, 38, 29, 31, 43, 38};
29   
30   int leviticus[27] = {17, 16, 17, 35, 19, 30, 38, 36, 24, 20, 47, 8, 59, 57, 33, 34, 16, 30, 37, 27, 24, 33, 44, 23, 55, 46, 34};
31   
32   int numbers[36] = {54, 34, 51, 49, 31, 27, 89, 26, 23, 36, 35, 16, 33, 45, 41, 50, 13, 32, 22, 29, 35, 41, 30, 25, 18, 65, 23, 31, 40, 16, 54, 42, 56, 29, 34, 13};
33   
34   int deuteronomy[34] = {46, 37, 29, 49, 33, 25, 26, 20, 29, 22, 32, 32, 18, 29, 23, 22, 20, 22, 21, 20, 23, 30, 25, 22, 19, 19, 26, 68, 29, 20, 30, 52, 29, 12};
35   
36   int joshua[24] = {18, 24, 17, 24, 15, 27, 26, 35, 27, 43, 23, 24, 33, 15, 63, 10, 18, 28, 51, 9, 45, 34, 16, 33};
37   
38   int judges[21] = {36, 23, 31, 24, 31, 40, 25, 35, 57, 18, 40, 15, 25, 20, 20, 31, 13, 31, 30, 48, 25};
39   
40   int ruth[4] = {22, 23, 18, 22};
41   
42   int samuel1[31] = {28, 36, 21, 22, 12, 21, 17, 22, 27, 27, 15, 25, 23, 52, 35, 23, 58, 30, 24, 42, 15, 23, 29, 22, 44, 25, 12, 25, 11, 31, 13};
43   
44   int samuel2[24] = {27, 32, 39, 12, 25, 23, 29, 18, 13, 19, 27, 31, 39, 33, 37, 23, 29, 33, 43, 26, 22, 51, 39, 25};
45   
46   int kings1[22] = {53, 46, 28, 34, 18, 38, 51, 66, 28, 29, 43, 33, 34, 31, 34, 34, 24, 46, 21, 43, 29, 53};
47   
48   int kings2[25] = {18, 25, 27, 44, 27, 33, 20, 29, 37, 36, 21, 21, 25, 29, 38, 20, 41, 37, 37, 21, 26, 20, 37, 20, 30};
49   
50   int chronicles1[29] = {54, 55, 24, 43, 26, 81, 40, 40, 44, 14, 47, 40, 14, 17, 29, 43, 27, 17, 19, 8, 30, 19, 32, 31, 31, 32, 34, 21, 30};
51   
52   int chronicles2[36] = {17, 18, 17, 22, 14, 42, 22, 18, 31, 19, 23, 16, 22, 15, 19, 14, 19, 34, 11, 37, 20, 12, 21, 27, 28, 23, 9, 27, 36, 27, 21, 33, 25, 33, 27, 23};
53   
54   int ezra[10] = {11, 70, 13, 24, 17, 22, 28, 36, 15, 44};
55   
56   int nehemiah[13] = {11, 20, 32, 23, 19, 19, 73, 18, 38, 39, 36, 47, 31};
57   
58   int esther[10] = {22, 23, 15, 17, 14, 14, 10, 17, 32, 3};
59   
60   int job[42] = {22, 13, 26, 21, 27, 30, 21, 22, 35, 22, 20, 25, 28, 22, 35, 22, 16, 21, 29, 29, 34, 30, 17, 25, 6, 14, 23, 28, 25, 31, 40, 22, 33, 37, 16, 33, 24, 41, 30, 24, 34, 17};
61   
62   int psalms[150] = {6, 12, 8, 8, 12, 10, 17, 9, 20, 18, 7, 8, 6, 7, 5, 11, 15, 50, 14, 9, 13, 31, 6, 10, 22, 12, 14, 9, 11, 12, 24, 11, 22, 22, 28, 12, 40, 22, 13, 17, 13, 11, 5, 26, 17, 11, 9, 14, 20, 23, 19, 9, 6, 7, 23, 13, 11, 11, 17, 12, 8, 12, 11, 10, 13, 20, 7, 35, 36, 5, 24, 20, 28, 23, 10, 12, 20, 72, 13, 19, 16, 8, 18, 12, 13, 17, 7, 18, 52, 17, 16, 15, 5, 23, 11, 13, 12, 9, 9, 5, 8, 28, 22, 35, 45, 48, 43, 13, 31, 7, 10, 10, 9, 8, 18, 19, 2, 29, 176, 7, 8, 9, 4, 8, 5, 6, 5, 6, 8, 8, 3, 18, 3, 3, 21, 26, 9, 8, 24, 13, 10, 7, 12, 15, 21, 10, 20, 14, 9};
63   
64   int proverbs[31] = {33, 22, 35, 27, 23, 35, 27, 36, 18, 32, 31, 28, 25, 35, 33, 33, 28, 24, 29, 30, 31, 29, 35, 34, 28, 28, 27, 28, 27, 33, 31};
65   
66   int ecclesiastes[12] = {18, 26, 22, 16, 20, 12, 29, 17, 18, 20, 10, 14};
67   
68   int solomon[8] = {17, 17, 11, 16, 16, 13, 13, 14};
69   
70   int isaiah[66] = {31, 22, 26, 6, 30, 13, 25, 22, 21, 34, 16, 6, 22, 32, 9, 14, 14, 7, 25, 6, 17, 25, 18, 23, 12, 21, 13, 29, 24, 33, 9, 20, 24, 17, 10, 22, 38, 22, 8, 31, 29, 25, 28, 28, 25, 13, 15, 22, 26, 11, 23, 15, 12, 17, 13, 12, 21, 14, 21, 22, 11, 12, 19, 12, 25, 24};
71   
72   int jeremiah[52] = {19, 37, 25, 31, 31, 30, 34, 22, 26, 25, 23, 17, 27, 22, 21, 21, 27, 23, 15, 18, 14, 30, 40, 10, 38, 24, 22, 17, 32, 24, 40, 44, 26, 22, 19, 32, 21, 28, 18, 16, 18, 22, 13, 30, 5, 28, 7, 47, 39, 46, 64, 34};
73   
74   int lamentations[5] = {22, 22, 66, 22, 22};
75   
76   int ezekiel[48] = {28, 10, 27, 17, 17, 14, 27, 18, 11, 22, 25, 28, 23, 23, 8, 63, 24, 32, 14, 49, 32, 31, 49, 27, 17, 21, 36, 26, 21, 26, 18, 32, 33, 31, 15, 38, 28, 23, 29, 49, 26, 20, 27, 31, 25, 24, 23, 35};
77   
78   int daniel[12] = {21, 49, 30, 37, 31, 28, 28, 27, 27, 21, 45, 13};
79   
80   int hosea[14] = {11, 23, 5, 19, 15, 11, 16, 14, 17, 15, 12, 14, 16, 9};
81   
82   int joel[3] = {20, 32, 21};
83   
84   int amos[9] = {15, 16, 15, 13, 27, 14, 17, 14, 15};
85   
86   int obadiah[1] = {21};
87   
88   int jonah[4] = {17, 10, 10, 11};
89   
90   int micah[7] = {16, 13, 12, 13, 15, 16, 20};
91   
92   int nahum[3] = {15, 13, 19};
93   
94   int habakkuk[3] = {17, 20, 19};
95   
96   int zephaniah[3] = {18, 15, 20};
97   
98   int haggai[2] = {15, 23};
99   
100   int zechariah[14] = {21, 13, 10, 14, 11, 15, 14, 23, 17, 12, 17, 14, 9, 21};
101   
102   int malachi[4] = {14, 17, 18, 6};
103   
104   int matthew[28] = {25, 23, 17, 25, 48, 34, 29, 34, 38, 42, 30, 50, 58, 36, 39, 28, 27, 35, 30, 34, 46, 46, 39, 51, 46, 75, 66, 20};
105   
106   int mark[16] = {45, 28, 35, 41, 43, 56, 37, 38, 50, 52, 33, 44, 37, 72, 47, 20};
107   
108   int luke[24] = {80, 52, 38, 44, 39, 49, 50, 56, 62, 42, 54, 59, 35, 35, 32, 31, 37, 43, 48, 47, 38, 71, 56, 53};
109   
110   int john[21] = {51, 25, 36, 54, 47, 71, 53, 59, 41, 42, 57, 50, 38, 31, 27, 33, 26, 40, 42, 31, 25};
111   
112   int acts[28] = {26, 47, 26, 37, 42, 15, 60, 40, 43, 48, 30, 25, 52, 28, 41, 40, 34, 28, 41, 38, 40, 30, 35, 27, 27, 32, 44, 31};
113   
114   int romans[16] = {32, 29, 31, 25, 21, 23, 25, 39, 33, 21, 36, 21, 14, 23, 33, 27};
115   
116   int corinthians1[16] = {31, 16, 23, 21, 13, 20, 40, 13, 27, 33, 34, 31, 13, 40, 58, 24};
117   
118   int corinthians2[13] = {24, 17, 18, 18, 21, 18, 16, 24, 15, 18, 33, 21, 14};
119   
120   int galatians[6] = {24, 21, 29, 31, 26, 18};
121   
122   int ephesians[6] = {23, 22, 21, 32, 33, 24};
123   
124   int philippians[4] = {30, 30, 21, 23};
125   
126   int colossians[4] = {29, 23, 25, 18};
127   
128   int thessalonians1[5] = {10, 20, 13, 18, 28};
129   
130   int thessalonians2[3] = {12, 17, 18};
131   
132   int timothy1[6] = {20, 15, 16, 16, 25, 21};
133   
134   int timothy2[4] = {18, 26, 17, 22};
135   
136   int titus[3] = {16, 15, 15};
137   
138   int philemon[1] = {25};
139   
140   int hebrews[13] = {14, 18, 19, 16, 14, 20, 28, 13, 28, 39, 40, 29, 25};
141   
142   int james[5] = {27, 26, 18, 17, 20};
143   
144   int peter1[5] = {25, 25, 22, 19, 14};
145   
146   int peter2[3] = {21, 22, 18};
147   
148   int john1[5] = {10, 29, 24, 21, 21};
149   
150   int john2[1] = {13};
151   
152   int john3[1] = {14};
153   
154   int jude[1] = {25};
155   
156   int revelation[22] = {20, 29, 22, 11, 14, 17, 17, 13, 21, 11, 19, 17, 18, 20, 8, 21, 18, 24, 21, 15, 27, 21};
157   
158   book books[66] = {
159     {"Genesis", 50, genesis},
160     {"Exodus", 40, exodus},
161     {"Leviticus", 27, leviticus},
162     {"Numbers", 36, numbers},
163     {"Deuteronomy", 34, deuteronomy},
164     {"Joshua", 24, joshua},
165     {"Judges", 21, judges},
166     {"Ruth", 4, ruth},
167     {"1Samuel", 31, samuel1},
168     {"2Samuel", 24, samuel2},
169     {"1Kings", 22, kings1},
170     {"2Kings", 25, kings2},
171     {"1Chronicles", 29, chronicles1},
172     {"2Chronicles", 36, chronicles2},
173     {"Ezra", 10, ezra},
174     {"Nehemiah", 13, nehemiah},
175     {"Esther", 10, esther},
176     {"Job", 42, job},
177     {"Psalms", 150, psalms},
178     {"Proverbs", 31, proverbs},
179     {"Ecclesiastes", 12, ecclesiastes},
180     {"Song", 8, solomon},
181     {"Isaiah", 66, isaiah},
182     {"Jeremiah", 52, jeremiah},
183     {"Lamentations", 5, lamentations},
184     {"Ezekiel", 48, ezekiel},
185     {"Daniel", 12, daniel},
186     {"Hosea", 14, hosea},
187     {"Joel", 3, joel},
188     {"Amos", 9, amos},
189     {"Obadiah", 1, obadiah},
190     {"Jonah", 4, jonah},
191     {"Micah", 7, micah},
192     {"Nahum", 3, nahum},
193     {"Habakkuk", 3, habakkuk},
194     {"Zephaniah", 3, zephaniah},
195     {"Haggai", 2, haggai},
196     {"Zechariah", 14, zechariah},
197     {"Malachi", 4, malachi},
198     {"Matthew", 28, matthew},
199     {"Mark", 16, mark},
200     {"Luke", 24, luke},
201     {"John", 21, john},
202     {"Acts", 28, acts},
203     {"Romans", 16, romans},
204     {"1Corinthians", 16, corinthians1},
205     {"2Corinthians", 13, corinthians2},
206     {"Galatians", 6, galatians},
207     {"Ephesians", 6, ephesians},
208     {"Philippians", 4, philippians},
209     {"Colossians", 4, colossians},
210     {"1Thessalonians", 5, thessalonians1},
211     {"2Thessalonians", 3, thessalonians2},
212     {"1Timothy", 6, timothy1},
213     {"2Timothy", 4, timothy2},
214     {"Titus", 3, titus},
215     {"Philemon", 1, philemon},
216     {"Hebrews", 13, hebrews},
217     {"James", 5, james},
218     {"1Peter", 5, peter1},
219     {"2Peter", 3, peter2},
220     {"1John", 5, john1},
221     {"2John", 1, john2},
222     {"3John", 1, john3},
223     {"Jude", 1, jude},
224     {"Revelation", 22, revelation}
225   };
226   
227   for (i=1; i<argc; i++)
228     {
229       strcat(opt, argv[i]);
230     }
231   
232   gettimeofday(&t,NULL);
233   ii = t.tv_sec+t.tv_usec;
234   srand(ii);
235
236   ii = rand() % 31096;      /* Total verses in bible */
237   
238   for (bkno=0, tv = 0; bkno<66 && tv <= ii; bkno++)
239     {
240       for (chno=0; chno<books[bkno].n && tv <= ii; chno++)
241         {
242           tv += books[bkno].p[chno];
243         }
244       if (tv>ii)
245         bkno--;
246     }
247   if (tv>ii)
248     {
249       if (bkno <66)
250         {
251           chno--;
252           if (chno <0 )
253             {
254               bkno--;
255               if (bkno<0)
256                 {
257                   bkno = 0; chno = 0;
258                 }
259             }
260           tv -= books[bkno].p[chno];
261         }  
262       else
263         {
264           bkno--;
265           chno = books[bkno].n - 1;
266           tv -= books[bkno].p[chno];
267         }
268       vno = ii-tv;
269       if (vno<1)
270         {
271           vno = 0;
272         }
273       vno++;
274       chno ++;
275     }
276   /*   printf ("tv = %d; bkno = %d, chno = %d, vno = %d\n", tv, bkno
277        chno, vno); */
278   
279   sprintf(cmd, "%s%d:%d", books[bkno].t, chno, vno);
280   /* vno is now redundant; so we now use it as a status code holder */
281   
282   vno = execlp("bible", opt, cmd, NULL);
283   return (vno);
284 }
285
286