mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-11-05 03:04:44 +00:00
4325cdcc78
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
200 lines
5.8 KiB
Plaintext
200 lines
5.8 KiB
Plaintext
;
|
|
; File: DataAccessResultsHandlers.a
|
|
;
|
|
; Contains: Entry point for 'proc' resource containing default system result handlers.
|
|
; Dispatches to appropriate routine based on dataType. Stored in a 'proc'
|
|
; resource so it is never unlocked or purged.
|
|
;
|
|
; Written by: Jeff Miller
|
|
;
|
|
; Copyright: © 1990-1992 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <12> 3/13/92 JSM Renamed this file DataAccessResultsHandlers.a from
|
|
; SnarfResultsHandlers.a, keeping all the old revisions.
|
|
; <11> 3/4/91 dba dty: get rid of extraneous forROM and SysVers stuff and turn off
|
|
; debugging symbols
|
|
; <10> 12/12/90 VL (jsm) Put in a check for NULL data item and nil data pointer.
|
|
; <9> 8/27/90 VL Check typeDecimal and typeMoney before zero length test (since a
|
|
; zero length in Packed Decimal String is identically equal to 0).
|
|
; <8> 7/22/90 JSM Call zeroLengthHandler for null data (except row breaks, column
|
|
; breaks, and unknown data types).
|
|
; <7> 6/10/90 JSM Just touch this file so SnarfMan.a.rsrc is rebuilt correctly.
|
|
; <6> 4/12/90 JSM Combined some routines, thus eliminating more JMP instructions.
|
|
; <5> 4/12/90 JSM Reduce code size: eliminated two JMP instructions.
|
|
; <4> 4/9/90 VL Added 5 new ResultHandlers.
|
|
; <3> 3/13/90 JSM Update for new result handler interface to include places and
|
|
; flags.
|
|
; <2> 3/12/90 JSM Update header comment to reflect reality.
|
|
; <1> 2/23/90 JSM First checked in.
|
|
;
|
|
|
|
TITLE 'DataAccessResultsHandlers.a'
|
|
STRING ASIS
|
|
CASE OBJ
|
|
|
|
;
|
|
; Define DataAccessDebug to get MacsBug labels
|
|
;
|
|
|
|
; IF &TYPE('DataAccessDebug')='UNDEFINED' THEN
|
|
DataAccessDebug EQU 0
|
|
; ENDIF
|
|
|
|
; Includes
|
|
|
|
PRINT OFF
|
|
|
|
LOAD 'StandardEqu.d'
|
|
INCLUDE 'DatabaseAccess.a'
|
|
|
|
PRINT ON
|
|
|
|
;
|
|
; Macro to put in debug symbols for MacsBug
|
|
;
|
|
IF DataAccessDebug THEN
|
|
MACRO
|
|
DoDebugSymbols &name
|
|
DC.B $80 + &LEN(&name), '&name'
|
|
DC.W $0000
|
|
ENDM
|
|
ENDIF
|
|
|
|
;===============================================================================
|
|
;
|
|
; FUNCTION DataAccessHandler(dataType : DBType; theLen : INTEGER; thePlaces :
|
|
; INTEGER; theFlags : INTEGER; theData : Ptr;
|
|
; theText : Handle) : OSErr;
|
|
;
|
|
; Common entry point for all default system result handlers. Branches to
|
|
; appropriate routine.
|
|
;
|
|
;===============================================================================
|
|
|
|
DataAccessHandler PROC EXPORT
|
|
|
|
;
|
|
; record corresponding to the stack on entry
|
|
;
|
|
myStack RECORD 0
|
|
ReturnAddr DS.L 1
|
|
theText DS.L 1
|
|
theData DS.L 1
|
|
theFlags DS.W 1
|
|
thePlaces DS.W 1
|
|
theLen DS.W 1
|
|
dataType DS.L 1
|
|
theOSErr DS.W 1
|
|
ENDR
|
|
|
|
CASE OFF ; following are Pascal routines
|
|
|
|
IMPORT typeBooleanHandler
|
|
IMPORT typeIntegerHandler
|
|
IMPORT typeFloatHandler
|
|
IMPORT typeCharHandler
|
|
IMPORT typeUnknownHandler
|
|
IMPORT typeColBreakHandler
|
|
IMPORT typeRowBreakHandler
|
|
IMPORT typeTimeHandler
|
|
IMPORT typeDateHandler
|
|
IMPORT typeTimeStampHandler
|
|
IMPORT typeMoneyDecimalHandler
|
|
IMPORT zeroLengthHandler
|
|
IMPORT nilPtrHandler ; <10>
|
|
|
|
WITH myStack
|
|
MOVE.L dataType(A7),D0 ; D0 = dataType
|
|
ENDWITH
|
|
|
|
; check for the most common data types first
|
|
|
|
CMP.L #typeColBreak,D0 ; column break?
|
|
BNE.S @1 ; no
|
|
JMP typeColBreakHandler ; yes
|
|
@1
|
|
CMP.L #typeRowBreak,D0 ; row break?
|
|
BNE.S @2 ; no
|
|
JMP typeRowBreakHandler ; yes
|
|
@2
|
|
CMP.L #typeUnknown,D0 ; unknown type?
|
|
BNE.S @3 ; no
|
|
JMP typeUnknownHandler ; yes
|
|
@3
|
|
WITH myStack ; <10>
|
|
MOVE.W theFlags(A7),D1 ; get flags <10>
|
|
AND.W #kDBNullFlag,D1 ; is it a null item? <10>
|
|
BEQ.S @notNull ; <10>
|
|
JMP zeroLengthHandler ; yes => return noErr <10>
|
|
@notNull ; no => get the data type and continue on <10>
|
|
TST.L theData(A7) ; is it a nil pointer? <10>
|
|
ENDWITH ; <10>
|
|
BNE.S @notNilPtr ; <10>
|
|
JMP nilPtrHandler ; yes => return an error <10>
|
|
@notNilPtr ; no => continue on <10>
|
|
CMP.L #typeDecimal,D0 ; decimal?
|
|
BEQ.S @4 ; yes
|
|
CMP.L #typeMoney,D0 ; money?
|
|
BNE.S @checkZero ; no
|
|
@4
|
|
JMP typeMoneyDecimalHandler ; used for both typeDecimal and typeMoney
|
|
|
|
; check for zero length
|
|
@checkZero
|
|
WITH myStack
|
|
TST.W theLen(A7) ; is length 0?
|
|
BNE.S @5 ; no, try rest of data types
|
|
JMP zeroLengthHandler ; yes, just return noErr
|
|
ENDWITH
|
|
|
|
; now try other data types
|
|
@5
|
|
CMP.L #typeVChar,D0 ; variable length character string?
|
|
BEQ.S @6 ; yes
|
|
CMP.L #typeChar,D0 ; character?
|
|
BNE.S @7 ; no
|
|
@6
|
|
JMP typeCharHandler ; used for both typeVChar and typeChar
|
|
@7
|
|
CMP.L #typeBoolean,D0 ; Boolean?
|
|
BNE.S @8 ; no
|
|
JMP typeBooleanHandler ; yes
|
|
@8
|
|
CMP.L #typeSMInt,D0 ; small integer?
|
|
BEQ.S @9 ; yes
|
|
CMP.L #typeInteger,D0 ; integer?
|
|
BNE.S @10 ; no
|
|
@9
|
|
JMP typeIntegerHandler ; used for both typeSMInt and typeInteger
|
|
@10
|
|
CMP.L #typeSMFloat,D0 ; small float?
|
|
BEQ.S @11 ; yes
|
|
CMP.L #typeFloat,D0 ; float?
|
|
BNE.S @12 ; no
|
|
@11
|
|
JMP typeFloatHandler ; used for both typeSMFloat and typeFloat
|
|
@12
|
|
CMP.L #typeTime,D0 ; time?
|
|
BNE.S @13 ; no
|
|
JMP typeTimeHandler ; yes
|
|
@13
|
|
CMP.L #typeDate,D0 ; date?
|
|
BNE.S @14 ; no
|
|
JMP typeDateHandler ; yes
|
|
@14
|
|
CMP.L #typeTimeStamp,D0 ; TimeStamp?
|
|
BNE.S @15 ; no
|
|
JMP typeTimeStampHandler ; yes
|
|
@15
|
|
JMP typeUnknownHandler ; default is unknown
|
|
|
|
IF DataAccessDebug THEN
|
|
DoDebugSymbols DataAccessHandler ; label for MacsBug
|
|
ENDIF
|
|
|
|
ENDPROC ; end of DataAccessHandler
|
|
|
|
END
|