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";
|
numRPLCREATED = "003";
|
||||||
numRPLMYINFO = "004";
|
numRPLMYINFO = "004";
|
||||||
|
|
||||||
|
errClosingLink = "ERROR :Closing Link:";
|
||||||
|
|
||||||
TYPE
|
TYPE
|
||||||
chn* = ARRAY 32 OF CHAR;
|
chn* = ARRAY 32 OF CHAR;
|
||||||
chnlist* = POINTER TO ARRAY OF chn;
|
chnlist* = POINTER TO ARRAY OF chn;
|
||||||
|
|
@ -37,17 +39,27 @@ VAR
|
||||||
|
|
||||||
(* string operations *)
|
(* 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 *)
|
(* cuts line, takes the part till the eol *)
|
||||||
PROCEDURE cutLine(VAR src, dst: ARRAY OF CHAR);
|
PROCEDURE cutLine(VAR src, dst: ARRAY OF CHAR);
|
||||||
VAR
|
VAR
|
||||||
found: BOOLEAN;
|
found: BOOLEAN;
|
||||||
pos : INTEGER;
|
pos : INTEGER;
|
||||||
i : INTEGER;
|
i : INTEGER;
|
||||||
pattern : ARRAY 1 OF CHAR;
|
|
||||||
BEGIN
|
BEGIN
|
||||||
pattern[0] := LF;
|
|
||||||
COPY("", dst);
|
COPY("", dst);
|
||||||
Strings.FindNext(pattern, src, 0, found, pos);
|
findChar(LF, src, found, pos);
|
||||||
IF found THEN
|
IF found THEN
|
||||||
i := 0;
|
i := 0;
|
||||||
REPEAT
|
REPEAT
|
||||||
|
|
@ -63,10 +75,8 @@ PROCEDURE terminateLine(VAR str: ARRAY OF CHAR);
|
||||||
VAR
|
VAR
|
||||||
found: BOOLEAN;
|
found: BOOLEAN;
|
||||||
pos : INTEGER;
|
pos : INTEGER;
|
||||||
pattern : ARRAY 1 OF CHAR;
|
|
||||||
BEGIN
|
BEGIN
|
||||||
pattern[0] := LF;
|
findChar(LF, str, found, pos);
|
||||||
Strings.FindNext(pattern, str, 0, found, pos);
|
|
||||||
IF found THEN
|
IF found THEN
|
||||||
IF (pos + 1) < LEN(str) THEN
|
IF (pos + 1) < LEN(str) THEN
|
||||||
str[pos + 1] := 0X
|
str[pos + 1] := 0X
|
||||||
|
|
@ -139,6 +149,14 @@ BEGIN
|
||||||
IF found THEN RETURN TRUE ELSE RETURN FALSE END
|
IF found THEN RETURN TRUE ELSE RETURN FALSE END
|
||||||
END rplWelcome;
|
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 *)
|
(* instance functions *)
|
||||||
|
|
||||||
|
|
@ -235,29 +253,37 @@ BEGIN
|
||||||
b := Send(inst, str);
|
b := Send(inst, str);
|
||||||
END Join;
|
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
|
BEGIN
|
||||||
|
b := TRUE;
|
||||||
IF isPing(line) THEN Pong(inst, line) END;
|
IF isPing(line) THEN Pong(inst, line) END;
|
||||||
|
IF error(line) THEN
|
||||||
IF serverMsg(line) THEN
|
Disconnect(inst);
|
||||||
IF rplWelcome(line) THEN
|
b := FALSE;
|
||||||
Mode(inst);
|
ELSE
|
||||||
Join(inst);
|
IF serverMsg(line) THEN
|
||||||
ELSE
|
IF rplWelcome(line) THEN
|
||||||
inst.callback(line);
|
Mode(inst);
|
||||||
|
Join(inst);
|
||||||
|
ELSE
|
||||||
|
inst.callback(line);
|
||||||
|
END;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
|
RETURN b;
|
||||||
END processResponse;
|
END processResponse;
|
||||||
|
|
||||||
PROCEDURE Loop*(VAR inst: instance);
|
PROCEDURE Loop*(VAR inst: instance);
|
||||||
VAR
|
VAR
|
||||||
b : BOOLEAN;
|
b, b2 : BOOLEAN;
|
||||||
str : ARRAY msgLen OF CHAR;
|
str : ARRAY msgLen OF CHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
REPEAT
|
REPEAT
|
||||||
b := Receive(inst, str);
|
b := Receive(inst, str);
|
||||||
processResponse(inst, str);
|
b2 := processResponse(inst, str);
|
||||||
UNTIL ~b;
|
UNTIL ~b OR ~b2;
|
||||||
END Loop;
|
END Loop;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
||||||
6
test.Mod
6
test.Mod
|
|
@ -20,9 +20,9 @@ VAR
|
||||||
channels : IRC.chnlist;
|
channels : IRC.chnlist;
|
||||||
b: BOOLEAN;
|
b: BOOLEAN;
|
||||||
BEGIN
|
BEGIN
|
||||||
inst.owner := "norayr_shimamoto";
|
inst.owner := "norayr_tanakian";
|
||||||
inst.user := "nakata_san";
|
inst.user := "norayr_tanakian";
|
||||||
inst.nick := "oshima";
|
inst.nick := "vocbot";
|
||||||
inst.host := "irc.freenode.net";
|
inst.host := "irc.freenode.net";
|
||||||
inst.port := "6667";
|
inst.port := "6667";
|
||||||
inst.callback := clbk;
|
inst.callback := clbk;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue