/* #includes */ /*{{{C}}}*//*{{{*/ #include "config.h" #include #include #include #include #include #include #include "getopt_.h" #include "cpmfs.h" #ifdef USE_DMALLOC #include #endif /*}}}*/ /* variables */ /*{{{*/ static const char * const month[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; /*}}}*/ /* namecmp -- compare two entries */ /*{{{*/ static int namecmp(const void *a, const void *b) { if (**((const char * const *)a)=='[') return -1; return strcmp(*((const char * const *)a),*((const char * const *)b)); } /*}}}*/ /* olddir -- old style output */ /*{{{*/ static void olddir(char **dirent, int entries) { int i,j,k,l,user,announce; announce=0; for (user=0; user<32; ++user) { for (i=l=0; itm_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); } putchar('\n'); ++l; } } if (announce==2) announce=1; } printf("%5.1d Files occupying %6.1ldK",l,(buf.f_bused*buf.f_bsize)/1024); printf(", %7.1ldK Free.\n",(buf.f_bfree*buf.f_bsize)/1024); } else printf("No files found\n"); } /*}}}*/ /* old3dir -- old CP/M Plus style long output */ /*{{{*/ static void old3dir(char **dirent, int entries, struct cpmInode *ino) { struct cpmStatFS buf; struct cpmStat statbuf; struct cpmInode file; if (entries) { int i,j,k,l,announce,user, attrib; int totalBytes=0,totalRecs=0; qsort(dirent,entries,sizeof(char*),namecmp); cpmStatFS(ino,&buf); announce=1; for (l=0,user=0; user<32; ++user) { for (i=0; itm_mon+1,tmp->tm_mday,tmp->tm_year%100,tmp->tm_hour,tmp->tm_min); } else if (statbuf.ctime) printf(" "); if (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); } putchar('\n'); ++l; } } if (announce==2) announce=1; } printf("\nTotal Bytes = %6.1dk ",(totalBytes+1023)/1024); printf("Total Records = %7.1d ",totalRecs); printf("Files Found = %4.1d\n",l); printf("Total 1k Blocks = %6.1ld ",(buf.f_bused*buf.f_bsize)/1024); printf("Used/Max Dir Entries For Drive A: %4.1ld/%4.1ld\n",buf.f_files-buf.f_ffree,buf.f_files); } else printf("No files found\n"); } /*}}}*/ /* ls -- UNIX style output */ /*{{{*/ static void ls(char **dirent, int entries, struct cpmInode *ino, int l, int c, int iflag) { int i,user,announce,any; time_t now; struct cpmStat statbuf; struct cpmInode file; time(&now); qsort(dirent,entries,sizeof(char*),namecmp); announce=0; any=0; for (user=0; user<32; ++user) { 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); } printf("%s\n",dirent[i]+2); } } } } /*}}}*/ /* lsattr -- output something like e2fs lsattr */ /*{{{*/ static void lsattr(char **dirent, int entries, struct cpmInode *ino) { int i,user,announce,any; struct cpmStat statbuf; struct cpmInode file; cpm_attr_t attrib; qsort(dirent,entries,sizeof(char*),namecmp); announce=0; any=0; for (user=0; user<32; ++user) { announce=0; for (i=0; i