
unit commande;

interface
uses //dos,crt,graph,
 sysUtils,common,friend,grafiti0,grafiti1,fft,
porto,grafiti3,disco,disco1,disco2,grafiti4,spectanalisier,edith;

var
                                      error_kom,helpInfo : pathStr;
                                               komunikat : shortString;
                        arrow,arrow2,poz_arrow,cut_arrow : char;
                               nr_serii,k,Max_lba_probek : longint;
                                   ToDiskCounter,help_nr : integer;
                                           CzasMax,f0max : real;
                                               Smin,Smax : realType;
    F0_na_dysk,nowy_start,fft_rev,logiko,hires,logic_poz,
                                invUp,poziomice,helpShow,
    tspo,prmtr_change,spectr_anal,less_jump,resND,helpUp,
                            centrum,ret_res_int,fin,test : boolean;

procedure commandInfo(i:integer);
procedure helper;
procedure st_par_osc;
procedure st_par_fft;
procedure cof;
procedure nap;
procedure retriever(opis:string);
procedure resFileNbControl;
procedure commander;

implementation
uses forms,windows,unit1;  //forms, aby użyć application i w konsekwencji nie stosować Pchar, a windows, aby użyć stałych MB_YesNo oraz IdYes
procedure commandInfo(i:integer);
{
wydruki info o funkcji spelnianej przez nacisniety klawisz
klawisze o kodach specjalnych maja znak ujemny
}
var lba:string[5];
 begin
// getFillSettings(flst);
// setFillStyle(1,black);
// bar(56,getMaxY-10,56+(length(helpinfo)+1)*8,getMaxY);
  case i of
     3: helpinfo:='^C - przerwanie operatora';
    27: helpinfo:='Esc - kasow komend, czyscic ruch okno';
   byte('n') : helpinfo:='n - wyswietlac tylko 1-na analize w ruchomym oknie';
   byte('s') : helpinfo:='s - spectrum - przekroj na ekran';
   byte('g') : helpinfo:='g - wlaczyc/wylaczyc grafike calkowicie';
   byte('h') : helpinfo:='h - synchronizacja okien';
   byte('y') : helpinfo:='y - wlaczyc/wylaczyc ruchome okno';
   byte('k') : helpinfo:='k - wykonanie krokowe';
   byte('u') : helpinfo:='u -zatrzymac sie po wypelnieniu ekranu';
   byte('p') : helpinfo:='p - wlaczyc poziomice';
   byte('r') : helpinfo:='r - wysoka/niska rozdzielczosc';
   byte('i') : helpinfo:='i - interpolacja spectrogramu';
   byte('c') : helpinfo:='c - cepstrum na ekran';
   byte('a') : helpinfo:='a - spectro-/cepstro- gram';
   byte('f') : helpinfo:='f - filtr cepstralny';
   byte('v') : helpinfo:='v - transformata odwrotna na ekran';
   byte('0')..byte('9') :
    begin
     helpinfo:=char(i)+'- zmiana liczby punktow FFT; 2'#24;
     if char(i)='0' then helpinfo:=helpinfo+'10'
     else helpinfo:=helpinfo+char(i);
      helpinfo:=helpinfo+'. Uwaga! lba ograniczona w common!!';
    end;
   byte('z') : helpinfo:='z - odzysk sygnalu po filtracji cepstr - na ekran';
   byte('d') : helpinfo:='d - pokazywac pelny/pol wektora spectrum lub '+
                         'cepstrum';
   byte('e') : helpinfo:='e - wybrac mniejszy skok kurs. - z dziedz.'+
                         'czasu/czest.(przestr.reczne filtru)';
   byte('o') : helpinfo:='o - oscylogram na ekran';
   byte('O') : helpinfo:='O - zmienic okno czasowe (okno wag)';
   byte('P') : helpinfo:='P - okno polowkowe';
   byte('S') : helpinfo:='S - spectrum na dysk';
   byte('C') : helpinfo:='C - cepstrum na dysk';
   byte('V') : helpinfo:='V - transformata odwrotna na dysk';
   byte('!') : helpinfo:='! - zaczac analizy od poczatku';
   byte('L') : helpinfo:='L - zamknac mozliwosc zmiany parametrow analiz '+
                         'idacych na dysk';
           9 : helpinfo:='TAB - wylaczyc ruch automatyczny okna';
   byte('D') : helpinfo:='D - filtracja dolnoprzepustowa (odciac gorna '+
                         'czesc cepstrum';
   byte('G') : helpinfo:='G - filtracja gornoprzepustowa (odciac dolna '+
                         'czesc cepstrum)';
   byte('Z') : helpinfo:='Z - zwrot sygnalu po filtracji cepstralnej na '+
                         'dysk';
	  -67 : helpinfo:='F9 - zmienic wypelnienie  okna (nr 0 lub nr 1)';
          -60 : helpinfo:='F2 - wyciac prazki nieparzyste';
          -61 : helpinfo:='F3 - rozciagnac obrazek - tylko w pokazach jedno'+
                          'stronnych';
          -85 : helpInfo:='shift-F2 - wyciac prazki parzyste';
          -86 : helpInfo:='shift-F3 - obrazek czarno-bialy dla slajdow ';
          -87 : helpinfo:='shift-F4 - korekta fazy - kierunek przegladu '+
                          'skladowych modulu spectrum';
         -102 : helpinfo:='ctrl-F9 - wlaczyc test 4094*exp(-8*i/count)';
          -96 : helpinfo:='ctrl-F3 - zmienic procedure odwracajaca ';
          -97 : helpinfo:='ctrl-F4 - wyrownanie zlaczy przez korekte fazy'+
                          '( przy transf. odwr.)';
          -62 : helpInfo:='F4 - wyciszyc korekte fazy i F0';
         -106 : helpInfo:='Alt-F3 - edytor graficzny';
	 -107 : helpinfo:='Alt-F4 - korekta fazy wg. sily modulu albo '+
                          'wg. czest. sklad. spectr.';
          -98 : helpInfo:='ctrl-F5 - cepstrum mocy | rozwinieto-|'+
                          ' minimalno- fazowe';
         -108 : helpInfo:='Alt-F5 - iteracje w rozwijaniu fazy met.'+
                          ' Triboletta (dla cepstrum mix)';
	  -99 : helpInfo:='ctrl-F6 - autom. przestrajanie filtru'+
                          ' cepstralnego (w trybie filtr)';
          -88 : helpInfo:='shift-F5 odcinac symetrycznie prazek poczatkowy '+
                          'jesli wlacz. filtr';
          -63 : helpInfo:='F5 -  numer dodatkowo wycinanego symetrycznie '+
                          'prazka poczatkowego ';
          -64 : helpInfo:='F6 - autom. przestrajanie,'+
                          ' wczytac dolna czestotliwosc graniczna';
          -89 : helpinfo:='shift-F6 - autom. przestr., wczytac gorna '+
                          'czestotliwosc graniczna';
         -109 : helpInfo:='alt-F6 - wczytac minimum straty mocy';
         -114 : helpInfo:='ctrl-PrintScreen - wydruki kontrolne';
          -84 : helpinfo:='shift_F1 - odwrocic kierunek przeszukiwania';
          -59 : helpInfo:='F1 - przewijanie menu';
	  -94 : helpinfo:='ctrl-F1 - Help, wykaz komend i klawiszy';
          -65 : helpInfo:='F7 - czytac wspolczynnik pokrycia okien';
         -100 : helpinfo:= 'ctrl-F7, wydruki kontrolne ton/szum, '+
                           'wylacza na dysk!';
         -110 : helpinfo:='alt-F7, wydruki ton/szum na dysk tam,'+
                          ' gdzie dane; append jesli zb.istn., wyl.druk!';
	  -90 : helpinfo:='shift-F7,  wyniki analiz ton/szum ma dysk do '+
                          ' *.rm#, *.F0#';
          -66 : helpiNfo:='F8 - rozciagnac/scisnac oscylogram';
          -91 : helpinfo:='shift-F8 - rozwijanie fazy, prog dla iteracji';
          -92 : helpinfo:='shift-F9 - pobierac wycinek z centrum| z poczatku';
         -101 : helpInfo:='ctrl-F8 - metoda rozwijania fazy: Tribolett|APL'+
                          '; dla cepstrum mix (ctrl-F5)';
         -111 : helpinfo:='alt-F8 - PhTest - generowac dane do testu '+
                          'rozwijania fazy';
	 -112 : helpInfo:='alt-F9 - Przeslac obraz na dysk';
          -72 : helpInfo:='Up - cofnac sie do poprzedn. odc.';
          -80 : helpInfo:='Dn - przeskoczyc do nast. odc.';
          -73 : helpInfo:='pgUp - przewijanie oscylogramu bez zmiany '+
                          'punktu analizy';
	  -81 : helpInfo:='PgDn - przewijanie oscylogramu z zachowaniem '+
                          'punktu analizy';
          -82 : helpInfo:='Ins - wlaczyc tryb insert - wstawki do cepstrum ';
          -83 : helpInfo:='del - wstawki do cpstrm sztuczne | naturalne';
          -71 : helpInfo:='Home - modyfikacje czestotliwosci granicznej filtru';
          -79 : helpInfo:='End  - modyfikacje czestotliwosci granicznej filtru';
