; From: Dat Thuc Nguyen
; Date: Wed Apr 21 11:57:01 1999
; URL: http://www.smalltickle.com
;
; Following is a rudimentary string class based on the Smalltalk model.

;********************************************************
;    DEFINITION OF THE STRING CLASS                     *
;********************************************************

define string {
    _assign string::\%1 \%2
    _define \%1 {
        string.\%1 \v(macro) \%2 \%3 \%4
    }
}

;********************************************************
;    IMPLEMENTATION OF THE PUBLIC USAGE INTERFACE       *
;    OF THE STRING CLASS                                *
;********************************************************

define string.echo {
    echo \m(string::\%1)
}

define string.length {
    echo \flength(\m(string::\%1))
}

define string.concat {
    if define \m(string::\%2) {
         _assign string::\%1 \m(string::\%1)\m(string::\%2)
    } else {
         _assign string::\%1 \m(string::\%1)\%2
    }
}

define string.write {
    if define \m(string::\%2) {
         _assign string::\%2 \m(string::\%1)
    } else {
         _assign \%2 \m(string::\%1)
    }
}

;********************************************************
;    USAGE SAMPLES					*
;********************************************************

string abc hello         ; Create a string abc initialized with 'hello'
abc echo                 ; Display the string abc
abc length               ; Display the length of the string abc
abc write s1             ; Assign the variable s1 with the content of
                         ; the string abc.
echo \m(s1)              ; Display the value of the variable s1
string greet _world      ; Create a string greet initialized with '_world'
abc concat greet         ; Concatenate the string abc with the string greet
abc echo                 ; Display the string abc

End
