home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
programs
/
list
/
tsigns41.ark
/
SIGNS2.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1986-12-24
|
10KB
|
280 lines
PROCEDURE input_menu;
BEGIN
GOTORC(1,48); normvideo; WRITE('Input Text ');
GOTORC( 5,1); WRITE(' '); GOTORC( 6,1); WRITE(' '); GOTORC( 7,1); WRITE(' ');
GOTORC( 8,1); WRITE(' '); GOTORC( 9,1); WRITE(' '); GOTORC(10,1); WRITE(' ');
GOTORC(11,1); WRITE(' '); GOTORC(12,1); WRITE(' '); GOTORC(13,1); WRITE(' ');
GOTORC(14,1); WRITE(' ');
GOTORC( 4,42); WRITE(' '); GOTORC( 5,42); WRITE(' '); GOTORC( 6,42); WRITE(' ');
GOTORC( 7,42); WRITE(' '); GOTORC( 8,42); WRITE(' '); GOTORC( 9,42); WRITE(' ');
GOTORC(10,42); WRITE(' '); GOTORC(11,42); WRITE(' '); GOTORC(12,42); WRITE(' ');
GOTORC(13,42); WRITE(' '); GOTORC(14,42); WRITE(' ');
GOTORC(20,1);
WRITE(' ^P'); lowvideo; WRITE(': Change parameters '); normvideo;
WRITE('^F,^L'); lowvideo; WRITE(': Send Formfeed to LST '); normvideo;
WRITE('^X'); lowvideo; WRITE(': Restart Input'); normvideo;
GOTORC(21,1);
WRITE('^C,^D'); lowvideo; WRITE(': Done, quit to OS '); normvideo;
WRITE('^R,^T'); lowvideo; WRITE(': Send Reverse Formfeed '); normvideo;
WRITE('^H'); lowvideo; WRITE(': Backspace'); normvideo;
GOTORC(22,1);
WRITE('<ret>'); lowvideo; WRITE(': Process Input '); normvideo;
WRITE(' ^A'); lowvideo; WRITE(': Alternate Input (HEX) ');
GOTORC(19,1); WRITE('Input Text -> '); normvideo;
END;
PROCEDURE inp_hex; {VAR add_str : S80}
VAR str : S14;
num,err : INTEGER;
BEGIN
add_str := '';
GOTORC(19,42); lowvideo;
WRITE('Enter HEX number ->'); normvideo;
READLN(str);
WHILE str <> '' DO BEGIN
VAL('$'+str,num,err);
GOTORC(18,42);
IF (err <> 0) OR (num < 20) OR (num > 255) THEN BEGIN
WRITE('Invalid!'^G); CLREOL
END ELSE BEGIN
CLREOL; WRITE('adding char #',num);
add_str := add_str + CHR(num)
END;
GOTORC(19,42); CLREOL; lowvideo;
WRITE('Enter HEX number ->'); normvideo;
READLN(str)
END; {while something entered}
GOTORC(18,42); CLREOL;
GOTORC(19,42); CLREOL
END;
PROCEDURE find_rec; { (fchr : CHAR); }
VAR rec_number : INTEGER;
rec : BIT_RECORD;
i,j,count : INTEGER;
BEGIN
rec_number := ORD(fchr) - 32;
SEEK(font_file,rec_number);
READ(font_file,rec);
FOR i := 1 TO font_height DO
FOR j := 1 TO font_width DO
char_rec.pic[i,j] := ' '; {zero transfer record}
char_rec.character := rec.character;
char_rec.width := rec.width;
char_rec.height := rec.height;
FOR i := 1 TO Max_Height DO
FOR j := 1 TO Bit_Width DO BEGIN
count := rec.bit_map[i,j];
IF count >= 128 THEN BEGIN
char_rec.pic[i,8*j] := 'X';
count := count - 128
END;
IF count >= 64 THEN BEGIN
char_rec.pic[i,8*j-1] := 'X';
count := count - 64
END;
IF count >= 32 THEN BEGIN
char_rec.pic[i,8*j-2] := 'X';
count := count - 32
END;
IF count >= 16 THEN BEGIN
char_rec.pic[i,8*j-3] := 'X';
count := count - 16
END;
IF count >= 8 THEN BEGIN
char_rec.pic[i,8*j-4] := 'X';
count := count - 8
END;
IF count >= 4 THEN BEGIN
char_rec.pic[i,8*j-5] := 'X';
count := count - 4
END;
IF count >= 2 THEN BEGIN
char_rec.pic[i,8*j-6] := 'X';
count := count - 2
END;
IF count >= 1 THEN char_rec.pic[i,8*j-7] := 'X';
END
{end for}
END;
PROCEDURE out_char; { (ochar : CHAR; VAR chr_pos : INTEGER) }
VAR
add,i,os_lcv,strikes : INTEGER;
find_char : CHAR;
BEGIN
IF ochar <> ^D THEN BEGIN {add char to out_line}
chr_pos := chr_pos + 1;
out_line[chr_pos] := ochar
END ELSE BEGIN {output out_line}
IF block_type = bit THEN BEGIN
CASE bit_cnt OF
0 : add := 1;
1 : add := 2;
2 : add := 4;
3 : add := 8;
4 : add := 16;
5 : add := 32;
6 : add := 64;
END; {case}
FOR i := 1 TO chr_pos DO
IF out_line[i] <> ' ' THEN
gout_line[i] := CHR(ORD(gout_line[i]) + add);
IF bit_cnt < 6 THEN
bit_cnt := bit_cnt + 1
ELSE BEGIN
gdump; {dump the line}
FOR i := 1 TO Max_Length DO gout_line[i] := CHR(0);
bit_cnt := 0 {clear graphics line}
END
END ELSE BEGIN
IF inv_video THEN BEGIN
find_char := ' ';
i := 1;
WHILE (find_char = ' ') AND (i <= chr_pos) DO BEGIN
IF out_line[i] <> ' ' THEN find_char := out_line[i];
i := i + 1
END; {while}
IF find_char = ' ' THEN find_char := block_char;
FOR i := 1 TO chr_pos DO
IF out_line[i] = ' ' THEN
out_line[i] := find_char
ELSE
out_line[i] := ' ';
FOR i := (chr_pos + 1) TO (avail_chars - 1) DO
out_line[i] := find_char;
chr_pos := avail_chars - 1
END; {if inv-video}
IF block_type = block THEN
FOR i := 1 TO chr_pos DO
IF out_line[i] <> ' ' THEN
out_line[i] := block_char;
IF block_type = overstrike THEN {multiple hits?}
strikes := LENGTH(Os_Strng)
ELSE
strikes := 1;
FOR os_lcv := 1 TO strikes DO BEGIN
FOR i := 1 TO chr_pos DO
IF (block_type = overstrike) AND (out_line[i] <> ' ') THEN
putchr(Os_Strng[os_lcv])
ELSE
putchr(out_line[i]);
{for each char in out_line}
putchr(^M)
END; {for overstrikes}
putchr(^J)
END; {if eol}
chr_pos := 0
END {if block_type = bit}
END; {procedure out_char}
PROCEDURE putchr; {chr:CHAR}
BEGIN
CASE output_device OF
printer : WRITE(lst,chr);
recd_file : WRITE(out_file,chr);
screen : WRITE(con,chr)
END {case}
END; {subprocedure putchr}
PROCEDURE gdump;
VAR i : INTEGER;
BEGIN
putchr(^C); {into graphics}
FOR i := 1 TO Max_Length DO BEGIN
IF gout_line[i] = ^C THEN putchr(^C); {double all ^C's}
putchr(gout_line[i])
END;
putchr(^C); putchr(^B); {out of graphics}
putchr(^N); {cr and graphics lf}
END;
PROCEDURE set_up_prt; { (reset_prt : BOOLEAN) }
BEGIN
IF NOT dumb_prt THEN BEGIN
WRITE(lst,CHR(27),'R2$'); {Draft quality print}
IF reset_prt THEN BEGIN
WRITE(lst,CHR(30)); {12 cpi}
WRITE(lst,CHR(27),'B8$'); {6 lpi}
WRITE(lst,CHR(27),'Q4$') {Black}
END ELSE BEGIN
CASE prt_lpi OF
six : WRITE(lst,CHR(27),'B8$');
eight : WRITE(lst,CHR(27),'B6$');
twelve : WRITE(lst,CHR(27),'B4$');
ten : WRITE(lst,CHR(27),'B5$')
END; {case}
CASE prt_cpi OF
pica : WRITE(lst,CHR(29));
squeezed : WRITE(lst,CHR(31));
elite : WRITE(lst,CHR(30));
tiny : WRITE(lst,CHR(30)) {20 cpi n/a on Prism, use 16.7}
END; {case}
CASE prt_color OF
black : WRITE(lst,CHR(27),'Q4$');
blue : WRITE(lst,CHR(27),'Q3$');
green : WRITE(lst,CHR(27),'Q2$');
red : WRITE(lst,CHR(27),'Q1$');
END {case}
END;
WRITE(lst,CHR(13)) {and a final <cr> to return head}
END
END;
PROCEDURE avail_space;
LABEL skip;
VAR pitch : REAL;
BEGIN
IF NOT disp THEN GOTO skip; {return w/o doing anything}
IF given_width = 0 THEN BEGIN
IF output_device = printer THEN BEGIN
CASE prt_cpi OF
pica : pitch := 10;
elite : pitch := 12;
squeezed : pitch := 16.5; {use 17 for Epson}
tiny : pitch := 20; {n/a on IDS printer}
END; {case}
IF device_size = wide THEN
avail_chars := TRUNC(pitch * 14)
ELSE
avail_chars := TRUNC(pitch * 8)
END ELSE {output_device = screen or recd_file}
IF device_size = wide THEN
avail_chars := 132
ELSE
avail_chars := 80;
{end if}
END ELSE {width WAS given}
avail_chars := given_width;
{end if width was not given}
GOTORC(16,1); lowvideo; WRITE('Calculated width available -> ');
normvideo; WRITE(avail_chars,' ');
IF font_height <> 0 THEN BEGIN
GOTORC(17,1); CLREOL; lowvideo;
IF sign_type = sign THEN BEGIN {est based on 8+1 spaces/char}
WRITE('Approx # of *input* chars allowed -> '); normvideo;
WRITE((ROUND(avail_chars/(mult_w*(font_width+inter_spc-2)))):1,' ')
END ELSE BEGIN
WRITE('Output line must be at least -> '); normvideo;
WRITE((font_height * mult_h) + given_offset);
IF ((font_height * mult_h) + given_offset) > avail_chars THEN
WRITE('<- Error: Output overflow!'^G)
{if overflow}
END {if sign output approx max input line}
END;
skip:
END;