home *** CD-ROM | disk | FTP | other *** search
- 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
-
-