home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 125.img / PRO-C4.ZIP / BENCH1.ZIP / PRINT / DEVAVAIL.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-28  |  1.6 KB  |  92 lines

  1. #include <stdio.h>
  2. #include <bench.h>
  3. #include <prt.h>
  4.  
  5. #ifdef MSDOS
  6. #define MK_FP(seg,ofs)    ((void far *) \
  7.                (((unsigned long)(seg) << 16) | (unsigned)(ofs)))
  8.  
  9. union devun
  10. {
  11.     int devarr[7];
  12.     struct devtab dt;
  13. };
  14. #endif
  15.  
  16. int devavail(devtab)
  17. struct devtab *devtab;
  18. {
  19. #ifdef MSDOS
  20.     union devun devun;
  21.     int i;
  22.     int far *address;
  23.     int devctr = 0;
  24.  
  25.     for(i = 0; i < 7; i++)
  26.     {
  27.         address = MK_FP(0, 0x400 + i * 2);
  28.         devun.devarr[i] = *address;
  29.         if (*address)
  30.             devctr++;
  31.     }
  32.  
  33.     memcpy(devtab, &devun.dt, sizeof(struct devtab));
  34.  
  35.     return(devctr);
  36. #else
  37.     return(1);
  38. #endif
  39. }
  40.  
  41. char **get_devs(numdevs, devtab)
  42. int numdevs;
  43. struct devtab *devtab;
  44. {
  45.     char **devices;
  46.     int devctr;
  47.     int ctr;
  48.     int ctr2;
  49.  
  50.     devices = (char **)alloc((numdevs + 1) * sizeof(char *));
  51.     for(devctr = 0; devctr < (numdevs + 1); devctr++)
  52. #ifdef MSDOS
  53.         devices[devctr] = (char *)alloc(5 * sizeof(char));
  54. #else
  55.         devices[devctr] = (char *)alloc(8 * sizeof(char));
  56. #endif
  57.  
  58. #ifdef MSDOS
  59.     devctr = 0;
  60.     strcpy(devices[devctr++], "File");
  61.     for(ctr = 0; ctr < 4; ctr++)
  62.         if (devtab->com[ctr])
  63.             sprintf(devices[devctr++], "com%d", ctr + 1);
  64.     ctr2 = 0;
  65.     for(ctr = 0; ctr < 3; ctr++)
  66.         if (devtab->lpt[ctr])
  67.         {
  68.             sprintf(devices[devctr], "lpt%d", ctr + 1);
  69.             devices[devctr][ctr2] = toupper(devices[devctr][ctr2]);
  70.             devctr++;
  71.             ctr2++;
  72.         }
  73. #else
  74.     strcpy(devices[0], "File");
  75.     strcpy(devices[1], "Printer");
  76. #endif
  77.  
  78.     return(devices);
  79. }
  80.  
  81. void free_devs(numdevs, devices)
  82. int numdevs;
  83. char **devices;
  84. {
  85.     int ctr;
  86.  
  87.     for(ctr = 0; ctr < (numdevs + 1); ctr++)
  88.         free(devices[ctr]);
  89.  
  90.     free(devices);
  91. }
  92.