home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / PROCWRKB.ZIP / BENCH1.ZIP / PRINT / DEVAVAIL.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-08-07  |  1.7 KB  |  95 lines

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