Das Ganze funktioniert nur in RPGLE.
Per Syscolumns kannst du die Feldliste mit Namen und Ausprägung auslesen, allerdings nicht die Pufferposition.
Hier bietet sich DSPFFD mit Outfile an, da bekommt man auch diese.
Per Feldtyp bzw. Spalte STORAGE dann die Bytelänge ermitteln (beachte bei Packed die Länge in Bytes!), ggf. die Feldposition (an Hand von ORDINAL_POSITION) hochzählen.
Bei DATE (4)/TIME (3)/TIMESTAMP (10) hast du jedoch schon verloren, da hier die interne Länge und nicht die Pufferlänge angegeben wird.
Da ist dann DSPFFD wohl besser, da hier das DATFMT berücksichtigt wird.
Bist du so gewappnet kannst du per %SUBST() die Felder vergleichen.
Für die Ausgabe musst du nur noch bei gepackten Feldern ein paar Verrenkungen programmieren.