home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / REND386 / DEVEL5 / DRVLOAD.C < prev    next >
C/C++ Source or Header  |  1992-09-24  |  993b  |  42 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 <stdio.h>
  14. #include <alloc.h>
  15.  
  16. void *load_driver(char *dfile)
  17. {
  18.     FILE *f;
  19.     long s;
  20.     void *d_mem, *d_ptr;
  21.  
  22.     f = fopen(dfile,"rb"); /* open driver file */
  23.     if (f == NULL) return NULL;
  24.  
  25.     fseek(f, 0, SEEK_END); /* find length, get memory */
  26.     s = ftell(f);
  27.     d_mem = (char *) malloc(s+16);
  28.     if (d_mem == NULL)
  29.     {
  30.         fprintf(stderr,"Cannot allocate memory for driver.\n");
  31.         exit(0);
  32.     }/* setup for segment aligned load */
  33.  
  34.     d_ptr = MK_FP(FP_SEG(d_mem),0);
  35.     fseek(f, FP_OFF(d_mem), SEEK_SET);
  36.     fread(d_mem, 16, s-FP_OFF(d_mem), f);
  37.  
  38.     fclose(f);
  39.  
  40.     return d_ptr;
  41. }
  42.