home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / HARDDISK / BOOTM13.ZIP / S_I386.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-17  |  2.7 KB  |  115 lines

  1. /* This file contains system-specific functions suitable for
  2.  * most AT&T System V/386 variants (ISC,SCO,Intel...).
  3.  * The program pfdisk.c calls these routines.
  4.  */
  5. #include <stdio.h>
  6. #include <fcntl.h>
  7. #include <sys/types.h>
  8. #include <sys/vtoc.h>
  9.  
  10. #define extern
  11. #include "sysdep.h"
  12. #undef extern
  13.  
  14. int usage(prog)    /* print a usage message */
  15. char    *prog;    /* program name */
  16. {
  17.   fprintf(stderr,"Usage: %s dev\n\
  18.     where 'dev' is the device name, i.e. /dev/rdsk/0p0\n\
  19.     (The device must start on absolute sector zero.)\n",prog);
  20. }
  21.  
  22. void getGeometry(dev, c, h, s)
  23. char    *dev;        /* device name */
  24. unsigned *c,*h,*s;    /* cyls, heads, sectors */
  25. {
  26.   int devfd, retval;
  27.   struct disk_parms dp;
  28.   
  29.   devfd = open(dev, O_RDONLY, 0);
  30.   if (devfd < 0) {
  31.     fprintf(stderr,"%s: can't open for reading\n", dev);
  32.     return;
  33.   }
  34.   retval = ioctl(devfd, V_GETPARMS, &dp);
  35.   close(devfd);
  36.   if (retval < 0) {
  37.     fprintf(stderr,"%s: can't get disk parameters\n", dev);
  38.     return;
  39.   }
  40.   if (dp.dp_type != DPT_WINI) {
  41.     fprintf(stderr,"%s: not a Winchester Disk\n", dev);
  42.     return;
  43.   }
  44.   *c = dp.dp_cyls;
  45.   *h = dp.dp_heads;
  46.   *s = dp.dp_sectors;
  47. }
  48.  
  49. int getFile(name, buf, len)    /* read file into buffer */
  50. char    *name, *buf;
  51. int    len;
  52. {    /* (open, read, close) */
  53.   int devfd, retval;
  54.   
  55.   devfd = open(name, O_RDONLY, 0);
  56.   if (devfd < 0) {
  57.     fprintf(stderr,"%s: can't open for reading\n", name);
  58.     return(devfd);
  59.   }
  60.   retval = read(devfd, buf, len);
  61.   if (retval < 0)
  62.     fprintf(stderr,"%s: read failed\n", name);
  63.   close(devfd);
  64.   return(retval);
  65. }
  66.  
  67. int putFile(name, buf, len)    /* write buffer to file */
  68. char    *name, *buf;
  69. int    len;
  70. {    /* (open, write, close) */
  71.   int devfd, retval;
  72.   
  73.   devfd = open(name, O_WRONLY|O_CREAT, 0666);
  74.   if (devfd < 0) {
  75.     fprintf(stderr,"%s: can't open for writing\n", name);
  76.     return(devfd);
  77.   }
  78.   retval = write(devfd, buf, len);
  79.   if (retval < 0)
  80.     fprintf(stderr,"%s: write failed\n", name);
  81.   close(devfd);
  82.   return(retval);
  83. }
  84.  
  85. int getBBlk(devname, buffer)    /* read block into buffer */
  86. char    *devname, *buffer;    /* (open, read, close) */
  87. {
  88.   int devfd, retval;
  89.   
  90.   devfd = open(devname,O_RDONLY);
  91.   if (devfd < 0) {
  92.     printf("%s: can't open for read\n", devname);
  93.     return(devfd);
  94.   }
  95.   retval = read(devfd, buffer, SECSIZE);
  96.   close(devfd);
  97.   return(retval);
  98. }
  99.  
  100. int putBBlk(devname, buffer)    /* write buffer to device */
  101. char    *devname, *buffer;    /* (open, write, close) */
  102. {
  103.   int devfd, retval;
  104.   
  105.   devfd = open(devname,O_WRONLY);
  106.   if (devfd < 0) {
  107.     printf("%s: can't open for write\n",devname);
  108.     return(devfd);
  109.   }
  110.   retval = write(devfd, buffer, SECSIZE);
  111.   sync();
  112.   close(devfd);
  113.   return(retval);
  114. }
  115.