mac-rom/Toolbox/DataAccessMgr/DataAccessResultsHandlers.a
Elliot Nunn 4325cdcc78 Bring in CubeE sources
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.
2017-12-26 09:52:23 +08:00

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