sys7.1-doc-wip/Libs/InterfaceSrcs/Strings.a
2019-07-27 22:37:48 +08:00

124 lines
3.1 KiB
Plaintext

;
; File: Strings.a
;
; Copyright: © 1992 by Apple Computer, Inc. All rights reserved.
;
; Change History (most recent first):
;
; <SM2> 10/28/92 SWC Changed INCLUDEs to a LOAD of StandardEqu.d.
;
LOAD 'StandardEqu.d'
;FUNCTION C2PStr(cString: UNIV Ptr): Str255;
BLANKS ON
STRING ASIS
C2PStr proc EXPORT
move.l 4(sp),d0 ; address of s
MOVE.L D0,8(SP) ; Already know this will be returned value!
beq.s @4 ; test for Nil
move.l d0,a0 ; address of s
move.l a0,a1 ; also address of s
move.b (a1)+,d0 ; first character
beq.s @4 ; test of length zero
@1 move.b (a1),d1 ; byte about to be clobbered
move.b d0,(a1)+ ; move the last one forward
move.b d1,d0 ; move clobbered to last
bne.s @1 ; watch for 0 and end of C string
sub.l a0,a1 ; number of bytes moved
move.l a1,d0 ; string length + 1
subq #1,d0 ; string length
cmpi.l #255,d0
ble.s @2
move.l #255,d0
@2 move.b d0,(a0) ; Pascal string length
@4 MOVE.L (SP)+,A1 ; return address
ADDQ #4,SP ; remove parameter from stack
JMP (A1) ; bye-bye
;PROCEDURE C2PStrProc(cString: UNIV Ptr);
C2PStrProc proc EXPORT
move.l 4(sp),d0 ; address of s
beq.s @4 ; test for Nil
move.l d0,a0 ; address of s
move.l a0,a1 ; also address of s
move.b (a1)+,d0 ; first character
beq.s @4 ; test of length zero
@1 move.b (a1),d1 ; byte about to be clobbered
move.b d0,(a1)+ ; move the last one forward
move.b d1,d0 ; move clobbered to last
bne.s @1 ; watch for 0 and end of C string
sub.l a0,a1 ; number of bytes moved
move.l a1,d0 ; string length + 1
subq #1,d0 ; string length
cmpi.l #255,d0
ble.s @2
move.l #255,d0
@2 move.b d0,(a0) ; Pascal string length
@4 MOVE.L (SP)+,A1 ; return address
ADDQ #4,SP ; get rid of parameters: one long
JMP (A1) ; bye-bye
;FUNCTION P2CStr(pString: UNIV Ptr): StringPtr;
P2CStr proc EXPORT
MOVE.L (SP)+,A1 ; return address
MOVE.L (SP)+,D0 ; address of s
MOVE.L D0,(SP) ; Already know this will be returned value!
beq.s @3 ; test for Nil
move.l d0,a0 ; address of s
clr.l d0 ; clear for length
move.b (a0),d0 ; Pascal string length
bra.s @2 ; check for zero length
@1 move.b 1(a0),(a0)+ ; slide byte down one
@2 dbf d0,@1 ; loop for length of string
clr.b (a0) ; C string terminator
@3
JMP (A1) ; bye-bye
;PROCEDURE P2CStrProc(pString: UNIV Ptr);
P2CStrProc proc EXPORT
MOVE.L (SP)+,A1 ; return address
MOVE.L (SP)+,D0 ; address of s
beq.s @3 ; test for Nil
move.l d0,a0 ; address of s
clr.l d0 ; clear for length
move.b (a0),d0 ; Pascal string length
bra.s @2 ; check for zero length
@1 move.b 1(a0),(a0)+ ; slide byte down one
@2 dbf d0,@1 ; loop for length of string
clr.b (a0) ; C string terminator
@3
JMP (A1) ; bye-bye
END