rt11FsLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* rt11FsLib.h - header for RT-11 media-compatible file system library */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 02b,22sep92,rrr  added support for c++
  7. 02a,04jul92,jcf  cleaned up.
  8. 02h,26may92,rrr  the tree shuffle
  9. 02g,04oct91,rrr  passed through the ansification filter
  10.   -fixed #else and #endif
  11.   -changed READ, WRITE and UPDATE to O_RDONLY O_WRONLY O_RDWR
  12.   -changed VOID to void
  13.   -changed copyright notice
  14. 02f,10jun91.del  added pragma for gnu960 alignment.
  15. 02e,08oct90,kdl  removed declarations of functions now made LOCAL.
  16. 02d,05oct90,shl  added ANSI function prototypes.
  17.                  added copyright notice.
  18. 02c,10aug90,dnw  added declaration of rt11FsReadyChange().
  19. 02b,09aug90,kdl  changed name from rt11Lib to rt11FsLib.
  20. 02a,07aug90,shl  added IMPORT type to function declarations.
  21. 01z,04may90,kdl  moved volume mode from vol descriptor to BLK_DEV (blkIo.h),
  22.  added vd_changeNoWarn.
  23. 01y,23mar90,kdl  added S_rt11Lib_NO_BLOCK_DEVICE.
  24. 01x,07mar90,kdl  changed to support multi-filesystem device drivers.
  25. 01w,05jun88,dnw  changed rtLib to rt11Lib.
  26. 01v,30may88,dnw  changed to v4 names.
  27. 01u,04may88,jcf  changed SEMAPHORE to SEM_ID.
  28. 01t,25may88,dnw  deleted erroneous ")" in S_rtLib_ENTRY_NUMBER_TOO_BIG def'n.
  29. 01s,19aug87,dnw  changed rfd_start to be int instead of short to support
  30.    disks larger than 32k blocks.
  31. 01r,21mar87,gae  spelling, S_rtLib_ENTRY_NUMBER_TO_BIG.
  32. 01q,04feb87,llk  made changes which allow a one segment directory to have any
  33.    number of file entries.  Segments are now dynamically
  34.    allocated (vd_dir_seg).  Added vd_nSegBlocks field to
  35.    volume descriptor.  It tells how many blocks are in the
  36.    volume descriptor's segment.
  37. 01p,14jan87,llk  added RT_MAX_FILE_SIZE.  Made de_nblocks unsigned.
  38. 01o,24dec86,gae  changed stsLib.h to vwModNum.h.
  39. 01n,16oct86,gae  added vd_mode to RT_VOL_DESC.
  40. 01m,07apr86,dnw  replaced vd_ready flag with vd_state in RT_VOL_DESC.
  41. 01l,11mar86,dnw  added vd_retry to RT_VOL_DESC.
  42. 01k,04sep85,jlf  added vd_ready and vd_reset to RT_VOL_DESC.
  43. 01j,14aug85,dnw  added S_rtLib_INVALID_DEVICE_PARAMETERS.
  44. 01i,28may85,jlf  changed RT_VOL_DESC to contain disk format info, and sec
  45.  read and write routines rather than block.
  46. 01h,13aug84,ecs  changed status codes: NO_ROOM_ON_DISK to DISK_FULL,
  47.    NO_SUCH_FILE to FILE_NOT_FOUND,
  48.    NAME_IN_USE to FILE_ALREADY_EXISTS.
  49. 01g,08aug84,ecs  added status codes and include of stsLib.h.
  50. 01f,01aug84,dnw  removed single density disk definitions, SD_..., to fd208Drv.c.
  51. 01e,06jul84,ecs  removed rfd_entry_num from RT_FILE_DESC.
  52.  added vd_sem to RT_VOL_DESC.
  53.  added include of semLib.h.
  54.  changed rfd_modified from TBOOL to BOOL.
  55. 01d,11jun84,dnw  removed vd_volume and added vd_rdblk, vd_wrtblk, and vd_nblocks
  56.    to RT_VOL_DESC.
  57.  added definitions of SD_RT_... for single density specific
  58.    values.
  59. 01c,27jan84,ecs  added inclusion test.
  60. 01b,14aug83,dnw  replaced RT_FILE_DESC.rfd_vdnum volume descriptor number with
  61.    .rfd_vdptr volume descriptor pointer.
  62.  replaced RT_FILE_DESC.rfd_maxblock end block number with
  63.    .rfd_endptr end byte pointer.
  64. 01a,14Feb83,dnw  written
  65. */
  66. #ifndef __INCrt11FsLibh
  67. #define __INCrt11FsLibh
  68. #ifdef __cplusplus
  69. extern "C" {
  70. #endif
  71. #include "iosLib.h"
  72. #include "semLib.h"
  73. #include "blkIo.h"
  74. #include "vwModNum.h"
  75. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  76. #pragma align 1 /* tell gcc960 not to optimize alignments */
  77. #endif /* CPU_FAMILY==I960 */
  78. /* rt11FsLib status codes */
  79. #define S_rt11FsLib_VOLUME_NOT_AVAILABLE (M_rt11FsLib | 1)
  80. #define S_rt11FsLib_DISK_FULL (M_rt11FsLib | 2)
  81. #define S_rt11FsLib_FILE_NOT_FOUND (M_rt11FsLib | 3)
  82. #define S_rt11FsLib_NO_FREE_FILE_DESCRIPTORS (M_rt11FsLib | 4)
  83. #define S_rt11FsLib_INVALID_NUMBER_OF_BYTES (M_rt11FsLib | 5)
  84. #define S_rt11FsLib_FILE_ALREADY_EXISTS (M_rt11FsLib | 6)
  85. #define S_rt11FsLib_BEYOND_FILE_LIMIT (M_rt11FsLib | 7)
  86. #define S_rt11FsLib_INVALID_DEVICE_PARAMETERS (M_rt11FsLib | 8)
  87. #define S_rt11FsLib_NO_MORE_FILES_ALLOWED_ON_DISK (M_rt11FsLib | 9)
  88. #define S_rt11FsLib_ENTRY_NUMBER_TOO_BIG (M_rt11FsLib | 10)
  89. #define S_rt11FsLib_NO_BLOCK_DEVICE (M_rt11FsLib | 11)
  90. /* rt11Fs file system constants */
  91. #define RT_DIR_BLOCK 6
  92. #define RT_BYTES_PER_BLOCK 512
  93. #define RT_FILES_FOR_2_BLOCK_SEG 72
  94. #define RT_MAX_BLOCKS_PER_FILE 0xffff /* maximum number of blocks per file,
  95.    largest size described by an unsigned
  96.    short (de_nblocks field of
  97.    RT_DIR_ENTRY) */
  98. /* directory entry status values */
  99. #define DES_TENTATIVE 0x0100 /* tentative file */
  100. #define DES_EMPTY 0x0200 /* empty space */
  101. #define DES_PERMANENT 0x0400 /* permanent file */
  102. #define DES_END 0x0800 /* end of directory segment marker */
  103. #define DES_BOGUS 0x0000 /* not a real rt11Fs directory entry */
  104. /* miscellaneous */
  105. #define NOT_IN_USE -1 /* descriptor not-in-use flag,
  106.  *   in fd.rfd_status, vd.rfd_status */
  107. /* rt11Fs radix-50 name structure */
  108. typedef struct /* RT_NAME */
  109.     {
  110.     unsigned short nm_name1; /* filename chars 1-3 in radix-50 */
  111.     unsigned short nm_name2; /* filename chars 4-6 in radix-50 */
  112.     unsigned short nm_type; /* file type chars 1-3 in radix-50 */
  113.     } RT_NAME;
  114. /* directory entry */
  115. typedef struct /* RT_DIR_ENTRY */
  116.     {
  117.     short de_status; /* file status */
  118.     RT_NAME de_name; /* filename in radix-50 structure */
  119.     unsigned short de_nblocks; /* number of blocks in file */
  120.     char  de_jobnum; /* (temp file only) job with file open */
  121.     char  de_channel; /* (temp file only) channel with file is open */
  122.     short de_date; /* file creation date:
  123.  * bits 14-10 = month (1-12) in decimal
  124.  *      bits  9- 5 = day (1-31) in decimal
  125.  *      bits  4- 0 = year minus 110 in octal
  126.  */
  127.     } RT_DIR_ENTRY;
  128. /* directory segment */
  129. typedef struct /* RT_DIR_SEG */
  130.     {
  131.     short ds_nsegs; /* number of segments in directory */
  132.     short ds_next_seg; /* number of next segment (0 = end of list) */
  133.     short ds_last_seg; /* number of highest segment used */
  134.     short ds_extra; /* number of extra bytes on each dir entry */
  135.     short ds_start; /* number of first data block for this seg */
  136.     RT_DIR_ENTRY ds_entries [1]; /* directory entries,
  137.     actual size gets dynamically allocated */
  138.     } RT_DIR_SEG;
  139. /* volume descriptor */
  140. typedef struct /* RT_VOL_DESC */
  141.     {
  142.     DEV_HDR vd_devhdr; /* i/o system device header (MUST COME FIRST!)*/
  143.     short vd_status; /* (OK | ERROR) */
  144.     SEM_ID vd_semId; /* volume descriptor semaphore id */
  145.     BLK_DEV *vd_pBlkDev; /* pointer to block device info */
  146.     int vd_nblocks; /* number of blocks in volume */
  147.     BOOL vd_rtFmt; /* TRUE if using RT-11 skew and track offset */
  148.     int vd_secBlock; /* Number of sectors per block */
  149.     int vd_state; /* state of volume (see below) */
  150.     int vd_retry; /* retry count of disk operations */
  151.     int vd_nSegBlocks; /* number of blocks in the directory segment,
  152.    there are always at least 2 */
  153.     RT_DIR_SEG *vd_dir_seg; /* pointer to current directory segment */
  154.     BOOL vd_changeNoWarn; /* TRUE if disk changed without readyChange */
  155.     } RT_VOL_DESC;
  156. /* volume states */
  157. #define RT_VD_READY_CHANGED 0 /* vol not accessed since ready change*/
  158. #define RT_VD_RESET 1 /* volume reset but not mounted */
  159. #define RT_VD_MOUNTED 2 /* volume mounted */
  160. #define RT_VD_CANT_RESET 3 /* volume reset failed */
  161. #define RT_VD_CANT_MOUNT 4 /* volume mount failed */
  162. /* rt11Fs file descriptor */
  163. typedef struct /* RT_FILE_DESC */
  164.     {
  165.     short rfd_status; /* (OK | NOT_IN_USE) */
  166.     RT_VOL_DESC *rfd_vdptr; /* pointer to rt11Fs volume descriptor */
  167.     int rfd_start; /* number of first block in file */
  168.     short rfd_mode; /* access mode: O_RDONLY, O_WRONLY, O_RDWR */
  169.     RT_DIR_ENTRY rfd_dir_entry; /* directory entry for this file */
  170.     int rfd_curptr; /* file byte ptr of current buffer byte 0 */
  171.     int rfd_newptr; /* file byte ptr for new read/writes */
  172.     int rfd_endptr; /* file byte ptr to end of file */
  173.     BOOL rfd_modified; /* TRUE = buffer has been modified */
  174.     char rfd_buffer [RT_BYTES_PER_BLOCK];
  175. /* file I/O buffer */
  176.     } RT_FILE_DESC;
  177. /* Function declarations */
  178. #if defined(__STDC__) || defined(__cplusplus)
  179. extern RT_VOL_DESC *rt11FsDevInit (char *devName, BLK_DEV *pBlkDev,
  180.    BOOL rt11Fmt, int nEntries,
  181.      BOOL changeNoWarn);
  182. extern RT_VOL_DESC *rt11FsMkfs (char *volName, BLK_DEV *pBlkDev);
  183. extern STATUS  rt11FsInit (int maxFiles);
  184. extern void  rt11FsDateSet (int year, int month, int day);
  185. extern void  rt11FsModeChange (RT_VOL_DESC *vdptr, int newMode);
  186. extern void  rt11FsReadyChange (RT_VOL_DESC *vdptr);
  187. #else /* __STDC__ */
  188. extern RT_VOL_DESC *rt11FsDevInit ();
  189. extern RT_VOL_DESC *rt11FsMkfs ();
  190. extern STATUS  rt11FsInit ();
  191. extern void  rt11FsDateSet ();
  192. extern void  rt11FsModeChange ();
  193. extern void  rt11FsReadyChange ();
  194. #endif /* __STDC__ */
  195. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  196. #pragma align 0 /* turn off alignment requirement */
  197. #endif /* CPU_FAMILY==I960 */
  198. #ifdef __cplusplus
  199. }
  200. #endif
  201. #endif /* __INCrt11FsLibh */