ObjFW
Loading...
Searching...
No Matches
OFApplication.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im>
3 *
4 * All rights reserved.
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License version 3.0 only,
8 * as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13 * version 3.0 for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * version 3.0 along with this program. If not, see
17 * <https://www.gnu.org/licenses/>.
18 */
19
20#include <signal.h>
21
22#import "OFObject.h"
23#import "OFNotification.h"
24
25#ifdef OF_WINDOWS
26# include <windows.h>
27#endif
28
29OF_ASSUME_NONNULL_BEGIN
30
33@class OFArray OF_GENERIC(ObjectType);
34@class OFDictionary OF_GENERIC(KeyType, ObjectType);
35@class OFMutableArray OF_GENERIC(ObjectType);
36@class OFMutableDictionary OF_GENERIC(KeyType, ObjectType);
37@class OFSandbox;
38@class OFString;
39
45
50
75#ifndef OF_WINDOWS
76# define OF_APPLICATION_DELEGATE(class_) \
77 int \
78 main(int argc, char *argv[]) \
79 { \
80 return OFApplicationMain(&argc, &argv, \
81 (class_ *)[[class_ alloc] init]); \
82 }
83#else
84# define OF_APPLICATION_DELEGATE(class_) \
85 int \
86 main(int argc, char *argv[]) \
87 { \
88 return OFApplicationMain(&argc, &argv, \
89 (class_ *)[[class_ alloc] init]); \
90 } \
91 \
92 WINAPI int \
93 WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, \
94 LPSTR lpCmdLine, int nShowCmd) \
95 { \
96 extern void __getmainargs(int *, char ***, char ***, \
97 int, int *); \
98 extern int _CRT_glob; \
99 int argc = 0, si = 0; \
100 char **argv = NULL, **envp = NULL; \
101 \
102 __getmainargs(&argc, &argv, &envp, _CRT_glob, &si); \
103 \
104 return OFApplicationMain(&argc, &argv, \
105 (class_ *)[[class_ alloc] init]); \
106 }
107#endif
108
109#ifdef OF_HAVE_PLEDGE
110# define OF_HAVE_SANDBOX
111#endif
112
120@protocol OFApplicationDelegate <OFObject>
128- (void)applicationDidFinishLaunching: (OFNotification *)notification;
129
130@optional
137- (void)applicationWillTerminate: (OFNotification *)notification;
138
147- (void)applicationDidReceiveSIGINT;
148
149#ifdef SIGHUP
160- (void)applicationDidReceiveSIGHUP;
161#endif
162
163#ifdef SIGUSR1
174- (void)applicationDidReceiveSIGUSR1;
175#endif
176
177#ifdef SIGUSR2
188- (void)applicationDidReceiveSIGUSR2;
189#endif
190@end
191
205OF_SUBCLASSING_RESTRICTED
207{
208 OFString *_programName;
209 OFArray OF_GENERIC(OFString *) *_arguments;
210 OFMutableDictionary OF_GENERIC(OFString *, OFString *) *_environment;
211 int *_argc;
212 char ***_argv;
213 id <OFApplicationDelegate> _Nullable _delegate;
214 void (*_Nullable _SIGINTHandler)(id, SEL);
215#ifndef OF_WINDOWS
216 void (*_Nullable _SIGHUPHandler)(id, SEL);
217 void (*_Nullable _SIGUSR1Handler)(id, SEL);
218 void (*_Nullable _SIGUSR2Handler)(id, SEL);
219#endif
220#ifdef OF_HAVE_SANDBOX
221 OFSandbox *_Nullable _activeSandbox;
222 OFSandbox *_Nullable _activeSandboxForChildProcesses;
223#endif
224}
225
226#ifdef OF_HAVE_CLASS_PROPERTIES
227@property (class, readonly, nullable, nonatomic)
228 OFApplication *sharedApplication;
229@property (class, readonly, nullable, nonatomic) OFString *programName;
230@property (class, readonly, nullable, nonatomic)
231 OFArray OF_GENERIC(OFString *) *arguments;
232@property (class, readonly, nullable, nonatomic)
233 OFDictionary OF_GENERIC(OFString *, OFString *) *environment;
234#endif
235
239@property (readonly, nonatomic) OFString *programName;
240
244@property (readonly, nonatomic) OFArray OF_GENERIC(OFString *) *arguments;
245
249@property (readonly, nonatomic)
251
255@property OF_NULLABLE_PROPERTY (assign, nonatomic)
256 id <OFApplicationDelegate> delegate;
257
258#ifdef OF_HAVE_SANDBOX
259@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFSandbox *activeSandbox;
260@property OF_NULLABLE_PROPERTY (readonly, nonatomic)
261 OFSandbox *activeSandboxForChildProcesses;
262#endif
263
269+ (nullable OFApplication *)sharedApplication;
270
276+ (nullable OFString *)programName;
277
283+ (nullable OFArray OF_GENERIC(OFString *) *)arguments;
284
290+ (nullable OFDictionary OF_GENERIC(OFString *, OFString *) *)environment;
291
295+ (void)terminate OF_NO_RETURN;
296
302+ (void)terminateWithStatus: (int)status OF_NO_RETURN;
303
304#ifdef OF_HAVE_SANDBOX
305+ (void)of_activateSandbox: (OFSandbox *)sandbox;
306+ (void)of_activateSandboxForChildProcesses: (OFSandbox *)sandbox;
307#endif
308
309- (instancetype)init OF_UNAVAILABLE;
310
317- (void)getArgumentCount: (int *_Nonnull *_Nonnull)argc
318 andArgumentValues: (char *_Nullable *_Nonnull *_Nonnull[_Nonnull])argv;
319
323- (void)terminate OF_NO_RETURN;
324
330- (void)terminateWithStatus: (int)status OF_NO_RETURN;
331
332#ifdef OF_HAVE_SANDBOX
333- (void)of_activateSandbox: (OFSandbox *)sandbox;
334- (void)of_activateSandboxForChildProcesses: (OFSandbox *)sandbox;
335#endif
336@end
337
338#ifdef __cplusplus
339extern "C" {
340#endif
341extern int OFApplicationMain(int *_Nonnull, char *_Nullable *_Nonnull[_Nonnull],
342 id <OFApplicationDelegate>);
343#ifdef __cplusplus
344}
345#endif
346
347OF_ASSUME_NONNULL_END
const OFNotificationName OFApplicationWillTerminateNotification
A notification that will be sent when the application will terminate.
Definition OFApplication.m:98
const OFNotificationName OFApplicationDidFinishLaunchingNotification
A notification that will be sent when the application did finish launching.
Definition OFApplication.m:96
const struct objc_selector * SEL
A selector.
Definition ObjFWRT.h:102
A class which represents the application as an object.
Definition OFApplication.h:207
OFDictionary * environment
The environment of the application.
Definition OFApplication.h:250
OFArray * arguments
The arguments passed to the application.
Definition OFApplication.h:244
An abstract class for storing objects in an array.
Definition OFArray.h:109
A class for storing constant strings using the @"" literal.
Definition OFConstantString.h:42
An abstract class for storing objects in a dictionary.
Definition OFDictionary.h:84
An abstract class for storing, adding and removing objects in an array.
Definition OFMutableArray.h:48
An abstract class for storing and changing objects in a dictionary.
Definition OFMutableDictionary.h:48
A class to represent a notification for or from OFNotificationCenter.
Definition OFNotification.h:42
The root class for all other classes inside ObjFW.
Definition OFObject.h:692
A class for handling strings.
Definition OFString.h:143