GLOBAL
$(
    blib.rdch     :
    blib.unrdch   :
    stringbuff    :
    stringbuffb   :
    stringbuffe   :
$)



AND stringinput( string )  BE
$(
    blib.rdch    :=  rdch
    blib.unrdch  :=  unrdch

    stringbuff   :=  copystring( string )
    stringbuffb  :=  0
    stringbuffe  :=  stringbuff % 0

    rdch         :=  string.rdch
    unrdch       :=  string.unrdch
$)



AND endstringinput()  BE
$(
    freestring( stringbuff )

    rdch    :=  blib.rdch
    unrdch  :=  blib.unrdch
$)



AND string.rdch()  =  VALOF
$(
    stringbuffb  :=  stringbuffb + 1

    RESULTIS  stringbuffb > stringbuffe  ->  endstreamch,  
                                             stringbuff % stringbuffb
$)



AND string.unrdch()  =  VALOF
$(
    IF  stringbuffb = 0  THEN  RESULTIS  FALSE

    stringbuffb  :=  stringbuffb - 1

    RESULTIS  TRUE
$)



AND copystring( string )  =  VALOF
$(
    LET length  =  string % 0
    LET buffer  =  getvec( length / bytesperword )
    
    IF  buffer = 0  THEN  abort( 9999 )
    
    FOR  i = 0  TO  length  DO  buffer % i  :=  string % i
    
    RESULTIS  buffer
$)



AND freestring( string )  BE  freevec( string )


