X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=cpmls.c;h=6bc6bad89b6f757c2651d41d8a3a108c9b89cdd3;hb=cb982f5c8c10c588bfdff162a46246e01eeef28f;hp=e2d1786ec4970062401dae95750859eed5f23e56;hpb=32087c67d53a8f8058b359388f23e2dbc9436d54;p=debian%2Fcpmtools diff --git a/cpmls.c b/cpmls.c index e2d1786..6bc6bad 100644 --- a/cpmls.c +++ b/cpmls.c @@ -1,11 +1,14 @@ /* #includes */ /*{{{C}}}*//*{{{*/ +#include "config.h" + #include #include #include #include #include -#include "config.h" -#include "getopt.h" +#include + +#include "getopt_.h" #include "cpmfs.h" /*}}}*/ @@ -20,23 +23,42 @@ static int namecmp(const void *a, const void *b) return strcmp(*((const char * const *)a),*((const char * const *)b)); } /*}}}*/ +/* onlyuser0 -- do all entries belong to user 0? */ /*{{{*/ +static int onlyuser0(char ** const dirent, int entries) +{ + int i; + + for (i=0; i2) { int i,j,k,l,announce,user; @@ -75,7 +104,7 @@ static void oldddir(char **dirent, int entries, struct cpmInode *ino) { struct tm *tmp; - if (dirent[i][0]=='0'+user/10 && dirent[i][1]=='0'+user%33) + if (dirent[i][0]=='0'+user/10 && dirent[i][1]=='0'+user%10) { if (announce==1) { @@ -93,16 +122,22 @@ static void oldddir(char **dirent, int entries, struct cpmInode *ino) cpmNamei(ino,dirent[i],&file); cpmStat(&file,&statbuf); - printf(" %5.1ldK",(statbuf.size+buf.f_bsize-1)/buf.f_bsize*(buf.f_bsize/1024)); + printf(" %5.1ldK",(long) (statbuf.size+buf.f_bsize-1) / + buf.f_bsize*(buf.f_bsize/1024)); + printf(" %6.1ld ",(long)(statbuf.size/128)); putchar(statbuf.mode&0200 ? ' ' : 'R'); putchar(statbuf.mode&01000 ? 'S' : ' '); putchar(' '); if (statbuf.mtime) { - tmp=gmtime(&statbuf.mtime); + tmp=localtime(&statbuf.mtime); printf(" %02d-%s-%04d %02d:%02d",tmp->tm_mday,month[tmp->tm_mon],tmp->tm_year+1900,tmp->tm_hour,tmp->tm_min); - tmp=gmtime(&statbuf.ctime); + } + else if (statbuf.ctime) printf(" "); + if (statbuf.ctime) + { + tmp=localtime(&statbuf.ctime); printf(" %02d-%s-%04d %02d:%02d",tmp->tm_mday,month[tmp->tm_mon],tmp->tm_year+1900,tmp->tm_hour,tmp->tm_min); } putchar('\n'); @@ -124,7 +159,7 @@ static void old3dir(char **dirent, int entries, struct cpmInode *ino) struct cpmStat statbuf; struct cpmInode file; - if (entries) + if (entries>2) { int i,j,k,l,announce,user, attrib; int totalBytes=0,totalRecs=0; @@ -138,7 +173,7 @@ static void old3dir(char **dirent, int entries, struct cpmInode *ino) { struct tm *tmp; - if (dirent[i][0]=='0'+user/10 && dirent[i][1]=='0'+user%33) + if (dirent[i][0]=='0'+user/10 && dirent[i][1]=='0'+user%10) { cpmNamei(ino,dirent[i],&file); cpmStat(&file,&statbuf); @@ -147,7 +182,8 @@ static void old3dir(char **dirent, int entries, struct cpmInode *ino) { if (user) putchar('\n'); printf("Directory For Drive A: User %2.1d\n\n",user); - printf(" Name Bytes Recs Attributes Prot Update Create\n"); + printf(" Name Bytes Recs Attributes Prot Update %s\n", + ino->sb->cnotatime ? "Create" : "Access"); printf("------------ ------ ------ ------------ ------ -------------- --------------\n\n"); } announce=2; @@ -160,8 +196,9 @@ static void old3dir(char **dirent, int entries, struct cpmInode *ino) totalBytes+=statbuf.size; totalRecs+=(statbuf.size+127)/128; - printf(" %5.1ldk",(statbuf.size+buf.f_bsize-1)/buf.f_bsize*(buf.f_bsize/1024)); - printf(" %6.1ld ",(long)(statbuf.size/128)); + printf(" %5.1ldk",(long) (statbuf.size+buf.f_bsize-1) / + buf.f_bsize*(buf.f_bsize/1024)); + printf(" %6.1ld ",(long)((statbuf.size+127)/128)); putchar((attrib & CPM_ATTR_F1) ? '1' : ' '); putchar((attrib & CPM_ATTR_F2) ? '2' : ' '); putchar((attrib & CPM_ATTR_F3) ? '3' : ' '); @@ -174,10 +211,22 @@ static void old3dir(char **dirent, int entries, struct cpmInode *ino) else if (attrib & CPM_ATTR_PWWRITE) printf("Write "); else if (attrib & CPM_ATTR_PWDEL) printf("Delete "); else printf("None "); - tmp=gmtime(&statbuf.mtime); - printf("%02d/%02d/%02d %02d:%02d ",tmp->tm_mon+1,tmp->tm_mday,tmp->tm_year%100,tmp->tm_hour,tmp->tm_min); - tmp=gmtime(&statbuf.ctime); - printf("%02d/%02d/%02d %02d:%02d",tmp->tm_mon+1,tmp->tm_mday,tmp->tm_year%100,tmp->tm_hour,tmp->tm_min); + if (statbuf.mtime) + { + tmp=localtime(&statbuf.mtime); + printf("%02d/%02d/%02d %02d:%02d ",tmp->tm_mon+1,tmp->tm_mday,tmp->tm_year%100,tmp->tm_hour,tmp->tm_min); + } + else printf(" "); + if (ino->sb->cnotatime && statbuf.ctime) + { + tmp=localtime(&statbuf.ctime); + printf("%02d/%02d/%02d %02d:%02d",tmp->tm_mon+1,tmp->tm_mday,tmp->tm_year%100,tmp->tm_hour,tmp->tm_min); + } + else if (!ino->sb->cnotatime && statbuf.atime) + { + tmp=localtime(&statbuf.atime); + printf("%02d/%02d/%02d %02d:%02d",tmp->tm_mon+1,tmp->tm_mday,tmp->tm_year%100,tmp->tm_hour,tmp->tm_min); + } putchar('\n'); ++l; } @@ -210,7 +259,7 @@ static void ls(char **dirent, int entries, struct cpmInode *ino, int l, int c, i announce=0; for (i=0; itm_mon],tmp->tm_mday); if ((c ? statbuf.ctime : statbuf.mtime)<(now-182*24*3600)) printf("%04d ",tmp->tm_year+1900); else printf("%02d:%02d ",tmp->tm_hour,tmp->tm_min); @@ -272,7 +321,7 @@ static void lsattr(char **dirent, int entries, struct cpmInode *ino) announce=0; for (i=0; i