{program pobrano ze strony www.sprawozdania.info}
Program ACDSee;
uses Dos,Crt;
type wzorzec_koloru_BMP = record
                           niebieski : byte;
                           zielony : byte;
                           czerwony : byte;
                           zarezerwowany : byte;
                          end;

type naglowek_pliku_BMP = record
                           typ_obrazu : array[0..1] of char;
                           rozmiar_pliku : longint;
                           zarezerwowane1 : word;
                           zarezerwowane2 : word;
                           odleglosc_do_obrazu : longint;
                           rozmiar_naglowka_info : longint;
                           szerokosc_obrazu : longint;
                           wysokosc_obrazu : longint;
                           liczba_planow_obrazu : word;
                           liczba_bitow_na_piksel : word;
                           typ_kompresji : longint;
                           rozmiar_obrazu : longint;
                           pozioma_rozdziel_DPI : longint;
                           pionowa_rozdziel_DPI : longint;
                           liczba_uzywanych_kolorow : longint;
                           liczba_znaczacych_kolorow : longint;
                          end;

var Sciezka,NazwaPliku:string;
    opoznienie:word;

Procedure Blad;
          Begin
               Sound(300);
               Delay(100);
               Nosound;
          End;

Function rozmiar(NazwaPlikuP:string):boolean;
         var naglowek:naglowek_pliku_bmp;
             a,licznik,wynik:word;
             plik:file;
         Begin
              rozmiar:=true;
              assign(plik, NazwaPlikuP);
              reset(plik,1);
              licznik := sizeof(naglowek_pliku_BMP);
              blockread(plik,naglowek, licznik, wynik);
              If (naglowek.rozmiar_pliku<>65078) then rozmiar:=false;
              Close(plik);
         End;


Procedure wyswietlenie(NazwaPlikuP:String;opoznienie:word);
var
plik : file;
licznik, wynik : word;
licznik_petli : word;
naglowek : naglowek_pliku_BMP;
paleta_k : array[0..255] of wzorzec_koloru_BMP;

begin
clrscr;
If (rozmiar(NazwaPlikuP)=false) and (opoznienie=0) then
Begin
     Blad;
     ClrSCr;
     Writeln('Rozmiar lub paleta kolorow podanego obrazu jest nieprawidlowa.');
     Writeln('Nacisnij ENTER aby wyjsc do glownego menu.');
     Readln;
End else
If (rozmiar(NazwaPlikuP)=false) and (opoznienie<>0) then else
Begin

assign(plik, NazwaPlikuP);

reset(plik,1);

licznik := sizeof(naglowek_pliku_BMP);

blockread(plik,naglowek, licznik, wynik);
If opoznienie=0 then
   Begin
        writeln('Typ obrazu : ', naglowek.typ_obrazu[0], naglowek.typ_obrazu[1]);
        writeln('Rozmiar pliku : ', naglowek.rozmiar_pliku);
        writeln('Zarezerwowane1 : ', naglowek.zarezerwowane1);
        writeln('Zarezerwowane2 : ', naglowek.zarezerwowane2);
        writeln('Odleglosc do obrazu : ',naglowek.odleglosc_do_obrazu);
        writeln('Rozmiar naglowka info. : ', naglowek.rozmiar_naglowka_info);
        writeln('Szerokosc obrazu : ', naglowek.szerokosc_obrazu);
        writeln('Wysokosc obrazu : ', naglowek.wysokosc_obrazu);
        writeln('Liczba planow obrazu : ', naglowek.liczba_planow_obrazu);
        writeln('Liczba bitow na piksel : ', naglowek.liczba_bitow_na_piksel);
        writeln('Typ kompresji : ', naglowek.typ_kompresji);
        writeln('Rozmiar obrazu : ', naglowek.rozmiar_obrazu);
        writeln('Pozioma rozdziel. DPI : ', naglowek.pozioma_rozdziel_DPI);
        writeln('Pionowa rozdziel. DPI : ', naglowek.pionowa_rozdziel_DPI);
        writeln('Uzywanych kolorow : ', naglowek.liczba_uzywanych_kolorow);
        writeln('Znaczacych kolorow : ', naglowek.liczba_znaczacych_kolorow);
        writeln('');
        writeln('Wcisnij dowolny klawisz aby kontynuowac');

        readkey;
End;
licznik := sizeof(paleta_k);

blockread(plik, paleta_k, licznik, wynik);

asm {wlaczenie trybu 13h}
   mov ah, 00h    {zaladuj 00h do AH - numer funkcji przerwania 10h}
   mov al, 13h    {zaladuj 13h do AL - numer trybu pracy karty graficznej}
   int 10h        {wywolaj przerwanie 10h}
end;


port[$3c8] := 0; {zaczynamy zapis palety kolorow od pierwszego jej wzorca}

