(FILECREATED "20-Apr-87 17:11:29" {ERIS}<DANIELS>LISP>PATCHES>DOVELFPATCH.;1 3316
changes to: (VARS DOVELFPATCHCOMS))
(* Copyright (c) 1987 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT DOVELFPATCHCOMS)
(RPAQQ DOVELFPATCHCOMS ((DECLARE: EVAL@COMPILE DONTEVAL@LOAD DONTCOPY (FILES (LOADCOMP)
LOCALFILE))
(FNS \PFTransferFilePage)))
(DECLARE: EVAL@COMPILE DONTEVAL@LOAD DONTCOPY
(FILESLOAD (LOADCOMP)
LOCALFILE)
)
(DEFINEQ
(\PFTransferFilePage
[LAMBDA (file filePageNumber volumePageNumber frame operation runLength noBreak)
(* ; "Edited 16-Apr-87 19:53 by amd")
(* ;;
"file: FileDescriptor, filePageNumber: FIXP, volumePageNumber: FIXP, frame: Page, operation: (VVR VVW VWW)")
(* ;; "")
(* ;;
"Transfers a page to or from the disk. This function, unlike \PFTransferPage, deals in file- and volume-relative page numbers. It builds the correct label to be used for the transfer. NB: The only multi-page transfers occur during file allocation and deallocation. In these cases, FRAME is a junk page that will get written to every page being processed."
)
(SETQ runLength (OR runLength 1)) (* ;;
"Break up the run into chunks of at most 128 pages for the Daybreak. DiskHeadDove$InitIOCB will not create an IOCB with a run length longer than that for some reason. This is the most convenient place to put this patch for now -- ideally the driver should be changed to handle this. The DLion is not adversely affected, since it does cylinder-crossing runs one page at a time anyway."
)
(FOR PAGE-OFFSET FROM 0 BY 128 AS PAGES-LEFT FROM runLength BY -128
WHILE (IGREATERP PAGES-LEFT 0) DO (WITH-RESOURCE
label
(if (FIXP (fetch (FileDescriptor fileID)
of file))
then (replace (Label fileID) of label
with (fetch (FileDescriptor fileID)
of file))
else (* ;;
"Logical volume pages, marker pages, and physical volume pages have a 5-word volume ID for their fileID in a label. This is essentially a loophole to get around the normal declaration of the Label datatype, which expects a 2-word ID"
)
(MESASETQ label (fetch (FileDescriptor
fileID)
of file)
VolumeID))
(replace (Label attributesInAllPages)
of label with (fetch (FileDescriptor type)
of file))
(replace (Label filePage) of label
with (IPLUS filePageNumber PAGE-OFFSET))
(\PFTransferPage
(IPLUS (LvBasePageAddr (fetch (FileDescriptor
volNum)
of file))
volumePageNumber PAGE-OFFSET)
frame operation label (MIN PAGES-LEFT 128)
noBreak)))
NIL])
)
(PUTPROPS DOVELFPATCH COPYRIGHT ("Xerox Corporation" 1987))
(DECLARE: DONTCOPY
(FILEMAP (NIL (477 3234 (\PFTransferFilePage 487 . 3232)))))
STOP