home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / REND386 / JIREND / DRVLOAD.C < prev    next >
C/C++ Source or Header  |  1993-04-11  |  1KB  |  43 lines

  1. /* Code for loading drivers at runtime */
  2.   
  3. /* Written by Dave Stampe, August 1992 */
  4.   
  5. /* Copyright 1992 by Dave Stampe and Bernie Roehl.
  6.    May be freely used to write software for release into the public domain;
  7.    all commercial endeavours MUST contact Bernie Roehl and Dave Stampe
  8.    for permission to incorporate any part of this software into their
  9.    products!
  10.  */
  11.   
  12. #include <dos.h>
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15. #include <alloc.h>
  16.   
  17. void *load_driver(char *dfile)
  18. {
  19.    FILE *f;
  20.    long s;
  21.    void *d_mem, *d_ptr;
  22.   
  23.    f = fopen(dfile,"rb"); /* open driver file */
  24.    if (f == NULL) return NULL;
  25.   
  26.    fseek(f, 0, SEEK_END); /* find length, get memory */
  27.    s = ftell(f);
  28.    d_mem = (char *) malloc(s+16);
  29.    if (d_mem == NULL)
  30.    {
  31.       fprintf(stderr,"Cannot allocate memory for driver.\n");
  32.       exit(0);
  33.    }/* setup for segment aligned load */
  34.   
  35.    d_ptr = MK_FP(FP_SEG(d_mem),0);
  36.    fseek(f, FP_OFF(d_mem), SEEK_SET);
  37.    fread(d_mem, 16, s-FP_OFF(d_mem), f);
  38.   
  39.    fclose(f);
  40.   
  41.    return d_ptr;
  42. }
  43.