More care over wchar_t and snprintf
This commit is contained in:
parent
89aba30e4f
commit
14048ead24
20 changed files with 242 additions and 181 deletions
159
Tangled/inweb.c
159
Tangled/inweb.c
|
@ -110,7 +110,7 @@ void Platform__where_am_i(wchar_t *p, size_t length) {
|
|||
#endif /* PLATFORM_MACOS */
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 355 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 366 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
typedef pthread_t foundation_thread;
|
||||
typedef pthread_attr_t foundation_thread_attributes;
|
||||
|
||||
|
@ -149,7 +149,7 @@ char *Platform__getenv(const char *name) {
|
|||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 88 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 99 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
int Platform__system(const char *cmd) {
|
||||
char cmd_line[10*MAX_PATH];
|
||||
sprintf(cmd_line, "sh -c %s", cmd);
|
||||
|
@ -181,7 +181,7 @@ int Platform__system(const char *cmd) {
|
|||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 188 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 199 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
typedef HANDLE foundation_thread;
|
||||
typedef int foundation_thread_attributes;
|
||||
|
||||
|
@ -189,7 +189,7 @@ struct Win32_Thread_Start { void *(*fn)(void *); void* arg; };
|
|||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 270 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 281 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
struct Win32_Mutex { INIT_ONCE init; CRITICAL_SECTION crit; };
|
||||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
|
@ -263,6 +263,9 @@ struct Win32_Mutex { INIT_ONCE init; CRITICAL_SECTION crit; };
|
|||
#endif /* PLATFORM_ANDROID */
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#define PLATFORM_SNPRINTF snprintf
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#define CREATE_MUTEX(name) \
|
||||
static pthread_mutex_t name = PTHREAD_MUTEX_INITIALIZER;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
|
@ -297,6 +300,9 @@ struct Win32_Mutex { INIT_ONCE init; CRITICAL_SECTION crit; };
|
|||
#define isdigit(x) Platform__Windows_isdigit(x)
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#define PLATFORM_SNPRINTF snprintf
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#define CREATE_MUTEX(name) \
|
||||
static struct Win32_Mutex name = { INIT_ONCE_STATIC_INIT, { 0 }};
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
|
@ -2356,80 +2362,80 @@ int Platform__system(const char *cmd) ;
|
|||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_MACOS
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 204 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 215 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
int Platform__system(const char *cmd) ;
|
||||
#endif /* PLATFORM_MACOS */
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 221 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 232 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
int Platform__mkdir(char *transcoded_pathname) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 229 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 240 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void * Platform__opendir(char *dir_name) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 234 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 245 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
int Platform__readdir(void *D, char *dir_name, char *leafname) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 249 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 260 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__closedir(void *D) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 262 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 273 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
time_t Platform__never_time(void) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 266 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 277 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
time_t Platform__timestamp(char *transcoded_filename) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 272 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 283 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
off_t Platform__size(char *transcoded_filename) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 286 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 297 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__rsync(char *transcoded_source, char *transcoded_dest) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 295 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 306 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__quote_text(char *quoted, char *raw, int terminate) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 311 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 322 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__sleep(int seconds) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_MACOS
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 327 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 338 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__notification(text_stream *text, int happy) ;
|
||||
#endif /* PLATFORM_MACOS */
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifndef PLATFORM_MACOS
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 340 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 351 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__notification(text_stream *text, int happy) ;
|
||||
#endif /* PLATFORM_MACOS */
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 349 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 360 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__enable_coloured_terminal_output(void) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 361 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 372 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
int Platform__create_thread(foundation_thread *pt, const foundation_thread_attributes *pa, void *(*fn)(void *), void *arg) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 366 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 377 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
int Platform__join_thread(foundation_thread pt, void** rv) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 370 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 381 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__init_thread(foundation_thread_attributes *pa, size_t size) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 375 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 386 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
size_t Platform__get_thread_stack_size(foundation_thread_attributes *pa) ;
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
|
@ -2441,63 +2447,63 @@ int Platform__Windows_isdigit(int c) ;
|
|||
void Platform__where_am_i(wchar_t *p, size_t length) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 120 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 131 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
int Platform__mkdir(char *transcoded_pathname) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 128 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 139 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void * Platform__opendir(char *dir_name) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 133 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 144 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
int Platform__readdir(void *D, char *dir_name, char *leafname) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 150 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 161 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__closedir(void *D) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 158 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 169 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__rsync(char *transcoded_source, char *transcoded_dest) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 166 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 177 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__sleep(int seconds) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 173 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 184 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__notification(text_stream *text, int happy) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 182 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 193 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__enable_coloured_terminal_output(void) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 202 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 213 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
int Platform__create_thread(foundation_thread *pt, const foundation_thread_attributes *pa, void *(*fn)(void *), void *arg) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 217 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 228 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
int Platform__join_thread(foundation_thread pt, void** rv) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 221 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 232 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__init_thread(foundation_thread_attributes* pa, size_t size) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 224 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 235 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
size_t Platform__get_thread_stack_size(foundation_thread_attributes* pa) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 236 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 247 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
time_t Platform__never_time(void) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 240 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 251 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
time_t Platform__timestamp(char *transcoded_filename) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 246 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 257 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
off_t Platform__size(char *transcoded_filename) ;
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#line 64 "inweb/foundation-module/Chapter 2/Debugging Log.w"
|
||||
|
@ -2690,7 +2696,7 @@ void Writers__register_writer_I(int esc, void (*f)(text_stream *, char *, int))
|
|||
void Writers__register_logger_I(int esc, void (*f)(text_stream *, int)) ;
|
||||
#line 87 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
void Writers__register_writer_p(int set, int esc, void *f, int cat) ;
|
||||
#line 129 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 130 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
void Writers__printf(text_stream *stream, char *fmt, ...) ;
|
||||
#line 32 "inweb/foundation-module/Chapter 2/Methods.w"
|
||||
method_set * Methods__new_set(void) ;
|
||||
|
@ -5194,9 +5200,11 @@ int Platform__system(const char *cmd) {
|
|||
|
||||
#endif /* PLATFORM_MACOS */
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_MACOS
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 199 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 210 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#include <spawn.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
|
@ -5219,7 +5227,7 @@ int Platform__system(const char *cmd) {
|
|||
#endif /* PLATFORM_MACOS */
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 221 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 232 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
int Platform__mkdir(char *transcoded_pathname) {
|
||||
errno = 0;
|
||||
int rv = mkdir(transcoded_pathname, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
|
||||
|
@ -5255,7 +5263,7 @@ void Platform__closedir(void *D) {
|
|||
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 262 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 273 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
time_t Platform__never_time(void) {
|
||||
return (time_t) 0;
|
||||
}
|
||||
|
@ -5274,7 +5282,7 @@ off_t Platform__size(char *transcoded_filename) {
|
|||
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 286 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 297 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__rsync(char *transcoded_source, char *transcoded_dest) {
|
||||
char rsync_command[10*MAX_FILENAME_LENGTH];
|
||||
sprintf(rsync_command, "rsync -a --delete ");
|
||||
|
@ -5299,7 +5307,7 @@ void Platform__quote_text(char *quoted, char *raw, int terminate) {
|
|||
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 311 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 322 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__sleep(int seconds) {
|
||||
sleep((unsigned int) seconds);
|
||||
}
|
||||
|
@ -5307,7 +5315,7 @@ void Platform__sleep(int seconds) {
|
|||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_MACOS
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 327 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 338 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__notification(text_stream *text, int happy) {
|
||||
char *sound_name = "Bell.aiff";
|
||||
if (happy == FALSE) sound_name = "Submarine.aiff";
|
||||
|
@ -5322,20 +5330,20 @@ void Platform__notification(text_stream *text, int happy) {
|
|||
#endif /* PLATFORM_POSIX */
|
||||
#ifndef PLATFORM_MACOS
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 340 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 351 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__notification(text_stream *text, int happy) {
|
||||
}
|
||||
|
||||
#endif /* PLATFORM_MACOS */
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 349 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 360 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
void Platform__enable_coloured_terminal_output(void) {
|
||||
}
|
||||
|
||||
#endif /* PLATFORM_POSIX */
|
||||
#ifdef PLATFORM_POSIX
|
||||
#line 361 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
#line 372 "inweb/foundation-module/Chapter 1/POSIX Platforms.w"
|
||||
int Platform__create_thread(foundation_thread *pt,
|
||||
const foundation_thread_attributes *pa, void *(*fn)(void *), void *arg) {
|
||||
return pthread_create(pt, pa, fn, arg);
|
||||
|
@ -5377,7 +5385,9 @@ void Platform__where_am_i(wchar_t *p, size_t length) {
|
|||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 120 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 131 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
int Platform__mkdir(char *transcoded_pathname) {
|
||||
errno = 0;
|
||||
int rv = mkdir(transcoded_pathname);
|
||||
|
@ -5415,33 +5425,33 @@ void Platform__closedir(void *D) {
|
|||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 158 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 169 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__rsync(char *transcoded_source, char *transcoded_dest) {
|
||||
printf("Platform__rsync() is not yet implemented!\n");
|
||||
}
|
||||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 166 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 177 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__sleep(int seconds) {
|
||||
Sleep((DWORD)(1000*seconds));
|
||||
}
|
||||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 173 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 184 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__notification(text_stream *text, int happy) {
|
||||
}
|
||||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 182 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 193 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
void Platform__enable_coloured_terminal_output(void) {
|
||||
}
|
||||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 195 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 206 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
DWORD WINAPI Platform__Win32_Thread_Func(LPVOID param) {
|
||||
struct Win32_Thread_Start* start = (struct Win32_Thread_Start*)param;
|
||||
(start->fn)(start->arg);
|
||||
|
@ -5477,7 +5487,7 @@ size_t Platform__get_thread_stack_size(foundation_thread_attributes* pa) {
|
|||
|
||||
#endif /* PLATFORM_WINDOWS */
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
#line 236 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
#line 247 "inweb/foundation-module/Chapter 1/Windows Platform.w"
|
||||
time_t Platform__never_time(void) {
|
||||
return (time_t) 0;
|
||||
}
|
||||
|
@ -6921,7 +6931,7 @@ void Writers__register_logger_I(int esc, void (*f)(text_stream *, int)) {
|
|||
void Writers__register_writer_p(int set, int esc, void *f, int cat) {
|
||||
if (escapes_registered == FALSE)
|
||||
{
|
||||
#line 107 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 108 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
escapes_registered = TRUE;
|
||||
for (int e=0; e<2; e++)
|
||||
for (int i=0; i<128; i++) {
|
||||
|
@ -6943,7 +6953,8 @@ void Writers__register_writer_p(int set, int esc, void *f, int cat) {
|
|||
#line 88 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
;
|
||||
if ((esc < 0) || (esc >= 128) ||
|
||||
((Characters__isalpha(esc) == FALSE) && (Characters__isdigit(esc) == FALSE)))
|
||||
((Characters__isalpha((wchar_t) esc) == FALSE) &&
|
||||
(Characters__isdigit((wchar_t) esc) == FALSE)))
|
||||
internal_error("nonalphabetic escape");
|
||||
if (escapes_category[set][esc] != VACANT_ECAT) {
|
||||
WRITE_TO(STDERR, "Clashing escape is %s%c\n", (set == 0)?"%":"$", esc);
|
||||
|
@ -6953,7 +6964,7 @@ void Writers__register_writer_p(int set, int esc, void *f, int cat) {
|
|||
the_escapes[set][esc] = f;
|
||||
}
|
||||
|
||||
#line 129 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 130 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
void Writers__printf(text_stream *stream, char *fmt, ...) {
|
||||
va_list ap; /* the variable argument list signified by the dots */
|
||||
char *p;
|
||||
|
@ -6964,7 +6975,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
|
|||
case '%': {
|
||||
int set = 0;
|
||||
{
|
||||
#line 162 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 163 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
char format_string[8];
|
||||
int esc_number = ' ';
|
||||
int i = 0;
|
||||
|
@ -7019,21 +7030,21 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
|
|||
}
|
||||
case DIRECT_ECAT:
|
||||
{
|
||||
#line 236 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 237 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wformat-nonliteral"
|
||||
switch (esc_number) {
|
||||
case 'c': case 'd': case 'i': case 'x': { /* |char| is promoted to |int| in variable arguments */
|
||||
int ival = va_arg(ap, int);
|
||||
char temp[256];
|
||||
if (snprintf(temp, 255, format_string, ival) >= 255) strcpy(temp, "?");
|
||||
if (PLATFORM_SNPRINTF(temp, 255, format_string, ival) >= 255) strcpy(temp, "?");
|
||||
for (int j = 0; temp[j]; j++) Streams__putc(temp[j], stream);
|
||||
break;
|
||||
}
|
||||
case 'g': {
|
||||
double dval = va_arg(ap, double);
|
||||
char temp[256];
|
||||
if (snprintf(temp, 255, format_string, dval) >= 255) strcpy(temp, "?");
|
||||
if (PLATFORM_SNPRINTF(temp, 255, format_string, dval) >= 255) strcpy(temp, "?");
|
||||
for (int j = 0; temp[j]; j++) Streams__putc(temp[j], stream);
|
||||
break;
|
||||
}
|
||||
|
@ -7051,7 +7062,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
|
|||
#pragma clang diagnostic pop
|
||||
|
||||
}
|
||||
#line 214 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 215 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
; break;
|
||||
case VACANT_ECAT:
|
||||
WRITE_TO(STDERR, "*** Bad WRITE escape: <%s> ***\n", format_string);
|
||||
|
@ -7060,7 +7071,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
|
|||
}
|
||||
|
||||
}
|
||||
#line 137 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 138 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
;
|
||||
break;
|
||||
}
|
||||
|
@ -7069,7 +7080,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
|
|||
if ((stream->stream_flags) & USES_LOG_ESCAPES_STRF)
|
||||
|
||||
{
|
||||
#line 162 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 163 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
char format_string[8];
|
||||
int esc_number = ' ';
|
||||
int i = 0;
|
||||
|
@ -7124,21 +7135,21 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
|
|||
}
|
||||
case DIRECT_ECAT:
|
||||
{
|
||||
#line 236 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 237 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wformat-nonliteral"
|
||||
switch (esc_number) {
|
||||
case 'c': case 'd': case 'i': case 'x': { /* |char| is promoted to |int| in variable arguments */
|
||||
int ival = va_arg(ap, int);
|
||||
char temp[256];
|
||||
if (snprintf(temp, 255, format_string, ival) >= 255) strcpy(temp, "?");
|
||||
if (PLATFORM_SNPRINTF(temp, 255, format_string, ival) >= 255) strcpy(temp, "?");
|
||||
for (int j = 0; temp[j]; j++) Streams__putc(temp[j], stream);
|
||||
break;
|
||||
}
|
||||
case 'g': {
|
||||
double dval = va_arg(ap, double);
|
||||
char temp[256];
|
||||
if (snprintf(temp, 255, format_string, dval) >= 255) strcpy(temp, "?");
|
||||
if (PLATFORM_SNPRINTF(temp, 255, format_string, dval) >= 255) strcpy(temp, "?");
|
||||
for (int j = 0; temp[j]; j++) Streams__putc(temp[j], stream);
|
||||
break;
|
||||
}
|
||||
|
@ -7156,7 +7167,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
|
|||
#pragma clang diagnostic pop
|
||||
|
||||
}
|
||||
#line 214 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 215 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
; break;
|
||||
case VACANT_ECAT:
|
||||
WRITE_TO(STDERR, "*** Bad WRITE escape: <%s> ***\n", format_string);
|
||||
|
@ -7165,7 +7176,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
|
|||
}
|
||||
|
||||
}
|
||||
#line 143 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
#line 144 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
|
||||
|
||||
else Streams__putc('$', stream);
|
||||
break;
|
||||
|
@ -10579,17 +10590,17 @@ wchar_t *Tries__search(match_trie *T, text_stream *p, wchar_t *add_outcome) {
|
|||
for (int i = start; i != endpoint+delta; i += delta) {
|
||||
wchar_t group[MAX_TRIE_GROUP_SIZE+1];
|
||||
int g = 0; /* size of group */
|
||||
int c = (i<0)?0:(Str__get_at(p, i)); /* i.e., zero at the two ends of the text */
|
||||
wchar_t c = (i<0)?0:(Str__get_at(p, i)); /* i.e., zero at the two ends of the text */
|
||||
if ((c >= 0x20) && (c <= 0x7f)) c = Characters__tolower(c); /* normalise it within ASCII */
|
||||
if (c == 0x20) { c = 0; i = endpoint - delta; } /* force any space to be equivalent to the final 0 */
|
||||
if (add_outcome) {
|
||||
int pairc = 0;
|
||||
wchar_t pairc = 0;
|
||||
if (c == '<') pairc = '>';
|
||||
if (c == '>') pairc = '<';
|
||||
if (pairc) {
|
||||
int j;
|
||||
for (j = i+delta; j != endpoint; j += delta) {
|
||||
int ch = (j<0)?0:(Str__get_at(p, j));
|
||||
wchar_t ch = (j<0)?0:(Str__get_at(p, j));
|
||||
if (ch == pairc) break;
|
||||
if (g > MAX_TRIE_GROUP_SIZE) { g = 0; break; }
|
||||
group[g++] = ch;
|
||||
|
@ -13737,7 +13748,7 @@ web_md *WebMetadata__get(pathname *P, filename *alt_F, int syntax_version,
|
|||
else {
|
||||
if (letters_from_current_word < letters_from_each_word) {
|
||||
if (Str__get_at(from, sn) != '-') {
|
||||
int l = tolower(Str__get_at(from, sn));
|
||||
wchar_t l = Characters__tolower(Str__get_at(from, sn));
|
||||
if ((letters_from_current_word == 0) ||
|
||||
((l != 'a') && (l != 'e') && (l != 'i') &&
|
||||
(l != 'o') && (l != 'u'))) {
|
||||
|
@ -14480,7 +14491,7 @@ web_bibliographic_datum *Bibliographic__set_datum(web_md *Wm, text_stream *key,
|
|||
TEMPORARY_TEXT(recapped)
|
||||
Str__copy(recapped, val);
|
||||
LOOP_THROUGH_TEXT(P, recapped)
|
||||
Str__put(P, toupper(Str__get(P)));
|
||||
Str__put(P, Characters__toupper(Str__get(P)));
|
||||
Bibliographic__set_datum(Wm, TL_IS_72, recapped);
|
||||
DISCARD_TEXT(recapped)
|
||||
|
||||
|
|
|
@ -145,7 +145,7 @@ never be used anywhere but here.
|
|||
<span class="plain-syntax"> [[</span><span class="identifier-syntax">textliterals</span><span class="plain-syntax">]];</span>
|
||||
<span class="plain-syntax"> </span><a href="3-tm.html#SP1" class="function-link"><span class="function-syntax">Time::begin</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="3-pth.html#SP2" class="function-link"><span class="function-syntax">Pathnames::start</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wp.html#SP11" class="function-link"><span class="function-syntax">Platform::enable_coloured_terminal_output</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wp.html#SP12" class="function-link"><span class="function-syntax">Platform::enable_coloured_terminal_output</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-fm.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Register the default debugging log aspects</span><span class="named-paragraph-number">8.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-fm.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">Register the default debugging log writers</span><span class="named-paragraph-number">8.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-fm.html#SP8_5" class="named-paragraph-link"><span class="named-paragraph">Register the default command line switches</span><span class="named-paragraph-number">8.5</span></a></span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>POSIX Platforms</b></li></ul></div>
|
||||
<p class="purpose">A version of our operating system interface suitable for POSIX-compliant operating systems.</p>
|
||||
|
||||
<ul class="toc"><li><a href="1-pp.html#SP3">§3. Mac OS X</a></li><li><a href="1-pp.html#SP4">§4. Generic Unix</a></li><li><a href="1-pp.html#SP5">§5. Linux</a></li><li><a href="1-pp.html#SP6">§6. Android</a></li><li><a href="1-pp.html#SP7">§7. Locale</a></li><li><a href="1-pp.html#SP8">§8. Environment variables</a></li><li><a href="1-pp.html#SP9">§9. Executable location</a></li><li><a href="1-pp.html#SP10">§10. Shell commands</a></li><li><a href="1-pp.html#SP12">§12. Directory handling</a></li><li><a href="1-pp.html#SP13">§13. Timestamp and file size</a></li><li><a href="1-pp.html#SP14">§14. Sync</a></li><li><a href="1-pp.html#SP15">§15. Sleep</a></li><li><a href="1-pp.html#SP16">§16. Notifications</a></li><li><a href="1-pp.html#SP18">§18. Coloured terminal output</a></li><li><a href="1-pp.html#SP19">§19. Concurrency</a></li><li><a href="1-pp.html#SP21">§21. Mutexes</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-pp.html#SP3">§3. Mac OS X</a></li><li><a href="1-pp.html#SP4">§4. Generic Unix</a></li><li><a href="1-pp.html#SP5">§5. Linux</a></li><li><a href="1-pp.html#SP6">§6. Android</a></li><li><a href="1-pp.html#SP7">§7. Locale</a></li><li><a href="1-pp.html#SP8">§8. Environment variables</a></li><li><a href="1-pp.html#SP9">§9. Executable location</a></li><li><a href="1-pp.html#SP10">§10. Shell commands</a></li><li><a href="1-pp.html#SP11">§11. Snprintf</a></li><li><a href="1-pp.html#SP13">§13. Directory handling</a></li><li><a href="1-pp.html#SP14">§14. Timestamp and file size</a></li><li><a href="1-pp.html#SP15">§15. Sync</a></li><li><a href="1-pp.html#SP16">§16. Sleep</a></li><li><a href="1-pp.html#SP17">§17. Notifications</a></li><li><a href="1-pp.html#SP19">§19. Coloured terminal output</a></li><li><a href="1-pp.html#SP20">§20. Concurrency</a></li><li><a href="1-pp.html#SP22">§22. Mutexes</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>The C standard library leaves many questions unanswered about how to deal
|
||||
with the host operating system: for example, it knows very little about
|
||||
|
@ -245,12 +245,25 @@ string.
|
|||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. Shell commands. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP6" class="function-link"><span class="function-syntax">Platform::system</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cmd</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::system</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cmd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">system</span><span class="plain-syntax">(</span><span class="identifier-syntax">cmd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined and if PLATFORM_MACOS is undefined.</li><li>The function Platform::system is used in <a href="1-pp.html#SP11">§11</a>, <a href="1-pp.html#SP14">§14</a>, Windows Platform (<a href="1-wp.html#SP6">§6</a>), Shell (<a href="3-shl.html#SP5">§5</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b>In MacOS 10.5, a new implementation of the C standard library
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined and if PLATFORM_MACOS is undefined.</li><li>The function Platform::system is used in <a href="1-pp.html#SP12">§12</a>, <a href="1-pp.html#SP15">§15</a>, Windows Platform (<a href="1-wp.html#SP7">§7</a>), Shell (<a href="3-shl.html#SP5">§5</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Snprintf. </b>The C standard library function <span class="extract"><span class="extract-syntax">snprintf</span></span> is not as standard as one might
|
||||
like, and is oddly represented in some Cygwin libraries for Windows,
|
||||
sometimes being differently named.
|
||||
</p>
|
||||
|
||||
<p class="commentary">We would like to provide a wrapper function but this is troublesome with
|
||||
variadic arguments, so instead here is a macro for the function name.
|
||||
Happily, the Inform tools make very little use of this.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PLATFORM_SNPRINTF</span><span class="plain-syntax"> </span><span class="identifier-syntax">snprintf</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>In MacOS 10.5, a new implementation of the C standard library
|
||||
crippled performance of <span class="extract"><span class="extract-syntax">system()</span></span> by placing it behind a global mutex, so
|
||||
that it was impossible for two cores to be calling the function at the same
|
||||
time. The net effect of this is that the Inform test suite, executing in
|
||||
|
@ -277,7 +290,7 @@ memory space. Using <span class="extract"><span class="extract-syntax">posix_spa
|
|||
|
||||
<span class="reserved-syntax">extern</span><span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> **</span><span class="identifier-syntax">environ</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP6" class="function-link"><span class="function-syntax">Platform::system</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cmd</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::system</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cmd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">argv</span><span class="plain-syntax">[] = {</span><span class="string-syntax">"sh"</span><span class="plain-syntax">, </span><span class="string-syntax">"-c"</span><span class="plain-syntax">, (</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">cmd</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">};</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pid_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">pid</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">status</span><span class="plain-syntax"> = </span><span class="identifier-syntax">posix_spawn</span><span class="plain-syntax">(&</span><span class="identifier-syntax">pid</span><span class="plain-syntax">, </span><span class="string-syntax">"/bin/sh"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">, </span><span class="identifier-syntax">environ</span><span class="plain-syntax">);</span>
|
||||
|
@ -291,11 +304,11 @@ memory space. Using <span class="extract"><span class="extract-syntax">posix_spa
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_MACOS and PLATFORM_POSIX are defined.</li><li>The function Platform::system is used in <a href="1-pp.html#SP10">§10</a>, <a href="1-pp.html#SP14">§14</a>, Windows Platform (<a href="1-wp.html#SP6">§6</a>), Shell (<a href="3-shl.html#SP5">§5</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. Directory handling. </b></p>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_MACOS and PLATFORM_POSIX are defined.</li><li>The function Platform::system is used in <a href="1-pp.html#SP10">§10</a>, <a href="1-pp.html#SP15">§15</a>, Windows Platform (<a href="1-wp.html#SP7">§7</a>), Shell (<a href="3-shl.html#SP5">§5</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. Directory handling. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::mkdir</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::mkdir</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">errno</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mkdir</span><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_IRWXU</span><span class="plain-syntax"> | </span><span class="identifier-syntax">S_IRWXG</span><span class="plain-syntax"> | </span><span class="identifier-syntax">S_IROTH</span><span class="plain-syntax"> | </span><span class="identifier-syntax">S_IXOTH</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rv</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
|
@ -303,12 +316,12 @@ memory space. Using <span class="extract"><span class="extract-syntax">posix_spa
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::opendir</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::opendir</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DIR</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dirp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">opendir</span><span class="plain-syntax">(</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">dirp</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::readdir</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leafname</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::readdir</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leafname</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">path_to</span><span class="plain-syntax">[2*</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">+2];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">stat</span><span class="plain-syntax"> </span><span class="identifier-syntax">file_status</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax">;</span>
|
||||
|
@ -323,13 +336,13 @@ memory space. Using <span class="extract"><span class="extract-syntax">posix_spa
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::closedir</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::closedir</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DIR</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dirp</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">DIR</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">D</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">closedir</span><span class="plain-syntax">(</span><span class="identifier-syntax">dirp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::mkdir is used in Windows Platform (<a href="1-wp.html#SP7">§7</a>), Pathnames (<a href="3-pth.html#SP9">§9</a>).</li><li>The function Platform::opendir is used in Windows Platform (<a href="1-wp.html#SP7">§7</a>), Directories (<a href="3-drc.html#SP2">§2</a>).</li><li>The function Platform::readdir is used in Windows Platform (<a href="1-wp.html#SP7">§7</a>), Directories (<a href="3-drc.html#SP2">§2</a>).</li><li>The function Platform::closedir is used in Windows Platform (<a href="1-wp.html#SP7">§7</a>), Directories (<a href="3-drc.html#SP2">§2</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. Timestamp and file size. </b>There are implementations of the C standard library where <span class="extract"><span class="extract-syntax">time_t</span></span> has
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::mkdir is used in Windows Platform (<a href="1-wp.html#SP8">§8</a>), Pathnames (<a href="3-pth.html#SP9">§9</a>).</li><li>The function Platform::opendir is used in Windows Platform (<a href="1-wp.html#SP8">§8</a>), Directories (<a href="3-drc.html#SP2">§2</a>).</li><li>The function Platform::readdir is used in Windows Platform (<a href="1-wp.html#SP8">§8</a>), Directories (<a href="3-drc.html#SP2">§2</a>).</li><li>The function Platform::closedir is used in Windows Platform (<a href="1-wp.html#SP8">§8</a>), Directories (<a href="3-drc.html#SP2">§2</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. Timestamp and file size. </b>There are implementations of the C standard library where <span class="extract"><span class="extract-syntax">time_t</span></span> has
|
||||
super-weird behaviour, but on almost all POSIX systems, time 0 corresponds to
|
||||
midnight on 1 January 1970. All we really need is that the "never" value
|
||||
is one which is earlier than any possible timestamp on the files we'll
|
||||
|
@ -337,24 +350,24 @@ be dealing with.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::never_time</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><a href="1-wp.html#SP15" class="function-link"><span class="function-syntax">Platform::never_time</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">time_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::timestamp</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><a href="1-wp.html#SP15" class="function-link"><span class="function-syntax">Platform::timestamp</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">stat</span><span class="plain-syntax"> </span><span class="identifier-syntax">filestat</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stat</span><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">, &</span><span class="identifier-syntax">filestat</span><span class="plain-syntax">) != -1) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">filestat</span><span class="plain-syntax">.</span><span class="identifier-syntax">st_mtime</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::never_time</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-wp.html#SP15" class="function-link"><span class="function-syntax">Platform::never_time</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">off_t</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::size</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">off_t</span><span class="plain-syntax"> </span><a href="1-wp.html#SP15" class="function-link"><span class="function-syntax">Platform::size</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">stat</span><span class="plain-syntax"> </span><span class="identifier-syntax">filestat</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stat</span><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">, &</span><span class="identifier-syntax">filestat</span><span class="plain-syntax">) != -1) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">filestat</span><span class="plain-syntax">.</span><span class="identifier-syntax">st_size</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">off_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::never_time is used in Windows Platform (<a href="1-wp.html#SP14">§14</a>).</li><li>The function Platform::timestamp is used in Windows Platform (<a href="1-wp.html#SP14">§14</a>), Filenames (<a href="3-fln.html#SP12">§12</a>).</li><li>The function Platform::size is used in Windows Platform (<a href="1-wp.html#SP14">§14</a>), Filenames (<a href="3-fln.html#SP12">§12</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. Sync. </b>Both names here are of directories which do exist. The function makes
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::never_time is used in Windows Platform (<a href="1-wp.html#SP15">§15</a>).</li><li>The function Platform::timestamp is used in Windows Platform (<a href="1-wp.html#SP15">§15</a>), Filenames (<a href="3-fln.html#SP12">§12</a>).</li><li>The function Platform::size is used in Windows Platform (<a href="1-wp.html#SP15">§15</a>), Filenames (<a href="3-fln.html#SP12">§12</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. Sync. </b>Both names here are of directories which do exist. The function makes
|
||||
the <span class="extract"><span class="extract-syntax">dest</span></span> tree an exact copy of the <span class="extract"><span class="extract-syntax">source</span></span> tree (and therefore deletes
|
||||
anything different which was originally in <span class="extract"><span class="extract-syntax">dest</span></span>).
|
||||
</p>
|
||||
|
@ -363,13 +376,13 @@ anything different which was originally in <span class="extract"><span class="ex
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::rsync</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_source</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP9" class="function-link"><span class="function-syntax">Platform::rsync</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_source</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">[10*</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sprintf</span><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">, </span><span class="string-syntax">"rsync -a --delete "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-pp.html#SP14" class="function-link"><span class="function-syntax">Platform::quote_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax"> + </span><span class="identifier-syntax">strlen</span><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">), </span><span class="identifier-syntax">transcoded_source</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-pp.html#SP15" class="function-link"><span class="function-syntax">Platform::quote_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax"> + </span><span class="identifier-syntax">strlen</span><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">), </span><span class="identifier-syntax">transcoded_source</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sprintf</span><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax"> + </span><span class="identifier-syntax">strlen</span><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">), </span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-pp.html#SP14" class="function-link"><span class="function-syntax">Platform::quote_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax"> + </span><span class="identifier-syntax">strlen</span><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">), </span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wp.html#SP6" class="function-link"><span class="function-syntax">Platform::system</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-pp.html#SP15" class="function-link"><span class="function-syntax">Platform::quote_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax"> + </span><span class="identifier-syntax">strlen</span><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">), </span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::system</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rsync_command</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::quote_text</span><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">raw</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">terminate</span><span class="plain-syntax">) {</span>
|
||||
|
@ -385,16 +398,16 @@ anything different which was originally in <span class="extract"><span class="ex
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">quoted</span><span class="plain-syntax">[</span><span class="identifier-syntax">qp</span><span class="plain-syntax">++] = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::rsync is used in Windows Platform (<a href="1-wp.html#SP8">§8</a>), Pathnames (<a href="3-pth.html#SP10">§10</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. Sleep. </b></p>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::rsync is used in Windows Platform (<a href="1-wp.html#SP9">§9</a>), Pathnames (<a href="3-pth.html#SP10">§10</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. Sleep. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP9" class="function-link"><span class="function-syntax">Platform::sleep</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">seconds</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP10" class="function-link"><span class="function-syntax">Platform::sleep</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">seconds</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sleep</span><span class="plain-syntax">((</span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">seconds</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::sleep is used in Windows Platform (<a href="1-wp.html#SP9">§9</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. Notifications. </b>The "submarine" sound is a gloomy thunk; the "bell" is the three-tone rising
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::sleep is used in Windows Platform (<a href="1-wp.html#SP10">§10</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. Notifications. </b>The "submarine" sound is a gloomy thunk; the "bell" is the three-tone rising
|
||||
alert noise which iPhones make when they receive texts, but which hackers of a
|
||||
certain age will remember as the "I have ripped your music CD now" alert from
|
||||
SoundJam, the program which Apple bought and rebranded as iTunes. Apple now
|
||||
|
@ -407,7 +420,7 @@ actually running a one-line AppleScript here.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP10" class="function-link"><span class="function-syntax">Platform::notification</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">happy</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP11" class="function-link"><span class="function-syntax">Platform::notification</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">happy</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sound_name</span><span class="plain-syntax"> = </span><span class="string-syntax">"Bell.aiff"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">happy</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">sound_name</span><span class="plain-syntax"> = </span><span class="string-syntax">"Submarine.aiff"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">)</span>
|
||||
|
@ -417,56 +430,56 @@ actually running a one-line AppleScript here.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_MACOS and PLATFORM_POSIX are defined.</li><li>The function Platform::notification is used in <a href="1-pp.html#SP17">§17</a>, Windows Platform (<a href="1-wp.html#SP10">§10</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b></p>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_MACOS and PLATFORM_POSIX are defined.</li><li>The function Platform::notification is used in <a href="1-pp.html#SP18">§18</a>, Windows Platform (<a href="1-wp.html#SP11">§11</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP10" class="function-link"><span class="function-syntax">Platform::notification</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">happy</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP11" class="function-link"><span class="function-syntax">Platform::notification</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">happy</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined and if PLATFORM_MACOS is undefined.</li><li>The function Platform::notification is used in <a href="1-pp.html#SP16">§16</a>, Windows Platform (<a href="1-wp.html#SP10">§10</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. Coloured terminal output. </b>The idea of this function is that if anything needs to be done to enable the
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined and if PLATFORM_MACOS is undefined.</li><li>The function Platform::notification is used in <a href="1-pp.html#SP17">§17</a>, Windows Platform (<a href="1-wp.html#SP11">§11</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP19"></a><b>§19. Coloured terminal output. </b>The idea of this function is that if anything needs to be done to enable the
|
||||
output of ANSI-standard coloured terminal output, then this function has the
|
||||
chance to do it. On POSIX platforms, so far as we know, nothing need be done.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP11" class="function-link"><span class="function-syntax">Platform::enable_coloured_terminal_output</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP12" class="function-link"><span class="function-syntax">Platform::enable_coloured_terminal_output</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::enable_coloured_terminal_output is used in Foundation Module (<a href="1-fm.html#SP8">§8</a>), Windows Platform (<a href="1-wp.html#SP11">§11</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP19"></a><b>§19. Concurrency. </b></p>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::enable_coloured_terminal_output is used in Foundation Module (<a href="1-fm.html#SP8">§8</a>), Windows Platform (<a href="1-wp.html#SP12">§12</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP20"></a><b>§20. Concurrency. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="identifier-syntax">pthread_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="identifier-syntax">pthread_attr_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP20"></a><b>§20. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP13" class="function-link"><span class="function-syntax">Platform::create_thread</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::create_thread</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pa</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *(*</span><span class="identifier-syntax">fn</span><span class="plain-syntax">)(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *), </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">pthread_create</span><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pa</span><span class="plain-syntax">, </span><span class="identifier-syntax">fn</span><span class="plain-syntax">, </span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP13" class="function-link"><span class="function-syntax">Platform::join_thread</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax">** </span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::join_thread</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax">** </span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">pthread_join</span><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">rv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP13" class="function-link"><span class="function-syntax">Platform::init_thread</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pa</span><span class="plain-syntax">, </span><span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::init_thread</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pa</span><span class="plain-syntax">, </span><span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pthread_attr_init</span><span class="plain-syntax">(</span><span class="identifier-syntax">pa</span><span class="plain-syntax">) != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"thread initialisation failed"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pthread_attr_setstacksize</span><span class="plain-syntax">(</span><span class="identifier-syntax">pa</span><span class="plain-syntax">, </span><span class="identifier-syntax">size</span><span class="plain-syntax">) != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"thread stack sizing failed"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><a href="1-wp.html#SP13" class="function-link"><span class="function-syntax">Platform::get_thread_stack_size</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pa</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::get_thread_stack_size</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pa</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">mystacksize</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pthread_attr_getstacksize</span><span class="plain-syntax">(</span><span class="identifier-syntax">pa</span><span class="plain-syntax">, &</span><span class="identifier-syntax">mystacksize</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">mystacksize</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::create_thread is used in Windows Platform (<a href="1-wp.html#SP13">§13</a>).</li><li>The function Platform::join_thread is used in Windows Platform (<a href="1-wp.html#SP13">§13</a>).</li><li>The function Platform::init_thread is used in Windows Platform (<a href="1-wp.html#SP13">§13</a>).</li><li>The function Platform::get_thread_stack_size is used in Windows Platform (<a href="1-wp.html#SP13">§13</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. Mutexes. </b></p>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_POSIX is defined.</li><li>The function Platform::create_thread is used in Windows Platform (<a href="1-wp.html#SP14">§14</a>).</li><li>The function Platform::join_thread is used in Windows Platform (<a href="1-wp.html#SP14">§14</a>).</li><li>The function Platform::init_thread is used in Windows Platform (<a href="1-wp.html#SP14">§14</a>).</li><li>The function Platform::get_thread_stack_size is used in Windows Platform (<a href="1-wp.html#SP14">§14</a>).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP22"></a><b>§22. Mutexes. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">CREATE_MUTEX</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">static</span><span class="plain-syntax"> </span><span class="identifier-syntax">pthread_mutex_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PTHREAD_MUTEX_INITIALIZER</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -50,7 +50,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>Windows Platform</b></li></ul></div>
|
||||
<p class="purpose">A version of our operating system interface suitable for Microsoft Windows.</p>
|
||||
|
||||
<ul class="toc"><li><a href="1-wp.html#SP2">§2. Microsoft Windows</a></li><li><a href="1-wp.html#SP4">§4. Environment variables</a></li><li><a href="1-wp.html#SP5">§5. Executable location</a></li><li><a href="1-wp.html#SP6">§6. Shell commands</a></li><li><a href="1-wp.html#SP7">§7. Directory handling</a></li><li><a href="1-wp.html#SP8">§8. Sync</a></li><li><a href="1-wp.html#SP9">§9. Sleep</a></li><li><a href="1-wp.html#SP10">§10. Notifications</a></li><li><a href="1-wp.html#SP11">§11. Coloured terminal output</a></li><li><a href="1-wp.html#SP12">§12. Concurrency</a></li><li><a href="1-wp.html#SP14">§14. Timestamp and file size</a></li><li><a href="1-wp.html#SP15">§15. Mutexes</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-wp.html#SP2">§2. Microsoft Windows</a></li><li><a href="1-wp.html#SP4">§4. Environment variables</a></li><li><a href="1-wp.html#SP5">§5. Executable location</a></li><li><a href="1-wp.html#SP6">§6. Snprintf</a></li><li><a href="1-wp.html#SP7">§7. Shell commands</a></li><li><a href="1-wp.html#SP8">§8. Directory handling</a></li><li><a href="1-wp.html#SP9">§9. Sync</a></li><li><a href="1-wp.html#SP10">§10. Sleep</a></li><li><a href="1-wp.html#SP11">§11. Notifications</a></li><li><a href="1-wp.html#SP12">§12. Coloured terminal output</a></li><li><a href="1-wp.html#SP13">§13. Concurrency</a></li><li><a href="1-wp.html#SP15">§15. Timestamp and file size</a></li><li><a href="1-wp.html#SP16">§16. Mutexes</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>This Foundation module comes with two variant versions of the <span class="extract"><span class="extract-syntax">Platform::</span></span>
|
||||
section of code. The one you're reading compiles on Windows, and the other
|
||||
|
@ -141,10 +141,23 @@ just that installation and use of Foundation-built tools is less convenient.)
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Shell commands. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Snprintf. </b>The C standard library function <span class="extract"><span class="extract-syntax">snprintf</span></span> is not as standard as one might
|
||||
like, and is oddly represented in some Cygwin libraries for Windows,
|
||||
sometimes being differently named.
|
||||
</p>
|
||||
|
||||
<p class="commentary">We would like to provide a wrapper function but this is troublesome with
|
||||
variadic arguments, so instead here is a macro for the function name.
|
||||
Happily, the Inform tools make very little use of this.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PLATFORM_SNPRINTF</span><span class="plain-syntax"> </span><span class="identifier-syntax">snprintf</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. Shell commands. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::system</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Platform::system</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP10">§10</a>, <a href="1-pp.html#SP11">§11</a>, <a href="1-pp.html#SP14">§14</a><br/>Shell - <a href="3-shl.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cmd</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::system</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Platform::system</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP10">§10</a>, <a href="1-pp.html#SP12">§12</a>, <a href="1-pp.html#SP15">§15</a><br/>Shell - <a href="3-shl.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cmd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">cmd_line</span><span class="plain-syntax">[10*</span><span class="identifier-syntax">MAX_PATH</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sprintf</span><span class="plain-syntax">(</span><span class="identifier-syntax">cmd_line</span><span class="plain-syntax">, </span><span class="string-syntax">"sh -c %s"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cmd</span><span class="plain-syntax">);</span>
|
||||
|
||||
|
@ -174,10 +187,10 @@ just that installation and use of Foundation-built tools is less convenient.)
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. Directory handling. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Directory handling. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::mkdir</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Platform::mkdir</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP12">§12</a><br/>Pathnames - <a href="3-pth.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::mkdir</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Platform::mkdir</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP13">§13</a><br/>Pathnames - <a href="3-pth.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">errno</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mkdir</span><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rv</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
|
@ -185,12 +198,12 @@ just that installation and use of Foundation-built tools is less convenient.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="function-syntax">Platform::opendir</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Platform::opendir</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP12">§12</a><br/>Directories - <a href="3-drc.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="function-syntax">Platform::opendir</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Platform::opendir</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP13">§13</a><br/>Directories - <a href="3-drc.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DIR</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dirp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">opendir</span><span class="plain-syntax">(</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">dirp</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::readdir</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Platform::readdir</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP12">§12</a><br/>Directories - <a href="3-drc.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::readdir</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Platform::readdir</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP13">§13</a><br/>Directories - <a href="3-drc.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dir_name</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">leafname</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">path_to</span><span class="plain-syntax">[2*</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">+2];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">_stat</span><span class="plain-syntax"> </span><span class="identifier-syntax">file_status</span><span class="plain-syntax">;</span>
|
||||
|
@ -207,48 +220,48 @@ just that installation and use of Foundation-built tools is less convenient.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::closedir</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Platform::closedir</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP12">§12</a><br/>Directories - <a href="3-drc.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::closedir</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Platform::closedir</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP13">§13</a><br/>Directories - <a href="3-drc.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DIR</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dirp</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">DIR</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">D</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">closedir</span><span class="plain-syntax">(</span><span class="identifier-syntax">dirp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Sync. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. Sync. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::rsync</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Platform::rsync</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP14">§14</a><br/>Pathnames - <a href="3-pth.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_source</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::rsync</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Platform::rsync</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP15">§15</a><br/>Pathnames - <a href="3-pth.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_source</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">printf</span><span class="plain-syntax">(</span><span class="string-syntax">"Platform::rsync() is not yet implemented!\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. Sleep. </b>The Windows <span class="extract"><span class="extract-syntax">Sleep</span></span> call measures time in milliseconds, whereas
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. Sleep. </b>The Windows <span class="extract"><span class="extract-syntax">Sleep</span></span> call measures time in milliseconds, whereas
|
||||
POSIX <span class="extract"><span class="extract-syntax">sleep</span></span> is for seconds.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::sleep</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Platform::sleep</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP15">§15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">seconds</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::sleep</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Platform::sleep</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">seconds</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sleep</span><span class="plain-syntax">((</span><span class="identifier-syntax">DWORD</span><span class="plain-syntax">)(1000*</span><span class="identifier-syntax">seconds</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. Notifications. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Notifications. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::notification</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Platform::notification</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP16">§16</a>, <a href="1-pp.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">happy</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::notification</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Platform::notification</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP17">§17</a>, <a href="1-pp.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">happy</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Coloured terminal output. </b>The idea of this function is that if anything needs to be done to enable the
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. Coloured terminal output. </b>The idea of this function is that if anything needs to be done to enable the
|
||||
output of ANSI-standard coloured terminal output, then this function has the
|
||||
chance to do it.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::enable_coloured_terminal_output</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Platform::enable_coloured_terminal_output</span></span>:<br/>Foundation Module - <a href="1-fm.html#SP8">§8</a><br/>POSIX Platforms - <a href="1-pp.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::enable_coloured_terminal_output</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Platform::enable_coloured_terminal_output</span></span>:<br/>Foundation Module - <a href="1-fm.html#SP8">§8</a><br/>POSIX Platforms - <a href="1-pp.html#SP19">§19</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. Concurrency. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. Concurrency. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax"> </span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax">;</span>
|
||||
|
@ -257,7 +270,7 @@ chance to do it.
|
|||
<span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_Thread_Start</span><span class="plain-syntax"> { </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *(*</span><span class="identifier-syntax">fn</span><span class="plain-syntax">)(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *); </span><span class="reserved-syntax">void</span><span class="plain-syntax">* </span><span class="identifier-syntax">arg</span><span class="plain-syntax">; };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">DWORD</span><span class="plain-syntax"> </span><span class="identifier-syntax">WINAPI</span><span class="plain-syntax"> </span><span class="identifier-syntax">Platform::Win32_Thread_Func</span><span class="plain-syntax">(</span><span class="identifier-syntax">LPVOID</span><span class="plain-syntax"> </span><span class="identifier-syntax">param</span><span class="plain-syntax">) {</span>
|
||||
|
@ -267,7 +280,7 @@ chance to do it.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::create_thread</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Platform::create_thread</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP20">§20</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pa</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::create_thread</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Platform::create_thread</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP21">§21</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pa</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *(*</span><span class="identifier-syntax">fn</span><span class="plain-syntax">)(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *), </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_Thread_Start</span><span class="plain-syntax">* </span><span class="identifier-syntax">start</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_Thread_Start</span><span class="plain-syntax">*) </span><span class="identifier-syntax">malloc</span><span class="plain-syntax">(</span><span class="reserved-syntax">sizeof</span><span class="plain-syntax"> (</span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_Thread_Start</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">start</span><span class="plain-syntax">-></span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">fn</span><span class="plain-syntax">;</span>
|
||||
|
@ -282,19 +295,19 @@ chance to do it.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::join_thread</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Platform::join_thread</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP20">§20</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax">** </span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::join_thread</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Platform::join_thread</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP21">§21</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread</span><span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax">** </span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WaitForSingleObject</span><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFINITE</span><span class="plain-syntax">) == </span><span class="identifier-syntax">WAIT_OBJECT_0</span><span class="plain-syntax">) ? </span><span class="constant-syntax">0</span><span class="plain-syntax"> : </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::init_thread</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Platform::init_thread</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP20">§20</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax">* </span><span class="identifier-syntax">pa</span><span class="plain-syntax">, </span><span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::init_thread</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Platform::init_thread</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP21">§21</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax">* </span><span class="identifier-syntax">pa</span><span class="plain-syntax">, </span><span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::get_thread_stack_size</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Platform::get_thread_stack_size</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP20">§20</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax">* </span><span class="identifier-syntax">pa</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">size_t</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::get_thread_stack_size</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Platform::get_thread_stack_size</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP21">§21</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">foundation_thread_attributes</span><span class="plain-syntax">* </span><span class="identifier-syntax">pa</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. Timestamp and file size. </b>There are implementations of the C standard library where <span class="extract"><span class="extract-syntax">time_t</span></span> has
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. Timestamp and file size. </b>There are implementations of the C standard library where <span class="extract"><span class="extract-syntax">time_t</span></span> has
|
||||
super-weird behaviour, but on almost all POSIX systems, time 0 corresponds to
|
||||
midnight on 1 January 1970. All we really need is that the "never" value
|
||||
is one which is earlier than any possible timestamp on the files we'll
|
||||
|
@ -302,24 +315,24 @@ be dealing with.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::never_time</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Platform::never_time</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP13">§13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::never_time</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Platform::never_time</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">time_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::timestamp</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Platform::timestamp</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP13">§13</a><br/>Filenames - <a href="3-fln.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::timestamp</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Platform::timestamp</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP14">§14</a><br/>Filenames - <a href="3-fln.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">stat</span><span class="plain-syntax"> </span><span class="identifier-syntax">filestat</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stat</span><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">, &</span><span class="identifier-syntax">filestat</span><span class="plain-syntax">) != -1) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">filestat</span><span class="plain-syntax">.</span><span class="identifier-syntax">st_mtime</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::never_time</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="1-wp.html#SP15" class="function-link"><span class="function-syntax">Platform::never_time</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">off_t</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::size</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Platform::size</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP13">§13</a><br/>Filenames - <a href="3-fln.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">off_t</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::size</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Platform::size</span></span>:<br/>POSIX Platforms - <a href="1-pp.html#SP14">§14</a><br/>Filenames - <a href="3-fln.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">stat</span><span class="plain-syntax"> </span><span class="identifier-syntax">filestat</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stat</span><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_filename</span><span class="plain-syntax">, &</span><span class="identifier-syntax">filestat</span><span class="plain-syntax">) != -1) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">filestat</span><span class="plain-syntax">.</span><span class="identifier-syntax">st_size</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">off_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. Mutexes. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. Mutexes. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">CREATE_MUTEX</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">static</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_Mutex</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax"> = { </span><span class="identifier-syntax">INIT_ONCE_STATIC_INIT</span><span class="plain-syntax">, { </span><span class="constant-syntax">0</span><span class="plain-syntax"> }};</span>
|
||||
|
|
|
@ -144,7 +144,8 @@ because the loggers don't use format strings.)
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Writers::register_writer_p</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Writers::register_writer_p</span></span>:<br/><a href="2-wal.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">set</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">esc</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">escapes_registered</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="2-wal.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Initialise the table of escapes</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">esc</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">esc</span><span class="plain-syntax"> >= </span><span class="constant-syntax">128</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> ((</span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::isalpha</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">esc</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) && (</span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::isdigit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">esc</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> ((</span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::isalpha</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">esc</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::isdigit</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">esc</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"nonalphabetic escape"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">escapes_category</span><span class="plain-syntax">[</span><span class="identifier-syntax">set</span><span class="plain-syntax">][</span><span class="identifier-syntax">esc</span><span class="plain-syntax">] != </span><span class="constant-syntax">VACANT_ECAT</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="constant-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"Clashing escape is %s%c\n"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">set</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)?</span><span class="string-syntax">"%"</span><span class="plain-syntax">:</span><span class="string-syntax">"$"</span><span class="plain-syntax">, </span><span class="identifier-syntax">esc</span><span class="plain-syntax">);</span>
|
||||
|
@ -311,14 +312,14 @@ file encodings, but expanding <span class="extract"><span class="extract-syntax"
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'c'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'d'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'i'</span><span class="plain-syntax">: </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'x'</span><span class="plain-syntax">: { </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">char</span></span><span class="comment-syntax"> is promoted to </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax"> in variable arguments</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ival</span><span class="plain-syntax"> = </span><span class="identifier-syntax">va_arg</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">temp</span><span class="plain-syntax">[256];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">snprintf</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="constant-syntax">255</span><span class="plain-syntax">, </span><span class="identifier-syntax">format_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">ival</span><span class="plain-syntax">) >= </span><span class="constant-syntax">255</span><span class="plain-syntax">) </span><span class="identifier-syntax">strcpy</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="string-syntax">"?"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="constant-syntax">PLATFORM_SNPRINTF</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="constant-syntax">255</span><span class="plain-syntax">, </span><span class="identifier-syntax">format_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">ival</span><span class="plain-syntax">) >= </span><span class="constant-syntax">255</span><span class="plain-syntax">) </span><span class="identifier-syntax">strcpy</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="string-syntax">"?"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">temp</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) </span><a href="2-str.html#SP35" class="function-link"><span class="function-syntax">Streams::putc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">], </span><span class="identifier-syntax">stream</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'g'</span><span class="plain-syntax">: {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">double</span><span class="plain-syntax"> </span><span class="identifier-syntax">dval</span><span class="plain-syntax"> = </span><span class="identifier-syntax">va_arg</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">double</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">temp</span><span class="plain-syntax">[256];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">snprintf</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="constant-syntax">255</span><span class="plain-syntax">, </span><span class="identifier-syntax">format_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">dval</span><span class="plain-syntax">) >= </span><span class="constant-syntax">255</span><span class="plain-syntax">) </span><span class="identifier-syntax">strcpy</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="string-syntax">"?"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="constant-syntax">PLATFORM_SNPRINTF</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="constant-syntax">255</span><span class="plain-syntax">, </span><span class="identifier-syntax">format_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">dval</span><span class="plain-syntax">) >= </span><span class="constant-syntax">255</span><span class="plain-syntax">) </span><span class="identifier-syntax">strcpy</span><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">, </span><span class="string-syntax">"?"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">temp</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) </span><a href="2-str.html#SP35" class="function-link"><span class="function-syntax">Streams::putc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">temp</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">], </span><span class="identifier-syntax">stream</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -65,7 +65,7 @@ transcoded the other way.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="string-syntax">"%p"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP6" class="function-link"><span class="function-syntax">Str::copy_to_locale_string</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_name_written_out</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">*</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_handle</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::opendir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_name_written_out</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_handle</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::opendir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_name_written_out</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="identifier-syntax">directory_handle</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -74,7 +74,7 @@ transcoded the other way.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">leafname_Cs</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::readdir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_handle</span><span class="plain-syntax">, </span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_name_written_out</span><span class="plain-syntax">, </span><span class="identifier-syntax">leafname_Cs</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::readdir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_handle</span><span class="plain-syntax">, </span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_name_written_out</span><span class="plain-syntax">, </span><span class="identifier-syntax">leafname_Cs</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">leafname_Cs</span><span class="plain-syntax">[0] != </span><span class="character-syntax">'.'</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">leafname</span><span class="plain-syntax">);</span>
|
||||
|
@ -83,7 +83,7 @@ transcoded the other way.
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Directories::close</span><span class="plain-syntax">(</span><span class="reserved-syntax">scan_directory</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::closedir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_handle</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::closedir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">directory_handle</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
|
|
|
@ -320,7 +320,7 @@ when printed out.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">, </span><span class="string-syntax">"%f"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP6" class="function-link"><span class="function-syntax">Str::copy_to_locale_string</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">, </span><span class="identifier-syntax">FN</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">*</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::timestamp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP15" class="function-link"><span class="function-syntax">Platform::timestamp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -330,7 +330,7 @@ when printed out.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">, </span><span class="string-syntax">"%f"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP6" class="function-link"><span class="function-syntax">Str::copy_to_locale_string</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">, </span><span class="identifier-syntax">FN</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">*</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><a href="1-wp.html#SP14" class="function-link"><span class="function-syntax">Platform::size</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><a href="1-wp.html#SP15" class="function-link"><span class="function-syntax">Platform::size</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">FN</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -312,7 +312,7 @@ on the file system with that path.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="string-syntax">"%p"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP6" class="function-link"><span class="function-syntax">Str::copy_to_locale_string</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">*</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-></span><span class="element-syntax">known_to_exist</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::mkdir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-></span><span class="element-syntax">known_to_exist</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::mkdir</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_pathname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-></span><span class="element-syntax">known_to_exist</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -333,7 +333,7 @@ anything different which was originally in <span class="extract"><span class="ex
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn2</span><span class="plain-syntax">, </span><span class="string-syntax">"%p"</span><span class="plain-syntax">, </span><span class="identifier-syntax">dest</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP6" class="function-link"><span class="function-syntax">Str::copy_to_locale_string</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn2</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">*</span><span class="constant-syntax">MAX_FILENAME_LENGTH</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn2</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wp.html#SP8" class="function-link"><span class="function-syntax">Platform::rsync</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_source</span><span class="plain-syntax">, </span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="1-wp.html#SP9" class="function-link"><span class="function-syntax">Platform::rsync</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transcoded_source</span><span class="plain-syntax">, </span><span class="identifier-syntax">transcoded_dest</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
|
|
|
@ -160,7 +160,7 @@ all transcoded to UTF-8 in the most unlucky way imaginable.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">shell_verbosity</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Shell::run</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Shell::run</span></span>:<br/><a href="3-shl.html#SP2">§2</a>, <a href="3-shl.html#SP3">§3</a><br/>POSIX Platforms - <a href="1-pp.html#SP16">§16</a><br/>Epub Ebooks - <a href="5-ee.html#SP7_4_1">§7.4.1</a>, <a href="5-ee.html#SP7_4_2">§7.4.2</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Shell::run</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Shell::run</span></span>:<br/><a href="3-shl.html#SP2">§2</a>, <a href="3-shl.html#SP3">§3</a><br/>POSIX Platforms - <a href="1-pp.html#SP17">§17</a><br/>Epub Ebooks - <a href="5-ee.html#SP7_4_1">§7.4.1</a>, <a href="5-ee.html#SP7_4_2">§7.4.2</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">shell_verbosity</span><span class="plain-syntax">) </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"shell: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">SHELL_USAGE</span><span class="plain-syntax">, </span><span class="string-syntax">"shell: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> </span><span class="identifier-syntax">spool</span><span class="plain-syntax">[</span><span class="constant-syntax">SPOOL_LENGTH</span><span class="plain-syntax">];</span>
|
||||
|
@ -169,7 +169,7 @@ all transcoded to UTF-8 in the most unlucky way imaginable.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"debugger mode suppressing shell command: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP6" class="function-link"><span class="function-syntax">Platform::system</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spool</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><a href="1-wp.html#SP7" class="function-link"><span class="function-syntax">Platform::system</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spool</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rv</span><span class="plain-syntax"> == -1) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="constant-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"shell: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"OS shell error"</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -55,16 +55,16 @@ function togglePopup(material_id) {
|
|||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Character classes. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::tolower</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Characters::tolower</span></span>:<br/>Filenames - <a href="3-fln.html#SP9">§9</a><br/>String Manipulation - <a href="4-sm.html#SP26">§26</a><br/>Tries and Avinues - <a href="4-taa.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::tolower</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Characters::tolower</span></span>:<br/>Filenames - <a href="3-fln.html#SP9">§9</a><br/>String Manipulation - <a href="4-sm.html#SP26">§26</a><br/>Tries and Avinues - <a href="4-taa.html#SP2">§2</a><br/>Web Structure - <a href="8-ws.html#SP5_4_1_1">§5.4.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">tolower</span><span class="plain-syntax">((</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::toupper</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::toupper</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Characters::toupper</span></span>:<br/>Bibliographic Data for Webs - <a href="8-bdfw.html#SP7_2">§7.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">toupper</span><span class="plain-syntax">((</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::isalpha</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Characters::isalpha</span></span>:<br/>Writers and Loggers - <a href="2-wal.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::isalpha</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Characters::isalpha</span></span>:<br/>Writers and Loggers - <a href="2-wal.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">isalpha</span><span class="plain-syntax">((</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::isdigit</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Characters::isdigit</span></span>:<br/>Writers and Loggers - <a href="2-wal.html#SP5">§5</a><br/>Filenames - <a href="3-fln.html#SP9">§9</a><br/>Version Numbers - <a href="7-vn.html#SP7">§7</a>, <a href="7-vn.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::isdigit</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Characters::isdigit</span></span>:<br/>Writers and Loggers - <a href="2-wal.html#SP5">§5</a><br/>Filenames - <a href="3-fln.html#SP9">§9</a><br/>Version Numbers - <a href="7-vn.html#SP7">§7</a>, <a href="7-vn.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">isdigit</span><span class="plain-syntax">((</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::isupper</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
|
@ -85,11 +85,11 @@ function togglePopup(material_id) {
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_space_or_tab</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Characters::is_space_or_tab</span></span>:<br/>Debugging Log - <a href="2-dl.html#SP4_2">§4.2</a><br/>String Manipulation - <a href="4-sm.html#SP16">§16</a>, <a href="4-sm.html#SP23">§23</a>, <a href="4-sm.html#SP24">§24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_space_or_tab</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Characters::is_space_or_tab</span></span>:<br/>Debugging Log - <a href="2-dl.html#SP4_2">§4.2</a><br/>String Manipulation - <a href="4-sm.html#SP16">§16</a>, <a href="4-sm.html#SP23">§23</a>, <a href="4-sm.html#SP24">§24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_whitespace</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Characters::is_whitespace</span></span>:<br/>Pattern Matching - <a href="4-pm.html#SP13">§13</a><br/>Web Structure - <a href="8-ws.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_whitespace</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Characters::is_whitespace</span></span>:<br/>Pattern Matching - <a href="4-pm.html#SP13">§13</a><br/>Web Structure - <a href="8-ws.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -100,7 +100,7 @@ iFiction records.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_babel_whitespace</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Characters::is_babel_whitespace</span></span>:<br/>String Manipulation - <a href="4-sm.html#SP24">§24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::is_babel_whitespace</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Characters::is_babel_whitespace</span></span>:<br/>String Manipulation - <a href="4-sm.html#SP24">§24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">' '</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\t'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0a'</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\x0d'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">NEWLINE_IN_STRING</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -111,7 +111,7 @@ sufficient correctly to handle all characters in the ZSCII set.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::combine_accent</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Characters::combine_accent</span></span>:<br/>Streams - <a href="2-str.html#SP35">§35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">accent</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">letter</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::combine_accent</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Characters::combine_accent</span></span>:<br/>Streams - <a href="2-str.html#SP35">§35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">accent</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">letter</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">accent</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0x0300</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="comment-syntax"> Unicode combining grave</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">letter</span><span class="plain-syntax">) {</span>
|
||||
|
@ -175,7 +175,7 @@ the more obvious accents from it.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::remove_accent</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Characters::remove_accent</span></span>:<br/><a href="4-chr.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Characters::remove_accent</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Characters::remove_accent</span></span>:<br/><a href="4-chr.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">charcode</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC0</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC1</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC2</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC3</span><span class="identifier-syntax">:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC4</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0xC5</span><span class="identifier-syntax">:</span><span class="plain-syntax"> </span><span class="identifier-syntax">charcode</span><span class="plain-syntax"> = </span><span class="character-syntax">'A'</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -145,17 +145,17 @@ a linked list of such nodes).
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">start</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax"> != </span><span class="identifier-syntax">endpoint</span><span class="plain-syntax">+</span><span class="identifier-syntax">delta</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax"> += </span><span class="identifier-syntax">delta</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_TRIE_GROUP_SIZE</span><span class="plain-syntax">+1];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> size of group</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">i</span><span class="plain-syntax"><0)?0:(</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">)); </span><span class="comment-syntax"> i.e., zero at the two ends of the text</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">i</span><span class="plain-syntax"><0)?0:(</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">)); </span><span class="comment-syntax"> i.e., zero at the two ends of the text</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0x20</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> <= </span><span class="constant-syntax">0x7f</span><span class="plain-syntax">)) </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::tolower</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">); </span><span class="comment-syntax"> normalise it within ASCII</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">0x20</span><span class="plain-syntax">) { </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">endpoint</span><span class="plain-syntax"> - </span><span class="identifier-syntax">delta</span><span class="plain-syntax">; } </span><span class="comment-syntax"> force any space to be equivalent to the final 0</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">add_outcome</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pairc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">pairc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'<'</span><span class="plain-syntax">) </span><span class="identifier-syntax">pairc</span><span class="plain-syntax"> = </span><span class="character-syntax">'>'</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'>'</span><span class="plain-syntax">) </span><span class="identifier-syntax">pairc</span><span class="plain-syntax"> = </span><span class="character-syntax">'<'</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pairc</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">j</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">+</span><span class="identifier-syntax">delta</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax"> != </span><span class="identifier-syntax">endpoint</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax"> += </span><span class="identifier-syntax">delta</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">j</span><span class="plain-syntax"><0)?0:(</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">j</span><span class="plain-syntax"><0)?0:(</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pairc</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">g</span><span class="plain-syntax"> > </span><span class="constant-syntax">MAX_TRIE_GROUP_SIZE</span><span class="plain-syntax">) { </span><span class="identifier-syntax">g</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax">[</span><span class="identifier-syntax">g</span><span class="plain-syntax">++] = </span><span class="identifier-syntax">ch</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -210,7 +210,7 @@ want to typeset the title in full caps to do so.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">recapped</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP17" class="function-link"><span class="function-syntax">Str::copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">recapped</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">recapped</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">toupper</span><span class="plain-syntax">(</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><a href="4-sm.html#SP14" class="function-link"><span class="function-syntax">Str::put</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::toupper</span></a><span class="plain-syntax">(</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><a href="8-bdfw.html#SP7" class="function-link"><span class="function-syntax">Bibliographic::set_datum</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wm</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Capitalized Title"</span><span class="plain-syntax">, </span><span class="identifier-syntax">recapped</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">recapped</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
|
|
|
@ -262,7 +262,7 @@ would be "elctrcty", since we don't count "y" as a vowel here.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">letters_from_current_word</span><span class="plain-syntax"> < </span><span class="identifier-syntax">letters_from_each_word</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">sn</span><span class="plain-syntax">) != </span><span class="character-syntax">'-'</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tolower</span><span class="plain-syntax">(</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">sn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><a href="4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::tolower</span></a><span class="plain-syntax">(</span><a href="4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">sn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">letters_from_current_word</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">l</span><span class="plain-syntax"> != </span><span class="character-syntax">'a'</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> != </span><span class="character-syntax">'e'</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> != </span><span class="character-syntax">'i'</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> != </span><span class="character-syntax">'o'</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">l</span><span class="plain-syntax"> != </span><span class="character-syntax">'u'</span><span class="plain-syntax">))) {</span>
|
||||
|
|
Binary file not shown.
|
@ -175,6 +175,17 @@ int Platform::system(const char *cmd) {
|
|||
return system(cmd);
|
||||
}
|
||||
|
||||
@h Snprintf.
|
||||
The C standard library function |snprintf| is not as standard as one might
|
||||
like, and is oddly represented in some Cygwin libraries for Windows,
|
||||
sometimes being differently named.
|
||||
|
||||
We would like to provide a wrapper function but this is troublesome with
|
||||
variadic arguments, so instead here is a macro for the function name.
|
||||
Happily, the Inform tools make very little use of this.
|
||||
|
||||
@d PLATFORM_SNPRINTF snprintf
|
||||
|
||||
@ ^"ifdef-PLATFORM_MACOS"
|
||||
In MacOS 10.5, a new implementation of the C standard library
|
||||
crippled performance of |system()| by placing it behind a global mutex, so
|
||||
|
|
|
@ -82,6 +82,17 @@ void Platform::where_am_i(wchar_t *p, size_t length) {
|
|||
if ((result == 0) || (result == length)) p[0] = 0;
|
||||
}
|
||||
|
||||
@h Snprintf.
|
||||
The C standard library function |snprintf| is not as standard as one might
|
||||
like, and is oddly represented in some Cygwin libraries for Windows,
|
||||
sometimes being differently named.
|
||||
|
||||
We would like to provide a wrapper function but this is troublesome with
|
||||
variadic arguments, so instead here is a macro for the function name.
|
||||
Happily, the Inform tools make very little use of this.
|
||||
|
||||
@d PLATFORM_SNPRINTF snprintf
|
||||
|
||||
@h Shell commands.
|
||||
|
||||
= (very early code)
|
||||
|
|
|
@ -87,7 +87,8 @@ void Writers::register_logger_I(int esc, void (*f)(text_stream *, int)) {
|
|||
void Writers::register_writer_p(int set, int esc, void *f, int cat) {
|
||||
if (escapes_registered == FALSE) @<Initialise the table of escapes@>;
|
||||
if ((esc < 0) || (esc >= 128) ||
|
||||
((Characters::isalpha(esc) == FALSE) && (Characters::isdigit(esc) == FALSE)))
|
||||
((Characters::isalpha((wchar_t) esc) == FALSE) &&
|
||||
(Characters::isdigit((wchar_t) esc) == FALSE)))
|
||||
internal_error("nonalphabetic escape");
|
||||
if (escapes_category[set][esc] != VACANT_ECAT) {
|
||||
WRITE_TO(STDERR, "Clashing escape is %s%c\n", (set == 0)?"%":"$", esc);
|
||||
|
@ -239,14 +240,14 @@ file encodings, but expanding |%s| does not.
|
|||
case 'c': case 'd': case 'i': case 'x': { /* |char| is promoted to |int| in variable arguments */
|
||||
int ival = va_arg(ap, int);
|
||||
char temp[256];
|
||||
if (snprintf(temp, 255, format_string, ival) >= 255) strcpy(temp, "?");
|
||||
if (PLATFORM_SNPRINTF(temp, 255, format_string, ival) >= 255) strcpy(temp, "?");
|
||||
for (int j = 0; temp[j]; j++) Streams::putc(temp[j], stream);
|
||||
break;
|
||||
}
|
||||
case 'g': {
|
||||
double dval = va_arg(ap, double);
|
||||
char temp[256];
|
||||
if (snprintf(temp, 255, format_string, dval) >= 255) strcpy(temp, "?");
|
||||
if (PLATFORM_SNPRINTF(temp, 255, format_string, dval) >= 255) strcpy(temp, "?");
|
||||
for (int j = 0; temp[j]; j++) Streams::putc(temp[j], stream);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -91,17 +91,17 @@ wchar_t *Tries::search(match_trie *T, text_stream *p, wchar_t *add_outcome) {
|
|||
for (int i = start; i != endpoint+delta; i += delta) {
|
||||
wchar_t group[MAX_TRIE_GROUP_SIZE+1];
|
||||
int g = 0; /* size of group */
|
||||
int c = (i<0)?0:(Str::get_at(p, i)); /* i.e., zero at the two ends of the text */
|
||||
wchar_t c = (i<0)?0:(Str::get_at(p, i)); /* i.e., zero at the two ends of the text */
|
||||
if ((c >= 0x20) && (c <= 0x7f)) c = Characters::tolower(c); /* normalise it within ASCII */
|
||||
if (c == 0x20) { c = 0; i = endpoint - delta; } /* force any space to be equivalent to the final 0 */
|
||||
if (add_outcome) {
|
||||
int pairc = 0;
|
||||
wchar_t pairc = 0;
|
||||
if (c == '<') pairc = '>';
|
||||
if (c == '>') pairc = '<';
|
||||
if (pairc) {
|
||||
int j;
|
||||
for (j = i+delta; j != endpoint; j += delta) {
|
||||
int ch = (j<0)?0:(Str::get_at(p, j));
|
||||
wchar_t ch = (j<0)?0:(Str::get_at(p, j));
|
||||
if (ch == pairc) break;
|
||||
if (g > MAX_TRIE_GROUP_SIZE) { g = 0; break; }
|
||||
group[g++] = ch;
|
||||
|
|
|
@ -149,6 +149,6 @@ want to typeset the title in full caps to do so.)
|
|||
TEMPORARY_TEXT(recapped)
|
||||
Str::copy(recapped, val);
|
||||
LOOP_THROUGH_TEXT(P, recapped)
|
||||
Str::put(P, toupper(Str::get(P)));
|
||||
Str::put(P, Characters::toupper(Str::get(P)));
|
||||
Bibliographic::set_datum(Wm, I"Capitalized Title", recapped);
|
||||
DISCARD_TEXT(recapped)
|
||||
|
|
|
@ -181,7 +181,7 @@ would be "elctrcty", since we don't count "y" as a vowel here.
|
|||
else {
|
||||
if (letters_from_current_word < letters_from_each_word) {
|
||||
if (Str::get_at(from, sn) != '-') {
|
||||
int l = tolower(Str::get_at(from, sn));
|
||||
wchar_t l = Characters::tolower(Str::get_at(from, sn));
|
||||
if ((letters_from_current_word == 0) ||
|
||||
((l != 'a') && (l != 'e') && (l != 'i') &&
|
||||
(l != 'o') && (l != 'u'))) {
|
||||
|
|
Loading…
Reference in a new issue