This commit is contained in:
Nishi 2025-11-18 20:34:20 +09:00
commit f91f5042cb
Signed by: nishi
GPG key ID: 27EF69B208EB9343
5 changed files with 239 additions and 1 deletions

32
mbiff/mail.c Normal file
View file

@ -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;
}
}

57
mbiff/mailempty.xpm Normal file
View file

@ -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 "
};

57
mbiff/mailfull.xpm Normal file
View file

@ -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 "
};

View file

@ -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);
}

35
mbiff/mbiff.h Normal file
View file

@ -0,0 +1,35 @@
#ifndef __MBIFF_H__
#define __MBIFF_H__
#include "config.h"
/* Milsko */
#include <MDE/Foundation.h>
#include <Mw/Milsko.h>
/* External */
/* Standard */
#include <sys/stat.h>
#include <unistd.h>
#include <pwd.h>
#include <stdlib.h>
#include <string.h>
#ifdef HAS_PATHS_H
#include <paths.h>
#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