mirror of
https://github.com/PDP-10/its.git
synced 2026-03-23 09:19:24 +00:00
126 lines
2.2 KiB
Plaintext
126 lines
2.2 KiB
Plaintext
;
|
||
; STRING - C STRING, BYTE, AND BIT ROUTINES
|
||
;
|
||
; This file is PDP-10 dependent, system-independent.
|
||
;
|
||
|
||
;TITLE STRING ;[plb] confuses with STRINGP (STRNGP.REL)
|
||
TITLE STR
|
||
.INSRT SS:<C>CINSRT
|
||
.INSRT SS:<C>MINSRT
|
||
|
||
; 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
|
||
SL$1: SKIPE (B) ; GET NEXT CHARACTER
|
||
AOJA B,SL$1
|
||
SUB B,STR
|
||
MOVEI A,(B)
|
||
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
|
||
SUBI B,(A)
|
||
HRLI B,A ; HACK TO MAKE LOOP SHORTER
|
||
SC$1: MOVE C,@B ; GET NEXT CHAR
|
||
MOVEM C,(A) ; STORE
|
||
CAIE C,0
|
||
AOJA A,SC$1 ; INCR BOTH POINTERS
|
||
SC$RET: RETURN
|
||
|
||
CENTRY STCMP,[S1,S2] ; STRING COMPARE
|
||
|
||
MOVE B,S1
|
||
MOVE C,S2
|
||
SUBI C,(B)
|
||
HRLI C,B
|
||
SM$1: MOVE A,(B) ; GET NEXT CHAR
|
||
CAME A,@C
|
||
GO SM$2
|
||
CAIE A,0
|
||
AOJA B,SM$1
|
||
MOVEI A,1
|
||
RETURN
|
||
SM$2: MOVEI A,0
|
||
RETURN
|
||
|
||
CENTRY LOWER,[CH] ; CVT CHAR TO LOWER CASE
|
||
|
||
MOVE A,CH
|
||
CAIL A,"A
|
||
CAILE A,"Z
|
||
CAIA
|
||
ADDI A,"a-"A
|
||
RETURN
|
||
|
||
CENTRY UPPER,[CH] ; CVT CHAR TO UPPER CASE
|
||
|
||
MOVE A,CH
|
||
CAIL A,"a
|
||
CAILE A,"z
|
||
CAIA
|
||
SUBI A,"a-"A
|
||
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
|
||
|
||
ILDB A,@ABPTR
|
||
RETURN
|
||
|
||
CENTRY IDPB,[CH,ABPTR] ; INCREMENT AND DEPOSIT BYTE
|
||
|
||
MOVE B,CH ; THE CHARACTER
|
||
IDPB B,@ABPTR
|
||
RETURN
|
||
|
||
END
|