package
TEXT_HANDLER is
MAXIMUM : constant
:= SOME_VALUE; -- implementation-defined
subtype
INDEX is
INTEGER range
0 .. MAXIMUM;
type
TEXT(MAXIMUM_LENGTH : INDEX) is limited private
;
function
LENGTH (T : TEXT) return
INDEX;
function
VALUE (T : TEXT) return
STRING;
function
EMPTY (T : TEXT) return
BOOLEAN; function
TO_TEXT (S : STRING; MAX : INDEX) return
TEXT;
-- maximum length MAX
function
TO_TEXT (C : CHARACTER; MAX : INDEX) return
TEXT;
function
TO_TEXT (S : STRING) return
TEXT;
-- maximum length S'LENGTH
function
TO_TEXT (C : CHARACTER) return
TEXT;
function
"&" (LEFT : TEXT; RIGHT : TEXT) return
TEXT;
function
"&" (LEFT : TEXT; RIGHT : STRING) return
TEXT;
function
"&" (LEFT : STRING; RIGHT : TEXT) return
TEXT;
function
"&" (LEFT : TEXT; RIGHT : CHARACTER) return
TEXT;
function
"&" (LEFT : CHARACTER; RIGHT : TEXT) return
TEXT;
function
"=" (LEFT : TEXT; RIGHT : TEXT) return
BOOLEAN;
function
"<" (LEFT : TEXT; RIGHT : TEXT) return
BOOLEAN;
function
"<=" (LEFT : TEXT; RIGHT : TEXT) return
BOOLEAN;
function
">" (LEFT : TEXT; RIGHT : TEXT) return
BOOLEAN;
function
">=" (LEFT : TEXT; RIGHT : TEXT) return
BOOLEAN; procedure
SET (OBJECT : in out
TEXT; VALUE : in
TEXT);
procedure
SET (OBJECT : in out
TEXT; VALUE : in
STRING);
procedure
SET (OBJECT : in out
TEXT; VALUE : in
CHARACTER); procedure
APPEND (TAIL : in
TEXT; TO : in out
TEXT);
procedure
APPEND (TAIL : in
STRING; TO : in out
TEXT);
procedure
APPEND (TAIL : in
CHARACTER; TO : in out
TEXT);
procedure
AMEND (OBJECT : in out
TEXT; BY : in
TEXT;
POSITION : in
INDEX);
procedure
AMEND (OBJECT : in out
TEXT; BY : in
STRING;
POSITION : in
INDEX);
procedure
AMEND (OBJECT : in out
TEXT; BY : in
CHARACTER;
POSITION : in
INDEX);
-- or character starting at the given position in the object
function
LOCATE (FRAGMENT : TEXT; WITHIN : TEXT) return
INDEX;
function
LOCATE
(FRAGMENT : STRING; WITHIN : TEXT) return
INDEX;
function
LOCATE
(FRAGMENT : CHARACTER; WITHIN : TEXT) return
INDEX; private
type
TEXT(MAXIMUM_LENGTH : INDEX) is
record
POS : INDEX := 0;
VALUE : STRING(1 .. MAXIMUM_LENGTH);
end record
;
end
TEXT_HANDLER;
[DEVICE :] [FILENAME [.EXTENSION]]
function
EXPAND_FILE_NAME (NAME : STRING) return
STRING is
use
TEXT_HANDLER;
DEFAULT_DEVICE :
constant
STRING := "SY:";
DEFAULT_FILE_NAME : constant
STRING := "RESULTS";
DEFAULT_EXTENSION : constant
STRING := ".DAT"; constant
INDEX :=
SOME_APPROPRIATE_VALUE;
FILE_NAME : TEXT(MAXIMUM_FILE_NAME_LENGTH);
begin
if
EMPTY(FILE_NAME) then
SET(FILE_NAME, DEFAULT_FILE_NAME);
end if
;
if
LOCATE(`:', FILE_NAME) = 0 then
SET(FILE_NAME, DEFAULT_DEVICE & FILE_NAME);
end if
; if
LOCATE(`.', FILE_NAME) = 0 then
APPEND(DEFAULT_EXTENSION, TO => FILE_NAME);
end if
; return
VALUE(FILE_NAME); end
EXPAND_FILE_NAME;