PROCEDURE lsi_find_paragraph ! ! Find next paragraph ! LOCAL find_start, find_mark, pgh_pat, direction; ON_ERROR IF (error = tpu$_strnotfound) OR (error = tpu$_begofbuf) OR (error = tpu$_endofbuf) THEN ! No action ELSE MESSAGE ('Aborting ... ERROR = ' + STR (error)) ENDIF ENDON_ERROR; ! ! Initialize local variables. pgh_pat := LINE_BEGIN & (LINE_END | '\'); IF CURRENT_DIRECTION = FORWARD THEN direction := 1 ELSE direction := -1 ENDIF; ! ! Search for the paragraph pattern in the given direction. MOVE_HORIZONTAL (direction); IF CURRENT_DIRECTION = FORWARD THEN find_start := SEARCH (pgh_pat, FORWARD) ELSE MOVE_VERTICAL (-1); find_start := SEARCH (pgh_pat, REVERSE) ENDIF; IF find_start = 0 THEN ! ! No paragraph was found, so move to the beginning or end of the buffer. IF CURRENT_DIRECTION = FORWARD THEN POSITION (END_OF (CURRENT_BUFFER)) ELSE POSITION (BEGINNING_OF (CURRENT_BUFFER)) ENDIF ELSE ! ! Adjust the cursor position. POSITION (find_start); MOVE_VERTICAL (1) ENDIF ENDPROCEDURE ! ! Find next paragraph and fill from current location ! PROCEDURE lsi_fill_paragraph LOCAL fill_start, fill_stop, fill_end, pgh_pat; pgh_pat := LINE_BEGIN & (LINE_END | '\'); fill_start := MARK (NONE); MOVE_HORIZONTAL (1); IF CURRENT_DIRECTION = FORWARD THEN fill_stop := SEARCH (pgh_pat, FORWARD); ELSE fill_stop := SEARCH (pgh_pat, REVERSE); ENDIF; IF fill_stop = 0 THEN IF CURRENT_DIRECTION = FORWARD THEN POSITION (END_OF (CURRENT_BUFFER)) ELSE POSITION (BEGINNING_OF (CURRENT_BUFFER)) ENDIF; ELSE POSITION (fill_stop); MOVE_HORIZONTAL (-1); ENDIF; fill_end := MARK (none); fill_range := CREATE_RANGE (fill_start, fill_end, NONE); FILL (fill_range, ' '); POSITION (fill_start) ENDPROCEDURE