-75,-77,-115,-116 : helpInfo:=#27','#26','#94#27','#94#26+
                'Modyfikacje czestotliwosci granicznej filtru';
  else
   begin
    str(abs(i),lba);
    if i>=0 then helpinfo:=char(i) else helpinfo:='#0 #'+lba;
    helpinfo:=helpinfo+' - klucz niewykorzystany!'
   end;
 end;{case}
// setFillStyle(1,cyan);
// setColor(white);
// bar(56,getMaxY-10,56+(length(helpinfo)+1)*8,getMaxY);
// outTextXY(64,getMaxY-8,helpInfo);
// with flst do setFillStyle(pattern,color);
 end;{commandInfo}

procedure helper;
{
wyprowadza wykaz komend
}
 var i:integer;  znak:AnsiChar; look:boolean;
 begin
  i:=-256; look:=true;
//  getFillSettings(flst);
//  setFillStyle(1,cyan);
//  bar3D(56,12,56+40*8,20,0,topOn);
//  with flst do setFillStyle(pattern,color);
//  setColor(brown);
//  outTextXY(64,12,#30#31' - przeglad komend, Esc - wyjscie');
  repeat
//   znak:=readKey;
   if znak=#0 then
    begin
//     znak:=ReadKey;
     if znak=#72 then if i>-255 then look:=false else look:=true;
     if znak=#80 then if i<255 then look:=true else look:=false;
     if znak in [#72,#80] then if look then inc(i) else dec(i)
     else;// write(cons,#7);
     commandInfo(i);
     while copy(helpinfo,length(helpinfo)-15,16)='niewykorzystany!' do
      begin
       if look=true then
        if i>=255 then look:=false
        else
       else if i<=-255 then look:=true;
       if look then inc(i) else dec(i);
       commandInfo(i);
      end;{while}
    znak:=#0;
   end {if #0}
   else if znak <>#27 then;// write(cons,#7);
  until znak=#27;
  helpShow:=false; config_show:=true; config:=7;
 end;{helper}

 procedure retriever(opis:string);
  var extens:extStr;
      info1,info2:nameStr;
  begin
   if ret_res_int then
     begin
      extens:='re'+ResFileNb;
      informator('Przesuwamy wyniki z dysku wirtualnego na staly',80,12,200,200);
      str(jump:4:2,info2);
      str(ik-ip+1,info1);
      if cpstr then opis:='Sygnal po filtracji cepstralnej; skok co '+info2+
                          ' [ms], tj. co '+info1+'punktow'#10#13+opis
      else opis:='Sygnal po filtracji spectrum; skok co '+info2+
                 ' [ms], tj. co '+info1+'punktow'#10#13+opis;
     // otw_zb_retriev(oRetToDisc,path,pathRet,extens,rate,opis,gain,jump,
     //                nowyPlik);
      retriev_results_to_disk(lbaBit,Smax,Smin,realTypePlik,nowyPlik);
      ret_res_int:=false;
     end;{ret_res_int}
  end;{retriever}

 procedure resFileNbControl;
 //-------------------określa ostatni znak rozszerzenia dla automatycznego oznaczania kolejnych wersji wyników (zestaw uzyskany w danej sesji będzie mial tę samą literę)  begin
 begin
   while (not(resFileNb in ['0'..'9','A'..'Z'])
    or fileExists(patternPath+'.F0'+resFileNb)  {F0}
    or fileExists(patternPath+'.RM'+resFileNb)  {natezenie}
    or fileExists(patternPath+'.PK'+resFileNb)  {granica F0 w cepstrum}
    or fileExists(patternPath+'.SP'+resFileNb)  {spectrum mocy}
    or fileExists(patternPath+'.CP'+resFileNb)  {cepstrum mocy}
    or fileExists(patternPath+'.FL'+resFileNb)  {spectrum modyfikowane}
    or fileExists(patternPath+'.RV'+resFileNb)  {spectrum filtrow. cepstr}
    ) and (resFileNb in ['0'..'Y']) do inc(resFileNb);
  end;{resFileNbControl}

 procedure finish;
  var logic1,logic2,logic3,logic4:boolean;
  begin
   logic1:=ospNd; logic2:=ocpNd; logic3:=ocpfNd; logic4:=orevNd;
   if ostat=false then
    StatFinish(corr_spectr_nb,ph_corr_nb,sort,fall,stat);
   retriever(opis);
   if not(ospNd and ocpNd and ocpfNd and orevNd) then
    begin
     closeRealTypeFiles(resNd,stat);
     informator('Zakodowac wyniki analiz spectr. 8-mio bitowo? - t/n',0,0,200,200);
//     sound(85); delay(1000); nosound;
//     if ReadKey in ['t','T'] then
     begin
      informator('Kodowanie dotyczy spectrum, cepstrum i '+
       'transformaty odwrotnej ceptrum',0,0,0,0);
      if not logic1 then byteFileDisk(spktrPlik,xr,cp,lba_danych,
       storedDataNb,winNbr,SsRF,SsqRF,SminRF,SmaxRF,Sdata_nb,logic1);
      if not logic2 then byteFileDisk(cpstrPlik,xr,cp,lba_danych,
       storedDataNb,winNbr,CsRF,CsqRF,CminRF,CmaxRF,Cdata_nb,logic2);
      if not logic3 then byteFileDisk(FltPlik,xr,cp,lba_danych,
       storedDataNb,winNbr,FsRF,FsqRF,FminRF,FmaxRF,Fdata_nb,logic3);
      if not logic4 then byteFileDisk(revPlik,xr,cp,lba_danych,
       storedDataNb,winNbr,VsRF,VsqRF,VminRF,VmaxRF,Vdata_nb,logic4);
     end;
    end;

   if application.messageBox('Powtórzyć analizy ?','FFT',MB_YesNo)=IdYes then
    begin
     if resNd then
      begin
//       sound(225); delay(300);nosound;
       informator('Wylaczamy wszystkie analizy na dysk ',80,12,128,400);
       Lock:=false;
       if spNd then lancuch:=lancuch+'S';
       if cpNd then lancuch:=lancuch+'C';
       if cpstr and revNd or not cpstr and retNd then lancuch:=lancuch+'V';
       if cpstr and retNd then lancuch:=lancuch+'Z';
       if not grafika then lancuch:=lancuch+'g';
      end;

  {-------------------zbior statystyczny dla wyrownywania zlaczy--------------}
     lancuch:=lancuch+'!';
     inc(resFileNb);
     resFileNbControl;
     fin:=false;
    end
   else
    if not fin then begin znak:='H'; fin:=true end;{wystapila komenda 'H'alt}
  end;{finish}


procedure st_par_osc;
 {
 ----------stale parametry wykresu oscylogramu-------------
 }
 begin
  //with grstat do wsp_pix:=(getMaxY-winMap[13,3])/storedDataNb;
  CzasMax:=0.25*(grstat.winMap[11,4]-grstat.winMap[11,3])/f0max; {=+-0.48s}
  Max_Lba_Probek:=round(czasMax*rate);                            {=+-3360}
  if lba_danych<max_Lba_Probek then lba_probek_na_osc:= lba_danych
   else lba_probek_Na_Osc:=max_lba_probek;
  if (lba_probek_na_osc < count) then lba_probek_na_osc:=count;
  jumpNbrSamples:=round(jump*(rate/1000));         {tryb synchr., ogran. }
  lba_pktow_na_jump:=jumpNbrSamples*(bottomY-topY);{zaw.okna oscyl. tak, }
  if lba_probek_na_osc > lba_pktow_na_jump             {aby prazki spectrum  }
   then lba_probek_na_osc:=trunc(lba_pktow_na_jump);   {nie pokrywaly sie    }
  lba_pktow_na_okno:=count*((grstat.ypmax-grstat.ypmin)/lba_probek_na_osc);
  lba_pktow_na_jump:=lba_pktow_na_jump/lba_probek_na_osc;
  if centrum then ip:=round(count div 2-jumpNbrSamples/2)
  else ip:=0;
  if ip<=0 then ip:=0;
  ik:=ip+jumpNbrSamples-1;
  if ik>=count-1 then ik:=count-1;
  if phase_corr and (ik>=count-2) then
   informator('Overlap too small to perform phase correction -'+
    ' press F7',80,12,255,50);
  y0(Yzero,count);
 end;{st_par_osc}

procedure st_par_fft;
{
---------Stale parametry przetwarzania rFFT----------------
}
 begin
  y0(Yzero,count);                                 //wyzeruj tablicę Yzero
  df:=rate/count;
  dOm:=2*pi/count; dOmKw:=sqr(dOm);
  SinCosArrays(cosar,sinar,count);                   //tablice sinusów i cosinusów
  power2(maxpower,count);
  ind_mix_Arr(index_mix,count);
  WindowsWeights(winNbr,gaussStDev,windowWeights,weightMean,count);   //-----------------------------------tabele wag okiennych-------------------
  firstIn:=true;
  fIdx:=count div 4;
  cIdx:=4;
  fcpstr:=rate/4;
 end;{st_par_fft}

 procedure cof;
  begin
   dec(nr_konc); dec(scr_nr);
   biez_koniec:=nr_konc*jumpNbrSamples;
   if biez_koniec<1 then biez_koniec:=1;
   dec(toDiskCounter);
   if (pulLight>1) then dec(pulLight);
   if (nr_serii>1) then dec(nr_serii);
   esc:=true;      config_show:=true;
  end;{cof}

 procedure nap;
  begin
    inc(ToDiskCounter);
    inc(nr_konc); inc(scr_nr);
    biez_koniec:=nr_konc*jumpNbrSamples;
    if (biez_koniec>count+1) and ((nr_serii+1)*jumpNbrSamples
      <StoredDataNb) then
     begin inc(pulLight); inc(nr_serii) end;
    esc:=true;  config_show:=true;
  end;{nap}

 procedure commander;
 {
 wybiera znaki z bufora klawiatury i przeglada nastepnie utworzony z nich
 lancuch poszukujac komend
 }
  var logoSVC : boolean;
  procedure motanie(var a:boolean; b,c:boolean; u,v:byte;var config:byte;
                    var arrow:char);
  begin
   if a then
    if not(b or c) then begin config:=v; a:=false end
    else
     if c then if b then inc(config) else begin a:=false; dec(config) end
     else begin inc(config); a:=true end
   else
    if not (a or b) then begin config:=u; a:= true end
    else
     if c then dec(config)
     else begin inc(config); a:=true end;
   if helpUp then arrow:=#31 else arrow:=#30;
   if config=u then arrow:=#31;
   if config=v then arrow:=#30
  end;{motanie}

  procedure fals(var a,b,c,d:boolean);
   begin
    a:=false; b:=false;c:=false;d:=false
   end;{neg}


 var i:integer; j:longint;

 procedure pulSer;
 begin
  st_par_osc;
  if HeapPosPointer+biez_koniec>=count then
   begin
    nr_serii:=round((HeapPosPointer+(-count+biez_koniec) div 2)/
            jumpNbrSamples+1);            {trzymac sie srodka}
    pulLight:=round((HeapPosPointer-w_p_s+(-count+biez_koniec)
              div 2)/jumpNbrSamples+1);
   end
  else
   begin
    nr_serii:=1;              {nastapi przemieszczenie srodka!}
    pulLight:=nr_serii;
   end;
  if nr_serii<1 then nr_serii:=1;

  with grstat do                 {rozmiar okienka do podswietlenia}
//   window_size:=ImageSize(winMap[13,1],winMap[13,3],winMap[13,2],round(lba_pktow_na_okno));
  st_par_fft;
  nr_konc:=round((HeapPosPointer+biez_koniec)/jumpNbrSamples+1);
  scr_nr:=nr_konc;
 end;{pulser}

 procedure fif;
  begin
   fcpstr:=rate/cIdx;
   fIdx:=round(count/cIdx);
  end;{fif}

 var intemp:integer;
 begin  {---------------------------------------------Modyfikacje trybow pracy----}
  logoSVC:=false;
  znak:=#255;lancuch:='';              {ponizsza petla  while nie zmodyfikuje}
//   while KeyPressed do                 {znaku jesli nie wystapi nacisn. klaw.}
   begin
    //znak:=ReadKey;
     lancuch:=lancuch+znak;
   end;{while}
   fin:=(HeapPosPointer+jumpNbrSamples>=storedDataNb);
   if fin then                         {zakonczyc program czy kont.?}
    finish;
   i:=1;
   if znak <>#255 then
   while i<=length(lancuch) do
   begin
    znak:=lancuch[i];
    help_nr:=byte(znak);
    case lancuch[i] of
      #3 : begin error_kom:= ' Przerwanie operatora'; halt end;
     #27 : begin                            {kasow komend, czyscic ruch okno}
            lancuch:='';esc:=true; prtScr:=false;
           end;
     'n' : begin            {wyswietlac tylko 1-na analize w ruchomym oknie}
            sing:=not sing;
            if sing then esc:=true;
	   end;
     's' : begin                             {spectrum-przekroj na ekran}
            spectr_to_scr:=not spectr_to_scr;
            if spectr_to_scr then
             begin
              spectr_anal:=true; res_to_scr:=true;
            if sing then fals(osc_to_scr,cpstr_to_scr,rev_to_scr,ret_to_scr);
             end
            else
             if not (spND or cpstr or filtrOn or fft_rev or retriev) then
              spectr_anal:=false;
           end;{'s'}
     'g' : begin                             {wylaczyc grafike calkowicie}
            grafika:=not grafika;
            if not grafika then Light:=false else Light:=True;
            win_init(11);
            grColor:=15{white}; komunikat:='CZAS w MILISEKUNDACH';
            win_x_y_title(komunikat,'y',10,0,7{lightgray},true);
            config_Show:=true;
            win_Init(13);
	    scale_win(0,bit,tp,tk);
            grcolor:=4{red};
            dr_lab_y_ax_rev(true,false);
            if grafika then
             begin
              clean(0,overlap);
              if freez then lancuch:=lancuch+#27;
             end;
           end;{ 'g'}
     'h' : synchro:=not synchro;              {wylaczyc synchronizacje okien}
     'H' : begin znak:='H'; flush(stat);finish end;        {przerwac analizy}
     'y' : begin                                      {wylaczyc ruchome okno}
            moovie:=not moovie; s_ax:=true;
            if not moovie then begin clr:=true; clean(0,overlap) end
            else
             begin
              if synchro then
               dy:=round(dyn+lba_pktow/2-topY-grstat.winymin+TopY)+5
              else
               asy:=spktr_as-1-grstat.winymin+topY+5
	     end;{else}
           end;{'h'}
     'k' : if grafika and moovie then krok:=not krok    {wykonanie krokowe}
           else
            begin
             if not grafika then lancuch:=lancuch+'g';
             if not moovie  then lancuch:=lancuch+'y';
             lancuch:=lancuch+'k'
            end;
     'u' : fullStop:=not fullStop;{zatrzymac sie po wypelnieniu ekranu}
     'p' : begin                  {wlaczyc poziomice}
            (*if poz=3 then logic_poz:=true;
            if poz=1 then logic_poz:=false;
            if logic_poz then poz:=poz-1 else poz:=poz+1;*)
            motanie(logic_poz,poz<3,poz>1,1,3,poz,poz_arrow);
            if (poz=3) or (poz=1) then poziomice:=true else poziomice:=false;
           end;                                    {wysoka/niska rozdzielczosc}
     'r' : begin
            if resol=0 then hires:=true; if resol=2 then hires:=false;
            if hires then resol:=resol+1 else resol:=resol-1;
	    grMode:=not GrMode; zmRes:=true;
           end;
     'i' : interp:=not interp;         {przelaczanie interpolacji spectrogramu}
     'c' : begin
            cpstr_to_scr:=not cpstr_to_scr;
            if cpstr_to_scr then
             begin
              cpstr:=true; spectr_anal:=true; res_to_scr:=true;
           if sing then fals(osc_to_scr,spectr_to_scr,rev_to_scr,ret_to_scr);
             end
            else
             begin
              if not(fft_rev or retriev or cpNd) then cpstr:=false;
              if not (spectr_to_scr or spND or filtrOn or fft_rev or
               retriev) then spectr_anal:=false;
             end;{else}
           end;{'c'}                             {cepstrum, 'a' - cepstrogram}
     'a' : begin spectr:=not spectr; if not spectr then cpstr:=true end;
     'f' : begin                                  {filtr cepstralny}
            if not cpFnD and res_to_scr then
	     begin filtrOn:=not filtrOn; filtr_to_scr:=filtrOn end;
            if filtr_to_scr then spectr_anal:=true
            else
             begin
              if not cpfND then filtrOn:=false;
              if not(spectr_to_scr or cpND or cpstr or fft_rev) then
               spectr_anal:=false
             end;
             if filtrOn and cut_init then
             informator('Dodatkowo wlaczone wycinanie poczatkowe (shift-F5)',
                   80,12,255,200);
            filtrFreqChange:=true
           end;
     'v' : begin                                       {transformata odwrotna}
            rev_to_scr:=not rev_to_scr;
            if rev_to_scr then
             begin
              spectr_anal:=true; fft_rev:=true; res_to_scr:=true;
         if sing then fals(osc_to_scr,spectr_to_scr,cpstr_to_scr,ret_to_scr);
             end
	    else
             begin
              if not(revND or retriev) then fft_rev:=false;
              if not(cpstr_to_scr or cpND or fft_rev) then cpstr:=false;
              if not(spectr_to_scr or spND or cpstr or retriev) then
               spectr_anal:=false;
             end;{else}
           end;{'v'}
 '0'..'9': if not lock then    {zmiana liczby punktow FFT}
            begin
             cp:=count;
             if znak='0' then k:=10
             else
             if znak='1' then k:=11
             else val(znak,k,intemp);
             count:=1; for j:=1 to k do count:=count*2;
             sqrCount:=count*count;
             if count>max_buffer then count:=max_buffer;
             pulser;
             if count<biez_koniec then                  {sytuacja poczatkowa}
              if cp<=count then biez_koniec:=biez_koniec+(-cp+count) div 2
              else                     {przejscie na mniejsza lbe fft_points}
               if (biez_koniec+(-cp+count) div 2)>=jumpNbrSamples  then
            		biez_koniec:=biez_koniec+(-cp+count) div 2
               else biez_koniec:=jumpNbrSamples
             else  biez_koniec:=count;
             fIdx:=2*fIdx;
             cp:=count div 2;
            end;{not lock}

     'z' : begin                           {odzysk sygnalu po filtracji cepstr}
            ret_to_scr:=not ret_to_scr;
            if ret_to_scr then
             begin
              retriev:=true; spectr_anal:=true; cpstr:=true;fft_rev:=true;
              res_to_scr:=true;
         if sing then fals(osc_to_scr,spectr_to_scr,cpstr_to_scr,rev_to_scr);
             end
            else
             begin
              if not retND then retriev:=false;
              if not(cpstr_to_scr or cpND or retND) then cpstr:=false;
              if not(rev_to_scr or revND or retND) then fft_rev:=false;
	      if not(spectr_to_scr or spND or cpstr or filtrOn or fft_rev)
              then spectr_anal:=false
             end;{else}
           end;
     'd' : count_cp_bool:=not count_cp_bool;        {przebiegac pelen/pol wektora}
     'e'  : less_jump:=not less_jump;
     'o' : begin
            osc_to_scr:=not osc_to_scr;
            if osc_to_scr then
             begin
              res_to_scr:=true;
         if sing then fals(ret_to_scr,spectr_to_scr,cpstr_to_scr,rev_to_scr);
             end
           end;
     else  if not (lancuch[i] in [#255,'O','P','S','C','V','!','L',#9,'D',
             'G','Z',#0,#75,#77,#115,#116,#71,#79]) and rek then rekl:= True
           else config_show:=true
    end;{case male litery}

   if not Lock then
    begin
     case  lancuch[i] of
     'O' : begin                               {zmiana rodzaju okna czasowego}
            if winNbr<=0 then logikO:=true; if winNbr>=4 then logikO:=false;
            if logiko then begin inc(winNbr);arrow2:=#31 end
            else begin dec(winNbr); arrow2:=#30 end;
            if winNbr=0 then arrow2:=#31; if winNbr=4 then arrow2:=#30;
            if winNbr=0 then rectWinFill:=100; if winNbr=1 then rectWinFill:=1;
            WindowsWeights(winNbr,gaussStDev,windowWeights,weightMean,count);  //-----------------------------------tabele wag okiennych-------------------
           end;
     'P' : begin
            half_win:=not half_win;                                {okno polowkowe}
            WindowsWeights(winNbr,gaussStDev,windowWeights,weightMean,count);              //-----------------------------------tabele wag okiennych-------------------
           // suma_wag:=suma_wag/2;          {/2 teoretycznie nieuzasadnione!} 19.10.2014 suma_wag musi być zastąpiona przez weightMean
           end;{p}
     'S' : begin
             spnd:=not  spNd;
             if spNd  then
              begin
               logoSVC:=true;
               SminRF:=1e38; SmaxRF:=-1e38; SsRF:=0; SsqRF:=0; Sdata_nb:=0;
              end
             else
              if not(spectr_to_scr or filtrOn or fft_rev or retriev) then
	       spectr_anal:=false;
           end; {naDysk}
     'C' : begin  cpnd:=not  cpNd;
            if cpNd  then
             begin
              logoSVC:=true;
              CminRF:=1e38; CmaxRF:=-1e38; CsRF:=0;CsqRF:=0; Cdata_nb:=0;
              cpstr:=true
             end
            else
             begin
              if not(fft_rev or cpstr_to_scr or retriev) then cpstr:=false;
              if not (spectr_to_scr or spND or filtrOn or fft_rev or
               retriev) then spectr_anal:=false;
             end;
           end;

     'V' : begin                             {transformata odwrotna na dysk}
            if cpstr then revnd:=not revNd   {tj. spectrum filtrowane cepstr}
            else retND:=not retND;
            if revND or retND then
             begin
              logoSVC:=true;
              VminRF:=1e38; VmaxRF:=-1e38; VsRF:=0; VsqRF:=0; Vdata_nb:=0;
              fft_rev:=true
             end
            else
             begin
              if not(rev_to_scr or retriev) then fft_rev:=false;
              if not(cpstr_to_scr or cpND or fft_rev) then cpstr:=false;
	      if not(spectr_to_scr or spND or cpstr or retriev or fft_rev)
              then spectr_anal:=false;
             end;{else}
           end;{'v'}
     '!' : begin
            nowy_start:=true; freez:=false; hiss_buzz_header:=true;
            if tspo and tsp then
             begin              {zamknac i otworzyc zbiory wynikow buzz_hiss}
              buzz_hiss_files_close;
              buzz_hiss_files_open(storedDataNb);
             end;
           end;
     'L' : begin Lock:=true; freez:=false end;
      #9 : freez:=not freez;            {TAB wylaczyc automatyczny ruch okna}
     'D' : begin
            HiFiltr:=false; if filtr_to_scr then FiltrFreqChange:=true
           end;
     'G' : begin
            HiFiltr:=True; if filtr_to_scr then FiltrFreqChange:=true
           end;
     'Z' : begin
            if cpstr or not retNd then retND:=not RetND;
            if retND then
             begin
              retriev:=true; cpstr:=true; fft_rev:=true;
             end
            else
             begin
              if not ret_to_scr then retriev:=false;
              if not(cpstr_to_scr or cpND or ret_to_scr) then cpstr:=false;
              if not(rev_to_scr or revND or ret_to_scr) then fft_rev:=false;
              if not(spectr_to_scr or spND or cpstr or filtrOn) then
               spectr_anal:=false
             end;{else}
           end;
      #0 :  begin                 {#0 musi byc na koncu ze wzgledu na inc(i)}
             znak:=lancuch[i]; inc(i);
             help_nr:=-byte(lancuch[i]);
             case lancuch[i] of
             #67 :if (winNbr in [0,1]) then  {F9, zmienic wypelnienie okna}
		   begin
                    case winNbr of
                     0 : begin
                          j:=round(rectWinFill);
                          str(j,lancuch1);
                          (*repeat
                           int_graph_param(j,prmtr_change,50,getMaxY,
                           'Modyfikowac wypelnienie okna prostok. Teraz jest='+
                           lancuch1+'%, a ma byc ')
                          until (j>=0) and (j<=100);*)
                          rectWinFill:=j;
                          st_par_fft;
                         end;
                     1 : begin
                          j:=round(10*rectWinFill);
                          str(j,lancuch1);
                          repeat
                          // int_graph_param(j,prmtr_change,50,getMaxY,
                           //'Rozwartosc okna Gaussa. Teraz jest='+
                           //lancuch1+'*0.1 odch. stand., a ma byc ')
			  until (j>=0);
                          rectWinFill:=j/10;
                          st_par_fft;
                         end
                    end{case}
                   end;
             #60 : pas_odd:=not pas_odd;            {F2-ciacPrazkiNiep}
             #61 : begin                            {F3-rozciagacObrazek}
                    str(stretch,lancuch1);
//                    int_graph_param(j,prmtr_change,54,getMaxY,
  //                      'Powiekszenie osi X, teraz jest='+lancuch1+
    //                    ' ma byc=');
                    stretch:=j;
                    if (stretch>1) and count_cp_bool then
                      informator('Lupa tylko dla pokazow jednostronnych, '+
                                 'nacisnac "d"',80,12,255,200);
                   end;

             #85 : pas_even:=not pas_even;          {F2-ciacPrazkiParz}
             #86 :  begin
		     pSlide:=not pSlide;               {shift-F3 slajdy}
		     clr:=not pSlide;
		     if pSlide then
		      informator('Slajdy; jesli zaladowales GRAPHICS'+
		       ' to mozesz przesylac je na drukarke',0,12,255,200);
		    end;
	     #102: begin                            {^F9 - test exp}
		    test:=not test; freez:=test
		   end;
	     #112: begin                      {alt-F9-Przeslac obraz na dysk}
		    informator('Wysylamy obraz na dysk',0,12,255,200);
//		    ScreenToDisk(0,0,getMaxX,GetMaxY,PATTERNpATH);
		   end;
	     #96 : motanie(invUp,inv<3,inv>1,1,3,inv,arrow2);{^F3 - proc odwr}
	     #87 : fall:= not fall;                 {korekta fazy - kierunek}
             #91 : begin     {shift F8 - wczytac prog iteracji; rozwij. fazy}
                    j:=round(thld*100/pi); str(j,lancuch1);
//                    int_graph_param(j,prmtr_change,54,getMaxY,
  //                      'Rozwijanie fazy, prog='+lancuch1+'*0.01pi; ma byc=');
                    thld:=j*pi/100;
                   end;
             #92 : begin {pobierac wycinek z centrum|z poczatku}
                    centrum:=not centrum; st_par_osc;
                   end;
            #101 : Tribolett:=not Tribolett;        {ctrl-F8 met. rozw. fazy}

            #111 : begin                            {alt-F8 test. rozw. fazy}
                     PhTest:=not PhTest;
                     if PhTest then
                      begin
                       informator('Wlaczono sztuczny sygnal testujacy!',
                         80,12,255,200);
                       osc_to_scr:=false; spectr_to_scr:=false;
                       lancuch:=lancuch+'vzk';
                       freez:=true;
                      end
                    end;
             #97 :  begin                        {^F4}
                     phase_corr:=not phase_corr;
                     if phase_corr then
                      begin
                       quiet := false;
                       if ik>count-2 then
                        informator('Korekta fazy nie bedzie wykonywana, F7',
                         80,12,255,50);
                      end;
                    end;
            #106 : ed(patternPath);              {alt_f3 - edytor graficzny}
            #107 : sort:=not sort;               {A-F4 sort. index}
             #62 : begin
                    quiet:=not quiet;            {F4 - wyciszyc korekcje fazy}
//                    if quiet then nosound        {i F0}
                   end;
             #98 :  begin                        {^F5, cepstr. mocy|zesp}
                     if power_cmplx_cpstr<=1 then cmplxCpstr:=true;
                     if power_cmplx_cpstr>=3 then cmplxCpstr:=false;
                     if cmplxCpstr then inc(power_cmplx_cpstr)
                     else dec(power_cmplx_cpstr);
                    end;
            #108 : unwrap_iter:=not unwrap_iter; {faza, iteracje}
             #99 : begin                         {^F6 - autom. przestrajanie}
                    auto_freq:=not auto_freq;
                    if inv=1 then inv:=2;
//                    if not auto_freq then nosound;
                    if auto_freq then
                     begin
                      if not filtrOn then
               informator('Automatyczny filtr cepstr. tylko w trybie filtr!'+
               ' - nacisnac "f"',0,12,255,50);
                      if not cpstr then
               informator('Automatyczny filtr cepstr.tylko lacznie z cepstr.'+
               ' - nacisnac "c" lub "C"',0,12,255,75)
                     end;{if}
                   end;

             #88 :  begin                          {shift-F5 odc.pocz}
                     cut_init:=not cut_init;
                     if cut_init and not filtrOn then
                      informator('Prazek poczatkowy bedzie wycinany po '+
                       'wlaczeniu filtru - nacisnac "f"',80,12,255,200)
                     else
                      if cut_init then
                      informator('Wycin.pocz.nie jest zazn.przebarw.wykresu;'+
                          'dot.cpstr.jesli nie wlacz.,to spectr',0,12,0,0)
                      else informator('Wycinanie poczatkowe wylaczone',
                                       80,12,0,0);
                    end;
             #63 :  begin                          {F5, odciecie poczatkowe}
                     motanie(invUp,init_cut<2,init_cut>0,0,2,init_cut,
                     cut_arrow);                 
                     if not cut_init then
                      informator('Prazek poczatkowy nie bedzie wycinany; '+
                                 'nacisnac shift_F5',80,12,0,0);
                    end;
             #64 : begin             {F6 autom. przestrajanie, wczytac dolna}
                    j:=round(f_low); str(j,lancuch1);   {czestotl. graniczna}
                    repeat
//                     int_graph_param(j,prmtr_change,54,getMaxY,
  //                       'Filtr cepstr., dolna czestotl. gran.='+
    //                     lancuch1+' ma byc=');
                     f_low:=j;
                    until f_low>=rate/cp;
                   end;
             #89 : begin     {shift-F6, wczytac gorna czestotliwosc graniczna}
                    j:=round(f_high); str(j,lancuch1);
//                    int_graph_param(j,prmtr_change,54,getMaxY,'Filtr cepstr.,'+
  //                   ' gorna czestotl. gran.='+lancuch1+' ma byc=');
                    f_high:=j;
                   end;
            #114: prtScr:=not prtScr;                     {wydruki kontrolne}
             #84: begin                                            {shift_F1}
                   helpUp:=not helpUp; {zmiana kierunku przeszukiwania helpu}
                   if helpUp then arrow:=#31 else arrow:=#30;
                   logikO:=not logikO;          {zmiana kierunku zmiany okna}
                   if logikO then arrow2:=#31 else arrow2:=#30;
                   invUp:=not invUp;          {zmiana kierunku zmiany invers}
                  end;
             #94: helpShow:=true;
             #59: motanie(helpUp,config<7,config>1,1,7,config,arrow);{F1-Help}
             #65:  begin              {F7, czytac okres probkowania spectrum}
                    j:=round(-(100*(rate*jump/1000-count)/count));
                    str(j,lancuch1);  str(jump:1:1,lancuch2);
                    repeat
//                     int_graph_param(j,prmtr_change,50,getMaxY,'skok co '+lancuch2+
  //                   ' [ms], co daje pokrycie kolejnych okien ='+
    //                 lancuch1+'%, a ma byc ')
                    until (j>=0) and (j<=99);
                    jump:=(count-0.01*j*count)*1000/rate;
                    cr_m:=round(buzz_rms_skok/jump+0.5);
                    pulser;
                   end;                           

            #100: begin                 {ctrl-F7, wydruki kontrolne ton/szum}
                   tsd:=not TSD; hiss_buzz_header:=true;buzz_to_disk:=false;
                   if tsd then
                    informator('Plik tekstowy RMS i F0 na drukarke',0,12,0,0);
                  end; {TSD= Ton-Szum-Druk}
            #110: begin                 {alt-F7, wydruki kontrolne}
                   TSD:=not TSD;        {ton/szum na dysk tam, gdzie dane}
                   hiss_buzz_header:=true;
                   buzz_to_disk:=true;
                   if tsd then
       informator('Plik tekstowy RMS i F0 na dysk tam, gdzie dane',0,12,0,0);
                  end;
             #90: begin                 {shift-F7,  wyniki analiz ton/szum na }
                   tsp:=not tsp;        {dysk do plikow.rms, .dev, .dvr, .dvd}
                   if not tspo then buzz_hiss_files_open(storedDataNb);
                   tspo:=true;
                  end;                  {TSP= Ton-Szum-Plik}
             #66: begin                 {F8 rozciagnac/scisnac oscylogram}
                   j:=round(f0max); str(j,lancuch1);
//                   int_graph_param(j,prmtr_change,54,getMaxY,
  //                     'Rozciaganie: Fmax oscylogramu='+lancuch1+' ma byc=');
                   f0max:=j;
                   zmRes:=true;
                   st_par_osc; st_par_fft;
                  end;
             #72: if (nr_konc>1) then cof; {Up, cofnac sie do poprzedn. odc.}
             #80: nap;                     {Dn, przeskoczyc do nast. odc.}
             end;{case}

             case lancuch[i] of
               #73 : pgUp:=true;                    {przewijanie oscylogramu}
               #81 : PgDn:=true;
               #82 : begin                {Ins - wstawianie wstawki do cpstr}
                      if cpstr then
                       begin
                        ins:=not ins;                    {wlaczyc tryb insert}
                        if ins then
                         begin
                         if art_nat then
       informator('Cepstrum bedzie modyfikowane istniejaca wstawka naturalna',
                   80,12,0,0)
                         else
       informator('Cepstrum bedzie modyfikowane wstawka sztuczna',
                   80,12,0,0);
                          if not grafika then lancuch:=lancuch+'g';
                          if not moovie then lancuch:=lancuch+'y';
                         end
                        else
                 informator('Modyfikowanie cepstrum wylaczone; nacisnij INS',
                             80,12,0,0);
                       end
                      else informator('Cepstrum wylaczone nacisnij c lub C',
                                     80,12,255,50);
                      end;{#82 =DEL}

               #83 :  begin                  {del - zaladowac stand. wstawke}
                      if cpstr then
                       if ins then
                        begin
                         if not grafika then lancuch:=lancuch+'g';
                         if not moovie then lancuch:=lancuch+'y';
                         Art_nat:=not Art_Nat; {do cepstrow}
                         if art_nat then
              informator('Zaladowac biezaca, naturalna wstawke do cepstrow',
                          80,12,0,0)
                          else
              informator('Zaladowac standardowa sztuczna wstawke do cepstrow',
                          80,12,0,0);
                          change_insert:=true; {zaladowac pozadana wstawke}
                        end {if ins}           {w kolejnym cyklu}
                       else
                 informator('Modyfikowanie cepstrum wylaczone nacisnij INS',
                             80,12,0,0)
                      else informator('Cepstrum wylaczone nacisnij c lub C',
                             80,12,0,0);
                     end;{#83 = INS}
{
---------------------------------modyfikacje czestotliwosci granicznej filtru
    korzystamy tu z zaleznosci:

    cIdx=round(rate/fcpstr)       = round(count/fIdx)  - pozycja w cepstrum
    fIdx=round(fcpstr*count/rate) = round(count/cIdx)  - pozycja w spectrum
    fcpstr=fIdx*rate/count        = rate/cIdx          - czestotliwosc gran.

}
               #71 : begin        {home}
                      fIdx:=1;  cidx:=count; fcpstr:=rate/count
                     end;
               #79 : begin        {end}
                      fIdx:=cp; cidx:=2; fcpstr:=rate/2
                     end;
 #75,#77,#115,#116 : begin      {ruchy klawiszami kursora poziomego}
                     j:=cIdx;
                     case cpstr of  {liniowy ruch kurs. w czest. / w czasie}
                      false : begin
                               case lancuch[i] of
                                  #75 : if fIdx>1 then dec(fIdx);      {left}
                                  #77 : if fIdx<cp then inc(fIdx);    {right}
                                 #115 : if fIdx>10 then dec(fIdx,10)
                                        else fIdx:=1;             {ctrl-left}
                                 #116 : if fIdx<cp-10 then inc(fIdx,10)
                                        else fIdx:=cp;           {ctrl-right}
                                end;{case}
                               fcpstr:=rate*fiDx/count;
                               cIdx:=round(count/fIdx);
                              end;{false}
                      true : begin
                               case lancuch[i] of
                                  #77 : if cIdx>1 then dec(cIdx);      {left}
                                  #75 : if cIdx<cp then inc(cIdx);    {right}
                                 #116 : if cIdx>10 then dec(cIdx,10)
                                        else cIdx:=1;             {ctrl-left}
                                 #115 : if cIdx<cp-10 then inc(cIdx,10)
                                        else cIdx:=cp;           {ctrl-right}
                                end;{case}
                              if not cpstr_to_scr or less_jump then
                               begin
                                case lancuch[i] of     {wybrac mniejszy jump}
                                 #75,#77 : if abs(j-cIdx)>j*cIdx/count then
                                            begin
                                             case lancuch[i] of
                                              #75 : fcpstr :=fcpstr-df;
                                              #77 : fcpstr:= fcpstr+df
                                             end;{case}
                                             cIdx:=round(rate/fcpstr);
                                             fIdx:=round(fcpstr*count/rate)
                                            end
                                           else fif;
                               #115,#116 : if (abs(j-cIdx)>10*j*cidx/count)
                                             or (j=cIdx) then
                                              begin
                                               case  lancuch[i] of
                                                #115 : fcpstr:=fcpstr-10*df;
                                                #116 : fcpstr:=fcpstr+10*df
                                               end;{case}
                                               cIdx:=round(rate/fcpstr);
                                               fIdx:=round(fcpstr*count/rate)
                                              end
                                             else fif;
                                end;{case mniejszy jump}
                               end
                                else  fif;
                                 
                            end;{true}
                     end;{case cpstr}
                     end;{ruch kursora}

             end;
             if lancuch[i] in [#71,#75,#77,#79,#115,#116] then F0:=fcpstr/1.5
             else F0_na_dysk:=false;
             if lancuch[i] in [#75,#77,#115,#116] then
              if fcpstr<rate/count then
               begin fcpstr:=rate/count; fIdx:=1; cIdx:=count end
              else
               if cpstr and not double_side_cpstr_filtr then
                if fcpstr>rate then
                 begin fcpstr:=rate; fIdx:=count; cIdx:=1 end
                else
               else if fcpstr>rate/2 then
                begin fcpstr:=rate/2; fIdx:=cp; cIdx:=2 end;
             if not (lancuch[i] in [#84,#94,#59,#65,#67,#66,
              #62,#64,#89,#90,#99,#100,#106,#109,#110,#114])
             then filtrFreqChange:=true;             {nie ponawiac analiz}
             case lancuch[i] of                         {przywolanie info}
                                  #61,#66,#86 : config:=2;
                          #67,#73,#81,#72,#80 : config:=3;
  #65,#87,#91,#96,#97,#98,#101,#107,#108,#111 : config:=4;
#60,#63,#64,#71,#75,#77,#79,#85,#88,#115,#116,
                                 #89,#99,#109 : config:=5;
        #90,#62,#100,#102,#106,#110,#112,#114 : config:=6;
                              #82,#83,#92,#94 : config:=7;
             end;{case}
             lancuch[i]:=#255;
            end;{#0}
     else
      if not(znak in ['0'..'9',#255,'g','s','n','y','o','k','u','p','r',
         'i','c','a','f','v',#27,'z','d','e','h']) and rek
      then rekl:= True
     else config_Show:=true;
    end;{case duze litery}
    if znak in ['S','C','F','V','Z',#0] then
     begin
      spectr_anal:=true; FileOpen:=True;resNd:=true;
      if logoSVC then
       begin
//        sound(1700);delay(200);
        informator('Daj "!" aby zaczac analizy od poczatku',0,12,250,2000);
//        sound(1500);delay(300);
  //      sound(1700);delay(350);nosound;
        logoSVC:=false;
       end;
     end;
   end{not Lock}
   else
    begin
     if not (lancuch[i] in
      [#3,#27,'u','s','g','h','y','k','u','p','r','i','c','a','f','v',
       '0'..'9','z','d','e','o'])
     then
      informator('Nacisnieto klawisz objety blokada "L"',80,12,128,300);
     if lancuch[i]=#0 then inc(i);
    end;
   if lancuch[i]=#0 then
    begin
     if lancuch[i+1]=#59 then
      motanie(helpUp,config<7,config>1,1,7,config,arrow);
     case lancuch[i] of                                   {przywolanie info}
                                   #61,#66,#86 : config:=2;      {F3,F8}
                           #67,#73,#81,#72,#80 : config:=3;
   #65,#87,#91,#96,#97,#98,#101,#107,#108,#111 : config:=4;
 #60,#63,#64,#71,#75,#77,#79,#85,#88,#115,#116,
                                  #89,#99,#109 : config:=5;
         #62,#90,#100,#102,#106,#110,#112,#114 : config:=6;
                               #82,#83,#92,#94 : config:=7;
     end;{case}
     lancuch[i]:=#255; lancuch[i+1]:=#255;
    end;
   if znak in ['s','c','a','v','z','d','o','O','0'..'9'] then esc:=true;
   case znak of                                             {przywolac info}
                'o','s','S','c','C','f','D','G','v','V','z','Z' : config:=1;
                                    'h','i','p','r','k','a','d' : config:=2;
                                             #9,'n','y','O','P' : config:=3;
                                                       '0'..'9' : config:=4;
                                                            'e' : config:=5;
                                                    'u','g',#27 : config:=6;
                                                    'L','H','!' : config:=7;
   end;
   inc(i);
  end;{while}
  if not(osc_to_scr or spectr_to_scr or cpstr_to_scr or filtr_to_scr or
     rev_to_scr or ret_to_scr) then res_to_scr:=false;
 end;{commander}

begin
 prmtr_change:=true;
 cut_arrow:=#30;
 helpInfo:='';
 help_nr:=255;
 helpShow:=false;
 tspo:=false;                 {otwarcie zbiorow ton_szum_files ?}
 fin:=false;                  {zakonczyc program, czy kontynuowac?}
 resFileNb:='0';              {nr zbioru wynikowego w rozszerzeniu}
 centrum:=true;               {przy transf. odwr. pobierac wycinki z centrum}
 change_insert:=false;        {zmienic rodzaj wstawek: sztuczne / naturalne}
 art_nat:=false;              {wstawki sztuczne}
end.


