; ; File: Strings.a ; ; Copyright: © 1992 by Apple Computer, Inc. All rights reserved. ; ; Change History (most recent first): ; ; 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