mirror of
https://github.com/PDP-10/its.git
synced 2026-01-13 23:36:30 +00:00
132 lines
2.4 KiB
Plaintext
132 lines
2.4 KiB
Plaintext
;
|
||
; 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
|