commit 6158c30acc3e7b210819177b293a428f50d1ede8 from: Sven M. Hallberg date: Thu Jun 4 12:11:23 2026 UTC und64 -l: match output format to C64 commit - 999b77b0e4e968871be7f0f9ff15a0e1e6685a55 commit + 6158c30acc3e7b210819177b293a428f50d1ede8 blob - 2274d20c9966d4dbd4e1448a7f7453a4976f8f73 blob + 2c496a21b300c03b6f3de6c6ecc0e5b1895ca187 --- und64.c +++ und64.c @@ -54,6 +54,7 @@ struct direntry { */ #include +#include #include #define fromw(X) ((X).hi * 256 + (X).lo) @@ -85,8 +86,8 @@ blknum(blkaddr ba) } #define blkoff(BA) (blknum(BA) * 256) -void -putfstrn(int n, uchar *s) +int +putfstr_(int n, uchar *s, bool brk) { int i; uchar c; @@ -94,17 +95,22 @@ putfstrn(int n, uchar *s) for (i = 0; i < n; i++) { c = s[i]; - if (c > 127) - break; + if (c > 127) { + if (brk) + break; + else + c = c - 128; + } if (c >= 32 && c < 127) /* ASCII SPC and DEL */ putchar(c); else putchar('~'); } - for (; i < n; i++) - putchar(' '); + + return i; } -#define putfstr(X) putfstrn(sizeof (X), (X)) +#define putfstr(X) putfstr_(sizeof (X), (X), true) +#define putfstrend(X,I) putfstr_(sizeof (X) - (I), (X) + (I), false) #define STRSZ 24 char * @@ -210,17 +216,20 @@ listdir(void) struct datablk *db; struct direntry *de; blkaddr ba; - int i; + int i, j, nfree; ftype t; dh = image + blkoff(hdrloc); + fputs("0 ", stdout); + fputs("\e[7m", stdout); /* reverse video on */ putchar('"'); - putfstr(dh->dh_name); + putfstrend(dh->dh_name, 0); putchar('"'); putchar(' '); - putfstr(dh->dh_diskid); + putfstrend(dh->dh_diskid, 0); putchar(' '); - putfstr(dh->dh_dosver); + putfstrend(dh->dh_dosver, 0); + fputs("\e[27m", stdout); /* reverse video off */ putchar('\n'); ba = dh->dh_dir; @@ -233,10 +242,12 @@ listdir(void) if (!de->de_closed && t == DEL) continue; - printf("%3d \"", fromw(de->de_nblocks)); - putfstr(de->de_name); + printf("%-4d \"", fromw(de->de_nblocks)); + j = putfstr(de->de_name); putchar('"'); + putfstrend(de->de_name, j); putchar(' '); + putchar(' '); if (de->de_closed) putchar(' '); else @@ -252,6 +263,12 @@ listdir(void) ba = db->db_next; } + nfree = 0; + for (i = 0; i < sizeof dh->dh_bam; i++) + for (j = 0; j < 8; j++) + nfree += (dh->dh_bam[i] >> j) & 1; + printf("%d BLOCKS FREE.\n", nfree); + return 0; }