home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 December / PCWorld_2002-12_cd.bin / Software / Komercni / Baltik / katB.exe / katB / BACKTRAQ / BACKTRAQ.MOD / SHARED.INC < prev    next >
Text File  |  2002-09-20  |  15KB  |  332 lines

  1. // sdílené konstanty
  2.  
  3. // konstanty pro hodnoty prom╪nné mod_ReºimObrazovky
  4. # define mod_TEXTOVφ_REªIM 1
  5. # define mod_GRAFICKφ_REªIM 2
  6. // konstanty uºivatelsk∞ch v∞stupà v grafickém reºimu
  7. # define mod_GRAFIKA_VφSTUP_MOJEPLOCHA GrV∞stupUºivatelsk∞1
  8. # define mod_GRAFIKA_VφSTUP_POKYN GrV∞stupUºivatelsk∞2
  9. // konstanty sou²adnic uºivatelsk∞ch v∞stupà v grafickém reºimu
  10. # define mod_GRAFIKA_VφSTUP_POKYN_X1 2
  11. # define mod_GRAFIKA_VφSTUP_POKYN_X2 637
  12. # define mod_GRAFIKA_VφSTUP_POKYN_Y1 20
  13. # define mod_GRAFIKA_VφSTUP_POKYN_Y2 29
  14. # define mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1 2
  15. # define mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X2 637
  16. # define mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1 35
  17. # define mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y2 477
  18. // konstanty sou²adnic v grafickém reºimu ve v∞stupu Plocha
  19. # define mod_GRAFIKA_Z╡HLAV╓_X 2
  20. # define mod_GRAFIKA_Z╡HLAV╓_Y 2
  21. # define mod_GRAFIKA_Z╡HLAV╓_PODTRªEN╓_X1 2
  22. # define mod_GRAFIKA_Z╡HLAV╓_PODTRªEN╓_X2 637
  23. # define mod_GRAFIKA_Z╡HLAV╓_PODTRªEN╓_Y 13
  24. // konstanty pro hodnoty prom╪nné mod_Hledanáⁿeτení
  25. # define mod_VµECHNA_ⁿEµEN╓ 1
  26. # define mod_JAKÉKOLIV_ⁿEµEN╓ 2
  27. // konstanty pro hodnoty prom╪nné mod_ZobrazovanéPozice
  28. # define mod_POUZE_ⁿEµEN╓ 1
  29. # define mod_VµECHNY_POZICE 2
  30. // konstanty pro sm╪r t²íd╪ní pouºívan∞ funkcí QuickSort
  31. # define mod_QUICKSORT_ASC 1
  32. # define mod_QUICKSORT_DESC -1
  33. // konstanty pro ƒekání po zobrazení hláτky pouºívané funkcí mod_VypiτHláτku 
  34. # define mod_VYPIµHL╡µKU_NE¼EKEJ 0 // neƒeká se
  35. # define mod_VYPIµHL╡µKU_VY¼KEJ 1 // chvíli se vyƒká (pouze grafika)
  36. # define mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESU 2 // ƒeká se na stisk klávesy
  37. # define mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESUGRAFIKA 3 // ƒeká se na stisk klávesy (pouze grafika)
  38.  
  39. // sdílené prom╪nné
  40.  
  41. int mod_ReºimObrazovky; // pouºit∞ reºim obrazovky (viz konstanty)
  42. int mod_Hledanáⁿeτení; // jaká ²eτení hledat (viz konstanty)
  43. int mod_Poƒetⁿeτení; // poƒet nalezen∞ch ²eτení
  44. int mod_ZobrazovanéPozice; // zda zobrazovat pouze ²eτení nebo vτechny pozice (viz konstanty)
  45. int mod_¼ekatNaKlávesu; // zda po nalezení ²eτení ƒekat na stisk klávesy
  46. int mod_ZapisovatProtokol; // zda zapisovat protokol o v∞poƒtu do souboru
  47. string mod_ZapisovatProtokol_Název; // název souboru, kam protokol zapisovat
  48. TypSoubor mod_ZapisovatProtokol_Soubor; // soubor, kam protokol zapisovat
  49.  
  50. string mod_NechZvolit_Volby[2]; // parametr sdílené funkce NechZvolit()
  51. char mod_NechZvolit_AccessKeys[2]; // parametr sdílené funkce NechZvolit()
  52.  
  53. Typ¼as mod_¼asStart; // ƒas zaƒátku v∞poƒtu
  54. Typ¼as mod_¼asHotovo; // ƒas dokonƒení v∞poƒtu
  55. Typ¼as mod_¼asRozdíl; // doba trvání v∞poƒtu (rozdíl ƒasu zaƒátku a dokonƒení)
  56.  
  57. int* mod_QuickSort_Pole; // ukazatel na pole t²ízené funkcí QuickSort
  58.  
  59. // ve²ejné prom╪nné
  60.  
  61. int mod_HledatDál; // urƒuje, zda pokraƒovat v backtrackingu
  62.  
  63. // sdílené funkce
  64.  
  65. // [univerzální funkce]
  66.  
  67. double pow(double base, double power) {
  68.   double result=1;
  69.   while(power-->0) result*=base;
  70.   return result;
  71.   }
  72.  
  73. void GrPiτⁿet╪zecWordWrap(char* ⁿet╪zec, int X1, int Y1, int X2, int Y2, int center) {
  74.   int ⁿet╪zecPozice = 0;
  75.   int PoƒetZnakàNaⁿádek = integer((X2-X1+1)/8);
  76.   string ⁿet╪zecKZobrazení;
  77.   GrNastavPozici(X1,Y1);
  78.   while(ⁿet╪zecPozice < StrDélka(ⁿet╪zec)) {
  79.     ⁿet╪zecKZobrazení = StrKopie(ⁿet╪zec,ⁿet╪zecPozice,PoƒetZnakàNaⁿádek);
  80.     if(ⁿet╪zecPozice+PoƒetZnakàNaⁿádek < StrDélka(ⁿet╪zec) && strchr(ⁿet╪zec,' ')) ⁿet╪zecKZobrazení = StrKopie(ⁿet╪zecKZobrazení,0,strrchr(ⁿet╪zecKZobrazení,' ')-(char*)ⁿet╪zecKZobrazení+1);
  81.     ⁿet╪zecPozice += StrDélka(ⁿet╪zecKZobrazení);
  82.     if(center) GrNastavPoziciRel((PoƒetZnakàNaⁿádek-StrDélka(ⁿet╪zecKZobrazení))*8/2, 0);
  83.     GrPiτⁿet╪zec(ⁿet╪zecKZobrazení);
  84.     GrNastavPozici(X1,GrPoziceY()+10);
  85.     }
  86.   }
  87.  
  88. string StrL¼ísloZeroPad(long ¼íslo, int Délka) {
  89.   string zeropadded = StrL¼íslo(¼íslo, -1);
  90.   while(StrDélka(zeropadded) < Délka) zeropadded = "0" + zeropadded;
  91.   return zeropadded;
  92.   }
  93.  
  94. void mod_QuickSort(int low, int high, int order) {
  95.   int i, j;
  96.     {
  97.     int pilot, temp;
  98.     i = low;
  99.     j = high;
  100.     pilot = mod_QuickSort_Pole[(int)integer((low+high)/2)];
  101.     while(i <= j) {
  102.       while(order==mod_QUICKSORT_ASC?(mod_QuickSort_Pole[i] < pilot):(mod_QuickSort_Pole[i] > pilot)) i++;
  103.       while(order==mod_QUICKSORT_ASC?(mod_QuickSort_Pole[j] > pilot):(mod_QuickSort_Pole[j] < pilot)) j--;
  104.       if(i <= j) {
  105.         temp = mod_QuickSort_Pole[i];
  106.         mod_QuickSort_Pole[i] = mod_QuickSort_Pole[j];
  107.         mod_QuickSort_Pole[j] = temp;
  108.         i++;
  109.         j--;
  110.         }
  111.       }
  112.     }
  113.   if(low < j) mod_QuickSort(low, j, order);
  114.   if(high > i) mod_QuickSort(i, high, order);
  115.   }
  116.  
  117. // [jednoúƒelové funkce]
  118.  
  119. void MyτZapni() { // zapne obsluhu událostí myτi
  120.   MyτZaƒátekObsluhy();
  121.   MyτNastavRozsah(mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X2, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y2);
  122.   }
  123.  
  124. void MyτVypni() { // vypne obsluhu událostí myτi
  125.   MyτKonecObsluhy();
  126.   }
  127.  
  128. void mod_InicializujGrafiku(void) { // inicializace grafiky
  129.   // inicializace v∞stupu Plocha
  130.   GrNastavV∞stup(GrV∞stupPlocha);
  131.   GrNastavBarvuPozadí(Pal¼erná);
  132.   GrSmaºOkno();
  133.   GrNastavText(GrTextBezPozadí);
  134.   // vykreslení obsahu v∞stupu Plocha
  135.   GrNastavBarvy(PalTmav╪µedá<<4|PalTmav╪µedá);
  136.   GrKresliObdélník(0,0,639,479);
  137.   GrKresliVypln╪n∞Obdélník(0,0,639,mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1-2);
  138.   GrNastavBarvuPop²edí(PalBéºová);
  139.   GrKresliObdélník(mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1-1, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1-1, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X2+1, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y2+1);
  140.   GrNastavBarvuPop²edí(PalBílá);
  141.   GrNastavPozici(mod_GRAFIKA_Z╡HLAV╓_X,mod_GRAFIKA_Z╡HLAV╓_Y);
  142.   GrPiτⁿet╪zec(AktivníModul->DlouhéJméno);
  143.   GrKresliLinku(mod_GRAFIKA_Z╡HLAV╓_PODTRªEN╓_X1,mod_GRAFIKA_Z╡HLAV╓_PODTRªEN╓_Y,mod_GRAFIKA_Z╡HLAV╓_PODTRªEN╓_X2,mod_GRAFIKA_Z╡HLAV╓_PODTRªEN╓_Y);
  144.   GrNastavBarvy(Pal¼erná<<4|PalBílá);
  145.   // inicializace v∞stupu Pokyn
  146.   GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN | GrV∞stupUºivatelsk∞Nastavení, mod_GRAFIKA_VφSTUP_POKYN_X1, mod_GRAFIKA_VφSTUP_POKYN_Y1, mod_GRAFIKA_VφSTUP_POKYN_X2, mod_GRAFIKA_VφSTUP_POKYN_Y2);
  147.   GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  148.   GrNastavBarvy(PalTmav╪µedá<<4|Palªlutá);
  149.   GrNastavText(GrTextBezPozadí);
  150.   // inicializace v∞stupu Moje plocha
  151.   GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA | GrV∞stupUºivatelsk∞Nastavení, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X2, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y2);
  152.   GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  153.   GrNastavBarvy(PalBéºová<<4|PalBílá);
  154.   GrSmaºOkno();
  155.   GrNastavText(GrTextBezPozadí);
  156.   // nastavení v∞stupu Moje plocha jako aktivního p²i ukonƒení funkce
  157.   GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  158.   }
  159.  
  160. void mod_Ukli╘Grafiku(void) {
  161.   // nastavení grafického módu, pokud byl aktivní mód textov∞
  162.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) GrNastavMód(GrMódVGA);
  163.   }
  164.  
  165. void mod_VypiτHláτku(string mod_TextHláτky, int mod_¼ekání) {
  166.   // zobrazení hláτky do textového okénka naho²e
  167.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  168.     if(TxtPoziceY() != 0) TxtPiτNov∞ⁿádek();
  169.     TxtPiτⁿet╪zec(mod_TextHláτky);
  170.     TxtPiτNov∞ⁿádek();
  171.     }
  172.   else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  173.     int mod_PàvodníV∞stup = GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  174.     GrSmaºOkno();
  175.     GrNastavPozici(0,0);
  176.     GrPiτⁿet╪zec(mod_TextHláτky);
  177.     GrNastavV∞stup(mod_PàvodníV∞stup);
  178.     }
  179.   switch(mod_¼ekání) {
  180.     case mod_VYPIµHL╡µKU_NE¼EKEJ:
  181.       break;
  182.     case mod_VYPIµHL╡µKU_VY¼KEJ:
  183.       if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) ¼ekej(2000);
  184.       break;
  185.     case mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESU:
  186.       ¼ekejNaKlávesu();
  187.       break;
  188.     case mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESUGRAFIKA:
  189.       if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) ¼ekejNaKlávesu();
  190.       break;
  191.     }
  192.   }
  193.  
  194. int mod_VolbaReºimuObrazovky(void) { // volba grafického / textového reºimu
  195.   mod_InicializujGrafiku();
  196.   // zobrazení loga problému
  197.   NastavJménoBankyP²edm╪tà("*\\backtraq");
  198.   GrKresliP²edm╪ty(1,1,145,50,9,3);
  199.   NastavJménoBankyP²edm╪tà("*\\backtraq.mod\\"+AktivníModul->KrátkéJméno);
  200.   GrKresliP²edm╪ty(1,1,145,50,9,3);
  201.   // zobrazení popisu problému
  202.   GrNastavBarvuPop²edí(Pal¼erná);
  203.   GrPiτⁿet╪zecWordWrap(AktivníModul->Popis, 20, 50+3*29+30, GrMaxX()-20, GrMaxY()-10, 1);
  204.   // volba reºimu obrazovky
  205.   mod_ReºimObrazovky = mod_GRAFICKφ_REªIM;
  206.   mod_VypiτHláτku("Stiskn╪te T pro ²eτení v textovém reºimu, cokoliv jiného pro grafick∞ reºim...", mod_VYPIµHL╡µKU_NE¼EKEJ);
  207.   ¼tiKlávesuZFrontyS¼ekáním();
  208.   if(gKlávesa == KlEsc) return 0;
  209.   if(StrNaVelká((string)(char)gKlávesa) == "T") mod_ReºimObrazovky = mod_TEXTOVφ_REªIM;
  210.   else mod_ReºimObrazovky = mod_GRAFICKφ_REªIM;
  211.   return 1;
  212.   }
  213.  
  214. int mod_NechZvolit(string mod_Otázka) {
  215.   // nechá uºivatele zvolit jednu z nabízen∞ch moºností
  216.   int mod_Volba, mod_Zvoleno = -1;
  217.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  218.     mod_VypiτHláτku(mod_Otázka, mod_VYPIµHL╡µKU_NE¼EKEJ);
  219.     for(mod_Volba=0; mod_Volba<2; mod_Volba++) {
  220.       TxtPiτⁿet╪zec("["+mod_NechZvolit_AccessKeys[mod_Volba]+"] "+mod_NechZvolit_Volby[mod_Volba]+"\n");
  221.       }
  222.     do{
  223.       ¼tiKlávesuS¼ekáním();
  224.       gKlávesa = czchrlwr(gKlávesa);
  225.       for(mod_Volba=0; mod_Volba<2; mod_Volba++) {
  226.         if(gKlávesa == mod_NechZvolit_AccessKeys[mod_Volba]) mod_Zvoleno = mod_Volba;
  227.         }
  228.       if(mod_Zvoleno == -1) { Tón(1000); ¼ekej(200); VypniTón(); }
  229.       }while(mod_Zvoleno == -1);
  230.     }
  231.   else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  232.     mod_VypiτHláτku("Vyberte pomocí myτi jednu z nabízen∞ch moºností.", mod_VYPIµHL╡µKU_NE¼EKEJ);
  233.     int mod_PàvodníBarvy = GrBarvy();
  234.     NastavJménoBankyP²edm╪tà("*\\backtraq");
  235.     GrSmaºOkno();
  236.     GrNastavBarvuPop²edí(Pal¼erná);
  237.     GrNastavPozici(636/2-StrDélka(mod_Otázka)*8/2, 140);
  238.     GrPiτⁿet╪zec(mod_Otázka);
  239.     int mod_Vypisovan∞Znak, mod_VypsánaAccessKey;
  240.     for(mod_Volba=0; mod_Volba<2; mod_Volba++) {
  241.       GrNastavPozici(636/2-4*39/2, 140+30+(29+15)*mod_Volba);
  242.       GrKresliP²edm╪ty(12,1,GrPoziceX(),GrPoziceY(),4,1);
  243.       GrNastavPoziciRel((4*39-StrDélka(mod_NechZvolit_Volby[mod_Volba])*8)/2, 10); // vyst²ed╪ní textu
  244.       mod_VypsánaAccessKey = 0;
  245.       for(mod_Vypisovan∞Znak=0; mod_Vypisovan∞Znak<StrDélka(mod_NechZvolit_Volby[mod_Volba]); mod_Vypisovan∞Znak++) {
  246.         if(!mod_VypsánaAccessKey && mod_NechZvolit_Volby[mod_Volba][mod_Vypisovan∞Znak] == mod_NechZvolit_AccessKeys[mod_Volba]) {
  247.           // vypisované písmeno je access key
  248.           GrNastavBarvuPop²edí(Pal¼ervená);
  249.           mod_VypsánaAccessKey = 1;
  250.           }
  251.         else {
  252.           // vypisované písmeno je normální písmeno
  253.           GrNastavBarvuPop²edí(Pal¼erná);
  254.           }
  255.         GrPiτZnak(mod_NechZvolit_Volby[mod_Volba][mod_Vypisovan∞Znak]);
  256.         }
  257.       }
  258.     MyτZapni();
  259.     MyτNastavGrKurzor(25);
  260.     MyτNastavPozici(mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1+636/2, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1+140+30+29/2);
  261.     MyτVyprázdniFrontuUdálostí();
  262.     MyτZobrazKurzor();
  263.     do{
  264.       do{
  265.         Myτ¼tiUdálost(gMyτUdálost);
  266.         }while(gMyτUdálost.Typ != MyτUdálostLevéTlNahoru && !BylaStisknutaKlávesa());
  267.       if(gMyτUdálost.Typ == MyτUdálostLevéTlNahoru) {
  268.         gMyτUdálost.X -= mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1;
  269.         gMyτUdálost.Y -= mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1;
  270.         if(abs(636/2-gMyτUdálost.X) <= 4*39/2) {
  271.           if(gMyτUdálost.Y >= 140+30 && gMyτUdálost.Y <= 140+30+2*29+(2-1)*15) {
  272.             if((gMyτUdálost.Y-(140+30))%(29+15) <= 28) mod_Zvoleno = integer(gMyτUdálost.Y-(140+30))/(29+15);
  273.             }
  274.           }
  275.         }
  276.       else if(BylaStisknutaKlávesa()) {
  277.         ¼tiKlávesuZFronty();
  278.         gKlávesa = czchrlwr(gKlávesa);
  279.         for(mod_Volba=0; mod_Volba<2; mod_Volba++) {
  280.           if(gKlávesa == mod_NechZvolit_AccessKeys[mod_Volba]) mod_Zvoleno = mod_Volba;
  281.           }
  282.         }
  283.       }while(mod_Zvoleno == -1);
  284.     MyτSchovejKurzor();
  285.     MyτVypni();
  286.     GrSmaºOkno();
  287.     NastavJménoBankyP²edm╪tà("*\\backtraq.mod\\"+AktivníModul->KrátkéJméno);
  288.     GrNastavBarvy(mod_PàvodníBarvy);
  289.     }
  290.   return mod_Zvoleno;
  291.   }
  292.  
  293. void mod_ProtokolZapiτStart1(void) {
  294.   mod_ZapisovatProtokol_Soubor = SouborOtev²i(mod_ZapisovatProtokol_Název, SouborP²ístupZápis|SouborP²ístupTextov∞);
  295.   SouborU²ízni(mod_ZapisovatProtokol_Soubor);
  296.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Protokol o v∞poƒtu provedeném programem Backtraq (C) 2001-2002 Marek Blahuτ\n");
  297.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "---------------------------------------------------------------------------\n");
  298.   TypDatum mod_Datum;
  299.   SystémovéDatum(mod_Datum);
  300.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "V∞poƒet proveden: " +StrL¼ísloZeroPad(mod_Datum.Den,2)+"."+StrL¼ísloZeroPad(mod_Datum.M╪síc,2)+"."+StrL¼ísloZeroPad(mod_Datum.Rok,4)+"\n");
  301.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Pouºit∞ modul: " + AktivníModul->KrátkéJméno + " (" + AktivníModul->DlouhéJméno + ")\n");
  302.   SouborPiτNov∞ⁿádek(mod_ZapisovatProtokol_Soubor);
  303.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Parametry v∞poƒtu:\n");
  304.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "------------------\n");
  305.   }
  306.  
  307. void mod_ProtokolZapiτStart2(void) {
  308.   SouborPiτNov∞ⁿádek(mod_ZapisovatProtokol_Soubor);
  309.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Pràb╪h v∞poƒtu:\n");
  310.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "---------------\n");
  311.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Start: "+StrL¼ísloZeroPad(mod_¼asStart.Hodiny,2)+":"+StrL¼ísloZeroPad(mod_¼asStart.Minuty,2)+":"+StrL¼ísloZeroPad(mod_¼asStart.Sekundy,2)+"."+StrL¼ísloZeroPad(mod_¼asStart.Setiny,2)+"\n");
  312.   }
  313.  
  314. void mod_ProtokolZapiτHotovo(void) {
  315.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "---------------\n");
  316.   SouborPiτNov∞ⁿádek(mod_ZapisovatProtokol_Soubor);
  317.   SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Konec souboru.\n");
  318.   SouborZav²i(mod_ZapisovatProtokol_Soubor);
  319.   }
  320.  
  321. void mod_V∞poƒetDobyTrváníV∞poƒtu(void) {
  322.   long mod_¼asRozdílSS = ¼asRozdíl(mod_¼asHotovo, mod_¼asStart);
  323.   mod_¼asRozdíl.Setiny = mod_¼asRozdílSS%100;
  324.   mod_¼asRozdílSS = integer(mod_¼asRozdílSS/100);
  325.   mod_¼asRozdíl.Sekundy = mod_¼asRozdílSS%60;
  326.   mod_¼asRozdílSS = integer(mod_¼asRozdílSS/60);
  327.   mod_¼asRozdíl.Minuty = mod_¼asRozdílSS%60;
  328.   mod_¼asRozdílSS = integer(mod_¼asRozdílSS/60);
  329.   mod_¼asRozdíl.Hodiny = mod_¼asRozdílSS%24;
  330.   mod_¼asRozdílSS = integer(mod_¼asRozdílSS/24);
  331.   }
  332.