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