home *** CD-ROM | disk | FTP | other *** search
/ Game Fest 1993 / gamefest1993stgcomputerslimited1993.iso / soft / more3 / pro3 / 1pass.doc next >
Text File  |  1990-09-19  |  10KB  |  261 lines

  1. Substitute for DISKCOPY with more:
  2. 1.) Copies with one pass
  3. 2.) Allows multiple copies with one reading
  4. 3.) Detects destination and formats if necessary
  5. 4.) Uses Expanded memory when available
  6. 5.) Uses Hard Disk C:\ for temporary storage if necessary
  7. 6.) Checks its own CRC for integrity
  8.  
  9.  
  10. I used Microsoft C version 6 as a code generator for 1PASS.EXE printf
  11. and loops. The rest is all MASM 5.1.
  12.  
  13. If anyone wants the ASM and/or C source, drop me a note at CompuServe
  14. (70206,1177). I will also welcome all comments.
  15.  
  16. These are the ASM functions called from MSC 6.0 to MASM5.1.
  17. ==================================================================
  18. extern   gotoXY( short, short);
  19. /* locates  cursor ( row, col ) */
  20. ==================================================================
  21. extern   writeXY( short, short, short, short);
  22. /* locates and writes ( row, col, char to write, attribute) */
  23. ==================================================================
  24. extern   format( unsigned, unsigned, unsigned);
  25. /* formats ( disk number 0=A etc.,size 360 720 1200 1440, verify 1 yes 0 no */
  26. char _far *( _far *DDPT) = ((void _far *) 0x78); 0000:0078
  27. DPPT = Diskette Drive Parameter Table. If BIOS does not recognize it,
  28. format will fail. I have only tried it on my NEC 386SX
  29. _setmedia uses ISR 13h functions 17h and 18h called with
  30.  
  31. AH=17h
  32. AL=2 for 360k  in 1200K drive
  33. AL=3 for 1200k in 1200k drive
  34. AL=4 for 720k  in 720k  drive
  35.          720k  in 1140k  drive
  36.          1140k in 1440k  drive
  37. AH=18h
  38. CH= number of tracks
  39. CL= sectors per track
  40. DL= drive number
  41.  
  42. _formats uses ISR 13h function 5
  43. AL= number of sectors to format
  44. CH= cylinder number
  45. DH= head number
  46. DL= drive number
  47. ES:BX pointer to address field for sectors
  48.  
  49. format() does not verify when called from 1PASS.EXE. The program uses
  50. DOS absolute write after format() is called. These are the only that might
  51. have compatibility problems.
  52. ==================================================================
  53. extern   chkems( char *);
  54. /* chkems( pointer to "EMMXXX0" ) return 0 if EMS driver present */
  55. ==================================================================
  56. extern   emstat( int *, int *, int *);
  57. /* returns( EMS page frame, total pages, available pages ) */
  58. ==================================================================
  59. extern   emsalloc( int *, int *);
  60. /* returns( ems handle, pages allocated) */
  61. ==================================================================
  62. extern   emsdealloc( int *);
  63. /* deallocates( ems handle ) */
  64. ==================================================================
  65. extern   emsmap( int *, int *, int *);
  66. /* maps  ( handle, logical page to, physical page) */
  67. ==================================================================
  68. extern   absread( void _far *, unsigned, unsigned, unsigned);
  69. /* reads ( into far buffer, starting sector, drive #, number of sectors) */
  70. ==================================================================
  71. extern   abswrite( void _far *, unsigned, unsigned, unsigned);
  72. /* writes( from far buffer, starting sector, drive #, number of sectors) */
  73. ==================================================================
  74. extern   tcreate(char _far *);
  75. /* creates file( far pointer to name) returns handle if Ok else 0 */
  76. ==================================================================
  77. extern   topen(char _far *);
  78. /* opens file( far pointer to name) returns handle if Ok else 0 */
  79. ==================================================================
  80. extern   twrite(char _far *, unsigned, unsigned);
  81. /* writes to file( from far pointer buffer, handle, times) return 0 bad write*/
  82. ==================================================================
  83. extern   tread(char _far *, unsigned, unsigned);
  84. /* reads from file ( to far pointer buffer, handle, times) return 0 bad read  */
  85. ==================================================================
  86. extern   tclose( unsigned );
  87. /* close ( handle ) */
  88. ==================================================================
  89. extern   tdelete( char _far *);
  90. /* erases ( file pointed to by far name ) */
  91. ==================================================================
  92. extern   fcrc16( void _far *, unsigned, unsigned *);
  93. /*  ( far ptr to data, length in bytes, pointer to 0 return 16 bit CRC)  */
  94. ==================================================================
  95. extern   crc16( char *, unsigned, unsigned *);
  96. /*  ( near ptr to data, length in bytes, pointer to 0 return 16 bit CRC)  */
  97. ==================================================================
  98. extern   fcrcitt( void _far *, unsigned, unsigned *);
  99. /*  ( far ptr to data, length in bytes, pointer to 0 return 16 bit CRC)  */
  100. /* CCITT */
  101. ==================================================================
  102. extern   crcitt( char *, unsigned, unsigned *);
  103. /*  ( near ptr to data, length in bytes, pointer to 0 return 16 bit CRC)  */
  104. /* CCITT */
  105. ==================================================================
  106. extern   cls( void );
  107. /* clear screen by scrolling up one page */
  108. ==================================================================
  109. extern   cursor( unsigned , unsigned *);
  110. /* turn cursor( on=1/off=0, pointer to save cursor before turning off)  */
  111. ==================================================================
  112. extern   checkc( void _far *);
  113. checkc ( far pointer to a UNION REGS type:( same as in C but in MASM 5.1)
  114. if(reg.x.ax = 0xFFFF) drive C: does not exist
  115. ==================================================================
  116. _absread..........ABSREAD           _abswrite.........ABSWRITE
  117. _checkc...........CHECKC            _chkems...........CHKEMS
  118. _cls..............CLS               _crc16............CRC16
  119. _crc32............CRC32             _crc32m...........CRC32M
  120. _crcitt...........CRCITT            _cursor...........CURSOR
  121. _DDPT.............FMS               _emsalloc.........EMSALLOC
  122. _emsdealloc.......EMSDEALL          _emsmap...........EMSMAP
  123. _emstat...........EMSTAT            _fcrc16...........CRC16
  124. _fcrc32...........FCRC32            _fcrc32m..........FCRC32M
  125. _fcrcitt..........CRCITT            _find_f...........FIND_F
  126. _format...........FMS               _formats..........FMS
  127. _format_t.........FORMAT_T          _gotoXY...........GOTOXY
  128. _head0............FMS               _head1............FMS
  129. _make_table.......FCRC32M           _pass.............FMS
  130. _reset_t..........VERIFY_T          _setmedia.........SETMEDIA
  131. _tclose...........TCLOSE            _tcreate..........TCREATE
  132. _tdelete..........TDELETE           _topen............TOPEN
  133. _tracks...........FMS               _tread............TREAD
  134. _tseek............TSEEK             _twrite...........TWRITE
  135. _verify...........FMS               _verify_t.........VERIFY_T
  136. _writeXY..........WRITEXY           
  137.  
  138. ABSREAD           Offset: 00000010H  Code and data size: 24H
  139.   _absread        
  140.  
  141. ABSWRITE          Offset: 00000120H  Code and data size: 24H
  142.   _abswrite       
  143.  
  144. CHECKC            Offset: 00000230H  Code and data size: 3cH
  145.   _checkc         
  146.  
  147. CHKEMS            Offset: 00000350H  Code and data size: 1aH
  148.   _chkems         
  149.  
  150. CLS               Offset: 00000450H  Code and data size: 28H
  151.   _cls            
  152.  
  153. CRC16             Offset: 00000550H  Code and data size: 2b1H
  154.   _crc16            _fcrc16         
  155.  
  156. CRC32             Offset: 00000900H  Code and data size: 47fH
  157.   _crc32          
  158.  
  159. CRC32M            Offset: 00000e80H  Code and data size: 7dH
  160.   _crc32m         
  161.  
  162. CRCITT            Offset: 00000fe0H  Code and data size: 2b1H
  163.   _crcitt           _fcrcitt        
  164.  
  165. CURSOR            Offset: 00001390H  Code and data size: 2bH
  166.   _cursor         
  167.  
  168. EMSALLOC          Offset: 000014a0H  Code and data size: 1aH
  169.   _emsalloc       
  170.  
  171. EMSDEALL          Offset: 000015a0H  Code and data size: 11H
  172.   _emsdealloc     
  173.  
  174. EMSMAP            Offset: 000016a0H  Code and data size: 1aH
  175.   _emsmap         
  176.  
  177. EMSTAT            Offset: 000017a0H  Code and data size: 20H
  178.   _emstat         
  179.  
  180. FCRC32            Offset: 000018a0H  Code and data size: 485H
  181.   _fcrc32         
  182.  
  183. FCRC32M           Offset: 00001e20H  Code and data size: e1H
  184.   _fcrc32m          _make_table     
  185.  
  186. FIND_F            Offset: 00002000H  Code and data size: 31H
  187.   _find_f         
  188.  
  189. FORMAT_T          Offset: 00002110H  Code and data size: 28H
  190.   _format_t       
  191.  
  192. FMS               Offset: 00002220H  Code and data size: 20cH
  193.   _DDPT             _format           _formats          _head0
  194.   _head1            _pass             _tracks           _verify
  195.  
  196. GOTOXY            Offset: 000026b0H  Code and data size: 1bH
  197.   _gotoXY         
  198.  
  199. SETMEDIA          Offset: 000027b0H  Code and data size: 33H
  200.   _setmedia       
  201.  
  202. TCLOSE            Offset: 000028d0H  Code and data size: 18H
  203.   _tclose         
  204.  
  205. TCREATE           Offset: 000029d0H  Code and data size: 1cH
  206.   _tcreate        
  207.  
  208. TDELETE           Offset: 00002ad0H  Code and data size: 18H
  209.   _tdelete        
  210.  
  211. TOPEN             Offset: 00002bd0H  Code and data size: 19H
  212.   _topen          
  213.  
  214. TREAD             Offset: 00002cd0H  Code and data size: 1eH
  215.   _tread          
  216.  
  217. TSEEK             Offset: 00002dd0H  Code and data size: 25H
  218.   _tseek          
  219.  
  220. TWRITE            Offset: 00002ed0H  Code and data size: 1eH
  221.   _twrite         
  222.  
  223. VERIFY_T          Offset: 00002fd0H  Code and data size: 37H
  224.   _reset_t          _verify_t       
  225.  
  226. WRITEXY           Offset: 00003100H  Code and data size: 28H
  227.   _writeXY        
  228.  
  229. @ res file to update subs.lib
  230. +ABSREAD  &
  231. +ABSWRITE &
  232. +CHECKC   &
  233. +CHKEMS   &
  234. +CLS      &
  235. +CRC16    &
  236. +CRC32    &
  237. +CRC32M   &
  238. +CRCITT   &
  239. +CURSOR   &
  240. +EMSALLOC &
  241. +EMSDEALL &
  242. +EMSMAP   &
  243. +EMSTAT   &
  244. +FCRC32   &
  245. +FCRC32M  &
  246. +FIND_F   &
  247. +FORMAT_T &
  248. +FMS      &
  249. +GOTOXY   &
  250. +MAKE_TAB &
  251. +SETMEDIA &
  252. +TCLOSE   &
  253. +TCREATE  &
  254. +TDELETE  &
  255. +TOPEN    &
  256. +TREAD    &
  257. +TSEEK    &
  258. +TWRITE   &
  259. +VERIFY_T &
  260. +WRITEXY
  261.