;;; -*- Mode:Lisp; Readtable:T; Package:USER; Base:8; Patch-File:T -*- ;;; Private patches made by GJC ;;; Reason: ;;; receive-band nowired. ;;; Written 16-Nov-85 13:05:00 by GJC, ;;; while running on Explorer One from band 3 ;;; with Experimental System 104.43, microcode 1291. ; From file BAND.LISP#> L.SYS2; DJ: (47) #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER#:PATCH-SOURCE-FILE "SYS: SYS2; BAND  " (DEFUNP RECEIVE-BAND (FROM-MACHINE FROM-PART TO-PART &OPTIONAL SUBSET-START SUBSET-N-BLOCKS (TO-UNIT 0) (WIREP (SI:SELECT-PROCESSOR ((:CADR :LAMBDA)t) (:EXPLORER NIL))) &AUX CONN PKT STR TEM RQB BUF (QUANTUM 17.) (WINDOW 36.) NB TOP PART-BASE ORIG-PART-BASE PART-SIZE PART-COMMENT (N-HUNDRED 0)) "Read the FROM-PART partition from FROM-MACHINE into our partition TO-PART. If SUBSET-START or SUBSET-N-BLOCKS is specified, they say which part of the partition to transfer. They are measured in blocks (or pages). If a transfer dies, use the last number it printed, times 100., as SUBSET-START, to resume where it left off." ;; QUANTUM is number of disk blocks we write at once. ;; WINDOW is window size for net connection. ;; I think it is best if WINDOW is big enough to transfer a whole quantum. (OR SUBSET-START (SETQ SUBSET-START 0)) (UNWIND-PROTECT (PROGN (MULTIPLE-VALUE (PART-BASE PART-SIZE NIL TO-PART) (FIND-DISK-PARTITION-FOR-WRITE TO-PART NIL TO-UNIT)) (WHEN PART-BASE (SETQ CONN (CHAOS:CONNECT FROM-MACHINE (FORMAT NIL "BAND-TRANSFER READ ~A ~D" FROM-PART (AND SUBSET-N-BLOCKS (LIST SUBSET-START SUBSET-N-BLOCKS))) WINDOW)) ;; Receive packet containing size and comment (SETQ PKT (CHAOS:GET-NEXT-PKT CONN) STR (CHAOS:PKT-STRING PKT)) (SETQ TEM (LET ((*READ-BASE* 10.)) (READ-FROM-STRING STR))) (OR ( TEM PART-SIZE) (RETURN (FORMAT NIL "Does not fit in local partition, ~D>~D" TEM PART-SIZE))) (SETQ PART-SIZE TEM) (SETQ TEM (STRING-SEARCH-CHAR #/SP STR)) (SETQ PART-COMMENT (READ-FROM-STRING STR NIL (1+ TEM))) (FORMAT T "~&Receiving ~A's ~A into ~A: ~D blocks, ~A~%" FROM-MACHINE FROM-PART TO-PART PART-SIZE PART-COMMENT) (CHAOS:RETURN-PKT PKT) (SETQ ORIG-PART-BASE PART-BASE) (SETQ PART-BASE (+ PART-BASE SUBSET-START) PART-SIZE (- PART-SIZE SUBSET-START)) (AND SUBSET-N-BLOCKS (SETQ PART-SIZE SUBSET-N-BLOCKS)) (UPDATE-PARTITION-COMMENT TO-PART "Incomplete Copy" TO-UNIT) (SETQ RQB (SYS:GET-DISK-RQB QUANTUM) BUF (SYS:RQB-BUFFER RQB)) (SETQ DISK-ERROR-RETRY-COUNT 20.) ;Try to bypass hardware overrun problem (AND WIREP (WIRE-DISK-RQB RQB)) (SETQ TOP (+ PART-BASE PART-SIZE)) (DO ((BLOCK PART-BASE (+ BLOCK QUANTUM))) (( BLOCK TOP)) (AND (< (SETQ NB (- TOP BLOCK)) QUANTUM) WIREP (WIRE-DISK-RQB RQB (SETQ QUANTUM NB))) (AND ( (SETQ TEM (TRUNCATE (- BLOCK ORIG-PART-BASE) 100.)) N-HUNDRED) (FORMAT T "~D " (SETQ N-HUNDRED TEM))) (ARRAY-FROM-NET BUF CONN (* QUANTUM PAGE-SIZE 2)) (IF WIREP (DISK-WRITE-WIRED RQB TO-UNIT BLOCK) (DISK-WRITE RQB TO-UNIT BLOCK))) (CHAOS:CLOSE-CONN CONN "Done") (OR SUBSET-N-BLOCKS (UPDATE-PARTITION-COMMENT TO-PART PART-COMMENT TO-UNIT)))) (AND RQB (SYS:RETURN-DISK-RQB RQB)) (AND CONN (CHAOS:REMOVE-CONN CONN))) T) ))