mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-06 04:52:26 +00:00
separated string helper functions to a different module
added wirth styled timestamps renamed makefile to lowercase
This commit is contained in:
parent
c56cf32567
commit
d94bf140dc
9 changed files with 161 additions and 155 deletions
125
stringHelpers.Mod
Normal file
125
stringHelpers.Mod
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
MODULE stringHelpers; (*noch 18.5.2017 / 18.5.2017*)
|
||||
IMPORT Strings := ooc2Strings;
|
||||
|
||||
CONST
|
||||
CR* = 0DX;
|
||||
LF* = 0AX;
|
||||
|
||||
(** feels whole array with zeroes, useful when one needs to get several strings which contain characters < ' ' and not necessarily end with 0X *)
|
||||
PROCEDURE zeroStr*(VAR str: ARRAY OF CHAR);
|
||||
VAR
|
||||
i, j : LONGINT;
|
||||
BEGIN
|
||||
i := LEN(str);
|
||||
j := 0;
|
||||
REPEAT
|
||||
str[j] := 0X;
|
||||
INC(j)
|
||||
UNTIL j = i;
|
||||
END zeroStr;
|
||||
|
||||
PROCEDURE appendLFCR*(VAR str: ARRAY OF CHAR);
|
||||
VAR
|
||||
l : INTEGER;
|
||||
BEGIN
|
||||
l := Strings.Length(str);
|
||||
str[l] := LF;
|
||||
str[l+1] := CR;
|
||||
str[l+2] := 0X;
|
||||
END appendLFCR;
|
||||
|
||||
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;
|
||||
BEGIN
|
||||
COPY("", dst);
|
||||
findChar(LF, src, found, pos);
|
||||
IF found THEN
|
||||
i := 0;
|
||||
REPEAT
|
||||
dst[i] := src[i];
|
||||
INC(i);
|
||||
UNTIL (i = pos) OR (i = LEN(dst)-2);
|
||||
dst[i] := src[i];
|
||||
dst[i+1] := 0X
|
||||
END;
|
||||
END cutLine;
|
||||
|
||||
(* put 0X after eol in the string *)
|
||||
PROCEDURE terminateLine*(VAR str: ARRAY OF CHAR);
|
||||
VAR
|
||||
found: BOOLEAN;
|
||||
pos : INTEGER;
|
||||
BEGIN
|
||||
findChar(LF, str, found, pos);
|
||||
IF found THEN
|
||||
IF (pos + 1) < LEN(str) THEN
|
||||
str[pos + 1] := 0X
|
||||
END
|
||||
END;
|
||||
END terminateLine;
|
||||
|
||||
PROCEDURE getTillEOL*(VAR src: ARRAY OF CHAR; spos: INTEGER; VAR dst: ARRAY OF CHAR); (* actually get till any character < ' ' *)
|
||||
VAR
|
||||
i, j: INTEGER;
|
||||
BEGIN
|
||||
zeroStr(dst);
|
||||
i := 0;
|
||||
j := spos+1;
|
||||
REPEAT
|
||||
dst[i] := src[i+j];
|
||||
INC(i);
|
||||
UNTIL (i+j = Strings.Length(src)) OR (src[i+j] < ' ');
|
||||
END getTillEOL;
|
||||
|
||||
(* get next word starting from spos till the ' ' *)
|
||||
PROCEDURE getNextWord*(VAR src: ARRAY OF CHAR; spos: INTEGER; VAR dst: ARRAY OF CHAR);
|
||||
VAR
|
||||
i, j: INTEGER;
|
||||
BEGIN
|
||||
zeroStr(dst);
|
||||
i := 0;
|
||||
j := spos+1;
|
||||
REPEAT
|
||||
dst[i] := src[i+j];
|
||||
INC(i);
|
||||
UNTIL (i+j = Strings.Length(src)) OR (src[i+j] <= ' ');
|
||||
END getNextWord;
|
||||
|
||||
PROCEDURE contains* (VAR line : ARRAY OF CHAR; pattern: ARRAY OF CHAR): BOOLEAN;
|
||||
VAR
|
||||
found: BOOLEAN;
|
||||
pos : INTEGER;
|
||||
i : INTEGER;
|
||||
patternLength: INTEGER;
|
||||
tmpline: POINTER TO ARRAY OF CHAR;
|
||||
BEGIN
|
||||
i := 0;
|
||||
patternLength := Strings.Length(pattern);
|
||||
NEW(tmpline, patternLength+1);
|
||||
found := FALSE;
|
||||
REPEAT
|
||||
Strings.Extract(line, i, patternLength, tmpline^);
|
||||
found := Strings.Equal(pattern, tmpline^);
|
||||
INC(i);
|
||||
UNTIL found OR (i = LEN(line) - patternLength - 1);
|
||||
IF found THEN RETURN TRUE ELSE RETURN FALSE END
|
||||
END contains;
|
||||
|
||||
|
||||
END stringHelpers.
|
||||
Loading…
Add table
Add a link
Reference in a new issue