ObjFW  Diff

Differences From Artifact [ec565e513e]:

To Artifact [f44a22ec3a]:


25
26
27
28
29
30
31
32
33


34
35
36
37
38
39
40
41


42
43
44
45
46
47
48
49
50


51
52
53
54
55


56
57

58
59
60
61
62
63
64
65
66


67
68
69
70

71
72
73
74
75
76
77
78


79
80
81
82

83
84
85
86
87
88
89
90


91
92
93
94

95
96
97
98
99
100
101
102
103
104


105
106
107
108
109
110
111
25
26
27
28
29
30
31


32
33
34
35
36
37
38
39


40
41
42
43
44
45
46
47
48


49
50
51
52
53


54
55
56

57
58
59
60
61
62
63
64


65
66
67
68
69

70
71
72
73
74
75
76


77
78
79
80
81

82
83
84
85
86
87
88


89
90
91
92
93

94
95
96
97
98
99
100
101
102


103
104
105
106
107
108
109
110
111







-
-
+
+






-
-
+
+







-
-
+
+



-
-
+
+

-
+







-
-
+
+



-
+






-
-
+
+



-
+






-
-
+
+



-
+








-
-
+
+







#define OF_APPLICATION_DELEGATE(cls)					\
	int								\
	main(int argc, char *argv[])					\
	{								\
		return of_application_main(&argc, &argv, [cls class]);	\
	}

/**
 * \brief A protocol for delegates of OFApplication.
/*!
 * @brief A protocol for delegates of OFApplication.
 */
#ifndef OF_APPLICATION_M
@protocol OFApplicationDelegate <OFObject>
#else
@protocol OFApplicationDelegate
#endif
/**
 * \brief A method which is called when the application was initialized and is
/*!
 * @brief A method which is called when the application was initialized and is
 *	  running now.
 */
- (void)applicationDidFinishLaunching;

#ifdef OF_HAVE_OPTIONAL_PROTOCOLS
@optional
#endif
/**
 * \brief A method which is called when the application will terminate.
/*!
 * @brief A method which is called when the application will terminate.
 */
- (void)applicationWillTerminate;

/**
 * \brief A method which is called when the application received a SIGINT.
/*!
 * @brief A method which is called when the application received a SIGINT.
 *
 * \warning You are not allowed to send any messages inside this method, as
 * @warning You are not allowed to send any messages inside this method, as
 *	    message dispatching is not signal-safe! You are only allowed to do
 *	    signal-safe operations like setting a variable or calling a
 *	    signal-safe function!
 */
- (void)applicationDidReceiveSIGINT;

#ifndef _WIN32
/**
 * \brief A method which is called when the application received a SIGHUP.
/*!
 * @brief A method which is called when the application received a SIGHUP.
 *
 * This signal is not available on Windows.
 *
 * \warning You are not allowed to send any messages inside this method, as
 * @warning You are not allowed to send any messages inside this method, as
 *	    message dispatching is not signal-safe! You are only allowed to do
 *	    signal-safe operations like setting a variable or calling a
 *	    signal-safe function!
 */
- (void)applicationDidReceiveSIGHUP;

/**
 * \brief A method which is called when the application received a SIGUSR1.
/*!
 * @brief A method which is called when the application received a SIGUSR1.
 *
 * This signal is not available on Windows.
 *
 * \warning You are not allowed to send any messages inside this method, as
 * @warning You are not allowed to send any messages inside this method, as
 *	    message dispatching is not signal-safe! You are only allowed to do
 *	    signal-safe operations like setting a variable or calling a
 *	    signal-safe function!
 */
- (void)applicationDidReceiveSIGUSR1;

/**
 * \brief A method which is called when the application received a SIGUSR2.
/*!
 * @brief A method which is called when the application received a SIGUSR2.
 *
 * This signal is not available on Windows.
 *
 * \warning You are not allowed to send any messages inside this method, as
 * @warning You are not allowed to send any messages inside this method, as
 *	    message dispatching is not signal-safe! You are only allowed to do
 *	    signal-safe operations like setting a variable or calling a
 *	    signal-safe function!
 */
- (void)applicationDidReceiveSIGUSR2;
#endif
@end

/**
 * \brief Represents the application as an object.
/*!
 * @brief Represents the application as an object.
 */
