1
0
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:
Lars Brinkhoff
2018-10-18 15:04:18 +02:00
parent b1fd5187cc
commit 2bb4e1d28a
58 changed files with 8861 additions and 1 deletions

131
src/clib/string.cmid Normal file
View 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