Intial commit
This commit is contained in:
1
prospero/doc/.virt-sys
Normal file
1
prospero/doc/.virt-sys
Normal file
@@ -0,0 +1 @@
|
||||
PROSPERO.ISI.EDU /pfs/pfsdat/guest/local_vsystems/guest/VS-DESCRIPTION
|
||||
47
prospero/doc/ARCHIE.README
Normal file
47
prospero/doc/ARCHIE.README
Normal file
@@ -0,0 +1,47 @@
|
||||
This release of Prospero includes a standalone client to query archie
|
||||
servers at various sites. It is standalone in the sense that, once
|
||||
compiled, it does not require Prospero to be installed on the host
|
||||
from which it is to be used. To build the archie client, first build
|
||||
Prospero (either with or without the compatibility library), then
|
||||
connect to the user subdirectory and type make archie. If called with
|
||||
just a file name, it will query the archie database for exact matches.
|
||||
If executed with no arguments it will display its options.
|
||||
|
||||
A manual page for this client can be found in the doc/man subdirectory,
|
||||
as archie.man.
|
||||
|
||||
Prospero also allows users to access archie as if it were part of a
|
||||
file system. Here is an example of how Prospero can be used to access
|
||||
Archie in this manner.
|
||||
|
||||
Script started on Mon Jul 1 22:36:42 1991
|
||||
% source /home/ftp/archie/pfs/bin/vfsetup.source
|
||||
% vfsetup guest
|
||||
% venable
|
||||
% cd /databases/archie/sura/substr
|
||||
% cd prospero (This command specifies the query)
|
||||
% ls -l
|
||||
total 0
|
||||
-r--r--r-- 0 - 0 - info-prospero.arc
|
||||
dr-xr-xr-x 0 - 0 - prospero
|
||||
dr-xr-xr-x 0 - 0 - prospero-papers
|
||||
-r--r--r-- 0 - 0 - prospero.arc
|
||||
-r--r--r-- 0 - 0 - prospero.tar.Z
|
||||
(Note that the "vls" command could have been used)
|
||||
(to show where the files were actually stored )
|
||||
% ls prospero (list a result if it is a directory)
|
||||
prog.tar.Z prospero.tar.Z
|
||||
% cat info-prospero.arc (The file is automatically retrieved and displayed)
|
||||
>From bcn@n1dmm Tue Dec 4 02:33:36 1990
|
||||
Received: from n1dmm.cs.washington.edu by june.cs.washington.edu (5.64/7.0jh)
|
||||
id AA24763; Tue, 4 Dec 90 02:33:36 -0800
|
||||
Received: by n1dmm.cs.washington.edu (5.64/7.0h)
|
||||
id AA08497; Tue, 4 Dec 90 02:33:31 -0800
|
||||
Date: Tue, 4 Dec 90 02:33:31 -0800
|
||||
From: bcn@cs.washington.edu (Clifford Neuman)
|
||||
...
|
||||
% vdisable
|
||||
% exit
|
||||
script done on Mon Jul 1 22:39:33 1991
|
||||
|
||||
|
||||
29
prospero/doc/FILES
Normal file
29
prospero/doc/FILES
Normal file
@@ -0,0 +1,29 @@
|
||||
.virt-sys
|
||||
ARCHIE.README
|
||||
FILES
|
||||
README
|
||||
README-prospero-documents
|
||||
customize.insts
|
||||
dangerous
|
||||
fullpage.sty
|
||||
getting-started.txt
|
||||
include-native.txt
|
||||
library.PS
|
||||
library.tex
|
||||
man
|
||||
manual.PS
|
||||
manual.tex
|
||||
menu-api.PS
|
||||
menu-api.tex
|
||||
more-getting-started.PS
|
||||
more-getting-started.tex
|
||||
names.txt
|
||||
nir.status.report
|
||||
protocol.PS
|
||||
protocol.tex
|
||||
rationales
|
||||
system_calls
|
||||
v.beta51.announcement
|
||||
v5.announcement
|
||||
v52.gopher.ann
|
||||
working-notes
|
||||
43
prospero/doc/README
Normal file
43
prospero/doc/README
Normal file
@@ -0,0 +1,43 @@
|
||||
First, please note that the documentation files in this directory do not
|
||||
fully reflect Prospero version 5. Due to the demand for Prospero
|
||||
version 5, we have decided to ship this Alpha release before we fully
|
||||
update the documentation.
|
||||
|
||||
getting-started.txt: How to get started using prospero.
|
||||
|
||||
ARCHIE.README: Description of how to compile the ARCHIE client and how
|
||||
to use ARCHIE through Prospero.
|
||||
|
||||
man/archie.man: Manual page for the Archie client we provide.
|
||||
|
||||
.virt-sys: A .virt-sys file you can put in your home directory to use
|
||||
the guest virtual system at PROSPERO.ISI.EDU
|
||||
|
||||
customize.insts: Instructions for customizing your virtual system.
|
||||
|
||||
manual.tex, manual.PS: The Prospero user's manual. This hasn't been
|
||||
updated much since version 4.
|
||||
|
||||
library.tex, library.PS: Prospero library manual. This documents some
|
||||
of the calls to the Prospero PFS and PCOMPAT libraries. It's out of
|
||||
date and sketchy.
|
||||
|
||||
protocol.tex, protocol.PS: Describes version 5 of the Prospero
|
||||
protocol. This is almost completely up to date.
|
||||
|
||||
We provide the LaTeX source for the three manuals, as well as
|
||||
Postscript output files that you can just dump on your laser printer.
|
||||
|
||||
The following files are auxiliary LaTeX files you'll need if you're
|
||||
running LaTeX. They're included or otherwise used by the .tex files:
|
||||
|
||||
rkrcite.sty, fullpage.sty
|
||||
|
||||
README-prospero-documents: contains a bibliography of prospero documents.
|
||||
|
||||
The subdirectory 'working-notes' contains some working notes on
|
||||
concepts we firmed up while developing the menu browser. These will
|
||||
eventually make their way into more formal reference documents;
|
||||
however, we felt it would be better to release them now in this state
|
||||
rather than hoard them until they are in final form.
|
||||
|
||||
280
prospero/doc/README-prospero-documents
Normal file
280
prospero/doc/README-prospero-documents
Normal file
@@ -0,0 +1,280 @@
|
||||
This file (README-prospero-documents, version of 30 November 1993,
|
||||
swa@isi.edu) describes the publicly available documents about the
|
||||
Prospero Directory Service. For comments on this file or questions
|
||||
about prospero, please send electronic mail to info-prospero@ISI.EDU
|
||||
|
||||
These files are all available through Prospero. If you're not running
|
||||
Prospero yet, they're also available via anonymous FTP from
|
||||
PROSPERO.ISI.EDU.
|
||||
|
||||
Some of the documents mentioned below this point in this file are
|
||||
marked with the label DISTRIBUTION and are additionally available in
|
||||
the doc subdirectory of the latest Beta and Alpha Prospero releases
|
||||
(releases Beta.5.1 and Alpha.5.2a). A good way to obtain the Prospero
|
||||
distribution, if you're not running Prospero yet, is to anonymously
|
||||
FTP to PROSPERO.ISI.EDU and get /pub/prospero/prospero.tar.Z. If you
|
||||
are already running Prospero, the lastest distribution is kept in
|
||||
/releases/prospero/prospero.tar.Z.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/prospero-oir.ps.Z
|
||||
Anonymous FTP: /pub/papers/prospero/prospero-oir.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@ARTICLE{oir,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "Prospero: A Tool for Organizing {I}nternet Resources",
|
||||
JOURNAL = "Electronic Networking: Research, Applications and Policy",
|
||||
MONTH = "Spring",
|
||||
YEAR = 1992,
|
||||
VOLUME = 2,
|
||||
NUMBER = 1}
|
||||
|
||||
This is a useful first paper to read. It gives a good overview of
|
||||
Prospero and what it does. It also describes a bit about the Virtual
|
||||
System model, of which Prospero is a prototype implementation. It
|
||||
describes what Prospero does, not how it does it.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/papers/prospero-ITR-Neuman-interview.au
|
||||
Anonymous FTP: /pub/papers/prospero/prospero-ITR-Neuman-interview.au
|
||||
|
||||
This is an audio transcript of an November 17, 1993 interview on the
|
||||
Internet Talk Radio "Geek of the Week" program. The description:
|
||||
|
||||
Carl Malamud interviews Clifford Neuman, instrumental in the
|
||||
development of Internet protocols such as Kerberos and Prospero.
|
||||
Neuman discusses what Prospero is and how this miracle system can
|
||||
be anything you want it to be. Neuman also discusses his work
|
||||
in security and how that relates to his recent interests in resource
|
||||
discovery.
|
||||
|
||||
|
||||
It is 30 minutes long and is a good thing to listen to for the
|
||||
philosophy behind the Prospero virtual system model.
|
||||
|
||||
overview of how Prospero does what it does.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/prospero-bii.ps.Z
|
||||
Anonymous FTP: /pub/papers/prospero/prospero-bii.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@INPROCEEDINGS{prosperobii,
|
||||
AUTHOR = "Neuman, B. Clifford and Augart, Steven Seger",
|
||||
TITLE = "Prospero: A Base for Building Information Infrastructure",
|
||||
BOOKTITLE = "Proceedings of INET'93",
|
||||
YEAR = 1993,
|
||||
MONTH = "August"}
|
||||
|
||||
This paper describes how Prospero can be used to integrate internet
|
||||
information services, including Gopher, WAIS, Archie, and World Wide
|
||||
Web. It is another good first paper to read about Prospero. The paper will
|
||||
be presented at INET'93 in August.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/prospero-gfsvsm.ps.Z
|
||||
Anonymous FTP: /pub/papers/prospero/prospero-gfsvsm.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@ARTICLE{gfsvsm,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "The {P}rospero {F}ile {S}ystem: A Global File System
|
||||
based on the {V}irtual {S}ystem {M}odel",
|
||||
JOURNAL = "Computing Systems",
|
||||
VOLUME = 5,
|
||||
NUMBER = 4,
|
||||
YEAR = 1992,
|
||||
MONTH = "Fall"}
|
||||
|
||||
This is a good second paper to read about Prospero. This one is
|
||||
targeted more toward system implementors. It provides more
|
||||
implementation details than the paper on organizing Internet
|
||||
resources, but less of the vision of how Prospero can be used together
|
||||
with other systems. Note: the online copy is the paper presented at
|
||||
the Workshop on File System. A slightly revised version of the paper
|
||||
which subsequently appeared in Computing Systems and Computing Systems is
|
||||
the preferred citation.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/prospero-smlic.ps.Z
|
||||
Anonymous FTP: /pub/papers/prospero/prospero-smlic.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@INPROCEEDINGS{prosperosmlic,
|
||||
AUTHOR = "Neuman, B. Clifford and Augart, Steven Seger and
|
||||
Upasani, Shantaprasad",
|
||||
TITLE = "Using Prospero to Support Integrated
|
||||
Location-Independent Computing",
|
||||
BOOKTITLE = "Proceedings of the Usenix Symposium on Mobile and
|
||||
Location-Independent Computing",
|
||||
YEAR = 1993,
|
||||
MONTH = "August",
|
||||
PAGES = "29--34"}
|
||||
|
||||
This paper describes how the Prospero Directory Service can be used to
|
||||
solve the server selection problem and the user location problem. The
|
||||
paper was presented in August, 1993, at the Usenix Symposium on Mobile
|
||||
and Location-Independent Computing.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/UW-CS-89-01-07.PS.Z
|
||||
Anonymous FTP: /pub/papers/prospero/UW-CS-89-01-07.PS.Z
|
||||
(POSTSCRIPT)
|
||||
@TECHREPORT{vsmldos,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "The {V}irtual {S}ystem {M}odel for Large Distributed
|
||||
Operating Systems",
|
||||
INSTITUTION = "Department of Computer Science, University of Washington",
|
||||
YEAR = 1989,
|
||||
MONTH = "April",
|
||||
NUMBER = "89-01-07"}
|
||||
|
||||
This describes the initial vision for the Virtual System Model, the
|
||||
model on which Prospero is based. Much of the material in this paper
|
||||
appears in greater detail in other papers.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/UW-CSE-90-05-01.PS.Z
|
||||
Anonymous FTP: /pub/papers/prospero/UW-CSE-90-05-01.PS.Z
|
||||
(POSTSCRIPT)
|
||||
@TECHREPORT{vsmtp,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "The {V}irtual {S}ystem {M}odel: A Scalable Approach to
|
||||
Organizing Large Systems (A Thesis Proposal)",
|
||||
INSTITUTION = "Department of Computer Science and Engineering,
|
||||
University of Washington",
|
||||
YEAR = 1990,
|
||||
MONTH = "May",
|
||||
NUMBER = "90-05-01"}
|
||||
|
||||
For a long time this was the best description of Prospero, but all the
|
||||
information in this document appears in more recent papers and the
|
||||
dissertation itself.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/prospero-closure.ps.Z
|
||||
Anonymous FTP: /pub/papers/prospero/prospero-closure.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@ARTICLE{nfclosure,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "The Need for Closure in Large Distributed Systems",
|
||||
JOURNAL = "Operating Systems Review",
|
||||
MONTH = "October",
|
||||
YEAR = 1989,
|
||||
VOLUME = 23,
|
||||
NUMBER = 4,
|
||||
PAGES = "28--30"}
|
||||
|
||||
This paper describes the reasons that operating systems need to
|
||||
support closure, that is they need to make it clear which name space
|
||||
is to be used when resolving names. While closure is one of the
|
||||
important features of Prospero, the concept should be applied in other
|
||||
operating systems too.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/prospero-wsvsm.ps.Z
|
||||
Anonymous FTP: /pub/papers/prospero/prospero-wsvsm.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@INPROCEEDINGS{wsvsm,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "Workstations and the {V}irtual {S}ystem {M}odel",
|
||||
BOOKTITLE = "Proceedings of the 2nd IEEE Workshop on
|
||||
Workstation Operating Systems",
|
||||
YEAR = 1989,
|
||||
MONTH = "September",
|
||||
PAGES = "91--95",
|
||||
NOTE = "Also appears in the {\it Newsletter of the IEEE Technical
|
||||
Committee on Operating Systems}, Volume 3, Number 3,
|
||||
Fall 1989. Available as University of Washington Department
|
||||
of Computer Science and Engineering Technical Report
|
||||
89-10-10"}
|
||||
|
||||
Describes the role of the workstation in a system based on the Virtual
|
||||
System Model. Also provides an early description of Prospero.
|
||||
|
||||
Prospero:
|
||||
/papers/subjects/computers/operating-systems/prospero/prospero-neuman-thesis.ps.Z
|
||||
Anonymous FTP: /pub/papers/prospero/prospero-neuman-thesis.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@PHDTHESIS{phdneuman,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "The {V}irtual {S}ystem {M}odel: A Scalable Approach to
|
||||
Organizing Large Systems",
|
||||
SCHOOL = "University of Washington",
|
||||
MONTH = "June",
|
||||
YEAR = 1992,
|
||||
NOTE = "Department of Computer Science and Engineering
|
||||
Technical Report 92-06-04"}
|
||||
|
||||
This is Clifford Neuman's Ph.D. Dissertation. It is currently the
|
||||
definitive work on Prospero and the Virtual System Model. The
|
||||
prospero manuals that form its appendices have been superseded by
|
||||
those described below.
|
||||
|
||||
Prospero:
|
||||
/papers/subjects/computers/operating-systems/prospero/doc/prospero-protocol-v5.PS.Z
|
||||
Anonymous FTP: /pub/prospero/doc/prospero-protocol-v5.PS.Z
|
||||
DISTRIBUTION: protocol.PS, protocol.tex
|
||||
(POSTSCRIPT or LaTeX)
|
||||
This is a description of version 5 of the Prospero protocol
|
||||
and of the Reliable Delivery Protocol that we use. It includes lots
|
||||
of information that was elided in the version 1 protocol
|
||||
specification. It also has a lot of information in it about how the
|
||||
system works. The LaTeX source is available as
|
||||
prospero-protocol-v5.tex.Z.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/doc/prospero-protocol-v1.PS.Z
|
||||
Anonymous FTP: /pub/prospero/doc/prospero-protocol-v1.PS.Z
|
||||
(POSTSCRIPT)
|
||||
This is a description of version 1 of the Prospero protocol.
|
||||
(It's identical to appendices D and E of B. Clifford Neuman's Ph.D.
|
||||
Dissertation.) It is now obsoleted by version 5 protocol. However,
|
||||
we are still making it available since a number of older servers are running
|
||||
version 1 protocol, and since most of the current ARCHIE clients use the
|
||||
older Version 1 protocol.
|
||||
|
||||
Prospero:
|
||||
/papers/subjects/computers/operating-systems/prospero/doc/prospero-user-manual.PS.Z
|
||||
Anonymous FTP: /pub/prospero/doc/prospero-user-manual.PS.Z
|
||||
DISTRIBUTION: manual.PS, manual.tex
|
||||
(POSTSCRIPT or LaTeX)
|
||||
This is the Prospero User's manual. It is slightly out of
|
||||
date, and we'll be revising it shortly. Latex source in the
|
||||
corresponding .tex file.
|
||||
|
||||
Prospero:
|
||||
/papers/subjects/computers/operating-systems/prospero/doc/prospero-library.PS.Z
|
||||
Anonymous FTP: /pub/prospero/doc/prospero-library.PS.Z
|
||||
DISTRIBUTION: library.PS, library.tex
|
||||
(POSTSCRIPT, LaTeX)
|
||||
Prospero library manual. Somewhat sketchy and not
|
||||
comprehensive, but far better than nothing. This is mainly useful for
|
||||
applications writers. This is slowly being updated. Latex source in
|
||||
the corresponding .tex file.
|
||||
|
||||
|
||||
Prospero: /papers/subjects/computers/security/issues.ps.Z
|
||||
Anonymous FTP: /pub/papers/psfos.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@INPROCEEDINGS{psfos,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "Protection and Security Issues for Future Systems",
|
||||
BOOKTITLE = "Proceedings of the Workshop on Operating Systems of the
|
||||
90s and Beyond",
|
||||
PUBLISHER = "Springer-Verlag",
|
||||
YEAR = 1991,
|
||||
MONTH = "July",
|
||||
PAGES = "184--201",
|
||||
NOTE = "Lecture Notes in Computer Science #563",}
|
||||
Not Prospero-specific. Describes some of the security issues which
|
||||
underlay the development of Prospero's (optional) access control system.
|
||||
|
||||
Prospero: /papers/subjects/computers/distributed-systems/scale.ps.Z
|
||||
Anonymous FTP: /pub/papers/scale.ps.Z
|
||||
(POSTSCRIPT)
|
||||
@INCOLLECTION{sds,
|
||||
AUTHOR = "Neuman, B. Clifford",
|
||||
TITLE = "Scale in Distributed Systems",
|
||||
BOOKTITLE = "Readings in Distributed Computing Systems",
|
||||
PUBLISHER = "IEEE Computer Society Press",
|
||||
YEAR = 1992}
|
||||
This is not really Prospero-specific, but it addresses general issues
|
||||
of scale in distributed systems. It discusses Prospero among other
|
||||
systems, and mentions a number of the issues that are driving the
|
||||
development of Prospero.
|
||||
|
||||
Prospero: /papers/subjects/computers/operating-systems/prospero/README-prospero-documents
|
||||
Anonymous FTP: /pub/papers/prospero/README-prospero-documents
|
||||
(ASCII)
|
||||
This file.
|
||||
|
||||
|
||||
Virtual-System-Name: #/INET/EDU/ISI/swa
|
||||
34
prospero/doc/customize.insts
Normal file
34
prospero/doc/customize.insts
Normal file
@@ -0,0 +1,34 @@
|
||||
Customization instructions
|
||||
|
||||
Connect to the lowest directory in the path that is already
|
||||
customized. One way to check whether a directory is customized is to
|
||||
use the vwp command while connected to the directory. If one of the
|
||||
components in the physical name for the directory includes the the
|
||||
name of your virtual system it is probably a customized view. Let
|
||||
'thisdir' be the name of the current directory and 'subdir' the name
|
||||
of the subdirectory that is to be customized. Do a vls -u to find out
|
||||
the name of the union link for the uncustomized version of the current
|
||||
directory. The subdirectory to be customized should not show up in
|
||||
this list*. For the purpose of this example, pretend that the union
|
||||
linked directory is named 'usprot'. Execute the following commands:
|
||||
|
||||
vmkdir subdir
|
||||
vcd -u usprot
|
||||
vln -u subdir ../thisdir/subdir/usprot
|
||||
|
||||
That should do it. Do a vcd ../thisdir/subdir followed by a vls -u
|
||||
and a vls to make sure things worked. You can now use vln to add
|
||||
links to your customized copy of the current directory. Use vln's
|
||||
"-c" (customize) option to make sure that vln does not think that the
|
||||
uncustomized target of the link is the directory in which the new link
|
||||
is to be added.
|
||||
|
||||
If you are trying to customize a directory deep in the hierarchy, each
|
||||
directory in the path from the root must be customized though it is
|
||||
expected that those in the higher levels of the hierarchy might have
|
||||
already been taken care of (when you customized other directories
|
||||
sharing a common prefix).
|
||||
|
||||
* : The subdirectory to be customized would be in the union
|
||||
linked directory, if you see the subdirectory in the current directory
|
||||
when you do the vls -u, then a different procedure must be followed.
|
||||
70
prospero/doc/dangerous
Normal file
70
prospero/doc/dangerous
Normal file
@@ -0,0 +1,70 @@
|
||||
As always .... this code contains all kind of bad practices, or at least
|
||||
things that I think are bad practices. On the prinicple of ... "If it
|
||||
aint broke, dont fix it" they shouldnt neccessarily get changed now.
|
||||
But here are some things to watch for and/or change as you encounter them!
|
||||
|
||||
Please feel free to add bad practices from my code to here :-) Mitra
|
||||
|
||||
General bad principles:
|
||||
------------------------
|
||||
|
||||
Declaring external functions explicitly, rather than via header files.
|
||||
This causes problems when definitions change, since the linker wont spot
|
||||
the errors. - Mitra
|
||||
|
||||
Ditto for global variables such as errno (see below) - Mitra
|
||||
|
||||
Defining standard functions that dont appear on your implementation
|
||||
without ifdef's or comments. Few, if any, linkers will spot the
|
||||
redefinition, and coders will tear their hair out trying to figure out
|
||||
why the system routine is behaving the way the man page says.
|
||||
(e.g. syserrstr) - Mitra
|
||||
|
||||
Using #define's where enums could be used - this produces identical code,
|
||||
but some compilers produce warnings when enums are used inappropriately,
|
||||
and most debuggers (e.g. gdb) can produce symbols rather than numbers.
|
||||
- Mitra
|
||||
|
||||
It would be good to split pmachine.h up, Some of it is
|
||||
obvious machine dependant stuff, other stuff is fixes for broken (or
|
||||
at least bent) header files on some systems. These could usefully
|
||||
be in seperate files, removing the dependancy on pmachine.h for many
|
||||
files, and removing the requirement to include all the corrected
|
||||
header files for every file needing any one of them. - Mitra
|
||||
|
||||
Notes from changes which probably couldnt have been forseen.
|
||||
-----------------------------------------------------------
|
||||
error strings:
|
||||
errno is a macro on Solaris, however it was declared as an "extern int"
|
||||
all over the place
|
||||
|
||||
Standards
|
||||
----------
|
||||
These are some ideas for how we could help integrate Prospero into a standards based environment,.
|
||||
|
||||
URL's:
|
||||
|
||||
Our access methods are basically URL's and we already handle more than
|
||||
one per link. It might be good to bring them more fully into line with the URL standard, either by ensuring we keep exactly the same peices of ingformation on each type of URL, or even better to use the URL string exactly.
|
||||
I'm not sure how we would transition to this gracefully, maybe by adding a new URL attribute?
|
||||
|
||||
URN's: These arent really standard enough for us to track yet, but its
|
||||
worth considering, especially since we have things like Magic No's
|
||||
which perform some of the same functions.
|
||||
|
||||
|
||||
Gateways: The current way we do gateways leaves a lot to be
|
||||
desired. In particular, the name of the object is something like
|
||||
GOPHER-GW//xxx.yyy/11/fred NOT red.path.net/gopher-gw/xxx.yyy/11/fred
|
||||
which is how we access it. The challenge is to allow the client to
|
||||
use the most appropriate gateway, while allowing hte clients to remain
|
||||
simple . One alternative is to register a subdomain for gateways, and
|
||||
allow either the client, or the client's local DNBS to override the
|
||||
address with a more appropriate gateway.
|
||||
|
||||
Types: OBJECT-ITNERPRETATION is almost but not quite Mime types, or as
|
||||
they are now called iana-types, we should seriously consider migrating
|
||||
entirely over to these, as gopher has done, and wais is going
|
||||
to. There are far to many flakey translations going on through
|
||||
gateways!
|
||||
|
||||
10
prospero/doc/fullpage.sty
Normal file
10
prospero/doc/fullpage.sty
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
\marginparwidth 0pt
|
||||
\oddsidemargin 0pt
|
||||
\evensidemargin 0pt
|
||||
\marginparsep 0pt
|
||||
|
||||
\topmargin 0pt
|
||||
|
||||
\textwidth 6.5in
|
||||
\textheight 8.5 in
|
||||
58
prospero/doc/getting-started.txt
Normal file
58
prospero/doc/getting-started.txt
Normal file
@@ -0,0 +1,58 @@
|
||||
Instructions for getting started as a Prospero user
|
||||
|
||||
Find the directory in which the Prospero binaries are installed.
|
||||
|
||||
Source the file vfsetup.source in this directory. You may want to
|
||||
source this file from your .cshrc.
|
||||
|
||||
To configure your virtual system, use the vfsetup alias (it is defined
|
||||
by vfsetup.source). Specify the name of the virtual system to be
|
||||
configured as an argument. If you are just playing around, use the
|
||||
virtual system: guest. The command would be "vfsetup guest".
|
||||
|
||||
Use vcd and vwd to move around the virtual system, and vls to see what
|
||||
is there. These commands will allow you to explore. Since you may
|
||||
start from an empty subdirectory, be sure to look above (..), or in
|
||||
the root directory (/). A quick summary of the commands that are
|
||||
available follows.
|
||||
|
||||
vfsetup [-n host path , [-r,v] name , -f file]
|
||||
Sets up virtual system
|
||||
Example: vfsetup guest
|
||||
|
||||
vcd [-u] path
|
||||
Change directory
|
||||
Example: vcd /papers/subjects/naming/prospero
|
||||
|
||||
vwd
|
||||
Print current virtual working directory
|
||||
|
||||
vls [-a, -A, -c, -f, -u, -v] [path]
|
||||
List directory
|
||||
Example: vls /
|
||||
|
||||
vln [-u] [-s] [-e] [-n host] oldname newname
|
||||
Add a link
|
||||
Example: vln /papers /guest/articles
|
||||
|
||||
vmkdir directory
|
||||
Make a new virtual directory
|
||||
|
||||
vrm link
|
||||
Remove a link
|
||||
|
||||
vget virtual-file [local-file]
|
||||
Retrieve a file using anonymous FTP
|
||||
Example: vget getting-started.txt these-instructions
|
||||
|
||||
To have your own virtual system created, send a message to
|
||||
pfs-administrator@isi.edu. With your own virtual system, you will be
|
||||
able to keep track of the files that you have found. More details on
|
||||
the use of Prospero may be found in the Prospero users manual.
|
||||
|
||||
The information available through Prospero is growing. If you can't
|
||||
find what you are looking for initially, it might appear at a later
|
||||
date. You can help by adding information. Once you have organized
|
||||
information in your own virtual system, send a message to
|
||||
pfs-administrator to have it added to the prototype virtual system.
|
||||
|
||||
194
prospero/doc/include-native.txt
Normal file
194
prospero/doc/include-native.txt
Normal file
@@ -0,0 +1,194 @@
|
||||
This file documents the handling of native directories under Prospero.
|
||||
This is not a presentation of an ideal design, but describes the
|
||||
current status and behavior of the code. Suggestions for improvement
|
||||
of the code are welcome, though we can't do much about them until
|
||||
mid-November at the earliest.
|
||||
|
||||
This is a first draft, dated 11/3/93.
|
||||
|
||||
This will become part of the user's manual.
|
||||
|
||||
Directories under Prospero have an attribute associated with them
|
||||
called INCLUDE-NATIVE. Until the full Alpha.5.3 release is out using
|
||||
the new unified Prospero database format, this attribute cannot be set
|
||||
or read via the Prospero protocol. You can look at it by examining
|
||||
the server's data files in /usr/pfs/shadow (or the equivalent) on your
|
||||
system, and change it by manually modifying those files -- not a very
|
||||
nice solution, but a temporary kludge.
|
||||
|
||||
The values you'll see for it are:
|
||||
|
||||
NONATIVE -- this is always true for directories under
|
||||
/usr/pfs/pfsdat (see the Data: line in the status report returned by
|
||||
'pstatus' for the equivalent on your server). This means that all
|
||||
links in the directory are virtual Prospero links.
|
||||
|
||||
INCLREAL -- this is the default for directories you've said
|
||||
Prospero can access but which aren't under the Data: area. This
|
||||
includes AFS directories, directories under the area described by the
|
||||
Root: line on your server's status report, and your anonymous FTP
|
||||
area. These directories are sometimes called 'include-native'
|
||||
directories too.
|
||||
|
||||
INCLREAL directories contain both (a) 'native links', from the real
|
||||
UNIX directory with the UNIX pathname that is the same as the Prospero
|
||||
HSONAME, and (b) virtual links. They start off with all the links in
|
||||
the real UNIX directory (except for . and ..).
|
||||
|
||||
The purpose of the INCLREAL directories is to make it easier to
|
||||
get started organize your files using Prospero. You can run the
|
||||
Prospero server out of the box and immediately make files under the
|
||||
AFS, anonymous FTP, and additional (what we call PSRV_ROOT) areas
|
||||
accessible through Prospero.
|
||||
|
||||
You can add links to such directories with vln, and you can
|
||||
remove the same virtual links with vrm. So far, this is the expected
|
||||
behavior.
|
||||
|
||||
. Making subdirectories of INCLREAL directories.
|
||||
|
||||
Let's say you want to create a subdirectory of an INCLREAL
|
||||
directory. If you want to create a real native directory that will be
|
||||
both on the UNIX and Prospero sides, go to the corresponding real unix
|
||||
parent directory with the normal unix commands and use the usual
|
||||
'mkdir' command. If you want to create a virtual directory that will
|
||||
only be seen by Prospero, use the prospero 'vmkdir' command. When
|
||||
you're creating a virtual subdirectory of a real UNIX directory,
|
||||
Prospero will create a new HSONAME for the new directory to have. The
|
||||
new HSONAME will be made in the object_pool subarea of the PFSDAT
|
||||
area, and is guaranteed to be unique. (Versions of Prospero before
|
||||
11/3/93 behave in a confusing and inappropriate manner when this
|
||||
happens.)
|
||||
|
||||
. Deleting links from INCLREAL directories.
|
||||
|
||||
Let's say you want to delete a native link from an INCLREAL directory.
|
||||
(a) If you want that native link to be gone from both the Prospero
|
||||
virtual directory and from the corresponding native UNIX directory,
|
||||
manually delete it from the native unix directory.
|
||||
(b) If you want that native link to be gone only on the Prospero side,
|
||||
but to stay in place on the unix side, you'll be tempted to use the
|
||||
VRM user command. The Prospero servers, as currently implemented, do
|
||||
not delete native links, and provide you with an explanatory failure
|
||||
message when you attempt to do so. (see below for a listing of
|
||||
alternatives)
|
||||
|
||||
.. What can I do instead?
|
||||
|
||||
You could decide to delete the file from the real native UNIX directory
|
||||
after all.
|
||||
|
||||
You could copy the links in the Prospero directory to a new virtual
|
||||
directory (thereby making all the links virtual). Then delete one of
|
||||
the virtual links. Now, though, the Prospero directory won't follow
|
||||
changes you make to the real directory.
|
||||
|
||||
You could change the directory to be NONATIVE. This is, for most
|
||||
purposes, the same as the solution above, except that it can be
|
||||
confusing to have NONATIVE directories outside the PFSDAT (PFS Data) area.
|
||||
|
||||
You could set the link to be invisible. This is what I'd suggest.
|
||||
This is particularly appropriate for files such as the '.cap' files that
|
||||
are needed by services such as Gopher. To do this, use the command:
|
||||
|
||||
set_atr <linkname> LINK-TYPE -linkprec -replace -field I
|
||||
|
||||
. So, why can't I delete a native link from a Prospero directory?
|
||||
|
||||
You can't do this because what it means is pretty unclear. Let's say
|
||||
you delete the link '.cap' from the Prospero virtual directory which
|
||||
corresponds to a subdirectory of your FTP area. The directory server
|
||||
will have to save in its database a bit of information that says "the
|
||||
link named .cap in this real UNIX directory should be ignored." Now,
|
||||
let's say that the link .cap goes away. Should this record be deleted
|
||||
or not?
|
||||
|
||||
If not, then when a new link named .cap is created a few
|
||||
months later, that new link won't appear on the directory listing,
|
||||
perhaps to the surprise of the maintainer, who might not remember
|
||||
having deleted it a long time ago. Also, this means that native
|
||||
directories will get bigger over time.
|
||||
|
||||
If yes, then files that are temporarily non-present but then reappear
|
||||
(such as files being temporarily updated or rewritten) may have to be
|
||||
deleted all over again.
|
||||
|
||||
You could use the filter mechanism and write an 'occluding' filter
|
||||
that hides the native link. It would be subject to the same design
|
||||
considerations mentioned at the start of this subsection about unclear
|
||||
semantics. We haven't done this yet, but if you have a need for it
|
||||
contact us and we'll tell you how to go about it.
|
||||
|
||||
We've talked about installing an 'occluding' filter on directories in
|
||||
Prospero.
|
||||
|
||||
. Conflicting Links in INCLREAL directories.
|
||||
|
||||
If you try to create a link in a Prospero directory that has the same
|
||||
name as an existing link but isn't a replica of it, the server will
|
||||
not let you do it. This avoids a lot of confusion.
|
||||
|
||||
However, the server can't protect you if you already have a virtual
|
||||
link in an INCLREAL directory, and then a native link with the same
|
||||
name is created in the real directory. The server shouldn't throw
|
||||
away the old link, nor should it ignore that the new link has
|
||||
appeared. So two links with the same link name (although different
|
||||
HSONAMEs) will appear. These are known as 'conflicting' links.
|
||||
|
||||
The server has been deliberately implemented so that the virtual link
|
||||
always comes first. 'vrm <linkname>' will delete the purely virtual link.
|
||||
To delete the native link, see suggestions listed above.
|
||||
|
||||
Admittedly, this isn't a great mechanism; vrm should note the conflict
|
||||
and give you a way to select between the two conflicting links. We've
|
||||
specified in the protocol methods that make this possible, but they aren't
|
||||
implemented yet.
|
||||
|
||||
. Born-again objects and their ghosts.
|
||||
|
||||
Let's say that you do an 'rmdir' or 'rm' on a native unix object that
|
||||
is shadowed by a Prospero virtual directory. The link in the virtual
|
||||
directory will go away, and all will be happy.
|
||||
|
||||
Now let's say you create a new native UNIX object with the same name.
|
||||
If you set any attributes on the old native UNIX object, they will
|
||||
reappear on the new native object! Moreover, the new object will have
|
||||
the same ACL entry that the old one did.
|
||||
|
||||
This is a bug. It is unlikely to be fixed before the end of November.
|
||||
|
||||
A problem with fixing it in the obvious way is that files that are
|
||||
temporarily non-present but then reappear (such as files being
|
||||
temporarily updated or rewritten) may lose all of their attributes.
|
||||
The correct behavior is Not Fully Clear to me. Suggestions please.
|
||||
|
||||
Before making suggestions involving storing UNIX inode numbers (which
|
||||
might work for directories), please note that some popular text
|
||||
editors, such as EMACS, change a file's inode # every time they create
|
||||
a new backup version of the file, at least in EMACS's default mode of
|
||||
operation.
|
||||
|
||||
. Permissions on native objects.
|
||||
|
||||
All native objects start out with the DEFAULT and SYSTEM entries in
|
||||
their ACLs, but can have their ACLs modified just like any other
|
||||
object, with the set_acl command.
|
||||
|
||||
. Minor details
|
||||
|
||||
The INCLUDE-NATIVE attribute can also be set to:
|
||||
|
||||
INCLNATIVE: Works like INCLREAL, but also includes . and ..
|
||||
|
||||
MUNGED: for objects that do not correspond to any real Prospero object
|
||||
-- e.g., a directory with union links expanded in it. These must
|
||||
never be written out on the server.
|
||||
|
||||
PSEUDO: for objects from databases. These can be written out for
|
||||
writeable databases.
|
||||
|
||||
UNINITIALIZED: an internal value used on the server, never sent across
|
||||
the network.
|
||||
|
||||
NOTDIR: For objects that are not directories
|
||||
|
||||
2212
prospero/doc/library.PS
Normal file
2212
prospero/doc/library.PS
Normal file
File diff suppressed because it is too large
Load Diff
737
prospero/doc/library.tex
Normal file
737
prospero/doc/library.tex
Normal file
@@ -0,0 +1,737 @@
|
||||
% If you somehow got this file without fullpage.sty, delete
|
||||
% ``fullpage'' from the list of style options. It just pulls out the
|
||||
% margins a bit.
|
||||
\documentstyle[11pt,twoside,fullpage]{article}
|
||||
% New commands
|
||||
%-------------
|
||||
% Intro copied from prospero-protocol-v5.txt
|
||||
|
||||
% for meta-symbols
|
||||
\newcommand{\meta}[1]{{\bf \mbox{\(<\)#1\(>\)}}}
|
||||
% for literal tokens.
|
||||
\newcommand{\lit}[1]{{\tt \mbox{#1}}}
|
||||
%for attributes
|
||||
\newcommand{\atr}[1]{\mbox{\sc #1}}
|
||||
% for identifying text
|
||||
\newcommand{\text}[1]{{\em #1}\/}
|
||||
|
||||
% Start and end of One or More
|
||||
\newcommand{\ooms}{\([\,\)}
|
||||
\newcommand{\oome}{\(\,]^+\)}
|
||||
% start and end of zero or more
|
||||
\newcommand{\zoms}{\([\,\)}
|
||||
\newcommand{\zome}{\(\,]^*\)}
|
||||
% Start and end of zero or one
|
||||
\newcommand{\zoos}{\([\,\)}
|
||||
\newcommand{\zooe}{\(\,]\)}
|
||||
% start an OR
|
||||
\newcommand{\ors}{{\bf (\,}}
|
||||
\newcommand{\ore}{{\bf \,) }}
|
||||
\newcommand{\metaor}{{\em \,or\, }}
|
||||
\newcommand{\hexnum}[1]{\(\mbox{#1}_{16}\)}
|
||||
\newcommand{\unix}{{\sc unix}}
|
||||
\newenvironment{command}{\begin{verse}\sloppy}{\end{verse}}
|
||||
\newcommand{\commandsize}{\large}
|
||||
|
||||
%\newtheorem{example}{Example}
|
||||
% Uncomment this for almost-double spacing
|
||||
%\renewcommand{\baselinestretch}{1.7}
|
||||
%\newcommand{\hozline}{\rule{\textwidth}{0.3mm}}
|
||||
%\newcommand{\hozline}{\makebox[\textwidth]{\hrulefill}}
|
||||
%\newcommand{\bex}{\begin{example} \begin{rm}}
|
||||
%\newcommand{\eex}{$\Box$ \end{rm} \end{example}}
|
||||
%\newcommand{\cbs}{\chgbarbegin}
|
||||
%\newcommand{\cbe}{\chgbarend}
|
||||
%\newcommand{\cbs}{}
|
||||
%\newcommand{\cbe}{}
|
||||
|
||||
%\newcommand{\ptag}{\begin{flushright} {\rm ($P$)} \end{flushright} }
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagenumbering{arabic}
|
||||
\pagestyle{plain}
|
||||
|
||||
\renewcommand{\thepage}{\arabic{page}}
|
||||
|
||||
|
||||
\begin{titlepage}
|
||||
|
||||
\renewcommand{\thefootnote}{}
|
||||
\footnotetext{\hspace*{-21pt}
|
||||
A digital copy of the latest revision of this document may be obtained
|
||||
through Prospero as
|
||||
\mbox{\verb"/papers/subjects/operating-systems/prospero/doc/library.PS.Z"},
|
||||
in the \mbox{\tt \#/INET/EDU/ISI/swa} virtual system, or through
|
||||
Anonymous FTP from \mbox{\tt PROSPERO.ISI.EDU} as
|
||||
\mbox{\verb"/pub/prospero/doc/prospero-library.PS.Z"}
|
||||
}
|
||||
\footnotetext{\hspace*{-21pt}
|
||||
This work was supported in part by the National Science
|
||||
Foundation (Grant No. CCR-8619663), the Washington Technology Center,
|
||||
Digital Equipment Corporation, and the Defense Advance Research
|
||||
Projects Agency under NASA Cooperative Agreement NCC-2-539.
|
||||
The views and conclusions contained in
|
||||
this document are those of the authors and should not be interpreted as
|
||||
representing the official policies, either expressed or implied, of
|
||||
any of the funding agencies.
|
||||
The authors may be reached
|
||||
at USC/ISI, 4676 Admiralty Way, Marina del Rey, California\ \ 90292-6695, USA.
|
||||
Telephone +1 (310) 822-1511, email \mbox{\verb"info-prospero@isi.edu"}. }
|
||||
\renewcommand{\thefootnote}{\arabic{footnote}}
|
||||
|
||||
|
||||
\vspace*{\fill}
|
||||
\begin{center}
|
||||
\LARGE Prospero Library Manual\\
|
||||
\Large Version 5\\
|
||||
\vskip 1.5em
|
||||
{\large Draft of 30 March 1994} \\
|
||||
{\large Document Revision No. 0.5.3} \\
|
||||
\end{center}
|
||||
\vspace{.5in}
|
||||
|
||||
\Large \hspace*{\fill} B. Clifford Neuman
|
||||
%\footnotetext{\hspace*{-18pt}
|
||||
% To Contact the Authors: \\
|
||||
% Electronic Mail: \mbox{\verb"info-prospero@isi.edu"} \\
|
||||
% Telephone: +1 (310) 822-1511 \\
|
||||
% Mail: USC Information Sciences Institute, 4676 Admiralty Way,
|
||||
% Marina del Rey, California 90292--6695\ \ U.S.A.
|
||||
%}
|
||||
\hfill Steven Seger Augart \hspace*{\fill} \\
|
||||
\vspace{.2in}
|
||||
\begin{center}
|
||||
\Large Information Sciences Institute \\
|
||||
University of Southern California
|
||||
\end{center}
|
||||
\vspace*{1.2in}
|
||||
\vspace*{\fill}
|
||||
\end{titlepage}
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\section{WARNINGS}
|
||||
|
||||
\begin{enumerate}
|
||||
\item This manual is preliminary. It does not fully describe all of the
|
||||
Prospero library calls.
|
||||
|
||||
\item This manual reflects Prospero releases Alpha.5.2 and later.
|
||||
You can use it with Prospero releases between Alpha.5.0 and Beta.5.1;
|
||||
changes are documented under the appropriate functions.
|
||||
|
||||
\end{enumerate}
|
||||
|
||||
\section{Introduction}
|
||||
|
||||
This manual describes the entry points to the Prospero library.
|
||||
|
||||
\section{PFS Library}
|
||||
|
||||
\subsection{Introduction}
|
||||
|
||||
The PFS library includes procedures for allocating and freeing
|
||||
Prospero data structures, resolving names using Prospero, reading
|
||||
directories, retrieving attributes, adding and deleting links, and
|
||||
creating directories. Only those procedures generally used by application
|
||||
programmers are described here. The remaining routines are called
|
||||
internally.
|
||||
|
||||
These functions are prototyped in the include file {\tt pfs.h}, found
|
||||
in the {\tt include} directory in the Prospero source tree. The data
|
||||
structures manipulated by these functions and the definitions of the
|
||||
flag options are also defined and documented in that file. When
|
||||
Prospero is installed normally, the library (ready to be linked with)
|
||||
can be found in {\tt lib/pfs/libpfs.a} in the Prospero source
|
||||
hierarchy.
|
||||
|
||||
Since this manual is still not complete, a programmer will often find
|
||||
it helpful to look at the source code files for the functions discussed
|
||||
here. Most of them are preceded with large comments discussing their
|
||||
behavior in more detail than is gone into here. They can all be found
|
||||
in the {\tt lib/pfs} directory in the Prospero source tree.
|
||||
|
||||
Examples of using these functions can be found in the {\tt user}
|
||||
directory of the Prospero source tree.
|
||||
|
||||
Programmers looking for examples of listing a directory and retrieving
|
||||
attributes should look at {\tt vls.c}. Examples of setting attributes
|
||||
are in {\tt set\_atr.c}. An example of the {\tt pget\_am} interface
|
||||
to retrieving files is in {\tt vget.c} (after you see it, we expect
|
||||
you'll appreciate the simplicity of {\bf pfs\_open()}. An example of {\tt
|
||||
add\_vlink()} is in {\tt vln.c}.
|
||||
|
||||
\subsection{Multi-threading}
|
||||
|
||||
Work to make the Prospero library safe in a multi-threaded
|
||||
environment, such as pthreads, is in progress. Since one of the
|
||||
Prospero developers shot off his mouth and promised to get a
|
||||
multi-threaded Prospero server to a certain loyal Prospero customer
|
||||
well before November 15th, you can expect this item soon.
|
||||
|
||||
\subsection{Error Reporting}
|
||||
|
||||
Most functions in this library return a numeric error code (defined in
|
||||
{\tt perrno.h}). The functions in this library which return pointers
|
||||
to structures will return a null pointer in case of an error. They
|
||||
will indicate which error occurred by setting the global variable {\tt
|
||||
perrno} (defined in the include file {\tt perrno.h}) to one of the
|
||||
constants defined in that file. Note: Functions that return an
|
||||
explicit numeric error code are not guaranteed to set {\tt perrno}.
|
||||
|
||||
Most functions that set perrno or return an error code will also set
|
||||
an explanatory message in the global variable {\tt p\_err\_string}
|
||||
(also defined in that file). Even if they have no additional
|
||||
information, they are supposed to set {\tt p\_err\_string} to the
|
||||
empty string so that the user isn't misled by an old error message.
|
||||
|
||||
The Prospero library guarantees that {\tt p\_err\_string} will always
|
||||
be a pointer to a string of some sort, frequently empty. You don't
|
||||
have to worry about it being a NULL pointer. {\tt p\_err\_string} and
|
||||
{\tt p\_warn\_string} may change in value during the program's
|
||||
execution. If you are operating in multi-threaded mode, their values
|
||||
will be different in different threads.
|
||||
|
||||
The error indicators in {\tt perrno} and {\tt p\_err\_string} are
|
||||
persistent across library calls. To clear them before making a
|
||||
library call, use the function {\bf p\_clear\_errors()}:
|
||||
\begin{verbatim}
|
||||
extern void p_clear_errors(void);
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{WARNING}
|
||||
|
||||
All the functions in this library are supposed to obey the above
|
||||
convention about {\tt p\_err\_string}. We have not gone over all of
|
||||
them to make certain that the convention is obeyed in every case, due
|
||||
to the press of other work.
|
||||
|
||||
\subsection{Argument modification}
|
||||
|
||||
A function that accepts a {\it VLINK} may modify that link if the
|
||||
object it points to has been forwarded. If it does so, it will modify
|
||||
the link to refer to the new location of the object.
|
||||
|
||||
Not all calls to the Prospero library currently do this. When we take
|
||||
the time to revise the library, we will attempt to make this behavior
|
||||
consistent across all functions in the library that accept {\it VLINK}s
|
||||
and send Prospero protocol messages that inform them the link's target
|
||||
has been forwarded.
|
||||
|
||||
\subsection{Initialization}
|
||||
|
||||
Every Prospero client {\bf must} call the function
|
||||
{\bf p\_initialize()} before making any calls to Prospero library
|
||||
functions. Your program may well crash weirdly if you don't.
|
||||
|
||||
|
||||
\begin{verbatim}
|
||||
extern void p_initialize(char *software_id, int flags,
|
||||
struct p_initialize_st * arg_st);
|
||||
\end{verbatim}
|
||||
|
||||
If you're writing a client, send email to {\tt
|
||||
pfs-administrator@isi.edu} and request a software ID string. If
|
||||
you're just experimenting with the libraries, you can pass a NULL
|
||||
pointer or empty string as the software ID.
|
||||
At the moment, no flag values are defined, and no members of the
|
||||
structure for additional arguments are defined, so the most common
|
||||
calling sequence is:
|
||||
\begin{verbatim}
|
||||
p_initialize((char *) NULL, 0, (struct p_initialize_st *) NULL);
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Data Structures}
|
||||
|
||||
Most of the data structures in the PFS library are allocated and freed
|
||||
with special allocation functions ({\it VLINK}s are allocated with
|
||||
{\bf vlalloc}, etc. The allocation functions also initialize the
|
||||
members of the structure to common values and the freeing functions
|
||||
de-allocate allocated memory referred to by the members of
|
||||
the structure.
|
||||
|
||||
Do not use the C library function {\bf free} to free memory allocated
|
||||
by one of the special Prospero allocating functions, and do not use
|
||||
one of the special freeing functions to free memory allocated by {\bf malloc}.
|
||||
|
||||
The {\it VDIR} structure does not have special allocation and freeing
|
||||
structures. This is because in the current uses of the Prospero
|
||||
library, one generally does not make linked lists of {\it VDIR}
|
||||
structures; instead, one allocates them on the stack with code that
|
||||
looks like this:
|
||||
|
||||
\begin{verbatim}
|
||||
VDIR_ST dir_st;
|
||||
VDIR dir = &dir_st;
|
||||
\end{verbatim}
|
||||
and then initializes them with:
|
||||
\begin{verbatim}
|
||||
vdir_init(dir);
|
||||
\end{verbatim}
|
||||
and frees the allocated memory referred to by the members with:
|
||||
\begin{verbatim}
|
||||
vdir_freelinks(dir);
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Linked Lists}
|
||||
|
||||
Prospero uses linked lists of items as a basic data structure. In all
|
||||
cases, these are doubly linked lists. As usual, the empty list is
|
||||
represented by a list whose head is the NULL pointer. When a doubly
|
||||
linked has one or more items in it, then the {\tt previous} field of
|
||||
the first item in the list points at the last item, and the {\tt next}
|
||||
field on the last is NULL. Therefore, when a list has only one item
|
||||
in it, then the {\tt next} pointer of the last item is NULL and the
|
||||
{\tt previous} points back to itself. In other words, if {\it head}
|
||||
is non-null, {\it head$->$previous} will always be the TAIL of the
|
||||
list.
|
||||
|
||||
Macros for manipulating lists of these structures are in the {\tt
|
||||
list\_macros.h} include file. This file is included by {\tt pfs.h}, but may be
|
||||
included again without problems.
|
||||
|
||||
{\bf APPEND\_ITEM}({\it new, head}) appends the item {\it new} to a doubly linked
|
||||
list pointed to by {\it head}. The item {\it new} goes at the TAIL
|
||||
of the list. It must not already be present in the list. This macro
|
||||
modifies its second argument, {\it head}, which should be a variable.
|
||||
|
||||
{\bf EXTRACT\_ITEM}({\it item, head}) removes {\it item} from a
|
||||
doubly-linked list headed by {\it head}. If {\it item} is not a
|
||||
member of the list, the results are not defined. The extracted {\it
|
||||
item} will NOT be freed.
|
||||
|
||||
{\bf APPEND\_LISTS}({\it list1,list2}) performs an O(1) list appending
|
||||
operation. It sets {\it list1} to point to a doubly-linked list
|
||||
consisting of {\it list1} appended to {\it list2}. {\it list2} must
|
||||
not already be a part of {\it list1} or the results are unpredictable.
|
||||
{\it list2} will be a garbage value at the end of this exercise, since
|
||||
it will no longer point to a valid doubly-linked list. {\it list1}
|
||||
and {\it list2} must already be valid doubly-linked lists.
|
||||
|
||||
\subsubsection{Application-reserved ({\tt app}) member of Prospero structures}
|
||||
|
||||
This feature is available in prospero versions Alpha.5.3 and later.
|
||||
|
||||
For all exported structures in Prospero visible at the library
|
||||
interface (except for TOKENs), there is a special member named {\tt
|
||||
app}, for applications writers. This member is a union:
|
||||
|
||||
\begin{verbatim}
|
||||
union app {
|
||||
int flg; /* Flag or number */
|
||||
void *ptr; /* Generic Pointer */
|
||||
};
|
||||
\end{verbatim}
|
||||
|
||||
Each allocation/freeing package (eg: vlalloc(), vlfree(), vllfree(),
|
||||
vlcopy()) has a 'application freeing function specifying function'
|
||||
(e.g., vlappfree()) associated with it.
|
||||
|
||||
So, if we use the app.ptr member of the VLINK structure to point to a
|
||||
'struct vlink\_aux', to be freed (if non-null) with the 'vlauxlfree
|
||||
function, then code using the VLINK in that way will have to call:
|
||||
vlappfree(vlauxlfree); and then all subsequent calls to vlfree() will
|
||||
call vlauxlfree on the app.ptr member.
|
||||
|
||||
\subsection{Entry Points}
|
||||
|
||||
\begin{tabbing}
|
||||
{\Large \bf Entry points:} \= {\bf atalloc, atfree, atlfree, vlalloc,
|
||||
vlfree, vllfree, add\_vlink,}\\
|
||||
\> {\bf del\_vlink, p\_get\_dir, mk\_vdir, pget\_am, pget\_at, rd\_vdir,}\\
|
||||
\>{\bf rd\_vlink, pfs\_open, {\rm and} pfs\_fopen}.
|
||||
\end{tabbing}
|
||||
|
||||
\noindent {\bf PATTRIB atalloc}({\it void}), {\bf FILTER flalloc}({\it void}), {\bf TOKEN
|
||||
tkalloc}({\it char *s}), {\bf ACL acalloc}({\it void}), and {\bf VLINK
|
||||
vlalloc}({\it void}) allocate and initialize structures for storing attributes,
|
||||
filters, tokens, access control list entries, and virtual links.
|
||||
They call out\_of\_memory() on failure, which is a macro in {\tt
|
||||
pfs.h} which currently raises an error condition and aborts program
|
||||
execution. Its behavior may be changed by resetting the value of the
|
||||
global variable {\bf internal\_error\_handler} (defined in {\tt pfs.h}
|
||||
to a function with some alternative behavior (such as popping up a
|
||||
window with a failure message and offering to restart the application
|
||||
or exit).\footnote{
|
||||
The Prospero directory server takes advantage of this and
|
||||
rebinds {\bf internal\_error\_handler()} to a function that logs a
|
||||
message to the server's log file and attempts to restart the server.}
|
||||
Since the only failure condition for these functions is running out of
|
||||
available memory, they do not set {\bf perrno}.
|
||||
|
||||
{\bf atfree}({\it
|
||||
PATTRIB at}), {\bf flfree}({\it FILTER fl}), {\bf acfree({\it ACL
|
||||
ac})}, and {\bf vlfree}({\it VLINK vl}) free the storage allocated to
|
||||
{\it at}, {\it fl}, {\it ac}, and {\it vl}. They also free any
|
||||
standard Prospero memory structures referenced by the members of these
|
||||
structures; for example, freeing a {\it VLINK} will also free any
|
||||
Prospero string referenced by the {\it VLINK'\/}s {\tt host} member.
|
||||
They also free any memory referred to by the structure's {\tt app.ptr}
|
||||
member, using whatever function the user set via {\bf atappfree(),
|
||||
flappfree(), acappfree(),} or {\bf vlappfree(),} as appropriate. The
|
||||
user can disable this feature, if it has already been enabled, by
|
||||
calling the appropriate {\it xx}{\bf appfree()} function with a null
|
||||
pointer as its argument.
|
||||
|
||||
{\bf atlfree}({\it at}) and {\bf vllfree}({\it vl}) free {\it at} and
|
||||
{\it vl} and all successors in a linked list of such structures. They
|
||||
do not return error codes nor do they set {\tt perrno}, since they
|
||||
cannot fail. {\bf tkalloc({\it s})} initializes the {\tt token}
|
||||
member of the {\it TOKEN} structure it allocates to be a copy of {\it
|
||||
s}.
|
||||
|
||||
{\bf {\it FILTER} flcopy({\it FILTER fl, int recurse})} will return a
|
||||
copy of the filter {\it fl}. If the {\it recurse} flag is non-zero,
|
||||
then it will also recursively copy the linked list of filters that
|
||||
{\it fl} points to the head of.
|
||||
|
||||
{\bf {\it char *} stcopy({\it char *s})} allocates an area of memory
|
||||
large enough to hold the string {\it s} and copies {\it s} into it.
|
||||
It is usually used to store a string. The number of bytes allocated
|
||||
to a string
|
||||
can be checked with the macro {\bf stsize({\it char * string})}. An
|
||||
alternative interface to {\bf stcopy} is {\bf {\it char *}
|
||||
stalloc({\it size\_t nbytes})}. {\bf stalloc} allocates an area of
|
||||
uninitialized memory large enough to hold {\it nbytes} bytes of data
|
||||
and returns a pointer to it. Another interface is {\bf {\it char
|
||||
*}stcopyr({\it char *source, char *dest})}. The sequence:
|
||||
\begin{verbatim}
|
||||
a = stcopyr("string", a);
|
||||
\end{verbatim}
|
||||
will yield results functionally equivalent to the sequence:
|
||||
\begin{verbatim}
|
||||
stfree(a);
|
||||
a = stcopy("string");
|
||||
\end{verbatim}
|
||||
The only
|
||||
difference is that {\bf stcopyr()} attempts to reuse the already
|
||||
allocated space, if available. This avoids the overhead of extra
|
||||
calls to {\bf malloc()} and {\bf free()}, and is therefore frequently more
|
||||
efficient than the equivalent longer sequence of calls. The existing
|
||||
Prospero libraries and utilities make frequent use of {\bf stcopyr()}
|
||||
for this purpose.
|
||||
|
||||
Also note that \verb|a = stcopyr("foo", (char *) NULL)| is equivalent to
|
||||
\verb|a = stcopy("foo");|
|
||||
Memory allocated by all of these interfaces should be freed with {\bf
|
||||
stfree({\it st})}. {\bf stfree({\tt (char *) NULL})} is a guaranteed
|
||||
no-op. The various interfaces to {\bf stcopy()} all call {\tt
|
||||
out\_of\_memory() when appropriate.}
|
||||
|
||||
A frequent cause of problems when using memory allocation functions is
|
||||
freeing the same chunk of memory twice. One may optionally enable
|
||||
consistency checking code in the allocators and freeing functions by
|
||||
defining {\tt ALLOCATOR\_CONSISTENCY\_CHECK} in {\tt pfs.h}. This code
|
||||
has not yet been finished for the {\bf stalloc()} family, but works
|
||||
for all other allocators. If any double freeing is detected, {\bf
|
||||
internal\_error\_handler()} will be called.
|
||||
|
||||
A programmer may also easily check for memory leaks by looking at the
|
||||
global variables {\bf {\it int\/} acl\_count, pattrib\_count,
|
||||
filter\_count, pauth\_count, pfile\_count, token\_count, vlink\_count,
|
||||
and rreq\_count} to see how many of each of the corresponding
|
||||
structures have been allocated.\footnote{
|
||||
We use this facility to debug the Prospero server; it returns
|
||||
this information in response to the {\tt pstatus} command.}%
|
||||
\footnote{
|
||||
Some of the structures mentioned in this list of global variables
|
||||
are not yet documented in this manual.}
|
||||
|
||||
{\bf add\_vlink}({\it direct,lname,l,flags}) adds a new link {\it l}
|
||||
to the directory named {\it direct} with the new link name {\it
|
||||
lname}. {\it direct} is a string naming the directory that is to
|
||||
receive the link. If {\it flags} is {\sc avl\_union}, then the link
|
||||
is added as a union link. {\bf add\_vlink} returns {\sc psuccess} (0)
|
||||
on success and an error code on failure.
|
||||
|
||||
This interface to this function will change in a later version of the
|
||||
library to be {\bf p\_add\_nlink()}, with a corresponding {\bf p\_add\_link}
|
||||
that takes a {\it VLINK} instead of a string for the {\it direct} argument.
|
||||
|
||||
{\bf del\_vlink}({\it path,flags}) deletes the link named by {\it
|
||||
path}. At present, {\it flags} is unused. {\bf del\_vlink} returns
|
||||
{\sc psuccess} (0) on success and an error code on failure.
|
||||
|
||||
This interface to this function will change in a later version of the
|
||||
library to be {\bf p\_del\_nlink()}, with a corresponding {\bf p\_del\_link()}
|
||||
that takes a {\it VLINK} instead of a string for the {\it path} argument.
|
||||
|
||||
{\bf p\_get\_dir}({\it VLINK dlink,char *components,VDIR dir,int
|
||||
flags,TOKEN acomp})
|
||||
contacts the Prospero server on host {\it dlink-$>$host} to read the directory
|
||||
{\it dlink-$>$hsoname}, resolving union links that are returned and applying
|
||||
{\it dlink-$>$filters}, if set.
|
||||
|
||||
If {\it components} is a null pointer, all links in the directory are
|
||||
returned. If {\it components} is a non-null string, only those
|
||||
links with names matching the string. The string may be a wildcarded name
|
||||
containing the {\tt *} and {\tt ?} characters; these have their
|
||||
conventional meanings. The string may also be a regular expression,
|
||||
enclosed between parentheses; in that case, all links matching the
|
||||
regular expression are returned.
|
||||
|
||||
{\bf p\_get\_dir()} will always, in addition to any other links it might
|
||||
return, return any link whose literal name is the {\it components}
|
||||
string. This feature means that you do not have to worry about
|
||||
retrieving links whose names contain special characters, even if more
|
||||
special characters are defined at some future time. An example: The
|
||||
{\it components} string {\tt (ba\(na\)*na)}, in addition to matching
|
||||
{\tt banana} and {\tt banananana}, also (as an important special case)
|
||||
matches the component whose literal name is {\tt (ba\(na\)*na)}.
|
||||
|
||||
{\it dir} is a Prospero directory structure that is filled in. {\it
|
||||
flags} can suppress the expansion of union links ({\sc gvd\_union}),
|
||||
force their expansion ({\sc gvd\_expand}), request the return of link
|
||||
attributes on the {\it VLINK} structure's {\tt lattrib} member ({\sc
|
||||
gvd\_attrib}), and suppress sorting of the directory links ({\sc
|
||||
gvd\_nosort}). {\it acomp} should normally be {\sc null}. For many
|
||||
applications, one does not need to call this procedure, and should use
|
||||
{\bf rd\_vdir} and {\bf rd\_vlink} instead. {\bf p\_get\_dir} returns
|
||||
{\sc psuccess} (0) on success and an error code on failure.
|
||||
|
||||
The standard way to retrieve the attributes of a link in a directory
|
||||
is to call {\bf p\_get\_dir} with the {\it dlink} argument pointing
|
||||
to the directory in which the link is located and the {\it components}
|
||||
argument being the name of the link whose attributes are to be
|
||||
retrieved.
|
||||
|
||||
Compatability note: {\bf p\_get\_dir} was named {\bf get\_vdir} or
|
||||
{\bf p\_get\_vdir()} in releases of Prospero before Alpha.5.2. Those
|
||||
older interfaces are still available but should be converted.
|
||||
release is backwards-compatible with those older uses.
|
||||
Please note that the Alpha.5.3 release of {\bf p\_get\_dir()} will not
|
||||
moify the {\it dlink}, but that previous releases did corrupt the {\it
|
||||
dlink} while expanding a union lnk.
|
||||
|
||||
{\bf mk\_vdir}({\it char path[], int flags}) creates a new virtual
|
||||
directory with
|
||||
the new name {\it path} in the currently active virtual system. {\it
|
||||
flags} should usually be 0; the only flag currently defined is {\sc
|
||||
MKVD\_LPRIV}, which causes the directory to be created with very
|
||||
limited permissions available to the creator. See the documentation
|
||||
of the {\tt CREATE-OBJECT} command in the protocol specification if
|
||||
you want a better explanation of this option.
|
||||
{\bf mk\_vdir} returns {\sc psuccess} (0) on success and an error code
|
||||
on failure.
|
||||
|
||||
This interface to this function will change in a later version of the
|
||||
library to be {\bf p\_mk\_ndir()}, with a corresponding {\bf p\_mk\_dir}
|
||||
that takes a {\it VLINK} referring to the directory and a string which
|
||||
is the new link name.
|
||||
|
||||
{\bf pget\_am}({\it VLINK link,TOKEN *ainfop, int methods}) returns
|
||||
the access method that should be used to access the object referenced
|
||||
by {\it link}. {\it *ainfop} is a pointer to a variable of type
|
||||
TOKEN. When {\bf pget\_am} returns, this variable will be a NULL
|
||||
pointer if no appropriate access methods were available or will point
|
||||
to the value of the best {\sc access-method} attribute associated with
|
||||
the object referenced by {\it link} if appropriate methods were
|
||||
available. When more than one appropriate access method is available,
|
||||
{\bf pget\_am} attempts to choose the least expensive one.
|
||||
|
||||
{\it methods} is a bit-vector identifying the methods that are acceptable
|
||||
to the application. The methods presently supported are: the local
|
||||
filesystem ({\sc p\_am\_local}), anonymous FTP ({\sc p\_am\_aftp}),
|
||||
regular FTP ({\sc p\_am\_ftp}), Sun's Network File System ({\sc
|
||||
p\_am\_nfs}), the Andrew File System ({\sc p\_am\_afs}), the Gopher
|
||||
distributed directory service binary and text file retrieval protocols
|
||||
({\sc p\_am\_gopher}), and telnettable services ({\sc p\_am\_telnet}).
|
||||
Note that to effectively use the ({\sc p\_am\_ftp}) access method, the
|
||||
server on the remote end will have to know that the user has an
|
||||
account valid for FTP on the server. {\bf pget\_am} returns {\sc
|
||||
p\_am\_error} (0) on failure and leaves an error code in {\tt perrno}.
|
||||
Upon success, {\bf pget\_am} returns the value of the access method
|
||||
that was chosen.
|
||||
|
||||
This interface returns information that allows you to retrieve a file,
|
||||
but does not do any of the work of retrieving it. We expect most
|
||||
programmers to use the {\bf pfs\_open} or {\bf pfs\_fopen} interfaces
|
||||
instead. The only exception is the TELNET access methods
|
||||
|
||||
{\bf PATTRIB pget\_at}({\it VLINK link,char atname[]}) returns a list of values of
|
||||
the {\it atname} attribute for the object referenced by {\it link}.
|
||||
If {\it atname} is {\sc null}, all attributes for the referenced
|
||||
object are returned. If {\it atname} is a string, it is a string
|
||||
which is just a plus-separated list of attribute specification options
|
||||
to the {\tt EDIT-OBJECT-INFO} protocol message. {\bf pget\_at}
|
||||
returns {\sc null} on failure, or when no attributes are found. On
|
||||
failure, an error code is left in {\tt perrno}. On success, {\tt
|
||||
perrno} is explicitly set to {\tt PSUCCESS}.
|
||||
|
||||
If the object has been forwarded, pget\_at() will follow the
|
||||
forwarding pointers, just as other PFS library functions do. If the
|
||||
object has been forwarded, pget\_at() will modify {\it link} so that
|
||||
the link's {\tt host} and {\tt hsoname} members refer to the link's
|
||||
new location.
|
||||
|
||||
This function will be renamed in a later version of this library. The
|
||||
new function will be named {\bf p\_get\_at}.
|
||||
|
||||
{\bf rd\_vdir}({\it dirarg,comparg,dir,flags}) lists the directory
|
||||
named by {\it dirarg} (relative to the current working directory or
|
||||
the root of the active virtual system) returning the links whose names
|
||||
match {\it comparg}. {\it dir} is a Prospero directory structure that
|
||||
is filled in. {\it flags} can suppress the expansion of union
|
||||
links ({\sc rvd\_union}), force their expansion ({\sc rvd\_expand}),
|
||||
request the return of link attributes ({\sc rvd\_attrib}), suppress
|
||||
sorting of the directory links ({\sc rvd\_nosort}), suppress use of
|
||||
cached data when resolving names ({\sc rvd\_nocache}), or request the
|
||||
return of a reference to the named directory, suppressing the return
|
||||
of its contents ({\sc rvd\_dfile\_only}). {\bf rd\_vdir} returns {\sc
|
||||
psuccess} (0) on success and an error code on failure.
|
||||
|
||||
As a special case, if the {\it comparg} is a null pointer or the empty
|
||||
string and the {\it dirarg} refers to a link that is not a DIRECTORY,
|
||||
then a directory entry containing a single link to the {\it vlink}
|
||||
named by comparg is returned; in that special case, this interface
|
||||
behaves similarly to {\bf rd\_slink}.
|
||||
|
||||
This function's interface will change; it will probably be
|
||||
renamed {\bf p\_get\_ndir()}.
|
||||
|
||||
{\bf VLINK rd\_vlink}({\it path}) is an alternative interface for
|
||||
resolving names. {\bf rd\_vlink} returns the single link named by
|
||||
{\it path}. Its function is equivalent to calling {\bf rd\_vdir} with
|
||||
{\it comparg} set to the last component of the path and {\it dirarg}
|
||||
set to the prefix. {\bf rd\_vlink} returns {\sc null} on failure
|
||||
leaving an error code in {\tt perrno}. {\bf rd\_vlink()} will also
|
||||
expand symbolic links it encounters, whereas {\bf rd\_vdir()} returns
|
||||
the symbolic links in a directory unexpanded.
|
||||
|
||||
{\bf {\it VLINK} rd\_slink}({\it path}) works just like {\bf
|
||||
rd\_vlink}, except it will not expand symbolic links.
|
||||
|
||||
|
||||
{\bf pfs\_open}({\it VLINK vl,int flags}) and
|
||||
{\bf FILE *pfs\_fopen}({\it VLINK vl, char *type}) are identical to {\bf open} and {\bf fopen} in
|
||||
the C library except that instead of a filename, they take a pointer
|
||||
to a Prospero
|
||||
virtual link structure and open the file referenced by the link.
|
||||
Note that they currently do not work to create files; indeed, they
|
||||
inherently can't, since they accept a pointer to an already existing
|
||||
link. {\bf pfs\_open} does not take the third optional {\it mode}
|
||||
argument that {\bf open} takes, since Prospero's access control list
|
||||
mechanism does map well onto the {\sc unix} protection modes.
|
||||
|
||||
For files which are not already mapped into the local {\sc unix}
|
||||
filesystem, these functions work by retrieving the file as a temporary
|
||||
file; a reference to this temporary file is then returned. In the
|
||||
current implementation, we do not cache files; a new copy is retrieved
|
||||
every time you call pfs\_open() or pfs\_fopen(). If you want to use
|
||||
the same data more than once (e.g., display it via a paging program
|
||||
and then offer to save it), it will speed up your program
|
||||
substantially if you know that {\bf pfs\_open()} and {\bf
|
||||
pfs\_fopen()} return file references which you can run {\bf lseek()}
|
||||
or {\bf fseek()} on, respectively.
|
||||
|
||||
Until Prospero release Alpha.5.2, the {\bf pfs\_open} and {\bf
|
||||
pfs\_fopen} calls were in libpcompat, not in libpfs.
|
||||
|
||||
\section{Pcompat Library}
|
||||
|
||||
The compatibility library includes replacements for existing system
|
||||
calls and library routines that interact with the directory service.
|
||||
The replacements optionally resolve names using the Prospero file
|
||||
system. The behavior depends on the value of the {\tt pfs\_enable}
|
||||
global variable. Possible values are defined in {\it pcompat.h} and
|
||||
are described below. Note that {\tt pfs\_enable} exists in only a
|
||||
single instance, even in a multithreaded context; setting it for one
|
||||
thread sets it for all.
|
||||
|
||||
\begin{sloppypar}
|
||||
The default Prospero installation procedure leaves the compatibility
|
||||
library in {\tt lib/pcompat/libpcompat.a}. Programs linked with the
|
||||
compatibility library should also be linked with the pfs library,
|
||||
since the compatibility library uses some functions in libpfs.
|
||||
\end{sloppypar}
|
||||
|
||||
The routines in the compatibility library are self-initializing; they
|
||||
will call p\_initialize() and initialize all data structures
|
||||
internally. This makes it possible to relink existing programs with
|
||||
the compatibility library with less effort.
|
||||
|
||||
Like the POSIX readdir(), the Prospero readdir() is not
|
||||
multithread-safe because it uses internal data structures. We would
|
||||
gladly accept a contributed readdir\_r(), but will not write it
|
||||
ourselves until a strong need appears.
|
||||
|
||||
As of this writing, the compatibility library does not run on as many
|
||||
machines as the pfs library does. Specifically, the compatibility
|
||||
library is known not to work on {\sc HP-UX} and on {\sc AIX}.
|
||||
Therefore, use of the pfs library is suggested for maximal
|
||||
portability. The compatibility library is not compiled by default.
|
||||
(See the Prospero installation instructions for instructions on how to
|
||||
compile it.).
|
||||
|
||||
If you are interested in the pcompat library, you should also look at
|
||||
the Prospero User's Manual, in the section titled ``The Compatibility
|
||||
Library''.
|
||||
|
||||
Setting the environment variable {\tt PFS\_DEBUG} to a numeric value will
|
||||
cause the PCOMPAT library to set the PFS library's value of {\tt
|
||||
pfs\_debug} to that value. This is useful for debugging applications
|
||||
that use the compatibility library.
|
||||
|
||||
By default, the pfs compatability library will report prospero errors
|
||||
encountered by compatibility functions such as open() to {\tt stderr}.
|
||||
You can silence these error messages by setting the variable {\tt int
|
||||
pfs\_quiet} in your program to a non-zero value or by defining your
|
||||
own global variable {\tt pfs\_quiet} with a non-zero initialized
|
||||
value. The global variable {\tt pfs\_quiet} is not multi-threaded; a
|
||||
single instance of it is shared among multi-threaded programs.
|
||||
|
||||
\begin{table}
|
||||
\begin{center}
|
||||
\caption{Settings for the {\tt pfs\_enable} global variable\label{pfsenable}}
|
||||
\vspace{0.1in}
|
||||
\begin{tabular}{|l|p{3.9in}|} \hline
|
||||
Value & Meaning \\ \hline \hline
|
||||
PMAP\_DISABLE & Never resolve names within the virtual system \\ \hline
|
||||
PMAP\_ENABLE & Always resolve names within the virtual system \\ \hline
|
||||
PMAP\_COLON & Resolve names within the virtual system if they contain a : \\ \hline
|
||||
PMAP\_ATSIGN\_NF & Resolve names within the virtual system by default, but
|
||||
treat names beginning with an @ or full path names that
|
||||
don't exist in the virtual system as native file names \\ \hline
|
||||
PMAP\_ATSIGN & Resolve names within the virtual system by default, but
|
||||
treat names beginning with an @ as native file names \\ \hline
|
||||
\end{tabular}
|
||||
\vspace{-0.1in}
|
||||
\end{center}
|
||||
\end{table}
|
||||
|
||||
\subsection{Entry Points}
|
||||
|
||||
\begin{tabbing}
|
||||
{\Large \bf Entry points:} \= {\bf closedir creat, execve,
|
||||
open, opendir, readdir, scandir,}\\
|
||||
\>{\bf seekdir, stat, telldir, and pfs\_access}.
|
||||
\end{tabbing}
|
||||
|
||||
\noindent {\bf closedir, creat, execve, open, opendir, readdir, scandir,
|
||||
seekdir, stat}, and {\bf telldir} are identical to the entry points
|
||||
with the same names in the standard C library except that, depending
|
||||
on the value of the {\tt pfs\_enable} variable, file names may be resolved
|
||||
using Prospero.
|
||||
|
||||
{\bf pfs\_access}({\it char *path,char *npath,int npathlen, int
|
||||
flags}) accepts a name, {\it path}, that is to be resolved using
|
||||
Prospero. {\bf pfs\_access} resolves the name, selects an access
|
||||
method, mounts the appropriate file system or retrieves the file if
|
||||
necessary, and returns a new name in {\it npath} that may be passed to
|
||||
open. {\it npath} must be a buffer large enough to hold the new name,
|
||||
and its size must be passed in {\it npathlen}. By setting {\it
|
||||
flags}, it is possible to specify that the file is to be created if it
|
||||
does not exist ({\sc pfa\_create}), or to indicate that the file will
|
||||
be opened read only ({\sc pfa\_ro}). {\bf pfs\_access} returns {\sc
|
||||
psuccess} (0) or {\sc pmc\_delete\_on\_close} on success. A return
|
||||
value of {\sc pmc\_delete\_on\_close} indicates that the file has been
|
||||
cached on the local system and that the calling application should
|
||||
delete the cached copy when done with it. Any other return code
|
||||
indicates failure.
|
||||
|
||||
{\bf Warning:} As of this writing, the {\sc pfa\_create} flag has not
|
||||
been fully implemented.
|
||||
|
||||
\end{document}
|
||||
2
prospero/doc/man/FILES
Normal file
2
prospero/doc/man/FILES
Normal file
@@ -0,0 +1,2 @@
|
||||
FILES
|
||||
archie.man
|
||||
194
prospero/doc/man/archie.man
Normal file
194
prospero/doc/man/archie.man
Normal file
@@ -0,0 +1,194 @@
|
||||
.TH ARCHIE 1 "20 August 1991" "Archie (Prospero)"
|
||||
.SH NAME
|
||||
archie \- query archie anonymous ftp databases using Prospero
|
||||
.SH SYNOPSIS
|
||||
.in +\w'\fBarchie \fR'u
|
||||
.ti -\w'\fBarchie \fR'u
|
||||
.B archie\
|
||||
\ [\ \fB\-cers\fR\ ]\
|
||||
\ [\ \fB\-l\fR\ ]\ [\ \fB\-t\fR\ ]\
|
||||
\ [\ \fB\-m\fR\ \fI#\fR\ ]\ [\ \fB\-N\fR\ \fI#\fR\ ]\
|
||||
\ [\ \fB\-H\fR\ \fIhost\fR\ ]\ \fIstring\fR
|
||||
.SH DESCRIPTION
|
||||
.B archie
|
||||
queries an archie anonymous ftp database looking for the specified
|
||||
.I string
|
||||
using the
|
||||
.B Prospero
|
||||
protocol. This client is based on
|
||||
.B Prospero
|
||||
version
|
||||
.BR Alpha.5.2 .
|
||||
|
||||
|
||||
The general method of use is
|
||||
|
||||
.RS
|
||||
%
|
||||
.B archie string
|
||||
.RE
|
||||
.PP
|
||||
|
||||
For example,
|
||||
|
||||
.RS
|
||||
%
|
||||
.B archie emacs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
will find all anonymous FTP sites in the archie database that have a file
|
||||
named
|
||||
.B emacs
|
||||
in their system's FTP area (emacs must be the entire last component
|
||||
of the name of the file or directory). Regular expressions, such as
|
||||
|
||||
.RS
|
||||
%
|
||||
.B archie -r '[xX][lL]isp'
|
||||
.RE
|
||||
.PP
|
||||
|
||||
may also be used for searches. (See the manual of a reasonably good
|
||||
editor, like GNU Emacs or vi, for more information on using regular
|
||||
expressions.)
|
||||
|
||||
.SH OPTIONS
|
||||
The options currently available to this
|
||||
.B archie
|
||||
client are:
|
||||
|
||||
.PD 0
|
||||
.TP 12
|
||||
.BR \-c
|
||||
Search substrings paying attention to upper & lower case.
|
||||
.TP
|
||||
.BR \-e
|
||||
Exact string match. (This is the default.)
|
||||
.TP
|
||||
.BR \-r
|
||||
Search using a regular expression.
|
||||
.TP
|
||||
.BR \-s
|
||||
Search substrings ignoring the case of the letters.
|
||||
.TP
|
||||
.BR \-l
|
||||
Output results in a form suitable for parsing by programs.
|
||||
.TP
|
||||
.BR \-t
|
||||
Sort the results inverted by date.
|
||||
.TP
|
||||
.BI \-m\ number
|
||||
Specifies the maximum \fInumber\fP of hits (matches) to return. By
|
||||
default, this value is 95.
|
||||
.TP
|
||||
.BI -N #
|
||||
Sets the "niceness" of a query; by default, it's set to 0.
|
||||
Without an argument, \fB\-N\fR defaults to 35765. If you use
|
||||
\fB\-N\fR with an argument between 0 and 35765, it'll adjust itself
|
||||
accordingly.
|
||||
.TP
|
||||
.BI \-H\ host
|
||||
Tells the client to query the Archie server named \fIhost\fP.
|
||||
|
||||
.SH WARNING
|
||||
|
||||
Unfortunately, this manual page was last updated for the archie client
|
||||
based upon Prospero Beta.4.2. This file does not contain lies, but it
|
||||
also does not cover the new Archie 3 features of the current client;
|
||||
there's a big comment close to the start of the source file
|
||||
\fBuser/archie/archie.c\fR that should be merged in at this point.
|
||||
Type just .BR \*(lqarchie\*(rq to get a list of the current supported
|
||||
options.
|
||||
|
||||
.SH QUERY PRIORITY
|
||||
Please use the \fB\-N\fR option whenever you don't demand immediacy, or
|
||||
when you're requesting things that could generate large responses.
|
||||
Even when using the nice option, you should still try to avoid big
|
||||
jobs during busy periods. Here is a list of what we consider to be
|
||||
nice values that accurately reflect the priority of a job to the server.
|
||||
|
||||
.RS
|
||||
.TP 20
|
||||
.B Normal
|
||||
0
|
||||
.TP
|
||||
.B Nice
|
||||
500
|
||||
.TP
|
||||
.B Nicer
|
||||
1000
|
||||
.TP
|
||||
.B Very Nice
|
||||
5000
|
||||
.TP
|
||||
.B Extremely Nice
|
||||
10000
|
||||
.TP
|
||||
.B Nicest
|
||||
32765
|
||||
.RE
|
||||
|
||||
The last priority, \fBNicest\fR, would be used when a job should wait until
|
||||
the queue is essentially empty before running. You should pick one of
|
||||
these values to use, possibly modifying it slightly depending on where
|
||||
you think your priority should land. For example, 32760 would mean
|
||||
wait until the queue is empty, but jump ahead of other jobs that have
|
||||
selected \fBNicest\fR.
|
||||
|
||||
There are certain types of things that we suggest using \fBNicest\fR
|
||||
for, irregardless. In particular, any searches for which you would
|
||||
have a hard time justifying the use of anything but extra resources.
|
||||
(We all know what those searches would be for.)
|
||||
|
||||
.SH NOTES
|
||||
The three search-modifying arguments (\fB\-c\fR, \fB\-r\fB, and \fB\-s\fR)
|
||||
are all mutually exclusive; only the last one counts. If you specify
|
||||
\fB\-e\fR with any of \fB\-c\fR, \fB\-r\fB, or \fB\-s\fR,
|
||||
the server will first check for an exact match, then fall back to the
|
||||
case-sensitive, case-insensitive, or regular expression search. This is
|
||||
so if there are matches that are particularly obvious, it will take a
|
||||
minimal amount of time to satisfy your request.
|
||||
|
||||
If you list a single `\-' by itself, any further arguments will be
|
||||
taken as part of the search string. This is intended to enable
|
||||
searching for strings that begin with a `\-'; for example:
|
||||
|
||||
.RS
|
||||
%
|
||||
.B archie \-s \- \-old
|
||||
.RE
|
||||
|
||||
will search for all filenames that contain the string `\-old' in them.
|
||||
|
||||
.SH RESPONSE
|
||||
Archie servers are set up to respond to a number of requests in a
|
||||
queued fashion. That is, smaller requests get served much more
|
||||
quickly than do large requests. As a result, the more often you query
|
||||
the Archie server, or the larger your requests, the longer the queue
|
||||
will become, resulting in a longer waiting period for everyone's
|
||||
requests. Please be frugal when possible, for your benefit as well as
|
||||
for the other users.
|
||||
|
||||
.SH SEE ALSO
|
||||
For more information on regular expressions, see the man[ual] pages on:
|
||||
|
||||
.BR regex (3) ,
|
||||
.BR ed (1)
|
||||
|
||||
.SH AUTHORS
|
||||
The
|
||||
.B archie
|
||||
service was conceived and implemented by Alan Emtage
|
||||
(bajan@bunyip.com) and Peter Deutsch (peterd@bunyip.com). The
|
||||
entire Internet is in their debt.
|
||||
|
||||
This
|
||||
.BR archie
|
||||
client was written by Clifford Neuman (bcn@isi.edu)
|
||||
with changes by Brendan Kehoe (brendan@cs.widener.edu) and
|
||||
George Ferguson (ferguson@cs.rochester.edu).
|
||||
|
||||
The man page was originally written by Jeff Kellem
|
||||
.BR (composer@chem.bu.edu),
|
||||
and later modified by Brendan Kehoe.
|
||||
3346
prospero/doc/manual.PS
Normal file
3346
prospero/doc/manual.PS
Normal file
File diff suppressed because it is too large
Load Diff
1607
prospero/doc/manual.tex
Normal file
1607
prospero/doc/manual.tex
Normal file
File diff suppressed because it is too large
Load Diff
1482
prospero/doc/menu-api.PS
Normal file
1482
prospero/doc/menu-api.PS
Normal file
File diff suppressed because it is too large
Load Diff
334
prospero/doc/menu-api.tex
Normal file
334
prospero/doc/menu-api.tex
Normal file
@@ -0,0 +1,334 @@
|
||||
% If you somehow got this file without fullpage.sty, delete
|
||||
% ``fullpage'' from the list of style options. It just pulls out the
|
||||
% margins a bit.
|
||||
\documentstyle[11pt,twoside,fullpage]{article}
|
||||
% New commands
|
||||
%-------------
|
||||
% Intro copied from prospero-protocol-v5.txt
|
||||
|
||||
% for meta-symbols
|
||||
\newcommand{\meta}[1]{{\bf \mbox{\(<\)#1\(>\)}}}
|
||||
% for literal tokens.
|
||||
\newcommand{\lit}[1]{{\tt \mbox{#1}}}
|
||||
%for attributes
|
||||
\newcommand{\atr}[1]{\mbox{\sc #1}}
|
||||
% for identifying text
|
||||
\newcommand{\text}[1]{{\em #1}\/}
|
||||
|
||||
% Start and end of One or More
|
||||
\newcommand{\ooms}{\([\,\)}
|
||||
\newcommand{\oome}{\(\,]^+\)}
|
||||
% start and end of zero or more
|
||||
\newcommand{\zoms}{\([\,\)}
|
||||
\newcommand{\zome}{\(\,]^*\)}
|
||||
% Start and end of zero or one
|
||||
\newcommand{\zoos}{\([\,\)}
|
||||
\newcommand{\zooe}{\(\,]\)}
|
||||
% start an OR
|
||||
\newcommand{\ors}{{\bf (\,}}
|
||||
\newcommand{\ore}{{\bf \,) }}
|
||||
\newcommand{\metaor}{{\em \,or\, }}
|
||||
\newcommand{\hexnum}[1]{\(\mbox{#1}_{16}\)}
|
||||
\newcommand{\unix}{{\sc unix}}
|
||||
\newenvironment{command}{\begin{verse}\sloppy}{\end{verse}}
|
||||
\newcommand{\commandsize}{\large}
|
||||
|
||||
%\newtheorem{example}{Example}
|
||||
% Uncomment this for almost-double spacing
|
||||
%\renewcommand{\baselinestretch}{1.7}
|
||||
%\newcommand{\hozline}{\rule{\textwidth}{0.3mm}}
|
||||
%\newcommand{\hozline}{\makebox[\textwidth]{\hrulefill}}
|
||||
%\newcommand{\bex}{\begin{example} \begin{rm}}
|
||||
%\newcommand{\eex}{$\Box$ \end{rm} \end{example}}
|
||||
%\newcommand{\cbs}{\chgbarbegin}
|
||||
%\newcommand{\cbe}{\chgbarend}
|
||||
%\newcommand{\cbs}{}
|
||||
%\newcommand{\cbe}{}
|
||||
|
||||
%\newcommand{\ptag}{\begin{flushright} {\rm ($P$)} \end{flushright} }
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagenumbering{arabic}
|
||||
\pagestyle{plain}
|
||||
|
||||
\renewcommand{\thepage}{\arabic{page}}
|
||||
|
||||
\begin{titlepage}
|
||||
|
||||
\renewcommand{\thefootnote}{}
|
||||
%\footnotetext{\hspace*{-21pt}
|
||||
%Digital copies of the latest revision of this document may be obtained
|
||||
%through Prospero as
|
||||
%\mbox{\verb"/papers/subjects/operating-systems/prospero/doc/menu-api.PS.Z"},
|
||||
%in the \mbox{\tt \#/INET/EDU/ISI/swa} virtual system, or through
|
||||
%Anonymous FTP from \mbox{\tt PROSPERO.ISI.EDU} as
|
||||
%\mbox{\verb"/pub/prospero/doc/prospero-menu-api.PS.Z"}
|
||||
%}
|
||||
\footnotetext{\hspace*{-21pt}
|
||||
This work was supported in part by the National Science
|
||||
Foundation (Grant No. CCR-8619663), the Washington Technology Center,
|
||||
Digital Equipment Corporation, and the Defense Advance Research
|
||||
Projects Agency under NASA Cooperative Agreement NCC-2-539.
|
||||
The views and conclusions contained in
|
||||
this document are those of the authors and should not be interpreted as
|
||||
representing the official policies, either expressed or implied, of
|
||||
any of the funding agencies.
|
||||
The authors may be reached
|
||||
at USC/ISI, 4676 Admiralty Way, Marina del Rey, California\ \ 90292-6695, USA.
|
||||
Telephone +1 (310) 822-1511, email \mbox{\verb"info-prospero@isi.edu"}. }
|
||||
\renewcommand{\thefootnote}{\arabic{footnote}}
|
||||
|
||||
|
||||
\vspace*{\fill}
|
||||
\begin{center}
|
||||
\Large Menu-Based Browser API to Prospero\\
|
||||
\vskip 1.5em
|
||||
{\large Draft of 5 July 1993} \\
|
||||
{\large Document Revision No. 0.3} \\
|
||||
\end{center}
|
||||
\vspace{.5in}
|
||||
|
||||
%\Large \hspace*{\fill} Steven Augart
|
||||
%\footnotetext{\hspace*{-18pt}
|
||||
% To Contact the Authors: \\
|
||||
% Electronic Mail: \mbox{\verb"info-prospero@isi.edu"} \\
|
||||
% Telephone: +1 (310) 822-1511 \\
|
||||
% Mail: USC Information Sciences Institute, 4676 Admiralty Way,
|
||||
% Marina del Rey, California 90292--6695\ \ U.S.A.
|
||||
%}
|
||||
%\hfill Kwynn Buess
|
||||
%\hspace*{\fill} \\
|
||||
\begin{center}
|
||||
\Large Steven Seger Augart
|
||||
\vspace{.1in}
|
||||
\Large B. Clifford Neuman
|
||||
\vspace{.1in}
|
||||
\Large Kwynn Buess
|
||||
\vspace{.2in}
|
||||
\Large Information Sciences Institute \\
|
||||
University of Southern California
|
||||
\end{center}
|
||||
\vspace*{1.2in}
|
||||
\vspace*{\fill}
|
||||
\end{titlepage}
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\section{INTRODUCTION}
|
||||
|
||||
The menu-based browser API is a description of interfaces to the
|
||||
PROSPERO library. The functions and variables described here will
|
||||
eventually be prototyped in the standard Prospero include file {\tt
|
||||
p\_menu.h}; since the menu browser client and this API are still under
|
||||
development, that include file is currently located in {\tt user/menu}
|
||||
in the Prospero sources, along with the Prospero menu browser client.
|
||||
|
||||
\section{Data Structures}
|
||||
|
||||
The data structure {\it VLINK} is described in the include file {\tt
|
||||
pfs.h}. The user of this API needs to know only the following facts
|
||||
about it:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item A {\it VLINK} structure has members {\tt next}
|
||||
and {\tt previous}. These members are only meaningful when working with a
|
||||
linked list of {\it VLINK structures}; they point to the next and
|
||||
previous member of the linked list. The {\tt previous} of the head of the
|
||||
list points to the tail of the list. The {\tt next} of the tail of
|
||||
the list is a null pointer.
|
||||
|
||||
\item The {\tt APPEND\_ITEM({\it VLINK new}, {\it VLINK head})} macro,
|
||||
defined in {\tt list\_macros.h}, appends {\it new} to a doubly-linked
|
||||
list headed by the vlink {\it head}. {\it head} is an initialized
|
||||
variable which points to an already existing list of {\it VLINK}s. It
|
||||
can be initialized to the empty list by setting its value to the null pointer.
|
||||
|
||||
\item The {\tt EXTRACT\_ITEM}({\it VLINK item, VLINK head}) macros,
|
||||
also defined in {\tt list\_macros.h}, removes the item {\it item} from
|
||||
the doubly-linked list headed by {\it head}. If ITEM is not a member
|
||||
of the list, the results are not defined. The extracted item will NOT
|
||||
be freed. {\tt EXTRACT\_ITEM} will reset {\it head} if necessary.
|
||||
This is useful for extracting a single item for future use from a
|
||||
linked list of {\it VLINK}s and then running {\tt vllfree()} on the
|
||||
list.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
The data structure {\it TOKEN} is also used by this API interface.
|
||||
It obeys the same doubly linked list convention that {\it VLINK}
|
||||
does.
|
||||
|
||||
\section {Error Reporting}
|
||||
|
||||
\begin{verbatim}
|
||||
extern char *m_error;
|
||||
\end{verbatim}
|
||||
|
||||
All of the functions described in this file set the global variable
|
||||
{\tt m\_error} to signal success or failure. Upon failure, they
|
||||
will return with {\tt m\_error} set to a pointer to a string which
|
||||
is an error message. Upon success, they will return with {\tt
|
||||
m\_error} set to a {\it NULL} pointer.
|
||||
|
||||
\section{Library Calls}
|
||||
|
||||
\subsection{\tt {\it VLINK }m\_top\_menu({\it void})}
|
||||
|
||||
{\tt m\_top\_menu()} takes no arguments. It returns a single {\it
|
||||
VLINK}, which is a link to the first menu to be displayed to the user.
|
||||
You then call m\_get\_menu() to get the contents of that menu.
|
||||
|
||||
\subsubsection{Implementation}
|
||||
|
||||
Return a vlink whose host and hsoname are set from the VSWORK\_HOST and
|
||||
VSWORK\_FILE environment variables. The NAME of this vlink (the menu
|
||||
title that will be displayed) should for now be the last component of
|
||||
the VSNAME environment variable. Later we will talk about how to
|
||||
start up the browser when somebody is not yet VFSETUP to any virtual
|
||||
system.
|
||||
|
||||
\subsubsection{Additional ways to get top menu --- EXCEPTION TO API}
|
||||
|
||||
Some menu browsers allow the top menu to be specified on the command
|
||||
line, using either native information or a directory name in the
|
||||
currently active virtual system. At the moment, no API functions are
|
||||
specified to handle this situation, and the PFS library must be called
|
||||
directly. If the top menu is specified as a directory name in the
|
||||
currently active virtual system, just use rd\_vlink() for now. If it
|
||||
was specified with native information, vlalloc() a new link, set its
|
||||
HSONAME to the native hsoname, its HOST to the native host, and use
|
||||
rd\_vlink(). Eventually, we will design an API function or two to
|
||||
handle getting the top menu by Prospero file name or by host and
|
||||
hsoname.
|
||||
|
||||
|
||||
\subsection{\tt {\it VLINK }m\_get\_menu({\it VLINK} menu)}
|
||||
|
||||
{\tt m\_get\_menu()} is given a {\it VLINK} to a menu as its argument.
|
||||
It will return an ordered list of {\it VLINK}s, each corresponding to
|
||||
an item in the menu.
|
||||
|
||||
\subsubsection{Implementation}
|
||||
|
||||
This orders the VLINKs according to the {\sc COLLATION-ORDER} attribute.
|
||||
|
||||
When asking for attributes to be returned in the underlying Prospero
|
||||
call, please specify that you want
|
||||
MENU-ITEM-DESCRIPTION+COLLATION-ORDER+ACCESS-METHOD to be returned.
|
||||
(Of course, do this only if you are using a PFS library interface that
|
||||
allows you to specify which attributes you are requested; at the
|
||||
moment, none of the interfaces allow this.)
|
||||
This will help us be compatible with possible future changes to the
|
||||
way the server works.
|
||||
|
||||
The 1st two attributes are ones we need to display the menu. Asking
|
||||
for the ACCESS-METHOD right away is also a good idea, since if you
|
||||
don't support an access-method for a file, you can choose show on the
|
||||
menu either that it is unreachable or not display it at all.
|
||||
|
||||
\subsection{\tt {\it char *} m\_item\_description({\it VLINK vl})}
|
||||
|
||||
This returns a string to be displayed as a description for the menu item
|
||||
associated with VLINK. This is a pointer to data that may be
|
||||
overwritten on the next call to {\tt m\_item\_description()}, but not before.
|
||||
|
||||
If {\it vl} is a link to a sub-menu, then, when that sub-menu is
|
||||
displayed, most clients will also use the string returned by {\tt
|
||||
m\_item\_description()} as a title for that sub-menu.
|
||||
|
||||
\subsubsection{Implementation}
|
||||
|
||||
Look at the {\sc MENU-ITEM-DESCRIPTION} attribute associated with {\it
|
||||
vl}. If that fails,look at {\it vl}'s {\tt name} member.
|
||||
|
||||
\subsection{\tt {\it int} m\_class({\it VLINK vl})}
|
||||
|
||||
Return a CLASS for the object pointed to by the link. The class says
|
||||
what you can do with an object (view it, read it, run a search through
|
||||
it, open it up as a submenu, use it to connect to another service, etc.) These classes are constants defined
|
||||
in the API.H file. They are: {\sc m\_class\_unknown} (must have a
|
||||
value of 0), {\sc m\_class\_menu, m\_class\_document, m\_class\_search,
|
||||
m\_class\_portal, m\_class\_sound, m\_class\_image, m\_class\_data,
|
||||
and m\_class\_void}.
|
||||
|
||||
|
||||
\subsubsection{Implementation}
|
||||
|
||||
This is derived from the value of the {\sc object-interpretation}
|
||||
attribute. We are working on a new portable interface to this
|
||||
function which lets the browser specify whether it knows how to
|
||||
display/retrieve/access particular types and particular subtypes. The
|
||||
current implementation of the api returns {\sc m\_class\_data} for
|
||||
any types that it recognized but cannot perform an appropriate complex
|
||||
operation on (e.g., if the OBJECT-INTERPRETATION is a SOUND but you
|
||||
have no sound player), then return {\sc m\_class\_data}, and any
|
||||
unknown types are returned as {\sc m\_class\_unknown}.
|
||||
|
||||
\subsection{\tt {\it TOKEN} m\_interpretation({\it vLINK vl})}
|
||||
|
||||
This will return the sequence that is the value of the
|
||||
OBJECT-INTERPRETATION attribute. You will call m\_interpretation() for
|
||||
information that will let you actually display the file. This is used
|
||||
internally by m\_class(), too.
|
||||
|
||||
\subsubsection{Implementation}
|
||||
|
||||
Warning: The current api implementation does not fully meet this specification
|
||||
for m\_interpretation().
|
||||
|
||||
If no {\sc object-interpretation} attribute is present, we look at the
|
||||
{\it vl}'s {\tt target} member and see if it is {\tt DIRECTORY}, {\tt
|
||||
EXTERNAL}, or {\tt FILE}, and we also perform some simple tests on the
|
||||
suffix of a file to check whether it is likely to be a binary or text
|
||||
file. If it ends in {\tt .gif,} it's IMAGE GIF. If it ends in {\tt
|
||||
.ps} or {\tt .PS,} it's DOCUMENT POSTSCRIPT. If it ends in {\tt .Z,}
|
||||
it's EMBEDDED COMPRESS, then strip off the {\tt .Z} and try again for
|
||||
the rest of the object interpretation. If it ends in {\tt .z} or {\tt
|
||||
.gz,} it's EMBEDDED GZIP. Otherwise, assume it's DOCUMENT TEXT ASCII.
|
||||
|
||||
The {\sc object-interpretation} attribute is further defined in the
|
||||
{\tt working-notes} subdirectory of the menu sources.
|
||||
|
||||
\subsection{\tt {\it FILE *} m\_fopen\_file({\it VLINK vl})}
|
||||
|
||||
This opens the file referenced by {\it vl} in read-only mode and
|
||||
returns a standard IO library {\it FILE} pointer to it, which is then
|
||||
read from and manipulated in accordance with the stdio library
|
||||
routines.
|
||||
|
||||
\subsubsection{Implementation}
|
||||
|
||||
This is just an interface to {\tt pfs\_fopen()}.
|
||||
|
||||
\subsection{\tt {\it int} m\_open\_file({\it VLINK vl})}
|
||||
|
||||
This opens the file referenced by {\it vl} in read-only mode and
|
||||
returns a standard UNIX integer file descriptor referring to it. This
|
||||
descriptor can then be manipulated in accordance with the standard
|
||||
conventions.
|
||||
|
||||
\subsubsection{Implementation}
|
||||
|
||||
This is just an interface to {\tt pfs\_open()}.
|
||||
|
||||
\subsection{\tt {\it void} vlfree({\it vl}), {\it void} vllfree({\it vl}),
|
||||
{\it VLINK} vlcopy({\it VLINK vl, int r})}
|
||||
|
||||
{\tt vlfree()} frees the vlink {\it vl}. It should be called on the
|
||||
link returned by {\tt m\_top\_menu()} when the application no
|
||||
longer has a use for it. {\tt vllfree} frees a linked list of {\it
|
||||
vlink}s headed by {\it vl}. It should be called on the list returned
|
||||
by {\tt m\_get\_menu()} when the application no longer has a need for
|
||||
it.
|
||||
|
||||
{\tt vlcopy()} returns a copy of {\it vl}, with the {\tt next} and {\tt
|
||||
previous} members set to the null pointer. {\it r} should always be zero.
|
||||
|
||||
\subsubsection{Implementation}
|
||||
|
||||
These three functions are already in libpfs; you don't need to implement them.
|
||||
|
||||
\end{document}
|
||||
765
prospero/doc/more-getting-started.PS
Normal file
765
prospero/doc/more-getting-started.PS
Normal file
@@ -0,0 +1,765 @@
|
||||
%!PS-Adobe-2.0
|
||||
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
|
||||
%%Title: more-getting-started.dvi
|
||||
%%Pages: 2 1
|
||||
%%BoundingBox: 0 0 612 792
|
||||
%%EndComments
|
||||
%%BeginProcSet: tex.pro
|
||||
/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
|
||||
load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
|
||||
isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
|
||||
Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
|
||||
round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
|
||||
N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
|
||||
/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{
|
||||
statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N
|
||||
/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin
|
||||
/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array
|
||||
/BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2
|
||||
array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}
|
||||
B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont
|
||||
setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup
|
||||
length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{
|
||||
ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B
|
||||
/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0
|
||||
N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S
|
||||
dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0
|
||||
ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
|
||||
ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}
|
||||
imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr
|
||||
put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf
|
||||
div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook
|
||||
known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore
|
||||
showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
|
||||
known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256
|
||||
array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N
|
||||
/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X
|
||||
/rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0
|
||||
7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1
|
||||
TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1
|
||||
-.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{
|
||||
moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{
|
||||
S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B
|
||||
/j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w
|
||||
}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
|
||||
a}B /bos{/SS save N}B /eos{clear SS restore}B end
|
||||
%%EndProcSet
|
||||
TeXDict begin 1000 300 300 @start /Fa 31 121 df<FFFF80FFFF80FFFF8011037E8D16>
|
||||
45 D<70F8F8F8700505788416>I<000180000380000380000700000700000E00000E00001C0000
|
||||
1C0000380000380000700000700000E00000E00001C00001C0000380000380000700000700000E
|
||||
00000E00001C00001C0000380000380000700000700000E00000E00000C0000011207E9C16>I<
|
||||
00E00001F00001F00001B00001B00003B80003B80003B800031800071C00071C00071C00071C00
|
||||
071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1FE07F1FC013197F
|
||||
9816>65 D<7FF800FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C
|
||||
00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007F
|
||||
F8001319809816>68 D<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C
|
||||
001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFF
|
||||
E0FFFFE07FFFE013197F9816>I<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C00001C
|
||||
00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00001C00001C00001C00001C
|
||||
0000FF8000FFC000FF800013197F9816>I<FFFEFFFEFFFE038003800380038003800380038003
|
||||
8003800380038003800380038003800380038003800380FFFEFFFEFFFE0F197D9816>73
|
||||
D<FFC000FFC000FFC0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00
|
||||
001C00001C00001C00001C00001C00401C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE01319
|
||||
7F9816>76 D<7E1FC0FF3FE07F1FC01D07001D87001D87001D87001DC7001DC7001CC7001CC700
|
||||
1CE7001CE7001CE7001C67001C67001C77001C77001C37001C37001C37001C17007F1F00FF9F00
|
||||
7F0F0013197F9816>78 D<1FFC003FFE007FFF00780F00F00780E00380E00380E00380E00380E0
|
||||
0380E00380E00380E00380E00380E00380E00380E00380E00380E00380F00780F00780780F007F
|
||||
FF003FFE001FFC0011197E9816>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C0
|
||||
1C01C01C03C01C03801C0F801FFF001FFE001FF8001C00001C00001C00001C00001C00001C0000
|
||||
1C00007F0000FF80007F000012197F9816>I<7FE000FFF8007FFC001C1E001C0F001C07001C07
|
||||
001C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E001C0E001C0E001C0E
|
||||
201C0E701C0E707F07E0FF87E07F03C014197F9816>82 D<07E3001FFF003FFF00781F00F00700
|
||||
E00700E00700E00000F000007800003F80001FF00007FC0000FE00000F00000700000380000380
|
||||
600380E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7FFFE0FFFFE0FFFFE0E0E0
|
||||
E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
|
||||
0000E00000E00000E00000E00000E00007FC000FFE0007FC0013197F9816>I<7F07F0FF8FF87F
|
||||
07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C
|
||||
01C01C01C01C01C01C01C00E03800E038007070007FF0003FE0000F8001519809816>I<7FFF80
|
||||
FFFF80FFFF80E00700E00F00E01E00E01C00003C0000780000700000F00001E00001C00003C000
|
||||
0780000700000F00001E03801C03803C0380780380700380FFFF80FFFF80FFFF8011197E9816>
|
||||
90 D<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E00
|
||||
E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<7E0000FE00007E00000E00000E
|
||||
00000E00000E00000E3E000EFF000FFF800F83C00F00E00E00E00E00700E00700E00700E00700E
|
||||
00700E00700E00E00F01E00F83C00FFF800EFF00063C001419809816>I<003F00007F00003F00
|
||||
00070000070000070000070003C7000FF7001FFF003C1F00780F00700700E00700E00700E00700
|
||||
E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816>100
|
||||
D<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F01012
|
||||
7D9116>I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00380E001C1C000FF8001F
|
||||
F0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0E000E0E000E07001C07C
|
||||
07C03FFF800FFE0003F800131C7F9116>103 D<018003C003C0018000000000000000007FC07F
|
||||
C07FC001C001C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7FFF101A7D9916>
|
||||
105 D<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E03800E03800E03800E0380
|
||||
0E03800E03800E03807FC7F0FFE7F87FC7F01512809116>110 D<03E0000FF8001FFC003C1E00
|
||||
780F00700700E00380E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF800
|
||||
03E00011127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00
|
||||
700E00700E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00
|
||||
000E00007FC000FFE0007FC000141B809116>I<FF0FC0FF3FE0FF7FE007F04007C00007800007
|
||||
8000070000070000070000070000070000070000070000070000FFFC00FFFC00FFFC0013127F91
|
||||
16>114 D<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8
|
||||
C7E00F127D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF00070000070000
|
||||
07000007000007000007000007000007010007038007038007038007870003FE0001FC0000F800
|
||||
11177F9616>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E03800E03
|
||||
800E03800E03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F1FC07F3FC07F1FC00F
|
||||
1C00073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0FF
|
||||
3FE07F1FC013127F9116>120 D E /Fb 28 122 df<60F0F8680808081010204080050C7C9C0C>
|
||||
39 D<60F0F0701010101020204080040C7C830C>44 D<60F0F06004047C830C>46
|
||||
D<000600000006000000060000000F0000000F0000000F00000017800000178000001780000023
|
||||
C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180F8000100780001
|
||||
FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F001E001F00FF80FFF0
|
||||
1C1D7F9C1F>65 D<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E0F001E0F001C0F
|
||||
003C0F00780F01F00FFFE00F00780F003C0F001E0F000E0F000F0F000F0F000F0F000F0F000F0F
|
||||
001E0F001E0F003C0F0078FFFFE0181C7E9B1D>I<FFFF800F00E00F00780F003C0F001C0F001E
|
||||
0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F0000
|
||||
0F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>80
|
||||
D<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F
|
||||
0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
|
||||
0F0000000F0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B
|
||||
1E>84 D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C
|
||||
00E01C40E01C40E01C40603C40304E801F870012127E9115>97 D<FC00001C00001C00001C0000
|
||||
1C00001C00001C00001C00001C00001C00001C00001C7C001D86001E03001C01801C01C01C00C0
|
||||
1C00E01C00E01C00E01C00E01C00E01C00E01C00C01C01C01C01801E030019060010F800131D7F
|
||||
9C17>I<07E00C301878307870306000E000E000E000E000E000E00060007004300418080C3007
|
||||
C00E127E9112>I<003F0000070000070000070000070000070000070000070000070000070000
|
||||
070003E7000C1700180F00300700700700600700E00700E00700E00700E00700E00700E0070060
|
||||
0700700700300700180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FF
|
||||
FEE000E000E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E
|
||||
000E000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E00
|
||||
0E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C00381C00
|
||||
381C001818001C38000C300013C0001000003000001800001FF8001FFF001FFF803003806001C0
|
||||
C000C0C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC00001C00001C00001C00
|
||||
001C00001C00001C00001C00001C00001C00001C00001C7C001C87001D03001E03801C03801C03
|
||||
801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0141D
|
||||
7F9C17>I<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C00
|
||||
1C001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<FC001C001C001C00
|
||||
1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
|
||||
001C001C001C001C00FF80091D7F9C0C>108 D<FC7E07E0001C838838001D019018001E01E01C
|
||||
001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0
|
||||
1C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<
|
||||
FC7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
|
||||
1C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E1C001806003003007003806001
|
||||
80E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0001212
|
||||
7F9115>I<FC7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C
|
||||
00E01C01C01C01C01C01801E03001D06001CF8001C00001C00001C00001C00001C00001C00001C
|
||||
0000FF8000131A7F9117>I<FCE01D301E781E781C301C001C001C001C001C001C001C001C001C
|
||||
001C001C001C00FFC00D127F9110>114 D<1F9030704030C010C010E010F8007F803FE00FF000
|
||||
F880388018C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C003C00FF
|
||||
E01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F99
|
||||
10>I<FC1F801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
|
||||
1C03801C03801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E02
|
||||
000E020007040007040007040003880003880003D80001D00001D00000E00000E00000E0000040
|
||||
0013127F9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B82000E1182
|
||||
000711C4000711C4000720C40003A0E80003A0E80003C0680001C0700001C07000018030000080
|
||||
20001B127F911E>I<FF07E03C03801C01001C01000E02000E0200070400070400070400038800
|
||||
03880003D80001D00001D00000E00000E00000E000004000004000008000008000F08000F10000
|
||||
F300006600003C0000131A7F9116>121 D E /Fc 1 50 df<0C001C00EC000C000C000C000C00
|
||||
0C000C000C000C000C000C000C000C000C000C000C00FFC00A137D9211>49
|
||||
D E /Fd 33 119 df<7FFFC0FFFFE0FFFFE07FFFC013047D901A>45 D<3078FCFC783006067685
|
||||
1A>I<0000C00001E00001E00003E00003C00007C0000780000F80000F00000F00001F00001E00
|
||||
003E00003C00007C0000780000780000F80000F00001F00001E00003E00003C00003C00007C000
|
||||
0780000F80000F00001F00001E00001E00003E00003C00007C0000780000F80000F00000F00000
|
||||
60000013277DA21A>I<3FFFC07FFFC07FFFC07000007000007000007000007000007000007000
|
||||
0070000071F8007FFE007FFF007E07807803C03001C00001C00000E00000E00000E06000E0F000
|
||||
E0F001C0E001C07003807C0F803FFF000FFC0003F000131E7D9D1A>53 D<7FFE00FFFF007FFF80
|
||||
1C07C01C01E01C00F01C00701C00781C00381C00381C003C1C001C1C001C1C001C1C001C1C001C
|
||||
1C001C1C001C1C001C1C003C1C00381C00381C00781C00701C00F01C01E01C07C07FFFC0FFFF00
|
||||
7FFE00161E7F9D1A>68 D<FFFFF8FFFFF8FFFFF81C00381C00381C00381C00381C00001C00001C
|
||||
00001C0E001C0E001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00001C
|
||||
001C1C001C1C001C1C001C1C001CFFFFFCFFFFFCFFFFFC161E7E9D1A>I<7FFFFCFFFFFC7FFFFC
|
||||
0E001C0E001C0E001C0E001C0E00000E00000E00000E03800E03800E03800FFF800FFF800FFF80
|
||||
0E03800E03800E03800E00000E00000E00000E00000E00000E00000E00000E00007FE000FFE000
|
||||
7FE000161E7F9D1A>I<FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C0
|
||||
0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
|
||||
0001C00001C00001C00001C000FFFF80FFFF80FFFF80111E7C9D1A>73 D<0FFE003FFF807FFFC0
|
||||
7C07C07001C0F001E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0
|
||||
E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E0F001E07001C07C07C07FFFC03FFF80
|
||||
0FFE00131E7D9D1A>79 D<FFFE00FFFF80FFFFC01C03E01C00F01C00701C00781C00381C00381C
|
||||
00381C00381C00781C00701C00F01C03E01FFFC01FFF801FFE001C00001C00001C00001C00001C
|
||||
00001C00001C00001C00001C0000FF8000FF8000FF8000151E7E9D1A>I<FFFC00FFFF00FFFF80
|
||||
1C07C01C01E01C00F01C00701C00701C00701C00701C00F01C01E01C07C01FFF801FFF001FFF80
|
||||
1C07C01C01C01C00E01C00E01C00E01C00E01C00E01C00E21C00E71C00E71C00E7FF807EFF807E
|
||||
FF8038181E7F9D1A>82 D<03F1C00FFDC03FFFC07C0FC07003C0E003C0E001C0E001C0E001C0E0
|
||||
00007000007800003F00001FF00007FE0000FF00000F800003C00001C00000E00000E06000E0E0
|
||||
00E0E000E0E001C0F001C0FC0780FFFF80EFFE00E3F800131E7D9D1A>I<7FFFFEFFFFFEFFFFFE
|
||||
E0380EE0380EE0380EE0380E003800003800003800003800003800003800003800003800003800
|
||||
00380000380000380000380000380000380000380000380000380000380000380003FF8003FF80
|
||||
03FF80171E7F9D1A>I<FF83FEFF83FEFF83FE1C00701C00701C00701C00701C00701C00701C00
|
||||
701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00
|
||||
700E00E00E00E00701C00783C003FF8001FF00007C00171E7F9D1A>I<3FFFF87FFFF87FFFF870
|
||||
00707000E07001E07001C0000380000780000700000E00001E00001C0000380000780000F00000
|
||||
E00001C00003C0000380000700000F00000E00381C00383C0038380038700038FFFFF8FFFFF8FF
|
||||
FFF8151E7E9D1A>90 D<1FF0003FFC007FFE00780F00300700000380000380007F8007FF801FFF
|
||||
803F8380780380700380E00380E00380E00380700780780F803FFFFC1FFDFC07F0FC16157D941A
|
||||
>97 D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E3E000EFF800FFFE0
|
||||
0FC1F00F80700F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F0078
|
||||
0F80F00FC1E00FFFC00EFF80063E00161E7F9D1A>I<00FF8003FFC00FFFE01F01E03C00C07800
|
||||
00700000700000E00000E00000E00000E00000E000007000007000007800703C00701F01F00FFF
|
||||
E003FFC000FE0014157D941A>I<001FC0001FC0001FC00001C00001C00001C00001C00001C000
|
||||
01C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0E001C0E0
|
||||
01C0E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>I<01F80007FF00
|
||||
0FFF801E07C03C01C07800E07000E0E00070E00070FFFFF0FFFFF0FFFFF0E00000700000700000
|
||||
7800703C00701F01F00FFFE003FFC000FE0014157D941A>I<0007E0001FF0003FF800787800F0
|
||||
3000E00000E00000E00000E0007FFFF0FFFFF0FFFFF000E00000E00000E00000E00000E00000E0
|
||||
0000E00000E00000E00000E00000E00000E00000E00000E00000E0003FFF807FFFC03FFF80151E
|
||||
7F9D1A>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E3E000EFF800F
|
||||
FFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E
|
||||
00E00E00E00E00E0FFE3FEFFE7FEFFE3FE171E7F9D1A>104 D<00C00001E00001E00000C00000
|
||||
00000000000000000000000000000000007FE0007FE0007FE00000E00000E00000E00000E00000
|
||||
E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0007FFF80FFFFC07F
|
||||
FF80121F7C9E1A>I<FFE000FFE000FFE00000E00000E00000E00000E00000E00000E00000E000
|
||||
00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
|
||||
00E00000E00000E00000E000FFFFE0FFFFE0FFFFE0131E7D9D1A>108 D<7CE0E000FFFBF8007F
|
||||
FFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00
|
||||
1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FF9F9F807F1F1F00191580
|
||||
941A>I<FE3E00FEFF80FFFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00
|
||||
E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE17157F941A>I<01F00007
|
||||
FC001FFF003E0F803C07807803C07001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E070
|
||||
01C07803C03C07803E0F801FFF0007FC0001F00013157D941A>I<FE3E00FEFF80FFFFE00FC1F0
|
||||
0F80700F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F0
|
||||
0FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000
|
||||
FFE000FFE00016207F941A>I<7F83F0FF8FF87FBFFC03FC3C03F01803E00003C00003C0000380
|
||||
000380000380000380000380000380000380000380000380000380007FFF00FFFF007FFF001615
|
||||
7E941A>114 D<07FB801FFF807FFF80780780E00380E00380E003807800007FC0003FFC0007FE
|
||||
00003F800007806001C0E001C0E001C0F003C0FC0780FFFF00EFFE00E3F80012157C941A>I<00
|
||||
C00001C00001C00001C00001C00001C00001C0007FFFE0FFFFE0FFFFE001C00001C00001C00001
|
||||
C00001C00001C00001C00001C00001C00001C00001C07001C07001C07001C07000E0E000FFE000
|
||||
7FC0001F00141C7F9B1A>I<FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E00E00E00E00E00E0
|
||||
0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFE03FFFE00FCFE17157F
|
||||
941A>I<7F83FCFFC7FE7F83FC0E00E00E00E00E00E00701C00701C00701C00383800383800383
|
||||
8001C70001C70001C70000EE0000EE0000EE00007C00007C0000380017157F941A>I
|
||||
E /Fe 1 50 df<03000700FF000700070007000700070007000700070007000700070007000700
|
||||
07000700070007007FF00C157E9412>49 D E /Ff 66 123 df<001F83E000706E3000C07C7801
|
||||
80F8780380F0780700700007007000070070000700700007007000070070000700700007007000
|
||||
07007000FFFFFFC007007000070070000700700007007000070070000700700007007000070070
|
||||
000700700007007000070070000700700007007000070070000700700007007000070070000700
|
||||
7000070078007FE3FF801D2380A21C>11 D<001FC0000070200000C01000018038000380780007
|
||||
0078000700300007000000070000000700000007000000070000000700000007000000FFFFF800
|
||||
070078000700380007003800070038000700380007003800070038000700380007003800070038
|
||||
000700380007003800070038000700380007003800070038000700380007003800070038007FE1
|
||||
FF80192380A21B>I<003C000000006200000000C2000000018100000001810000000381000000
|
||||
038100000003810000000381000000038200000003820000000384000000038800000001C80000
|
||||
0001D000000001E003FF8001C0007C0000E000380001E000300001F00020000270004000047000
|
||||
40000838008000183C008000301C010000701E020000700E020000F007040000F007880000F003
|
||||
880000F001D00100F000E0010078007003003800B802003C031C04000E0C0E0C0003F003F00021
|
||||
257EA326>38 D<70F8FCFC7404040404080810102040060F7CA20E>I<00200040008001000300
|
||||
060004000C000C00180018003000300030007000600060006000E000E000E000E000E000E000E0
|
||||
00E000E000E000E000E000E000E0006000600060007000300030003000180018000C000C000400
|
||||
0600030001000080004000200B327CA413>I<800040002000100018000C000400060006000300
|
||||
030001800180018001C000C000C000C000E000E000E000E000E000E000E000E000E000E000E000
|
||||
E000E000E000C000C000C001C0018001800180030003000600060004000C001800100020004000
|
||||
80000B327DA413>I<70F8FCFC7404040404080810102040060F7C840E>44
|
||||
D<FFE0FFE00B027F8B10>I<70F8F8F87005057C840E>I<01F000071C000C060018030038038038
|
||||
03807001C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F0
|
||||
01E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C07803C03803803803801C07000C
|
||||
0600071C0001F00013227EA018>48 D<008003800F80F380038003800380038003800380038003
|
||||
800380038003800380038003800380038003800380038003800380038003800380038003800380
|
||||
07C0FFFE0F217CA018>I<03F0000C1C001007002007804003C04003C08003E0F003E0F801E0F8
|
||||
01E0F801E02003E00003E00003C00003C0000780000700000E00001C0000180000300000600000
|
||||
C0000180000100000200200400200800201800603000403FFFC07FFFC0FFFFC013217EA018>I<
|
||||
03F8000C1E001007002007804007C07807C07803C07807C03807C0000780000780000700000F00
|
||||
000E0000380003F000001C00000F000007800007800003C00003C00003E02003E07003E0F803E0
|
||||
F803E0F003C04003C0400780200780100F000C1C0003F00013227EA018>I<000200000600000E
|
||||
00000E00001E00001E00002E00004E00004E00008E00008E00010E00020E00020E00040E00040E
|
||||
00080E00100E00100E00200E00200E00400E00800E00FFFFF8000E00000E00000E00000E00000E
|
||||
00000E00000E00001F0001FFF015217FA018>I<1000801E07001FFF001FFE001FF80013E00010
|
||||
000010000010000010000010000010000010F800130E001407001803801003800001C00001C000
|
||||
01E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C04003802007001006000C
|
||||
1C0003F00013227EA018>I<007E0001C1000300800601C00E03C01C03C0180180380000380000
|
||||
780000700000700000F0F800F30C00F40600F40300F80380F801C0F001C0F001E0F001E0F001E0
|
||||
F001E0F001E07001E07001E07001E03801C03801C01803801C03000C0600070C0001F00013227E
|
||||
A018>I<01F000060C000C0600180700380380700380700380F001C0F001C0F001C0F001E0F001
|
||||
E0F001E0F001E0F001E07001E07003E03803E01805E00C05E00619E003E1E00001C00001C00001
|
||||
C0000380000380300300780700780600700C002018001030000FC00013227EA018>57
|
||||
D<70F8F8F870000000000000000000000070F8F8F87005157C940E>I<00018000000180000001
|
||||
80000003C0000003C0000003C0000005E0000005E000000DF0000008F0000008F0000010F80000
|
||||
1078000010780000203C0000203C0000203C0000401E0000401E0000401E0000800F0000800F00
|
||||
00FFFF000100078001000780030007C0020003C0020003C0040003E0040001E0040001E00C0000
|
||||
F00C0000F03E0001F8FF800FFF20237EA225>65 D<FFFFF8000F800E0007800780078003C00780
|
||||
03E0078001E0078001F0078001F0078001F0078001F0078001F0078001E0078003E0078007C007
|
||||
800F8007803E0007FFFE0007800780078003C0078001E0078001F0078000F0078000F8078000F8
|
||||
078000F8078000F8078000F8078000F8078001F0078001F0078003E0078007C00F800F00FFFFFC
|
||||
001D227EA123>I<0007E0100038183000E0063001C00170038000F0070000F00E0000701E0000
|
||||
701C0000303C0000303C0000307C0000107800001078000010F8000000F8000000F8000000F800
|
||||
0000F8000000F8000000F8000000F800000078000000780000107C0000103C0000103C0000101C
|
||||
0000201E0000200E000040070000400380008001C0010000E0020000381C000007E0001C247DA2
|
||||
23>I<FFFFF0000F801E0007800700078003C0078001C0078000E0078000F00780007807800078
|
||||
0780007C0780003C0780003C0780003C0780003E0780003E0780003E0780003E0780003E078000
|
||||
3E0780003E0780003E0780003E0780003C0780003C0780007C0780007807800078078000F00780
|
||||
00E0078001E0078003C0078007000F801E00FFFFF8001F227EA125>I<FFFFFFC00F8007C00780
|
||||
01C0078000C0078000400780004007800060078000200780002007800020078020200780200007
|
||||
80200007802000078060000780E00007FFE0000780E00007806000078020000780200007802000
|
||||
078020080780000807800008078000100780001007800010078000300780003007800070078000
|
||||
E00F8003E0FFFFFFE01D227EA121>I<FFFFFFC00F8007C0078001C0078000C007800040078000
|
||||
400780006007800020078000200780002007802020078020000780200007802000078060000780
|
||||
E00007FFE0000780E0000780600007802000078020000780200007802000078000000780000007
|
||||
8000000780000007800000078000000780000007800000078000000FC00000FFFE00001B227EA1
|
||||
20>I<FFFC3FFF0FC003F0078001E0078001E0078001E0078001E0078001E0078001E0078001E0
|
||||
078001E0078001E0078001E0078001E0078001E0078001E0078001E007FFFFE0078001E0078001
|
||||
E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E00780
|
||||
01E0078001E0078001E0078001E00FC003F0FFFC3FFF20227EA125>72 D<FFFC0FC00780078007
|
||||
800780078007800780078007800780078007800780078007800780078007800780078007800780
|
||||
078007800780078007800780078007800FC0FFFC0E227EA112>I<03FFF0001F00000F00000F00
|
||||
000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
|
||||
000F00000F00000F00000F00000F00000F00000F00000F00000F00700F00F80F00F80F00F80E00
|
||||
F01E00401C0020380018700007C00014237EA119>I<FFFE00000FC00000078000000780000007
|
||||
800000078000000780000007800000078000000780000007800000078000000780000007800000
|
||||
078000000780000007800000078000000780000007800000078000000780000007800080078000
|
||||
800780008007800080078001800780018007800100078003000780030007800F000F803F00FFFF
|
||||
FF0019227EA11E>76 D<FFC00003FF0FC00003F007C00003E005E00005E005E00005E004F00009
|
||||
E004F00009E004F00009E004780011E004780011E004780011E0043C0021E0043C0021E0043C00
|
||||
21E0041E0041E0041E0041E0040F0081E0040F0081E0040F0081E004078101E004078101E00407
|
||||
8101E00403C201E00403C201E00401E401E00401E401E00401E401E00400F801E00400F801E004
|
||||
00F801E004007001E00E007001E01F007003F0FFE0203FFF28227EA12D>I<FF8007FF07C000F8
|
||||
07C0007005E0002004F0002004F0002004780020047C0020043C0020041E0020041F0020040F00
|
||||
2004078020040780200403C0200401E0200401E0200400F0200400F8200400782004003C200400
|
||||
3E2004001E2004000F2004000F20040007A0040003E0040003E0040001E0040001E0040000E00E
|
||||
0000601F000060FFE0002020227EA125>I<000FE00000783C0000E00E0003C00780078003C00F
|
||||
0001E00E0000E01E0000F03C0000783C0000787C00007C7C00007C7800003C7800003CF800003E
|
||||
F800003EF800003EF800003EF800003EF800003EF800003EF800003EF800003E7800003C7C0000
|
||||
7C7C00007C3C0000783E0000F81E0000F00F0001E00F0001E0078003C003C0078000E00E000078
|
||||
3C00000FE0001F247DA226>I<FFFFF0000F803C0007800F0007800780078007C0078003C00780
|
||||
03E0078003E0078003E0078003E0078003E0078003E0078003C0078007C00780078007800F0007
|
||||
803C0007FFF0000780000007800000078000000780000007800000078000000780000007800000
|
||||
0780000007800000078000000780000007800000078000000FC00000FFFC00001B227EA121>I<
|
||||
FFFFE000000F803C000007800E00000780078000078007C000078003C000078003E000078003E0
|
||||
00078003E000078003E000078003E000078003C000078007C000078007800007800E000007803C
|
||||
000007FFE000000780700000078038000007801C000007801E000007800E000007800F00000780
|
||||
0F000007800F000007800F000007800F800007800F800007800F800007800F808007800FC08007
|
||||
8007C0800FC003C100FFFC01E2000000007C0021237EA124>82 D<03F0200C0C601802603001E0
|
||||
7000E0600060E00060E00060E00020E00020E00020F00000F000007800007F00003FF0001FFE00
|
||||
0FFF0003FF80003FC00007E00001E00000F00000F0000070800070800070800070800070C00060
|
||||
C00060E000C0F000C0C80180C6070081FC0014247DA21B>I<7FFFFFF878078078600780184007
|
||||
80084007800840078008C007800C80078004800780048007800480078004000780000007800000
|
||||
078000000780000007800000078000000780000007800000078000000780000007800000078000
|
||||
000780000007800000078000000780000007800000078000000780000007800000078000000FC0
|
||||
0003FFFF001E227EA123>I<FFFC07FF0FC000F807800070078000200780002007800020078000
|
||||
200780002007800020078000200780002007800020078000200780002007800020078000200780
|
||||
002007800020078000200780002007800020078000200780002007800020078000200780002003
|
||||
80004003C0004003C0004001C0008000E000800060010000300600001C08000003F00020237EA1
|
||||
25>I<FFF0007FC01F80001F000F00000C000780000C000780000800078000080003C000100003
|
||||
C000100003E000300001E000200001E000200000F000400000F000400000F00040000078008000
|
||||
0078008000007C018000003C010000003C010000001E020000001E020000001F020000000F0400
|
||||
00000F040000000F8C0000000788000000078800000003D000000003D000000003F000000001E0
|
||||
00000001E000000000C000000000C000000000C0000022237FA125>I<FFF03FFC03FE1F8007E0
|
||||
00F80F0003C000700F0003C000200F0003C00020078001E00040078001E00040078001E0004003
|
||||
C002F0008003C002F0008003C002F0008001E00478010001E00478010001E00478010000F0083C
|
||||
020000F0083C020000F0083C020000F8183E06000078101E04000078101E0400007C101E040000
|
||||
3C200F0800003C200F0800003C200F0800001E40079000001E40079000001E40079000000F8003
|
||||
E000000F8003E000000F8003E00000070001C00000070001C00000070001C00000030001800000
|
||||
02000080002F237FA132>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
|
||||
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07317BA40E>91 D<FEFE06060606060606
|
||||
0606060606060606060606060606060606060606060606060606060606060606060606060606FE
|
||||
FE07317FA40E>93 D<0FE0001838003C0C003C0E0018070000070000070000070000FF0007C700
|
||||
1E07003C0700780700700700F00708F00708F00708F00F087817083C23900FC1E015157E9418>
|
||||
97 D<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
|
||||
0E00000E00000E1F000E61C00E80600F00300E00380E003C0E001C0E001E0E001E0E001E0E001E
|
||||
0E001E0E001E0E001E0E001C0E003C0E00380F00700C80600C41C0083F0017237FA21B>I<01FE
|
||||
000703000C07801C0780380300780000700000F00000F00000F00000F00000F00000F00000F000
|
||||
007000007800403800401C00800C010007060001F80012157E9416>I<0000E0000FE00001E000
|
||||
00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C
|
||||
02E01C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E078
|
||||
00E03800E01801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03801C01C03801C0
|
||||
7801E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C0040
|
||||
0E008007030000FC0013157F9416>I<003C00C6018F038F030F07000700070007000700070007
|
||||
0007000700FFF80700070007000700070007000700070007000700070007000700070007000700
|
||||
0700070007807FF8102380A20F>I<00007001F198071E180E0E181C07001C07003C07803C0780
|
||||
3C07803C07801C07001C07000E0E000F1C0019F0001000001000001800001800001FFE000FFFC0
|
||||
0FFFE03800F0600030400018C00018C00018C000186000306000303800E00E038003FE0015217F
|
||||
9518>I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
|
||||
000E00000E00000E1F800E60C00E80E00F00700F00700E00700E00700E00700E00700E00700E00
|
||||
700E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF18237FA21B>I<1C
|
||||
003E003E003E001C00000000000000000000000000000000000E00FE001E000E000E000E000E00
|
||||
0E000E000E000E000E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<01C003E0
|
||||
03E003E001C00000000000000000000000000000000001E00FE001E000E000E000E000E000E000
|
||||
E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0
|
||||
F18061803E000B2C82A10F>I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00
|
||||
000E00000E00000E00000E00000E00000E03FC0E01F00E01C00E01800E02000E04000E08000E10
|
||||
000E38000EF8000F1C000E1E000E0E000E07000E07800E03C00E01C00E01E00E00F00E00F8FFE3
|
||||
FE17237FA21A>I<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E
|
||||
000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0
|
||||
0B237FA20E>I<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E003800E00E00
|
||||
3800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E
|
||||
003800E00E003800E00E003800E00E003800E00E003800E00E003800E0FFE3FF8FFE27157F942A
|
||||
>I<0E1F80FE60C01E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00700E
|
||||
00700E00700E00700E00700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC00070700
|
||||
0C01801800C03800E0700070700070F00078F00078F00078F00078F00078F00078F00078700070
|
||||
7800F03800E01C01C00E038007070001FC0015157F9418>I<0E1F00FE61C00E80600F00700E00
|
||||
380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00
|
||||
700E80E00E41C00E3F000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE0
|
||||
00171F7F941B>I<01F8200704600E02601C01603801E07800E07800E0F000E0F000E0F000E0F0
|
||||
00E0F000E0F000E0F000E07000E07800E03801E01C01E00C02E0070CE001F0E00000E00000E000
|
||||
00E00000E00000E00000E00000E00000E00000E0000FFE171F7E941A>I<0E3CFE461E8F0F0F0F
|
||||
060F000E000E000E000E000E000E000E000E000E000E000E000E000E000F00FFF010157F9413>
|
||||
I<0F8830786018C018C008C008E008F0007F803FE00FF001F8003C801C800C800CC00CC008E018
|
||||
D0308FC00E157E9413>I<02000200020002000600060006000E001E003E00FFF80E000E000E00
|
||||
0E000E000E000E000E000E000E000E000E040E040E040E040E040E040708030801F00E1F7F9E13
|
||||
>I<0E0070FE07F01E00F00E00700E00700E00700E00700E00700E00700E00700E00700E00700E
|
||||
00700E00700E00700E00700E00F00E00F006017003827800FC7F18157F941B>I<FFC1FE1E0078
|
||||
0E00300E00200E002007004007004003808003808003808001C10001C10000E20000E20000E200
|
||||
00740000740000380000380000380000100017157F941A>I<FF8FF8FF1E01E03C1C01C0180E01
|
||||
C0180E01E0100E01E01007026020070270200702702003843040038438400384384001C8188001
|
||||
C81C8001C81C8000F00D0000F00F0000F00F0000600600006006000060060020157F9423>I<FF
|
||||
83FE1F01F00E00C007008003810003830001C20000E400007800007800003800003C00004E0000
|
||||
8E000187000103800201C00401E00C00E03E01F0FF03FE17157F941A>I<FFC1FE1E00780E0030
|
||||
0E00200E002007004007004003808003808003808001C10001C10000E20000E20000E200007400
|
||||
007400003800003800003800001000001000002000002000002000004000F04000F08000F18000
|
||||
4300003C0000171F7F941A>I<3FFFC0380380300780200700600E00401C00403C004038000070
|
||||
0000E00001E00001C0000380400700400F00400E00C01C0080380080780180700780FFFF801215
|
||||
7F9416>I E /Fg 30 123 df<003FE000E0E001C1E00381E00700E00700E00700E00700E00700
|
||||
E00700E00700E00700E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700
|
||||
E00700E00700E00700E00700E00700E00700E00700E00700E00700E07FE7FE1720809F19>13
|
||||
D<70F8FCFC74040404080810102040060E7C840D>44 D<FFC0FFC00A027F8A0F>I<70F8F8F870
|
||||
05057C840D>I<FFFC0FC007800780078007800780078007800780078007800780078007800780
|
||||
07800780078007800780078007800780078007800780078007800FC0FFFC0E1F7F9E10>73
|
||||
D<FFFFE0000F80780007801C0007801E0007800F0007800F8007800F8007800F8007800F800780
|
||||
0F8007800F8007800F0007801E0007801C000780780007FFE00007800000078000000780000007
|
||||
800000078000000780000007800000078000000780000007800000078000000780000007800000
|
||||
0FC00000FFFC0000191F7E9E1F>80 D<7FFFFFE0780F01E0600F0060400F0020400F0020C00F00
|
||||
30800F0010800F0010800F0010800F0010000F0000000F0000000F0000000F0000000F0000000F
|
||||
0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
|
||||
0F0000000F0000000F0000000F0000001F800007FFFE001C1F7E9E21>84
|
||||
D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E001E0E00380E00780E
|
||||
00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317>97 D<0E0000FE00000E0000
|
||||
0E00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000EC3800F01C00F00E0
|
||||
0E00E00E00700E00700E00780E00780E00780E00780E00780E00780E00700E00700E00E00F00E0
|
||||
0D01C00CC300083E0015207F9F19>I<03F80E0C1C1E381E380C70007000F000F000F000F000F0
|
||||
00F00070007000380138011C020E0C03F010147E9314>I<000380003F80000380000380000380
|
||||
00038000038000038000038000038000038000038003E380061B801C0780380380380380700380
|
||||
700380F00380F00380F00380F00380F00380F003807003807003803803803807801C07800E1B80
|
||||
03E3F815207E9F19>I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF
|
||||
80F00000F00000F000007000007000003800801800800C010007060001F80011147F9314>I<00
|
||||
7C00C6018F038F07060700070007000700070007000700FFF00700070007000700070007000700
|
||||
070007000700070007000700070007000700070007007FF01020809F0E>I<0000E003E3300E3C
|
||||
301C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033E0002000002000
|
||||
003000003000003FFE001FFF800FFFC03001E0600070C00030C00030C00030C000306000603000
|
||||
C01C038003FC00141F7F9417>I<0E0000FE00000E00000E00000E00000E00000E00000E00000E
|
||||
00000E00000E00000E00000E3E000E43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E
|
||||
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<
|
||||
1C001E003E001E001C000000000000000000000000000E007E000E000E000E000E000E000E000E
|
||||
000E000E000E000E000E000E000E000E000E000E00FFC00A1F809E0C>I<0E0000FE00000E0000
|
||||
0E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E0200
|
||||
0E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E0380
|
||||
0E03C00E03E0FFCFF815207F9F18>107 D<0E00FE000E000E000E000E000E000E000E000E000E
|
||||
000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
|
||||
0E00FFE00B20809F0C>I<0E1F01F000FE618618000E81C81C000F00F00E000F00F00E000E00E0
|
||||
0E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00
|
||||
E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE023147F9326>
|
||||
I<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
|
||||
C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E001C038038
|
||||
01C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C038
|
||||
01C01C0380070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E00E00F00E0070
|
||||
0E00780E00780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C00EC3000E3E00
|
||||
0E00000E00000E00000E00000E00000E00000E00000E0000FFE000151D7F9319>I<0E78FE8C0F
|
||||
1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00F147F93
|
||||
12>114 D<1F9030704030C010C010C010E00078007F803FE00FF00070803880188018C018C018
|
||||
E030D0608F800D147E9312>I<020002000200060006000E000E003E00FFF80E000E000E000E00
|
||||
0E000E000E000E000E000E000E000E080E080E080E080E080610031001E00D1C7F9B12>I<0E01
|
||||
C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
|
||||
C00E01C00E01C00E03C00603C0030DC001F1FC16147F9319>I<FF83F81E01E01C00C00E00800E
|
||||
00800E008007010007010003820003820003820001C40001C40001EC0000E80000E80000700000
|
||||
700000700000200015147F9318>I<FF9FE1FC3C0780701C0300601C0380200E0380400E038040
|
||||
0E03C0400707C0800704C0800704E080038861000388710003C8730001D0320001D03A0000F03C
|
||||
0000E01C0000E01C0000601800004008001E147F9321>I<FF83F81E01E01C00C00E00800E0080
|
||||
0E008007010007010003820003820003820001C40001C40001EC0000E80000E800007000007000
|
||||
007000002000002000004000004000004000F08000F08000F100006200003C0000151D7F9318>
|
||||
121 D<3FFF380E200E201C40384078407000E001E001C00380078007010E011E011C0338027006
|
||||
700EFFFE10147F9314>I E /Fh 7 117 df<0000E000000000E000000001F000000001F0000000
|
||||
01F000000003F800000003F800000006FC00000006FC0000000EFE0000000C7E0000000C7E0000
|
||||
00183F000000183F000000303F800000301F800000701FC00000600FC00000600FC00000C007E0
|
||||
0000FFFFE00001FFFFF000018003F000018003F000030001F800030001F800060001FC00060000
|
||||
FC000E0000FE00FFE00FFFE0FFE00FFFE0231F7E9E28>65 D<07FC001FFF003F0F803F07C03F03
|
||||
E03F03E00C03E00003E0007FE007FBE01F03E03C03E07C03E0F803E0F803E0F803E0FC05E07E0D
|
||||
E03FF8FE0FE07E17147F9319>97 D<FF0000FF00001F00001F00001F00001F00001F00001F0000
|
||||
1F00001F00001F00001F00001F1FC01F7FF01FE0F81F807C1F007E1F003E1F003E1F003F1F003F
|
||||
1F003F1F003F1F003F1F003F1F003E1F003E1F007C1F807C1EC1F81C7FE0181F8018207E9F1D>
|
||||
I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC00
|
||||
007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<FE3E00FE7F801ECFC01E
|
||||
8FC01E8FC01F8FC01F03001F00001F00001F00001F00001F00001F00001F00001F00001F00001F
|
||||
00001F0000FFF000FFF00012147E9316>114 D<0FE63FFE701E600EE006E006F800FFC07FF83F
|
||||
FC1FFE03FE001FC007C007E007F006F81EFFFCC7F010147E9315>I<0180018001800380038003
|
||||
8007800F803F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F860F86
|
||||
0F8607CC03F801F00F1D7F9C14>I E /Fi 12 122 df<70F8F8F0E005057A840F>46
|
||||
D<0007FFC000003C0000003C0000003C00000078000000780000007800000078000000F0000000
|
||||
F0000000F0000000F0000001E0000001E0000001E0000001E0000003C0000003C0000003C00000
|
||||
03C00000078000000780000007800000078000000F0000000F0000380F0000780F0000F81E0000
|
||||
F81E0000F03C0000403800004070000021E000001F8000001A237CA11A>74
|
||||
D<0001F020000E0C40001802C0003001C0006001C000E0018000C0018001C0018001C0018003C0
|
||||
010003C0010003C0000003C0000003E0000001F8000001FF000000FFE000007FF000001FF80000
|
||||
03FC0000007C0000003C0000001E0000001E0000001E0020001C0020001C0020001C0020001800
|
||||
6000380060003000700060007000C000C8018000C607000081FC00001B247DA21B>83
|
||||
D<00F8C00185C00705C00E03800E03801C03803C0380380700780700780700780700F00E00F00E
|
||||
00F00E00F00E10F01C20701C20703C20305C40308C400F078014157B9419>97
|
||||
D<00F803840E021C023C0238027804F018FFE0F000F000E000E000E000E000E002E00260047018
|
||||
30600F800F157A9416>101 D<00F0000FE00000E00000E00000E00001C00001C00001C00001C0
|
||||
00038000038000038000038000070000071F0007218007C0C00F00E00F00E00E00E00E00E01C01
|
||||
C01C01C01C01C01C01C0380380380380380380380704700708700E08700E10700610E006206003
|
||||
C016237DA219>104 D<00C001E001C001C0000000000000000000000000000000001C00230043
|
||||
0043008700870087000E000E001C001C001C00380038003840708070807080710032001C000B21
|
||||
7BA00F>I<0000E00001E00001E00000C000000000000000000000000000000000000000000000
|
||||
0000001E00002300004380008380008380010380010380000700000700000700000700000E0000
|
||||
0E00000E00000E00001C00001C00001C00001C0000380000380000380000380000700000700000
|
||||
700070E000F0C000F180006300003C0000132B82A00F>I<1C0F002631C04740C08780E08780E0
|
||||
8700E08700E00E01C00E01C00E01C00E01C01C03801C03801C03801C0704380708380E08380E10
|
||||
3806107006203003C016157B941B>110 D<007E0001C3000381800701C00E01C01C01E03C01E0
|
||||
3801E07801E07801E07801E0F003C0F003C0F00380F00780700700700E00700C00301800187000
|
||||
07C00013157B9419>I<00FC000183000200800401800C03800C03000C00000F00000FF00007FC
|
||||
0003FE00003E00000F00000700700700F00600F00600E004004008002030001FC00011157D9414
|
||||
>115 D<1E00302300704380704380E08380E08700E08700E00701C00E01C00E01C00E01C01C03
|
||||
801C03801C03801C03801C07001C07001C07001C0F000C3E0003CE00000E00000E00001C00601C
|
||||
00F03800F03000E0600080C0004380003E0000141F7B9418>121 D E /Fj
|
||||
25 120 df<FFFFFFFFF00000FFFFFFFFFF0000FFFFFFFFFFC00000FFC000FFF00000FFC0000FFC
|
||||
0000FFC00007FE0000FFC00001FF0000FFC00000FF8000FFC000007FC000FFC000003FE000FFC0
|
||||
00003FE000FFC000001FF000FFC000001FF000FFC000001FF800FFC000000FF800FFC000000FFC
|
||||
00FFC000000FFC00FFC000000FFC00FFC000000FFC00FFC000000FFE00FFC000000FFE00FFC000
|
||||
000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00
|
||||
FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFC00FFC000000FFC00FFC00000
|
||||
0FFC00FFC000000FFC00FFC000000FF800FFC000001FF800FFC000001FF800FFC000001FF000FF
|
||||
C000003FE000FFC000003FE000FFC000007FC000FFC00000FF8000FFC00001FF0000FFC00003FE
|
||||
0000FFC0000FFC0000FFC0007FF000FFFFFFFFFFE000FFFFFFFFFF0000FFFFFFFFF0000037317E
|
||||
B03F>68 D<000003FF80018000003FFFF003800001FFFFFC0F800007FF007F1F80001FF8000FBF
|
||||
80003FE00003FF8000FF800000FF8001FF0000007F8003FE0000003F8007FC0000003F8007FC00
|
||||
00001F800FF80000001F801FF80000000F801FF00000000F803FF000000007803FF00000000780
|
||||
7FF000000007807FE000000007807FE000000000007FE00000000000FFE00000000000FFE00000
|
||||
000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FF
|
||||
E00000000000FFE00007FFFFFE7FE00007FFFFFE7FE00007FFFFFE7FE0000001FF807FF0000001
|
||||
FF803FF0000001FF803FF0000001FF801FF0000001FF801FF8000001FF800FF8000001FF8007FC
|
||||
000001FF8007FC000001FF8003FE000001FF8001FF000001FF8000FF800001FF80003FE00003FF
|
||||
80001FF80007FF800007FF803F3F800001FFFFFE1F8000003FFFF80780000003FFC0018037317B
|
||||
B041>71 D<FFFFFFC0FFFFFFC0FFFFFFC000FFC00000FFC00000FFC00000FFC00000FFC00000FF
|
||||
C00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000
|
||||
FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC000
|
||||
00FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC0
|
||||
0000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC000FFFFFFC0FFFF
|
||||
FFC0FFFFFFC01A317EB01F>73 D<FFFF8000000001FFFF80FFFFC000000003FFFF80FFFFE00000
|
||||
0007FFFF8000FFE000000007FF800000EFF00000000EFF800000EFF00000000EFF800000EFF000
|
||||
00000EFF800000E7F80000001CFF800000E7F80000001CFF800000E3FC00000038FF800000E3FC
|
||||
00000038FF800000E1FE00000070FF800000E1FE00000070FF800000E0FF000000E0FF800000E0
|
||||
FF000000E0FF800000E07F800001C0FF800000E07F800001C0FF800000E03FC0000380FF800000
|
||||
E03FC0000380FF800000E03FC0000380FF800000E01FE0000700FF800000E01FE0000700FF8000
|
||||
00E00FF0000E00FF800000E00FF0000E00FF800000E007F8001C00FF800000E007F8001C00FF80
|
||||
0000E003FC003800FF800000E003FC003800FF800000E001FE007000FF800000E001FE007000FF
|
||||
800000E000FF00E000FF800000E000FF00E000FF800000E000FF00E000FF800000E0007F81C000
|
||||
FF800000E0007F81C000FF800000E0003FC38000FF800000E0003FC38000FF800000E0001FE700
|
||||
00FF800000E0001FE70000FF800000E0000FFE0000FF800000E0000FFE0000FF800000E00007FC
|
||||
0000FF800000E00007FC0000FF800000E00007FC0000FF800000E00003F80000FF800001F00003
|
||||
F80000FF8000FFFFE001F000FFFFFF80FFFFE001F000FFFFFF80FFFFE000E000FFFFFF8049317E
|
||||
B04E>77 D<FFFFFFFFE000FFFFFFFFFE00FFFFFFFFFF8000FFC001FFE000FFC0003FF000FFC000
|
||||
1FF800FFC0000FFC00FFC0000FFC00FFC00007FE00FFC00007FE00FFC00007FF00FFC00007FF00
|
||||
FFC00007FF00FFC00007FF00FFC00007FF00FFC00007FF00FFC00007FF00FFC00007FE00FFC000
|
||||
07FE00FFC0000FFC00FFC0000FFC00FFC0001FF800FFC0003FF000FFC001FFE000FFFFFFFF8000
|
||||
FFFFFFFE0000FFFFFFE00000FFC000000000FFC000000000FFC000000000FFC000000000FFC000
|
||||
000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000
|
||||
FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000
|
||||
000000FFC0000000FFFFFFC00000FFFFFFC00000FFFFFFC0000030317EB038>80
|
||||
D<FFFFFFFFC0000000FFFFFFFFFC000000FFFFFFFFFF80000000FFC001FFE0000000FFC0003FF0
|
||||
000000FFC0000FFC000000FFC00007FC000000FFC00007FE000000FFC00003FF000000FFC00003
|
||||
FF000000FFC00003FF800000FFC00003FF800000FFC00003FF800000FFC00003FF800000FFC000
|
||||
03FF800000FFC00003FF800000FFC00003FF000000FFC00003FF000000FFC00007FE000000FFC0
|
||||
0007FC000000FFC0000FFC000000FFC0003FF0000000FFC001FFE0000000FFFFFFFF80000000FF
|
||||
FFFFFC00000000FFFFFFFE00000000FFC003FF00000000FFC000FFC0000000FFC0007FE0000000
|
||||
FFC0003FE0000000FFC0003FF0000000FFC0001FF0000000FFC0001FF8000000FFC0001FF80000
|
||||
00FFC0001FF8000000FFC0001FF8000000FFC0001FF8000000FFC0001FFC000000FFC0001FFC00
|
||||
0000FFC0001FFC000000FFC0001FFC004000FFC0001FFC00E000FFC0001FFE00E000FFC0000FFE
|
||||
00E000FFC0000FFF01C000FFC00007FF83C0FFFFFFC003FFFF80FFFFFFC000FFFF00FFFFFFC000
|
||||
0FFC003B317EB03E>82 D<001FF0018000FFFF038003FFFFC78007F00FFF800F8001FF801F0000
|
||||
7F803F00001F803E00000F807E00000F807E00000780FE00000780FE00000780FE00000380FF00
|
||||
000380FF00000380FF80000000FFE00000007FFC0000007FFFE000007FFFFE00003FFFFFC0001F
|
||||
FFFFF0001FFFFFF8000FFFFFFC0003FFFFFE0001FFFFFF00007FFFFF80001FFFFF800000FFFFC0
|
||||
000007FFC0000000FFE00000003FE00000003FE00000001FE06000001FE0E000000FE0E000000F
|
||||
E0E000000FE0E000000FC0F000000FC0F000000FC0F800001F80FC00001F80FF00003F00FFC000
|
||||
7E00FFFC01FC00F1FFFFF800E03FFFE000C007FF000023317BB02E>I<007FF8000003FFFF0000
|
||||
07FFFFC0000FE01FE0001FF007F0001FF003F8001FF003FC001FF001FE000FE001FE0007C001FE
|
||||
00010001FE00000001FE00000001FE000001FFFE00003FFFFE0001FFF1FE0007FE01FE000FF001
|
||||
FE001FC001FE003F8001FE007F8001FE00FF0001FE00FF0001FE00FF0001FE00FF0001FE00FF00
|
||||
03FE007F8003FE007FC00EFE003FF03CFF000FFFF87FF807FFF03FF800FF800FF825207E9F28>
|
||||
97 D<0007FF00007FFFE000FFFFF003FC03F807F007FC0FE007FC1FE007FC3FC007FC3FC003F8
|
||||
7FC001F07F8000407F800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000
|
||||
00FF8000007F8000007FC000007FC000003FC0000E3FE0000E1FE0001C0FF0001C07F8007803FF
|
||||
01F000FFFFE0007FFF800007FC001F207D9F25>99 D<00000007E0000003FFE0000003FFE00000
|
||||
03FFE00000003FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE000
|
||||
00001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0000FF81FE0
|
||||
007FFF1FE001FFFFDFE003FE03FFE007F800FFE00FE0003FE01FE0001FE03FC0001FE03FC0001F
|
||||
E07F80001FE07F80001FE07F80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF8000
|
||||
1FE0FF80001FE0FF80001FE0FF80001FE07F80001FE07F80001FE07F80001FE03FC0001FE03FC0
|
||||
001FE01FC0003FE00FE0007FE007F001FFE003FC07DFF001FFFF9FFF007FFE1FFF000FF01FFF28
|
||||
327DB12E>I<0007FC0000003FFF800000FFFFE00003FC07F00007F801F8000FE000FC001FE000
|
||||
7E003FC0007E003FC0003F007FC0003F007F80003F007F80003F80FF80003F80FF80003F80FFFF
|
||||
FFFF80FFFFFFFF80FFFFFFFF80FF80000000FF80000000FF800000007F800000007F800000003F
|
||||
C00000003FC00003801FC00003801FE00007800FF0000F0007F8001E0003FE00FC0000FFFFF800
|
||||
003FFFE0000003FF000021207E9F26>I<0000FF000007FFC0001FFFE0003FC7F0007F0FF800FE
|
||||
0FF801FE0FF801FC0FF803FC07F003FC03E003FC01C003FC000003FC000003FC000003FC000003
|
||||
FC000003FC000003FC0000FFFFF800FFFFF800FFFFF80003FC000003FC000003FC000003FC0000
|
||||
03FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00
|
||||
0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC
|
||||
000003FC000003FC00007FFFF0007FFFF0007FFFF0001D327EB119>I<001FF007E000FFFE3FF0
|
||||
01FFFF7FF807F83FF1F80FE00FE1F80FE00FE0F01FC007F0601FC007F0003FC007F8003FC007F8
|
||||
003FC007F8003FC007F8003FC007F8001FC007F0001FC007F0000FE00FE0000FE00FE00007F83F
|
||||
C00007FFFF000006FFFE00000E1FF000000E000000001E000000001E000000001F000000001F80
|
||||
0000001FFFFFC0000FFFFFF8000FFFFFFE0007FFFFFF0003FFFFFF8007FFFFFFC01FFFFFFFE03F
|
||||
00007FE07E00000FF0FC000007F0FC000003F0FC000003F0FC000003F0FC000003F07E000007E0
|
||||
3F00000FC01FC0003F800FF801FF0007FFFFFE0000FFFFF000001FFF8000252F7E9F29>I<01F8
|
||||
00000000FFF800000000FFF800000000FFF8000000000FF80000000007F80000000007F8000000
|
||||
0007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000007F8
|
||||
0000000007F80000000007F80000000007F80000000007F80000000007F807F8000007F83FFF00
|
||||
0007F87FFF800007F8F03FC00007F9C01FE00007FB000FE00007FE000FF00007FE000FF00007FC
|
||||
000FF00007FC000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0
|
||||
0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8
|
||||
000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0
|
||||
0007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029327DB12E>I<03C0000FF0000F
|
||||
F0001FF8001FF8001FFC001FF8001FF8000FF0000FF00003C00000000000000000000000000000
|
||||
000000000000000000000001F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007
|
||||
F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
|
||||
F80007F80007F80007F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>I<01F800
|
||||
FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007F80007F800
|
||||
07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
|
||||
07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
|
||||
07F80007F80007F80007F80007F80007F80007F800FFFFC0FFFFC0FFFFC012327DB117>108
|
||||
D<03F007F8000FF000FFF03FFF007FFE00FFF07FFF80FFFF00FFF0F03FC1E07F800FF1C01FE380
|
||||
3FC007F3000FE6001FC007F6000FFC001FE007FE000FFC001FE007FC000FF8001FE007FC000FF8
|
||||
001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000F
|
||||
F0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800
|
||||
0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8
|
||||
000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE0FF
|
||||
FFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40207D9F47>I<03F007F80000FFF03F
|
||||
FF0000FFF07FFF8000FFF0F03FC0000FF1C01FE00007F3000FE00007F6000FF00007FE000FF000
|
||||
07FC000FF00007FC000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800
|
||||
0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000
|
||||
07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800
|
||||
0FF00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029207D9F2E>I<0007FE0000
|
||||
003FFFC00000FFFFF00003FC03FC0007F000FE000FE0007F001FC0003F803FC0003FC03FC0003F
|
||||
C07F80001FE07F80001FE07F80001FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF8000
|
||||
1FF0FF80001FF0FF80001FF0FF80001FF07F80001FE07F80001FE07F80001FE03FC0003FC03FC0
|
||||
003FC01FE0007F800FE0007F0007F801FE0003FE07FC0001FFFFF800003FFFC0000007FE000024
|
||||
207E9F29>I<01F80FF000FFF87FFE00FFF9FFFF80FFFFE07FC00FFF001FE007FE000FF007F800
|
||||
07F807F80007FC07F80003FC07F80003FE07F80003FE07F80001FE07F80001FF07F80001FF07F8
|
||||
0001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FE07F80003FE07
|
||||
F80003FE07F80003FC07F80007FC07FC0007F807FE000FF007FF001FE007FBE07FC007F9FFFF00
|
||||
07F87FFE0007F81FE00007F800000007F800000007F800000007F800000007F800000007F80000
|
||||
0007F800000007F800000007F800000007F800000007F8000000FFFFC00000FFFFC00000FFFFC0
|
||||
0000282E7E9F2E>I<03F03F00FFF07FC0FFF1FFE0FFF3C7F00FF38FF807F70FF807F60FF807FE
|
||||
0FF807FC07F007FC03E007FC008007F8000007F8000007F8000007F8000007F8000007F8000007
|
||||
F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80000
|
||||
07F8000007F80000FFFFE000FFFFE000FFFFE0001D207E9F22>114 D<00FF870007FFEF001FFF
|
||||
FF003F007F003C001F0078000F00F8000700F8000700F8000700FC000700FF000000FFF800007F
|
||||
FFC0003FFFF0003FFFFC000FFFFE0007FFFF0001FFFF80001FFF800000FFC000001FC060000FC0
|
||||
E00007C0E00007C0F00007C0F8000780F8000F80FE000F00FF803E00FFFFFC00F3FFF800C07FC0
|
||||
001A207D9F21>I<00380000380000380000380000380000780000780000780000F80000F80001
|
||||
F80003F80007F8001FF800FFFFFEFFFFFEFFFFFE07F80007F80007F80007F80007F80007F80007
|
||||
F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80707F80707F80707
|
||||
F80707F80707F80707F80703F80E03FC0E01FE1C00FFF8007FF0000FE0182E7EAD20>I<01F800
|
||||
03F000FFF801FFF000FFF801FFF000FFF801FFF0000FF8001FF00007F8000FF00007F8000FF000
|
||||
07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800
|
||||
0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000
|
||||
07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8001FF00007F8001FF00003F800
|
||||
3FF00003F8006FF00001FE03CFF80000FFFF8FFF80007FFF0FFF80000FFC0FFF8029207D9F2E>
|
||||
I<FFFF0FFFF01FFEFFFF0FFFF01FFEFFFF0FFFF01FFE0FF0007E0001F00FF8007F0001E007F800
|
||||
7F0001C007F8003F8003C003FC003F80038003FC007FC0038003FE007FC0078001FE00FFC00700
|
||||
01FF00EFE00F0000FF00EFE00E0000FF01C7F00E00007F81C7F01C00007F83C7F01C00007FC383
|
||||
F83C00003FC383F83800003FC701FC3800001FE701FC7000001FEF01FC7000001FFE00FEF00000
|
||||
0FFE00FEE000000FFC007FE0000007FC007FC0000007FC007FC0000007F8003FC0000003F8003F
|
||||
80000003F0001F80000001F0001F00000001E0000F00000000E0000E000037207E9F3C>119
|
||||
D E end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%Feature: *Resolution 300
|
||||
TeXDict begin
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
bop 308 315 a Fj(More)28 b(Getting)f(Started)g(with)g(Prosp)r(ero)838
|
||||
376 y Fi(Sanjay)18 b(Joshi)873 486 y Fh(Abstract)354 570 y
|
||||
Fg(This)d(do)q(cumen)o(t)f(is)h(in)o(tended)h(as)d(a)h(guide)h(to)f(the)g
|
||||
(Prosp)q(ero)g(do)q(cumen)o(ta-)286 627 y(tion)d(,)h(for)f(those)g(in)o
|
||||
(terested)h(in)g(kno)o(wing)f(more)g(ab)q(out)g(Prosp)q(ero.)19
|
||||
b(It)11 b(presen)o(ts)286 683 y(a)16 b(brief)i(surv)o(ey)f(of)f(the)h
|
||||
(literature)h(on)f(Prosp)q(ero)f(and)h(brie\015y)h(describ)q(es)h(the)286
|
||||
740 y(organization)c(of)g(Prosp)q(ero.)164 906 y Fj(In)n(tro)r(duction)164
|
||||
1016 y Ff(Prosp)q(ero)h(is)f(a)h(useful)f(to)q(ol)h(for)f(organizing)h(in)o
|
||||
(ternet)d(resources.)21 b(It)15 b(is)g(a)h(distributed)164
|
||||
1076 y(\014le)j(system,)g(whic)o(h)g(allo)o(ws)h(the)g(users)g(to)h(organize)
|
||||
f(ob)s(jects)f(lo)q(cated)h(on)h(di\013eren)o(t)164 1136 y(no)q(des)d(in)e
|
||||
(the)h(In)o(ternet,)e Fi(i.e.)24 b Ff(sev)o(eral)16 b(users)h(ma)o(y)e
|
||||
(construct)i(m)o(ultiple,)d(customized)164 1196 y(views)k(of)g(the)g(system.)
|
||||
25 b(One)18 b(of)h(the)f(b)q(est)g(pap)q(ers)h(whic)o(h)f(explains)f(this)h
|
||||
(concept)g(is)164 1256 y([1].)28 b(This)19 b(should)h(b)q(e)e(the)h(\014rst)g
|
||||
(pap)q(er)g(to)h(read)f(if)f(y)o(ou)h(are)f(in)o(terested)g(in)g(learning)164
|
||||
1317 y(ab)q(out)g(Prosp)q(ero.)528 1299 y Fe(1)164 1483 y Fj(Implem)n(en)n
|
||||
(tation)24 b(Details)164 1593 y Ff(The)14 b(initial)g(pap)q(er)h([1])f(giv)o
|
||||
(es)f(the)h(principles)f(b)q(ehind)i(Prosp)q(ero.)22 b(Ho)o(w)o(ev)o(er,)12
|
||||
b(the)j(b)q(est)164 1653 y(do)q(cumen)o(t)20 b(to)i(learn)g(ab)q(out)h(the)e
|
||||
(implem)o(en)o(tation)e(details)i(is)h(Cli\013ord)g(Neuman's)164
|
||||
1713 y(Ph.D.)12 b(dissertation)g([3].)20 b(This)12 b(do)q(cumen)o(t)f([3])h
|
||||
(is)g(a)o(v)m(ailable)g(b)o(y)g(anon)o(ymous)g Fd(FTP)f Ff(from)164
|
||||
1773 y Fd(PROSPERO.I)o(SI.)o(ED)o(U)d Ff(as)j Fd(/pub/prospe)o(ro/)o(pap)o
|
||||
(er)o(s/p)o(ros)o(pe)o(ro-)o(neu)o(man)o(-t)o(hes)o(is.)o(ps)p
|
||||
Ff(.)164 1833 y(The)j(app)q(endices)h(A)e(and)i(D)g(&)f(E,)g(resp)q(ectiv)o
|
||||
(ely)e(of)j([3])f(ha)o(v)o(e)f(since)h(b)q(een)g(revised)f(and)164
|
||||
1893 y(are)18 b(a)o(v)m(ailable)f(as)h(a)g(User's)f(Man)o(ual)h([2])f(and)h
|
||||
(a)h(Proto)q(col)f(Man)o(ual)g([4].)25 b(The)18 b(User's)164
|
||||
1954 y(Man)o(ual)c([2])g(should)h(b)q(e)f(read)h(after)f(reading)g([1].)20
|
||||
b(It)14 b(describ)q(es)g(ho)o(w)h(to)g(use)f(the)g(basic)164
|
||||
2014 y(features)i(of)h(Prosp)q(ero.)p 164 2108 648 2 v 220
|
||||
2139 a Fc(1)239 2154 y Fb(All)22 b(the)i(references)h(men)o(tioned)d(in)h
|
||||
(this)g(do)q(cumen)o(t)g(are)g(a)o(v)n(ailable)e(via)h(anon)o(ymous)g
|
||||
Fa(FTP)164 2204 y Fb(from)c Fa(/pub/papers)f Fb(directory)j(at)f
|
||||
Fa(PROSPERO.ISI.EDU)p Fb(.)d(They)k(are)f(also)g(a)o(v)n(ailable)e(as)j(part)
|
||||
f(of)164 2253 y(the)h(Prosp)q(ero)i(distribution.)35 b(A)20
|
||||
b(go)q(o)q(d)g(w)o(a)o(y)f(to)h(obtain)f(the)h(Prosp)q(ero)i(distribution,)e
|
||||
(if)f(y)o(ou're)164 2303 y(not)13 b(running)g(Prosp)q(ero)i(y)o(et,)e(is)h
|
||||
(to)f(anon)o(ymously)e Fa(FTP)21 b(/pub/prospero/pros)o(pero)o(.tar.)o(Z)11
|
||||
b Fb(from)164 2353 y Fa(PROSPERO.ISI.EDU)c Fb(.)i(Before)i(setting)f(up)g
|
||||
(Prosp)q(ero,)i(the)e(do)q(cumen)o(ts)g(in)f Fa(getting-started.txt)o
|
||||
Fb(,)164 2403 y Fa(INSTALLATION)p Fb(,)i Fa(INSTALLATION)p
|
||||
718 2403 14 2 v 13 w(u)p Fb(,)i(and)h Fa(INSTALLATION)p 1123
|
||||
2403 V 13 w(s)g Fb(should)f(b)q(e)i(read.)961 2599 y Ff(1)p
|
||||
eop
|
||||
%%Page: 2 2
|
||||
bop 237 307 a Ff(After)18 b(getting)h(familiar)e(with)i(Prosp)q(ero)i
|
||||
(through)f([2],)e(the)h(next)g(do)q(cumen)o(t)f(to)164 367
|
||||
y(read)j(is)h([3].)36 b(Sp)q(ecially)l(,)21 b(c)o(hapter)g(6)g(and)h(app)q
|
||||
(endices)g(B)f(and)h(C)f(are)h(v)o(ery)e(useful.)164 428 y(Chapter)15
|
||||
b(6)f(la)o(ys)g(out)h(the)f(design)g(of)h(Prosp)q(ero.)21 b(The)15
|
||||
b(design)f(is)g(based)h(on)f(the)g(clien)o(t-)164 488 y(serv)o(er)j(mo)q
|
||||
(del.)25 b(The)18 b(clien)o(ts)e(handle)i(the)g(name)e(resolution)i(and)h
|
||||
(directory)e(serv)o(ers)164 548 y(on)i(the)g(hosts)h(storing)f(the)g
|
||||
(directories)e(lo)q(ok)i(up)h(the)e(requested)g(names)g(in)g(the)h(di-)164
|
||||
608 y(rectories)c(and)i(return)f(the)g(result)g(to)h(the)f(clien)o(t.)237
|
||||
729 y(After)e(the)i(distribution)e(has)i(b)q(een)g(un)o(tarred,)e(the)h
|
||||
(directory)g(serv)o(er)f(source)h(\014les)164 789 y(are)c(lo)q(cated)h(in)f
|
||||
(a)h(directory)e(called)h Fd(server)p Ff(.)17 b(The)12 b(serv)o(er)e(uses)i
|
||||
(the)f(functions)g(de\014ned)164 849 y(in)17 b(the)g(library)g
|
||||
Fd(lib/psrv)p Ff(.)22 b(The)c(clien)o(t)e(source)h(\014les)g(are)h(lo)q
|
||||
(cated)f(in)h(the)f(directory)164 909 y Fd(user)12 b Ff(and)h(use)g(the)g
|
||||
(functions)g(from)f(t)o(w)o(o)h(libraries,)g Fd(lib/pfsli)o(b)d
|
||||
Ff(and)k Fd(lib/pcompa)o(t)164 969 y Ff(libraries.)19 b(These)14
|
||||
b(t)o(w)o(o)f(libraries,)g Fd(pfslib)f Ff(and)i Fd(pcompat)p
|
||||
Ff(,)d(are)j(describ)q(ed)f(in)g(detail)g(in)164 1029 y(app)q(endix)i(B)g(of)
|
||||
h([3].)k(The)15 b(app)q(endix)h(C)f(describ)q(es)g(the)g(structures)g
|
||||
(\(directory)g(infor-)164 1090 y(mation\))h(main)o(tained)f(b)o(y)i(the)g
|
||||
(Prosp)q(ero)h(\014le)e(system.)23 b(In)16 b(addition)h(to)h(reading)f(ap-)
|
||||
164 1150 y(p)q(endix)d(C,)f(a)i(few)e(of)i(the)e(related)h(\014les)f(in)h
|
||||
Fd(include)d Ff(directory)i(should)h(b)q(e)h(consulted,)164
|
||||
1210 y(sp)q(eci\014cally)h Fd(include/pfs)o(.h)p Ff(.)23 b(The)18
|
||||
b(Prosp)q(ero)h(clien)o(ts)d(and)j(directory)e(serv)o(ers)g(use)164
|
||||
1270 y(the)22 b(Reliable)g(Datagram)h(Proto)q(col)g(\(RDP\))g(to)g(comm)o
|
||||
(unicate)c(with)k(eac)o(h)f(other.)164 1330 y(The)15 b(detailed)f
|
||||
(description)g(of)h(this)g(Proto)q(col)g(is)g(giv)o(en)f(in)g([4],)h(whic)o
|
||||
(h)f(is)g(a)o(v)m(ailable)g(b)o(y)164 1391 y(anon)o(ymous)i(FTP)g(as)h
|
||||
Fd(/pub/prospe)o(ro/)o(do)o(c/p)o(ros)o(per)o(o-)o(pro)o(toc)o(ol)o(-v5)o
|
||||
(.ps)o(.Z)p Ff(.)164 1617 y Fj(References)224 1727 y Ff(1.)24
|
||||
b(Neuman,)17 b(B.)h(C.,)g(Prosp)q(ero:)27 b(A)18 b(T)l(o)q(ol)i(for)f
|
||||
(Organizing)f(In)o(ternet)f(Resources,)286 1787 y(Electronic)9
|
||||
b(Net)o(w)o(orking:)18 b(Researc)o(h,)11 b(Applications,)f(and)i(P)o(olicy)l
|
||||
(,)e(2\(1\),)i(Spring)286 1847 y(1992.)224 1949 y(2.)24 b(Neuman,)16
|
||||
b(B.)i(C.,)f(The)h(Prosp)q(ero)i(User's)d(Man)o(ual,)h(Univ)o(ersit)o(y)d(of)
|
||||
k(W)l(ashing-)286 2009 y(ton,)d(June,)g(1991.)224 2111 y(3.)24
|
||||
b(Neuman,)18 b(B.)g(C.,)h(The)g(Virtual)f(System)f(Mo)q(del:)27
|
||||
b(A)18 b(Scalable)h(Approac)o(h)g(to)286 2171 y(Organizing)e(Large)i
|
||||
(Systems,)d(Departmen)o(t)f(of)j(Computer)e(Science)g(and)i(En-)286
|
||||
2231 y(gineering,)d(T)l(ec)o(h.)20 b(Rep.)h(92-06-04,)d(Univ)o(ersit)o(y)13
|
||||
b(of)j(W)l(ashington,)h(June,)e(1992.)224 2333 y(4.)24 b(Neuman,)14
|
||||
b(B.)h(C.)g(and)h(Augart,)g(S.,)f(The)h(Prosp)q(ero)h(Proto)q(col,)f(V)l
|
||||
(ersion)f(5,)h(ISI,)286 2393 y(USC,)g(Aug.,)f(1992.)961 2599
|
||||
y(2)p eop
|
||||
%%Trailer
|
||||
end
|
||||
userdict /end-hook known{end-hook}if
|
||||
%%EOF
|
||||
49
prospero/doc/more-getting-started.tex
Normal file
49
prospero/doc/more-getting-started.tex
Normal file
@@ -0,0 +1,49 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
\begin{center}
|
||||
{\Large {\bf More Getting Started with Prospero\\}}
|
||||
{\it Sanjay Joshi}
|
||||
\end{center}
|
||||
|
||||
\begin {abstract}
|
||||
This document is intended as a guide to the Prospero documentation , for those interested in knowing more about Prospero. It presents a brief survey of the literature on Prospero and briefly describes the organization of Prospero.
|
||||
\end{abstract}
|
||||
|
||||
\section* {Introduction}
|
||||
|
||||
Prospero is a useful tool for organizing internet resources. It is a distributed file system, which allows the users to organize objects located on different nodes in the Internet, {\em i.e.} several users may construct multiple, customized views of the system. One of the best papers which explains this concept is [1]. This should be the first paper to read if you are interested in learning about Prospero.
|
||||
\footnote {All the references mentioned in this document are available via anonymous {\tt FTP} from {\tt /pub/papers} directory at {\tt PROSPERO.ISI.EDU}. They are also available as part of the Prospero distribution. A good way to obtain the Prospero distribution, if you're not running Prospero yet, is to anonymously {\tt FTP /pub/prospero/prospero.tar.Z} from {\tt PROSPERO.ISI.EDU} . Before setting up Prospero, the documents in {\tt getting-started.txt}, {\tt INSTALLATION}, {\tt INSTALLATION\_u}, and {\tt INSTALLATION\_s} should be read.}
|
||||
|
||||
\section* {Implementation Details}
|
||||
|
||||
The initial paper [1] gives the principles behind Prospero. However, the best document to learn about the implementation details is Clifford Neuman's Ph.D. dissertation [3]. This document [3] is available by anonymous {\tt FTP} from {\tt PROSPERO.ISI.EDU} as {\tt /pub/prospero/papers/prospero-neuman-thesis.ps}. The appendices A and D \& E, respectively of [3] have since been revised and are available as a
|
||||
User's Manual [2] and a Protocol Manual [4]. The User's Manual [2] should be read after reading [1]. It describes how to use the basic features of Prospero. \\
|
||||
|
||||
After getting familiar with Prospero through [2], the next document to read is [3]. Specially, chapter 6 and appendices B and C are very useful. Chapter 6 lays out the design of Prospero. The design is based on the client-server model. The clients handle the name resolution and directory servers on the hosts storing the directories look up the requested names in the directories and return the result to the client. \\
|
||||
|
||||
After the distribution has been untarred, the directory server source files are located in a directory called {\tt server}. The server uses the functions defined in the library {\tt lib/psrv}. The client source files are located in the directory {\tt user} and use the functions from two libraries, {\tt lib/pfslib} and {\tt lib/pcompat} libraries. These two libraries, {\tt pfslib} and {\tt pcompat}, are described in detail in appendix B of [3]. The appendix C describes the structures (directory information) maintained by the Prospero file system. In addition to reading appendix C, a few of the related files in {\tt include} directory should be consulted, specifically {\tt include/pfs.h}. The Prospero clients and directory servers use the Reliable Datagram Protocol (RDP) to communicate with each other. The detailed description of this Protocol is given in [4], which is available by
|
||||
anonymous FTP as {\tt /pub/prospero/doc/prospero-protocol-v5.ps.Z}. \\
|
||||
|
||||
\section* {References}
|
||||
\begin{enumerate}
|
||||
\item Neuman, B. C., Prospero: A Tool for Organizing Internet Resources,
|
||||
Electronic Networking: Research, Applications, and Policy, 2(1), Spring 1992.
|
||||
|
||||
\item
|
||||
Neuman, B. C., The Prospero User's Manual, University of Washington, June, 1991.
|
||||
|
||||
\item
|
||||
Neuman, B. C., The Virtual System Model: A Scalable Approach to Organizing
|
||||
Large Systems, Department of Computer Science and Engineering, Tech.
|
||||
Rep. 92-06-04, University of Washington, June, 1992.
|
||||
|
||||
\item
|
||||
Neuman, B. C. and Augart, S., The Prospero Protocol, Version 5, ISI, USC,
|
||||
Aug., 1992.
|
||||
\end{enumerate}
|
||||
|
||||
\end{document}
|
||||
|
||||
|
||||
|
||||
277
prospero/doc/names.txt
Normal file
277
prospero/doc/names.txt
Normal file
@@ -0,0 +1,277 @@
|
||||
This is Mitra's understanding of Prospero's different naming schemes and
|
||||
their interrelationship, based upon phone conversations with Steve.
|
||||
|
||||
I found
|
||||
and still find these incredibly confusing, and this is a first cut at
|
||||
a summary. I've neccessarily skipped over much of the details to avoid
|
||||
confusing the reader. I'm using examples based upon our system which -
|
||||
I believe - accepts all the sensible defaults. The system is flexible
|
||||
enough that none of this could be correct, but in that case you'd probably
|
||||
know enough not to be reading this.
|
||||
|
||||
There are three different naming schemes for files around Prospero.
|
||||
|
||||
A) The regular unix filename, this is rarely used in Prospero
|
||||
|
||||
B) User-level-names, which are relative to virtual file systems. Similarly to
|
||||
unix filenames, if you specify these without leading /, then they are
|
||||
relative to the current working directory. (see environment below)
|
||||
user-level names are always relative to the virtual file system you
|
||||
are set up in. This is the state set up by the "vfsetup" command.
|
||||
|
||||
C) Hsonames - Host Specific Object Names, always accompanied by a host(port)
|
||||
to specify which host(port) it's meaningfull at. This concept is often
|
||||
simplified to "hsoname". Except in the case of gateways, hsonames are
|
||||
usually the real (unix) name of the file on the remote system.
|
||||
|
||||
|
||||
Who uses what names
|
||||
-------------------
|
||||
Most of the data structures - vlink, vdirs etc use host(port) and hsoname (C).
|
||||
|
||||
Various functions map between them - especially rd_vlink will take a User-level
|
||||
name (B), and return a vlink (host(port) and hsoname) (C)
|
||||
|
||||
Most commands - e.g. set_atr take User-level names (B)
|
||||
|
||||
vln -n is used to create a user-level name (B) for a hsoname (C)
|
||||
|
||||
|
||||
Variations on User Level names
|
||||
------------------------------
|
||||
The way that a user-level name appears is significantly more complicated
|
||||
than a standard unix filename. For what follows, lets assume you
|
||||
are set up in the Virtual File System "aol", and that your system is setup
|
||||
the way most are.
|
||||
|
||||
/ is the root of your virtual system
|
||||
xxx/yyy is relative to the current workign directory (see vwd)
|
||||
swa:/zzz means /zzz relative to the virtual file system "swa"
|
||||
#/INET/EDU/ISI/swa means the swa virtual file system on isi.edu, this is
|
||||
sometimes called a global-name, with # being the global root.
|
||||
swa:zzz Has a currently undefined meeting DONT USE IT
|
||||
|
||||
In reality, these are all based upon certain links being
|
||||
present in the user-level directory /VIRTUAL-SYSTEMS.
|
||||
|
||||
Expressed differently, your virtual system looks like this
|
||||
/ Root of virtual system
|
||||
/aol Typically your home directory.
|
||||
/VIRTUAL-SYSTEMS/ Links to other virtual systems
|
||||
/VIRTUAL-SYSTEMS/swa/ Link to swa's virtual system description (also
|
||||
often stated as "link to swa's virtual system"). This
|
||||
can also be expressed as swa:/VS-DESCRIPTION
|
||||
/VIRUTAL-SYSTEMS/swa/ROOT Link to the root of swa's virtual system system. This
|
||||
can also be expressed as swa:/
|
||||
/VIRTUAL-SYSTEMS/#/ Link to global root aka "#/"
|
||||
/VS-DESCRIPTION/ Definition of your virtual system
|
||||
/VS-DESCRIPTION/ROOT/ Root of your virtual system same as "/"
|
||||
/VS-DESCRIPTION/HOME/ Home directory, "cwd" at startup, same as /aol
|
||||
|
||||
|
||||
To link a virtual system into this - use the command
|
||||
vln #/INET/EDU/ISI/swa:/VS-DESCRIPTION /VIRTUAL-SYSTEMS/swa
|
||||
|
||||
|
||||
Unix filesystem to virtual file system
|
||||
--------------------------------------
|
||||
hsoname's map to Unix names real easy - they are the same except for hsonames
|
||||
that don't start with a slash. e.g.: GOPHER-GW/PATH.NET(8001)/1/
|
||||
|
||||
user-level names are more complicated, the root of the "aol" virtual file
|
||||
system will (according to swa) typically be /usr/pfs/pfsdat/local-vsystems/aol
|
||||
|
||||
On our system, I find the following structure:
|
||||
|
||||
/usr/pfs Root of our prospero data area
|
||||
/usr/pfs/pfsdat Real hierarchy of prospero data
|
||||
/usr/pfs/pfsdat/vs Dont know what this is - there is NOTHING in it
|
||||
/usr/pfs/shadow Start of shadow hierarcy, links and attributes
|
||||
/usr/pfs/shadow/xyz Shadow hierarchy for Unix directory /xyz
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat Shadow of data area
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/local_vsystems/aol root of aol virtual system
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/local_vsystems/master virtual-systems directory
|
||||
is master copy of all vs's at this site
|
||||
/usr/pfs/shadow/usr/pfs/pfsdata/local_vsystems/master/storage specifies
|
||||
hosts where virtual-systems on this site can be stored
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/local_vsystems/protoype copied by newvs
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/vs/ junk created by newpsite?
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/vs:1 ditto
|
||||
|
||||
Each directory in the shadow typically contains a file
|
||||
".directory#contents" with attribute information and links in it.
|
||||
(This is soon to be supreseded by .directory#object)
|
||||
|
||||
Environment variables
|
||||
---------------------
|
||||
Certain environment variables give the base which maps user-level names to
|
||||
hsonames and Unix names. vfsetup sets these up. The hsoname is always the
|
||||
Unix name for the directory, but beware, this directory may only exist under
|
||||
the shadow hierarchy.
|
||||
VSWORK User-level name for cwd
|
||||
VSWORK_HOST Host of cwd
|
||||
VSWORK_FILE hsname of cwd
|
||||
VSDESC_HOST and VSDESC_FILE host and hsoname of VSDESCRIPTION directory
|
||||
this always has the user-level name of /VS-DESCRIPTION
|
||||
VSHOME,VSHOME_HOST and VSHOME_FILE user-level, host and hsoname of
|
||||
home directory.
|
||||
VSROOT_HOST and VSROOT_FILE host and hsoname of Root directory
|
||||
this always has the user-level name of /
|
||||
(Note at some time the _FILE variables will probably be replaced with _HSONAME)
|
||||
|
||||
Other information:
|
||||
------------------
|
||||
See the manual 5.1 for more details (but absolutely ZERO examples)
|
||||
vwp - will tell you the host and hsoname of the current working directory
|
||||
vwd - will give the user-level name of the cwd.
|
||||
|
||||
Whats wrong with this!
|
||||
----------------------
|
||||
|
||||
Having described it, here are some ideas on what is wrong with it.
|
||||
*) Hsonames are long, and expose internal directory structure
|
||||
to external view. Clients shoudlnt need to have to know where
|
||||
my prospero directories are kept. Contrast gopher, where paths
|
||||
are short and typically something like / or /Agriculture
|
||||
|
||||
*) Confusion of two names (hsoname and virtual name). And two
|
||||
physical directory trees (real and shadow)
|
||||
|
||||
*) object-pool, picking another arbitrary location for directories
|
||||
that appear only in the shadow hierarchy but not in the real hierarchy is
|
||||
a bad move. Especially since many of these are going to aquire real
|
||||
files at some point (e.g. About files).
|
||||
|
||||
*) Multiple steps for simple operations - e.g. needing vmkdir and mkdir
|
||||
to create something, causes potential for mistakes.
|
||||
|
||||
*) vmv is not available, and really hard to do by hand, since
|
||||
the things you are trying to move are in multiple locations.
|
||||
|
||||
This is Mitra's understanding of Prospero's different naming schemes and
|
||||
their interrelationship, based upon phone conversations with Steve.
|
||||
|
||||
I found
|
||||
and still find these incredibly confusing, and this is a first cut at
|
||||
a summary. I've neccessarily skipped over much of the details to avoid
|
||||
confusing the reader. I'm using examples based upon our system which -
|
||||
I believe - accepts all the sensible defaults. The system is flexible
|
||||
enough that none of this could be correct, but in that case you'd probably
|
||||
know enough not to be reading this.
|
||||
|
||||
There are three different naming schemes for files around Prospero.
|
||||
|
||||
A) The regular unix filename, this is rarely used in Prospero
|
||||
|
||||
B) User-level-names, which are relative to virtual file systems. Similarly to
|
||||
unix filenames, if you specify these without leading /, then they are
|
||||
relative to the current working directory. (see environment below)
|
||||
user-level names are always relative to the virtual file system you
|
||||
are set up in. This is the state set up by the "vfsetup" command.
|
||||
|
||||
C) Hsonames - Host Specific Object Names, always accompanied by a host(port)
|
||||
to specify which host(port) it's meaningfull at. This concept is often
|
||||
simplified to "hsoname". Except in the case of gateways, hsonames are
|
||||
usually the real (unix) name of the file on the remote system.
|
||||
|
||||
|
||||
Who uses what names
|
||||
-------------------
|
||||
Most of the data structures - vlink, vdirs etc use host(port) and hsoname (C).
|
||||
|
||||
Various functions map between them - especially rd_vlink will take a User-level
|
||||
name (B), and return a vlink (host(port) and hsoname) (C)
|
||||
|
||||
Most commands - e.g. set_atr take User-level names (B)
|
||||
|
||||
vln -n is used to create a user-level name (B) for a hsoname (C)
|
||||
|
||||
|
||||
Variations on User Level names
|
||||
------------------------------
|
||||
The way that a user-level name appears is significantly more complicated
|
||||
than a standard unix filename. For what follows, lets assume you
|
||||
are set up in the Virtual File System "aol", and that your system is setup
|
||||
the way most are.
|
||||
|
||||
/ is the root of your virtual system
|
||||
xxx/yyy is relative to the current workign directory (see vwd)
|
||||
swa:/zzz means /zzz relative to the virtual file system "swa"
|
||||
#/INET/EDU/ISI/swa means the swa virtual file system on isi.edu, this is
|
||||
sometimes called a global-name, with # being the global root.
|
||||
swa:zzz Has a currently undefined meeting DONT USE IT
|
||||
|
||||
In reality, these are all based upon certain links being
|
||||
present in the user-level directory /VIRTUAL-SYSTEMS.
|
||||
|
||||
Expressed differently, your virtual system looks like this
|
||||
/ Root of virtual system
|
||||
/aol Typically your home directory.
|
||||
/VIRTUAL-SYSTEMS/ Links to other virtual systems
|
||||
/VIRTUAL-SYSTEMS/swa/ Link to swa's virtual system description (also
|
||||
often stated as "link to swa's virtual system"). This
|
||||
can also be expressed as swa:/VS-DESCRIPTION
|
||||
/VIRUTAL-SYSTEMS/swa/ROOT Link to the root of swa's virtual system system. This
|
||||
can also be expressed as swa:/
|
||||
/VIRTUAL-SYSTEMS/#/ Link to global root aka "#/"
|
||||
/VS-DESCRIPTION/ Definition of your virtual system
|
||||
/VS-DESCRIPTION/ROOT/ Root of your virtual system same as "/"
|
||||
/VS-DESCRIPTION/HOME/ Home directory, "cwd" at startup, same as /aol
|
||||
|
||||
|
||||
To link a virtual system into this - use the command
|
||||
vln #/INET/EDU/ISI/swa:/VS-DESCRIPTION /VIRTUAL-SYSTEMS/swa
|
||||
|
||||
|
||||
Unix filesystem to virtual file system
|
||||
--------------------------------------
|
||||
hsoname's map to Unix names real easy - they are the same except for hsonames
|
||||
that don't start with a slash. e.g.: GOPHER-GW/PATH.NET(8001)/1/
|
||||
|
||||
user-level names are more complicated, the root of the "aol" virtual file
|
||||
system will (according to swa) typically be /usr/pfs/pfsdat/local-vsystems/aol
|
||||
|
||||
On our system, I find the following structure:
|
||||
|
||||
/usr/pfs Root of our prospero data area
|
||||
/usr/pfs/pfsdat Real hierarchy of prospero data
|
||||
/usr/pfs/pfsdat/vs Dont know what this is - there is NOTHING in it
|
||||
/usr/pfs/shadow Start of shadow hierarcy, links and attributes
|
||||
/usr/pfs/shadow/xyz Shadow hierarchy for Unix directory /xyz
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat Shadow of data area
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/local_vsystems/aol root of aol virtual system
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/local_vsystems/master virtual-systems directory
|
||||
is master copy of all vs's at this site
|
||||
/usr/pfs/shadow/usr/pfs/pfsdata/local_vsystems/master/storage specifies
|
||||
hosts where virtual-systems on this site can be stored
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/local_vsystems/protoype copied by newvs
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/vs/ junk created by newpsite?
|
||||
/usr/pfs/shadow/usr/pfs/pfsdat/vs:1 ditto
|
||||
|
||||
Each directory in the shadow typically contains a file
|
||||
".directory#contents" with attribute information and links in it.
|
||||
(This is soon to be supreseded by .directory#object)
|
||||
|
||||
Environment variables
|
||||
---------------------
|
||||
Certain environment variables give the base which maps user-level names to
|
||||
hsonames and Unix names. vfsetup sets these up. The hsoname is always the
|
||||
Unix name for the directory, but beware, this directory may only exist under
|
||||
the shadow hierarchy.
|
||||
VSWORK User-level name for cwd
|
||||
VSWORK_HOST Host of cwd
|
||||
VSWORK_FILE hsname of cwd
|
||||
VSDESC_HOST and VSDESC_FILE host and hsoname of VSDESCRIPTION directory
|
||||
this always has the user-level name of /VS-DESCRIPTION
|
||||
VSHOME,VSHOME_HOST and VSHOME_FILE user-level, host and hsoname of
|
||||
home directory.
|
||||
VSROOT_HOST and VSROOT_FILE host and hsoname of Root directory
|
||||
this always has the user-level name of /
|
||||
(Note at some time the _FILE variables will probably be replaced with _HSONAME)
|
||||
|
||||
Other information:
|
||||
------------------
|
||||
See the manual 5.1 for more details (but absolutely ZERO examples)
|
||||
vwp - will tell you the host and hsoname of the current working directory
|
||||
vwd - will give the user-level name of the cwd.
|
||||
|
||||
8264
prospero/doc/nir.status.report
Normal file
8264
prospero/doc/nir.status.report
Normal file
File diff suppressed because it is too large
Load Diff
5043
prospero/doc/protocol.PS
Normal file
5043
prospero/doc/protocol.PS
Normal file
File diff suppressed because it is too large
Load Diff
2447
prospero/doc/protocol.tex
Normal file
2447
prospero/doc/protocol.tex
Normal file
File diff suppressed because it is too large
Load Diff
2
prospero/doc/rationales/FILES
Normal file
2
prospero/doc/rationales/FILES
Normal file
@@ -0,0 +1,2 @@
|
||||
FILES
|
||||
pthreads
|
||||
11
prospero/doc/rationales/pthreads
Normal file
11
prospero/doc/rationales/pthreads
Normal file
@@ -0,0 +1,11 @@
|
||||
This file describes some of the design decisions that were made during
|
||||
the multi-threading of the Prospero server, and the rationales for the
|
||||
decisions.
|
||||
|
||||
We decided to use the Posix threads library {pthreads) because:
|
||||
a) it was already becoming a standard; nothing else was.
|
||||
b) it had the needed functionality for our simple task
|
||||
c) a free implementation existed for our development environment, SunOS 4.1.3
|
||||
on the SPARC processor.
|
||||
|
||||
|
||||
142
prospero/doc/system_calls
Normal file
142
prospero/doc/system_calls
Normal file
@@ -0,0 +1,142 @@
|
||||
This is a list of all the system library functions used by the
|
||||
Prospero server when running in multi-threaded mode. Each function
|
||||
has a description of its thread-safe status after it. This is really
|
||||
an internal document, but we are providing it in this prerelease for
|
||||
the sake of anyone wanting to work with the multithreaded distribution.
|
||||
|
||||
|
||||
.div
|
||||
.rem
|
||||
___errno
|
||||
_exit
|
||||
abort Safe
|
||||
alarm 2
|
||||
atexit Safe
|
||||
atoi Safe
|
||||
atol Safe
|
||||
bind Safe
|
||||
calloc Safe
|
||||
ceil Must be compiled with libm.so NOT libm.a
|
||||
chdir 2
|
||||
chmod 2
|
||||
clearerr Safe
|
||||
close 2
|
||||
closedir Safe
|
||||
connect Safe
|
||||
crypt Safe
|
||||
dup2 UNSAFE
|
||||
called in a number of places, added assertions - probably fail!
|
||||
execv 2
|
||||
exit 2
|
||||
fclose Safe
|
||||
fcntl 2
|
||||
fdopen Safe
|
||||
ferror Safe
|
||||
fflush Safe
|
||||
fgets Safe
|
||||
fileno Safe
|
||||
fopen Safe
|
||||
fork 2
|
||||
fprintf Safe (as long as setlocale not used)
|
||||
fputs Safe
|
||||
fread Safe
|
||||
free Safe
|
||||
fseek Safe
|
||||
fstat 2
|
||||
ftell Safe
|
||||
fwrite Safe
|
||||
getc Note its a macro - evaluates arg more than once
|
||||
getchar Safe
|
||||
getcwd Safe
|
||||
getdomainname WEIRD - not in man page
|
||||
getenv Safe
|
||||
geteuid 2
|
||||
getgrgid UNSAFE - Use getgrgid_r
|
||||
Write p_th_getgrgid that calls getgrgid_r or mutexes and copies
|
||||
Used in app/ls.c(asserts single thread) & dsrfinfo(unsafely)
|
||||
SWA removed
|
||||
gethostbyname UNSAFE - Use gethostbyname_r
|
||||
Used in various places either asserts single thread
|
||||
or mutexes GETHOSTBYNAME
|
||||
getpid 2
|
||||
getpwuid UNSAFE use getpwuid_r
|
||||
Used in various client things - asserts single thread
|
||||
dsrfinfo UNSAFELY
|
||||
SWA removed
|
||||
getservbyname UNSAFE - Use getservbyname_r
|
||||
Used in various client things - asserts single thread
|
||||
getsockopt Safe
|
||||
getuid 2
|
||||
gmtime UNSAFE
|
||||
Mutexed by PFS_TIMETOASN
|
||||
inet_addr Safe
|
||||
inet_ntoa Safe
|
||||
isascii Safe (*setlocale)
|
||||
localtime UNSAFE
|
||||
Mutexed by PFS_TIMETOASN
|
||||
malloc Safe
|
||||
memcmp Safe
|
||||
memcpy Safe
|
||||
memmove Safe
|
||||
memset Safe
|
||||
mkdir 2
|
||||
mutex_init Safe
|
||||
mutex_lock Safe
|
||||
mutex_trylock Safe
|
||||
mutex_unlock Safe
|
||||
open 2
|
||||
opendir Safe
|
||||
perror Safe
|
||||
printf Safe (as long as setlocale not used)
|
||||
putc Safe (note macro evaluates Streammultiple times)
|
||||
rand UNSAFE use rand_r
|
||||
SWA to look at this if assertion fails
|
||||
assertions may break wais
|
||||
read 2
|
||||
readdir UNSAFE - Use readdir_r
|
||||
Many places - asserts single threaded
|
||||
dsdir UNSAFELY USED
|
||||
scandir UNSAFELY USED, this is called by WAIS
|
||||
realloc Safe
|
||||
recvfrom Safe
|
||||
rename 2
|
||||
select Safe
|
||||
sendto Safe
|
||||
setsid 2
|
||||
setsockopt Safe
|
||||
sigemptyset Safe
|
||||
signal 2
|
||||
sigprocmask 2
|
||||
sleep Safe
|
||||
socket Safe
|
||||
sprintf Safe
|
||||
srand UNSAFE
|
||||
see notes on rand
|
||||
sscanf Safe
|
||||
stat 2
|
||||
strcasecmp Safe
|
||||
strcat Safe
|
||||
strchr Safe
|
||||
strcmp Safe
|
||||
strcpy Safe
|
||||
strerror Safe
|
||||
strlen Safe
|
||||
strncat Safe
|
||||
strncmp Safe
|
||||
strncpy Safe
|
||||
strrchr Safe
|
||||
strstr Safe
|
||||
sysinfo 2
|
||||
thr_create Safe
|
||||
thr_getspecific Safe
|
||||
thr_keycreate Safe
|
||||
thr_self Safe
|
||||
thr_setspecific Safe
|
||||
time 2
|
||||
toupper Safe (as long as not using setlocale)
|
||||
umask Safe
|
||||
ungetc Safe
|
||||
unlink 2
|
||||
vprintf Asynch-Safe, whatever that means? ASK SUN
|
||||
vsprintf Safe
|
||||
write 2
|
||||
34
prospero/doc/v.beta51.announcement
Normal file
34
prospero/doc/v.beta51.announcement
Normal file
@@ -0,0 +1,34 @@
|
||||
A Beta release of version 5.1 of the Prospero file system is now
|
||||
available by anonymous FTP from PROSPERO.ISI.EDU in the file
|
||||
pub/prospero/prospero.tar.Z. It can also be obtained through Prospero
|
||||
itself from /releases/prospero/prospero.tar.Z
|
||||
|
||||
A special stripped-down version of the Prospero server is now
|
||||
available, for sites that want to publish their anonymous FTP archive
|
||||
areas through Prospero and don't want to worry about the full gamut of
|
||||
configuration options. This can be retrieved by anonymous FTP from
|
||||
PROSPERO.ISI.EDU in the file pub/prospero/prospero.ftp-only.tar.Z or
|
||||
through Prospero itself from /releases/prospero/prospero.ftp-only.tar.Z
|
||||
|
||||
This release must be compiled with an ANSI C compiler.
|
||||
|
||||
Since Alpha 5.0, there have been the following substantial changes of
|
||||
general interest. See the release notes (in the top-level README file
|
||||
in the distribution) for a full list of changes:
|
||||
|
||||
The user-level name format has been enhanced. Special characters in
|
||||
user-level names ('#', ':', '/', '(', ')', and now '\') can be quoted
|
||||
by preceding them with a backslash ('\'). This change will be useful
|
||||
as more new databases with unusual names are integrated into the
|
||||
propero naming network. Library routines have been added to help in
|
||||
manipulating the new name format.
|
||||
|
||||
The code sending names across the network has been improved; Spaces in
|
||||
file names sent across the network still occasionally caused problems
|
||||
in the Alpha 5.0 release; they no longer do in Beta 5.1.
|
||||
|
||||
A new LOCAL access method has been added. Along with it is a new
|
||||
definition in pserver.h called SHARED_PREFIXES. This definition,
|
||||
among other things, makes it very easy to retrieve files through NFS
|
||||
on systems that run an automount demon.
|
||||
|
||||
94
prospero/doc/v5.announcement
Normal file
94
prospero/doc/v5.announcement
Normal file
@@ -0,0 +1,94 @@
|
||||
An Alpha release of version 5 of the Prospero file system is now
|
||||
available by anonymous FTP from PROSPERO.ISI.EDU in the file
|
||||
pub/prospero/prospero.tar.Z (840 blocks). It can also be obtained
|
||||
through Prospero itself from /releases/prospero/prospero.tar.Z
|
||||
|
||||
The most important change since the last major release is that the
|
||||
protocol has been significantly revised. Quoting, a feature that the
|
||||
previous version of the protocol mentioned but which was never
|
||||
implemented, is now fully supported. This means that filenames and
|
||||
object names with spaces and other strange characters in their names
|
||||
now work. This is important, since Prospero is being increasingly used to
|
||||
index and organize other types of data than UNIX files. The server
|
||||
will still speak the older version of the protocol to older clients.
|
||||
|
||||
Other significant changes since the last major release include the
|
||||
following
|
||||
|
||||
. The code is now in ANSI C.
|
||||
|
||||
. Remote modification and retrieval of attributes on links and files
|
||||
is now fully supported. Attributes have changed significantly.
|
||||
You can modify attributes through the new set_atr client program or
|
||||
through the pset_at() and pset_linkat() library routines.
|
||||
Attributes that happen to be stored on the VLINK structure (such as
|
||||
the link name) are now treated the same as all other attributes and
|
||||
can be modified with the same commands used to modify other
|
||||
attributes.
|
||||
|
||||
. The MAGIC-NUMBER mechanism has been generalized into an ID
|
||||
mechanism. This allows Prospero to be used to experiment with
|
||||
unique document identifiers (currently the subject of an IETF
|
||||
working group).
|
||||
|
||||
. The ACCESS-METHOD attribute has been generalized. It no longer
|
||||
assumes that the host providing directory information about an
|
||||
object is the same host from which the object should be retrieved.
|
||||
|
||||
. Support for the GOPHER access method (at the moment, only on
|
||||
EXTERNAL links) is now included. This means that objects of
|
||||
interest you discover through Gopher can be added to the Prospeo
|
||||
namespace.
|
||||
|
||||
. Filters have been generalized considerably. This release includes
|
||||
support for PREDEFINED filters that run on the server side. Such
|
||||
filters solve the security and portability problems that have
|
||||
plagued filters in the past. A later release will come with a
|
||||
number of predefined standard server and client filters.
|
||||
|
||||
. Various bug fixes and fixes for some machine dependencies
|
||||
|
||||
. Additional features in the Asynchronous Reliable Delivery Protocol
|
||||
(ARDP; formerly the Reliable Datagram Protocol) that support new
|
||||
features in the archie server and client, such as the ability for a
|
||||
client to ask for how long it must wait until its query will be
|
||||
serviced, and the ability to cancel pending requests. The ARDP
|
||||
library is now a separate component from the rest of prospero, and
|
||||
we encourage developers to use it in their applications.
|
||||
|
||||
. Kerberos Version 5 is now available as an authentication mechanism.
|
||||
|
||||
. It is now possible for the same binaries to support users running C
|
||||
shell variants and Bourne shell variants.
|
||||
|
||||
. The server now can provide a message of the day, and the client
|
||||
libraries provide support for retrieving it.
|
||||
|
||||
. The protocol manual has been considerably expanded and improved.
|
||||
|
||||
. Introduced in the last beta release and still present: a
|
||||
standalone client to query archie servers, and an alternative ls
|
||||
program (ALS).
|
||||
|
||||
The release has been tested on Suns running SunOS, DEC MIPS machines
|
||||
running ULTRIX, and HP 9000 series 700 workstations running HP-UX.
|
||||
|
||||
Please report bugs to bug-prospero@ISI.EDU
|
||||
|
||||
We would like to thank the following people for bug fixes, for porting
|
||||
Prospero to other machine types (and feeding back the changes), or for
|
||||
adding new features.
|
||||
|
||||
Eric Anderson SURAnet
|
||||
Joseph Boykin Encore Computer Corporation
|
||||
Steve Cliffe University of Wollongong
|
||||
John Curran NSF Network Service Center (NNSC)
|
||||
Alan Emtage Bunyip Information Systems
|
||||
George Ferguson Univeristy of Rochester
|
||||
Jonathan Kamens MIT Project Athena
|
||||
Brendan Kehoe Cygnus
|
||||
Case Larsen Lawrence Berkeley Laboratory
|
||||
Gaute Nessan University of Tromsoe, Norway
|
||||
Rainer Orth University of Cologne, Germany
|
||||
|
||||
-- Clifford Neuman and Steven Augart
|
||||
105
prospero/doc/v52.gopher.ann
Normal file
105
prospero/doc/v52.gopher.ann
Normal file
@@ -0,0 +1,105 @@
|
||||
An Alpha release of version 5.2 of the Prospero file system is now
|
||||
available by anonymous FTP from PROSPERO.ISI.EDU in the file
|
||||
pub/prospero/prospero-alpha.5.2.tar.Z. It can also be obtained
|
||||
through Prospero itself from /releases/prospero/prospero-alpha.5.2.tar.Z.
|
||||
The name prospero.tar.Z in those directories still points to the stable
|
||||
Beta 5.1 release; this has been done for the sake of the archie server
|
||||
maintainers and other information providers who depend upon Prospero.
|
||||
|
||||
Some important changes since the last Prospero release should be of
|
||||
interest to the readers of comp.infosystems.gopher:
|
||||
|
||||
(a) A menu-based browser client, similar to the Gopher client
|
||||
(b) A gateway server which makes all of Gopherspace available through
|
||||
Prospero queries.
|
||||
(c) A menu-based browser API interface library to Prospero, which allows
|
||||
one to easily write new browsers that use Prospero to make their underlying
|
||||
calls.
|
||||
|
||||
The menu-based browser supports all of the basic Gopher types:
|
||||
searches, text files, data files, and portals (what Gopher calls
|
||||
telnet sessions). It does not yet support sophisticated display of
|
||||
binary image files, reading Postscript or MIME documents, playing
|
||||
sounds, or automatic decoding of uuencoded, compressed, or tarred
|
||||
files. These enhancements will be added shortly; the protocol
|
||||
definitions for them have already been made.
|
||||
|
||||
We support authenticated remote modifications to menus, though not
|
||||
presently from within the browser itself. For now you will have to
|
||||
learn how to use a few Prospero commands to add new menus or items and
|
||||
set descriptions. We plan to eventually support remote update within
|
||||
the browser itself.
|
||||
|
||||
Prospero, and thus menus available to the menu browser (as a Prospero
|
||||
client), supports fine grained access control based on client
|
||||
identity. Authentication is provided using 4 alternative
|
||||
authentication mechanisms, depending on your specific needs: (a)
|
||||
Kerberos (version 5); (b) per user passwords; (c) trusted port and
|
||||
trusted host assertion (like the Berkeley R commands); and (d) a check
|
||||
of the host from which a request originated and the asserted user
|
||||
identity of the client.
|
||||
|
||||
Prospero provides full access control list mechanisms for those who
|
||||
wish to put fine-grained permissions on particular objects or
|
||||
directories. For instance, one can easily set some directories so
|
||||
that anybody at your company or university can read data in them, only
|
||||
a particular group of people can insert data into them, and only the
|
||||
system administrator or the author of a particular piece of
|
||||
information is allowed to modify and delete it. Of course, anyone who
|
||||
does not need these security mechanisms can export data using the
|
||||
default permissions defined on a per server basis.
|
||||
|
||||
An elegant new Prospero feature we're rather proud of is the search
|
||||
interface. We support a variety of search methods, including direct
|
||||
queries to Prospero-speaking database servers, such as Archie servers
|
||||
and all Gopher servers via a Prospero-Gopher gateway. The search
|
||||
servers are self defining, exporting attributes that tell the client
|
||||
what to prompt for, help messages to display if requested by the user,
|
||||
and how to package the search when it is sent to the server.
|
||||
|
||||
Client implementors need not worry about the generality of this
|
||||
mechanism since they can make perfectly functional clients that use
|
||||
only a small subset of the available data. The menu browser has a
|
||||
subset of this search interface built into it.
|
||||
|
||||
The philosophy behind this work, or why we are doing this:
|
||||
|
||||
One of Gopher's greatest strengths is its clear, straightforward user
|
||||
interface. However, the gopher protocol itself has a number of
|
||||
limitations which keep it from being suitable as a universal Internet
|
||||
information infrastructure, such as the fact that all updates to data
|
||||
must be made through means outside the protocol (i.e., editing files
|
||||
on the server) and its lack of security mechanism.
|
||||
|
||||
Most current Internet information services, such as Gopher, World Wide
|
||||
Web, and WAIS, have their own specialized clients, servers, and
|
||||
network protocols. This makes it difficult for these services to
|
||||
interoperate smoothly. People attempt to address these issues with
|
||||
inefficient ad-hoc gateways, such as the Gopher servers that make
|
||||
Archie queries on behalf of Gopher clients, or even our own
|
||||
Prospero-Gopher gateway. These are not very good solutions.
|
||||
|
||||
Prospero provides a framework for integrating information from diverse
|
||||
sources. Client writers can work on interesting clients, and service
|
||||
providers can publish their data, without needing to work on issues of
|
||||
little interest to them. We explore these ideas in greater depth in
|
||||
the paper 'Prospero: A Base for Building Information Infrastructure',
|
||||
to be presented at the INET '93 conference in August, and available
|
||||
via anonymous FTP from PROSPERO.ISI.EDU as
|
||||
/pub/papers/prospero/prospero-bii.ps.Z.
|
||||
|
||||
We encourage others to build clients that make their queries through
|
||||
Prospero and to publish their data through Prospero. We provide an
|
||||
application library (much better documented in this release than in
|
||||
previous ones) and a simple application interface designed
|
||||
specifically for the authors of read-only menu browsers. It is also
|
||||
not difficult to publish your data through Prospero, and we are eager
|
||||
to work with those who wish to do so.
|
||||
|
||||
-- Steven Seger Augart
|
||||
Research Staff, USC Information Sciences Institute
|
||||
|
||||
-- B. Clifford Neuman
|
||||
Scientist, USC Information Sciences Institute
|
||||
|
||||
email: info-prospero@isi.edu
|
||||
9
prospero/doc/working-notes/FILES
Normal file
9
prospero/doc/working-notes/FILES
Normal file
@@ -0,0 +1,9 @@
|
||||
FILES
|
||||
README
|
||||
collation-order.txt
|
||||
gopher-hsonames.txt
|
||||
new-acl-rights
|
||||
object-interpretation.txt
|
||||
pdap.txt
|
||||
pfs-udp-ports.txt
|
||||
wais-link-format.txt
|
||||
4
prospero/doc/working-notes/README
Normal file
4
prospero/doc/working-notes/README
Normal file
@@ -0,0 +1,4 @@
|
||||
This directory is for Prospero documentation that is not yet formally
|
||||
written up in the manuals but which should be distributed anyway rather
|
||||
than held back for the great day when we have all the manuals in final
|
||||
shape :)
|
||||
141
prospero/doc/working-notes/collation-order.txt
Normal file
141
prospero/doc/working-notes/collation-order.txt
Normal file
@@ -0,0 +1,141 @@
|
||||
Revised again: 6/18/93, 11:20 am
|
||||
|
||||
COLLATION-ORDER is a new LINK attribute of type SEQUENCE in the
|
||||
ATTRIBUTE namespace.
|
||||
|
||||
In this document, where I specify sequences, spaces separate tokens
|
||||
within a sequence, just as they do in the Prospero protocol.
|
||||
|
||||
. NUMERIC
|
||||
|
||||
For the GOPHER implementation, the value will always be either
|
||||
NUMERIC ...
|
||||
or
|
||||
LAST NUMERIC ...
|
||||
|
||||
.. NUMERIC <1st-number> <2nd-number> <3rd-number> ... <nth-number>
|
||||
|
||||
Multiple instances of these are ordered with lower numbers coming
|
||||
before higher ones. One sorts on the <1st-number> field. If the
|
||||
<1st-number> fields of two vlinks are equal, then the <2nd-number>
|
||||
field is exampined, and so on. All items with a COLLATION-ORDER
|
||||
attribute with NUMERIC as the 1st field will come before other menu
|
||||
items. The <number> fields are arbitrary integers; clients are not
|
||||
required to properly handle integers that cannot be represented in the
|
||||
customary 32 bit 2s-complement representation.
|
||||
|
||||
If a number not present in a field, this is considered to come before
|
||||
all other numbers. Therefore,
|
||||
NUMERIC 1
|
||||
comes before
|
||||
NUMERIC 1 3
|
||||
Another way of saying this is that if one value of the COLLATION-ORDER
|
||||
is a proper prefix of another, the shorter item comes first.
|
||||
|
||||
If inappropriate values are present in a numeric
|
||||
field (for example, the ASCII string 'foo'), then the ordering is
|
||||
undefined. Thus,
|
||||
NUMERIC 1
|
||||
NUMERIC foo
|
||||
is just as valid an ordering as
|
||||
NUMERIC foo
|
||||
NUMERIC 1
|
||||
|
||||
.. LAST NUMERIC <1st-number> <2nd-number> <3rd-number> ... <nth-number>
|
||||
|
||||
All items with a COLLATION-ORDER attribute of this form come after all
|
||||
other items in the menu/directory. These are ordered just as with the
|
||||
NUMERIC collation-order attribute; just as with the NUMERIC
|
||||
collation-order attribute, smaller numbers go closer toward the front
|
||||
of the menu and larger towards the end.
|
||||
|
||||
. ASCII
|
||||
|
||||
ASCII <major-key-string> <minor-key-string>
|
||||
<even-more-minor-key-string> ...
|
||||
LAST ASCII <major-key-string> <minor-key-string>
|
||||
<even-more-minor-key-string> ...
|
||||
|
||||
This works like NUMERIC, but 'preceeding in ASCII collating sequence
|
||||
comes earlier' replaces 'lower numbers coming before higher ones' in
|
||||
the above discussion.
|
||||
|
||||
. Conflicting Values for COLLATION-ORDER ATTRIBUTE:
|
||||
|
||||
If two items have the same value for the COLLATION-ORDER attribute,
|
||||
then they will be sorted normally, in accordance with the usual
|
||||
directory sorting procedure. For now, this means sorting them in
|
||||
increasing order by the ASCII values of their NAME-COMPONENT fields.
|
||||
Eventually, when the DIRECTORY-ORDERING attribute is implemented, this will
|
||||
change. (The DIRECTORY-ORDERING attribute and its interactions with
|
||||
COLLATION-ORDER are documented separately, and we do not need to
|
||||
concern ourselves with it for now.) If two items have equal sort
|
||||
keys, order should be preserved.
|
||||
|
||||
. ASCII/NUMERIC precedence
|
||||
|
||||
If a directory contains some links with NUMERIC COLLATION-ORDER and
|
||||
others with ASCII collation-order defined, then the NUMERIC comes
|
||||
before the ASCII. This is an arbitrary choice. If a directory
|
||||
contains some links with LAST NUMERIC and others with LAST ASCII, then
|
||||
LAST NUMERIC precedes LAST ASCII.
|
||||
|
||||
<A nice move being made in gopherspace is to support -ve numbers, ordered
|
||||
last, after elements with no ordering specified - Mitra>
|
||||
|
||||
. Marginal cases
|
||||
|
||||
A COLLATION-ORDER attribute with a zero-length sequence as its value
|
||||
is treated as if the COLLATION-ORDER were not defined at all and is
|
||||
sorted appropriately. It follows from this that simply "LAST" is an
|
||||
acceptable order as well. Any items with 'LAST' defined as the
|
||||
collation order go after items with LAST NUMERIC or LAST ASCII.
|
||||
Note that simply "LAST" fits the model since it goes at the end, but
|
||||
is then sorted compared to others as if no collation-order was
|
||||
specified.
|
||||
|
||||
LAST without arguments comes after all other LAST's. If there are
|
||||
multiple LAST's without arguments, they are considered unordered, and
|
||||
order between them is based on other criteria (eventually directorey
|
||||
ordering if available, and if not, the order should be preserved (i.e.
|
||||
the order they were in before sorting.
|
||||
|
||||
|
||||
|
||||
. Implementation notes for Kwynn
|
||||
|
||||
The COLLATION-ORDER attribute will be examined within the m_get_menu()
|
||||
function. m_get_menu will call get_vdir() with the GVD_NOSORT flag.
|
||||
It will then call a special function (which Kwynn will write) to sort
|
||||
the VLINKs returned by get_vdir(). Kwynn should look at the source to
|
||||
the vl_insert(), and probably wants to insert links by calling
|
||||
vl_insert() with the VLI_NOSORT option.
|
||||
|
||||
Don't bother implementing ASCII collation order for now. Don't bother
|
||||
implementing LAST by itself.
|
||||
|
||||
Kwynn should write this sorting function with an eye to it possibly
|
||||
becoming a part of the PFS library. When Kwynn he has time, he should
|
||||
run the interface to his function by me and then write some library
|
||||
documentation for it to go into the PFS library manual. Depending on
|
||||
when this happens and on future discussions, we may also make this
|
||||
function the default sorting routine used by vl_insert(); this must be
|
||||
discussed.
|
||||
|
||||
Kwynn should also look at the sorting function in aq_query.c, with an
|
||||
eye to his sorting function being something that we could drop into
|
||||
aq_query.c as an alternative function.
|
||||
The sort function Kwynn implements should be order preserving. This
|
||||
will lets us run multiple sort functions on the data; first for the
|
||||
minor key and then for the major key. How about taking an argument to
|
||||
the sort function that is the directory ordering field for the
|
||||
directory. Ignore the field for now. -bcn.
|
||||
|
||||
|
||||
Yout sort ordering function should be in two parts, the sort code, and
|
||||
a comparison function. The comparison function should be the only
|
||||
place all these rules are encoded, and should be fairly
|
||||
straightforward. Doing comparisons one token at a time, maintaining
|
||||
perhaps one bit of state indicating whether the previous token seen
|
||||
was "LAST".
|
||||
|
||||
192
prospero/doc/working-notes/gopher-hsonames.txt
Normal file
192
prospero/doc/working-notes/gopher-hsonames.txt
Normal file
@@ -0,0 +1,192 @@
|
||||
There are three separate servers involved in the following document:
|
||||
1) GOPHER-GW Servers: servers responding to Prospero protocol queries
|
||||
and making Gopher protocol queries. This server feature is
|
||||
implemented and is available in Prospero release Alpha.5.2.
|
||||
2) Prospero Servers that support the GOPHER database (that can read
|
||||
native gopher directory format) and reply to Prospero queries. They
|
||||
do not make any queries themselves. These servers have not been implemented
|
||||
yet. They are not our top priority, since the GOPHER-GW server appears
|
||||
to fill much of the niche that this was intended to fill. We call
|
||||
them 'local Gopher database' servers.
|
||||
3) Gopher servers that make Prospero protocol queries.
|
||||
|
||||
----
|
||||
|
||||
The GOPHER-GW Prospero servers (the ones that can make Gopher protocol
|
||||
queries and export the results as Prospero directories (the server
|
||||
that supports the GOPHER-GW Prospero database) and the Prospero
|
||||
servers that can export the local Gopher hierarchy (the servers that
|
||||
support the GOPHER Prospero database) will return links to Gopher
|
||||
objects using the following format:
|
||||
|
||||
The Prospero servers export links to Gopher objects on the local
|
||||
host (known to run both Gopher and Prospero) as normal Prospero links
|
||||
which have normal Prospero access methods, INCLUDING the GOPHER access
|
||||
method. They export links to all objects on other hosts (except for
|
||||
directories/menus and searches) as Prospero EXTERNAL links with the
|
||||
GOPHER access method, TELNET access method, TN3270 access method, or
|
||||
AFTP access method.
|
||||
|
||||
They export links to Gopher menus and searches on other hosts (Recall
|
||||
that all Gopher links have the form <gopher-host> <gopher-port>
|
||||
<gopher-selector-string>) as links with a HOST-NAME field of some
|
||||
known GOPHER-GW host and an HSONAME of the form:
|
||||
|
||||
GOPHER-GW/<gopher-host>(<gopher-port>)/<gopher-type-char>/<gopher-selector-string>
|
||||
|
||||
This canonical form means that a Gopher server which is capable of
|
||||
making Prospero queries can always convert links of that form back to
|
||||
normal gopher links, and return the reconstructed normal Gopher link
|
||||
rather than leading the user through a series of gateways. The
|
||||
gopher-type-character will always be 1 (menu) or 7 (search) when a
|
||||
GOPHER-GW link is exported by a Prospero server supporting the GOPHER
|
||||
database. The GOPHER-GW server will export all links to Gopher
|
||||
non-menu objects as Prospero EXTERNAL links with the GOPHER access
|
||||
method.
|
||||
|
||||
. How gopher searches are exported.
|
||||
|
||||
They are exported as Prospero directories with an
|
||||
OBJECT-INTERPRETATION of SEARCH.
|
||||
|
||||
In addition, a QUERY-METHOD attribute is exported for them. This is
|
||||
an instance of the more general QUERY-METHOD format (documentation not
|
||||
in final form yet). The first token of the query method looks like a
|
||||
procedure call. The GOPHER-GW server uses the format
|
||||
gopher-query(search-words); since there is only one search string in a
|
||||
gopher search, there is only one argument to the procedure call.
|
||||
|
||||
For the gopher query method, the 2nd token is always going to be
|
||||
${search-words}.
|
||||
|
||||
The third and last component will always be '' for gopher searches;
|
||||
this indicates that the contents of a directory are being asked for
|
||||
and will be returned, not a link to a directory. So:
|
||||
{ I presume this is syntactically equivalent to '*' ? - Mitra }
|
||||
|
||||
|
||||
gopher-query(search-words) ${search-words} ''
|
||||
|
||||
There will also be an instance of the QUERY-ARGUMENT field. Note that 'char*' is a single word with no spaces.
|
||||
|
||||
search-words 'Index word(s) to search for:' 'mandatory char*' '%s' ''
|
||||
|
||||
And two instances of the QUERY-DOCUMENT attribute, one for
|
||||
gopher-query() and one for search-words. But you don't even have to
|
||||
pay attention to them for now.
|
||||
|
||||
To execute the search, the next request to the server will be:
|
||||
|
||||
DIRECTORY <search-directory-hsoname>
|
||||
LIST '' COMPONENTS <search-string>
|
||||
|
||||
This can be implemented by a simple call to
|
||||
|
||||
p_get_dir(<vlink-to-directory>, <search-string>, usual dir,
|
||||
usual flags, leave ACOMP set to null)
|
||||
|
||||
. Special cases
|
||||
|
||||
Gopher links to files with selector strings that start with ftp: and
|
||||
contain an @ are exported with two access methods: the regular GOPHER
|
||||
access methods and the AFTP access method directly to the host. The
|
||||
AFTP access method is given preference. The client will then attempt
|
||||
to make a direct anonymous FTP connection, if it supports the Prospero
|
||||
AFTP access method. (all current Prospero clients do.) This is
|
||||
considerably more efficient and more robust than putting lots of
|
||||
additional load on the Gopher/AFTP gateways.
|
||||
|
||||
Gopher links to directories with selector strings that start with ftp:
|
||||
and contain an @ are instead exported as native Prospero links to the
|
||||
Prospero server running on an archie host (the default is
|
||||
ARCHIE.SURA.NET, but this can be changed easily by editing the
|
||||
definition in the file lib/psrv/gopher_gw/goph_gw_dsdb.c).
|
||||
This bypasses the Gopher server, which would just be gatewaying
|
||||
Prospero queries to that archie server.
|
||||
|
||||
<This is wrong, many ftp hosts arent indexed by archie, but may still
|
||||
be pointed at by gopher, in the long term it should go directly to ftp
|
||||
in the short term it should go through the gopher->ftp gateway. - Mitra>
|
||||
|
||||
. Gopher CSO type
|
||||
|
||||
We currently do not have a gateway that speaks CSO phonebook protocol.
|
||||
(Gopher type 2). We will have to write a CSO gateway in order to
|
||||
handle these. (Send email to info-prospero@isi.edu if the lack of
|
||||
this gateway strongly affects you, and we'll probably move it up on
|
||||
our priority list.)
|
||||
|
||||
< Cant this go through the gopher->cso gateway, or is this something
|
||||
gopher clients handle - Mitra >
|
||||
|
||||
. Form for links on the local GOPHER database
|
||||
|
||||
HSONAMEs for Gopher menu objects on the local host (and on remote
|
||||
hosts known to be running both Prospero and Gopher), when the menu is
|
||||
being exported as part of the local GOPHER database, are always of
|
||||
the form:
|
||||
|
||||
GOPHER/<gopher-port>/<gopher-type-character>/<gopher-selector-string>
|
||||
|
||||
. GOPHER-MENU-ITEM attribute and how to implement a Gopher server that
|
||||
makes Prospero queries (this is being worked on right now):
|
||||
|
||||
The GOPHER-GW server will provide a GOPHER-MENU-ITEM attribute
|
||||
associated with some links or directories. This is an attribute of
|
||||
type SEQUENCE in the APPLICATION namespace. It is an OBJECT attribute
|
||||
(which means it might be CACHED, ADDITIONAL, or REPLACEMENT -- you
|
||||
know the story :)). It contains a single element -- the raw Gopher
|
||||
(or Gopher+) protocol line that led to this link being generated. The
|
||||
trailing CR and LF are stripped from the protocol line. You
|
||||
should explicitly request this attribute, as part of the ATTRIBUTES
|
||||
argument to the Prospero protocol LIST command. (In your
|
||||
implementation, make sure to specify the GVD_ATTRIB flag to
|
||||
p_get_dir()).
|
||||
|
||||
This means that a gatewaying service which translates Gopher queries
|
||||
into prospero queries and exports the results as Gopher menus and objects
|
||||
will never be caught in the incestuous situation of telling a gopher client
|
||||
to make a gopher query to a gateway server that will be translated
|
||||
into a prospero query and then translated back into a gopher query by
|
||||
the responding Prospero server.
|
||||
|
||||
. Sidebar: How to check if a Prospero link can be exported as a raw
|
||||
Gopher link (i.e, a link that doesn't involve going through your gateway).
|
||||
|
||||
1) Check for the presence of the GOPHER-MENU-ITEM attribute. If it's
|
||||
there, you're all set.
|
||||
2) Look at the ACCESS-METHOD attribute. If an object supports the
|
||||
GOPHER access method, you're set.
|
||||
3) Otherwise, you'll have to gateway the link yourself.
|
||||
|
||||
. End of sidebar
|
||||
|
||||
When you export a generic Prospero link as a Gopher menu entry, for
|
||||
now the Gopher type character will be 0 (file) or 1 (directory).
|
||||
Other types are also possible, as outlined in the
|
||||
OBJECT-INTERPRETATION document (currently in doc/working-notes).
|
||||
(Specifically, enough informatin is available to let you support the
|
||||
Gopher SEARCH type, the TELNET, TN3270, and various image and sound
|
||||
types.) The Gopher host and port for the link will be the same host
|
||||
and port your Gopher server is running on. The gopher selector string
|
||||
for the link will be:
|
||||
|
||||
ProsperoPoC/<prospero-host-name>/<prospero-hsoname>
|
||||
|
||||
(ProsperoPoC means 'Prospero Point of Contact'.) My gateway (the
|
||||
Prospero server that exports Gopher directories) will detect such an
|
||||
HSONAME and take that as a hint to test whether there is really a
|
||||
Prospero hostname and hsoname that matches that. My gateway will
|
||||
eventually cache the results of such tests. Your following this
|
||||
convention means that my server will never return a Prospero link that
|
||||
requires the client to go through my server and your server in order
|
||||
to make a Prospero query that it could have made directly.
|
||||
|
||||
Implementation tip: Your server should fork when servicing requests
|
||||
(the existing Gopher servers do this).
|
||||
|
||||
I have a more elaborate later implementation in mind for the Gopher
|
||||
server exporting Prospero searches as if they were Gopher searches,
|
||||
but this is not important right now.
|
||||
|
||||
|
||||
41
prospero/doc/working-notes/new-acl-rights
Normal file
41
prospero/doc/working-notes/new-acl-rights
Normal file
@@ -0,0 +1,41 @@
|
||||
The more common entry appears first if multiple rights allow an
|
||||
operation. The operation identifier appears second.
|
||||
|
||||
Object File Directory* Link* Meaning
|
||||
A A A Aa Administer ACL
|
||||
VYA VYA VYA VvAa View ACL
|
||||
L Ll List link
|
||||
Rg RG RQ RrQ Read link, get attribute or file
|
||||
Wu Ww WM WmM Modify attribute, data, links
|
||||
DzWu DKWM DdKWMm Delete link or attribute
|
||||
EiWu EeWw EIWM Insert attributes or links, append (extend)
|
||||
>) >) >) >] Add rights (that follow the symbol)
|
||||
<( <( <( <[ Remove rights (that follow the symbol)
|
||||
|
||||
Note that there used to be a B right, which you should consider as
|
||||
equivalent to A, but you should avoid using it.
|
||||
|
||||
The following only appear on the server maintenance ACL
|
||||
|
||||
S Restart server
|
||||
T Terminate server
|
||||
U Update system information
|
||||
P Administer passwords
|
||||
p P Add new password entry
|
||||
|
||||
A "-" sign in an ACL entry means that the specified rights are
|
||||
explicitly denied.
|
||||
|
||||
* A small letter on a directory ACL means that this right applies by
|
||||
default for links in the directory that do not specify their own
|
||||
ACL or that include the directory ACL. A capital letter on a link
|
||||
ACL is ignored.
|
||||
|
||||
** When restrictions are supported, they can be used to restrict the
|
||||
specific attributes to which a right applies, or to restrict the
|
||||
interpretation of an ACL entry to only the Object, File, or Directory,
|
||||
or link.
|
||||
|
||||
Note that OBJECT, FILE, and DIRECTORY ACLs are stored in the same
|
||||
place, and share the same access control list (well, directory is
|
||||
different for now, but will eventually be merged).
|
||||
256
prospero/doc/working-notes/object-interpretation.txt
Normal file
256
prospero/doc/working-notes/object-interpretation.txt
Normal file
@@ -0,0 +1,256 @@
|
||||
This document describes the OBJECT-INTERPRETATION attribute.
|
||||
|
||||
This attribute resides in the APPLICATION namespace. It is of type
|
||||
SEQUENCE. It normally has OBJECT precedence.
|
||||
|
||||
There may be multiple instances of the OBJECT-INTERPRETATION attribute.
|
||||
|
||||
The first token specifies the class of the object. The class tells
|
||||
the user of a simple-minded browser what you can DO with the object.
|
||||
It tells the browser what icon to put up.
|
||||
In general, the second token is interpreted on a per-class basis as
|
||||
the particular format in use. The third and subsequent tokens depend
|
||||
upon the file format in use.
|
||||
|
||||
(For the Prospero menu browsers, the icons we put up currently are :
|
||||
for searches, . for files, ] for portals, and > for directories).
|
||||
|
||||
The classes are:
|
||||
|
||||
.. UNKNOWN This will never be sent over the network. It is used
|
||||
internally by clients.
|
||||
|
||||
.. VOID
|
||||
|
||||
This class is used when the TARGET of a link is NULL. The only cases
|
||||
in which this arises are (A) when a link is listable but not readable
|
||||
(then the server's LIST command returns this link) and (b) when a
|
||||
gopher type of 'i' is sent. (This is a little-used type supported by
|
||||
Panda, the University of Iowa Gopher variant.)
|
||||
|
||||
A menu browser should just display this with no type character -- it's
|
||||
a pure text string. All attempts to retrieve it will fail. Just look
|
||||
at the MENU-ITEM-DESCRIPTION and NAME.
|
||||
|
||||
A server should never return such a link with any attributes except
|
||||
(possibly) an OBJECT-INTERPRETATION of VOID.
|
||||
|
||||
.. PORTAL -- Portals are always attached to raw OBJECTs (not yet
|
||||
implemented) or to EXTERNAL links. They will NEVER be attached to
|
||||
FILEs or DIRECTORYs, although the implementor should not bother
|
||||
checking this fact. One looks at the ACCESS-METHOD to determine how
|
||||
to use it.
|
||||
|
||||
An OBJECT-INTERPRETATION of portal means that the process of accessing
|
||||
the object leaves the user in some sort of interactive session.
|
||||
|
||||
. Details
|
||||
|
||||
PORTALS: For now, the only implementation of the PORTAL class is to
|
||||
have the TELNET access method on an object. This instance of the
|
||||
ACCESS METHOD token has type TELNET, and that is the 1st token. Of
|
||||
the conventional next 4 arguments, only HOST is relevant. The hsoname
|
||||
is ignored. The fifth argument is a set of instructions to display to
|
||||
the user before opening the connection. If the fifth argument is not
|
||||
present, that is the same as if it is explicitly specified as the null
|
||||
string. We will later extend that to a full template, so anything
|
||||
that parses this access method should ignore any additional arguments
|
||||
beyond the fifth for now; they may be used later.
|
||||
|
||||
The conventional 4 arguments to an ACCESS METHOD are that the 2nd
|
||||
token is the host type (always INTERNET-D for now), the 3rd is a
|
||||
hostname, optionally followed by a port # in parentheses (in the case
|
||||
of the TELNET access method, the port # is mandatory), the 4th is the
|
||||
HSONAME type (always ASCII) and the fifth is the HSONAME (ignored in
|
||||
this case)
|
||||
|
||||
If the port # is not specified in the HOST name, then the default port
|
||||
for the TELNET service is used.
|
||||
|
||||
.. Gopher mapping
|
||||
|
||||
This can be served up by a Gopher server as a gopher menu/directory
|
||||
containing two entries: (a) the directions, as a Gopher file. (b) the
|
||||
TELNET link.
|
||||
|
||||
A Prospero server that makes Gopher protocol queries should serve up
|
||||
the Gopher type '8' (Telnet session) as an objet with PORTAL class and
|
||||
TELNET access method. If a GOPHER selector string (username) is
|
||||
present, the instructions should be the literal string:
|
||||
|
||||
'Use the account name "<selector-string>" to log in'
|
||||
|
||||
This convention will guarantee that information transformed from
|
||||
Gopher Protocol to Prospero format will be able to automatically be
|
||||
transformed back into Gopher protocol.
|
||||
|
||||
The TN3270 access method is identical to the TELNET access method,
|
||||
except that the word TELNET is replaced by TN3270 in the above
|
||||
description. Gopher type 'T' should be served up as the TN3270 access
|
||||
method. If the HOST does not specify a port, then the default port
|
||||
should be used.
|
||||
|
||||
.. EXECUTABLE -- At the moment, the only format (2nd token) firmly
|
||||
defined is PRM. The third token is always PRM_V1. We propose
|
||||
EXECUTABLE SUN4 and EXECUTABLE SUN3, but this is subject to change
|
||||
depending on implementation experience. The third and subsequent
|
||||
tokens are not clear (SUNOS4, perhaps?).
|
||||
Treat it as DATA if you don't recognize the format.
|
||||
|
||||
.. DOCUMENT
|
||||
|
||||
At this moment, the only format is TEXT. The third token is ASCII;
|
||||
other character sets will be defined later.
|
||||
|
||||
DOCUMENT MIME is defined but won't be implemented immediately. The
|
||||
GOPHER 'M' type will be exported under Prospero as DOCUMENT MIME.
|
||||
If you don't have a MIME reader, treat it as DOCUMENT TEXT ASCII.
|
||||
|
||||
.. SEARCH --
|
||||
|
||||
Only form for this: SEARCH QUERY-METHOD V1.
|
||||
|
||||
A long form of the query-method attribute is currently defined in
|
||||
/pfs/notes/query-method. This will be SEARCH QUERY-METHOD V2, and
|
||||
will be a superset of V1. For V1, we are just implementing the simple
|
||||
Gopher search type. Look at how to do this in the file
|
||||
'/pfs/notes/gopher-searches', under the section 'How to handle this
|
||||
under Prospero'.
|
||||
|
||||
If no QUERY-METHOD attribute is found, this can be handled at your
|
||||
discretion. One reasonable way to handle it would be to quietly (not
|
||||
obnoxiously) warn the user that the link has an erroneous format.
|
||||
Don't go to the expense of more protocol requests to retrieve the
|
||||
QUERY-METHOD until the link is actually selected.
|
||||
|
||||
This corresponds to gopher type '7' and will correspond to type '2'
|
||||
when I implement the CSO gateway.
|
||||
|
||||
.. VIRTUAL-SYSTEM
|
||||
|
||||
The only format for this CLASS is VS-DESCRIPTION. The VIRTUAL-SYSTEM
|
||||
VS-DESCRIPTION format is only associated with directories.
|
||||
|
||||
Menu browser should treat it as a DIRECTORY for now.
|
||||
|
||||
.. SOUND
|
||||
|
||||
No format defined at the moment.
|
||||
Corresponds to gopher type 'S' and Gopher+ type '<'.
|
||||
Treat it as DATA if you don't have a sound player or don't recognize
|
||||
the format.
|
||||
|
||||
.. IMAGE
|
||||
|
||||
Only format currently in use: IMAGE GIF. IMAGE POSTSCRIPT is defined;
|
||||
an object may be DOCUMENT POSTSCRIPT or IMAGE POSTSCRIPT, depending on
|
||||
whether it is primarily considered an image or a document.
|
||||
|
||||
MPEG, JPEG, X bitmaps, and other image encodings will be added later
|
||||
as needed.
|
||||
|
||||
IMAGE GIF corresponds to the gopher 'g' type.
|
||||
|
||||
Treat it as DATA if you don't have an image viewer.
|
||||
|
||||
.. VIDEO
|
||||
|
||||
The VIDEO class may contain prerecorded (perhaps live too? We'll have
|
||||
to see as a result of use) sound and image data. Treat it as DATA for now.
|
||||
|
||||
.. SOURCE-CODE
|
||||
|
||||
The MENU API may treat this as identical to DOCUMENT TEXT ASCII. The
|
||||
file-format (2nd field) is the computer language it's source code for.
|
||||
The current defined computer language is 'C'.
|
||||
|
||||
.. DATA
|
||||
|
||||
This is for raw files that just contain raw binary data. No
|
||||
file-format is defined for them. They cannot be displayed or printed.
|
||||
Just offer to save them.
|
||||
|
||||
.. PROGRAM
|
||||
|
||||
Interpreted code will be of class "PROGRAM", which means you can
|
||||
execute it using the interpreter named in the format field, and you
|
||||
can display it as an ASCII document. No official interpreter names
|
||||
are currently defined for PROGRAM, although we will come up with some
|
||||
on an as-needed basis. I suggest the first interpreter names be 'PERL',
|
||||
'SED', 'SH', and 'CSH'. This class is for things which are really
|
||||
both SOURCE-CODE and EXECUTABLE.
|
||||
|
||||
.. EMBEDDED
|
||||
|
||||
This class is used for objects that have to be uncompressed, unzipped,
|
||||
untarred, or have some other transformation applied to them to be
|
||||
useful.
|
||||
|
||||
The 2nd token (format) should identify the transformation. Currently
|
||||
defined ones: GZIP, COMPRESS, TAR, BINHEX (macintosh BinHex format),
|
||||
UUENCODE.
|
||||
|
||||
The third field for any transformation of class EMBEDDED may be a
|
||||
number. If it is, it indicates the number of additional arguments to
|
||||
be specified for the transformation. If a number is specified, that
|
||||
many arguments follow. Any tokens after the arguments are parsed as
|
||||
if they were a new freestanding OBJECT-INTERPRETATION attribute. If
|
||||
this third field is not a number, then it is assumed to be zero, and
|
||||
the third and subsequent tokens should be parsed as if they were a
|
||||
freestanding OBJECT-INTERPRETATION attribute.
|
||||
|
||||
GZIP, COMPRESS, TAR, BINHEX, and UUENCODE are not currently defined to
|
||||
take additional arguments. If a specific file is to be extracted from
|
||||
the tar file, see the SEGMENT field (as defined in
|
||||
/pfs/notes/aggregate).
|
||||
|
||||
Default for saving should be to save it in the raw (unextracted) form.
|
||||
A more sophisticated client can offer to unembed it before saving it.
|
||||
If you don't recognize a particular EMBEDDED type, just treat it as
|
||||
DATA. You can still offer to save it in a file.
|
||||
|
||||
.. AGGREGATE
|
||||
|
||||
This type is documented in another file but does not need to be
|
||||
discused here (yet).
|
||||
|
||||
.. DIRECTORY
|
||||
|
||||
This is a raw DIRECTORY with no special OBJECT-INTERPRETATION.
|
||||
|
||||
. Kwynn:
|
||||
|
||||
For now, just implement the following types:
|
||||
|
||||
PORTAL (with the ACCESS-METHOD TELNET)
|
||||
DOCUMENT TEXT ASCII
|
||||
SEARCH
|
||||
DIRECTORY
|
||||
DATA
|
||||
|
||||
Your next pass will be to implement:
|
||||
|
||||
VOID
|
||||
IMAGE GIF
|
||||
EMBEDDED GZIP
|
||||
EMBEDDED COMPRESS
|
||||
|
||||
Until you implement all of the OBJECT-INTERPRETATIONs, please do this hack:
|
||||
|
||||
EXECUTABLE, AGGREGATE, IMAGE, SOUND, EMBEDDED, and DATA should all be
|
||||
treated as raw DATA.
|
||||
Treat DOCUMENT MIME, SOURCE-CODE, and PROGRAM as if they were DOCUMENT
|
||||
TEXT ASCII.
|
||||
Treat VIRTUAL-SYSTEM as if it were just DIRECTORY.
|
||||
|
||||
|
||||
. If No OBJECT-INTERPRETATION present
|
||||
|
||||
If no OBJECT-INTERPRETATION is present, treat random FILEs as if
|
||||
they were either DOCUMENT TEXT ASCII or DATA. Just display them as
|
||||
TEXT, but when you're asked to retrieve them, sample the first 1k or
|
||||
so and make sure it's printable. If it isn't, say that the file isn't
|
||||
really text, and offer to save it.
|
||||
|
||||
Treat unadorned directories as if they were DIRECTORY.
|
||||
|
||||
89
prospero/doc/working-notes/pdap.txt
Normal file
89
prospero/doc/working-notes/pdap.txt
Normal file
@@ -0,0 +1,89 @@
|
||||
Prospero Data Access Protocol (doc/working-notes/pdap.txt in the
|
||||
Prospero Release)
|
||||
|
||||
Note that this document is not necessarily going to be fully in sync
|
||||
with the PDAP draft paper (Augart, Neuman, Rao, unpublished). Until
|
||||
that paper is published, the protocol is subject to change.
|
||||
|
||||
Goal: To provide a single file system protocol supporting several
|
||||
modes of file access (whole file caching, remote read/write, etc),
|
||||
that supports gateway functionality to other file services,
|
||||
as well as support for a range of authentication and authorization
|
||||
mechanisms.
|
||||
|
||||
Note: authentication and encryption/integrity eventually
|
||||
provided by ARDP library. For now, authentication
|
||||
and authorization provided directly by this protocol.
|
||||
|
||||
Message format - this is layered on ARDP protocol.
|
||||
|
||||
sequence { 1 octet version
|
||||
sequence of sequence { 1 octet operation
|
||||
asn1length data-length
|
||||
data-length octets operation-data}
|
||||
}
|
||||
|
||||
Operations =
|
||||
|
||||
1 open
|
||||
2 open response
|
||||
3 close
|
||||
4 close response
|
||||
5 stat
|
||||
6 stat response
|
||||
7 read
|
||||
8 read response
|
||||
9 write
|
||||
10 write response
|
||||
11 lease request
|
||||
12 lease response
|
||||
13 authenticate/authorization/accounting (for methods not provided in ARDP)
|
||||
14 authentication/authorization/accounting response (if not done in ARDP)
|
||||
|
||||
|
||||
Commands:
|
||||
|
||||
1 open 1 octet flags: read, write, append, create, cache, oob-xfer
|
||||
1 octet name-type
|
||||
name-type APPLICATION, FILESYSTEM, DEVICE, URL, PROSPERO-AM
|
||||
application takes application name and application specific name
|
||||
filesystem takes local system pathname
|
||||
device takes device identifier and an integer for i-node
|
||||
URL takes a URL for string (for gatewaying)
|
||||
PROSPERO-AM takes an access method sequence (for gatewaying)
|
||||
if oob-xfer flags set, path or identifier where to store
|
||||
2 open response 1 octet (success/failure/warning)
|
||||
1 octet handle type (capability,crypto_cap,asn1int,none)
|
||||
asn1length length
|
||||
length octets file handle
|
||||
optional file name if left out in request, gensymed
|
||||
if oob-xfer, name of file to open
|
||||
error/warning code and text
|
||||
|
||||
|
||||
3 close file handle type and handle. If none, then file opened in
|
||||
same request.
|
||||
|
||||
4 close response
|
||||
success/failure/warning
|
||||
error/warning code and text
|
||||
|
||||
7 read file handle type and handle (if none, as opened in same message)
|
||||
offset
|
||||
asn1length length
|
||||
|
||||
8 read response
|
||||
success/failure/warning
|
||||
asnlength length
|
||||
length octets data to be returned
|
||||
error/warning code and text
|
||||
|
||||
9 write file handle type and handle (if none, as opened in same message)
|
||||
offset
|
||||
asn1length lenght
|
||||
length octets data to be written
|
||||
|
||||
10 write response
|
||||
success/failure/warning
|
||||
error/warning code and text
|
||||
|
||||
35
prospero/doc/working-notes/pfs-udp-ports.txt
Normal file
35
prospero/doc/working-notes/pfs-udp-ports.txt
Normal file
@@ -0,0 +1,35 @@
|
||||
From bcn Tue Jun 1 07:51:35 1993
|
||||
Received: from tgo.isi.edu by venera.isi.edu (5.65c/5.61+local-12)
|
||||
id <AA09948>; Tue, 1 Jun 1993 14:51:40 -0700
|
||||
Date: Tue, 1 Jun 93 14:51:35 PDT
|
||||
Posted-Date: Tue, 1 Jun 93 14:51:35 PDT
|
||||
Message-Id: <9306012151.AA00562@tgo.isi.edu>
|
||||
Received: by tgo.isi.edu (4.1/4.0.3-4)
|
||||
id <AA00562>; Tue, 1 Jun 93 14:51:35 PDT
|
||||
From: Clifford Neuman <bcn>
|
||||
To: PETER@psychnet.psychol.utas.edu.au
|
||||
Cc: C.Warren@deakin.edu.au, bajan@bunyip.com, info-prospero
|
||||
In-Reply-To: Alan Emtage's message of Tue, 1 Jun 1993 17:19:13 -0400 <9306012119.AA17783@mocha.bunyip.com>
|
||||
Subject: About UDP ports that archie uses
|
||||
Status: R
|
||||
|
||||
There are two ports officially assigned to Prospero (and hence archie
|
||||
as well). The official port is 191, and the official non-privileged
|
||||
port is 1525. If a Prospero or archie server is able to bind the
|
||||
privileged port, the server will listen on both ports. If not, it
|
||||
will only listen on the non-privileged port.
|
||||
|
||||
If the server can bind the privileged port, the response will be sent
|
||||
on the privileged port. The default port used to contact a server is
|
||||
presently 1525, which is the most general port since all servers
|
||||
listen on it. It is not uncommon to have a message sent on 1525, but
|
||||
to receive the response from 191. If you are writing your own client,
|
||||
it should not reject a response simply because the server port
|
||||
changed. You may use the connection id in the response to pair the
|
||||
response with the request.
|
||||
|
||||
~ Cliff
|
||||
|
||||
|
||||
|
||||
|
||||
71
prospero/doc/working-notes/wais-link-format.txt
Normal file
71
prospero/doc/working-notes/wais-link-format.txt
Normal file
@@ -0,0 +1,71 @@
|
||||
gWAIS LINK FORMAT
|
||||
|
||||
This document describes Prospero links to files accessible through
|
||||
WAIS; we have not yet determined a format for WAIS directory & index
|
||||
lookups. This format works for both external WAIS links and native
|
||||
WAIS links (that is, links to WAIS files stored on a server running
|
||||
Prospero).
|
||||
|
||||
The WAIS record locator string has a port # and hostname encoded into
|
||||
it. We treat the record locator as an impenetrable object that we
|
||||
just give to the WAIS server at a particular wais server (WAIS servers
|
||||
are uniquely identified by a hostname port # pair); Prospero itself
|
||||
doesn't worry about extracting this information from the WAIS record
|
||||
locator string. The person or computer program creating a link to a
|
||||
WAIS object is responsible for obtaining the WAIS port # and hostname.
|
||||
|
||||
The HOSTNAME on the VLINK is the hostname of the prospero server which
|
||||
stores information about that file. If the server is running on a
|
||||
non-standard port, this hostname will be followed by a port number in
|
||||
parentheses.
|
||||
|
||||
The HSONAME on the VLINK for a file which is usually accessed through
|
||||
WAIS begins with the sequence WAIS/OBJECT/ and then finishes with the
|
||||
WAIS record locator string.
|
||||
|
||||
Not all files which can be retrieved via the WAIS access method will
|
||||
have an HSONAME on the VLINK in this format. This is because the
|
||||
server may send a WAIS access method even for a file that is primarily
|
||||
accessed through NFS, Anonymous FTP, or some other access method. In
|
||||
this case, the ACCESS-METHOD attribute for the file will usually have
|
||||
the six-token format (described below).
|
||||
|
||||
The ACCESS-METHOD attribute for WAIS files consists of 5 [sometimes 6] tokens:
|
||||
|
||||
WAIS INTERNET-D <hostname> ASCII <hsoname>
|
||||
[optional record locator string]
|
||||
|
||||
WAIS, INTERNET-D, and ASCII are literals.
|
||||
|
||||
The <hostname> token in the ACCESS-METHOD attribute is the name of the
|
||||
host whose WAIS server must be contacted to retrieve the object (same
|
||||
as the hostname encoded into the record locator). If the WAIS server
|
||||
is running on the default WAIS port (210), this <hostname> token may be the
|
||||
normal Internet hostname or it may be followed by the port # in
|
||||
parentheses. The <hostname> token must always include the port # in
|
||||
parentheses if the WAIS server is running on a non-default port.
|
||||
|
||||
If a sixth token is present in the WAIS access-method attribute, then
|
||||
this is the WAIS record locator string which will be sent to the WAIS
|
||||
server to retrieve the object. If the sixth token is not present,
|
||||
then the <hsoname> token of the ACCESS-METHOD attribute must begin with
|
||||
the sequence WAIS/OBJECT/ and then finish off with the WAIS record
|
||||
locator string. The WAIS/OBJECT/ prefix will be stripped off and the
|
||||
resulting string will be sent to the WAIS server.
|
||||
|
||||
The most common case for the WAIS access method is on a link whose
|
||||
target is FILE (not EXTERNAL) to an object which can be retrieved from
|
||||
a wais server running on the default WAIS port on the same host as the
|
||||
PROSPERO server which indexes it, and with the PROSPERO server running
|
||||
on the default PROSPERO port. In this case, the HOST and HOSNAME
|
||||
tokens in the ACCESS-METHOD attribute are the same and those for the
|
||||
link. Therefore, using the defaults that apply to all access methods,
|
||||
the ACCESS-METHOD attribute can be sent across the network as:
|
||||
|
||||
WAIS '' '' '' ''
|
||||
|
||||
|
||||
In the case of an EXTERNAL link to a WAIS object, the HOST and HSONAME
|
||||
tokens in the vlink are customarially (although this is not strictly
|
||||
enforced) the same as those for the access method, and the access
|
||||
method is sent across the network using the defaulting mechanism.
|
||||
Reference in New Issue
Block a user