#warning FALSE

/***************************Для работы с AdLib*******************************/
// Чтобы хранить файл в другом сегменте
#define _FARMODULE_ TRUE
#include "amd.h--"

#define AMDmenuwidth 12*9+3
#define AMDmenuheigh 5*9+3
#define AMDmenux 320-AMDmenuwidth/2
#define AMDmenuy 200-AMDmenuheigh/2
#define FileInfoRecSize 13

word AMDFileList; //Файл лист
word AMDFileListPos=0; //Положение в скроллируемой области
word AMDFileListNumFile=0; //Положение в File List-е

word NumTracks; //Количество треков

byte SoundBlasterStatus; //Наличие Sound Blaster-а

word AMDMusicBufSeg;

//word TIMERCNT,TIMERSTEPS;  //нужно для вызова старого обработчика
//word interruptadress;      //пользовательский обработчик прерываний
//dword OLDINT=-1; //старый вектор таймера

:void fastcall PlayMusic()
{
// AdlibPoll();
}

void ChangeMuson()
 word NumFilesToShow=5;
 word key;
 word i;
{
  //Если Sound Blaster не установлен, то выходим
  IF (!SoundBlasterStatus) return;

  //Считываем имена треков
  GetFileList();

  //Если нет ни одного трека, то выходим от сюда
  IF (NumTracks==0) return;

  IF (NumTracks<5) NumFilesToShow=NumTracks;

  //Делаем еще одну менюшку
  loop(){
    PutWorkBufToVideoBuf();
    PutTransparentToolToBuf(125,0,AMDmenux,AMDmenuy,AMDmenuwidth,AMDmenuheigh,ToolsBuf,VideoBuf);
    FOR (i=0; i<NumFilesToShow; i++) PutFarStr(AMDmenux+2,i*9+AMDmenuy+2,AMDFileList,AMDFileListNumFile-AMDFileListPos+i*FileInfoRecSize,TextColor);
    //Отмечаем цветом текущий файл
    PutFarStr(AMDmenux+2,AMDFileListPos*9+AMDmenuy+2,AMDFileList,AMDFileListNumFile*FileInfoRecSize,TextColor+10);

    WaitRetrace();
    PutVideoBuf();

    key=0; //сбрасываем клавишу
    IF (KBHIT()!=0) key=ReadKey();
    IF (key==k_esc) BREAK;
    ELSE IF (key==k_up){
       IF (AMDFileListPos==0)&&(AMDFileListNumFile>0) AMDFileListNumFile--;
       ELSE IF (AMDFileListPos!=0){
            AMDFileListPos--;
            AMDFileListNumFile--;}}
    ELSE IF (key==k_down){
       IF (AMDFileListPos+1==NumFilesToShow)&&(AMDFileListNumFile+1<NumTracks) AMDFileListNumFile++;
       ELSE IF (AMDFileListPos+1!=NumFilesToShow)&&(AMDFileListNumFile+1<NumTracks){
            AMDFileListPos++;
            AMDFileListNumFile++;}}
    ELSE IF (key==k_enter) NewTrack(AMDFileListNumFile);
  }
}

void GetFileList()
{
  //Очистка File List-а
  $push ES ES=AMDFileList; DI=0; EAX=0; CX=64000/4; $rep $stosd $pop ES

  //Обнуляем количество треков
  NumTracks=0;

  //Ищим первый попавшийся файл
  FindFirstFile("Tracks\\*.amd");
  IF (CARRYFLAG) return; //Если файлы не найдены то выходим
  do{
      //Копирование имени файла
      CopyFarString(DS,word 80h+1Eh,AMDFileList,NumTracks*FileInfoRecSize);
      NumTracks++;
  }while (byte FindNextFile());
}

void NewTrack(word number)
 byte TrackName[128];
 dword TrackSize;
 word FileHandle;
{
  //Считываем название трека
  CopyString("Tracks\\",#TrackName);
  CopyFarString(AMDFileList,number*FileInfoRecSize,DS,StrSize(#TrackName)+#TrackName);

  // Если плейер активен
  IF (AdlibPlayerStatus){
     // Приостанавливаем музон
     StopAdlib();
     // Сбрасываем состояние Adlib плейера
     Adlib_Reset();
   }

   //Узнаем размер файла
   FindFirstFile(#TrackName); TrackSize=DSDWORD[80h+1Ah];

   //Теперь считываем новый трек
   FileHandle=OpenFile(#TrackName,0);
    ReadFarFile(FileHandle,AMDMusicBufSeg,0,word TrackSize);
   CloseFile(FileHandle);

   // Теперь только осталось переинитить плейер
   // ES:SI - адрес AMD модуля
   $push ES,FS,GS
    $pushad
     ES=AMDMusicBufSeg; SI=0;
     InitAdlib();
    $popad
   $pop GS,FS,ES
//   InitAMDPlayer();
//  SetTimer(50);
}