INCLUDE "../../../pseudocode-lib/_exp_string.cps" FUNCTION Echo(S : _EXP_STRING) RETURNS _EXP_STRING RETURN S ENDFUNCTION DECLARE A : _EXP_STRING((C_STRING)"hello") DECLARE B : _EXP_STRING(A) B <- (C_STRING)"world" B <- B CALL _EXP_STRING_OUTPUT(A & B) DECLARE Empty : _EXP_STRING OUTPUT _EXP_STRING_LENGTH(Empty) DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') OUTPUT _EXP_STRING_LENGTH(Nuls) DECLARE Long : _EXP_STRING(20000, (C_CHAR)'x') DECLARE I : INTEGER FOR I <- 1 TO 100 Long <- Long & A NEXT I OUTPUT _EXP_STRING_LENGTH(Long) Long <- Echo(Long) OUTPUT _EXP_STRING_LENGTH(Long) CALL _EXP_STRING_OUTPUT(_EXP_STRING_NUM_TO_STR(42) & _EXP_STRING_NUM_TO_STR(1.25)) DECLARE Number : _EXP_STRING((C_STRING)"12.5") OUTPUT _EXP_STRING_STR_TO_NUM(Number) = 12.5 TRY Number <- (C_STRING)"12x" OUTPUT _EXP_STRING_STR_TO_NUM(Number) CATCH OUTPUT "conversion caught" ENDTRY TRY DECLARE Invalid : _EXP_STRING(-1, (C_CHAR)'x') CATCH OUTPUT "length caught" ENDTRY CALL _EXP_STRING_NUM_TO_STR(99) CALL Echo(Long) DECLARE Heap : _EXP_STRING Heap <- NEW _EXP_STRING((C_STRING)"heap") CALL _EXP_STRING_OUTPUT(Heap) DELETE Heap CALL CheckLeft() CALL CheckRight() CALL CheckMid() CALL CheckLCase() PROCEDURE CheckLeft() DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") DECLARE Empty : _EXP_STRING DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') DECLARE A : _EXP_STRING((C_STRING)"hello") CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 3)) OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, -1)) CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 20)) OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Nuls & A, 4)) ENDPROCEDURE PROCEDURE CheckRight() DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") DECLARE Empty : _EXP_STRING DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') DECLARE A : _EXP_STRING((C_STRING)"hello") CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 3)) OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Letters, -1)) CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 20)) OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(A & Nuls, 4)) ENDPROCEDURE PROCEDURE CheckMid() DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") DECLARE Empty : _EXP_STRING DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, 2, 3)) CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, -9223372036854775808, 2)) CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, 7, 9223372036854775807)) OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Empty, 1, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 9223372036854775807, 2)) OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 2, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 2, -1)) OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Nuls & Letters, 2, 4)) ENDPROCEDURE PROCEDURE CheckLCase() DECLARE Mixed : _EXP_STRING((C_STRING)"AbC@19") DECLARE Empty : _EXP_STRING DECLARE Nuls : _EXP_STRING(2, (C_CHAR)'\0') CALL _EXP_STRING_OUTPUT(_EXP_STRING_LCASE(Mixed)) CALL _EXP_STRING_OUTPUT(Mixed) DECLARE Lower : CHAR Lower <- _EXP_STRING_LCASE('W') OUTPUT Lower, ":", _EXP_STRING_LCASE('w'), ":", _EXP_STRING_LCASE('@') OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LCASE(Empty)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LCASE(Nuls & Mixed)) CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(_EXP_STRING_LCASE(Nuls & Mixed), 3, 3)) ENDPROCEDURE