function [naglowki,dane]=wczytaj_ws(nazwa_pliku)
// wczytuje plik CSV zapisany w programie WaveStar for Oscilloscopes
// naglowki -- wektor łańcuchów z nagłówkami kolumn
// dane -- macierz próbek
  f=mopen(nazwa_pliku,'r')
  sep=','
  naglowek=stripblanks(mgetl(f,1))
  while strstr(naglowek,sep+sep) ~= '' do
    naglowek=strsubst(naglowek,sep+sep,sep+'Unknown'+sep)
  end
  if part(naglowek, length(naglowek)) == sep then
      naglowek=naglowek+'Unknown'
  end
  naglowki=(tokens(naglowek,sep))'
  lb_kolumn=size(naglowki,'c')
  format_linii = ''
  for i=1:lb_kolumn do
    format_linii=format_linii+'%e'+sep
  end
  wiersz=0
  while meof(f)==0 do
    wiersz=wiersz+1
    l=mgetl(f,1)
    if isempty(l)==%f then
      dane(wiersz,:)=msscanf(l,format_linii)
    end
  end
  mclose(f)
endfunction

function calka=calka(dane,numer_przebiegu,tinf,tsup,mnoznik)
// Oblicza całkę z przebiegu numer_przebiegu w macierzy danych (numer_przebiegu
// oznacza numer _pary_ kolumn czas, wartość) od czasu tinf do czasu tsup.
// Wynik jest mnożony przez mnoznik.
  calka=0
  kol_t=(numer_przebiegu-1)*2+1
  kol_y=(numer_przebiegu-1)*2+2
  dane(:,kol_y)=dane(:,kol_y)*mnoznik
  wiersz=1
  while dane(wiersz,kol_t)<tinf do
    wiersz=wiersz+1
  end
  wiersz_inf=wiersz
  while dane(wiersz,kol_t)<tsup do
    x_av=(dane(wiersz,kol_y)+dane(wiersz+1,kol_y))/2
    dt=dane(wiersz+1,kol_t)-dane(wiersz,kol_t)
    calka=calka+x_av*dt
    wiersz=wiersz+1
  end
  wiersz_sup=wiersz
  
  dane_calka=dane(wiersz_inf:wiersz_sup,kol_t:kol_y)
  tiny=(max(max(dane_calka(:,2)),0)-min(min(dane_calka(:,2)),0))/1e6
  dane_pole=[dane_calka(:,1) max(dane_calka(:,2),tiny)]
  dane_wspak=flipdim(dane_calka,1)
  dane_pole=[ dane_pole; [dane_wspak(:,1) min(dane_wspak(:,2),-tiny)] ]

  clf()
  plot(dane(:,kol_t)/1e-6,dane(:,kol_y))
  przebieg=gce()
  przebieg.children(1).foreground=0
  xfpoly(dane_pole(:,1)/1e-6,dane_pole(:,2),12)
  pole=gce()
  pole.foreground=2
  xtitle('','t / µs','')
  wykr=gca()
  wykr.box="on"
  wykr.grid=[0,0,-1]
endfunction

function calka=calka_infsup(dane,numer_przebiegu,tinf,tsup,mnoznik)
  calka=calka(dane,numer_przebiegu,tinf,tsup,mnoznik)
endfunction

function calka=calka_infint(dane,numer_przebiegu,tinf,tint,mnoznik)
// Oblicza całkę z przebiegu numer_przebiegu w macierzy danych (numer_przebiegu
// oznacza numer _pary_ kolumn czas, wartość) za odcinek od czasu tinf 
// o długości deltat. Jeżeli parametr deltat jest ujemny, to tinf oznacza
// górną granicę całkowania, natomiast całkowanie odbywa się zawsze
// w stronę rosnącego czasu, czyli wynik nie będzie przeciwnego znaku.
// Wynik jest mnożony przez mnoznik.
  if deltat<0 then
    tsup=tinf
    tinf=tsup+tint
  else
    tsup=tinf+tint
  end
  calka=calka(dane,numer_przebiegu,tinf,tsup,mnoznik)
endfunction

function calka=calka_infdelta(dane,numer_przebiegu,tinf,delta,mnoznik)
  calka=calka_infint(dane,numer_przebiegu,tinf,delta,mnoznik)
endfunction

