• 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ň