}
}
+@areas= split(/ /,'10.0.0.0/8 172.16.0.0/12 192.168.0.0/16');
+$rec_area= '172.16.0.0/12';
+
+$current_area= $rec_area;
+$view_area= '';
+$viewoverlap= '';
+
+$intro= 0;
+$registernew= 0;
+$pick= 0;
+$details= 0;
+$fulldetails= 0;
+$created= 0;
+$updated= 0;
+$picked= 0;
+$viewingall= 0;
+$view= 1;
+$notfound= 0;
+$id= '';
+$name= '';
+$email= '';
+$emailhidechecked= 0;
+$hiddenemail= 0;
+$viewingarea= length $view_area;
+$viewingoverlap= length $viewoverlap;
+
if ($in{'dbid'}) {
database();
- $id= $in{$dbid};
+ $id= $in{'dbid'};
if (!exists $db{$id}) {
- $notfound= 1;
- } else {
+ $notfound= 1;
+ $view= 0;
+ } else {
$details= 1;
getinfo();
}
} else {
$intro= 1;
+ $registernew= 1;
+ $pick= 1;
}
open X, "template.html" or die $!;
$#x--;
$cl= 0;
+$level= -1;
process(1);
+close STDOUT or die $!;
+
+sub out ($) {
+ print $_[0],"\n" or die $!;
+}
+
sub process ($) {
my ($doing) = @_;
+ my ($bcl);
+ $level++;
for (;;) {
return if $cl > $#x;
$_= $x[$cl++];
s/\n$//; s/\s*$//;
- return if m/^\@\@\@end\w+\:\@\@\@$/;
+# out("<!-- $level $doing $_ -->");
+ last if m/^\@\@\@end\w+\:\@\@\@$/;
- if (m/^\@\@\@(if|ifnot):(\w+)\@\@\@$/) {
- $v= $$2;
- $do= $1 eq 'if' ? !!$v : !$v;
+ if (m/^\@\@\@(if|ifnot):([0-9a-z_|]+)\@\@\@$/) {
+ $q=$1; $v=$2;
+ $do= 0;
+ if ($doing) {
+ map { $do=1 if getvar($_); } split(/\|/,$v);
+ $do= !$do if $q eq 'ifnot';
+# out("<!-- $level $doing $do $q $v $_ -->");
+ }
process($doing && $do);
- } elsif (m/^\@\@\@foreach\:
+ } elsif (m/^\@\@\@foreach\:(area|db)\@\@\@$/) {
+ if ($doing) {
+ $bcl= $cl;
+ for (&{"foreach_start_$1"};
+ &{"foreach_cond_$1"};
+ &{"foreach_incr_$1"}) {
+ &{"foreach_setvars_$1"};
+ process($doing);
+ $cl= $bcl;
+ }
+ }
+ process(0);
+ } elsif (m/\S/) {
+ if ($doing) {
+ s/\@\@\@(\w+)\@\@\@/ getvar("$1") /ge;
+ out($_);
} else {
-
- $do= $1 eq 'if' ? ${$2} : $$
- $ifnot= $1;
- $v= eval $2;
-
- while ($i < $e) {
-
-
-$i= process(0,$#x);
+ s/\@\@\@\w+\@\@\@//g;
+ }
+ die "$cl:unknown $_\n" if m/\@\@\@/;
+ }
+ }
+ $level--;
+}
+
+sub getvar ($) {
+ my ($vn) = @_;
+ defined $$vn or die "$cl:undefined $vn\n$out";
+ return $$vn;
+}
+
+sub foreach_start_area { $area_i=0; }
+sub foreach_cond_area { return $area_i < @areas; }
+sub foreach_incr_area { $area_i++; }
+sub foreach_setvars_area {
+ $area= $areas[$area_i];
+ $area_recommended= $area eq $rec_area;
+ $area_pickchecked= $area eq $current_area ? 'checked' : '';
+ $area_viewing= $area eq $viewing_area;
+ out("<!-- setvars_area @areas $area_i $area -->");
+}
+
+sub foreach_start_db { }
+sub foreach_cond_db { 0; }
+sub foreach_setvars_db { }
+sub foreach_incr_db { }
$whose= "Cambridge Geeks'";
-$adminemail= ;ijackson+cam-bcp5@chiark.greenend.org.uk';
+$adminemail= 'ijackson+cam-bcp5@chiark.greenend.org.uk';
+$nameboxlen= 55;
+$emailboxlen= 55;
+$cgi= 'http://www.chiark.greenend.org.uk/ucgi/~ijackson/bcp5-registry';
--- /dev/null
+#
+
+sub database () { }
+
+1;
@@@if:picked@@@
@@@net@@@ picked
-@@@endif
+@@@endif:@@@
@@@if:details@@@
details of @@@name@@@
@@@if:details|fulldetails@@@
<h2>Entry details</h2>
-@@@endif
+@@@endif:@@@
@@@if:created@@@
<h2>Entry created</h2>
<br>
Network name:
-<input type=text name="name" size=70 value="@@@name@@@"><br>
+<input type=text name="name" size="@@@nameboxlen@@@" value="@@@name@@@"><br>
-@@@if:showemail@@@
+@@@ifnot:hiddenemail@@@
Contact email address:
@@@endif:@@@
-@@@ifnot:showemail@@@
+@@@if:hiddenemail@@@
Contact email address hidden.
New address:
@@@endif:@@@
-<input type=text name="email" size="70" value="@@@email@@@">
+<input type=text name="email" size="@@@emailboxlen@@@" value="@@@email@@@">
<br>
<input type=checkbox name="hide" value="yes" @@@emailhidechecked@@@>
Hide email address from public database.
-<p>
-
@@@if:registernew|picked@@@
<input type=submit name="register" value="Register">
@@@endif:@@@
@@@if:details|fulldetails|created|updated@@@
+<p>
+
Entry created: @@@datecreated@@@<br>
Last update: @@@datechanged@@@<br>
Confirmed/renewed: @@@dateconfirmed@@@
@@@endif:@@@
@@@if:details@@@
+<p>
+
Use this to obtain your password. Passwords expire after a while; if
you do not have a recent notification of your password, you should
request a current password: <br>
@@@foreach:area@@@
-<input type=radio name=from value="@@@area_string@@@" @@@area_pickchecked@@@>
-@@@area_string@@@
+<input type=radio name=from value="@@@area@@@" @@@area_pickchecked@@@>
+@@@area@@@
@@@if:area_recommended@@@
<em>recommended</em>
-@@@endif
+@@@endif:@@@
<br>
-@@@endforeach@@@
+@@@endforeach:@@@
@@@ifnot:picked@@@
<input type=submit name="pick" value="Pick network">
</form>
-@@@endif@@@
+@@@endif:@@@
@@@if:notfound@@@
@@@endif:@@@
-@@@ifnot:notfound@@@
+@@@if:view@@@
<h2>View database</h2>
-<form>
+<form method="GET" action="@@@cgi@@@">
@@@ifnot:viewingall@@@
<input type=submit name="viewall" value="Entire database">
-<p>
@@@endif:@@@
@@@foreach:area@@@
@@@ifnot:area_viewing@@@
-<input type=submit name="viewarea" value="@@@area_string@@@">
+<input type=submit name="viewarea" value="@@@area@@@">
@@@endif:@@@
@@@if:area_viewing@@@
-@@@area_string@@@
+@@@area@@@
@@@endif:@@@
-<p>
+<br>
@@@endforeach:@@@
@@@endif:@@@
-
+@@@if:view@@@
<h3>Entries overlapping with</h3>
<input type=text name="with" value="@@@viewoverlap@@@" size="30">
<input type=submit name="viewoverlap" value="Search">
</form>
+@@@endif:@@@
@@@if:viewingall|viewingoverlap|viewingarea@@@
@@@endif:@@@
@@@if:viewingarea@@@
Database for entries allocated from @@@viewarea@@@
-@@@
+@@@endif:@@@
</h3>
@@@if:picked@@@
You can get details about an existing entry by clicking on its address
range; this can also be used to modify it.
-@@@endif:@@@
-
<table>
<tr><td>Range <td>Name <td>Contact email
</tr><br>