for licznik_petli := 0 to 255 do {zapis w petli wszytkich 255 wzorcow}
begin
port[$3c9] := paleta_k[licznik_petli].czerwony shr 2;
port[$3c9] := paleta_k[licznik_petli].zielony shr 2;
port[$3c9] := paleta_k[licznik_petli].niebieski shr 2;
end; {koniec petli for}

licznik := 320;

for licznik_petli := 0 to 199 do
blockread(plik, mem[$A000:(199 - licznik_petli)*320], licznik, wynik);

close(plik);
Delay(opoznienie);
If opoznienie=0 then
Begin
readkey;
   asm {wyjscie z trybu 13h}
      mov ah, 00h  {zaladuj 00h do AH - numer funkcji przerwania 10h}
      mov al, 03h  {zaladuj 13h do AL - numer trybu pracy karty graficznej}
      int 10h      {wywolaj przerwanie 10h}
   end;
end;
End;
end;



Procedure Otwieranie_Blad(var NazwaPlikuP:string);
        var klawisz:char;
        pdu:file;
        Begin
            Writeln;
                        Assign(pdu,NazwaPlikuP);
                        {$I-}
                        Reset(pdu);
                        While IOResult<>0 do
                        Begin
                             ClrScr;
                             Blad;
                             Writeln('Podales zla nazwe pliku. ');
                             Writeln('Podaj nazwe jeszcze raz (q-wyjscie)');
                             Readln(NazwaPliku);
                            If NazwaPliku='q' then break else
                            Begin
                                 Assign(pdu,NazwaPliku);
                                 Reset(pdu);
                            End;
                        End;
                        {$I+}
        End;


Procedure listing(sciezkaP,NazwaPlikuP:string);
          var DirInfo:SearchRec;
          Begin
               ChDir(sciezkaP);
               ClrScr;
               If NazwaPlikuP='b' then NazwaPlikuP:='*.bmp';
               Writeln('Oto pliki ',NazwaPlikuP,' z katalogu ',sciezkaP);
               Writeln;
               FindFirst(NazwaPlikuP, 0, DirInfo);
               while DosError = 0 do
               begin
                    Writeln(DirInfo.Name);
                    FindNext(DirInfo);
               end;
               Writeln;
               Writeln('Nacisnij dowolny klawisz');
               Repeat
               Until keypressed;

          End;

Procedure ZmianaKatalogu(var sciezkaP:string);
          var AktualnyKatalog:String;
              klawisz:char;
          Begin
               Writeln;
               ClrScr;

               GetDir(0,AktualnyKatalog);
               Writeln('Obecnie jestes w katalogu ',AktualnyKatalog);
               Writeln;
               Writeln('Czy chcesz zmienic katalog? (t-tak/n-nie)');
               Repeat
               klawisz:=Upcase(readkey);
               Until (klawisz='T') or (klawisz='N');
               Writeln;
               If klawisz='T' then Begin
                                        Writeln;
                                        Writeln('Podaj sciezke dostepu:');
                                        Writeln;
                                        Readln(sciezkaP);
                                        {$I-}
                                        ChDir(sciezkaP);
                                        While IOResult<>0 do
                                        Begin
                                             ClrScr;
                                             Blad;
                                             Writeln('Podales nieprawidlowa sciezke.');
                                             Writeln('Podaj sciezke jeszcze raz (q-wyjscie)');
                                             Readln(sciezkaP);
                                             If sciezkaP<>'q' then ChDir(sciezkaP);
                                        End;
                                        {$I+}
                                   End;
          End;


Procedure UP;
          var pdu:file; {plik do usuniecia}
              klawisz:char;
          Begin
               ClrScr;
               Writeln('Czy chcesz usunac plik (t-tak/n-nie)?');
               Repeat
               klawisz:=Upcase(readkey);
               Until (klawisz=Upcase('t')) or (klawisz=Upcase('n'));
               If klawisz='T' then
               Begin
                        Writeln;
                        Writeln('Podaj nazwe pliku do usuniecia:');
                        Readln(NazwaPliku);
                        Otwieranie_blad(NazwaPliku);
                        Assign(pdu,NazwaPliku);
                        If NazwaPliku<>'q' then
                        Erase(pdu);
               End;
          {$I+}

          End;


