%D \module
%D   [       file=core-02a,
%D        version=1997.03.31,
%D          title=\CONTEXT\ Core Macros,
%D       subtitle=2A (to be split),
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
%C details.

\writestatus{loading}{Context Extra Macros (a)}

\unprotect

\startmessages  dutch  library: addresses
  title: adressen
      1: --
      2: hoofdbestand --
      3: nevenbestand --
\stopmessages

\startmessages  english  library: addresses
  title: addresses
      1: --
      2: primary base --
      3: secondary base --
\stopmessages

\startmessages  german  library: addresses
  title: Adressen
      1: --
      2: Haupbestand --
      3: Nebenbestand --
\stopmessages

%I n=Kontakten
%I c=\laadkontakten
%I
%I De onderstaande commando's werken samen met het programma
%I TeXAdres.
%I
%I  \laadkontakten[naam,groep,...]
%I
%I Dit commando doorzoekt eerst de file 'texadres.tao' en
%I vervolgens de file 'texadres.tae' op naam en groep. Bij
%I elk gevonden adres (naam of groepslid) wordt het commando
%I \doemetkontakt{logisch} aangeroepen.
%I
%I De waarden van de verschillende velden zijn op te roepen met
%I het commando \kontaktwaarde{veldnaam}. Let op: het in
%I bijvoorbeeld een adres opgenomen commando \\ moet men zelf
%I definieren, bijvoorbeeld: \def\\{\endgraf}.
%P
%I TeXAdres zet alle files op een gebied met de extensie 'tai'
%I om in een file met de extensie 'tao' of 'tae'. Een invoerfile
%I is als volgt opgebouwd:
%I
%I Een adres in de uitvoerfile ziet er als volgt uit:
%I
%I    \beginvankontakt{...}
%I      \lidvangroep{...,...,...}
%I      \naam{...}
%I      \letters{...}
%I      \...{...}
%I      \postadres{...}
%I    \eindvankontakt{...}
%P
%I De invoerfile bevat zowel definities van kontakten als van
%I groepen.
%I
%I Een kontakt wordt als volgt gedefinieerd:
%I
%I   < kontakt   >
%I
%I   [ logisch   ]  hagenj
%I   [ naam      ]  Hagen
%I   [ letters   ]  J.
%I   [ voornaam  ]  Hans
%I   [ titel     ]  heer
%I   [ telefoon  ]  053 - 336934
%I   [ telefax   ]
%I   [ postadres ]  J. Hagen \\ Ridderstraat 27--29 \\ 8061 GH Hasselt
%I   [ info      ]  ach ja
%P
%I Een groep wordt als volgt gedefinieerd:
%I
%I   < groep     >
%I
%I   [ logisch   ]  werkgroep
%I   [ naam      ]
%I   [ lid       ]  ottenaf
%I   [ lid       ]  hagenj
%I   [ lid       ]  jonkerj
%I   [ lid       ]  marlecvan

% In eerste instantie leek het werken met % voor te skippen
% regels mij een aardige oplossing. Echter, het opslurpen van
% een heel blok tot \eindvankontakt gaat net zo snel.
%
% Hoewel het mechanisme inmiddels uitstekend is te combineren
% met het tekstblok-mechanisme, wordt vooralsnog deze snelle
% variant gebruikt.
%
% Om conflicten te voorkomen met reeds gedefinieerde commando's,
% zoals \naam, wordt enkele malen \bgroup..\egroup gebruikt.

\newevery \everykontakt \EveryKontakt

\def\stelkontaktenin[#1]%
  {\getparameters[\??kt][#1]}%

\def\presetkontaktwaarde#1%
  {\setgvalue{\??kw#1}{}%
   \setvalue{#1}##1%
     {\setgvalue{\??kw#1}{##1}}}

\def\resetkontaktwaarde#1%
  {\setgvalue{\??kw#1}{}%
   \setvalue{#1}##1%
     {\skipkontakt}}

\def\kontaktwaarde#1%
  {\getvalue{\??kw#1}}

\def\presetkontakt%
  {\rawprocesscommalist%
     [naam,letters,voornaam,titel,telefoon,telefax,postadres,info]%
     \presetkontaktwaarde}

\def\resetkontakt%
  {\rawprocesscommalist%
     [naam,letters,voornaam,titel,telefoon,telefax,postadres,info]%
     \resetkontaktwaarde}

\def\skipkontakt%
  {\long\def\next##1\eindvankontakt%
     {\def\next####1{\egroup}\next}%
   \next}

\newif\ifkontaktok

\let\doemetkontakt=\gobbleoneargument

\def\laadkontakten[#1]%
  {\makerawcommalist[#1]\gevraagdekontakten
   \resetkontakt
   \doifelsenothing{\gevraagdekontakten}
     {\def\gevraagdekontakten{\v!alles}%
      \kontaktoktrue}
     {\kontaktokfalse}%
   \def\checkkontakt##1%
     {\rawdoifinsetelse{##1}{\gevraagdekontakten}{\kontaktoktrue}{}}%
   \def\lidvangroep##1%
     {\doifsomething{##1}
        {\rawprocesscommalist[##1]\checkkontakt}%
      \ifkontaktok
        \let\next=\presetkontakt
      \else
        \let\next=\skipkontakt
      \fi
      \next}%
   \def\beginvankontakt##1%
     {\bgroup
      \ifkontaktok
        \def\lidvangroep####1{}%
        \let\next=\presetkontakt
      \else
        \checkkontakt{##1}%
        \ifkontaktok
          \def\lidvangroep####1{}%
          \let\next=\presetkontakt
        \else
          \let\next=\relax
        \fi
      \fi
      \next}%
   \def\eindvankontakt##1%
     {\relax
      \egroup
      \the\everykontakt
      \doemetkontakt{##1}}%
   \showmessage{\m!addresses}{1}{\gevraagdekontakten}%
   \readsysfile{texadres.tao}{\showmessage{\m!addresses}{2}{(tao)}}{\relax}%
   \readjobfile{texadres.tae}{\showmessage{\m!addresses}{3}{(tae)}}{\relax}}

\protect

\endinput
