diff options
Diffstat (limited to 'macros/generic/eijkhout/DB_process.tex')
-rw-r--r-- | macros/generic/eijkhout/DB_process.tex | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/macros/generic/eijkhout/DB_process.tex b/macros/generic/eijkhout/DB_process.tex new file mode 100644 index 0000000000..f43078e950 --- /dev/null +++ b/macros/generic/eijkhout/DB_process.tex @@ -0,0 +1,151 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DataBase processing macros, version 0.91, December 2000 +% Copyright Victor Eijkhout 2000 +% file name: DB_process.tex +% +% Author: +% Victor Eijkhout +% Department of Computer Science +% University of Tennessee, Knoxville TN 37996 +% +% victor@eijkhout.net +% +% This program is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License +% as published by the Free Software Foundation; either version 2 +% of the License, or (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% For a copy of the GNU General Public License, write to the +% Free Software Foundation, Inc., +% 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, +% or find it on the net, for instance at +% http://www.gnu.org/copyleft/gpl.html +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Use this file as follows: +% +% \input DB_process +% \def\DBPprintline#1#2#3#4#5#6#7#8#9% +% { < do whatever you want with the argument > } +% \DBPtabfile{ <input file> } or \DBPcommafile{ <input file> } +% +% The user macro \DBPprintline is applied to the max 9 arguments +% of each database line. You need to define the macro with 9 arguments; +% if the database has less than 9 fields, empty arguments are passed. +% +% The input records are counted, and the counter is available as \DBPno. +% To print this, you have to do \number\DBPno or somesuch. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% revision history: +% 0.9 first release, December 1998 +% 0.91 documentation update, use repeat.tex for loop macro, +% copyright notice, better handling of 'fragile' material +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%% +%% prevent multiple loading of this file +%% +\expandafter\ifx\csname DBPfile\endcsname\relax + \message{Loading DataBase Processing macros ... }% +\else + \message{DataBase Processing macros already loaded ... }\endinput \fi + +%% +%% Allocations +%% +\newread\DBPfile \newcount\DBPitem \newtoks\DBPtoks +\def\csarg#1#2{\expandafter#1\csname#2\endcsname} +\def\cscsarg#1#2{\csname#1\expandafter\endcsname\csname#2\endcsname} +\cscsarg{newtoks}{DBPtoks1} +\cscsarg{newtoks}{DBPtoks2} +\cscsarg{newtoks}{DBPtoks3} +\cscsarg{newtoks}{DBPtoks4} +\cscsarg{newtoks}{DBPtoks5} +\cscsarg{newtoks}{DBPtoks6} +\cscsarg{newtoks}{DBPtoks7} +\cscsarg{newtoks}{DBPtoks8} +\cscsarg{newtoks}{DBPtoks9} + +%% +%% Load auxiliary files: loop macro +%% +\input repeat.tex + +%% +%% a default printline macro +%% +\def\DBPprintline#1#2#3#4#5#6#7#8#9{\number\DBPno: #1\par} + +%% +%% general parsing macros +%% +\def\DBPparsefile{\def\DBPtestc{\par}% + \repeat \for{DBPno} \do {\read\DBPfile to \DBPinput + \ifx\DBPinput\DBPtestc \expandafter\breakrepeat \fi + \DBPitem=1\relax \DBPtoks=\expandafter{\DBPinput}% + \edef\DBPtemp{\noexpand\DBPparseline\the\DBPtoks + \DBPdelim DBP\DBPdelim}\DBPtemp + }} +\def\DBPline#1#2{% + \def\DBPtesta{#1}\def\DBPtestb{DBP}% + \ifx\DBPtesta\DBPtestb + \edef\DBPtemp{\noexpand\DBPprintline + {\csarg\the{DBPtoks1}}% + {\csarg\the{DBPtoks2}}% + {\csarg\the{DBPtoks3}}% + {\csarg\the{DBPtoks4}}% + {\csarg\the{DBPtoks5}}% + {\csarg\the{DBPtoks6}}% + {\csarg\the{DBPtoks7}}% + {\csarg\the{DBPtoks8}}% + {\csarg\the{DBPtoks9}}% + }\DBPtemp + \csarg\relax{DBPtoks1}{}% + \csarg\relax{DBPtoks2}{}% + \csarg\relax{DBPtoks3}{}% + \csarg\relax{DBPtoks4}{}% + \csarg\relax{DBPtoks5}{}% + \csarg\relax{DBPtoks6}{}% + \csarg\relax{DBPtoks7}{}% + \csarg\relax{DBPtoks8}{}% + \csarg\relax{DBPtoks9}{}% + \else \ifnum\DBPitem<10\relax + \csname DBPtoks\number\DBPitem\endcsname={#1}% + \else \message{DB Processor: can not handle >9 items/line}% + \fi + \advance\DBPitem by 1 + \expandafter#2\fi} + +%% +%% macros for comma-delimited +%% +\def\DBPcommafile#1{% + \openin\DBPfile=#1\relax + \let\DBPparseline=\DBPcommaline + \def\DBPdelim{,}% + \DBPparsefile} +\def\DBPcommaline#1,{\DBPline{#1}\DBPcommaline} + +%% +%% macros for tab-delimited +%% +\begingroup \catcode9=12 +\gdef\DBPtabfile#1{% + \openin\DBPfile=#1\relax + \begingroup + \catcode9=12 \let\DBPparseline=\DBPtabline + \def\DBPdelim{^^I}% + \DBPparsefile + \endgroup} +\gdef\DBPtabline#1^^I{\DBPline{#1}\DBPtabline} +\endgroup + +\endinput |