AmendHub

Download

jcs

/

subtext

/

util.h

 

(View History)

jcs   util: Add dynamic malloc tracking Latest amendment: 587 on 2024-02-15

1 /*
2 * Copyright (c) 2020-2022 joshua stein <jcs@jcs.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 #ifndef __UTIL_H__
18 #define __UTIL_H__
19
20 #include <stdlib.h>
21 #include <limits.h>
22 #include <time.h>
23
24 /* uncomment to enable malloc tracking */
25 // #define MALLOC_DEBUG
26
27 #ifndef SIZE_MAX
28 #define SIZE_MAX ULONG_MAX
29 #endif
30
31 #define nitems(what) (sizeof((what)) / sizeof((what)[0]))
32 #define member_size(type, member) sizeof(((type *)0)->member)
33
34 #define MIN(a, b) ((a) < (b) ? (a) : (b))
35 #define MAX(a, b) ((a) > (b) ? (a) : (b))
36 #define BOUND(a, min, max) ((a) > (max) ? (max) : ((a) < (min) ? (min) : (a)))
37
38 #define CHARS_TO_LONG(a,b,c,d) (unsigned long)(\
39 ((unsigned long)((unsigned char)(a)) << 24) | \
40 ((unsigned long)((unsigned char)(b)) << 16) | \
41 ((unsigned long)((unsigned char)(c)) << 8) | \
42 (unsigned long)((unsigned char)(d)) )
43 #define CHARS_TO_SHORT(a,b) (unsigned short)(\
44 ((unsigned short)((unsigned char)(a)) << 8) | \
45 (unsigned short)((unsigned char)(b)) )
46
47 #define SCROLLBAR_WIDTH 16
48
49 /* GetMBarHeight() is not very useful */
50 #define MENUBAR_HEIGHT 20
51
52 #define TICKS_PER_SEC 60L
53
54 /* 24107 days */
55 #define UNIX_TO_MAC_TIME(uts) ((unsigned long)(uts) + 2082844800)
56 #define MAC_TO_UNIX_TIME(mts) ((unsigned long)(mts) - 2082844800)
57
58 #define MAX_TEXTEDIT_SIZE 32767L
59
60 #ifndef bool
61 typedef Boolean bool;
62 #endif
63 typedef signed long off_t;
64 typedef signed long ssize_t;
65 typedef unsigned char u_char;
66 typedef unsigned long u_int;
67 typedef unsigned char u_int8_t;
68 typedef unsigned short u_int16_t;
69 typedef unsigned long u_int32_t;
70
71 #define BYTE_ORDER BIG_ENDIAN
72
73 typedef struct {
74 short push[2], rts;
75 void *addr;
76 } tCodeStub;
77
78 struct stat {
79 short st_mode;
80 ssize_t st_size;
81 time_t st_ctime;
82 time_t st_mtime;
83 unsigned char st_flags;
84 };
85
86 void util_init(void);
87
88 void * xmalloc(size_t);
89 void xfree(void *ptrptr);
90 void xfree_verify(void);
91 void * xmalloczero(size_t);
92 void * xcalloc(size_t, size_t);
93 void * xrealloc(void *src, size_t size);
94 void * xreallocarray(void *, size_t, size_t);
95 char * xstrdup(const char *);
96 char * xstrndup(const char *str, size_t maxlen);
97 #ifdef MALLOC_DEBUG
98 void xalloc_print(size_t (*printer)(const char *, ...));
99 #endif
100
101 bool grow_to_fit(void *var, size_t *var_size, size_t used_size, size_t add,
102 size_t grow_amount);
103
104 short getline(char *str, size_t len, char **ret);
105 const char * ordinal(unsigned short n);
106 size_t rtrim(char *str, char *chars);
107 long strpos_quoted(char *str, char c);
108 char * OSTypeToString(OSType type);
109
110 unsigned long xorshift32(void);
111
112 void panic(const char *format, ...);
113 void err(short ret, const char *format, ...);
114 void warnx(const char *format, ...);
115 void warn(const char *format, ...);
116 void note(const char *format, ...);
117 void appicon_note(const char *format, ...);
118 short ask(const char *format, ...);
119 #define ASK_YES 1
120 #define ASK_NO 2
121 void about(char *program_name);
122 void progress(char *format, ...);
123 void window_rect(WindowPtr win, Rect *ret);
124 void center_in_screen(short width, short height, bool titlebar, Rect *b);
125 Point centered_sfget_dialog(void);
126 Point centered_sfput_dialog(void);
127
128 Handle xNewHandle(size_t size);
129 Handle xGetResource(ResType type, short id);
130 StringHandle xGetString(short id);
131 char * xGetStringAsChar(short id);
132 bool xGetStringAsLong(short id, long *ret);
133 bool xSetHandleSize(Handle h, Size s);
134
135 short getpath(short vRefNum, Str255 fileName, Str255 ret, bool include_file);
136 bool FIsDir(Str255 path);
137 short stat(char *path, struct stat *sb);
138 short FStat(Str255 path, struct stat *sb);
139 OSErr copy_file(Str255 source, Str255 dest, bool overwrite);
140 OSErr copy_file_contents(short source_ref, short dest_ref);
141 OSErr FSReadLine(short frefnum, char *buf, size_t buflen);
142
143 char * gestalt_machine_type(void);
144 char * get_version(bool long_version);
145
146 short FontHeight(short font_id, short size);
147 void DrawGrowIconOnly(WindowPtr win);
148 short TEGetWidth(short off, TEHandle te);
149 void UpdateScrollbarForTE(GrafPtr win, ControlHandle scroller, TEHandle te,
150 bool reset);
151 void SetTrackControlTE(TEHandle te);
152 pascal void TrackMouseDownInControl(ControlHandle control, short part);
153 pascal bool ModalDialogFilter(DialogPtr dlg, EventRecord *event,
154 short *hit);
155 void PasswordDialogFieldFilterSetup(short ditl_id, char *storage,
156 size_t len);
157 pascal bool PasswordDialogFieldFilter(DialogPtr dlg, EventRecord *event,
158 short *hit);
159 void PasswordDialogFieldFinish(void);
160 pascal void NullCaretHook(void);
161 void HideMenuBar(void);
162 void RestoreHiddenMenuBar(void);
163
164 size_t strlcat(char *dst, const char *src, size_t dsize);
165 size_t strlcpy(char *dst, const char *src, size_t dsize);
166 char * strndup(const char *str, size_t maxlen);
167 char * strsep(char **stringp, const char *delim);
168 short snprintf(char *s, size_t size, const char *fmt, ...);
169 short vsnprintf(char *s, size_t size, const char *fmt, void *p);
170
171 #endif