(* DESK_FMS использует: MENU_FMS *)
(* TYPE_FMS *)
{$A+,B-,D-,E+,F-,G-,I+,L+,N-,O-,R+,S+,V+,X-}
{$M 16384,0,65536}
Unit DESK_FMS;
INTERFACE
Uses MENU_FMS, TYPE_FMS;
VAR FirstWork : integer; { - первый рабочий элемент }
mLastWork : integer; { Kall-mLastWork - последний рабочий элемент }
FIS : array [1..2] of integer; { Селектор строки }
{ FIS[1] = 0 | номер в BDS }
{ FIS[2] = 0 | номер в BDS - второго уровня }
CKEY : String; { Для хранения значений ключевых полей }
LaLa : String[80]; { Последняя, 25-я строка редактора- Меню функций }
procedure WherElt(E : integer; var F,D : integer);
procedure HOPMA(O : pMenuRec);
procedure SearCurs(O : pMenuRec);
IMPLEMENTATION
procedure HOPMA(O : pMenuRec);
begin with O^ do begin
if (Curs = 1) and (0 < Base) then begin
Inc(Curs);
Dec(Base);
Exit
end;
if (Curs = Kscr) and (Base+Curs < Kall) then begin
Dec(Curs);
Inc(Base)
end
end end;
procedure WherElt(E : integer; var F,D : integer);
var I,J,L : integer;
begin L:=0;
F:=1;
D:=1;
with MEAD^ do
for I:=1 to HSF do
for J:=1 to BDS[I].CR_FRX do begin
L:=L+1;
if TSTMAP(L) then begin
E:=E-1;
if E = 0 then begin
F:=I;
D:=J;
Exit
end
end
end end;
function KOMMEHTA(E : integer) : boolean;
var F,N : integer;
begin WherElt(E,F,N);
KOMMEHTA:=(MEAD^.BDS[F].DTL = NIL) end;
procedure SearCurs(O : pMenuRec);
var I : integer;
function Lucru(C : integer) : boolean;
begin Lucru:=false;
if C < 1 then Exit;
if O^.OnScr < C then Exit;
if KOMMEHTA(O^.Base+C) then Exit;
Lucru:=true;
O^.Curs:=C;
HOPMA(O)
end;
begin with O^ do begin
if not KOMMEHTA(Base+Curs) then Exit;
for I:=1 to Kscr-1 do begin
if Lucru(Curs-I) then Exit;
if Lucru(Curs+I) then Exit
end
end end;
end.
|