home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / ms_dos / ish / ish200s / ish200s.lzh / TIMEZONE.H < prev    next >
Text File  |  1990-03-27  |  11KB  |  599 lines

  1. ;
  2. ;        ish file converter for MS-DOS  Ver 2.00 (90/3/27)
  3. ;
  4. ;
  5. ;        Copyright (c) 1986, 1987, 1989, 1990  by  M. ishizuka
  6. ;        All rights reserved.
  7. ;
  8.  
  9.  
  10.  
  11. ;-----------------------------------------------;
  12. ;                        ;
  13. ;    @@get_tz                ;
  14. ;                        ;
  15. ;    INPUT :    NON                ;
  16. ;    OUTPUT:    NON                ;
  17. ;    ERROR :    _error_40, error_41        ;
  18. ;    BREAK : flags, ax, cx, dx, si, di    ;
  19. ;                        ;
  20. ;-----------------------------------------------;
  21.  
  22. @@get_tz    macro
  23.         mov    si, offset tz
  24.         call    search_env
  25.         jnz    get_tz_5
  26.         mov    cx, 3
  27. get_tz_1:    lodsb
  28.         or    al, al
  29.         jz    _error_40
  30.         loop    get_tz_1
  31.         lodsb
  32.         cmp    al, '-'
  33.         pushf
  34.         jz    get_tz_1_1
  35.         cmp    al, '+'
  36.         jnz    get_tz_2
  37. get_tz_1_1:    lodsb
  38. get_tz_2:    sub    al, '0'
  39.         mov    ah, al
  40.         mov    al, 0
  41.         jc    get_tz_3
  42.         cmp    ah, 10
  43.         jnc    get_tz_3
  44.         lodsb
  45.         sub    al, '0'
  46.         xchg    ah, al
  47.         jc    get_tz_3
  48.         cmp    ah, 10
  49.         jnc    get_tz_3
  50.         add    al, al
  51.         add    ah, al
  52.         add    al, al
  53.         add    al, al
  54.         add    al, ah
  55. get_tz_3:    popf
  56.         jnz    get_tz_4
  57.         neg    al
  58. get_tz_4:    cbw
  59.         mov    si, es
  60.         mov    ds, si
  61.         mov    dx, 3600d
  62.         imul    dx
  63.         mov    word ptr tz_low, ax
  64.         mov    word ptr tz_high, dx
  65.         mov    byte ptr tz_avail, 0ffh
  66. get_tz_5:    mov    si, es
  67.         mov    ds, si
  68.         mov    si, offset ishtz
  69.         call    search_env
  70.         jnz    get_tz_6
  71.         mov    ax, 3d00h
  72.         mov    dx, si
  73.         int    21h
  74.         mov    si, es
  75.         mov    ds, si
  76.         jc    error_41
  77.         mov    word ptr tz_handler, ax
  78. get_tz_6:    mov    si, es
  79.         mov    ds, si
  80.         endm
  81.  
  82.  
  83.  
  84. ;-----------------------------------------------;
  85. ;                        ;
  86. ;    @@set_difference_of_time        ;
  87. ;                        ;
  88. ;    INPUT :    NON                ;
  89. ;    OUTPUT:    NON                ;
  90. ;    ERROR :    error_42            ;
  91. ;    BREAK : flags, ax, bx, cx, dx, si, di    ;
  92. ;                        ;
  93. ;-----------------------------------------------;
  94.  
  95. @@set_difference_of_time    macro
  96.         mov    bx, word ptr tz_handler
  97.         or    bx, bx
  98.         jz    set_difference_of_time_6
  99.         mov    ax, 4200h
  100.         xor    cx, cx
  101.         xor    dx, dx
  102.         int    21h            ; rewind
  103.         jc    error_42
  104.         mov    word ptr tag_work, 0
  105. set_difference_of_time_0:
  106.         call    skip_cr_lf
  107.         jc    set_difference_of_time_6
  108.         cmp    al, 1ah
  109.         jz    set_difference_of_time_6
  110.         call    get_num2        ; year high
  111.         cbw
  112.         mov    cx, ax
  113.         call    get_num2        ; year low
  114.         cbw
  115.         add    cx, cx
  116.         add    cx, cx
  117.         add    ax, cx
  118.         add    cx, cx
  119.         add    cx, cx
  120.         add    cx, cx
  121.         add    ax, cx
  122.         add    cx, cx
  123.         add    ax, cx
  124.         cmp    ax, 2100d
  125.         jnc    error_42
  126.         sub    ax, 1980d
  127.         jc    error_42
  128.         mov    dh, al
  129.         mov    cl, '-'
  130.         call    get_and_check
  131.         call    get_num2        ; month
  132.         cmp    al, 13d
  133.         jnc    error_42
  134.         shl    al, 1
  135.         shl    al, 1
  136.         shl    al, 1
  137.         shl    al, 1
  138.         mov    dl, al
  139.         shl    dx, 1
  140.         call    get_and_check
  141.         call    get_num2        ; date
  142.         cmp    al, 32d
  143.         jnc    error_42
  144.         or    dl, al
  145.         mov    di, dx
  146.         call    get_and_check
  147.         call    get_num2        ; hour
  148.         cmp    al, 24d
  149.         jnc    error_42
  150.         mov    dh, al
  151.         mov    cl, ':'
  152.         call    get_and_check
  153.         call    get_num2        ; minite
  154.         cmp    al, 60d
  155.         jnc    error_42
  156.         shl    al, 1
  157.         shl    al, 1
  158.         mov    dl, al
  159.         shl    dx, 1
  160.         shl    dx, 1
  161.         shl    dx, 1
  162.         call    get_and_check
  163.         call    get_num2        ; second
  164.         cmp    al, 60d
  165.         jnc    error_42
  166.         shr    al, 1
  167.         or    dl, al
  168.         cmp    di, word ptr work_table[29]
  169.         jc    set_difference_of_time_1
  170.         jnz    set_difference_of_time_5
  171.         cmp    dx, word ptr work_table[27]
  172.         jnbe    set_difference_of_time_5
  173. set_difference_of_time_1:
  174.         call    skip_space2
  175.         call    get_num2        ; year high
  176.         cbw
  177.         mov    cx, ax
  178.         call    get_num2        ; year low
  179.         cbw
  180.         add    cx, cx
  181.         add    cx, cx
  182.         add    ax, cx
  183.         add    cx, cx
  184.         add    cx, cx
  185.         add    cx, cx
  186.         add    ax, cx
  187.         add    cx, cx
  188.         add    ax, cx
  189.         cmp    ax, 2100d
  190.         jnc    error_42
  191.         sub    ax, 1980d
  192.         jc    error_42
  193.         mov    dh, al
  194.         mov    cl, '-'
  195.         call    get_and_check
  196.         call    get_num2        ; month
  197.         cmp    al, 13d
  198.         jnc    error_42
  199.         shl    al, 1
  200.         shl    al, 1
  201.         shl    al, 1
  202.         shl    al, 1
  203.         mov    dl, al
  204.         shl    dx, 1
  205.         call    get_and_check
  206.         call    get_num2        ; date
  207.         cmp    al, 32d
  208.         jnc    error_42
  209.         or    dl, al
  210.         mov    di, dx
  211.         call    get_and_check
  212.         call    get_num2        ; hour
  213.         cmp    al, 24d
  214.         jnc    error_42
  215.         mov    dh, al
  216.         mov    cl, ':'
  217.         call    get_and_check
  218.         call    get_num2        ; minite
  219.         cmp    al, 60d
  220.         jnc    error_42
  221.         shl    al, 1
  222.         shl    al, 1
  223.         mov    dl, al
  224.         shl    dx, 1
  225.         shl    dx, 1
  226.         shl    dx, 1
  227.         call    get_and_check
  228.         call    get_num2        ; second
  229.         cmp    al, 60d
  230.         jnc    error_42
  231.         shr    al, 1
  232.         or    dl, al
  233.         cmp    word ptr work_table[29], di
  234.         jc    set_difference_of_time_2
  235.         jnz    set_difference_of_time_5
  236.         cmp    word ptr work_table[27], dx
  237.         jnbe    set_difference_of_time_5
  238. set_difference_of_time_2:
  239.         call    skip_space2
  240.         call    get_para_char
  241.         jc    error_42
  242.         cmp    al, '-'
  243.         pushf
  244.         jz    set_difference_of_time_3
  245.         cmp    al, '+'
  246.         jz    set_difference_of_time_3
  247.         dec    si
  248. set_difference_of_time_3:
  249.         call    get_num2        ; hour
  250.         mov    cx, 60d*256d + ':'
  251.         mul    ch
  252.         mov    dx, ax
  253.         call    get_and_check
  254.         call    get_num2        ; minite
  255.         cbw
  256.         add    dx, ax
  257.         call    get_and_check
  258.         call    get_num2        ; second
  259.         cbw
  260.         mov    cx, ax
  261.         mov    ax, 60
  262.         mul    dx
  263.         add    ax, cx
  264.         adc    dx, 0
  265.         popf
  266.         jnz    set_difference_of_time_7
  267.         not    ax
  268.         not    dx
  269.         add    ax, 1
  270.         adc    dx, 0
  271.         jmp    set_difference_of_time_7
  272.  
  273. set_difference_of_time_5:
  274.         call    skip_to_cr_lf
  275.         jnc    set_difference_of_time_0
  276. set_difference_of_time_6:
  277.         cmp    byte ptr tz_avail, 0
  278.         jz    set_difference_of_time_8
  279.         mov    ax, word ptr tz_low
  280.         mov    dl, byte ptr tz_high
  281. set_difference_of_time_7:
  282.         mov    word ptr work_table[31], ax
  283.         mov    byte ptr work_table[33], dl
  284.         or    byte ptr work_table[26], 2
  285. set_difference_of_time_8:
  286.         endm
  287.  
  288.  
  289.  
  290. ;-----------------------------------------------;
  291. ;                        ;
  292. ;    @@set_local_time            ;
  293. ;                        ;
  294. ;    INPUT :    ax (difference of time low)    ;
  295. ;        dx (difference of time high)    ;
  296. ;    OUTPUT:    NON                ;
  297. ;    ERROR :    NON                ;
  298. ;    BREAK : flags, ax, bx, cx, dx, si    ;
  299. ;                        ;
  300. ;-----------------------------------------------;
  301.  
  302. @@set_local_time    macro
  303.         not    ax
  304.         not    dx
  305.         add    ax, 1
  306.         adc    dx, 0
  307.         mov    si, offset utc
  308.         call    local_time_to_utc
  309.         mov    ax, word ptr utc
  310.         mov    dx, word ptr utc[2]
  311.         mov    cx, 60d
  312.         div    cx
  313.         div    cl
  314.         xchg    ah, al
  315.         shl    al, 1
  316.         shl    al, 1
  317.         shl    ax, 1
  318.         shl    ax, 1
  319.         shl    ax, 1
  320.         shr    dl, 1
  321.         or    al, dl
  322.         mov    word ptr save_time, ax
  323.         mov    ax, word ptr utc[4]
  324.         add    ax, 101h
  325.         mov    dx, word ptr utc[6]
  326.         cmp    dx, 2099d
  327.         jnbe    set_local_time_0
  328.         sub    dx, 1980d
  329.         jc    set_local_time_1
  330.         xchg    al, dl
  331.         xchg    ah, al
  332.         shl    al, 1
  333.         shl    al, 1
  334.         shl    al, 1
  335.         shl    al, 1
  336.         shl    ax, 1
  337.         or    al, dl
  338.         jmp    set_local_time_2
  339.  
  340. set_local_time_0:
  341.         mov    word ptr save_time, 0bd7dh    ; 23:59:59
  342.         mov    ax, 0ef9fh            ; 2099-12-31
  343.         jmp    set_local_time_1
  344.  
  345. set_local_time_1:
  346.         mov    word ptr save_time, 0        ; 00:00:00
  347.         mov    ax, 21h                ; 1980-01-01
  348. set_local_time_2:
  349.         mov    word ptr save_date, ax
  350.         endm
  351.  
  352.  
  353.  
  354. ;-----------------------------------------------;
  355. ;                        ;
  356. ;    @@get_local_time            ;
  357. ;                        ;
  358. ;    INPUT :    NON                ;
  359. ;    OUTPUT:    NON                ;
  360. ;    ERROR :    error_42            ;
  361. ;    BREAK : flags, ax, bx, cx, dx, si, di    ;
  362. ;                        ;
  363. ;-----------------------------------------------;
  364.  
  365. @@get_local_time    macro
  366.         mov    al, byte ptr date_time_flag
  367.         and    al, 3
  368.         cmp    al, 3
  369.         jnz    get_local_time_10
  370.         cmp    word ptr save_date, 0
  371.         jz    get_local_time_10
  372.         call    set_utc
  373.         mov    bx, word ptr tz_handler
  374.         or    bx, bx
  375.         jz    get_local_time_8
  376.         mov    ax, 4200h
  377.         xor    cx, cx
  378.         xor    dx, dx
  379.         int    21h            ; rewind
  380.         jc    error_42
  381.         mov    word ptr tag_work, 0
  382. get_local_time_0:
  383.         call    skip_cr_lf
  384.         jc    get_local_time_8
  385.         cmp    al, 1ah
  386.         jz    get_local_time_8
  387.         call    get_num2        ; year high
  388.         cbw
  389.         mov    cx, ax
  390.         call    get_num2        ; year low
  391.         cbw
  392.         add    cx, cx
  393.         add    cx, cx
  394.         add    ax, cx
  395.         add    cx, cx
  396.         add    cx, cx
  397.         add    cx, cx
  398.         add    ax, cx
  399.         add    cx, cx
  400.         add    ax, cx
  401.         cmp    ax, 2100d
  402.         jnc    error_42
  403.         cmp    ax, 1980d
  404.         jc    error_42
  405.         mov    word ptr local_time_work[6], ax
  406.         mov    cl, '-'
  407.         call    get_and_check
  408.         call    get_num2        ; month
  409.         dec    al
  410.         cmp    al, 12d
  411.         jnc    error_42
  412.         mov    byte ptr local_time_work[5], al
  413.         call    get_and_check
  414.         call    get_num2        ; date
  415.         dec    al
  416.         cmp    al, 31d
  417.         jnc    error_42
  418.         mov    byte ptr local_time_work[4], al
  419.         call    get_and_check
  420.         call    get_num2        ; hour
  421.         cmp    al, 24d
  422.         jnc    error_42
  423.         mov    cx, 60d*256d + ':'
  424.         mul    ch
  425.         mov    dx, ax
  426.         call    get_and_check
  427.         call    get_num2        ; minite
  428.         cmp    al, 60d
  429.         jnc    error_42
  430.         cbw
  431.         add    dx, ax
  432.         call    get_and_check
  433.         call    get_num2        ; second
  434.         cmp    al, 60d
  435.         jnc    error_42
  436.         cbw
  437.         mov    cx, ax
  438.         mov    ax, 60d
  439.         mul    dx
  440.         add    ax, cx
  441.         adc    dx, 0
  442.         mov    word ptr local_time_work, ax
  443.         mov    word ptr local_time_work[2], dx
  444.         call    skip_space2
  445.         call    get_num2        ; year high
  446.         cbw
  447.         mov    cx, ax
  448.         call    get_num2        ; year low
  449.         cbw
  450.         add    cx, cx
  451.         add    cx, cx
  452.         add    ax, cx
  453.         add    cx, cx
  454.         add    cx, cx
  455.         add    cx, cx
  456.         add    ax, cx
  457.         add    cx, cx
  458.         add    ax, cx
  459.         cmp    ax, 2100d
  460.         jnc    error_42
  461.         cmp    ax, 1980d
  462.         jc    error_42
  463.         mov    word ptr local_time_work[14], ax
  464.         mov    cl, '-'
  465.         call    get_and_check
  466.         call    get_num2        ; month
  467.         dec    al
  468.         cmp    al, 12d
  469.         jnc    error_42
  470.         mov    byte ptr local_time_work[13], al
  471.         call    get_and_check
  472.         call    get_num2        ; date
  473.         dec    al
  474.         cmp    al, 31d
  475.         jnc    error_42
  476.         mov    byte ptr local_time_work[12], al
  477.         call    get_and_check
  478.         call    get_num2        ; hour
  479.         cmp    al, 24d
  480.         jnc    error_42
  481.         mov    cx, 60d*256d + ':'
  482.         mul    ch
  483.         mov    dx, ax
  484.         call    get_and_check
  485.         call    get_num2        ; minite
  486.         cmp    al, 60d
  487.         jnc    error_42
  488.         cbw
  489.         add    dx, ax
  490.         call    get_and_check
  491.         call    get_num2        ; second
  492.         cmp    al, 60d
  493.         jnc    error_42
  494.         cbw
  495.         mov    cx, ax
  496.         mov    ax, 60d
  497.         mul    dx
  498.         add    ax, cx
  499.         adc    dx, 0
  500.         mov    word ptr local_time_work[8], ax
  501.         mov    word ptr local_time_work[10], dx
  502.         call    skip_space2
  503.         call    get_para_char
  504.         jc    error_42
  505.         cmp    al, '-'
  506.         pushf
  507.         jz    get_local_time_3
  508.         cmp    al, '+'
  509.         jz    get_local_time_3
  510.         dec    si
  511. get_local_time_3:
  512.         call    get_num2        ; hour
  513.         mov    cx, 60d*256d + ':'
  514.         mul    ch
  515.         mov    dx, ax
  516.         call    get_and_check
  517.         call    get_num2        ; minite
  518.         cbw
  519.         add    dx, ax
  520.         call    get_and_check
  521.         call    get_num2        ; second
  522.         cbw
  523.         mov    cx, ax
  524.         mov    ax, 60d
  525.         mul    dx
  526.         add    ax, cx
  527.         adc    dx, 0
  528.         popf
  529.         jnz    get_local_time_4
  530.         not    ax
  531.         not    dx
  532.         add    ax, 1
  533.         adc    dx, 0
  534. get_local_time_4:
  535.         mov    word ptr local_time_work[16], ax
  536.         mov    word ptr local_time_work[18], dx
  537.         push    si
  538.         mov    si, offset local_time_work[0]
  539.         push    bx
  540.         call    local_time_to_utc
  541.         pop    bx
  542.         pop    si
  543.         mov    ax, word ptr local_time_work[6]
  544.         cmp    ax, word ptr utc[6]
  545.         jc    get_local_time_5
  546.         jnz    get_local_time_7
  547.         mov    ax, word ptr local_time_work[4]
  548.         cmp    ax, word ptr utc[4]
  549.         jc    get_local_time_5
  550.         jnz    get_local_time_7
  551.         mov    ax, word ptr local_time_work[2]
  552.         cmp    ax, word ptr utc[2]
  553.         jc    get_local_time_5
  554.         jnz    get_local_time_7
  555.         mov    ax, word ptr local_time_work
  556.         cmp    ax, word ptr utc
  557.         jnbe    get_local_time_7
  558. get_local_time_5:
  559.         mov    ax, word ptr local_time_work[16]
  560.         mov    dx, word ptr local_time_work[18]
  561.         push    si
  562.         mov    si, offset local_time_work[8]
  563.         push    bx
  564.         call    local_time_to_utc
  565.         pop    bx
  566.         pop    si
  567.         mov    ax, word ptr utc[6]
  568.         cmp    ax, word ptr local_time_work[14]
  569.         jc    get_local_time_6
  570.         jnz    get_local_time_7
  571.         mov    ax, word ptr utc[4]
  572.         cmp    ax, word ptr local_time_work[12]
  573.         jc    get_local_time_6
  574.         jnz    get_local_time_7
  575.         mov    ax, word ptr utc[2]
  576.         cmp    ax, word ptr local_time_work[10]
  577.         jc    get_local_time_6
  578.         jnz    get_local_time_7
  579.         mov    ax, word ptr utc
  580.         cmp    ax, word ptr local_time_work[8]
  581.         jnbe    get_local_time_7
  582. get_local_time_6:
  583.         mov    ax, word ptr local_time_work[16]
  584.         mov    dx, word ptr local_time_work[18]
  585.         jmp    get_local_time_9
  586.  
  587. get_local_time_7:
  588.         call    skip_to_cr_lf
  589.         jnc    get_local_time_0
  590. get_local_time_8:
  591.         cmp    byte ptr tz_avail, 0
  592.         jz    get_local_time_10
  593.         mov    ax, word ptr tz_low
  594.         mov    dx, word ptr tz_high
  595. get_local_time_9:
  596.         @@set_local_time
  597. get_local_time_10:
  598.         endm
  599.