.TITLE MC3A.. STRING PROCEDURES FOR CORAL IN MACRO .IDENT /MC3A../ ; .PAGE .SBTTL EXTRACT SEGMENT OF STRING PROCEDURE (LSEG) LSEG:: SAVE R1,R2 ;SAVE R1,R2 CLR 100$ ;CLEAR OUT LOCAL WORK STRING MOV #32.,100$+2 ;PUT A SPACE AS FIRST CHARACTER ; MOV 2(R5),R0 ;HOLD STRING ADDRESS CALL R$ADDRESS ;CHECK ADDRESS VALIDITY IFERROR 140$ ;J IF ADDRESS ERROR ; MOV 6(R5),R1 ;HOLD END VALUE SUB 4(R5),R1 ;R1 NOW HOLDS END-START BLT 140$ ;J IF END-START <0 CMP R1,#55. ;IS SEGMENT WIDTH =>56 CHARACTERS BGT 140$ ;J IF END-START >55 CHARACTERS ; CMP @2(R5),6(R5) ;DOES END POSITION EXCEED STRING LENGTH BLT 140$ ;J IF ABOVE TRUE CMP 6(R5),4(R5) ;IS START SIZE GREATER THAN END SIZE BLT 140$ ;J IF END-START<0 ; CMP 4(R5),#1 ;IS START<1 BLT 140$ ;J IF START<1 CMP 6(R5),#1 ;IS END <1 BLT 140$ ;J IF END <1 ; ; COPY CHARACTERS FROM SEGMENT TO LOCAL STRING ; INC R1 ;R1 HOLD ACTUAL NUMBER OF CHARACTERS MOV R1,100$ ;SET UP LENGTH OF CHARACTER STRING MOV 2(R5),R0 ;HOLD START OF STRING ADDRESS INC R0 ;INDEX TO START OF CHARACTERS -1 POSITION ADD 4(R5),R0 ;INDEX TO START OF SEGMENT MOV #100$+2,R2 ;R2 -> TO START OF LOCAL STRING CHARACTER AREA 50$: MOVB (R0)+,(R2)+ ;COPY CHARACTERS FROM SEGMENT TO LOCAL AREA SOB R1,50$ ;LOOP TO END OF STRING SEGMENT ; ; LOAD LOCAL STRING ADDRESS AS REPLY ; 140$: MOV #100$,R0 ;R0 HOLDS ADDRESS UNSAVE R1,R2 ;RESTORE R1,R2 RETURN ;RETURN FROM SEGMENT PROCEDURE ; ; LOCAL DATA AREA RESERVE 56.,100$ ; .END ;