(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "RPC2") (il:filecreated "23-May-88 18:55:42" il:{eris}rpc>current>rpcos.\;11 30632 il:|changes| il:|to:| (il:vars il:rpcoscoms) il:|previous| il:|date:| "20-May-88 12:56:30" il:{eris}rpc>current>rpcos.\;9) ; Copyright (c) 1988 by Xerox Corporation. All rights reserved. (il:prettycomprint il:rpcoscoms) (il:rpaqq il:rpcoscoms ((il:* il:|;;| "OS networking code") (il:props (il:rpcos il:makefile-environment il:filetype)) (eval-when (compile) (il:files (il:loadcomp) il:llsubrs)) (il:functions os-exchange-udp-packets os-resolve-host read-string-address) (il:* il:|;;| "XDR data block") (il:records xdr-data-block) (il:variables *cells-per-xdr-data-block* *free-xdr-data-blocks* *max-xdr-data-blocks* *words-per-cell*) (il:functions xdr-initialize-cache allocate-xdr-data-block reclaim-xdr-data-block) (il:functions foldlo unfold) (il:functions os-udp-getbyte os-udp-getbytes os-udp-putbyte os-udp-putbytes os-udp-getcell os-udp-putcell os-udp-getoffset os-udp-putoffset) (eval-when (load) (il:p (xdr-initialize-cache))))) (il:* il:|;;| "OS networking code") (il:putprops il:rpcos il:makefile-environment (:readtable "XCL" :package "RPC2")) (il:putprops il:rpcos il:filetype :compile-file) (eval-when (compile) (il:filesload (il:loadcomp) il:llsubrs) ) (defun os-exchange-udp-packets (rpcstream msec-until-timeout msec-between-tries errorflg) (let ((xdr-arg-block (rpc-stream-outstream rpcstream)) (xdr-arg-block-length (rpc-stream-outbyteptr rpcstream)) (xdr-result-block (rpc-stream-instream rpcstream))) (setq xdr-arg-block (il:\\dtest xdr-arg-block (quote xdr-data-block))) (setq xdr-result-block (il:\\dtest xdr-result-block (quote xdr-data-block))) (il:* il:|;;| "Need to add a dispatch on the type of the error.") (unless (il:subrcall il:rpc-call (rpc-stream-os-destaddr rpcstream) (rpc-stream-ipsocket rpcstream) xdr-arg-block xdr-result-block msec-until-timeout msec-between-tries xdr-arg-block-length) (case errorflg (:noerrors (throw (quote goforit) nil)) (:returnerrors (throw (quote goforit) (quote (error timeout)))) (otherwise (error "RPC Call failed")))) (il:* il:|;;| "Put the result block in the instream.") (setf (rpc-stream-instream rpcstream) xdr-result-block) (progn (when *debug* (format-t "It returned!~%") (and (numberp *debug*) (> *debug* 5) (break "Reply Packet in INSTREAM of RPC-STREAM *RPCSTREAM*"))) t))) (defun os-resolve-host (destination) (il:* il:|;;;| " Convert an address from it's string representation into a number.") (let ((addr (read-string-address (if (symbolp destination) destination (intern destination "IL"))))) (if addr addr destination))) (defun read-string-address (string-or-atom) (il:|for| il:char il:|instring| (il:mkstring string-or-atom) il:|bind| (il:result il:_ (il:ncreate (quote il:fixp))) (il:index il:_ 0) byte il:|do| (il:|if| (> il:index 3) il:|then| (il:* il:\; "Got 3 parts and there's still more to go, must be bad") (return nil) il:|elseif| (eq il:char (il:charcode il:\.)) il:|then| (il:|if| byte il:|then| (il:\\putbasebyte il:result il:index byte)) (il:setq byte nil) (il:|add| il:index 1) il:|elseif| (and (il:setq il:char (digit-char-p (int-char il:char))) (< (il:setq byte (+ (il:|if| byte il:|then| (il:times byte 10) il:|else| 0) il:char)) 256)) il:|then| (il:* il:\; "Accumulated decimal digit, and we haven't overflowed a byte yet") il:|else| (il:* il:\; "Malformed") (return nil)) il:|finally| (il:|if| byte il:|then| (il:\\putbasebyte il:result il:index byte) (il:|add| il:index 1)) (return (and (eq il:index 4) il:result)))) (il:* il:|;;| "XDR data block") (il:declare\: il:eval@compile (il:datatype xdr-data-block ((xdr-public 500 il:word))) ) (il:/declaredatatype (quote xdr-data-block) (quote (il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word il:word)) (quote ((xdr-data-block 0 (il:bits . 15)) (xdr-data-block 1 (il:bits . 15)) (xdr-data-block 2 (il:bits . 15)) (xdr-data-block 3 (il:bits . 15)) (xdr-data-block 4 (il:bits . 15)) (xdr-data-block 5 (il:bits . 15)) (xdr-data-block 6 (il:bits . 15)) (xdr-data-block 7 (il:bits . 15)) (xdr-data-block 8 (il:bits . 15)) (xdr-data-block 9 (il:bits . 15)) (xdr-data-block 10 (il:bits . 15)) (xdr-data-block 11 (il:bits . 15)) (xdr-data-block 12 (il:bits . 15)) (xdr-data-block 13 (il:bits . 15)) (xdr-data-block 14 (il:bits . 15)) (xdr-data-block 15 (il:bits . 15)) (xdr-data-block 16 (il:bits . 15)) (xdr-data-block 17 (il:bits . 15)) (xdr-data-block 18 (il:bits . 15)) (xdr-data-block 19 (il:bits . 15)) (xdr-data-block 20 (il:bits . 15)) (xdr-data-block 21 (il:bits . 15)) (xdr-data-block 22 (il:bits . 15)) (xdr-data-block 23 (il:bits . 15)) (xdr-data-block 24 (il:bits . 15)) (xdr-data-block 25 (il:bits . 15)) (xdr-data-block 26 (il:bits . 15)) (xdr-data-block 27 (il:bits . 15)) (xdr-data-block 28 (il:bits . 15)) (xdr-data-block 29 (il:bits . 15)) (xdr-data-block 30 (il:bits . 15)) (xdr-data-block 31 (il:bits . 15)) (xdr-data-block 32 (il:bits . 15)) (xdr-data-block 33 (il:bits . 15)) (xdr-data-block 34 (il:bits . 15)) (xdr-data-block 35 (il:bits . 15)) (xdr-data-block 36 (il:bits . 15)) (xdr-data-block 37 (il:bits . 15)) (xdr-data-block 38 (il:bits . 15)) (xdr-data-block 39 (il:bits . 15)) (xdr-data-block 40 (il:bits . 15)) (xdr-data-block 41 (il:bits . 15)) (xdr-data-block 42 (il:bits . 15)) (xdr-data-block 43 (il:bits . 15)) (xdr-data-block 44 (il:bits . 15)) (xdr-data-block 45 (il:bits . 15)) (xdr-data-block 46 (il:bits . 15)) (xdr-data-block 47 (il:bits . 15)) (xdr-data-block 48 (il:bits . 15)) (xdr-data-block 49 (il:bits . 15)) (xdr-data-block 50 (il:bits . 15)) (xdr-data-block 51 (il:bits . 15)) (xdr-data-block 52 (il:bits . 15)) (xdr-data-block 53 (il:bits . 15)) (xdr-data-block 54 (il:bits . 15)) (xdr-data-block 55 (il:bits . 15)) (xdr-data-block 56 (il:bits . 15)) (xdr-data-block 57 (il:bits . 15)) (xdr-data-block 58 (il:bits . 15)) (xdr-data-block 59 (il:bits . 15)) (xdr-data-block 60 (il:bits . 15)) (xdr-data-block 61 (il:bits . 15)) (xdr-data-block 62 (il:bits . 15)) (xdr-data-block 63 (il:bits . 15)) (xdr-data-block 64 (il:bits . 15)) (xdr-data-block 65 (il:bits . 15)) (xdr-data-block 66 (il:bits . 15)) (xdr-data-block 67 (il:bits . 15)) (xdr-data-block 68 (il:bits . 15)) (xdr-data-block 69 (il:bits . 15)) (xdr-data-block 70 (il:bits . 15)) (xdr-data-block 71 (il:bits . 15)) (xdr-data-block 72 (il:bits . 15)) (xdr-data-block 73 (il:bits . 15)) (xdr-data-block 74 (il:bits . 15)) (xdr-data-block 75 (il:bits . 15)) (xdr-data-block 76 (il:bits . 15)) (xdr-data-block 77 (il:bits . 15)) (xdr-data-block 78 (il:bits . 15)) (xdr-data-block 79 (il:bits . 15)) (xdr-data-block 80 (il:bits . 15)) (xdr-data-block 81 (il:bits . 15)) (xdr-data-block 82 (il:bits . 15)) (xdr-data-block 83 (il:bits . 15)) (xdr-data-block 84 (il:bits . 15)) (xdr-data-block 85 (il:bits . 15)) (xdr-data-block 86 (il:bits . 15)) (xdr-data-block 87 (il:bits . 15)) (xdr-data-block 88 (il:bits . 15)) (xdr-data-block 89 (il:bits . 15)) (xdr-data-block 90 (il:bits . 15)) (xdr-data-block 91 (il:bits . 15)) (xdr-data-block 92 (il:bits . 15)) (xdr-data-block 93 (il:bits . 15)) (xdr-data-block 94 (il:bits . 15)) (xdr-data-block 95 (il:bits . 15)) (xdr-data-block 96 (il:bits . 15)) (xdr-data-block 97 (il:bits . 15)) (xdr-data-block 98 (il:bits . 15)) (xdr-data-block 99 (il:bits . 15)) (xdr-data-block 100 (il:bits . 15)) (xdr-data-block 101 (il:bits . 15)) (xdr-data-block 102 (il:bits . 15)) (xdr-data-block 103 (il:bits . 15)) (xdr-data-block 104 (il:bits . 15)) (xdr-data-block 105 (il:bits . 15)) (xdr-data-block 106 (il:bits . 15)) (xdr-data-block 107 (il:bits . 15)) (xdr-data-block 108 (il:bits . 15)) (xdr-data-block 109 (il:bits . 15)) (xdr-data-block 110 (il:bits . 15)) (xdr-data-block 111 (il:bits . 15)) (xdr-data-block 112 (il:bits . 15)) (xdr-data-block 113 (il:bits . 15)) (xdr-data-block 114 (il:bits . 15)) (xdr-data-block 115 (il:bits . 15)) (xdr-data-block 116 (il:bits . 15)) (xdr-data-block 117 (il:bits . 15)) (xdr-data-block 118 (il:bits . 15)) (xdr-data-block 119 (il:bits . 15)) (xdr-data-block 120 (il:bits . 15)) (xdr-data-block 121 (il:bits . 15)) (xdr-data-block 122 (il:bits . 15)) (xdr-data-block 123 (il:bits . 15)) (xdr-data-block 124 (il:bits . 15)) (xdr-data-block 125 (il:bits . 15)) (xdr-data-block 126 (il:bits . 15)) (xdr-data-block 127 (il:bits . 15)) (xdr-data-block 128 (il:bits . 15)) (xdr-data-block 129 (il:bits . 15)) (xdr-data-block 130 (il:bits . 15)) (xdr-data-block 131 (il:bits . 15)) (xdr-data-block 132 (il:bits . 15)) (xdr-data-block 133 (il:bits . 15)) (xdr-data-block 134 (il:bits . 15)) (xdr-data-block 135 (il:bits . 15)) (xdr-data-block 136 (il:bits . 15)) (xdr-data-block 137 (il:bits . 15)) (xdr-data-block 138 (il:bits . 15)) (xdr-data-block 139 (il:bits . 15)) (xdr-data-block 140 (il:bits . 15)) (xdr-data-block 141 (il:bits . 15)) (xdr-data-block 142 (il:bits . 15)) (xdr-data-block 143 (il:bits . 15)) (xdr-data-block 144 (il:bits . 15)) (xdr-data-block 145 (il:bits . 15)) (xdr-data-block 146 (il:bits . 15)) (xdr-data-block 147 (il:bits . 15)) (xdr-data-block 148 (il:bits . 15)) (xdr-data-block 149 (il:bits . 15)) (xdr-data-block 150 (il:bits . 15)) (xdr-data-block 151 (il:bits . 15)) (xdr-data-block 152 (il:bits . 15)) (xdr-data-block 153 (il:bits . 15)) (xdr-data-block 154 (il:bits . 15)) (xdr-data-block 155 (il:bits . 15)) (xdr-data-block 156 (il:bits . 15)) (xdr-data-block 157 (il:bits . 15)) (xdr-data-block 158 (il:bits . 15)) (xdr-data-block 159 (il:bits . 15)) (xdr-data-block 160 (il:bits . 15)) (xdr-data-block 161 (il:bits . 15)) (xdr-data-block 162 (il:bits . 15)) (xdr-data-block 163 (il:bits . 15)) (xdr-data-block 164 (il:bits . 15)) (xdr-data-block 165 (il:bits . 15)) (xdr-data-block 166 (il:bits . 15)) (xdr-data-block 167 (il:bits . 15)) (xdr-data-block 168 (il:bits . 15)) (xdr-data-block 169 (il:bits . 15)) (xdr-data-block 170 (il:bits . 15)) (xdr-data-block 171 (il:bits . 15)) (xdr-data-block 172 (il:bits . 15)) (xdr-data-block 173 (il:bits . 15)) (xdr-data-block 174 (il:bits . 15)) (xdr-data-block 175 (il:bits . 15)) (xdr-data-block 176 (il:bits . 15)) (xdr-data-block 177 (il:bits . 15)) (xdr-data-block 178 (il:bits . 15)) (xdr-data-block 179 (il:bits . 15)) (xdr-data-block 180 (il:bits . 15)) (xdr-data-block 181 (il:bits . 15)) (xdr-data-block 182 (il:bits . 15)) (xdr-data-block 183 (il:bits . 15)) (xdr-data-block 184 (il:bits . 15)) (xdr-data-block 185 (il:bits . 15)) (xdr-data-block 186 (il:bits . 15)) (xdr-data-block 187 (il:bits . 15)) (xdr-data-block 188 (il:bits . 15)) (xdr-data-block 189 (il:bits . 15)) (xdr-data-block 190 (il:bits . 15)) (xdr-data-block 191 (il:bits . 15)) (xdr-data-block 192 (il:bits . 15)) (xdr-data-block 193 (il:bits . 15)) (xdr-data-block 194 (il:bits . 15)) (xdr-data-block 195 (il:bits . 15)) (xdr-data-block 196 (il:bits . 15)) (xdr-data-block 197 (il:bits . 15)) (xdr-data-block 198 (il:bits . 15)) (xdr-data-block 199 (il:bits . 15)) (xdr-data-block 200 (il:bits . 15)) (xdr-data-block 201 (il:bits . 15)) (xdr-data-block 202 (il:bits . 15)) (xdr-data-block 203 (il:bits . 15)) (xdr-data-block 204 (il:bits . 15)) (xdr-data-block 205 (il:bits . 15)) (xdr-data-block 206 (il:bits . 15)) (xdr-data-block 207 (il:bits . 15)) (xdr-data-block 208 (il:bits . 15)) (xdr-data-block 209 (il:bits . 15)) (xdr-data-block 210 (il:bits . 15)) (xdr-data-block 211 (il:bits . 15)) (xdr-data-block 212 (il:bits . 15)) (xdr-data-block 213 (il:bits . 15)) (xdr-data-block 214 (il:bits . 15)) (xdr-data-block 215 (il:bits . 15)) (xdr-data-block 216 (il:bits . 15)) (xdr-data-block 217 (il:bits . 15)) (xdr-data-block 218 (il:bits . 15)) (xdr-data-block 219 (il:bits . 15)) (xdr-data-block 220 (il:bits . 15)) (xdr-data-block 221 (il:bits . 15)) (xdr-data-block 222 (il:bits . 15)) (xdr-data-block 223 (il:bits . 15)) (xdr-data-block 224 (il:bits . 15)) (xdr-data-block 225 (il:bits . 15)) (xdr-data-block 226 (il:bits . 15)) (xdr-data-block 227 (il:bits . 15)) (xdr-data-block 228 (il:bits . 15)) (xdr-data-block 229 (il:bits . 15)) (xdr-data-block 230 (il:bits . 15)) (xdr-data-block 231 (il:bits . 15)) (xdr-data-block 232 (il:bits . 15)) (xdr-data-block 233 (il:bits . 15)) (xdr-data-block 234 (il:bits . 15)) (xdr-data-block 235 (il:bits . 15)) (xdr-data-block 236 (il:bits . 15)) (xdr-data-block 237 (il:bits . 15)) (xdr-data-block 238 (il:bits . 15)) (xdr-data-block 239 (il:bits . 15)) (xdr-data-block 240 (il:bits . 15)) (xdr-data-block 241 (il:bits . 15)) (xdr-data-block 242 (il:bits . 15)) (xdr-data-block 243 (il:bits . 15)) (xdr-data-block 244 (il:bits . 15)) (xdr-data-block 245 (il:bits . 15)) (xdr-data-block 246 (il:bits . 15)) (xdr-data-block 247 (il:bits . 15)) (xdr-data-block 248 (il:bits . 15)) (xdr-data-block 249 (il:bits . 15)) (xdr-data-block 250 (il:bits . 15)) (xdr-data-block 251 (il:bits . 15)) (xdr-data-block 252 (il:bits . 15)) (xdr-data-block 253 (il:bits . 15)) (xdr-data-block 254 (il:bits . 15)) (xdr-data-block 255 (il:bits . 15)) (xdr-data-block 256 (il:bits . 15)) (xdr-data-block 257 (il:bits . 15)) (xdr-data-block 258 (il:bits . 15)) (xdr-data-block 259 (il:bits . 15)) (xdr-data-block 260 (il:bits . 15)) (xdr-data-block 261 (il:bits . 15)) (xdr-data-block 262 (il:bits . 15)) (xdr-data-block 263 (il:bits . 15)) (xdr-data-block 264 (il:bits . 15)) (xdr-data-block 265 (il:bits . 15)) (xdr-data-block 266 (il:bits . 15)) (xdr-data-block 267 (il:bits . 15)) (xdr-data-block 268 (il:bits . 15)) (xdr-data-block 269 (il:bits . 15)) (xdr-data-block 270 (il:bits . 15)) (xdr-data-block 271 (il:bits . 15)) (xdr-data-block 272 (il:bits . 15)) (xdr-data-block 273 (il:bits . 15)) (xdr-data-block 274 (il:bits . 15)) (xdr-data-block 275 (il:bits . 15)) (xdr-data-block 276 (il:bits . 15)) (xdr-data-block 277 (il:bits . 15)) (xdr-data-block 278 (il:bits . 15)) (xdr-data-block 279 (il:bits . 15)) (xdr-data-block 280 (il:bits . 15)) (xdr-data-block 281 (il:bits . 15)) (xdr-data-block 282 (il:bits . 15)) (xdr-data-block 283 (il:bits . 15)) (xdr-data-block 284 (il:bits . 15)) (xdr-data-block 285 (il:bits . 15)) (xdr-data-block 286 (il:bits . 15)) (xdr-data-block 287 (il:bits . 15)) (xdr-data-block 288 (il:bits . 15)) (xdr-data-block 289 (il:bits . 15)) (xdr-data-block 290 (il:bits . 15)) (xdr-data-block 291 (il:bits . 15)) (xdr-data-block 292 (il:bits . 15)) (xdr-data-block 293 (il:bits . 15)) (xdr-data-block 294 (il:bits . 15)) (xdr-data-block 295 (il:bits . 15)) (xdr-data-block 296 (il:bits . 15)) (xdr-data-block 297 (il:bits . 15)) (xdr-data-block 298 (il:bits . 15)) (xdr-data-block 299 (il:bits . 15)) (xdr-data-block 300 (il:bits . 15)) (xdr-data-block 301 (il:bits . 15)) (xdr-data-block 302 (il:bits . 15)) (xdr-data-block 303 (il:bits . 15)) (xdr-data-block 304 (il:bits . 15)) (xdr-data-block 305 (il:bits . 15)) (xdr-data-block 306 (il:bits . 15)) (xdr-data-block 307 (il:bits . 15)) (xdr-data-block 308 (il:bits . 15)) (xdr-data-block 309 (il:bits . 15)) (xdr-data-block 310 (il:bits . 15)) (xdr-data-block 311 (il:bits . 15)) (xdr-data-block 312 (il:bits . 15)) (xdr-data-block 313 (il:bits . 15)) (xdr-data-block 314 (il:bits . 15)) (xdr-data-block 315 (il:bits . 15)) (xdr-data-block 316 (il:bits . 15)) (xdr-data-block 317 (il:bits . 15)) (xdr-data-block 318 (il:bits . 15)) (xdr-data-block 319 (il:bits . 15)) (xdr-data-block 320 (il:bits . 15)) (xdr-data-block 321 (il:bits . 15)) (xdr-data-block 322 (il:bits . 15)) (xdr-data-block 323 (il:bits . 15)) (xdr-data-block 324 (il:bits . 15)) (xdr-data-block 325 (il:bits . 15)) (xdr-data-block 326 (il:bits . 15)) (xdr-data-block 327 (il:bits . 15)) (xdr-data-block 328 (il:bits . 15)) (xdr-data-block 329 (il:bits . 15)) (xdr-data-block 330 (il:bits . 15)) (xdr-data-block 331 (il:bits . 15)) (xdr-data-block 332 (il:bits . 15)) (xdr-data-block 333 (il:bits . 15)) (xdr-data-block 334 (il:bits . 15)) (xdr-data-block 335 (il:bits . 15)) (xdr-data-block 336 (il:bits . 15)) (xdr-data-block 337 (il:bits . 15)) (xdr-data-block 338 (il:bits . 15)) (xdr-data-block 339 (il:bits . 15)) (xdr-data-block 340 (il:bits . 15)) (xdr-data-block 341 (il:bits . 15)) (xdr-data-block 342 (il:bits . 15)) (xdr-data-block 343 (il:bits . 15)) (xdr-data-block 344 (il:bits . 15)) (xdr-data-block 345 (il:bits . 15)) (xdr-data-block 346 (il:bits . 15)) (xdr-data-block 347 (il:bits . 15)) (xdr-data-block 348 (il:bits . 15)) (xdr-data-block 349 (il:bits . 15)) (xdr-data-block 350 (il:bits . 15)) (xdr-data-block 351 (il:bits . 15)) (xdr-data-block 352 (il:bits . 15)) (xdr-data-block 353 (il:bits . 15)) (xdr-data-block 354 (il:bits . 15)) (xdr-data-block 355 (il:bits . 15)) (xdr-data-block 356 (il:bits . 15)) (xdr-data-block 357 (il:bits . 15)) (xdr-data-block 358 (il:bits . 15)) (xdr-data-block 359 (il:bits . 15)) (xdr-data-block 360 (il:bits . 15)) (xdr-data-block 361 (il:bits . 15)) (xdr-data-block 362 (il:bits . 15)) (xdr-data-block 363 (il:bits . 15)) (xdr-data-block 364 (il:bits . 15)) (xdr-data-block 365 (il:bits . 15)) (xdr-data-block 366 (il:bits . 15)) (xdr-data-block 367 (il:bits . 15)) (xdr-data-block 368 (il:bits . 15)) (xdr-data-block 369 (il:bits . 15)) (xdr-data-block 370 (il:bits . 15)) (xdr-data-block 371 (il:bits . 15)) (xdr-data-block 372 (il:bits . 15)) (xdr-data-block 373 (il:bits . 15)) (xdr-data-block 374 (il:bits . 15)) (xdr-data-block 375 (il:bits . 15)) (xdr-data-block 376 (il:bits . 15)) (xdr-data-block 377 (il:bits . 15)) (xdr-data-block 378 (il:bits . 15)) (xdr-data-block 379 (il:bits . 15)) (xdr-data-block 380 (il:bits . 15)) (xdr-data-block 381 (il:bits . 15)) (xdr-data-block 382 (il:bits . 15)) (xdr-data-block 383 (il:bits . 15)) (xdr-data-block 384 (il:bits . 15)) (xdr-data-block 385 (il:bits . 15)) (xdr-data-block 386 (il:bits . 15)) (xdr-data-block 387 (il:bits . 15)) (xdr-data-block 388 (il:bits . 15)) (xdr-data-block 389 (il:bits . 15)) (xdr-data-block 390 (il:bits . 15)) (xdr-data-block 391 (il:bits . 15)) (xdr-data-block 392 (il:bits . 15)) (xdr-data-block 393 (il:bits . 15)) (xdr-data-block 394 (il:bits . 15)) (xdr-data-block 395 (il:bits . 15)) (xdr-data-block 396 (il:bits . 15)) (xdr-data-block 397 (il:bits . 15)) (xdr-data-block 398 (il:bits . 15)) (xdr-data-block 399 (il:bits . 15)) (xdr-data-block 400 (il:bits . 15)) (xdr-data-block 401 (il:bits . 15)) (xdr-data-block 402 (il:bits . 15)) (xdr-data-block 403 (il:bits . 15)) (xdr-data-block 404 (il:bits . 15)) (xdr-data-block 405 (il:bits . 15)) (xdr-data-block 406 (il:bits . 15)) (xdr-data-block 407 (il:bits . 15)) (xdr-data-block 408 (il:bits . 15)) (xdr-data-block 409 (il:bits . 15)) (xdr-data-block 410 (il:bits . 15)) (xdr-data-block 411 (il:bits . 15)) (xdr-data-block 412 (il:bits . 15)) (xdr-data-block 413 (il:bits . 15)) (xdr-data-block 414 (il:bits . 15)) (xdr-data-block 415 (il:bits . 15)) (xdr-data-block 416 (il:bits . 15)) (xdr-data-block 417 (il:bits . 15)) (xdr-data-block 418 (il:bits . 15)) (xdr-data-block 419 (il:bits . 15)) (xdr-data-block 420 (il:bits . 15)) (xdr-data-block 421 (il:bits . 15)) (xdr-data-block 422 (il:bits . 15)) (xdr-data-block 423 (il:bits . 15)) (xdr-data-block 424 (il:bits . 15)) (xdr-data-block 425 (il:bits . 15)) (xdr-data-block 426 (il:bits . 15)) (xdr-data-block 427 (il:bits . 15)) (xdr-data-block 428 (il:bits . 15)) (xdr-data-block 429 (il:bits . 15)) (xdr-data-block 430 (il:bits . 15)) (xdr-data-block 431 (il:bits . 15)) (xdr-data-block 432 (il:bits . 15)) (xdr-data-block 433 (il:bits . 15)) (xdr-data-block 434 (il:bits . 15)) (xdr-data-block 435 (il:bits . 15)) (xdr-data-block 436 (il:bits . 15)) (xdr-data-block 437 (il:bits . 15)) (xdr-data-block 438 (il:bits . 15)) (xdr-data-block 439 (il:bits . 15)) (xdr-data-block 440 (il:bits . 15)) (xdr-data-block 441 (il:bits . 15)) (xdr-data-block 442 (il:bits . 15)) (xdr-data-block 443 (il:bits . 15)) (xdr-data-block 444 (il:bits . 15)) (xdr-data-block 445 (il:bits . 15)) (xdr-data-block 446 (il:bits . 15)) (xdr-data-block 447 (il:bits . 15)) (xdr-data-block 448 (il:bits . 15)) (xdr-data-block 449 (il:bits . 15)) (xdr-data-block 450 (il:bits . 15)) (xdr-data-block 451 (il:bits . 15)) (xdr-data-block 452 (il:bits . 15)) (xdr-data-block 453 (il:bits . 15)) (xdr-data-block 454 (il:bits . 15)) (xdr-data-block 455 (il:bits . 15)) (xdr-data-block 456 (il:bits . 15)) (xdr-data-block 457 (il:bits . 15)) (xdr-data-block 458 (il:bits . 15)) (xdr-data-block 459 (il:bits . 15)) (xdr-data-block 460 (il:bits . 15)) (xdr-data-block 461 (il:bits . 15)) (xdr-data-block 462 (il:bits . 15)) (xdr-data-block 463 (il:bits . 15)) (xdr-data-block 464 (il:bits . 15)) (xdr-data-block 465 (il:bits . 15)) (xdr-data-block 466 (il:bits . 15)) (xdr-data-block 467 (il:bits . 15)) (xdr-data-block 468 (il:bits . 15)) (xdr-data-block 469 (il:bits . 15)) (xdr-data-block 470 (il:bits . 15)) (xdr-data-block 471 (il:bits . 15)) (xdr-data-block 472 (il:bits . 15)) (xdr-data-block 473 (il:bits . 15)) (xdr-data-block 474 (il:bits . 15)) (xdr-data-block 475 (il:bits . 15)) (xdr-data-block 476 (il:bits . 15)) (xdr-data-block 477 (il:bits . 15)) (xdr-data-block 478 (il:bits . 15)) (xdr-data-block 479 (il:bits . 15)) (xdr-data-block 480 (il:bits . 15)) (xdr-data-block 481 (il:bits . 15)) (xdr-data-block 482 (il:bits . 15)) (xdr-data-block 483 (il:bits . 15)) (xdr-data-block 484 (il:bits . 15)) (xdr-data-block 485 (il:bits . 15)) (xdr-data-block 486 (il:bits . 15)) (xdr-data-block 487 (il:bits . 15)) (xdr-data-block 488 (il:bits . 15)) (xdr-data-block 489 (il:bits . 15)) (xdr-data-block 490 (il:bits . 15)) (xdr-data-block 491 (il:bits . 15)) (xdr-data-block 492 (il:bits . 15)) (xdr-data-block 493 (il:bits . 15)) (xdr-data-block 494 (il:bits . 15)) (xdr-data-block 495 (il:bits . 15)) (xdr-data-block 496 (il:bits . 15)) (xdr-data-block 497 (il:bits . 15)) (xdr-data-block 498 (il:bits . 15)) (xdr-data-block 499 (il:bits . 15)))) (quote 500)) (defconstant *cells-per-xdr-data-block* 250 "Number of 32 bit cells in a data block.") (defglobalparameter *free-xdr-data-blocks* nil "A list of free xdr data blocks.") (defglobalparameter *max-xdr-data-blocks* 5 "The maximum size of the data block cache.") (defconstant *words-per-cell* 2 "The number of words (16 bits) per cell.") (defun xdr-initialize-cache nil (let ((cache-length (length *free-xdr-data-blocks*))) (unless (>= cache-length *max-xdr-data-blocks*) (dotimes (i (- *max-xdr-data-blocks* cache-length)) (push (il:|create| xdr-data-block) *free-xdr-data-blocks*))))) (defun allocate-xdr-data-block nil "If an xdr data block is available then return it, otherwise create one." (or (pop *free-xdr-data-blocks*) (il:|create| xdr-data-block))) (defun reclaim-xdr-data-block (xdr-data-block) (when (< (length *free-xdr-data-blocks*) *max-xdr-data-blocks*) (push xdr-data-block *free-xdr-data-blocks*)) t) (defmacro foldlo (form divisor) (let ((div (if (constantp divisor) (eval divisor) divisor))) (or (and div (il:poweroftwop div)) (il:\\illegal.arg div)) (list (quote il:lrsh) form (il:sub1 (il:integerlength div))))) (defmacro unfold (form divisor) (let ((div (if (constantp divisor) (eval divisor) divisor))) (or (and div (il:poweroftwop div)) (il:\\illegal.arg div)) (list (quote il:llsh) form (il:sub1 (il:integerlength div))))) (defun os-udp-getbyte (rpcstream) "Get a byte from the instream of the rpcstream and increment the offset." (let ((offset (rpc-stream-inbyteptr rpcstream)) (xdr-data-block (rpc-stream-instream rpcstream))) (prog1 (il:\\getbasebyte (il:locf (il:|fetch| xdr-public il:|of| (setq xdr-data-block (il:\\dtest xdr-data-block (quote xdr-data-block))))) offset) (setf (rpc-stream-inbyteptr rpcstream) (+ 1 offset))))) (defun os-udp-getbytes (rpcstream nbytes) "Get nbytes bytes from the rpcstream and increment the offset" (let* ((xdr-data-block (rpc-stream-instream rpcstream)) (string (il:allocstring nbytes))) (il:\\movebytes (il:locf (il:|fetch| (xdr-data-block xdr-public) il:|of| (setq xdr-data-block (il:\\dtest xdr-data-block (quote xdr-data-block))))) (or (il:smallp (rpc-stream-inbyteptr rpcstream)) 0) (il:|fetch| (il:stringp il:base) il:|of| string) (il:|fetch| (il:stringp il:offst) il:|of| string) nbytes) (incf (rpc-stream-inbyteptr rpcstream) nbytes) string)) (defun os-udp-putbyte (rpcstream byte) "Put a byte of data at the next position in the rpcstream and increment the offset." (let ((xdr-data-block (rpc-stream-outstream rpcstream))) (il:\\putbasebyte (il:locf (il:|fetch| xdr-public il:|of| (setq xdr-data-block (il:\\dtest xdr-data-block (quote xdr-data-block))))) (rpc-stream-outbyteptr rpcstream) byte)) (incf (rpc-stream-outbyteptr rpcstream) 1)) (defun os-udp-putbytes (rpcstream string) "Put a string of bytes into the outstream of rpcstream and increment the offset." (let ((xdr-data-block (rpc-stream-outstream rpcstream)) (length (length string))) (il:\\movebytes (il:|fetch| (il:stringp il:base) il:|of| string) (il:|fetch| (il:stringp il:offst) il:|of| string) (il:locf (il:|fetch| (xdr-data-block xdr-public) il:|of| (setq xdr-data-block (il:\\dtest xdr-data-block (quote xdr-data-block))))) (rpc-stream-outbyteptr rpcstream) length) (incf (rpc-stream-outbyteptr rpcstream) length))) (defun os-udp-getcell (rpcstream) "Get a cell from the rpcstream and increment the offset." (let* ((byteoffset (rpc-stream-inbyteptr rpcstream)) (xdr-data-block (rpc-stream-instream rpcstream)) (cell# (ash byteoffset -2))) (if (and (>= cell# 0) (<= cell# *cells-per-xdr-data-block*)) (let ((base (il:locf (il:|fetch| (xdr-data-block xdr-public) il:|of| (setq xdr-data-block (il:\\dtest xdr-data-block (quote xdr-data-block))))))) (prog1 (il:\\makenumber (il:\\getbase base (unfold cell# *words-per-cell*)) (il:\\getbase base (1+ (unfold cell# *words-per-cell*)))) (setf (rpc-stream-inbyteptr rpcstream) (+ 4 byteoffset)))) (error "Attempt to fetch cell outside of buffer.")))) (defun os-udp-putcell (rpcstream value) (let* ((byteoffset (rpc-stream-outbyteptr rpcstream)) (xdr-data-block (rpc-stream-outstream rpcstream)) (base (il:locf (il:|fetch| (xdr-data-block xdr-public) il:|of| (setq xdr-data-block (il:\\dtest xdr-data-block (quote xdr-data-block))))))) (il:\\putbasebyte base byteoffset (ldb (byte 8 24) value)) (il:\\putbasebyte base (il:\\addbase byteoffset 1) (ldb (byte 8 16) value)) (il:\\putbasebyte base (il:\\addbase byteoffset 2) (ldb (byte 8 8) value)) (il:\\putbasebyte base (il:\\addbase byteoffset 3) (ldb (byte 8 0) value)) (setf (rpc-stream-outbyteptr rpcstream) (+ 4 byteoffset)))) (defun os-udp-getoffset (rpcstream) (cons (rpc-stream-instream rpcstream) (rpc-stream-inbyteptr rpcstream))) (defun os-udp-putoffset (rpcstream byteoffset) (setf (rpc-stream-inbyteptr rpcstream) byteoffset)) (eval-when (load) (xdr-initialize-cache) ) (il:putprops il:rpcos il:copyright ("Xerox Corporation" 1988)) (il:declare\: il:dontcopy (il:filemap (nil))) il:stop