home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 April
/
Chip_2000-04_cd.bin
/
zkuste
/
TPascal
/
OOPDEMOS.ARC
/
STREAM.ASM
< prev
next >
Wrap
Assembly Source File
|
1989-05-02
|
3KB
|
144 lines
; Turbo Pascal 5.5 object-oriented example
; Assembler code for OBJECTS.PAS unit
; Copyright (c) 1989 by Borland International, Inc.
TITLE Stream
INCLUDE OBJECTS.INC
CODE SEGMENT BYTE PUBLIC
ASSUME CS:CODE
PUBLIC Stream@Get
Stream@Get PROC FAR
@Self EQU (DWORD PTR [BP+6])
PUSH BP
MOV BP,SP
PUSH AX
MOV AX,SP
PUSH SS
PUSH AX
MOV AX,2
PUSH AX
LES DI,@Self
PUSH ES
PUSH DI
MOV DI,ES:[DI]
CALL [DI].Stream$Read
POP BX
OR BX,BX
JE @@2
LES DI,@Self
DEC BX
CMP BX,ES:[DI].Stream@TypeCount
JAE @@1
PUSH ES
PUSH DI
LES DI,ES:[DI].Stream@TypeList
SHL BX,1
PUSH WORD PTR ES:[DI+BX]
XOR AX,AX
PUSH AX
PUSH AX
LES DI,@Self
LES DI,ES:[DI].Stream@ProcList
SHL BX,1
SHL BX,1
CALL ES:[DI+BX].SProc@LoadProc
JMP SHORT @@3
@@1: MOV AX,-2
CALL StreamError
@@2: XOR AX,AX
MOV DX,AX
@@3: POP BP
RET 4
Stream@Get ENDP
PUBLIC Stream@Put
Stream@Put PROC FAR
@B EQU (DWORD PTR [BP+10])
@Self EQU (DWORD PTR [BP+6])
PUSH BP
MOV BP,SP
LES DI,@B
MOV CX,ES
OR CX,DI
JE @@1
MOV AX,ES:[DI]
LES DI,@Self
MOV CX,ES:[DI].Stream@TypeCount
JCXZ @@2
MOV BX,CX
LES DI,ES:[DI].Stream@TypeList
CLD
REPNE SCASW
JNE @@2
NEG CX
ADD CX,BX
@@1: PUSH CX
MOV AX,SP
PUSH SS
PUSH AX
MOV AX,2
PUSH AX
LES DI,@Self
PUSH ES
PUSH DI
MOV DI,ES:[DI]
CALL [DI].Stream$Write
POP BX
DEC BX
JS @@3
LES DI,@Self
PUSH ES
PUSH DI
PUSH @B.w2
PUSH @B.w0
LES DI,ES:[DI].Stream@ProcList
SHL BX,1
SHL BX,1
SHL BX,1
CALL ES:[DI+BX].SProc@StoreProc
JMP SHORT @@3
@@2: LES DI,@Self
MOV AX,-1
CALL StreamError
@@3: POP BP
RET 8
Stream@Put ENDP
; Stream error handler
; In AX = Error code
; ES:DI = Stream object pointer
; Uses AX,BX,CX,DX,SI
PUBLIC StreamError
StreamError PROC NEAR
PUSH ES
PUSH DI
PUSH AX
PUSH ES
PUSH DI
MOV DI,ES:[DI]
CALL [DI].Stream$Error
POP DI
POP ES
RET
StreamError ENDP
CODE ENDS
END