program weihnacht1997;
{Musik aus mit toene=false unter Befehl const (Zeile 40)}
uses crt, graph, farbwahl;

const ton : array[1..105] of integer =
            (294, 494, 440, 415, 294, 0,   294, 294, 294, 494, 440, 392, 330,
             330, 523, 494, 440, 370, 0,   570, 570, 523, 392, 440,
             294, 494, 440, 392, 294, 0,   294, 494, 440, 392, 330, 0,   330,
             330, 523, 494, 440, 570, 570, 570, 570, 670, 570, 523, 440, 392, 392, 0,
             494, 494, 494, 494, 494, 494, 494, 560, 392, 440, 494, 0,
             523, 523, 523, 523, 523, 494, 494, 494, 494, 494, 440, 440, 392, 440, 570,
             494, 494, 494, 494, 494, 494, 494, 570, 392, 440, 494, 0,
             523, 523, 523, 523, 523, 494, 494, 494, 494, 570, 570, 523, 440, 392);
      laenge : array[1..105] of integer =
               (125, 125, 125, 125, 250, 68, 68, 68, 125, 125, 125, 125, 250,
                125, 125, 125, 125, 250, 125, 125, 125, 125, 125, 500,
                125, 125, 125, 125, 250, 125, 125, 125, 125, 125, 250, 68,  125,
                125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 250, 125, 68,
                125, 125, 250, 125, 125, 250, 125, 125, 188, 68,  250, 68,
                125, 125, 188, 68,  125, 125, 125, 68,  68,  125, 125, 125, 125, 125, 375,
                125, 125, 250, 125, 125, 250, 125, 125, 188, 68,  250, 68,
                125, 125, 188, 68,  125, 125, 125, 68,  68,  125, 125, 125, 125, 500);

type raster   = array[1..246] of char;
     ort      = array[1..768] of pointtype;
     bool     = array[1..768] of boolean;
     beinfeld = array[1..5814] of char;

const silber      : colortyp = (rott:110; gruent:110; blaut:110);
      weiss       : colortyp = (rott:250; gruent:250; blaut:250);
      schwarz     : colortyp = (rott:10;  gruent:10;  blaut:10);
      stfarbe     : colortyp = (rott:22;  gruent:15;  blaut:0);
      mond        : colortyp = (rott:40;  gruent:40;  blaut:0);
      mondgesicht : colortyp = (rott:30;  gruent:30;  blaut:0);
      hellrot     : colortyp = (rott:120; gruent:0;   blaut:0);
      sack        : colortyp = (rott:45;  gruent:35;  blaut:0);
      rentiere    : colortyp = (rott:35;  gruent:35;  blaut:35);
      schw        : colortyp = (rott:0;   gruent:0;   blaut:0);
      weissr      : colortyp = (rott:255; gruent:255; blaut:255);
      toene       : boolean  = false;

var gd, gm, i, j, durch            : integer;
    beine1, beine2, beine3, beine4 : beinfeld;
    datei                          : file of raster;
    feld2                          : ort;
    feld3                          : bool;
    x, y                           : byte;
    bitmapfeld                     : raster;
    ch                             : char;
    beinedat                       : text;


procedure bildladen;
  begin
    assign(beinedat, 'd:\tp\arbeit\wichtig\weihnach\beine.bmp');
    reset(beinedat);
    for i:=1 to 5814 do read(beinedat, beine1[i]);
    for i:=1 to 5814 do read(beinedat, beine2[i]);
    for i:=1 to 5814 do read(beinedat, beine3[i]);
    for i:=1 to 5814 do read(beinedat, beine4[i]);
    close(beinedat);
    i:=1;
    for y:=0 to 23 do
      for x:=0 to 31 do
        begin
          feld2[i].x:=x;
          feld2[i].y:=y;
          inc(i);
        end;
    for i:=1 to 768 do feld3[i]:=false;
    durch:=1;
    assign(datei, 'd:\tp\arbeit\wichtig\weihnach\weiwald2.bmp');
    reset(datei);
    repeat
      repeat
        j:=random(768)+1;
      until feld3[j]=false;
      feld3[j]:=true;
      seek(datei, (j-1));
      read(datei, bitmapfeld);
      putimage(feld2[j].x*20, feld2[j].y*20, bitmapfeld, 0);
      inc(durch);
    until durch=769;
    close(datei);
  end;

