www.pudn.com > bootmenu.zip > S_I386.C
/* This file contains system-specific functions suitable for * most AT&T System V/386 variants (ISC,SCO,Intel...). * The program pfdisk.c calls these routines. */ #include#include #include #include #define extern #include "sysdep.h" #undef extern int usage(prog) /* print a usage message */ char *prog; /* program name */ { fprintf(stderr,"Usage: %s dev\n\ where 'dev' is the device name, i.e. /dev/rdsk/0p0\n\ (The device must start on absolute sector zero.)\n",prog); } void getGeometry(dev, c, h, s) char *dev; /* device name */ unsigned *c,*h,*s; /* cyls, heads, sectors */ { int devfd, retval; struct disk_parms dp; devfd = open(dev, O_RDONLY, 0); if (devfd < 0) { fprintf(stderr,"%s: can't open for reading\n", dev); return; } retval = ioctl(devfd, V_GETPARMS, &dp); close(devfd); if (retval < 0) { fprintf(stderr,"%s: can't get disk parameters\n", dev); return; } if (dp.dp_type != DPT_WINI) { fprintf(stderr,"%s: not a Winchester Disk\n", dev); return; } *c = dp.dp_cyls; *h = dp.dp_heads; *s = dp.dp_sectors; } int getFile(name, buf, len) /* read file into buffer */ char *name, *buf; int len; { /* (open, read, close) */ int devfd, retval; devfd = open(name, O_RDONLY, 0); if (devfd < 0) { fprintf(stderr,"%s: can't open for reading\n", name); return(devfd); } retval = read(devfd, buf, len); if (retval < 0) fprintf(stderr,"%s: read failed\n", name); close(devfd); return(retval); } int putFile(name, buf, len) /* write buffer to file */ char *name, *buf; int len; { /* (open, write, close) */ int devfd, retval; devfd = open(name, O_WRONLY|O_CREAT, 0666); if (devfd < 0) { fprintf(stderr,"%s: can't open for writing\n", name); return(devfd); } retval = write(devfd, buf, len); if (retval < 0) fprintf(stderr,"%s: write failed\n", name); close(devfd); return(retval); } int getBBlk(devname, buffer) /* read block into buffer */ char *devname, *buffer; /* (open, read, close) */ { int devfd, retval; devfd = open(devname,O_RDONLY); if (devfd < 0) { printf("%s: can't open for read\n", devname); return(devfd); } retval = read(devfd, buffer, SECSIZE); close(devfd); return(retval); } int putBBlk(devname, buffer) /* write buffer to device */ char *devname, *buffer; /* (open, write, close) */ { int devfd, retval; devfd = open(devname,O_WRONLY); if (devfd < 0) { printf("%s: can't open for write\n",devname); return(devfd); } retval = write(devfd, buffer, SECSIZE); sync(); close(devfd); return(retval); }