Procedure SlideShow;
          var DirInfo:SearchRec;
          Begin
               ClrScr;
               Writeln('Podaj wartosc opoznienia wyswietlania plikow (w milisekundach):');
               {$I-}
               Readln(opoznienie);
               While IOResult<>0 do
                     Begin
                          ClrScr;
                          Blad;
                          Writeln('Podales zla wartosc opoznienia.');
                          Writeln('Podaj ja jeszcze raz:');
                          Readln(opoznienie)
                     End;
               {$I+}
               FindFirst('*.bmp', 0, DirInfo);
               If DirInfo.size<>65078 then Begin
                                           Blad;
                                           ClrScr;
                                           Writeln('W podanym katalogu nie ma plikow *.bmp');
                                           Writeln('Nacisnij ENTER aby powrocic do glownego menu.');
                                           Readln;
                                      End
               else
               Begin
               while DosError = 0 do
               begin
                    wyswietlenie(DirInfo.name,opoznienie);
                    FindNext(DirInfo);
               end;
   asm {wyjscie z trybu 13h}
     mov ah, 00h  {zaladuj 00h do AH - numer funkcji przerwania 10h}
     mov al, 03h  {zaladuj 13h do AL - numer trybu pracy karty graficznej}
     int 10h      {wywolaj przerwanie 10h}
   end;
end;
          End;

Procedure x;
          Begin
               ClrScr;
               Writeln('Zlamanie warunkow licencjonowania programu grozi sformatowaniem dysku ');
               Writeln('i calkowitym rozmrozeniem jedzenia w zamrazarce.');
               Readln;
               exit;
          End;


Procedure Glowny;
          Begin
               lowvideo;
               Writeln('Witamy w najnowszej wersji przegladarki EjSiDiSi.');
               Writeln;
               Writeln('Ze wzgledu na to, ze ten komputer jest zbyt slaby, ');
               Writeln('mozliwe jest tylko przegladanie plikow graficznych w formacie bmp.');
               Writeln('(w rozdzielczosci 320*200 i 256 kolorach)');
               Writeln;
               Writeln('Nacisnij ENTER aby przejsc do menu.');
               textcolor(black);
               Readln;

          End;
Procedure CoChceszZrobic;
          var klawisz:char;
          Begin
          Repeat
                     Writeln;
                     ClrScr;
                     textcolor(white);
                     lowvideo;
                     Writeln('Z-Zmiana katalogu');
                     Writeln('L-Listing plikow w katalogu');
                     Writeln('W-Wyswietlanie pliku bmp');
                     Writeln('U-Usuwanie pliku');
                     Writeln('S-SlideShow');
                     Writeln('X-Warunki licencji');
                     Writeln('Q-wyjscie');
                     gotoxy(25,23);
                     Writeln('Program pobrano ze strony www.sprawozdania.yoyo.pl');
               Repeat
                     klawisz:=Upcase(readkey);
               Until (klawisz=Upcase('z')) Or (klawisz=Upcase('x')) Or (klawisz=Upcase('s')) Or (klawisz=Upcase('w')) Or
                     (klawisz=Upcase('l')) Or (klawisz=Upcase('u')) Or (klawisz=Upcase('q'));
               Case klawisz of
               'Z':ZmianaKatalogu(Sciezka);
               'L':Begin
                        ClrScr;
                        Writeln('Podaj nazwe pliku do wyszukania. Mozesz uzyc symboli "*" i "?"');
                        Writeln('Jesli jako nazwe pliku podasz literke "b" to wyswietlone zostana pliki *.bmp');
                        Readln(NazwaPliku);
                        Listing(Sciezka,NazwaPliku);
                   End;
               'W':Begin
                        Writeln;
                        ClrScr;
                        Writeln('Podaj nazwe pliku (bez rozszerzenia; zostanie ono automatycznie dopisane):');
                        Readln(NazwaPliku);
                        Nazwapliku:=NazwaPliku+'.bmp';
                        Otwieranie_blad(NazwaPliku);
                        If NazwaPliku<>'q' then
                        Begin
                             opoznienie:=0;
                             wyswietlenie(NazwaPliku,opoznienie);
                        End;
                   End;
               'S':SlideShow;
               'U':UP;
               'X':x;
               End;
          Until klawisz=Upcase('q');
          End;

