home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / clarion / library / setdte / setdtetm.cla
Text File  |  1992-04-11  |  9KB  |  295 lines

  1. setdtetm  program
  2.     omit('-SKIP-')
  3. ╔═══════════════════════════════════════════════════════════════════════╗
  4. ║ "CHK_DATETIME" WILL ASK THE USER IF THE COMPUTER'S DATE/TIME IS    ║
  5. ║ CORRECT. THE USER WILL BE ABLE TO CHANGE THE DATE/TIME AND IT WILL BE ║
  6. ║ PERMAMENTLY STORED IN THE COMPUTER (IF USING DOS 3.3 OR LATER.)    ║
  7. ║ "CHK_DATETIME" IS AN EXCELLENT PROCEDURE TO ADD TO THE OPENING    ║
  8. ║ SCREEN OF YOUR APPLICATION.                        ║
  9. ╟───────────────────────────────────────────────────────────────────────╢
  10. ║ NOTE: If system date is less than '92, user is forced to enter the    ║
  11. ║    correct date. If user enters a date less than '92, the program    ║
  12. ║    beeps and forces user to re-enter date. The user can abort    ║
  13. ║    saving the date after it's been changed by pressing ^Esc    ║
  14. ║    at the "Correct?" menu. Pressing Alt-F1 displays the available    ║
  15. ║    memory at the top of the screen for 2 seconds.            ║
  16. ║                                    ║
  17. ║    If you're using Mike Hanson's Super Models, you can use his    ║
  18. ║    CLOCK_ instead of my CLOCK2_. Just change the global mem var's. ║
  19. ╟──────────────────────────────────┬────────────────────────────────────╢
  20. ║ Written By   : Barry McClure       │ You can probably optimize the    ║
  21. ║ Compuserve Id: 75170,1100       │ code a bit. Send me your comments. ║
  22. ║ Released As               │                    ║
  23. ║ Freeware On  : Apr 11, 1992       │          * * Have Fun * *        ║
  24. ╚══════════════════════════════════╧════════════════════════════════════╝
  25.     -SKIP-
  26.  
  27.     map
  28.       proc(chk_datetime)
  29.       proc(cnvt2400)
  30.       proc(cnvt1200)
  31.       proc(clock2_)
  32.       func(dow),string
  33.     .
  34.                      !STANDARD VARIABLE DCL'NS BELOW
  35.  
  36. REJECT_KEY   EQUATE(CTRL_ESC)
  37. ACCEPT_KEY   EQUATE(CTRL_ENTER)
  38. ESC_KEY         EQUATE(256)         !ESC KEY
  39. ENTER_KEY    EQUATE(257)         !ENTER KEY
  40. CTRL_ESC     EQUATE(279)         !CTRL-ESC KEY
  41. CTRL_ENTER   EQUATE(280)         !CTRL-ENTER KEY
  42.  
  43.   code
  44.     chk_datetime             !ASK USER IF DATE/TIME IS CORRECT
  45.     return
  46.  
  47. !--------------------------«RM255»
  48. chk_datetime procedure        !ASK USER IF CURRENT DATE/TIME IS OK
  49.  
  50. CHK_DT_SCR   SCREEN      WINDOW(4,35),AT(17,24),HUE(11,1)
  51.  OMIT('**-END-**')
  52.                ┌─────────────────────────────────┐
  53.                │  Is The Date & Time Correct? ■YN│
  54.                │AP  ■■■ mm/dd/yy   hh:mm ■M     │
  55.                └─────────────────────────────────┘
  56. **-END-**
  57.  
  58.            ROW(1,1)      STRING('┌─{33}┐')
  59.            ROW(2,1)      REPEAT(2);STRING('│<0{33}>│') .
  60.            ROW(4,1)      STRING('└─{33}┘')
  61.            ROW(3,4)      STRING(' '),HUE(10,1)
  62.          COL(28)  STRING('M {5}'),HUE(10,1)
  63.            ROW(2,4)      STRING('Is The Date & Time Correct?'),HUE(15,1)
  64.          COL(32)  MENU(@S1),USE(DT_ANS),HUE(14,1),SEL(0,7),REQ,IMM
  65.          COL(33)    STRING('Y'),HUE(1,1),SEL(1,1)
  66.          COL(34)    STRING('N'),HUE(1,1),SEL(1,1)
  67.               .
  68.            ROW(3,9)      STRING(' '),HUE(10,1)
  69.          COL(10)  ENTRY(@D1),USE(CUR_DATE),HUE(10,1),SEL(0,7),OVR,REQ
  70. CUR_DOW         COL(6)      STRING(3),HUE(10,1)
  71.          COL(18)  STRING('   '),HUE(10,1)
  72.          COL(21)  ENTRY(@T1),USE(CUR_TIME_D),HUE(10,1),SEL(0,7),OVR,REQ
  73.          COL(26)  STRING(' '),HUE(10,1)
  74.          COL(27)  MENU(@S1),USE(CUR_AMPM),HUE(10,1),SEL(0,7),REQ
  75.          COL(2)        STRING('A'),HUE(1,1),SEL(1,1)
  76.          COL(3)        STRING('P'),HUE(1,1),SEL(1,1)
  77.          .          .
  78.  
  79.  
  80. noon         long(4320001)
  81. dt_ok         byte                 !1=DATE/TIME IS CORRECT
  82. dt_chg         byte
  83. first_time   byte                 !1=DATE/TIME CHANGED
  84. dt_ans         string(1)
  85. cur_ampm     string(1)
  86. last_ampm    string(1)
  87. cur_date     long
  88. cur_time_d   long                 !DISPLAY TIME 0:00-12:00
  89. cur_time_r   long                 !REAL TIME 0:00-23:59
  90.  
  91. sTimeRow     BYTE(19)                 !Display Row for Time-DUPLICATED IN CLOCK2_
  92. sTimeCol     BYTE(43)                 !Display Column for Time-DUPLICATED IN CLOCK2_
  93.  
  94.  
  95.                          !--ASK USER IF DATE/TIME IS
  96.   code                         !  CORRECT.
  97.     first_time = 1
  98.     idle(clock2_,1)
  99.  
  100.     dt_chg = 0                     !DATE/TIME NOT CHANGED YET
  101.     dt_ok  = 1                     !DEFAULT TO DATE OK
  102.     open(chk_dt_scr)
  103.     cur_date = today()
  104.     cnvt1200(clock(), cur_time_d, cur_ampm)     !CONVERT TIME TO "hh:mm xM"
  105.     last_ampm = cur_ampm
  106.     display
  107.  
  108.     loop
  109.       alert
  110.       alert(reject_key)                 !PRESSING ^ESC ABORTS
  111.       alert(accept_key)
  112.       if ~dt_chg then                 !FREEZE DATE/TIME IF USER HAS CHANGED IT.
  113.     cur_date = today()             !IN CASE IT'S NEAR MIDNIGHT
  114.     cnvt1200(clock(), cur_time_d, cur_ampm)     !GET CURRENT TIME
  115.       .
  116.       cur_dow = dow(cur_date)
  117.  
  118.       accept
  119.  
  120.       if first_time then               !IF 1ST TIME, GET RID OF IDLE
  121.     first_time = 0
  122.     idle()                       !TURN OFF CLOCK
  123.     cur_date = today()               !IN CASE IT'S NEAR MIDNIGHT
  124.     cnvt1200(clock(), cur_time_d, cur_ampm)       !GET CURRENT TIME
  125.     cur_dow = dow(cur_date)
  126.     show(stimerow,stimecol,'        M   ')       !CLEAR THE SECONDS FROM IDLE TIME
  127.     display                       !REDISPLAY THE TIME
  128.       .
  129.       if keycode() = reject_key then           !USER ABORTED
  130.     dt_ok = 0                   !DID NOT COMPLETE OK
  131.     break                       !EXIT LOOP
  132.       .
  133.  
  134.       if keycode() = ctrl_enter               !ON SCREEN ACCEPT KEY
  135.     update                       !  MOVE ALL FIELDS FROM SCREEN
  136.     select(?)                   !  START WITH CURRENT FIELD
  137.     select                       !  EDIT ALL FIELDS
  138.     dt_ok = 1                   !  USER PRESSED SAVE KEY (^ENTER)
  139.     cycle                       !  GO TO TOP OF LOOP
  140.       .                           !
  141.  
  142.       case field()                   !JUMP TO FIELD EDIT ROUTINE
  143.     of ?dt_ans
  144.       if dt_ans = 'Y' then               !USER SAYS DATE/TIME OK?
  145.         if (dt_chg and year(cur_date) < 1992) or |
  146.            (~dt_chg and year(today()) < 1992) then    !DATE IS TOO LOW?
  147.           beep                    !WAKE UP USER.
  148.           dt_chg = 1
  149.           dt_ans = 'N'                !DEFAULT ANSWER TO "N".
  150.           display(dt_ans)
  151.           cycle                    !FORCE USER TO ENTER
  152.         .                        !  CORRECT DATE.
  153.         dt_ok = 1                 !DATE IS NOT TOO LOW->EXIT
  154.         break
  155.       .
  156.  
  157.     of ?cur_date
  158.       if year(cur_date) < 1992 then         !USER ENTERED INCORRECT DATE
  159.         beep                 !WAKE UP USER & RE-PROMPT FOR
  160.         select(?)                 !  THE CORRECT DATE
  161.         dt_chg = 1
  162.         cycle
  163.       .
  164.       if refer() then             !WAS DATE CHANGED?
  165.         dt_chg = 1
  166.       .
  167.  
  168.     of ?cur_time_d
  169.       if refer() then             !WAS TIME CHANGED?
  170.         dt_chg = 1
  171.       .
  172.  
  173.     of ?cur_ampm
  174.       if refer() and (last_ampm <> cur_ampm) then  !TIME IND. CHANGED?
  175.         dt_chg = 1
  176.       .
  177.       cnvt2400(cur_time_d, cur_ampm, cur_time_r)  !CONVERT DISPLAY TIME TO REAL TIME
  178.       select(?dt_ans)              !ASK USER IF DATE/TIME IS CORRECT
  179.       .
  180.     .
  181.     if dt_chg and dt_ok then             !SET DATE/TIME IF USER HAS
  182.       setclock(cur_time_r)             !  CHANGED THEM.
  183.       settoday(cur_date)
  184.     .
  185.  
  186.     close(chk_dt_scr)
  187.     !idle(your_idle_proc)             !<==CHANGE THIS FOR YOUR IDLE PROC.
  188.     return
  189.  
  190. !--------------------------------
  191. cnvt2400 procedure(time_1200, |       !CONVERT "12:00 AM/PM" TO "24:00" HOURS
  192.            ampm_ind,  |
  193.            time_2400)
  194. time_1200  long
  195. ampm_ind   external
  196. time_2400  external
  197.  
  198. redo_field long
  199. noon       long(4320001)
  200.  
  201.   code
  202.     time_2400 = time_1200
  203.     if time_2400 < noon and ampm_ind = 'P' then        !ADD 12 HOURS?
  204.       time_2400 += noon
  205.     elsif time_2400 >= noon and ampm_ind = 'A' then  !TIME IND IS WRONG?
  206.       ampm_ind = 'P'
  207.     .
  208.     return
  209.  
  210. !--------------------------------
  211. cnvt1200 procedure(time_2400, |       !CONVERT "24:00" HOURS" TO 12:00 AM/PM"
  212.            time_1200, |
  213.            ampm_ind)
  214. time_2400  long
  215. time_1200  external
  216. ampm_ind   external
  217.  
  218. noon       long(4320001)
  219. one_pm       long(4680001)
  220.  
  221.   code
  222.     time_1200 = time_2400
  223.     if time_1200 >= one_pm then                !SUBTRACT 12 HOURS?
  224.       time_1200 -= noon
  225.     .
  226.     if time_2400 >= noon then                !SET AM/PM INDICATOR
  227.       ampm_ind = 'P'
  228.     else
  229.       ampm_ind = 'A'
  230.     .
  231.     return
  232.  
  233. !-------------------------
  234. dow   function(date_in)                !RETURN DAY OF WEEK FOR A DATE
  235. date_in     long
  236. dow_out     string(3)
  237. days     string('SUNMONTUEWEDTHUFRISAT')
  238. vdays     string(3),dim(7),over(days)
  239.  
  240.   code
  241.     dow_out = vdays[(date_in % 7) + 1]
  242.     return(dow_out)
  243.  
  244. !--------------------------
  245. CLOCK2_      PROCEDURE                 !IDLE RTN TO DISPLAY DTE/TIME
  246.  
  247. MEM_SCR         SCREEN      WINDOW(1,30),AT(1,51),HUE(10,3)
  248.  OMIT('**-END-**')
  249.                            Memory Available: <<,<<<,<<#
  250. **-END-**
  251.  
  252.            ROW(1,1)      STRING(' '),HUE(1,3)
  253.          COL(2)      STRING('Memory Available:'),HUE(10,3)
  254. MEM_AVAIL     COL(20)  STRING(@N10),HUE(11,3)
  255.          .
  256.  
  257. start_tm long
  258. cur_tm     long
  259. noon     long(4320001)
  260. one_pm     long(4680001)
  261. cur_ind     string(1)
  262. days     string('SUNMONTUEWEDTHUFRISAT')
  263. vdays     string(3),dim(7),over(days)
  264.  
  265. sDateRow     BYTE(19)             !Display Row for Date
  266. sDateCol     BYTE(29)             !Display Column for Date
  267. sTimeRow     BYTE(19)             !Display Row for Time
  268. sTimeCol     BYTE(43)             !Display Column for Time
  269.  
  270.   CODE
  271.     SHOW(sDateRow, sDateCol, vdays[(today() % 7) + 1] & ' ' & |
  272.      (FORMAT(today(), @D1)) & ' ')
  273.     cur_tm = clock()                !GET hh:mm:ss A/PM
  274.     if cur_tm > noon then            !USE 12 HOUR CLOCK NOT 24
  275.       cur_ind = 'P'
  276.       if cur_tm >= one_pm then            !12 HOURS MAX, THEN 1:00
  277.     cur_tm = cur_tm - noon
  278.       .
  279.     else
  280.       cur_ind = 'A'
  281.     .
  282.  
  283.     SHOW(sTimeRow, sTimeCol, ' ' & |
  284.      FORMAT(cur_tm, @T4) & ' ' & cur_ind & 'M' & ' ')
  285.  
  286.   if keycode() = 3073                 !WHEN USER PRESSES ALT F1
  287.     open(mem_scr)                 !DISPLAY AMOUNT OF
  288.     mem_avail = memory()             !  MEMORY AVAILABLE
  289.     start_tm = clock()                 !  AND WAIT 2 SECONDS
  290.     loop until abs(clock()-start_tm) > 200.
  291.     close(mem_scr)
  292.   .
  293.   return
  294.  
  295.