mirror of
https://github.com/PDP-10/its.git
synced 2026-02-25 16:39:47 +00:00
Files from CLIB; AR2 CLIB.
This commit is contained in:
131
src/clib/string.cmid
Normal file
131
src/clib/string.cmid
Normal file
@@ -0,0 +1,131 @@
|
||||
;
|
||||
; 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
|
||||
Reference in New Issue
Block a user