diff --git a/html/program.html b/html/program.html new file mode 100644 index 00000000..6217a198 --- /dev/null +++ b/html/program.html @@ -0,0 +1,348 @@ + + +
++ + +Last modified: Wed Dec 23 18:27:06 GMT 1998 + +
By putting them in a specific place and calling them <command>.pl, they become + commands - in real time. Such is the magic of + perl. + +
/spider | the main directory |
/spider/data | where generated and/or reference data goes |
/spider/data/spots/<year>/<day>.dat | one day's worth of spots |
/spider/data/debug/<year>/<day>.dat | one day's worth of console debugging |
/spider/data/log/<year>/<month>.dat | one month's worth of Logging info including things like rcmd, announces, talks etc |
/spider/data/wwv/<year>/<month>.dat | one month's worth of WWV |
/spider/msg | the messages directory |
/spider/packclus/files | the files directory |
/spider/packclus/bulletin | the bulletins directory |
/spider/perl | where the issued program code lives |
/spider/local | where your experimental/site specific programs go |
/spider/cmd | where the issued command code lives |
/spider/local_cmd | where your experimental command code goes |
A command is put in full as a file under the 'cmd' directory tree, for example, + announce lives in /spider/cmd/announce.pl and show/dx lives + in /spider/cmd/show/dx.pl. + +
In general terms I don't like the habit of the standard packet cluster software has + of taking the DEC VMS command paradigm to the extreme that it has. So I have adopted + the convention of separating commands from arguments. So sh/dx/10 20 is input + on the DXSpider system as sh/dx 10 on 20m. This is rather contentious. + +
In order to maintain a larger level of compatibility, there is an Aliases which + lives in /spider/cmd (or can be overidden by one in local_cmd). This file + takes standard expressions, parses command lines and produces DXSpider compatible versions + of the old Packet Cluster commands. Currently, however, it doesn't do a 100% job because + the functionality of the new commands is different (and hopefully better). + +
In addition, in the /spider/perl directory (overidden by ...) there is + the Messages file. This is the file where all the system messages will be stored + (because of laziness on my part this isn't currently the case). You will see instances + of its use like $self->msg(<string> [,$arg..]). This call uses + $self to determine what language you are in, to return you the correct message. + The way arguments are passed to the routine, mean that you can reorder the arguments + in your message to suit your language without changing the actual code. + +
When you roll your own commands, put + your messages in your own copy of the Messages file and don't forget + to send me the patches for that as well the command itself. + +
When I issue a new version or patches for an existing version then only files in + the /spider/cmd and /spider/perl directories will normally be altered. + Occasionally, one or two of the reference files in /spider/data may be altered. + The only files likely to be affected are bands.pl and prefix_data.pl. + +
As it says in the next section, PLEASE experiment in the local directories! It will + save a lot of pain when patching code. Having said that, if you have been playing, then + remember to remove or rename any files with new releases that claim to have incorporated + your modifications, otherwise it will continue to use the old ones in your local + directories! + +
+ sub Emb_+ +($self, $args) + { + ... + your code here + ... + } +
+ my ($self, $line) = @_; + my @args = split /\s+/, $line; + my $call = $self->call; + my $user = $self->user; + my @out; + + # check privileges + return (1, $self->msg('e5')) if $self->priv < 5; + + .... + .... + some perl code here + .... + .... + return (1, @out); ++ +
0 - is the normal user privilege. +
1 - is the remote user privilage (you need to be at least 1 to get + any output from an rcmd). +
5 - is the normal external sysop privilege, give this to commands that + you are prepared to let non-local sysops use. +
8 - a very trusted, probably internet rather than radio connected + remote sysop. +
9 - the do anything console privilege. + +
The sysop privilege is for things that you are prepared for remote + sysops and clusters to do or see. + +
A console privilege can only be executed locally (at least if you have + correctly installed the client program in inetd or ax25d). + +
The set/priv command can only be executed by a console privileged + session. + +
What you do instead is create a list using +
+my @out; ++ and then push stuff onto it. Each element on the list will + become a line of output. For exmaple:- +
+# +# set a user's password +# +# Copyright (c) 1998 Iain Phillips G0RDI +# 21-Dec-1998 +# +# Syntax: set/pass <password> <callsign> +# + +my ($self, $line) = @_; +my @args = split /\s+/, $line; +my $call; +my $pass = shift @args; +my @out; +my $user; +my $ref; + +return (1, $self->msg('e5')) if $self->priv < 9; + +foreach $call (@args) { + $call = uc $call; + if ($ref = DXUser->get_current($call)) { + $ref->passwd($pass); + $ref->put(); + push @out, $self->msg("password", $call); + } else { + push @out, $self->msg('e3', 'User record for', $call); + } +} +return (1, @out); ++ a more complicated example:- +
+# +# display the band data +# +# Copyright (c) 1998 - Dirk Koopman G1TLH +# +# $Id$ +# + +#$DB::single = 1; + +my ($self, $line) = @_; +my @f = split /\s+/, $line; +my @bands; +my $band; +my @out; +my $i; + +if (!$line) { + @bands = sort { Bands::get($a)->band->[0] <=> Bands::get($b)->band->[0] } Bands::get_keys(); + push @out, "Bands Available:-"; + foreach $band (@bands) { + my $ref = Bands::get($band)->band; + my $s = sprintf "%10s: ", $band; + for ($i = 0; $i < $#{$ref}; $i += 2) { + my $from = $ref->[$i]; + my $to = $ref->[$i+1]; + $s .= ", " if $i; + $s .= "$from -> $to"; + } + push @out, $s; + } + push @out, "Regions Available:-"; + @bands = Bands::get_region_keys(); + foreach $band (@bands) { + my $ref = Bands::get_region($band); + my $s = sprintf("%10s: ", $band ) . join(' ', @{$ref}); + push @out, $s; + } +} + +return (1, @out) ++
+ set/qra jo02lq - sets your own locator to JO02LQ + set/qra g1tlh jo02lq - sets G1TLH's locator (if you are allowed) + or + show/qra in92jo - displays the bearing and distance to + IN92JO using your lat/long or locator + show/qra jn56in in92jo - bearing and distance between two + locators ++ +
+ perl -d cluster.pl + dbg> r ++ Then you can go into debug mode at anytime by using the command :- +
+ debug ++ or you can put the line:- +
+ $DB::single = 1; ++ in an appropriate place in a command. This will only have an effect + if you are running in perl debug mode. + +
If all else fails (actually it is very simple), just stick print + commands in everywhere and the output will appear on the cluster.pl + screen. + +
+
+
+
+ Copyright © 1998 by Dirk Koopman G1TLH. All Rights Reserved
+
+ $Id$
+
+