Xpacket/XPFRX.PAS

864 lines
25 KiB
Plaintext
Raw Permalink 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 F R X . P A S <20>
<20> <20>
<20> Routinen fuer die Speicherung von Savefiles <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 FileRxMenu (* Kanal : Byte *);
Const ArtMax = 5;
Var i : Byte;
KC : Sondertaste;
VC : Char;
Flag : Boolean;
X,Y,
Art : Byte;
Begin
with K[Kanal]^ do
begin
Moni_Off(0);
Flag := false;
for i := 9 to 15 do G^.Fstx[i] := 2;
G^.Fstr[7] := InfoZeile(329);
G^.Fstr[9] := InfoZeile(330);
G^.Fstr[10] := InfoZeile(331);
G^.Fstr[11] := InfoZeile(332);
G^.Fstr[12] := InfoZeile(333);
case RX_Bin of
1 : Art := 1;
2 : Art := 2;
3,
4,
5 : Art := 3;
else Art := 4;
end;
Repeat
for i := 9 to 12 do
begin
G^.Fstr[i][vM+1] := B1;
G^.Fstr[i][hM+1] := B1;
G^.Fstr[i][vM] := B1;
G^.Fstr[i][hM] := B1;
end;
if Art in [1..4] then
begin
X := vM;
Y := Art + 8;
end else
begin
X := hM;
Y := Art + 4;
end;
G^.Fstr[Y][X] := A_ch;
if HardCur then SetzeCursor(X+1,Y);
case RX_Bin of
1 : G^.Fstr[9][vM+1] := X_ch;
2 : G^.Fstr[10][vM+1] := X_ch;
3,
4 : G^.Fstr[11][vM+1] := 'x';
5 : G^.Fstr[11][vM+1] := X_ch;
end;
if Save then G^.Fstr[12][vM+1] := X_ch;
G^.Fstr[13] := '';
G^.Fstr[14] := '';
G^.Fstr[15] := '';
Fenster(15);
_ReadKey(KC,VC);
Case KC of
_Esc : Flag := true;
_Ret : ;
_F1 : Art := 1;
_F2 : Art := 2;
_F3 : Art := 3;
_F4 : Art := 4;
_F5 : Art := 5;
_F6,
_F7,
_F8,
_F9,
_F10 : Alarm;
_Up : if Art > 1 then dec(Art)
else Alarm;
_Dn : if Art < ArtMax then inc(Art)
else Alarm;
_Right : if Art < ArtMax then
begin
Art := Art + 4;
if Art > ArtMax then Art := ArtMax;
end else Alarm;
_Left : if Art > 1 then
begin
if Art <= 4 then Art := 1
else Art := Art - 4;
end else Alarm;
_AltH : XP_Help(G^.OHelp[21]);
else Alarm;
End;
if KC in [_F1.._F5,_Ret] then
case Art of
1,
2,
3 : begin
case Art of
1 : G^.Fstr[9][vM] := S_ch;
2 : G^.Fstr[10][vM] := S_ch;
3 : G^.Fstr[11][vM] := S_ch;
end;
Fenster(15);
Datei_Empfangen(Kanal,Art);
if RX_Bin > 0 then Flag := true;
end;
4 : begin
G^.Fstr[12][vM] := S_ch;
SaveFile(Kanal);
if Save then Flag := true;
end;
5 : Kill_Save_File(Kanal);
end;
SetzeFlags(Kanal);
Until Flag;
ClrFenster;
Neu_Bild;
Moni_On;
end;
End;
Procedure Datei_Empfangen (* Kanal : Byte; Art : Byte *);
Var Flag,
Fehler : Boolean;
l,
Size : LongInt;
KC : Sondertaste;
SizeStr : String[10];
Hstr : String[60];
i : Byte;
Begin
if Kanal > 0 then with K[Kanal]^ do
begin
if RX_Save then
begin
Size := FilePos(RXFile);
CloseRxFile(Kanal,1);
if Size < 1 then FiResult := EraseBin(RXFile);
RemoteSave := false;
Ignore := false;
RX_Save := false;
RX_Bin := 0;
AutoBinOn := AutoBin;
BoxZaehl:=5;
end else
begin
if RX_Bin = 0 then
begin
Fehler := false;
Flag := false;
Remotesave := false;
RX_Bin := Art;
G^.Fstr[14]:=InfoZeile(204);
Fenster(15);
GetString(FRxName,Attrib[3],60,2,15,KC,1,Ins);
if KC <> _Esc then
begin
FRxName := SvFRxCheck(Kanal,FRxName,TxtName);
if not PfadOk(1,FRxName) then
begin
Hstr := FRxName;
While Hstr[length(Hstr)] <> BS do delete(Hstr,length(Hstr),1);
Flag := MkSub(Hstr) and PfadOk(1,FRxName);
end else Flag := true;
if Flag then
begin
if RX_Bin = 1 then (* Textfile *)
begin
if OpenTextFile(Kanal) then
begin
RX_Count := 0;
RX_Laenge := 0;
RX_TextZn := 0;
RX_Time := Uhrzeit;
RX_Save := true;
end else Fehler := true;
end else
if RX_Bin = 2 then (* Bin<69>r *)
begin
Assign(RXFile,FRxName);
if ResetBin(RxFile,T) = 0 then
begin (* File vorhanden !!! *)
SizeStr := int_str(FileSize(RXFile));
G^.Fstr[14] := FRxName + B1 + InfoZeile(156);
G^.Fstr[15] := InfoZeile(286) + B1+ FormByte(SizeStr) + B3 + InfoZeile(287);
Size := FileSize(RXFile);
if Size mod 1000 < 300 then Size := Size - 1000;
if Size < 0 then Size := 0;
SizeStr := int_str((Size div 1000) * 1000);
Fenster(15);
Alarm;
GetString(SizeStr,Attrib[3],10,length(G^.Fstr[15])+3,15,KC,3,Ins);
if KC <> _Esc then
begin
Size := str_int(SizeStr);
if Size < 0 then Size := 0;
if Size < FileSize(RXFile) then
begin
Seek(RXFile,Size);
Truncate(RXFile);
if Size > 0 then
begin
VorWrite[Kanal]^[stV] := VorWrite[Kanal]^[stV] + B1 + SizeStr;
Chr_Vor_Show(Kanal,_End,#255);
end;
end;
RX_CRC := 0;
RX_Count := 0;
RX_Laenge := 0;
RX_Save := true;
end else
begin
FiResult := CloseBin(RXFile);
RX_Bin := 0;
end;
end else
begin (* alles klar, File ist nicht da *)
if RewriteBin(RXFile,T) = 0 then
begin
RX_CRC := 0;
RX_Count := 0;
RX_Laenge := 0;
RX_Save := true;
end else Fehler := true;
end;
end else
if RX_Bin = 3 then (* Auto-Bin<69>r *)
begin
if Exists(FRxName) then
begin (* File vorhanden !!! *)
Assign(RXFile,FRxName);
FiResult := ResetBin(RxFile,T);
Size := FileSize(RXFile);
FiResult := CloseBin(RxFile);
l := Size;
SizeStr := int_str(l);
G^.Fstr[14] := FRxName + B1 + InfoZeile(156);
G^.Fstr[15] := InfoZeile(286) + B1+ FormByte(SizeStr) + B3 + InfoZeile(287);
if l mod 1000 < 300 then l := l - 1000;
if l < 0 then l := 0;
SizeStr := int_str((l div 1000) * 1000);
Fenster(15);
Alarm;
GetString(SizeStr,Attrib[3],10,length(G^.Fstr[15])+3,15,KC,3,Ins);
if KC <> _Esc then
begin
l := str_int(SizeStr);
if l < 0 then l := 0;
if l < Size then
begin
RX_Count := l;
if l > 0 then
begin
VorWrite[Kanal]^[stV] := VorWrite[Kanal]^[stV] + B1 + SizeStr;
Chr_Vor_Show(Kanal,_End,#255);
end;
end else RX_Count := Size;
end else RX_Bin := 0;
end else AutoBinOn := true; (* alles klar, File ist nicht da *)
end else RX_Bin := 0;
end else Fehler := true;
end else RX_Bin := 0;
if Fehler then
begin
RX_Bin := 0;
Alarm;
G^.Fstr[15] := FRxName + B2 + InfoZeile(75) + B2 + InfoZeile(78);
Fenster(15);
SetzeCursor(length(G^.Fstr[15])+2,15);
Warten;
end;
Cursor_aus;
end else RX_Bin := 0;
end;
end else Alarm;
End;
Function OpenTextFile (* Kanal : Byte) : Boolean *);
Var Result : Word;
Begin
with K[Kanal]^ do
begin
Assign(RXFile,FRxName);
Result := ResetBin(RxFile,T);
if Result = 0 then Seek(RXFile,FileSize(RXFile))
else Result := RewriteBin(RxFile,T);
OpenTextFile := Result = 0;
end;
End;
Procedure OpenBinFile (* Kanal : Byte; Zeile : Str80 *);
Var i, ier : Byte;
Free : LongInt;
XFsize:longint;
xfile : file of byte;
FlagPkt:Boolean;
Schnibbel:string[10];
Function NewName(Kanal,Art : Byte; NStr : Str12) : Str25;
var i : Byte;
Ext : String[4];
Sstr : String[8];
Hstr : String[12];
Flag : Boolean;
begin
Hstr := K[Kanal]^.Call;
Strip(Hstr);
i := 0;
if Art = 0 then
begin
Repeat
inc(i);
Sstr := int_str(i) + Hstr;
Flag := not Exists(Konfig.BinVerz + Sstr + BS + Nstr);
Until Flag or (i > 250);
if Flag then
begin
if MkSub(Konfig.BinVerz + Sstr) then NewName := Sstr + BS + Nstr;
end else
begin
Ext := Pkt + ParmStr(2,Pkt,Nstr);
Repeat
inc(i);
Until not Exists(Konfig.BinVerz + Hstr + SFillStr(2,'0',int_str(i)) + Ext);
NewName := Hstr + SFillStr(2,'0',int_str(i)) + Ext;
end;
end;
if Art = 1 then
begin
Repeat
inc(i);
Ext := Pkt + SFillStr(3,'0',int_str(i));
Until not Exists(Konfig.BinVerz + Hstr + Ext);
NewName := Hstr + Ext;
end;
end;
Begin
with K[Kanal]^ do
begin
KillEndBlanks(Zeile);
Zeile := UpCaseStr(Zeile);
{ #BIN#818#|32501#$1AC785A4#A:\TREMEX\VIRUS.TXT }
{ #BIN#205453#|55561#$1EB98723?#fpac391.Lzh }
if not (XBIN.An) then delete(Zeile,1,5) else delete(Zeile,1,6);
i := pos('#',Zeile);
if i = 0 then i := length(Zeile)
else dec(i);
if i > 0 then RX_Laenge := LongInt(str_int(copy(Zeile,1,i)))
else RX_Laenge := 0;
if RX_laenge > 0 then
begin
Free := DiskFree(ord(FRxName[1])-64);
if (Free + FFFF) > RX_Laenge then
begin
if pos(Pipe,Zeile) > 0 then
begin
delete(Zeile,1,pos(Pipe,Zeile));
i := pos(LZ,Zeile);
if i > 0 then
begin
RX_Soll_CRC := Word(str_int(copy(Zeile,1,i-1)));
delete(Zeile,1,i);
end else RX_Soll_CRC := 0;
end else RX_Soll_CRC := 0;
if (pos('$',Zeile) = 1) and (pos(LZ,Zeile) in [10,11]) then
begin
RX_Date := str_int(copy(Zeile,1,9));
delete(Zeile,1,pos(LZ,Zeile));
end else RX_Date := 0;
xfsize:=0;
if RX_Bin = 0 then
begin
While pos(DP,Zeile) > 0 do delete(Zeile,1,pos(DP,Zeile));
While pos(BS,Zeile) > 0 do delete(Zeile,1,pos(BS,Zeile));
{**Check f<>r <20>berl<72>nge}
flagpkt:=false;
if pos(Pkt,Zeile) = 0 then
begin
Zeile := Zeile + Pkt;
flagpkt:=true;
end;
if pos(Pkt, Zeile)>9 then
begin
Zeile[7]:='~';
ier:=0;
repeat
inc(ier);
Schnibbel:=int_str(ier);
Zeile[8]:=Schnibbel[1];
until (not Exists(Konfig.BinVerz + Zeile)) or (ier>8);
repeat
delete(Zeile,9,1);
until Zeile[9]='.';
end; {>9}
if (length(zeile)-pos(pkt, Zeile))>3 then
begin
repeat
delete(Zeile, length(zeile), 1);
until (length(zeile)-pos(pkt, Zeile))<=3;
end;
if FlagPkt then delete(Zeile, length(zeile), 1);
FlagPkt:=false;
{**Check f<>r <20>berl<72>nge Ende}
if SaveNameCheck(0,Zeile) then
begin
if pos(Pkt,Zeile) > 0 then
begin
if Exists(Konfig.BinVerz + Zeile) then
begin
if xbin.an then
begin
assign(xfile, Konfig.BinVerz+Zeile);
reset(XFile);
xfsize:=filesize(XFile);
if (rx_laenge>xfsize) and (xFsize>1999) then
begin
xfsize:=xfsize-1000
end else xfsize:=0;
close(XFile);
end;
if (not xbin.an) or (xfsize=0) then Zeile := NewName(Kanal,0,Zeile);
end;
end else Zeile := NewName(Kanal,1,Zeile);
end else Zeile := NewName(Kanal,1,Zeile);
FRxName := Konfig.BinVerz + Zeile;
end;
Assign(RXFile,FRxName);
if RX_Bin = 0 then
begin
RemoteSave := true;
if (not XBin.An) or (XFsize=0) then FiResult := RewriteBin(RXFile,T);
end;
if RX_Bin = 3 then
begin
FiResult := ResetBin(RXFile,T);
if FiResult = 0 then
begin
Seek(RXFile,RX_Count);
Truncate(RXFile);
end else FiResult := RewriteBin(RXFile,T);
end;
if RX_Bin = 4 then
begin
RemoteSave := true;
FiResult := RewriteBin(RXFile,T);
end;
if FiResult = 0 then
begin
if not FileSend then
begin
if (not xbin.an) or ((xbin.an) and (xfsize=0)) then
begin
S_PAC(Kanal,NU,true,Meldung[9] + M1); { #OK# }
InfoOut(Kanal,0,1,Meldung[9]);
XBin.FrameNr:=0;
end;
if (xbin.an) and (xfsize>0) then
begin
XBin.FrameNr:=0;
S_PAC(Kanal,NU,true,Meldung[9] + int_str(xFsize)+ M1);
reset(RXFile, T);
Seek(RXFile,xfsize);
Truncate(RXFile);
InfoOut(Kanal,0,1,Meldung[9]+Int_Str(XFsize));
rx_Count:=xfsize;
end;
if xbin.an then xbin.rx:=true;
end;
if not xbin.rx then
begin
RX_Save := true;
Ignore := true;
end;
xbin.rtxOK:=true;
RX_Time := Uhrzeit;
RX_Count := 0;
RX_TextZn := 0;
RX_CRC := 0;
if not XBin.An then RX_Bin := 5 else XBin.RX:=true;
end else
begin
S_Aus(Kanal,3,M1 + Meldung[10] + M1); { #ABORT# }
S_PAC(Kanal,NU,true,'');
end;
end else
begin
RX_Bin := 0;
RemoteSave := false;
Ignore := false;
S_Aus(Kanal,3,M1 + Meldung[10] + M1); { #ABORT# }
S_PAC(Kanal,NU,true,'');
SetzeFlags(Kanal);
end;
end;
if xbin.an then rx_bin:=0;
end;
End;
Procedure Write_RxFile (* Kanal : Byte; Zeile : String *);
Var i,i1 : Integer;
Free : LongInt;
DatPos:longint;
Result : Word;
Hstr : String[80];
VC : Char;
Bstr : String;
XBinRX : string;
Begin
with K[Kanal]^ do
Begin
case RX_Bin of
1 : begin (* normales Textfile *)
if RemoteSave and (MldOk in [16,17]) then
begin
CloseRxFile(Kanal,0);
RX_Save := false;
BoxZaehl:=5;
RX_Bin := 0;
RemoteSave := false;
If Not FWD then
S_Aus(Kanal,3,M1 + InfoZeile(117) + B1 +
int_Str(RX_TextZn) + B1 + InfoZeile(118)+ M1);
if MsgToMe then
begin
MsgToMe := false;
Eig_Mail_Zeile := '';
Check_Eig_Mail(1,maxLink);
if Eig_Mail_Zeile > '' then
begin
InfoOut(show,0,1,InfoZeile(153) + Eig_Mail_Zeile);
If Klingel then Triller;
end;
end;
Ignore := false;
SetzeFlags(Kanal);
Send_Prompt(Kanal,FF);
end else
if RemoteSave and (MldOk = 10) then
begin
CloseRxFile(Kanal,0);
RX_Save := false;
BoxZaehl:=5;
RX_Bin := 0;
RemoteSave := false;
Ignore := false;
if EraseBin(RXFile) = 0
then S_Aus(Kanal,3,M1 + Star + InfoZeile(41) + M1);
SetzeFlags(Kanal);
Send_Prompt(Kanal,FF);
end else
begin
RX_Count := RX_Count + length(Zeile);
Zeile := Line_Convert(Kanal,2,Zeile);
Bstr := '';
for i := 1 to length(Zeile) do
Begin
VC := Zeile[i];
case VC of
^I : Bstr := Bstr + VC;
M1 : begin
Bstr := Bstr + #13 + #10;
inc(RX_TextZn);
end;
#1..#31
: Bstr := Bstr + '^' + chr(ord(VC)+64);
^Z :;
#0 :;
#127:;
else Bstr := Bstr + VC;
end;
if (length(Bstr) > 250) or (i = length(Zeile)) then
begin
BlockWrite(RXFile,Bstr[1],length(Bstr),Result);
Bstr := '';
end;
End;
FileInfo(Kanal,0,0,RX_Count,0,0);
end;
end;
2 : begin (* normales Bin<69>rfile-Empfangen *)
BlockWrite(RXFile,Zeile[1],length(Zeile),Result);
RX_Count := RX_Count + length(Zeile);
FileInfo(Kanal,0,0,RX_Count,0,0);
end;
5 : begin (* Automatischer Bin<69>rfile-Empfang *)
if MldOk in [5,6,10] then
begin
if MldOk = 10 then
begin
FiResult := CloseBin(RxFile);
FiResult := EraseBin(RxFile);
S_PAC(Kanal,NU,false,InfoZeile(41) + M1);
Send_Prompt(Kanal,FF);
end else CloseRxFile(Kanal,1);
RX_Bin := 0;
RX_Save := false;
BoxZaehl:=5;
Remotesave := false;
Ignore := false;
AutoBinOn := AutoBin;
SetzeFlags(Kanal);
end else
begin
if xbin.an then
begin
if length(zeile)>8 then
begin
XBinRX := copy (Zeile, 1, 8);
delete (Zeile,1,8);
end else
begin
XBinRX := Zeile;
zeile:='';
end;
DatPos:=filePos(RXFile);
XBinCHECK(Kanal, XBinRX, DatPos, Zeile);
end;
i1 := length(Zeile);
if (RX_Count + i1) > RX_Laenge then i1 := Byte(RX_Laenge - RX_Count);
BlockWrite(RXFile,Zeile[1],i1,Result);
RX_CRC := Compute_CRC(RX_CRC,copy(Zeile,1,Result));
RX_Count := RX_Count + i1;
FileInfo(Kanal,0,RX_Laenge,RX_Count,0,0);
if RX_Count >= RX_Laenge then
begin
CloseRxFile(Kanal,0);
Result := Word(RX_CRC);
RX_Save := false;
BoxZaehl:=5;
RX_Bin := 0;
AutoBinOn := AutoBin;
Ignore := false;
SetzeFlags(Kanal);
Hstr := Time_Differenz(RX_Time,Uhrzeit);
Zeile := FName_aus_FVar(RxFile);
While pos(BS,Zeile) > 0 do delete(Zeile,1,pos(BS,Zeile));
{ Zeile := M1 + B1 + InfoZeile(103) + B1 + }
Zeile := B1 + InfoZeile(103) + B1 + {//db1ras}
EFillStr(14,B1,Zeile) + InfoZeile(100) +
int_str(Result) + B2 + LRK + Hex(Result,4) + B1 +
BdStr + FileBaud(Hstr,int_str(RX_Count)) + B2 +
LRK + Hstr + RRK + M1;
if (RX_Soll_CRC > 0) and (Result <> RX_Soll_CRC)
then Zeile := Zeile + B1 + InfoZeile(113) + ^G + M1;
{ Zeile := Zeile + M1; }
{//db1ras}
if SysArt in [0,17,21] then begin {XP, PROFI}
S_PAC(Kanal,NU,false,Zeile);
Send_Prompt(Kanal,FF);
end else if SysArt = 3 then {FBB}
S_PAC(Kanal,NU,true,M1);
Remotesave := false;
if RxComp then MeldeCompZ := ''
else MeldeZeile := '';
DZeile := Zeile;
WeFlag := true;
end;
end;
end;
end; (* case RX_Bin of ... *)
End; (* with ... do *)
End;
Procedure CloseRxFile (* Kanal,Art : Byte *);
Var dt : DateTime;
Begin
with K[Kanal]^ do
begin
if ((RX_Bin = 5) or (Xbin.An)) and (RX_Date > 0) then
begin
if Art = 1 then
begin
UnpackTime(RX_Date,dt);
dt.Year := dt.Year + 50;
PackTime(dt,RX_Date);
end;
SetFTime(RxFile,RX_Date);
end;
FiResult := CloseBin(RxFile);
end;
End;
Procedure SaveFile (* Kanal : Byte *);
var Result : Word;
Hstr : String[60];
KC : Sondertaste;
Flag : Boolean;
Begin
with K[Kanal]^ do
begin
if Save then
begin
Save := false;
FiResult := CloseBin(SFile);
end else
begin
Flag := false;
Fenster(15);
GetString(SvName,Attrib[3],60,2,15,KC,1,Ins);
svname:=upcasestr(SvName);
if KC <> _Esc then
begin
SvName := SvFRxCheck(Kanal,SvName,SaveName);
if not PfadOk(1,SvName) then
begin
Hstr := SvName;
While Hstr[length(Hstr)] <> BS do delete(Hstr,length(Hstr),1);
Flag := MkSub(Hstr) and PfadOk(1,SvName);
end else Flag := true;
if Flag then
begin
Assign(SFile,SvName);
Result := ResetBin(SFile,T);
If Result = 0 then Seek(SFile,FileSize(SFile))
else if Result = 2 then Result := RewriteBin(SFile,T);
if Result in [0,2] then Save := true;
end;
if not Save then
begin
Alarm;
G^.Fstr[15] := InfoZeile(295) + B2 + InfoZeile(78);
Fenster(15);
SetzeCursor(length(G^.Fstr[15])+2,15);
Warten;
Cursor_aus;
end else SvLRet := true;
end;
end;
end;
End;
Procedure Write_SFile (* Kanal : Byte; Zeile : String *);
Var i : Byte;
Result : Word;
VC : Char;
Flag : Boolean;
Hstr : String;
Begin
Flag := K[Kanal]^.EigFlag or K[Kanal]^.FileFlag or K[Kanal]^.RemFlag;
Zeile := Line_Convert(Kanal,2,Zeile);
Hstr := '';
for i := 1 to length(Zeile) do
Begin
VC := Zeile[i];
if Flag and (Kanal > 0) and K[Kanal]^.SvLRet then Hstr := Hstr + EchoCh + B1;
K[Kanal]^.SvLRet := false;
case VC of
^I : Hstr := Hstr + VC;
^J : if Kanal = 0 then Hstr := Hstr + #13 + #10;
M1 : begin
if (Kanal = 0) and ZeigeRET then Hstr := Hstr + '^' + chr(ord(^J)+64);
Hstr := Hstr + #13 + #10;
K[Kanal]^.SvLRet := true;
end;
^Z :;
#0 :;
#127:;
#1..#31
: Hstr := Hstr + '^' + chr(ord(VC)+64)
else Hstr := Hstr + VC;
end;
if (length(Hstr) > 250) or (i = length(Zeile)) then
begin
BlockWrite(K[Kanal]^.SFile,Hstr[1],length(Hstr),Result);
Hstr := '';
end;
End;
End;
Function SvFRxCheck (* Kanal : Byte; Zeile : Str60; Name : Str12) : Str60 *);
Begin
if (Zeile = '') or (Zeile[length(Zeile)] = BS) or not SaveNameCheck(1,Zeile)
then Zeile := Konfig.SavVerz + Name + SFillStr(3,'0',int_str(Kanal));
if pos(Pkt,Zeile) = 0 then Zeile := Zeile + Pkt + SFillStr(3,'0',int_str(Kanal));
if pos(DP,Zeile) = 0 then Zeile := Konfig.SavVerz + Zeile;
SvFRxCheck := Zeile;
End;