home *** CD-ROM | disk | FTP | other *** search
- { File = MPRINT.INC -- Include file for Reliance Mailing List
- Copyright (c) 1986 William Meacham, All Rights Reserved
- Revised: 3/7/86 }
-
- overlay procedure print (opt : option) ;
- { print list or labels }
-
- var
- which_ones : prt_criterion ;
- how_to_sort : sort_criterion ;
- stop : boolean ; { whether to stop before done }
- prt_num : num_str_typ ; { for printing dollar amounts }
- prt_date : datestring ;
- num_out : integer ;
-
- { ==================== }
-
- procedure get_a_rec ;
- { get the next record to print }
- begin
- if how_to_sort = name then
- begin
- nextkey (ix1_file,rec_num,key1) ;
- if OK then
- getrec (mf_file,rec_num,master)
- end
- else { how_to_sort := szip }
- begin
- nextkey (ix2_file,rec_num,key2) ;
- if OK then
- getrec (mf_file,rec_num,master)
- end
- end ; { proc get_a_rec }
-
- { ==================== }
-
- function is_blank (st:str132) : boolean ;
- var
- i : integer ;
- begin
- is_blank := true ;
- if not (st = '') then
- for i := 1 to length(st) do
- if not(st[i] = ' ') then
- is_blank := false
- end ; { function is_blank }
-
- { ==================== }
-
- procedure print_list ;
-
- var
- i,
- page_num,
- line_cnt : integer ; { counters }
- header1,
- header2 : str132 ; { page headers }
- line : array[1..4] of str132 ; { detail lines }
- ch : char ;
-
- { - - - - - - - - - - - - - - - - }
-
- procedure print_page_header ;
- { prints header line at top of each page }
- begin
- page_num := succ(page_num) ;
- if page_num > 1 then
- page (lst) ;
- writeln (lst) ;
- writeln (lst) ;
- write (lst,header1) ;
- writeln (lst,page_num:5) ;
- writeln (lst,header2) ;
- writeln (lst) ;
- line_cnt := 5
- end ; { --- proc print_page_header --- }
-
- { - - - - - - - - - - - - - - - - }
-
- procedure print (line:str132 ; num_newlines : integer) ;
- { prints a line and the number of newlines indicated }
- var
- i : integer ;
- begin
- if line_cnt > max_lines then
- print_page_header ;
- write (lst,line) ;
- for i := 1 to num_newlines do
- writeln (lst) ;
- line_cnt := line_cnt + num_newlines
- end ; { --- proc print --- }
-
- { - - - - - - - - - - - - - - - - }
-
- procedure print_a_name ;
- label 99 ;
- var
- i : integer ;
- begin
- if keypressed then
- begin
- keyin (ch) ;
- if ch = #$1B then
- begin
- write_str ('STOP NOW? (Y/N)',9,7) ;
- beep ;
- read_yn (stop,25,7) ;
- OK := not stop ;
- if OK then clrline(9,7) ;
- end
- end ;
- if not OK then goto 99 ;
-
- for i := 1 to 4 do
- line[i] := '' ;
- with master do
- begin
- line[1] := concat(title,' ',frst_name,' ',last_name) ;
- line[1] := stripch (line[1],' ') ;
- add_blanks (line[1],65 - length(line[1])) ;
- line[1] := concat(line[1],'Salut: ',salutation) ;
- add_blanks (line[1],86 - length(line[1])) ;
- line[1] := concat(line[1],'Hm ph: ',home_phon) ;
- add_blanks (line[1],110 - length(line[1])) ;
- line[1] := concat(line[1],'Wk ph: ',work_phon) ;
-
- line[2] := concat(' ',addr1) ;
- add_blanks (line[2],42 - length(line[2])) ;
- line[2] := concat(line[2],'Precinct ',precinct) ;
- add_blanks (line[2],65 - length(line[2])) ;
- editnum (last_amt,wid,frac,prt_num) ;
- prt_date := mk_dt_st (last_date) ;
- line[2] := concat(line[2],'Last amt: $',prt_num,', ',prt_date) ;
- add_blanks (line[2],110 - length(line[2])) ;
- editnum (tot_amt,wid,frac,prt_num) ;
- line[2] := concat(line[2],'Total: $',prt_num) ;
-
- line[3] := concat (' ',addr2) ;
-
- line[4] := concat(' ',city,', ',state,' ',copy(zip,1,5)) ;
- if length(zip) > 5 then
- line[4] := concat(line[4],'-',copy(zip,6,4)) ;
- end ;
- for i := 1 to 4 do
- if not (is_blank(line[i])) then
- print (line[i],1) ;
- print ('',1) ;
- num_out := succ(num_out) ;
- 99:
- end ; { proc print_a_name }
-
- { - - - - - - - - - - - - - - - - }
-
- begin { --- procedure print_list --- }
- header1 := 'RELIANCE MAILING LIST' ; { build header1 line }
- add_blanks (header1,23) ;
- prt_date := mk_dt_st (cur_proc_dt) ;
- header1 := concat(header1,center(concat(scr.ID,' ',prt_date),43)) ;
- add_blanks (header1,36) ;
- header1 := concat (header1,'PAGE') ;
-
- case which_ones of { build header2 line }
- all : header2 := 'All the names' ;
- pcat : begin
- header2 := 'Categories: ' ;
- for i := 0 to 7 do
- if tstbit(mask,i) then
- header2 := concat(header2,scr.cat_name[i+1],', ') ;
- delete (header2,length(header2)-1,2)
- end ; { pcat }
- pct : header2 := concat('Precinct ',pcinct) ;
- pzip : header2 := concat('Zip code ',copy(zipcode,1,5)) ;
- dt : header2 := concat('Contributions since ',mk_dt_st(lastdt)) ;
- amt : begin
- str (contrib:wid:frac,prt_num) ;
- prt_num := stripch(prt_num,' ') ;
- header2 := concat('Contributions of at least ',prt_num)
- end ;
- end ; { case }
-
- clrscr ;
- write_str ('Printing list of names . . .',9,3) ;
- write_str ('Press ESC to stop ',9,5) ;
-
- open_database ;
- if how_to_sort = name then
- clearkey (ix1_file)
- else { how_to_sort = szip }
- clearkey (ix2_file) ;
- page_num := 0 ;
- line_cnt := 99 ; { force header on first page }
- num_out := 0 ;
-
- write (lst,scr.prt_init) ;
- repeat
- get_a_rec ;
- if OK then
- case which_ones of
- all : print_a_name ;
- pcat : if (master.flags and mask) > 0 then
- print_a_name ;
- pct : if master.precinct = pcinct then
- print_a_name ;
- pzip : if copy(master.zip,1,5) = copy(zipcode,1,5) then
- print_a_name ;
- dt : if not (greater_date(lastdt,master.last_date) = 1) then
- print_a_name ;
- amt : if not (greater(contrib,master.tot_amt)) then
- print_a_name ;
- end { case }
- until not OK ;
-
- close_database ;
- if page_num > 0 then
- begin
- print ('',1) ;
- write (lst,num_out) ;
- print (' NAMES PRINTED',1) ;
- page (lst)
- end ;
- write (lst,scr.prt_rset) ;
- gotoxy(9,9) ;
- write(num_out,' names printed') ;
- beep ;
- hard_pause
- end ; { proc print_list }
-
- { ==================== }
-
- procedure print_labels ;
-
- label 99 ;
-
- type
- label_buffer = array [1..4] of string[60] ; { two-up labels }
-
- var
- left, right : label_buffer ;
- line : array [1..4] of str132 ; { print lines }
- ch : char ;
- left_is_empty : boolean ;
-
- { - - - - - - - - - - - - - - - - }
-
- procedure print_label_array ; { print two labels, then clear the arrays }
- var
- i : integer ;
- begin
- for i := 1 to 4 do
- begin
- line[i] := left[i] ;
- add_blanks (line[i],71 - length(line[i])) ;
- line[i] := concat(line[i],right[i]) ;
- writeln (lst,line[i]) ;
- left[i] := '' ;
- right[i] := ''
- end ;
- writeln (lst) ;
- writeln (lst) ;
- end ; { proc print_label_array }
-
- { - - - - - - - - - - - - - - - - }
-
- procedure print_test_pattern ;
- var
- savefld,choice : integer ;
-
- procedure print_pattern ; { fill with Xs and print }
- var
- i,j : integer ;
- begin
- write (lst,scr.prt_init) ;
-
- prt_date := mk_dt_st(cur_proc_dt) ; { build left[1] line }
- left[1] := concat(' ',scr.ID,' ',prt_date,' ') ;
- for i := length(left[1])+1 to 60 do
- left[1] := concat(left[1],'X') ;
-
- case which_ones of { build left[2] line }
- all : left[2] := ' All the names' ;
- pcat : begin
- left[2] := ' Categories:' ;
- for i := 0 to 7 do
- if tstbit(mask,i) then
- begin
- str (i+1:2,prt_num) ;
- left[2] := concat(left[2],prt_num)
- end
- end ; { pcat }
- pct : left[2] := concat(' Precinct ',pcinct) ;
- pzip : left[2] := concat(' Zip code ',copy(zipcode,1,5)) ;
- dt : left[2] := concat(' Contributions since ',mk_dt_st(lastdt)) ;
- amt : begin
- str (contrib:wid:frac,prt_num) ;
- prt_num := stripch(prt_num,' ') ;
- left[2] := concat(' Contributions of at least ',prt_num)
- end ;
- end ; { case }
- left[2] := concat(left[2],' ') ;
- for i := length(left[2])+1 to 60 do
- left[2] := concat(left[2],'X') ;
-
- for j := 3 to 4 do { build left 3 and 4 }
- begin
- left[j] := ' ' ;
- for i := 2 to 60 do
- left[j] := concat(left[j],'X')
- end ;
-
- for j := 1 to 4 do { build right array }
- begin
- right[j] := ' ' ;
- for i := 2 to 60 do
- right[j] := concat(right[j],'X')
- end ;
-
- print_label_array ;
- write (lst,scr.prt_rset)
- end ;
-
- begin
- clrscr ;
- write_str ('PRINTING TEST PATTERN',30,2) ;
- write_str ('Use the test pattern to align your printer',20,4) ;
- write_str ('Please select:',26,6) ;
- write_str ('1 Print test pattern again',26,8) ;
- write_str ('2 Print the labels',26,9) ;
- write_str ('ESC Cancel and return to menu',26,10) ;
- write_str ('==> ',26,12) ;
- print_pattern ;
- repeat
- fld := 1 ;
- choice := 0 ;
- read_int (choice,1,30,12) ;
- if choice = 1 then
- print_pattern ;
- until (choice = 2) or (fld = maxint)
- end ; { proc print_test_pattern }
-
- { - - - - - - - - - - - - - - - - }
-
- procedure print_a_label ;
- { put name & address in output buffer, print if buffer full }
-
- procedure fill (var buf : label_buffer) ;
- var
- i,j : integer ;
- begin
- with master do
- begin
- buf[1] := concat(title,' ',frst_name,' ',last_name) ;
- buf[1] := stripch (buf[1],' ') ;
- buf[1] := concat(' ',buf[1]) ;
- buf[2] := concat(' ',addr1) ;
- buf[3] := concat(' ',addr2) ;
- buf[4] := concat(' ',city,', ',state) ;
- add_blanks (buf[4],34 - length(buf[4])) ;
- buf[4] := concat(buf[4],copy(zip,1,5)) ;
- if length(zip) > 5 then
- buf[4] := concat(buf[4],'-',copy(zip,6,4)) ;
- for i := 1 to 4 do { get rid of blank lines }
- begin
- if is_blank (buf[i]) then
- begin
- for j := i to 3 do
- buf[j] := buf[j+1] ;
- buf[4] := ''
- end { if }
- end { for i ... }
- end { with }
- end ; { proc fill }
-
- begin { proc print_a_label }
- if keypressed then
- begin
- keyin (ch) ;
- if ch = #$1B then
- begin
- write_str ('STOP NOW? (Y/N)',9,7) ;
- beep ;
- read_yn (stop,25,7) ;
- OK := not stop ;
- if OK then clrline(9,7) ;
- end
- end ;
- if OK then
- begin
- if left_is_empty then
- begin
- fill(left) ;
- left_is_empty := false
- end
- else
- begin
- fill(right) ;
- print_label_array ;
- left_is_empty := true
- end ; { else }
- num_out := succ(num_out)
- end { if OK }
- end ; { proc print_a_label }
-
- { - - - - - - - - - - - - - - - - }
-
- begin { --- procedure print_labels --- }
- fld := 1 ;
- print_test_pattern ;
- if fld = maxint then goto 99 ;
-
- clrscr ;
- write_str ('Printing labels . . .',9,3) ;
- write_str ('Press ESC to stop ',9,5) ;
- open_database ;
- if how_to_sort = name then
- clearkey (ix1_file)
- else { how_to_sort = szip }
- clearkey (ix2_file) ;
- left_is_empty := true ;
- num_out := 0 ;
-
- write (lst,scr.prt_init) ;
- repeat
- get_a_rec ;
- if OK then
- case which_ones of
- all : print_a_label ;
- pcat : if (master.flags and mask) > 0 then
- print_a_label ;
- pct : if master.precinct = pcinct then
- print_a_label ;
- pzip : if copy(master.zip,1,5) = copy(zipcode,1,5) then
- print_a_label ;
- dt : if not (greater_date(lastdt,master.last_date) = 1) then
- print_a_label ;
- amt : if not (greater(contrib,master.tot_amt)) then
- print_a_label ;
- end { case }
- until not OK ;
- if not (left_is_empty) then
- print_label_array ;
- write (lst,scr.prt_rset) ;
-
- close_database ;
- gotoxy(9,9) ;
- write(num_out,' names printed') ;
- beep ;
- hard_pause ;
- fld := 3 ;
- 99:
- end ; { proc print_labels }
-
- { ==================== }
-
- begin { --- procedure print --- }
- fld := 1 ;
- select (which_ones, how_to_sort, opt) ;
- if not (fld = maxint) then
- case opt of
- list : print_list ;
- labels : print_labels
- end ; { case }
- fld := 1
- end ; { procedure print }
-
- { ---- EOF FILE MPRINT.INC ---------------------------------- }
- pzip : if copy(master.zip,1,5) = copy(zipcode,1,5) then
- print_a_label ;
-