You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(132) |
Jul
(50) |
Aug
(172) |
Sep
(87) |
Oct
|
Nov
(1) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(39) |
Oct
(2) |
Nov
|
Dec
|
2004 |
Jan
(47) |
Feb
|
Mar
(11) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
(9) |
Nov
|
Dec
|
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
From: Egon W. <eg...@us...> - 2002-08-15 10:30:23
|
Update of /cvsroot/woc/woc/data/wml/c In directory usw-pr-cvs1:/tmp/cvs-serv11687/data/wml/c Added Files: choline.xml Log Message: Added choline. --- NEW FILE: choline.xml --- <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE ITEM PUBLIC "-//www-woc.sci.kun.nl//DTD WOC Markup Language V1.0//EN" "http://www-woc.sci.kun.nl/wocml.dtd"> <ITEM NAME="choline" ID="WOC00001736" CLASS="CHEMICAL" CODE="choline"> <DICT> <NAME CLASS="TRIVIAL"> <LANG ID="EN">choline</LANG> <LANG ID="NL">choline</LANG> </NAME> <NAME CLASS="IUPAC"> <LANG ID="EN">2-hydroxyethyl-trimethyl ammonium hydroxide</LANG> </NAME> </DICT> <INDEX CLASS="CAS-NUMBER">67-48-1</INDEX> <WOC> <tm:topicmap xmlns:tm="http://www.topic-maps.de/content/resources\tm.dtd" xmlns:woctm="http://www.sci.kun.nl/woc/woctm"> <tm:assoc id="at-is-een"> <tm:assocrl xlink:href="wateroplosbare vitaminen"/> </tm:assoc> </tm:topicmap> </WOC> </ITEM> |
From: Egon W. <eg...@us...> - 2002-08-15 10:28:00
|
Update of /cvsroot/woc/woc/bin/lire In directory usw-pr-cvs1:/tmp/cvs-serv10706/lire Modified Files: Makefile.am Log Message: Install binaries in correct dirs. Index: Makefile.am =================================================================== RCS file: /cvsroot/woc/woc/bin/lire/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Makefile.am 21 Jul 2002 15:47:12 -0000 1.1 --- Makefile.am 15 Aug 2002 10:27:56 -0000 1.2 *************** *** 1,2 **** --- 1,4 ---- + bindir=${prefix}/bin/lire + bin_SCRIPTS = \ report.pl |
From: Egon W. <eg...@us...> - 2002-08-15 10:27:59
|
Update of /cvsroot/woc/woc/bin/check In directory usw-pr-cvs1:/tmp/cvs-serv10706/check Modified Files: Makefile.am Log Message: Install binaries in correct dirs. Index: Makefile.am =================================================================== RCS file: /cvsroot/woc/woc/bin/check/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Makefile.am 21 Jul 2002 10:20:01 -0000 1.1 --- Makefile.am 15 Aug 2002 10:27:56 -0000 1.2 *************** *** 1,2 **** --- 1,4 ---- + bindir=${prefix}/bin/check + bin_SCRIPTS = \ check_filenames.pl \ |
From: Egon W. <eg...@us...> - 2002-08-15 10:27:59
|
Update of /cvsroot/woc/woc/bin/index In directory usw-pr-cvs1:/tmp/cvs-serv10706/index Modified Files: Makefile.am Log Message: Install binaries in correct dirs. Index: Makefile.am =================================================================== RCS file: /cvsroot/woc/woc/bin/index/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Makefile.am 20 Jul 2002 14:25:32 -0000 1.2 --- Makefile.am 15 Aug 2002 10:27:56 -0000 1.3 *************** *** 1,2 **** --- 1,4 ---- + bindir=${prefix}/bin/index + bin_SCRIPTS = \ woclist.sh \ *************** *** 5,7 **** update.sh ! CLEANFILES = $(bin_SCRIPTS) \ No newline at end of file --- 7,9 ---- update.sh ! CLEANFILES = $(bin_SCRIPTS) |
From: Egon W. <eg...@us...> - 2002-08-15 10:27:59
|
Update of /cvsroot/woc/woc/bin/download In directory usw-pr-cvs1:/tmp/cvs-serv10706/download Modified Files: Makefile.am Makefile.in Log Message: Install binaries in correct dirs. Index: Makefile.am =================================================================== RCS file: /cvsroot/woc/woc/bin/download/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Makefile.am 20 Jul 2002 14:50:34 -0000 1.1 --- Makefile.am 15 Aug 2002 10:27:56 -0000 1.2 *************** *** 1,2 **** --- 1,4 ---- + bindir=${prefix}/bin/download + bin_SCRIPTS = \ download_pdb_from_NCI.pl \ Index: Makefile.in =================================================================== RCS file: /cvsroot/woc/woc/bin/download/Makefile.in,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** Makefile.in 8 Aug 2002 11:06:48 -0000 1.3 --- Makefile.in 15 Aug 2002 10:27:56 -0000 1.4 *************** *** 21,26 **** prefix = @prefix@ exec_prefix = @exec_prefix@ - - bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ --- 21,24 ---- *************** *** 73,76 **** --- 71,76 ---- am__quote = @am__quote@ install_sh = @install_sh@ + + bindir = ${prefix}/bin/download bin_SCRIPTS = \ |
From: Egon W. <eg...@us...> - 2002-08-15 10:27:59
|
Update of /cvsroot/woc/woc/bin/cas In directory usw-pr-cvs1:/tmp/cvs-serv10706/cas Modified Files: Makefile.am Log Message: Install binaries in correct dirs. Index: Makefile.am =================================================================== RCS file: /cvsroot/woc/woc/bin/cas/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Makefile.am 20 Jul 2002 15:14:28 -0000 1.1 --- Makefile.am 15 Aug 2002 10:27:56 -0000 1.2 *************** *** 1,2 **** --- 1,4 ---- + bindir=${prefix}/bin/cas + bin_SCRIPTS = \ add_nsc_number.pl \ |
From: Egon W. <eg...@us...> - 2002-08-08 11:07:38
|
Update of /cvsroot/woc/woc/cgi-bin/htplpdir/woc In directory usw-pr-cvs1:/tmp/cvs-serv28851/cgi-bin/htplpdir/woc Added Files: bericht.htpl berichtkop.htpl eindelijst.htpl incompleet.htpl nieuwelijst.htpl overigkop.htpl overzicht.htpl rubriek.htpl rubriekkop.htpl rubriektoc.htpl toevoegform.htpl vraagkop.htpl woc.htpl woc.pl Log Message: Added WOC htplp files. --- NEW FILE: bericht.htpl --- <CENTER> if $vraag <FONT SIZE=+1><B>Vraag of reactie over $subject</B></FONT><BR> if !$vraag <FONT SIZE=+1><B>Over $subject</B></FONT><BR> <I>(<A HREF="mailto:$email">$naam</A>, $stamp)</I> </CENTER> <P> <HR WIDTH=20%> <P> <UL> if $vraag <B>$inhoud</B> if !$vraag $inhoud <P> $reacties </UL> <P> <H3 ALIGN=Center> if $volgendelink [ <A HREF="$volgendelink">Volgende</A> ] if $vraag [ <A HREF="$voorgangerlink">Rubriek</A> ] if !$vraag [ <A HREF="$voorgangerlink">Voorganger</A> ] [ <A HREF="$reactielink">Reageren</A> ] [ <A HREF="$script">Rubrieken</A> ] </H3> --- NEW FILE: berichtkop.htpl --- <LI><B>@subject</B> <A HREF="@berichtlink">@naam</A> <I>(@stamp)</I> --- NEW FILE: eindelijst.htpl --- </UL> --- NEW FILE: incompleet.htpl --- <CENTER> <BR><H1>Volledig Invullen A.U.B.</H1> <FORM METHOD=POST ACTION="$script+voegtoe+$niveau+$nummer"> <INPUT TYPE=Hidden NAME="datum" VALUE="$datum"> <INPUT TYPE=Hidden NAME="tijd" VALUE="$tijd"> <TABLE> <TR> <TD>Naam:</TD> <TD><INPUT TYPE=Text NAME="naam" SIZE=50 VALUE="$naam"></TD> </TR> <TR> <TD>E-Mail:</TD> <TD><INPUT TYPE=Text NAME="email" SIZE=50 VALUE="$email"></TD> </TR> <TR> <TD>Subject:</TD> <TD><INPUT TYPE=Text NAME="subject" SIZE=50 VALUE="$subject"></TD> </TR> <TR> <TD>Bericht:</TD> <TD><TextAREA COLS=55 ROWS=10 NAME="inhoud">$inhoud</TextAREA></TD> </TR> </TABLE> <INPUT TYPE=Submit VALUE="Voeg toe"> <INPUT TYPE=Reset VALUE="Opnieuw"> </FORM> </CENTER> --- NEW FILE: nieuwelijst.htpl --- <UL> --- NEW FILE: overigkop.htpl --- <LI><A HREF="@overiglink">@overiginhoud</A> (@overignaam) --- NEW FILE: overzicht.htpl --- <H2 ALIGN=Center>Alle vragen over en reacties op het WOC</H2> <UL> Kies een van de onderstaande rubrieken om antwoorden op je vraag te zoeken of vragen, antwoorden of commentaar toe te voegen: <P> <UL> $overzicht </UL> </UL> <H3 ALIGN=CENTER> [ <A HREF="$nieuwevraaglink">Nieuwe vraag of reactie</A> ] [ <A HREF="$script">Rubrieken</A> ] </H3> --- NEW FILE: rubriek.htpl --- <A HREF="@rubrieklink"><FONT SIZE=+1><B>@subject</B></FONT></A> <I>(@numvraag vrg, @numant ant, @numcomm comm)</I> <P> @inhoud </P> --- NEW FILE: rubriekkop.htpl --- <P><FONT SIZE=+1><B>@rubrieksubject</B></FONT></P> --- NEW FILE: rubriektoc.htpl --- <H2 ALIGN=Center>$rubrieksubject</H2> <UL> $rubriekinhoud <P> <BR> Kies een van de onderstaande vragen of kies gelijk een van de antwoorden: $rubriektoc </UL> <BR> <H3 ALIGN=CENTER> [ <A HREF="$vraagtoevoeglink">Vraag of reactie toevoegen</A> ] [ <A HREF="$script">Rubrieken</A> ] </H3> --- NEW FILE: toevoegform.htpl --- <CENTER> <BR><H1>$header</H1> <FORM METHOD=POST ACTION="$script+voegtoe+$niveau+$nummer"> <INPUT TYPE=Hidden NAME="datum" VALUE="$datum"> <INPUT TYPE=Hidden NAME="tijd" VALUE="$tijd"> <TABLE> <TR> <TD>Naam:</TD> <TD><INPUT TYPE=Text NAME="naam" SIZE=50 VALUE="$naam"></TD> </TR> <TR> <TD>E-Mail:</TD> <TD><INPUT TYPE=Text NAME="email" SIZE=50 VALUE="$email"></TD> </TR> <TR> <TD>Subject:</TD> <TD><INPUT TYPE=Text NAME="subject" SIZE=50 VALUE="$subject"></TD> </TR> <TR> <TD>Bericht:</TD> <TD><TextAREA COLS=50 ROWS=8 NAME="inhoud">$inhoud</TextAREA></TD> </TR> </TABLE> <INPUT TYPE=Submit VALUE="Voeg toe"> <INPUT TYPE=Reset VALUE="Opnieuw"> </FORM> </CENTER> --- NEW FILE: vraagkop.htpl --- <P> <LI><A HREF="@vraaglink"><B>@vraaginhoud</B></A> (@vraagnaam) <P> --- NEW FILE: woc.htpl --- Content-type: text/html <HTML> <HEAD> <META NAME="Author" CONTENT="Geert Josten, lid van de internetcommissie van VVCN Sigma"> <META NAME="Description" CONTENT="WOC Forum: Opmerkingen, reacties, vragen en antwoorden"> <META NAME="Generator" CONTENT="Perl-Sript: $0 $scriptage"> <META NAME="IsIndex" CONTENT="No"> <META NAME="Maintainer" CONTENT="$maintainer"> <META NAME="Review" CONTENT="$time"> <BASE href="http://www-woc.sci.kun.nl/" TARGET="pagina"> <TITLE>WOC Forum: $header </TITLE> <link rel="stylesheet" href="gui/styles/woc.css" type="text/css"> </HEAD> <BODY class="main"> <H1 ALIGN=Center>Vragen en Reacties: $header</H1> <HR> <BR> <BR> if $overzicht $overzicht.htpl if $rubriektoc $rubriektoc.htpl if $bericht $bericht.htpl if $toevoegform $toevoegform.htpl if $toevoegformincompleet $incompleet.htpl <P> <HR> <UL> <CENTER><I>De WOC-redactie behoudt het recht om naar eigen inzicht de toegevoegde vragen en antwoorden aan te passen en in te delen.</I></CENTER> </UL> </BODY> </HTML> --- NEW FILE: woc.pl --- $contentcheckers = "woc\@sci.kun.nl"; ## main ## ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; $datum = `date '+%m-%d-%y'`; $tijd = `date '+%H:%Mh'`; if ((@ARGV) && ($ARGV[0] =~ /^nieuw/i)) { shift (@ARGV); $niveau = shift (@ARGV); $nummer = shift (@ARGV); if ($niveau > 2) { $header = "Vul hier je reactie in..."; &maak_reactieform (); } else { $header = "Vul hier je vraag of reactie in..."; if ($nummer > 0) { &maak_reactieform (); } else { $subject = "Ongerubriceerd"; $nummer = @$refdata; } } $toevoegform = "true"; } elsif ((@ARGV) && ($ARGV[0] =~ /^voegtoe/i)) { shift (@ARGV); $niveau = shift (@ARGV); $nummer = shift (@ARGV); if (&voeg_nieuw_bericht_toe ()) { $reacties = ""; $nummer++; $header = "\$inhoud"; if ($niveau > 2) { $bericht = "overig"; } else { $bericht = "vraag"; $vraag = "true"; } &maak_bericht (); } else { $toevoegformincompleet = "true"; } } elsif ((@ARGV) && ($ARGV[0] =~ /^rubriek/i)) { $header = "Vragen Overzicht"; shift (@ARGV); $nummer = shift (@ARGV); $rubriektoc = " "; &maak_rubriek (); $vraagtoevoeglink = "$script+nieuw+2+$nummer"; } elsif ((@ARGV) && ($ARGV[0] =~ /^vraag/i)) { $header = "Antwoorden op vragen"; shift (@ARGV); $nummer = shift (@ARGV); $bericht = "vraag"; $vraag = "true"; &maak_bericht (); } elsif ((@ARGV) && ($ARGV[0] =~ /^\d+/i)) { $header = "Antwoord en commentaar"; $nummer = shift (@ARGV); $bericht = "overig"; &maak_bericht (); } else { $header = "Rubrieken Overzicht"; $overzicht = ""; &maak_overzicht (); $niveau = "1"; $nummer = @$refdata; $nieuwevraaglink = "$script+nieuw+2+0"; } $return = ""; sub maak_reactieform { $refsubject = &get (["subject"], [$$refdata[$nummer-1]], $grammar, ""); $subject = $$refsubject[0]; } sub maak_overzicht { $htmlrubriek = &readhtml ("rubriek.htpl"); $refsubject = &get (["subject"], $refdata, $grammar, ""); $refnaam = &get (["naam"], $refdata, $grammar, ""); $refemail = &get (["email"], $refdata, $grammar, ""); $refstamp = &get (["datum", "tijd"], $refdata, $grammar, ""); $refniveau = &get (["niveau"], $refdata, $grammar, ""); $refinhoud = &get (["inhoud"], $refdata, $grammar, ""); @i = (1..@$refdata); $numvraag = 0; $numant = 0; $numcomm = 0; foreach $i (@i) { $subject = shift @$refsubject; $naam = shift @$refnaam; $email = shift @$refemail; $email =~ s#\@#\\\@#ig; $stamp = shift @$refstamp; $stamp =~ s/#/, /i; $niv = shift @$refniveau; $inhoud = shift @$refinhoud; if ($niv == 1) { push (@rubrieklink, "$script+rubriek+$i"); push (@subject, "\u$subject"); push (@email, $email); push (@naam, "\u$naam"); push (@stamp, $stamp); push (@niveau, $niveau); push (@inhoud, "\u$inhoud"); ($numvraag = "geen") if ! $numvraag; ($numant = "geen") if ! $numant; ($numcomm = "geen") if ! $numcomm; push (@numvraag, $numvraag); push (@numant, $numant); push (@numcomm, $numcomm); $overzicht .= "$htmlrubriek"; $numvraag = 0; $numant = 0; $numcomm = 0; } else { if ($niv == 2) { $numvraag++; } elsif ($niv == 3) { $numant++; } elsif ($niv > 3) { $numcomm++; } } } ($numvraag = "geen") if ! $numvraag; ($numant = "geen") if ! $numant; ($numcomm = "geen") if ! $numcomm; push (@numvraag, $numvraag); push (@numant, $numant); push (@numcomm, $numcomm); shift (@numvraag); shift (@numant); shift (@numcomm); } sub maak_rubriek { $htmlnieuwelijst = &readhtml ("nieuwelijst.htpl"); $htmlrubriekkop = &readhtml ("rubriekkop.htpl"); $htmlvraagkop = &readhtml ("vraagkop.htpl"); $htmloverigkop = &readhtml ("overigkop.htpl"); $htmleindelijst = &readhtml ("eindelijst.htpl"); $last = $nummer; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $niveau = $$refniveau[0]; while (($niveau > 1) && ($last < @$refdata)) { $last++; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $niveau = $$refniveau[0]; } @i = (($nummer-1)..($last-1)); @data = @$refdata[@i]; $refsubject = &get (["subject"], \@data, $grammar, ""); $refnaam = &get (["naam"], \@data, $grammar, ""); $refemail = &get (["email"], \@data, $grammar, ""); $refstamp = &get (["datum", "tijd"], \@data, $grammar, ""); $refniveau = &get (["niveau"], \@data, $grammar, ""); $refinhoud = &get (["inhoud"], \@data, $grammar, ""); foreach $reactieinhoud (@overiginhoud) { $reactieinhoud = substr($reactieinhoud, 0, 40)."..."; } $niv = 1; @i = ($nummer..$last); foreach $i (@i) { $subject = shift @$refsubject; $naam = shift @$refnaam; $email = shift @$refemail; $email =~ s#\@#\\\@#ig; $stamp = shift @$refstamp; $stamp =~ s/#/, /i; $oldniv = $niv; $niv = shift @$refniveau; $inhoud = shift @$refinhoud; if ($niv < $oldniv) { $j = $niv; while ($j < $oldniv) { $rubriektoc .= "$htmleindelijst"; $j++; } } if ($niv > $oldniv) { $j = $oldniv; while ($j < $niv) { $rubriektoc .= "$htmlnieuwelijst"; $j++; } } if ($niv == 1) { $rubrieklink = "$script+rubriek+$i"; $rubrieksubject = "\u$subject"; $rubrieknaam = "\u$naam"; $rubriekinhoud = "\u$inhoud"; } elsif ($niv == 2) { push (@vraaglink, "$script+vraag+$i"); push (@vraagnaam, "\u$naam"); push (@vraaginhoud, "\u$inhoud"); $rubriektoc .= "$htmlvraagkop"; } else { push (@overiglink, "$script+$i"); push (@overignaam, "\u$naam"); $inhoud = substr($inhoud, 0, 40)."..."; push (@overiginhoud, "\u$inhoud"); $rubriektoc .= "$htmloverigkop"; } } $rubriektoc .= "$htmleindelijst"; $rubriektoc .= "$htmleindelijst"; } sub maak_bericht { $htmlnieuwelijst = &readhtml ("nieuwelijst.htpl"); $htmloverigkop = &readhtml ("overigkop.htpl"); $htmleindelijst = &readhtml ("eindelijst.htpl"); $refsubject = &get (["subject"], [$$refdata[$nummer-1]], $grammar, ""); $refnaam = &get (["naam"], [$$refdata[$nummer-1]], $grammar, ""); $refemail = &get (["email"], [$$refdata[$nummer-1]], $grammar, ""); $refstamp = &get (["datum", "tijd"], [$$refdata[$nummer-1]], $grammar, ""); $refniveau = &get (["niveau"], [$$refdata[$nummer-1]], $grammar, ""); $refinhoud = &get (["inhoud"], [$$refdata[$nummer-1]], $grammar, ""); $subject = $$refsubject[0]; $naam = $$refnaam[0]; $email = $$refemail[0]; $stamp = $$refstamp[0]; $niveau = $$refniveau[0]; $inhoud = $$refinhoud[0]; $stamp =~ s/#/ /i; $email =~ s#\@#\\\@#ig; $reactielink = "$script+nieuw+".($niveau+1)."+$nummer"; ### de 'parent', voorganger ### $prev = $nummer-2; $refniveau = &get (["niveau"], [$$refdata[$prev]], $grammar, ""); $prevniveau = $$refniveau[0]; while (($prevniveau >= $niveau) && ($prev > 0)) { $prev--; $refniveau = &get (["niveau"], [$$refdata[$prev]], $grammar, ""); $prevniveau = $$refniveau[0]; } if ($prevniveau < $niveau) { if ($prevniveau == 1) { $voorgangerlink = "$script+rubriek+".($prev+1); } elsif ($prevniveau == 2) { $voorgangerlink = "$script+vraag+".($prev+1); } else { $voorgangerlink = "$script+".($prev+1); } } ### de reacties en het eerst volgende broertje of zusje ### if ($nummer <= @$refdata) { $last = $nummer; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $lastniveau = $$refniveau[0]; while (($lastniveau > $niveau) && ($last < @$refdata)) { $last++; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $lastniveau = $$refniveau[0]; } if ($lastniveau == $niveau) { if ($lastniveau == 1) { $volgendelink = "$script+rubriek+".($last+1); } elsif ($lastniveau == 2) { $volgendelink = "$script+vraag+".($last+1); } else { $volgendelink = "$script+".($last+1); } } if ($last > $nummer) { @reacties = @$refdata[$nummer..$last-1]; $refsubject = &get (["subject"], \@reacties, $grammar, ""); $refnaam = &get (["naam"], \@reacties, $grammar, ""); $refemail = &get (["email"], \@reacties, $grammar, ""); $refstamp = &get (["datum", "tijd"], \@reacties, $grammar, ""); $refniveau = &get (["niveau"], \@reacties, $grammar, ""); $refinhoud = &get (["inhoud"], \@reacties, $grammar, ""); @overigsubject = @$refsubject; @overignaam = @$refnaam; @overigemail = @$refemail; @overigstamp = @$refstamp; @overigniveau = @$refniveau; @overiginhoud = @$refinhoud; @i = (1..@$refdata); foreach $i (@i) { push (@overiglink, "$script+".($i+$nummer)); } foreach $reactiestamp (@overigstamp) { $reactiestamp =~ s/#/ /i; } foreach $reactieinhoud (@overiginhoud) { $reactieinhoud = substr($reactieinhoud, 0, 40)."..."; } foreach $reactieemail (@overigemail) { $reactieemail =~ s#\@#\\\@#ig; } $reacties = ""; $refniveau = &get (["niveau"], \@reacties, $grammar, ""); $niv = $niveau; foreach $reactieniveau (@overigniveau) { if ($niv < $reactieniveau) { while ($niv < $reactieniveau) { $reacties .= " "x($niv-$niveau+2)."$htmlnieuwelijst"; $niv++; } } elsif ($niv > $reactieniveau) { while ($niv > $reactieniveau) { $reacties .= " "x($niv-$niveau+1)."$htmleindelijst"; $niv--; } } $reacties .= " "x($niv-$niveau+1)."$htmloverigkop"; } while ($niv > $niveau) { $reacties .= " "x($niv-$niveau+1)."$htmleindelijst"; $niv--; } } } } sub voeg_nieuw_bericht_toe { %pairs = &parse_form (); $compleet = "true"; foreach $key (keys(%pairs)) { if (! $pairs{$key}) { $compleet = ""; #false } } $subject = $pairs{"subject"} if (exists ($pairs{"subject"})); $naam = $pairs{"naam"} if (exists ($pairs{"naam"})); $email = $pairs{"email"} if (exists ($pairs{"email"})); $datum = $pairs{"datum"} if (exists ($pairs{"datum"})); $tijd = $pairs{"tijd"} if (exists ($pairs{"tijd"})); $inhoud = $pairs{"inhoud"} if (exists ($pairs{"inhoud"})); if ($compleet) { $bericht[$$reforder{"subject"}] = $subject; $bericht[$$reforder{"naam"}] = $naam; $bericht[$$reforder{"email"}] = $email; $bericht[$$reforder{"datum"}] = $datum; $bericht[$$reforder{"tijd"}] = $tijd; $bericht[$$reforder{"niveau"}] = $niveau; $bericht[$$reforder{"inhoud"}] = "(new) ".$inhoud; $bericht = join($datasep, @bericht); if ($nummer >= @$refdata) { $refdata = [@$refdata, $bericht]; } else { $last = $nummer; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $lastniveau = $$refniveau[0]; while (($lastniveau >= $niveau) && ($last < @$refdata)) { $last++; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $lastniveau = $$refniveau[0]; } $nummer = $last if ($last > $nummer); $refdata = [@$refdata[0..($nummer-1)], $bericht, @$refdata[($nummer)..(@$refdata-1)]]; } &save_data ($datafile, $refdata, $refcommenteddata, ""); open (MAIL, "|/usr/ucb/mail -s 'WOC Forum: nieuw bericht' ".$contentcheckers) || die "$!"; print MAIL &expand ($nummer+1, $refdata, $grammar); close (MAIL); } return $compleet; } |
From: Egon W. <eg...@us...> - 2002-08-08 11:06:51
|
Update of /cvsroot/woc/woc/source/wocjava In directory usw-pr-cvs1:/tmp/cvs-serv28403/source/wocjava Modified Files: .cvsignore Added Files: repository_def.xml.in Removed Files: repository_def.xml Log Message: Server name is now setable. PhysicalRoot parameter in repository is now autogenerated. --- NEW FILE: repository_def.xml.in --- <repositories> <!-- definitions of repositories consist mostly of directory names --> <general> <path id="PhysicalRoot">@PHYSPATH@</path> <!-- definition of DADML dirs --> <path id="DADMLSubDir">wocdata/dadml/</path> <path id="MolSubDir">mol/</path> <path id="PdbSubDir">pdb/</path> <path id="XyzSubDir">xyz/</path> <path id="CmlSubDir">cml/</path> <path id="PhysPropSubDir">fysisch/cml/</path> <path id="GifSubDir">gifgalary/</path> <!-- website --> <path id="HtmlRoot">http://@SERVER_HOSTNAME@/</path> <path id="CgiBinRoot">http://@SERVER_HOSTNAME@/cgi-bin/</path> <path id="JavaSubDir">java/</path> <!-- other --> <path id="BronnenFile">woc_bron.html</path> <path id="DatabasesFile">super.xml</path> </general> <specific repository="woc"> <!-- source --> <path id="DataSubDir">wocdata/</path> <path id="WMLSubDir">wml</path> <path id="PictureSubDir">wocdata/pictures/</path> <path id="ModelsSubDir">wocdata/compounds/</path> <!-- website --> <path id="LetterFileSubDir">gui/letters/</path> <path id="ItemFileSubDir">gui/items/</path> <path id="GroupFileSubDir">gui/groups/</path> <path id="IndexFileSubDir">gui/index/</path> <path id="CSSSubDir">gui/styles/</path> <path id="LocatieSubDir">gui/locatie/</path> <path id="JavascriptSubDir">gui/javascript/</path> </specific> <specific repository="iupac"> <!-- source --> <path id="DataSubDir">iupac/data/</path> <path id="WMLSubDir">iupac/data/wml</path> <path id="PictureSubDir">iupac/data/pictures/</path> <path id="ModelsSubDir">iupac/data/compounds/</path> <!-- website --> <path id="LetterFileSubDir">iupac/gui/letters/</path> <path id="ItemFileSubDir">iupac/gui/items/</path> <path id="GroupFileSubDir">iupac/gui/groups/</path> <path id="IndexFileSubDir">iupac/gui/index/</path> <path id="CSSSubDir">iupac/gui/styles/</path> <path id="LocatieSubDir">iupac/gui/locatie/</path> <path id="JavascriptSubDir">iupac/gui/javascript/</path> </specific> </repositories> Index: .cvsignore =================================================================== RCS file: /cvsroot/woc/woc/source/wocjava/.cvsignore,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** .cvsignore 8 Jun 2002 20:43:15 -0000 1.3 --- .cvsignore 8 Aug 2002 11:06:48 -0000 1.4 *************** *** 1 **** --- 1,2 ---- build + repository_def.xml --- repository_def.xml DELETED --- |
From: Egon W. <eg...@us...> - 2002-08-08 11:06:50
|
Update of /cvsroot/woc/woc In directory usw-pr-cvs1:/tmp/cvs-serv28403 Modified Files: configure.in Log Message: Server name is now setable. PhysicalRoot parameter in repository is now autogenerated. Index: configure.in =================================================================== RCS file: /cvsroot/woc/woc/configure.in,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** configure.in 21 Jul 2002 15:47:12 -0000 1.5 --- configure.in 8 Aug 2002 11:06:48 -0000 1.6 *************** *** 10,16 **** AC_PATH_PROGS(PATHTOGUNZIP, gunzip, no) ! dnl find Lire (http://logreport.org) tools ! AC_PATH_PROGS(PATHTOLIRERUN, lr_run, no) ! AC_PATH_PROGS(PATHTOLIREL2R, lr_log2report, no) dnl checking for XML tools --- 10,31 ---- AC_PATH_PROGS(PATHTOGUNZIP, gunzip, no) ! AC_ARG_WITH(hostname, ! [ --with-hostname=name URL of the server], ! [ if test -n "$withval" ! then ! SERVER_HOSTNAME="$withval" ! fi ! ] ! ) ! dnl set default ! if test -z "$SERVER_HOSTNAME" ! then ! SERVER_HOSTNAME="www-woc.sci.kun.nl" ! fi ! AC_SUBST(SERVER_HOSTNAME) ! ! dnl set phys path of CVS ! PHYSPATH=`pwd` ! AC_SUBST(PHYSPATH) dnl checking for XML tools *************** *** 56,59 **** --- 71,75 ---- bin/lire/Makefile bin/lire/report.pl + source/wocjava/repository_def.xml ]) |
From: Egon W. <eg...@us...> - 2002-08-08 11:06:50
|
Update of /cvsroot/woc/woc/bin/download In directory usw-pr-cvs1:/tmp/cvs-serv28403/bin/download Modified Files: Makefile.in Log Message: Server name is now setable. PhysicalRoot parameter in repository is now autogenerated. Index: Makefile.in =================================================================== RCS file: /cvsroot/woc/woc/bin/download/Makefile.in,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Makefile.in 21 Jul 2002 15:47:12 -0000 1.2 --- Makefile.in 8 Aug 2002 11:06:48 -0000 1.3 *************** *** 64,72 **** PACKAGE = @PACKAGE@ PATHTOGUNZIP = @PATHTOGUNZIP@ - PATHTOLIREL2R = @PATHTOLIREL2R@ - PATHTOLIRERUN = @PATHTOLIRERUN@ PATHTOPERL = @PATHTOPERL@ PATHTOSH = @PATHTOSH@ PATHTOXSLTPROC = @PATHTOXSLTPROC@ VERSION = @VERSION@ am__include = @am__include@ --- 64,72 ---- PACKAGE = @PACKAGE@ PATHTOGUNZIP = @PATHTOGUNZIP@ PATHTOPERL = @PATHTOPERL@ PATHTOSH = @PATHTOSH@ PATHTOXSLTPROC = @PATHTOXSLTPROC@ + PHYSPATH = @PHYSPATH@ + SERVER_HOSTNAME = @SERVER_HOSTNAME@ VERSION = @VERSION@ am__include = @am__include@ |
From: Egon W. <eg...@us...> - 2002-08-08 10:37:09
|
Update of /cvsroot/woc/woc/data/wml/a In directory usw-pr-cvs1:/tmp/cvs-serv20559/a Modified Files: amoxicilline.xml Log Message: Added two discovery dates. Index: amoxicilline.xml =================================================================== RCS file: /cvsroot/woc/woc/data/wml/a/amoxicilline.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** amoxicilline.xml 13 Jun 2002 14:39:22 -0000 1.2 --- amoxicilline.xml 8 Aug 2002 10:37:04 -0000 1.3 *************** *** 4,12 **** <DICT> <NAME CLASS="TRIVIAL"> ! <LANG ID="EN"></LANG> <LANG ID="NL">amoxicilline</LANG> </NAME> </DICT> <INDEX CLASS="CAS-NUMBER">26787-78-0</INDEX> <GROUP>antibiotica</GROUP> </ITEM> --- 4,20 ---- <DICT> <NAME CLASS="TRIVIAL"> ! <LANG ID="EN">amoxycillin</LANG> <LANG ID="NL">amoxicilline</LANG> </NAME> + <NAME CLASS="TRIVIAL"> + <LANG ID="EN">amoxil</LANG> + </NAME> </DICT> <INDEX CLASS="CAS-NUMBER">26787-78-0</INDEX> + <WOC> + <DISCOVERY> + <DATE>1964</DATE> + </DISCOVERY> + </WOC> <GROUP>antibiotica</GROUP> </ITEM> |
From: Egon W. <eg...@us...> - 2002-08-08 10:37:09
|
Update of /cvsroot/woc/woc/data/wml/v In directory usw-pr-cvs1:/tmp/cvs-serv20559/v Modified Files: valium.xml Log Message: Added two discovery dates. Index: valium.xml =================================================================== RCS file: /cvsroot/woc/woc/data/wml/v/valium.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** valium.xml 13 Jun 2002 14:39:25 -0000 1.2 --- valium.xml 8 Aug 2002 10:37:04 -0000 1.3 *************** *** 19,22 **** --- 19,25 ---- xmlns:woctm="http://www.sci.kun.nl/woc/woctm"> </tm:topicmap> + <DISCOVERY> + <DATE>1963</DATE> + </DISCOVERY> </WOC> </ITEM> |
From: Geert J. <gj...@us...> - 2002-08-06 12:11:14
|
Update of /cvsroot/woc/woc/bin/index In directory usw-pr-cvs1:/tmp/cvs-serv12741 Modified Files: woclist.sh.in Log Message: Cygwin compatibility: removed escape \ before < in awk line and commented out call to chgrp Index: woclist.sh.in =================================================================== RCS file: /cvsroot/woc/woc/bin/index/woclist.sh.in,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** woclist.sh.in 6 Aug 2002 09:52:00 -0000 1.3 --- woclist.sh.in 6 Aug 2002 12:11:07 -0000 1.4 *************** *** 12,15 **** --- 12,16 ---- echo "" > $NAME$TEMP + cat `find $WMLDIR/123 -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/a -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/b -name "*.xml" | grep -v templates` >> $NAME$TEMP *************** *** 44,48 **** echo ' xmlns:import="http://www.sci.kun.nl/woc/import"' >> $NAME$TEMP2 echo ' xmlns:xlink="http://www.sci.kun.nl/woc/topicmap">' >> $NAME$TEMP2 ! awk "/\<ITEM/,/\<\/ITEM/{print}" $NAME$TEMP >> $NAME$TEMP2 echo '</'$NAME'>' >> $NAME$TEMP2 --- 45,49 ---- echo ' xmlns:import="http://www.sci.kun.nl/woc/import"' >> $NAME$TEMP2 echo ' xmlns:xlink="http://www.sci.kun.nl/woc/topicmap">' >> $NAME$TEMP2 ! awk "/<ITEM/,/<\/ITEM/{print}" $NAME$TEMP >> $NAME$TEMP2 echo '</'$NAME'>' >> $NAME$TEMP2 *************** *** 50,53 **** rm $NAME$TEMP $NAME$TEMP2 ! chgrp wwwwoc $NAME$EXT chmod 664 $NAME$EXT --- 51,54 ---- rm $NAME$TEMP $NAME$TEMP2 ! # chgrp wwwwoc $NAME$EXT chmod 664 $NAME$EXT |
From: Geert J. <gj...@us...> - 2002-08-06 12:10:00
|
Update of /cvsroot/woc/woc/bin/index In directory usw-pr-cvs1:/tmp/cvs-serv12214 Modified Files: update.sh.in Log Message: Cygwin compatibility: added ./ before script call and commented out call to chgrp Index: update.sh.in =================================================================== RCS file: /cvsroot/woc/woc/bin/index/update.sh.in,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** update.sh.in 20 Jul 2002 14:25:32 -0000 1.1 --- update.sh.in 6 Aug 2002 12:09:56 -0000 1.2 *************** *** 35,39 **** then shift ! update.sh $all else for index in $* --- 35,39 ---- then shift ! ./update.sh $all else for index in $* *************** *** 42,46 **** xsltproc $datadir/$index.xsl $datadir/$name.xml > $htmldir/$index.html chmod 664 $htmldir/$index.html ! chgrp wwwwoc $htmldir/$index.html done --- 42,46 ---- xsltproc $datadir/$index.xsl $datadir/$name.xml > $htmldir/$index.html chmod 664 $htmldir/$index.html ! # chgrp wwwwoc $htmldir/$index.html done |
From: Egon W. <eg...@us...> - 2002-08-06 09:52:04
|
Update of /cvsroot/woc/woc/bin/index In directory usw-pr-cvs1:/tmp/cvs-serv1691 Modified Files: woclist.sh.in Log Message: Attempt to solve problem with number of cat arguments on CygWin. Index: woclist.sh.in =================================================================== RCS file: /cvsroot/woc/woc/bin/index/woclist.sh.in,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** woclist.sh.in 20 Jul 2002 14:25:32 -0000 1.2 --- woclist.sh.in 6 Aug 2002 09:52:00 -0000 1.3 *************** *** 11,15 **** # cmldir is in perl-stukje gedefinieerd ! cat `find $WMLDIR -name "*.xml" | grep -v templates` > $NAME$TEMP echo '<?xml version="1.0" encoding="ISO-8859-1"?>' > $NAME$TEMP2 --- 11,41 ---- # cmldir is in perl-stukje gedefinieerd ! echo "" > $NAME$TEMP ! cat `find $WMLDIR/a -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/b -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/c -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/d -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/e -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/f -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/g -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/h -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/i -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/j -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/k -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/l -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/m -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/n -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/o -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/p -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/q -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/r -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/s -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/t -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/u -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/v -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/w -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/x -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/y -name "*.xml" | grep -v templates` >> $NAME$TEMP ! cat `find $WMLDIR/z -name "*.xml" | grep -v templates` >> $NAME$TEMP echo '<?xml version="1.0" encoding="ISO-8859-1"?>' > $NAME$TEMP2 |
From: Egon W. <eg...@us...> - 2002-08-02 15:42:47
|
Update of /cvsroot/woc/woc/cgi-bin/massa In directory usw-pr-cvs1:/tmp/cvs-serv12361/massa Added Files: link.pl Log Message: Some more scripts. --- NEW FILE: link.pl --- #!/usr/local/gnu/bin/perl -- -*-perl-*- # ------------------------------------------------------------ # ------------------------------------------------------------ # Print out what we need print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print " <title>Massaspectrum</title>\n"; print "</HEAD>\n"; print "<BODY bgcolor=white>\n"; print "<CENTER><h1>Massapectrum</h1></center>\n"; print "<hr>"; print "<p>Er is gezocht op CAS NR <i>"; print @ARGV; print "</i> in:"; print "<h1><a href='http://webbook.nist.gov/'>NIST Chemitry Webbook</a></h1>\n"; print "<ul>\n"; print " <APPLET CODEBASE='http://webbook.nist.gov/classes/' CODE='JCAMP.class' WIDTH=100% HEIGHT=90%>\n"; print " <PARAM NAME='SRC' VALUE='http://webbook.nist.gov/cgi/cbook.exe?JCAMP=C"; print @ARGV; print "&Type=IR'>\n"; print " <P><BLOCKQUOTE>\n"; print " <STRONG>Notice:</STRONG> This spectrum may be better viewed with a Java capable browser.\n"; print " </BLOCKQUOTE></P>\n"; print " <IMG SRC='http://webbook.nist.gov//cgi/cbook.exe?Spec=C"; print @ARGV; print "&Type=IR' ALT='IR spectrum'>\n"; print " </TABLE>\n"; print " </APPLET\n>"; print "</ul>\n"; print "<hr>\n"; |
From: Egon W. <eg...@us...> - 2002-08-02 15:42:47
|
Update of /cvsroot/woc/woc/cgi-bin/ir In directory usw-pr-cvs1:/tmp/cvs-serv12361/ir Added Files: link.pl Log Message: Some more scripts. --- NEW FILE: link.pl --- #!/usr/local/gnu/bin/perl -- -*-perl-*- # ------------------------------------------------------------ # ------------------------------------------------------------ # Print out what we need print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print " <title>Infrarood Spectrum</title>\n"; print "</HEAD>\n"; print "<BODY bgcolor=white>\n"; print "<CENTER><h1>Infrarood Spectrum</h1></center>\n"; print "<hr>"; print "<p>Er is gezocht op CAS NR <i>"; print @ARGV; print "</i> in:"; print "<h1><a href='http://webbook.nist.gov/'>NIST Chemitry Webbook</a></h1>\n"; print "<ul>\n"; print " <APPLET CODEBASE='http://webbook.nist.gov/classes/' CODE='JCAMP.class' WIDTH=100% HEIGHT=90%>\n"; print " <PARAM NAME='SRC' VALUE='http://webbook.nist.gov/cgi/cbook.exe?JCAMP=C"; print @ARGV; print "&Type=IR'>\n"; print " <P><BLOCKQUOTE>\n"; print " <STRONG>Notice:</STRONG> This spectrum may be better viewed with a Java capable browser.\n"; print " </BLOCKQUOTE></P>\n"; print " <IMG SRC='http://webbook.nist.gov//cgi/cbook.exe?Spec=C"; print @ARGV; print "&Type=IR' ALT='IR spectrum'>\n"; print " </TABLE>\n"; print " </APPLET\n>"; print "</ul>\n"; print "<hr>\n"; print "</BODY>\n</HTML>\n"; |
From: Egon W. <eg...@us...> - 2002-08-02 15:41:48
|
Update of /cvsroot/woc/woc/cgi-bin/massa In directory usw-pr-cvs1:/tmp/cvs-serv12048/massa Log Message: Directory /cvsroot/woc/woc/cgi-bin/massa added to the repository |
From: Egon W. <eg...@us...> - 2002-08-02 15:40:27
|
Update of /cvsroot/woc/woc/cgi-bin/ir In directory usw-pr-cvs1:/tmp/cvs-serv11542/ir Log Message: Directory /cvsroot/woc/woc/cgi-bin/ir added to the repository |
Update of /cvsroot/woc/woc/cgi-bin/htplpdir/editor In directory usw-pr-cvs1:/tmp/cvs-serv10119/htplpdir/editor Added Files: Editor Grammar.pm Help.pm INSTALL README conv conv_syntax dataConv.pm dataEdit.pm dataFunc.pm dataIO.pm Log Message: Added HTPLP dir (and a bit more). --- NEW FILE: Editor --- #!/usr/local/bin/perl -w #package editor; # Polymorphic-data editing utility by G.P.H. Josten June, 1998 # # This Perl package file contains general functions for showing, searching and # editing data which is held in the @database list-variable. This variable, held # in the main module, contains 'records' which are represented as single lines # by separating the values by some string defined in $separator. The order of # the data is defined in the hash-variable %order. This also names the fields of # the records. Representation on screen is further defined in two hash-variables. # The first called %distribution defines on what line each field of a record # should be shown by giving per line all indexes in the right order. The second # hash-variable called %keynames defines with what string each of those lines # is preceded. This grammar is defined in a separate text-file and is read by the # read_grammar sub-function in this module. # # Example: # # We have data that looks like: # # e-mail#last name#city#first name # # The separator will be the guard ('#'). Then order will be: # # %order = # ("email", 0, # "lastname", 1, # "city", 2, # "firstname", 3) # # Using this hash and identifiers like "city", you can find the index for city # on a line of your data (@database). Likewise you define %distribution and # %keynames: # # %distribution = # (0, "3, 1", # 1, "0", # 2, "2") # # %keynames = # (0, "name: ", # 1, "mail: ", # 2, "city: ") # # This shows that each record will be shown on screen in three lines. The first # showing the name of a person, the second his or her e-mail address and the # third and last the city where he or she comes from. As can be seen from the # distribution hash-variable, the first line (indexed with 0) shows field three # first, followed by field one. So first the first name, then the last name. # # Note: # this is not the way you should put it in a grammar file. To make it easy for # you, you don't have to index the lines explicitely. This is automatically # derived from the precedence in the file. For the given example the file would # look like: # # dataseparator: # # # fieldseparator: # , # order: 4 # email # lastname # city # firstname # distribution: 3 # 3, 1 # 0 # 2 # keynames: 3 # name: # mail: # city: # # The string on the line below dataseparator is the separator for the fields # of one line of the database hash-variable. fieldseparator is used when # multiple fields are to be shown on one line on the screen, like first and # last name in the exaple. # # Final note: # this grammar file is quite spaces sensitive, so placing a space before or # behind a keyname will output one!! Moreover, spaces on the line below # dataseparator will require them exactly as separator of your fields in # the database... # #use strict; use dataConv; use dataEdit; use dataFunc; use dataIO; use Grammar; use Help; # # The single argument denotes what is to be processed. It is a string # with which the filenames are determined (just addition of .dat .grm # .hlp and .new). # my ($mode, $current); if (@ARGV) { $mode = $ARGV[0]; } else { $mode = "smoel"; } my ($datafile) = $mode."data/$mode.dat"; my ($grammarfile) = $mode."data/$mode.grm"; $script = $0; $script =~ s#.*\/##i; my ($defhelpfile) = "$script.hlp"; my ($helpfile) = $mode."data/$mode.hlp"; my ($newdatafile) = $mode."data/$mode.new"; #$dataseparator = "#"; #$fieldseparator = ", "; #$sep = "#";#old version #$expsep = ", ";#old version ## main ## print "$0 - \u$mode","Source Editor v2.0, Geert Josten, June 1998$/$/"; print "Reading data-grammar$/"; (*grammar) = &read_grammar ($grammarfile); print "Reading database$/"; (*database, *commented_data) = &read_data ($datafile, "verbose"); print "Reading default help texts$/"; (*help) = &read_help ($defhelpfile, \@grammar, $datafile, $newdatafile); if (-r $helpfile) { print "Reading additional help texts$/"; (*addhelp) = &read_help ($helpfile, \@grammar, $datafile, $newdatafile); %help = (%help, %addhelp); } print $/; #@oldstuds = @studenten; $current = 1; &show ([$current], \@database, \@grammar); print "\thelp\tgeeft beschrijving commando's$/$/"; &editor; print "Tot ziens!$/$/"; sub testje { return @_; } sub editor { local ($quit) = ""; #false local ($commando, @args); do { do { print "[$current] commando? "; chomp ($commando = <STDIN>); } until ($commando); @args = split (/ /, $commando); $commando = $args[0]; shift (@args); if ($commando =~ /^d/i) { # del @args = ($current) if (! @args); (*database) = &del (\@args, \@database, \@grammar, "verbose"); $current = 1; } elsif ($commando =~ /^e/i) { # edit @args = ($current) if (! @args); if ($args[0] =~ /\b\d+\b/) { &edit ($args[0], \@database, \@grammar, \%help); $current = $args[0]; } } elsif ($commando =~ /^fil/i) { # filter if (@args == 0) { &help (\%help, \@grammar, "search", "help"); } elsif ((@args % 2) == 0) { (*database) = &filter (\@args, \@database, \@grammar, "verbose"); $current = 1; } else { print "filter heeft een even aantal parameters nodig!$/"; } } elsif ($commando =~ /^f/i) { # find if (@args == 0) { &help (\%help, \@grammar, "search", "help"); } elsif ((@args % 2) == 0) { (*args) = &find (\@args, \@database, \@grammar, "verbose"); if (@args) { &show (\@args, \@database, \@grammar); print "gevonden: ", join (",", @args), $/; $current = $args[$#args]; } } else { print "find heeft een even aantal parameters nodig!$/"; } } elsif ($commando =~ /^h/i) { # help &help (\%help, \@grammar, "commando", "help"); } elsif ($commando =~ /^n/i) { # new $last = @database; (*database) = &new_record (\@database, \@grammar, \%help); $current = @database if ($last < @database); } elsif ($commando =~ /^r/i) { # read @args = ($datafile) if (! @args); (*database) = &read_data ($args[0], "verbose"); $current = 1; } elsif ($commando =~ /^sa/i) { # save @args = ($newdatafile) if (! @args); &save_data ($args[0], \@database, \@commented_data, "verbose"); } elsif ($commando =~ /^so/i) { # sort (*database) = &sort_data (\@database, "verbose"); $current = 1; } elsif ($commando =~ /^s/i) { # show @args = ($current) if (! @args); &show (\@args, \@database, \@grammar); $current = $args[0] if ($args[0] =~ /\b\d+\b/); } elsif ($commando =~ /^us/i) { # usage &help (\%help, \@grammar, "commando", "usage"); } elsif ($commando =~ /^u/i) { # unfilter # &unfilter (@args); print "niet beschikbaar$/"; } elsif ($commando =~ /^q/i) { # quit $quit = "true"; } elsif ($commando =~ /^\?/i) { # ? &help (\%help, \@grammar, "commando", "afkort"); } else { print "onbekend commando!$/"; } } until ($quit); } --- NEW FILE: Grammar.pm --- package Grammar; # Polymorphic-data-grammar reading by G.P.H. Josten June, 1998 # # This package contains the function to extract the data-grammar from a file. # use strict; require Exporter; @Grammar::ISA = qw(Exporter); @Grammar::EXPORT = qw(read_grammar); sub read_grammar ($) { # # read in the grammar of the data from a grammar file # # PRE: $source contains name of grammar file # POST: %order, %distribution and %keynames contain the information # necessary to retrieve fields from the data and show them on screen my ($source) = @_; my (%order, %distribution, %keynames, $regel, @regel, @lijst, $i); my ($dataseparator) = "#"; my ($fieldseparator) = ", "; open (SOURCE, $source) || die $!; # # first read the order into %order: # defined ($regel = <SOURCE>) || die $!; @regel = split (" ", $regel); $i=0; @lijst = (); while ($i < $regel[1] && defined ($regel = <SOURCE>)) { chomp($regel); push (@lijst, $regel, $i); $i++; } %order = @lijst; # # second the distribution along multiple lines: # defined ($regel = <SOURCE>) || die $!; @regel = split (" ", $regel); $i=0; @lijst = (); while ($i < $regel[1] && defined ($regel = <SOURCE>)) { chomp($regel); push (@lijst, $i, $regel); $i++; } %distribution = @lijst; # # last the names to show in front of each line: # defined ($regel = <SOURCE>) || die $!; @regel = split (" ", $regel); $i=0; @lijst = (); while ($i < $regel[1] && defined ($regel = <SOURCE>)) { chomp($regel); push (@lijst, $i, $regel); $i++; } push (@lijst, "comment", "/"); %keynames = @lijst; close (SOURCE) || die $!; # return the references only!! return [\%order, \%distribution, \%keynames, $dataseparator, $fieldseparator]; } --- NEW FILE: Help.pm --- package Help; # Help-interface command and edit help by G.P.H. Josten June, 1998 # # This package contains functions to open the help-files, get the help texts and # print the appropriate help on request. # use strict; require Exporter; @Help::ISA = qw(Exporter); @Help::EXPORT = qw(help read_help); sub help ($$$$) { # # show the requested help # # PRE: $refhelp is a reference to a double hash table which is # indexed with $function and $sublevel; $grammar is used to # extract the help text from the single line format my ($refhelp, $grammar, $function, $sublevel) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (@help); @help = split (/$datasep/, $$refhelp{$function}{$sublevel}); while (@help) { print shift (@help), "\t", shift (@help), $/; } print $/; } sub read_help ($$$$) { # # read in the help from a file # # PRE: $helpfile contains the name of the file to read, $grammar # some information for parsing the file and $datafile and # $newdatafile are used to substitute pseudo-variables with # actual values # POST: result is a reference to a double hash table with the help # texts compressed to single line format using $datasep from # $grammar my ($helpfile, $grammar, $datafile, $newdatafile) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my ($function, $sublevel, $regel, @help, %help); open (SOURCE, $helpfile) || die $!; # skip comment while (defined ($regel = <SOURCE>) && ($regel =~ /^$$refkeys{"comment"}/)) { } if (defined ($regel)) { do { chomp ($regel); ($function, $sublevel) = split (/\s/, $regel); while (defined ($regel = <SOURCE>) && ($regel !~ /^EOH/)) { chomp ($regel); $regel =~ s/\$datafile/$datafile/ig; $regel =~ s/\$newdatafile/$newdatafile/ig; push (@help, $regel); } $regel = join ($datasep, @help); $help{$function}{$sublevel} = $regel; @help = (); } while (defined ($regel = <SOURCE>)); } close (SOURCE) || die $!; return (\%help); } --- NEW FILE: INSTALL --- Editor Editor is a script to read, manipulate, search and save data. It is meant to be self-explanatory, so for the usage I refer to the program. Requirement on the data is, that it contains on each line one 'record' of which all have have an equal number of fields. The length may range from zero to some physical limit. Each field on such a line is separated from the others by some unique string (at the moment simply a guard '#'!). The order of the fields should be the same on all lines and this should be described in a separate file called the grammar file. If not all these, the program may get confused from time to time. System Requirements -Perl 5 should do, I guess. I used the script with versions 5.003 and 5.004. Perl 4 doesn't support certain constructs, but converting all my's to local's might make the script work under Perl 4 as well. -Although I mostly worked on a Unix environment (SunOS 4 and 5.3), it should work similarly on DOS, although you will probably have to do without long filenames. -Memory usage and file space aren't very relevant, although editing many megabytes of data might get you into trouble. There are no mem-checks for this script is probably far from efficient enough to edit that large quantaties. Installation The installation is fairly simple, but manual: -Copy the following files to some nice directory: Editor The main script Editor.hlp Standard help texts INSTALL This file README Text file with additional information about Editor Grammar.pm Module for reading and using the grammar of the data Help.pm Module for initialising and using the help functions dataConv.pm Module for conversion from record to basic representation dataFunc.pm Module for searching and filtering records dataEdit.pm Module for editing records dataIO.pm Module for reading, saving and printing data exampledata/ dir with example data exampledata/example.dat example data file exampledata/example.grm grammar file of example data exampledata/example.hlp additional help file for example data -All you need now is some data and its grammar. Some additional help could be useful too. Editor takes one argument and it uses it to identify what datafile you want to read, search and edit and where it can find it. This first argument is just a keyword. Editor takes this keyword and appends data. This identifies the subdirectory where the data file and the grammar file should be located. Editor then takes the keyword and appends .dat .grm and .hlp for respectively the data, the grammar and the additional help file. Look at the example data for how these three files are constructed... -A last hint: it is most convenient to put the Editor script and its modules somewhere in a bin (subdir editor orso) and make symbolic links to the datadirectories you want to be able to edit. You could even put handy scripts right next to the data, which changes the directory to the one that contains the Editor script and then executes Editor with the right keyword. Note: don't call that script edit, for that is probably an already existing command. Geert August, 1998 --- NEW FILE: README --- August 5th, 1998 Why Htplp and Editor Htplp and Editor are two Perl-scripts which were written to resolve problems concerning the representation of large quantities of data on WWW as HTML. Htplp is the Parser which generates the pages, Editor is the utility to edit the data. Where it all started The parent problem was a small already existing site of the student association V.V.C.N. Sigma (http://www.sci.kun.nl/sigma/) which contained almost all pictures of the Chemistry students at the University of Nijmegen (most of them member of Sigma). Each year new students arrived and the pages had to be updated (each year of students meant three pages of each a number of kilobytes). I took that job on me (don't ask me why, I can't remember) and did this for one new year of students. My conclusion was that it was an unflexible, easily out-of-date and time consuming way. Everything had to be done manually. Especially when I (yes, one of those great ideas to do some self-torture) came to the idea to improve the layout by using multi-column layout for the pictures, I got tired of it. With some cut and paste it could be done, but it was boring and specially suited for computers to do it for you. The first monster The problems weren't very important, as the pages didn't needed to be very up-to-date. Nevertheless, it is a good visit card to do have a site with accurate and usable information. Besides, it was an interesting challenge which could make things easy in future. With my fresh knowledge of Java ("C1", the introductory course to programming - in Java :-( - was one of the obligatory courses), I set off to build a database and an engine that could read the data and generate the pages for me. An immense monster resulted. It worked, but it was ill-programmed and unreadable, only I worked with it - with reason I presume :-P -, and most of all, it was unflexible and still unmaintainable. But, a database was generated, one of the biggest benefits, and the page generation was automated. The engines most worth, it proved to me with it's first use outside it's original purpose, a use for like-wise layout, not for WWW but for a booklet with information about Sigma. I used this monster more than a year I believe, it has shown it's purpose, but now fortunately it's obsolete. The data The data which was held by a number of files, had to be created and maintained. This was a second problem, because using a text-editor isn't the best way, for mistakes are very easily made. Leaving some special symbol out meant that half the data of one year wasn't read, but skipped. Searching these files and extracting the useful information was another problem. Busy with the data - I was probably adding a new year or updating some names - I came to the idea of writing an editor. Actually, the idea originated because I wanted to facilitate the extraction of information. I was busy typing all fields that represented a single student. Life happened to let me stumble over Perl, I was interested and asked a 'colleague' student - he studied Informatics, I Chemistry at that time, Informatical Chemistry presently - for some advise about books about Perl. I bought to his advice two and with "Learning Perl" in one hand and the data files in the other, I tried to get a better and moreover faster extraction going. But using Unix shell-script (find, grep, sort, etc.) and Unix shell commands within Perl scripts didn't work and typing all information didn't facilitate it very much either this way. Well, why not read it in with Perl, put it in some variables, let Perl do some sorting and voila, my first real useful Perl-script was born. But with that it didn't stop. Hacking around in Perl, I wrote not only a search utility, but also some conversion utilities and another page generating script. But again, they were ill-programmed, hardly better readable, still only I (could) work(ed) with them and they still didn't show very much flexibility. The data improved though, for I typed all data, got some real regularity in it and got fresh ideas about how to better deal with it. The new approach I realised that the power of Perl could be far better utilised for this matter than I did. I hardly did, so that isn't much of a surprise. One benefit of Perl is, that normally it doesn't make a difference between words and numbers. I mean that in Perl for example not only numbers could be used to index in an array of items, but words as well. The Perl hash-variable the best example of this power of Perl in which one value is used to extract another, one to one. Not vice versa by the way. My fantasy got almost wild with the only enlarging space in which I could invent options and ideas and problems and solutions. Meanwhile, I had been busy with some funny command interpreting script which could represent the fields of data of one student in some basic way, could edit them as well and after some trouble, could even search the big lot. Discovering more and more about Perl, I started extracting more and more of the determining values and putting them into handy variables I could initialize at start and manipulated mid-way if necessary. This process resulted in a separate file which contained the full typing of the data and even the representation in the basic way. This information is read in and put in a few variables. In the rest of the script only these variables are used and not their actual value. Comparing with the actual values of these typing variables is only done with user input!! This process plus the ability of recognizing shortened versions of the actual values made the Editor very powerful. The Editor evolved I continued this work and started working on a profound way. I grouped certain functions and made them complete and robust. Most of them had to be converted to my new ideas and this allowed me to reconsider the solutions and improve them to their present state. This makes the Editor a full grown script, with fairly balanced functions and a quite user-friendly user-interface. I already had build an almost complete version of the Editor which I had subjected to some beta-testing (another colleague student :-). The new version could be tested back to back with this one and most testing did I do between all the other programming activities (hint: try to always test an earlier programmed part before you need to use it!). And still my knowledge about Perl is increasing, but the usefulness has converged about now - after building Htplp and Editor -. The data structuring The data had changed a lot in the meantime. First more regularity, second the typing and third cenversion. Conversion from the multi-line format (quite similar to the basic representation) to a single line one. The first two steps had been time consuming and text editor usage intensive, but are worth it now. The integrity of the data has very much increased as well as the managebility, editibility and usability. It also allowed me to experiment a little with how to structure the data. This has resulted in the separate file with the typing and the single-line format, with all fields of data of one student on a single line. This was done deliberately with several thoughts, no particular order, in my mind. Difficult to handle are fields of data of undefined number of lines. As linefeeds and carriage returns are of no use in HTML (it's just treated as whitespace) it was the first I got rid of. I stuffed everything on a single line and separated it by some specific string. At the moment I have chosen for a single character, the guard '#'. In near future the choice will be put in the typing file as well. I call these typing information together the grammar of the data, just to give it a name. Putting everything on a single line, makes the data easily manageble by using a simple array. This can even be sorted without any special work (one single command). Using the Perl functions split and join, the fields can be separated and glued together (single lines again). With the grammar of the data you can find out where a certain field remains and this can be use to extract, compare, manipulate and store the value if wanted. It may sound a bit difficult but it is just short and highly generic all at the same time, flexible at last and powerful indeed. It's real power became clear to me when I tried the Editor on a different data-file. It took two minutes to define a grammar and invent four lines of data. I ran the Editor and it just worked! It really worked!! Not a single change to the Editor was necessary, only the grammar and the data. I had underestimated my own abilities and the power of Perl. What followed With building this Editor which needs only some final commenting, addition of one or two extra functions and documentation on usage and maintenance, I created a profound basis of functions I saw I could use for the parent problem where I started my story. I had deliberately put all the Editor functions grouped in separate files, which could be used as nicely shielded modules. You only need to call the Perl function use and the functions are all yours. I had data, I had grammar and I had a whole bunch of functions, all tested and commented too. I took the page generating script in Perl in front of me and almost paniced in horror. It was awfull, HTML and Perl stood right next to each other, it was one big mess and in this script I had used old copies of the functions I had nicely defined in modules now. To get this readable, I had to get rid of the HTML between the Perl in some or the other way. By this time, I happened to look in some existing Perl script which gives some statistics, but more important, it read a plain text file in and substituted variables it contained (just a dollar sign '$' followed by an identifier). Interesting!! I though and once more I set off. But hey, I might could do better, I might be able to write some script which not only reads in those plain text files and substitutes some variables, but do this for any file, identified by some argument or so. Not a bad idea, I thought, so I hacked a bit in Perl, read in a file and substituted variables and produced the result. Hmm, well, I had to do a lot more if I wanted ever to produce the picture pages of Sigma. It is a tree-like structure with a lot of hyperlink refering to each other. Besides I had to process a lot of information if necessary. But, no worry, I thought, let the parser recognize filenames as variables as well (just dollar sign '$' plus filename) and process these too, Perl scripts as well. So I did, but being busy and stumbling over several difficulties one becomes wiser and wiser. The Htpl parser After lots and lots of trial-and-error activities (regular expressions are very, very, very flexible in Perl :-P), this resulted in Htplp. The name is derived from HTml and PerL Parser, which is not completely accurate, but it will do. This script, or parser if you like to call it that way, starts with reading one argument. This argument determines what site it should parse and generate. From this argument some basic files are derived, a.o. the grammar file, the data file, the main Perl script needed too beside the parsing script and the main text file. The grammar and data are read, some default variables are set and next the main Perl script is executed. Actually, it is the only Perl script that is necessary for that particular site. This script is supposed to do something useful to every remaining argument the parser script received at start. With these arguments the script is given the opportunity to initialize, process and destroy variables which, and this is the trick, are automatically acessible from within the parsing script (they are just global variables, so it's no fancy trick at all and note that the parser script's variables are global too!!). Then the main text file is read in and the real parsing commences. This parsing is no real big deal, although it cost me a lot of fine tuning to get it working. How the parsing works This parsing means only that the parser tries to find a few posibilities and process accordingly. First, the parser could find the word "if" somewhere. If this "if" is followed by a variable ($varname), then it will try to determine wether this variable exists or not, if so, the following part remains, otherwise it is deleted. If it is followed in the same line by the word "fi", then everything in between might survive or not. No "fi", then if the variable isn't set by that site-specific script, than the full line is deleted. The if .. fi construction may be put halfway a line, if .... construction must commence at the beginning of a line. In both if constructions the variable may be directly preceded by an exclamation mark '!', which negates the required existence of the following variable. Other constructs are as mentioned previously, filenames ($filename), with the only restriction that the filename must end with dot plus "htpl" ("$filenaam.htpl"). This is merely a handy choice which I'm not about to change. Final possibilities are just variable substitutions, scalar variables ($varname) and array variables (@varname) as well. Scalar variables are just substituted by their content. Array variables are a bit trickier. I programmed the parser in such a way that it pops the first value (The Perl function shift), which is lost that way. I found it necessary to build in a last option, to not pop that first value, but look at it and possibly use it once again. For this, put a exclamation mark '!' directly behind the @ in @varname (e.g. @!varname). This ought to do the trick :-). After each substitution in a line, the parser tries again, untill it fully fails, then it produces that line. Going over each line exhaustively allows to parse highly nested structures as well (variable names in variable names in variable names in a filename in an array variable in an variable name in an if evaluation in...). This may sound like a lot of work, but Perl manages to do this for a small but difficult page, within 10 seconds (at our server at least, which is not the slowest around). Especially the variable substitutions, which are often the far most done, influence this time greatly. Try to keep the actions as minimal as possible, by presubstituting all those values if possible. This doesn't have to be done exhaustively, the script is fast enough (Perl is compiled before execution!!). If it takes too long, your page might be just too long or perhaps, the server is slow in executing scripts... Finally I hope that this Editor and Htpl Parser may find a lot of future applications and not only done by me. I build these to give them through to future members of the Internetcommittee of V.V.C.N. Sigma. For as long as I will still be around I will try to do some final modifications in order to make those future applications even more possible. Let me note, that the Editor script or some text file nearby that script will contain a more extensive explenation of the use of the grammar. The Editor itself contains a help function which should explain the Editor functions at least a little. The error messages should do the rest, I hope. Htplp should be installed by somebody with at least some Perl experience and he or she could take care of the main site scripts if they are needed. Any layouting can be done by somebody else, like some HTML wizard or so. Minimal knowledge of how to call the script with the right arguments and what variables are available in which situation is necessary though. A documenting file would be very helpfull I suppose. And now the really, really final note: I called the Parser HTml and PerL Parser, but, actually, the HTML part doesn't have to be HTML at all, anything based on plain text could do. LaTeX for example too. May you all have a pleasent exercise of mind with scripts, may they enlighten your life, may they relieve you of a lot of trouble and sorrow and sweat and pain. If they don't, I suggest: R.T.F.M.!!!!!!!! Signed, WoodWorm alias G.P.H. Josten student Informatical Chemistry at the University of Nijmegen member of student association Sigma at Nijmegen member of the internetcommittee of Sigma --- NEW FILE: conv --- #!/usr/local/bin/perl -w use strict; my ($SmoelenSource, $SortedSmoelen, $AccessSmoelen); $SmoelenSource = ($ARGV[0] || "SmoelenSource.Sm"); $SortedSmoelen = ($ARGV[2] || "SmoelenSource.sorted"); $AccessSmoelen = ($ARGV[1] || "SmoelenSource"); print "controleer $SmoelenSource:\n"; &controleer ($SmoelenSource); print "converteer $SmoelenSource naar $AccessSmoelen\n"; &Sm2Acc ($SmoelenSource, $AccessSmoelen); #print "controleer $SmoelenSource:\n"; #&controleer ($SmoelenSource); #print "sorteer $SmoelenSource tot $SortedSmoelen\n"; #&sorteer ($SmoelenSource, $SortedSmoelen); #print "controleer $SmoelenSource:\n"; #&controleer ($SmoelenSource); #print "controleer $SortedSmoelen:\n"; #&controleer ($SortedSmoelen); sub sorteer { my ($source, $target) = @_; my ($temp, $temp2); $temp = "/tmp/SPE.gjosten.presort.tmp"; $temp2 = "/tmp/SPE.gjosten.postsort.tmp"; &Sm2Acc ($source, $temp); !system ("sort $temp > $temp2") || die ("SPE kan sort niet aanroepen: $!"); &Acc2Sm ($temp2, $target); } sub Sm2Acc { my ($source, $target) = @_; my ($tabelregel, @tabelregels, $status, $voornaam, $achternaam, $spreuk, $anker, $plaatje, $i); my ($jaar, $stdnr, $email); open (SOURCE, $source) || die ("SPE kan $source niet openen: $!"); while (defined ($status = <SOURCE>)) { chomp ($status); while ($status =~ /^\/.*/) { #commentaar overslaan defined ($status = <SOURCE>) || die ("Onverwacht einde van $source: $!"); } defined ($voornaam = <SOURCE>) || die ("Onverwacht einde van $source: $!"); defined ($achternaam = <SOURCE>) || die ("Onverwacht einde van $source: $!"); defined ($spreuk = <SOURCE>) || die ("Onverwacht einde van $source: $!"); defined ($anker = <SOURCE>) || die ("Onverwacht einde van $source: $!"); defined ($plaatje = <SOURCE>) || die ("Onverwacht einde van $source: $!"); chomp ($status); $jaar = substr ($status, 1, 2); $stdnr = substr ($status, 4, 7); $status = substr ($status, 12); chomp ($voornaam); $voornaam = substr ($voornaam, 1); chomp ($achternaam); chomp ($spreuk); $spreuk = substr ($spreuk, 1); chomp ($anker); $anker = substr ($anker, 1); (($anker =~ /^@/i) && ($email = substr ($anker, 1))) || ($email = ""); chomp ($plaatje); ($plaatje =~ /stimpy\.gif/i) && ($plaatje = "stimpy.gif"); $tabelregels[@tabelregels] = join ("#", $jaar, $achternaam, $voornaam, $stdnr, $status, $spreuk, $anker, $email, $plaatje); } close (SOURCE) || die ("SPE kan $source niet sluiten: $!"); open (TARGET, ">$target") || die ("SPE kan $target niet openen: $!"); select (TARGET); for ($i = 0; $i < @tabelregels; $i++) { print ($tabelregels[$i]."\n") || die ("SPE kan gegevens niet naar $target schrijven: $!"); } select (STDOUT); close (TARGET) || die ("SPE kan $target niet sluiten: $!"); } sub Acc2Sm { my ($source, $target) = @_; my ($tabelregel, @tabelregels, $gegeven, $status, $voornaam, $achternaam, $spreuk, $anker, $plaatje, $i); open (SOURCE, $source) || die ("SPE kan $source niet openen: $!"); while (defined ($tabelregel = <SOURCE>)) { chomp ($tabelregel); $tabelregels[@tabelregels] = $tabelregel; } close (SOURCE) || die ("SPE kan $source niet sluiten: $!"); open (TARGET, ">$target") || die ("SPE kan $target niet openen: $!"); select (TARGET); print ("///// $target /////\n") || die ("SPE kan gegevens niet naar $target schrijven: $!"); for ($i = 0; $i < @tabelregels; $i++) { ($achternaam, $voornaam, $status, $spreuk, $anker, $plaatje) = split ("\\\\\\\\", $tabelregels[$i]); foreach $gegeven ("/// ".($i+1)." ///", $status, $voornaam, $achternaam, $spreuk, $anker, $plaatje) { (print $gegeven."\n") || die ("SPE kan gegevens niet naar $target schrijven: $!"); } } select (STDOUT); close (TARGET) || die ("SPE kan $target niet sluiten: $!"); } sub controleer { my ($source) = @_; my ($status, $voornaam, $achternaam, $spreuk, $anker, $plaatje, $regelnr, $prev, $next); open (SOURCE, $source) || die ("SPE kan $source niet openen: $!"); $regelnr = 0; while (defined ($status = <SOURCE>)) { $regelnr++; chomp ($status); while ($status =~ /^\/.*/) { #commentaar overslaan $prev = $status; $regelnr++; defined ($status = <SOURCE>) || die ("Onverwacht einde van $source regelnr $regelnr: $!"); chomp ($status); } if ($status =~ /^:..:.......:.*/) { #mooi! $regelnr++; defined ($voornaam = <SOURCE>) || die ("Onverwacht einde van $source $regelnr: $!"); chomp ($voornaam); }# else { #probeer resynchronisatie # if ($prev =~ /^:..:.......:.*/) { # print ("SPE $source: STAPJE TERUG"); # $status = $prev; # $voornaam = $status; # } else { # $regelnr++; # defined ($next = <SOURCE>) || die ("Onverwacht einde van $source $regelnr: $!"); # chomp ($next); # if ($next =~ /^:..:.......:.*/) { # print ("SPE $source: STAPJE NAAR VOREN"); # $status = $next; # $regelnr++; # defined ($voornaam = <SOURCE>) || die ("Onverwacht einde van $source $regelnr: $!"); # chomp ($voornaam); # } else { # print ("SPE $source: RESYNCHRONISATIE MISLUKT"); # print ("SPE $source: status syntaxfout op $regelnr\n"); # $voornaam = $next; # } # } # } $voornaam =~ /^~.*/ || print ("SPE $source: voornaam syntaxfout op $regelnr\n"); $regelnr++; defined ($achternaam = <SOURCE>) || die ("Onverwacht einde van $source $regelnr: $!"); $regelnr++; defined ($spreuk = <SOURCE>) || die ("Onverwacht einde van $source $regelnr: $!"); chomp ($spreuk); $spreuk =~ /^\#.*/ || print ("SPE $source: spreuk syntaxfout op $regelnr\n"); $regelnr++; defined ($anker = <SOURCE>) || die ("Onverwacht einde van $source $regelnr: $!"); chomp ($anker); $anker =~ /^\@.*/ || print ("SPE $source: anker syntaxfout op $regelnr\n"); $regelnr++; defined ($plaatje = <SOURCE>) || die ("Onverwacht einde van $source $regelnr: $!"); chomp ($plaatje); $plaatje =~ /^.*\.(gif|jpg).*/ || print ("SPE $source: status syntaxfout op $regelnr\n"); $prev = $plaatje; } close (SOURCE) || die ("SPE kan $source niet sluiten: $!"); } --- NEW FILE: conv_syntax --- #!/usr/local/bin/perl -w my ($source, $target) = ($ARGV[0], $ARGV[1]); my ($tabelregel, @tabelregels, $status, $voornaam, $achternaam, $spreuk, $anker, $plaatje, $i); $i = 0; open (SOURCE, $source) || die ("SPE kan $source niet openen: $!"); open (TARGET, ">$target") || die ("SPE kan $target niet openen: $!"); while (defined ($status = <SOURCE>)) { $i++; chomp ($status); while ($status =~ /^\/.*/) { #commentaar overslaan defined ($status = <SOURCE>) || die ("Onverwacht einde van $source: $!"); } defined ($voornaam = <SOURCE>) || die ("Onverwacht einde van $source: $!"); defined ($achternaam = <SOURCE>) || die ("Onverwacht einde van $source: $!"); defined ($spreuk = <SOURCE>) || die ("Onverwacht einde van $source: $!"); defined ($anker = <SOURCE>) || die ("Onverwacht einde van $source: $!"); defined ($plaatje = <SOURCE>) || die ("Onverwacht einde van $source: $!"); $status =~ s/^://; $status =~ s/:[^0-9]{7}:/,, /; $status =~ s/:/, /; $status =~ s/:/, /; chomp ($achternaam); $voornaam =~ s/^~//; $spreuk =~ s/^#//; $anker =~ s/^@//; print STDOUT "/// $i ///$/cd: ${status}nm: $achternaam, ${voornaam}sp: ${spreuk}an: ${anker}ft: $plaatje$/" || die ("SPE kan gegevens niet naar $target schrijven: $!"); } close (SOURCE) || die ("SPE kan $source niet sluiten: $!"); close (TARGET) || die ("SPE kan $target niet sluiten: $!"); --- NEW FILE: dataConv.pm --- package dataConv; # Polymorphic-data convert and show by G.P.H. Josten June, 1998 # # This package contains functions convert some database data from single line # format to multiple line format and show it this way on screen. # use strict; require Exporter; @dataConv::ISA = qw(Exporter); @dataConv::EXPORT = qw(compress expand show); sub by_number { # # function used by sort to sort numerical instead of alphanumerical # if ($a < $b) { return -1; } elsif ($b < $a) { return 1; } else { return 0; } } sub compress ($$) { # # compress data fields from over multi lines onto single lines # # PRE: $refdata, a reference to the data in multiline format to be # compressed, $reforder, $refdistr and $refkeys, references to # the hash variables that define how to translate from multi to # single line and $datasep and $fieldsep the strings that # separate the fields in the single resp. multi line format # POST: the data in single line format my ($refdata, $grammar) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (@result, $num_lines, $line, $i, @pos, @gegevens); $num_lines = scalar (keys (%$refdistr)); while (@$refdata) { do { $line = shift (@$refdata); } while ($line =~ /$$refkeys{"comment"}/i); for ($i = 0; $i < $num_lines; $i++) { $line =~ tr/^$$refkeys{$i}//; @pos = split(/$fieldsep/, $$refdistr{$i}); @gegevens[@pos] = split(/$fieldsep/, $line); } shift (@$refdata); # empty line push (@result, join ("$datasep", @gegevens)); } return \@result; } sub expand ($$$) { # # expand one single line of data to multiline format # # PRE: $refdata, a reference to the data in single line format from # which one record is to be expanded; $reforder, $refdistr and # $refkeys, references to the hash variables that define how to # translate from single to multi line format and $datasep and # $fieldsep the strings that separate the fields in the single # resp. multi line format # POST: one data record in multi line format my ($index, $refdata, $grammar) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (@data, @result, @lines, @fields) = ((), (), (), ()); my ($line); # show each of the list by expanding them one by one @data = split (/$datasep/, $$refdata[$index-1]); @lines = (0..(scalar (keys (%$refdistr)) - 1)); # add numbering of output push (@result, "/// ".$index." ///$/"); # add each line with the apropriate datafields foreach (@lines) { # which fields? @fields = split(/$fieldsep/, $$refdistr{$_}); # add line identifying string $line = $$refkeys{$_}; # add the fields $line .= join ("$fieldsep", @data[@fields]); push (@result, "$line$/"); } return @result; } sub show ($$$) { # # show a given number of record from the data # # PRE: $reflist, a reference to a list with all indices to the records # from the data to be shown; # $refdata, a reference to the data in single line format from # which one record is to be expanded; $reforder, $refdistr and # $refkeys, references to the hash variables that define how to # translate from single to multi line format and $datasep and # $fieldsep the strings that separate the fields in the single # resp. multi line format my ($reflist, $refdata, $grammar) = @_; my (@listtoshow) = @$reflist; # got a number? if (@listtoshow) { # show all? if ($listtoshow[0] =~ /^all/i) { @listtoshow = (1..@$refdata); } else { # else sort the received list @listtoshow = (sort by_number (@$reflist)); } # show each of the list by expanding them one by one foreach (@listtoshow) { print &expand ($_, $refdata, $grammar), $/; } } } --- NEW FILE: dataEdit.pm --- package dataEdit; # Polymorphic-data edit by G.P.H. Josten June, 1998 # # This package contains the function to access your data (@database) and # change any value you like. Includes help handling. # use strict; require Exporter; @dataEdit::ISA = qw(Exporter); @dataEdit::EXPORT = qw(edit); use dataConv; use Help; sub edit ($$$$) { # # show data and provide an interface to edit all fields # # PRE: # my ($nr, $refdata, $grammar, $refhelp) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (@gegevens) = split (/$datasep/, $$refdata[$nr-1]); my (@args, $gegeven, @known); my (@keynames) = sort (keys (%$reforder)); &show ([$nr], $refdata, $grammar); do { # get a user command print "[$nr] edit? "; chomp ($gegeven = <STDIN>); if ($gegeven) { # extract command from arguments ($gegeven, @args) = split (/\s/, $gegeven); if ($gegeven =~ /^h/i) { # help &help ($refhelp, $grammar, "edit", "help"); } elsif ($gegeven =~ /^\?/i) { # ? &help ($refhelp, $grammar, "edit", "afkort"); } elsif ($gegeven =~ /^q/i) { # quit $gegeven = ""; } else { # fieldname? # look how many fieldnames match the given description @known = grep {$_ =~ /^$gegeven/i} @keynames; if (@known > 1) { # more than one match print "meer mogelijkheden:$/@known$/"; } elsif (@known > 0) { # one match if (@args) { $gegevens[$$reforder{$known[0]}] = join (" ", @args); $$refdata[$nr-1] = join ("$datasep", @gegevens); } else { print $known[0],"? "; chomp ($gegevens[$$reforder{$known[0]}] = <STDIN>); $$refdata[$nr-1] = join ("$datasep", @gegevens); } &show ([$nr], $refdata, $grammar); } else { # no matches print "mogelijkheden:$/@keynames$/$/"; print "help\tgeeft beschrijving gegevens$/$/"; } } } } while ($gegeven); # quit or no command } --- NEW FILE: dataFunc.pm --- package dataFunc; # Polymorphic-data del, find, filter, get, new by G.P.H. Josten June, 1998 # # This package contains functions to delete, find records, filter them out or # build new ones. # use strict; require Exporter; @dataFunc::ISA = qw(Exporter); @dataFunc::EXPORT = qw(del filter find get new_record sort_data undo); use dataConv; sub by_number { # # function used by sort to sort numerical instead of alphanumerical # if ($a < $b) { return -1; } elsif ($b < $a) { return 1; } else { return 0; } } sub del ($$$$) { # # delete records from the database, given some indices # # PRE: $reflist is a reference to the list with indices to the # records that should be deleted, $refdata the reference to # the data list; if $verbose is set true, give some output # POST: reference to the updated data list my ($reflist, $refdata, $grammar, $verbose) = @_; my ($nr, $antwoord, $i, $j, @checked); foreach (sort by_number (@$reflist)) { &show ([$_], $refdata, $grammar); print "verwijderen? "; chomp ($antwoord = <STDIN>); if ($antwoord =~ /^(j|y)/i) { push (@checked, $_); } } my (@new) = (); $j = 1; foreach (@checked) { for ($i = $j; $i < $_; $i++) { push (@new, $$refdata[$i-1]); } $j = $_+1; } for ($i = $j; $i <= @$refdata; $i++) { push (@new, $$refdata[$i-1]); } print "verwijderd zijn: ", join (",", @checked), " overgebleven aantal: ", $#new+1, $/ if (@checked && $verbose); return (\@new); } sub filter ($$$$) { # # grep records out of the database given some criteria # # PRE: $reffilters is a reference to a number of pairs strings # of which the first identifies a unique field and the second # is used to match the value; $grammar is used to extract the # fields from the data, $verbose to show some output on screen # POST: reference to the remaining data my ($reffilters, $refdata, $grammar, $verbose) = @_; my ($reflist, $gedelete, $one, $other); my (@result) = (); ($reflist) = &find ($reffilters, $refdata, $grammar, $verbose); $one = 1; while (@$reflist) { if ($one < $$reflist[0]) { push (@result, $one); $one++; } else { shift @$reflist; $one++; } } while ($one <= @$refdata) { push (@result, $one); $one++; } @result = @$refdata[map {--$_} @result] if @result; $gedelete = @$refdata-@result; print "aantal weggefilterd: ", $gedelete, ", aantal overgebleven: ",$#result+1,$/ if (($gedelete > 0) && $verbose); return \@result; } sub find ($$$$) { # # find records given some criteria # # PRE: $reffilters is a reference to a number of pairs strings # of which the first identifies a unique field and the second # is used to match the value; $grammar is used to extract the # fields from the data, $verbose to show some output on screen # POST: reference to the list with found matches my ($reffilters, $refdata, $grammar, $verbose) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (%filters) = @$reffilters; my (@known, @filtered); my (@result) = (0..$#$refdata); my ($failure) = ""; my (@keynames) = sort (keys (%$reforder)); my ($gegeven, $string, $waarde, @gegevens); while (!$failure && (($gegeven, $string) = each (%filters))) { @filtered = (); # look how many fieldnames match the given description @known = grep {$_ =~ /^$gegeven/i} @keynames; if (@known > 1) { # more than one match print "meer mogelijkheden met $gegeven:$/@known$/" if $verbose; @result = (); $failure = "true"; } elsif (@known > 0) { # one match foreach (@result) { @gegevens = split (/$datasep/, $$refdata[$_]); # select the fieldname that matched the description ($waarde = $gegevens[$$reforder{$known[0]}]) || ($waarde = ""); # keep line if value contains string push (@filtered, $_) if ($waarde =~ /$string/i); } @result = @filtered; @filtered = (); } else { # no matches print "mogelijkheden:$/@keynames$/$/help\tgeeft beschrijving gegevens$/$/" if $verbose; $failure = "true"; @result = (); } } # add to all indices one to get a numbering from 1 to # data @result = map {++$_} @result; if (@result && $verbose) { print "gevonden zijn: ", join (",", @result), $/; } return \@result; } sub get ($$$$) { # # returns a list of all selected values # # PRE: $reflist is a reference to a list of all fieldnames of which # values must be returned, $refdata a reference to the data; # $grammar is used to extract the fields from the data, $verbose # to show some output on screen # POST: reference to the list with all matching values my ($reflist, $refdata, $grammar, $verbose) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (@fields) = @$reflist; my (@result) = (); my ($failure) = ""; my (@keynames) = sort (keys (%$reforder)); my ($field, @gegevens, @known); my (@positions) = (); if ($fields[0] =~ /^all/i) { @positions = sort (values (%$reforder)); } else { while (!$failure && ($field = shift (@fields))) { # look how many fieldnames match the given description @known = grep {$_ =~ /^$field/i} @keynames; if (@known > 1) { # more than one match print "meer mogelijkheden met $field:$/@known$/" if $verbose; @positions = (); $failure = "true"; } elsif (@known > 0) { # one match push (@positions, $$reforder{$known[0]}); } else { # no matches print "mogelijkheden:$/@keynames$/$/help\tgeeft beschrijving gegevens$/$/" if $verbose; $failure = "true"; @positions = (); } } } foreach (0..(@$refdata - 1)) { @gegevens = split (/$datasep/, $$refdata[$_]); push (@result, join ("$datasep", @gegevens[@positions])); } return \@result; } sub new_record ($$) { # # returns updated data # # PRE: $refdata is a reference to the datalist that should be sorted; # $grammar is used to extract the fields from the data, $verbose # to show some output on screen # POST: reference to the sorted datalist my ($refdata, $grammar, $refhelp) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (%invorder, $key, $aantal, $i, $notdone, $record, $value, $last, $newdata); foreach $key (keys(%$reforder)) { $invorder{$$reforder{$key}} = $key; } $last = @$refdata+1; $record = ""; $aantal = keys(%$reforder); $i = 0; $notdone = "true"; print "[$last] geef de waarden:$/"; while ($i < $aantal && $notdone) { print $invorder{$i},"? "; if (defined($value = <STDIN>)) { chomp ($value); $value = " " if !$value; $record .= $value; $record .= $datasep if ($i < $aantal-1); } else { $notdone = ""; } $i++; } if ($notdone) { $newdata = [@$refdata, $record]; $last = @$newdata; print $/; &show ([$last], $newdata, $grammar); print "toevoegen? "; defined ($value = <STDIN>) || ($value = "nee"); if ($value =~ /^(j|y)/i) { $refdata = $newdata; print "$/1 record toegevoegd...$/"; } else { print "$/geen wijzigingen aangebracht...$/"; } } else { print "$/geen wijzigingen aangebracht...$/"; } return $refdata; } sub sort_data ($$) { # # returns alphanumerically sorted data # # PRE: $refdata is a reference to the datalist that should be sorted; # $grammar is used to extract the fields from the data, $verbose # to show some output on screen # POST: reference to the sorted datalist my ($refdata, $verbose) = @_; (print (@$refdata+1," records alphanumeriek gesorteerd$/")) if ($verbose); return [sort (@$refdata)]; } #sub unfilter { # @studenten = @unfilter; #} --- NEW FILE: dataIO.pm --- package dataIO; # Polymorphic-data read, save and print by G.P.H. Josten June, 1998 # # This package contains functions to read, save and print the database data line # per line. # use strict; require Exporter; @dataIO::ISA = qw(Exporter); @dataIO::EXPORT = qw(read_data save_data print_data); @dataIO::EXPORT_OK = qw(read_data save_data print_data); sub read_data ($$){ # # read in data from a file # # PRE: $bron contains the name of the data file and $verbose is set to true # if the number of data read must be shown my ($bron, $verbose) = @_; my (@studenten, @commented_data, $regel, $comment); open (SOURCE, $bron) || die "$!: $bron"; @commented_data = (); @studenten = (); $comment = "\/\/"; while (defined ($regel = <SOURCE>)) { chomp ($regel); if ($regel =~ /^$comment/i) { push (@commented_data, $regel); } else { push (@studenten, $regel); } } close (SOURCE) || die "$!: $bron"; print $#studenten+1," studenten ingelezen uit $bron$/" if $verbose; return (\@studenten, \@commented_data); } sub save_data { # # save given data to a file # # PRE: $doel contains the name of the file to which the data must be saved # *studenten is a reference to a data list and $verbose determines # wether the number of lines written is shown my ($doel, $refstuds, $refcommentdata, $verbose) = @_; open (TARGET, ">$doel") || die "$!: $doel"; foreach (@$refcommentdata) { print TARGET $_,$/; } foreach (@$refstuds) { print TARGET $_,$/; } close (TARGET) || die "$!: $doel"; print @$#refstuds+1," studenten weggeschreven naar $doel$/" if $verbose; } sub print_data { print @_,$/; } |
From: Egon W. <eg...@us...> - 2002-08-02 15:37:18
|
Update of /cvsroot/woc/woc/cgi-bin/htplpdir In directory usw-pr-cvs1:/tmp/cvs-serv10119/htplpdir Added Files: Grammar.pm README dataConv.pm dataFunc.pm dataIO.pm helper htplp naam.pl Log Message: Added HTPLP dir (and a bit more). --- NEW FILE: Grammar.pm --- package Grammar; # Polymorphic-data-grammar reading by G.P.H. Josten June, 1998 # # This package contains the function to extract the data-grammar from a file. # use strict; require Exporter; @Grammar::ISA = qw(Exporter); @Grammar::EXPORT = qw(read_grammar); sub read_grammar ($) { # # read in the grammar of the data from a grammar file # # PRE: $source contains name of grammar file # POST: %order, %distribution and %keynames contain the information # necessary to retrieve fields from the data and show them on screen my ($source) = @_; my (%order, %distribution, %keynames, $regel, @regel, @lijst, $i); my ($dataseparator) = "#"; my ($fieldseparator) = ", "; open (SOURCE, $source) || die $!; # # first read the order into %order: # defined ($regel = <SOURCE>) || die $!; @regel = split (" ", $regel); $i=0; @lijst = (); while ($i < $regel[1] && defined ($regel = <SOURCE>)) { chomp($regel); push (@lijst, $regel, $i); $i++; } %order = @lijst; # # second the distribution along multiple lines: # defined ($regel = <SOURCE>) || die $!; @regel = split (" ", $regel); $i=0; @lijst = (); while ($i < $regel[1] && defined ($regel = <SOURCE>)) { chomp($regel); push (@lijst, $i, $regel); $i++; } %distribution = @lijst; # # last the names to show in front of each line: # defined ($regel = <SOURCE>) || die $!; @regel = split (" ", $regel); $i=0; @lijst = (); while ($i < $regel[1] && defined ($regel = <SOURCE>)) { chomp($regel); push (@lijst, $i, $regel); $i++; } push (@lijst, "comment", "/"); %keynames = @lijst; close (SOURCE) || die $!; # return the references only!! return [\%order, \%distribution, \%keynames, $dataseparator, $fieldseparator]; } --- NEW FILE: README --- August 5th, 1998 Why Htplp and Editor Htplp and Editor are two Perl-scripts which were written to resolve problems concerning the representation of large quantities of data on WWW as HTML. Htplp is the Parser which generates the pages, Editor is the utility to edit the data. Where it all started The parent problem was a small already existing site of the student association V.V.C.N. Sigma (http://www.sci.kun.nl/sigma/) which contained almost all pictures of the Chemistry students at the University of Nijmegen (most of them member of Sigma). Each year new students arrived and the pages had to be updated (each year of students meant three pages of each a number of kilobytes). I took that job on me (don't ask me why, I can't remember) and did this for one new year of students. My conclusion was that it was an unflexible, easily out-of-date and time consuming way. Everything had to be done manually. Especially when I (yes, one of those great ideas to do some self-torture) came to the idea to improve the layout by using multi-column layout for the pictures, I got tired of it. With some cut and paste it could be done, but it was boring and specially suited for computers to do it for you. The first monster The problems weren't very important, as the pages didn't needed to be very up-to-date. Nevertheless, it is a good visit card to do have a site with accurate and usable information. Besides, it was an interesting challenge which could make things easy in future. With my fresh knowledge of Java ("C1", the introductory course to programming - in Java :-( - was one of the obligatory courses), I set off to build a database and an engine that could read the data and generate the pages for me. An immense monster resulted. It worked, but it was ill-programmed and unreadable, only I worked with it - with reason I presume :-P -, and most of all, it was unflexible and still unmaintainable. But, a database was generated, one of the biggest benefits, and the page generation was automated. The engines most worth, it proved to me with it's first use outside it's original purpose, a use for like-wise layout, not for WWW but for a booklet with information about Sigma. I used this monster more than a year I believe, it has shown it's purpose, but now fortunately it's obsolete. The data The data which was held by a number of files, had to be created and maintained. This was a second problem, because using a text-editor isn't the best way, for mistakes are very easily made. Leaving some special symbol out meant that half the data of one year wasn't read, but skipped. Searching these files and extracting the useful information was another problem. Busy with the data - I was probably adding a new year or updating some names - I came to the idea of writing an editor. Actually, the idea originated because I wanted to facilitate the extraction of information. I was busy typing all fields that represented a single student. Life happened to let me stumble over Perl, I was interested and asked a 'colleague' student - he studied Informatics, I Chemistry at that time, Informatical Chemistry presently - for some advise about books about Perl. I bought to his advice two and with "Learning Perl" in one hand and the data files in the other, I tried to get a better and moreover faster extraction going. But using Unix shell-script (find, grep, sort, etc.) and Unix shell commands within Perl scripts didn't work and typing all information didn't facilitate it very much either this way. Well, why not read it in with Perl, put it in some variables, let Perl do some sorting and voila, my first real useful Perl-script was born. But with that it didn't stop. Hacking around in Perl, I wrote not only a search utility, but also some conversion utilities and another page generating script. But again, they were ill-programmed, hardly better readable, still only I (could) work(ed) with them and they still didn't show very much flexibility. The data improved though, for I typed all data, got some real regularity in it and got fresh ideas about how to better deal with it. The new approach I realised that the power of Perl could be far better utilised for this matter than I did. I hardly did, so that isn't much of a surprise. One benefit of Perl is, that normally it doesn't make a difference between words and numbers. I mean that in Perl for example not only numbers could be used to index in an array of items, but words as well. The Perl hash-variable the best example of this power of Perl in which one value is used to extract another, one to one. Not vice versa by the way. My fantasy got almost wild with the only enlarging space in which I could invent options and ideas and problems and solutions. Meanwhile, I had been busy with some funny command interpreting script which could represent the fields of data of one student in some basic way, could edit them as well and after some trouble, could even search the big lot. Discovering more and more about Perl, I started extracting more and more of the determining values and putting them into handy variables I could initialize at start and manipulated mid-way if necessary. This process resulted in a separate file which contained the full typing of the data and even the representation in the basic way. This information is read in and put in a few variables. In the rest of the script only these variables are used and not their actual value. Comparing with the actual values of these typing variables is only done with user input!! This process plus the ability of recognizing shortened versions of the actual values made the Editor very powerful. The Editor evolved I continued this work and started working on a profound way. I grouped certain functions and made them complete and robust. Most of them had to be converted to my new ideas and this allowed me to reconsider the solutions and improve them to their present state. This makes the Editor a full grown script, with fairly balanced functions and a quite user-friendly user-interface. I already had build an almost complete version of the Editor which I had subjected to some beta-testing (another colleague student :-). The new version could be tested back to back with this one and most testing did I do between all the other programming activities (hint: try to always test an earlier programmed part before you need to use it!). And still my knowledge about Perl is increasing, but the usefulness has converged about now - after building Htplp and Editor -. The data structuring The data had changed a lot in the meantime. First more regularity, second the typing and third cenversion. Conversion from the multi-line format (quite similar to the basic representation) to a single line one. The first two steps had been time consuming and text editor usage intensive, but are worth it now. The integrity of the data has very much increased as well as the managebility, editibility and usability. It also allowed me to experiment a little with how to structure the data. This has resulted in the separate file with the typing and the single-line format, with all fields of data of one student on a single line. This was done deliberately with several thoughts, no particular order, in my mind. Difficult to handle are fields of data of undefined number of lines. As linefeeds and carriage returns are of no use in HTML (it's just treated as whitespace) it was the first I got rid of. I stuffed everything on a single line and separated it by some specific string. At the moment I have chosen for a single character, the guard '#'. In near future the choice will be put in the typing file as well. I call these typing information together the grammar of the data, just to give it a name. Putting everything on a single line, makes the data easily manageble by using a simple array. This can even be sorted without any special work (one single command). Using the Perl functions split and join, the fields can be separated and glued together (single lines again). With the grammar of the data you can find out where a certain field remains and this can be use to extract, compare, manipulate and store the value if wanted. It may sound a bit difficult but it is just short and highly generic all at the same time, flexible at last and powerful indeed. It's real power became clear to me when I tried the Editor on a different data-file. It took two minutes to define a grammar and invent four lines of data. I ran the Editor and it just worked! It really worked!! Not a single change to the Editor was necessary, only the grammar and the data. I had underestimated my own abilities and the power of Perl. What followed With building this Editor which needs only some final commenting, addition of one or two extra functions and documentation on usage and maintenance, I created a profound basis of functions I saw I could use for the parent problem where I started my story. I had deliberately put all the Editor functions grouped in separate files, which could be used as nicely shielded modules. You only need to call the Perl function use and the functions are all yours. I had data, I had grammar and I had a whole bunch of functions, all tested and commented too. I took the page generating script in Perl in front of me and almost paniced in horror. It was awfull, HTML and Perl stood right next to each other, it was one big mess and in this script I had used old copies of the functions I had nicely defined in modules now. To get this readable, I had to get rid of the HTML between the Perl in some or the other way. By this time, I happened to look in some existing Perl script which gives some statistics, but more important, it read a plain text file in and substituted variables it contained (just a dollar sign '$' followed by an identifier). Interesting!! I though and once more I set off. But hey, I might could do better, I might be able to write some script which not only reads in those plain text files and substitutes some variables, but do this for any file, identified by some argument or so. Not a bad idea, I thought, so I hacked a bit in Perl, read in a file and substituted variables and produced the result. Hmm, well, I had to do a lot more if I wanted ever to produce the picture pages of Sigma. It is a tree-like structure with a lot of hyperlink refering to each other. Besides I had to process a lot of information if necessary. But, no worry, I thought, let the parser recognize filenames as variables as well (just dollar sign '$' plus filename) and process these too, Perl scripts as well. So I did, but being busy and stumbling over several difficulties one becomes wiser and wiser. The Htpl parser After lots and lots of trial-and-error activities (regular expressions are very, very, very flexible in Perl :-P), this resulted in Htplp. The name is derived from HTml and PerL Parser, which is not completely accurate, but it will do. This script, or parser if you like to call it that way, starts with reading one argument. This argument determines what site it should parse and generate. From this argument some basic files are derived, a.o. the grammar file, the data file, the main Perl script needed too beside the parsing script and the main text file. The grammar and data are read, some default variables are set and next the main Perl script is executed. Actually, it is the only Perl script that is necessary for that particular site. This script is supposed to do something useful to every remaining argument the parser script received at start. With these arguments the script is given the opportunity to initialize, process and destroy variables which, and this is the trick, are automatically acessible from within the parsing script (they are just global variables, so it's no fancy trick at all and note that the parser script's variables are global too!!). Then the main text file is read in and the real parsing commences. This parsing is no real big deal, although it cost me a lot of fine tuning to get it working. How the parsing works This parsing means only that the parser tries to find a few posibilities and process accordingly. First, the parser could find the word "if" somewhere. If this "if" is followed by a variable ($varname), then it will try to determine wether this variable exists or not, if so, the following part remains, otherwise it is deleted. If it is followed in the same line by the word "fi", then everything in between might survive or not. No "fi", then if the variable isn't set by that site-specific script, than the full line is deleted. The if .. fi construction may be put halfway a line, if .... construction must commence at the beginning of a line. In both if constructions the variable may be directly preceded by an exclamation mark '!', which negates the required existence of the following variable. Other constructs are as mentioned previously, filenames ($filename), with the only restriction that the filename must end with dot plus "htpl" ("$filenaam.htpl"). This is merely a handy choice which I'm not about to change. Final possibilities are just variable substitutions, scalar variables ($varname) and array variables (@varname) as well. Scalar variables are just substituted by their content. Array variables are a bit trickier. I programmed the parser in such a way that it pops the first value (The Perl function shift), which is lost that way. I found it necessary to build in a last option, to not pop that first value, but look at it and possibly use it once again. For this, put a exclamation mark '!' directly behind the @ in @varname (e.g. @!varname). This ought to do the trick :-). After each substitution in a line, the parser tries again, untill it fully fails, then it produces that line. Going over each line exhaustively allows to parse highly nested structures as well (variable names in variable names in variable names in a filename in an array variable in an variable name in an if evaluation in...). This may sound like a lot of work, but Perl manages to do this for a small but difficult page, within 10 seconds (at our server at least, which is not the slowest around). Especially the variable substitutions, which are often the far most done, influence this time greatly. Try to keep the actions as minimal as possible, by presubstituting all those values if possible. This doesn't have to be done exhaustively, the script is fast enough (Perl is compiled before execution!!). If it takes too long, your page might be just too long or perhaps, the server is slow in executing scripts... Finally I hope that this Editor and Htpl Parser may find a lot of future applications and not only done by me. I build these to give them through to future members of the Internetcommittee of V.V.C.N. Sigma. For as long as I will still be around I will try to do some final modifications in order to make those future applications even more possible. Let me note, that the Editor script or some text file nearby that script will contain a more extensive explenation of the use of the grammar. The Editor itself contains a help function which should explain the Editor functions at least a little. The error messages should do the rest, I hope. Htplp should be installed by somebody with at least some Perl experience and he or she could take care of the main site scripts if they are needed. Any layouting can be done by somebody else, like some HTML wizard or so. Minimal knowledge of how to call the script with the right arguments and what variables are available in which situation is necessary though. A documenting file would be very helpfull I suppose. And now the really, really final note: I called the Parser HTml and PerL Parser, but, actually, the HTML part doesn't have to be HTML at all, anything based on plain text could do. LaTeX for example too. May you all have a pleasent exercise of mind with scripts, may they enlighten your life, may they relieve you of a lot of trouble and sorrow and sweat and pain. If they don't, I suggest: R.T.F.M.!!!!!!!! Signed, WoodWorm alias G.P.H. Josten student Informatical Chemistry at the University of Nijmegen member of student association Sigma at Nijmegen member of the internetcommittee of Sigma --- NEW FILE: dataConv.pm --- package dataConv; # Polymorphic-data convert and show by G.P.H. Josten June, 1998 # # This package contains functions convert some database data from single line # format to multiple line format and show it this way on screen. # use strict; require Exporter; @dataConv::ISA = qw(Exporter); @dataConv::EXPORT = qw(compress expand show); sub by_number { # # function used by sort to sort numerical instead of alphanumerical # if ($a < $b) { return -1; } elsif ($b < $a) { return 1; } else { return 0; } } sub compress ($$) { # # compress data fields from over multi lines onto single lines # # PRE: $refdata, a reference to the data in multiline format to be # compressed, $reforder, $refdistr and $refkeys, references to # the hash variables that define how to translate from multi to # single line and $datasep and $fieldsep the strings that # separate the fields in the single resp. multi line format # POST: the data in single line format my ($refdata, $grammar) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (@result, $num_lines, $line, $i, @pos, @gegevens); $num_lines = scalar (keys (%$refdistr)); while (@$refdata) { do { $line = shift (@$refdata); } while ($line =~ /$$refkeys{"comment"}/i); for ($i = 0; $i < $num_lines; $i++) { $line =~ tr/^$$refkeys{$i}//; @pos = split(/$fieldsep/, $$refdistr{$i}); @gegevens[@pos] = split(/$fieldsep/, $line); } shift (@$refdata); # empty line push (@result, join ("$datasep", @gegevens)); } return \@result; } sub expand ($$$) { # # expand one single line of data to multiline format # # PRE: $refdata, a reference to the data in single line format from # which one record is to be expanded; $reforder, $refdistr and # $refkeys, references to the hash variables that define how to # translate from single to multi line format and $datasep and # $fieldsep the strings that separate the fields in the single # resp. multi line format # POST: one data record in multi line format my ($index, $refdata, $grammar) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (@data, @result, @lines, @fields) = ((), (), (), ()); my ($line); # show each of the list by expanding them one by one @data = split (/$datasep/, $$refdata[$index-1]); @lines = (0..(scalar (keys (%$refdistr)) - 1)); # add numbering of output push (@result, "/// ".$index." ///$/"); # add each line with the apropriate datafields foreach (@lines) { # which fields? @fields = split(/$fieldsep/, $$refdistr{$_}); # add line identifying string $line = $$refkeys{$_}; # add the fields $line .= join ("$fieldsep", @data[@fields]); push (@result, "$line$/"); } return @result; } sub show ($$$) { # # show a given number of record from the data # # PRE: $reflist, a reference to a list with all indices to the records # from the data to be shown; # $refdata, a reference to the data in single line format from # which one record is to be expanded; $reforder, $refdistr and # $refkeys, references to the hash variables that define how to # translate from single to multi line format and $datasep and # $fieldsep the strings that separate the fields in the single # resp. multi line format my ($reflist, $refdata, $grammar) = @_; my (@listtoshow) = @$reflist; # got a number? if (@listtoshow) { # show all? if ($listtoshow[0] =~ /^all/i) { @listtoshow = (1..@$refdata); } else { # else sort the received list @listtoshow = (sort by_number (@$reflist)); } # show each of the list by expanding them one by one foreach (@listtoshow) { print &expand ($_, $refdata, $grammar), $/; } } } --- NEW FILE: dataFunc.pm --- package dataFunc; # Polymorphic-data del, find, filter, get, new by G.P.H. Josten June, 1998 # # This package contains functions to delete, find records, filter them out or # build new ones. # use strict; require Exporter; @dataFunc::ISA = qw(Exporter); @dataFunc::EXPORT = qw(del filter find get new_record sort_data undo); use dataConv; sub by_number { # # function used by sort to sort numerical instead of alphanumerical # if ($a < $b) { return -1; } elsif ($b < $a) { return 1; } else { return 0; } } sub del ($$$$) { # # delete records from the database, given some indices # # PRE: $reflist is a reference to the list with indices to the # records that should be deleted, $refdata the reference to # the data list; if $verbose is set true, give some output # POST: reference to the updated data list my ($reflist, $refdata, $grammar, $verbose) = @_; my ($nr, $antwoord, $i, $j, @checked); foreach (sort by_number (@$reflist)) { &show ([$_], $refdata, $grammar); print "verwijderen? "; chomp ($antwoord = <STDIN>); if ($antwoord =~ /^(j|y)/i) { push (@checked, $_); } } my (@new) = (); $j = 1; foreach (@checked) { for ($i = $j; $i < $_; $i++) { push (@new, $$refdata[$i-1]); } $j = $_+1; } for ($i = $j; $i <= @$refdata; $i++) { push (@new, $$refdata[$i-1]); } print "verwijderd zijn: ", join (",", @checked), " overgebleven aantal: ", $#new+1, $/ if (@checked && $verbose); return (\@new); } sub filter ($$$$) { # # grep records out of the database given some criteria # # PRE: $reffilters is a reference to a number of pairs strings # of which the first identifies a unique field and the second # is used to match the value; $grammar is used to extract the # fields from the data, $verbose to show some output on screen # POST: reference to the remaining data my ($reffilters, $refdata, $grammar, $verbose) = @_; my ($reflist, $gedelete, $one, $other); my (@result) = (); ($reflist) = &find ($reffilters, $refdata, $grammar, $verbose); $one = 1; while (@$reflist) { if ($one < $$reflist[0]) { push (@result, $one); $one++; } else { shift @$reflist; $one++; } } while ($one <= @$refdata) { push (@result, $one); $one++; } @result = @$refdata[map {--$_} @result] if @result; $gedelete = @$refdata-@result; print "aantal weggefilterd: ", $gedelete, ", aantal overgebleven: ",$#result+1,$/ if (($gedelete > 0) && $verbose); return \@result; } sub find ($$$$) { # # find records given some criteria # # PRE: $reffilters is a reference to a number of pairs strings # of which the first identifies a unique field and the second # is used to match the value; $grammar is used to extract the # fields from the data, $verbose to show some output on screen # POST: reference to the list with found matches my ($reffilters, $refdata, $grammar, $verbose) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (%filters) = @$reffilters; my (@known, @filtered); my (@result) = (0..$#$refdata); my ($failure) = ""; my (@keynames) = sort (keys (%$reforder)); my ($gegeven, $string, $waarde, @gegevens); while (!$failure && (($gegeven, $string) = each (%filters))) { @filtered = (); # look how many fieldnames match the given description @known = grep {$_ =~ /^$gegeven/i} @keynames; if (@known > 1) { # more than one match print "meer mogelijkheden met $gegeven:$/@known$/" if $verbose; @result = (); $failure = "true"; } elsif (@known > 0) { # one match foreach (@result) { @gegevens = split (/$datasep/, $$refdata[$_]); # select the fieldname that matched the description ($waarde = $gegevens[$$reforder{$known[0]}]) || ($waarde = ""); # keep line if value contains string push (@filtered, $_) if ($waarde =~ /$string/i); } @result = @filtered; @filtered = (); } else { # no matches print "mogelijkheden:$/@keynames$/$/help\tgeeft beschrijving gegevens$/$/" if $verbose; $failure = "true"; @result = (); } } # add to all indices one to get a numbering from 1 to # data @result = map {++$_} @result; if (@result && $verbose) { print "gevonden zijn: ", join (",", @result), $/; } return \@result; } sub get ($$$$) { # # returns a list of all selected values # # PRE: $reflist is a reference to a list of all fieldnames of which # values must be returned, $refdata a reference to the data; # $grammar is used to extract the fields from the data, $verbose # to show some output on screen # POST: reference to the list with all matching values my ($reflist, $refdata, $grammar, $verbose) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (@fields) = @$reflist; my (@result) = (); my ($failure) = ""; my (@keynames) = sort (keys (%$reforder)); my ($field, @gegevens, @known); my (@positions) = (); if ($fields[0] =~ /^all/i) { @positions = sort (values (%$reforder)); } else { while (!$failure && ($field = shift (@fields))) { # look how many fieldnames match the given description @known = grep {$_ =~ /^$field/i} @keynames; if (@known > 1) { # more than one match print "meer mogelijkheden met $field:$/@known$/" if $verbose; @positions = (); $failure = "true"; } elsif (@known > 0) { # one match push (@positions, $$reforder{$known[0]}); } else { # no matches print "mogelijkheden:$/@keynames$/$/help\tgeeft beschrijving gegevens$/$/" if $verbose; $failure = "true"; @positions = (); } } } foreach (0..(@$refdata - 1)) { @gegevens = split (/$datasep/, $$refdata[$_]); push (@result, join ("$datasep", @gegevens[@positions])); } return \@result; } sub new_record ($$) { # # returns updated data # # PRE: $refdata is a reference to the datalist that should be sorted; # $grammar is used to extract the fields from the data, $verbose # to show some output on screen # POST: reference to the sorted datalist my ($refdata, $grammar, $refhelp) = @_; my ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; my (%invorder, $key, $aantal, $i, $notdone, $record, $value, $last, $newdata); foreach $key (keys(%$reforder)) { $invorder{$$reforder{$key}} = $key; } $last = @$refdata+1; $record = ""; $aantal = keys(%$reforder); $i = 0; $notdone = "true"; print "[$last] geef de waarden:$/"; while ($i < $aantal && $notdone) { print $invorder{$i},"? "; if (defined($value = <STDIN>)) { chomp ($value); $value = " " if !$value; $record .= $value; $record .= $datasep if ($i < $aantal-1); } else { $notdone = ""; } $i++; } if ($notdone) { $newdata = [@$refdata, $record]; $last = @$newdata; print $/; &show ([$last], $newdata, $grammar); print "toevoegen? "; defined ($value = <STDIN>) || ($value = "nee"); if ($value =~ /^(j|y)/i) { $refdata = $newdata; print "$/1 record toegevoegd...$/"; } else { print "$/geen wijzigingen aangebracht...$/"; } } else { print "$/geen wijzigingen aangebracht...$/"; } return $refdata; } sub sort_data ($$) { # # returns alphanumerically sorted data # # PRE: $refdata is a reference to the datalist that should be sorted; # $grammar is used to extract the fields from the data, $verbose # to show some output on screen # POST: reference to the sorted datalist my ($refdata, $verbose) = @_; (print (@$refdata+1," records alphanumeriek gesorteerd$/")) if ($verbose); return [sort (@$refdata)]; } #sub unfilter { # @studenten = @unfilter; #} --- NEW FILE: dataIO.pm --- package dataIO; # Polymorphic-data read, save and print by G.P.H. Josten June, 1998 # # This package contains functions to read, save and print the database data line # per line. # use strict; require Exporter; @dataIO::ISA = qw(Exporter); @dataIO::EXPORT = qw(read_data save_data print_data); @dataIO::EXPORT_OK = qw(read_data save_data print_data); sub read_data ($$){ # # read in data from a file # # PRE: $bron contains the name of the data file and $verbose is set to true # if the number of data read must be shown my ($bron, $verbose) = @_; my (@studenten, @commented_data, $regel, $comment); open (SOURCE, $bron) || die "$!: $bron"; @commented_data = (); @studenten = (); $comment = "\/\/"; while (defined ($regel = <SOURCE>)) { chomp ($regel); if ($regel =~ /^$comment/i) { push (@commented_data, $regel); } else { push (@studenten, $regel); } } close (SOURCE) || die "$!: $bron"; print $#studenten+1," studenten ingelezen uit $bron$/" if $verbose; return (\@studenten, \@commented_data); } sub save_data { # # save given data to a file # # PRE: $doel contains the name of the file to which the data must be saved # *studenten is a reference to a data list and $verbose determines # wether the number of lines written is shown my ($doel, $refstuds, $refcommentdata, $verbose) = @_; open (TARGET, ">$doel") || die "$!: $doel"; foreach (@$refcommentdata) { print TARGET $_,$/; } foreach (@$refstuds) { print TARGET $_,$/; } close (TARGET) || die "$!: $doel"; print @$#refstuds+1," studenten weggeschreven naar $doel$/" if $verbose; } sub print_data { print @_,$/; } --- NEW FILE: helper --- #!/usr/bin/sh cd /vol/www/woc/bin/editor Editor htplp --- NEW FILE: htplp --- #!/usr/local/bin/perl # # First get some libraries necessary to read in data and # get the right fields out of it... # use dataConv; use dataFunc; use dataIO; use Grammar; # # Next find out what the user is requesting... # if (@ARGV) { $mode = shift (@ARGV); if ($mode =~ /^debug/i) { $debug = "true"; if (@ARGV) { $mode = shift (@ARGV); } else { $mode = "smoel"; } } } else { $mode = "smoel"; } # # don't mind the debug info, this script is stuffed with it # print "Content-type: text/html$/$/<PRE>" if $debug; # # Setup the default variables... # $time = gmtime (time ()); #$scriptage = "(".int(-M $0)." days old)"; $script = $0; $script =~ s#.*\/##i; $scriptage = "(".int(-M $script)." days old)"; $path = $&; # that what was cut in previous line $path .= $script."dir/$mode/"; # Wordt niet meer gebruikt !!!! $script = "/cgi-bin/$script?$mode"; $maintainer = "woc\@sci.kun.nl"; $header = "Dit is een test header"; # don't mind, unimportent $body = "Geertje!!"; # ;-> # # Okay, select path to go to the files that contain the mode # specific data and layout... # chdir $mode; # # These are the files which are supposed to contain the main # script, html, data and grammar for the data... # $mainperlfile = "$mode.pl"; $mainfile = "$mode.htpl"; $datafile = $mode."data/$mode.dat"; $grammarfile = $mode."data/$mode.grm"; # # read the data... # $grammar = &read_grammar ($grammarfile); #print "Content-type: text/html$/$/"; #$refdata = &read_data ($datafile, "verbose"); ($refdata, $refcommenteddata) = &read_data ($datafile, ""); # # execute the main script # if (-r $mainperlfile) { do $mainperlfile; } # # read the main html containing file # @mainfile = (); open (MAINFILE, $mainfile) || die "$!:$mainfile"; while (<MAINFILE>) { push (@mainfile, $_); } close (MAINFILE); # # and at last, parse the html you just read... # print "begin while...$/" if $debug; while (@mainfile) { # variable enclosed by if and fi $match = ""; $begin = ""; $var = ""; $end = ""; @var = (); $varcont = " "; @varcont = (); $redo = "true"; if ($mainfile[0] =~ /(\s)(if\s+)(\$.*?)(\s)(.*?)(\sfi)(\b)/i) { print "1" if $debug; $match = $&; $begin = $1; $if = $2; $var = $3; $space = $4; $then = $5; $fi = $6; $end = $7; chomp ($end); $match = &convmatch (\$match);#$match =~ s#\$#\\\$#ig; if (eval "$var") { $mainfile[0] =~ s#$match#$begin$then$end#ig; } else { print "-" if $debug; $mainfile[0] =~ s#$match#$begin$end#ig; } $var = ""; } elsif ($mainfile[0] =~ /(\s)(if\s+\!)(\$.*?)(\s)(.*?)(\sfi)(\b)/i) { print "1b" if $debug; $match = $&; $begin = $1; $if = $2; $var = $3; $space = $4; $then = $5; $fi = $6; $end = $7; chomp ($end); $match = &convmatch (\$match);#$match =~ s#\$#\\\$#ig; if (eval "\!$var") { $mainfile[0] =~ s#$match#$begin$then$end#ig; } else { print "~" if $debug; $mainfile[0] =~ s#$match#$begin$end#ig; } $var = ""; } elsif ($mainfile[0] =~ /(^if\s+)(\$.*?)(\s)(.*)/i) { print "2" if $debug; $match = $&; $if = $1; $var = $2; $space = $3; $then = $4; if (eval "$var") { $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; $mainfile[0] =~ s#$match#$then#i; } else { print "^" if $debug; shift (@mainfile); } $var = ""; } elsif ($mainfile[0] =~ /(^if\s+\!)(\$.*?)(\s)(.*)/i) { print "2b" if $debug; $match = $&; $if = $1; $var = $2; $space = $3; $then = $4; if (eval "\!$var") { $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; $mainfile[0] =~ s#$match#$then#i; } else { print "'`" if $debug; shift (@mainfile); } $var = ""; # substitute $name.htpl with content of file name.htpl } elsif ($mainfile[0] =~ /([^\\]*)(\$)(\S+\.htpl)(.*)/i) { print "4" if $debug; $match = $&; $begin = $1; $var = $2.$3; $file = $3; $end = $4; if (-r $file) { @htplfile = (); open (HTPLFILE, $file) || die $!; while (defined ($line = <HTPLFILE>)) { push (@htplfile, $line); } close (HTPLFILE); if (@htplfile) { $varcont = join ("", @htplfile); } else { print "-" if $debug; $var = "\\".$var; $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; $mainfile[0] = $begin.$end; #= s/$match/$begin$end/ig; $var = ""; } } else { print "-" if $debug; $var = "\\".$var; $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; $mainfile[0] = $begin.$end; #= s/$match/$begin$end/i; $var = ""; } # $variables without if or if ... fi } elsif ($mainfile[0] =~ /([^\\]*?)(\$.*?)(\W)/i) { print "5" if $debug; $match = $&; $begin = $1; $var = $2; $end = $3; if (eval "$var") { $varcont = eval "$var"; } else { print "-$var:" if $debug; $var = "\\".$var; $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; $mainfile[0] =~ s/$match/$begin$end/ig; $var = ""; } # @!variables without if or if ... fi } elsif ($mainfile[0] =~ /([^\\]*?)(\@)(\!)(.*?)(\W)/i) { print "6" if $debug; $match = $&; $begin = $1; $var = $2.$3.$4; $variable = $2.$4; $varname = $4; $end = $5; if (eval "$variable") { $varcont = eval ('$'.$varname.'[0]'); } else { print "-" if $debug; $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; $match =~ s#\@#\\\@#ig; $mainfile[0] =~ s/$match/$begin$end/ig; $var = ""; } # @variables without if or if ... fi } elsif ($mainfile[0] =~ /([^\\]*?[^\\])(\@.*?)(\W)/i) { print "7" if $debug; $match = $&; $begin = $1; $var = $2; print "$var" if $debug; $end = $3; if (eval "$var") { $varcont = eval "shift ($var)"; } else { print "-" if $debug; $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; $match =~ s#\@#\\\@#ig; $mainfile[0] =~ s/$match/$begin$end/ig; $var = ""; } } else { print "0" if $debug; $redo = ""; } if ($redo && $var) { $var = "\\".$var; $varcont || ($varcont = ""); chomp ($varcont); @varcont = split ($/, $varcont); if ($varcont && (@varcont > 1)) { # $htplpnummer = @varcont; foreach (@varcont) { $_ .= $/; } print "*|" if $debug; $first = shift (@mainfile); chomp ($varcont[0]); $first =~ s/$begin$var$end/$begin$varcont[0]/ig; shift (@varcont); chomp ($varcont[$#varcont]); $varcont[$#varcont] = $varcont[$#varcont].$end.$/; (@mainfile) = ($first, @varcont, @mainfile); } else { print "+|" if $debug; $newbegin = &convmatch (\$begin); $newend = &convmatch (\$end); $mainfile[0] =~ s/$newbegin$var$newend/$begin$varcont$end/ig; } } elsif (! $redo) { print ">" if $debug; $mainfile[0] =~ s/\\\@/\@/ig; print shift (@mainfile); } else { print "|" if $debug; } } print "done while...$/</PRE>$/" if $debug; sub convmatch { # # stupid sub to make sure that the substitutions go right # ($_) = @_; $_ = $$_; #print "$_;" if $debug; s#\$#\\\$#ig; s#\*#\\\*#ig; s#\@#\\\@#ig; s#\&#\\\&#ig; s#\?#\\\?#ig; s#\/#\\\/#ig; s#\(#\\\(#ig; s#\)#\\\)#ig; s#\+#\\\+#ig; s#\|#\\\|#ig; s#\[#\\\[#ig; s#\]#\\\]#ig; #print "$_:" if $debug; return $_; } sub readhtml { # # sub to read in a file and put it's content in one variable # my ($file) = @_; my (@result, $line); open (BESTAND, $file) || die $!; while (defined ($line = <BESTAND>)) { push (@result, $line); } close (BESTAND); return join ("", @result); } sub parse_form { # # function to get the input from a form and convert the hexadecimal codes it # might contain... # # Get the input #$buffer = ""; #read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}) || die $!; while (<STDIN>) { # this is more useful, especially in debug mode, because $buffer .= $_; # this way you can enter values from console too. Type } # something like name1=value1&naam2=&naam3=value3, hit # enter and then Ctrl-D (under Unix though) # Split the name-value pairs @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s#<!--(.|$/)*-->##g; $value =~ s#\r\n\r\n#\<P\>#ig; # for Unix files to $value =~ s#\r\n#\<BR\>#ig; # get rid of ^M... $value =~ s#$/$/#\<P\>#ig; $value =~ s#$/#\<BR\>#ig; $FORM{$name} = $value; } return %FORM; } --- NEW FILE: naam.pl --- # # substitute $name.pl with evaluated content of file name.pl # } elsif ($mainfile[0] =~ /([^\\]*)(\$)(\S+\.pl)(.*)/i) { #print "3" if $debug; # $match = $&; # $begin = $1; # $var = $2.$3; # $file = $3; # $end = $4; # if (-r $file) { # do $file; # @plfile = (); # # open (PLFILE, $file) || die $!; # while (defined ($line = <PLFILE>)) { # push (@plfile, $line); # } # close (PLFILE); # # if (@plfile) { # $varcont = eval (join (" ", @plfile)); # } else { # $varcont = "\t"; # } ##print ":@plfile:$varcont:" if $debug; # if ($varcont !~ /\S/i) { # $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; # $mainfile[0] = $begin.$end; #s/$match/$begin$end/ig; # $var = ""; ##print "\"$mainfile[0]\"" if $debug; # } # } else { #print "-" if $debug; # $match = &convmatch (\$match); #$match =~ s#\$#\\\$#ig; # $mainfile[0] = $begin.$end; #= s/$match/$begin$end/ig; # $var = ""; # } # if ($mainfile[0] !~ /\S/i) { #print "^" if $debug; # shift (@mainfile); # $var = ""; # } |
From: Egon W. <eg...@us...> - 2002-08-02 15:37:18
|
Update of /cvsroot/woc/woc/cgi-bin/htplpdir/iupac-forum/iupac-forumdata In directory usw-pr-cvs1:/tmp/cvs-serv10119/htplpdir/iupac-forum/iupac-forumdata Added Files: iupac-forum.dat iupac-forum.grm iupac-forum.hlp Log Message: Added HTPLP dir (and a bit more). --- NEW FILE: iupac-forum.dat --- // subject#naam#email#datum#datum#tijd#niveau#inhoud Verbeteringen?#WOC-redactie#wo...@sc...#11 december 1998#00:00h#1#De WOC-redactie krijgt graag reacties over mogelijke verbeteringen. Met name docenten aan het middelbaar onderwijs worden uitgenodigd om commentaar te geven, omdat de redactie graag zou zien dat de WOC-IUPAC ook een goed leermiddel is om grote verbanden te zien. Verbeteringen?#Geert Josten#gj...@sc...#04-19-00#09:43h#2#(new) De IUPAC-Forum is vanaf heden on-line!<P>Wil echter iemand de tekst bij de rubrieken<BR>aanpassen? Daar klopt nog maar weinig van...<P>Geert Software#WOC-redactie#wo...@sc...#04-19-99#11:20h#1#In deze rubriek kunt U vragen stellen over de software die u kunt gebruiken voor en bij dit Woordenboek. Hier kunt u bijvoorbeeld vragen welke software u kunt gebruiken om de 3D structuren te bekijken. Wat is ... ?#WOC-redactie#wo...@sc...#04-19-99#11:20h#1#In deze rubriek kunt U vragen stellen over termen (behalve chemische verbindingen). Hoe werkt dit of waarmee kan ik dat? Wat is/doet deze chemische verbinding?#WOC-redactie#wo...@sc...#04-19-99#11:20h#1#In deze rubriek kunt U vragen stellen over chemische verbindingen. Ongerubriceerd#WOC-redactie#wo...@sc...#11 december 1998#12:00h#1#Hier kunt U uw vragen over de WOC-IUPAC kwijt, die niet in een van de drie hierboven genoemde passen. Vragen kunnen later per onderwerp gesorteerd worden. --- NEW FILE: iupac-forum.grm --- volgorde: 7 subject naam email datum tijd niveau inhoud verdeling: 5 0 1, 3, 4 2 6 5 weergave: 5 subject: naam : email : inhoud : niveau : --- NEW FILE: iupac-forum.hlp --- // $mode.hlp - bestand met alle help gegevens // // De regels beginnend met / zijn commentaar, extra commentaar alleen tussen de arrays en // minimaal een regel commentaar ertussen is essentieel. // De andere regels gaan twee aan twee, het eerste bevat het item, de tweede de beschrijving // zorg dat in ieder geval de items met spaties worden aangevuld tot de lengte van de langste // uit het deellijstje... // Lengte van de deellijstjes onbegrensd // commando help /// ident /// hieronder een overzicht van alle beschikbare commando's: help deze uitleg usage geeft overzicht alle mogelijke parameters ? geeft alle (on)mogelijke afkortingen find zoeken op gegevens show weergeven studentgegevens del verwijderen van studenten edit wijzigen studentgegevens filter selectief verwijderen studenten new toevoegen studenten unfilter wijzigingen vanaf laatste filter teniet doen read (opnieuw) inlezen studentgegevens save opslaan wijzigingen quit afsluiten editor probeer eens usage of ? EOH commando usage /// ident /// hieronder per commando de mogelijke parameters: help usage ? find <gegeven> <zoekstring> [..] show [(<nr> [..] | alles)] (default = huidige) del [<nr> [..]] (default = huidige) edit [<nr>] (default = huidige) filter <gegeven> <zoekstring> [..] new (student | jaar)", unfilter read [<bestand>] (default = $datafile) save [<bestand>] (default = $newdatafile) quit probeer eens ? EOH commando afkort /// ident /// de tekens binnen [] zijn overbodig: d[el] sa[ve] e[dit] s[how] fil[ter] us[age] f[ind] u[nfilter] h[elp] q[uit] n[ew] ? r[ead] EOH edit help /// ident /// kies een van de volgende items om deze te wijzigen: probeer eens ? EOH edit afkort /// ident /// de tekens binnen [] zijn overbodig: EOH |
From: Egon W. <eg...@us...> - 2002-08-02 15:37:18
|
Update of /cvsroot/woc/woc/cgi-bin/htplpdir/woc/wocdata In directory usw-pr-cvs1:/tmp/cvs-serv10119/htplpdir/woc/wocdata Added Files: editor woc.dat woc.grm woc.hlp Log Message: Added HTPLP dir (and a bit more). --- NEW FILE: editor --- #!/usr/bin/tcsh cd ../../editor Editor woc --- NEW FILE: woc.dat --- // subject#naam#email#datum#datum#tijd#niveau#inhoud Eindexamen#WOC-redactie#wo...@sc...#30 mei 2002#00:00h#1#Hier kunnen vragen gesteld worden over oude Eindexamens. Meer informatie#WOC-redactie#wo...@sc...#04-19-99#11:20h#1#In deze rubriek kunt U vragen stellen over informatie die niet in het WOC te vinden is. Meer informatie#Jean-Christophe Van nieuwenhuysen#jc...@ho...#06-03-02#21:27h#2#(new) ik moet voor mijn examen een werkje maken voor chemie over een bepaalde stof maar ik vind de naam niet van het product van de gegeven formule:<BR>CH3-CH2-CO-CH2-CH2Cl<BR>1-chloor-3-pentanon<BR>moest u mij kunnen helpen zou dit heel vriendelijk zijn! Dank u. Meer informatie#afafe Oubaibra #afafe.oubaibra#06-04-02#16:49h#2#(new) Geachte, <P>Momenteel ben ik bezig met het opstellen van een subsidieaanvraag voor eenbedrijf dat inkten produceert. <P>Echter ik zeijn een aantal woorden die ik noch terug vind in de woordenboek noch in de vertaalde lijst. <P>Ik hoop dat u mij kan verder helpen bij het verklare van onderstaande. <P>Deze zijn namelijk: <P>-Butyral ( base )<BR>-ADR and non-ADR goods (moet iets zijn met ontvlambaar)<BR>-Predispersed pigment preparation / dispersion<BR>-Grinding<BR>-Dispensing<BR>-cathodic corrosion<BR>-Helio Flexo<BR>-wat is nitreren van cellulose<P>- Voor wat staan de volgende codes (ruwe materialen)<P>R6121<BR>R6191<BR>B4001<BR>K4003<BR>R6262<P>Ik dank u voor de door u genomen moeite, <P>met vriendelijke groeten, <P>Afi dringend!!#Sofie#ann...@ho...#06-05-02#15:23h#2#(new) Hallo,<BR>Ik zoek de naam en de functie van deze verbinding:<BR>H2N - CH2<BR> |<BR>HO3S - CH2<P>Kan iemand mij helpen?<BR>Alvast bedankt<BR> Meer informatie#Peter van Haamsteden#sat...@ho...#06-06-02#11:06h#2#(new) Hallo,kunnen jullie mij helpen door een afbeelding van de molecuulstructuur van Deuterium te geven (op de site te zetten)??? Meer informatie#Vandemaele Gabriël#Gab...@pa...#06-13-02#22:02h#2#(new) Kunt u mij informeren waar meer gegevens te vinden zijn over:<BR>Dimethylethyleenamine of <BR>Dimethylethanolamine <BR>Is de afkorting hiervoor DMEA ? <P>Belangrijk is vooral de toxiciteit en welke beschermingsmaatregelen te nemen zijn ? <BR> Meer informatie#Peter Reinders#pjr...@wo...#06-17-02#17:53h#2#(new) Wat is het verschil tussen polystyreen en polypropyleen. Wat is het voordeel van de laatste tov de eerste in de verpakking van voedselproducten? Meer informatie#jan vandecasteele #jan...@pa...#07-31-02#12:00h#3#(new) polystyreen wordt gebruikt als isolatiemateriaal (piepschuim) Wat is ... ?#WOC-redactie#wo...@sc...#04-19-99#11:20h#1#In deze rubriek kunt U vragen stellen over termen (behalve chemische verbindingen). Hoe werkt dit of waarmee kan ik dat? Wat is pyrofosforolyse in relatie met ddNTP's of dNTP's??#Medine Nesil#ye...@ho...#06-05-02#14:23h#2#(new) Wat is pyrofosforolyse in relatie met ddNTP's of dNTP's? en informatie over PAP-techniek.<BR>Graag in Nederlands Wat is pyrofosforolyse in relatie met ddNTP's of dNTP's??#Medine Nesil#ye...@ho...#06-05-02#14:23h#2#(new) Wat is pyrofosforolyse in relatie met ddNTP's of dNTP's? en PAP-techniek??<BR> Wat is pyrofosforolyse in relatie met ddNTP's of dNTP's??#Medine Nesil#ye...@ho...#06-05-02#14:23h#2#(new) Wat is pyrofosforolyse in relatie met ddNTP's of dNTP's en PAP-techniek??<BR> wat is cr#krista#kri...@ms...#06-11-02#14:12h#2#(new) wat is cr ??<BR>is het chroom? en wat houd deze stof in??<P> Wat is ... ?#delfs yvan#del...@be...#06-12-02#10:22h#2#(new) wat is een edelgas?wat is extractie?wat is een atoom-element?wat is verbranding? Wat is ... ?#luc deschamps#luc...@az...#06-15-02#10:25h#2#(new) Wat betekent de term 'elueren' What is CH M1 - 745-2 ???#Gebbûh..#Ge...@ho...#06-20-02#19:53h#2#(new) What is CH M1 - 745-2 ??? I found some stuff in my brother's closet and I think he's on drugs<BR>this is what was on the bag it was in, it was a white powder so I think it's cocaine or something like that, PLEASE HELP ME !!!!!! Wat is ... ?#Fred Stork#f....@ch...#06-22-02#19:39h#2#(new) Voor de behandeling van een visziekte in mijn vijver heb ik Kaliumpermanganaat gekregen (te gebruiken 2 gram per 1000 liter water). Na de kuur dient een wit poeder toegedient te worden dat volgens de vissendokter wordt omschreven als "peroxide". Dit maakt na een dag het water glashelder. Wie weet welk soort peroxide dit kan zijn. Wat is ... ?#Fred Stork#f....@ch...#06-22-02#19:51h#2#(new) Weet iemand wat Flubandazol is ? Ik heb het gekregen ter bestrijding van huidwormen bij mijn vijvervissen. Weet iemand ook wat deze stof doet ? Wat is ... ?DEPRENYL#COUCKE JAN#jan.coucke.be#07-17-02#13:28h#2#(new) wat is deprenyl Wat is/doet deze verbinding?#WOC-redactie#wo...@sc...#04-19-99#11:20h#1#In deze rubriek kunt U vragen stellen over chemische verbindingen. Wat is/doet deze verbinding?#rudi#ec...@pa...#06-04-02#00:13h#2#(new) verschil tussen petroleum en brandstof diesel Wat is/doet deze verbinding?#maarten#ikm...@ho...#06-09-02#17:37h#2#(new) Kan iemand mij alsjeblieft evrtellen wat de reactieproducten als je citroenzuur met natronllog laat reagere. En in welke evrhouding reageren die?<BR>Help me !!! Wat is/doet deze verbinding?#Egon#wo...@sc...#06-11-02#15:37h#3#(new) Het lijkt mij dat ze 1:1 reageren en natriumcitraat vormen. Wat is/doet deze verbinding?#anke#ank...@ho...#06-15-02#18:20h#2#(new) Weet u soms de structuurformule van natriumascorbaat?<P>Dank u Wat is/doet deze verbinding?#Fred Stork#f....@ch...#06-22-02#19:33h#2#(new) Voor de behandeling van een visziekte in mijn vijver heb ik Kaliumpermanganaat gekregen (te gebruiken 2 gram per 1000 liter water). Na de kuur dient een wit poeder toegedient te worden dat volgens de vissendokter wordt omschreven als "peroxide". Dit maakt na een dag het water glashelder. Wie weet welk soort peroxide dit kan zijn. Wat is/doet deze verbinding?#liesbeth#smo...@ho...#07-02-02#15:07h#2#(new) bakpoeder: formule, systematische naam, vorming, soort stof,eigenschappen, gebruik, gevarensymbolen en de r en s zinnen Wat is/doet deze verbinding?#h mannessen#h.m...@ch...#07-14-02#20:24h#2#(new) wat gebeurt er met de stoffen NH3 en CO2 welke gebruikt worden in een koude proces als deze direkt met elkaar in contact komen. Ongerubriceerd#henk en jan#sny...@ho... en naa...@ho...#06-03-02#18:50h#2#(new) voor school moeten wij antwoord geven op de volgende vragen:<BR>1-met welke stoffen reageert het element zilver het best?<BR>2-wat zijn de eigenschappen van deze stoffen en de toepassingen (en waarvoor ze gebruikt worden)?<BR>3-en welke verbindingen worden toegepast/gebruikt rond je huis/omgeving?<BR>alvast bedankt voor de antwoorden en de moeite<BR>Henk en Jan 4C scheikunde#elide van klooster#klo...@ca...#06-05-02#01:28h#2#(new) Ik heb de volgende vraag:<BR>Ben op zoek naar een beschrijving van de alchemie<BR>gaarne hierop antwoord.<BR>ben een lerling van VMBO theoretische leerweg<BR>b.v.d.<BR>elis van klooster Magnesium#Niels Huismans#n_h...@ho...#06-05-02#10:00h#2#(new) Wat houd magnesium in?<P>Alvast bedankt, Niels Ongerubriceerd#chantal van hengstum#Cha...@ar...#06-06-02#08:39h#2#(new) Goedemorgen,<P>Waaruit bestaat Tempex? Welke dampen kunnen er vrij komen bij het verwarmen van dit materiaal (het snijden van tempex met hete metalen draden).<P> rookbom#ria verstraeten #ria verstraetan @belgacom.be#06-09-02#11:12h#2#(new) Hoe maak ik een rookbom van middelen die we hebben in het gewone leven ? poederof rookbom#ria verstraeten#ria verstraeten @skynet.be#06-09-02#11:15h#2#(new) Hoe maak ik een soort bom waardoor er rook vrij komt? Ongerubriceerd#Dominique Rigaux#dom...@si...#06-10-02#21:29h#2#(new) Ik ben op zoek naar een tabel waarin ik de chemische bestendigheid van bepaalde produkten zoals Kynar, Hypalon, viton, EPDM, RVS soorten ...etc tov produkten zoals FeCl3, H2SO4, HCl, ... etc kan vinden. Weet iemand waar ik zo'n tabel kan vinden? Bestaat dit ergens onder digitale vorm? Kan iemand mij de link hiervoor opgeven?<P>Alvast bedankt op voorhand. Chloor#irma melessen#sp...@ho...#06-13-02#13:18h#2#(new) hallo<BR>ik ben irma en 14 jaar ik zit in 3 VMBO.<BR>ik moet een werkstuk maken over chloor nu zit ik met een paar vragen --><BR>1.  Uiterlijk<BR> Kenmerken  smeltpunt  kookpunt<BR> Gevaarlijk  wat doet het<BR> Waar word het voor gebruikt<BR> Waar kom je het tegen<BR> alvast bedankt ik heb eigenlijk geen tijd en moet het morgen al inleveren <BR>maar toch bedankt<P>Groetjes Irma Aspirine#tessa ketel#tes...@ho...#06-17-02#10:11h#2#(new) Ik hoop dat u mij zou willen helpen met de volgende vraag: <BR> In de handel zijn hoofdpijntabletten te verkrijgen die, in een weinig water gebracht, onder gasontwikkeling een heldere oplossing geven. Het ontwijkende gas blijkt kalkwater troebel te maken . In zon bruistablet zit ondermeer acetylsalicylzuur (Aspirine®) en natrium-bicar-bonaat. Aspirine®, een organisch zuur mag geschreven worden als HA.<P><BR>a. Geef de vergelijking van de reactie waarbij het bedoelde gas ontwijkt. Acetylsalicylzuur is slecht oplosbaar in koud water. <P><P>b. Geef een verklaring voor het feit dat acetylsalicylzuur goed oplost in water in aanwezigheid van natriumbicarbonaat <P>Alvast heel erg bedankt, vriendelijke groetjes Tessa Ketel<P> Ongerubriceerd#carlien sierens#ca...@li...#06-21-02#11:01h#2#(new) Is het mogelijk op jullie website via ingave van het CAS-Nummer de formule te weten ?<P>Bijvoorbeeld : CAS-Nr. 103-23-1 welke samenstelling is dit ?<P>met dank bij voorbaat voor een antwoord.<P><BR>vriendelijke groeten,<BR>carlien sierens Kaliumpermanganaat#Fred Stork#f....@ch...#06-22-02#19:40h#2#(new) Wat de exacte werking van Kaliumpermanganaat in mijn vijver met koikarpers. Ik heb het via een vissendokter voorgeschreven gekregen ter behandeling tegen de parasieten Costia en Tichodina. Ontleden?#Avioire#Aj...@ho...#06-24-02#13:58h#2#(new) Beste mensen, ik zit met een groot probleem!<P>Ik heb vorige week een belangrijk contract gekregen van mijn baas en mijn zoontje heeft daar inkt op laten vallen, pure inkt!<BR>Een gedeelte van mijn contract zit helemaal onder en het is er helemaal in, ingetrokken.<BR>hoe kan ik het papier en het inkt van elkaar scheiden? Ongerubriceerd#Tineke Kievits#bo...@he...#06-24-02#20:31h#2#(new) Zou u zo vriendelijk willen zijn mij informatie te mailen betreffende de samenstelling en de geachte werking van Potassium?<P>Dank je wel.. en vriendelijk groetend.. <BR>Tineke Kievits Ongerubriceerd#Tineke Zwaan#tz...@ne...#06-28-02#10:17h#2#(new) is dichloormethaan een polaire of apolair oplosmiddel? Graag ontvang ik een overzicht van polaire en apolaire oplosmiddelen<BR> organische nomenclatuur#R. Smit#bl...@wa...#07-04-02#10:28h#2#(new) Weet iemand een Ned triviaalnaam voor<BR>-pamoic acid<BR>-estolic acid<BR>-embonic acid<P>dank<BR>rob --- NEW FILE: woc.grm --- volgorde: 7 subject naam email datum tijd niveau inhoud verdeling: 5 0 1, 3, 4 2 6 5 weergave: 5 subject: naam : email : inhoud : niveau : --- NEW FILE: woc.hlp --- // $mode.hlp - bestand met alle help gegevens // // De regels beginnend met / zijn commentaar, extra commentaar alleen tussen de arrays en // minimaal een regel commentaar ertussen is essentieel. // De andere regels gaan twee aan twee, het eerste bevat het item, de tweede de beschrijving // zorg dat in ieder geval de items met spaties worden aangevuld tot de lengte van de langste // uit het deellijstje... // Lengte van de deellijstjes onbegrensd // commando help /// ident /// hieronder een overzicht van alle beschikbare commando's: help deze uitleg usage geeft overzicht alle mogelijke parameters ? geeft alle (on)mogelijke afkortingen find zoeken op gegevens show weergeven studentgegevens del verwijderen van studenten edit wijzigen studentgegevens filter selectief verwijderen studenten new toevoegen studenten unfilter wijzigingen vanaf laatste filter teniet doen read (opnieuw) inlezen studentgegevens save opslaan wijzigingen quit afsluiten editor probeer eens usage of ? EOH commando usage /// ident /// hieronder per commando de mogelijke parameters: help usage ? find <gegeven> <zoekstring> [..] show [(<nr> [..] | alles)] (default = huidige) del [<nr> [..]] (default = huidige) edit [<nr>] (default = huidige) filter <gegeven> <zoekstring> [..] new (student | jaar)", unfilter read [<bestand>] (default = $datafile) save [<bestand>] (default = $newdatafile) quit probeer eens ? EOH commando afkort /// ident /// de tekens binnen [] zijn overbodig: d[el] sa[ve] e[dit] s[how] fil[ter] us[age] f[ind] u[nfilter] h[elp] q[uit] n[ew] ? r[ead] EOH edit help /// ident /// kies een van de volgende items om deze te wijzigen: probeer eens ? EOH edit afkort /// ident /// de tekens binnen [] zijn overbodig: EOH |
From: Egon W. <eg...@us...> - 2002-08-02 15:37:18
|
Update of /cvsroot/woc/woc/cgi-bin/htplpdir/iupac-forum In directory usw-pr-cvs1:/tmp/cvs-serv10119/htplpdir/iupac-forum Added Files: bericht.htpl berichtkop.htpl eindelijst.htpl incompleet.htpl iupac-forum.htpl iupac-forum.pl nieuwelijst.htpl overigkop.htpl overzicht.htpl rubriek.htpl rubriekkop.htpl rubriektoc.htpl toevoegform.htpl vraagkop.htpl Log Message: Added HTPLP dir (and a bit more). --- NEW FILE: bericht.htpl --- <CENTER> if $vraag <FONT SIZE=+1><B>Vraag of reactie over $subject</B></FONT><BR> if !$vraag <FONT SIZE=+1><B>Over $subject</B></FONT><BR> <I>(<A HREF="mailto:$email">$naam</A>, $stamp)</I> </CENTER> <P> <HR WIDTH=20%> <P> <UL> if $vraag <B>$inhoud</B> if !$vraag $inhoud <P> $reacties </UL> <P> <H3 ALIGN=Center> if $volgendelink [ <A HREF="$volgendelink">Volgende</A> ] if $vraag [ <A HREF="$voorgangerlink">Rubriek</A> ] if !$vraag [ <A HREF="$voorgangerlink">Voorganger</A> ] [ <A HREF="$reactielink">Reageren</A> ] [ <A HREF="$script">Rubrieken</A> ] </H3> --- NEW FILE: berichtkop.htpl --- <LI><B>@subject</B> <A HREF="@berichtlink">@naam</A> <I>(@stamp)</I> --- NEW FILE: eindelijst.htpl --- </UL> --- NEW FILE: incompleet.htpl --- <CENTER> <BR><H1>Volledig Invullen A.U.B.</H1> <FORM METHOD=POST ACTION="$script+voegtoe+$niveau+$nummer"> <INPUT TYPE=Hidden NAME="datum" VALUE="$datum"> <INPUT TYPE=Hidden NAME="tijd" VALUE="$tijd"> <TABLE> <TR> <TD>Naam:</TD> <TD><INPUT TYPE=Text NAME="naam" SIZE=50 VALUE="$naam"></TD> </TR> <TR> <TD>E-Mail:</TD> <TD><INPUT TYPE=Text NAME="email" SIZE=50 VALUE="$email"></TD> </TR> <TR> <TD>Subject:</TD> <TD><INPUT TYPE=Text NAME="subject" SIZE=50 VALUE="$subject"></TD> </TR> <TR> <TD>Bericht:</TD> <TD><TextAREA COLS=55 ROWS=10 NAME="inhoud">$inhoud</TextAREA></TD> </TR> </TABLE> <INPUT TYPE=Submit VALUE="Voeg toe"> <INPUT TYPE=Reset VALUE="Opnieuw"> </FORM> </CENTER> --- NEW FILE: iupac-forum.htpl --- Content-type: text/html <HTML> <HEAD> <META NAME="Author" CONTENT="Geert Josten, lid van de internetcommissie van VVCN Sigma"> <META NAME="Description" CONTENT="WOC-IUPAC Forum: Opmerkingen, reacties, vragen en antwoorden"> <META NAME="Generator" CONTENT="Perl-Sript: $0 $scriptage"> <META NAME="IsIndex" CONTENT="No"> <META NAME="Maintainer" CONTENT="$maintainer"> <META NAME="Review" CONTENT="$time"> <BASE href="http://www.sci.kun.nl/woc/iupac/" TARGET="pagina"> <TITLE>WOC-IUPAC Forum: $header </TITLE> <link rel="stylesheet" href="gui/styles/woc.css" type="text/css"> </HEAD> <BODY class="main"> <H1 ALIGN=Center>Vragen en Reacties: $header</H1> <HR> <BR> <BR> if $overzicht $overzicht.htpl if $rubriektoc $rubriektoc.htpl if $bericht $bericht.htpl if $toevoegform $toevoegform.htpl if $toevoegformincompleet $incompleet.htpl <P> <HR> <UL> <CENTER><I>De WOC-redactie behoudt het recht om naar eigen inzicht de toegevoegde vragen en antwoorden aan te passen en in te delen.</I></CENTER> </UL> </BODY> </HTML> --- NEW FILE: iupac-forum.pl --- $contentcheckers = "woc\@sci.kun.nl"; ## main ## ($reforder, $refdistr, $refkeys, $datasep, $fieldsep) = @$grammar; $datum = `date '+%m-%d-%y'`; $tijd = `date '+%H:%Mh'`; if ((@ARGV) && ($ARGV[0] =~ /^nieuw/i)) { shift (@ARGV); $niveau = shift (@ARGV); $nummer = shift (@ARGV); if ($niveau > 2) { $header = "Vul hier je reactie in..."; &maak_reactieform (); } else { $header = "Vul hier je vraag of reactie in..."; if ($nummer > 0) { &maak_reactieform (); } else { $subject = "Ongerubriceerd"; $nummer = @$refdata; } } $toevoegform = "true"; } elsif ((@ARGV) && ($ARGV[0] =~ /^voegtoe/i)) { shift (@ARGV); $niveau = shift (@ARGV); $nummer = shift (@ARGV); if (&voeg_nieuw_bericht_toe ()) { $reacties = ""; $nummer++; $header = "\$inhoud"; if ($niveau > 2) { $bericht = "overig"; } else { $bericht = "vraag"; $vraag = "true"; } &maak_bericht (); } else { $toevoegformincompleet = "true"; } } elsif ((@ARGV) && ($ARGV[0] =~ /^rubriek/i)) { $header = "Vragen Overzicht"; shift (@ARGV); $nummer = shift (@ARGV); $rubriektoc = " "; &maak_rubriek (); $vraagtoevoeglink = "$script+nieuw+2+$nummer"; } elsif ((@ARGV) && ($ARGV[0] =~ /^vraag/i)) { $header = "Antwoorden op vragen"; shift (@ARGV); $nummer = shift (@ARGV); $bericht = "vraag"; $vraag = "true"; &maak_bericht (); } elsif ((@ARGV) && ($ARGV[0] =~ /^\d+/i)) { $header = "Antwoord en commentaar"; $nummer = shift (@ARGV); $bericht = "overig"; &maak_bericht (); } else { $header = "Rubrieken Overzicht"; $overzicht = ""; &maak_overzicht (); $niveau = "1"; $nummer = @$refdata; $nieuwevraaglink = "$script+nieuw+2+0"; } $return = ""; sub maak_reactieform { $refsubject = &get (["subject"], [$$refdata[$nummer-1]], $grammar, ""); $subject = $$refsubject[0]; } sub maak_overzicht { $htmlrubriek = &readhtml ("rubriek.htpl"); $refsubject = &get (["subject"], $refdata, $grammar, ""); $refnaam = &get (["naam"], $refdata, $grammar, ""); $refemail = &get (["email"], $refdata, $grammar, ""); $refstamp = &get (["datum", "tijd"], $refdata, $grammar, ""); $refniveau = &get (["niveau"], $refdata, $grammar, ""); $refinhoud = &get (["inhoud"], $refdata, $grammar, ""); @i = (1..@$refdata); $numvraag = 0; $numant = 0; $numcomm = 0; foreach $i (@i) { $subject = shift @$refsubject; $naam = shift @$refnaam; $email = shift @$refemail; $email =~ s#\@#\\\@#ig; $stamp = shift @$refstamp; $stamp =~ s/#/, /i; $niv = shift @$refniveau; $inhoud = shift @$refinhoud; if ($niv == 1) { push (@rubrieklink, "$script+rubriek+$i"); push (@subject, "\u$subject"); push (@email, $email); push (@naam, "\u$naam"); push (@stamp, $stamp); push (@niveau, $niveau); push (@inhoud, "\u$inhoud"); ($numvraag = "geen") if ! $numvraag; ($numant = "geen") if ! $numant; ($numcomm = "geen") if ! $numcomm; push (@numvraag, $numvraag); push (@numant, $numant); push (@numcomm, $numcomm); $overzicht .= "$htmlrubriek"; $numvraag = 0; $numant = 0; $numcomm = 0; } else { if ($niv == 2) { $numvraag++; } elsif ($niv == 3) { $numant++; } elsif ($niv > 3) { $numcomm++; } } } ($numvraag = "geen") if ! $numvraag; ($numant = "geen") if ! $numant; ($numcomm = "geen") if ! $numcomm; push (@numvraag, $numvraag); push (@numant, $numant); push (@numcomm, $numcomm); shift (@numvraag); shift (@numant); shift (@numcomm); } sub maak_rubriek { $htmlnieuwelijst = &readhtml ("nieuwelijst.htpl"); $htmlrubriekkop = &readhtml ("rubriekkop.htpl"); $htmlvraagkop = &readhtml ("vraagkop.htpl"); $htmloverigkop = &readhtml ("overigkop.htpl"); $htmleindelijst = &readhtml ("eindelijst.htpl"); $last = $nummer; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $niveau = $$refniveau[0]; while (($niveau > 1) && ($last < @$refdata)) { $last++; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $niveau = $$refniveau[0]; } @i = (($nummer-1)..($last-1)); @data = @$refdata[@i]; $refsubject = &get (["subject"], \@data, $grammar, ""); $refnaam = &get (["naam"], \@data, $grammar, ""); $refemail = &get (["email"], \@data, $grammar, ""); $refstamp = &get (["datum", "tijd"], \@data, $grammar, ""); $refniveau = &get (["niveau"], \@data, $grammar, ""); $refinhoud = &get (["inhoud"], \@data, $grammar, ""); foreach $reactieinhoud (@overiginhoud) { $reactieinhoud = substr($reactieinhoud, 0, 40)."..."; } $niv = 1; @i = ($nummer..$last); foreach $i (@i) { $subject = shift @$refsubject; $naam = shift @$refnaam; $email = shift @$refemail; $email =~ s#\@#\\\@#ig; $stamp = shift @$refstamp; $stamp =~ s/#/, /i; $oldniv = $niv; $niv = shift @$refniveau; $inhoud = shift @$refinhoud; if ($niv < $oldniv) { $j = $niv; while ($j < $oldniv) { $rubriektoc .= "$htmleindelijst"; $j++; } } if ($niv > $oldniv) { $j = $oldniv; while ($j < $niv) { $rubriektoc .= "$htmlnieuwelijst"; $j++; } } if ($niv == 1) { $rubrieklink = "$script+rubriek+$i"; $rubrieksubject = "\u$subject"; $rubrieknaam = "\u$naam"; $rubriekinhoud = "\u$inhoud"; } elsif ($niv == 2) { push (@vraaglink, "$script+vraag+$i"); push (@vraagnaam, "\u$naam"); push (@vraaginhoud, "\u$inhoud"); $rubriektoc .= "$htmlvraagkop"; } else { push (@overiglink, "$script+$i"); push (@overignaam, "\u$naam"); $inhoud = substr($inhoud, 0, 40)."..."; push (@overiginhoud, "\u$inhoud"); $rubriektoc .= "$htmloverigkop"; } } $rubriektoc .= "$htmleindelijst"; $rubriektoc .= "$htmleindelijst"; } sub maak_bericht { $htmlnieuwelijst = &readhtml ("nieuwelijst.htpl"); $htmloverigkop = &readhtml ("overigkop.htpl"); $htmleindelijst = &readhtml ("eindelijst.htpl"); $refsubject = &get (["subject"], [$$refdata[$nummer-1]], $grammar, ""); $refnaam = &get (["naam"], [$$refdata[$nummer-1]], $grammar, ""); $refemail = &get (["email"], [$$refdata[$nummer-1]], $grammar, ""); $refstamp = &get (["datum", "tijd"], [$$refdata[$nummer-1]], $grammar, ""); $refniveau = &get (["niveau"], [$$refdata[$nummer-1]], $grammar, ""); $refinhoud = &get (["inhoud"], [$$refdata[$nummer-1]], $grammar, ""); $subject = $$refsubject[0]; $naam = $$refnaam[0]; $email = $$refemail[0]; $stamp = $$refstamp[0]; $niveau = $$refniveau[0]; $inhoud = $$refinhoud[0]; $stamp =~ s/#/ /i; $email =~ s#\@#\\\@#ig; $reactielink = "$script+nieuw+".($niveau+1)."+$nummer"; ### de 'parent', voorganger ### $prev = $nummer-2; $refniveau = &get (["niveau"], [$$refdata[$prev]], $grammar, ""); $prevniveau = $$refniveau[0]; while (($prevniveau >= $niveau) && ($prev > 0)) { $prev--; $refniveau = &get (["niveau"], [$$refdata[$prev]], $grammar, ""); $prevniveau = $$refniveau[0]; } if ($prevniveau < $niveau) { if ($prevniveau == 1) { $voorgangerlink = "$script+rubriek+".($prev+1); } elsif ($prevniveau == 2) { $voorgangerlink = "$script+vraag+".($prev+1); } else { $voorgangerlink = "$script+".($prev+1); } } ### de reacties en het eerst volgende broertje of zusje ### if ($nummer <= @$refdata) { $last = $nummer; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $lastniveau = $$refniveau[0]; while (($lastniveau > $niveau) && ($last < @$refdata)) { $last++; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $lastniveau = $$refniveau[0]; } if ($lastniveau == $niveau) { if ($lastniveau == 1) { $volgendelink = "$script+rubriek+".($last+1); } elsif ($lastniveau == 2) { $volgendelink = "$script+vraag+".($last+1); } else { $volgendelink = "$script+".($last+1); } } if ($last > $nummer) { @reacties = @$refdata[$nummer..$last-1]; $refsubject = &get (["subject"], \@reacties, $grammar, ""); $refnaam = &get (["naam"], \@reacties, $grammar, ""); $refemail = &get (["email"], \@reacties, $grammar, ""); $refstamp = &get (["datum", "tijd"], \@reacties, $grammar, ""); $refniveau = &get (["niveau"], \@reacties, $grammar, ""); $refinhoud = &get (["inhoud"], \@reacties, $grammar, ""); @overigsubject = @$refsubject; @overignaam = @$refnaam; @overigemail = @$refemail; @overigstamp = @$refstamp; @overigniveau = @$refniveau; @overiginhoud = @$refinhoud; @i = (1..@$refdata); foreach $i (@i) { push (@overiglink, "$script+".($i+$nummer)); } foreach $reactiestamp (@overigstamp) { $reactiestamp =~ s/#/ /i; } foreach $reactieinhoud (@overiginhoud) { $reactieinhoud = substr($reactieinhoud, 0, 40)."..."; } foreach $reactieemail (@overigemail) { $reactieemail =~ s#\@#\\\@#ig; } $reacties = ""; $refniveau = &get (["niveau"], \@reacties, $grammar, ""); $niv = $niveau; foreach $reactieniveau (@overigniveau) { if ($niv < $reactieniveau) { while ($niv < $reactieniveau) { $reacties .= " "x($niv-$niveau+2)."$htmlnieuwelijst"; $niv++; } } elsif ($niv > $reactieniveau) { while ($niv > $reactieniveau) { $reacties .= " "x($niv-$niveau+1)."$htmleindelijst"; $niv--; } } $reacties .= " "x($niv-$niveau+1)."$htmloverigkop"; } while ($niv > $niveau) { $reacties .= " "x($niv-$niveau+1)."$htmleindelijst"; $niv--; } } } } sub voeg_nieuw_bericht_toe { %pairs = &parse_form (); $compleet = "true"; foreach $key (keys(%pairs)) { if (! $pairs{$key}) { $compleet = ""; #false } } $subject = $pairs{"subject"} if (exists ($pairs{"subject"})); $naam = $pairs{"naam"} if (exists ($pairs{"naam"})); $email = $pairs{"email"} if (exists ($pairs{"email"})); $datum = $pairs{"datum"} if (exists ($pairs{"datum"})); $tijd = $pairs{"tijd"} if (exists ($pairs{"tijd"})); $inhoud = $pairs{"inhoud"} if (exists ($pairs{"inhoud"})); if ($compleet) { $bericht[$$reforder{"subject"}] = $subject; $bericht[$$reforder{"naam"}] = $naam; $bericht[$$reforder{"email"}] = $email; $bericht[$$reforder{"datum"}] = $datum; $bericht[$$reforder{"tijd"}] = $tijd; $bericht[$$reforder{"niveau"}] = $niveau; $bericht[$$reforder{"inhoud"}] = "(new) ".$inhoud; $bericht = join($datasep, @bericht); if ($nummer >= @$refdata) { $refdata = [@$refdata, $bericht]; } else { $last = $nummer; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $lastniveau = $$refniveau[0]; while (($lastniveau >= $niveau) && ($last < @$refdata)) { $last++; $refniveau = &get (["niveau"], [$$refdata[$last]], $grammar, ""); $lastniveau = $$refniveau[0]; } $nummer = $last if ($last > $nummer); $refdata = [@$refdata[0..($nummer-1)], $bericht, @$refdata[($nummer)..(@$refdata-1)]]; } &save_data ($datafile, $refdata, $refcommenteddata, ""); open (MAIL, "|/usr/ucb/mail -s 'IUPAC Forum: nieuw bericht' ".$contentcheckers) || die "$!"; print MAIL &expand ($nummer+1, $refdata, $grammar); close (MAIL); } return $compleet; } --- NEW FILE: nieuwelijst.htpl --- <UL> --- NEW FILE: overigkop.htpl --- <LI><A HREF="@overiglink">@overiginhoud</A> (@overignaam) --- NEW FILE: overzicht.htpl --- <H2 ALIGN=Center>Alle vragen over en reacties op de WOC-IUPAC site</H2> <UL> Kies een van de onderstaande rubrieken om antwoorden op je vraag te zoeken of vragen, antwoorden of commentaar toe te voegen: <P> <UL> $overzicht </UL> </UL> <H3 ALIGN=CENTER> [ <A HREF="$nieuwevraaglink">Nieuwe vraag of reactie</A> ] [ <A HREF="$script">Rubrieken</A> ] </H3> --- NEW FILE: rubriek.htpl --- <A HREF="@rubrieklink"><FONT SIZE=+1><B>@subject</B></FONT></A> <I>(@numvraag vrg, @numant ant, @numcomm comm)</I> <P> @inhoud </P> --- NEW FILE: rubriekkop.htpl --- <P><FONT SIZE=+1><B>@rubrieksubject</B></FONT></P> --- NEW FILE: rubriektoc.htpl --- <H2 ALIGN=Center>$rubrieksubject</H2> <UL> $rubriekinhoud <P> <BR> Kies een van de onderstaande vragen of kies gelijk een van de antwoorden: $rubriektoc </UL> <BR> <H3 ALIGN=CENTER> [ <A HREF="$vraagtoevoeglink">Vraag of reactie toevoegen</A> ] [ <A HREF="$script">Rubrieken</A> ] </H3> --- NEW FILE: toevoegform.htpl --- <CENTER> <BR><H1>$header</H1> <FORM METHOD=POST ACTION="$script+voegtoe+$niveau+$nummer"> <INPUT TYPE=Hidden NAME="datum" VALUE="$datum"> <INPUT TYPE=Hidden NAME="tijd" VALUE="$tijd"> <TABLE> <TR> <TD>Naam:</TD> <TD><INPUT TYPE=Text NAME="naam" SIZE=50 VALUE="$naam"></TD> </TR> <TR> <TD>E-Mail:</TD> <TD><INPUT TYPE=Text NAME="email" SIZE=50 VALUE="$email"></TD> </TR> <TR> <TD>Subject:</TD> <TD><INPUT TYPE=Text NAME="subject" SIZE=50 VALUE="$subject"></TD> </TR> <TR> <TD>Bericht:</TD> <TD><TextAREA COLS=50 ROWS=8 NAME="inhoud">$inhoud</TextAREA></TD> </TR> </TABLE> <INPUT TYPE=Submit VALUE="Voeg toe"> <INPUT TYPE=Reset VALUE="Opnieuw"> </FORM> </CENTER> --- NEW FILE: vraagkop.htpl --- <P> <LI><A HREF="@vraaglink"><B>@vraaginhoud</B></A> (@vraagnaam) <P> |
From: Egon W. <eg...@us...> - 2002-08-02 15:37:18
|
Update of /cvsroot/woc/woc/cgi-bin/htplpdir/data In directory usw-pr-cvs1:/tmp/cvs-serv10119/htplpdir/data Added Files: htplp.dat htplp.grm Log Message: Added HTPLP dir (and a bit more). --- NEW FILE: htplp.dat --- smoel#Smoelenboek jarenoverzicht#$jarenoverzicht#@jaar, @aantal#gebruik @!jaar om waarde nogmaals te kunnen gebruiken smoel+$jaar#Smoelenboek namenoverzicht#$namenoverzicht### --- NEW FILE: htplp.grm --- volgorde: 5 argumenten omschrijving variabelen arrays commentaar verdeling: 4 1 0 2, 3 4 weergave: 4 omsc: args: vars: comm: |