From f91f5042cba0567d5505315d8b6c2c09efb88146 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Tue, 18 Nov 2025 20:34:20 +0900 Subject: [PATCH] wip --- mbiff/mail.c | 32 ++++++++++++++++++++++++ mbiff/mailempty.xpm | 57 +++++++++++++++++++++++++++++++++++++++++++ mbiff/mailfull.xpm | 57 +++++++++++++++++++++++++++++++++++++++++++ mbiff/main.c | 59 ++++++++++++++++++++++++++++++++++++++++++++- mbiff/mbiff.h | 35 +++++++++++++++++++++++++++ 5 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 mbiff/mail.c create mode 100644 mbiff/mailempty.xpm create mode 100644 mbiff/mailfull.xpm create mode 100644 mbiff/mbiff.h diff --git a/mbiff/mail.c b/mbiff/mail.c new file mode 100644 index 0000000..aeb66b4 --- /dev/null +++ b/mbiff/mail.c @@ -0,0 +1,32 @@ +#include "mbiff.h" + +static time_t last = 0; +static char* mailpath; + +void init_mail(void){ + struct stat s; + struct passwd* pwd = getpwuid(getuid()); + + if(getenv("MAIL") != NULL){ + mailpath = malloc(strlen(getenv("MAIL")) + strlen(pwd->pw_name) + 1); + sprintf(mailpath, getenv("MAIL"), pwd->pw_name); + }else{ + mailpath = malloc(strlen(_PATH_MAILDIR) + 1 + strlen(pwd->pw_name) + 1); + sprintf(mailpath, _PATH_MAILDIR "/%s", pwd->pw_name); + } + + if(stat(mailpath, &s) == 0){ + last = s.st_mtime; + } +} + +void check_mail(void){ + struct stat s; + if(stat(mailpath, &s) == 0){ + if(s.st_mtime > last){ + printf("!\n"); + } + + last = s.st_mtime; + } +} diff --git a/mbiff/mailempty.xpm b/mbiff/mailempty.xpm new file mode 100644 index 0000000..3c88087 --- /dev/null +++ b/mbiff/mailempty.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static char *mailempty[] = { +/* columns rows colors chars-per-pixel */ +"48 48 3 1 ", +" c None", +". c black", +"X c white", +/* pixels */ +" ", +" ", +" ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +" X.......................................X", +" X........................................X", +" X......X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X....X", +" X......X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.....X", +" X........X.X.X.X.X.X.X.X.X.X.X.X.X.X.X......X", +" X........X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.......X", +" X..........X.X.X.X.X.X.X.X.X.X.X.X.X.X........X", +"X..............................................X", +"X..............................................X", +"X.........X.X.X.X.X.X.X.X.X.X.X.X.X.X..........X", +"X........X.X.X.X.X.X.X.X.X.X.X.X.X.X........X..X", +"X.......X.X.X.X.X.X.X.X.X.X.X.X.X.X.X......XX..X", +"X......X.X.X.X.X.X.X.X.X.X.X.X.X.X.X......X X..X", +"X.....X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X....X X..X", +"X.......................................X X..X", +"X......................................X X..X", +"X..XXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXX..X X..X", +"X..X X..X X..X X..X", +"X..X X..X X..X X..X", +"X..X X..X X..X X..X", +"X..X X..XXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXX..X", +"X..X X......................................X", +"X..X X.......................................X", +"X..X X.....X.X.X.X.X.X.X.X.X.X.X.X.X...X.X....X", +"X..X X.....X.X.X.X.X.X.X.X.X.X.X.X.X...X.X.....X", +"X..XX.......X.X.X.X.X.X.X.X.X.X.X.X.X...X......X", +"X..X.......X.X.X.X.X.X.X.X.X.X.X.X.X...X.......X", +"X...........X.X.X.X.X.X.X.X.X.X.X.X.X..........X", +"X..............................................X", +"X..............................................X", +"X.........X.X.X.X.X.X.X.X.X.X.X.X.X.X..........X", +"X........X.X.X.X.X.X.X.X.X.X.X.X.X.X........X..X", +"X.......X.X.X.X.X.X.X.X.X.X.X.X.X.X.X......XX..X", +"X......X.X.X.X.X.X.X.X.X.X.X.X.X.X.X......X X..X", +"X.....X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X....X X..X", +"X.......................................X X..X", +"X......................................X X..X", +"X..XXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXX..X XXXX", +"X..X XXXX X..X ", +"X..X X..X ", +"X..X X..X ", +"X..X X..X ", +"X..X X..X ", +"XXXX XXXX " +}; diff --git a/mbiff/mailfull.xpm b/mbiff/mailfull.xpm new file mode 100644 index 0000000..4f118b0 --- /dev/null +++ b/mbiff/mailfull.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static char *mailfull[] = { +/* columns rows colors chars-per-pixel */ +"48 48 3 1 ", +" c None", +". c black", +"X c white", +/* pixels */ +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXX.............................X ", +" X...............................XXXXX.X ", +" X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X...X.XXXXX", +" X.XXXXXXXXXXXXXXXXXXXXXXXXX...X.X.X.X.....X", +" X.XX....XXXXXXXXXXXXXXXXXXX.X.X.X.X.X.....X", +" X.XXXXXXXXXXXXXXXXXXXXXXXXX.X.X.X...X.....X", +" X..XX.XXXXXXXXXXXXXXXXXXXXXX...X.XXXXX.....X", +" X...XXXXXXXXXX......XXXXXXXXXXXXX.XXXXX.....X", +" X....XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXX......X", +" X.....XXXXXXXXXX....XXXXXXXXXXXXXXX.XXX.......X", +"X......XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XX........X", +"X......XXXXXXXXXX.....XX...XXXXXXXXX.X.........X", +"X......XXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........X", +"X......XXXXXXXXXXXXXXXXXXXXXXXXXXXXX........X..X", +"X......XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......XX..X", +"X.........................................X X..X", +"X.....X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X....X X..X", +"X.......................................X X..X", +"X......................................X X..X", +"X..XXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXX..X X..X", +"X..X X..X X..X X..X", +"X..X X..X X..X X..X", +"X..X X..X X..X X..X", +"X..X X..XXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXX..X", +"X..X X.......................................X", +"X..X X........................................X", +"X..X X......X.X.X.X.X.X.X.X.X.X.X.X.X...X.X....X", +"X..XX......X.X.X.X.X.X.X.X.X.X.X.X.X...X.X.....X", +"X..X........X.X.X.X.X.X.X.X.X.X.X.X.X...X......X", +"X..........X.X.X.X.X.X.X.X.X.X.X.X.X...X.......X", +"X...........X.X.X.X.X.X.X.X.X.X.X.X.X..........X", +"X..............................................X", +"X..............................................X", +"X.........X.X.X.X.X.X.X.X.X.X.X.X.X.X..........X", +"X........X.X.X.X.X.X.X.X.X.X.X.X.X.X........X..X", +"X.......X.X.X.X.X.X.X.X.X.X.X.X.X.X.X......XX..X", +"X......X.X.X.X.X.X.X.X.X.X.X.X.X.X.X......X X..X", +"X.....X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X....X X..X", +"X.......................................X X..X", +"X......................................X X..X", +"X..XXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXX..X X..X", +"X..X XXXXXXXXXXXXXXXXXXXXXXXXX X..X XXXX", +"X..X X...X...XX...XX....X..XXX X..X ", +"X..X X.......X..X..XX..XX..XXX X..X ", +"X..X X..X.X..X.....XX..XX..XXX X..X ", +"X..X X..XXX..X..X..X....X....X X..X ", +"XXXX XXXXXXXXXXXXXXXXXXXXXXXXX XXXX " +}; diff --git a/mbiff/main.c b/mbiff/main.c index 237c8ce..466ec44 100644 --- a/mbiff/main.c +++ b/mbiff/main.c @@ -1 +1,58 @@ -int main() {} +#include "mbiff.h" + +#include "mailempty.xpm" +#include "mailfull.xpm" + +MwWidget window, image; +MwLLPixmap empty, full; +static int waiting = 0; + +static void resize(MwWidget handle, void* user, void* client){ + int w = MwGetInteger(handle, MwNwidth); + int h = MwGetInteger(handle, MwNheight); + int iw = w < h ? w : h; + + (void)user; + (void)client; + + MwVaApply(image, + MwNx, (w - iw) / 2, + MwNy, (h - iw) / 2, + MwNwidth, iw, + MwNheight, iw, + NULL); +} + +static void tick(MwWidget handle, void* user, void* client){ + (void)user; + (void)client; + + waiting += MwWaitMS; + if(waiting >= 1000){ + check_mail(); + + waiting = 0; + } +} + +int main() { + init_mail(); + + MwLibraryInit(); + + window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 48, 48, + MwNtitle, "mbiff", + NULL); + + empty = MwLoadXPM(window, mailempty); + full = MwLoadXPM(window, mailfull); + + image = MwVaCreateWidget(MwImageClass, "image", window, 0, 0, 48, 48, + MwNpixmap, empty, + NULL); + + MwAddUserHandler(window, MwNtickHandler, tick, NULL); + MwAddUserHandler(window, MwNresizeHandler, resize, NULL); + + MwLoop(window); +} diff --git a/mbiff/mbiff.h b/mbiff/mbiff.h new file mode 100644 index 0000000..717f428 --- /dev/null +++ b/mbiff/mbiff.h @@ -0,0 +1,35 @@ +#ifndef __MBIFF_H__ +#define __MBIFF_H__ + +#include "config.h" + +/* Milsko */ +#include +#include + +/* External */ + +/* Standard */ +#include +#include +#include +#include +#include + +#ifdef HAS_PATHS_H +#include +#endif + +#ifndef _PATH_MAILDIR +#define _PATH_MAILDIR "/var/mail" +#endif + +/* main.c */ +extern MwWidget window, image; +extern MwLLPixmap empty, full; + +/* mail.c */ +void init_mail(void); +void check_mail(void); + +#endif