Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / vax / mimlib / lup-network.mud
1 ;"*****************************************************************************
2
3   This file defines library update primitives for use with a network library.
4   See PROTOCOLS.FORMAT for definition of server protocols. This file is
5   spliced into LUP (vax version).
6
7   LUP-NETWORK.MUD: EDIT HISTORY          Machine Dependent (For use under UNIX)
8
9   COMPILATION: Spliced in at compile time.
10
11   JUN84    [Shane] - Created.
12   18OCT84  [Shane] - Commented, cleaned up.
13   27OCT84  [Shane] - New protocols.
14   ****************************************************************************"
15
16 ;"NET-FILE-COPY --
17   Effect:   Copies FROM to remote server. CNTL is the control connection,
18             used to send the file length and receive the acknowledgement.
19             DATA is the data connection over which the file is transmitted.
20   Modifies: FROM, DATA, CNTL
21   Returns:  T if transfer acknowledged, FALSE otherwise.
22   Requires: DATA, CNTL are open to server awaiting file transaction."
23
24 <DEFINE NET-FILE-COPY (FROM:<CHANNEL 'DISK>
25                        DATA:<CHANNEL 'NETWORK> CNTL:<CHANNEL 'NETWORK>
26                        "AUX" (U:UVECTOR <STACK <UVECTOR <FILE-LENGTH .FROM>>>))
27    <CHANNEL-OP .CNTL WRITE-BUFFER .U>
28    <REPEAT ((BUFFER:STRING <STACK <ISTRING ,MAXSTRS>>) AMOUNT:FIX)
29       <SET AMOUNT <OR <CHANNEL-OP .FROM READ-BUFFER .BUFFER> 0>>
30       <COND (<==? .AMOUNT 0>
31              <RETURN <AND <GET-REMOTE-RESPONSE .CNTL .U> <==? <1 .U> ,ACK>>>)
32             (T
33              <CHANNEL-OP .DATA WRITE-BUFFER .BUFFER .AMOUNT>)>>>
34 \f
35 ;"REMOTE-UPDATE --
36   Effect:   Add the module represented by RECORD and associated FILES to
37             remote library LIBC.
38   Modifies: LIBC
39   Returns:  T if update is successful, otherwise FALSE.
40   Requires: LIBC is channel open to server processing file request. RECORD
41             is properly formatted library record as defined in LIBRARY.FORMAT.
42             The order of the file spec vectors (see SEARCH in ABSTR) in FILES
43             is the same as the order of the file names in RECORD (i.e. MSUBR,
44             MUD, ABSTR, DOC), with FALSE indicating omission."
45
46 <DEFINE REMOTE-UPDATE (RECORD:UVECTOR LIBC:<CHANNEL 'NETWORK>
47                        "TUPLE" FILES:<PRIMTYPE VECTOR>)
48    <PROG ((U:UVECTOR <STACK <IUVECTOR 4>>) (OUTCHAN:CHANNEL .OUTCHAN)
49           DATA:<OR <CHANNEL 'NETWORK> FALSE> FROM:<OR <CHANNEL 'DISK> FALSE>)
50       ;"Request update, send data address, connect data channel."
51       <CHANNEL-OP .LIBC WRITE-BUFFER <1 .U ,UPDATE-ADD> 1>
52       <CHANNEL-OP .LIBC WRITE-BUFFER .RECORD <LHALF <1 .RECORD>>>
53       <CHANNEL-OP .LIBC LISTEN-ON-DATA>
54       <CHANNEL-OP .LIBC GET-DATA-ADDRESS <CHTYPE .U NET-ADDRESS>>
55       <CHANNEL-OP .LIBC WRITE-BUFFER .U>
56       <COND (<NOT <SET DATA <CHANNEL-OP .LIBC CONNECT-DATA-CHANNEL>>>
57              <ERROR CANT-OPEN-DATA-CONNECTION!-ERRORS
58                     <SYS-ERR "" .DATA %<>> REMOTE-UPDATE>
59              <RETURN %<>>)>
60       ;"Copy files."
61       <MAPF %<>
62             <FUNCTION (FN:<OR <VECTOR [5 STRING]> FALSE>)
63                <COND (.FN
64                       <PRINTSTRING "Copying ">
65                       <PRINTSTRING <1 .FN>>
66                       <CRLF>
67                       <COND (<NOT <SET FROM <CHANNEL-OPEN DISK <1 .FN> "READ">>>
68                              <ERROR FILE-NOT-FOUND!-ERRORS
69                                     <1 .FN> .FROM REMOTE-UPDATE>
70                              <RETURN %<>>)
71                             (<NOT <NET-FILE-COPY .FROM .DATA .LIBC>>
72                              <CHANNEL-OP .LIBC CLOSE-DATA-CHANNEL>
73                              <CLOSE .FROM>
74                              <RETURN %<>>)>)>>
75             .FILES>
76       <CHANNEL-OP .LIBC CLOSE-DATA-CHANNEL>
77       <AND <GET-REMOTE-RESPONSE .LIBC .U> <==? <1 .U> ,ACK>>>>