PROCEDURE lsi_match_brace LOCAL pat1, pat2, lbrace, nolb, norb, mark1, mark2, norb, nextbrace; pat1 := '{'; pat2 := ANY('{}'); ! lbrace := SEARCH (pat1, FORWARD); IF lbrace = 0 THEN MESSAGE ('No left brace found'); ELSE nolb := 1; position (lbrace); mark1 := MARK (none); CURSOR_HORIZONTAL (1); norb := 0; LOOP nextbrace := SEARCH (pat2, FORWARD); IF nextbrace = 0 THEN MESSAGE('Unmatched brace pair'); ABORT; ELSE POSITION (nextbrace); IF CURRENT_CHARACTER = '{' THEN nolb := nolb + 1; ELSE norb := norb + 1; EXITIF norb = nolb; ENDIF; CURSOR_HORIZONTAL (1); ENDIF; ENDLOOP; mark2 := MARK (NONE); brace_range := create_range (mark1, mark2, underline); POSITION (lbrace); ENDIF; ENDPROCEDURE ! PROCEDURE lsi_clear_range brace_range := 0; ENDPROCEDURE