home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / DOS_HELP / LISTDEV.ZIP / DEV.C next >
Encoding:
C/C++ Source or Header  |  1991-02-20  |  2.2 KB  |  108 lines

  1. /*  DEV.C show installated device drivers, and related properties
  2.     Public domain by Paolo Bevilacqua, Rome */
  3.  
  4.  
  5.  
  6. #include <dos.h>
  7.  
  8. #pragma pack(1)
  9.  
  10. struct dev_t {
  11.     struct dev_t far *next;
  12.     unsigned short
  13.     stdin  :1,
  14.     stdout :1,
  15.     nul    :1,
  16.     clock  :1,
  17.     specl  :1,
  18.            :1,
  19.     gioctl :1,
  20.            :4,
  21.     ocrm   :1,
  22.     network:1,
  23.     ibm_otb:1,
  24.     ioctl  :1,
  25.     chr    :1;
  26.     void near *strat,
  27.      near *intr;
  28.     char name[8];
  29. };
  30.  
  31. struct lst_t {
  32.     void far *lst_dskblk,
  33.      far *lst_1,
  34.      far *lst_clockdev,
  35.      far *lst_condev;
  36.     unsigned short lst_maxbyt;
  37.     void far *lst_2,
  38.      far *lst_3,
  39.      far *lst_4;
  40.     unsigned short lst_5;
  41.     unsigned char lst_ndevblk,
  42.       lst_lstdrv;
  43.     struct dev_t far *lst_dev;
  44. };
  45. #pragma pack()
  46.  
  47. struct lst_t far *getlst();
  48.  
  49. main()
  50. {
  51.  
  52.     struct dev_t far *dev;
  53.     struct lst_t far *lst;
  54.  
  55.     lst = getlst();
  56.     dev = lst->lst_dev;
  57.  
  58.     printf(
  59. "                       Gioctl ──┐  ┌── Specl\n"
  60. "                      Ocrm ──┐  │  │  ┌── Clock\n"
  61. "                Network ──┐  │  │  │  │  ┌── Nul\n"
  62. "        NonIBM / Otb ──┐  │  │  │  │  │  │  ┌── Stdout\n"
  63. "            Ioctl ──┐  │  │  │  │  │  │  │  │  ┌── Stdin\n"
  64. " Address    Type    │  │  │  │  │  │  │  │  │  │    Strat  Intr   Name/Units\n");
  65.  
  66.     do printdev(dev);
  67.     while ((short)(dev=dev->next) != -1);
  68. }
  69.  
  70.  
  71. struct lst_t far *getlst() {
  72.  
  73.     union REGS regs;
  74.     struct SREGS sregs;
  75.  
  76.     regs.h.ah = 0x52;
  77.  
  78.     intdosx(®s, ®s, &sregs);
  79.  
  80.     return (struct lst_t far *)(((long)sregs.es << 16) + regs.x.bx);
  81. }
  82.  
  83. printdev(struct dev_t far *dev) {
  84.  
  85.     printf(
  86.        "%Fp   %s   %c  %c  %c  %c  %c  %c  %c  %c  %c  %c    %04X   %04X   ",
  87.        (void far *)dev,
  88.        dev->chr ? "Char " : "Block",
  89.        dev->ioctl   ? 'X' : ' ',
  90.        dev->ibm_otb ? 'X' : ' ',
  91.        dev->network ? 'X' : ' ',
  92.        dev->ocrm    ? 'X' : ' ',
  93.        dev->gioctl  ? 'X' : ' ',
  94.        dev->specl   ? 'X' : ' ',
  95.        dev->clock   ? 'X' : ' ',
  96.        dev->nul     ? 'X' : ' ',
  97.        dev->stdout  ? 'X' : ' ',
  98.        dev->stdin   ? 'X' : ' ',
  99.        dev->strat,
  100.        dev->intr
  101.     );
  102.  
  103.     if (dev->chr)
  104.     printf("%8.8Fs\n", dev->name);
  105.     else
  106.     printf("%d Units\n", dev->name[0]);
  107. }
  108.