;;; -*- Mode:LISP; Package:SYSTEM-INTERNALS; Base:10; Readtable:ZL -*- ;;; BANDIF ;;; Prints out what blocks are different between two LOD bands. ;;; For incremental band updates. (defun band-diff (LOD-A LOD-B &KEY &OPTIONAL (UNIT-A 0) (UNIT-B 0) (QUANTUM 17) &AUX PART-A-BASE PART-A-SIZE PART-B-BASE PART-B-SIZE RQB-A BUF-A RQB-B BUF-B DIFF) "returns a list of relative blocks from A that need to be replaced in or added to B in order to make it the same as LOD-A" (MULTIPLE-VALUE-SETQ (part-a-base part-a-size) (FIND-DISK-PARTITION-FOR-READ LOD-A NIL UNIT-A)) (SETQ PART-A-SIZE (MEASURED-SIZE-OF-PARTITION LOD-A UNIT-A)) (MULTIPLE-VALUE-SETQ (part-b-base part-b-size) (FIND-DISK-PARTITION-FOR-READ LOD-b NIL UNIT-B)) (SETQ PART-b-SIZE (MEASURED-SIZE-OF-PARTITION LOD-b UNIT-B)) (format t "~&~A ~A is ~D blocks long~ ~%~A ~A is ~D blocks long~%" lod-a (PARTITION-COMMENT LOD-A unit-A) part-a-size lod-b (PARTITION-COMMENT LOD-b unit-B) part-b-size) (IF (> PART-B-SIZE PART-A-SIZE) (FERROR NIL "First partition must be bigger than second compute difference")) (UNWIND-PROTECT (PROGN (SETQ RQB-A (GET-DISK-RQB QUANTUM)) (SETQ BUF-A (RQB-BUFFER RQB-A)) (SETQ RQB-B (GET-DISK-RQB QUANTUM)) (SETQ BUF-B (RQB-BUFFER RQB-B)) (DO ((J 0 (+ J QUANTUM))) ((>= J PART-B-SIZE)) (LET ((N (MIN QUANTUM (- PART-B-SIZE J)))) (WIRE-DISK-RQB RQB-A N) (WIRE-DISK-RQB RQB-B N) (DISK-READ-WIRED RQB-A UNIT-A (+ PART-A-BASE J)) (DISK-READ-WIRED RQB-B UNIT-B (+ PART-B-BASE J)) (J PART-B-SIZE) (AND (< (SETQ NB (- TOP BLOCK)) QUANTUM) (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 BUF1 CONN (* QUANTUM PAGE-SIZE 2)) (DISK-READ-WIRED RQB TO-UNIT BLOCK) (UNLESS (LET ((ALPHABETIC-CASE-AFFECTS-STRING-COMPARISON T)) (%STRING-EQUAL BUF 0 BUF1 0 (* #o2000 QUANTUM))) (UNLESS (LET ((ALPHABETIC-CASE-AFFECTS-STRING-COMPARISON T)) (%STRING-EQUAL BUF 0 BUF1 0 (* #o2000 QUANTUM))) (SETQ RQB BUF