-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclock-m.bas
More file actions
146 lines (146 loc) · 6.07 KB
/
clock-m.bas
File metadata and controls
146 lines (146 loc) · 6.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
100 DIM TOD(5),DOY(5)
120 PRINT "BASIC CLOCK SUBROUTINE DEMONSTRATION PROGRAM"
130 GOSUB 10000
140 PRINT "The time is ";TIME$;" on ";WDAY$;" ";DATE1$
150 PRINT "The time is ";TIME$;" on ";WDAY$;" ";DATE2$
160 PRINT
170 END
10000 '******************************************************************
10010 '* *
10020 '* SYSTEM SUPPORT 1 BOARD CLOCK SUBROUTINES *
10030 '* BY BILL BOLTON, Software Tools, Australia *
10040 '* VERSION 1.0 JAN 17,1982 INITIAL RELEASE *
10050 '* *
10060 '* VARIABLES USED IN THESE ROUTINES *
10070 '* IN APPROXIMATE ORDER OF APPEARANCE *
10080 '* *
10090 '*TOD STORAGE ARRAY FOR TIME OF DAY (TOD) DIGITS *
10100 '*DOY STORAGE ARRAY FOR DAY OF YEAR (DOY) DIGITS *
10110 '*BASEPORT SYSTEM SUPPORT 1 BOARD BASE PORT ADDRESS *
10120 '*CMDPORT SS1 CLOCK COMMAND PORT ADDRESS *
10130 '*DATAPORT SS1 CLOCK DATA PORT ADDRESS *
10140 '*HOURS10 TENS OF HOURS DIGIT *
10150 '*HOURS1 UNIT HOURS DIGIT *
10160 '*MINUTES10 TENS OF MINUTES DIGIT *
10170 '*MINUTES1 UNIT MINUTES DIGIT *
10180 '*SECONDS10 TENS OF SECONDS DIGIT *
10190 '*SECONDS1 UNIT SECONDS DIGIT *
10200 '*TIME$ TIME OF DAY STRING IN HH:MM:SS FORMAT *
10210 '*WEEKDAY DAY OF WEEK DIGIT *
10220 '*WDAY$ DAY OF WEEK NAME STRING *
10230 '*YEAR YEAR INTEGER *
10240 '*MONTH10 TENS OF MONTHS DIGIT *
10250 '*MONTH1 UNIT MONTHS DIGIT *
10260 '*DAY10 TENS OF DAYS DIGIT *
10270 '*DAY1 UNIT DAYS DIGIT *
10280 '*DATE1$ DATE STRING IN DD/MM/YY FORMAT *
10290 '*MONTH MONTH INTEGER *
10300 '*DATE2$ DATE STRING IN MONTH DD,19YY FORMAT *
10310 '*TDAY$ TEMPORARY DAY STRING *
10320 '* *
10330 '* ###### NOTE ###### *
10340 '* *
10350 '* THE FOLLOWING ARRAYS MUST BE DIMENSIONED IN THE MAIN BODY *
10360 '* THE PROGRAM CALLING THESE SUBROUTINES *
10370 '* *
10380 '* DIM TOD(5) *
10390 '* DIM DOY(5) *
10400 '* *
10410 '******************************************************************
10420 BASEPORT = &H50
10430 CMDPORT = BASEPORT + 10
10440 DATAPORT = CMDPORT + 1
10450 '**********************************************************
10460 '* READ THE TIME DIGITS *
10470 '**********************************************************
10480 FOR DIGIT = 5 TO 0 STEP -1
10490 OUT CMDPORT,(&H10 + DIGIT)
10500 TOD(DIGIT) = INP(DATAPORT)
10510 IF DIGIT = 5 THEN TOD(DIGIT) = TOD(DIGIT) AND 3
10520 NEXT DIGIT
10530 HOURS10 = TOD(5)
10540 HOURS1 = TOD(4)
10550 MINUTES10 = TOD(3)
10560 MINUTES1 = TOD(2)
10570 SECONDS10 = TOD(1)
10580 SECONDS1 = TOD(0)
10590 '**********************************************************
10600 '* FORMAT THE TIME STRING *
10610 '**********************************************************
10620 TIME$=" "
10630 MID$(TIME$,1,1) = RIGHT$(STR$(HOURS10),1)
10640 MID$(TIME$,2,1) = RIGHT$(STR$(HOURS1),1)
10650 MID$(TIME$,3,1) = ":"
10660 MID$(TIME$,4,1) = RIGHT$(STR$(MINUTES10),1)
10670 MID$(TIME$,5,1) = RIGHT$(STR$(MINUTES1),1)
10680 MID$(TIME$,6,1) = ":"
10690 MID$(TIME$,7,1) = RIGHT$(STR$(SECONDS10),1)
10700 MID$(TIME$,8,1) = RIGHT$(STR$(SECONDS1),1)
10710 '**********************************************************
10720 '* READ THE WEEKDAY DIGIT AND CONVERT IT TO A *
10730 '* DAY NAME STRING *
10740 '**********************************************************
10750 OUT CMDPORT,(&H10 + 6)
10760 WEEKDAY = INP(DATAPORT)
10770 IF WEEKDAY = 0 THEN WDAY$ = "Sunday"
10780 IF WEEKDAY = 1 THEN WDAY$ = "Monday"
10790 IF WEEKDAY = 2 THEN WDAY$ = "Tuesday"
10800 IF WEEKDAY = 3 THEN WDAY$ = "Wednesday"
10810 IF WEEKDAY = 4 THEN WDAY$ = "Thursday"
10820 IF WEEKDAY = 5 THEN WDAY$ = "Friday"
10830 IF WEEKDAY = 6 THEN WDAY$ = "Saturday"
10840 '**********************************************************
10850 '* READ THE DATE DIGITS *
10860 '**********************************************************
10870 FOR DIGIT = 12 TO 7 STEP -1
10880 OUT CMDPORT,(&H10 + DIGIT)
10890 DOY(DIGIT - 7) = INP(DATAPORT)
10900 NEXT DIGIT
10910 YEAR= (DOY(5) * 10) + DOY(4)
10920 MONTH10 = DOY(3)
10930 MONTH1 = DOY(2)
10940 DAY10 = DOY(1)
10950 DAY1 = DOY(0)
10960 '**********************************************************
10970 '* FORMAT THE FIRST DATE STRING *
10980 '**********************************************************
10990 DATE1$=" "
11000 MID$(DATE1$,1,1) = RIGHT$(STR$(DAY10),1)
11010 MID$(DATE1$,2,1) = RIGHT$(STR$(DAY1),1)
11020 MID$(DATE1$,3,1) = "/"
11030 MID$(DATE1$,4,1) = RIGHT$(STR$(MONTH10),1)
11040 MID$(DATE1$,5,1) = RIGHT$(STR$(MONTH1),1)
11050 MID$(DATE1$,6,1) = "/"
11060 MID$(DATE1$,7,2) = RIGHT$(STR$(YEAR),2)
11070 MONTH = (MONTH10 * 10) + MONTH1
11080 '**********************************************************
11090 '* FORMAT THE SECOND DATE STRING *
11100 '**********************************************************
11110 IF MONTH = 1 THEN MONTH$ = "January"
11120 IF MONTH = 2 THEN MONTH$ = "February"
11130 IF MONTH = 3 THEN MONTH$ = "March"
11140 IF MONTH = 4 THEN MONTH$ = "April"
11150 IF MONTH = 5 THEN MONTH$ = "May"
11160 IF MONTH = 6 THEN MONTH$ = "June"
11170 IF MONTH = 7 THEN MONTH$ = "July"
11180 IF MONTH = 8 THEN MONTH$ = "August"
11190 IF MONTH = 9 THEN MONTH$ = "September"
11200 IF MONTH = 10 THEN MONTH$ = "October"
11210 IF MONTH = 11 THEN MONTH$ = "November"
11220 IF MONTH = 12 THEN MONTH$ = "December"
11230 DATE2$ = " "
11240 TDAY$ = STR$((DAY10 * 10) + DAY1)
11250 TDAY$ = RIGHT$(TDAY$,LEN(TDAY$)-1)
11260 MID$(DATE2$,1) = MONTH$
11270 MID$(DATE2$,LEN(MONTH$)+1,1) = " "
11280 MID$(DATE2$,LEN(MONTH$)+2,LEN(TDAY$)) = TDAY$
11290 MID$(DATE2$,LEN(MONTH$) + LEN(TDAY$) + 2,4) = ", 19"
11300 MID$(DATE2$,LEN(MONTH$)+8,2) = RIGHT$(DATE1$,2)
11310 '**********************************************************
11320 '* EXAMPLES OF DISPLAYING TIME AND DATE IN *
11330 '* TWO DIFFERENT FORMATS *
11340 '* *
11350 '* PRINT "The time is ";TIME$;" on ";WDAY$;" ";DATE1$ *
11360 '* PRINT "The time is ";TIME$;" on ";WDAY$;" ";DATE2$ *
11370 '**********************************************************
11380 RETURN