// ************************************************** // * YOU NEED TO CUSTOMIZE THE CODE BETWEEN HERE... * // ************************************************** // Now we use Uunpack, Sunpack, and xlat to translate the fields. // // Let's pretend our input record is: // // MERCHANT-NUMBER PIC 9(9) COMP-3. // STORE-NUMBER PIC 9(9) COMP-3. // CREATED-DATE PIC 9(8) COMP-3. (FMT=YYYYMMDD) // MERCHANT-NAME PIC X(32). // OWNER-NAME PIC X(32). // CURRENT-BALANCE PIC S9(8)v99. // // The first two fields are packed unsigned numeric, using an odd number // of digits, so we use Uunpack: dst = Uunpack(dst, inbuf+0, 5); dst = Uunpack(dst, inbuf+5, 5); // The date is also a packed unsigned numeric, but has only 8 digits, so // we tell Uunpack to skip the first digit (otherwise our date would look // like '0YYYYMMDD'. dst = Uunpack(dst, inbuf+10, 5, 1); // The next two fields are simple text fields. This is the easy // translation bit. You could call xlat twice, but since they're // adjacent, I'll translate both text fields at the same time: xlat(dst, inbuf+15, 64); // Signed numbers are similar to the unsigned, but they have trailing // signs. A fancy program would move the sign to the front. This is // decidedly *not* a fancy program. dst = Sunpack(dst, inbuf+74, 6); // Adding field delimiters, end of record markers, etc., is pretty // trivial. Here we'll add a CR+LF at the end of each line: *dst++ = '\r'; *dst++ = '\n'; *dst++ = 0; // ***************************** // * END OF CUSTOMIZED SECTION * // ***************************** // Write our translated record fputs(outbuf, fout); } printf("%lu reads\n", recs); fclose(fin); fclose(fout); }