home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / linux / backup / star-1.3.1.tar.gz / star-1.3.1.tar / star-1.3.1 / include / device.h < prev    next >
C/C++ Source or Header  |  2001-02-17  |  4KB  |  136 lines

  1. /* @(#)device.h    1.8 01/02/17 Copyright 1995 J. Schilling */
  2. /*
  3.  *    Generic header for users of major(), minor() and makedev()
  4.  *
  5.  *    NOTE: You need to include <sys/types.h> before <device.h>
  6.  *
  7.  *    Copyright (c) 1995 J. Schilling
  8.  */
  9. /*
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2, or (at your option)
  13.  * any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; see the file COPYING.  If not, write to
  22.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  */
  24.  
  25. #ifndef    _DEVICE_H
  26. #define    _DEVICE_H
  27.  
  28. #ifndef _MCONFIG_H
  29. #include <mconfig.h>
  30. #endif
  31.  
  32. /*
  33.  * On generic SVR4, major is a function (defined in sys/mkdev.h).
  34.  * On Solaris it is defined ...
  35.  * As we cannot just test if major is #define'd, we have to 
  36.  * define _FOUND_MAJOR_ instead.
  37.  *
  38.  * WARNING: Do never include <sys/sysmacros.h> in SVR4, it contains
  39.  * an old definition for major()/minor() defining 8 minorbits.
  40.  * Use <sys/mkdev.h> instead.
  41.  */
  42. #ifndef    _INCL_SYS_TYPES_H
  43. #include <sys/types.h>
  44. #define    _INCL_SYS_TYPES_H
  45. #endif
  46. /*
  47.  * Some systems define major in <sys/types.h>.
  48.  * We are ready...
  49.  */
  50. #ifdef major
  51. #    define _FOUND_MAJOR_
  52. #endif
  53.  
  54. #ifdef MAJOR_IN_MKDEV
  55. #    include <sys/mkdev.h>
  56. #    define _FOUND_MAJOR_
  57. #endif
  58.  
  59. #ifndef _FOUND_MAJOR_
  60. #    ifdef MAJOR_IN_SYSMACROS
  61. #        include <sys/sysmacros.h>
  62. #        define _FOUND_MAJOR_
  63. #    endif
  64. #endif
  65.  
  66. /*
  67.  * If we are on HP/UX before HP/UX 8,
  68.  * major/minor are not in <sys/sysmacros.h>.
  69.  */
  70. #ifndef _FOUND_MAJOR_
  71. #    if defined(hpux) || defined(__hpux__) || defined(__hpux)
  72. #        include <sys/mknod.h>
  73. #        define _FOUND_MAJOR_
  74. #    endif
  75. #endif
  76.  
  77. #ifdef    __cplusplus
  78. extern "C" {
  79. #endif
  80.  
  81. /*
  82.  * For all other systems define major()/minor() here.
  83.  * XXX Check if this definition will be usefull for ms dos too.
  84.  */
  85. #ifndef _FOUND_MAJOR_
  86. #    define major(dev)        (((dev) >> 8) & 0xFF)
  87. #    define minor(dev)        ((dev) & 0xFF)
  88. #    define makedev(majo, mino)    (((majo) << 8) | (mino))
  89. #endif
  90.  
  91. /*
  92.  * Don't pollute namespace...
  93.  */
  94. #undef _FOUND_MAJOR_
  95.  
  96. #ifdef    __XDEV__
  97. /*
  98.  * The following defines are currently only needed for 'star'.
  99.  * We make it conditional code to avoid to pollute the namespace.
  100.  */
  101. #define    XDEV_T    unsigned long
  102.  
  103. extern    int    minorbits;
  104. extern    XDEV_T    minormask;
  105. extern    XDEV_T    _dev_mask[];
  106.  
  107. #define    dev_major(dev)            (((XDEV_T)(dev)) >> minorbits)
  108. #define    _dev_major(mbits,dev)        (((XDEV_T)(dev)) >> (mbits))
  109.  
  110. #define    dev_minor(dev)            (((XDEV_T)(dev)) & minormask)
  111. #define    _dev_minor(mbits,dev)        (((XDEV_T)(dev)) & _dev_mask[(mbits)])
  112.  
  113.  
  114. #define    dev_make(majo, mino)        ((((XDEV_T)(majo)) << minorbits) | \
  115.                             ((XDEV_T)(mino)))
  116. #define    _dev_make(mbits,majo,mino)    ((((XDEV_T)(majo)) << (mbits) | \
  117.                             ((XDEV_T)(mino)))
  118.  
  119. extern    void    dev_init    __PR((BOOL debug));
  120. #ifndef    dev_major
  121. extern    XDEV_T    dev_major    __PR((XDEV_T dev));
  122. extern    XDEV_T    _dev_major    __PR((int mbits, XDEV_T dev));
  123. extern    XDEV_T    dev_minor    __PR((XDEV_T dev));
  124. extern    XDEV_T    _dev_minor    __PR((int mbits, XDEV_T dev));
  125. extern    XDEV_T    dev_make    __PR((XDEV_T majo, XDEV_T mino));
  126. extern    XDEV_T    _dev_make    __PR((int mbits, XDEV_T majo, XDEV_T mino));
  127. #endif
  128.  
  129. #endif    /* __XDEV__ */
  130.  
  131. #ifdef    __cplusplus
  132. }
  133. #endif
  134.  
  135. #endif    /* _DEVICE_H */
  136.