home *** CD-ROM | disk | FTP | other *** search
/ C++ Games Programming / CPPGAMES.ISO / digmid / real / loader.c < prev    next >
C/C++ Source or Header  |  1993-10-19  |  3KB  |  144 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include "loader.h"  // loader prototypes.
  5. #include "doscalls.h" // Include header file for access to common DOS routines.
  6. #include "digplay.h" // Include header for DIGPAK functions.
  7. #include "midpak.h"  // Include header for MIDPAK functions.
  8.  
  9. static int HaveDigPak=0; // True if DigPak driver currently loaded.
  10. static int DigPakOn=0;     // True if loaded DigPak driver is initialized.
  11. static char far *DigPakLoad; // DigPak Load address.
  12. static int    DigPakPara; // DigPak load at paragraph boundary.
  13.  
  14. static int HaveMidPak=0; // True if MidPak driver is loaded.
  15. static int MidPakOn=0;     // True if MidPak driver is initialized.
  16. static char far *MidPakLoad; // MidPak load address.
  17. static char far *MidPakAdv;  // MidPak ADV driver.
  18. static char far *MidPakAd;     // MidPak AD file.
  19. static int    AdvPara;         // Paragraph boundary of ADV driver.
  20. static int    MidPakPara; // Midpak load at paragraph boundary.
  21.  
  22. unsigned char far * far memalloc(long int siz);
  23. void far memfree(char far *memory);
  24.  
  25. int LoadDigPak(char far *fname)
  26. {
  27.     long int siz;
  28.  
  29.     if ( HaveDigPak ) return(0); // DigPak is allready loaded, trying to load it twice!
  30.     DigPakLoad = floadpara(fname,&siz,&DigPakPara);
  31.     if ( DigPakLoad )
  32.     {
  33.         HaveDigPak = 1; // driver was loaded. not yet initialized though.
  34.     }
  35.     return(HaveDigPak);
  36. }
  37.  
  38. int InitDigPak(void)
  39. {
  40.     if ( HaveDigPak )
  41.     {
  42.         DigPakOn = InitDP(DigPakPara);
  43.     }
  44.     return(DigPakOn);
  45. }
  46.  
  47. int DeInitDigPak(void)
  48. {
  49.     if ( DigPakOn )
  50.     {
  51.         DeInitDP(DigPakPara);
  52.         DigPakOn = 0;
  53.         return(1);
  54.     }
  55.     return(0);
  56. }
  57.  
  58. int UnLoadDigPak(void)
  59. {
  60.     if ( HaveDigPak )
  61.     {
  62.         if ( DigPakOn ) DeInitDigPak();
  63.         memfree(DigPakLoad);
  64.         DigPakLoad = 0;
  65.         HaveDigPak = 0;
  66.         return(1);
  67.     }
  68.     return(0);
  69. }
  70.  
  71.  
  72. int LoadMidPak(char far *fname,char far *adv,char far *ad)
  73. {
  74.     long int siz;
  75.  
  76.     if ( HaveMidPak ) return(0); // MidPak is allready loaded, trying to load it twice!
  77.     MidPakLoad = floadpara(fname,&siz,&MidPakPara);
  78.     if ( MidPakLoad )
  79.     {
  80.         MidPakAdv = floadpara(adv,&siz,&AdvPara);
  81.         if ( !MidPakAdv )
  82.         {
  83.             memfree(MidPakLoad);
  84.             return(0);
  85.         }
  86.         if ( ad )
  87.         {
  88.             MidPakAd = fload(ad,&siz);
  89.             if ( !MidPakAd )
  90.             {
  91.                 memfree(MidPakAdv);
  92.                 memfree(MidPakLoad);
  93.                 return(0);
  94.             }
  95.         }
  96.         else
  97.             MidPakAd = 0;
  98.         HaveMidPak = 1; // driver was loaded. not yet initialized though.
  99.     }
  100.     return(HaveMidPak);
  101. }
  102.  
  103. int InitMidPak(void)
  104. {
  105.     int ret;
  106.     if ( HaveMidPak )
  107.     {
  108.         ret = InitMP(MidPakPara,AdvPara,MidPakAd);
  109.         if ( ret )
  110.             MidPakOn = 0;
  111.         else
  112.             MidPakOn = 1;
  113.     }
  114.     return(MidPakOn);
  115. }
  116.  
  117. int DeInitMidPak(void)
  118. {
  119.     if ( MidPakOn )
  120.     {
  121.         MidiStop(); // Stop any playing midi sequence
  122.         DeInitMP(MidPakPara);
  123.         MidPakOn = 0;
  124.         return(1);
  125.     }
  126.     return(0);
  127. }
  128.  
  129. int UnLoadMidPak(void)
  130. {
  131.     if ( HaveMidPak )
  132.     {
  133.         if ( MidPakOn ) DeInitMidPak();
  134.         if ( MidPakAd ) memfree(MidPakAd);
  135.         memfree(MidPakAdv);
  136.         memfree(MidPakLoad);
  137.         MidPakLoad = 0;
  138.         HaveMidPak = 0;
  139.         return(1);
  140.     }
  141.     return(0);
  142. }
  143.  
  144.