• Using one 01 in another 01?

    From Bruce M. Axtens@some.one@some.where to comp.lang.cobol on Tue Feb 4 03:17:44 2025
    From Newsgroup: comp.lang.cobol

    Given

    IDENTIFICATION DIVISION.
    PROGRAM-ID. rotational-cipher.
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 WS-KEY PIC 9(2).
    01 WS-TEXT PIC X(128).
    01 WS-CIPHER PIC X(128).
    01 WS-ALPHA-LOWER PIC X(26) VALUE 'abcdefghijklmnopqrstuvwxyz'.
    01 WS-ALPHA-UPPER PIC X(26) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
    01 WS-DOUBLE-UPPER PIC X(52)
    VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'.

    PROCEDURE DIVISION.
    ROTATIONAL-CIPHER.
    INITIALIZE WS-CIPHER.
    INSPECT WS-TEXT CONVERTING WS-ALPHA-LOWER TO WS-ALPHA-UPPER.
    ADD 1 TO WS-KEY.
    INSPECT WS-TEXT CONVERTING WS-ALPHA-UPPER TO
    WS-DOUBLE-UPPER(WS-KEY:26).
    MOVE WS-TEXT TO WS-CIPHER.

    is it possible to use WS-ALPHA-UPPER in WS-DOUBLE-UPPER by making WS- DOUBLE-UPPER an 01 with a couple of 03 FILLERs with WS-ALPHA-UPPER as the values?

    -Bruce
    --- Synchronet 3.20c-Linux NewsLink 1.2
  • From docdwarf@docdwarf@panix.com () to comp.lang.cobol on Tue Feb 4 04:20:53 2025
    From Newsgroup: comp.lang.cobol

    In article <vns0so$1j4ho$1@dont-email.me>,
    Bruce M. Axtens <some.one@some.where> wrote:

    Let me see if I understand this correctly.


    Given

    IDENTIFICATION DIVISION.
    PROGRAM-ID. rotational-cipher.
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 WS-KEY PIC 9(2).

    It used to be taught that all values in WORKING-STORAGE should be defined
    with an initial VALUE. This would not only place the burden of
    performance on the compiler but would also insure that a
    forgotten MOVE SPACES or MOVE ZEROES wouldn't result in an undefined value blowing something up.

    What is in PIC 9(2)? Nobody knows. PIC 9(2) VALUE ZEROES comes out
    bright and shiny with x'3030' or X'F0F0' every time. That said.

    01 WS-TEXT PIC X(128).
    01 WS-CIPHER PIC X(128).
    01 WS-ALPHA-LOWER PIC X(26) VALUE 'abcdefghijklmnopqrstuvwxyz'.
    01 WS-ALPHA-UPPER PIC X(26) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
    01 WS-DOUBLE-UPPER PIC X(52)
    VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'.

    PROCEDURE DIVISION.
    ROTATIONAL-CIPHER.
    INITIALIZE WS-CIPHER.

    WS-CIPHER now contains spaces (x'20' or x'40') for 128 characters.

    INSPECT WS-TEXT CONVERTING WS-ALPHA-LOWER TO WS-ALPHA-UPPER.

    WS-TEXT has no VALUE. Nothing has been MOVEd to WS-TEXT. What's in
    there? Nobody knows.

    ADD 1 TO WS-KEY.

    WS-KEY was not initialized nor was anything moved to it. It may contain non-numeric data and SOC-7.

    INSPECT WS-TEXT CONVERTING WS-ALPHA-UPPER TO
    WS-DOUBLE-UPPER(WS-KEY:26).
    MOVE WS-TEXT TO WS-CIPHER.

    is it possible to use WS-ALPHA-UPPER in WS-DOUBLE-UPPER by making WS- >DOUBLE-UPPER an 01 with a couple of 03 FILLERs with WS-ALPHA-UPPER as the >values?

    It might be. but a different approach could help. If this code were to
    run as you desired what would be the result?

    DD
    --- Synchronet 3.20c-Linux NewsLink 1.2
  • From Bruce Axtens@snetxa@hotmail.com to comp.lang.cobol on Wed Feb 5 21:54:21 2025
    From Newsgroup: comp.lang.cobol

    So the code gets run by cobolcheck with a .cut file of

    TestCase "ROT0"
    MOVE 0 TO WS-KEY
    MOVE 'abcdefghijklmnopqrstuvwxyz' TO WS-TEXT
    PERFORM ROTATIONAL-CIPHER
    EXPECT WS-CIPHER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

    TestCase "ROT26"
    MOVE 26 TO WS-KEY
    MOVE 'abcdefghijklmnopqrstuvwxyz' TO WS-TEXT
    PERFORM ROTATIONAL-CIPHER
    EXPECT WS-CIPHER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

    TestCase "ROT1"
    MOVE 1 TO WS-KEY
    MOVE 'abcdefghijklmnopqrstuvwxyz' TO WS-TEXT
    PERFORM ROTATIONAL-CIPHER
    EXPECT WS-CIPHER = 'BCDEFGHIJKLMNOPQRSTUVWXYZA'

    TestCase "ROT13"
    MOVE 13 TO WS-KEY
    MOVE 'abcdefghijklmnopqrstuvwxyz' TO WS-TEXT
    PERFORM ROTATIONAL-CIPHER
    EXPECT WS-CIPHER = 'NOPQRSTUVWXYZABCDEFGHIJKLM'

    TestCase "ROT5 Capital Letters"
    MOVE 5 TO WS-KEY
    MOVE 'OMG' TO WS-TEXT
    PERFORM ROTATIONAL-CIPHER
    EXPECT WS-CIPHER = 'TRL'

    TestCase "ROT5 Numbers"
    MOVE 5 TO WS-KEY
    MOVE 'Testing 1 2 3 testing' TO WS-TEXT
    PERFORM ROTATIONAL-CIPHER
    EXPECT WS-CIPHER = 'YJXYNSL 1 2 3 YJXYNSL'

    TestCase "ROT5 Punctuation"
    MOVE 5 TO WS-KEY
    MOVE "Let's eat, Grandma!" TO WS-TEXT
    PERFORM ROTATIONAL-CIPHER
    EXPECT WS-CIPHER = "QJY'X JFY, LWFSIRF!"

    TestCase "ROT13 Quick Fox"
    MOVE 13 TO WS-KEY
    MOVE "The quick brown fox jumps over the lazy dog." TO WS-TEXT
    PERFORM ROTATIONAL-CIPHER
    EXPECT WS-CIPHER = "GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT."

    This is based on files in https://github.com/exercism/problem-specifications/tree/main/exercises/rotational-cipher

    So what my question was really about was whether one WS value can be
    used to define another. It seems not.

    -Bruce
    --- Synchronet 3.20c-Linux NewsLink 1.2