Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!uwm.edu!gem.mps.ohio-state.edu!lavaca.uh.edu!uhnix1!moray!urchin!p6.f506.n106.z1.fidonet.org!Bob.Stout From: Bob.Stout@p6.f506.n106.z1.fidonet.org (Bob Stout) Newsgroups: comp.lang.c Subject: findfirst/findnext in Turbo C Message-ID: <1060.254614FD@urchin.fidonet.org> Date: 25 Oct 89 04:24:57 GMT Sender: ufgate@urchin.fidonet.org (newsout1.26) Organization: FidoNet node 1:106/506.6 - Fulcrum's Edge, Spring TX Lines: 84 In an article of <23 Oct 89 13:12:05 GMT>, (Doug Krause) writes: >I'm using Turbo C 2.0 on a PC clone. My question: I'm using findfirst >and findnext to read the disk directory. In the structure returned are >two integers that tell the file date and file time. Is there a function >to convert these numbers into something more useful like hh:mm? ------------------------------- Cut here ------------------------------------ /* Sample file date and time display.*/ #include #include struct DOS_TIME { unsigned int ss : 5; unsigned int mm : 6; unsigned int hh : 5; } ; #define dos_time(t) (*(struct DOS_TIME *)(&(t))) struct DOS_DATE { unsigned int da : 5; unsigned int mo : 4; unsigned int yr : 7; } ; #define dos_date(t) (*(struct DOS_DATE *)(&(t))) main(int argc, char *argv[]) { #ifdef __ZTC__ /* Zortech C/C++ */ struct FIND *ffblk; #else /* TC/MSC */ struct find_t *ffblk = (struct find_t)malloc(sizeof(struct find_t)); #endif if (2 > argc) { puts("\aUsage: SHOWDATE filename[.ext]"); exit(1); } #ifdef __ZTC__ if (!(ffblk = findfirst(argv[1], 0xff))) #elif defined(__TURBOC__) if (findfirst(argv[1], ffblk, 0xff) #else /* MSC/QC */ if (_dos_findfirst(argv[1], 0xff, ffblk) #endif { printf("\aCant find %s\n", argv[1]); exit(2); } printf("File date is %d-%d-%d\n", dos_date(ffblk->date).mo, dos_date(ffblk->date).da, (dos_date(ffblk->date).yr + 80) % 100); printf("File time is %d:%d:%d\n", dos_time(ffblk->time).hh, dos_time(ffblk->time).mm, dos_time(ffblk->time).ss); } ----------------------------------------------------------------------------- Please note that I don't have TC up on this machine, so the findfirst syntax is from memory. Finally, you can also use TC's getftime() function and/or its ftime structure, e.g. ------------------------------- Cut here ------------------------------------ union { struct ftime ftp; struct { unsigned time, date; } detail; } stamp; stamp.detail.time = time_from_findfirst; stamp.detail.date = date_from_findfirst; printf("%d-%d-%d %2d:%02d:%02d\n", stamp.ftp.ft_month, stamp.ftp.ft_day, stamp.ftp.ft_year + 80, stamp.ftp.ft_hour, stamp.ftp.ft_min, stamp.ftp.ft_tsec * 2); ----------------------------------------------------------------------------- Of course all this is highly non-portable, but then it *is* OS-specific...