home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume41
/
wwfs
/
part10
< prev
next >
Wrap
Text File
|
1994-01-17
|
93KB
|
4,267 lines
Newsgroups: comp.sources.misc
From: youki-k@is.aist-nara.ac.jp (Youki Kadobayashi)
Subject: v41i095: wwfs - WorldWide File System, Part10/22
Message-ID: <1994Jan17.202204.19804@sparky.sterling.com>
X-Md4-Signature: b6775569d5a05c8626c91e871778d1ec
Sender: kent@sparky.sterling.com (Kent Landfield)
Organization: Nara Institute of Science and Technology, Japan
Date: Mon, 17 Jan 1994 20:22:04 GMT
Approved: kent@sparky.sterling.com
Submitted-by: youki-k@is.aist-nara.ac.jp (Youki Kadobayashi)
Posting-number: Volume 41, Issue 95
Archive-name: wwfs/part10
Environment: UNIX, inet
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# Contents: csd/nfs_start.c doc/beyond.ps.B
# mosaic/Mosaic-2.1+wwfs.diff
# Wrapped by kent@sparky on Sun Jan 16 17:48:33 1994
PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
echo If this archive is complete, you will see the following message:
echo ' "shar: End of archive 10 (of 22)."'
if test -f 'csd/nfs_start.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'csd/nfs_start.c'\"
else
echo shar: Extracting \"'csd/nfs_start.c'\" \(7323 characters\)
sed "s/^X//" >'csd/nfs_start.c' <<'END_OF_FILE'
X/*
X * WorldWide File System
X * Copyright (c) 1992,1993 Youki Kadobayashi
X * Copyright (c) 1992,1993 Osaka University
X * All rights reserved.
X *
X * Permission to use, copy, modify and distribute this software and its
X * documentation is hereby granted, provided that the following conditions
X * are met:
X * 1. Both the copyright notice and this permission notice appear in
X * all copies of the software, derivative works or modified versions,
X * and any portions thereof, and that both notices appear in
X * supporting documentation.
X * 2. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by the Osaka University
X * and its contributors.
X * 3. Neither the name of the University nor the names of its contributors
X * may be used to endorse or promote products derived from this software
X * without specific prior written permission.
X *
X * THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND OSAKA
X * UNIVERSITY DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES
X * WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
X *
X * Osaka University requests users of this software to return to
X *
X * Youki Kadobayashi
X * Department of Information and Computer Sciences
X * Osaka University, Toyonaka 560, Osaka, Japan
X *
X * any improvements or extensions that they make and grant Osaka
X * University the rights to redistribute these changes.
X */
X/* nonblocking NFS and TCP */
Xstatic char *AtFSid = "$Header: nfs_start.c[109.0] Wed Nov 24 03:47:14 1993 youki-k@is.aist-nara.ac.jp saved $";
X
X#include <sys/types.h>
X#include <errno.h>
X#include <setjmp.h>
X#include <signal.h>
X#include "wfs.h"
X#include "util.h"
X#include "global.h"
X
Xextern jmp_buf select_intr;
Xextern void nfs_program_2();
Xextern void cs_program_1();
X
XSVCXPRT *nfsxprt;
XSVCXPRT *csxprt;
Xfd_set read_fdset, write_fdset, except_fdset;
X
X#define MASKED_SIGS \
X (sigmask(SIGINT)|sigmask(SIGTERM)|sigmask(SIGHUP))
X
Xextern qelem so_head;
Xqelem so_head = { &so_head, &so_head };
X
Xchar *sobuf[WF_MAX_SO];
X
Xtypedef struct soq {
X qelem q;
X int so;
X func funcp;
X void *p;
X} soq;
X
Xsoq soq_ary[WF_MAX_SO];
X
Xvoid
Xso_register(so, flag)
Xint so;
Xint flag;
X{
X if (flag & WF_SO_READ)
X FD_SET(so, &read_fdset);
X if (flag & WF_SO_WRITE)
X FD_SET(so, &write_fdset);
X if (flag & WF_SO_EXCEPT)
X FD_SET(so, &except_fdset);
X}
X
Xvoid
Xso_unregister(so, flag)
Xint so;
Xint flag;
X{
X if (flag & WF_SO_READ)
X FD_CLR(so, &read_fdset);
X if (flag & WF_SO_WRITE)
X FD_CLR(so, &write_fdset);
X if (flag & WF_SO_EXCEPT)
X FD_CLR(so, &except_fdset);
X}
X
Xvoid
Xfd_union(destfdp, srcfdp)
Xfd_set *destfdp, *srcfdp;
X{
X int i;
X for (i = 0; i < (sizeof(fd_set) / sizeof(fd_mask)); ++i) {
X destfdp->fds_bits[i] |= srcfdp->fds_bits[i];
X }
X}
X
Xvoid
Xso_callback(so, funcp, p)
Xint so;
Xfunc funcp;
Xvoid *p;
X{
X soq *sop = &soq_ary[so];
X#ifndef PERFECTLY_CORRECT
X if (soq_ary[so].so) {
X dlog("so_callback: not cleared");
X return;
X }
X#endif
X sop->so = so;
X sop->funcp = funcp;
X sop->p = p;
X q_insert(&sop->q, LAST(soq, &so_head));
X}
X
Xvoid
Xso_clear(so)
Xint so;
X{
X soq *sop = &soq_ary[so];
X#ifndef PERFECTLY_CORRECT
X if (soq_ary[so].so == 0) {
X dlog("so_clear: already cleared");
X return;
X }
X#endif
X soq_ary[so].so = 0;
X q_remove(&sop->q);
X}
X
Xchar *
Xso_getbuf(so)
Xint so;
X{
X if (! sobuf[so]) {
X sobuf[so] = (char *) malloc(NFS_MAXDATA+1);
X }
X return sobuf[so];
X}
X
Xstatic int
Xdo_select(smask, fds, readfdp, writefdp, exceptfdp, tvp)
Xint smask, fds;
Xfd_set *readfdp, *writefdp, *exceptfdp;
Xstruct timeval *tvp;
X{
X int sig;
X int nsel;
X if (sig = setjmp(select_intr)) {
X select_intr_valid = 0;
X /* Got a signal */
X switch (sig) {
X case SIGINT:
X case SIGTERM:
X if (cs_state != Finishing) {
X cs_state = Finishing;
X /* attempt to terminate other threads */
X csd_stop();
X }
X break;
X }
X nsel = -1;
X errno = EINTR;
X } else {
X select_intr_valid = 1;
X /*
X * Invalidate the current clock value
X */
X now = 0;
X /*
X * Allow interrupts.
X * If a signal occurs, then it will cause longjump up above.
X */
X (void) sigsetmask(smask);
X /*
X * Wait for input
X */
X nsel = select(fds, readfdp, writefdp, exceptfdp,
X tvp->tv_sec ? tvp : (struct timeval *) 0);
X }
X (void) sigblock(MASKED_SIGS); /* Disallow interrupts */
X return nsel;
X}
X
Xserv_state
Xcsd_run()
X{
X fd_set readfds, writefds, exceptfds;
X struct timeval tvv;
X int nsel;
X int smask = sigblock(MASKED_SIGS);
X
X next_softclock = gettime();
X cs_state = Run;
X
X while ((int)cs_state <= (int)Finishing) {
X /*
X * notify tasks
X */
X if (task_notify_todo)
X do_task_notify();
X
X /*
X * compute timeout tvv
X */
X realtime();
X if (next_softclock <= now) {
X if (cs_state == Finishing) {
X /* XXX */;
X }
X tvv.tv_sec = softclock();
X } else {
X tvv.tv_sec = next_softclock - now;
X }
X tvv.tv_usec = 0;
X
X /*
X * set fd masks
X */
X bzero(&readfds, sizeof(readfds));
X#ifdef RPC_4
X bcopy(&svc_fdset, &readfds, sizeof(svc_fdset));
X#else
X bcopy(&svc_fds, &readfds, sizeof(svc_fds));
X#endif
X fd_union(&readfds, &read_fdset);
X bcopy(&write_fdset, &writefds, sizeof(writefds));
X bcopy(&except_fdset, &exceptfds, sizeof(exceptfds));
X
X /*
X * Wait for events to occur
X */
X nsel = do_select(smask, WF_MAX_SO /* XXX */,
X &readfds, &writefds, &exceptfds, &tvv);
X switch (nsel) {
X case -1:
X /*
X * select was interrupted
X */
X if (errno != EINTR) {
X dlog("select: errno = %d", errno);
X#if 0
X dump_fdset("select readfds", &readfds);
X dump_fdset("select writefds", &writefds);
X#endif
X }
X break;
X case 0:
X /*
X * select timeout
X */
X /* nothing */;
X break;
X default:
X if ((int)cs_state < (int)Finishing) {
X /*
X * process queued socket jobs
X */
X soq *sop, *sop2;
X ITER2(sop, sop2, soq, &so_head) {
X if (FD_ISSET(sop->so, &readfds)
X || FD_ISSET(sop->so, &writefds)
X || FD_ISSET(sop->so, &exceptfds)) {
X FD_CLR(sop->so, &readfds);
X (*sop->funcp)(sop->p);
X --nsel;
X }
X }
X }
X /*
X * process RPC jobs
X */
X if (nsel) {
X#ifdef RPC_4
X svc_getreqset(&readfds);
X#else
X svc_getreq(readfds.fds_bits[0]);
X#endif /* RPC_4 */
X }
X break;
X }
X if (cs_state == Finishing && conn_count() == 0) {
X cs_state = Quit;
X break;
X }
X }
X (void) sigsetmask(smask);
X
X if (cs_state == Quit)
X cs_state = Done;
X return cs_state;
X}
X
Xint
Xcsd_rpc()
X{
X int so;
X int ret;
X unsigned short port;
X
X /*
X * create socket
X */
X so = socket(AF_INET, SOCK_DGRAM, 0);
X if (so < 0) {
X perror("Can't create socket");
X return 1;
X }
X
X /*
X * bind NFS port
X */
X ret = bind_resv_port(so, &port);
X cs_nfsport = port;
X if (ret) {
X syslog(LOG_CRIT, "couldn't bind reserved port");
X return 1;
X }
X
X /*
X * create RPC stub
X */
X nfsxprt = svcudp_create(so);
X csxprt = svcudp_create(so);
X if (nfsxprt == NULL || csxprt == NULL) {
X syslog(LOG_CRIT, "cannot create rpc/udp service");
X return 2;
X }
X
X /*
X * register NFS port
X */
X if (! svc_register(nfsxprt, NFS_PROGRAM, NFS_VERSION,
X nfs_program_2, 0)) {
X syslog(LOG_CRIT, "unable to register NFS_PROGRAM");
X return 3;
X }
X
X /*
X * register CS port
X */
X pmap_unset(CS_PROGRAM, CS_VERSION);
X if (! svc_register(csxprt, CS_PROGRAM, CS_VERSION,
X cs_program_1, IPPROTO_UDP)) {
X syslog(LOG_CRIT, "unable to register CS_PROGRAM");
X return 3;
X }
X
X return 0;
X}
X
END_OF_FILE
if test 7323 -ne `wc -c <'csd/nfs_start.c'`; then
echo shar: \"'csd/nfs_start.c'\" unpacked with wrong size!
fi
# end of 'csd/nfs_start.c'
fi
if test -f 'doc/beyond.ps.B' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'doc/beyond.ps.B'\"
else
echo shar: Extracting \"'doc/beyond.ps.B'\" \(46189 characters\)
sed "s/^X//" >'doc/beyond.ps.B' <<'END_OF_FILE'
X10 r (can)s
X100 1860 p (be)s
X14 r (delegated)s
X14 r (to)s
X15 r (the)s
X14 r (operating)s
X14 r (system)s
X14 r (or)s
X14 r (a)s
X15 r (client)s
X14 r (library)s
X-3 r (.)s
X19 r (However)s
X-2 r (,)s
X14 r (it)s
X14 r (is)s
X14 r (impractical)s
X14 r (to)s
X15 r (combine)s
X14 r (a)s
X14 r (\256lesystem)s
X100 1927 p (and)s
X14 r (the)s
X14 r (underlying)s
X14 r (system)s
X14 r (if)s
X14 r (great)s
X13 r (dissimilarity)s
X14 r (is)s
X14 r (present)s
X14 r (between)s
X14 r (the)s
X14 r (two.)s
X19 r (Disguising)s
X13 r (resource)s
X14 r (discovery)s
X100 1993 p (systems)s
X17 r (or)s
X16 r (database)s
X17 r (systems)s
X17 r (as)s
X16 r (an)s
X17 r (NFS)s
X17 r (server)s
X16 r (would)s
X17 r (be)s
X17 r (impractical)s
X16 r (since)s
X17 r (these)s
X17 r (systems)s
X16 r (are)s
X17 r (far)s
X17 r (different)s
X100 2060 p (from)s
X11 r (NFS,)s
X10 r (while)s
X11 r (combination)s
X10 r (of)s
X11 r (NFS)s
X10 r (and)s
X11 r (FTP)s
X10 r (was)s
X11 r (possible)s
X10 r (since)s
X11 r (the)s
X10 r (only)s
X11 r (difference)s
X9 r (was)s
X11 r (the)s
X10 r (possible)s
X11 r (delay)s
X100 2126 p (in)s
X13 r (the)s
Xf84 SF
X14 r (open)s
Xf80 SF
X13 r (system)s
X14 r (call.)s
X18 r (It)s
X13 r (is)s
X14 r (possible)s
X13 r (to)s
X14 r (interpret)s
X13 r (pathname)s
X13 r (as)s
X14 r (a)s
X13 r (query)s
X14 r (expression,)s
X13 r (as)s
X14 r (David)s
X13 r (K.)s
X13 r (Gifford)s
X13 r (et.)s
X100 2192 p (al.)s
X11 r (did)s
X11 r (with)s
X10 r (SFS[5],)s
X12 r (but)s
X11 r (it)s
X10 r (is)s
X11 r (questionable)s
X11 r (that)s
X11 r (such)s
X11 r (an)s
X10 r (interface)s
X11 r (can)s
X11 r (convey)s
X11 r (the)s
X10 r (real)s
X11 r (intent)s
X11 r (of)s
X11 r (server)s
X11 r (response.)s
Xf99 SF
X100 2379 p (5)s
X80 r (T)s
X-7 r (oward)s
X19 r (seamless)s
X20 r (integration)s
Xf80 SF
X100 2502 p (Based)s
X12 r (on)s
X13 r (the)s
X12 r (experience)s
X12 r (described)s
X12 r (in)s
X13 r (the)s
X12 r (previous)s
X12 r (section,)s
X13 r (WWFS)s
X12 r (Research)s
X12 r (Group)s
X12 r (has)s
X13 r (been)s
X12 r (enhancing)s
X12 r (the)s
X100 2569 p (functionality)s
X13 r (of)s
X12 r (WWFS)s
X13 r (to)s
X12 r (realize)s
X13 r (a)s
X12 r (seamlessly)s
X13 r (integrated)s
X12 r (information)s
X13 r (sharing)s
X12 r (system.)s
X18 r (The)s
X13 r (author)s
X12 r (has)s
X13 r (been)s
X100 2635 p (attempting)s
X13 r (to)s
X13 r (provide)s
X13 r (such)s
X13 r (a)s
X13 r (system)s
X13 r (by)s
X13 r (amplifying)s
X13 r (the)s
X13 r (notion)s
X13 r (of)s
X13 r (volume)s
X13 r (and)s
X13 r (by)s
X13 r (extending)s
X13 r (the)s
X13 r (protocol)s
X13 r (set.)s
Xf95 SF
X100 2793 p (5.1)s
X66 r (Integration)s
X17 r (by)s
X17 r (volumes)s
Xf80 SF
X100 2897 p (As)s
X18 r (discussed)s
X19 r (in)s
X18 r (Section)s
X18 r (2)s
X19 r (and)s
X18 r (3,)s
X20 r (it)s
X18 r (is)s
X18 r (desirable)s
X19 r (to)s
X18 r (blend)s
X18 r (advantageous)s
X19 r (characteristics)s
X18 r (of)s
X18 r (\256lesystems)s
X19 r (and)s
X100 2963 p (database)s
X14 r (systems)s
X14 r (so)s
X14 r (that)s
X13 r (users)s
X14 r (can)s
X14 r (easily)s
X14 r (navigate)s
X14 r (through)s
X14 r (vast)s
X13 r (web)s
X14 r (of)s
X14 r (information.)s
X183 3030 p (I)s
X9 r (have)s
X9 r (undertaken)s
X10 r (some)s
X9 r (efforts)s
X8 r (to)s
X9 r (improve)s
X10 r (the)s
X9 r (current)s
X9 r (annoying)s
X9 r (situation)s
X10 r (by)s
X9 r (introducing)s
X9 r (\252auto-mounting\272)s
X100 3096 p (feature)s
X15 r (and)s
X15 r (the)s
X15 r (notion)s
X15 r (of)s
X15 r (volume,)s
X15 r (but)s
X15 r (it)s
X15 r (currently)s
X15 r (do)s
X14 r (not)s
X15 r (show)s
X15 r (substantial)s
X15 r (improvements)s
X15 r (over)s
X15 r (hierarchical)s
X100 3163 p (naming)s
X14 r (scheme,)s
X14 r (primarily)s
X14 r (because)s
X13 r (there)s
X14 r (is)s
X14 r (no)s
X14 r (support)s
X14 r (for)s
X14 r (volume)s
X13 r (in)s
X14 r (the)s
X14 r (Internet)s
X14 r (ftp)s
X14 r (archives.)s
X183 3229 p (Suppose)s
X12 r (the)s
X11 r (notion)s
X12 r (of)s
X11 r (volume)s
X12 r (was)s
X11 r (rejected)s
X12 r (by)s
X11 r (an)s
X12 r (authoritative)s
X11 r (body)s
X-3 r (,)s
X11 r (what)s
X12 r (shall)s
X11 r (be)s
X12 r (adopted)s
X11 r (instead?)s
X18 r (For)s
X100 3295 p (the)s
X17 r (three)s
X17 r (players)s
X17 r (in)s
X17 r (the)s
X17 r (ISS)s
X17 r (to)s
X17 r (interoperate,)s
X17 r (some)s
X17 r (kind)s
X17 r (of)s
X17 r (information)s
X17 r (must)s
X17 r (be)s
X17 r (exchanged)s
X17 r (between)s
X17 r (them.)s
X100 3362 p (Granularity)s
X12 r (and)s
X13 r (scalability)s
X12 r (dominates)s
X12 r (the)s
X13 r (choice)s
X12 r (here.)s
X18 r (The)s
X12 r (unit)s
X12 r (of)s
X13 r (information)s
X12 r (exchange)s
X12 r (can)s
X13 r (be)s
X12 r (a)s
X12 r (\256le)s
X13 r (and)s
X12 r (it)s
X100 3428 p (is)s
X12 r (the)s
X13 r (most)s
X12 r (\257exible)s
X12 r (choice)s
X13 r (indeed,)s
X12 r (but)s
X12 r (how)s
X13 r (ef\256ciently)s
X11 r (\256les)s
X12 r (can)s
X13 r (be)s
X12 r (shared)s
X12 r (totally)s
X13 r (independently)s
X12 r (in)s
X12 r (the)s
X13 r (whole)s
X100 3495 p (Internet?)s
X19 r (The)s
X14 r (unit)s
X15 r (can)s
X14 r (be)s
X14 r (a)s
X14 r (directory)s
X-3 r (,)s
X14 r (but)s
X14 r (how)s
X14 r (can)s
X14 r (we)s
X14 r (give)s
X14 r (each)s
X14 r (of)s
X15 r (them)s
X14 r (an)s
X14 r (unique)s
X14 r (name?)s
X19 r (Admittedly)s
X-2 r (,)s
X13 r (the)s
X100 3561 p (concept)s
X12 r (of)s
X12 r (volume)s
X12 r (is)s
X12 r (obscure)s
X12 r (in)s
X12 r (that)s
X12 r (it)s
X13 r (does)s
X12 r (not)s
X12 r (de\256ne)s
X12 r (any)s
X12 r (mechanically)s
X12 r (identi\256ed)s
X12 r (boundary)s
X12 r (\(Figure)s
X12 r (5\),)s
X13 r (but)s
X100 3627 p (how)s
X13 r (clear)s
X14 r (is)s
X13 r (the)s
X14 r (boundary)s
X13 r (of)s
X13 r (\252software)s
X14 r (distribution\272?)s
X18 r (After)s
X13 r (all,)s
X14 r (the)s
X13 r (boundary)s
X14 r (of)s
X13 r (shared)s
X13 r (information)s
X14 r (cannot)s
X100 3694 p (be)s
X14 r (mechanically)s
X14 r (de\256ned.)s
X1261 3946 p (5)s
XEP
X
X%%Page: 6 6
XBP
X1042 260 p 1.000 @beginspecial
X@epsf
X0.800000 @vscale
X0.800000 @hscale
X204.000000 545.000000 309.000000 666.000000 @bbox
X@setspecial
X%%BeginDocument: vol_bound.eps
X%!PS-Adobe-2.0 EPSF-1.2
X%%DocumentFonts: Helvetica
X%%BoundingBox: 204 545 309 666
X%%EndComments
X
X50 dict begin
X
X/arrowHeight 8 def
X/arrowWidth 4 def
X/none null def
X/numGraphicParameters 17 def
X/stringLimit 65535 def
X
X/Begin {
Xsave
XnumGraphicParameters dict begin
X} def
X
X/End {
Xend
Xrestore
X} def
X
X/SetB {
Xdup type /nulltype eq {
Xpop
Xfalse /brushRightArrow idef
Xfalse /brushLeftArrow idef
Xtrue /brushNone idef
X} {
X/brushDashOffset idef
X/brushDashArray idef
X0 ne /brushRightArrow idef
X0 ne /brushLeftArrow idef
X/brushWidth idef
Xfalse /brushNone idef
X} ifelse
X} def
X
X/SetCFg {
X/fgblue idef
X/fggreen idef
X/fgred idef
X} def
X
X/SetCBg {
X/bgblue idef
X/bggreen idef
X/bgred idef
X} def
X
X/SetF {
X/printSize idef
X/printFont idef
X} def
X
X/SetP {
Xdup type /nulltype eq {
Xpop true /patternNone idef
X} {
X/patternGrayLevel idef
XpatternGrayLevel -1 eq {
X/patternString idef
X} if
Xfalse /patternNone idef
X} ifelse
X} def
X
X/BSpl {
X0 begin
Xstorexyn
Xnewpath
Xn 1 gt {
X0 0 0 0 0 0 1 1 true subspline
Xn 2 gt {
X0 0 0 0 1 1 2 2 false subspline
X1 1 n 3 sub {
X/i exch def
Xi 1 sub dup i dup i 1 add dup i 2 add dup false subspline
X} for
Xn 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
X} if
Xn 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
XpatternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
XbrushNone not { istroke } if
X0 0 1 1 leftarrow
Xn 2 sub dup n 1 sub dup rightarrow
X} if
Xend
X} dup 0 4 dict put def
X
X/Circ {
Xnewpath
X0 360 arc
XpatternNone not { ifill } if
XbrushNone not { istroke } if
X} def
X
X/CBSpl {
X0 begin
Xdup 2 gt {
Xstorexyn
Xnewpath
Xn 1 sub dup 0 0 1 1 2 2 true subspline
X1 1 n 3 sub {
X/i exch def
Xi 1 sub dup i dup i 1 add dup i 2 add dup false subspline
X} for
Xn 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
Xn 2 sub dup n 1 sub dup 0 0 1 1 false subspline
XpatternNone not { ifill } if
XbrushNone not { istroke } if
X} {
XPoly
X} ifelse
Xend
X} dup 0 4 dict put def
X
X
X/RRect { CBSpl } def
X
X/Elli {
X0 begin
Xnewpath
X4 2 roll
Xtranslate
Xscale
X0 0 1 0 360 arc
XpatternNone not { ifill } if
XbrushNone not { istroke } if
Xend
X} dup 0 1 dict put def
X
X/Line {
X0 begin
X2 storexyn
Xnewpath
Xx 0 get y 0 get moveto
Xx 1 get y 1 get lineto
XbrushNone not { istroke } if
X0 0 1 1 leftarrow
X0 0 1 1 rightarrow
Xend
X} dup 0 4 dict put def
X
X/MLine {
X0 begin
Xstorexyn
Xnewpath
Xn 1 gt {
Xx 0 get y 0 get moveto
X1 1 n 1 sub {
X/i exch def
Xx i get y i get lineto
X} for
XpatternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
XbrushNone not { istroke } if
X0 0 1 1 leftarrow
Xn 2 sub dup n 1 sub dup rightarrow
X} if
Xend
X} dup 0 4 dict put def
X
X/Poly {
X3 1 roll
Xnewpath
Xmoveto
X-1 add
X{ lineto } repeat
Xclosepath
XpatternNone not { ifill } if
XbrushNone not { istroke } if
X} def
X
X/Rect {
X0 begin
X/t exch def
X/r exch def
X/b exch def
X/l exch def
Xnewpath
Xl b moveto
Xl t lineto
Xr t lineto
Xr b lineto
Xclosepath
XpatternNone not { ifill } if
XbrushNone not { istroke } if
Xend
X} dup 0 4 dict put def
X
X/WhiteBg 1 def
X/HollowBg 0 def
X/Text { ishow } def
X
X/idef {
Xdup where { pop pop pop } { exch def } ifelse
X} def
X
X/ifill {
X0 begin
Xgsave
XpatternGrayLevel -1 ne {
Xfgred bgred fgred sub patternGrayLevel mul add
Xfggreen bggreen fggreen sub patternGrayLevel mul add
Xfgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
Xeofill
X} {
Xeoclip
XoriginalCTM setmatrix
Xpathbbox /t exch def /r exch def /b exch def /l exch def
X/w r l sub ceiling cvi def
X/h t b sub ceiling cvi def
X/imageByteWidth w 8 div ceiling cvi def
X/imageHeight h def
Xbgred bggreen bgblue setrgbcolor
Xeofill
Xfgred fggreen fgblue setrgbcolor
Xw 0 gt h 0 gt and {
Xl b translate w h scale
Xw h true [w 0 0 h neg 0 h] { patternproc } imagemask
X} if
X} ifelse
Xgrestore
Xend
X} dup 0 8 dict put def
X
X/istroke {
Xgsave
XbrushDashOffset -1 eq {
X[] 0 setdash
X1 setgray
X} {
XbrushDashArray brushDashOffset setdash
Xfgred fggreen fgblue setrgbcolor
X} ifelse
XbrushWidth setlinewidth
XoriginalCTM setmatrix
Xstroke
Xgrestore
X} def
X
X/xdescender {
Xbegin 0
XFontType 0 eq
X{ FDepVector dup length 1 sub get xdescender }
X{ [FontBBox] 1 get } ifelse
XFontMatrix transform exch pop end
X} def
X/ishow {
X0 begin
Xgsave
Xfgred fggreen fgblue setrgbcolor
XWhiteBg eq /drawBg exch def
X/fontDict printFont findfont printSize scalefont dup setfont def
X/descender fontDict xdescender def
X/vertoffset 0 descender sub printSize sub printFont /Courier ne
XprintFont /Courier-Bold ne and { 1 add } if def {
XdrawBg {
Xnewpath 0 vertoffset descender add moveto
Xdup stringwidth pop dup 0 rlineto
X0 printSize rlineto 0 exch sub 0 rlineto
Xclosepath currentgray 1 setgray fill setgray } if
X0 vertoffset moveto show
X/vertoffset vertoffset printSize sub def
X} forall
Xgrestore
Xend
X} dup 0 4 dict put def
X
X/patternproc {
X0 begin
X/patternByteLength patternString length def
X/patternHeight patternByteLength 8 mul sqrt cvi def
X/patternWidth patternHeight def
X/patternByteWidth patternWidth 8 idiv def
X/imageByteMaxLength imageByteWidth imageHeight mul
XstringLimit patternByteWidth sub min def
X/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
XpatternHeight mul patternHeight max def
X/imageHeight imageHeight imageMaxHeight sub store
X/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
X0 1 imageMaxHeight 1 sub {
X/y exch def
X/patternRow y patternByteWidth mul patternByteLength mod def
X/patternRowString patternString patternRow patternByteWidth getinterval def
X/imageRow y imageByteWidth mul def
X0 patternByteWidth imageByteWidth 1 sub {
X/x exch def
XimageString imageRow x add patternRowString putinterval
X} for
X} for
XimageString
Xend
X} dup 0 12 dict put def
X
X/min {
Xdup 3 2 roll dup 4 3 roll lt { exch } if pop
X} def
X
X/max {
Xdup 3 2 roll dup 4 3 roll gt { exch } if pop
X} def
X
X/arrowhead {
X0 begin
Xtransform originalCTM itransform
X/taily exch def
X/tailx exch def
Xtransform originalCTM itransform
X/tipy exch def
X/tipx exch def
X/dy tipy taily sub def
X/dx tipx tailx sub def
X/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
Xgsave
XoriginalCTM setmatrix
Xtipx tipy translate
Xangle rotate
Xnewpath
X0 0 moveto
XarrowHeight neg arrowWidth 2 div lineto
XarrowHeight neg arrowWidth 2 div neg lineto
Xclosepath
XpatternNone not {
XoriginalCTM setmatrix
X/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
XarrowWidth div def
X/padtail brushWidth 2 div def
Xtipx tipy translate
Xangle rotate
Xpadtip 0 translate
XarrowHeight padtip add padtail add arrowHeight div dup scale
Xarrowheadpath
Xifill
X} if
XbrushNone not {
XoriginalCTM setmatrix
Xtipx tipy translate
Xangle rotate
Xarrowheadpath
Xistroke
X} if
Xgrestore
Xend
X} dup 0 9 dict put def
X
X/arrowheadpath {
Xnewpath
X0 0 moveto
XarrowHeight neg arrowWidth 2 div lineto
XarrowHeight neg arrowWidth 2 div neg lineto
Xclosepath
X} def
X
X/leftarrow {
X0 begin
Xy exch get /taily exch def
Xx exch get /tailx exch def
Xy exch get /tipy exch def
Xx exch get /tipx exch def
XbrushLeftArrow { tipx tipy tailx taily arrowhead } if
Xend
X} dup 0 4 dict put def
X
X/rightarrow {
X0 begin
Xy exch get /tipy exch def
Xx exch get /tipx exch def
Xy exch get /taily exch def
Xx exch get /tailx exch def
XbrushRightArrow { tipx tipy tailx taily arrowhead } if
Xend
X} dup 0 4 dict put def
X
X/midpoint {
X0 begin
X/y1 exch def
X/x1 exch def
X/y0 exch def
X/x0 exch def
Xx0 x1 add 2 div
Xy0 y1 add 2 div
Xend
X} dup 0 4 dict put def
X
X/thirdpoint {
X0 begin
X/y1 exch def
X/x1 exch def
X/y0 exch def
X/x0 exch def
Xx0 2 mul x1 add 3 div
Xy0 2 mul y1 add 3 div
Xend
X} dup 0 4 dict put def
X
X/subspline {
X0 begin
X/movetoNeeded exch def
Xy exch get /y3 exch def
Xx exch get /x3 exch def
Xy exch get /y2 exch def
Xx exch get /x2 exch def
Xy exch get /y1 exch def
Xx exch get /x1 exch def
Xy exch get /y0 exch def
Xx exch get /x0 exch def
Xx1 y1 x2 y2 thirdpoint
X/p1y exch def
X/p1x exch def
Xx2 y2 x1 y1 thirdpoint
X/p2y exch def
X/p2x exch def
Xx1 y1 x0 y0 thirdpoint
Xp1x p1y midpoint
X/p0y exch def
X/p0x exch def
Xx2 y2 x3 y3 thirdpoint
Xp2x p2y midpoint
X/p3y exch def
X/p3x exch def
XmovetoNeeded { p0x p0y moveto } if
Xp1x p1y p2x p2y p3x p3y curveto
Xend
X} dup 0 17 dict put def
X
X/storexyn {
X/n exch def
X/y n array def
X/x n array def
Xn 1 sub -1 0 {
X/i exch def
Xy i 3 2 roll put
Xx i 3 2 roll put
X} for
X} def
X
X%%EndProlog
X
X%I Idraw 9 Grid 8
X
X
XBegin
X%I b u
X%I cfg u
X%I cbg u
X%I f u
X%I k u
X%I p u
X%I t
X[ .8 0 0 .8 0 0 ] concat
X/originalCTM matrix currentmatrix def
X
XBegin %I CBSpl
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X1 SetP
X%I t
X[ 1 0 0 1 102 188 ] concat
X%I 6
X224 643
X282 513
X274 506
X163 506
X156 514
X209 643
X6 CBSpl
XEnd
X
XBegin %I Elli
X%I b 13107
X2 0 0 [2 2 2 2 2 2 2 2] 15 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
Xnone SetP %I p n
X%I t
X[ 1 0 0 1 102 188 ] concat
X%I
X242 519 22 22 Elli
XEnd
X
XBegin %I Elli
X%I b 13107
X2 0 0 [2 2 2 2 2 2 2 2] 15 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
Xnone SetP %I p n
X%I t
X[ 1 0 0 1 47 187 ] concat
X%I
X242 519 22 22 Elli
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 301 759 ] concat
X%I
X[
X(usr.bin)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 276 712 ] concat
X%I
X[
X(make)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 333 711 ] concat
X%I
X[
X(rdist)
X] WhiteBg Text
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ 1 0 0 1 102 188 ] concat
X%I
X218 555 235 530 Line
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ 1 0 0 1 102 188 ] concat
X%I
X208 556 194 529 Line
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 303 798 ] concat
X%I
X[
X(tahoe)
X] WhiteBg Text
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ 1 0 0 1 98 187 ] concat
X%I
X218 597 218 576 Line
XEnd
X
XEnd %I eop
X
Xshowpage
X
X
Xend
X%%EndDocument
X@endspecial
Xf80 SF
X100 975 p (Figure)s
X19 r (5:)s
Xf82 SF
X28 r (The)s
X19 r (boundary)s
X19 r (of)s
X19 r (volume)s
X19 r (cannot)s
X18 r (be)s
X19 r (de\256ned)s
X19 r (mechanically)s
X-1 r (.)s
Xf80 SF
X32 r (In)s
X19 r (this)s
X19 r (example,)s
X20 r (volume)s
X19 r (\252tahoe\272)s
X100 1041 p (contains)s
X14 r (subdirectories)s
X14 r (\252make\272)s
X14 r (and)s
X13 r (\252rdist\272,)s
X14 r (which)s
X14 r (in)s
X14 r (turn)s
X14 r (can)s
X14 r (be)s
X13 r (de\256ned)s
X14 r (as)s
X14 r (new)s
X14 r (volumes.)s
X183 1215 p (Based)s
X17 r (on)s
X18 r (these)s
X17 r (considerations,)s
X18 r (volume)s
X18 r (will)s
X17 r (become)s
X17 r (the)s
X17 r (common)s
X18 r (vocabulary)s
X17 r (exchanged)s
X17 r (between)s
X18 r (the)s
X100 1282 p (resource)s
X17 r (location,)s
X17 r (access,)s
X18 r (and)s
X17 r (reorganization)s
X16 r (systems)s
X17 r (in)s
X17 r (the)s
X16 r (WWFS)s
X17 r (framework.)s
X28 r (The)s
X17 r (bene\256t)s
X16 r (of)s
X17 r (adopting)s
X100 1348 p (volume)s
X14 r (for)s
X14 r (resource)s
X14 r (location)s
X13 r (and)s
X14 r (access)s
X14 r (interface)s
X14 r (has)s
X14 r (been)s
X14 r (discussed)s
X13 r (in)s
X14 r (my)s
X14 r (previous)s
X14 r (paper[3].)s
X183 1415 p (V)s
X-6 r (olume)s
X9 r (can)s
X10 r (bene\256t)s
X11 r (\256lesystem)s
X10 r (and)s
X10 r (resource)s
X11 r (reorganization)s
X9 r (system)s
X10 r (as)s
X11 r (well.)s
X17 r (It)s
X10 r (would)s
X10 r (be)s
X11 r (feasible)s
X10 r (to)s
X10 r (collect)s
X100 1481 p (and)s
X13 r (summarize)s
X14 r (feedbacks)s
X13 r (for)s
X13 r (each)s
X13 r (volume,)s
X14 r (while)s
X13 r (collecting)s
X13 r (feedbacks)s
X14 r (for)s
X13 r (every)s
X13 r (\256le)s
X13 r (would)s
X14 r (be)s
X13 r (impractical,)s
X100 1547 p (since)s
X14 r (it)s
X14 r (is)s
X14 r (dif\256cult)s
X12 r (to)s
X14 r (generate)s
X14 r (meaningful)s
X14 r (report)s
X14 r (from)s
X14 r (meaningless)s
X13 r (collection)s
X14 r (of)s
X14 r (feedbacks.)s
X183 1614 p (The)s
X12 r (resulting)s
X11 r (statistics)s
X12 r (report)s
X11 r (can)s
X12 r (be)s
X11 r (e-mailed)s
X12 r (to)s
X11 r (the)s
X12 r (responsible)s
X11 r (archive)s
X12 r (administrator)s
X11 r (so)s
X12 r (that)s
X11 r (comments)s
X100 1680 p (from)s
X17 r (archive)s
X16 r (users)s
X17 r (can)s
X16 r (be)s
X17 r (re\257ected,)s
X17 r (different)s
X16 r (archiving)s
X17 r (scheme)s
X16 r (can)s
X17 r (be)s
X17 r (compared)s
X16 r (from)s
X17 r (objective)s
X16 r (point)s
X17 r (of)s
X100 1747 p (view)s
X-3 r (,)s
X13 r (and)s
X14 r (ultimately)s
X-3 r (,)s
X13 r (the)s
X14 r (quality)s
X14 r (of)s
X14 r (electronic)s
X14 r (archives)s
X13 r (can)s
X14 r (be)s
X14 r (improved)s
X14 r (easily)s
X-3 r (.)s
X183 1813 p (Implementation)s
X11 r (of)s
X11 r (\252forti\256ed\272)s
X11 r (volume,)s
X11 r (as)s
X11 r (exhibited)s
X11 r (in)s
X11 r (Figures)s
X10 r (3)s
X11 r (and)s
X11 r (4,)s
X12 r (would)s
X10 r (make)s
X11 r (mirroring)s
X11 r (even)s
X11 r (more)s
X100 1880 p (practical)s
X14 r (way)s
X14 r (to)s
X14 r (facilitate)s
X14 r (archive)s
X14 r (administration,)s
X14 r (since)s
X13 r (it)s
X14 r (provides)s
X14 r (ability)s
X14 r (to)s
X14 r (manipulate)s
X14 r (namespaces)s
X14 r (while)s
X100 1946 p (automating)s
X11 r (the)s
X12 r (management)s
X11 r (of)s
X12 r (replicated)s
X11 r (information.)s
X18 r (In)s
X11 r (other)s
X12 r (words,)s
X12 r (the)s
X11 r (forti\256ed)s
X12 r (volume)s
X11 r (will)s
X12 r (enable)s
X11 r (sep-)s
X100 2012 p (aration)s
X13 r (of)s
X13 r (storage)s
X14 r (space)s
X13 r (replication)s
X13 r (and)s
X13 r (namespace)s
X14 r (replication.)s
X18 r (V)s
X-5 r (arious)s
X12 r (experiments)s
X13 r (with)s
X13 r (different)s
X13 r (naming)s
X100 2079 p (schemes)s
X14 r (can)s
X14 r (be)s
X14 r (evaluated)s
X13 r (with)s
X14 r (fairness,)s
X14 r (thanks)s
X14 r (to)s
X14 r (the)s
X14 r (statistics)s
X13 r (reports.)s
Xf95 SF
X100 2237 p (5.2)s
X66 r (Integration)s
X17 r (by)s
X17 r (pr)s
X-1 r (otocols)s
Xf80 SF
X100 2340 p (The)s
X19 r (new)s
X19 r (concepts)s
X18 r (introduced)s
X19 r (in)s
X19 r (the)s
X19 r (WWFS,)s
X19 r (such)s
X19 r (as)s
X18 r (access)s
X19 r (policy)s
X-2 r (,)s
X19 r (volume,)s
X20 r (and)s
X18 r (management)s
X19 r (of)s
X19 r (cache,)s
X100 2407 p (necessitates)s
X14 r (design)s
X14 r (and)s
X14 r (implementation)s
X13 r (of)s
X14 r (a)s
X14 r (new)s
X14 r (protocol)s
X14 r (that)s
X14 r (supports)s
X13 r (operations)s
X14 r (for)s
X14 r (these)s
X14 r (objects.)s
X183 2473 p (Also,)s
X14 r (a)s
X13 r (new)s
X14 r (protocol)s
X14 r (was)s
X13 r (necessary)s
X14 r (that)s
X13 r (can)s
X14 r (\256ll)s
X14 r (semantic)s
X13 r (gap)s
X14 r (between)s
X14 r (NFS)s
X13 r (and)s
X14 r (FTP)s
X-5 r (,)s
X12 r (which)s
X14 r (enable)s
X14 r (CS)s
X100 2540 p (to)s
X14 r (mimic)s
X14 r (the)s
X14 r (normal)s
X13 r (behavior)s
X14 r (of)s
Xf84 SF
X14 r (open)s
Xf80 SF
X14 r (system)s
X14 r (call)s
X14 r (with)s
X13 r (help)s
X14 r (of)s
X14 r (client)s
X14 r (library)s
X-3 r (.)s
X183 2606 p (Considering)s
X15 r (these)s
X15 r (fundamental)s
X15 r (need)s
X14 r (for)s
X15 r (new)s
X15 r (protocols)s
X15 r (and)s
X15 r (a)s
X15 r (number)s
X15 r (of)s
X15 r (other)s
X14 r (possible)s
X15 r (improvements,)s
X100 2673 p (I)s
X19 r (have)s
X18 r (designed)s
X19 r (a)s
X18 r (new)s
X19 r (protocol)s
X18 r (architecture)s
X19 r (for)s
X18 r (WWFS)s
X19 r (as)s
X18 r (a)s
X19 r (whole.)s
X32 r (Client-CS)s
X19 r (interaction)s
X18 r (is)s
X19 r (performed)s
X100 2739 p (via)s
X13 r (user)s
X13 r (interface)s
X14 r (protocol)s
X13 r (\(UIP\),)s
X13 r (resource)s
X13 r (access)s
X13 r (protocol)s
X14 r (\(RAP\))s
X13 r (and)s
X13 r (resource)s
X13 r (reorganize)s
X12 r (protocol)s
X14 r (\(ROP\),)s
X100 2805 p (whereas)s
X10 r (CS-CS,)s
X11 r (CS-\256leserver)s
X10 r (interaction)s
X10 r (is)s
X11 r (performed)s
X10 r (via)s
X11 r (resource)s
X10 r (query)s
X10 r (protocol)s
X11 r (\(RQP\),)s
X10 r (resource)s
X10 r (transfer)s
X100 2872 p (protocol)s
X17 r (\(R)s
X-2 r (TP\))s
X16 r (and)s
X17 r (ROP)s
X18 r (\(Figure)s
X17 r (6\).)s
X28 r (RAP)s
X17 r (and)s
X18 r (R)s
X-3 r (TP)s
X17 r (can)s
X17 r (be)s
X17 r (existing)s
X17 r (protocols)s
X17 r (such)s
X18 r (as)s
X17 r (NFS)s
X17 r (and)s
X17 r (FTP)s
X-5 r (,)s
X16 r (but)s
X100 2938 p (there)s
X14 r (are)s
X14 r (much)s
X14 r (room)s
X13 r (for)s
X14 r (improvements)s
X14 r (in)s
X14 r (these)s
X14 r (protocols,)s
X14 r (as)s
X13 r (suggested)s
X14 r (by)s
X14 r (WWFTP[6].)s
X183 3005 p (W)s
X-1 r (ith)s
X8 r (this)s
X9 r (protocol)s
X10 r (architecture,)s
X10 r (design)s
X9 r (and)s
X9 r (implementation)s
X9 r (of)s
X10 r (an)s
X9 r (UIP)s
X9 r (and)s
X9 r (an)s
X10 r (R)s
X-3 r (TP)s
X9 r (is)s
X9 r (in)s
X9 r (progress.)s
X17 r (WWFTP)s
X100 3071 p (is)s
X12 r (an)s
X11 r (implementation)s
X12 r (of)s
X11 r (R)s
X-2 r (TP)s
X-6 r (,)s
X10 r (which)s
X12 r (is)s
X11 r (primarily)s
X12 r (aimed)s
X11 r (at)s
X12 r (seamless)s
X11 r (integration)s
X12 r (of)s
X11 r (distributed)s
X12 r (\256le)s
X11 r (system)s
X12 r (and)s
X100 3137 p (the)s
X14 r (Internet)s
X13 r (ftp)s
X14 r (archives.)s
X18 r (WWFTP)s
X14 r (supports)s
X14 r (ef\256cient)s
X12 r (\256le)s
X14 r (transfer)s
X14 r (over)s
X13 r (high-speed)s
X14 r (networks)s
X13 r (and)s
X14 r (long-delay)s
X100 3204 p (communication)s
X19 r (lines,)s
X20 r (archive)s
X19 r (replication)s
X18 r (and)s
X19 r (interaction)s
X19 r (with)s
X19 r (multi-stage)s
X19 r (\256le)s
X18 r (transfer)s
X19 r (software.)s
X34 r (Design)s
X100 3270 p (and)s
X14 r (implementation)s
X13 r (of)s
X14 r (multi-threaded)s
X13 r (WWFTP)s
X14 r (server)s
X13 r (is)s
X14 r (in)s
X14 r (progress.)s
X18 r (CS)s
X14 r (will)s
X13 r (support)s
X14 r (WWFTP)s
X13 r (in)s
X14 r (the)s
X13 r (next)s
X100 3337 p (major)s
X14 r (release.)s
X183 3403 p (WWUIP)s
X14 r (is)s
X15 r (an)s
X14 r (implementation)s
X14 r (of)s
X15 r (UIP)s
X-6 r (,)s
X14 r (which)s
X14 r (complements)s
X14 r (NFS)s
X15 r (by)s
X14 r (providing)s
X14 r (support)s
X15 r (for)s
X14 r (different)s
X13 r (be-)s
X100 3470 p (havior)s
X14 r (resulting)s
X13 r (from)s
X14 r (the)s
X13 r (characteristics)s
X14 r (of)s
X14 r (underlying)s
X13 r (services)s
X14 r (\(e.g.,)s
X13 r (ftp)s
X14 r (archives\))s
X14 r (and)s
X13 r (by)s
X14 r (providing)s
X13 r (opera-)s
X100 3536 p (tions)s
X13 r (for)s
X12 r (newly)s
X13 r (introduced)s
X13 r (objects)s
X12 r (\(e.g.,)s
X13 r (access)s
X13 r (policy)s
X12 r (and)s
X13 r (volume\).)s
X18 r (WWUIP)s
X13 r (server)s
X12 r (has)s
X13 r (been)s
X13 r (implemented)s
X100 3602 p (in)s
X11 r (CS,)s
X11 r (and)s
X12 r (has)s
X11 r (been)s
X11 r (experimented)s
X11 r (and)s
X11 r (used)s
X12 r (by)s
X11 r (several)s
X11 r (WWUIP)s
X11 r (clients.)s
X18 r (The)s
X11 r (development)s
X11 r (of)s
X12 r (WWUIP)s
X11 r (client)s
X100 3669 p (library)s
X13 r (is)s
X14 r (in)s
X14 r (progress,)s
X13 r (in)s
X14 r (parallel)s
X13 r (with)s
X14 r (adaptation)s
X13 r (of)s
X14 r (usual)s
X13 r (UNIX)s
X14 r (commands)s
X13 r (such)s
X14 r (as)s
Xf84 SF
X13 r (ls)s
Xf80 SF
X(,)s
Xf84 SF
X14 r (more)s
Xf80 SF
X13 r (and)s
Xf84 SF
X14 r (tar)s
Xf80 SF
X(.)s
X18 r (A)s
X100 3735 p (graphical)s
X14 r (\256lesystem)s
X14 r (browser)s
X14 r (for)s
X13 r (CS)s
X14 r (has)s
X14 r (been)s
X14 r (developed)s
X14 r (using)s
X14 r (Tk[7].)s
X1261 3946 p (6)s
XEP
X
X%%Page: 7 7
XBP
X479 260 p 1.000 @beginspecial
X@epsf
X0.800000 @vscale
X0.800000 @hscale
X79.000000 532.000000 437.000000 645.000000 @bbox
X@setspecial
X%%BeginDocument: proto_arch.eps
X%!PS-Adobe-2.0 EPSF-1.2
X%%DocumentFonts: Helvetica
X%%BoundingBox: 79 532 437 645
X%%EndComments
X
X50 dict begin
X
X/arrowHeight 8 def
X/arrowWidth 4 def
X/none null def
X/numGraphicParameters 17 def
X/stringLimit 65535 def
X
X/Begin {
Xsave
XnumGraphicParameters dict begin
X} def
X
X/End {
Xend
Xrestore
X} def
X
X/SetB {
Xdup type /nulltype eq {
Xpop
Xfalse /brushRightArrow idef
Xfalse /brushLeftArrow idef
Xtrue /brushNone idef
X} {
X/brushDashOffset idef
X/brushDashArray idef
X0 ne /brushRightArrow idef
X0 ne /brushLeftArrow idef
X/brushWidth idef
Xfalse /brushNone idef
X} ifelse
X} def
X
X/SetCFg {
X/fgblue idef
X/fggreen idef
X/fgred idef
X} def
X
X/SetCBg {
X/bgblue idef
X/bggreen idef
X/bgred idef
X} def
X
X/SetF {
X/printSize idef
X/printFont idef
X} def
X
X/SetP {
Xdup type /nulltype eq {
Xpop true /patternNone idef
X} {
X/patternGrayLevel idef
XpatternGrayLevel -1 eq {
X/patternString idef
X} if
Xfalse /patternNone idef
X} ifelse
X} def
X
X/BSpl {
X0 begin
Xstorexyn
Xnewpath
Xn 1 gt {
X0 0 0 0 0 0 1 1 true subspline
Xn 2 gt {
X0 0 0 0 1 1 2 2 false subspline
X1 1 n 3 sub {
X/i exch def
Xi 1 sub dup i dup i 1 add dup i 2 add dup false subspline
X} for
Xn 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
X} if
Xn 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
XpatternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
XbrushNone not { istroke } if
X0 0 1 1 leftarrow
Xn 2 sub dup n 1 sub dup rightarrow
X} if
Xend
X} dup 0 4 dict put def
X
X/Circ {
Xnewpath
X0 360 arc
XpatternNone not { ifill } if
XbrushNone not { istroke } if
X} def
X
X/CBSpl {
X0 begin
Xdup 2 gt {
Xstorexyn
Xnewpath
Xn 1 sub dup 0 0 1 1 2 2 true subspline
X1 1 n 3 sub {
X/i exch def
Xi 1 sub dup i dup i 1 add dup i 2 add dup false subspline
X} for
Xn 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
Xn 2 sub dup n 1 sub dup 0 0 1 1 false subspline
XpatternNone not { ifill } if
XbrushNone not { istroke } if
X} {
XPoly
X} ifelse
Xend
X} dup 0 4 dict put def
X
X
X/RRect { CBSpl } def
X
X/Elli {
X0 begin
Xnewpath
X4 2 roll
Xtranslate
Xscale
X0 0 1 0 360 arc
XpatternNone not { ifill } if
XbrushNone not { istroke } if
Xend
X} dup 0 1 dict put def
X
X/Line {
X0 begin
X2 storexyn
Xnewpath
Xx 0 get y 0 get moveto
Xx 1 get y 1 get lineto
XbrushNone not { istroke } if
X0 0 1 1 leftarrow
X0 0 1 1 rightarrow
Xend
X} dup 0 4 dict put def
X
X/MLine {
X0 begin
Xstorexyn
Xnewpath
Xn 1 gt {
Xx 0 get y 0 get moveto
X1 1 n 1 sub {
X/i exch def
Xx i get y i get lineto
X} for
XpatternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
XbrushNone not { istroke } if
X0 0 1 1 leftarrow
Xn 2 sub dup n 1 sub dup rightarrow
X} if
Xend
X} dup 0 4 dict put def
X
X/Poly {
X3 1 roll
Xnewpath
Xmoveto
X-1 add
X{ lineto } repeat
Xclosepath
XpatternNone not { ifill } if
XbrushNone not { istroke } if
X} def
X
X/Rect {
X0 begin
X/t exch def
X/r exch def
X/b exch def
X/l exch def
Xnewpath
Xl b moveto
Xl t lineto
Xr t lineto
Xr b lineto
Xclosepath
XpatternNone not { ifill } if
XbrushNone not { istroke } if
Xend
X} dup 0 4 dict put def
X
X/WhiteBg 1 def
X/HollowBg 0 def
X/Text { ishow } def
X
X/idef {
Xdup where { pop pop pop } { exch def } ifelse
X} def
X
X/ifill {
X0 begin
Xgsave
XpatternGrayLevel -1 ne {
Xfgred bgred fgred sub patternGrayLevel mul add
Xfggreen bggreen fggreen sub patternGrayLevel mul add
Xfgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
Xeofill
X} {
Xeoclip
XoriginalCTM setmatrix
Xpathbbox /t exch def /r exch def /b exch def /l exch def
X/w r l sub ceiling cvi def
X/h t b sub ceiling cvi def
X/imageByteWidth w 8 div ceiling cvi def
X/imageHeight h def
Xbgred bggreen bgblue setrgbcolor
Xeofill
Xfgred fggreen fgblue setrgbcolor
Xw 0 gt h 0 gt and {
Xl b translate w h scale
Xw h true [w 0 0 h neg 0 h] { patternproc } imagemask
X} if
X} ifelse
Xgrestore
Xend
X} dup 0 8 dict put def
X
X/istroke {
Xgsave
XbrushDashOffset -1 eq {
X[] 0 setdash
X1 setgray
X} {
XbrushDashArray brushDashOffset setdash
Xfgred fggreen fgblue setrgbcolor
X} ifelse
XbrushWidth setlinewidth
XoriginalCTM setmatrix
Xstroke
Xgrestore
X} def
X
X/xdescender {
Xbegin 0
XFontType 0 eq
X{ FDepVector dup length 1 sub get xdescender }
X{ [FontBBox] 1 get } ifelse
XFontMatrix transform exch pop end
X} def
X/ishow {
X0 begin
Xgsave
Xfgred fggreen fgblue setrgbcolor
XWhiteBg eq /drawBg exch def
X/fontDict printFont findfont printSize scalefont dup setfont def
X/descender fontDict xdescender def
X/vertoffset 0 descender sub printSize sub printFont /Courier ne
XprintFont /Courier-Bold ne and { 1 add } if def {
XdrawBg {
Xnewpath 0 vertoffset descender add moveto
Xdup stringwidth pop dup 0 rlineto
X0 printSize rlineto 0 exch sub 0 rlineto
Xclosepath currentgray 1 setgray fill setgray } if
X0 vertoffset moveto show
X/vertoffset vertoffset printSize sub def
X} forall
Xgrestore
Xend
X} dup 0 4 dict put def
X
X/patternproc {
X0 begin
X/patternByteLength patternString length def
X/patternHeight patternByteLength 8 mul sqrt cvi def
X/patternWidth patternHeight def
X/patternByteWidth patternWidth 8 idiv def
X/imageByteMaxLength imageByteWidth imageHeight mul
XstringLimit patternByteWidth sub min def
X/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
XpatternHeight mul patternHeight max def
X/imageHeight imageHeight imageMaxHeight sub store
X/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
X0 1 imageMaxHeight 1 sub {
X/y exch def
X/patternRow y patternByteWidth mul patternByteLength mod def
X/patternRowString patternString patternRow patternByteWidth getinterval def
X/imageRow y imageByteWidth mul def
X0 patternByteWidth imageByteWidth 1 sub {
X/x exch def
XimageString imageRow x add patternRowString putinterval
X} for
X} for
XimageString
Xend
X} dup 0 12 dict put def
X
X/min {
Xdup 3 2 roll dup 4 3 roll lt { exch } if pop
X} def
X
X/max {
Xdup 3 2 roll dup 4 3 roll gt { exch } if pop
X} def
X
X/arrowhead {
X0 begin
Xtransform originalCTM itransform
X/taily exch def
X/tailx exch def
Xtransform originalCTM itransform
X/tipy exch def
X/tipx exch def
X/dy tipy taily sub def
X/dx tipx tailx sub def
X/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
Xgsave
XoriginalCTM setmatrix
Xtipx tipy translate
Xangle rotate
Xnewpath
X0 0 moveto
XarrowHeight neg arrowWidth 2 div lineto
XarrowHeight neg arrowWidth 2 div neg lineto
Xclosepath
XpatternNone not {
XoriginalCTM setmatrix
X/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
XarrowWidth div def
X/padtail brushWidth 2 div def
Xtipx tipy translate
Xangle rotate
Xpadtip 0 translate
XarrowHeight padtip add padtail add arrowHeight div dup scale
Xarrowheadpath
Xifill
X} if
XbrushNone not {
XoriginalCTM setmatrix
Xtipx tipy translate
Xangle rotate
Xarrowheadpath
Xistroke
X} if
Xgrestore
Xend
X} dup 0 9 dict put def
X
X/arrowheadpath {
Xnewpath
X0 0 moveto
XarrowHeight neg arrowWidth 2 div lineto
XarrowHeight neg arrowWidth 2 div neg lineto
Xclosepath
X} def
X
X/leftarrow {
X0 begin
Xy exch get /taily exch def
Xx exch get /tailx exch def
Xy exch get /tipy exch def
Xx exch get /tipx exch def
XbrushLeftArrow { tipx tipy tailx taily arrowhead } if
Xend
X} dup 0 4 dict put def
X
X/rightarrow {
X0 begin
Xy exch get /tipy exch def
Xx exch get /tipx exch def
Xy exch get /taily exch def
Xx exch get /tailx exch def
XbrushRightArrow { tipx tipy tailx taily arrowhead } if
Xend
X} dup 0 4 dict put def
X
X/midpoint {
X0 begin
X/y1 exch def
X/x1 exch def
X/y0 exch def
X/x0 exch def
Xx0 x1 add 2 div
Xy0 y1 add 2 div
Xend
X} dup 0 4 dict put def
X
X/thirdpoint {
X0 begin
X/y1 exch def
X/x1 exch def
X/y0 exch def
X/x0 exch def
Xx0 2 mul x1 add 3 div
Xy0 2 mul y1 add 3 div
Xend
X} dup 0 4 dict put def
X
X/subspline {
X0 begin
X/movetoNeeded exch def
Xy exch get /y3 exch def
Xx exch get /x3 exch def
Xy exch get /y2 exch def
Xx exch get /x2 exch def
Xy exch get /y1 exch def
Xx exch get /x1 exch def
Xy exch get /y0 exch def
Xx exch get /x0 exch def
Xx1 y1 x2 y2 thirdpoint
X/p1y exch def
X/p1x exch def
Xx2 y2 x1 y1 thirdpoint
X/p2y exch def
X/p2x exch def
Xx1 y1 x0 y0 thirdpoint
Xp1x p1y midpoint
X/p0y exch def
X/p0x exch def
Xx2 y2 x3 y3 thirdpoint
Xp2x p2y midpoint
X/p3y exch def
X/p3x exch def
XmovetoNeeded { p0x p0y moveto } if
Xp1x p1y p2x p2y p3x p3y curveto
Xend
X} dup 0 17 dict put def
X
X/storexyn {
X/n exch def
X/y n array def
X/x n array def
Xn 1 sub -1 0 {
X/i exch def
Xy i 3 2 roll put
Xx i 3 2 roll put
X} for
X} def
X
X%%EndProlog
X
X%I Idraw 9 Grid 8
X
X
XBegin
X%I b u
X%I cfg u
X%I cbg u
X%I f u
X%I k u
X%I p u
X%I t
X[ .8 0 0 .8 0 0 ] concat
X/originalCTM matrix currentmatrix def
X
XBegin %I Pict
X%I b u
X%I cfg u
X%I cbg u
X%I f u
X%I k u
X%I p u
X%I t
X[ 1 0 0 1 -3 11 ] concat
X
XBegin %I Elli
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X1 SetP
X%I t
X[ 1 0 0 1 100.5 286.5 ] concat
X%I
X222 440 28 20 Elli
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 305 735 ] concat
X%I
X[
X(Cluster)
X(Server)
X] WhiteBg Text
XEnd
X
XEnd %I eop
X
XBegin %I Pict
X%I b u
X%I cfg u
X%I cbg u
X%I f u
X%I k u
X%I p u
X%I t u
X
XBegin %I Elli
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X1 SetP
X%I t
X[ 1 0 0 1 104.5 284.5 ] concat
X%I
X365 505 76 16 Elli
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 403.5 793 ] concat
X%I
X[
X(Volume location server)
X] WhiteBg Text
XEnd
X
XEnd %I eop
X
XBegin %I Pict
X%I b u
X%I cfg u
X%I cbg u
X%I f u
X%I k u
X%I p u
X%I t u
X
XBegin %I Elli
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X1 SetP
X%I t
X[ 1 0 0 1 104.5 233.5 ] concat
X%I
X365 505 76 16 Elli
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 403.5 742 ] concat
X%I
X[
X(File server)
X] WhiteBg Text
XEnd
X
XEnd %I eop
X
XBegin %I Pict
X%I b u
X%I cfg u
X%I cbg u
X%I f u
X%I k u
X%I p u
X%I t u
X
XBegin %I Elli
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X1 SetP
X%I t
X[ 1 0 0 1 104.5 177.5 ] concat
X%I
X365 505 76 16 Elli
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 403.5 686 ] concat
X%I
X[
X(Volume statistics server)
X] WhiteBg Text
XEnd
X
XEnd %I eop
X
XBegin %I Pict
X%I b u
X%I cfg u
X%I cbg u
X%I f u
X%I k u
X%I p u
X%I t
X[ 1 0 0 1 -25.5 19.5 ] concat
X
XBegin %I Rect
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X1 SetP
X%I t
X[ 1 0 0 1 102 188 ] concat
X%I
X24 493 144 563 Rect
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 137 727 ] concat
X%I
X[
X(Client)
X(programs)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 198 742 ] concat
X%I
X[
X(Library)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 198 719.5 ] concat
X%I
X[
X(Kernel)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 198 697.5 ] concat
X%I
X[
X(Library)
X] WhiteBg Text
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ .5 0 0 .5 159.5 590.5 ] concat
X%I
X65 321 65 181 Line
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ .5 0 0 .5 160 591 ] concat
X%I
X65 274 171 274 Line
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ .5 0 0 .5 160 567 ] concat
X%I
X65 274 171 274 Line
XEnd
X
XEnd %I eop
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 252 767 ] concat
X%I
X[
X(UIP)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 252 748.5 ] concat
X%I
X[
X(RAP)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 252 731 ] concat
X%I
X[
X(ROP)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 362 715.5 ] concat
X%I
X[
X(ROP)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 362 751.5 ] concat
X%I
X[
X(RTP)
X] WhiteBg Text
XEnd
X
XBegin %I Text
X%I cfg Black
X0 0 0 SetCFg
X%I f *-helvetica-medium-r-*-120-*
X/Helvetica 12 SetF
X%I t
X[ 1 0 0 1 362 791.5 ] concat
X%I
X[
X(RQP)
X] WhiteBg Text
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ 1 0 0 1 177 387 ] concat
X%I
X215 398 164 367 Line
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ 1 0 0 1 177 387 ] concat
X%I
X173 351 215 351 Line
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ 1 0 0 1 177 387 ] concat
X%I
X164 334 213 299 Line
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ .5 0 0 .5 79.5 553.5 ] concat
X%I
X421 369 286 369 Line
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ .5 0 0 .5 79.5 553.5 ] concat
X%I
X431 344 286 317 Line
XEnd
X
XBegin %I Line
X%I b 65535
X1 0 0 [] 0 SetB
X%I cfg Black
X0 0 0 SetCFg
X%I cbg White
X1 1 1 SetCBg
X%I p
X< ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
X ffffffff > -1 SetP
X%I t
X[ .5 0 0 .5 79.5 553.5 ] concat
X%I
X434 395 286 415 Line
XEnd
X
XEnd %I eop
X
Xshowpage
X
X
Xend
X%%EndDocument
X@endspecial
Xf80 SF
X100 939 p (Figure)s
X19 r (6:)s
Xf82 SF
X29 r (WWFS)s
X19 r (protocol)s
X19 r (architecture.)s
Xf80 SF
X35 r (Client-CS)s
X19 r (interaction)s
X19 r (is)s
X19 r (performed)s
X19 r (via)s
X19 r (user)s
X19 r (interface)s
X20 r (protocol)s
X100 1006 p (\(UIP\),)s
X16 r (resource)s
X15 r (access)s
X16 r (protocol)s
X16 r (\(RAP\))s
X15 r (and)s
X16 r (resource)s
X16 r (reorganize)s
X15 r (protocol)s
X15 r (\(ROP\).)s
X16 r (CS-CS,)s
X16 r (CS-\256leserver)s
X15 r (in-)s
X100 1072 p (teraction)s
X12 r (is)s
X12 r (performed)s
X12 r (via)s
X12 r (resource)s
X12 r (query)s
X12 r (protocol)s
X12 r (\(RQP\),)s
X12 r (resource)s
X12 r (transfer)s
X12 r (protocol)s
X12 r (\(R)s
X-2 r (TP\))s
X11 r (and)s
X12 r (ROP)s
X-6 r (.)s
X11 r (In)s
X12 r (the)s
X100 1139 p (current)s
X14 r (implementation,)s
X14 r (NFS)s
X14 r (is)s
X13 r (used)s
X14 r (as)s
X14 r (an)s
X14 r (RAP)s
X14 r (and)s
X14 r (FTP)s
X13 r (is)s
X14 r (used)s
X14 r (as)s
X14 r (an)s
X14 r (R)s
X-3 r (TP)s
X-6 r (.)s
X183 1317 p (Hopefully)s
X-3 r (,)s
X10 r (the)s
X9 r (development)s
X10 r (of)s
X9 r (WWUIP)s
X9 r (and)s
X10 r (WWFTP)s
X9 r (will)s
X10 r (help)s
X9 r (the)s
X9 r (seamless)s
X10 r (integration)s
X9 r (of)s
X10 r (client,)s
X10 r (CS)s
X9 r (and)s
X100 1383 p (\256le)s
X14 r (server)s
X-2 r (,)s
X13 r (that)s
X14 r (eventually)s
X14 r (will)s
X13 r (contribute)s
X14 r (to)s
X14 r (the)s
X14 r (integration)s
X13 r (of)s
X14 r (resource)s
X14 r (location,)s
X13 r (access)s
X14 r (and)s
X14 r (reorganization)s
X100 1450 p (mechanisms.)s
Xf99 SF
X100 1636 p (6)s
X80 r (Conclusion)s
Xf80 SF
X100 1759 p (The)s
X16 r (advent)s
X17 r (of)s
X16 r (a)s
X16 r (worldwide)s
X16 r (\256le)s
X17 r (system)s
X16 r (revealed)s
X16 r (that)s
X16 r (the)s
X17 r (hierarchical)s
X16 r (naming)s
X16 r (scheme)s
X17 r (cannot)s
X16 r (be)s
X16 r (straightly)s
X100 1826 p (expanded)s
X17 r (over)s
X16 r (the)s
X17 r (Internet,)s
X17 r (and)s
X16 r (that)s
X17 r (operational)s
X17 r (semantics)s
X16 r (of)s
X17 r (NFS)s
X16 r (no)s
X17 r (longer)s
X16 r (suf\256ces.)s
X26 r (For)s
X16 r (these)s
X17 r (reasons,)s
X100 1892 p (a)s
X18 r (novel)s
X17 r (and)s
X18 r (integrated)s
X18 r (information)s
X17 r (sharing)s
X18 r (system)s
X18 r (has)s
X18 r (been)s
X17 r (needed.)s
X30 r (WWFS)s
X18 r (can)s
X18 r (be)s
X17 r (a)s
X18 r (solution,)s
X19 r (with)s
X17 r (the)s
X100 1959 p (enhancement)s
X14 r (to)s
X14 r (the)s
X14 r (notion)s
X13 r (of)s
X14 r (volume)s
X14 r (and)s
X14 r (the)s
X14 r (extension)s
X14 r (to)s
X13 r (the)s
X14 r (protocol)s
X14 r (set.)s
Xf99 SF
X100 2145 p (7)s
X80 r (Acknowledgements)s
Xf80 SF
X100 2268 p (I)s
X13 r (would)s
X13 r (like)s
X13 r (to)s
X13 r (thank)s
X13 r (Akira)s
X13 r (Kato,)s
X13 r (Noritoshi)s
X13 r (Demizu,)s
X13 r (Hiroyuki)s
X13 r (Ohno,)s
X13 r (Kazumasa)s
X13 r (Utashiro,)s
X14 r (Motonori)s
X13 r (Naka-)s
X100 2335 p (mura,)s
X14 r (Shuji)s
X14 r (Ishii,)s
X14 r (Y)s
X-5 r (oshitaka)s
X13 r (T)s
X-3 r (okugawa)s
X13 r (and)s
X14 r (other)s
X14 r (alpha)s
X14 r (testers)s
X14 r (for)s
X14 r (their)s
X14 r (helpful)s
X14 r (comments,)s
X14 r (bug)s
X14 r (reports)s
X13 r (and)s
X100 2401 p (discussions)s
X9 r (on)s
X10 r (the)s
X9 r (WWFS)s
X9 r (mailing)s
X9 r (list.)s
X17 r (I)s
X10 r (would)s
X9 r (like)s
X9 r (to)s
X10 r (thank)s
X9 r (Suguru)s
X9 r (Y)s
X-4 r (amaguchi,)s
X9 r (Hideo)s
X9 r (Miyahara)s
X9 r (and)s
X10 r (WIDE)s
X100 2468 p (Project)s
X10 r (for)s
X11 r (their)s
X10 r (fundamental)s
X10 r (support)s
X11 r (for)s
X10 r (my)s
X10 r (research)s
X10 r (activities.)s
X18 r (I)s
X10 r (would)s
X10 r (also)s
X11 r (like)s
X10 r (to)s
X10 r (thank)s
X10 r (the)s
X11 r (administrators)s
X100 2534 p (of)s
X14 r (ftp)s
X14 r (archives)s
X14 r (in)s
X13 r (the)s
X14 r (Internet;)s
X14 r (especially)s
X14 r (Japanese)s
X14 r (archive)s
X14 r (administrators)s
X13 r (have)s
X14 r (been)s
X14 r (cooperative.)s
Xf99 SF
X100 2721 p (References)s
Xf80 SF
X100 2844 p ([1])s
X28 r (Sun)s
X14 r (Microsystems.)s
X19 r (NFS:)s
X14 r (Network)s
X14 r (File)s
X14 r (System)s
X14 r (protocol)s
X14 r (speci\256cation.)s
X20 r (RFC)s
X13 r (1094,)s
X14 r (March)s
X14 r (1989.)s
X100 2955 p ([2])s
X28 r (Y)s
X-5 r (ouki)s
X14 r (Kadobayashi.)s
Xf81 SF
X24 r (WWFS)s
X15 r (Refer)s
X-1 r (ence)s
X14 r (Manual)s
Xf80 SF
X(.)s
X23 r (WWFS)s
X15 r (Research)s
X15 r (Group,)s
X16 r (Department)s
X14 r (of)s
X15 r (Information)s
X192 3021 p (&)s
X14 r (Computer)s
X14 r (Sciences,)s
X14 r (Osaka)s
X14 r (University)s
X-3 r (,)s
X13 r (January)s
X14 r (1993.)s
X100 3132 p ([3])s
X28 r (Y)s
X-5 r (ouki)s
X14 r (Kadobayashi,)s
X15 r (Suguru)s
X15 r (Y)s
X-4 r (amaguchi,)s
X14 r (and)s
X15 r (Hideo)s
X15 r (Miyahara.)s
X24 r (WWFS:)s
X14 r (A)s
X15 r (framework)s
X15 r (for)s
X15 r (distributing)s
X192 3198 p (information)s
X15 r (in)s
X14 r (the)s
X15 r (Internet)s
X15 r (environment.)s
X23 r (In)s
Xf81 SF
X14 r (Pr)s
X-1 r (oceedings)s
X14 r (of)s
X14 r (the)s
X15 r (seventh)s
X15 r (IEEE)s
X14 r (Region)s
X15 r (10)s
X15 r (International)s
X192 3265 p (Confer)s
X-1 r (ence)s
X13 r (TENCON'92)s
Xf80 SF
X(,)s
X14 r (pages)s
X14 r (227\261231,)s
X14 r (November)s
X13 r (1992.)s
X100 3375 p ([4])s
X28 r (Brewster)s
X19 r (Kahle.)s
X42 r (Wide)s
X20 r (Area)s
X20 r (Information)s
X20 r (Servers)s
X19 r (concepts.)s
X42 r (T)s
X-3 r (echnical)s
X19 r (Report)s
X20 r (TMC-202,)s
X21 r (Thinking)s
X192 3442 p (Machines)s
X14 r (Corporation,)s
X14 r (November)s
X14 r (1989.)s
X100 3552 p ([5])s
X28 r (David)s
X12 r (K.)s
X13 r (Gifford,)s
X12 r (Pierre)s
X13 r (Jouvelot,)s
X13 r (Mark)s
X13 r (A.)s
X12 r (Sheldon,)s
X13 r (and)s
X13 r (James)s
X13 r (W)s
X-4 r (.)s
X11 r (O'T)s
X-3 r (oole,)s
X12 r (Jr)s
X-2 r (.)s
X17 r (Semantic)s
X13 r (\256le)s
X13 r (systems.)s
X192 3619 p (In)s
Xf81 SF
X15 r (Pr)s
X-1 r (oceedings)s
X13 r (of)s
X14 r (the)s
X15 r (Thirteenth)s
X14 r (ACM)s
X15 r (Symposium)s
X14 r (on)s
X14 r (Operating)s
X15 r (System)s
X14 r (Principles)s
Xf80 SF
X(,)s
X15 r (pages)s
X14 r (16\26125,)s
X15 r (Oc-)s
X192 3685 p (tober)s
X14 r (1991.)s
X1261 3946 p (7)s
XEP
X
X%%Page: 8 8
XBP
Xf80 SF
X100 260 p ([6])s
X28 r (Y)s
X-5 r (ouki)s
X13 r (Kadobayashi.)s
X21 r (WWFTP:)s
X14 r (A)s
X15 r (\256lesystem-oriented)s
X14 r (\256le)s
X14 r (transfer)s
X14 r (protocol.)s
X21 r (T)s
X-3 r (echnical)s
X13 r (Report)s
X14 r (WWFS-)s
X192 327 p (TR-93-1,)s
X16 r (WWFS)s
X16 r (Research)s
X16 r (Group,)s
X16 r (Department)s
X16 r (of)s
X16 r (Information)s
X16 r (&)s
X15 r (Computer)s
X16 r (Sciences,)s
X16 r (Osaka)s
X16 r (Univer-)s
X192 393 p (sity)s
X-2 r (,)s
X12 r (January)s
X14 r (1993.)s
X100 504 p ([7])s
X28 r (John)s
X17 r (K.)s
X17 r (Ousterhout.)s
X32 r (An)s
X17 r (X1)s
X-1 r (1)s
X17 r (toolkit)s
X17 r (based)s
X17 r (on)s
X17 r (the)s
X17 r (Tcl)s
X17 r (language.)s
X33 r (In)s
Xf81 SF
X17 r (Pr)s
X-1 r (occedings)s
X16 r (of)s
X17 r (the)s
X17 r (Winter)s
X18 r (1991)s
X192 570 p (USENIX)s
X14 r (Confer)s
X-1 r (ence)s
Xf80 SF
X(,)s
X13 r (Dallas,)s
X14 r (TX,)s
X14 r (1991.)s
X1261 3946 p (8)s
XEP
X%%Trailer
X%%Pages: 8
XEND
X%%EOF
END_OF_FILE
if test 46189 -ne `wc -c <'doc/beyond.ps.B'`; then
echo shar: \"'doc/beyond.ps.B'\" unpacked with wrong size!
elif test -f 'doc/beyond.ps.A'; then
echo shar: Combining \"'doc/beyond.ps'\" \(92615 characters\)
cat 'doc/beyond.ps.A' 'doc/beyond.ps.B' > 'doc/beyond.ps'
if test 92615 -ne `wc -c <'doc/beyond.ps'`; then
echo shar: \"'doc/beyond.ps'\" combined with wrong size!
else
rm doc/beyond.ps.A doc/beyond.ps.B
fi
fi
# end of 'doc/beyond.ps.B'
fi
if test -f 'mosaic/Mosaic-2.1+wwfs.diff' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mosaic/Mosaic-2.1+wwfs.diff'\"
else
echo shar: Extracting \"'mosaic/Mosaic-2.1+wwfs.diff'\" \(32538 characters\)
sed "s/^X//" >'mosaic/Mosaic-2.1+wwfs.diff' <<'END_OF_FILE'
Xdiff -c -r -N Mosaic-2.1/Makefile Mosaic-2.1+wwfs/Makefile
X*** Mosaic-2.1/Makefile Fri Dec 10 15:59:29 1993
X--- Mosaic-2.1+wwfs/Makefile Tue Dec 21 10:09:38 1993
X***************
X*** 141,147 ****
X--- 141,153 ----
X waislibdir = $(waisroot)/bin
X waislibs = $(waislibdir)/inv.a $(waislibdir)/wais.a $(waislibdir)/libftw.a -lm
X
X+ #### DIRECT WWFS SUPPORT
X
X+ wwfsroot = /home/is/youki-k/work/wwfs-108.0
X+ wwfsflags = -I$(wwfsroot)/libww
X+ wwfslibdir = $(wwfsroot)/libww
X+ wwfslibs = $(wwfslibdir)/libww.a
X+
X #### Customization flags:
X #### . If you want Mosaic to come up with monochrome colors by default,
X #### use -DMONO_DEFAULT
X***************
X*** 151,156 ****
X--- 157,170 ----
X #### (should be a URL), set -DDOCS_DIRECTORY_DEFAULT=\\\"url\\\"
X #### . Other things you can define are spelled out in src/mosaic.h.
X customflags =
X+ #### Customization flags for WWFS addicts
X+ # customflags = \
X+ # -DDOCS_DIRECTORY_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/Docs\\\" \
X+ # -DDEMO_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/demoweb/demo.html\\\" \
X+ # -DHTMLPRIMER_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/General/Internet/WWW/HTMLPrimer.html\\\" \
X+ # -DURLPRIMER_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/demoweb/url-primer.html\\\" \
X+ # -DNETWORK_STARTING_POINTS_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/StartingPoints/NetworkStartingPoints.html\\\" \
X+ # -DINTERNET_METAINDEX_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/MetaIndex.html\\\"
X
X
X
X***************
X*** 203,221 ****
X
X libwww2::
X @echo --- Building libwww2
X! cd libwww2; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(knrflag) $(waisflags)"
X
X src::
X @echo --- Building src
X! cd src; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(sockslibs) $(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X src-purifyd::
X @echo --- Building Purify'd src
X! cd src; make PURIFY=$(PURIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(sockslibs) $(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X src-quantifyd::
X @echo --- Building Quantify'd src
X! cd src; make PURIFY=$(QUANTIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(sockslibs) $(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X libnet::
X @echo --- Building libnet
X--- 217,235 ----
X
X libwww2::
X @echo --- Building libwww2
X! cd libwww2; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(knrflag) $(waisflags) $(wwfsflags)"
X
X src::
X @echo --- Building src
X! cd src; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(sockslibs) $(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X src-purifyd::
X @echo --- Building Purify'd src
X! cd src; make PURIFY=$(PURIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(sockslibs) $(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X src-quantifyd::
X @echo --- Building Quantify'd src
X! cd src; make PURIFY=$(QUANTIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(sockslibs) $(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X libnet::
X @echo --- Building libnet
Xdiff -c -r -N Mosaic-2.1/Makefile.alpha Mosaic-2.1+wwfs/Makefile.alpha
X*** Mosaic-2.1/Makefile.alpha Tue Nov 9 18:21:52 1993
X--- Mosaic-2.1+wwfs/Makefile.alpha Tue Dec 21 10:10:59 1993
X***************
X*** 139,145 ****
X--- 139,151 ----
X #waislibdir = $(waisroot)/bin
X #waislibs = $(waislibdir)/inv.a $(waislibdir)/wais.a $(waislibdir)/libftw.a -lm
X
X+ #### DIRECT WWFS SUPPORT
X
X+ wwfsroot = /home/is/youki-k/work/wwfs-108.0
X+ wwfsflags = -I$(wwfsroot)/libww
X+ wwfslibdir = $(wwfsroot)/libww
X+ wwfslibs = $(wwfslibdir)/libww.a
X+
X #### Customization flags:
X #### . If you want Mosaic to come up with monochrome colors by default,
X #### use -DMONO_DEFAULT
X***************
X*** 149,154 ****
X--- 155,168 ----
X #### (should be a URL), set -DDOCS_DIRECTORY_DEFAULT=\\\"url\\\"
X #### . Other things you can define are spelled out in src/mosaic.h.
X customflags =
X+ #### Customization flags for WWFS addicts
X+ # customflags = \
X+ # -DDOCS_DIRECTORY_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/Docs\\\" \
X+ # -DDEMO_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/demoweb/demo.html\\\" \
X+ # -DHTMLPRIMER_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/General/Internet/WWW/HTMLPrimer.html\\\" \
X+ # -DURLPRIMER_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/demoweb/url-primer.html\\\" \
X+ # -DNETWORK_STARTING_POINTS_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/StartingPoints/NetworkStartingPoints.html\\\" \
X+ # -DINTERNET_METAINDEX_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/MetaIndex.html\\\"
X
X
X # ---------------------- END OF CUSTOMIZABLE OPTIONS -------------------------
X***************
X*** 177,195 ****
X
X libwww2::
X @echo --- Building libwww2
X! cd libwww2; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(knrflag) $(waisflags)"
X
X src::
X @echo --- Building src
X! cd src; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X src-purifyd::
X @echo --- Building Purify'd src
X! cd src; make PURIFY=$(PURIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X src-quantifyd::
X @echo --- Building Quantify'd src
X! cd src; make PURIFY=$(QUANTIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X libnet::
X @echo --- Building libnet
X--- 191,209 ----
X
X libwww2::
X @echo --- Building libwww2
X! cd libwww2; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(knrflag) $(waisflags) $(wwfsflags)"
X
X src::
X @echo --- Building src
X! cd src; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X src-purifyd::
X @echo --- Building Purify'd src
X! cd src; make PURIFY=$(PURIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X src-quantifyd::
X @echo --- Building Quantify'd src
X! cd src; make PURIFY=$(QUANTIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X libnet::
X @echo --- Building libnet
Xdiff -c -r -N Mosaic-2.1/Makefile.dec Mosaic-2.1+wwfs/Makefile.dec
X*** Mosaic-2.1/Makefile.dec Tue Nov 9 18:38:54 1993
X--- Mosaic-2.1+wwfs/Makefile.dec Tue Dec 21 10:11:14 1993
X***************
X*** 45,50 ****
X--- 45,52 ----
X # syslibs = -lPW
X #### For Sun's and Ultrix and HP and BSD/386:
X syslibs =
X+ #### For DEC Ultrix + JP L10N:
X+ syslibs = -ljsy -lim
X #### For Sun's with no DNS:
X # syslibs = -lresolv
X #### For SCO ODT:
X***************
X*** 116,124 ****
X dtmdirs = libdtm libnet
X dtmlibs = ../libnet/libnet.a ../libdtm/libdtm.a
X dtmflags = -DHAVE_DTM -I.. -I../libnet
X! hdfdir = /hdf/install/dec
X! hdflibs = $(hdfdir)/lib/libnetcdf.a $(hdfdir)/lib/libdf.a
X! hdfflags = -DHAVE_HDF -I$(hdfdir)/include
X
X
X #### DIRECT WAIS SUPPORT
X--- 118,126 ----
X dtmdirs = libdtm libnet
X dtmlibs = ../libnet/libnet.a ../libdtm/libdtm.a
X dtmflags = -DHAVE_DTM -I.. -I../libnet
X! # hdfdir = /hdf/install/dec
X! # hdflibs = $(hdfdir)/lib/libnetcdf.a $(hdfdir)/lib/libdf.a
X! # hdfflags = -DHAVE_HDF -I$(hdfdir)/include
X
X
X #### DIRECT WAIS SUPPORT
X***************
X*** 141,147 ****
X--- 143,155 ----
X #waislibdir = $(waisroot)/bin
X #waislibs = $(waislibdir)/inv.a $(waislibdir)/wais.a $(waislibdir)/libftw.a -lm
X
X+ #### DIRECT WWFS SUPPORT
X
X+ wwfsroot = /home/is/youki-k/work/wwfs-108.0
X+ wwfsflags = -I$(wwfsroot)/libww
X+ wwfslibdir = $(wwfsroot)/libww
X+ wwfslibs = $(wwfslibdir)/libww.a
X+
X #### Customization flags:
X #### . If you want Mosaic to come up with monochrome colors by default,
X #### use -DMONO_DEFAULT
X***************
X*** 151,156 ****
X--- 159,172 ----
X #### (should be a URL), set -DDOCS_DIRECTORY_DEFAULT=\\\"url\\\"
X #### . Other things you can define are spelled out in src/mosaic.h.
X customflags =
X+ #### Customization flags for WWFS addicts
X+ # customflags = \
X+ # -DDOCS_DIRECTORY_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/Docs\\\" \
X+ # -DDEMO_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/demoweb/demo.html\\\" \
X+ # -DHTMLPRIMER_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/General/Internet/WWW/HTMLPrimer.html\\\" \
X+ # -DURLPRIMER_PAGE_DEFAULT=\\\"wwfs:/NCSA-web/demoweb/url-primer.html\\\" \
X+ # -DNETWORK_STARTING_POINTS_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/StartingPoints/NetworkStartingPoints.html\\\" \
X+ # -DINTERNET_METAINDEX_DEFAULT=\\\"wwfs:/NCSA-web/SDG/Software/Mosaic/MetaIndex.html\\\"
X
X
X # ---------------------- END OF CUSTOMIZABLE OPTIONS -------------------------
X***************
X*** 179,197 ****
X
X libwww2::
X @echo --- Building libwww2
X! cd libwww2; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(knrflag) $(waisflags)"
X
X src::
X @echo --- Building src
X! cd src; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X src-purifyd::
X @echo --- Building Purify'd src
X! cd src; make PURIFY=$(PURIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X src-quantifyd::
X @echo --- Building Quantify'd src
X! cd src; make PURIFY=$(QUANTIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" LIBWWW_DIR=../libwww2
X
X libnet::
X @echo --- Building libnet
X--- 195,213 ----
X
X libwww2::
X @echo --- Building libwww2
X! cd libwww2; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(knrflag) $(waisflags) $(wwfsflags)"
X
X src::
X @echo --- Building src
X! cd src; make CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X src-purifyd::
X @echo --- Building Purify'd src
X! cd src; make PURIFY=$(PURIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X src-quantifyd::
X @echo --- Building Quantify'd src
X! cd src; make PURIFY=$(QUANTIFY) CC=$(CC) RANLIB=$(RANLIB) CFLAGS="$(CFLAGS) $(customflags) $(xinc) $(dtmflags) $(hdfflags) -I.. -I../libXmx -I../libwww2" AUX_CFLAGS=$(knrflag) X_LIBS="$(xlibs)" SYS_LIBS="$(syslibs)" DTM_LIBS="$(dtmlibs)" HDF_LIBS="$(hdflibs)" WAIS_LIBS="$(waislibs)" WWFS_LIBS="$(wwfslibs)" LIBWWW_DIR=../libwww2
X
X libnet::
X @echo --- Building libnet
Xdiff -c -r -N Mosaic-2.1/libwww2/HTAccess.c Mosaic-2.1+wwfs/libwww2/HTAccess.c
X*** Mosaic-2.1/libwww2/HTAccess.c Sun Oct 31 07:56:57 1993
X--- Mosaic-2.1+wwfs/libwww2/HTAccess.c Tue Dec 21 07:17:30 1993
X***************
X*** 79,85 ****
X */
X PRIVATE void HTAccessInit NOARGS /* Call me once */
X {
X! extern HTProtocol HTTP, HTFile, HTTelnet, HTTn3270, HTRlogin;
X extern HTProtocol HTFTP, HTNews, HTGopher;
X #ifdef DIRECT_WAIS
X extern HTProtocol HTWAIS;
X--- 79,85 ----
X */
X PRIVATE void HTAccessInit NOARGS /* Call me once */
X {
X! extern HTProtocol HTTP, HTFile, HTWWFS, HTTelnet, HTTn3270, HTRlogin;
X extern HTProtocol HTFTP, HTNews, HTGopher;
X #ifdef DIRECT_WAIS
X extern HTProtocol HTWAIS;
X***************
X*** 93,98 ****
X--- 93,99 ----
X
X HTRegisterProtocol(&HTTP);
X HTRegisterProtocol(&HTFile);
X+ HTRegisterProtocol(&HTWWFS);
X HTRegisterProtocol(&HTTelnet);
X HTRegisterProtocol(&HTTn3270);
X HTRegisterProtocol(&HTRlogin);
Xdiff -c -r -N Mosaic-2.1/libwww2/HTParse.c Mosaic-2.1+wwfs/libwww2/HTParse.c
X*** Mosaic-2.1/libwww2/HTParse.c Sat Nov 6 16:52:43 1993
X--- Mosaic-2.1+wwfs/libwww2/HTParse.c Tue Dec 21 08:52:17 1993
X***************
X*** 115,120 ****
X--- 115,122 ----
X parts->relative = (*after_access) ? after_access : 0; /* zero for "" */
X }
X
X+ /* WWFS does not require host part -- youki@wide.ad.jp, Dec 21 1993 */
X+ if (parts->access && ! strcmp(parts->access, "wwfs")) return;
X /* Access specified but no host: the anchor was not really one
X e.g. news:j462#36487@foo.bar -- JFG 10/7/92, from bug report */
X if (parts->access && ! parts->host && parts->anchor) {
Xdiff -c -r -N Mosaic-2.1/libwww2/HTWWFS.c Mosaic-2.1+wwfs/libwww2/HTWWFS.c
X*** Mosaic-2.1/libwww2/HTWWFS.c
X--- Mosaic-2.1+wwfs/libwww2/HTWWFS.c Tue Dec 21 07:28:06 1993
X***************
X*** 0 ****
X--- 1,452 ----
X+ /* WWFS Access HTWWFS.c
X+ ** ===========
X+ **
X+ ** This is unix-specific code in general.
X+ ** These are routines for file access used by browsers.
X+ **
X+ ** History:
X+ ** Feb 91 Written Tim Berners-Lee CERN/CN
X+ ** Apr 91 vms-vms access included using DECnet syntax
X+ ** 26 Jun 92 (JFG) When running over DECnet, suppressed FTP.
X+ ** Fixed access bug for relative names on VMS.
X+ ** Nov 93 Derived from HTFile.c; Youki Kadobayashi WIDE
X+ ** deleted VMS code for simplicity.
X+ **
X+ */
X+
X+ #include "HTFile.h" /* Implemented here */
X+
X+ #define MULTI_SUFFIX ".multi" /* Extension for scanning formats */
X+
X+ #include <stdio.h>
X+ #include <sys/param.h>
X+ #include "HText.h"
X+ #include "HTUtils.h"
X+
X+ #include "HTParse.h"
X+ #include "tcp.h"
X+ #include "HTTCP.h"
X+ #include "HTAnchor.h"
X+ #include "HTAtom.h"
X+ #include "HTWriter.h"
X+ #include "HTFWriter.h"
X+ #include "HTInit.h"
X+ #include "HTSort.h"
X+ #include "libww.h"
X+
X+ /* #define TRACE 1 */
X+
X+ #ifdef USE_DIRENT /* Set this for Sys V systems */
X+ #define STRUCT_DIRENT struct dirent
X+ #else
X+ #define STRUCT_DIRENT struct direct
X+ #endif
X+
X+ #include "HTML.h" /* For directory object building */
X+
X+ /* Controlling globals
X+ **
X+ */
X+
X+ extern int HTDirAccess;
X+
X+ /* Load a document on WWFS
X+ ** -----------------------
X+ **
X+ ** On entry,
X+ ** addr must point to the fully qualified hypertext reference.
X+ ** This is the physsical address of the file
X+ **
X+ ** On exit,
X+ ** returns <0 Error has occured.
X+ ** HTLOADED OK
X+ **
X+ */
X+ PUBLIC int HTLoadWWFS ARGS4 (
X+ CONST char *, addr,
X+ HTParentAnchor *, anchor,
X+ HTFormat, format_out,
X+ HTStream *, sink
X+ )
X+ {
X+ char * filename, * localname;
X+ HTFormat format;
X+ int fd = -1; /* Unix file descriptor number = INVALID */
X+ char * newname=0; /* Simplified name of file */
X+ HTAtom * encoding; /* @@ not used yet */
X+ int compressed;
X+ extern char *HTgeticonname(HTFormat, char *);
X+
X+ /* Reduce the filename to a basic form (hopefully unique!)
X+ */
X+ StrAllocCopy(newname, addr);
X+ filename=HTParse(newname, "", PARSE_PATH|PARSE_PUNCTUATION);
X+ free(newname);
X+
X+ format = HTFileFormat(filename, &encoding, WWW_PLAINTEXT, &compressed);
X+
X+ HTProgress ("Retrieving WWFS file.");
X+ if (ww_get(filename) < 0) {
X+ if (TRACE) fprintf(stderr, "HTWWFS: could not retrieve document");
X+ }
X+ localname = ww_localpath(filename);
X+ if (! localname) {
X+ if (TRACE) fprintf(stderr, "HTWWFS: client not configured properly");
X+ } else {
X+ struct stat dir_info;
X+ localname = strdup(localname);
X+
X+ #ifdef GOT_READ_DIR
X+
X+ /* Multiformat handling
X+ **
X+ ** If needed, scan directory to find a good file.
X+ ** Bug: we don't stat the file to find the length
X+ */
X+ if ( (strlen(localname) > strlen(MULTI_SUFFIX))
X+ && (0==strcmp(localname + strlen(localname) - strlen(MULTI_SUFFIX),
X+ MULTI_SUFFIX))) {
X+ DIR *dp;
X+
X+ STRUCT_DIRENT * dirbuf;
X+ float best = NO_VALUE_FOUND; /* So far best is bad */
X+ HTFormat best_rep = NULL; /* Set when rep found */
X+ STRUCT_DIRENT best_dirbuf; /* Best dir entry so far */
X+
X+ char * base = strrchr(localname, '/');
X+ int baselen;
X+
X+ if (!base || base == localname) goto forget_multi;
X+ *base++ = 0; /* Just got directory name */
X+ baselen = strlen(base)- strlen(MULTI_SUFFIX);
X+ base[baselen] = 0; /* Chop off suffix */
X+
X+ dp = opendir(localname);
X+ if (!dp) {
X+ forget_multi:
X+ free(localname);
X+ return HTLoadError(sink, 500,
X+ "Multiformat: directory scan failed.");
X+ }
X+
X+ while (dirbuf = readdir(dp)) {
X+ /* while there are directory entries to be read */
X+ if (dirbuf->d_ino == 0) continue;
X+ /* if the entry is not being used, skip it */
X+
X+ if (!strncmp(dirbuf->d_name, base, baselen)) {
X+ HTFormat rep = HTFileFormat(dirbuf->d_name, &encoding,
X+ WWW_PLAINTEXT, &compressed);
X+ float value = HTStackValue(rep, format_out,
X+ HTFileValue(dirbuf->d_name),
X+ 0.0 /* @@@@@@ */);
X+ if (value != NO_VALUE_FOUND) {
X+ if (TRACE) fprintf(stderr,
X+ "HTWWFS: value of presenting %s is %f\n",
X+ HTAtom_name(rep), value);
X+ if (value > best) {
X+ best_rep = rep;
X+ best = value;
X+ best_dirbuf = *dirbuf;
X+ }
X+ } /* if best so far */
X+ } /* if match */
X+
X+ } /* end while directory entries left to read */
X+ closedir(dp);
X+
X+ if (best_rep) {
X+ format = best_rep;
X+ base[-1] = '/'; /* Restore directory name */
X+ base[0] = 0;
X+ StrAllocCat(localname, best_dirbuf.d_name);
X+ goto open_file;
X+
X+ } else { /* If not found suitable file */
X+ free(localname);
X+ return HTLoadError(sink, 403, /* List formats? */
X+ "Could not find suitable representation for transmission.");
X+ }
X+ /*NOTREACHED*/
X+ } /* if multi suffix */
X+ /*
X+ ** Check to see if the 'localname' is in fact a directory. If it is
X+ ** create a new hypertext object containing a list of files and
X+ ** subdirectories contained in the directory. All of these are links
X+ ** to the directories or files listed.
X+ ** NB This assumes the existance of a type 'STRUCT_DIRENT', which will
X+ ** hold the directory entry, and a type 'DIR' which is used to point to
X+ ** the current directory being read.
X+ */
X+
X+
X+ if (stat(localname,&dir_info) == -1) { /* get file information */
X+ /* if can't read file information */
X+ if (TRACE) fprintf(stderr, "HTWWFS: can't stat %s\n", localname);
X+
X+ } else { /* Stat was OK */
X+
X+
X+ if (((dir_info.st_mode) & S_IFMT) == S_IFDIR) {
X+ /* if localname is a directory */
X+
X+ /*
X+ **
X+ ** Read the localdirectory and present a nicely formatted list to the user
X+ ** Re-wrote most of the read directory code here, excepting for the checking
X+ ** access.
X+ **
X+ ** Author: Charles Henrich (henrich@crh.cl.msu.edu) 10-09-93
X+ **
X+ ** This is still pretty messy, need to go through and clean it up at some point
X+ **
X+ */
X+
X+ /* Define some parameters that everyone should already have */
X+
X+ #ifndef MAXPATHLEN
X+ #define MAXPATHLEN 1024
X+ #endif
X+
X+ #ifndef BUFSIZ
X+ #define BUFSIZ 4096
X+ #endif
X+
X+ char filepath[MAXPATHLEN];
X+ char buffer[4096];
X+
X+ char *ptr;
X+ char *dataptr;
X+
X+ HText * HT;
X+ HTFormat format;
X+ HTAtom *pencoding;
X+
X+ struct stat statbuf;
X+ STRUCT_DIRENT * dp;
X+ DIR *dfp;
X+
X+ int cmpr;
X+ int count;
X+
X+ if (TRACE)
X+ fprintf(stderr,"%s is a directory\n",localname);
X+ HTProgress ("Listing directory.");
X+
X+ /* Check directory access.
X+ ** Selective access means only those directories containing a
X+ ** marker file can be browsed
X+ */
X+ if (HTDirAccess == HT_DIR_FORBID) {
X+ free(localname);
X+ return HTLoadError(sink, 403,
X+ "Directory browsing is not allowed.");
X+ }
X+
X+
X+ if (HTDirAccess == HT_DIR_SELECTIVE) {
X+ char * enable_file_name =
X+ malloc(strlen(localname)+ 1 +
X+ strlen(HT_DIR_ENABLE_FILE) + 1);
X+ strcpy(enable_file_name, localname);
X+ strcat(enable_file_name, "/");
X+ strcat(enable_file_name, HT_DIR_ENABLE_FILE);
X+ if (stat(enable_file_name, &statbuf) != 0) {
X+ free(localname);
X+ return HTLoadError(sink, 403,
X+ "Selective access is not enabled for this directory.");
X+ }
X+ }
X+
X+
X+ dfp = opendir(localname);
X+ if (!dfp) {
X+ free(localname);
X+ return HTLoadError(sink, 403, "This directory is not readable.");
X+ }
X+
X+ /* Suck the directory up into a list to be sorted */
X+
X+ HTSortInit();
X+
X+ for(dp=readdir(dfp);dp != NULL;dp=readdir(dfp))
X+ {
X+ ptr = malloc(strlen(dp->d_name)+1);
X+ if(ptr == NULL)
X+ {
X+ return HTLoadError(sink, 403, "Ran out of memory in directory read!");
X+ }
X+ strcpy(ptr,dp->d_name);
X+
X+ HTSortAdd(ptr);
X+ }
X+
X+ closedir(dfp);
X+
X+ /* Sort the dir list */
X+
X+ HTSortSort();
X+
X+ /* Start a new HTML page */
X+
X+ HT = HText_new();
X+ HText_beginAppend(HT);
X+ HText_appendText(HT, "<H1>WWFS Directory ");
X+ HText_appendText(HT, filename);
X+ HText_appendText(HT, "</H1>\n");
X+ HText_appendText(HT,"<DL>\n");
X+
X+ /* Sort the list and then spit it out in a nice form */
X+
X+ /* How this for a disgusting loop :) */
X+
X+ for(count=0,dataptr=HTSortFetch(count);
X+ dataptr != NULL;
X+ free(dataptr), count++, dataptr=HTSortFetch(count))
X+ {
X+
X+ /* We dont want to see . */
X+
X+ if(strcmp(dataptr,".") == 0) continue;
X+
X+ /* If its .. *and* the current directory is / dont show anything, otherwise
X+ /* print out a nice Parent Directory entry.
X+ /* */
X+
X+ if(strcmp(dataptr,"..") == 0)
X+ {
X+ if(strcmp(localname,"/") != 0)
X+ {
X+ strcpy(buffer,filename);
X+
X+ ptr = strrchr(buffer, '/');
X+
X+ if(ptr != NULL) *ptr='\0';
X+
X+ if(buffer[0] == '\0') strcpy(buffer,"/");
X+
X+ HText_appendText(HT,"<DD><A HREF=\"");
X+ HText_appendText(HT, buffer);
X+
X+ HText_appendText(HT,"\"><IMG SRC=\"");
X+ HText_appendText(HT, HTgeticonname(NULL, "directory"));
X+
X+ HText_appendText(HT,"\"> Parent Directory</a>");
X+ continue;
X+ }
X+ else
X+ {
X+ continue;
X+ }
X+ }
X+
X+ /* Get the filesize information from a stat, if we cant stat it, we probably */
X+ /* cant read it either, so ignore it. */
X+
X+ sprintf(filepath,"%s/%s",localname, dataptr);
X+
X+ if(stat(filepath, &statbuf) == -1) continue;
X+
X+ HText_appendText(HT,"<DD><A HREF=\"");
X+ HText_appendText (HT, filename);
X+
X+ if(localname[strlen(localname)-1] != '/')
X+ {
X+ HText_appendText (HT, "/");
X+ }
X+
X+ HText_appendText (HT, dataptr);
X+ HText_appendText (HT, "\">");
X+
X+ /* If its a directory, dump out a dir icon, dont bother with anything else */
X+ /* if it is a file try and figure out what type of file it is, and grab */
X+ /* the appropriate icon. If we cant figure it out, call it text. If its */
X+ /* a compressed file, call it binary no matter what */
X+
X+ if(statbuf.st_mode & S_IFDIR)
X+ {
X+ sprintf(buffer,"%s",dataptr);
X+ HText_appendText(HT, "<IMG SRC=\"");
X+ HText_appendText(HT, HTgeticonname(NULL, "directory"));
X+ HText_appendText(HT, "\"> ");
X+ }
X+ else
X+ {
X+ sprintf(buffer,"%s (%d bytes)",
X+ dataptr, statbuf.st_size);
X+
X+ format = HTFileFormat(dataptr, &pencoding,
X+ WWW_SOURCE, &cmpr);
X+
X+ /* If its executable then call it application, else it might as well be text */
X+
X+ if(cmpr == 0)
X+ {
X+ HText_appendText(HT, "<IMG SRC=\"");
X+ if((statbuf.st_mode & S_IXUSR) ||
X+ (statbuf.st_mode & S_IXGRP) ||
X+ (statbuf.st_mode & S_IXOTH))
X+ {
X+ HText_appendText(HT,
X+ HTgeticonname(format, "application"));
X+ }
X+ else
X+ {
X+ HText_appendText(HT,
X+ HTgeticonname(format, "text"));
X+ }
X+ HText_appendText(HT, "\"> ");
X+ }
X+ else
X+ {
X+ HText_appendText(HT, "<IMG SRC=\"");
X+ HText_appendText(HT, HTgeticonname(NULL, "application"));
X+ HText_appendText(HT, "\"> ");
X+ }
X+ }
X+
X+ /* Spit out the anchor */
X+
X+ HText_appendText (HT, buffer);
X+ HText_appendText (HT, "</A>\n");
X+ }
X+
X+ /* End of list, clean up and we are done */
X+
X+ HText_appendText (HT, "</DL>\n");
X+ HText_endAppend (HT);
X+ free(localname);
X+ return HT_LOADED;
X+ } /* end if localname is directory */
X+
X+ } /* end if file stat worked */
X+
X+ /* End of directory reading section
X+ */
X+ #endif
X+ open_file:
X+ {
X+ FILE * fp = fopen(localname,"r");
X+ if(TRACE) fprintf (stderr, "HTWWFS: Opening `%s' gives %p\n",
X+ localname, (void*)fp);
X+ if (fp) { /* Good! */
X+ if (HTEditable(localname)) {
X+ HTAtom * put = HTAtom_for("PUT");
X+ HTList * methods = HTAnchor_methods(anchor);
X+ if (HTList_indexOf(methods, put) == (-1)) {
X+ HTList_addObject(methods, put);
X+ }
X+ }
X+ free(localname);
X+ HTParseFile(format, format_out, anchor, fp, sink, compressed);
X+ fclose(fp);
X+ return HT_LOADED;
X+ } /* If succesfull open */
X+ } /* scope of fp */
X+ } /* local unix file system */
X+ free(filename);
X+ }
X+
X+ /* Protocol descriptors
X+ */
X+ PUBLIC HTProtocol HTWWFS = { "wwfs", HTLoadWWFS, 0 };
Xdiff -c -r -N Mosaic-2.1/libwww2/Makefile Mosaic-2.1+wwfs/libwww2/Makefile
X*** Mosaic-2.1/libwww2/Makefile Mon Nov 1 13:04:46 1993
X--- Mosaic-2.1+wwfs/libwww2/Makefile Tue Dec 21 07:17:31 1993
X***************
X*** 30,35 ****
X--- 30,36 ----
X HTTelnet.c \
X HTWSRC.c \
X HTWriter.c \
X+ HTWWFS.c \
X SGML.c \
X HTWAIS.c \
X HTIcon.c \
Xdiff -c -r -N Mosaic-2.1/src/Makefile Mosaic-2.1+wwfs/src/Makefile
X*** Mosaic-2.1/src/Makefile Sun Nov 7 16:32:05 1993
X--- Mosaic-2.1+wwfs/src/Makefile Tue Dec 21 07:17:31 1993
X***************
X*** 5,11 ****
X LIBXMX_INC = ../libXmx
X
X PROGRAM_LIBS = $(LIBWWW_DIR)/libwww.a $(LIBHTMLW_DIR)/libhtmlw.a $(LIBXMX_DIR)/libXmx.a
X! LIBS = $(PROGRAM_LIBS) $(X_LIBS) $(DTM_LIBS) $(HDF_LIBS) $(WAIS_LIBS) $(MATH_LIB) $(SYS_LIBS)
X
X CFILES = main.c gui.c gui-dialogs.c gui-menubar.c gui-documents.c mo-www.c\
X mo-dtm.c hotlist.c whine.c history.c\
X--- 5,11 ----
X LIBXMX_INC = ../libXmx
X
X PROGRAM_LIBS = $(LIBWWW_DIR)/libwww.a $(LIBHTMLW_DIR)/libhtmlw.a $(LIBXMX_DIR)/libXmx.a
X! LIBS = $(PROGRAM_LIBS) $(X_LIBS) $(DTM_LIBS) $(HDF_LIBS) $(WAIS_LIBS) $(WWFS_LIBS) $(MATH_LIB) $(SYS_LIBS)
X
X CFILES = main.c gui.c gui-dialogs.c gui-menubar.c gui-documents.c mo-www.c\
X mo-dtm.c hotlist.c whine.c history.c\
Xdiff -c -r -N Mosaic-2.1/src/history.c Mosaic-2.1+wwfs/src/history.c
X*** Mosaic-2.1/src/history.c Sun Dec 5 13:43:49 1993
X--- Mosaic-2.1+wwfs/src/history.c Tue Dec 21 07:17:31 1993
X***************
X*** 349,354 ****
X--- 349,365 ----
X goto done;
X }
X }
X+
X+ if (!strncmp (url, "wwfs:", 5))
X+ {
X+ /* It's a WWFS file. */
X+ foo1 = url + 5;
X+
X+ title = (char *)malloc ((strlen (foo1) + 32) * sizeof (char));
X+ sprintf (title, "WWFS file %s\0", foo1);
X+
X+ goto done;
X+ }
X
X /* Punt... */
X title = (char *) malloc ((strlen (url) + 24) * sizeof (char));
Xdiff -c -r -N Mosaic-2.1/src/mo-www.c Mosaic-2.1+wwfs/src/mo-www.c
X*** Mosaic-2.1/src/mo-www.c Sun Dec 5 13:43:56 1993
X--- Mosaic-2.1+wwfs/src/mo-www.c Tue Dec 21 07:17:32 1993
X***************
X*** 775,781 ****
X /* ------------------------------ dumb stuff ------------------------------ */
X
X /* Grumble grumble... */
X! #if defined(ultrix) || defined(VMS) || defined(NeXT) || defined(M4310) || defined(vax)
X char *strdup (char *str)
X {
X char *dup;
X--- 775,784 ----
X /* ------------------------------ dumb stuff ------------------------------ */
X
X /* Grumble grumble... */
X! /*
X! * #if defined(ultrix) || defined(VMS) || defined(NeXT) || defined(M4310) || defined(vax)
X! */
X! #if defined(VMS) || defined(NeXT) || defined(M4310) || defined(vax)
X char *strdup (char *str)
X {
X char *dup;
END_OF_FILE
if test 32538 -ne `wc -c <'mosaic/Mosaic-2.1+wwfs.diff'`; then
echo shar: \"'mosaic/Mosaic-2.1+wwfs.diff'\" unpacked with wrong size!
fi
# end of 'mosaic/Mosaic-2.1+wwfs.diff'
fi
echo shar: End of archive 10 \(of 22\).
cp /dev/null ark10isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 22 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still must unpack the following archives:
echo " " ${MISSING}
fi
exit 0
exit 0 # Just in case...