home *** CD-ROM | disk | FTP | other *** search
- ;; -*- package: NotInROM -*-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; +Devices.Lisp
- ;;
- ;; Copyright ⌐ 1992 Northwestern University Institute for the Learning Sciences
- ;; All Rights Reserved
- ;;
- ;; author: Michael S. Engber
- ;;
- ;; Provides the High Level "Not in ROM" Device Manager Routines
- ;; from IM II pp.178-179 & p. 190
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (eval-when (:compile-toplevel :load-toplevel :execute)
- (require :NotInROM-u)
- (in-package :NotInROM))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (deftrap-NotInROM _OpenDriver :OSErr ((name (:string 255)) (refNum (:pointer :signed-integer)))
- (rlet ((pb :ParamBlockRec
- :ioNamePtr name
- :ioPermssn #$fsCurPerm))
- (prog1
- (#_PBOpen pb)
- (%put-word refNum (pref pb :ParamBlockRec.ioRefNum)))))
-
- (deftrap-NotInROM _CloseDriver :OSErr ((refNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum))
- (#_PBClose pb)))
-
- (deftrap-NotInROM _FSRead :OSErr ((refNum :signed-integer) (count (:pointer :signed-long)) (buffPtr :pointer))
- (rlet ((pb :ParamBlockRec
- :ioVRefNum 0
- :ioRefNum refNum
- :ioBuffer buffPtr
- :ioReqCount (%get-signed-long count)
- :ioPosMode #$fsAtMark
- :ioPosOffset 0))
- (prog1
- (#_PBRead pb)
- (%put-long count (pref pb :ParamBlockRec.ioActCount)))))
-
- (deftrap-NotInROM _FSWrite :OSErr ((refNum :signed-integer) (count (:pointer :signed-long)) (buffPtr :pointer))
- (rlet ((pb :ParamBlockRec
- :ioVRefNum 0
- :ioRefNum refNum
- :ioBuffer buffPtr
- :ioReqCount (%get-signed-long count)
- :ioPosMode #$fsAtMark
- :ioPosOffset 0))
- (prog1
- (#_PBWrite pb)
- (%put-long count (pref pb :ParamBlockRec.ioActCount)))))
-
- (deftrap-NotInROM _Control :OSErr ((refNum :signed-integer) (csCode :signed-integer) (csParamPtr :pointer))
- (rlet ((pb :ParamBlockRec
- :ioVRefNum 0
- :ioRefNum refNum
- :csCode csCode))
- (#_BlockMove csParamPtr (pref pb :ParamBlockRec.csParam) 22)
- (#_PBControl pb)))
-
- (deftrap-NotInROM _Status :OSErr ((refNum :signed-integer) (csCode :signed-integer) (csParamPtr :pointer))
- (rlet ((pb :ParamBlockRec
- :ioVRefNum 0
- :ioRefNum refNum
- :csCode csCode))
- (prog2
- ;Status actually needs to fill in csParam - see TN#262
- (#_BlockMove csParamPtr (pref pb :ParamBlockRec.csParam) 22)
- (#_PBStatus pb)
- (#_BlockMove (pref pb :ParamBlockRec.csParam) csParamPtr 22))))
-
- (deftrap-NotInROM _KillIO :OSErr ((refNum :signed-integer))
- (rlet ((pb :ParamBlockRec
- :ioRefNum refNum))
- (#_PBKillIO pb)))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (deftrap-NotInROM _GetDCtlEntry :handle ((refNum :signed-integer))
- (let ((UTable-index (- -1 refNum)))
- (if (< UTable-index (%get-signed-word (%int-to-ptr #$UnitNtryCnt)))
- (%get-ptr (%get-ptr (%int-to-ptr #$UTableBase)) (* 4 UTable-index))
- (%null-ptr))))
-
- ;;doesn't seem to work - coded as per IM V p. 431
- (deftrap-NotInROM _SetChooserAlert :Boolean ((f :Boolean))
- (with-macptrs ((hiliteMode (%int-to-ptr #$hiliteMode)))
- (prog1
- (#_BitTst hiliteMode 1)
- (if f (#_BitSet hiliteMode 1) (#_BitClr hiliteMode 1)))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-