3149 lines
95 KiB
Plaintext
3149 lines
95 KiB
Plaintext
|
{<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 I O . P A S <20>
|
|||
|
<20> <20>
|
|||
|
<20> Verschiedene Routinen zum Ansprechen des TNC <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>}
|
|||
|
{** MailPolling: MZAR! suchen!}
|
|||
|
{**** F<>R Reconnect-Geschichte nach *RECONNECT suchen
|
|||
|
F<>r Verschl<68>sseln: *VERSCH}
|
|||
|
(* Eine HOSTMODE-Zeile an den TNC senden
|
|||
|
Format: SendTNC(KanalNummer,Art(0=Text,1=Kommando),String) *)
|
|||
|
(* TNN!!! suchen f<>r TNN-Connect-Erweiterung *)
|
|||
|
|
|||
|
Procedure SendTNC (* Var Kanal : Byt; ,Art : Byte; Zeile : String) *);
|
|||
|
var Laenge : char;
|
|||
|
Channel : char;
|
|||
|
V24Nr : Byte;
|
|||
|
ch : Char;
|
|||
|
Begin
|
|||
|
if Pseudo then
|
|||
|
begin
|
|||
|
Channel := chr(Kanal);
|
|||
|
Kanal := 0;
|
|||
|
end else Channel := K[Kanal]^.TNCKanal;
|
|||
|
|
|||
|
V24Nr := V24(Kanal);
|
|||
|
|
|||
|
ClearV24Buffer;
|
|||
|
FillChar(K[Kanal]^.Response,SizeOf(K[Kanal]^.Response),0);
|
|||
|
|
|||
|
if TNC[K[Kanal]^.TncNummer]^.TNC_im_Host then
|
|||
|
begin
|
|||
|
Laenge := chr(length(Zeile)-1);
|
|||
|
Switch_TNC(K[Kanal]^.TncNummer);
|
|||
|
IRQsLock;
|
|||
|
WriteAux(V24Nr,Channel + chr(Art) + Laenge);
|
|||
|
WriteAux(V24Nr,Zeile);
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
Procedure TNCs_Pollen;
|
|||
|
Begin
|
|||
|
if not TNC_Halt then
|
|||
|
begin
|
|||
|
inc(Poll);
|
|||
|
if Poll > TNC[PollTNr]^.Kbis then
|
|||
|
begin
|
|||
|
inc(PollTNr);
|
|||
|
if not TNC_used[PollTNr] then PollTNr := 1;
|
|||
|
Poll := TNC[PollTNr]^.Kvon;
|
|||
|
K[0]^.TncNummer := PollTNr;
|
|||
|
Kanal_Pollen(0);
|
|||
|
end;
|
|||
|
if Poll > 0 then with K[Poll]^ do
|
|||
|
begin
|
|||
|
if (C_Poll or Test or Ext_Poll or Kanal_benutz or not TNC_ReadOut) or
|
|||
|
(not TNC[TncNummer]^.ExtHost and (Pause = PollRate)) then Kanal_Pollen(Poll);
|
|||
|
inc(Pause);
|
|||
|
if Pause > PollRate then Pause := 0;
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
Procedure Kanal_Pollen (* Kanal : Byte *);
|
|||
|
Var i,i1 : Byte;
|
|||
|
VC : Char;
|
|||
|
Puffer : Word;
|
|||
|
SFrame : Byte;
|
|||
|
|
|||
|
Begin
|
|||
|
with K[Kanal]^ do
|
|||
|
Begin
|
|||
|
if (Kanal = 0) and TNC[TncNummer]^.ExtHost then
|
|||
|
begin
|
|||
|
Pseudo := true;
|
|||
|
Ausgabe := false;
|
|||
|
TxRxTNC(FF,1,'G');
|
|||
|
if Idle and (Response > '') then
|
|||
|
begin
|
|||
|
Idle_TCount := Idle_Tout;
|
|||
|
Idle_TMerk := TimerTick;
|
|||
|
end;
|
|||
|
for i := 1 to Ord(Response[0]) do
|
|||
|
begin
|
|||
|
VC := Chr(Byte(Ord(Response[i])-1));
|
|||
|
for i1 := TNC[TncNummer]^.Kvon to TNC[TncNummer]^.Kbis do
|
|||
|
if K[i1]^.TNCKanal = VC then K[i1]^.Ext_Poll := true;
|
|||
|
end;
|
|||
|
end;
|
|||
|
Ext_Poll := false;
|
|||
|
|
|||
|
Get_Linkstatus(Kanal);
|
|||
|
|
|||
|
if Kanal = 0 then
|
|||
|
begin
|
|||
|
Puffer := FreiePuffer(Kanal);
|
|||
|
for i1 := TNC[TncNummer]^.Kvon to TNC[TncNummer]^.Kbis do
|
|||
|
K[i1]^.BufToLow := Puffer < maxTncBuf;
|
|||
|
|
|||
|
if (not K[show]^.BufExists or Test) and
|
|||
|
(((show = 0) and (Unproto = TncNummer)) or
|
|||
|
((show > 0) and (TncNummer = K[show]^.TncNummer))) then
|
|||
|
begin
|
|||
|
{ if Not OnlHelp then} StatusOut(show,73,1,Attrib[9],SFillStr(6,B1,'('+int_str(Puffer)+')'),2);
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if not TNC_ReadOut then
|
|||
|
begin
|
|||
|
While L_Status[1] + L_Status[2] > 0 do
|
|||
|
begin
|
|||
|
S_PAC(Kanal,CM,true,'G');
|
|||
|
Get_Linkstatus(Kanal);
|
|||
|
end;
|
|||
|
end else
|
|||
|
begin
|
|||
|
TncNix := false;
|
|||
|
Repeat
|
|||
|
S_PAC(Kanal,CM,true,'G');
|
|||
|
Until (not MonCode5 and _KeyPressed) or TncNix;
|
|||
|
end;
|
|||
|
|
|||
|
if BufExists and (Kanal > 0) then
|
|||
|
begin
|
|||
|
if Test then SendTestBuffer(Kanal) else
|
|||
|
begin
|
|||
|
SFrame := L_Status[3];
|
|||
|
While BufExists and not _KeyPressed and
|
|||
|
((MaxFrame > SFrame) or
|
|||
|
(TNC_Puffer and (FreiePuffer(Kanal) > minTncBuf))) do
|
|||
|
begin
|
|||
|
SendBuffer(Kanal);
|
|||
|
inc(SFrame);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if XBin.TX and not FileSendWait then
|
|||
|
begin
|
|||
|
SFrame := L_Status[3];
|
|||
|
While (not FileSendWait) and (not _KeyPressed) and
|
|||
|
(MaxFrame > SFrame) do
|
|||
|
begin
|
|||
|
xbinSend(Kanal,true);
|
|||
|
inc(SFrame);
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if (FileSend) and (not FileSendWait) and (not Xbin.an) then
|
|||
|
Begin
|
|||
|
if not BufExists and TNC_Puffer and (TX_Bin <> 2) then
|
|||
|
Repeat
|
|||
|
Puffer := FreiePuffer(Kanal);
|
|||
|
if (Puffer > minTncBuf) then if FileSend then Send_File(Kanal,true);
|
|||
|
Until (Puffer <= minTncBuf) or _KeyPressed or not FileSend
|
|||
|
else begin
|
|||
|
SFrame := L_Status[3];
|
|||
|
While FileSend and not _KeyPressed and
|
|||
|
(Upload or (MaxFrame > SFrame) or WishBuf) do
|
|||
|
begin
|
|||
|
Send_File(Kanal,true);
|
|||
|
inc(SFrame);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if not TNC_ReadOut and (Kanal = maxLink) then TNC_ReadOut := true;
|
|||
|
end; (* WITH ... *)
|
|||
|
End;
|
|||
|
|
|||
|
Procedure Get_Linkstatus (* Kanal : Byte *);
|
|||
|
Var Pstr : String[14];
|
|||
|
Attr,
|
|||
|
i,i1 : Byte;
|
|||
|
Begin
|
|||
|
with K[Kanal]^ do
|
|||
|
begin
|
|||
|
if Kanal = 0 then i1 := 2 else i1 := 6;
|
|||
|
Ausgabe := false;
|
|||
|
S_PAC(Kanal,CM,true,'L');
|
|||
|
|
|||
|
for i := 1 to i1 do L_Status[i] := Byte(str_int(ParmStr(i,B1,Response)));
|
|||
|
|
|||
|
if Kanal > 0 then
|
|||
|
begin
|
|||
|
Pstr := SFillStr(4,B1,'S'+int_str(L_Status[3])) + { Send_Frames }
|
|||
|
SFillStr(3,B1,'A'+int_str(L_Status[4])) + { Schon gesendet Frames }
|
|||
|
SFillStr(4,B1,'T'+int_str(L_Status[5])); { Tries }
|
|||
|
StatusOut(Kanal,59,1,Attrib[9],PStr,1);
|
|||
|
|
|||
|
if TxBeepAck and FlagTxBeep and (L_Status[3] = 0) and (L_Status[4] = 0) then
|
|||
|
begin
|
|||
|
if Klingel then Beep(G^.TxPiepFreq,G^.TxPiepTime);
|
|||
|
FlagTxBeep := false;
|
|||
|
end;
|
|||
|
if TxBeepAck and ((L_Status[3] > 0) or (L_Status[4] > 0)) then FlagTxBeep := true;
|
|||
|
|
|||
|
{ if (L_STatus[3]>0) or (L_Status[4]>0) or (L_Status[5]>0) then TNC[TNCNummer]^.TXBedarf:=TRUE;}
|
|||
|
|
|||
|
Attr := Attrib[13];
|
|||
|
if L_Status[6] in [1,7..15] then Attr := Attrib[7];
|
|||
|
StatusOut(Kanal,61,1,Attr,LinkStatus[L_Status[6]],2);
|
|||
|
C_Poll := L_Status[6] > 0;
|
|||
|
end;
|
|||
|
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
(* Tastatur solange abfragen, bis kein Zeichen mehr kommt *)
|
|||
|
Procedure Check_Keyboard;
|
|||
|
var SK : Sondertaste;
|
|||
|
VC : char;
|
|||
|
i : Byte;
|
|||
|
|
|||
|
Procedure Tasten;
|
|||
|
begin
|
|||
|
KeyCheck := true;
|
|||
|
_ReadKey(SK,VC);
|
|||
|
KeyCheck := false;
|
|||
|
if not ScreenSTBY then
|
|||
|
begin
|
|||
|
polling := false;
|
|||
|
PollTime := TimerTick + KeyDelay;
|
|||
|
Key_Active(show,SK,VC);
|
|||
|
end else
|
|||
|
begin
|
|||
|
Neu_Bild;
|
|||
|
with K[show]^ do
|
|||
|
begin
|
|||
|
if ((RX_Bin>0) or (SplSave)) and (LstRXInfo<>'') then InfoOut(show,0,1,LstRXInfo);
|
|||
|
if (FileSend) and (LstTXInfo<>'') then InfoOut(show,0,1,LstTXInfo);
|
|||
|
end;
|
|||
|
end;
|
|||
|
if ScreenInit > 0 then ScreenTimer := ScreenInit;
|
|||
|
end;
|
|||
|
|
|||
|
Begin
|
|||
|
if not ch_aus then
|
|||
|
begin
|
|||
|
for i := 1 to maxLink do with K[i]^ do
|
|||
|
begin
|
|||
|
if CSelf = 10 then
|
|||
|
begin
|
|||
|
AutoZaehl := AutoToAnzJmp;
|
|||
|
CSelf := 3;
|
|||
|
end;
|
|||
|
if CSelf in [3,9] then Autozeile_Holen(i);
|
|||
|
end;
|
|||
|
if G^.Makro then While G^.Makro do Tasten
|
|||
|
else While _KeyPressed do Tasten;
|
|||
|
end else
|
|||
|
begin
|
|||
|
ch_aus := false;
|
|||
|
Key_Active(show,SK_out,VC_out);
|
|||
|
end;
|
|||
|
if not polling then if TimerTick > PollTime then polling := true;
|
|||
|
End;
|
|||
|
|
|||
|
Procedure Rufz_TNC_init (* Kanal : Byte *);
|
|||
|
Begin
|
|||
|
if Kanal > 0 then with K[Kanal]^ do
|
|||
|
begin
|
|||
|
if Test or Mo.MonActive or (Kanal = ConvHilfsPort) then
|
|||
|
S_PAC(Kanal,CM,true,'I' + B1 + PhantasieCall) else
|
|||
|
if not (connected or Kanal_benutz) then
|
|||
|
begin
|
|||
|
S_PAC(Kanal,CM,true,'I' + B1 + OwnCall);
|
|||
|
StatusOut(Kanal,4,1,Attrib[9],EFillStr(9,B1,OwnCall),1);
|
|||
|
StatusOut(Kanal,14,1,Attrib[9],ConstStr(B1,29),1);
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
Procedure MH_Check (* TNC_Nr : Byte; Zeile : Str128 *);
|
|||
|
Var i,
|
|||
|
AnzDig : Byte;
|
|||
|
MailFlag,
|
|||
|
FrUI,
|
|||
|
FrRej,
|
|||
|
DirDig : Boolean;
|
|||
|
Rufz : String[9];
|
|||
|
LongDig : String[70];
|
|||
|
|
|||
|
Procedure MH_Update(TNC_Nr : Byte);
|
|||
|
var Stelle : Byte;
|
|||
|
found : Boolean;
|
|||
|
i : Byte;
|
|||
|
Begin
|
|||
|
if (G^.QRG_Anz > 0) and (AnzDig = 0) then
|
|||
|
begin
|
|||
|
i := 0;
|
|||
|
Repeat
|
|||
|
inc(i);
|
|||
|
found := (Rufz = G^.QRG[i].Call);
|
|||
|
Until found or (i = G^.QRG_Anz);
|
|||
|
if found then
|
|||
|
begin
|
|||
|
with TNC[TNC_Nr]^ do if QRG_Akt <> G^.QRG[i].QRG then
|
|||
|
begin
|
|||
|
QRG_Akt := G^.QRG[i].QRG;
|
|||
|
Status2;
|
|||
|
TicStr := ConstStr(B1,TL);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
Stelle := 0;
|
|||
|
Repeat
|
|||
|
inc(Stelle);
|
|||
|
found := (RufZ = MH^[Stelle].Call) and (TNC_Nr = MH^[Stelle].TNr);
|
|||
|
Until found or (Stelle = maxMH);
|
|||
|
|
|||
|
if not found then
|
|||
|
begin
|
|||
|
{ for i := maxMH-1 downto 1 do MH^[i+1] := MH^[i]; }
|
|||
|
move(MH^[1],MH^[2],(maxMH-1) * SizeOf(MH_Typ));
|
|||
|
Stelle := 1;
|
|||
|
FillChar(MH^[Stelle],SizeOf(MH_Typ),0);
|
|||
|
end;
|
|||
|
|
|||
|
with MH^[Stelle] do
|
|||
|
begin
|
|||
|
Call := RufZ;
|
|||
|
Zeit := copy(Datum,4,8) + B1 + copy(Uhrzeit,1,5);
|
|||
|
Link := LongDig;
|
|||
|
Qrg := TNC[TNC_Nr]^.QRG_Akt;
|
|||
|
TNr := TNC_Nr;
|
|||
|
if FrRej then inc(Rej);
|
|||
|
if FrUI then inc(UIs);
|
|||
|
end;
|
|||
|
|
|||
|
if (TicAnz > 0) and (LongDig = '') then with TNC[TNC_Nr]^ do if Tic then
|
|||
|
begin
|
|||
|
i := pos(Rufz + B1,TicStr + B1);
|
|||
|
if i > 0 then
|
|||
|
begin
|
|||
|
While TicStr[i] <> B1 do delete(TicStr,i,1);
|
|||
|
delete(TicStr,i,1);
|
|||
|
end else
|
|||
|
begin
|
|||
|
i := length(Rufz) + 1;
|
|||
|
delete(TicStr,Byte(TL+1-i),i);
|
|||
|
end;
|
|||
|
TicStr := Rufz + B1 + TicStr;
|
|||
|
i := TL;
|
|||
|
While (i > 0) and (TicStr[i] <> B1) do
|
|||
|
begin
|
|||
|
TicStr[i] := B1;
|
|||
|
dec(i);
|
|||
|
end;
|
|||
|
if show = 0 then TickerOut;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
Begin
|
|||
|
|
|||
|
LongDig := '';
|
|||
|
AnzDig := 0;
|
|||
|
DirDig := false;
|
|||
|
Zeile := RestStr(Zeile);
|
|||
|
Rufz := CutStr(Zeile);
|
|||
|
FrRej := pos(' ctl REJ',Zeile) > 0;
|
|||
|
FrUI := pos(' ctl UI',Zeile) > 0;
|
|||
|
i := pos(' ctl ',Zeile);
|
|||
|
Zeile := copy(Zeile,1,i-1);
|
|||
|
|
|||
|
i := pos('*',Zeile);
|
|||
|
if i > 0 then
|
|||
|
begin
|
|||
|
DirDig := true;
|
|||
|
Zeile := copy(Zeile,1,i-1);
|
|||
|
delete(Zeile,1,pos(' via ',Zeile)+4);
|
|||
|
|
|||
|
While pos(B1,Zeile) > 0 do
|
|||
|
begin
|
|||
|
LongDig := B1 + CutStr(Zeile) + LongDig;
|
|||
|
Zeile := RestStr(Zeile);
|
|||
|
inc(AnzDig);
|
|||
|
end;
|
|||
|
LongDig := CutStr(Zeile) + LongDig;
|
|||
|
inc(AnzDig);
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
MH_Update(TNC_Nr);
|
|||
|
|
|||
|
if DirDig then
|
|||
|
begin
|
|||
|
Rufz := CutStr(LongDig);
|
|||
|
LongDig := '';
|
|||
|
AnzDig := 0;
|
|||
|
FrRej := false;
|
|||
|
FrUI := false;
|
|||
|
MH_Update(TNC_Nr);
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
Procedure Screen_aus (* Art : Byte *);
|
|||
|
Var i : Byte;
|
|||
|
Begin
|
|||
|
if not ScreenSTBY then
|
|||
|
Begin
|
|||
|
if (show > 0) and not BackScroll(show) then
|
|||
|
Begin
|
|||
|
case Art of
|
|||
|
1 : dec(ScreenTimer);
|
|||
|
2 : ScreenTimer := 0;
|
|||
|
end;
|
|||
|
if ScreenTimer = 0 then
|
|||
|
begin
|
|||
|
Teil_Bild_Loesch(1,maxZ,0);
|
|||
|
ScreenSTBY := true;
|
|||
|
end;
|
|||
|
End else if Art = 2 then Alarm;
|
|||
|
End;
|
|||
|
End;
|
|||
|
|
|||
|
Function Str_Int(Ein : String) : Longint;
|
|||
|
Var Zahl : LongInt;
|
|||
|
Fehl : integer;
|
|||
|
begin
|
|||
|
Val (Ein, Zahl, Fehl);
|
|||
|
if Fehl > 0 then Zahl:=0;
|
|||
|
Str_Int:=Zahl;
|
|||
|
end;
|
|||
|
|
|||
|
Function QuietPruefen(RS, RM:byte) : Boolean;
|
|||
|
var DummyFlag : Boolean;
|
|||
|
ZZ : Byte;
|
|||
|
|
|||
|
begin
|
|||
|
DummyFlag:=false;
|
|||
|
for ZZ:=1 to 3 do
|
|||
|
begin
|
|||
|
if (quietZeitG) and (konfig.QuietZt[zz].aktiv) then
|
|||
|
with Konfig.QuietZt[Zz] do
|
|||
|
begin
|
|||
|
if (RS > StdAnf) and (RS < StdEnd) then DummyFlag:=true;
|
|||
|
if (RS = STdAnf) and (StdAnf<>StdEnd) then
|
|||
|
if RM >= MinAnf then DummyFlag:=True;
|
|||
|
if (RS = StdEnd) and (StdAnf<>StdEnd) then
|
|||
|
if RM < MinEnd then DummyFlag:=true;
|
|||
|
|
|||
|
if (StdAnf=StdEnd) and (RS=StdAnf) then
|
|||
|
if (RM < MinEnd) and (RM >= MinAnf) then DummyFlag:=true;
|
|||
|
|
|||
|
end; {with}
|
|||
|
end; {for}
|
|||
|
QuietPruefen:=DummyFlag;
|
|||
|
end;
|
|||
|
|
|||
|
Procedure Uhr_aus;
|
|||
|
Var Zeit : String[8];
|
|||
|
j, i : Byte;
|
|||
|
HStr : Byte;
|
|||
|
QuietM: boolean;
|
|||
|
rstd,
|
|||
|
min2,
|
|||
|
rmin,
|
|||
|
sec2 : integer;
|
|||
|
rsec : longint;
|
|||
|
h1, h2,
|
|||
|
mn1,mn2,
|
|||
|
s1,s2 : byte;
|
|||
|
srec : SearchRec;
|
|||
|
Dummy : string;
|
|||
|
flag : boolean;
|
|||
|
TNCflag : Boolean;
|
|||
|
|
|||
|
Begin
|
|||
|
Zeit := Uhrzeit;
|
|||
|
TNCFlag:=false;
|
|||
|
|
|||
|
{$IFDEF Sound}
|
|||
|
if (length(WavStream)>0) then
|
|||
|
begin
|
|||
|
sprachwav;
|
|||
|
end else
|
|||
|
if not playing then StopWave_;
|
|||
|
{$ENDIF}
|
|||
|
|
|||
|
{ if TXOffen=0 then TXOffen:=1;
|
|||
|
if TXBed=0 then TXBed:=1;}
|
|||
|
|
|||
|
if copy(Zeit,7,2) <> copy(ZeitMerk,7,2) then
|
|||
|
begin
|
|||
|
if (not BackupJetzt) and (BackupProc) then
|
|||
|
if ((str_int(copy(Zeit,4,2)) Mod Konfig.BackUpTime)=0) then
|
|||
|
begin
|
|||
|
BackupJetzt:=True;
|
|||
|
end;
|
|||
|
if (Konfig.BackUpTime>0) and (BackupProc) and (BackupJetzt) and (not BackupBremsen) then
|
|||
|
begin {and (not BackupBremsen)}
|
|||
|
{ M_aus(Attrib[28],#13+'****Sicherung*** '+copy(zeit,4,2)+':'+int_str(Konfig.BackUpTime)+#13, 2);}
|
|||
|
Sicherung_Speichern;
|
|||
|
BackupProc:=false;
|
|||
|
BackupJetzt:=false;
|
|||
|
end;
|
|||
|
if (not BackupProc) and (Konfig.BackUpTime>0) and ((str_int(copy(Zeit,4,2)) Mod Konfig.BackUpTime)=Konfig.BackupTime-1)
|
|||
|
then BackupProc:=True;
|
|||
|
{ _aus(Attrib[20],kanal,ZeitMerk +'<Merk | Zeit>'+Zeit + M1);}
|
|||
|
(*
|
|||
|
{Beginn: TNC Zeit-Sharing}
|
|||
|
|
|||
|
inc(TXZeit);
|
|||
|
if (TXZeit>TXZMax-1) and (TXZeit<250) then
|
|||
|
begin
|
|||
|
TXBed:=0;
|
|||
|
for i:=TXOffen+1 to MaxTNC do
|
|||
|
begin
|
|||
|
if (TNC_used[i]) and (TNC[i]^.TXBedarf) and (TXBed=0) then TXBed:=i;
|
|||
|
end; {for TXOffen}
|
|||
|
|
|||
|
if TXBed=0 then
|
|||
|
begin
|
|||
|
for i:=1 to TXOffen do
|
|||
|
begin
|
|||
|
if (TNC_used[i]) and (TNC[i]^.TXBedarf) and (TXBed=0) then TXBed:=i;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if TXBed=0 then TXBed:=TXOffen;
|
|||
|
|
|||
|
if TXBed<>TXOffen then
|
|||
|
begin
|
|||
|
TNC[TXOffen]^.TXBedarf:=FAlse;
|
|||
|
TNC[TXOffen]^.TXGesperrt:=true;
|
|||
|
S_Pac(Tnc[TXOffen]^.Kvon, CM, TRUE, 'X0');
|
|||
|
TXZeit:=255-TXSicher+1;
|
|||
|
end else TXZeit:=1;
|
|||
|
end; {if txzeit>6}
|
|||
|
|
|||
|
if (TXZeit=0) then
|
|||
|
begin
|
|||
|
|
|||
|
TXOffen:=TXBed;
|
|||
|
|
|||
|
TNC[TXOffen]^.txGesperrt:=false;
|
|||
|
TXZeit:=0;
|
|||
|
S_Pac(TNC[TXOffen]^.KVon, CM, true, 'X1');
|
|||
|
|
|||
|
end; {if TXZeit}
|
|||
|
|
|||
|
|
|||
|
{Ende: TNC Zeit-Sharing}
|
|||
|
*)
|
|||
|
|
|||
|
|
|||
|
rstd:=Str_Int(Copy(Zeit,1,2));
|
|||
|
rmin:=Str_Int(Copy(Zeit,4,2));
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if (rstd in [0,1,2]) and (not gotlastdt) and (copy(zeit,7,2)<>'00') then
|
|||
|
begin
|
|||
|
getdate(Jahr_,Monat_, Tag_, woTag_);
|
|||
|
{_aus(Attrib[20],kanal,'Datum2 geholt: '+int_str(Tag_)+'.'+int_str(monat_) + M1);}
|
|||
|
gotlastdt:=true;
|
|||
|
end;
|
|||
|
if rstd>2 then gotlastdt:=false;
|
|||
|
|
|||
|
if quietZeitG then quiet:=QuietPruefen(Rstd, Rmin);
|
|||
|
quietM:=quiet;
|
|||
|
if QuietM<>Quiet then
|
|||
|
begin
|
|||
|
Klingel:=not quiet;
|
|||
|
SetzeFlags(show);
|
|||
|
end;
|
|||
|
|
|||
|
RSEC:=0;
|
|||
|
|
|||
|
h2:=Str_Int(Copy(Zeit,1,2));
|
|||
|
h1:=Str_Int(Copy(ZeitMerk,1,2));
|
|||
|
mn2:=Str_Int(Copy(Zeit,4,2));
|
|||
|
mn1:=Str_Int(Copy(ZeitMerk,4,2));
|
|||
|
s2:=Str_Int(Copy(Zeit,7,2));
|
|||
|
s1:=Str_Int(Copy(ZeitMerk,7,2));
|
|||
|
|
|||
|
if h1<=h2 then rstd:=h2-h1;
|
|||
|
if h1>h2 then
|
|||
|
begin
|
|||
|
rstd:=24-h1;
|
|||
|
rstd:=rstd+(h2);
|
|||
|
end;
|
|||
|
rmin:=mn2-mn1;
|
|||
|
rsec:=s2-s1;
|
|||
|
rsec:=rsec+(rmin*60)+((rstd*60)*60);
|
|||
|
|
|||
|
if NowFenster and (Box_Time > 0) then
|
|||
|
begin
|
|||
|
{ BoxZaehl := Pred(BoxZaehl); loesst Integer-Ueberlauf aus, }
|
|||
|
{ besser und schneller: //db1ras }
|
|||
|
Dec(BoxZaehl);
|
|||
|
if BoxZaehl <= 0 then Neu_Bild;
|
|||
|
end;
|
|||
|
|
|||
|
if (not Quiet_Uhr) or (not Quiet) then StatusOut(show,13,4,Attrib[10],Zeit,1);
|
|||
|
if quiet and Quiet_Uhr then StatusOut(show, 13, 4, Attrib[10], '*QUIET* ', 1);
|
|||
|
|
|||
|
Quiet_Uhr:=not Quiet_Uhr;
|
|||
|
if (not Scan_) or (not Quiet_Uhr) then StatusOut(show,61,1,Attrib[10],EFillStr(20,B1,Versi),3);
|
|||
|
if (Scan_) and (Quiet_Uhr) then StatusOut(show,61,1,Attrib[10],'* * * ! SCAN ! * * *',3);
|
|||
|
|
|||
|
if ScreenSTBY then ScreenFill;
|
|||
|
|
|||
|
if HardCur then if not JumpRxScr then
|
|||
|
begin
|
|||
|
JumpRxZaehl := pred(JumpRxZaehl);
|
|||
|
if JumpRxZaehl <= 0 then JumpRxScr := true;
|
|||
|
end;
|
|||
|
|
|||
|
for i := 1 to maxLink do
|
|||
|
begin
|
|||
|
with K[i]^ do
|
|||
|
begin
|
|||
|
{NODE-TimeOut}
|
|||
|
if (Node) and (NTimeOut>0) then
|
|||
|
begin
|
|||
|
{NodeTimeOut:=NodeTimeOut-RSec;}
|
|||
|
dec(NodeTimeOut);
|
|||
|
if NodeTimeOut<1 then
|
|||
|
begin
|
|||
|
if Connected then begin
|
|||
|
s_pac(i,Nu,True,M2+'*TIMEOUT!*'+M1);
|
|||
|
S_PAC(i,CM,true,'D');
|
|||
|
{*} L_OFF(i);
|
|||
|
Rufz_TNC_init(i);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
{TERMINAL-TimeOut}
|
|||
|
if (not Node) and (Konfig.TTimeOut>0) then
|
|||
|
begin
|
|||
|
{TermTimeOut:=TermTimeOut-RSec;}
|
|||
|
dec(termTimeOut);
|
|||
|
if TermTimeOut<1 then
|
|||
|
begin
|
|||
|
if Connected then begin
|
|||
|
s_pac(i,Nu,True,m2+'*TIMEOUT!*'+M1);
|
|||
|
S_PAC(i,CM,true,'D');
|
|||
|
{*} L_OFF(i);
|
|||
|
Rufz_TNC_init(i);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
HoldLauf:=HoldLauf-rsec;
|
|||
|
if Hold and not (SPlsave or Xbin.TX or XBin.RX or FileSend or Einstiegskanal or AusstiegsKanal)
|
|||
|
and (HoldLauf<=0) then
|
|||
|
begin
|
|||
|
S_PAC(i,NU,true,HoldStr);
|
|||
|
if not HardCur then InfoOut(i,0,1,HoldStr);
|
|||
|
HoldLauf:=HoldTime * 60;
|
|||
|
end;
|
|||
|
if CSelf = 4 then
|
|||
|
begin
|
|||
|
dec(AutoWait);
|
|||
|
if AutoWait = 0 then CSelf := 3;
|
|||
|
end;
|
|||
|
end; {** with k... **}
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if copy(Zeit,4,2) <> copy(ZeitMerk,4,2) then
|
|||
|
Begin
|
|||
|
inc(LaufZeit);
|
|||
|
inc(NoActivity);
|
|||
|
{$IFNDEF no_Bake} {//db1ras}
|
|||
|
for i := 1 to TNC_Anzahl do
|
|||
|
begin
|
|||
|
|
|||
|
with TNC[i]^ do
|
|||
|
begin
|
|||
|
Dec(MailBakenTimer);
|
|||
|
if (MailBake) and (MailBakenTimer=0) then
|
|||
|
begin
|
|||
|
K[0]^.TncNummer := i;
|
|||
|
S_PAC(0,CM,true,'C' + B1 + Konfig.OwnMailPfad);
|
|||
|
FindFirst(Konfig.MailVerz + S_ch + MsgExt,Archive,srec);
|
|||
|
flag:=false;
|
|||
|
if DosError = 0 then
|
|||
|
begin
|
|||
|
S_PAC(0,NU,false,InfoZeile(392)+B1);
|
|||
|
Dummy := '';
|
|||
|
end else Flag := true;
|
|||
|
While DosError = 0 do
|
|||
|
begin
|
|||
|
Dummy:=srec.Name;
|
|||
|
delete(Dummy,pos('.',Dummy),length(Dummy));
|
|||
|
S_PAC(0,NU,false,DUMMY+B1);
|
|||
|
Dummy := '';
|
|||
|
FindNext(srec);
|
|||
|
end;
|
|||
|
if not flag then S_PAC(0,NU,true,m1);
|
|||
|
S_PAC(0,CM,true,'C' + B1 + BPFad);
|
|||
|
|
|||
|
MailBakenTimer:=MailBakenZeit;
|
|||
|
end;
|
|||
|
if Bake then
|
|||
|
begin
|
|||
|
if (LaufZeit mod BTimer) = 0 then
|
|||
|
begin
|
|||
|
K[0]^.TncNummer := i;
|
|||
|
S_PAC(0,CM,true,'C' + B1 + BPfad);
|
|||
|
if BCall<>'' then S_PAC(0,CM,true,'I' + B1 + BCALL);
|
|||
|
S_PAC(0,NU,true,BText);
|
|||
|
if BCall<>'' then
|
|||
|
begin
|
|||
|
S_PAC(0,CM,true,'I' + B1 + HostCall);
|
|||
|
for j:=1 to maxlink do Rufz_TNC_Init(j);
|
|||
|
end;
|
|||
|
end;
|
|||
|
if show = 0 then Unproto_darstellen;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
{$ENDIF}
|
|||
|
|
|||
|
for i := 1 to maxLink do with K[i]^do
|
|||
|
begin
|
|||
|
if CSelf = 1 then if AutoTime = copy(Zeit,1,5) then CSelf := 3;
|
|||
|
if CSelf = 2 then
|
|||
|
begin
|
|||
|
inc(AutoZyCount);
|
|||
|
if AutoZyCount >= AutoZyConst then CSelf := 3;
|
|||
|
end;
|
|||
|
if CSelf = 3 then AutoToAnz := AutoToMax;
|
|||
|
if (CSelf in [5,6]) and (AutoToCount > 0) then
|
|||
|
begin
|
|||
|
dec(AutoToCount);
|
|||
|
if AutoToCount = 0 then
|
|||
|
begin
|
|||
|
CSelf := 9;
|
|||
|
if AutoToAnz > 0 then
|
|||
|
begin
|
|||
|
dec(AutoToAnz);
|
|||
|
if AutoToAnz = 0 then CSelf := 10;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
{if Hold and not (FileSend or Einstiegskanal or AusstiegsKanal)
|
|||
|
and ((LaufZeit mod HoldTime) = 0) then}
|
|||
|
|
|||
|
if Hold and not (FileSend or Einstiegskanal or AusstiegsKanal)
|
|||
|
and (HoldLauf<=0) then
|
|||
|
begin
|
|||
|
S_PAC(i,NU,true,HoldStr);
|
|||
|
if not HardCur then InfoOut(i,0,1,HoldStr);
|
|||
|
HoldLauf:=HoldTime * 60;
|
|||
|
end;
|
|||
|
|
|||
|
end;
|
|||
|
|
|||
|
if ScreenInit > 0 then Screen_aus(1);
|
|||
|
end;
|
|||
|
ZeitMerk := Zeit;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
(* TNC-Nachricht abholen und auswerten. Nur nach einem SendTNC ansprechen !!! *)
|
|||
|
Procedure GetTNC (* Kanal : Byte *);
|
|||
|
var j,i,i1,i2,
|
|||
|
iz,ix,
|
|||
|
Attr,
|
|||
|
TNC_Nr : Byte;
|
|||
|
CheckAnwesend1,
|
|||
|
Flag : Boolean;
|
|||
|
Datei : Text;
|
|||
|
hcall,
|
|||
|
hcall2 : Str9;
|
|||
|
MailZeile,
|
|||
|
Bstr : String;
|
|||
|
Dummy : String;
|
|||
|
IdStr : String[5];
|
|||
|
BinFrame2,
|
|||
|
BinFrame : Boolean;
|
|||
|
Broadc1 : BroadCast;
|
|||
|
Broadc2 : BroadCast;
|
|||
|
|
|||
|
|
|||
|
Procedure Port_Ident(Kanal : Byte; var Col : Byte);
|
|||
|
var HfPort,i : Byte;
|
|||
|
flag : Boolean;
|
|||
|
Begin
|
|||
|
with K[Kanal]^ do
|
|||
|
begin
|
|||
|
i := pos(DP,Response);
|
|||
|
if i > 0 then
|
|||
|
begin
|
|||
|
HfPort := str_int(Response[i-1]);
|
|||
|
delete(Response,i-1,2);
|
|||
|
KillStartBlanks(Response);
|
|||
|
i := 1;
|
|||
|
flag := false;
|
|||
|
Repeat
|
|||
|
if (TNC[i]^.DRSI = TNC[K[Kanal]^.TncNummer]^.DRSI) and
|
|||
|
(TNC[i]^.HF_Port = HfPort) then flag := true else inc(i);
|
|||
|
Until flag or (i > TNC_Anzahl);
|
|||
|
if flag then Col := i
|
|||
|
else Col := 1;
|
|||
|
IdStr := TNC[Col]^.Ident;
|
|||
|
if length(IdStr) > 0 then IdStr := EFillStr(5,B1,IdStr)
|
|||
|
else IdStr := '';
|
|||
|
end else
|
|||
|
begin
|
|||
|
IdStr := Channel_Id(Kanal);
|
|||
|
Col := TncNummer;
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
Function Rufzeichen(Zeiger : Integer) : Str9;
|
|||
|
Var i : Integer;
|
|||
|
Bstr : Str9;
|
|||
|
Begin
|
|||
|
with K[0]^ do
|
|||
|
begin
|
|||
|
Bstr := '';
|
|||
|
for i := Zeiger to Zeiger + 5 do
|
|||
|
if Response[i] <> #64 then Bstr := Bstr + Chr(Ord(Response[i]) DIV 2);
|
|||
|
if (Ord(Response[Zeiger+6]) DIV 2) <> 48 then
|
|||
|
begin
|
|||
|
i := (Ord(Response[Zeiger+6]) DIV 2) - 48;
|
|||
|
if (i < 0) or (i > 15) then Bstr := Bstr + '-?'
|
|||
|
else if (i <> 0) then Bstr := Bstr + '-' + int_str(i);
|
|||
|
end;
|
|||
|
end;
|
|||
|
Rufzeichen := Bstr;
|
|||
|
End;
|
|||
|
|
|||
|
Function Flags : Str8;
|
|||
|
Const Flag_str = 'CNMR';
|
|||
|
Var Bstr : Str8;
|
|||
|
flgs, i : Integer;
|
|||
|
Begin
|
|||
|
with K[0]^ do
|
|||
|
begin
|
|||
|
Bstr := '';
|
|||
|
flgs := ord(Response[20]) SHR 4;
|
|||
|
for i := 1 to 4 do
|
|||
|
begin
|
|||
|
if flgs mod 2 <> 0 then Bstr := Copy(Flag_str, i, 1) + Bstr
|
|||
|
else Bstr := '*' + Bstr;
|
|||
|
flgs := flgs SHR 1;
|
|||
|
end;
|
|||
|
end;
|
|||
|
Flags := B1 + Bstr + B1;
|
|||
|
End;
|
|||
|
|
|||
|
{$IFNDEF no_Netrom} {//db1ras}
|
|||
|
Procedure SaveBroadCast;
|
|||
|
Var BcDatNam : string[12];
|
|||
|
BCDat : File of Broadcast;
|
|||
|
AnzNds,
|
|||
|
IOR : word;
|
|||
|
DPs : longint;
|
|||
|
donotsave: boolean;
|
|||
|
BCFlag : boolean;
|
|||
|
|
|||
|
begin
|
|||
|
AnzNds:=NodesAnzahl(TNC[Broadc1.Port]^.AfuPort);
|
|||
|
if TNC[Broadc1.Port]^.AfuPort then BCDatNam:=BCastHAM else BCDatnam:=BCastCB;
|
|||
|
assign (BCDat, sys1pfad+BCDatNam);
|
|||
|
BCFlag:=true;
|
|||
|
donotsave:=false;
|
|||
|
if BroadC1.SourceCall='' then BroadC1.SourceCall:=BroadC1.SourceAlias;
|
|||
|
if BroadC1.NodeCall='' then BroadC1.NodeCall:=BroadC1.NodeAlias;
|
|||
|
{$I-}
|
|||
|
reset(BCDat);
|
|||
|
ior:=ioresult;
|
|||
|
if ior<>0 then REwrite(BCDat);
|
|||
|
if ioresult<1 then ior:=ior;
|
|||
|
if (ior=0) and (anznds>0) then
|
|||
|
begin
|
|||
|
DPs:=0;
|
|||
|
bcflag:=false;
|
|||
|
while ((not EOF(BCDat)) and (not bcFlag)) do
|
|||
|
begin
|
|||
|
read(BCDat, BroadC2);
|
|||
|
if (BroadC1.NodeCall=BroadC2.NodeCall) and
|
|||
|
(BroadC1.NodeAlias=BroadC2.NodeAlias) then
|
|||
|
begin
|
|||
|
if (Broadc2.quality <= Broadc1.quality) then BCFlag:=true
|
|||
|
else
|
|||
|
begin
|
|||
|
bcflag:=true;
|
|||
|
doNotSave:=true;
|
|||
|
end;
|
|||
|
end;
|
|||
|
if not BCFlag then inc(DPs);
|
|||
|
end; {while}
|
|||
|
if BCFlag then seek(BCDat, Dps);
|
|||
|
if not BCFlag then
|
|||
|
if anznds<Konfig.MaxNodes then BCFlag:=true;
|
|||
|
end;
|
|||
|
|
|||
|
if (BCFlag) and (not DoNotSave) and (BroadC1.NodeCall<>'') and (BroadC1.NodeAlias<>'') then
|
|||
|
begin
|
|||
|
{ior:=NodesAnzahl(TNC[Broadc1.Port]^.AfuPort);}
|
|||
|
write(BCDat, BroadC1);
|
|||
|
{ior:=NodesAnzahl(TNC[Broadc1.Port]^.AfuPort);}
|
|||
|
ior:=ior;
|
|||
|
end;
|
|||
|
doNotSave:=false;
|
|||
|
ior:=ioresult;
|
|||
|
Close(BCDat);
|
|||
|
ior:=ioresult;
|
|||
|
{ior:=NodesAnzahl(TNC[Broadc1.Port]^.AfuPort)}
|
|||
|
{$I+}
|
|||
|
end;
|
|||
|
{$ENDIF}
|
|||
|
|
|||
|
Begin
|
|||
|
Kanal2:=kanal;
|
|||
|
if TNC[K[Kanal]^.TncNummer]^.TNC_im_Host then with K[Kanal]^ do
|
|||
|
begin
|
|||
|
TNC_Nr := V24(Kanal);
|
|||
|
|
|||
|
get_Response(Kanal);
|
|||
|
CheckAnwesend1:=false;
|
|||
|
If not (OverRun or SynchError) then
|
|||
|
Case TNC_Code of
|
|||
|
0 : Begin (* success, no info *)
|
|||
|
Response := '';
|
|||
|
Ausgabe := true;
|
|||
|
TncNix := true;
|
|||
|
End;
|
|||
|
1 : Begin (* success with info (null-terminated) *)
|
|||
|
if TNC[TncNummer]^.DRSI > 0 then Port_ident(Kanal,ix)
|
|||
|
else IdStr := Channel_Id(Kanal);
|
|||
|
if Ausgabe then
|
|||
|
begin
|
|||
|
if TNC_ReadOut then InfoOut(Kanal,0,1,IdStr + Response)
|
|||
|
else M_aus(Attrib[28],IdStr + Response +^J, Kanal);
|
|||
|
end;
|
|||
|
Ausgabe := true;
|
|||
|
End;
|
|||
|
2 : Begin (* failure with info (null-terminated) *)
|
|||
|
if Ausgabe then InfoOut(Kanal,1,1,Channel_Id(Kanal) + Response);
|
|||
|
Ausgabe := true;
|
|||
|
End;
|
|||
|
3 : Begin (* Link Status (null-terminated) *)
|
|||
|
if TNC[TncNummer]^.DRSI > 0 then Port_ident(Kanal,ix)
|
|||
|
else IdStr := Channel_Id(Kanal);
|
|||
|
|
|||
|
If pos(LSM[1],Response) > 0 then
|
|||
|
Begin (* BUSY fm ... *)
|
|||
|
if Fwd then CancelMailPoll(Kanal);
|
|||
|
delete(Response,1,12);
|
|||
|
Response := BusyStr + Response;
|
|||
|
_aus(Attrib[20],Kanal,Response + M1);
|
|||
|
Kanal_benutz := false;
|
|||
|
if AusstiegsKanal then
|
|||
|
begin
|
|||
|
S_PAC(GegenKanal,NU,true,M2 + Response + M1);
|
|||
|
Send_Prompt(GegenKanal,FF);
|
|||
|
RemConInit(Kanal);
|
|||
|
end;
|
|||
|
Auto_CON := false;
|
|||
|
outside:=TRUE;
|
|||
|
Rufz_TNC_init(Kanal);
|
|||
|
SetzeFlags(Kanal);
|
|||
|
End else
|
|||
|
|
|||
|
If pos(LSM[2],Response) > 0 then
|
|||
|
Begin (* CONNECTED to ... *)
|
|||
|
SystemErkannt:='';
|
|||
|
if not Rekonnekt then
|
|||
|
begin
|
|||
|
Rekonnekt := false;
|
|||
|
Kanal_benutz := true;
|
|||
|
L_ON(Kanal,Response,true,false);
|
|||
|
Line_ON(Kanal);
|
|||
|
end else InfoOut(Kanal,1,1,'Reconnect to ' + Call);
|
|||
|
End else
|
|||
|
|
|||
|
If pos(LSM[3],Response) > 0 then
|
|||
|
Begin (* LINK RESET fm ... *)
|
|||
|
Response := RestStr(Response);
|
|||
|
_aus(Attrib[20],Kanal,Star + Response + M1);
|
|||
|
Kanal_benutz := true;
|
|||
|
End else
|
|||
|
|
|||
|
If pos(LSM[4],Response) > 0 then
|
|||
|
Begin (* LINK RESET to ... *)
|
|||
|
Response := RestStr(Response);
|
|||
|
_aus(Attrib[20],Kanal,Star + Response + M1);
|
|||
|
Kanal_benutz := true;
|
|||
|
End else
|
|||
|
|
|||
|
If pos(LSM[5],Response) > 0 then
|
|||
|
Begin (* DISCONNECTED *)
|
|||
|
Rekonnekt := false;
|
|||
|
if Conv.Active then ConversQuit(Kanal);
|
|||
|
{*} {mu<6D> bleiben!!} L_Off(Kanal);
|
|||
|
Rufz_TNC_init(Kanal);
|
|||
|
if EinstiegsKanal then
|
|||
|
begin
|
|||
|
S_PAC(GegenKanal,CM,true,'D');
|
|||
|
{*>>} { L_off(GegenKanal);}
|
|||
|
end;
|
|||
|
if AusstiegsKanal then
|
|||
|
begin
|
|||
|
if K[GegenKanal]^.RemConReady then
|
|||
|
begin
|
|||
|
S_PAC(GegenKanal,NU,false,M2 + ReconStr +
|
|||
|
K[GegenKanal]^.OwnCall+M2);
|
|||
|
Send_Prompt(GegenKanal,FF);
|
|||
|
end;
|
|||
|
RemConInit(Kanal);
|
|||
|
end;
|
|||
|
End else
|
|||
|
|
|||
|
If pos(LSM[6],Response) > 0 then
|
|||
|
Begin (* LINK FAILURE with ... *)
|
|||
|
if Fwd then CancelMailPoll(Kanal);
|
|||
|
if Conv.Active then ConversQuit(Kanal);
|
|||
|
if EinstiegsKanal then
|
|||
|
begin
|
|||
|
S_PAC(GegenKanal,CM,true,'D');
|
|||
|
{*>>} {L_Off(GegenKanal);}
|
|||
|
end;
|
|||
|
if AusstiegsKanal then
|
|||
|
begin
|
|||
|
if Auto_Con then S_PAC(GegenKanal,NU,false,M2 + FailStr + Ziel_Call + M1) else
|
|||
|
begin
|
|||
|
if connected
|
|||
|
then S_PAC(GegenKanal,NU,false,M1 + ReconStr + K[GegenKanal]^.OwnCall+M1)
|
|||
|
else S_PAC(GegenKanal,NU,false,M2 + Star + Response + M1);
|
|||
|
end;
|
|||
|
Send_Prompt(GegenKanal,FF);
|
|||
|
RemConInit(Kanal);
|
|||
|
end;
|
|||
|
{*} L_Off(Kanal);
|
|||
|
Rufz_TNC_init(Kanal);
|
|||
|
End else
|
|||
|
|
|||
|
If pos(LSM[7],Response) > 0 then
|
|||
|
Begin (* CONNECT REQUEST fm ... *)
|
|||
|
if Klingel then Beep(600,70);
|
|||
|
InfoOut(show,1,1,Star + IdStr + Response);
|
|||
|
End else
|
|||
|
|
|||
|
If pos(LSM[8],Response) > 0 then
|
|||
|
Begin (* FRAME REJECT fm ... *)
|
|||
|
Response := RestStr(Response);
|
|||
|
_aus(Attrib[20],Kanal,Star + Response + M1);
|
|||
|
End else
|
|||
|
|
|||
|
If pos(LSM[9],Response) > 0 then
|
|||
|
Begin (* FRAME REJECT to ... *)
|
|||
|
Response := RestStr(Response);
|
|||
|
_aus(Attrib[20],Kanal,Star + Response + M1);
|
|||
|
End else
|
|||
|
Begin (* Unbekannt *)
|
|||
|
_aus(Attrib[20],Kanal,InfoZeile(106) + Response + M1);
|
|||
|
End;
|
|||
|
End;
|
|||
|
4 : Begin (* Monitor header, no info (null-terminated) *)
|
|||
|
CheckAnwesend1:=true;
|
|||
|
if TNC[TncNummer]^.DRSI > 0 then
|
|||
|
begin
|
|||
|
Port_Ident(0,ix); {Faktor COLOR-eintr<74>ge/TNC}
|
|||
|
ColMon := ColMonBeg + ix * 4 - 3;
|
|||
|
MH_Check(ix,Response);
|
|||
|
end else
|
|||
|
begin
|
|||
|
ix := TncNummer;
|
|||
|
ColMon := ColMonBeg + ix * 4 - 3;
|
|||
|
IdStr := Channel_Id(0);
|
|||
|
MH_Check(ix,Response);
|
|||
|
end;
|
|||
|
|
|||
|
TNC_K := (pos(' - ',Response) > 0); (* K auf 2 gesetzt ? *)
|
|||
|
|
|||
|
if Mon_Anz > 0 then
|
|||
|
begin
|
|||
|
for i := 1 to maxLink do with K[i]^.Mo do
|
|||
|
begin
|
|||
|
if MonActive and MonDisAbr then
|
|||
|
if (pos(MonStr[1]+B1,K[0]^.Response) > 0) or
|
|||
|
(pos(MonStr[2]+B1,K[0]^.Response) > 0) then
|
|||
|
begin
|
|||
|
if (pos(' ctl DISC',K[0]^.Response) > 0) or
|
|||
|
(pos(' ctl DM',K[0]^.Response) > 0) then
|
|||
|
begin
|
|||
|
_aus(Attrib[20],i,M1 + InfoZeile(437) + B1 +
|
|||
|
RestStr(K[0]^.Response) + M1);
|
|||
|
Cancel_Call_monitoren(i);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if Drucker then Write_Lpt(0,LptEsc[1]);
|
|||
|
Bstr := FormMonFr(ix,IdStr,Response);
|
|||
|
if (Time_stamp and not TNC_K) then Bstr := Bstr + B1 + '(' + Uhrzeit + ')';
|
|||
|
if not RxLRet then Bstr := ^J + Bstr;
|
|||
|
M_aus(Attrib[ColMon],Bstr + ^J, Kanal);
|
|||
|
if Drucker then Write_Lpt(0,LptEsc[2]);
|
|||
|
|
|||
|
(* hcall2:=copy(Bstr,pos('fm ',Bstr)+3,9);
|
|||
|
if pos(' ',hcall2)>0 then delete(hcall2,Pos(' ',hcall2),length(hcall2));
|
|||
|
j:=0;
|
|||
|
if pos('-',hcall2)>0 then
|
|||
|
j:=str_int(Copy(Hcall2,Pos('-',Hcall2)+1,Pos('-',Hcall2)+3));
|
|||
|
strip(hcall2);
|
|||
|
i1:=0;
|
|||
|
while length(Hcall2)>0 do
|
|||
|
begin
|
|||
|
inc(i1);
|
|||
|
if not (hcall2[i1] in ['a'..'z', 'A'..'Z', '1'..'9','0']) then hcall2:='';
|
|||
|
end;
|
|||
|
|
|||
|
if hcall2>'' then
|
|||
|
for i1:=1 to maxAnwesend do
|
|||
|
begin
|
|||
|
HCall:=Anwesend[i1]^.Call;
|
|||
|
strip(HCall);
|
|||
|
if hcall=hcall2 then
|
|||
|
for i:=0 to 15 do
|
|||
|
begin
|
|||
|
if (j = Anwesend[i1]^.SSids[i]) then
|
|||
|
begin
|
|||
|
Anwesend[i1]^.da:=true;
|
|||
|
Anwesend[i1]^.Call:=Hcall;
|
|||
|
if i<>0 then Anwesend[i1]^.Call:=Anwesend[i1]^.Call+'-'+int_str(i);
|
|||
|
end;
|
|||
|
end;
|
|||
|
if Anwesend[i1]^.da then Scan_:=true;
|
|||
|
end;*)
|
|||
|
|
|||
|
End;
|
|||
|
5 : Begin (* Monitor header with info (null-terminated) *)
|
|||
|
CheckAnwesend1:=true;
|
|||
|
if TNC[TncNummer]^.DRSI > 0 then
|
|||
|
begin
|
|||
|
Port_Ident(0,ix);
|
|||
|
ColMon := ColMonBeg + ix * 4 - 3;
|
|||
|
MH_Check(ix,Response);
|
|||
|
end else
|
|||
|
begin
|
|||
|
ix := TncNummer;
|
|||
|
ColMon := ColMonBeg + ix * 4 - 3;
|
|||
|
IdStr := Channel_Id(0);
|
|||
|
MH_Check(ix,Response);
|
|||
|
end;
|
|||
|
|
|||
|
TNC_K := (pos(' - ',Response) > 0); (* K auf 2 gesetzt ? *)
|
|||
|
|
|||
|
G^.HeaderStr := Response;
|
|||
|
|
|||
|
if Drucker then Write_Lpt(0,LptEsc[1]);
|
|||
|
Bstr := FormMonFr(ix,IdStr,Response);
|
|||
|
|
|||
|
NetRom:=false;
|
|||
|
if (pos(' pid CF', Bstr) > 0) then
|
|||
|
begin
|
|||
|
NetRom:=true;
|
|||
|
i := pos(' to ', Bstr);
|
|||
|
j := i;
|
|||
|
i := i - 1;
|
|||
|
while (Copy(Bstr, i, 1) <> ' ') and (i > 0) do i := i - 1;
|
|||
|
i := i + 1;
|
|||
|
G^.NRCall := Copy(Bstr, i, j - i);
|
|||
|
end;
|
|||
|
|
|||
|
MailZeile:=UpcaseStr(Bstr);
|
|||
|
delete(mailzeile,1,Pos(' FM ', MailZeile)+3);
|
|||
|
MailFrFlag:=false;
|
|||
|
for i:=1 to 10 do
|
|||
|
begin
|
|||
|
if (Pos(UpcaseStr(MailFrame1+Konfig.MailFrame[i]+MailFrame2), MailZeile)>0) or
|
|||
|
((Pos(UpcaseStr(MailFrame1+Konfig.MailFrame[i]+' VIA'), MailZeile)>0) and
|
|||
|
(Pos(UpcaseStr(MailFrame2), MailZeile)>0)) then
|
|||
|
begin
|
|||
|
MailFrFlag:=true;
|
|||
|
Mail.BoxCall:=copy(Mailzeile,1,Pos(' ',Mailzeile)-1);
|
|||
|
for i1:=1 to maxlink do if K[i1]^.owncall=Mail.BoxCall then
|
|||
|
begin
|
|||
|
Mail.Boxcall:='';
|
|||
|
MailFrFlag:=false;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if Time_stamp and not TNC_K then Bstr := Bstr + B1 + '(' + Uhrzeit + ')';
|
|||
|
if not RxLRet then Bstr := ^J + Bstr;
|
|||
|
M_aus(Attrib[ColMon],Bstr, Kanal);
|
|||
|
if Drucker then Write_Lpt(0,LptEsc[2]);
|
|||
|
|
|||
|
MonCode5 := true;
|
|||
|
End;
|
|||
|
6 : If MonCode5 then (* Monitor info (Byte count) *)
|
|||
|
|
|||
|
if Not NetRom then Begin
|
|||
|
if MailFrFlag then
|
|||
|
begin
|
|||
|
MailZeile:=UpcaseStr(Response);
|
|||
|
i:=0;
|
|||
|
while i<maxlink do
|
|||
|
begin
|
|||
|
inc(i);
|
|||
|
HCall:=UpcaseStr(K[i]^.OwnCall);
|
|||
|
if Pos (HCall, MailZeile)>0 then
|
|||
|
begin
|
|||
|
Mail.ZielCall:= HCall;
|
|||
|
Mail.Uhrzeit := Uhrzeit;
|
|||
|
Mail.Datum := Datum;
|
|||
|
Mail.Port := K[kanal]^.TncNummer;
|
|||
|
Mail.Versuche:= 0;
|
|||
|
MailSpeichern (Mail);
|
|||
|
sound_(2000,5);
|
|||
|
MailInBox:=True;
|
|||
|
SetzeFlags(show);
|
|||
|
end;
|
|||
|
end; {while i<maxlink}
|
|||
|
end; {MailFrame}
|
|||
|
MonCode5 := false;
|
|||
|
BinFrame2:=false;
|
|||
|
i:=length(response);
|
|||
|
Repeat {0..5,15..25,27..31,}
|
|||
|
if ord(Response[i]) in BinMenge
|
|||
|
then BinFrame2 := true;
|
|||
|
dec(i);
|
|||
|
Until BinFrame2 or (i < 1);
|
|||
|
|
|||
|
if (BinFrame2) and (RxComp) then
|
|||
|
begin
|
|||
|
Response := DeCompress(Response, Kanal);
|
|||
|
end;
|
|||
|
|
|||
|
if PacOut then M_aus(Attrib[ColMon],' (' + int_str(TNC_Count) + ')', Kanal);
|
|||
|
M_aus(Attrib[ColMon],^J, Kanal);
|
|||
|
inc(ColMon);
|
|||
|
|
|||
|
Mon_Header_Auswerten;
|
|||
|
|
|||
|
if Mon_Anz > 0 then
|
|||
|
for i := 1 to maxLink do with K[i]^.Mo do
|
|||
|
if MonActive and (MonNow[1] or MonNow[2]) then
|
|||
|
begin
|
|||
|
TNC_Info(i,MonAttr,K[0]^.Response);
|
|||
|
if K[0]^.TNC_Count > 255
|
|||
|
then TNC_Info(i,MonAttr,K[0]^.Response256);
|
|||
|
end;
|
|||
|
|
|||
|
if Drucker then Write_Lpt(Kanal,LptEsc[3]);
|
|||
|
|
|||
|
BinFrame := false;
|
|||
|
if NoBinMon then
|
|||
|
begin
|
|||
|
i := length(Response);
|
|||
|
Repeat {0..5,15..25,27..31,}
|
|||
|
if ord(Response[i]) in BinMenge
|
|||
|
then BinFrame := true;
|
|||
|
dec(i);
|
|||
|
Until BinFrame or (i < 1);
|
|||
|
|
|||
|
if BinFrame then
|
|||
|
begin
|
|||
|
Response := '<BIN';
|
|||
|
if PacOut then Response := Response + RSK +^J
|
|||
|
else Response := Response + B1 +
|
|||
|
int_str(TNC_Count) + RSK +^J;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
M_aus(Attrib[ColMon],Response, Kanal);
|
|||
|
if not BinFrame and (TNC_Count > 255) then
|
|||
|
M_aus(Attrib[ColMon],Response256, Kanal);
|
|||
|
|
|||
|
if Drucker then Write_Lpt(0,LptEsc[4]);
|
|||
|
end
|
|||
|
{$IFNDEF no_Netrom} {//db1ras}
|
|||
|
else {NetRom}
|
|||
|
begin
|
|||
|
inc(ColMon, 2);
|
|||
|
fillChar(Broadc1, sizeOf(Broadc1), 0);
|
|||
|
fillChar(Broadc2, sizeOf(Broadc2), 0);
|
|||
|
if not RxLRet then Bstr := ^J
|
|||
|
else Bstr := '';
|
|||
|
if Response[1] = #255 then
|
|||
|
begin
|
|||
|
|
|||
|
BroadC1.Port :=K[kanal]^.TNCNummer;
|
|||
|
Bstr := Bstr + '> '+InfoZeile(427)+' ';
|
|||
|
if Response[2] <> B1 then
|
|||
|
begin
|
|||
|
i:=2;
|
|||
|
while ((i<8) and (Response[i]<>B1)) do
|
|||
|
begin
|
|||
|
Broadc1.SourceCall := Broadc1.SourceCall + Response[i];
|
|||
|
inc(i);
|
|||
|
end;
|
|||
|
|
|||
|
if Pos('?', Broadc1.SourceCall)>0 then strip(Broadc1.SourceCall);
|
|||
|
Bstr := Bstr + Broadc1.sourceCall+':';
|
|||
|
end;
|
|||
|
Broadc1.SourceAlias:=G^.NRcall;
|
|||
|
if Pos('?', Broadc1.SourceAlias)>0 then strip(Broadc1.SourceAlias);
|
|||
|
Bstr := bstr + Broadc1.sourceAlias + ' <' + M1;
|
|||
|
|
|||
|
|
|||
|
if length(Response) < 10 then
|
|||
|
Bstr := Bstr + '> '+InfoZeile(428)+' <' + M1;
|
|||
|
M_aus(Attrib[ColMon], Bstr, Kanal);
|
|||
|
i := 8;
|
|||
|
|
|||
|
if length(Response)>9 then
|
|||
|
begin
|
|||
|
Broadc1.DatTime:=PackDT;
|
|||
|
while (i+1) < length(Response) do
|
|||
|
begin
|
|||
|
Broadc1.NodeCall:=''; BroadC1.NodeAlias:='';
|
|||
|
Bstr := '';
|
|||
|
for j := i+7 to i+12 do
|
|||
|
if Response[j] <> B1 then Broadc1.NodeCall := Broadc1.NodeCall + Response[j];
|
|||
|
if Pos('?', Broadc1.NodeCall)>0 then strip(Broadc1.NodeCall);
|
|||
|
Bstr:=bstr+Broadc1.NodeCall;
|
|||
|
if Response[i+7] <> B1 then Bstr := Bstr + ':' else BroadC1.Nodealias:='';
|
|||
|
BroadC1.NodeAlias:=Rufzeichen(i);
|
|||
|
if Pos('?', Broadc1.NodeAlias)>0 then strip(Broadc1.NodeAlias);
|
|||
|
Broadc1.quality:=ord(Response[i+20]);
|
|||
|
Bstr := Bstr + Broadc1.nodealias;
|
|||
|
Bstr := EfillStr(21, B1, Bstr) + 'via '
|
|||
|
+ efillstr(11,b1,Rufzeichen(i+13)) +
|
|||
|
'quality: ' + sfillstr(3,b1,int_str(broadc1.quality)) + M1;
|
|||
|
M_aus(Attrib[ColMon], b2+Bstr, Kanal); Inc(i, 21);
|
|||
|
|
|||
|
if Konfig.MaxNodes>0 then SaveBroadCast;
|
|||
|
end; {while}
|
|||
|
end; {if lenght response}
|
|||
|
end else
|
|||
|
begin
|
|||
|
Bstr := Bstr + '[' + Rufzeichen(1) + ' to '
|
|||
|
+ Rufzeichen(8)
|
|||
|
+ ' LT:'+int_str(ord(Response[15])) + B1;
|
|||
|
Case (ord(Response[20]) and 15) of
|
|||
|
1: Begin
|
|||
|
Bstr := Bstr + 'my-Idx:' + int_str(ord(Response[16])) + '/'
|
|||
|
+ int_str(ord(Response[17])) + B1
|
|||
|
+ Rufzeichen(22) + '@'
|
|||
|
+ Rufzeichen(29) + Flags + '<Connect-Req.>]' + M1;
|
|||
|
End;
|
|||
|
2: Begin
|
|||
|
Bstr := Bstr + 'ur-Idx:' + int_str(ord(Response[16])) + '/'
|
|||
|
+ int_str(ord(Response[17])) + B1
|
|||
|
+ 'my-Idx:' + int_str(ord(Response[18])) + '/'
|
|||
|
+ int_str(ord(Response[19]))
|
|||
|
+ Flags + '<Connect-Ack.>]' + M1;
|
|||
|
End;
|
|||
|
3: Begin
|
|||
|
Bstr := Bstr + 'ur-Idx:' + int_str(ord(Response[16])) + '/'
|
|||
|
+ int_str(ord(Response[17]))
|
|||
|
+ Flags + '<Disconnect-Req.>]' + M1;
|
|||
|
End;
|
|||
|
4: Begin
|
|||
|
Bstr := Bstr + 'ur-Idx:' + int_str(ord(Response[16])) + '/'
|
|||
|
+ int_str(ord(Response[17]))
|
|||
|
+ Flags + '<Disconnect-Ack.>]' + M1;
|
|||
|
End;
|
|||
|
5: Begin
|
|||
|
Bstr := Bstr + 'ur-Idx:' + int_str(ord(Response[16])) + '/'
|
|||
|
+ int_str(ord(Response[17])) + B1
|
|||
|
+ 'Tx:' + int_str(ord(Response[18])) + B1
|
|||
|
+ 'Rx:' + int_str(ord(Response[19]))
|
|||
|
+ Flags + '<Info-Trans.>]' + M1;
|
|||
|
M_aus(Attrib[ColMon], Bstr, kanal);
|
|||
|
Dec(ColMon,1);
|
|||
|
Bstr := Copy(Response, 21, length(Response) - 20);
|
|||
|
if K[0]^.TNC_Count > 255 then Bstr := Bstr + K[0]^.Response256;
|
|||
|
if Bstr[length(Bstr)] <> M1 then Bstr := Bstr + M1;
|
|||
|
BinFrame := false;
|
|||
|
|
|||
|
i := length(Bstr);
|
|||
|
Repeat {0..5,15..25,27..31,}
|
|||
|
if ord(Bstr[i]) in BinMenge
|
|||
|
then BinFrame := true;
|
|||
|
dec(i);
|
|||
|
Until BinFrame or (i < 1);
|
|||
|
|
|||
|
if BinFrame then Bstr := DeCompress(Bstr, Kanal);
|
|||
|
|
|||
|
if NoBinMon then
|
|||
|
begin
|
|||
|
if BinFrame then
|
|||
|
begin
|
|||
|
i := length(Bstr);
|
|||
|
BinFrame:=False;
|
|||
|
Repeat {0..5,15..25,27..31,}
|
|||
|
if ord(Bstr[i]) in BinMenge
|
|||
|
then BinFrame := true;
|
|||
|
dec(i);
|
|||
|
Until BinFrame or (i < 1);
|
|||
|
end;
|
|||
|
|
|||
|
if BinFrame then
|
|||
|
begin
|
|||
|
Bstr := '<BIN';
|
|||
|
if PacOut then Bstr := Bstr + RSK +^J
|
|||
|
else Bstr := Bstr + B1 +
|
|||
|
int_str(TNC_Count) + RSK +^J;
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
6: Begin
|
|||
|
Bstr := Bstr + 'ur-Idx:' + int_str(ord(Response[16])) + '/'
|
|||
|
+ int_str(ord(Response[17])) + B1
|
|||
|
+ 'Rx:' + int_str(ord(Response[19]))
|
|||
|
+ Flags + '<Info-Ack.>]' + M1;
|
|||
|
End;
|
|||
|
else Begin
|
|||
|
Bstr := Bstr + 'Type ' + int_str(ord(Response[20]) and 15) + ']' + M1;
|
|||
|
End;
|
|||
|
end;
|
|||
|
M_aus(Attrib[ColMon], Bstr, kanal);
|
|||
|
end;
|
|||
|
|
|||
|
End
|
|||
|
{$ENDIF}
|
|||
|
;
|
|||
|
|
|||
|
7 : Begin (* Connected info (Byte count) *)
|
|||
|
TNC_Info(Kanal,Attrib[18],Response);
|
|||
|
if TNC_Count > 255 then TNC_Info(Kanal,Attrib[18],Response256);
|
|||
|
End;
|
|||
|
|
|||
|
end;
|
|||
|
if CheckAnwesend1 then
|
|||
|
begin
|
|||
|
checkAnwesend1:=false;
|
|||
|
Bstr:=Response;
|
|||
|
{ _aus(Attrib[20],0,m1+'SCAN! '+BSTR+m1 );}
|
|||
|
hcall2:=copy(Bstr,pos('fm ',Bstr)+3,9);
|
|||
|
if pos(' ',hcall2)>0 then delete(hcall2,Pos(' ',hcall2),length(hcall2));
|
|||
|
j:=0;
|
|||
|
if pos('-',hcall2)>0 then
|
|||
|
j:=str_int(Copy(Hcall2,Pos('-',Hcall2)+1,Pos('-',Hcall2)+3));
|
|||
|
strip(hcall2);
|
|||
|
i1:=0;
|
|||
|
{ _aus(Attrib[20],0,m1+'Call1 *'+hcall2+'*'+m1 );}
|
|||
|
while i1<length(hcall2) do
|
|||
|
begin
|
|||
|
inc(i1);
|
|||
|
if not (hcall2[i1] in ['a'..'z', 'A'..'Z', '1'..'9','0']) then hcall2:='';
|
|||
|
end;
|
|||
|
i1:=0;
|
|||
|
|
|||
|
{ _aus(Attrib[20],0,m1+'Call2 '+hcall2+m1 ); }
|
|||
|
if hcall2>'' then
|
|||
|
for i1:=1 to maxAnwesend do
|
|||
|
begin
|
|||
|
HCall:=Anwesend[i1]^.Call;
|
|||
|
strip(HCall);
|
|||
|
i:=0;
|
|||
|
if hcall=hcall2 then
|
|||
|
for i:=0 to 15 do
|
|||
|
begin
|
|||
|
if (j = Anwesend[i1]^.SSids[i]) then
|
|||
|
begin
|
|||
|
Anwesend[i1]^.da:=true;
|
|||
|
Anwesend[i1]^.Call:=Hcall;
|
|||
|
if i<>0 then Anwesend[i1]^.Call:=Anwesend[i1]^.Call+'-'+int_str(i);
|
|||
|
end;
|
|||
|
end;
|
|||
|
if Anwesend[i1]^.da then Scan_:=true;
|
|||
|
end;
|
|||
|
end; {CheckAnwesend}
|
|||
|
|
|||
|
|
|||
|
End;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
Procedure S_PAC (* Kanal,Art : Byte; All : Boolean; Zeile : String *);
|
|||
|
Var i,l,j : Byte;
|
|||
|
hstr2, hstr:string;
|
|||
|
XBFlag:boolean;
|
|||
|
SPStr : string;
|
|||
|
|
|||
|
Procedure MakePaclenStr(Zeile : String);
|
|||
|
Begin
|
|||
|
with K[Kanal]^ do
|
|||
|
Repeat
|
|||
|
l := FF - length(SendZeile);
|
|||
|
SendZeile := SendZeile + copy(Zeile,1,l);
|
|||
|
delete(Zeile,1,l);
|
|||
|
While length(SendZeile) >= PacLen do
|
|||
|
begin
|
|||
|
if not BufExists and (Kanal > 0) and (BufToLow or WishBuf or Test) then
|
|||
|
begin
|
|||
|
OpenBufferFile(Kanal);
|
|||
|
SetzeFlags(Kanal);
|
|||
|
end;
|
|||
|
SPStr:=copy(SendZeile,1,PacLen);
|
|||
|
if (SPComp) and (TXComp) then SPStr:=SPCompress(SPStr, kanal);
|
|||
|
if (SPComp) and (TXComp) and (TEST) then SPStr:=EFillStr(PacLen, #0, spstr);
|
|||
|
if (BufExists) and ((not SPComp) or ((SPComp) and (Txcomp) and (TEST))) then WriteBuffer(Kanal,SPStr)
|
|||
|
else TxRxTNC(Kanal,0,SPStr);
|
|||
|
spstr:='';
|
|||
|
delete(SendZeile,1,PacLen);
|
|||
|
end;
|
|||
|
Until Zeile = '';
|
|||
|
|
|||
|
End;
|
|||
|
|
|||
|
Procedure Senden (SZl : string; kan : Byte; All : Boolean);
|
|||
|
begin
|
|||
|
with k[kan]^ do
|
|||
|
begin
|
|||
|
{TNC[TNCNummer]^.TXBedarf:=true;}
|
|||
|
|
|||
|
HoldLauf:=HoldTime * 60;
|
|||
|
|
|||
|
{ if (SPComp) or (G^.ZeilenwTX) then All:=true;}
|
|||
|
|
|||
|
NodeTimeOut:=NTimeOut * 60;
|
|||
|
K[GegenKanal]^.NodeTimeOut:=NTimeOut * 60;
|
|||
|
TermTimeOut:=Konfig.TTimeOut * 60;
|
|||
|
K[GegenKanal]^.TermTimeOut:=Konfig.TTimeOut * 60;
|
|||
|
{ _aus(Attrib[19],5,'Kanal: '+Int_str(Kanal)+' /Gegenkanal: '+int_str(Gegenkanal)+m1); }
|
|||
|
|
|||
|
if Auto_CON then NodeConnect(Kanal,UpCaseStr(szl));
|
|||
|
l := Ord(szl[0]);
|
|||
|
if l > 0 then TxLRet := szl[l] = M1;
|
|||
|
|
|||
|
if (EigFlag) or (FileFlag) or (RemFlag) then
|
|||
|
begin
|
|||
|
if Drucker then Write_Lpt(Kanal,LptEsc[7]);
|
|||
|
if EigFlag then if not RxLRet then _aus(Attrib[19],Kanal,M1);
|
|||
|
_aus(Attrib[19],Kanal,szl);
|
|||
|
if Drucker then Write_Lpt(Kanal,LptEsc[8]);
|
|||
|
end;
|
|||
|
{and (length(szl)>0)}
|
|||
|
if (TxComp) and (length(szl)>0) then
|
|||
|
begin
|
|||
|
Repeat
|
|||
|
i := Ord(szl[0]);
|
|||
|
if i > maxCompPac then i := maxCompPac;
|
|||
|
if (not STOPComp) and (NOT SPComp) then MakePaclenStr(Compress(copy(szl,1,i), Kanal));
|
|||
|
if (SPComp) then
|
|||
|
begin
|
|||
|
MakePacLenStr(copy(szl,1,i));
|
|||
|
end;
|
|||
|
if (STopComp) then MakePaclenStr(StoPCompress(Kanal, copy(szl,1,i), StopCode));
|
|||
|
delete(szl,1,i);
|
|||
|
Until szl = '';
|
|||
|
end else{ if not G^.ZeilenwTX then} MakePaclenStr(szl);
|
|||
|
|
|||
|
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
Begin
|
|||
|
xbflag:=false;
|
|||
|
with K[Kanal]^ do
|
|||
|
begin
|
|||
|
if ((XBin.RX) or (XBin.TX)) and (art=NU) and (Copy(zeile,1,2)<>XProt) then
|
|||
|
begin
|
|||
|
xbflag:=true;
|
|||
|
sendzeile:=XBin.VorPuffer;
|
|||
|
end;
|
|||
|
|
|||
|
if Art = CM then TxRxTNC(Kanal,CM,Zeile) else
|
|||
|
if Art = NU then
|
|||
|
begin
|
|||
|
{ if (spcomp) and (TXComp) and (Test) then all:=true;}
|
|||
|
if length(Zeile)>0 then
|
|||
|
begin
|
|||
|
if (TX_Bin>1) or ((not G^.ZeilenwTX) ) then Senden (Zeile, kanal, all)
|
|||
|
else
|
|||
|
begin
|
|||
|
repeat
|
|||
|
all:=true;
|
|||
|
j:=Pos(#13,Zeile);
|
|||
|
hstr2:=copy(zeile,1,j);
|
|||
|
delete(zeile,1,j);
|
|||
|
if (j=0) and (zeile<>'') then
|
|||
|
begin
|
|||
|
hstr2:=Zeile+#13;
|
|||
|
zeile:='';
|
|||
|
end;
|
|||
|
senden (hstr2, kanal, all);
|
|||
|
|
|||
|
if All and (length(SendZeile) > 0) then
|
|||
|
begin
|
|||
|
if (SPComp) and (TXComp) then SendZeile:=SpCompress(SendZeile,kanal);
|
|||
|
if not BufExists and (Kanal > 0) and (BufToLow or WishBuf or Test) then
|
|||
|
begin
|
|||
|
OpenBufferFile(Kanal);
|
|||
|
SetzeFlags(Kanal);
|
|||
|
end;
|
|||
|
if (BufExists) and ((not SPComp) or ((SPComp) and (TEST))) then WriteBuffer(Kanal,SendZeile)
|
|||
|
else TxRxTNC(Kanal,0,SendZeile);
|
|||
|
SendZeile := '';
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
until zeile='';
|
|||
|
end;
|
|||
|
|
|||
|
end;
|
|||
|
if All and (length(SendZeile) > 0) then
|
|||
|
begin
|
|||
|
if (SPComp) and (TXComp) then SendZeile:=SpCompress(SendZeile,kanal);
|
|||
|
if not BufExists and (Kanal > 0) and (BufToLow or WishBuf or Test) then
|
|||
|
begin
|
|||
|
OpenBufferFile(Kanal);
|
|||
|
SetzeFlags(Kanal);
|
|||
|
end;
|
|||
|
if (BufExists) and ((not SPComp) or ((SPComp) and (TEST))) then WriteBuffer(Kanal,SendZeile)
|
|||
|
else TxRxTNC(Kanal,0,SendZeile);
|
|||
|
SendZeile := '';
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
if XBflag then
|
|||
|
begin
|
|||
|
XBin.VorPuffer:=sendzeile;
|
|||
|
sendzeile:='';
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
Procedure TxRxTNC (* Kanal,Art : Byte; Zeile : String *);
|
|||
|
Var Merk : Boolean;
|
|||
|
Begin
|
|||
|
Merk := Ausgabe;
|
|||
|
Ausgabe := false;
|
|||
|
|
|||
|
if (Kanal = 0) and (TNC[K[0]^.TncNummer]^.DRSI > 0) and
|
|||
|
(K[0]^.TncAkt <> K[0]^.TncNummer) then
|
|||
|
begin
|
|||
|
K[0]^.TncAkt := K[0]^.TncNummer;
|
|||
|
SendTNC(Kanal,1,TNC[K[0]^.TncNummer]^.HF_PortStr);
|
|||
|
GetTNC(Kanal);
|
|||
|
end;
|
|||
|
|
|||
|
Ausgabe := Merk;
|
|||
|
SendTNC(Kanal,Art,Zeile);
|
|||
|
GetTNC(Kanal);
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
(* Monitor-Status aller angeschlossenen TNCs feststellen und speichern,
|
|||
|
danach alle Monitore abschalten. *)
|
|||
|
Procedure Moni_Off (* Art : Byte *);
|
|||
|
Var i : Byte;
|
|||
|
Begin
|
|||
|
if MoniStaAnz = 0 then
|
|||
|
begin
|
|||
|
for i := 1 to TNC_Anzahl do with TNC[i]^ do
|
|||
|
begin
|
|||
|
K[0]^.TncNummer := i;
|
|||
|
Ausgabe := false;
|
|||
|
S_PAC(0,CM,true,'M');
|
|||
|
MoniStatus := K[0]^.Response;
|
|||
|
end;
|
|||
|
|
|||
|
if (Mon_Anz = 0) or (Art = 1) then
|
|||
|
for i := 1 to TNC_Anzahl do with TNC[i]^ do
|
|||
|
begin
|
|||
|
K[0]^.TncNummer := i;
|
|||
|
S_PAC(0,CM,true,'MN');
|
|||
|
end;
|
|||
|
end;
|
|||
|
inc(MoniStaAnz);
|
|||
|
End;
|
|||
|
|
|||
|
(* Monitor-Status bei allen TNCs wieder herstellen *)
|
|||
|
Procedure Moni_On;
|
|||
|
Var i : Byte;
|
|||
|
Begin
|
|||
|
if MoniStaAnz > 0 then dec(MoniStaAnz);
|
|||
|
if MoniStaAnz = 0 then
|
|||
|
begin
|
|||
|
for i := 1 to TNC_Anzahl do with TNC[i]^ do
|
|||
|
begin
|
|||
|
K[0]^.TncNummer := i;
|
|||
|
S_PAC(0,CM,true,'M' + B1 + MoniStatus);
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
Procedure Check_Mld (* Kanal : Byte; Zeile : Str80 *);
|
|||
|
var i,j, AuSys : Byte;
|
|||
|
Flag : Boolean;
|
|||
|
hstr2,
|
|||
|
Hstr : String[80];
|
|||
|
Zeile2:string;
|
|||
|
Begin
|
|||
|
Zeile2:=zeile;
|
|||
|
with K[Kanal]^ do
|
|||
|
begin
|
|||
|
NodeTimeOut:=NTimeOut * 60;
|
|||
|
K[GegenKanal]^.NodeTimeOut:=NTimeOut * 60;
|
|||
|
TermTimeOut:=Konfig.TTimeOut * 60;
|
|||
|
K[GegenKanal]^.TermTimeOut:=Konfig.TTimeOut * 60;
|
|||
|
|
|||
|
{ _aus(Attrib[19],5,'Kanal: '+Int_str(Kanal)+' /Gegenkanal: '+int_str(Gegenkanal)+m1); }
|
|||
|
|
|||
|
{ _aus(Attrib[19],Kanal,'#'+Zeile+M1); }
|
|||
|
if QSOZeilen<10 then QSOZeilen:=QSOZeilen+1;
|
|||
|
Zeile := UpCaseStr(Zeile);
|
|||
|
MldOk := 0;
|
|||
|
Flag := false;
|
|||
|
|
|||
|
i := 0;
|
|||
|
|
|||
|
Repeat
|
|||
|
inc(i);
|
|||
|
if (Zeile > '') and
|
|||
|
((i in [1..3,5,18,28,29,35,43])
|
|||
|
and (pos(Meldung[i],Zeile) > 0))
|
|||
|
or ((i in [30,31,32,33,4,6..8,34,9,11..15,25,36,41,42])
|
|||
|
and (pos(Meldung[i],Zeile) = 1))
|
|||
|
or {,26,27 COMPC, 37-40=SPCOMP}
|
|||
|
((i in [10,16,17,19..23,26,27, 37..40])
|
|||
|
and (Meldung[i] = Zeile))
|
|||
|
or ((i in [24])
|
|||
|
and (pos(Meldung[i],Zeile) = 1) and Conv.Active) then
|
|||
|
begin
|
|||
|
MldOk := i;
|
|||
|
Flag := true;
|
|||
|
end;
|
|||
|
Until ((Flag) and (mldok<>13)) or (i >= maxMld);
|
|||
|
|
|||
|
if RemAll then i := 2
|
|||
|
else i := 1;
|
|||
|
|
|||
|
{ if mldok in [31..33] then
|
|||
|
begin
|
|||
|
i:=REM_Auswert (Kanal, i, Zeile2);
|
|||
|
if i<>254 then Remote(Kanal, i, Zeile2) else
|
|||
|
begin
|
|||
|
if not Mo.MonActive then
|
|||
|
begin
|
|||
|
S_PAC(Kanal,NU,false,InfoZeile(129) + Zeile2 + M1);
|
|||
|
Send_prompt(kanal, ff);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;}
|
|||
|
|
|||
|
case MldOk of
|
|||
|
34: XBIN.An:=true;
|
|||
|
end;
|
|||
|
|
|||
|
If MldOk=28 then SelfSysop:=true;
|
|||
|
|
|||
|
If MldOk=29 then SelfSysop:=false;
|
|||
|
|
|||
|
if MldOk in [28, 29] then setzeFlags(Kanal);
|
|||
|
|
|||
|
if not Flag and (ExtMld > '') and (pos(ExtMld,Zeile) = 1) then
|
|||
|
begin
|
|||
|
Flag := true;
|
|||
|
ExtMldFlag := true;
|
|||
|
end;
|
|||
|
|
|||
|
if (MldOk=8) and (not AutoBin) then S_PAC(kanal,NU,true,Meldung[10]+M1);
|
|||
|
|
|||
|
if Flag and Conv.Active and not (MldOk in [5,30,6,24]) then Flag := false;
|
|||
|
|
|||
|
if (MldOK=36) then
|
|||
|
begin
|
|||
|
{#REQUESTNAME:NQL#}
|
|||
|
hstr:='';
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
{ RecCheck:=true; } {and RecCheck}
|
|||
|
|
|||
|
|
|||
|
{***** HIER st<73>rzt rechner bei recon in 0box-8 ab!}
|
|||
|
|
|||
|
if Flag and (MldOk in [5,6,30]) then
|
|||
|
begin
|
|||
|
if Fwd then CancelMailPoll(Kanal);
|
|||
|
{ KillEndBlanks(zeile);
|
|||
|
While pos(B1,Zeile) > 0 do delete(zeile,1, pos(b1,zeile));
|
|||
|
if pos(DP,Zeile) > 0 then Zeile2 := ParmStr(1,DP,Zeile);
|
|||
|
if pos(DP,Zeile) > 0 then Zeile := ParmStr(2,DP,Zeile);
|
|||
|
Hstr := ACMerk;
|
|||
|
|
|||
|
|
|||
|
KillEndBlanks(Hstr);
|
|||
|
HSTR2:=hstr;
|
|||
|
while pos('-',Hstr)>0 do
|
|||
|
begin
|
|||
|
delete(Hstr,pos('-',Hstr),pos(B1,Hstr)-pos('-',Hstr));
|
|||
|
end;
|
|||
|
|
|||
|
if (pos(RSK + Zeile + B1,Hstr) = 0) and (pos(RSK + Zeile2 + B1,Hstr) = 0) and
|
|||
|
(pos(RSK + Zeile + B1,Hstr2) = 0) and (pos(RSK + Zeile2 + B1,Hstr2) = 0)then
|
|||
|
begin
|
|||
|
Flag := false;
|
|||
|
MldOk := 0;
|
|||
|
end; }
|
|||
|
end;
|
|||
|
|
|||
|
if not Flag then MldOk := 0;
|
|||
|
end;
|
|||
|
{ _aus(Attrib[19],Kanal,'!'+Zeile+M1); }
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
{***************}
|
|||
|
|
|||
|
|
|||
|
Function XComp_Sammler (* Kanal: Byte; Zeile : String) : String*);
|
|||
|
Var i,i1,
|
|||
|
i2,l : Byte;
|
|||
|
CZeile : String;
|
|||
|
BT: boolean;
|
|||
|
Begin
|
|||
|
CZeile:='';
|
|||
|
with K[Kanal]^ do
|
|||
|
begin
|
|||
|
if (RxComp) then
|
|||
|
begin
|
|||
|
if NOT SPComp then
|
|||
|
Repeat
|
|||
|
i := FF - length(CompZeile);
|
|||
|
i1 := length(Zeile);
|
|||
|
if i > i1 then i := i1;
|
|||
|
CompZeile := CompZeile + copy(Zeile,1,i);
|
|||
|
delete(Zeile,1,i);
|
|||
|
i := length(CompZeile);
|
|||
|
if i > 0 then
|
|||
|
begin
|
|||
|
i1 := Ord(CompZeile[1]);
|
|||
|
if i1 = FF then
|
|||
|
begin
|
|||
|
if i > 1 then i1 := Ord(CompZeile[2]);
|
|||
|
if i1 = FF then i1 := FF-2;
|
|||
|
dec(i);
|
|||
|
l := 2;
|
|||
|
end else l := 1;
|
|||
|
if i > i1 then
|
|||
|
begin
|
|||
|
CZeile := DeCompress(copy(CompZeile,1,i1+l), Kanal);
|
|||
|
CompZeile:='';
|
|||
|
(* While CZeile > '' do
|
|||
|
begin
|
|||
|
i2 := pos(M1,CZeile);
|
|||
|
if i2 > 0 then
|
|||
|
begin
|
|||
|
XMeldeCompZ := XMeldeCompZ + copy(CZeile,1,i2-1);
|
|||
|
{Check_Mld(Kanal,MeldeCompZ);
|
|||
|
Connect_Info(Kanal,Attr,i2 >= length(CZeile),copy(CZeile,1,i2));}
|
|||
|
MldOk := 0;
|
|||
|
XMeldeCompZ := '';
|
|||
|
AutoCheckLn := false;
|
|||
|
delete(CZeile,1,i2);
|
|||
|
end else
|
|||
|
begin
|
|||
|
XMeldeCompZ := XMeldeCompZ + CZeile;
|
|||
|
{Connect_Info(Kanal,Attr,true,CZeile);}
|
|||
|
CZeile := '';
|
|||
|
end;
|
|||
|
end; *)
|
|||
|
delete(CompZeile,1,i1+l);
|
|||
|
end;
|
|||
|
end else i1 := FF;
|
|||
|
Until (Zeile = '') and (i <= i1)
|
|||
|
else
|
|||
|
begin
|
|||
|
|
|||
|
CZeile:='';
|
|||
|
bt:=false;
|
|||
|
if (Zeile[1]=#255) then Bt:=true;
|
|||
|
if Bt then delete (Zeile,1,1);
|
|||
|
|
|||
|
CompZeile:=CompZeile+Zeile;
|
|||
|
|
|||
|
if (CompZeile[Length(Compzeile)]<>#13) and (Zeile[1]<>#255) then
|
|||
|
begin
|
|||
|
CZeile := SPDeCompress(CompZeile, Kanal); {if spcomp}
|
|||
|
CompZeile:='';
|
|||
|
end;
|
|||
|
|
|||
|
if Bt then
|
|||
|
begin
|
|||
|
Czeile:=CompZeile;
|
|||
|
CompZeile:='';
|
|||
|
end;
|
|||
|
|
|||
|
(* While CZeile > '' do
|
|||
|
begin
|
|||
|
i2 := pos(M1,CZeile);
|
|||
|
if i2 > 0 then
|
|||
|
begin
|
|||
|
MeldeCompZ := MeldeCompZ + copy(CZeile,1,i2-1);
|
|||
|
Check_Mld(Kanal,MeldeCompZ);
|
|||
|
Connect_Info(Kanal,Attr,i2 >= length(CZeile),copy(CZeile,1,i2));
|
|||
|
MldOk := 0;
|
|||
|
MeldeCompZ := '';
|
|||
|
AutoCheckLn := false;
|
|||
|
delete(CZeile,1,i2);
|
|||
|
end else
|
|||
|
begin
|
|||
|
MeldeCompZ := MeldeCompZ + CZeile;
|
|||
|
Connect_Info(Kanal,Attr,true,CZeile);
|
|||
|
CZeile := '';
|
|||
|
end;
|
|||
|
end; *)
|
|||
|
|
|||
|
|
|||
|
{ CZeile:=SPDeCompress(Zeile, Kanal);}
|
|||
|
end;
|
|||
|
end;{ else Connect_Info(Kanal,Attr,FrEnd,Zeile);}
|
|||
|
end; {with kanal}
|
|||
|
XComp_Sammler:=CZeile;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
{=********************}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Procedure TNC_Info (* Kanal,Attr : Byte; Zeile : String *);
|
|||
|
Var i : Byte;
|
|||
|
NichtFWD:Boolean;
|
|||
|
XZeilen:string;
|
|||
|
Begin
|
|||
|
NICHTFwd:=false;
|
|||
|
xzeilen:=zeile;
|
|||
|
if not FWD_ then PollStr:='';
|
|||
|
with K[Kanal]^ do
|
|||
|
begin
|
|||
|
NodeTimeOut:=NTimeOut * 60;
|
|||
|
K[GegenKanal]^.NodeTimeOut:=NTimeOut * 60;
|
|||
|
TermTimeOut:=Konfig.TTimeOut * 60;
|
|||
|
K[GegenKanal]^.TermTimeOut:=Konfig.TTimeOut * 60;
|
|||
|
if ((xbin.rx) or (Xbin.TX)) and (RXComp) then
|
|||
|
begin
|
|||
|
if KompressUpd then
|
|||
|
begin
|
|||
|
Zeile:='';
|
|||
|
MeldeZeile:='';
|
|||
|
end;
|
|||
|
xZeilen:=XComp_Sammler(Kanal, XZeilen); {DeCompress(xZeilen, Kanal);}
|
|||
|
end;
|
|||
|
if (xbin.an) and (#0#255=copy(xzeilen,1,2)) then
|
|||
|
begin
|
|||
|
if xZeilen[3]=Data then xbinwrite (kanal, xZeilen);
|
|||
|
if xzeilen[3]=Comd then XBinCheck (kanal, xZeilen,0, '');
|
|||
|
{XBinCheck (kanal : Byte; XBinZ:string; DtPos:longint; XZeile:string);}
|
|||
|
xzeilen:='';
|
|||
|
Zeile:='';
|
|||
|
meldezeile:='';
|
|||
|
end;
|
|||
|
|
|||
|
if (not connected) and (not Test) then sysart:=0;
|
|||
|
if not RxComp and KillEsc and (Mo.MonActive or SCon[11]) then
|
|||
|
begin
|
|||
|
While pos(E7m,Zeile) > 0 do delete(Zeile,pos(E7m,Zeile),4);
|
|||
|
While pos(E0m,Zeile) > 0 do delete(Zeile,pos(E0m,Zeile),4);
|
|||
|
end;
|
|||
|
|
|||
|
While Zeile > '' do
|
|||
|
begin
|
|||
|
|
|||
|
|
|||
|
i := pos(M1,Zeile);
|
|||
|
|
|||
|
|
|||
|
if i > 0 then
|
|||
|
begin
|
|||
|
MeldeZeile := MeldeZeile + copy(Zeile,1,i-1);
|
|||
|
if fwdGO then PollStr := PollStr + copy(Zeile,1,i-1) +#13;
|
|||
|
{MZAR! Meldezeile= Alles bis zum n<>chsten Return!!}
|
|||
|
Check_Mld(Kanal,MeldeZeile);
|
|||
|
|
|||
|
|
|||
|
if RxComp then
|
|||
|
begin
|
|||
|
if MldOk in [1,5,6,30,22] then
|
|||
|
begin
|
|||
|
RxComp := false;
|
|||
|
TxComp := false;
|
|||
|
CompZeile := '';
|
|||
|
MeldeCompZ := '';
|
|||
|
end else
|
|||
|
if MldOk = 23 then
|
|||
|
begin
|
|||
|
CompZeile := '';
|
|||
|
MeldeCompZ := '';
|
|||
|
MldOk := 0;
|
|||
|
delete(Zeile,1,i);
|
|||
|
end else MldOk := 0;
|
|||
|
end;
|
|||
|
|
|||
|
Comp_Sammler(Kanal,Attr,i >= length(Zeile),copy(Zeile,1,i));
|
|||
|
MldOk := 0;
|
|||
|
MeldeZeile := '';
|
|||
|
AutoCheckLn := false;
|
|||
|
delete(Zeile,1,i);
|
|||
|
end else
|
|||
|
begin
|
|||
|
MeldeZeile := MeldeZeile + Zeile;
|
|||
|
if fwdGO then Pollstr:=Pollstr+Zeile;
|
|||
|
Comp_Sammler(Kanal,Attr,true,Zeile);
|
|||
|
Zeile := '';
|
|||
|
end;
|
|||
|
|
|||
|
if (fwd) and (FwdGO) and (kanal>0) then
|
|||
|
begin
|
|||
|
|
|||
|
repeat
|
|||
|
NichtFWD:=false;
|
|||
|
{PollStr:=PollStr+Zeile;}
|
|||
|
PollStr:=upcasestr(PollSTR);
|
|||
|
if (MailSStopPrompt_<>'') and (Pos(MailSStopPrompt_,PollStr)>1) then
|
|||
|
begin
|
|||
|
NichtFWD:=true;
|
|||
|
s_pac(kanal,NU,true,M1);
|
|||
|
_aus(Attrib[19],Kanal,m1);
|
|||
|
infoout(Kanal,0,0,'RETURN');
|
|||
|
delete(pollstr,1,Pos(MailSStopPrompt_,PollStr)+length(MailSStopPrompt_));
|
|||
|
end;
|
|||
|
if (not NichtFWD) and (MailPrompt='') and (not MailPWWait) then
|
|||
|
begin
|
|||
|
MailPollGo(Kanal, NichtFWD);
|
|||
|
end;
|
|||
|
if (not NichtFWD) and (not MailPWWait) and (MailPrompt<>'') and (Pos(MailPrompt, PollStr)>0) then
|
|||
|
begin
|
|||
|
MailPollGo(Kanal, NichtFWD);
|
|||
|
delete(pollstr,1,Pos(MailPrompt,PollStr)+length(MailPrompt_));
|
|||
|
end;
|
|||
|
if not NichtFWD then
|
|||
|
begin
|
|||
|
while pos(m1,PollStr)>0 do
|
|||
|
delete(PollStr,1,Pos(M1,PollStr));
|
|||
|
end;
|
|||
|
|
|||
|
until (Pos(M1,PollStr)=0);
|
|||
|
end;
|
|||
|
|
|||
|
end; {while}
|
|||
|
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
Procedure Comp_Sammler (* Kanal,Attr : Byte; FrEnd : Boolean; Zeile : String *);
|
|||
|
Var i,i1,
|
|||
|
i2,l : Byte;
|
|||
|
CZeile : String;
|
|||
|
Bt:boolean;
|
|||
|
Begin
|
|||
|
with K[Kanal]^ do
|
|||
|
begin
|
|||
|
if rxcomp then
|
|||
|
begin
|
|||
|
if (not spComp) then
|
|||
|
begin
|
|||
|
|
|||
|
if (mo.monactive) and (pos(meldung[21]+#13,zeile) in [1,2]) then
|
|||
|
begin
|
|||
|
delete(zeile,1,pos(meldung[21]+#13,compzeile)+length(meldung[21])+1);
|
|||
|
compzeile:='';
|
|||
|
end;
|
|||
|
if (mo.monactive) and (pos(meldung[27]+#13,zeile) in [1,2]) then
|
|||
|
begin
|
|||
|
delete(zeile,1,pos(meldung[27]+#13,zeile)+length(meldung[27])+1);
|
|||
|
compzeile:='';
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
Repeat
|
|||
|
i := FF - length(CompZeile);
|
|||
|
i1 := length(Zeile);
|
|||
|
if i > i1 then i := i1;
|
|||
|
CompZeile := CompZeile + copy(Zeile,1,i);
|
|||
|
delete(Zeile,1,i);
|
|||
|
i := length(CompZeile);
|
|||
|
if i > 0 then
|
|||
|
begin
|
|||
|
i1 := Ord(CompZeile[1]);
|
|||
|
if i1 = FF then
|
|||
|
begin
|
|||
|
if i > 1 then i1 := Ord(CompZeile[2]);
|
|||
|
if i1 = FF then i1 := FF-2;
|
|||
|
dec(i);
|
|||
|
l := 2;
|
|||
|
end else l := 1;
|
|||
|
if i > i1 then
|
|||
|
begin
|
|||
|
|
|||
|
if (not STOPComp) and (not SPComp) then
|
|||
|
begin
|
|||
|
|
|||
|
{****************************}
|
|||
|
|
|||
|
{ if (mo.monactive) and (pos(meldung[20]+#13,compzeile) in [1,2]) then
|
|||
|
begin
|
|||
|
delete(compzeile,1,pos(meldung[20]+#13,compzeile)+length(meldung[22])+1);
|
|||
|
end;
|
|||
|
|
|||
|
if (mo.monactive) and (pos(meldung[22]+#13,compzeile) in [1,2]) then
|
|||
|
begin
|
|||
|
delete(compzeile,1,pos(meldung[22]+#13,compzeile)+length(meldung[22])+1);
|
|||
|
end;
|
|||
|
}
|
|||
|
{****************************}
|
|||
|
|
|||
|
CZeile := DeCompress(copy(CompZeile,1,i1+l), Kanal);
|
|||
|
end;
|
|||
|
if (STOPComp) then CZeile := STOPDeCompress(Kanal, copy(CompZeile,1,i1+l), StopCode);
|
|||
|
if (SPComp) then CZeile := SPDeCompress(CompZeile, Kanal);
|
|||
|
|
|||
|
While CZeile > '' do
|
|||
|
begin
|
|||
|
i2 := pos(M1,CZeile);
|
|||
|
if i2 > 0 then
|
|||
|
begin
|
|||
|
MeldeCompZ := MeldeCompZ + copy(CZeile,1,i2-1);
|
|||
|
Check_Mld(Kanal,MeldeCompZ);
|
|||
|
Connect_Info(Kanal,Attr,i2 >= length(CZeile),copy(CZeile,1,i2));
|
|||
|
MldOk := 0;
|
|||
|
MeldeCompZ := '';
|
|||
|
AutoCheckLn := false;
|
|||
|
delete(CZeile,1,i2);
|
|||
|
end else
|
|||
|
begin
|
|||
|
MeldeCompZ := MeldeCompZ + CZeile;
|
|||
|
Connect_Info(Kanal,Attr,true,CZeile);
|
|||
|
CZeile := '';
|
|||
|
end;
|
|||
|
end;
|
|||
|
delete(CompZeile,1,i1+l);
|
|||
|
end;
|
|||
|
end else i1 := FF;
|
|||
|
Until (Zeile = '') and (i <= i1);
|
|||
|
end else
|
|||
|
begin
|
|||
|
CZeile:='';
|
|||
|
bt:=false;
|
|||
|
if (Zeile[1]=#255) then Bt:=true;
|
|||
|
if Bt then delete (Zeile,1,1);
|
|||
|
|
|||
|
CompZeile:=CompZeile+Zeile;
|
|||
|
|
|||
|
if (CompZeile[Length(Compzeile)]<>#13) and (Zeile[1]<>#255) then
|
|||
|
begin
|
|||
|
CZeile := SPDeCompress(CompZeile, Kanal); {if spcomp}
|
|||
|
CompZeile:='';
|
|||
|
end;
|
|||
|
|
|||
|
if Bt then
|
|||
|
begin
|
|||
|
Czeile:=CompZeile;
|
|||
|
CompZeile:='';
|
|||
|
end;
|
|||
|
|
|||
|
While CZeile > '' do
|
|||
|
begin
|
|||
|
i2 := pos(M1,CZeile);
|
|||
|
if i2 > 0 then
|
|||
|
begin
|
|||
|
MeldeCompZ := MeldeCompZ + copy(CZeile,1,i2-1);
|
|||
|
Check_Mld(Kanal,MeldeCompZ);
|
|||
|
Connect_Info(Kanal,Attr,i2 >= length(CZeile),copy(CZeile,1,i2));
|
|||
|
MldOk := 0;
|
|||
|
MeldeCompZ := '';
|
|||
|
AutoCheckLn := false;
|
|||
|
delete(CZeile,1,i2);
|
|||
|
end else
|
|||
|
begin
|
|||
|
MeldeCompZ := MeldeCompZ + CZeile;
|
|||
|
Connect_Info(Kanal,Attr,true,CZeile);
|
|||
|
CZeile := '';
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
end; {else SPComp}
|
|||
|
end else Connect_Info(Kanal,Attr,FrEnd,Zeile); {if rxcomp}
|
|||
|
end; {with}
|
|||
|
End;
|
|||
|
|
|||
|
{Procedure FwdNext (Kanal:byte);
|
|||
|
var dummy,path:string;
|
|||
|
begin}
|
|||
|
{ with K[Kanal]^ do
|
|||
|
begin
|
|||
|
if (fwdmsgsholen=0) and (FwdStarted) then S_PAC(Kanal,NU,true,'FF'+M1);
|
|||
|
if fwdMsgsHolen > 0 then
|
|||
|
begin
|
|||
|
Path := G^.MailPfad + OwnCall + MsgExt;
|
|||
|
FRxName := Path;
|
|||
|
if OpenTextFile(Kanal) then
|
|||
|
begin
|
|||
|
sound_(2000,50); delay(300);
|
|||
|
mldok:=0;
|
|||
|
RX_Count := 0;
|
|||
|
RX_TextZn := 0;
|
|||
|
RX_Laenge := 0;
|
|||
|
RX_Bin := 1;
|
|||
|
RX_Time := Uhrzeit;
|
|||
|
RX_Save := true;
|
|||
|
if node then Mail_sp:=true;
|
|||
|
RemoteSave := true;
|
|||
|
Dummy := M1 + InfoZeile(96) + ' ' + B1+ EFillStr(10,B1,Call) +
|
|||
|
Datum + B2 + copy(Uhrzeit,1,5) + B1 + ZeitArt + M1;
|
|||
|
Dummy := Dummy + ConstStr('-',length(Dummy)-2) + M1;
|
|||
|
Write_RxFile(Kanal,Dummy);
|
|||
|
end;
|
|||
|
if not FwdFS then
|
|||
|
begin
|
|||
|
S_PAC(Kanal,NU,true,'FF'+M1);
|
|||
|
end;
|
|||
|
dec(fwdMsgsHolen);
|
|||
|
end (*fwdMsgsHolen > 0*)
|
|||
|
else FwdStarted:=false;
|
|||
|
|
|||
|
fwdnxt:=false;
|
|||
|
fwdFS:=false;
|
|||
|
end;
|
|||
|
end; }
|
|||
|
|
|||
|
|
|||
|
{Procedure Forward (Kanal : Byte; Zeile : String);
|
|||
|
var fw : integer;
|
|||
|
fwdzeile: string;
|
|||
|
begin}
|
|||
|
|
|||
|
{Frameflicken einbauen. auf CR trimmen und im kanal-pointer
|
|||
|
ablegen. RX-Call rauspicken (2. Call im Fr./ParmStr 4!) und Mail <20>ffnen.
|
|||
|
Rest l<>uft bis zum ctrl-Z allene. danach FF senden, anstatt
|
|||
|
"Mail gespeichert" (nur wenn FWD=True!)}
|
|||
|
|
|||
|
{ with K[Kanal]^ do
|
|||
|
begin
|
|||
|
if fwd then
|
|||
|
begin
|
|||
|
FwdZeile:=UpcaseStr(Zeile);
|
|||
|
if (pos('_', FwdZeile)>0) and (not FwdStarted) then
|
|||
|
begin
|
|||
|
while pos('_', FwdZeile) > pos(' ', FwdZeile) do
|
|||
|
begin
|
|||
|
delete (FwdZeile, 1, pos(' ', FwdZeile));
|
|||
|
end;
|
|||
|
delete(FwdZeile, pos('_', FwdZeile), length(fwdZeile));
|
|||
|
inc(FwdMails);
|
|||
|
end;
|
|||
|
if (Pos('F>',Zeile)=1) and (FwdMails>0) then
|
|||
|
begin
|
|||
|
FwdZeile:='FS ';
|
|||
|
for fw:=1 to FwdMails do
|
|||
|
if fw=1 then FwdZeile:=FwdZeile + '+'
|
|||
|
else FwdZeile:=FwdZeile + '+';
|
|||
|
fwdMsgsHolen:=1;
|
|||
|
if FWdMails<>0 then
|
|||
|
S_PAC(Kanal,NU,true,FwdZeile+M1);
|
|||
|
FwdStarted:=true;
|
|||
|
FwdFS:=true;
|
|||
|
fwdNxt:=true;
|
|||
|
fwdMails:=0;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end; with
|
|||
|
end; }
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Procedure Connect_Info (* Kanal,Attr : Byte; FrEnd : Boolean; Zeile : String *);
|
|||
|
var i,i1,iz,j, AuSys: Integer;
|
|||
|
UmlFlag, {Umlaute-flag empfangen?}
|
|||
|
KompFlag, {Komp-flag empfangen?}
|
|||
|
NUN,
|
|||
|
Flag,
|
|||
|
BFlag,
|
|||
|
ReKon : Boolean;
|
|||
|
Bstr : String;
|
|||
|
Rufz : String[9];
|
|||
|
FlagZ,
|
|||
|
Zusatz,
|
|||
|
MemZeile : String[80];
|
|||
|
Kenner : Str32;
|
|||
|
profibox : boolean;
|
|||
|
|
|||
|
Begin
|
|||
|
nun:=false;
|
|||
|
with K[Kanal]^ do begin
|
|||
|
if First_Frame and (length(Zeile) > 1) and (not node) then begin
|
|||
|
Kompflag:=false;
|
|||
|
UmlFlag:=false;
|
|||
|
|
|||
|
{**** Automatische Systemerkennung *****}
|
|||
|
XPNodeC:=false;
|
|||
|
Kenner:='';
|
|||
|
Autokenn:=false;
|
|||
|
AuSys:=0; SystemErkannt:=AutoSysName[0];
|
|||
|
{ _aus(Attrib[20],Kanal,'** '+SystemErkannt + ' - '); }
|
|||
|
Zusatz:='';
|
|||
|
If (Kanal > 0) then
|
|||
|
begin
|
|||
|
For j:=1 to MaxAutoSys do
|
|||
|
begin
|
|||
|
if Pos(AutoSysKenner[j], Zeile) = 1 then
|
|||
|
begin
|
|||
|
AuSys:=j;
|
|||
|
SystemErkannt:=AutoSysName[AuSys];
|
|||
|
Zusatz:=Zeile;
|
|||
|
delete(Zusatz,1,length(AutoSysKenner[j]));
|
|||
|
if Pos('-',Zusatz)>0 then delete(Zusatz,Pos('-',Zusatz),length(Zusatz));
|
|||
|
if Pos(']',Zusatz)>0 then delete(Zusatz,Pos(']',Zusatz),length(Zusatz));
|
|||
|
if Pos(' ',Zusatz)>0 then delete(Zusatz,Pos(' ',Zusatz),length(Zusatz));
|
|||
|
if Zusatz[1]='N' then delete(Zusatz,1,1);
|
|||
|
Zusatz:=' '+Zusatz;
|
|||
|
SystemErkannt:=SystemErkannt+Zusatz;
|
|||
|
if (AuSys<>3) and (not node) then InfoOut(Kanal,0,1,InfoZeile(72)+SystemErkannt);
|
|||
|
end; {if pos autosys<79>kenner}
|
|||
|
end; {for }
|
|||
|
SystemErkannt:=AutoSysName[AuSys]+Zusatz;
|
|||
|
SetzeFlags(Kanal);
|
|||
|
Case AuSys of
|
|||
|
1: SysArt:=3;
|
|||
|
{ 2: SysArt:=16; }
|
|||
|
2: {FlexNet-Passworterkennung //db1ras}
|
|||
|
Begin
|
|||
|
If Zeile[13]<'3' Then
|
|||
|
SysArt:=7 {RMNC}
|
|||
|
Else If (Zeile[13]='3') And (Zeile[15]<'3') Then
|
|||
|
SysArt:=7 {RMNC}
|
|||
|
Else If (Zeile[13]='3') And (Zeile[15]='3')
|
|||
|
And (Zeile[16]<'g') Then
|
|||
|
SysArt:=7 {RMNC}
|
|||
|
Else
|
|||
|
SysArt:=10; {BN}
|
|||
|
End;
|
|||
|
3:
|
|||
|
begin
|
|||
|
Zusatz:='';
|
|||
|
SysArt:=17;
|
|||
|
if Pos(AutosysKenner[3]+NodeK,Zeile)>0 then XPNodeC:=true;
|
|||
|
FlagZ:=Zeile;
|
|||
|
delete(FlagZ,1,length(AutoSysKenner[3]));
|
|||
|
if Pos(DatenKenner, FlagZ)>0 then
|
|||
|
begin
|
|||
|
delete(FlagZ, 1, Pos(DatenKenner, FlagZ));
|
|||
|
if (FlagZ[1] in ['0'..'9']) then
|
|||
|
begin
|
|||
|
UmlFlag:=true;
|
|||
|
Umlaut:=str_int(FlagZ[1]);
|
|||
|
Zusatz:=' ('+InfoZeile(379)+')';
|
|||
|
delete(FlagZ, 1,1);
|
|||
|
end;
|
|||
|
if (Pos('C', flagZ)>0) and (not node) then
|
|||
|
begin
|
|||
|
KompFlag:=true;
|
|||
|
User_Komp:=str_int(FlagZ[Pos('C', FlagZ)+1])+1;
|
|||
|
if user_komp=2 then user_komp:=0;
|
|||
|
end;
|
|||
|
end else Zusatz:='';
|
|||
|
Zeile:=Line_Convert(Kanal,2,Zeile);
|
|||
|
if (not node) then InfoOut(Kanal,0,1,InfoZeile(72)+SystemErkannt+Zusatz);
|
|||
|
if (not Outside) and (not Node) and (not Ausstiegskanal) then
|
|||
|
begin
|
|||
|
Kenner:=AutoSysKenner[3];
|
|||
|
if node then Kenner:=Kenner + NodeK;
|
|||
|
|
|||
|
Kenner:=Kenner+copy(Version,Pos(' ',Version)+1,Length(Version));
|
|||
|
zusatz:='';
|
|||
|
|
|||
|
|
|||
|
if (not UmlFlag) then Zusatz:=Zusatz+int_str(Umlaut);
|
|||
|
|
|||
|
if (not KompFlag) and (User_Komp>0) and (not node) then Zusatz:=Zusatz+'C'+int_str(User_Komp-1);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if zusatz<>'' then
|
|||
|
begin
|
|||
|
if (UmlFlag) then Zusatz:=int_str(Umlaut)+Zusatz;
|
|||
|
kenner:=kenner+'-'+zusatz;
|
|||
|
end;
|
|||
|
|
|||
|
kenner:=kenner+']'+m1;
|
|||
|
if not xpnodec then S_PAC(Kanal,NU,true,Kenner);
|
|||
|
end;
|
|||
|
end;
|
|||
|
4: sysart:=1;
|
|||
|
5: Sysart:=18;
|
|||
|
6: begin
|
|||
|
SysArt:=21;
|
|||
|
Profibox:=false;
|
|||
|
Zusatz:=Zeile;
|
|||
|
delete(Zusatz,1,pos(Zusatz,'-'));
|
|||
|
delete(Zusatz,1,pos(Zusatz,'-'));
|
|||
|
if Zusatz[1] in ['1'..'9','0'] then profibox:=false else profibox:=true;
|
|||
|
end;
|
|||
|
end; {case}
|
|||
|
|
|||
|
{_aus(Attrib[20],Kanal,+SystemErkannt +m1);}
|
|||
|
if (SCon[0]) and (((Sysart=21) and (not ProfiBox)) or ((SysArt=17) and (not XPNodec))) then RequestName(Kanal);
|
|||
|
if KompFlag then
|
|||
|
begin
|
|||
|
Case User_Komp of
|
|||
|
{2: CompC:=true;}
|
|||
|
3: SPComp:=True;
|
|||
|
end;
|
|||
|
|
|||
|
if not (TxComp or RxComp) then
|
|||
|
begin
|
|||
|
{if (Kanal > 0) and (CompC) and (not SPComp) then
|
|||
|
begin
|
|||
|
S_PAC(Kanal,NU,true,M1 + Meldung[26] + M1);
|
|||
|
KompressUpd:=true;
|
|||
|
CompCUpdZahl:=0;
|
|||
|
Randomize;
|
|||
|
For i:=1 to 127 do
|
|||
|
begin
|
|||
|
Kompression[i]:=random(127);
|
|||
|
Kompression[i+127]:=Kompression[i] xor Comp_Key_Tab[I];
|
|||
|
end;
|
|||
|
Kompression[255]:=Kompression[1];
|
|||
|
FileSendWaitS:=fileSendWait;
|
|||
|
FileSendWait:=true;
|
|||
|
end;}
|
|||
|
|
|||
|
|
|||
|
if (Kanal > 0) and (not COMPC) and (not SPComp) then S_PAC(Kanal,NU,true,M1 + Meldung[19] + M1);
|
|||
|
if (Kanal > 0) and (not COMPC) and (SPComp) then S_PAC(Kanal,NU,true,M1 + Meldung[37] + M1);
|
|||
|
TxComp := true;
|
|||
|
Flag := true;
|
|||
|
end;
|
|||
|
|
|||
|
end;
|
|||
|
|
|||
|
SetzeFlags(Kanal);
|
|||
|
end; {if kanal>0}
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if (MailPWWait) and (fwd) and (FwdGo) then
|
|||
|
begin
|
|||
|
PollStr:='';
|
|||
|
end;
|
|||
|
|
|||
|
if ScreenSTBY then Neu_Bild;
|
|||
|
ScreenTimer := ScreenInit;
|
|||
|
|
|||
|
Flag := true;
|
|||
|
If Ignore And Auto_CON And (MldOk in [1..7,17,18,30,35,43]) Then {//db1ras}
|
|||
|
Flag := false;
|
|||
|
if not Ignore then Flag := false;
|
|||
|
if (MldOk in [5,6,30,10]) then
|
|||
|
begin
|
|||
|
flag:=flag;
|
|||
|
end;
|
|||
|
if ((RX_Save and (RX_Bin in [2,5]) or (xbin.rx) or (XBin.TX)) and (MldOk in [5,6,30,10])) then
|
|||
|
begin
|
|||
|
Flag := false;
|
|||
|
end;
|
|||
|
if AusstiegsKanal and (MldOk in [5,6,30]) then Flag := false;
|
|||
|
if Flag then MldOk := 0;
|
|||
|
|
|||
|
BFlag := true;
|
|||
|
if RxComp then MemZeile := MeldeCompZ
|
|||
|
else MemZeile := MeldeZeile;
|
|||
|
|
|||
|
ReKon := false;
|
|||
|
|
|||
|
if not TNC_ReadOut and RX_Datenpieps and Klingel then
|
|||
|
begin
|
|||
|
if (((Node) or (K[gegenkanal]^.Node)) and (Konfig.NodeSound)) or (not Node) then
|
|||
|
begin
|
|||
|
LockIntFlag(0);
|
|||
|
Daten_Bell;
|
|||
|
LockIntFlag(1);
|
|||
|
RX_Datenpieps := false;
|
|||
|
end;
|
|||
|
end;
|
|||
|
if not Ignore and WishBoxLst and (SysArt in SysMenge) and
|
|||
|
(Zeile[length(Zeile)] = M1) then
|
|||
|
begin
|
|||
|
BoxStr := MemZeile;
|
|||
|
Write_BoxStr(Kanal,0);
|
|||
|
end;
|
|||
|
if EinstiegsKanal and not Ignore and not RemConReady then
|
|||
|
begin
|
|||
|
S_PAC(GegenKanal,CM,true,'D');
|
|||
|
S_PAC(GegenKanal,CM,true,'G');
|
|||
|
{*} L_off(GegenKanal);
|
|||
|
RemConInit(GegenKanal);
|
|||
|
Rufz_TNC_init(GegenKanal);
|
|||
|
if length(MemZeile) = 0 then
|
|||
|
begin
|
|||
|
MldOk := 0;
|
|||
|
Send_Prompt(Kanal,FF);
|
|||
|
Exit;
|
|||
|
end;
|
|||
|
end;
|
|||
|
if AusstiegsKanal and (MldOk in [5,6,30]) then
|
|||
|
begin
|
|||
|
(* Zeile := '';
|
|||
|
S_PAC(Kanal,CM,true,'D'); WELCHER SINN?!
|
|||
|
{*} L_off(kanal);
|
|||
|
Rufz_TNC_init(Kanal); *)
|
|||
|
Rekon:=true;
|
|||
|
end;
|
|||
|
if (RX_Save) or ((xbin.rx) and (mldok in [5,6,30,10])) then
|
|||
|
begin
|
|||
|
if not BinOut then BFlag := false;
|
|||
|
if ((RX_Bin = 5) or (xbin.rx)) and (MldOk in [5,6,30,10]) then
|
|||
|
begin
|
|||
|
if not (Xbin.an) then Write_RxFile(Kanal,MemZeile);
|
|||
|
if (xbin.rx) then XBinWrite(Kanal, '');
|
|||
|
BFlag := true;
|
|||
|
end else
|
|||
|
begin
|
|||
|
if RX_Bin = 1 then BFlag := true;
|
|||
|
Write_RxFile(Kanal,Zeile);
|
|||
|
end;
|
|||
|
end else {#BIN#} {#XBIN#}
|
|||
|
if (AutoBinOn) and (AutoBin) and ((MldOk = 8) or (MldOk =34)) then
|
|||
|
begin
|
|||
|
{if mldok=8 then} OpenBinFile(Kanal,MemZeile);
|
|||
|
{if mldok=34 then OpenXBinFile (Kanal, MemZeil);}
|
|||
|
end else
|
|||
|
begin
|
|||
|
if (RX_Bin in [3,4]) and (MldOk in [5,6,30,10]) then
|
|||
|
begin
|
|||
|
RX_Bin := 0;
|
|||
|
S_Aus(Kanal,3,M1 + Star + InfoZeile(41) + M1);
|
|||
|
S_PAC(Kanal,NU,true,'');
|
|||
|
SetzeFlags(Kanal);
|
|||
|
end;
|
|||
|
end;
|
|||
|
if SPlus and (RX_Bin = 0) then
|
|||
|
begin
|
|||
|
if (MldOk = 11) and ((length(MemZeile) > 69) or (length(MemZeile) < 65)) then MldOk := 0;
|
|||
|
if SplSave and (MldOk in [1,5,6,30,10,11,14,41]) then Close_7Plus(Kanal);
|
|||
|
if SplSave then
|
|||
|
begin
|
|||
|
Write_SplFile(Kanal,Zeile);
|
|||
|
if not BinOut then BFlag := false;
|
|||
|
end;
|
|||
|
|
|||
|
if (MldOk in [11,14,41]) and not SplSave then
|
|||
|
begin
|
|||
|
Open_Close_7Plus(Kanal,MemZeile);
|
|||
|
if SplSave then
|
|||
|
begin
|
|||
|
Write_SplFile(Kanal,MemZeile + M1);
|
|||
|
if not BinOut then BFlag := true;
|
|||
|
end;
|
|||
|
end;
|
|||
|
if SplSave and (MldOk in [12,15,42]) then
|
|||
|
begin
|
|||
|
Open_Close_7Plus(Kanal,MemZeile);
|
|||
|
if not BinOut then
|
|||
|
begin
|
|||
|
Zeile := MemZeile + M1;
|
|||
|
BFlag := true;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if Drucker then Write_Lpt(Kanal,LptEsc[5]);
|
|||
|
|
|||
|
if BFlag then _aus(Attr,Kanal,Zeile);
|
|||
|
{TEST!}
|
|||
|
if WeFlag then
|
|||
|
begin
|
|||
|
WeFlag := false;
|
|||
|
_aus(Attrib[20],Kanal,DZeile);
|
|||
|
end;
|
|||
|
|
|||
|
if WishDXC and (MldOk = 4) and (Mo.MonActive or SCon[11]) then
|
|||
|
begin
|
|||
|
Bstr := MemZeile;
|
|||
|
Compute_QTH(Bstr);
|
|||
|
if Bstr > '' then _aus(Attrib[29],Kanal,Bstr + M1);
|
|||
|
end;
|
|||
|
if Drucker then Write_Lpt(Kanal,LptEsc[6]);
|
|||
|
|
|||
|
if CSelf > 0 then
|
|||
|
begin
|
|||
|
if (CSelf = 5) and (Auto1Zeile > '') and not AutoCheckLn and
|
|||
|
(pos(Auto1Zeile,UpCaseStr(MemZeile)) > 0) then
|
|||
|
begin
|
|||
|
AutoCheckLn := true;
|
|||
|
if AutoArt = 1 then
|
|||
|
begin
|
|||
|
Auto1Zeile := '';
|
|||
|
AutoArt := 2;
|
|||
|
end else CSelf := 8;
|
|||
|
end;
|
|||
|
|
|||
|
if (CSelf = 5) and not AutoCheckLn and
|
|||
|
(pos(AutoZeile,UpCaseStr(MemZeile)) > 0) then
|
|||
|
begin
|
|||
|
CSelf := 7;
|
|||
|
AutoCheckLn := true;
|
|||
|
end;
|
|||
|
|
|||
|
if (CSelf = 5) and (AutoToCount > 0) then AutoToCount := AutoToConst;
|
|||
|
|
|||
|
if CSelf = 8 then
|
|||
|
begin
|
|||
|
Auto1Zeile := '';
|
|||
|
AutoJmpRet[AutoJmpPtr] := AutoZaehl;
|
|||
|
inc(AutoJmpPtr);
|
|||
|
if AutoJmpPtr > maxAutoJmpPtr then AutoJmpPtr := 1;
|
|||
|
AutoZaehl := AutoJump;
|
|||
|
CSelf := 7;
|
|||
|
end;
|
|||
|
if CSelf = 7 then Autozeile_Holen(Kanal);
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
if First_Frame and (length(Zeile) > 1) and (not node) then
|
|||
|
begin
|
|||
|
|
|||
|
if sysart in [1..5,14] then
|
|||
|
begin
|
|||
|
AutoKenn:=true;
|
|||
|
scon[sysart]:=true;
|
|||
|
if WishBoxLst then BoxListe(Kanal);
|
|||
|
end;
|
|||
|
|
|||
|
if not Ausstiegskanal then
|
|||
|
begin
|
|||
|
if SCon[1] then DieBox_PW_Scan(Kanal,Zeile);
|
|||
|
if SCon[2] and ExtMldFlag then BayBox_US_Scan(Kanal,Zeile);
|
|||
|
end;
|
|||
|
First_Frame := false;
|
|||
|
ExtMld := '';
|
|||
|
ExtMldFlag := false;
|
|||
|
end;
|
|||
|
|
|||
|
if RTF and (MldOk = 25) then
|
|||
|
begin
|
|||
|
ComputeRTF(Kanal,MemZeile);
|
|||
|
nun:=true;
|
|||
|
end;
|
|||
|
|
|||
|
if (Kanal <> show) and
|
|||
|
not(EinstiegsKanal or AusstiegsKanal or NochNichtGelesen
|
|||
|
Or Ignore) and {//db1ras}
|
|||
|
(not Conv.Active or (Conv.Active and (Kanal = ConvHilfsPort))) then
|
|||
|
begin (* Signalisieren, dass neuer Text gekommen ist *)
|
|||
|
if rx_bin<1 then NochNichtGelesen := true;
|
|||
|
Status2;
|
|||
|
If (Klingel) and (TNC_ReadOut) and (RX_Bin<1) and
|
|||
|
(not Mo.MonActive or (Mo.MonActive and Mo.MonSignal)) then
|
|||
|
begin
|
|||
|
if (not Node) or ((Node) and (Konfig.NodeSound)) then Daten_Bell;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if Conv.Active then
|
|||
|
begin
|
|||
|
if (MldOk in [5,6,30]) then ConversQuit(Kanal);
|
|||
|
if MldOk = 24 then
|
|||
|
begin
|
|||
|
if not FrEnd then ConversTX(Kanal,true,false,'');
|
|||
|
ConversRemote(Kanal,MemZeile);
|
|||
|
end else if Zeile <> M1 then
|
|||
|
begin
|
|||
|
ConversTX(Kanal,FrEnd,false,Zeile);
|
|||
|
inc(Conv.Count);
|
|||
|
end;
|
|||
|
if FrEnd then Conv.Count := 0;
|
|||
|
end;
|
|||
|
if AusstiegsKanal and Auto_CON and (MldOk in [1,2,3,5,6,30]) then
|
|||
|
begin
|
|||
|
S_PAC(GegenKanal,NU,false,M2 + FailStr + Ziel_Call + M1);
|
|||
|
Send_Prompt(GegenKanal,FF);
|
|||
|
S_PAC(Kanal,CM,true,'D');
|
|||
|
{*} L_off(Kanal);
|
|||
|
RemConInit(Kanal);
|
|||
|
Rufz_TNC_init(Kanal);
|
|||
|
end;
|
|||
|
|
|||
|
if not (AusstiegsKanal or EinstiegsKanal) then
|
|||
|
begin
|
|||
|
if ((FileSend) or (xbin.tx)) and (MldOk = 10) and (TX_Bin <> 2) then
|
|||
|
begin
|
|||
|
FiResult := CloseBin(TxFile);
|
|||
|
FileSend := false;
|
|||
|
if xbin.TX then CloseXBinProt(kanal);
|
|||
|
xbin.tx:=false;
|
|||
|
xbin.an:=false;
|
|||
|
xbin.rtxok:=true;
|
|||
|
AutoBinOn:=AutoBin;
|
|||
|
BoxZaehl:=5;
|
|||
|
S_Aus(Kanal,3,M1 + Star + InfoZeile(107) + M1);
|
|||
|
S_PAC(Kanal,NU,true,Meldung[10]+M1);
|
|||
|
SetzeFlags(Kanal);
|
|||
|
end;
|
|||
|
|
|||
|
ReKon := false;
|
|||
|
|
|||
|
if not Ignore and not Mo.MonActive then
|
|||
|
begin
|
|||
|
if MldOk in [5,6,30,35] then
|
|||
|
begin
|
|||
|
NodeCmd := true;
|
|||
|
ReKon := true;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if Auto_CON and (MldOk in [1,2,3,5,6,30,35,43]) then
|
|||
|
begin
|
|||
|
Auto_CON := false;
|
|||
|
InfoOut(show,1,1,InfoZeile(119) + B1 + int_str(Kanal) + DP + B1 + InfoZeile(154));
|
|||
|
CancelMailPoll(Kanal);
|
|||
|
end;
|
|||
|
end;
|
|||
|
{TNN!!!}
|
|||
|
if ((NodeCmd and not Ignore) or (Auto_CON) or (SysArt=8)) and (MldOk in [5,6,30,7,18,35]) then
|
|||
|
begin
|
|||
|
if Rekon and (LogArt = 2) then
|
|||
|
begin
|
|||
|
LogBuchEintrag(Kanal,0);
|
|||
|
if Fwd then CancelMailPoll(Kanal);
|
|||
|
end;
|
|||
|
MemZeile := UpCaseStr(MemZeile);
|
|||
|
KillEndBlanks(MemZeile);
|
|||
|
NodeCmd := false;
|
|||
|
NodeCon := true;
|
|||
|
|
|||
|
{*RECONNECT}
|
|||
|
if (rekon) and (Pos(' VIA ', Memzeile)=0) then
|
|||
|
begin
|
|||
|
if (Pos(DP,MemZeile)=0) or (Pos(DP,MemZeile)>Pos(B1, MemZeile)) then
|
|||
|
begin
|
|||
|
if (Pos(DP,MemZeile)>Pos(B1, MemZeile)) then
|
|||
|
While (Pos(DP,MemZeile)>Pos(B1, MemZeile)) do
|
|||
|
MemZeile := RestStr(MemZeile)
|
|||
|
else
|
|||
|
While (pos(B1,MemZeile) > 0) do
|
|||
|
MemZeile := RestStr(MemZeile);
|
|||
|
end;
|
|||
|
|
|||
|
if (Pos(DP,MemZeile)>0) and (Pos(DP,MemZeile)<Pos(B1, MemZeile)) then
|
|||
|
delete (MemZeile, Pos(B1, Memzeile), length(memzeile));
|
|||
|
|
|||
|
if pos(DP,MemZeile) > 0 then MemZeile := ParmStr(2,DP,MemZeile);
|
|||
|
if not ((ord(Memzeile[length(Memzeile)])) in [48..57,65..90,97..122]) then
|
|||
|
delete(Memzeile, length(memzeile),1);
|
|||
|
end
|
|||
|
else
|
|||
|
begin
|
|||
|
delete(Memzeile,Pos(' VIA ', Memzeile),Length(Memzeile)-Pos(' VIA ',memzeile)+1);
|
|||
|
While pos(B1,MemZeile) > 0 do
|
|||
|
MemZeile := RestStr(MemZeile)
|
|||
|
end;
|
|||
|
Flag := Auto_CON;
|
|||
|
|
|||
|
{ sound (3000); delay(1500); nosound;}
|
|||
|
|
|||
|
L_ON(Kanal,TncConStr + B1+ MemZeile,false,Rekon);
|
|||
|
Bstr := MemZeile;
|
|||
|
{or speek}
|
|||
|
if (morsen) and not Flag then
|
|||
|
begin
|
|||
|
Rufz := Bstr;
|
|||
|
Strip(Bstr);
|
|||
|
|
|||
|
if morsen and ((ReKon and ReconMorsen) or (not ReKon and ConMorsen)) then
|
|||
|
begin
|
|||
|
Verzoegern(10 * MPause);
|
|||
|
Morse(Kanal,Bstr);
|
|||
|
end;
|
|||
|
|
|||
|
{ if Speek and ((ReKon and ReconVoice) or (not ReKon and ConVoice))
|
|||
|
then Sprechen(Rufz); }
|
|||
|
|
|||
|
ReKon := false;
|
|||
|
end;
|
|||
|
if AusstiegsKanal and not K[GegenKanal]^.RemConReady
|
|||
|
and not Auto_CON then K[GegenKanal]^.RemConReady := true;
|
|||
|
end;
|
|||
|
|
|||
|
if not Ignore then
|
|||
|
begin
|
|||
|
if SysopParm then Password_Auswert(Kanal,Zeile);
|
|||
|
if Priv_Modus then (* //priv wurde bereits empfangen. Jetzt die *)
|
|||
|
begin (* Antwort auswerten *)
|
|||
|
Priv_Modus := false;
|
|||
|
Nun:=true;
|
|||
|
if pos(Priv_Errechnet,copy(Zeile,1,80)) > 0 then
|
|||
|
begin
|
|||
|
RemAll := true;
|
|||
|
S_PAC(Kanal,NU,true,M1 + InfoZeile(99)+' ' + Meldung[28] + M1);
|
|||
|
end;
|
|||
|
SetzeFlags(Kanal);
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if Kopieren > 0 then S_PAC(Kopieren,NU,FrEnd,Zeile);
|
|||
|
|
|||
|
if EinstiegsKanal or (AusstiegsKanal and not FoundCall) then
|
|||
|
begin
|
|||
|
K[GegenKanal]^.WishBuf := true;
|
|||
|
S_PAC(GegenKanal,NU,FrEnd,Zeile);
|
|||
|
end;
|
|||
|
|
|||
|
if not (Ignore or Mo.MonActive or Conv.Active) and
|
|||
|
((MldOk = 13) or (K[Kanal]^.Node)) and ((length(MemZeile) > 2) or (K[Kanal]^.Node)) then
|
|||
|
begin
|
|||
|
if FileSend then FertigSenden(Kanal);
|
|||
|
|
|||
|
if not (Auto or EinstiegsKanal or AusstiegsKanal) then
|
|||
|
S_PAC(Kanal,NU,true,InfoZeile(120) + M1);
|
|||
|
|
|||
|
if Auto and TNC_ReadOut and
|
|||
|
not (SplSave or (SysArt in SysMenge) or (WishDXC and SCon[11])) then
|
|||
|
Begin
|
|||
|
RemFlag := Echo in [4..7];
|
|||
|
if RemAll then i1 := 2
|
|||
|
else i1 := 1;
|
|||
|
if not node then delete(MemZeile,1,2);
|
|||
|
KillEndBlanks(MemZeile);
|
|||
|
|
|||
|
if (mail_sp) or ((not node) and (length(MemZeile) = 0)) then
|
|||
|
begin
|
|||
|
unknown := true
|
|||
|
end
|
|||
|
else
|
|||
|
begin
|
|||
|
i := REM_Auswert(Kanal,i1,MemZeile);
|
|||
|
if (Einstiegskanal and (i = 1)) or not Einstiegskanal
|
|||
|
then
|
|||
|
if (not Ausstiegskanal) then Remote(Kanal,i,MemZeile);
|
|||
|
if unknown then
|
|||
|
begin
|
|||
|
val(CutStr(MemZeile),i,i1);
|
|||
|
if (i1 = 0) and (i in [0..maxLink]) then
|
|||
|
begin
|
|||
|
unknown := false;
|
|||
|
if i = 0 then SendToChannel(Kanal,0,1,maxLink,MemZeile)
|
|||
|
else SendToChannel(Kanal,0,i,i,MemZeile);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
if mail_sp then unknown:=false;
|
|||
|
if not Node then MemZeile:=dps + MemZeile;
|
|||
|
MemZeile := B1 + Memzeile;
|
|||
|
MemZeile:= UpCaseStr(MemZeile);
|
|||
|
if nun then unknown:=false;
|
|||
|
if unknown then
|
|||
|
begin
|
|||
|
S_PAC(Kanal,NU,false,InfoZeile(112) + MemZeile + M1);
|
|||
|
if Node then
|
|||
|
begin
|
|||
|
inc(UnknownCount);
|
|||
|
if (3-UnknownCount)=1 then S_PAC(Kanal,NU,false,+M1+InfoZeile(425));
|
|||
|
S_PAC(Kanal,NU,false,M1);
|
|||
|
if UnknownCount=3 then
|
|||
|
begin
|
|||
|
S_PAC(kanal,CM,true,'D');
|
|||
|
unknownCount:=0;
|
|||
|
end;
|
|||
|
end else S_PAC(Kanal,NU,false,M1);
|
|||
|
end else UnknownCount:=0;
|
|||
|
if notRC then
|
|||
|
begin
|
|||
|
S_PAC(Kanal,NU,false,InfoZeile(129) + MemZeile + M1);
|
|||
|
_aus(Attrib[20],Kanal,InfoZeile(300) + M1);
|
|||
|
end;
|
|||
|
|
|||
|
if ParmWrong then S_PAC(Kanal,NU,false,InfoZeile(174) + MemZeile + M1);
|
|||
|
if unknown or notRC or ParmWrong then Send_Prompt(Kanal,FF);
|
|||
|
unknown := false;
|
|||
|
notRC := false;
|
|||
|
ParmWrong := false;
|
|||
|
RemFlag := false;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
if FileSend and (TX_Bin in [2,3]) then
|
|||
|
Begin
|
|||
|
if (MldOk in [6,10]) then { #ABORT# }
|
|||
|
begin
|
|||
|
FiResult := CloseBin(TxFile);
|
|||
|
FileSend := false;
|
|||
|
AutoBinOn:=AutoBin;
|
|||
|
SetzeFlags(Kanal);
|
|||
|
if mldok=10 then S_PAC(Kanal,NU,true,M1 + InfoZeile(107) + M1)
|
|||
|
else S_PAC(Kanal,NU,true, M1);
|
|||
|
end;
|
|||
|
if MldOk = 9 then TX_Bin := 3; { #OK# }
|
|||
|
End;
|
|||
|
|
|||
|
if (MldOk=9) and (XBin.An) then
|
|||
|
begin
|
|||
|
filesend:=false;
|
|||
|
xbin.tx:=true;
|
|||
|
xbin.rtxok:=true;
|
|||
|
TX_Bin:=0;
|
|||
|
delete(Zeile,1,4);
|
|||
|
if (zeile[length(zeile)]=#13) then delete(zeile,length(zeile),1);
|
|||
|
if length(zeile)>3 then
|
|||
|
begin
|
|||
|
seek(TXFile, str_int(zeile));
|
|||
|
tx_count:=str_int(zeile);
|
|||
|
end;
|
|||
|
end;
|
|||
|
{,26,27 *VERSCH}
|
|||
|
if MldOk in [19,20,21,22,26,27] then Compress_Ein_Aus(Kanal);
|
|||
|
case mldok of
|
|||
|
31..33:
|
|||
|
begin
|
|||
|
if Zeile[6]<>#32 then insert(#32,Zeile,6);
|
|||
|
if Zeile[length(zeile)]=#13 then delete(Zeile,Length(zeile),1);
|
|||
|
i:=REM_Auswert (Kanal, i, Zeile);
|
|||
|
if i<>254 then Remote(Kanal, i, Zeile) else
|
|||
|
begin
|
|||
|
if not Mo.MonActive then
|
|||
|
begin
|
|||
|
S_PAC(Kanal,NU,false,InfoZeile(129) + Zeile + M1);
|
|||
|
Send_prompt(kanal, ff);
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
36: begin
|
|||
|
{#REQUESTNAME:NQL# - '-'=Senden, '+'=NICHT senden!}
|
|||
|
if (konfig.reqnam) and (not NODE) then
|
|||
|
begin
|
|||
|
BSTR:='';
|
|||
|
if Zeile[length(Meldung[36])+1]='+' then
|
|||
|
if Konfig.PersName<>'' then BSTR:=Meldung[32]+b1+Konfig.Persname+#13;
|
|||
|
if Zeile[length(Meldung[36])+2]='+' then
|
|||
|
if Konfig.PersQTH<>'' then BSTR:=Bstr+Meldung[33]+b1+Konfig.PersQTH+#13;
|
|||
|
if Zeile[length(Meldung[36])+3]='+' then
|
|||
|
if Konfig.PersLoc<>'' then BSTR:=Bstr+Meldung[31]+b1+Konfig.PersLOC+#13;
|
|||
|
S_PAC(kanal,NU,true,BSTR+M1);
|
|||
|
end;
|
|||
|
end;
|
|||
|
37: begin {//COMP ON}
|
|||
|
spcomp:=true;
|
|||
|
txcomp:=false;
|
|||
|
rxcomp:=true;
|
|||
|
CompZeile := '';
|
|||
|
MeldeCompZ := '';
|
|||
|
S_PAC(kanal,NU,true,Meldung[39]+M1);
|
|||
|
txcomp:=true;
|
|||
|
if TxComp and (PacLen > maxCompPac) then PacLen := maxCompPac;
|
|||
|
setzeflags(Kanal);
|
|||
|
end;
|
|||
|
38: begin {//COMP OFF}
|
|||
|
spcomp:=true;
|
|||
|
txcomp:=true;
|
|||
|
rxcomp:=false;
|
|||
|
S_PAC(kanal,NU,true,Meldung[40]+M1);
|
|||
|
txcomp:=false;
|
|||
|
spcomp:=false;
|
|||
|
setzeflags(Kanal);
|
|||
|
end;
|
|||
|
39: begin {//COMP 1}
|
|||
|
spcomp:=true;
|
|||
|
txcomp:=true;
|
|||
|
rxcomp:=true;
|
|||
|
CompZeile := '';
|
|||
|
MeldeCompZ := '';
|
|||
|
if TxComp and (PacLen > maxCompPac) then PacLen := maxCompPac;
|
|||
|
setzeflags(Kanal);
|
|||
|
end;
|
|||
|
40: begin {//COMP 0}
|
|||
|
spcomp:=false;
|
|||
|
txcomp:=false;
|
|||
|
rxcomp:=false;
|
|||
|
setzeflags(Kanal);
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
if not RX_Save then Mail_sp:=false;
|
|||
|
end;
|
|||
|
|
|||
|
End;
|
|||
|
|
|||
|
Function FreiePuffer (* Kanal : Byte) : Word *);
|
|||
|
Begin
|
|||
|
with K[Kanal]^ do
|
|||
|
begin
|
|||
|
Ausgabe := false;
|
|||
|
TxRxTNC(Kanal,1,'@B');
|
|||
|
FreiePuffer := Word(str_int(Response));
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
Function QuerCheck (* Zeile : String) : Word *);
|
|||
|
Var i,l : Byte;
|
|||
|
w : Word;
|
|||
|
Begin
|
|||
|
l := ord(Zeile[0]);
|
|||
|
w := l;
|
|||
|
for i := 1 to l do w := w + ord(Zeile[i]);
|
|||
|
QuerCheck := w;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
Procedure Mon_Header_Auswerten;
|
|||
|
Var i,i1,i2,
|
|||
|
iz,iNr,
|
|||
|
fNr : Byte;
|
|||
|
FehlFrame,
|
|||
|
IFr,UFr : Boolean;
|
|||
|
Hstr : String[25];
|
|||
|
Bstr : String[80];
|
|||
|
Fstr : String[50];
|
|||
|
Begin
|
|||
|
if Mon_Anz > 0 then
|
|||
|
begin
|
|||
|
iNr := pos(IFrame,G^.HeaderStr);
|
|||
|
IFr := iNr > 0;
|
|||
|
if IFr then
|
|||
|
begin
|
|||
|
iNr := pos(IFrame,G^.HeaderStr) + 7;
|
|||
|
iNr := str_int(G^.HeaderStr[iNr]);
|
|||
|
end;
|
|||
|
UFr := pos(UFrame,G^.HeaderStr) > 0;
|
|||
|
Hstr := ParmStr(2,B1,G^.HeaderStr) + zu +
|
|||
|
ParmStr(4,B1,G^.HeaderStr) + B1;
|
|||
|
|
|||
|
for i := 1 to maxLink do with K[i]^ do
|
|||
|
begin
|
|||
|
if Mo.MonActive then
|
|||
|
begin
|
|||
|
for i1 := 1 to 2 do Mo.MonNow[i1] := false;
|
|||
|
if Mo.MonBeide then iz := 2 else iz := 1;
|
|||
|
for i1 := 1 to iz do
|
|||
|
begin
|
|||
|
if pos(Mo.MonStr[i1]+B1,Hstr) > 0 then
|
|||
|
begin
|
|||
|
if Mo.MonFirst[i1] then Mo.MonFrameNr[i1] := iNr;
|
|||
|
|
|||
|
FehlFrame := Mo.MonIFr and IFr and Mo.MonStrict and
|
|||
|
(iNr <> Mo.MonFrameNr[i1]) and
|
|||
|
(QuerCheck(K[0]^.Response) <> Mo.MonCtrl[i1][iNr]);
|
|||
|
|
|||
|
if (Mo.MonUFr and UFr) or FehlFrame or
|
|||
|
(Mo.MonIFr and IFr and
|
|||
|
(not Mo.MonStrict or (iNr = Mo.MonFrameNr[i1]))) then
|
|||
|
begin
|
|||
|
Mo.MonCtrl[i1][iNr] := QuerCheck(K[0]^.Response);
|
|||
|
|
|||
|
if FehlFrame then
|
|||
|
begin
|
|||
|
fNr := Mo.MonFrameNr[i1];
|
|||
|
Mo.MonFrameNr[i1] := iNr;
|
|||
|
Fstr := B1 + InfoZeile(170);
|
|||
|
While fNr <> iNr do
|
|||
|
begin
|
|||
|
Fstr := Fstr + B1 + 'I' + int_str(fNr);
|
|||
|
inc(fNr);
|
|||
|
if fNr > 7 then fNr := 0;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
inc(Mo.MonFrameNr[i1]);
|
|||
|
if Mo.MonFrameNr[i1] > 7 then Mo.MonFrameNr[i1] := 0;
|
|||
|
|
|||
|
if (Hstr <> Mo.MonLast) or FehlFrame then
|
|||
|
begin
|
|||
|
if not RxLRet then _aus(Mo.MonAttr,i,M1);
|
|||
|
if Mo.MonHCall then
|
|||
|
begin
|
|||
|
Bstr := Hstr;
|
|||
|
KillEndBlanks(Bstr);
|
|||
|
if not Mo.MonEHCall then Bstr := CutStr(Bstr);
|
|||
|
Bstr := LSK + Bstr + RSK + DP;
|
|||
|
if IFr then Bstr := Bstr + B1 + LRK + 'I' + int_str(iNr) + RRK;
|
|||
|
if FehlFrame then
|
|||
|
begin
|
|||
|
Bstr[1] := S_ch;
|
|||
|
Bstr := Bstr + Fstr;
|
|||
|
end;
|
|||
|
_aus(Attrib[19],i,Bstr + M1);
|
|||
|
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
Mo.MonAttr := Attrib[25+i1];
|
|||
|
Mo.MonLast := Hstr;
|
|||
|
Mo.MonNow[i1] := true;
|
|||
|
end;
|
|||
|
Mo.MonFirst[i1] := false;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
Procedure TickerOut;
|
|||
|
Var i,i1,Attr : Byte;
|
|||
|
Begin
|
|||
|
if TicAnz > 0 then
|
|||
|
begin
|
|||
|
i1 := 0;
|
|||
|
for i := 1 to Tnc_Anzahl do with TNC[i]^ do if Tic then
|
|||
|
begin
|
|||
|
inc(i1);
|
|||
|
Attr := Attrib[ColMonBeg + i * 4];
|
|||
|
WriteRam(1,i1,Attr,1,int_str(i) + DP + B1 + TicStr);
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
Function FormMonFr (* TNr : Byte; Hstr : Str5; Zeile : String) : String *);
|
|||
|
Var i : Byte;
|
|||
|
Begin
|
|||
|
if ModMonFr then
|
|||
|
begin
|
|||
|
delete(Zeile,1,3);
|
|||
|
i := pos(B1+'to'+B1,Zeile);
|
|||
|
Zeile[i] := RSK;
|
|||
|
delete(Zeile,i+1,3);
|
|||
|
|
|||
|
i := pos(B1+'via'+B1,Zeile);
|
|||
|
if i > 0 then delete(Zeile,i,4);
|
|||
|
|
|||
|
i := pos(B1+'ctl'+B1,Zeile);
|
|||
|
if i > 0 then delete(Zeile,i,4);
|
|||
|
|
|||
|
i := pos(B1+'pid'+B1,Zeile);
|
|||
|
if i > 0 then delete(Zeile,i,4);
|
|||
|
end;
|
|||
|
if MonID = 1 then Zeile := Hstr + Zeile;
|
|||
|
if MonID = 2 then Zeile := int_str(TNr) + DP + Zeile;
|
|||
|
FormMonFr := Zeile;
|
|||
|
End;
|