• Program pro přehrávaní modulů pomocí MIDASe •

        uses MIDAS, Errors, mGlobals, mMem, SDevice, Dos, Crt,
             MPlayer, DMA, DSM, S3M, MODp, MTM, mFile, mConfig;

        const   modulePlayers : array[0..(NUMMPLAYERS-1)] of
                PModulePlayer = (@mpS3M, @mpMOD, @mpMTM);

        var     SD : PSoundDevice;
                MP : PModulePlayer;
                module : Pointer;
                filename :Array[0..256] of Char;
                masterVol:Byte;

        { Konvertí ASCIIZ řetězec na pascalskej String. }

        Procedure toASCIIZ(dest:PChar;str:String);
        var spos,slen,i:Integer;
        begin
         spos:=0;slen:=ord(str[0]);
         while spos<slen do
         begin dest[spos]:=str[spos+1];Inc(spos) end;
         dest[spos] := chr(0);
        end;

        { Naloadí z disku do paměti, zjistí formát, aktivuje požadovaný
          player a začne přehrávat modul zadaný jako parametr a vrátí na
          něj ukazatel, je nutné nejprve inicializovat MIDAS ! }

        function PlayModule(ModuleName : PathStr) : PmpModule;
        var header:Pointer;
            f:fileHandle;
            module:PmpModule;
            error,mpNum,recognized:Integer;
        begin
         toASCIIZ(filename,modulename);
         error := memAlloc(MPHDRSIZE, @header);
         if error <> OK then midasError(error);
         error := fileOpen(fileName, fileOpenRead, @f);
         if error <> OK then midasError(error);
         error := fileRead(f, header, MPHDRSIZE);
         if error <> OK then midasError(error);
         error := fileClose(f);
         if error <> OK then midasError(error);
         mpNum := 0;MP := NIL;
         while (mpNum < NUMMPLAYERS) and (MP = NIL) do
         begin
          error := modulePlayers[mpNum]^.Identify(header, @recognized);
          if error <> OK then midasError(error);
          if recognized = 1 then MP := modulePlayers[mpNum];
          mpNum := mpNum + 1;
         end;
         error := memFree(header);
         if error <> OK then midasError(error);
         if MP = NIL then
         begin
          midasClose;
          errErrorExit('Error: Unknown module format')
         end;
         module := midasLoadModule(fileName, MP, NIL);
         midasPlayModule(module, 0);
         PlayModule := module;
         MP := midasMP;
        end;

        { Zastaví přehrávání a uvolní z paměti aktivní modulu
          jehož ukazatel je v proměnné module. }

        procedure StopModule;
        begin
         if module<>nil then
            begin
             midasStopModule(module);
             midasFreeModule(module);
            end;
        end;

        { Aktivuje MIDASe pomocí parametrů uložených v souboru CFGFile. }

        procedure ActiveMidas(CFGFile:PathStr);
        begin
         if FSearch(CFGFile,'')='' then
            begin
             WriteLn('Configuration file not found - run MSETUP.EXE');
             Halt;
            end;
         toASCIIZ(filename,cfgfile);
         midasSetDefaults;
         midasLoadConfig(Filename);
         midasInit;
         SD:=midasSD;
        end;

        { Vypne přehrávaný modul a deaktivuje MIDASe. }

        procedure DeActiveMidas;
        begin
         StopModule;
         midasClose;
        end;

        { Hlavní program }

        var ch:Char;

        Begin
        masterVol:=64;
        ActiveMidas('midas.cfg');
        PlayModule(ParamStr(1));
        WriteLn(' Playing module: ',ParamStr(1));
        WriteLn(' Use (+) and (-) to inc. or dec. volume');
        WriteLn(' Esc to stop ...');
        repeat
        if KeyPressed then
        begin
         ch:=ReadKey;
         if ch='-' then Dec(masterVol);
         if ch='+' then Inc(masterVol);
         if ch in ['+','-'] then
            begin
            SD^.SetMasterVolume(masterVol);
            GotoXY(1,WhereY);
            Write('Volume=',masterVol:3);
            end;
        end;
        until ch=#27;
        DeActiveMidas;
        End.

           Tento  program  nahraje  požadovaný  modul,  který  zadáte jako
      parametr  v  příkazové  řádce  a  ihned  jej  začne  přehrávat  přes
      navolenou  zvukovku,  jejíž  parametry zadáte v setupovacím programu
      (např.:  msetup.exe  u  Výhně).  V  průběhu  přehrávání můžete měnit
      hlasitost  výstupu  pomocí  kláves  "+" a "-" a klávesou Esc ukončit
      přehrávání.  Na  tomto místě je třeba připomenout  základní paměťové
      požadavky MIDASe. Pokud nahráváte modul do velikosti cca 300kB,neměl
      by být s pamětí problém, ale takových 500kB se už do konvenční RAMky
      holt  nevejde,  takže  je  potřeba  EMS, jestli už máte zkušenosti s
      přehráváním  modulů  ve  Výhni,  kde  se  EMS  využívá  i  k uložení
      rozpakovaných  článků,  pak  se  vám  budou určitě hodit pro práci s
      MIDASem.   Pro   GUSe  toto  pravidlo  samozřejmě  neplatí.  Zde  je
      rozhodující  samotná  RAM  GUSe,  takže  pokud  máte 1MB GUSe (vřele
      doporučuji), neměl  by  být  v  podstatě  s pamětí problém, MIDAS si
      naloadí akorát PaternData, ty se do konvenční paměti určitě vlezou a
      zbytek  nacpe  do  GUSe. Ke kompilaci musíte mít samozřejmě na disku
      MIDASe,  který  určitě  uploadnu na Infimu, ale nejspíše do knihovny
      DEMOS,  jelikož  nevím,  co  je  s  LibOpem  PASCALu,  takže to bude
      jistější.  Předpokládám,  že  když  si  výše  položený program řádně
      prostudujete,  nebude problém si MIDASe zabudovat do svých vlastních
      výtvorů.  Pokud  je cokoli někomu nejasné nebo by se chtěl zeptat na
      nějaké detaily ohledně MIDASe, nechť klidně píše na moje ID případně
      e-mail adresu.


            výheň