Trailing-Edge
-
PDP-10 Archives
-
decuslib20-06
-
decus/20-153/movsgn.mac
There is 1 other file named movsgn.mac in the archive. Click here to see a list.
TITLE MOVSGN FOR RPGLIB V1
SUBTTL MOVE A ZONE FROM ONE ITEM TO ANOTHER
;
; MOVSGN FOR RPGLIB V1
;
; Copyright (C) 1976, Bob Currier and Cerritos College
;
; THIS ROUTINE IS USED BY MOVEL AND THE MOVE ZONE VERBS
; TO MOVE CHARACTER ZONES AROUND.
;
; This module also contains the TESTZ and TESTB routines.
;
; FIRST UTILIZED: MARCH 23, ANNO DOMINI 1976
;
;
; CALL:
; MOVEI 16,PARAMETER ADDRESS
; PUSHJ 17,MVSGN/MVSGNR
;
; PARAMETERS:
; WORD 1:
; BYTE POINTER TO INPUT STRING
; WORD 2:
; BYTE POINTER TO OUTPUT STRING
;
; RETURNS:
; CALL+1 ALWAYS.
;
; REGISTERS USED:
; JAC, CNT, CH, TAC2, TAC3, TAC4, IPTR, OPTR
;
SEARCH RPGPRM, RPGSWI, UUOSYM, MACTEN
%%LBLLP==:%%LBLP
DEBUG==:DEBUG
BIS==:BIS
EXTERN EASTB. ; FORCE EASTBL TO BE LOADED
SALL
HISEG
ENTRY MVSGN
ENTRY MVSGNR
ENTRY TESTZ
ENTRY TESTB
EXTERN PTIBS. ; POINTER TO THE INPUT BYTE SIZE
EXTERN PTOBS. ; POINTER TO THE OUTPUT BYTE SIZE
T1==TAC2
T2==TAC3
T3==TAC4
SW==0 ; MUST BE 0 FOR RPGSWI
TA==11 ; Must agree with MOVE
TC==6 ; Must agree with MOVE
AC1==1 ; TESTB argument
AC2==2 ; TESTB argument
MVSGNR: SWONS FRESET; ; WE MUST RESET SIGN OF SOURCE
MVSGN: SWOFF FRESET; ; WE DON'T WANT TO RESET SIGN
MOVE IPTR,(PARM) ; GET INPUT POINTER
MOVE OPTR,1(PARM) ; GET OUTPUT POINTER
ILDB CH,IPTR ; GET SOURCE CHARACTER
LDB T1,PTIBS. ; GET INPUT BYTE SIZE
XCT MVSGT1-6(T1) ; CONVERT CHAR TO EBCDIC
MOVE T2,CH ; SAVE CHAR IN T2
ILDB CH,OPTR ; GET OUTPUT CHARACTER
LDB T1,PTOBS. ; GET OUTPUT BYTE SIZE
XCT MVSGT1-6(T1) ; CONVERT OUTPUT CHARACTER TO EBCDIC
LDB T3,EBCZNI ; GET ZONE FIELD OF INPUT CHAR
DPB T3,EBCZNO ; STORE AS ZONE OF OUTPUT
XCT MVSGT2-6(T1) ; CONVERT OUTPUT CHAR TO PROPER TYPE
DPB CH,OPTR ; STORE OUTPUT CHARACTER
TSWT FRESET; ; MUST WE RESET INPUT SIGN?
POPJ PP, ; NO - EXIT
MOVE CH,T2 ; GET INPUT CHARACTER
MOVEI T2,17 ; GET A HEXADECIMAL 'F'
DPB T2,EBCZNO ; STASH AS NEW INPUT ZONE
LDB T1,PTIBS. ; REGET INPUT BYTE SIZE
XCT MVSGT2-6(T1) ; CONVERT FROM EBCDIC TO WHATEVER
DPB CH,IPTR ; REPLACE CHARACTER
POPJ PP, ; EXIT
;TESTZ Routine to support the TESTZ verb
;
;
;
TESTZ: MOVE TA,1(PARM) ; get indicators
JSP JAC,INDCLR## ; clear 'em out
MOVE IPTR,(PARM) ; get pointer to operand
ILDB CH,IPTR ; get the pointer
LDB T1,PTIBS. ; get byte size
XCT MVSGT1-6(T1) ; and convert to EBCDIC
LDB T1,EBCZNO ; get the zone
CAIN T1,12 ; C ? (i.e. A-I)
JRST TSTZP ; yes - plus
CAIN T1,13 ; D ? (i.e. J-R or )
JRST TSTZM ; yes - minus
CAIN CH,120 ; & ?
JRST TSTZP ; yes - plus
CAIN CH,140 ; - ?
JRST TSTZM ; yes - minus
TSTZ: LDB TC,[POINT 8,TA,23] ; no - must be blank
PJRST SINDT ; set it on and exit
TSTZP: LDB TC,[POINT 8,TA,7] ; get plus indicator
PJRST SINDT## ; set it on
TSTZM: LDB TC,[POINT 8,TA,15] ; get minus indicator
PJRST SINDT ; set it on
;TESTB Routine to support the TESTB verb
;
;Call with AC16 pointing to resulting indicators and arguments in AC1 and AC2.
;
;
;
TESTB: HRRZ TA,(PARM) ; get the indicators
JSP JAC,INDCLR ; clear 'em
JUMPE AC2,TSTZ ; use zero indicator if no bits set
TDNN AC1,AC2 ; all masked bits off?
JRST TSTZP ; yes - use positive indicator
SETCA T1,AC1 ; no - complement
TDNN T1,AC2 ; all masked bits on?
JRST TSTZ ; yes - use zero indicator
JRST TSTZM ; no - use mediocre indicator
;DEFINE TABLE TO CONVERT TO EBCDIC
MVSGT1: LDB CH,PTR69.## ; SIXBIT TO EBCDIC
LDB CH,PTR79.## ; ASCII TO EBCDIC
Z ;
JFCL ; EBCDIC TO EBCDIC
;DEFINE TABLE TO CONVERT FROM EBCDIC
MVSGT2: LDB CH,PTR96.## ; EBCDIC TO SIXBIT
LDB CH,PTR97.## ; EBCDIC TO ASCII
Z ;
JFCL ; EBCDIC TO EBCDIC
EBCZNI: POINT 4,T2,31 ; POINTER TO ZONE IN T2
EBCZNO: POINT 4,CH,31 ; POINTER TO ZONE IN CH
END