spmenu/libs/main.c

93 lines
2.1 KiB
C
Raw Normal View History

2023-01-20 23:17:30 +01:00
/* See LICENSE file for copyright and license details. */
2023-08-07 06:19:15 +02:00
2023-01-20 23:17:30 +01:00
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
2023-08-07 06:19:15 +02:00
#ifndef MAX
#define MAX(A, B) ((A) > (B) ? (A) : (B))
#endif
#ifndef MIN
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#endif
#ifndef BETWEEN
#define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B))
#endif
#ifndef INTERSECT
#define INTERSECT(x,y,w,h,r) (MAX(0, MIN((x)+(w),(r).x_org+(r).width) - MAX((x),(r).x_org)) \
&& MAX(0, MIN((y)+(h),(r).y_org+(r).height) - MAX((y),(r).y_org)))
#endif
#ifndef LENGTH
#define LENGTH(X) (sizeof X / sizeof X[0])
#endif
#ifndef TEXTW
#define TEXTW(X) (draw_font_getwidth(draw, (X), False) + sp.lrpad)
#endif
#ifndef TEXTWM
#define TEXTWM(X) (draw_font_getwidth(draw, (X), True) + sp.lrpad)
#endif
#ifndef NUMBERSMAXDIGITS
#define NUMBERSMAXDIGITS 100
#endif
#ifndef NUMBERSBUFSIZE
#define NUMBERSBUFSIZE (NUMBERSMAXDIGITS * 2) + 1
#endif
#ifndef MAXITEMLENGTH
#define MAXITEMLENGTH 1024
#endif
2023-01-20 23:17:30 +01:00
2023-08-07 06:19:15 +02:00
size_t sp_strncpy(char *restrict dst, const char *restrict src, size_t size);
void die(const char *fmt, ...);
void *ecalloc(size_t nmemb, size_t size);
2023-01-20 23:17:30 +01:00
2023-06-12 03:39:29 +02:00
size_t sp_strncpy(char *restrict dst, const char *restrict src, size_t size) {
int offset;
offset = 0;
if (size > 0) {
while (*(src+offset) != '\0' ) {
if (offset == size) {
offset--;
break;
}
*(dst+offset) = *(src+offset);
offset++;
}
}
*(dst+offset) = '\0';
while (*(src+offset) != '\0')
offset++;
return offset;
}
void die(const char *fmt, ...) {
2023-05-08 23:00:45 +02:00
va_list ap;
2023-01-20 23:17:30 +01:00
2023-05-08 23:00:45 +02:00
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
2023-01-20 23:17:30 +01:00
2023-05-08 23:00:45 +02:00
if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
fputc(' ', stderr);
perror(NULL);
} else {
fputc('\n', stderr);
}
2023-01-20 23:17:30 +01:00
2023-05-08 23:00:45 +02:00
exit(1);
2023-01-20 23:17:30 +01:00
}
2023-08-07 06:19:15 +02:00
void *ecalloc(size_t nmemb, size_t size) {
void *p;
if (!(p = calloc(nmemb, size)))
die("calloc:");
return p;
}