1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#LIB
INCLUDE_OBJ "string.o"
TYPE _STRING_HANDLE = C_TYPE("void*")
TYPE _STRING_C_INTEGER = C_TYPE("long long")
EXTERN "C" EXTERN_FUNCTION _string_impl_new() RETURNS _STRING_HANDLE
EXTERN "C" EXTERN_FUNCTION _string_impl_copy(_STRING_HANDLE) RETURNS _STRING_HANDLE
EXTERN "C" EXTERN_FUNCTION _string_impl_from_cstr(C_STRING) RETURNS _STRING_HANDLE
EXTERN "C" EXTERN_FUNCTION _string_impl_from_count_char(_STRING_C_INTEGER, C_CHAR) RETURNS _STRING_HANDLE
EXTERN "C" EXTERN_PROCEDURE _string_impl_delete(_STRING_HANDLE)
EXTERN "C" EXTERN_PROCEDURE _string_impl_assign(_STRING_HANDLE, _STRING_HANDLE)
EXTERN "C" EXTERN_PROCEDURE _string_impl_assign_cstr(_STRING_HANDLE, C_STRING)
EXTERN "C" EXTERN_PROCEDURE _string_impl_concat(_STRING_HANDLE, _STRING_HANDLE, _STRING_HANDLE)
EXTERN "C" EXTERN_PROCEDURE _string_impl_from_int(_STRING_HANDLE, _STRING_C_INTEGER)
EXTERN "C" EXTERN_PROCEDURE _string_impl_from_real(_STRING_HANDLE, C_DOUBLE)
EXTERN "C" EXTERN_FUNCTION _string_impl_to_real(_STRING_HANDLE) RETURNS C_DOUBLE
EXTERN "C" EXTERN_FUNCTION _string_impl_length(_STRING_HANDLE) RETURNS _STRING_C_INTEGER
EXTERN "C" EXTERN_PROCEDURE _string_impl_left(_STRING_HANDLE, _STRING_HANDLE, _STRING_C_INTEGER)
EXTERN "C" EXTERN_PROCEDURE _string_impl_right(_STRING_HANDLE, _STRING_HANDLE, _STRING_C_INTEGER)
EXTERN "C" EXTERN_PROCEDURE _string_impl_mid(_STRING_HANDLE, _STRING_HANDLE, _STRING_C_INTEGER, _STRING_C_INTEGER)
EXTERN "C" EXTERN_PROCEDURE _string_impl_lcase(_STRING_HANDLE, _STRING_HANDLE)
EXTERN "C" EXTERN_FUNCTION _string_impl_lcase_char(C_CHAR) RETURNS C_CHAR
EXTERN "C" EXTERN_PROCEDURE _string_impl_ucase(_STRING_HANDLE, _STRING_HANDLE)
EXTERN "C" EXTERN_FUNCTION _string_impl_ucase_char(C_CHAR) RETURNS C_CHAR
EXTERN "C" EXTERN_FUNCTION _string_impl_asc(_STRING_HANDLE) RETURNS _STRING_C_INTEGER
EXTERN "C" EXTERN_FUNCTION _string_impl_asc_char(C_CHAR) RETURNS _STRING_C_INTEGER
EXTERN "C" EXTERN_PROCEDURE _string_impl_chr(_STRING_HANDLE, _STRING_C_INTEGER)
EXTERN "C" EXTERN_FUNCTION _string_impl_is_num(_STRING_HANDLE) RETURNS C_INT
EXTERN "C" EXTERN_FUNCTION _string_impl_c_str(_STRING_HANDLE) RETURNS C_STRING
EXTERN "C" EXTERN_PROCEDURE _string_impl_input(_STRING_HANDLE)
EXTERN "C" EXTERN_FUNCTION _string_impl_compare(_STRING_HANDLE, _STRING_HANDLE) RETURNS C_INT
CLASS STRING
PUBLIC _HANDLE : _STRING_HANDLE
OVERLOAD PROCEDURE NEW()
_HANDLE <- _string_impl_new()
ENDPROCEDURE
OVERLOAD PROCEDURE NEW(BYREF Other : STRING)
_HANDLE <- _string_impl_copy(Other._HANDLE)
ENDPROCEDURE
OVERLOAD PROCEDURE NEW(Text : C_STRING)
_HANDLE <- _string_impl_from_cstr(Text)
ENDPROCEDURE
OVERLOAD PROCEDURE NEW(Count : INTEGER, Ch : C_CHAR)
_HANDLE <- _string_impl_from_count_char((_STRING_C_INTEGER)Count, Ch)
ENDPROCEDURE
PROCEDURE DELETE()
CALL _string_impl_delete(_HANDLE)
ENDPROCEDURE
OVERLOAD PROCEDURE OPERATOR<-(BYREF Other : STRING)
CALL _string_impl_assign(_HANDLE, Other._HANDLE)
ENDPROCEDURE
OVERLOAD PROCEDURE OPERATOR<-(Text : C_STRING)
CALL _string_impl_assign_cstr(_HANDLE, Text)
ENDPROCEDURE
FUNCTION C_STR() RETURNS C_STRING
RETURN _string_impl_c_str(_HANDLE)
ENDFUNCTION
PROCEDURE READ_INPUT()
CALL _string_impl_input(_HANDLE)
ENDPROCEDURE
ENDCLASS
OVERLOAD FUNCTION OPERATOR&(A : STRING, B : STRING) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_concat(Result._HANDLE, A._HANDLE, B._HANDLE)
RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION NUM_TO_STR(Number : INTEGER) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_from_int(Result._HANDLE, (_STRING_C_INTEGER)Number)
RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION NUM_TO_STR(Number : REAL) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_from_real(Result._HANDLE, (C_DOUBLE)Number)
RETURN Result
ENDFUNCTION
FUNCTION STR_TO_NUM(S : STRING) RETURNS REAL
RETURN (REAL)_string_impl_to_real(S._HANDLE)
ENDFUNCTION
FUNCTION LENGTH(S : STRING) RETURNS INTEGER
RETURN (INTEGER)_string_impl_length(S._HANDLE)
ENDFUNCTION
FUNCTION LEFT(S : STRING, Count : INTEGER) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_left(Result._HANDLE, S._HANDLE, (_STRING_C_INTEGER)Count)
RETURN Result
ENDFUNCTION
FUNCTION RIGHT(S : STRING, Count : INTEGER) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_right(Result._HANDLE, S._HANDLE, (_STRING_C_INTEGER)Count)
RETURN Result
ENDFUNCTION
FUNCTION MID(S : STRING, Start : INTEGER, Count : INTEGER) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_mid(Result._HANDLE, S._HANDLE, (_STRING_C_INTEGER)Start, (_STRING_C_INTEGER)Count)
RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION LCASE(S : STRING) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_lcase(Result._HANDLE, S._HANDLE)
RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION LCASE(Ch : CHAR) RETURNS CHAR
RETURN (CHAR)_string_impl_lcase_char((C_CHAR)Ch)
ENDFUNCTION
OVERLOAD FUNCTION UCASE(S : STRING) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_ucase(Result._HANDLE, S._HANDLE)
RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION UCASE(Ch : CHAR) RETURNS CHAR
RETURN (CHAR)_string_impl_ucase_char((C_CHAR)Ch)
ENDFUNCTION
OVERLOAD FUNCTION ASC(S : STRING) RETURNS INTEGER
RETURN (INTEGER)_string_impl_asc(S._HANDLE)
ENDFUNCTION
OVERLOAD FUNCTION ASC(Ch : CHAR) RETURNS INTEGER
RETURN (INTEGER)_string_impl_asc_char((C_CHAR)Ch)
ENDFUNCTION
FUNCTION CHR(Code : INTEGER) RETURNS STRING
DECLARE Result : STRING
CALL _string_impl_chr(Result._HANDLE, (_STRING_C_INTEGER)Code)
RETURN Result
ENDFUNCTION
FUNCTION IS_NUM(S : STRING) RETURNS BOOLEAN
RETURN (BOOLEAN)_string_impl_is_num(S._HANDLE)
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR=(A : STRING, B : STRING) RETURNS BOOLEAN
RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) = 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR<>(A : STRING, B : STRING) RETURNS BOOLEAN
RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) <> 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR<(A : STRING, B : STRING) RETURNS BOOLEAN
RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) < 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR>(A : STRING, B : STRING) RETURNS BOOLEAN
RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) > 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR<=(A : STRING, B : STRING) RETURNS BOOLEAN
RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) <= 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR>=(A : STRING, B : STRING) RETURNS BOOLEAN
RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) >= 0
ENDFUNCTION
|