home *** CD-ROM | disk | FTP | other *** search
/ Prima Shareware 3 / DuCom_Prima-Shareware-3_cd1.bin / PROGRAMO / PASCAL / DIGPAK / LOADER.C < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-06  |  3.3 KB  |  158 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. void PokeDigPak(int base,int irq) // Poke base address and irq into loaded driver.
  72. {
  73.     if ( HaveDigPak )
  74.     {
  75.         PokeIt(DigPakPara,base,irq);
  76.     }
  77. }
  78.  
  79. int LoadMidPak(char far *fname,char far *adv,char far *ad)
  80. {
  81.     long int siz;
  82.  
  83.     if ( HaveMidPak ) return(0); // MidPak is allready loaded, trying to load it twice!
  84.     MidPakLoad = floadpara(fname,&siz,&MidPakPara);
  85.     if ( MidPakLoad )
  86.     {
  87.         MidPakAdv = floadpara(adv,&siz,&AdvPara);
  88.         if ( !MidPakAdv )
  89.         {
  90.             memfree(MidPakLoad);
  91.             return(0);
  92.         }
  93.         if ( ad )
  94.         {
  95.             MidPakAd = fload(ad,&siz);
  96.             if ( !MidPakAd )
  97.             {
  98.                 memfree(MidPakAdv);
  99.                 memfree(MidPakLoad);
  100.                 return(0);
  101.             }
  102.         }
  103.         else
  104.             MidPakAd = 0;
  105.         HaveMidPak = 1; // driver was loaded. not yet initialized though.
  106.     }
  107.     return(HaveMidPak);
  108. }
  109.  
  110. int InitMidPak(void)
  111. {
  112.     int ret;
  113.     if ( HaveMidPak )
  114.     {
  115.         ret = InitMP(MidPakPara,AdvPara,MidPakAd);
  116.         if ( ret )
  117.             MidPakOn = 0;
  118.         else
  119.             MidPakOn = 1;
  120.     }
  121.     return(MidPakOn);
  122. }
  123.  
  124. int DeInitMidPak(void)
  125. {
  126.     if ( MidPakOn )
  127.     {
  128.         MidiStop(); // Stop any playing midi sequence
  129.         DeInitMP(MidPakPara);
  130.         MidPakOn = 0;
  131.         return(1);
  132.     }
  133.     return(0);
  134. }
  135.  
  136. int UnLoadMidPak(void)
  137. {
  138.     if ( HaveMidPak )
  139.     {
  140.         if ( MidPakOn ) DeInitMidPak();
  141.         if ( MidPakAd ) memfree(MidPakAd);
  142.         memfree(MidPakAdv);
  143.         memfree(MidPakLoad);
  144.         MidPakLoad = 0;
  145.         HaveMidPak = 0;
  146.         return(1);
  147.     }
  148.     return(0);
  149. }
  150.  
  151. void PokeMidPak(int base,int irq) //Poke base address and irq into loaded driver.
  152. {
  153.     if ( HaveMidPak )
  154.     {
  155.         PokeIt(MidPakPara,base,irq);
  156.     }
  157. }
  158.