Nu er jeg jævnt dårlig til COBOL, men jeg kender base64.
Prøv og se om du kan shine det her lidt op:
IDENTIFICATION DIVISION. PROGRAM-ID. B64DECODE.
ENVIRONMENT DIVISION.
DATA DIVISION. WORKING-STORAGE SECTION. 01 I PIC 9(1) BINARY. 01 L2 PIC 9(3) BINARY. 01 ARRAYS. 03 B6 PIC 9(3) BINARY OCCURS 4. 03 B8 PIC 9(3) BINARY OCCURS 3. LINKAGE SECTION. 01 S PIC X(100) DISPLAY. 01 RES PIC X(100) DISPLAY. 01 L PIC 9(3) BINARY.
PROCEDURE DIVISION USING S, RES, L. MAIN-PARAGRAPH. MOVE 0 TO L PERFORM VARYING L2 FROM 1 BY 4 UNTIL S(L2:1) = " " PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4 MOVE FUNCTION ORD(S(-1+L2+I:1)) TO B6(I) SUBTRACT 1 FROM B6(I) END-PERFORM PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4 IF B6(I) >= 48 AND B6(I) <= 57 THEN COMPUTE B6(I) = B6(I) + 4 ELSE IF B6(I) >= 65 AND B6(I) <= 90 THEN COMPUTE B6(I) = B6(I) - 65 ELSE IF B6(I) >= 97 AND B6(I) <= 122 THEN COMPUTE B6(I) = B6(I) - 71 ELSE IF B6(I) = 43 THEN COMPUTE B6(I) = 62 ELSE IF B6(I) = 47 THEN COMPUTE B6(I) = 63 ELSE IF B6(I) = 61 THEN COMPUTE B6(I) = 0 END-IF END-IF END-IF END-IF END-IF END-IF END-PERFORM COMPUTE B8(1) = B6(1) * 4 + B6(2) / 16 COMPUTE B8(2) = FUNCTION MOD(B6(2), 16) * 16 + B6(3) / 4 COMPUTE B8(3) = FUNCTION MOD(B6(3), 4) * 64 + B6(4) PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3 ADD 1 TO B8(I) MOVE FUNCTION CHAR(B8(I)) TO RES(L+I:1) END-PERFORM ADD 3 TO L GIVING L END-PERFORM EXIT PROGRAM.
PROCEDURE DIVISION USING S, RES, L. MAIN-PARAGRAPH. MOVE 0 TO L PERFORM VARYING L2 FROM 1 BY 4 UNTIL S(L2:1) = " " PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4 MOVE FUNCTION ORD(S(-1+L2+I:1)) TO B6(I) SUBTRACT 1 FROM B6(I) END-PERFORM MOVE 0 TO EQ PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4 IF B6(I) >= 48 AND B6(I) <= 57 THEN COMPUTE B6(I) = B6(I) + 4 ELSE IF B6(I) >= 65 AND B6(I) <= 90 THEN COMPUTE B6(I) = B6(I) - 65 ELSE IF B6(I) >= 97 AND B6(I) <= 122 THEN COMPUTE B6(I) = B6(I) - 71 ELSE IF B6(I) = 43 THEN COMPUTE B6(I) = 62 ELSE IF B6(I) = 47 THEN COMPUTE B6(I) = 63 ELSE IF B6(I) = 61 THEN COMPUTE B6(I) = 0 ADD 1 TO EQ END-IF END-IF END-IF END-IF END-IF END-IF END-PERFORM COMPUTE B8(1) = B6(1) * 4 + B6(2) / 16 COMPUTE B8(2) = FUNCTION MOD(B6(2), 16) * 16 + B6(3) / 4 COMPUTE B8(3) = FUNCTION MOD(B6(3), 4) * 64 + B6(4) PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3 ADD 1 TO B8(I) MOVE FUNCTION CHAR(B8(I)) TO RES(L+I:1) END-PERFORM ADD 3 TO L GIVING L END-PERFORM SUBTRACT EQ FROM L EXIT PROGRAM.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.