$title('strutl - string utilities') $compact strutl: DO; DECLARE /* global literals */ str_name LITERALLY 'STRUCTURE ( size BYTE, name(1) BYTE)', STREQUAL LITERALLY '0', /* indicates string equality */ STRLESS LITERALLY '-1', /* indicates string inequality */ STRGREATER LITERALLY '1', /* indicates string inequality */ MATCH LITERALLY '0FFFFH'; /* indicates string equality for cmpb */ $eject $subtitle('rgn_data_disp') /******************************************************************** * * TITLE: str$cmp * * CALLING SEQUENCE: * * result = str$cmp(str_ptr1,str_ptr2) * * INTERFACE VARIABLES: * * str_ptr1, str_ptr2 - pointers to strings to be compared * result - indicates result of compare. * * CALLS: * * ABSTRACT: This function compares two strings and returns a value * indicating the result of the compare. * * *********************************************************************/ str$cmp: PROCEDURE(str_ptr1, str_ptr2) BYTE PUBLIC; DECLARE /* params */ str_ptr1 POINTER, str_ptr2 POINTER, result byte; DECLARE /* locals */ str1 BASED str_ptr1 str_name, /* strings to be compared */ str2 BASED str_ptr2 str_name, res WORD; /* result of call to cmpb */ /* begin str$cmp */ IF str1.size = str2.size THEN DO; res = cmpb(@str1.name(0), @str2.name(0), str2.size); IF res = MATCH THEN RETURN STREQUAL; ELSE DO; IF str1.name(res) < str2.name(res) THEN RETURN STRLESS; ELSE RETURN STRGREATER; END; END; IF str1.size < str2.size THEN DO; res = cmpb(@str1.name(0), @str2.name(0), str1.size); IF res = MATCH THEN RETURN STRLESS; ELSE DO; IF str1.name(res) < str2.name(res) THEN RETURN STRLESS; ELSE RETURN STRGREATER; END; END; ELSE DO; res = cmpb(@str1.name(0), @str2.name(0), str2.size); IF res = MATCH THEN RETURN STRGREATER; ELSE DO; IF str1.name(res) < str2.name(res) THEN RETURN STRLESS; ELSE RETURN STRGREATER; END; END; END str$cmp; END strutl;