home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 406_01 / disked25 / source / diskio.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-13  |  5.4 KB  |  135 lines

  1. /***
  2. *diskio.h - definitions/declarations for direct disk I/O
  3. *
  4. *   Copyright (c) 1991-1994, Gregg Jennings.  All wrongs reserved.
  5. *
  6. *Purpose:
  7. *   For use with the diskio() and diskerror() functions
  8. *   [ANSI/System V]
  9. *
  10. *******************************************************************************/
  11.  
  12. #ifndef DISKIO_HEADER
  13. #define DISKIO_HEADER
  14.  
  15. #ifndef GENERAL_H
  16. #include "general.h"
  17. #endif
  18.  
  19. /* function prototypes */
  20.  
  21. extern word sectortocluster(dword sector);
  22. extern dword logicalsector(word track, word sector, word head);
  23. extern dword clustertosector(word cluster);
  24. extern word clustersector(dword sector);
  25. extern dword logicalsector(word track, word sector, word head);
  26.  
  27. extern int diskio(int command, long arg, unsigned char *buffer);
  28.  
  29. extern unsigned long ncluster(int);
  30. extern void dumpsector(void);
  31. extern int exterror(void);
  32.  
  33. /* diskio() command values */
  34.  
  35. #define DISK_INIT 0x001         /* initialize all globals */
  36. #define DISK_SHOW 0x002         /* display selected sector */
  37. #define DISK_SET  0x004         /* set */
  38. #define DISK_INC  0x008         /* increment */
  39. #define DISK_READ 0x010         /* read */
  40. #define DISK_WRITE 0x020        /* write */
  41. #define DISK_SAVE 0x040         /* store selected sector */
  42. #define DISK_REST 0x080         /* restore sector */
  43.  
  44. /* diskio() return values */
  45.  
  46. #define DISK_OK       0         /* no errors */
  47. /*#define DISK_CORRUPT  (-4)      /* boot record corrupt */
  48. /*#define DISK_BOUNDS   (-7)      /* logical sector value out of bounds */
  49. /*#define DISK_MEM_ERR  (-8)      /* not enough memory */
  50.  
  51. #define DISK_NREADY   2
  52.  
  53. /* MACRO examples */
  54.  
  55. #define logdisk(d)      (diskio(DISK_INIT,(long)d,sec_buf))
  56. #define rootsector()    (diskio(DISK_SET,(long)dir_sector,sec_buf))
  57. #define bootsector()    (diskio(DISK_SET,0L,sec_buf))
  58. #define fatsector()     (diskio(DISK_SET,(long)reserved_secs,sec_buf))
  59. #define lastsector()    (diskio(DISK_SET,(long)(num_sectors-1),sec_buf))
  60. #define savesector()    (diskio(DISK_SAVE,0L,sec_buf))
  61. #define restoresector() (diskio(DISK_REST,0L,sec_buf))
  62. #define readsector()    (diskio(DISK_READ,-1L,sec_buf))
  63. #define readsec(sec)    (diskio(DISK_READ,(long)sec,sec_buf))
  64. #define writesector()   (diskio(DISK_WRITE,-1L,sec_buf))
  65. #define nextsector()    (diskio(DISK_INC,1L,sec_buf))
  66. #define backsector()    (diskio(DISK_INC,-1L,sec_buf))
  67. #define movesector(n)   (diskio(DISK_INC,(long)n,sec_buf))
  68. #define setsector(n)    (diskio(DISK_SET,(long)n,sec_buf))
  69. #define setphysical(t,s,h) (diskio(DISK_SET,(long)logicalsector(t,s,h),sec_buf))
  70. #define setcluster(n)   (diskio(DISK_SET,(long)(clustertosector(n)),sec_buf))
  71. #define nextcluster()   (diskio(DISK_SET,(long)ncluster(1),sec_buf))
  72. #define backcluster()   (diskio(DISK_SET,(long)ncluster(-1),sec_buf))
  73. #define nexttrack() \
  74.          (diskio(DISK_SET,\
  75.          (long)logicalsector(((track==max_track)?(0):(track+1)),\
  76.          sector,head),sec_buf))
  77. #define backtrack() \
  78.          (diskio(DISK_SET,\
  79.          (long)logicalsector(((track==0)?(max_track):(track-1)),\
  80.          sector,head),sec_buf))
  81. #define nexthead() \
  82.          (diskio(DISK_SET,\
  83.          (long)logicalsector(track,sector,\
  84.          ((head==max_head-1) ? (0) : (head+1)) ),sec_buf))
  85. #define backhead() \
  86.          (diskio(DISK_SET,\
  87.          (long)logicalsector(track,sector,\
  88.          ((head==0) ? (max_head-1) : (head-1)) ),sec_buf))
  89.  
  90.  
  91. /* globals for constant drive values */
  92.  
  93.    /* physical values */
  94.  
  95. extern unsigned long drive_size;     /* drive size in bytes */
  96. extern unsigned int sec_size;        /* sector size, usually 512 bytes */
  97. extern unsigned int max_head;        /* maximum disk head number */
  98. extern unsigned int max_sector;      /* maximum sector number */
  99. extern unsigned int max_track;       /* maximum track number */
  100. extern unsigned long hidden_secs;    /* number of hidden sectors on a hard drive */
  101. extern unsigned int reserved_secs;   /* number of hidden sectors on a hard drive */
  102.  
  103.    /* logical values */
  104.  
  105. extern unsigned long num_sectors;         /* total number of sectors */
  106. extern unsigned num_clusters;        /* maximum cluster no. */
  107. extern unsigned int data_sector;     /* first data sector */
  108. extern unsigned int dir_sector;      /* start of root directory */
  109. extern unsigned int dir_sectors;     /* number of sectors of root */
  110. extern unsigned int cluster_size;    /* cluster size in bytes */
  111. extern unsigned int sec_size;        /* sector size, usually 512 bytes */
  112. extern unsigned int secs_cluster;    /* sectors per cluster */
  113. extern unsigned int secs_fat;        /* sectors per FAT */
  114. extern unsigned int num_fats;        /* number of FATs */
  115. extern unsigned int dir_entries;     /* number of directory entries */
  116. extern unsigned int max_drive;       /* maximum drive number */
  117. extern int fat_size;                 /* 12 or 16 */
  118. extern char format[];               /* name of format */
  119. extern char volume[];              /* volume label */
  120. extern char fatsize[];              /* FAT size, DOS 4+ */
  121. extern unsigned char *sec_buf;
  122. extern unsigned avail_clusters;
  123.  
  124. /* globals for variable drive values */
  125.  
  126. extern unsigned long log_sector;          /* logical sector no. */
  127. extern unsigned int disk;            /* drive number 0+ */
  128. extern unsigned int head;            /* physical head no. 0-max_head */
  129. extern unsigned int track;           /* physical track no. 0-max_track */
  130. extern unsigned int sector;          /* physical sector number 1-max_sector */
  131.  
  132. extern int diskio_error;
  133.  
  134. #endif
  135.