home *** CD-ROM | disk | FTP | other *** search
- ;; -*- package: NotInROM -*-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; +Files.Lisp
- ;;
- ;; Copyright ⌐ 1992 Northwestern University Institute for the Learning Sciences
- ;; All Rights Reserved
- ;;
- ;; author: Michael S. Engber
- ;; based on MACL 1.32 written by Tamar Offer
- ;;
- ;; Provides the High Level "Not in ROM" File Manager Routines
- ;; from IM IV pp.106-115 and IM VI pp.25.34-25.37 (and TN#218)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (eval-when (:compile-toplevel :load-toplevel :execute)
- (require :NotInROM-u)
- (in-package :NotInROM))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Accessing Volumes - IM IV pp. 107-108
-
- (deftrap-NotInROM _GetVInfo :OSErr ((drvNum :signed-integer) (volName (:pointer (:string 255))) (vRefNum (:pointer :signed-integer)) (freeBytes (:pointer :signed-long)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr volName
- :ioVRefNum drvNum
- :ioVolIndex 0))
- (prog1
- (#_PBHGetVInfo pb)
- (%put-word vRefNum (pref pb :HParamBlockRec.ioVRefNum))
- (%put-long freeBytes (* (pref pb :HParamBlockRec.ioVAlBlkSiz)
- (logand #xFFFF (pref pb :HParamBlockRec.ioVFrBlk)))))))
-
- (deftrap-NotInROM _GetVRefNum :OSErr ((fileRefNum :signed-integer) (vRefNum (:pointer :signed-integer)))
- (rlet ((pb :FCBPBRec
- :ioNamePtr (%null-ptr)
- :ioVRefNum 0
- :ioRefNum fileRefNum
- :ioFCBIndx 0))
- (prog1
- (#_PBGetFCBInfo pb)
- (%put-word vRefNum (pref pb :FCBPBRec.ioFCBVRefNum)))))
-
- (deftrap-NotInROM _GetVol :OSErr ((volName (:pointer (:string 255))) (vRefNum (:pointer :signed-integer)))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr volName))
- (prog1
- (#_PBGetVol pb)
- (%put-word vRefNum (pref pb :ParamBlockRec.ioVRefNum)))))
-
- (deftrap-NotInROM _SetVol :OSErr ((volName (:pointer (:string 255))) (vRefNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr volName
- :ioVRefNum vRefNum))
- (#_PBSetVol pb)))
-
- (deftrap-NotInROM _FlushVol :OSErr ((volName (:pointer (:string 255))) (vRefNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr volName
- :ioVRefNum vRefNum))
- (#_PBFlushVol pb)))
-
- (deftrap-NotInROM _UnmountVol :OSErr ((volName (:pointer (:string 255))) (vRefNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr volName
- :ioVRefNum vRefNum))
- (#_PBUnmountVol pb)))
-
- (deftrap-NotInROM _OffLine :OSErr ((volName (:pointer (:string 255))) (vRefNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr volName
- :ioVRefNum vRefNum))
- (#_PBOffLine pb)))
-
- (deftrap-NotInROM _Eject :OSErr ((volName (:pointer (:string 255))) (vRefNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr volName
- :ioVRefNum vRefNum))
- (#_PBEject pb)))
-
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Accessing Files - IM IV pp. 109-112
-
- (deftrap-NotInROM _FSOpen :OSErr ((fileName (:string 255)) (vRefNum :signed-integer) (refNum (:pointer :signed-integer)))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioVersNum 0
- :ioPermssn #$fsCurPerm
- :ioMisc (%null-ptr)))
- (prog1
- (#_PBOpen pb)
- (%put-word refNum (pref pb :ParamBlockRec.ioRefNum)))))
-
- (deftrap-NotInROM _OpenRF :OSErr ((fileName (:string 255)) (vRefNum :signed-integer) (refNum (:pointer :signed-integer)))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioVersNum 0
- :ioPermssn #$fsCurPerm
- :ioMisc (%null-ptr)))
- (prog1
- (#_PBOpenRF pb)
- (%put-word refNum (pref pb :ParamBlockRec.ioRefNum)))))
-
- ;;_FSRead defined in +Devices.lisp
-
- ;;_FSWrite defined in +Devices.lisp
-
- (deftrap-NotInROM _GetFPos :OSErr ((refNum :signed-integer) (filePos (:pointer :signed-long)))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum))
- (prog1
- (#_PBGetFPos pb)
- (%put-long filePos (pref pb :ParamBlockRec.ioPosOffset)))))
-
- (deftrap-NotInROM _SetFPos :OSErr ((refNum :signed-integer) (posMode :signed-integer) (posOff :signed-long))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum
- :ioPosMode posMode
- :ioPosOffset posOff))
- (#_PBSetFPos pb)))
-
- (deftrap-NotInROM _GetEOF :OSErr ((refNum :signed-integer) (logEOF (:pointer :signed-long)))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum))
- (prog1
- (#_PBGetEOF pb)
- (%put-long logEOF (%ptr-to-int (pref pb :ParamBlockRec.ioMisc))))))
-
- (deftrap-NotInROM _SetEOF :OSErr ((refNum :signed-integer) (logEOF :signed-long))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum
- :ioMisc (%int-to-ptr logEOF)))
- (#_PBSetEOF pb)))
-
- (deftrap-NotInROM _Allocate :OSErr ((refNum :signed-integer) (count (:pointer :signed-long)))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum
- :ioReqCount (%get-signed-long count)))
- (prog1
- (#_PBAllocate pb)
- (%put-long count (pref pb :ParamBlockRec.ioActCount)))))
-
- (deftrap-NotInROM _FSClose :OSErr ((refNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum))
- (#_PBFlushFile pb)
- (#_PBClose pb)))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Creating and Deleting Files - IM IV pp. 112-113
-
- (deftrap-NotInROM _Create :OSErr ((fileName (:string 255)) (vRefNum :signed-integer) (creator :ostype) (fileType :ostype))
- (rlet ((fi :FInfo
- :fdType fileType
- :fdCreator creator
- :fdFlags 0
- :fdLocation #@(0 0)
- :fdFldr 0)
- (pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFVersNum 0
- :ioFDirIndex 0))
- (when (zerop (#_PBCreate pb))
- (when (zerop (#_PBGetFInfo pb))
- (setf (pref pb :ParamBlockRec.ioFlFndrInfo) fi)
- (#_PBSetFInfo pb)))
- (pref pb :ParamBlockRec.ioResult)))
-
- (deftrap-NotInROM _FSDelete :OSErr ((fileName (:string 255)) (vRefNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFVersNum 0))
- (#_PBDelete pb)))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Changing Information About Files - IM IV pp. 112-113
-
- (deftrap-NotInROM _GetFInfo :OSErr ((fileName (:string 255)) (vRefNum :signed-integer) (fndrInfo (:pointer :FInfo)))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFVersNum 0
- :ioFDirIndex 0))
- (prog1
- (#_PBGetFInfo pb)
- (#_BlockMove (pref pb :ParamBlockRec.ioFlFndrInfo) fndrInfo #.(ccl::record-field-length :FInfo)))))
-
- (deftrap-NotInROM _SetFInfo :OSErr ((fileName (:string 255)) (vRefNum :signed-integer) (fndrInfo :FInfo))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFVersNum 0
- :ioFDirIndex 0))
- (when (zerop (#_PBGetFInfo pb))
- (setf (pref pb :ParamBlockRec.ioFlFndrInfo) fndrInfo)
- (#_PBSetFInfo pb))
- (pref pb :ParamBlockRec.ioResult)))
-
- (deftrap-NotInROM _SetFlock :OSErr ((fileName (:string 255)) (vRefNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFVersNum 0))
- (#_PBSetFlock pb)))
-
- (deftrap-NotInROM _RstFlock :OSErr ((fileName (:string 255)) (vRefNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFVersNum 0))
- (#_PBRstFlock pb)))
-
- (deftrap-NotInROM _Rename :OSErr ((oldName (:string 255)) (vRefNum :signed-integer) (newName (:string 255)))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr oldName
- :ioVRefNum vRefNum
- :ioFVersNum 0
- :ioMisc newName))
- (#_PBRename pb)))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; High Level HFS calls
- ;; from IM VI pp. 25.34-25.37 (and TN#218)
-
- (deftrap-NotInROM _AllocContig :OSErr ((refNum :signed-integer) (count (:pointer :signed-long)))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum
- :ioReqCount (%get-signed-long count)))
- (prog1
- (#_PBAllocContig pb)
- (%put-long count (pref pb :ParamBlockRec.ioActCount)))))
-
- (deftrap-NotInROM _DirCreate :OSErr ((vRefNum :signed-integer) (parentDirID :signed-long) (directoryName (:string 255)) (createdDirID (:pointer :signed-long)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr directoryName
- :ioVRefNum vRefNum
- :ioDirID parentDirID))
- (prog1
- (#_PBDirCreate pb)
- (%put-long createdDirID (pref pb :HParamBlockRec.ioDirID)))))
-
- (deftrap-NotInROM _CatMove :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (oldName (:string 255)) (newDirID :signed-long) (newName (:string 255)))
- (rlet ((pb :CMovePBRec
- :ioNamePtr oldName
- :ioVRefNum vRefNum
- :ioNewName newName
- :ioNewDirId newDirID
- :ioDirID dirID))
- (#_PBCatMove pb)))
-
- (deftrap-NotInROM _OpenWD :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (procID :signed-long) (wdRefNum (:pointer :signed-integer)))
- (rlet ((pb :WDPBRec
- :ioNamePtr (%null-ptr)
- :ioVRefNum vRefNum
- :ioWDProcID procID
- :ioWDDirID dirID))
- (prog1
- (#_PBOpenWD pb)
- (%put-word wdRefNum (pref pb :WDPBRec.ioVRefNum)))))
-
- (deftrap-NotInROM _CloseWD :OSErr ((wdRefNum :signed-integer))
- (rlet ((pb :WDPBRec
- :ioVRefNum wdRefNum))
- (#_PBCloseWD pb)))
-
- (deftrap-NotInROM _GetWDInfo :OSErr ((wdRefNum :signed-integer) (vRefNum (:pointer :signed-integer)) (dirID (:pointer :signed-long)) (procID (:pointer :signed-long)))
- (rlet ((pb :WDPBRec
- :ioNamePtr (%null-ptr)
- :ioVRefNum wdRefNum
- :ioWDIndex 0
- :ioWDProcID 0
- :ioWDVRefNum 0))
- (prog1
- (#_PBGetWDInfo pb)
- (%put-word vRefNum (pref pb :WDPBRec.ioWDVRefNum))
- (%put-long dirID (pref pb :WDPBRec.ioWDDirID))
- (%put-long procID (pref pb :WDPBRec.ioWDProcID)))))
-
-
- (deftrap-NotInROM _HCreate :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)) (creator :ostype) (fileType :ostype))
- (rlet ((fi :FInfo
- :fdType fileType
- :fdCreator creator
- :fdFlags 0
- :fdLocation 0
- :fdFldr 0)
- (pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFVersNum 0
- :ioFDirIndex 0
- :ioDirID dirID))
- (when (zerop (#_PBHCreate pb))
- (when (zerop (#_PBHGetFInfo pb))
- (setf (pref pb :HParamBlockRec.ioFlFndrInfo) fi)
- ;PBHGetFInfo trashes the ioDirID field - so we have to reset it
- (setf (pref pb :HParamBlockRec.ioDirID) dirID)
- (#_PBHSetFInfo pb)))
- (pref pb :HParamBlockRec.ioResult)))
-
- (deftrap-NotInROM _HOpen :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)) (permission :signed-byte) (refNum (:pointer :signed-integer)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioPermssn permission
- :ioMisc (%null-ptr)
- :ioDirID dirID))
- (prog1
- (#_PBHOpen pb)
- (%put-word refNum (pref pb :HParamBlockRec.ioRefNum)))))
-
- (deftrap-NotInROM _HOpenRF :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)) (permission :signed-byte) (refNum (:pointer :signed-integer)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioPermssn permission
- :ioMisc (%null-ptr)
- :ioDirID dirID))
- (prog1
- (#_PBHOpenRF pb)
- (%put-word refNum (pref pb :HParamBlockRec.ioRefNum)))))
-
- (deftrap-NotInROM _HDelete :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioDirID dirID))
- (#_PBHDelete pb)))
-
- (deftrap-NotInROM _HSetFlock :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioDirID dirID))
- (#_PBHSetFlock pb)))
-
- (deftrap-NotInROM _HRstFlock :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioDirID dirID))
- (#_PBHRstFlock pb)))
-
- (deftrap-NotInROM _HRename :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (oldName (:string 255)) (newName (:string 255)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr oldName
- :ioVRefNum vRefNum
- :ioMisc newName
- :ioDirID dirID))
- (#_PBHRename pb)))
-
- (deftrap-NotInROM _HGetFInfo :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)) (fndrInfo (:pointer :FInfo)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFDirIndex 0
- :ioDirID dirID))
- (prog1
- (#_PBHGetFInfo pb)
- (#_BlockMove (pref pb :HParamBlockRec.ioFlFndrInfo) fndrInfo #.(ccl::record-field-length :FInfo)))))
-
- (deftrap-NotInROM _HSetFInfo :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)) (fndrInfo :FInfo))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioFDirIndex 0
- :ioDirID dirID))
- (when (zerop (#_PBHGetFInfo pb))
- (setf (pref pb :HParamBlockRec.ioFlFndrInfo) fndrInfo)
- ;PBHGetFInfo trashes the ioDirID field - so we have to reset it
- (setf (pref pb :HParamBlockRec.ioDirID) dirID)
- (#_PBHSetFInfo pb))
- (pref pb :HParamBlockRec.ioResult)))
-
- (deftrap-NotInROM _HGetVol :OSErr ((volName (:pointer (:string 255))) (vRefNum (:pointer :signed-integer)) (dirID (:pointer :signed-long)))
- (rlet ((pb :WDPBRec
- :ioNamePtr volName))
- (prog1
- (#_PBHGetVol pb)
- (%put-word vRefNum (pref pb :WDPBRec.ioWDVRefNum))
- (%put-long dirID (pref pb :WDPBRec.ioWDDirID)))))
-
- ;HSetVol - omitted from IM VI - see TN#140 & IM VI p. 25-7
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; High Level Data Fork Opening Routines - IM VI p. 25.34
-
- (deftrap-NotInROM _HOpenDF :OSErr ((vRefNum :signed-integer) (dirID :signed-long) (fileName (:string 255)) (permission :signed-byte) (refNum (:pointer :signed-integer)))
- (rlet ((pb :HParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioPermssn permission
- :ioDirID dirID))
- (prog1
- (#_PBHOpenDF pb)
- (%put-word refNum (pref pb :HParamBlockRec.ioRefNum)))))
-
- (deftrap-NotInROM _OpenDF :OSErr ((fileName (:string 255)) (vRefNum :signed-integer) (refNum (:pointer :signed-integer)))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr fileName
- :ioVRefNum vRefNum
- :ioPermssn #$fsCurPerm))
- (prog1
- (#_PBOpenDF pb)
- (%put-word refNum (pref pb :ParamBlockRec.ioRefNum)))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-