home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / geutsrce / geuterpe.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-08-22  |  18.5 KB  |  790 lines

  1. {$R-} {$V-} {$G+}
  2. PROGRAM GEUTERPE;
  3.  
  4.  
  5. USES
  6.  DOS,Digital,Y360x480,MyGUI;
  7.  
  8.  
  9. TYPE
  10.  String4 =String[4];
  11.  String20=String[20];
  12.  
  13.  
  14. CONST
  15.  MaxDevices   =5;
  16.  DeviceCommand:ARRAY[1..MaxDevices] OF String4 =
  17.                     ('-L1','-L2','-S','-A','-SB');
  18.  DeviceName   :ARRAY[1..MaxDevices] OF String20=
  19.                     ('DAC on LPT1',
  20.                      'DAC on LPT2',
  21.                      'PC Speaker',
  22.                      'AdLib FM',
  23.                      'SoundBlaster DAC');
  24.  
  25.  
  26. VAR
  27.  i            :BYTE;
  28.  j            :WORD;
  29.  Tval         :WORD;
  30.  OutDevice    :DeviceType;
  31.  AdLib_OK,
  32.  SB_OK,
  33.  Mixer_OK     :BOOLEAN;
  34.  Volume       :BYTE;
  35.  SampleRate   :WORD;
  36.  SizeOfDigit  :LongInt;
  37.  SampleName   :STRING;
  38.  Future       :TypePolice;
  39.  LCD          :TypePolice;
  40.  ThinScrp     :TypePolice;
  41.  BThin        :TypePolice;
  42.  Counter1     :WORD;
  43.  palette,
  44.  palette2     :ARRAY[0..767] OF BYTE;
  45.  old_int_truc,
  46.  int_truc     :Pointer;
  47.  GetName      :STRING;
  48.  FT           :FILE;
  49.  
  50.  
  51. PROCEDURE DelayT(Duration:BYTE);
  52. VAR
  53.  Count:WORD;
  54. BEGIN
  55.   FOR Count:=0 TO Duration*6 DO
  56.   BEGIN
  57.     YAttenteSynchro;
  58.   END;
  59. END;
  60.  
  61.  
  62. FUNCTION UpString(StringIn:STRING):STRING;
  63. VAR
  64.  TempString:STRING;
  65.  Counter   :BYTE;
  66. BEGIN
  67.   TempString:='';
  68.   FOR Counter:=1 TO Length(StringIn) DO
  69.     TempString:=TempString+UpCase(StringIn[Counter]);
  70.   UpString:=TempString;
  71. END;
  72.  
  73.  
  74. PROCEDURE CadrePDStatus;
  75. BEGIN
  76.   PoliceActive:=Future;
  77.   Cadre(10,30,349,130,BeigeMoyen);
  78.   PanneauCcv(13,36,346,56,BeigeClair);
  79.   TexteCreux(65,39,BeigeMoyen,3,' AUTHOR  INFORMATION ');
  80.   PoliceActive:=ThinScrp;
  81.   ParametresPolice(90,0,True);
  82.   TexteNormal(14,57 ,0,'Coder..:Patrick Ruelle');
  83.   TexteNormal(14,70 ,0,'Address:43 av. de Grande Bretagne');
  84.   TexteNormal(14,83 ,0,'        98000 Monaco');
  85.   TexteNormal(14,96 ,0,'        Principality of MONACO');
  86.   TexteGras  (14,109,1,'FREEWARE,  CONTRIBUTIONS ARE WELCOME!');
  87. END;
  88.  
  89.  
  90. PROCEDURE CadreHardwareStatus;
  91. BEGIN
  92.   PoliceActive:=Future;
  93.   Cadre(10,156,349,249,BeigeMoyen);
  94.   PanneauCcv(13,162,346,182,BeigeClair);
  95.   TexteCreux(98,165,BeigeMoyen,3,'HARDWARE STATUS');
  96.   PoliceActive:=LCD;
  97.   ParametresPolice(90,0,True);
  98.   TexteNormal(14,184,0,'AdLib FM Chipset:');
  99.   TexteNormal(14,199,0,'SB DAC Chipset..:');
  100.   TexteNormal(14,214,0,'SB Mixer Chipset:');
  101.   TexteNormal(14,229,0,'Card detected...:');
  102. END;
  103.  
  104.  
  105. PROCEDURE CadreOutputStatus;
  106. BEGIN
  107.   PoliceActive:=Future;
  108.   Cadre(10,254,349,407,BeigeMoyen);
  109.   PanneauCcv(13,260,346,280,BeigeClair);
  110.   TexteCreux(109,263,BeigeMoyen,3,'OUTPUT STATUS');
  111.   PoliceActive:=LCD;
  112.   ParametresPolice(90,0,True);
  113.   TexteNormal(14,282,0,'File name.......:');
  114.   TexteNormal(14,297,0,'File size.......:');
  115.   TexteNormal(14,312,0,'Output device...:');
  116.   TexteNormal(14,327,0,'Sample rate.....:');
  117.   TexteNormal(14,342,0,'Buffer size.....:');
  118.   TexteNormal(14,357,0,'Header size.....:');
  119.   TexteNormal(14,372,0,'Bass filter.....:');
  120.   TexteNormal(14,387,0,'Volume..........:');
  121. END;
  122.  
  123.  
  124. PROCEDURE CadreOscilloStatus;
  125. BEGIN
  126.   PoliceActive:=Future;
  127.   Cadre(10,411,349,704,BeigeMoyen);
  128.   PanneauCcv(13,417,346,437,BeigeClair);
  129.   TexteCreux(87,420,BeigeMoyen,3,'SPECTRUM ANALYZER');
  130.   PanneauCcv(13,439,346,697,230);
  131. END;
  132.  
  133.  
  134. PROCEDURE MontreSplit;
  135. BEGIN
  136.   FOR counter1:=480 DOWNTO 459 DO
  137.   BEGIN
  138.     YAttenteSynchro;
  139.     YSplit(counter1);
  140.   END;
  141.   DelayT(18);
  142. END;
  143.  
  144.  
  145. PROCEDURE EnleveSplit;
  146. BEGIN
  147.   FOR counter1:=459 TO 480 DO
  148.   BEGIN
  149.     YAttenteSynchro;
  150.     YSplit(counter1);
  151.   END;
  152. END;
  153.  
  154.  
  155. PROCEDURE SplitError(texte:STRING);
  156. BEGIN
  157.   PoliceActive:=BThin;
  158.   EnleveSplit;
  159.   PanneauCcv(0,0,359,19,BeigeClair);
  160.   TexteOmbre(6,3,90,0,texte);
  161.   MontreSplit;
  162. END;
  163.  
  164.  
  165.  
  166. PROCEDURE SplitDeFin;
  167. BEGIN
  168.   FOR j:=Counter DIV ScrollSpeed TO 247 DO
  169.   BEGIN
  170.     YAttenteSynchro;
  171.     YScroll(j);
  172.   END;
  173.   PoliceActive:=BThin;
  174.   EnleveSplit;
  175.   PanneauCcv(0,0,359,97,BeigeClair);
  176.   TexteOmbre(6,6,90,0,'  THIS IS A NICE FREEWARE HIGH QUALITY TP');
  177.   TexteOmbre(6,24,90,0,'   AND BASM SOUND ORIENTED PGM INCLUDING ');
  178.   TexteOmbre(3,42,90,0,'THE COMPLETE SOURCE CODE FROM PATRICK RUELLE');
  179.   TexteOmbre(10,60,15,0,'  So a contribution will be appreciated!');
  180.   TexteOmbre(2,78,15,0,'     What about  FF50 or DM15 or US$10?');
  181.   For j:=480 DownTo 381 DO
  182.   BEGIN
  183.     YAttenteSynchro;
  184.     YSplit(j);
  185.   END;
  186.   DelayT(90);
  187.   For j:=381 To 480 DO
  188.   BEGIN
  189.     YAttenteSynchro;
  190.     YSplit(j);
  191.   END;
  192. END;
  193.  
  194.  
  195. PROCEDURE Info;
  196. VAR
  197.   StringG,
  198.   String2 :STRING;
  199. BEGIN
  200.   ParametresPolice(90,0,True);
  201.   PoliceActive:=LCD;
  202.   TexteGras(150,282,1,SampleName);
  203.   Str(SizeOfDigit DIV 1024,StringG);
  204.   TexteGras(150,297,1,StringG+'Kb');
  205.   TexteGras(150,312,1,DeviceName[Ord(OutDevice)+1]);
  206.   Str(SampleRate,StringG);
  207.   TexteGras(150,327,1,StringG+'Hz');
  208.   Str(BufSize Div 1000,StringG);
  209.   TexteGras(150,342,1,StringG+'Kb');
  210.   Str(HeaSize,StringG);
  211.   IF HeaSize<>1
  212.     THEN TexteGras(150,357,1,StringG+' bytes')
  213.   ELSE
  214.     TexteGras(150,357,1,StringG+' byte');
  215.   IF Mixer_OK THEN
  216.   BEGIN
  217.     IF NOT(NoFilter) THEN
  218.       TexteGras(150,372,1,'OFF')
  219.     ELSE
  220.       TexteGras(150,372,1,'ON');
  221.     Str(Volume,StringG);
  222.     Str(VolMax,String2);
  223.     TexteGras(150,387,1,StringG+'/'+String2);
  224.   END
  225.   ELSE
  226.   BEGIN
  227.     TexteGras(150,372,1,'Not available');
  228.     TexteGras(150,387,1,'Not available');
  229.   END;
  230. END;
  231.  
  232.  
  233. PROCEDURE LitPalette;
  234. BEGIN
  235.   FOR i:=0 TO 255 DO
  236.   BEGIN
  237.     YLitCouleur(i);
  238.     palette[i*3]  :=r;
  239.     palette[i*3+1]:=v;
  240.     palette[i*3+2]:=b;
  241.   END;
  242. END;
  243.  
  244.  
  245. PROCEDURE EcranNoir;
  246. BEGIN
  247.   FOR j:=0 TO 767 DO
  248.     palette2[j]:=0;
  249.   YAttenteSynchro;
  250.   YEcritPalette(palette2[0],0,128);
  251.   YAttenteSynchro;
  252.   YEcritPalette(palette2[384],128,128);
  253. END;
  254.  
  255.  
  256. PROCEDURE NoFadeIn;
  257. BEGIN
  258.   YAttenteSynchro;
  259.   YEcritPalette(palette[0],0,128);
  260.   YAttenteSynchro;
  261.   YEcritPalette(palette[384],128,128);
  262. END;
  263.  
  264.  
  265. PROCEDURE FadeOut;
  266. BEGIN
  267.   FOR i:=0 TO 63 DO
  268.   BEGIN
  269.     FOR j:=0 TO 767 DO
  270.       IF palette[j]>0
  271.         THEN Dec(palette[j]);
  272.     YAttenteSynchro;
  273.     YEcritPalette(palette[0],0,128);
  274.     YAttenteSynchro;
  275.     YEcritPalette(palette[384],128,128);
  276.   END;
  277. END;
  278.  
  279.  
  280. FUNCTION FileExists(FileName:STRING):BOOLEAN;
  281. VAR F:FILE;
  282. BEGIN
  283.   SizeOfDigit:=0;
  284.   {$I-}
  285.   Assign(F,FileName);
  286.   Reset(F,1);
  287.   SizeOfDigit:=FileSize(F);
  288.   Close(F);
  289.   {$I+}
  290.   FileExists:=(IOResult=0) AND (FileName<>'');
  291. END;
  292.  
  293.  
  294. PROCEDURE WaitKey;ASSEMBLER;
  295. ASM
  296.   xor   ah, ah
  297.   int   16h
  298. END;
  299.  
  300.  
  301. FUNCTION FindOutPutDevice:DeviceType;
  302. VAR
  303.  Counter      :BYTE;
  304.  DeviceCounter:BYTE;
  305.  Found        :BOOLEAN;
  306.  Device       :DeviceType;
  307. BEGIN
  308.   Counter:=1;
  309.   Found  :=False;
  310.   Device :=PcSpeaker;
  311.   WHILE (Counter<=ParamCount) AND NOT(Found) DO
  312.   BEGIN
  313.     FOR DeviceCounter:=1 TO MaxDevices DO
  314.       IF UpString(ParamStr(Counter))=DeviceCommand[DeviceCounter] THEN
  315.       BEGIN
  316.         Device:=DeviceType(DeviceCounter-1);
  317.         Found :=True;
  318.       END;
  319.     Inc(Counter);
  320.   END;
  321.   FindOutPutDevice:=Device;
  322. END;
  323.  
  324.  
  325. FUNCTION FindRawFileName:STRING;
  326. VAR
  327.  FileNameFound:STRING;
  328.  TempName     :STRING;
  329.  Found        :BOOLEAN;
  330.  Counter      :BYTE;
  331. BEGIN
  332.   FileNameFound:='';
  333.   Counter      :=1;
  334.   Found        :=False;
  335.   WHILE (Counter<=ParamCount) AND NOT(Found) DO
  336.   BEGIN
  337.     TempName:=UpString(ParamStr(Counter));
  338.     IF TempName[1]<>'-' THEN
  339.     BEGIN
  340.       FileNameFound:=TempName;
  341.       Found        :=True;
  342.     END;
  343.     Inc(Counter);
  344.   END;
  345.   FindRawFileName:=FileNameFound;
  346. END;
  347.  
  348.  
  349. FUNCTION FindPlayBackRate:WORD;
  350. VAR
  351.  RateString:STRING;
  352.  Rate      :WORD;
  353.  Found     :BOOLEAN;
  354.  Counter   :BYTE;
  355.  ErrorCode :INTEGER;
  356. BEGIN
  357.   Rate   :=11000;
  358.   Counter:=1;
  359.   Found  :=False;
  360.   WHILE (Counter<=ParamCount) AND NOT(Found) DO
  361.   BEGIN
  362.     RateString:=UpString(ParamStr(Counter));
  363.     IF Copy(RateString,1,2)='-F' THEN
  364.     BEGIN
  365.       RateString:=Copy(RateString,3,Length(RateString)-2);
  366.       Val(RateString,Rate,ErrorCode);
  367.       IF ErrorCode<>0 THEN
  368.       BEGIN
  369.         Rate:=11000;
  370.         SplitError(' Frequency error, using default');
  371.       END;
  372.       Found:=True;
  373.     END;
  374.     Inc(Counter);
  375.   END;
  376.   IF Rate<4000 THEN
  377.     Rate:=4000
  378.   ELSE
  379.     IF Rate>22000 THEN
  380.       Rate:=22000;
  381.   FindPlayBackRate:=Rate;
  382. END;
  383.  
  384.  
  385. FUNCTION FindBufferSize:WORD;
  386. VAR
  387.  BufferString:STRING;
  388.  Buffer      :WORD;
  389.  Found       :BOOLEAN;
  390.  Counter     :BYTE;
  391.  ErrorCode   :INTEGER;
  392. BEGIN
  393.   Buffer :=16;
  394.   Counter:=1;
  395.   Found  :=False;
  396.   WHILE (Counter<=ParamCount) AND NOT(Found) DO
  397.   BEGIN
  398.     BufferString:=UpString(ParamStr(Counter));
  399.     IF Copy(BufferString,1,3)<>'-BF' THEN
  400.     BEGIN
  401.       IF Copy(BufferString,1,2)='-B' THEN
  402.       BEGIN
  403.         BufferString:=Copy(BufferString,3,Length(BufferString)-2);
  404.         Val(BufferString,Buffer,ErrorCode);
  405.         IF ErrorCode<>0 THEN
  406.         BEGIN
  407.           Buffer:=16;
  408.           SplitError(' Buffer size error, using default');
  409.         END;
  410.         Found:=True;
  411.       END;
  412.     END;
  413.     Inc(Counter);
  414.   END;
  415.   IF Buffer<8 THEN
  416.     Buffer:=8
  417.   ELSE
  418.     IF Buffer>64 THEN
  419.       Buffer:=64;
  420.   FindBufferSize:=Buffer*1000;
  421. END;
  422.  
  423.  
  424. FUNCTION FindXMS:BOOLEAN;
  425. VAR
  426.  XMSString :STRING;
  427.  Found     :BOOLEAN;
  428.  Counter   :BYTE;
  429. BEGIN
  430.   IF NoXMS
  431.     THEN UseXMS:=False;
  432.   Counter:=1;
  433.   Found  :=False;
  434.   WHILE (Counter<=ParamCount) AND NOT(Found) DO
  435.   BEGIN
  436.     XMSString:=UpString(ParamStr(Counter));
  437.     IF Copy(XMSString,1,2)='-X' THEN
  438.       Found:=True;
  439.     Inc(Counter);
  440.   END;
  441.   FindXMS:=Found;
  442. END;
  443.  
  444.  
  445. FUNCTION FindHeaderSize:WORD;
  446. VAR
  447.  HeaderString:STRING;
  448.  Header      :WORD;
  449.  Found       :BOOLEAN;
  450.  Counter     :BYTE;
  451.  ErrorCode   :INTEGER;
  452. BEGIN
  453.   Header :=0;
  454.   Counter:=1;
  455.   Found  :=False;
  456.   WHILE (Counter<=ParamCount) AND NOT(Found) DO
  457.   BEGIN
  458.     HeaderString:=UpString(ParamStr(Counter));
  459.     IF Copy(HeaderString,1,2)='-H' THEN
  460.     BEGIN
  461.       HeaderString:=Copy(HeaderString,3,Length(HeaderString)-2);
  462.       Val(HeaderString,Header,ErrorCode);
  463.       IF ErrorCode<>0 THEN
  464.       BEGIN
  465.         Header:=0;
  466.         SplitError(' Header size error, using default');
  467.       END;
  468.       Found:=True;
  469.     END;
  470.     Inc(Counter);
  471.   END;
  472.   IF Header<0 THEN
  473.     Header:=0
  474.   ELSE
  475.     IF Header>255 THEN
  476.       Header:=255;
  477.   FindHeaderSize:=Header;
  478. END;
  479.  
  480.  
  481. FUNCTION FindFilter:BOOLEAN;
  482. VAR
  483.  FilterString:STRING;
  484.  Found       :BOOLEAN;
  485.  Counter     :BYTE;
  486. BEGIN
  487.   Counter:=1;
  488.   Found  :=False;
  489.   WHILE (Counter<=ParamCount) AND NOT(Found) DO
  490.   BEGIN
  491.     FilterString:=UpString(ParamStr(Counter));
  492.     IF Copy(FilterString,1,3)='-BF' THEN
  493.       Found:=True;
  494.     Inc(Counter);
  495.   END;
  496.   FindFilter:=Found;
  497. END;
  498.  
  499.  
  500. FUNCTION FindVolume:WORD;
  501. VAR
  502.  VolumeString:STRING;
  503.  Vol         :WORD;
  504.  Found       :BOOLEAN;
  505.  Counter     :BYTE;
  506.  ErrorCode   :INTEGER;
  507. BEGIN
  508.   Vol    :=9;
  509.   Counter:=1;
  510.   Found  :=False;
  511.   WHILE (Counter<=ParamCount) AND NOT(Found) DO
  512.   BEGIN
  513.     VolumeString:=UpString(ParamStr(Counter));
  514.     IF Copy(VolumeString,1,2)='-V' THEN
  515.     BEGIN
  516.       VolumeString:=Copy(VolumeString,3,Length(VolumeString)-2);
  517.       Val(VolumeString,Vol,ErrorCode);
  518.       IF ErrorCode<>0 THEN
  519.       BEGIN
  520.         Vol:=9;
  521.         SplitError(' Volume error, using default');
  522.       END;
  523.       Found:=True;
  524.     END;
  525.     Inc(Counter);
  526.   END;
  527.   IF Vol<1 THEN
  528.     Vol:=1
  529.   ELSE
  530.     IF Vol>VolMax THEN
  531.       Vol:=VolMax;
  532.   FindVolume:=Vol;
  533. END;
  534.  
  535.  
  536. PROCEDURE Buffer_Test;
  537. VAR
  538.  MemSize:LongInt;
  539.  OneBuf :WORD;
  540. BEGIN
  541.   MemSize:=MaxAvail;
  542.   IF MemSize<(2*BufSize) THEN
  543.   BEGIN
  544.     OneBuf:=((MemSize DIV 1000)*1000) DIV 2;
  545.     IF OneBuf<8000 THEN
  546.     BEGIN
  547.         SplitError(' Not enough memory');
  548.         DelayT(19);
  549.         YModeTexte;
  550.         Halt;
  551.     END
  552.     ELSE BufSize:=OneBuf;
  553.   END;
  554. END;
  555.  
  556.  
  557. PROCEDURE Adlister_Test;
  558. VAR
  559.   Hexa:STRING[3];
  560. BEGIN
  561.   ParametresPolice(90,1,True);
  562.   PoliceActive:=LCD;
  563.   IF AdLib_OK THEN
  564.     TexteGras(150,184,1,'AVAILABLE [388h]')
  565.   ELSE
  566.     TexteGras(150,184,1,'NOT AVAILABLE');
  567.   IF SB_OK THEN
  568.   BEGIN
  569.     Str(Hexa_Addr(SBPort),Hexa);
  570.     TexteGras(150,199,1,'AVAILABLE ['+Hexa+'h]');
  571.   END
  572.   ELSE TexteGras(150,199,1,'NOT AVAILABLE');
  573.   IF Mixer_OK THEN TexteGras(150,214,1,'AVAILABLE')
  574.   ELSE TexteGras(150,214,1,'NOT AVAILABLE');
  575.   CASE CardType OF
  576.     Speaker:TexteGras(150,229,1,'NONE (PC SPEAKER)');
  577.     AdLibFM:TexteGras(150,229,1,'ADLIB');
  578.     SB_Norm:TexteGras(150,229,1,'SOUNDBLASTER');
  579.     SB_Pro :TexteGras(150,229,1,'SOUNDBLASTER PRO');
  580.     SB_16  :TexteGras(150,229,1,'SOUNDBLASTER 16');
  581.   END;
  582. END;
  583.  
  584.  
  585. PROCEDURE Device_Selection;
  586. BEGIN
  587.   ScrollSpeed:=50;
  588.   CASE OutDevice OF
  589.    SoundBlaster:BEGIN
  590.                   ScrollSpeed:=(26-(SampleRate DIV 1000))*3;
  591.                   IF SB_OK=False THEN
  592.                   BEGIN
  593.                     ScrollSpeed:=50;
  594.                     IF AdLib_OK=False THEN
  595.                       OutDevice:=PCSpeaker
  596.                     ELSE OutDevice:=AdLib;
  597.                   END;
  598.                 END;
  599.    AdLib       :BEGIN
  600.                   IF AdLib_OK=False THEN
  601.                     OutDevice:=PCSpeaker;
  602.                 END;
  603.   END;
  604.   Counter:=20*ScrollSpeed;
  605. END;
  606.  
  607.  
  608. PROCEDURE Init_Device;
  609. BEGIN
  610.   CASE OutDevice OF
  611.    PCSpeaker   :BEGIN
  612.                   Tval:=(1193180 DIV SampleRate) SHR 1;
  613.                   FOR i:=0 TO 255 DO
  614.                     SpkrTable[i]:=(WORD((SpkrBaseTable[i]-1)*Tval) DIV $39)+1;
  615.                   Init_Speaker;
  616.                 END;
  617.    AdLib       :BEGIN
  618.                   InitializeAdLib;
  619.                 END;
  620.    SoundBlaster:BEGIN
  621.                   Spk_On;
  622.                 END;
  623.   END;
  624. END;
  625.  
  626.  
  627. PROCEDURE Deinit_Device;
  628. BEGIN
  629.   CASE OutDevice OF
  630.    PCSpeaker   :End_Speaker;
  631.    SoundBlaster:Spk_Off;
  632.   END;
  633. END;
  634.  
  635.  
  636. PROCEDURE EUTERPETitle;
  637. BEGIN
  638.   PoliceActive:=Future;
  639.   PanneauCcv(0,0,359,19,BeigeClair);
  640.   TexteRelief(2,2,BeigeXClair,3,'G-EUTERPE 1.0ß');
  641.   TexteRelief(334,3,BeigeXClair,0,Chr(30));
  642.   TexteRelief(348,3,BeigeXClair,0,Chr(31));
  643. END;
  644.  
  645.  
  646. PROCEDURE Rien;Interrupt;
  647. BEGIN
  648. END;
  649.  
  650.  
  651. BEGIN
  652.   IF ParamCount<>0 THEN
  653.   BEGIN
  654.     InLine($FA);      {CLI}
  655.     GetIntVec($1B,old_int_truc);
  656.     int_truc:=Ptr(Seg(Rien),Ofs(Rien));
  657.     SetIntVec($1B,int_truc);
  658.     InLine($FB);      {STI}
  659.     NoFilter  :=True;
  660.     Volume    :=9;
  661.     YMode360x480;
  662.     YRemplitEcran(0);
  663.     InitialisationsCouleurs;
  664.     YEcritCouleur(90,63,54,45);{chair}
  665.     YEcritCouleur(230,0,18,0); {vert fonce}
  666.     YEcritCouleur(231,33,44,0);{vert clair}
  667.     LitPalette;
  668.     EcranNoir;
  669.     YRemplitEcran(BeigeXFonce);
  670.     YScroll(20);
  671.     YSplit(459);
  672.     IF ChargePolice(Future  ,'future')=0 THEN;
  673.     IF ChargePolice(LCD     ,'lcd')=0 THEN;
  674.     IF ChargePolice(ThinScrp,'thinscrp')=0 THEN;
  675.     IF ChargePolice(BThin   ,'bthin')=0 THEN;
  676.     CadrePDStatus;
  677.     CadreHardwareStatus;
  678.     CadreOutputStatus;
  679.     CadreOscilloStatus;
  680.     EUTERPETitle;
  681.     NoFadeIn;
  682.     XMSChoice :=FindXMS;
  683.     SampleRate:=FindPlayBackRate;
  684.     BufSize   :=FindBufferSize;
  685.     HeaSize   :=FindHeaderSize;
  686.     NoFilter  :=FindFilter;
  687.     SampleName:=FindRawFileName;
  688.     OutDevice :=FindOutPutDevice;
  689.     AdLib_OK  :=AdLib_Test;
  690.     SB_OK     :=SB_Test;
  691.     Mixer_OK  :=Mixer_Test;
  692.     Volume    :=FindVolume;
  693.     Buffer_Test;
  694.     Adlister_Test;
  695.     Device_Selection;
  696.     IF SampleName<>'' THEN
  697.     BEGIN
  698.       IF FileExists(SampleName) THEN
  699.       BEGIN
  700.         IF SizeOfDigit>999 THEN
  701.         BEGIN
  702.           Info;
  703.           Init_Device;
  704.           SetOutputDevice(OutDevice);
  705.           IF Mixer_OK THEN
  706.           BEGIN
  707.             IF NOT(NoFilter) THEN
  708.               SbProSetFilter(True)
  709.             ELSE
  710.               SbProSetFilter(False);
  711.             VoiceMixerVol(Volume);
  712.           END;
  713.           IF UseXMS THEN
  714.           BEGIN
  715.             IF XMSChoice THEN
  716.             BEGIN
  717.              LoadPlayXMS(SampleName,SampleRate);
  718.              IF XMSError<>0 THEN
  719.              BEGIN
  720.                SplitError(Stringn);
  721.                EUTERPETitle;
  722.                PlayRAWSoundFile(SampleName,SampleRate);
  723.              END;
  724.             END
  725.             ELSE
  726.             BEGIN
  727.               EUTERPETitle;
  728.               PlayRAWSoundFile(SampleName,SampleRate);
  729.             END;
  730.           END
  731.           ELSE
  732.           BEGIN
  733.             IF XMSChoice THEN
  734.             BEGIN
  735.               SplitError(' XMS manager not detected.');
  736.             END;
  737.             EUTERPETitle;
  738.             PlayRAWSoundFile(SampleName,SampleRate);
  739.           END;
  740.           IF Mixer_OK THEN
  741.             VoiceMixerVol(9);
  742.           Deinit_Device;
  743.         END
  744.         ELSE
  745.         BEGIN
  746.           SplitError(' Sound file too small.');
  747.         END;
  748.       END
  749.       ELSE
  750.       BEGIN
  751.         SplitError(' Sound file not found.');
  752.       END;
  753.     END
  754.     ELSE
  755.     BEGIN
  756.       SplitError(' Filename not specified');
  757.     END;
  758.     CleanUp;
  759.     SplitDeFin;
  760.     FadeOut;
  761.     IF DechargePolice(Future)=0 THEN;
  762.     IF DechargePolice(LCD)=0 THEN;
  763.     IF DechargePolice(ThinScrp)=0 THEN;
  764.     IF DechargePolice(BThin)=0 THEN;
  765.     YModeTexte;
  766.     InLine($FA);      {CLI}
  767.     SetIntVec($1B,old_int_truc);
  768.     InLine($FB);      {STI}
  769.   END
  770.   ELSE
  771.   BEGIN
  772.     WriteLn(' ╔════════════════════════════════════════════════════════════════════════════╗');
  773.     WriteLn(' ║ USAGE...: GEUTERPE [SWITCHES] <RAW SOUND FILE>     Patrick Ruelle (C) 1994 ║');
  774.     WriteLn(' ╟────────────────────────────────────────────────────────────────────────────╢');
  775.     WriteLn(' ║        ■PC_Speaker - ■AdLib - ■LPT1 - ■LPT2 - ■SB - ■SB_PRO - ■SB_16       ║');
  776.     WriteLn(' ╟────────────────────────────────────────────────────────────────────────────╢');
  777.     WriteLn(' ║ SWITCHES: [REGISTERED VERSION]                                             ║');
  778.     WriteLn(' ║  -S       PC Speaker (default)          -Fxxxxx  from 4000 upto 22000      ║');
  779.     WriteLn(' ║  -L1      DAC on LPT1                   -Bxx     from 8Kb upto 64Kb        ║');
  780.     WriteLn(' ║  -L2      DAC on LPT2                   -Hxxx    from 0 upto 255 bytes     ║');
  781.     WriteLn(' ║  -A       AdLib FM                      -Vxx     from 1 upto [15 or 31]    ║');
  782.     WriteLn(' ║  -SB      SoundBlaster DAC              -BF      Bass Filter               ║');
  783.     WriteLn(' ║  -X       use XMS (otherwise disk)                                         ║');
  784.     WriteLn(' ╟────────────────────────────────────────────────────────────────────────────╢');
  785.     WriteLn(' ║  -F  Frequency (default=11000Hz)        -B  Buffer size (default=16Kb)     ║');
  786.     WriteLn(' ║  -H  Header size to skip (default=0)    -V  output Volume (default=9)      ║');
  787.     WriteLn(' ╚════════════════════════════════════════════════════════════════════════════╝');
  788.   END;
  789. END.
  790.