@interface OFApplication: OFObject
{
	OFString *programName;
	OFMutableArray *arguments;
	OFMutableDictionary *environment;
	int *argc;
123
124
125
126
127
128
129
130
131


132
133

134
135
136
137
138


139
140

141
142
143
144
145


146
147

148
149
150
151
152


153
154

155
156
157
158
159


160
161
162
163
164


165
166

167
168
169
170
171


172
173
174
175
176


177
178
179
180
181
182


183
184
185


186
187
188
189
190
191


192
193

194
195
196
197
198


199
200

201
202
203
204
205


206
207

208
209
210
211
212


213
214

215
216
217
218
219


220
221

222
223
224
225
226


227
228
229
230
231
232
233


234
235
236
237
238


239
240

241
242
243
244
245
246
247
123
124
125
126
127
128
129


130
131
132

133
134
135
136


137
138
139

140
141
142
143


144
145
146

147
148
149
150


151
152
153

154
155
156
157


158
159
160
161
162


163
164
165

166
167
168
169


170
171
172
173
174


175
176
177
178
179
180


181
182
183


184
185
186
187
188
189


190
191
192

193
194
195
196


197
198
199

200
201
202
203


204
205
206

207
208
209
210


211
212
213

214
215
216
217


218
219
220

221
222
223
224


225
226
227
228
229
230
231


232
233
234
235
236


237
238
239

240
241
242
243
244
245
246
247







-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+



-
-
+
+

-
+



-
-
+
+



-
-
+
+




-
-
+
+

-
-
+
+




-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+





-
-
+
+



-
-
+
+

-
+







#ifdef OF_HAVE_PROPERTIES
@property (readonly, copy, nonatomic) OFString *programName;
@property (readonly, copy, nonatomic) OFArray *arguments;
@property (readonly, copy, nonatomic) OFDictionary *environment;
@property (assign) id <OFApplicationDelegate> delegate;
#endif

/**
 * \brief Returns the only OFApplication instance in the application.
/*!
 * @brief Returns the only OFApplication instance in the application.
 *
 * \return The only OFApplication instance in the application
 * @return The only OFApplication instance in the application
 */
+ (OFApplication*)sharedApplication;

/**
 * \brief Returns the name of the program (argv[0]).
/*!
 * @brief Returns the name of the program (argv[0]).
 *
 * \return The name of the program (argv[0])
 * @return The name of the program (argv[0])
 */
+ (OFString*)programName;

/**
 * \brief Returns the arguments passed to the application.
/*!
 * @brief Returns the arguments passed to the application.
 *
 * \return The arguments passed to the application
 * @return The arguments passed to the application
 */
+ (OFArray*)arguments;

/**
 * \brief Returns the environment of the application.
/*!
 * @brief Returns the environment of the application.
 *
 * \return The environment of the application
 * @return The environment of the application
 */
+ (OFDictionary*)environment;

/**
 * \brief Terminates the application.
/*!
 * @brief Terminates the application.
 */
+ (void)terminate;

/**
 * \brief Terminates the application with the specified status.
/*!
 * @brief Terminates the application with the specified status.
 *
 * \param status The status with which the application will terminate
 * @param status The status with which the application will terminate
 */
+ (void)terminateWithStatus: (int)status;

/**
 * \brief Sets argc and argv.
/*!
 * @brief Sets argc and argv.
 *
 * You should not call this directly, but use OF_APPLICATION_DELEGATE instead!
 *
 * \param argc The number of arguments
 * \param argv The argument values
 * @param argc The number of arguments
 * @param argv The argument values
 */
- (void)setArgumentCount: (int*)argc
       andArgumentValues: (char**[])argv;

/**
 * \brief Gets args and argv.
/*!
 * @brief Gets args and argv.
 *
 * \param argc A pointer where a pointer to argc should be stored
 * \param argv A pointer where a pointer to argv should be stored
 * @param argc A pointer where a pointer to argc should be stored
 * @param argv A pointer where a pointer to argv should be stored
 */
- (void)getArgumentCount: (int**)argc
       andArgumentValues: (char***[])argv;

/**
 * \brief Returns the name of the program (argv[0]).
/*!
 * @brief Returns the name of the program (argv[0]).
 *
 * \return The name of the program (argv[0])
 * @return The name of the program (argv[0])
 */
- (OFString*)programName;

/**
 * \brief Returns the arguments passed to the application.
/*!
 * @brief Returns the arguments passed to the application.
 *
 * \return The arguments passed to the application
 * @return The arguments passed to the application
 */
- (OFArray*)arguments;

/**
 * \brief Returns the environment of the application.
/*!
 * @brief Returns the environment of the application.
 *
 * \return The environment of the application
 * @return The environment of the application
 */
- (OFDictionary*)environment;

/**
 * \brief Returns the delegate of the application.
/*!
 * @brief Returns the delegate of the application.
 *
 * \return The delegate of the application
 * @return The delegate of the application
 */
- (id <OFApplicationDelegate>)delegate;

/**
 * \brief Sets the delegate of the application.
/*!
 * @brief Sets the delegate of the application.
 *
 * \param delegate The delegate for the application
 * @param delegate The delegate for the application
 */
- (void)setDelegate: (id <OFApplicationDelegate>)delegate;

/**
 * \brief Starts the application after everything has been initialized.
/*!
 * @brief Starts the application after everything has been initialized.
 *
 * You should not call this directly, but use OF_APPLICATION_DELEGATE instead!
 */
- (void)run;

/**
 * \brief Terminates the application.
/*!
 * @brief Terminates the application.
 */
- (void)terminate;

/**
 * \brief Terminates the application with the specified status.
/*!
 * @brief Terminates the application with the specified status.
 *
 * \param status The status with which the application will terminate
 * @param status The status with which the application will terminate
 */
- (void)terminateWithStatus: (int)status;
@end

@interface OFObject (OFApplicationDelegate) <OFApplicationDelegate>
@end