PROCEDURE TRIM (VAR S: LSTRING) ;
VAR 
   I_X,
   I_R,
   I_L,
   I_C,     : INTEGER ;
   T        : LSTRING(255) ;
BEGIN 
 COPYLST(S,T);
I_L := T. LEN ;
I_C := 1 ;
WHILE (T[I_C] = ' ') DO
  BEGIN 
    I_C := I_C + 1;
  END; 
{ I_C WILL CONTAIN FIRST NONBLANK CHAR POSITION}
 I_R := 1 ;
FOR I_X := I_C TO I_L DO
  BEGIN
  S[I_R] := T[I_X];
  I_R := I_R + 1 ;
  END; {FOR I_X }
END; {TRIM}
 
function getword (var w: lstring; var  l: lstring) : integer ;
var 
wo_rd,
temp     : lstring(255) ;
i_word,
i_str,
i_ndex,
i_wlen,
i_llen   : integer ;
e_wrd    : char  ;
BEGIN
I_WLEN := UPPER(W) ;
I_LLEN := L.LEN  ; 
I_WORD := 0 ;
E_WRD := ' ' ;  {TERMINATION CHARACTER FOR CURRENT WORD SCAN} 
I_STR := 0 ;
 COPYLST(L,TEMP);
WO_RD := NULL ;
IF TEMP[1] = ' ' THEN
   TRIM(TEMP) ;  {tRIM LEADING BLANKS FROM STRING}
IF TEMP[1] = '''' THEN E_WRD := '''' ;
IF TEMP[1] = '"'  THEN E_WRD := '"'  ;
IF TEMP[1] = '('  THEN E_WRD := ')'  ;
IF TEMP[1] = '['  THEN E_WRD := ']'  ;
IF TEMP[1] = '{'  THEN E_WRD := '}' ;
I_STR := INDEX(TEMP,E_WRD) ;
I_STR := I_STR - 1 ;
FOR I_NDEX := 2 TO I_STR DO
  BEGIN
  WO_RD[I_NDEX] := TEMP[I_NDEX] ;
  END; {FOR INDEX 2 TO ISTR}
I_STR := I_STR + 2;
FOR I_NDEX := I_STR TO I_LLEN DO
    L[I_NDEX] := TEMP[I_NDEX] ;
 { INPUT STRING HAS HAD WORD TRIMMED OFF FRONT}
 COPYLST(WO_RD,W) ;
 { WORD FIELD IS PASSED BACK TO "W" PARAMETER }
 GETWORD := WO_RD.LEN ;
 { fUNCTION RETURN VALUE SET TO WORD LENGTH }
 { ** or zero  IF NO WORD TO RETURN }
 END;
