X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=cpmls.c;h=6bc6bad89b6f757c2651d41d8a3a108c9b89cdd3;hb=f161fa38445c2f71e598b04702769fffe2b5d940;hp=983817a0bf033de357b04d4bf7ca199974f9e943;hpb=d54e661a771b394610329fb0cd5e7b5002ae1708;p=debian%2Fcpmtools diff --git a/cpmls.c b/cpmls.c index 983817a..6bc6bad 100644 --- a/cpmls.c +++ b/cpmls.c @@ -6,13 +6,10 @@ #include #include #include +#include #include "getopt_.h" #include "cpmfs.h" - -#ifdef USE_DMALLOC -#include -#endif /*}}}*/ /* variables */ /*{{{*/ @@ -26,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; @@ -116,6 +133,10 @@ static void oldddir(char **dirent, int entries, struct cpmInode *ino) { 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); + } + 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); } @@ -138,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; @@ -161,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; @@ -176,7 +198,7 @@ static void old3dir(char **dirent, int entries, struct cpmInode *ino) totalRecs+=(statbuf.size+127)/128; printf(" %5.1ldk",(long) (statbuf.size+buf.f_bsize-1) / buf.f_bsize*(buf.f_bsize/1024)); - printf(" %6.1ld ",(long)(statbuf.size/128)); + 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' : ' '); @@ -189,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=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); - 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); + 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; } @@ -325,22 +359,24 @@ int main(int argc, char *argv[]) /* variables */ /*{{{*/ const char *err; const char *image; - const char *format=FORMAT; + const char *format; const char *devopts=NULL; int c,usage=0; - struct cpmSuperBlock drive; + struct cpmSuperBlock super; struct cpmInode root; int style=0; int changetime=0; + int uppercase=0; int inode=0; char **gargv; int gargc; static char starlit[2]="*"; - static char * const star[]={starlit}; + static char * const star[]={ starlit }; /*}}}*/ /* parse options */ /*{{{*/ - while ((c=getopt(argc,argv,"cT:f:ih?dDFlA"))!=EOF) switch(c) + if (!(format=getenv("CPMTOOLSFMT"))) format=FORMAT; + while ((c=getopt(argc,argv,"cT:f:ih?dDFlAu"))!=EOF) switch(c) { case 'f': format=optarg; break; case 'T': devopts=optarg; break; @@ -353,6 +389,7 @@ int main(int argc, char *argv[]) case 'A': style=5; break; case 'c': changetime=1; break; case 'i': inode=1; break; + case 'u': uppercase=1; break; } if (optind==argc) usage=1; @@ -360,17 +397,25 @@ int main(int argc, char *argv[]) if (usage) { - fprintf(stderr,"Usage: %s [-f format] [-T libdsk-type] [-d|-D|-F|-A|[-l][-c][-i]] image [file ...]\n",cmd); +#ifdef HAVE_LIBDSK_H + fprintf(stderr,"Usage: %s [-f format] [-T libdsk-type] [-d|-D|-F|-A|[-l][-c][-i]] [-u] image [file ...]\n",cmd); +#else + fprintf(stderr,"Usage: %s [-f format] [-d|-D|-F|-A|[-l][-c][-i]] [-u] image [file ...]\n",cmd); +#endif exit(1); } /*}}}*/ /* open image */ /*{{{*/ - if ((err=Device_open(&drive.dev,image,O_RDONLY,devopts))) + if ((err=Device_open(&super.dev,image,O_RDONLY,devopts))) + { + fprintf(stderr,"%s: cannot open %s (%s)\n",cmd,image,err); + exit(1); + } + if (cpmReadSuper(&super,&root,format,uppercase)==-1) { - fprintf(stderr,"%s: can not open %s (%s)\n",cmd,image,err); + fprintf(stderr,"%s: cannot read superblock (%s)\n",cmd,boo); exit(1); } - cpmReadSuper(&drive,&root,format); /*}}}*/ if (optind