home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <bench.h>
- #include <prt.h>
-
- #ifdef MSDOS
- #define MK_FP(seg,ofs) ((void far *) \
- (((unsigned long)(seg) << 16) | (unsigned)(ofs)))
-
- union devun
- {
- int devarr[7];
- struct devtab dt;
- };
- #endif
-
- int devavail(devtab)
- struct devtab *devtab;
- {
- #ifdef MSDOS
- union devun devun;
- int i;
- int far *address;
- int devctr = 0;
-
- for(i = 0; i < 7; i++)
- {
- address = MK_FP(0, 0x400 + i * 2);
- devun.devarr[i] = *address;
- if (*address)
- devctr++;
- }
-
- memcpy(devtab, &devun.dt, sizeof(struct devtab));
-
- return(devctr);
- #else
- return(1);
- #endif
- }
-
- char **get_devs(numdevs, devtab)
- int numdevs;
- struct devtab *devtab;
- {
- char **devices;
- int devctr;
- int ctr;
- int ctr2;
-
- devices = (char **)alloc((numdevs + 1) * sizeof(char *));
- for(devctr = 0; devctr < (numdevs + 1); devctr++)
- #ifdef MSDOS
- devices[devctr] = (char *)alloc(5 * sizeof(char));
- #else
- devices[devctr] = (char *)alloc(8 * sizeof(char));
- #endif
-
- #ifdef MSDOS
- devctr = 0;
- strcpy(devices[devctr++], "File");
- for(ctr = 0; ctr < 4; ctr++)
- if (devtab->com[ctr])
- sprintf(devices[devctr++], "com%d", ctr + 1);
- ctr2 = 0;
- for(ctr = 0; ctr < 3; ctr++)
- if (devtab->lpt[ctr])
- {
- sprintf(devices[devctr], "lpt%d", ctr + 1);
- devices[devctr][ctr2] = toupper(devices[devctr][ctr2]);
- devctr++;
- ctr2++;
- }
- #else
- strcpy(devices[0], "File");
- strcpy(devices[1], "Printer");
- #endif
-
- return(devices);
- }
-
- void free_devs(numdevs, devices)
- int numdevs;
- char **devices;
- {
- int ctr;
-
- for(ctr = 0; ctr < (numdevs + 1); ctr++)
- free(devices[ctr]);
-
- free(devices);
- }
-