PROCEDURE fred$paginate LOCAL page_size, ff, this_position, this_buffer; this_buffer := CURRENT_BUFFER; SET (screen_update,off); MESSAGE (""); this_position := MARK (none); POSITION (BEGINNING_OF (CURRENT_BUFFER)); loop ! Delete all FF's ff := SEARCH (ASCII (12), FORWARD, EXACT); exitif (ff = 0); ERASE (ff); endloop; POSITION (BEGINNING_OF (CURRENT_BUFFER)); loop ! Insert FF's at current page length increments MOVE_VERTICAL (+fred$x_page_length); exitif (MARK (none) = END_OF (CURRENT_BUFFER)); ! SPLIT_LINE; COPY_TEXT (ASCII (12)); SPLIT_LINE; endloop; POSITION (this_position); SET (screen_update,on); ENDPROCEDURE; ! ! Find next paragraph ! PROCEDURE fred$move_by_paragraph LOCAL find_start, find_mark, pgh_pat, direction, increment; on_error if (ERROR = TPU$_STRNOTFOUND) or (ERROR = TPU$_BEGOFBUF) or (ERROR = TPU$_ENDOFBUF) then ! ***** No action ***** else MESSAGE ('Aborting FRED$MOVE_BY_PARAGRAPH... ERROR = ' + STR (error)) endif endon_error; pgh_pat := LINE_BEGIN & (LINE_END | '\'); direction := CURRENT_DIRECTION; if direction = FORWARD then increment := 1 else increment := -1 endif; ! ! Search for the paragraph pattern in the given direction. MOVE_HORIZONTAL (increment); if direction = REVERSE then MOVE_VERTICAL (-1); endif; find_start := SEARCH (pgh_pat, direction); if find_start = 0 then ! No paragraph was found, so move to if direction = FORWARD then ! the beginning or end of the buffer. POSITION (END_OF (CURRENT_BUFFER)); else POSITION (BEGINNING_OF (CURRENT_BUFFER)) endif else POSITION (find_start); ! Adjust the cursor position. MOVE_VERTICAL (1) endif ENDPROCEDURE ! ! Find next paragraph and fill from current location ! PROCEDURE fred$fill_paragraph LOCAL fill_start, fill_stop, fill_end, pgh_pat, direction; pgh_pat := LINE_BEGIN & (LINE_END | '\'); direction := CURRENT_DIRECTION; fill_start := MARK (none); MOVE_HORIZONTAL (1); fill_stop := SEARCH (pgh_pat, FORWARD); if fill_stop = 0 then if 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 PROCEDURE tpu$local_init fred$x_page_length := 60; fred$x_page_width := 80; fred$x_page_left_margin := 5; fred$x_page_right_margin := 75; fred$x_tab_size := 8; ENDPROCEDURE;