Procedure Matrix;
var  i,j,a,b,c:byte;
Begin
clrscr;
Randomize;
highvideo;
Delay(500);
Write('F');
Delay(120);
Write('o');
Delay(120);
Write('l');
Delay(120);
Write('l');
Delay(120);
Write('o');
Delay(120);
Write('w');
Delay(120);
Write(' ');
Delay(120);
Write('t');
Delay(120);
Write('h');
Delay(120);
Write('e');
Delay(120);
Write(' ');
Delay(120);
Write('w');
Delay(120);
Write('h');
Delay(120);
Write('i');
Delay(120);
Write('t');
Delay(120);
Write('e');
Delay(120);
Write(' ');
Delay(120);
Write('r');
Delay(120);
Write('a');
Delay(120);
Write('b');
Delay(120);
Write('b');
Delay(120);
Write('i');
Delay(120);
Write('t');
Delay(620);
lowvideo;
ClrScr;
Textcolor(green);
Delay(500);
      for i:=1 to 22 do begin

          a:=Random(10);
          b:=Random(10);
          c:=Random(10);

          If i>=4 then begin
          gotoxy(1,i-3);  {1}
          writeln(a);  end;

          If i>=10 then begin
          HighVideo;
          gotoxy(3,i-9);    {3}
          writeln(b);
          LowVideo; end;

          If i>=15 then begin
          gotoxy(5,i-14);    {5}
          writeln(c); end;

          If i>=6 then begin
          gotoxy(7,i-5);    {7}
          writeln(a); end;

          If i>=10 then begin
          gotoxy(9,i-19);    {9}
          writeln(b); end;

          If i>=1 then begin
          HighVideo;
          gotoxy(11,i);    {11}
          writeln(c);
          LowVideo; end;

          If i>=7 then begin
          gotoxy(13,i-6);    {13}
          writeln(a); end;

          If i>=8 then begin
          HighVideo;
          gotoxy(15,i-7);    {15}
          writeln(b);
          LowVideo; end;

          If i>=15 then begin
          gotoxy(17,i-14);    {17}
          writeln(c); end;

          If i>=3 then begin
          gotoxy(19,i-2);    {19}
          writeln(a); end;

          If i>=1 then begin
          HighVideo;
          gotoxy(21,i);    {21}
          writeln(b);
          LowVideo; end;

          If i>=5 then begin
          gotoxy(23,i-4);    {23}
          writeln(c); end;

          If i>=2 then begin
          gotoxy(25,i-1);    {25}
          writeln(a); end;

          If i>=1 then begin
          gotoxy(27,i);    {27}
          writeln(b); end;

          If i>=9 then begin
          HighVideo;
          gotoxy(29,i-8);    {29}
          writeln(c);
          LowVideo; end;

          If i>=11 then begin
          gotoxy(31,i-10);    {31}
          writeln(a); end;

          If i>=5 then begin
          HighVideo;
          gotoxy(33,i-4);    {33}
          writeln(b);
          LowVideo; end;

          If i>=4 then begin
          gotoxy(35,i-3);    {35}
          writeln(c); end;

          If i>=1 then begin
          gotoxy(37,i);    {37}
          writeln(a); end;

          If i>=5 then begin
          HighVideo;
          gotoxy(39,i-4);    {39}
          writeln(b);
          LowVideo; end;

          If i>=1 then begin
          gotoxy(41,i);    {41}
          writeln(c); end;

          If i>=6 then begin
          gotoxy(43,i-5);    {43}
          writeln(a); end;

          If i>=10 then begin
          gotoxy(45,i-9);    {45}
          writeln(b); end;

          If i>=4 then begin
          HighVideo;
          gotoxy(47,i-3);    {47}
          writeln(c);
          LowVideo; end;

          If i>=8 then begin
          gotoxy(49,i-7);    {49}
          writeln(a); end;

          If i>=2 then begin
          HighVideo;
          gotoxy(51,i-1);    {51}
          writeln(b);
          LowVideo; end;

          If i>=6 then begin
          gotoxy(53,i-5);    {53}
          writeln(c); end;

          If i>=1 then begin
          HighVideo;
          gotoxy(55,i);    {55}
          writeln(a);
          LowVideo; end;

          If i>=3 then begin
          gotoxy(57,i-2);    {57}
          writeln(b); end;

          If i>=7 then begin
          gotoxy(59,i-6);    {59}
          writeln(c); end;

          If i>=2 then begin
          gotoxy(61,i-1);    {61}
          writeln(a); end;

          If i>=5 then begin
          HighVideo;
          gotoxy(63,i-4);    {63}
          writeln(b);
          LowVideo; end;

          If i>=1 then begin
          gotoxy(65,i);    {65}
          writeln(c); end;

          If i>=6 then begin
          gotoxy(67,i-5);    {67}
          writeln(a); end;

          If i>=9 then begin
          gotoxy(69,i-8);    {69}
          writeln(b); end;

          If i>=7 then begin
          HighVideo;
          gotoxy(71,i-6);    {71}
          writeln(c);
          LowVideo; end;

          If i>=1 then begin
          gotoxy(73,i);    {73}
          writeln(a); end;

          If i>=4 then begin
          gotoxy(75,i-3);    {75}
          writeln(b); end;

          If i>=3 then begin
          gotoxy(77,i-2);    {77}
          writeln(c); end;

          If i>=6 then begin
          HighVideo;
          gotoxy(79,i-5);    {79}
          writeln(a);
          LowVideo; end;

          Delay(80);end;
Normvideo;
END;



Begin
asm {wyjscie z trybu 13h}
      mov ah, 00h  {zaladuj 00h do AH - numer funkcji przerwania 10h}
      mov al, 03h  {zaladuj 13h do AL - numer trybu pracy karty graficznej}
      int 10h      {wywolaj przerwanie 10h}
end;

ClrScr;
Glowny;
CoChceszZrobic;
Matrix;
End.