#include <rudiments/file.h>
#include <rudiments/permissions.h>
#include <rudiments/userentry.h>
#include <rudiments/groupentry.h>
#include <rudiments/datetime.h>
#include <rudiments/stdio.h>

int main(int argc, const char **argv) {

        // open the file
        file    f;
        if (f.open("testfile1",O_RDONLY)) {

                // print out various file properties...

                // permissions
                mode_t  perms=f.getPermissions();
                char    *permstring=permissions::evalPermOctal(perms);
                stdoutput.printf("Permissions:          %s\n",permstring);
                delete[] permstring;

                // owner user/group
                uid_t   user=f.getOwnerUserId();
                userentry       ou;
                ou.initialize(user);
                stdoutput.printf("Owner User:           %s\n",ou.getName());

                gid_t   group=f.getOwnerGroupId();
                groupentry      og;
                og.initialize(group);
                stdoutput.printf("Owner Group:          %s\n",og.getName());

                // sizes
                stdoutput.printf("File Size:            %lld\n",
                                                        f.getSize());
                stdoutput.printf("Block Size:           %lld\n",
                                                        f.getBlockSize());
                stdoutput.printf("Block Count:          %lld\n",
                                                        f.getBlockCount());

                // file type
                stdoutput.printf("Is Socket:            %s\n",
                                        (f.isSocket())?"yes":"no");
                stdoutput.printf("Is Symbolic Link:     %s\n",
                                        (f.isSymbolicLink())?"yes":"no");
                stdoutput.printf("Is Regular File:      %s\n",
                                        (f.isRegularFile())?"yes":"no");
                stdoutput.printf("Is Block Device:      %s\n",
                                        (f.isBlockDevice())?"yes":"no");
                stdoutput.printf("Is Directory:         %s\n",
                                        (f.isDirectory())?"yes":"no");
                stdoutput.printf("Is Character Device:  %s\n",
                                        (f.isCharacterDevice())?"yes":"no");
                stdoutput.printf("Is Fifo:              %s\n",
                                        (f.isFifo())?"yes":"no");

                // access/modification times
                time_t          access=f.getLastAccessTime();
                datetime        da;
                da.initialize(access);
                stdoutput.printf("Last Access:          %s\n",da.getString());

                time_t  mod=f.getLastModificationTime();
                datetime        dm;
                dm.initialize(mod);
                stdoutput.printf("Last Modification:    %s\n",dm.getString());

        } else {
                stdoutput.write("failed to open testfile1\n");
        }
}