* Roman numerals Decode - 17/04/2019 ROMADEC CSECT USING ROMADEC,R13 base register B 72(R15) skip savearea DC 17F'0' savearea SAVE (14,12) save previous context ST R13,4(R15) link backward ST R15,8(R13) link forward LR R13,R15 set addressability LA R6,1 i=1 DO WHILE=(C,R6,LE,=A(NV)) do i=1 to hbound(vals) LR R1,R6 i SLA R1,3 ~ LA R4,VALS-L'VALS(R1) @vals(i) MVC X,0(R4) x=vals(i) SR R9,R9 prev=0 ST R9,Y y=0 LA R7,L'X j=1 DO WHILE=(C,R7,GE,=A(1)) do j=length(x) to 1 by -1 LA R4,X-1 @x AR R4,R7 +j MVC C,0(R4) c=substr(x,j,1) IF CLI,C,NE,C' ' THEN if c^=' ' then SR R1,R1 r1=0 LA R2,1 k=1 DO WHILE=(C,R2,LE,=A(L'ROMAN)) do k=1 to length(roman) LA R3,ROMAN-1 @roman AR R3,R2 +k IF CLC,0(L'C,R3),EQ,C THEN if substr(roman,k,1)=c LR R1,R2 index=k B REINDEX leave k ENDIF , endif LA R2,1(R2) k=k+1 ENDDO , enddo k REINDEX EQU * r1=index(roman,c) SLA R1,2 ~ L R8,DECIM-4(R1) n=decim(index(roman,c)) IF CR,R8,LT,R9 THEN if n ....' XDEC DS CL12 REGEQU END ROMADEC