PROCEDURE out_banner; {(inp_line : S80)} VAR page_offset,pg_lcv,char_num,width_lcv,height_lcv, space_lcv,mult_w_lcv,mult_h_lcv,out_cnt : INTEGER; ochar : CHAR; BEGIN IF centering THEN page_offset := TRUNC((avail_chars - (font_height * mult_h)) / 2) ELSE page_offset := given_offset; IF (output_device <> screen) OR (input_device = keyboard) THEN BEGIN GOTORC(16,42); lowvideo; WRITE('Actual height of line -> '); normvideo; WRITE((font_height*mult_h):1); CLREOL; GOTORC(17,42); lowvideo; WRITE('Added leading spaces -> '); normvideo; WRITE(page_offset:1); CLREOL; GOTORC(1,48); WRITE('Outputting ') END; IF output_device <> screen THEN BEGIN GOTORC(24,1); CLREOL; lowvideo; WRITE('Now outputting character -> '); normvideo END ELSE GOTORC(24,1); bit_cnt := 0; out_cnt := 0; out_char(^D,out_cnt); {start w/blank line} FOR char_num := 1 TO LENGTH(inp_line) DO IF ORD(inp_line[char_num]) >= 32 THEN BEGIN {skip bad input} find_rec(inp_line[char_num]); IF output_device <> screen THEN WRITE(char_rec.character); FOR width_lcv := 1 TO char_rec.width DO FOR mult_w_lcv := 1 TO mult_w DO BEGIN FOR pg_lcv := 1 TO page_offset DO out_char(' ',out_cnt); FOR height_lcv := font_height DOWNTO 1 DO FOR mult_h_lcv := 1 TO mult_h DO BEGIN IF char_rec.pic[height_lcv,width_lcv] <> ' ' THEN ochar := char_rec.character ELSE ochar := ' '; {end if} out_char(ochar,out_cnt) END; {for multiplier horizontally} {end for height} out_char(^D,out_cnt) END; {for multiplier vertically} {end for width} IF char_num <> LENGTH(inp_line) THEN FOR space_lcv := 1 TO inter_spc DO out_char(^D,out_cnt) END; {if char is in proper print range} {end for each input char} out_char(^D,out_cnt); {end w/blank line} IF block_type = bit THEN gdump; {dump any remaining stuff} inp_line := '' {zero input} END; {PROCEDURE out_banner} PROCEDURE out_sign; {(VAR inp_line : S80; VAR overflow_err : BOOLEAN)} VAR page_offset,pg_lcv,width_lcv,height_lcv,mult_h_lcv,out_cnt, line_width : INTEGER; out_array : SIGN_ARRAY; {'Sign' output line is built into this} BEGIN overflow_err := check_sign(inp_line,line_width,out_array); IF (NOT overflow_err) OR (input_device = text_file) THEN BEGIN IF centering THEN page_offset := TRUNC((avail_chars - line_width) / 2) ELSE IF overflow_err THEN page_offset := 0 ELSE page_offset := given_offset; {end if centering} IF (output_device <> screen) OR (input_device = keyboard) THEN BEGIN GOTORC(16,42); lowvideo; WRITE('Actual width of line -> '); normvideo; WRITE(line_width:1); CLREOL; GOTORC(17,42); lowvideo; WRITE('Added leading spaces -> '); normvideo; WRITE(page_offset:1); CLREOL; GOTORC(1,48); WRITE('Outputting ') END; GOTORC(24,1); bit_cnt := 0; out_cnt := 0; out_char(^D,out_cnt); {start with a blank line} FOR height_lcv := 1 TO font_height DO {output line} FOR mult_h_lcv := 1 TO mult_h DO BEGIN FOR pg_lcv := 1 TO page_offset DO out_char(' ',out_cnt); FOR width_lcv := 1 TO line_width DO out_char(out_array[height_lcv,width_lcv],out_cnt); {end for width} out_char(^D,out_cnt) END; {for height multiplier} {end for height} out_char(^D,out_cnt); {end w/blank line} IF block_type = bit THEN gdump; {dump any remaining stuff} inp_line := '' {zero input} END ELSE BEGIN GOTORC(19,42); WRITE('Input line is too long!'^G); END END; {PROCEDURE out_sign} FUNCTION check_sign; {(VAR inp_line : S80; VAR actual_width : INTEGER; VAR out_array : SIGN_ARRAY) : BOOLEAN} LABEL done; VAR height_lcv,width_lcv,mult_w_lcv,char_num : INTEGER; err : BOOLEAN; ochar : CHAR; BEGIN err := FALSE; FOR height_lcv := 1 to font_height DO FOR width_lcv :=1 TO avail_chars DO out_array[height_lcv,width_lcv] := ' '; {initialize line array} IF (output_device <> screen) OR (input_device = keyboard) THEN BEGIN GOTORC(1,48); WRITE('Processing '); GOTORC(24,1); lowvideo; CLREOL; WRITE('Now processing character -> '); normvideo END; actual_width := 0; FOR char_num := 1 TO LENGTH(inp_line) DO {build line} IF ORD(inp_line[char_num]) >= 32 THEN BEGIN {skip bad input} find_rec(inp_line[char_num]); IF (output_device <> screen) OR (input_device = keyboard) THEN WRITE(char_rec.character); IF ((actual_width+(char_rec.width*mult_w)) > avail_chars) THEN BEGIN IF input_device <> text_file THEN WRITE('<- overflow!'^G); err := TRUE; GOTO done END; {if overflow} FOR width_lcv := 1 TO char_rec.width DO FOR mult_w_lcv := 1 TO mult_w DO BEGIN actual_width := actual_width + 1; FOR height_lcv := 1 TO char_rec.height DO BEGIN IF char_rec.pic[height_lcv,width_lcv] <> ' ' THEN ochar := char_rec.character ELSE ochar := ' '; {end if} out_array[height_lcv,actual_width] := ochar END; {for height} END; {for width multiplier} {end for width of char} IF char_num <> LENGTH(inp_line) THEN actual_width := actual_width + inter_spc {space between chars} END; {if char in in printing range} {end for each input char} IF given_offset <> 0 THEN BEGIN IF ((actual_width + given_offset) > avail_chars) AND NOT ((output_device <> screen) OR (input_device = keyboard)) THEN BEGIN WRITE('<- Overflow (+offset)!'^G); err := TRUE END {if the given offset overflows} END; {if given the offset, check for overflow} done: check_sign := err END; {PROCEDURE check_sign}