program depacker;

//---------------------- LIBRARES ----------------------------

uses crt, fastgraph;

//---------------------- GLOBAL VARIABLES --------------------

var qrCode1               : string = 'ggggggd)WTK\)WQ+PLWU-K455-PQ.6KPU-]aH]-WRW_dWT)===<)gg5aggd,(QXbSQgVSF-GeND?QWK_9T`EfHUC]I-cGOI>eV,I1DNS^;MX725@cS=)5[?7;RFge9I3Igg?MKeT7,=2L8CLZ?Y^bVXc/J53cYKcS6WTQSP9UP_(*BXe=5)6JMQcV(C4U]4ff(Gga4IBcd)GO7=-WWT-FaE-,dX()PRT8FQe-@55g1WSYYBNT)10XD1gggggg`';
    qrCode2               : string = 'gggggg(9;f8.fK8GWU-:1[9B2<C>J\?a^M-WS1*Cc(===8/g^@dgdYbBQPAM31eN\=O6G;S^=7?[\-(MFFKO`T)UI>)[LaLSOR,^YLHcGU]KRWCF,bae69F]KYg-2b0?a=33EVeLdDGCeb>EGG-@fK)7gN1fcD)VS-9cbe:+L\<9LXEPU<OW[9E8aFVfL-[)d)9>7GGgggggH';
    qrCode3               : string = 'gggggX.Z)(CbXRWU-(G<>JYT239?L=-WQBRfX-==(GfA4gdT_TY6SQ<.+]AKe/b;a,)e[]CNgO(5K40-K-gM2V:OC679+e[ba7^(>TYfMecNE5dK(_gQWVK(?e]9WT.;T\?PH,b2GR;E-eOa>fPZ=/(>3cCgggggH';
    bmpAdr                : integer;
//---------------------- PROCEDURES --------------------------

// bmp_adr:=dpeek(88);   // adres pamięci obrazu
// fillchar(pointer(bmp_adr), 192*40, 0);
procedure cls;
begin
  fillchar(pointer(bmpAdr), 1600, 0);
  ClrScr;
end;

procedure renderQr(qrCode : string);
var i0, i1, x, y, loopEnd : byte;
    qrBlock, offset       : byte;
    dicFirstChar          : byte = 40;
begin
  x := 0;
  y := 0;
  loopEnd := ord(qrCode[0]);
  offset := round(sqrt(loopEnd * 6));
  writeln('string length: ', loopEnd, ', offset: ', offset);
  
  for i0 := 1 to loopEnd do begin
    qrBlock := ord(qrCode[i0]) - dicFirstChar;
    for i1 := 1 to 6 do begin
      if (qrBlock and %100000 <> 0) then PutPixel(x,y);
      qrBlock := qrBlock shl 1;
      x := x + 1;
      if (x = offset) then begin
        x := 0;
        y := y + 1;
      end;
    end;
  end;
end;

//---------------------- MAIN PROGRAM ------------------------

begin
  InitGraph(7);
  bmpAdr := dpeek(88);
  SetColor(1);

  renderQr(qrCode1);
  writeln('press any key');
  ReadKey;
  cls;

  renderQr(qrCode3);
  writeln('press any key');
  ReadKey;
  cls;

  renderQr(qrCode2);
  writeln('press any key');
  ReadKey;
end.

