/***************************************************************************/ /* Programa criado por Wenderson Teixeira */ /* Todos os Direitos Reservados (c) 1999 */ /* casa@programadores.com.br */ /* http://casa.dos.programadores.com.br/ */ /* ICQ:1597462 */ /***************************************************************************/ #include <stdio.h> #include <io.h> #include <dir.h> #include <alloc.h> #include "linklist.h" typedef struct ffblk TFileAttr; /* Funcoes definidas para utilizao com a biblioteca de listas generica */ /***************************************************************************/ TFileAttr *CreateItem(TFileAttr *item) { TFileAttr *pTmp = malloc(sizeof(TFileAttr)); memcpy(pTmp, item, sizeof(TFileAttr)); return pTmp; } /***************************************************************************/ bool IsEqual(void *i1, void *i2) { return strcmp(((TFileAttr *)i1)->ff_name, ((TFileAttr *)i2)->ff_name) == 0; } /***************************************************************************/ int Compare(void *i1, void *i2) { return strcmp(((TFileAttr *)i1)->ff_name, ((TFileAttr *)i2)->ff_name); } /***************************************************************************/ void Delete(void *item) { free(item); } /***************************************************************************/ TList *FindItem(TList *root, TFileAttr *item) { return Find(root, (void *)item, IsEqual); } /***************************************************************************/ void SortList(TList *root, int order) { BubbleSort(root, order, Compare); } /***************************************************************************/ TList *RemoveItem(TList *root, char *item) { return Remove(root, item, IsEqual, Delete); } /***************************************************************************/ void DisplayList(TList *root) { TList *iter = root; while(iter) { TFileAttr *file = (TFileAttr *)iter->Data; struct ftime *ft = (struct ftime *)&file->ff_ftime; printf("%-13s %11ld %02d/%02d/%02d %2d:%02d:%02d\n", file->ff_name, file->ff_fsize, ft->ft_day, ft->ft_month, ft->ft_year + 80, ft->ft_hour, ft->ft_min, ft->ft_tsec << 1); iter = iter->Next; } } /***************************************************************************/ TList *ListDir(const char *path) { TList *root = NULL; TFileAttr files; int result; result = findfirst(path, &files, 0); while(!result) { TFileAttr *pTmp = CreateItem(&files); root = Add(root, pTmp); result = findnext(&files); } return root; } /***************************************************************************/ void main(int ArgC, char *ArgV[]) { TList *root = ListDir(ArgC > 1 ? ArgV[1] : "*.*"); SortList(root, UP); DisplayList(root); while(root) root = RemoveItem(root, root->Data); } /***************************************************************************/