#include #include #include main(argc,argv) int argc; char *argv[]; { DIR *dirstream; struct direct *dirrecord; char *dir,qfamily[128],s[MAXNAMLEN]; int qpoint,qmag; if (argc != 2) exit(1); dir = argv[1]; chdir(dir); if (dirstream = opendir(dir)) { while (dirrecord = readdir(dirstream)) { if (!strcmp(dirrecord->d_name+dirrecord->d_namlen-3,"pxl")) { qpoint = -1; qmag = -1; (void) sscanf(dirrecord->d_name,"%[^0123456789.]%d.%d", qfamily,&qpoint,&qmag); mkdir(qfamily,0775); if (qpoint >= 0) { sprintf(s,"%s%d",qfamily,qpoint); mkdir(s,0775); sprintf(s,"%s%d/%s",qfamily,qpoint,dirrecord->d_name); } else { sprintf(s,"%s",qfamily); mkdir(s,0775); sprintf(s,"%s/%s",qfamily,dirrecord->d_name); } link(dirrecord->d_name,s); } } closedir(dirstream); } }