dump: proc options(main);
    %replace
        items by 16;
    dcl
        sysprint file,
        input file;
    dcl
        (i, j) fixed,
        buff (128) bit(8),
        c char(1),
        char char(items),
        record dec(5);

    on endfile(input)
        stop;

    open file(input) record keyed title('$1.$1')
        env (f(128),b(4000));
    open file(sysprint) stream output title('$2.$2')
        env (b(4000));

        do record = 0 by 1;
        read file(input) into (buff);
            do i = 0 to 127 by items;
                do j = 1 to items;
                if buff(i+j) < '20'b4 then
                    c = '.'; else
                    unspec(c) = buff(i+j);
                substr(char,j,1) = c;
                end;
            if i = 0 then
                put edit(record,':') (skip(2),f(5),a);
            else
                put edit('      ') (skip,a);
            put edit((' ',buff(i+j) do j = 1 to items))
                (a,b4(2));
            put edit(' ',char) (a);
            end;
        end;
    end dump;
