Xpacket/XPHELP.PAS

640 lines
17 KiB
Plaintext
Raw Normal View History

2019-05-15 00:31:19 +02:00
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
<20> <20>
<20> X - P a c k e t <20>
<20> <20>
<20> <20>
<20> X P H E L P . P A S <20>
<20> <20>
<20> Routinen f<>r die Hilfe durch ALT-H aus TOP <20>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
Procedure Hlp_Laden (* Istr : Str6 *);
Var Nstr : String[6];
Hstr : String[HlpRec];
Result : Word;
Flag,
Find : Boolean;
Begin
FillChar(Hlp^,SizeOf(Hlp^),0);
Hlp_Anz := 0;
Flag := false;
KillEndBlanks(Istr);
Assign(G^.BFile,Konfig.TempVerz + THlpDatei);
if ResetBin(G^.BFile,HlpRec) = 0 then
begin
Hlp_ZlnNr := str_int(Istr);
if Hlp_ZlnNr > 0 then
begin
dec(Hlp_ZlnNr);
Seek(G^.BFile,Hlp_ZlnNr);
Repeat
BlockRead(G^.BFile,Hstr[1],1,Result);
Hstr[0] := Chr(HlpRec);
Flag := LZ = copy(Hstr,1,1);
if not Flag then
begin
inc(Hlp_Anz);
Nstr := copy(Hstr,1,6);
KillEndBlanks(Nstr);
if Nstr > '' then
begin
Hlp^[Hlp_Anz].ID := Nstr;
Hlp^[Hlp_Anz].Attr := Attrib[31];
end else Hlp^[Hlp_Anz].Attr := Attrib[2];
Hlp^[Hlp_Anz].Sp7 := Hstr[7];
delete(Hstr,1,7);
Hlp^[Hlp_Anz].Entry := Hstr;
end;
Until Flag or (Hlp_Anz >= maxHelpZln) or Eof(G^.BFile);
end;
FiResult := CloseBin(G^.BFile);
end;
End;
Procedure XP_Help (* IDstr : Str6 *);
Const Bofs = 1;
Kl = '[ ]';
Type AnwTyp = Record
IDk : String[6];
Dmp : Integer;
Bmp : Byte;
End;
Var i,i1,i2,
xc,yc,
Klpos,
Bpos,
yM,aM,
Zmax : Byte;
show2 : byte;
Dpos : Integer;
w : Word;
Flag,
CurSh,
CurFlag,
Fertig : Boolean;
Vstr : String[6];
Hstr : String[80];
Save_Name : String[60];
Such : String[80];
KC : Sondertaste;
VC : Char;
Result : Word;
OldBild : ^BildPtr;
HlpAnw : Array [1..maxHlpAnw] of AnwTyp;
HlpAnwPtr : Byte;
Procedure StepHlpAnw (AnId : Str6; Dpar : Integer; Bpar : Byte);
Var i : Byte;
Flag : Boolean;
Begin
Flag := false;
i := 0;
While not Flag and (i < maxHlpAnw) do
begin
inc(i);
if HlpAnw[i].IDk = AnId then
begin
Flag := true;
move(HlpAnw[1],HlpAnw[i],SizeOf(HlpAnw[1]));
end;
end;
if not Flag then move(HlpAnw[1],HlpAnw[2],SizeOf(HlpAnw[1])*(maxHlpAnw-1));
HlpAnw[1].IDk := AnId;
HlpAnw[1].Dmp := Dpar;
HlpAnw[1].Bmp := Bpar;
End;
Procedure HlpPage(beg : Word);
Var i,i1 : Byte;
Begin
Teil_Bild_Loesch(2,maxZ-1,Attrib[2]);
i1 := Zmax;
if i1 > Hlp_Anz then i1 := Hlp_Anz;
for i := 1 to i1 do
WriteRam(1,i+Bofs,Hlp^[beg-1+i].Attr,1,
EFillStr(80,B1,B1+Hlp^[beg-1+i].Entry));
yM := 0;
End;
Begin
if HeapFrei(SizeOf(Hlp^) + SizeOf(OldBild^)) then
begin
{ OnlHelp:=true;
Show2:=show;
show:=0; }
NowFenster := false;
Moni_Off(0);
GetMem(Hlp,SizeOf(Hlp^));
GetMem(OldBild,SizeOf(OldBild^));
move(Bild^,OldBild^,SizeOf(OldBild^));
CurFlag := Cursor_On;
xc := WhereX;
yc := WhereY;
Cursor_Aus;
Bpos := 1;
Dpos := 1;
HlpAnwPtr := 0;
FillChar(HlpAnw,SizeOf(HlpAnw),0);
Hlp_Laden(IDstr);
Such := '';
Zmax := maxZ - (1 + Bofs);
Fertig := false;
CurSh := true;
Hstr := B1 + InfoZeile(56);
Klpos := pos(Kl,Hstr);
WriteRam(1,1,Attrib[15],1,ZFillStr(80,B1,InfoZeile(55)));
WriteRam(1,maxZ,Attrib[15],1,EFillStr(80,B1,Hstr));
HlpPage(Dpos);
yM := 1;
aM := Hlp^[Dpos].Attr;
WriteAttr(1,Bpos+Bofs,80,Attrib[4],1);
Repeat
if CurSh then InitCursor(1,Bpos+Bofs)
else InitCursor(1,1);
WriteRam(71,1,Attrib[15],1,EFillStr(10,B1,Such));
if (Klpos > 0) then
begin
if (Hlp^[Dpos].ID > '') then
begin
WriteRam(Klpos+1,maxZ,Attrib[15],1,X_ch);
WriteRam(Klpos+5,maxZ,Attrib[15],1,EFillStr(10,B1,LRK + Hlp^[Dpos].ID + RRK));
end else
begin
WriteRam(Klpos+1,maxZ,Attrib[15],1,B1);
WriteRam(Klpos+5,maxZ,Attrib[15],1,EFillStr(10,B1,B1));
end;
WriteRam(74,maxZ,Attrib[15],1, SFillStr(7,B1,LRK + int_str(Hlp_ZlnNr + Dpos) + RRK));
end;
_ReadKey(KC,VC);
if KC <> _Andere then Such := '';
case KC of
_Esc, _Del
: Fertig := true;
_Dn
: if Dpos < Hlp_Anz then
begin
inc(Dpos);
if Bpos < Zmax then inc(Bpos) else
begin
WriteAttr(1,Bofs+yM,80,aM,1);
Scroll(Up,1,1+Bofs,Zmax+Bofs);
WriteRam(1,Bofs+Bpos,Attrib[4],1,EFillStr(80,B1,B1+Hlp^[Dpos].Entry));
end;
end else Alarm;
_Up
: if Dpos > 1 then
begin
dec(Dpos);
if Bpos > 1 then dec(Bpos) else
begin
WriteAttr(1,Bofs+yM,80,aM,1);
Scroll(Dn,1,1+Bofs,Zmax+Bofs);
WriteRam(1,Bofs+Bpos,Attrib[4],1,EFillStr(80,B1,B1+Hlp^[Dpos].Entry));
end;
end else Alarm;
_Left
: if (HlpAnwPtr < maxHlpAnw) and (HlpAnw[HlpAnwPtr+1].IDk > '') then
begin
inc(HlpAnwPtr);
IDstr := HlpAnw[HlpAnwPtr].IDk;
Hlp_Laden(IDstr);
Dpos := HlpAnw[HlpAnwPtr].Dmp;
Bpos := HlpAnw[HlpAnwPtr].Bmp;
Such := '';
HlpPage(Dpos - Bpos + 1);
end else Alarm;
_PgDn
: if Dpos < Hlp_Anz then
begin
if Dpos + Zmax - Bpos >= Hlp_Anz then
begin
Dpos := Hlp_Anz;
Bpos := Zmax;
if Bpos > Hlp_Anz then Bpos := Hlp_Anz;
end else
begin
Dpos := Dpos + Zmax - 1;
if Dpos + Zmax - 1 > Hlp_Anz then Dpos := Hlp_Anz - Zmax + Bpos;
HlpPage(Dpos - Bpos + 1);
end;
end else Alarm;
_PgUp
: if Dpos > 1 then
begin
if Dpos <= Bpos then
begin
Dpos := 1;
Bpos := 1;
end else
begin
Dpos := Dpos - Zmax + 1;
if Dpos - Zmax + 1 < 1 then Dpos := Bpos;
HlpPage(Dpos - Bpos + 1);
end;
end else Alarm;
_CtrlPgUp
: if Dpos > 1 then
begin
Dpos := 1;
Bpos := 1;
HlpPage(1);
end else Alarm;
_CtrlPgDn
: if Dpos < Hlp_Anz then
begin
Dpos := Hlp_Anz;
Bpos := Zmax;
if Bpos > Hlp_Anz then Bpos := Hlp_Anz;
HlpPage(Dpos - Bpos + 1);
end else Alarm;
_CtrlHome
: begin
Dpos := Dpos - Bpos + 1;
Bpos := 1;
end;
_CtrlEnd
: if Hlp_Anz < Zmax then
begin
Dpos := Hlp_Anz;
Bpos := Hlp_Anz;
end else
begin
Dpos := Dpos + Zmax - Bpos;
Bpos := Zmax;
end;
_ShTab
: CurSh := not CurSh;
_F1.._F5, _F10, _AltH
: begin
case KC of
_F1 : Vstr := G^.OHelp[12];
_F2 : Vstr := G^.OHelp[13];
_F3 : Vstr := G^.OHelp[14];
_F4 : Vstr := G^.OHelp[15];
_F5 : Vstr := G^.OHelp[16];
_F10 : Vstr := G^.OHelp[11];
_AltH : Vstr := G^.OHelp[28];
else Vstr := '';
end;
if Vstr > '' then
begin
StepHlpAnw(IDstr,Dpos,Bpos);
Hlp_Laden(Vstr);
IDstr := Vstr;
HlpAnwPtr := 0;
yM := 1;
Bpos := 1;
Dpos := 1;
Such := '';
HlpPage(1);
end else Alarm;
end;
_AltS
: begin
WriteRam(1,Bofs+Bpos,Attrib[4],1,EFillStr(80,B1,B1 + 'Pfad =' + B1));
Save_Name := Konfig.SavVerz + 'HELP.' + TxtExt;
GetString(Save_Name,Attrib[4],60,9,Bofs+Bpos,KC,0,Ins);
if KC <> _Esc then
begin
Assign(G^.TFile,Save_Name);
Result := AppendTxt(G^.TFile);
if Result <> 0 then Result := RewriteTxt(G^.TFile);
if Result = 0 then
begin
for w := Dpos to Hlp_Anz do
begin
Hstr := Hlp^[w].Entry;
Writeln(G^.TFile,Hstr);
end;
FiResult := CloseTxt(G^.TFile);
end else
begin
WriteRam(1,Bofs+Bpos,Attrib[4],1,
EFillStr(80,B1,B1 + InfoZeile(75) + DP + B2 + Save_Name));
Alarm;
Verzoegern(ZWEI);
end;
end;
WriteRam(1,Bofs+Bpos,Attrib[4],1,EFillStr(80,B1,B1+Hlp^[Dpos].Entry));
end;
_Ret
: begin
Vstr := Hlp^[Dpos].ID;
if Vstr > '' then
begin
StepHlpAnw(IDstr,Dpos,Bpos);
Hlp_Laden(Vstr);
IDstr := Vstr;
HlpAnwPtr := 0;
yM := 1;
Bpos := 1;
Dpos := 1;
Such := '';
HlpPage(1);
end else Alarm;
end;
_Andere
: begin
Such := Such + UpCase(VC);
w := 0;
Flag := false;
While (w < Hlp_Anz) and not Flag do
begin
inc(w);
if pos(Such,Hlp^[w].Entry) = 1 then
begin
Flag := true;
Dpos := w;
if (Dpos < Bpos) or (Hlp_Anz <= Zmax) then Bpos := Dpos;
if ((Hlp_Anz - Dpos + Bpos) < Zmax) and
(Hlp_Anz > Zmax) and (Dpos > Bpos)
then Bpos := Zmax - (Hlp_Anz - Dpos);
end;
end;
if not Flag then
begin
Alarm;
Such := '';
end else HlpPage(Dpos - Bpos + 1);
end;
else Alarm;
end;
if yM > 0 then WriteAttr(1,Bofs+yM,80,aM,1);
WriteAttr(1,Bofs+Bpos,80,Attrib[4],1);
yM := Bpos;
aM := Hlp^[Dpos].Attr;
Until Fertig;
move(OldBild^,Bild^,SizeOf(OldBild^));
FreeMem(OldBild,SizeOf(OldBild^));
FreeMem(Hlp,SizeOf(Hlp^));
Cursor_Aus;
if CurFlag then
begin
GotoXY(xc,yc);
Cursor_Ein;
end;
Moni_On;
{ show:=show2;
OnlHelp:=false;
SwitchChannel (show);
SetzeFlags(show); }
end else Alarm;
OnlHelp:=false;
End;
Procedure REM_Help (* Kanal : Byte; HNr : Byte *);
Var i : Byte;
w : Word;
IDstr : String[10];
Hstr : String[80];
Begin
with K[Kanal]^ do
begin
i := Byte(HlpRemBeg-1+HNr);
if i in [1..maxOHelp] then
begin
IDstr := G^.OHelp[i];
if HeapFrei(SizeOf(Hlp^)) then
begin
GetMem(Hlp,SizeOf(Hlp^));
Hlp_Laden(IDstr);
for w := 1 to Hlp_Anz do
begin
if Hlp^[w].Sp7 = DP then
begin
Hstr:=Hlp^[w].Entry;
if (Node) and (Pos('//', HStr)>0) then delete(HStr,pos('//', Hstr), 2);
S_PAC(Kanal,NU,false,B1 + Hstr + M1);
end;
end;
FreeMem(Hlp,SizeOf(Hlp^));
end;
end;
end;
End;
Procedure Send_Hilfe (* Kanal : Byte; IDstr : Str6 *);
Var w : Word;
Hstr : String[80];
Begin
with K[Kanal]^ do
begin
if HeapFrei(SizeOf(Hlp^)) then
begin
GetMem(Hlp,SizeOf(Hlp^));
Hlp_Laden(IDstr);
for w := 1 to Hlp_Anz do if Hlp^[w].Sp7 = DP then
begin
Hstr := Line_convert(Kanal,1,Hlp^[w].Entry);
KillEndBlanks(Hstr);
S_PAC(Kanal,NU,false,B1 + Hstr + M1);
end;
FreeMem(Hlp,SizeOf(Hlp^));
end;
end;
End;
Procedure Help_Compile;
Var l,Hlpl : LongInt;
w,
Result : Word;
X7 : Byte;
Nstr : String[6];
Bstr,
Hstr : String[HlpRec];
Flag,
EFlag : Boolean;
HlpNr : ^HlpNrPtr;
BalkSt : str8;
BalkZa : Byte;
z1,z2 : char;
BalkK : Boolean;
Procedure HlpAnzeige(l : LongInt);
Begin
BalkSt:='';
if not Balkk then
begin
inc(BalkZa);
z1:='<27>';
z2:='<27>';
end
else begin
dec(BalkZa);
z2:='<27>';
z1:='<27>';
end;
if BalkZa=6 then Balkk:=true;
if BalkZa=1 then Balkk:=false;
BalkSt:=SFillStr(BalkZa,z1,BalkSt);
WriteTxt(X7,SZ2,StartColor,EFillStr(6,z2,BalkSt));
{ WriteTxt(X7,SZ2,StartColor,EFillStr(6,B1,int_str(l))); }
End;
Function NrExists(Kstr : Str6) : Word;
Var z : Word;
Flag : Boolean;
Begin
z := 0;
Flag := false;
if Kstr > '' then
Repeat
inc(z);
if CutStr(HlpNr^[z]) = Kstr then Flag := true;
Until Flag or (z >= maxHlpNr);
if Flag then NrExists := z
else NrExists := 0;
End;
Begin
BalkZa:=0;
BalkK:=false;
Hstr := HelpDatei + B1 + GL + RSK + B1 + THlpDatei + B1;
WriteTxt(30,SZ2,StartColor,Hstr);
X7 := 30 + length(Hstr);
Assign(G^.TFile,SysPfad + HelpDatei);
if ResetTxt(G^.TFile) = 0 then
begin
GetMem(HlpNr,SizeOf(HlpNr^));
FillChar(HlpNr^,SizeOf(HlpNr^),0);
Assign(G^.BFile,Konfig.TempVerz + THlpDatei);
if RewriteBin(G^.BFile,HlpRec) = 0 then
begin
l := 0;
w := 0;
While not Eof(G^.TFile) do
begin
inc(l);
if ((l mod 50)=0) then HlpAnzeige(l);
Readln(G^.TFile,Hstr);
if pos(DP,Hstr) = 1 then
begin
inc(w);
delete(Hstr,1,1);
if w <= maxHlpNr then
HlpNr^[w] := EFillStr(7,B1,CutStr(Hstr)) +
SFillStr(6,'0',int_str(l));
Hstr := ConstStr(B1,HlpRec);
BlockWrite(G^.BFile,Hstr[1],1,Result);
end else
begin
Hstr := EFillStr(HlpRec,B1,Hstr);
BlockWrite(G^.BFile,Hstr[1],1,Result);
end;
end;
Hlpl := FilePos(G^.BFile);
if Hlpl = 0 then Hlpl := 1;
FiResult := CloseBin(G^.BFile);
end;
FiResult := CloseTxt(G^.TFile);
if ResetBin(G^.BFile,HlpRec) = 0 then
begin
Flag := false;
EFlag := false;
Repeat
dec(l);
if ((l mod 50)=0) then HlpAnzeige(l);
BlockRead(G^.BFile,Hstr[1],1,Result);
Hstr[0] := Chr(HlpRec);
KillEndBlanks(Hstr);
if Hstr = LZ then EFlag := true;
KillStartBlanks(Hstr);
if (Hstr > '') and not EFlag then
begin
if Flag then
begin
Bstr := ConstStr(B1,7);
While Hstr > '' do
begin
Nstr := CutStr(Hstr);
w := NrExists(Nstr);
if w > 0 then Bstr := Bstr + RestStr(HlpNr^[w]) + B3
else Bstr := Bstr + ConstStr('0',7) + B3;
Hstr := RestStr(Hstr);
end;
Bstr := EFillStr(HlpRec,B1,Bstr);
Seek(G^.BFile,FilePos(G^.BFile)-1);
BlockWrite(G^.BFile,Bstr[1],1,Result);
end else if (OHelpStr = Hstr) then Flag := true;
end;
Until Eof(G^.BFile) or EFlag;
{ Writeln(G^.Bootfile);}
While not Eof(G^.BFile) do
begin
dec(l);
if ((l mod 50)=0) then HlpAnzeige(l);
BlockRead(G^.BFile,Hstr[1],1,Result);
Hstr[0] := Chr(HlpRec);
Nstr := copy(Hstr,1,6);
KillEndBlanks(Nstr);
w := NrExists(Nstr);
if w > 0 then
begin
Seek(G^.BFile,FilePos(G^.BFile)-1);
delete(Hstr,1,6);
Hstr := RestStr(HlpNr^[w]) + Hstr;
BlockWrite(G^.BFile,Hstr[1],1,Result);
end else
begin
if (Nstr > '') and (Nstr <> LZ) then
begin
Alarm;
WriteTxt(7,SZ2+1,StartColor,Hstr);
KillEndBlanks(Hstr);
{Writeln(G^.Bootfile,Hstr);}
end;
end;
end;
FiResult := CloseBin(G^.BFile);
end;
FreeMem(HlpNr,SizeOf(HlpNr^));
end;
writetxt(30,sz2,startcolor,' ');
End;