; ; STRING - C STRING, BYTE, AND BIT ROUTINES ; ; This file is PDP-10 dependent, system-independent. ; TITLE STRING .INSRT NC .INSRT NM ; CONTAINS: ; SLEN ; STRING LENGTH ; STCPY ; STRING COPY ; STCMP ; STRING COMPARE ; LOWER ; CVT CHAR TO LOWER CASE ; UPPER ; CVT CHAR TO UPPER CASE ; BGET ; BIT ARRAY BIT GET ; BSET ; BIT ARRAY BIT SET ; ILDB ; INCREMENT AND LOAD BYTE ; IDPB ; INCREMENT AND DEPOSIT BYTE CENTRY SLEN,[STR] ; STRING LENGTH MOVE B,STR ; POINTER TO STRING SETZ A, ; COUNTER SL$1: MOVE C,(B) ; GET NEXT CHARACTER SKIPN C GO SL$RET ; RETURN ON NULL CHAR ADDI A,1 ; INCR COUNTER ADDI B,1 ; INCR POINTER GO SL$1 SL$RET: RETURN CENTRY STCPY,[SRC,DEST] ; STRING COPY ; COPY STRING FROM SRC TO DEST ; RETURN POINTER TO NULL TERMINATING NEW COPY MOVE B,SRC ; SOURCE POINTER MOVE A,DEST ; DESTINATION POINTER SC$1: MOVE C,(B) ; GET NEXT CHAR MOVEM C,(A) ; STORE SKIPN C GO SC$RET ; RETURN AFTER WRITING NULL CHAR ADDI B,1 ; INCR SOURCE PTR ADDI A,1 ; INCR DESTINATION PTR GO SC$1 SC$RET: RETURN CENTRY STCMP,[S1,S2] ; STRING COMPARE MOVE B,S1 MOVE C,S2 SM$1: MOVE A,(B) ; GET NEXT CHAR CAME A,(C) GO SM$2 ; DIFFERENCE FOUND ADDI B,1 ; INCR PTR1 ADDI C,1 ; INCR PTR2 JUMPN A,SM$1 SETO A, GO SM$RET SM$2: SETZ A, SM$RET: RETURN CENTRY LOWER,[CH] ; CVT CHAR TO LOWER CASE MOVE A,CH CAIGE A,"A GO LW$RET CAILE A,"Z GO LW$RET ADDI A,"a-"A LW$RET: RETURN CENTRY UPPER,[CH] ; CVT CHAR TO UPPER CASE MOVE A,CH CAIGE A,"a GO UP$RET CAILE A,"z GO UP$RET SUBI A,"a-"A UP$RET: RETURN CENTRY BGET,[BARRAY,BINDEX] ; BIT ARRAY BIT GET HRRZ C,BINDEX HRRZ A,BARRAY MOVEI B,(C) ; SUBSCRIPT LSH C,-5 ; GET WORD OFFSET ADDI A,(C) ; GET WORD ADDRESS MOVE A,(A) ; GET THE WORD ANDI B,37 ; BIT OFFSET ROT A,1(B) ; PUT BIT IN RIGHT-MOST POSITION ANDI A,1 ; GET THE BIT RETURN CENTRY BSET,[BARRAY,BINDEX] ; BIT ARRAY BIT SET HRRZ C,BINDEX HRRZ A,BARRAY MOVEI B,(C) ; SUBSCRIPT LSH C,-5 ; GET WORD OFFSET ADDI A,(C) ; GET WORD ADDRESS ANDI B,37 ; BIT OFFSET MOVN B,B ; NEGATIVE BIT OFFSET MOVEI C,1 ; A BIT ROT C,-1(B) ; PUT IN RIGHT POSITION IORM C,(A) ; SMASH ARRAY WORD MOVEI A,1 RETURN CENTRY ILDB,[ABPTR] ; INCREMENT AND LOAD BYTE HRRZ A,ABPTR ; ADDRESS OF BYTE POINTER ILDB A,(A) RETURN CENTRY IDPB,[CH,ABPTR] ; INCREMENT AND DEPOSIT BYTE MOVE B,CH ; THE CHARACTER HRRZ A,ABPTR ; ADDRESS OF BYTE POINTER IDPB B,(A) RETURN END