diff --git a/include/Mw/Constants.h b/include/Mw/Constants.h index b01dc15..6b14f23 100644 --- a/include/Mw/Constants.h +++ b/include/Mw/Constants.h @@ -38,6 +38,14 @@ enum MwALIGNMENT { */ #define MwDEFAULT 0x0fffffff +/*! + * %brief Directory entry type + */ +enum { + MwDIRECTORY_FILE = 0, + MwDIRECTORY_DIRECTORY +}; + /*! * %brief Icon mask */ diff --git a/include/Mw/Icon.h b/include/Mw/Icon.h index 14ea980..6c9ad88 100644 --- a/include/Mw/Icon.h +++ b/include/Mw/Icon.h @@ -42,7 +42,6 @@ MWDECL char* MwIconQuestion[]; */ MWDECL char* MwIconWarning[]; - #ifdef __cplusplus } #endif diff --git a/include/Mw/MachDep.h b/include/Mw/MachDep.h index 5ee1de3..76dc96e 100644 --- a/include/Mw/MachDep.h +++ b/include/Mw/MachDep.h @@ -23,6 +23,7 @@ #include #include #include +#include #endif #ifndef M_PI diff --git a/include/Mw/TypeDefs.h b/include/Mw/TypeDefs.h index 89cfe0c..38696ac 100644 --- a/include/Mw/TypeDefs.h +++ b/include/Mw/TypeDefs.h @@ -138,8 +138,8 @@ struct _MwSizeHints { }; struct _MwDirectoryEntry { - char* name; - unsigned long attribute; + char* name; + int type; }; #define MwCursorDataHeight 16 diff --git a/src/directory.c b/src/directory.c index 045b34f..14a5532 100644 --- a/src/directory.c +++ b/src/directory.c @@ -13,7 +13,8 @@ typedef struct dir { } dir_t; #else typedef struct dir { - DIR* dir; + DIR* dir; + char* base; } dir_t; #endif @@ -35,6 +36,8 @@ void* MwDirectoryOpen(const char* path) { free(dir); return NULL; } + dir->base = malloc(strlen(path) + 1); + strcpy(dir->base, path); #endif return dir; @@ -46,6 +49,7 @@ void MwDirectoryClose(void* handle) { FindClose(dir->hFind); #else closedir(dir->dir); + free(dir->base); #endif free(handle); } @@ -62,14 +66,36 @@ MwDirectoryEntry* MwDirectoryRead(void* handle) { } entry->name = malloc(strlen(dir->ffd.cFileName) + 1); strcpy(entry->name, dir->ffd.cFileName); + + if(dir->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + entry->type = MwDIRECTORY_DIRECTORY; + } else { + entry->type = MwDIRECTORY_FILE; + } #else struct dirent* d; + struct stat s; + char* p; if((d = readdir(dir->dir)) == NULL) { free(entry); return NULL; } entry->name = malloc(strlen(d->d_name) + 1); strcpy(entry->name, d->d_name); + + p = malloc(strlen(dir->base) + 1 + strlen(d->d_name) + 1); + strcpy(p, dir->base); + strcat(p, "/"); + strcat(p, d->d_name); + + stat(p, &s); + if(S_ISDIR(s.st_mode)) { + entry->type = MwDIRECTORY_DIRECTORY; + } else { + entry->type = MwDIRECTORY_FILE; + } + + free(p); #endif return entry; diff --git a/src/icon/error.c b/src/icon/error.c index 3cf47c2..2fc11d9 100644 --- a/src/icon/error.c +++ b/src/icon/error.c @@ -2,48 +2,47 @@ #include /* XPM */ -char *MwIconError[] = { -/* columns rows colors chars-per-pixel */ -"32 32 8 1 ", -" c None", -". c black", -"X c white", -"o c gray", -"O c gainsboro", -"+ c lavender", -"@ c DarkSlateGray", -"# c SlateGray", -/* pixels */ -" ... ... ", -" .Xo. .XX. ", -"..XXo. .XXX..", -".XXoo. .XXOo.", -".XXooo. ......... .XOooo.", -" ...Xoo...O+++++++o.. .Xoo...@", -" .Xo.#O++XXXXX++Oo. .Xoo.@@@@", -" ..#OO+XXXXXX+OOOo.#oo.@@ ", -" .OOO+XXXXX++OOOo.@#.@@ ", -" .#OOO+XXXX++OOOoo#..@@ ", -" .#OOO+XX+++OOOOoo#.@@ ", -" .#ooo+++++OOOOo###.@@@ ", -" .ooXXXXX+OOO++++##.@@@ ", -" .oXXOOOOOOO++OOoo#.@@@ ", -" .oo...OOOOO...oo..@@@ ", -" .o.....ooo.....o.@@@@ ", -" .X.....ooo...@#o.@@@ ", -" .oX@@@@.Xoo.@##@oo.@@ ", -" .OXo@@.Xo.oX.@@oXo.@@@ ", -" .OOXXXXo...oXXXOoo.@@@ ", -" ..oOOXo.o.oOOOo..@.@@ ", -" ..oOOo.o.oOOo..@##.@ ", -" ..o.oXXXXXOOo.o..###. ", -" .oo.o.@oXXo...o.@@.#oX... ", -" .XXo.X@o....@o.o.@@@.ooXXX. ", -" ...XXo..X@X@o@o@X.o.@@@ .oXoo. ", -".XXXoo.@@.X.@X@X@.o.@@@@ .Xoo..@", -".XXXo.@@@.X.@o@o@.o.@@@ .oo.@@@", -"..ooo.@@ .X.....o.@@@@ ...@@ ", -" .oo.@ .XXXXooo.@@@ @@@ ", -" ...@@ .ooooo.@@@ ", -" @@@@ .....@@ " -}; +char* MwIconError[] = { + /* columns rows colors chars-per-pixel */ + "32 32 8 1 ", + " c None", + ". c black", + "X c white", + "o c gray", + "O c gainsboro", + "+ c lavender", + "@ c DarkSlateGray", + "# c SlateGray", + /* pixels */ + " ... ... ", + " .Xo. .XX. ", + "..XXo. .XXX..", + ".XXoo. .XXOo.", + ".XXooo. ......... .XOooo.", + " ...Xoo...O+++++++o.. .Xoo...@", + " .Xo.#O++XXXXX++Oo. .Xoo.@@@@", + " ..#OO+XXXXXX+OOOo.#oo.@@ ", + " .OOO+XXXXX++OOOo.@#.@@ ", + " .#OOO+XXXX++OOOoo#..@@ ", + " .#OOO+XX+++OOOOoo#.@@ ", + " .#ooo+++++OOOOo###.@@@ ", + " .ooXXXXX+OOO++++##.@@@ ", + " .oXXOOOOOOO++OOoo#.@@@ ", + " .oo...OOOOO...oo..@@@ ", + " .o.....ooo.....o.@@@@ ", + " .X.....ooo...@#o.@@@ ", + " .oX@@@@.Xoo.@##@oo.@@ ", + " .OXo@@.Xo.oX.@@oXo.@@@ ", + " .OOXXXXo...oXXXOoo.@@@ ", + " ..oOOXo.o.oOOOo..@.@@ ", + " ..oOOo.o.oOOo..@##.@ ", + " ..o.oXXXXXOOo.o..###. ", + " .oo.o.@oXXo...o.@@.#oX... ", + " .XXo.X@o....@o.o.@@@.ooXXX. ", + " ...XXo..X@X@o@o@X.o.@@@ .oXoo. ", + ".XXXoo.@@.X.@X@X@.o.@@@@ .Xoo..@", + ".XXXo.@@@.X.@o@o@.o.@@@ .oo.@@@", + "..ooo.@@ .X.....o.@@@@ ...@@ ", + " .oo.@ .XXXXooo.@@@ @@@ ", + " ...@@ .ooooo.@@@ ", + " @@@@ .....@@ "}; diff --git a/src/icon/info.c b/src/icon/info.c index fc7cadf..31c9ee6 100644 --- a/src/icon/info.c +++ b/src/icon/info.c @@ -2,44 +2,43 @@ #include /* XPM */ -char *MwIconInfo[] = { -/* columns rows colors chars-per-pixel */ -"32 32 4 1 ", -" c None", -". c blue", -"X c DarkSlateGray", -"o c #6632F7", -/* pixels */ -" ", -" ", -" ", -" ", -" ", -" ..... ", -" ....... ", -" .....XX ", -" XXXXX ", -" ", -" ", -" ...... ", -" .......XX ", -" ..........XX ", -" XXX.....XX ", -" .....XX ", -" .....XX ", -" .....XX ", -" .....XX ", -" .....XX ", -" .....XX ", -" ....XX ", -" ....XX ", -" ....XX . ", -" ....X ...XX ", -" .......XXX ", -" XXXXXXX ", -" ", -" ", -" ", -" ", -" " -}; +char* MwIconInfo[] = { + /* columns rows colors chars-per-pixel */ + "32 32 4 1 ", + " c None", + ". c blue", + "X c DarkSlateGray", + "o c #6632F7", + /* pixels */ + " ", + " ", + " ", + " ", + " ", + " ..... ", + " ....... ", + " .....XX ", + " XXXXX ", + " ", + " ", + " ...... ", + " .......XX ", + " ..........XX ", + " XXX.....XX ", + " .....XX ", + " .....XX ", + " .....XX ", + " .....XX ", + " .....XX ", + " .....XX ", + " ....XX ", + " ....XX ", + " ....XX . ", + " ....X ...XX ", + " .......XXX ", + " XXXXXXX ", + " ", + " ", + " ", + " ", + " "}; diff --git a/src/icon/news.c b/src/icon/news.c index cb0cbc8..1b7483e 100644 --- a/src/icon/news.c +++ b/src/icon/news.c @@ -2,46 +2,45 @@ #include /* XPM */ -char *MwIconNews[] = { -/* columns rows colors chars-per-pixel */ -"32 32 6 1 ", -" c None", -". c black", -"X c white", -"o c SlateGray", -"O c gray", -"+ c #6632F7", -/* pixels */ -" ", -" ", -" ", -" ... ", -" .XXX.. ", -" .XX.XXX.. ", -" .XX..X.XXX.. ", -" .XX.X..XX.oXX.. ", -" .XX.XX.XX.Xo.XXX.. ", -" .XOXXX.XX.O.XX.XXXX.. ", -" .XXo.oXXX.oXXX.XoXoXXX.. ", -" .XOXXXo.OXXO.X.Xo.X.X.oXX.. ", -" .XXo.oXXXO.oXXX...X.X.Xo.XXX.", -" .XOXXXo.OXXXo.oXXX..XXX.XXXX.O", -" .XXo.oXXXO.oXXXOX.XXX.oX.XXX.O.", -".oOXXXo.OXXXo.oXX.X..XXo.XXX.O.O", -".Xo.oXXXO.oXXXOX.OXXX..XXXX.O.O.", -".XXXo.OXXXo.oXX.OOOOXXX.XX.O.O.O", -".O.oXXO.oXXXOX.oooOOOO.XX.O.O.O.", -".oOO.oXXo.oXXX..ooooO.XX.O.O.O. ", -" ..oOOOoXXoOOXXX..oo.XX.O.O.O. ", -" ..oOO.oXXO.oXXX..XX.O.O.O. ", -" ..oOO.oXXo.oXXXX.O.O.O. ", -" ..oOXOoXXo.XX.O.O.O. ", -" ..oOo.oXXX.O.O.O. ", -" ..oOO.X.O.O.O. ", -" ..oOO.O..O. ", -" ..o.oOO. ", -" ..... ", -" ", -" ", -" " -}; +char* MwIconNews[] = { + /* columns rows colors chars-per-pixel */ + "32 32 6 1 ", + " c None", + ". c black", + "X c white", + "o c SlateGray", + "O c gray", + "+ c #6632F7", + /* pixels */ + " ", + " ", + " ", + " ... ", + " .XXX.. ", + " .XX.XXX.. ", + " .XX..X.XXX.. ", + " .XX.X..XX.oXX.. ", + " .XX.XX.XX.Xo.XXX.. ", + " .XOXXX.XX.O.XX.XXXX.. ", + " .XXo.oXXX.oXXX.XoXoXXX.. ", + " .XOXXXo.OXXO.X.Xo.X.X.oXX.. ", + " .XXo.oXXXO.oXXX...X.X.Xo.XXX.", + " .XOXXXo.OXXXo.oXXX..XXX.XXXX.O", + " .XXo.oXXXO.oXXXOX.XXX.oX.XXX.O.", + ".oOXXXo.OXXXo.oXX.X..XXo.XXX.O.O", + ".Xo.oXXXO.oXXXOX.OXXX..XXXX.O.O.", + ".XXXo.OXXXo.oXX.OOOOXXX.XX.O.O.O", + ".O.oXXO.oXXXOX.oooOOOO.XX.O.O.O.", + ".oOO.oXXo.oXXX..ooooO.XX.O.O.O. ", + " ..oOOOoXXoOOXXX..oo.XX.O.O.O. ", + " ..oOO.oXXO.oXXX..XX.O.O.O. ", + " ..oOO.oXXo.oXXXX.O.O.O. ", + " ..oOXOoXXo.XX.O.O.O. ", + " ..oOo.oXXX.O.O.O. ", + " ..oOO.X.O.O.O. ", + " ..oOO.O..O. ", + " ..o.oOO. ", + " ..... ", + " ", + " ", + " "}; diff --git a/src/icon/note.c b/src/icon/note.c index cc55484..7735c2d 100644 --- a/src/icon/note.c +++ b/src/icon/note.c @@ -2,48 +2,47 @@ #include /* XPM */ -char *MwIconNote[] = { -/* columns rows colors chars-per-pixel */ -"32 32 8 1 ", -" c None", -". c black", -"X c red", -"o c magenta", -"O c white", -"+ c yellow", -"@ c gray", -"# c #6632F7", -/* pixels */ -" ..... ", -" .XXXXX. ", -" .XXXXXXX. ", -" .XXXXXXo. ", -" .XooOOoX. .. ", -" .XXOOX. ..+O. ", -" ..... ..O+O+. ", -" ..XXX....+O+O+O+. ", -" .X.XXO.X.+O+O+O+O. ", -" .XX.XXo.Xo.+O+O+O+O. ", -" .XXX...XXo.O+O+O+O+. ", -" .XoXXXXXoX.+O+O+O+O+. ", -" ..XXooOOoXX.O+O+O+O+O. ", -"..@..XXXXXXX.O+O+O+O+O+O. ", -".@@@........O+O+O+O+O+O+. ", -" .@.@.@..O+O+O+O+O+@@O+O+. ", -" .@@.@.@.+O+O+O+O@@+O+O+O. ", -" .@@.@.@O+O+@+@@O+O+O+O+O. ", -" .@@@.@O+O+O@@+O@O+O@@+O+. ", -" .@O+O+O+@@O+O+O+@@O+O+O+. ", -" .@@O+O@@+@@O+O@@+O@O+O+O+. ", -" .@+O+O+O+O+@@O+O+O+O@@+O+...", -" .@@+O+O+@@@+O+O+O+@@O+O+O+O.", -" .@O+O@@+O+@+@+O@@+O+O+O+O. ", -" .@@O+O+O+O+O+@@O+@+O+O+O. ", -" .@+O+O+O+O@@+O+O+O+O+.. ", -" ..@+O+O+O+O+O+O+O+O.. ", -" ....O+O+O+O+O+O+.. ", -" .......+O+O+O.. ", -" ..+OO..+O+.. ", -" ...+..... ", -" ..... " -}; +char* MwIconNote[] = { + /* columns rows colors chars-per-pixel */ + "32 32 8 1 ", + " c None", + ". c black", + "X c red", + "o c magenta", + "O c white", + "+ c yellow", + "@ c gray", + "# c #6632F7", + /* pixels */ + " ..... ", + " .XXXXX. ", + " .XXXXXXX. ", + " .XXXXXXo. ", + " .XooOOoX. .. ", + " .XXOOX. ..+O. ", + " ..... ..O+O+. ", + " ..XXX....+O+O+O+. ", + " .X.XXO.X.+O+O+O+O. ", + " .XX.XXo.Xo.+O+O+O+O. ", + " .XXX...XXo.O+O+O+O+. ", + " .XoXXXXXoX.+O+O+O+O+. ", + " ..XXooOOoXX.O+O+O+O+O. ", + "..@..XXXXXXX.O+O+O+O+O+O. ", + ".@@@........O+O+O+O+O+O+. ", + " .@.@.@..O+O+O+O+O+@@O+O+. ", + " .@@.@.@.+O+O+O+O@@+O+O+O. ", + " .@@.@.@O+O+@+@@O+O+O+O+O. ", + " .@@@.@O+O+O@@+O@O+O@@+O+. ", + " .@O+O+O+@@O+O+O+@@O+O+O+. ", + " .@@O+O@@+@@O+O@@+O@O+O+O+. ", + " .@+O+O+O+O+@@O+O+O+O@@+O+...", + " .@@+O+O+@@@+O+O+O+@@O+O+O+O.", + " .@O+O@@+O+@+@+O@@+O+O+O+O. ", + " .@@O+O+O+O+O+@@O+@+O+O+O. ", + " .@+O+O+O+O@@+O+O+O+O+.. ", + " ..@+O+O+O+O+O+O+O+O.. ", + " ....O+O+O+O+O+O+.. ", + " .......+O+O+O.. ", + " ..+OO..+O+.. ", + " ...+..... ", + " ..... "}; diff --git a/src/icon/question.c b/src/icon/question.c index 4279f2f..ec32b1b 100644 --- a/src/icon/question.c +++ b/src/icon/question.c @@ -2,46 +2,45 @@ #include /* XPM */ -char *MwIconQuestion[] = { -/* columns rows colors chars-per-pixel */ -"32 32 6 1 ", -" c None", -". c orange", -"X c red", -"o c firebrick", -"O c SlateGray", -"+ c lavender", -/* pixels */ -" ", -" ........... ", -" ..XXXXXXXXXXXXX ", -" .XXXXXoooooooooXXO ", -" .XXXXoooooooooooooXO ", -" .XXXXooooXXXXoooooooXO ", -" .XXXXooooOOO XXooooooooO ", -" .XXXXooooOOO XXoooooooOO ", -" .XXXoooooOO .XXooooooOO ", -" .XXXooooooO .XXooooooOO ", -" XXXooooooOO .XXooooooOO ", -" XXooooooOO .XXXooooooOO ", -" XXooooOOO .XXooooooOOO ", -" XXooOOO .XXooooooOOO ", -" OOOOO .XXooooooOOOO ", -" OOO .XXooooooOOOO ", -" .XXoooooOOOOO ", -" .XXoooooOOOO ", -" .XXoooooOOOO ", -" .XXooooOOOO ", -" XXoooOOOO ", -" XXoOOOO ", -" OOOOO ", -" .XXooO ", -" .X.XXoo ", -" .X.X.XXoo ", -" .XX.XXXooO ", -" XXXXXXooOO ", -" XXXXooOOO ", -" XoooOOOO ", -" OOOOOO ", -" OOOO " -}; +char* MwIconQuestion[] = { + /* columns rows colors chars-per-pixel */ + "32 32 6 1 ", + " c None", + ". c orange", + "X c red", + "o c firebrick", + "O c SlateGray", + "+ c lavender", + /* pixels */ + " ", + " ........... ", + " ..XXXXXXXXXXXXX ", + " .XXXXXoooooooooXXO ", + " .XXXXoooooooooooooXO ", + " .XXXXooooXXXXoooooooXO ", + " .XXXXooooOOO XXooooooooO ", + " .XXXXooooOOO XXoooooooOO ", + " .XXXoooooOO .XXooooooOO ", + " .XXXooooooO .XXooooooOO ", + " XXXooooooOO .XXooooooOO ", + " XXooooooOO .XXXooooooOO ", + " XXooooOOO .XXooooooOOO ", + " XXooOOO .XXooooooOOO ", + " OOOOO .XXooooooOOOO ", + " OOO .XXooooooOOOO ", + " .XXoooooOOOOO ", + " .XXoooooOOOO ", + " .XXoooooOOOO ", + " .XXooooOOOO ", + " XXoooOOOO ", + " XXoOOOO ", + " OOOOO ", + " .XXooO ", + " .X.XXoo ", + " .X.X.XXoo ", + " .XX.XXXooO ", + " XXXXXXooOO ", + " XXXXooOOO ", + " XoooOOOO ", + " OOOOOO ", + " OOOO "}; diff --git a/src/icon/warning.c b/src/icon/warning.c index 9a67f4a..e17958b 100644 --- a/src/icon/warning.c +++ b/src/icon/warning.c @@ -2,46 +2,45 @@ #include /* XPM */ -char *MwIconWarning[] = { -/* columns rows colors chars-per-pixel */ -"32 32 6 1 ", -" c None", -". c red", -"X c yellow", -"o c DarkSlateGray", -"O c black", -"+ c #6632F7", -/* pixels */ -" ", -" ", -" ... ", -" ..... ", -" ..X..oo ", -" ..XXX..oo ", -" ..XXX..oo ", -" ..XXXXX..oo ", -" ..XXXXX..oo ", -" ..XXOOOXX..oo ", -" ..XOOOOOX..oo ", -" ..XXOOOOOXX..oo ", -" ..XXOOOOOXX..oo ", -" ..XXXOOOOOXXX..oo ", -" ..XXXOOOOOXXX..oo ", -" ..XXXXOOOOOXXXX..oo ", -" ..XXXXOOOOOXXXX..oo ", -" ..XXXXXOOOOOXXXXX..oo ", -" ..XXXXXXOOOXXXXXX..oo ", -" ..XXXXXXXOOOXXXXXXX..oo ", -" ..XXXXXXXOOOXXXXXXX..oo ", -" ..XXXXXXXXOOOXXXXXXXX..oo ", -" ..XXXXXXXXXXXXXXXXXXX..oo ", -" ..XXXXXXXXXOOOXXXXXXXXX..oo ", -" ..XXXXXXXXOOOOOXXXXXXXX..oo ", -" ..XXXXXXXXXOOOOOXXXXXXXXX..oo ", -" ..XXXXXXXXXXOOOXXXXXXXXXX..oo ", -" ..XXXXXXXXXXXXXXXXXXXXXXXXX..oo", -" .............................oo", -" ...........................ooo", -" ooooooooooooooooooooooooooo ", -" " -}; +char* MwIconWarning[] = { + /* columns rows colors chars-per-pixel */ + "32 32 6 1 ", + " c None", + ". c red", + "X c yellow", + "o c DarkSlateGray", + "O c black", + "+ c #6632F7", + /* pixels */ + " ", + " ", + " ... ", + " ..... ", + " ..X..oo ", + " ..XXX..oo ", + " ..XXX..oo ", + " ..XXXXX..oo ", + " ..XXXXX..oo ", + " ..XXOOOXX..oo ", + " ..XOOOOOX..oo ", + " ..XXOOOOOXX..oo ", + " ..XXOOOOOXX..oo ", + " ..XXXOOOOOXXX..oo ", + " ..XXXOOOOOXXX..oo ", + " ..XXXXOOOOOXXXX..oo ", + " ..XXXXOOOOOXXXX..oo ", + " ..XXXXXOOOOOXXXXX..oo ", + " ..XXXXXXOOOXXXXXX..oo ", + " ..XXXXXXXOOOXXXXXXX..oo ", + " ..XXXXXXXOOOXXXXXXX..oo ", + " ..XXXXXXXXOOOXXXXXXXX..oo ", + " ..XXXXXXXXXXXXXXXXXXX..oo ", + " ..XXXXXXXXXOOOXXXXXXXXX..oo ", + " ..XXXXXXXXOOOOOXXXXXXXX..oo ", + " ..XXXXXXXXXOOOOOXXXXXXXXX..oo ", + " ..XXXXXXXXXXOOOXXXXXXXXXX..oo ", + " ..XXXXXXXXXXXXXXXXXXXXXXXXX..oo", + " .............................oo", + " ...........................ooo", + " ooooooooooooooooooooooooooo ", + " "};