def unpack()

in ebcdic.py [0:0]


def unpack(bytes: bytearray, type: str, rem_lv: bool):
    #
    # Formats ebcdic text, zoned, big endian binary or decinal data into unpacked/string ascii data.
    #
    # Parameters:
    #  - bytes (bytearray): The content to be extracted
    #  - type  (str)......: 
    #   - ch : text                 | pic  x
    #   - zd : zoned                | pic  9
    #   - zd+: signed zoned         | pic s9
    #   - bi : binary               | pic  9 comp
    #   - bi+: signed binary        | pic s9 comp
    #   - pd : packed-decimal       | pic  9 comp-3
    #   - pd+: signed packed-decimal| pic s9 comp-3
    #
    # Returns:
    #  - ascii string
    #
    # Test sample:
    #  import struct
    #  ori = 9223372036854775807
    #  print(ori, unpack(struct.pack(">q",ori),"bi+"))
    #  ori = ori * -1
    #  print(ori, unpack(struct.pack(">q",ori),"bi+"))
    #  print(unpack(bytearray.fromhex("f0f0f1c1"), "zd+"))
    #
    # Input examples:
    # - 8 bytes comp-signed   struct q: -9,223,372,036,854,775,808 through +9,223,372,036,854,775,807
    # - 8 bytes comp-unsigned struct Q: 0 through 18,446,744,073,709,551,615
    # - 4 bytes comp-signed   struct i: -2147483648 through +2147483647
    # - 4 bytes comp-unsigned struct I: 0 through +4294967295
    # - 2 bytes comp-signed   struct h: -32768 through +32767
    # - 2 bytes comp-unsigned struct H: 0 through +65535
    
    if type.lower() == "ch" or type.lower() == "zd":               
        return bytes.decode('cp037').replace('\x00', '').rstrip() if rem_lv == True else bytes.decode('cp037')
    elif type.lower() == "pd" or type.lower() == "pd+":        
        return ("" if bytes.hex()[-1:] != "d" and bytes.hex()[-1:] != "b" else "-") + bytes.hex()[:-1]
    elif type.lower() == "bi" or (type.lower() == "bi+" and bytes.hex() <= HighestPositive[:len(bytes)*2]): 
        a = int("0x" + bytes.hex(), 0)
        return str(a)
    elif type.lower() == "bi+":
        return str(int("0x" + bytes.hex(), 0) - int("0x" + len(bytes) * 2 * "f", 0) -1)
    elif type.lower() == "zd+":
        return ("" if bytes.hex()[-2:-1] != "d" else "-") + bytes[:-1].decode('cp037') + bytes.hex()[-1:]
    else:
        print("---------------------------\nLength & Type not supported\nLength: ",len(bytes),"\nType..: " ,type)
        exit()