T. Djamaluddin
Awal tahun 1990 ketika kuliah S2 dan S3 di Kyoto University, Department
of Astronomy, saya menyusun program jadwal shalat berdasarkan algoritma posisi matahari.
Pembuatan program itu terdorong oleh kebutuhan teman-teman mahasiswa Muslim di
Jepang untuk menentukan jadwal waktu shalat di kota mereka. Internet belum
banyak berkembang, selain untuk e-mail. Sehingga tidak ada sumber informasi
untuk mendapatkan jadwal shalat. Sewaktu ada tawaran seminar Islamic
Computation (nama tepatnya lupa) di AS tahun 1991, saya kirim program saya
dalam bahasa Basic (tanpa kehadiran saya) kepada Organizing Committee. Rupanya
program jadwal shalat itu menarik perhatian dan diterjemahkan menjadi bahasa
fortran untuk SO UNIX. Alhamdulillah, program itu termasuk generasi pertama
yang menyebar ke berbagai negara yang direlease 1991. Ada juga yang meminta
izin untuk menterjemahkan ke bahasa C. Catatan program jadwal shalat generasi
pertama bisa di lihat di
http://www.faqs.org/faqs/islam-faq/part11/
http://www.africa.upenn.edu/Software/Islamic_Computing_11765.html
Situs http://www.geocities.com/Athens/Acropolis/2663/pshalat2.html
masih menyimpan versi awal dalam bahasa Basic (sebenarnya yang ini modifikasi
ke sekian yang update terakhir 18 Nov 1992, bukan versi yang diterjemahkan ke
bahasa fortran dan C).
5 ‘************************************************
10 ‘PRAYER TIME TABLE FOR ANY REGION IN THE WORLD
20 ‘BETWEEN LATITUDE 65 N – 65 S
30 ‘ CALCULATED BY T.DJAMALUDDIN
40 ‘ DEPT. OF ASTRONOMY, KYOTO UNIVERSITY
50 ‘ SAKYO-KU, KYOTO 606, JAPAN
60 ‘************************************************
61 INPUT "NAME OF FILE, e.g. D:SALAT.TKY";FILE$
65 OPEN FILE$ FOR OUTPUT AS #1
70 RAD = 3.14159/180
80 INPUT "CITY’S NAME =";CITY$
90 INPUT "CITY’S LONGITUDE; WEST : negative (in DEGREES)=";LAMD
100 INPUT "CITY’S LATITUDE ; SOUTH: negative (in DEGREES)=";PHI
110 PRINT "TIME DIFFERENCE = STANDARD TIME – GMT or UT"
120 INPUT "TIME DIFFERENCE ; WEST : negative (in HOURS) =";TD
130 PRINT #1," PRAYER TIME TABLE FOR ";CITY$ : PRINT #1,"
":PRINT #1," "
140 LAMD = LAMD/360 * 24
150 PHI = PHI*RAD
160 DATA
"JANUARY",31,"FEBRUARY",28,"MARCH",31,"APRIL",30,"MAY",31
170 DATA "JUNE",30,"JULY",31,"AUGUST",31,"SEPTEMBER",30
180 DATA "OCTOBER",31,"NOVEMBER",30,"DECEMBER",31
190 N0 = 0
200 FOR MN = 1 TO 12
210 READ MONTH$,D
220 PRINT #1," ",MONTH$
230 PRINT #1," "
240 PRINT #1,"DATE FAJR SUNRISE ZUHR ASR MAGHRIB ISHA"
250 FOR K = 1 TO D
260 N = N0 + K
270 A = 6
280 Z = 108*RAD : GOSUB 530
290 IF ABS(X) > 1 THEN GOTO 310
300 T(1) = ST
310 Z = (90+5/6)*RAD : GOSUB 530
320 T(2) = ST
330 A = 18
340 Z = (90+5/6)*RAD : GOSUB 530
350 SUNSET = ST : T(5) = ST + 2/60
360 Z = 108*RAD : GOSUB 530
370 IF ABS(X) > 1 THEN GOTO 390
380 T(6) = ST
390 MIDDAY = (T(2) + SUNSET)/2 : T(3) = MIDDAY + 2/60
400 T(4) = (T(3) + T(5))/2
410 PRINT #1,USING "##";K; : PRINT #1," ";
420 FOR I= 1 TO 6
430 TH = INT(T(I)) : TM = INT((T(I)-TH)*60)
440 PRINT #1,USING "##";TH; : PRINT #1,":";
450 PRINT #1,USING "##";TM; : PRINT #1," ";
460 NEXT I : PRINT #1," "
470 NEXT K : N0 = N
480 PRINT #1," ":PRINT #1," " : PRINT:PRINT
490 NEXT MN
500 CLOSE
520 END
530 T = N + (A – LAMD)/24
540 M = (.9856*T – 3.289)*RAD
550 L = M + 1.916*RAD*SIN(M) + .02*RAD*SIN(2*M) + 282.634*RAD
560 LH = L/3.14159*12 : QL = INT(LH/6)+1
570 IF INT(QL/2)*2-QL<>0 THEN QL=QL-1
580 RA = ATN(.91746*TAN(L))/3.14159*12
590 RA = RA + QL*6
600 SIND = .39782*SIN(L)
610 COSD = SQR(1-SIND*SIND)
620 X = (COS(Z) – SIND*SIN(PHI))/(COSD*COS(PHI))
630 IF ABS(X) > 1 THEN GOTO 720
640 ATNX = ATN(SQR(1-X*X)/X)/RAD
650 IF ATNX < 0 THEN ATNX = ATNX + 180
660 H = (360 – ATNX)*24/360
670 IF A = 18 THEN H = 24 – H
680 TLOC = H + RA – .06571*T – 6.622
690 TLOC = TLOC + 24
700 TLOC = TLOC – INT(TLOC/24)*24
710 ST = TLOC – LAMD + TD
720 RETURN
Setelah saya pulang ke LAPAN Bandung 1994, saya buat modifikasi menyesuaikan
dengan kriteria Depag RI. Ini versi awalnya:
10 ‘JADWAL SALAT SELURUH DUNIA ANTARA LINTANG 65 S – 65 U
20 ‘OLEH T.DJAMALUDDIN (LAPAN BANDUNG)
30 ‘MENGIKUTI KRITERIA DEPAG RI
40 ‘*********************************************
50 INPUT "NAMA FILE, e.g. D:SALAT.JAD"; FILE$
60 OPEN FILE$ FOR OUTPUT AS #1
70 RAD = 3.14159 / 180
80 INPUT "NAMA
KOTA
="; CITY$
90 INPUT "BUJUR ; BB:-, BT:+
(DERAJAT) ="; LAMD
100 INPUT "LINTANG; LS:-, LU:+
(DERAJAT) ="; PHI
110 PRINT "BEDA WAKTU= WAKTU STANDAR – GMT, e.g. WIB:7 "
120 INPUT "BEDA WAKTU; BB:-, BT:+
(JAM) ="; TD
130 PRINT #1, " JADWAL SALAT ";
CITY$: PRINT #1, " ": PRINT #1, " "
140 LAMD = LAMD / 360 * 24
150 PHI = PHI * RAD
160 DATA
"JANUARI",31,"FEBRUARI",28,"MARET",31,"APRIL",30,"MEI",31
170 DATA
"JUNI",30,"JULI",31,"AGUSTUS",31,"SEPTEMBER",30
180 DATA "OKTOBER",31,"NOVEMBER",30,"DESEMBER",31
190 N0 = 0
200 FOR MN = 1 TO 12
210 READ MONTH$, D
220 PRINT #1,
"
", MONTH$
230 PRINT #1, " "
240 PRINT #1, "TGL SHUBUH TERBIT DHUHUR
ASHAR MAGHRIB ISYA"
250 FOR K = 1 TO D
260 N = N0 + K
270 A = 6
280 Z = 110 * RAD: GOSUB 540
290 IF ABS(X) > 1 THEN GOTO 310
300 T(1) = ST
310 Z = (90 + 5 / 6) * RAD: GOSUB 540
320 T(2) = ST
330 A = 18
340 Z = (90 + 5 / 6) * RAD: GOSUB 540
350 SUNSET = ST: T(5) = ST + 2 / 60
360 Z = 108 * RAD: GOSUB 540
370 IF ABS(X) > 1 THEN GOTO 390
380 T(6) = ST
390 A = 12: GOSUB 540
400 MIDDAY = ST: T(3) = MIDDAY + 2 / 60
410 ZD = ABS(DEK – PHI): A = 15: GOSUB 540: T(4) = ST
420 PRINT USING "###"; N: PRINT #1, USING
"##"; K; : PRINT #1, " ";
430 FOR I = 1 TO 6
440 TH = INT(T(I)): TM = INT((T(I) – TH) *
60)
450 PRINT #1, USING "##"; TH; :
PRINT #1, ":";
460 PRINT #1, USING "##"; TM; :
PRINT #1, " ";
470 NEXT I: PRINT #1, " "
480 NEXT K: N0 = N
490 PRINT #1, " ": PRINT #1, " "
500 NEXT MN
510 CLOSE
520 SYSTEM
530 END
540 T = N + (A – LAMD) / 24
550 M = (.9856 * T – 3.289) * RAD
560 L = M + 1.916 * RAD * SIN(M) + .02 * RAD * SIN(2 * M) + 282.634
* RAD
570 LH = L / 3.14159 * 12: QL = INT(LH / 6) + 1
580 IF INT(QL / 2) * 2 – QL <> 0 THEN QL = QL – 1
590 RA = ATN(.91746 * TAN(L)) / 3.14159 * 12
600 RA = RA + QL * 6
610 SIND = .39782 * SIN(L)
620 COSD = SQR(1 – SIND * SIND)
630 DEK = ATN(SIND / COSD)
640 IF A = 15 THEN Z = ATN(TAN(ZD) + 1)
650 X = (COS(Z) – SIND * SIN(PHI)) / (COSD * COS(PHI))
660 IF ABS(X) > 1 THEN GOTO 720
670 ATNX = ATN(SQR(1 – X * X) / X) / RAD
680 IF ATNX < 0 THEN ATNX = ATNX + 180
690 H = (360 – ATNX) * 24 / 360
700 IF A = 18 THEN H = 24 – H
710 IF A = 12 THEN H = 0
720 IF A = 15 THEN H = 24 – H
730 TLOC = H + RA – .06571 * T – 6.622
740 TLOC = TLOC + 24
750 TLOC = TLOC – INT(TLOC / 24) * 24
760 ST = TLOC – LAMD + TD
770 RETURN
[Bila
berminat executable programnya –versi 1 tahun harian dan 1 tahun 5
harian–, silakan kontak via e-mail yang tercantum di halaman muka]