mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
error handling.
This commit is contained in:
parent
f3c9e3e006
commit
ea18cdabff
2 changed files with 46 additions and 20 deletions
60
IRC.Mod
60
IRC.Mod
|
|
@ -17,6 +17,8 @@ CONST
|
|||
numRPLCREATED = "003";
|
||||
numRPLMYINFO = "004";
|
||||
|
||||
errClosingLink = "ERROR :Closing Link:";
|
||||
|
||||
TYPE
|
||||
chn* = ARRAY 32 OF CHAR;
|
||||
chnlist* = POINTER TO ARRAY OF chn;
|
||||
|
|
@ -37,17 +39,27 @@ VAR
|
|||
|
||||
(* string operations *)
|
||||
|
||||
PROCEDURE findChar(ch: CHAR; VAR line: ARRAY OF CHAR; VAR b: BOOLEAN; VAR pos: INTEGER);
|
||||
VAR
|
||||
i : INTEGER;
|
||||
BEGIN
|
||||
i := -1; pos := -1;
|
||||
b := FALSE;
|
||||
REPEAT
|
||||
INC(i);
|
||||
IF line[i] = ch THEN b := TRUE; pos := i END;
|
||||
UNTIL b OR (i = LEN(line) - 1);
|
||||
END findChar;
|
||||
|
||||
(* cuts line, takes the part till the eol *)
|
||||
PROCEDURE cutLine(VAR src, dst: ARRAY OF CHAR);
|
||||
VAR
|
||||
found: BOOLEAN;
|
||||
pos : INTEGER;
|
||||
i : INTEGER;
|
||||
pattern : ARRAY 1 OF CHAR;
|
||||
BEGIN
|
||||
pattern[0] := LF;
|
||||
COPY("", dst);
|
||||
Strings.FindNext(pattern, src, 0, found, pos);
|
||||
findChar(LF, src, found, pos);
|
||||
IF found THEN
|
||||
i := 0;
|
||||
REPEAT
|
||||
|
|
@ -63,10 +75,8 @@ PROCEDURE terminateLine(VAR str: ARRAY OF CHAR);
|
|||
VAR
|
||||
found: BOOLEAN;
|
||||
pos : INTEGER;
|
||||
pattern : ARRAY 1 OF CHAR;
|
||||
BEGIN
|
||||
pattern[0] := LF;
|
||||
Strings.FindNext(pattern, str, 0, found, pos);
|
||||
findChar(LF, str, found, pos);
|
||||
IF found THEN
|
||||
IF (pos + 1) < LEN(str) THEN
|
||||
str[pos + 1] := 0X
|
||||
|
|
@ -139,6 +149,14 @@ BEGIN
|
|||
IF found THEN RETURN TRUE ELSE RETURN FALSE END
|
||||
END rplWelcome;
|
||||
|
||||
PROCEDURE error(VAR line: ARRAY OF CHAR): BOOLEAN;
|
||||
VAR
|
||||
b : BOOLEAN;
|
||||
pos: INTEGER;
|
||||
BEGIN
|
||||
Strings.FindNext(errClosingLink, line, 0, b, pos);
|
||||
RETURN b
|
||||
END error;
|
||||
|
||||
(* instance functions *)
|
||||
|
||||
|
|
@ -235,29 +253,37 @@ BEGIN
|
|||
b := Send(inst, str);
|
||||
END Join;
|
||||
|
||||
PROCEDURE processResponse(VAR inst: instance; VAR line: ARRAY OF CHAR);
|
||||
PROCEDURE processResponse(VAR inst: instance; VAR line: ARRAY OF CHAR): BOOLEAN;
|
||||
VAR
|
||||
b : BOOLEAN;
|
||||
BEGIN
|
||||
b := TRUE;
|
||||
IF isPing(line) THEN Pong(inst, line) END;
|
||||
|
||||
IF serverMsg(line) THEN
|
||||
IF rplWelcome(line) THEN
|
||||
Mode(inst);
|
||||
Join(inst);
|
||||
ELSE
|
||||
inst.callback(line);
|
||||
IF error(line) THEN
|
||||
Disconnect(inst);
|
||||
b := FALSE;
|
||||
ELSE
|
||||
IF serverMsg(line) THEN
|
||||
IF rplWelcome(line) THEN
|
||||
Mode(inst);
|
||||
Join(inst);
|
||||
ELSE
|
||||
inst.callback(line);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
RETURN b;
|
||||
END processResponse;
|
||||
|
||||
PROCEDURE Loop*(VAR inst: instance);
|
||||
VAR
|
||||
b : BOOLEAN;
|
||||
b, b2 : BOOLEAN;
|
||||
str : ARRAY msgLen OF CHAR;
|
||||
BEGIN
|
||||
REPEAT
|
||||
b := Receive(inst, str);
|
||||
processResponse(inst, str);
|
||||
UNTIL ~b;
|
||||
b2 := processResponse(inst, str);
|
||||
UNTIL ~b OR ~b2;
|
||||
END Loop;
|
||||
|
||||
BEGIN
|
||||
|
|
|
|||
6
test.Mod
6
test.Mod
|
|
@ -20,9 +20,9 @@ VAR
|
|||
channels : IRC.chnlist;
|
||||
b: BOOLEAN;
|
||||
BEGIN
|
||||
inst.owner := "norayr_shimamoto";
|
||||
inst.user := "nakata_san";
|
||||
inst.nick := "oshima";
|
||||
inst.owner := "norayr_tanakian";
|
||||
inst.user := "norayr_tanakian";
|
||||
inst.nick := "vocbot";
|
||||
inst.host := "irc.freenode.net";
|
||||
inst.port := "6667";
|
||||
inst.callback := clbk;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue