summaryrefslogtreecommitdiff
path: root/macros/text1/pc/models/mergetxt.inp
diff options
context:
space:
mode:
Diffstat (limited to 'macros/text1/pc/models/mergetxt.inp')
-rw-r--r--macros/text1/pc/models/mergetxt.inp184
1 files changed, 184 insertions, 0 deletions
diff --git a/macros/text1/pc/models/mergetxt.inp b/macros/text1/pc/models/mergetxt.inp
new file mode 100644
index 0000000000..a25e9617e5
--- /dev/null
+++ b/macros/text1/pc/models/mergetxt.inp
@@ -0,0 +1,184 @@
+% Merge File Model Macro Definition File
+\catcode`*=11
+\catcode`"=\active
+\catcode`,=\active
+\catcode`@=\active
+\newbox\FirstUp
+\newbox\SecondUp
+\newbox\ThirdUp
+\newcount\*first \*first=0 % first token field
+\newcount\*index \*index=0 % field index
+\newcount\*lastentry \*lastentry=0 % last token filed
+\newcount\*letternumber \*letternumber=0 % letter number from start
+\newcount\LblsUp \LblsUp=1 % number of labels per line
+\newcount\LblsAcross \LblsAcross=0 % counter for labels accross
+\newdimen\LblMat \LblMat=0pt % left and right label margins
+\newdimen\LblHt \LblHt=0in % vertical label size
+\newdimen\LblWd \LblWd=0in % horozontal label size
+\newif\if*check \*checkfalse % datacheck for manual entry
+\newif\if*lbfopen \*lbfopenfalse % check for open label file
+\newtoks\*csnametoks \*csnametoks={} % tokens for field names
+\newtoks\*maillblfmt \*maillblfmt={} % label sheet format code
+\newtoks\*addrlbl \*addrlbl={} % address label tokens
+\newwrite\*labels % create label filee
+
+\gdef,{\char'54{}}%
+% Datacheck forces a print letter after each set of fields
+\def\datacheck{\global\*checktrue}%
+\def@{\ifnum\*index>0
+ \global\*index=\*first % reset index
+ \if*check
+ \global\advance\*letternumber by1
+ \immediate\write16{Letter number \the\*letternumber.
+ First Data Field: (\the\toks\*first) . . .
+ Last Data Field: (\the\toks\*lastentry ). }
+ \fi % write to log file for data check
+ \*prnletter % print current data
+ \fi
+} % end of @ definition
+
+% Take user defined names to build control sequences
+\def\fieldnames#1{\par
+ \global\advance\count15 by 1 % new token register
+ \global\*first=\count15 % first new token register
+ \parsenames#1\end}% end fieldnames markup
+
+% Separate name fields into individual entries
+\def\parsenames#1{\ifx#1\end
+ \createfield
+ \let\next=\relax
+ \global\*lastentry=\count15
+ \global\*index=\*first
+ \*csnametoks={}
+ \else
+ \ifx#1,
+ \createfield
+ \global\advance\count15 by 1
+ \*csnametoks={}
+ \let\next=\parsenames
+ \else \*csnametoks=\expandafter{\the\*csnametoks#1}
+ \let\next=\parsenames
+ \fi\fi
+ \next}% end parsenames markup
+
+% CREATEFIELD create control sequence names from name field entries
+\def\createfield{\expandafter\xdef\csname\the\*csnametoks\endcsname
+ {\noexpand\the\toks\the\count15 }}% end createfield markup
+
+% DEFINE " as name of merge command
+\def"#1"{% set quote marks as active macro and delimiter
+ \ifnum\*index=0 \global\*index=\*first\fi
+ \global\toks\*index={#1} % gather argument in token variable
+ \ifnum\*index<\*lastentry % continue gathering process
+ \gdef,{\gdef,{\char'54{}}}% % drop , in data but not in text
+ \global\advance\*index by1 % index by 1
+ \ignorespaces % eliminate spurious spaces
+ \else % end process
+ \global\*index=0
+ \if*check
+ \global\advance\*letternumber by1
+ \immediate\write16{Letter number \the\*letternumber.
+ First Data Field: (\the\toks\*first) . . .
+ Last Data Field: (\the\toks\*lastentry ). }
+ \fi % write to log file for data check
+ \*prnletter % print current data
+ \fi}% end define " as macro name
+
+% Merge letter text file merged for each data record
+\def\*prnletter{% Print the letter text with current name/address fields
+ \catcode`"=12\catcode`@=3 % set " and @ to normal catcodes
+ \newpage % start new page for each letter
+ \setpagenumber{1} % reset page number
+ \inputletter % new page then get letter text file
+ \*savelabels{\*setlabel} % save address label information
+ \catcode`"=\active\catcode`@=\active % reset catcodes for markup defs
+ \relax}% end prnletter markup
+
+% Give filename for letter text
+\def\documentfilename#1{\gdef\inputletter{\input #1 }}%
+
+% Give maillist data filename
+\def\datafilename#1{\input #1 }%
+
+% Print no empty lines with the line break markup
+\def\noemptyspace#1#2{\edef\V{#1}\edef\W{\empty}%
+ \ifx\V\W% do nothing if empty argument
+ \else #1#2\fi% if not empty replace argument with the line break
+}% end no emptyspace
+\let\nes=\noemptyspace % set abbreviation
+
+
+% SAVELABELS ships information for labels to the label file
+\def\*savelabels#1{% Write Mail Label Information to TEXT1$$.LABEL
+ \if*lbfopen % do nothing if file TEXT1$$.LABEL already open
+ \else \immediate\openout\*labels=text1$$.label % open TEXT1$$.LABEL
+ \immediate\write\*labels{\the\*maillblfmt} % write format
+ \global\*lbfopentrue\fi % set open flag
+ \global\advance\LblsAcross by1 % set label postion pointer
+ \ifnum\LblsAcross>\LblsUp \global\LblsAcross=1 \fi
+ \edef\T{% create labels
+ \ifnum\LblsAcross=1 \setbox\FirstUp=\fi % left label
+ \ifnum\LblsAcross=2 \setbox\SecondUp=\fi% center label
+ \ifnum\LblsAcross=3 \setbox\ThirdUp=\fi % right label
+ \vtop to\LblHt{\hsize=\LblWd \leftskip=\LblMat \rightskip=\LblMat
+ \parindent=0pt #1\par\vfil} % make label to label size and width
+ \ifnum\LblsAcross=\LblsUp % print labels
+ \ifcase\LblsUp% case 0, no labels specified
+ \or\setbox\SecondUp=\null \setbox\ThirdUp=\null % one label
+ \or \setbox\ThirdUp=\null % two labels
+ \fi% end case % three label default
+ \line{\box\FirstUp\box\SecondUp\box\ThirdUp\hfil}
+ \fi}% end definition of T
+ \immediate\write\*labels{\T} % write information to file
+}% end save labels definition
+
+% Flushlabels prints any unprinted labels remaining in the markup
+\def\*flushlabels{% print any remaining boxed labels
+ \ifcase\LblsUp % case ), no labels specified
+ \or \setbox\SecondUp=\null \setbox\ThirdUp=\null % one label
+ \or \setbox\ThirdUp=\null % two labels
+ \fi% end case % three label default
+ \immediate\write\*labels{\line{\box\FirstUp\box\SecondUp\box\ThirdUp
+ \hfil}}%
+}% end flush any remaining labels
+
+% Print the label file TEXT1$$.LABEL
+\def\printlabels{\newpage % end last letter
+ \*flushlabels % print any remaining labels
+ \immediate\closeout\*labels % close data file
+ \setpagenumber{99} % labels begin on page 99
+ \input text1$$.label % input the address label data file
+}% end print mailing labels
+
+\def\addresslabelformat#1{\global\*addrlbl={#1}}%
+\*addrlbl={}
+
+\def\*setlabel{\the\*addrlbl}%
+
+% Set format for the mailing labels
+\def\maillabelformat#1{% Sets dimensions and margins of each label
+ \def\labelsetup##1{\global\*maillblfmt={##1}}%
+ \def\numberoflabelsperline##1{\global\LblsUp=##1}%
+ \def\labelheight##1{\global\LblHt=##1}%
+ \def\labelwidth##1{\global\LblWd=##1}%
+ \def\labelmat##1{\global\LblMat=##1}%
+ #1}% end mail label format
+\let\mlfmt=\maillabelformat % set abbreviation
+\catcode`*=12
+
+% Set defaults for the mailing labels
+% Maillabelformat sets the page and label information for mailing labels
+\maillabelformat{\labelsetup{% Sets page and margin settings
+ \raggedbottom
+ \parskip=0pt plus0pt minus0pt
+ \runningheadformat{\bothpages{\line{}}}
+ \pageformat{\topmargin{1in}
+ \bottommargin{0pt}
+ \leftmargin{0pt}
+ \rightmargin{0pt}}% end page format
+ }% end labelsetup
+ \numberoflabelsperline{3}% three labels max
+ \labelheight{1in}
+ \labelwidth{2.75in}
+ \labelmat{.25in}
+}% end mail label format