/* list.c */ #include #include #define MAX_NUM 2000 #define PAUSE printf("HIT ANY KEY TO CONTINUE.\n");getch() struct file_id { char name[13]; long size; unsigned date,time; }File[MAX_NUM]; long Tsize=0; int NumEmpty; int Order[MAX_NUM]; int load_names(); void date_convert(unsigned,int *,int *,int *); void time_convert(unsigned,int *,int*); int leap_year(); void sort_name(); void sort_size(); void sort_date(); void sort_time(); void sort_type(); void print_files(); void file_name(char *,char *,char *); main(argc,argv) int argc; char *argv[]; { int i,j,k; char ans; int num; if(argc==1) { num=load_names("*.*"); for(i=0;i0) { val=Order[i]; Order[i]=Order[i-1]; Order[i-1]=val; hit+=1; } else if(strcmp(type1,type2)==0&&strcmpi(name1,name2)>0) { val=Order[i]; Order[i]=Order[i-1]; Order[i-1]=val; hit+=1; } } }while(hit>0); } /******************************************************************** ** ** ** ********************************************************************* */ void print_files(num) int num; { int i,i1,i2,p,j,k; int mo,da,yr,hr,min; int npage,lpage,nlines=23,pt; char string[10],type[5]; npage=num/(nlines*2);lpage=num%(nlines*2); for(p=0;p0) for(j=0;j0) printf("%d files are empty.",NumEmpty); } /******************************************************************** ** ** ** ********************************************************************* */ void file_name(string,name,type) char *string,*name,*type; { int k,pt; int len=strlen(string); strcpy(type," "); strcpy(name," "); pt=-1; for(k=0;k0&&pt!=k) type[k-pt-1]=string[k]; } } /******************************************************************** ** ** ** ********************************************************************* */ void sort_date(num) int num; { int i,i1,i2,j,k; int hit,val; for(i=0;i0); } /******************************************************************** ** ** ** ********************************************************************* */ void sort_time(num) int num; { int i,i1,i2,j,k; int hit,val; for(i=0;i0); } /******************************************************************** ** ** ** ********************************************************************* */ void sort_size(num) int num; { int i,i1,i2,j,k; int hit,val; for(i=0;i0); } /******************************************************************** ** ** ** ********************************************************************* */ void sort_name(num) int num; { int i,i1,i2,j,k; int hit,val; for(i=0;i0) { val=Order[i]; Order[i]=Order[i-1]; Order[i-1]=val; hit+=1; } } }while(hit>0); } /******************************************************************** ** ** ** ********************************************************************* */ int load_names(file_id) char *file_id; { struct find_t c_file; int num=0,hr,min,mo,da,yr; Tsize=0; NumEmpty=0; if(_dos_findfirst(file_id,_A_NORMAL,&c_file)==0) { if(c_file.size>0) { File[num].size=c_file.size; File[num].date=c_file.wr_date; File[num].time=c_file.wr_time; strcpy(File[num++].name,c_file.name); Tsize=c_file.size; } else NumEmpty+=1; while(_dos_findnext(&c_file)==0&&num0) { File[num].size=c_file.size; File[num].date=c_file.wr_date; File[num].time=c_file.wr_time; strcpy(File[num++].name,c_file.name); Tsize+=c_file.size; } else NumEmpty+=1; } } if(num>=MAX_NUM) { printf("\nWarning -- There are more than %d files\n\n",MAX_NUM); PAUSE; } return(num); } /******************************************************************** ** ** ** ********************************************************************* */ void time_convert(number,hr,min) unsigned number; int *hr,*min; { *hr=number/2048; *min=number%2048; *min/=32; } /******************************************************************** ** ** ** ********************************************************************* */ void date_convert(days,mo,da,yr) unsigned days; int *mo,*da,*yr; { int m; *yr=days/512+80; m=days%512; *mo=m/32; *da=m%32; } /******************************************************************** ** ** ** ********************************************************************* */ int leap_year(y) int y; { int leap; leap=y%4==0&&y%100!=0||y%400==0; return(leap); }