Rory Loupe wrote: =20 > Mark, > Could you include this code (text copied into the email) in=20 > an email to the > list? They appear below. I have these as separate ".sub" files in the /opt/fox/ciocfg/sequeninclude directory and #include the ones I need. Mark Chatterton General Mills /opt/fox/ciocfg/sequeninclude/strlen_front.sub /*** * * strlen_front - Find length of a string searching from front for first blank. * * Usage: CALL strlen_front (str, len) * * where * str : S =3D input string * len : I =3D length (character position) of first * blank character found while searching * from left to right. */ SUBROUTINE strlen_front (IN str : S INOUT len : I) STATEMENTS len :=3D 1; WHILE len < 81 DO IF str(len..len) =3D " " THEN EXITLOOP; ENDIF; len :=3D len + 1; ENDWHILE; len :=3D len - 1; ENDSUBROUTINE #define _STRLEN_FRONT 1 /opt/fox/ciocfg/sequeninclude/strlen_back.sub /*** * * strlen_back - Find length of a string by searching from back for first * non-blank. * * Usage: CALL strlen_back (str, len) * * where * str : S =3D input string * len : I =3D length (character position) of first * non-blank character found while searching * from right to left. 0 indicates empty string. */ SUBROUTINE strlen_back (IN str : S INOUT len : I) STATEMENTS len :=3D 81; REPEAT len :=3D len - 1; IF len =3D 0 THEN EXITLOOP; ENDIF; UNTIL (str(len..len) <> " "); ENDSUBROUTINE #define _STRLEN_BACK 1 /opt/fox/ciocfg/sequeninclude/findstr.sub /*** * * findstr - Find substring * * Usage: CALL findstr (str1, str2, pos) * * where * str1 : S =3D string to be searched * str2 : S =3D substring to search for * pos : I =3D character position of str2 in str1 or * 0 if str2 doesn't appear in str1. */ #ifndef _STRLEN_BACK #include <./strlen_back.sub> #endif SUBROUTINE findstr (IN str1 : S IN str2 : S INOUT pos : I ) VARIABLES j : I; STATEMENTS pos :=3D 0; CALL strlen_back (str2, j); IF j=3D0 THEN GOTO a; ENDIF; j :=3D j - 1; REPEAT pos :=3D pos + 1; IF pos+j > 80 THEN pos :=3D 0; EXITLOOP; ENDIF; UNTIL str1(pos..pos+j) =3D str2; <<a>>; ENDSUBROUTINE #define _FINDSTR 1 /opt/fox/ciocfg/sequeninclude/strtrim.sub /*** * * strtrim - Trim leading whitespace from a string * * Usage: CALL strtrim (str) * * where * str : S =3D string to be trimmed */ #ifndef _STRLEN_FRONT #include <./strlen_front.sub> #endif SUBROUTINE strtrim (INOUT str : S) VARIABLES i :I; STATEMENTS FOR i :=3D 1 TO 80 DO IF (str(i..i) <> " ") THEN EXITLOOP; ENDIF; ENDFOR; str :=3D str(i..80); ENDSUBROUTINE #define _STRTRIM 1 /opt/fox/ciocfg/sequeninclude/str2int.sub /*** * * str2int - Convert a string to an integer * * Usage: CALL str2int (str, val, stat) * * where * str : S =3D input string * val : I =3D integer to receive result * stat :B =3D TRUE if conversion successful, else FALSE */ #ifndef _STRLEN_FRONT #include <./strlen_front.sub> #endif #ifndef _STRTRIM #include <./strtrim.sub> #endif SUBROUTINE str2int (IN str : S INOUT val : I INOUT stat : B) VARIABLES len : I; i :I; neg :B; STATEMENTS stat :=3D FALSE; neg :=3D FALSE; val :=3D 0; CALL strtrim (str); CALL strlen_front (str, len); FOR i :=3D 1 TO len DO IF (str(i..i) =3D "-") THEN IF (i =3D 1) THEN neg :=3D TRUE; ELSE GOTO done; ENDIF; ELSEIF (str(i..i) =3D "0") THEN ; ELSEIF (str(i..i) =3D "1") THEN val :=3D (val*10) + 1 ELSEIF (str(i..i) =3D "2") THEN val :=3D (val*10) + 2 ELSEIF (str(i..i) =3D "3") THEN val :=3D (val*10) + 3 ELSEIF (str(i..i) =3D "4") THEN val :=3D (val*10) + 4 ELSEIF (str(i..i) =3D "5") THEN val :=3D (val*10) + 5 ELSEIF (str(i..i) =3D "6") THEN val :=3D (val*10) + 6 ELSEIF (str(i..i) =3D "7") THEN val :=3D (val*10) + 7 ELSEIF (str(i..i) =3D "8") THEN val :=3D (val*10) + 8 ELSEIF (str(i..i) =3D "9") THEN val :=3D (val*10) + 9 ELSE GOTO done; ENDIF; ENDFOR; IF neg THEN val :=3D -val; ENDIF; stat :=3D TRUE; <<done>> ; ENDSUBROUTINE #define _STR2INT 1 /opt/fox/ciocfg/sequeninclude/str2real.sub /*** * * str2real - Convert a string to a real * * Usage: CALL str2real (str, val, stat) * * where * str : S =3D input string * val : R =3D real to receive result * stat :B =3D TRUE if conversion successful, else FALSE */ #ifndef _STRLEN_FRONT #include <./strlen_front.sub> #endif #ifndef _STRTRIM #include <./strtrim.sub> #endif SUBROUTINE str2real (IN str : S INOUT val : R INOUT stat : B) VARIABLES len : I; i :I; neg :B; f1,f2 :R; STATEMENTS stat :=3D FALSE; neg :=3D FALSE; f1 :=3D 10; f2 :=3D 1; val :=3D 0; CALL strtrim (str); CALL strlen_front (str, len); FOR i :=3D 1 TO len DO IF (str(i..i) =3D "-") THEN IF (i =3D 1) THEN neg :=3D TRUE; ELSE GOTO done; ENDIF; ELSEIF (str(i..i) =3D ".") THEN IF f1 =3D 1 THEN GOTO done; ELSE f1 :=3D 1; ENDIF; ELSEIF (str(i..i) =3D "0") THEN ; ELSEIF (str(i..i) =3D "1") THEN val :=3D (val*f1) + (1*f2); ELSEIF (str(i..i) =3D "2") THEN val :=3D (val*f1) + (2*f2); ELSEIF (str(i..i) =3D "3") THEN val :=3D (val*f1) + (3*f2); ELSEIF (str(i..i) =3D "4") THEN val :=3D (val*f1) + (4*f2); ELSEIF (str(i..i) =3D "5") THEN val :=3D (val*f1) + (5*f2); ELSEIF (str(i..i) =3D "6") THEN val :=3D (val*f1) + (6*f2); ELSEIF (str(i..i) =3D "7") THEN val :=3D (val*f1) + (7*f2); ELSEIF (str(i..i) =3D "8") THEN val :=3D (val*f1) + (8*f2); ELSEIF (str(i..i) =3D "9") THEN val :=3D (val*f1) + (9*f2); ELSE GOTO done; ENDIF; IF f1 =3D 1 THEN f2 :=3D f2 / 10; ENDIF; ENDFOR; IF neg THEN val :=3D -val; ENDIF; stat :=3D TRUE; <<done>> ; ENDSUBROUTINE #define _STR2REAL 1 ___________________________________________________________________ This list is neither sponsored nor endorsed by The Foxboro Company. Use the information obtained here at your own risk. For disclaimer, see http://www.thecassandraproject.org/disclaimer.html#maillist list info: //www.freelists.org/list/foxboro subscribe: mailto:foxboro-request@xxxxxxxxxxxxx?subject=join unsubscribe: mailto:foxboro-request@xxxxxxxxxxxxx?subject=leave