procedure bild2laden;
  begin
    i:=1;
    for y:=0 to 23 do
      for x:=0 to 31 do
        begin
          feld2[i].x:=x;
          feld2[i].y:=y;
          inc(i);
        end;
    for i:=1 to 768 do feld3[i]:=false;
    durch:=1;
    assign(datei, 'd:\tp\arbeit\wichtig\weihnach\tisch.bmp');
    reset(datei);
    repeat
      repeat
        j:=random(768)+1;
      until feld3[j]=false;
      feld3[j]:=true;
      seek(datei, (j-1));
      read(datei, bitmapfeld);
      putimage(feld2[j].x*20, feld2[j].y*20, bitmapfeld, 0);
      inc(durch);
    until durch=769;
    close(datei);
  end;

begin
  randomize;
  gd:=9; gm:=2;
  initgraph(gd, gm, 'd:\tp\bgi');
  setpalettecolor(14, mond);
  setpalettecolor(13, mondgesicht);
  setpalettecolor(12, silber);
  setpalettecolor(1, rentiere);
  setpalettecolor(2, schwarz);
  setpalettecolor(3, stfarbe);
  setpalettecolor(4, hellrot);
  setpalettecolor(5, sack);
  setpalettecolor(6, holz);
  setpalettecolor(7, schw);
  setpalettecolor(8, weissr);
  setpalettecolor(9, rosa);
  setcolor(1); setfillstyle(1, 1);
  bar(0, 0, 639, 479);
  bildladen;
  i:=1;
  repeat
    putimage(200, 400, beine1, 0);
    putimage(285, 400, beine2, 0);
    setpalettecolor(12, weiss);
    setpalettecolor(2, stfarbe);
    setpalettecolor(3, schwarz);
    setpalettecolor(7, weissr);
    setpalettecolor(8, schw);
    if toene then sound(ton[i]);
    delay(laenge[i]*2);
    nosound;
    inc(i);
    if i=106 then i:=1;
    putimage(200, 400, beine3, 0);
    putimage(285, 400, beine4, 0);
    setpalettecolor(12, silber);
    setpalettecolor(2, schwarz);
    setpalettecolor(3, stfarbe);
    setpalettecolor(7, schw);
    setpalettecolor(8, weissr);
    if toene then sound(ton[i]);
    delay(laenge[i]*2);
    nosound;
    inc(i);
    if i=106 then i:=1;
  until keypressed;
  repeat
    ch:=readkey;
  until not(keypressed);
  bild2laden;
  for i:=0 to 15 do resetcolor(i);
  setpalettecolor(8, holz);
  setbkcolor(8);
  setcolor(4);
  settextstyle(4, 0, 4);
  outtextxy(100, 380, 'Merry');
  outtextxy(80, 430, 'Christmas');
  settextstyle(3, 0, 6);
  outtextxy(340, 70, 'Fr”hliche');
  outtextxy(320, 120, 'Weihnachten');
  settextstyle(1, 0, 4);
  outtextxy(20, 20, 'Joyeux');
  outtextxy(50, 50, 'No‰l');
  repeat until keypressed;
  closegraph;
end.

{0 : Himmel;      3: Stamm2              6:  Kufen
 1 : Pferde       4: Schlitten/Weih.Mann 7: Gruen1
 2 : Stamm1       5: Geschenk1           8: Gruen2              }
{9 : Geschenk2    12: Sterne             15: Schnee
 10: Geschenk3    13: Mondgesicht
 11: Geschenk4    14: Mond                                      }
