$! gateway allowing w3 access to docdb
$!
$! This is, like many W3 gateways to older systems, a bit of a hack.
$! Ifthe underlying database changes, then the person who does that
$! can make a much neater W3 gateway when they do that.
$! If noone does, then this can stand.
$!
$! Document identifier syntax:
$!
$! /docdb/doc/PN-0001
$! /docdb/anything?key+key List documents under keywords
$ @docdb$root:[com]setup
$! set verify
$ socdev = p1
$ arg = p2
$ keys = p3
$ delim = "/"
$ cr[0,8]=13
$ lf[0,8]=10
$ nl = "''cr'''lf'"
$! write sys$output " writing to ''socdev'"
$! open/write client sys$output: ! for inet daemon only
$ open/write client 'socdev' ! for inet daemon only
$ write client "" ! We always allow a query
$ if keys .nes. ""
$ then
$!
$! KEYWORD QUERY
$!
$ write client "
''keys' in DOCDB''nl'"
$ title = keys
$ write client "''keys'
''nl'"
$!
$ next_key:
$ plus= f$locate("+", keys)
$ key = f$extract(0, plus, keys)
$ if plus .ne. f$length(keys)
$ then
$ keys = f$extract(plus+1, 132, keys)
$ else
$ keys = ""
$ endif
$ write client "''key'
", nl
$ open/read/error=bad_key list docdb$doc_lists:list_of_'key'.txt
$ write client "''nl'"
$ loop:
$ read/error=endloop list line
$ if f$extract(1,1,line) .eqs. " " ! skip col 1 altogether
$ then ! start with space
$ if f$extract(0,19,line).eqs." "
$ then
$ if f$extract(19,1,line).nes." "
$ then
$ write client f$extract(19,132,line), nl ! Contnuation
$ goto loop ! continue
$ endif
$ endif
$ ! (deal with title line? don't bother)
$ else ! start with non-space
$ if f$extract(8,1,line).eqs." "
$ then ! Document description first line
$ doc = f$edit(f$extract(1,3,line), "collapse") + -
"-" + f$extract(4,4,line) ! doc number
$ write client "- "
$ write client f$extract(1,8,line), "
- ", nl
$ write client f$extract(19,132,line), nl
$ endif
$ endif ! start with non-space
$ goto loop
$ endloop:
$ write client "
''nl'"
$ if keys .nes. "" then goto next_key
$ exit
$!
$ bad_key:
$ write client """''key'"" is not a recognised keyword.", nl
$ write client "(See list of keywords -- to be specified)", nl
$ exit
$ endif
$!
$! DOCUMENT RETRIEVAL
$!
$ scheme = f$element(1, delim, arg)
$ if scheme .nes. "docdb" then goto bad_id
$!
$ L1 = f$element(2, delim, arg)
$ if L1 .nes. delim
$ then
$ L2 = f$element(3, delim, arg)
$ if L1 .eqs. "doc"
$ then
$
$ write client "Document ''L2' in DOCDB''nl'"
$ write client "''nl'"
$ open/read/error=sorry list docdb$documents:'L2'.doc
$ loop2:
$ read/error=endloop2 list line
$ write client line, nl
$ goto loop2
$ endloop2:
$ exit
$ sorry:
$ write client "Sorry, the document ''L2' is not available online''nl'"
$ write client "For a paper copy, please contact the computing", nl
$ write client "division library, (708) 840 3934", nl
$ exit
$ endif
$ endif ! No first level name
$! (falls though)
$ bad_id:
$ write client "Fermilab DOCDB database", nl
$ write client "DOCDB
", nl
$ write client "You can search for documents by keyword.", nl
$ write client "More than one keyword will give you a separate list for", -
" each keyword. Keywords include surnames of authors.", nl
$ write client "Alternatively, you can read the (long) lists of", nl
$ write client "all documents,", nl
$ write client "supported software,", nl
$ write client "hardware notes, and", nl
$ write client "internal OLS notes.", nl
$ write client "
", nl
$ write client "If you find any inconsistency in this data", nl
$ write client "please mail ruth@fnal.fnal.gov", nl
$ write client "", nl
$ write client "", nl
$ exit