home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / delphi / kompon / d123456 / STR_BIT.ZIP / 16 / LINPR / LINPR.PAS < prev    next >
Pascal/Delphi Source File  |  2000-03-29  |  15KB  |  425 lines

  1. program LinPreob;
  2. {$F+,S-,E+,V-}
  3. uses
  4.   Dos, StrBit16, HelpFile, LinPr_h, Menus, Pastools,
  5.   Objects,dialogs, Drivers, Views, StdDlg, MsgBox, App, Memory, Editors;
  6. const
  7.   WildCard : PathStr = '*.*';
  8.   Imq_prog : PathStr =
  9.    'Åp«úpá¼¼á óδ»«½¡Ñ¡¿∩ ½¿¡Ñ⌐¡δσ »αÑ«íαẫóá¡¿⌐ ñó«¿τ¡«ú« »«Γ«¬á';
  10.   HeapSize = 96 * (1024 div 16);
  11.   Max_Razm_Bit = 720;
  12.   Max_razm_Byte = 90;
  13. type
  14.   TTVMy = object(TApplication)
  15.     constructor Init;
  16.     procedure InitStatusLine; Virtual;
  17.     procedure GetEvent(var Event: TEvent); Virtual;
  18.     function  GetPalette: PPalette; Virtual;
  19.     end;
  20.   PinpMay = ^TinpMay;
  21.   TinpMay = object(TInputLine)
  22.     procedure HandleEvent(var Event:TEvent); Virtual;
  23.   end;
  24.   PinpZn = ^TinpZn;
  25.   TinpZn = object(TInputLine)
  26.     procedure HandleEvent(var Event:TEvent); Virtual;
  27.   end;
  28.   PinpMayKon = ^TinpMayKon;
  29.   TinpMayKon = object(TInputLine)
  30.     procedure HandleEvent(var Event:TEvent); Virtual;
  31.   end;
  32.   PMatrix = ^TMatrix;
  33.   TMatrix = array[1..Max_Razm_Bit,1..Max_razm_Byte] of Byte;
  34.  
  35. var
  36.   Xod_vyp : PRunningLine;
  37.   R : TRect;
  38.   P: PView;
  39.   D: PFileDialog;  InWin : PDialog;
  40.   T : TTVMy;
  41.   Im_prot,
  42.   IM_is: PathStr;     { ê¼∩ ¿ßσ«ñ¡«ú« «ípáíáΓδóáѼ«ú« Σá⌐½á  }
  43.   Byte_Razm_matr,
  44.   Razm_matr,   { Paº¼Ñα¡«ßΓ∞ ¼áΓα¿µδ }
  45.   Kol_nul_str, { î¿¡¿¼á½∞¡«Ñ ¬«½-ó« 0 ßΓ᫬ ó óδó«ñ¿¼«⌐ ¡á »ÑτáΓ∞ ¼áΓα¿µÑ}
  46.   Sdvig_Strok, { ü¿Γ«óδ⌐ ßñó¿ú ßΓ᫬¿ »α¿ Σ«α¼¿α«óá¡¿¿ ¼áΓα¿µδ }
  47.   Sdvig_Matr,  { æñó¿ú ¼Ñªñπ ¡áτá½á¼¿ Σ«α¼¿α«óá¡¿∩ ¼áΓα¿µ }
  48.   Rang, i, j, Razm_nul, Skor, Stup, Diag, Stroka, Stolb : integer;
  49.   Bit_nach,           { ì«¼Ñα í¿Γá ¡áτá½á «íαáí«Γ¬¿ ¡á »«Γ«¬Ñ }
  50.   Kol_iter, Bit_tek : Longint;
  51.   ind_osh : word;
  52.   ff: text;          { öá⌐½ ªπα¡á½á ΓѬπΘÑ⌐ αáí«Γδ }
  53.   Im : string[110];  { Åα«¼ÑªπΓ«τ¡á∩ »ÑαѼѡ¡á∩, ¿ß»«½∞ºπÑΓß∩ ñ½∩ «íÑß» F3 }
  54.   Dlina : byte absolute Im;
  55.   is_file: PBitFile; { êßσ«ñ¡δ⌐ í¿Γ«óδ⌐ »«Γ«¬ }
  56.   Matrix : PMatrix;
  57.   ClipWindow: PEditWindow;
  58.   BitMas : array[1..Max_Razm_Bit] of byte;
  59.  
  60. {$L Gauss.obj}
  61. Function Gauss ( m: pointer ; Rstr, N : word) : word;
  62. external;
  63.  
  64. {$L Bybor.obj}
  65. Procedure Bybor(mis,mrez : pointer; Nbis,Hag,kol : word);
  66. external;
  67.  
  68. procedure TinpMayKon.HandleEvent(var Event:TEvent);
  69. var ob_str : PathStr;
  70.     DirInfo: SearchRec;
  71.  procedure Dialog;
  72.   begin
  73.     D := New(PFileDialog, Init(WildCard,'éδíÑp¿ΓÑ ¿¼∩ Σá⌐½á',
  74.            'ê¼∩ Σá⌐½á', fdOpenButton , 100));
  75.       if Desktop^.ExecView(D) <> cmCancel then begin
  76.                D^.GetFileName(ob_str);
  77.                data^ :=ob_str                  end;
  78.       Dispose(D, Done);
  79.       DrawView                end;
  80. begin
  81.   OB_STR := DATA^;
  82.   if (Event.What = evKeyDown)
  83.     and ((Event.KeyCode = kbEnter)OR (Event.KeyCode = kbTab)) then begin
  84.   FindFirst(ob_str, Archive, DirInfo);
  85.   if DosError <> 0 then  dialog
  86.                                                                   end
  87.  ELSE if (Event.What = evKeyDown)  { ¡áªáΓá ¬½áó¿Φá F3 }
  88.     and (Event.KeyCode = kbF3) then dialog
  89.    {       éδípáΓ∞ ¿¼∩ Σá⌐½á ó ñ¿á½«ú«ó«¼ pѪ¿¼Ñ     }
  90.         else TInputLine.HandleEvent(Event);
  91.  end;
  92.  
  93. { çá¼Ñ¡á ßΓá¡ñápΓ¡«ú« pÑñ-pá ßΓp«¬ ¡á óδípá¡¡δ⌐ }
  94. {  éó«ñ »«½∩ ¿¼Ñ¡¿ Σá⌐½á                        }
  95. procedure TInpMay.HandleEvent(var Event:TEvent);
  96. var ob_str : PathStr;
  97. begin
  98.  if (Event.What = evKeyDown)  { ¡áªáΓá ¬½áó¿Φá F3 }
  99.     and (Event.KeyCode = kbF3) then begin
  100.    {       éδípáΓ∞ ¿¼∩ Σá⌐½á ó ñ¿á½«ú«ó«¼ pѪ¿¼Ñ     }
  101.       D := New(PFileDialog, Init(WildCard,'éδíÑp¿ΓÑ ¿¼∩ Σá⌐½á',
  102.            'ê¼∩ Σá⌐½á', fdOpenButton , 100));
  103.       if Desktop^.ExecView(D) <> cmCancel then begin
  104.                D^.GetFileName(ob_str);
  105.                data^ :=ob_str                  end;
  106.       Dispose(D, Done);
  107.       DrawView                end
  108.     else TInputLine.HandleEvent(Event);
  109. end;
  110.  
  111. { çá¼Ñ¡á ßΓá¡ñápΓ¡«ú« pÑñ-pá ßΓp«¬ ¡á óδípá¡¡δ⌐ }
  112. {  éó«ñ »«½∩ τ¿ß½á                              }
  113. procedure TInpZn.HandleEvent(var Event:TEvent);
  114. begin
  115.  if not( (Event.What = evKeyDown) and  { ¡áªáΓá ¬½áó¿Φá }
  116.    (Event.CharCode in [':'..chr(255)]) )
  117.     then  TInputLine.HandleEvent(Event);
  118. end;
  119.  
  120. procedure TTVMy.InitStatusLine;
  121. { çáñá¡¿Ñ ßΓ᫬¿ ßΓáΓπßá }
  122. var
  123.   R: TRect;
  124. begin
  125.   GetExtent(R);
  126.   R.A.Y := R.B.Y - 1;
  127.   StatusLine := New(PStatusLine, Init(R,
  128.     NewStatusDef(0, $FFFF,
  129.       NewStatusKey('~Alt-X~ éδσ«ñ', kbAltX, cmQuit,
  130.       NewStatusKey('~F1~ Å«¼«Θ∞', kbF1, cmHelp,
  131.       NewStatusKey('~F2~ Save', kbF2, cmSave,
  132.       NewStatusKey('~Alt-F3~ Close', kbAltF3, cmClose,
  133.       NewStatusKey('~F5~ Zoom', kbF5, cmZoom, nil))))), nil)));
  134. end;
  135.  
  136. function TTVMy.GetPalette: PPalette;
  137. { Ä»αÑñѽѡ¿Ñ µóÑΓá «¬«¡ }
  138. const
  139.   CNewColor = CAppColor + CHelpColor;
  140.   CNewBlackWhite = CAppBlackWhite + CHelpBlackWhite;
  141.   CNewMonochrome = CAppMonochrome + CHelpMonochrome;
  142.   P: array[apColor..apMonochrome] of string[Length(CNewColor)] =
  143.     (CNewColor, CNewBlackWhite, CNewMonochrome);
  144. begin
  145.   GetPalette := @P[AppPalette];
  146. end;
  147.  
  148. procedure TTVMy.GetEvent(var Event: TEvent);
  149.  { Åα«ß¼«Γα Σá⌐½á »«¼«Θ¿ }
  150. var
  151.   W: PWindow;
  152.   HelpFile: PHelpFile;
  153.   HelpStrm: PDosStream;
  154. const
  155.   HelpInUse: Boolean = False;
  156. begin
  157.   inherited GetEvent(Event);
  158.   if (Event.What = evCommand) and (Event.Command = cmHelp) and
  159.     not HelpInUse then
  160.   begin
  161.     im := ParamStr(0);   Dec(Dlina,4);    im := im + '_h.hlp';
  162.     HelpStrm := New(PDosStream, Init(im, stOpenRead));
  163.     HelpFile := New(PHelpFile, Init(HelpStrm));
  164.     if HelpStrm^.Status <> stOk then  begin
  165.       MessageBox('ìѽ∞º∩ «Γ¬pδΓ∞ Σá⌐½ »«¼«Θ¿', nil,mfOKButton);
  166.       Dispose(HelpFile, Done);        end
  167.                                 else    begin
  168.       HelpInUse := True;
  169.       W := New(PHelpWindow,Init(Helpfile, GetHelpCtx));
  170.       if ValidView(W) <> nil then begin
  171.           ExecView(W);
  172.           Dispose(W, Done);
  173.                                   end;
  174.       HelpInUse := False;      ClearEvent(Event);
  175.     end                                  end;
  176. end;
  177.  
  178. constructor TTVMy.Init;
  179. { Äípáí«Γ¬á ¬«¼á¡ñ¡«⌐ ßΓp«¬¿ »p«úpá¼¼δ            }
  180. { éó«ñ ¡Ññ«ßΓáεΘ¿σ »áαá¼ÑΓα«ó ó ñ¿á½«ú«ó«¼ αѪ¿¼Ñ }
  181.  function Kom_str: Boolean;
  182.  var i, kol,kode : integer;    S, S_vn : PathStr;
  183.      rez : Boolean;
  184.   function Ob_par : integer;
  185.   begin
  186.    Val(S_vn,kol,kode);
  187.    if (Kode <> 0) or (kol < 1) then rez := True;
  188.    Ob_par := kol;
  189.   end;     {Ob_par}
  190. begin
  191.   rez := False;
  192.   for I := 1 to ParamCount do
  193.   begin
  194.     S := ParamStr(I);
  195.     if S[1] = '/' then begin
  196.         S_vn := Copy(S,3,length(S)-2);
  197.         case UpCase(S[2]) of
  198.       'i','I': Im_is := S_vn;
  199.       'j','J': Im_prot := S_vn;
  200.       'n','N': begin Val(S_vn,Bit_nach,kode);
  201.                      if Kode <> 0 then rez := True        end;
  202.       'r','R': Razm_matr := Ob_par;
  203.       'v','V': Kol_nul_str := Ob_par;
  204.       'm','M': Sdvig_Strok := Ob_par;
  205.       's','S': Sdvig_Matr := Ob_par;
  206.          else  rez := True
  207.          end       end
  208.                    else  rez := True
  209.    end;
  210.   if rez then  MessageBox('HÑ»páó¿½∞¡« ºáñá¡á ¬«¼á¡ñ¡á∩ ßΓp«¬á ',
  211.                                  NIL, mfOKButton);
  212.   Kom_str := rez;
  213. end;        {Kom_Str}
  214.  
  215. function kontr : boolean;
  216. { Åα«óÑα¬á ¡á½¿τ¿∩ óδíαá¡¡δσ Σá⌐½«ó ¡á ñ¿ß¬Ñ ¿ »αáó¿½∞¡«ßΓ¿ ºáñá¡¿∩ º¡áτÑ¡ }
  217.  var Pravil : boolean;
  218.      DirInfo: SearchRec;
  219. begin
  220.   Pravil := False;
  221.   FindFirst(im_is, Archive, DirInfo);
  222.   if DosError <> 0 then Pravil := True;
  223.   if (Kol_nul_str + 4) > Razm_matr then Pravil := True;
  224.   if Razm_matr < 8 then Pravil := True;
  225.   if Razm_matr >720 then Pravil := True;
  226.   kontr := Pravil;
  227. end;
  228. {********************************************************}
  229. { Äß¡«ó¡«Ñ Γѽ« »p«úpá¼¼δ ß »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ε ñÑ⌐ßΓó¿⌐ }
  230. const lst = 79;
  231. type  Datatyp = record
  232.       m_is : string[lst];
  233.       m_Razm_matr : string[5];
  234.       m_Kol_nul_str : String[5];
  235.       m_Sdvig_Strok : String[5];
  236.       m_Sdvig_Matr : string[5];
  237.       m_Bit_nach : String[10];
  238.       m_prot : string;
  239.      end;
  240. var Data : Datatyp;   Bm_is : PinpMayKon;
  241.     Bm_prot: PinpMay;
  242.     Bm_Razm_matr, Bm_Kol_nul_str, Bm_Sdvig_Strok, Bm_Sdvig_Matr,
  243.      Bm_Bit_nach : PinpZn;
  244.     kod,kont : integer;
  245.  { ÄíÑß»ÑτÑ¡¿Ñ ¿ß»«½∞º«óá¡¿∩ TURBO VISION 2.0 }
  246. begin
  247.   MaxHeapSize := HeapSize;
  248.   inherited Init;
  249.   RegisterObjects;
  250.   RegisterViews;
  251.   RegisterMenus;
  252.   RegisterDialogs;
  253.   RegisterApp;
  254.   RegisterHelpFile;
  255.  { ÅαÑñóáα¿Γѽ∞¡«Ñ ºáñá¡¿Ñ ¡áτá½∞¡δσ º¡áτÑ¡¿⌐ »ÑαѼѡ¡δσ }
  256.   im_prot := 'protokol.txt';  im_is := '';
  257.   Razm_matr := 50;   { Paº¼Ñα¡«ßΓ∞ ¼áΓα¿µδ }
  258.   Kol_nul_str := 5; { î¿¡¿¼á½∞¡«Ñ ¬«½-ó« 0 ßΓ᫬ ó óδó«ñ¿¼«⌐ ¡á »ÑτáΓ∞ ¼áΓα¿µÑ}
  259.   Sdvig_Strok := 1; { ü¿Γ«óδ⌐ ßñó¿ú ßΓ᫬¿ »α¿ Σ«α¼¿α«óá¡¿¿ ¼áΓα¿µδ }
  260.   Sdvig_Matr:= 2000;{ æñó¿ú ¼Ñªñπ ¡áτá½á¼¿ Σ«α¼¿α«óá¡¿∩ ¼áΓα¿µ }
  261.   Bit_nach :=0; { ì«¼Ñα í¿Γá ¡áτá½á «íαáí«Γ¬¿ ¡á »«Γ«¬Ñ }
  262.   Kont := 0;
  263.   R.Assign(5,0,75,8);   { éδó«ñ ß««íΘÑ¡¿∩ « ¡áº¡áτÑ¡¿¿ »p«úpá¼¼δ }
  264.   if MessageBoxRect(R, #3+Imq_prog,NIL,
  265.        mfOKButton +  mfCancelButton) = cmCancel then halt(256-5);
  266.   if Kom_Str then halt(256-1);
  267. while (kontr  or (Im_is ='')) and (kont <> CmCancel) do
  268.         begin  { éóÑßΓ¿ »ápá¼ÑΓpδ ¡Ñ ºáñá¡¡δѠ󠬫¼á¡ñ¡«⌐ ßΓp«¬Ñ }
  269.   Data.m_is := im_is;
  270.   Data.m_prot := im_prot;
  271.   Str ( Sdvig_Matr, Data.m_Sdvig_Matr);
  272.   Str ( Razm_matr, Data.m_Razm_matr);
  273.   Str ( Kol_nul_str, Data.m_Kol_nul_str);
  274.   Str ( Bit_nach, Data.m_Bit_nach);
  275.   STR ( Sdvig_Strok, Data.m_Sdvig_Strok);
  276.   R.Assign(0,2,80,20);
  277.   InWin := New(Pdialog,init(R,'ìáßΓp«⌐¬á »ápá¼ÑΓp«ó »p«úpá¼¼δ'));
  278.   With InWin^ do begin  { ö«p¼¿p«óá¡¿Ñ «¬¡á ºá»p«ßá }
  279.    R.Assign(22,1,77,2);
  280.    Bm_is := New(PinpMayKon,Init(R,lst));
  281.    insert (Bm_is);
  282.    R.Assign(1,1,17,2);
  283.    insert (New(Plabel,Init(R,'êßσ«ñ¡δ⌐ Σá⌐½', Bm_is)));
  284.    R.Assign(22,3,28,4);
  285.    Bm_Razm_matr := New(PinpZn,Init(R,5));
  286.    insert (Bm_Razm_matr);
  287.    R.Assign(1,3,20,4);
  288.    insert (New(Plabel,Init(R,'Éá¼Ñα¡«ßΓ∞ ¼áΓα¿µδ', Bm_Razm_matr)));
  289.    R.Assign(70,3,77,4);
  290.    Bm_Kol_nul_str := New(PinpZn,Init(R,5));
  291.    insert (Bm_Kol_nul_str);
  292.    R.Assign(41,3,68,4);
  293.    insert (New(Plabel,Init(R,'諽¿τÑßΓó« ¡π½Ñóδσ ßΓ᫬', Bm_Kol_nul_str)));
  294.    R.Assign(49,5,56,6);
  295.    Bm_Sdvig_Strok := New(PinpZn,Init(R,5));
  296.    insert (Bm_Sdvig_Strok);     { Å«½Ñ ä½¿¡δ æè }
  297.    R.Assign(1,5,48,6);
  298.    insert (New(Plabel,Init(R,'ü¿Γ«óδ⌐ ßñó¿ú ßΓ᫬¿ »α¿ Σ«α¼¿α«óá¡¿¿ ¼áΓα¿µδ', Bm_Sdvig_Strok)));
  299.    R.Assign(49,7,56,8);
  300.    Bm_Sdvig_Matr := New(PinpZn,Init(R,5));
  301.    insert (Bm_Sdvig_Matr);     { Å«½Ñ ¿¼Ñ¡¿ }
  302.    R.Assign(1,7,48,8);
  303.    insert (New(Plabel,Init(R,'æñó¿ú ¼Ñªñπ ¡áτá½á¼¿ Σ«α¼¿α«óá¡¿∩ ¼áΓα¿µ', Bm_Sdvig_Matr)));
  304.    R.Assign(44,9,56,10);
  305.    Bm_Bit_nach := New(PinpZn,Init(R,10));
  306.    insert (Bm_Bit_nach);     { Å«½Ñ ¿¼Ñ¡¿ }
  307.    R.Assign(1,9,40,10);
  308.    insert (New(Plabel,Init(R,'쫼Ñα í¿Γá ¡áτá½á «íαáí«Γ¬¿ ¡á »«Γ«¬Ñ', Bm_Bit_nach)));
  309.    R.Assign(22,11,77,12);
  310.    Bm_prot := New(PinpMay,Init(R,lst));
  311.    insert (Bm_prot);     { Å«½Ñ Σá⌐½á ß««íΘÑ¡¿⌐ }
  312.    R.Assign(1,11,17,12);
  313.    insert (New(Plabel,Init(R,'åπp¡á½ páí«Γδ', Bm_prot)));
  314.    { éßΓáó¿Γ∞ ñóÑ ¬«¼á¡ñ¡δÑ ¬¡«»¬¿ }
  315.    R.Assign(4,13,35,15);
  316.    insert (New(PButton,
  317.      Init(R,'Åápá¼ÑΓpδ ºáñá¡δ »páó¿½∞¡«',cmOk,bfDefault)));
  318.    R.Assign(42,13,76,15);
  319.    insert (New(PButton,
  320.      Init(R,'çáóÑpΦ¿Γ∞ óδ»«½¡Ñ¡¿Ñ »p«úpá¼¼δ',cmCancel,bfNormal)));
  321.    R.Assign(1,16,78,17);
  322.    insert (New(PStaticText,
  323.      Init(R,#3+'~F3~ óδípáΓ∞ Σá⌐½ ¿º ßπΘÑßΓóπεΘ¿σ')));
  324.      SelectNext(False);     { Ç¬Γ¿ó¿º¿p«óáΓ∞ »Ñpóπε ¬¡«»¬π }
  325.   end;      { ¬«¡Ñµ Σ-∩ «¬¡á }
  326.    InWin^.SetData(Data);     { éδ»«½¡Ñ¡¿Ñ óó«ñá ¿ßσ«ñ¡δσ »ápá¼ÑΓp«ó }
  327.    Kont := DeskTop^.ExecView(InWin);
  328.    Im_is := Bm_is^.data^;
  329.    im_prot := Bm_prot^.data^;
  330.    Val(Bm_Sdvig_Matr^.Data^, Sdvig_Matr, kod);
  331.    Val(Bm_Kol_nul_str^.Data^, Kol_nul_str, kod);
  332.    Val(Bm_Sdvig_Strok^.Data^, Sdvig_Strok, kod);
  333.    Val(Bm_Bit_nach^.Data^, Bit_nach, kod);
  334.    Val(Bm_Razm_matr^.Data^, Razm_matr, kod);
  335.    Dispose(InWin, Done);
  336.                             end;
  337.   If Kont = CmCancel then begin
  338.     T.Done; halt(256-5)   end;
  339.   assign (ff,im_prot);
  340. {$I-}
  341.   Append(ff);
  342. {$I+}
  343.   if IOResult <> 0 then Rewrite(ff);
  344.   Writeln(Ff,'');
  345.   Writeln(Ff,Imq_prog);
  346.   Writeln(Ff,'ÄíαáíáΓδóáÑΓß∩ Σá⌐½ ',Im_is);
  347.   Writeln(Ff,'쫼Ñα í¿Γá ¡áτá½á «íαáí«Γ¬¿ ¡á »«Γ«¬Ñ = ',Bit_nach);
  348.   Writeln(Ff,'PẼÑα¡«ßΓ∞ ¼áΓα¿µδ = ',Razm_matr);
  349.   Writeln(Ff,'î¿¡¿¼á½∞¡«Ñ ¬«½-ó« 0 ßΓ᫬ ó óδó«ñ¿¼«⌐ ¡á »ÑτáΓ∞ ¼áΓα¿µÑ = ',Kol_nul_str);
  350.   Writeln(Ff,'ü¿Γ«óδ⌐ ßñó¿ú ßΓ᫬¿ »α¿ Σ«α¼¿α«óá¡¿¿ ¼áΓα¿µδ = ',Sdvig_Strok);
  351.   Writeln(Ff,'æñó¿ú ¼Ñªñπ ¡áτá½á¼¿ Σ«α¼¿α«óá¡¿∩ ¼áΓα¿µ = ',Sdvig_Matr);
  352. {*********************************************************}
  353. {*           Äíαáí«Γ¬á ºáñá¡¡δσ Σá⌐½«ó                   *}
  354. {*********************************************************}
  355.             { ê¡¿µ¿á½¿ºáµ¿∩ í¿Γ«óδσ »ÑαѼѡ¡δσ }
  356.   Kol_iter := 0;     Skor := 10000 div Razm_matr +1;
  357.   Byte_Razm_matr := ( Razm_matr + 7 ) div 8;
  358.   Razm_nul :=  Razm_matr - Kol_nul_str;
  359.   GetMem(Matrix, (Max_razm_Byte*Max_Razm_Bit));
  360.  
  361.   is_file := New(PBitFile,Init(Max_Razm_Bit,4096));
  362.   if is_file^.OpenBitFile(im_is,btOpenRead) <> btOk Then Exit;
  363.   New(Xod_vyp,Init('Äíαáí«Γ¬á Σá⌐½á',
  364.                     is_file^.SizeOfFile,rlFullInf));
  365.   {****** éδ»«½¡Ñ¡¿Ñ óδτ¿ß½Ñ¡¿⌐ ¿ ¡á¬«»½Ñ¡¿Ñ αѺπ½∞ΓáΓ«ó ******}
  366.  repeat
  367.    inc(Kol_iter);
  368.    if (Kol_iter mod Skor) =  0 then Xod_vyp^.StatusDisplay( Bit_nach );
  369.    Bit_tek := Bit_nach;
  370.     for i := 1 to Razm_matr do begin { Σ«α¼¿α«óá¡¿Ñ ¼áΓα¿µδ }
  371.      is_file^.SeekStr(Bit_tek);
  372.      ind_osh := is_file^.ReadStr(Razm_matr);
  373.      is_file^.Val_Array ( Matrix^[i,1], Byte_Razm_matr );
  374.      inc(Bit_tek, Sdvig_Strok)
  375.                               end;
  376.    Rang := Gauss(Matrix,Max_razm_Byte,Razm_matr);
  377.    if (Rang <= Razm_nul) and (ind_osh = btOk) then
  378.     begin { éδó«ñ αѺπ½∞ΓáΓ«ó }
  379.     Writeln(ff,'îáΓα¿µá αá¡úá ',Rang,' ¡áτ¿¡áÑΓß∩ ß í¿Γá ', Bit_nach);
  380.       {Éáºí«α »«½πτÑ¡¡«⌐ ¼áΓα¿µδ (ñ½∩ »ÑτáΓ¿)}
  381.     Stup := 0;     Diag := 0;
  382.     Stroka := 1;   Stolb := 0;
  383.      while Stolb < Razm_matr do begin  {µ¿¬½ »« ßΓ᫬á¼}
  384.        if RBit(@Matrix^[Stroka,1],Stolb) = 0
  385.         then begin
  386.          Writeln(ff,Stup:6,Diag:8,Stroka:8);
  387.          Stup := 0;     Diag := 0;
  388.          while (Stolb < Razm_matr) and
  389.                  (RBit(@Matrix^[Stroka,1],Stolb) = 0) do
  390.           begin {µ¿¬½ »« ßΓ«½íµá¼}
  391.            inc(Stup);
  392.            Write(ff,STUP:2,' ');
  393.            Bybor(Matrix,@BitMas, Stolb, Max_Razm_Bit, Stroka);
  394.            for j := 1 to Stroka do
  395.              if (j mod 100) = 0 then begin
  396.                 write(ff,BitMas[j]); Writeln(ff,''); write(ff,'  *');
  397.                                      end
  398.                                 else write(ff,BitMas[j]);
  399.            inc(Stolb);        Writeln(ff,'');
  400.           end;  {µ¿¬½á »« ßΓ«½íµá¼}
  401.         end;
  402.        inc(Diag);   inc(Stolb);  inc(Stroka);
  403.                             end; { µ¿¬½á »« ßΓα«¬á¼ }
  404.     end;
  405.    inc(Bit_nach,Sdvig_Matr);
  406.  until (ind_osh <> btOk);
  407.   Writeln(ff,'Äíαáí«Γá¡« ', Kol_iter, ' ¼áΓα¿µ');
  408.   Dispose(Xod_vyp,Done);
  409.   is_file^.CloseBitFile;
  410.   Dispose(is_file,Done);
  411.   FreeMem(Matrix, (Max_razm_Byte*Max_Razm_Bit));
  412.   Close(ff);
  413.   DeskTop^.GetExtent(R);
  414.   P := Application^.ValidView(New(PEditWindow,
  415.     Init(R, im_prot, wnNoNumber)));
  416.   DeskTop^.Insert(P);
  417.   ClipWindow := PEditWindow(P);
  418. end;
  419.  
  420. begin
  421.   T.init;
  422.   T.Run;
  423.   T.Done;
  424. end.
  425.