home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
clarion
/
library
/
setdte
/
setdtetm.cla
Wrap
Text File
|
1992-04-11
|
9KB
|
295 lines
setdtetm program
omit('-SKIP-')
╔═══════════════════════════════════════════════════════════════════════╗
║ "CHK_DATETIME" WILL ASK THE USER IF THE COMPUTER'S DATE/TIME IS ║
║ CORRECT. THE USER WILL BE ABLE TO CHANGE THE DATE/TIME AND IT WILL BE ║
║ PERMAMENTLY STORED IN THE COMPUTER (IF USING DOS 3.3 OR LATER.) ║
║ "CHK_DATETIME" IS AN EXCELLENT PROCEDURE TO ADD TO THE OPENING ║
║ SCREEN OF YOUR APPLICATION. ║
╟───────────────────────────────────────────────────────────────────────╢
║ NOTE: If system date is less than '92, user is forced to enter the ║
║ correct date. If user enters a date less than '92, the program ║
║ beeps and forces user to re-enter date. The user can abort ║
║ saving the date after it's been changed by pressing ^Esc ║
║ at the "Correct?" menu. Pressing Alt-F1 displays the available ║
║ memory at the top of the screen for 2 seconds. ║
║ ║
║ If you're using Mike Hanson's Super Models, you can use his ║
║ CLOCK_ instead of my CLOCK2_. Just change the global mem var's. ║
╟──────────────────────────────────┬────────────────────────────────────╢
║ Written By : Barry McClure │ You can probably optimize the ║
║ Compuserve Id: 75170,1100 │ code a bit. Send me your comments. ║
║ Released As │ ║
║ Freeware On : Apr 11, 1992 │ * * Have Fun * * ║
╚══════════════════════════════════╧════════════════════════════════════╝
-SKIP-
map
proc(chk_datetime)
proc(cnvt2400)
proc(cnvt1200)
proc(clock2_)
func(dow),string
.
!STANDARD VARIABLE DCL'NS BELOW
REJECT_KEY EQUATE(CTRL_ESC)
ACCEPT_KEY EQUATE(CTRL_ENTER)
ESC_KEY EQUATE(256) !ESC KEY
ENTER_KEY EQUATE(257) !ENTER KEY
CTRL_ESC EQUATE(279) !CTRL-ESC KEY
CTRL_ENTER EQUATE(280) !CTRL-ENTER KEY
code
chk_datetime !ASK USER IF DATE/TIME IS CORRECT
return
!--------------------------«RM255»
chk_datetime procedure !ASK USER IF CURRENT DATE/TIME IS OK
CHK_DT_SCR SCREEN WINDOW(4,35),AT(17,24),HUE(11,1)
OMIT('**-END-**')
┌─────────────────────────────────┐
│ Is The Date & Time Correct? ■YN│
│AP ■■■ mm/dd/yy hh:mm ■M │
└─────────────────────────────────┘
**-END-**
ROW(1,1) STRING('┌─{33}┐')
ROW(2,1) REPEAT(2);STRING('│<0{33}>│') .
ROW(4,1) STRING('└─{33}┘')
ROW(3,4) STRING(' '),HUE(10,1)
COL(28) STRING('M {5}'),HUE(10,1)
ROW(2,4) STRING('Is The Date & Time Correct?'),HUE(15,1)
COL(32) MENU(@S1),USE(DT_ANS),HUE(14,1),SEL(0,7),REQ,IMM
COL(33) STRING('Y'),HUE(1,1),SEL(1,1)
COL(34) STRING('N'),HUE(1,1),SEL(1,1)
.
ROW(3,9) STRING(' '),HUE(10,1)
COL(10) ENTRY(@D1),USE(CUR_DATE),HUE(10,1),SEL(0,7),OVR,REQ
CUR_DOW COL(6) STRING(3),HUE(10,1)
COL(18) STRING(' '),HUE(10,1)
COL(21) ENTRY(@T1),USE(CUR_TIME_D),HUE(10,1),SEL(0,7),OVR,REQ
COL(26) STRING(' '),HUE(10,1)
COL(27) MENU(@S1),USE(CUR_AMPM),HUE(10,1),SEL(0,7),REQ
COL(2) STRING('A'),HUE(1,1),SEL(1,1)
COL(3) STRING('P'),HUE(1,1),SEL(1,1)
. .
noon long(4320001)
dt_ok byte !1=DATE/TIME IS CORRECT
dt_chg byte
first_time byte !1=DATE/TIME CHANGED
dt_ans string(1)
cur_ampm string(1)
last_ampm string(1)
cur_date long
cur_time_d long !DISPLAY TIME 0:00-12:00
cur_time_r long !REAL TIME 0:00-23:59
sTimeRow BYTE(19) !Display Row for Time-DUPLICATED IN CLOCK2_
sTimeCol BYTE(43) !Display Column for Time-DUPLICATED IN CLOCK2_
!--ASK USER IF DATE/TIME IS
code ! CORRECT.
first_time = 1
idle(clock2_,1)
dt_chg = 0 !DATE/TIME NOT CHANGED YET
dt_ok = 1 !DEFAULT TO DATE OK
open(chk_dt_scr)
cur_date = today()
cnvt1200(clock(), cur_time_d, cur_ampm) !CONVERT TIME TO "hh:mm xM"
last_ampm = cur_ampm
display
loop
alert
alert(reject_key) !PRESSING ^ESC ABORTS
alert(accept_key)
if ~dt_chg then !FREEZE DATE/TIME IF USER HAS CHANGED IT.
cur_date = today() !IN CASE IT'S NEAR MIDNIGHT
cnvt1200(clock(), cur_time_d, cur_ampm) !GET CURRENT TIME
.
cur_dow = dow(cur_date)
accept
if first_time then !IF 1ST TIME, GET RID OF IDLE
first_time = 0
idle() !TURN OFF CLOCK
cur_date = today() !IN CASE IT'S NEAR MIDNIGHT
cnvt1200(clock(), cur_time_d, cur_ampm) !GET CURRENT TIME
cur_dow = dow(cur_date)
show(stimerow,stimecol,' M ') !CLEAR THE SECONDS FROM IDLE TIME
display !REDISPLAY THE TIME
.
if keycode() = reject_key then !USER ABORTED
dt_ok = 0 !DID NOT COMPLETE OK
break !EXIT LOOP
.
if keycode() = ctrl_enter !ON SCREEN ACCEPT KEY
update ! MOVE ALL FIELDS FROM SCREEN
select(?) ! START WITH CURRENT FIELD
select ! EDIT ALL FIELDS
dt_ok = 1 ! USER PRESSED SAVE KEY (^ENTER)
cycle ! GO TO TOP OF LOOP
. !
case field() !JUMP TO FIELD EDIT ROUTINE
of ?dt_ans
if dt_ans = 'Y' then !USER SAYS DATE/TIME OK?
if (dt_chg and year(cur_date) < 1992) or |
(~dt_chg and year(today()) < 1992) then !DATE IS TOO LOW?
beep !WAKE UP USER.
dt_chg = 1
dt_ans = 'N' !DEFAULT ANSWER TO "N".
display(dt_ans)
cycle !FORCE USER TO ENTER
. ! CORRECT DATE.
dt_ok = 1 !DATE IS NOT TOO LOW->EXIT
break
.
of ?cur_date
if year(cur_date) < 1992 then !USER ENTERED INCORRECT DATE
beep !WAKE UP USER & RE-PROMPT FOR
select(?) ! THE CORRECT DATE
dt_chg = 1
cycle
.
if refer() then !WAS DATE CHANGED?
dt_chg = 1
.
of ?cur_time_d
if refer() then !WAS TIME CHANGED?
dt_chg = 1
.
of ?cur_ampm
if refer() and (last_ampm <> cur_ampm) then !TIME IND. CHANGED?
dt_chg = 1
.
cnvt2400(cur_time_d, cur_ampm, cur_time_r) !CONVERT DISPLAY TIME TO REAL TIME
select(?dt_ans) !ASK USER IF DATE/TIME IS CORRECT
.
.
if dt_chg and dt_ok then !SET DATE/TIME IF USER HAS
setclock(cur_time_r) ! CHANGED THEM.
settoday(cur_date)
.
close(chk_dt_scr)
!idle(your_idle_proc) !<==CHANGE THIS FOR YOUR IDLE PROC.
return
!--------------------------------
cnvt2400 procedure(time_1200, | !CONVERT "12:00 AM/PM" TO "24:00" HOURS
ampm_ind, |
time_2400)
time_1200 long
ampm_ind external
time_2400 external
redo_field long
noon long(4320001)
code
time_2400 = time_1200
if time_2400 < noon and ampm_ind = 'P' then !ADD 12 HOURS?
time_2400 += noon
elsif time_2400 >= noon and ampm_ind = 'A' then !TIME IND IS WRONG?
ampm_ind = 'P'
.
return
!--------------------------------
cnvt1200 procedure(time_2400, | !CONVERT "24:00" HOURS" TO 12:00 AM/PM"
time_1200, |
ampm_ind)
time_2400 long
time_1200 external
ampm_ind external
noon long(4320001)
one_pm long(4680001)
code
time_1200 = time_2400
if time_1200 >= one_pm then !SUBTRACT 12 HOURS?
time_1200 -= noon
.
if time_2400 >= noon then !SET AM/PM INDICATOR
ampm_ind = 'P'
else
ampm_ind = 'A'
.
return
!-------------------------
dow function(date_in) !RETURN DAY OF WEEK FOR A DATE
date_in long
dow_out string(3)
days string('SUNMONTUEWEDTHUFRISAT')
vdays string(3),dim(7),over(days)
code
dow_out = vdays[(date_in % 7) + 1]
return(dow_out)
!--------------------------
CLOCK2_ PROCEDURE !IDLE RTN TO DISPLAY DTE/TIME
MEM_SCR SCREEN WINDOW(1,30),AT(1,51),HUE(10,3)
OMIT('**-END-**')
Memory Available: <<,<<<,<<#
**-END-**
ROW(1,1) STRING(' '),HUE(1,3)
COL(2) STRING('Memory Available:'),HUE(10,3)
MEM_AVAIL COL(20) STRING(@N10),HUE(11,3)
.
start_tm long
cur_tm long
noon long(4320001)
one_pm long(4680001)
cur_ind string(1)
days string('SUNMONTUEWEDTHUFRISAT')
vdays string(3),dim(7),over(days)
sDateRow BYTE(19) !Display Row for Date
sDateCol BYTE(29) !Display Column for Date
sTimeRow BYTE(19) !Display Row for Time
sTimeCol BYTE(43) !Display Column for Time
CODE
SHOW(sDateRow, sDateCol, vdays[(today() % 7) + 1] & ' ' & |
(FORMAT(today(), @D1)) & ' ')
cur_tm = clock() !GET hh:mm:ss A/PM
if cur_tm > noon then !USE 12 HOUR CLOCK NOT 24
cur_ind = 'P'
if cur_tm >= one_pm then !12 HOURS MAX, THEN 1:00
cur_tm = cur_tm - noon
.
else
cur_ind = 'A'
.
SHOW(sTimeRow, sTimeCol, ' ' & |
FORMAT(cur_tm, @T4) & ' ' & cur_ind & 'M' & ' ')
if keycode() = 3073 !WHEN USER PRESSES ALT F1
open(mem_scr) !DISPLAY AMOUNT OF
mem_avail = memory() ! MEMORY AVAILABLE
start_tm = clock() ! AND WAIT 2 SECONDS
loop until abs(clock()-start_tm) > 200.
close(mem_scr)
.
return