ObjFW
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 
29 OF_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 
128 - (void)applicationDidFinishLaunching: (OFNotification *)notification;
129 
130 @optional
137 - (void)applicationWillTerminate: (OFNotification *)notification;
138 
147 - (void)applicationDidReceiveSIGINT;
148 
149 #ifdef SIGHUP
150 
160 - (void)applicationDidReceiveSIGHUP;
161 #endif
162 
163 #ifdef SIGUSR1
164 
174 - (void)applicationDidReceiveSIGUSR1;
175 #endif
176 
177 #ifdef SIGUSR2
178 
188 - (void)applicationDidReceiveSIGUSR2;
189 #endif
190 @end
191 
205 OF_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)
250  OFDictionary OF_GENERIC(OFString *, OFString *) *environment;
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
339 extern "C" {
340 #endif
341 extern int OFApplicationMain(int *_Nonnull, char *_Nullable *_Nonnull[_Nonnull],
342  id <OFApplicationDelegate>);
343 #ifdef __cplusplus
344 }
345 #endif
346 
347 OF_ASSUME_NONNULL_END
const struct objc_selector * SEL
A selector.
Definition: ObjFWRT.h:102
An abstract class for storing objects in an array.
Definition: OFArray.h:107
A class to represent a notification for or from OFNotificationCenter.
Definition: OFNotification.h:40
A class for storing constant strings using the @"" literal.
Definition: OFConstantString.h:41
The root class for all other classes inside ObjFW.
Definition: OFObject.h:690
An abstract class for storing, adding and removing objects in an array.
Definition: OFMutableArray.h:47
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
A class for handling strings.
Definition: OFString.h:142
An abstract class for storing objects in a dictionary.
Definition: OFDictionary.h:82
An abstract class for storing and changing objects in a dictionary.
Definition: OFMutableDictionary.h:46
A protocol for delegates of OFApplication.
A class which represents the application as an object.
Definition: OFApplication.h:206