|
@@ -122,6 +122,94 @@ BEGIN
|
|
|
RETURN 0
|
|
RETURN 0
|
|
|
END Pos;
|
|
END Pos;
|
|
|
|
|
|
|
|
|
|
+PROCEDURE Slice (VAR s : ARRAY OF CHAR; start, stop : INTEGER;
|
|
|
|
|
+ VAR dst : ARRAY OF CHAR);
|
|
|
|
|
+VAR n, i, k, cap : INTEGER;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ n := Length(s);
|
|
|
|
|
+ IF start < 0 THEN start := n + start END;
|
|
|
|
|
+ IF stop < 0 THEN stop := n + stop END;
|
|
|
|
|
+ IF start < 0 THEN start := 0 END;
|
|
|
|
|
+ IF start > n THEN start := n END;
|
|
|
|
|
+ IF stop < 0 THEN stop := 0 END;
|
|
|
|
|
+ IF stop > n THEN stop := n END;
|
|
|
|
|
+ IF stop < start THEN stop := start END;
|
|
|
|
|
+ cap := HIGH(dst);
|
|
|
|
|
+ i := start; k := 0;
|
|
|
|
|
+ WHILE (i < stop) AND (k < cap) DO
|
|
|
|
|
+ dst[k] := s[i];
|
|
|
|
|
+ INC(i); INC(k)
|
|
|
|
|
+ END;
|
|
|
|
|
+ dst[k] := CHR(0)
|
|
|
|
|
+END Slice;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE Insert (VAR src, dst : ARRAY OF CHAR; pos : INTEGER);
|
|
|
|
|
+VAR n, m, cap, nl, i : INTEGER;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ n := Length(dst);
|
|
|
|
|
+ m := Length(src);
|
|
|
|
|
+ cap := HIGH(dst);
|
|
|
|
|
+ IF pos < 0 THEN pos := 0 END;
|
|
|
|
|
+ IF pos > n THEN pos := n END;
|
|
|
|
|
+ IF m < 0 THEN m := 0 END;
|
|
|
|
|
+ IF n + m > cap THEN m := cap - n END; (* only what fits *)
|
|
|
|
|
+ IF m < 0 THEN m := 0 END;
|
|
|
|
|
+ (* shift the tail right by m, from the end backwards *)
|
|
|
|
|
+ i := n;
|
|
|
|
|
+ WHILE i > pos DO
|
|
|
|
|
+ DEC(i);
|
|
|
|
|
+ IF i + m <= cap THEN dst[i + m] := dst[i] END
|
|
|
|
|
+ END;
|
|
|
|
|
+ i := 0;
|
|
|
|
|
+ WHILE i < m DO
|
|
|
|
|
+ dst[pos + i] := src[i];
|
|
|
|
|
+ INC(i)
|
|
|
|
|
+ END;
|
|
|
|
|
+ nl := n + m;
|
|
|
|
|
+ IF nl > cap THEN nl := cap END;
|
|
|
|
|
+ dst[nl] := CHR(0)
|
|
|
|
|
+END Insert;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE Replace (VAR src, dst : ARRAY OF CHAR; pos : INTEGER);
|
|
|
|
|
+VAR n, m, cap, nl, i : INTEGER;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ n := Length(dst);
|
|
|
|
|
+ m := Length(src);
|
|
|
|
|
+ cap := HIGH(dst);
|
|
|
|
|
+ IF pos < 0 THEN pos := 0 END;
|
|
|
|
|
+ IF pos > n THEN pos := n END;
|
|
|
|
|
+ i := 0;
|
|
|
|
|
+ WHILE (i < m) AND (pos + i < cap) DO
|
|
|
|
|
+ dst[pos + i] := src[i];
|
|
|
|
|
+ INC(i)
|
|
|
|
|
+ END;
|
|
|
|
|
+ nl := pos + m;
|
|
|
|
|
+ IF nl > cap THEN nl := cap END;
|
|
|
|
|
+ IF nl > n THEN dst[nl] := CHR(0) END
|
|
|
|
|
+END Replace;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE Capitalize (VAR s : ARRAY OF CHAR);
|
|
|
|
|
+VAR i, n : INTEGER;
|
|
|
|
|
+ ch : CHAR;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ n := Length(s);
|
|
|
|
|
+ i := 0;
|
|
|
|
|
+ WHILE i < n DO
|
|
|
|
|
+ ch := s[i];
|
|
|
|
|
+ IF i = 0 THEN
|
|
|
|
|
+ IF (ch >= "a") AND (ch <= "z") THEN
|
|
|
|
|
+ ch := CHR(ORD(ch) - 32)
|
|
|
|
|
+ END
|
|
|
|
|
+ ELSE
|
|
|
|
|
+ IF (ch >= "A") AND (ch <= "Z") THEN
|
|
|
|
|
+ ch := CHR(ORD(ch) + 32)
|
|
|
|
|
+ END
|
|
|
|
|
+ END;
|
|
|
|
|
+ s[i] := ch;
|
|
|
|
|
+ INC(i)
|
|
|
|
|
+ END
|
|
|
|
|
+END Capitalize;
|
|
|
|
|
+
|
|
|
PROCEDURE Compare (VAR s1, s2 : ARRAY OF CHAR) : INTEGER;
|
|
PROCEDURE Compare (VAR s1, s2 : ARRAY OF CHAR) : INTEGER;
|
|
|
VAR i, n1, n2, n : INTEGER;
|
|
VAR i, n1, n2, n : INTEGER;
|
|
|
BEGIN
|
|
BEGIN
|