home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / ms_dos / ish / ish200s / ish200s.lzh / MULTIVOL.H < prev    next >
Text File  |  1990-03-27  |  3KB  |  167 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. ;    @@calc_max_division            ;
  14. ;                        ;
  15. ;    INPUT :    ax (each size low)        ;
  16. ;        dx (each size high)        ;
  17. ;        bx (file size low)        ;
  18. ;        bp (file size high)        ;
  19. ;    OUTPUT:    cx (max division number)    ;
  20. ;    ERROR :    error_21            ;
  21. ;    BREAK : flags                ;
  22. ;                        ;
  23. ;-----------------------------------------------;
  24.  
  25. @@calc_max_division    macro
  26.         push    bx
  27.         push    bp
  28.         xor    cx, cx
  29. calc_max_division_1:
  30.         inc    cx
  31.         jz    error_21
  32.         sub    bx, ax
  33.         sbb    bp, dx
  34.         jnc    calc_max_division_1
  35.         cmp    cx, MAX_DIVISION_NUMBER
  36.         ja    error_21
  37.         mov    word ptr max_division, cx
  38.         mov    byte ptr work_table[1], 1
  39.         pop    bp
  40.         pop    bx
  41.         endm
  42.  
  43.  
  44.  
  45. ;-----------------------------------------------;
  46. ;                        ;
  47. ;    @@calc_each_size            ;
  48. ;                        ;
  49. ;    INPUT :    ax (multi volume number)    ;
  50. ;    OUTPUT:    ax (size low)            ;
  51. ;        dx (size high)            ;
  52. ;    ERROR :    error_25            ;
  53. ;    BREAK : flags, bx, cx            ;
  54. ;                        ;
  55. ;-----------------------------------------------;
  56.  
  57. @@calc_each_size    macro
  58.         mov    cx, ax
  59.         xor    dx, dx
  60.         mov    bx, word ptr title_length
  61.         add    ax, bx
  62.         adc    dx, 0
  63.         inc    bx
  64.         jz    calc_each_size_1
  65.         div    bx
  66.         sub    cx, ax
  67.         jc    error_25
  68.         xor    dx, dx
  69. calc_each_size_1:
  70.         mov    ax, cx
  71.         sub    ax, 5
  72.         jc    error_25
  73.         mov    bx, word ptr para_68_62
  74.         div    bx
  75.         or    ax, ax
  76.         jnz    calc_each_size_2
  77.         mov    ax, dx
  78.         sub    ax, 2
  79.         jbe    error_25
  80.         mov    bx, word ptr para_66_60
  81.         jmp    calc_each_size_3
  82.  
  83. calc_each_size_2:
  84.         mov    bx, word ptr para_66$66_60$60
  85. calc_each_size_3:
  86.         mul    bx
  87.         sub    ax, 2
  88.         sbb    dx, 0
  89.         endm
  90.  
  91.  
  92.  
  93. ;-----------------------------------------------;
  94. ;                        ;
  95. ;    @@calc_last_division_lines        ;
  96. ;                        ;
  97. ;    INPUT :    ax (each size low)        ;
  98. ;        dx (each size high)        ;
  99. ;        bx (file size low)        ;
  100. ;        bp (file size high)        ;
  101. ;        cx (max division number)    ;
  102. ;    OUTPUT:    NON                ;
  103. ;    ERROR :    NON                ;
  104. ;    BREAK : flags, ax, bx, cx, dx, bp    ;
  105. ;                        ;
  106. ;-----------------------------------------------;
  107.  
  108. @@calc_last_division_lines    macro
  109.         dec    cx
  110. calc_last_division_lines_1:
  111.         sub    bx, ax
  112.         sbb    bp, dx
  113.         loop    calc_last_division_lines_1
  114.         mov    ax, bx
  115.         mov    dx, bp
  116.         mov    word ptr last_division_bytes_low, ax
  117.         mov    word ptr last_division_bytes_high, dx
  118.         push    si
  119.         call    calc_lines
  120.         inc    ax
  121.         pop    si
  122.         mov    word ptr last_division_lines, ax
  123.         endm
  124.  
  125.  
  126.  
  127. ;-----------------------------------------------;
  128. ;                        ;
  129. ;    @@set_each_size                ;
  130. ;                        ;
  131. ;    INPUT :    NON                ;
  132. ;    OUTPUT:    NON                ;
  133. ;    ERROR :    error_25            ;
  134. ;    BREAK : flags, ax, bx, cx, dx, bp    ;
  135. ;                        ;
  136. ;-----------------------------------------------;
  137.  
  138. @@set_each_size    macro
  139.         push    si
  140.         mov    ax, word ptr mv_num
  141.         or    ax, ax
  142.         jz    set_each_size_skip
  143.         @@calc_each_size
  144.         push    ax
  145.         push    dx
  146.         call    calc_lines
  147.         inc    ax
  148.         mov    word ptr mv_num, ax
  149.         pop    dx
  150.         pop    ax
  151.         mov    bx, word ptr work_table[2]
  152.         mov    bp, word ptr work_table[4]
  153.         @@cmp_dd    dx, ax, bp, bx
  154.         jnc    set_each_size_1
  155.         mov    word ptr work_table[40], ax
  156.         mov    word ptr work_table[42], dx
  157.         @@calc_max_division
  158.         @@calc_last_division_lines
  159.         jmp    set_each_size_2
  160.  
  161. set_each_size_1:
  162.         mov    word ptr mv_num, 0
  163. set_each_size_2:
  164. set_each_size_skip:
  165.         pop    si
  166.         endm
  167.