Unix.st
author claus
Tue, 21 Feb 1995 02:07:07 +0100
changeset 275 a76029ddaa98
parent 252 cf6eef7703ad
child 300 fe1f742a9224
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1988 by Claus Gittinger
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Object subclass:#OperatingSystem
a27a279701f8 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:''
123
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
    15
       classVariableNames:'HostName LastErrorNumber LastExecStatus OSSignals'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
       category:'System-Support'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
OperatingSystem comment:'
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    21
COPYRIGHT (c) 1988 by Claus Gittinger
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
    22
	     All Rights Reserved
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
    23
275
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
    24
$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.29 1995-02-21 01:06:00 claus Exp $
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    27
!OperatingSystem primitiveDefinitions!
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
    28
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    29
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
    30
a27a279701f8 Initial revision
claus
parents:
diff changeset
    31
#ifdef transputer
a27a279701f8 Initial revision
claus
parents:
diff changeset
    32
# define unlink(f)      ((remove(f) == 0) ? 0 : -1)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    33
#else
a27a279701f8 Initial revision
claus
parents:
diff changeset
    34
# include <signal.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    35
a27a279701f8 Initial revision
claus
parents:
diff changeset
    36
# ifdef SYSV
a27a279701f8 Initial revision
claus
parents:
diff changeset
    37
#  include <sys/types.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    38
#  include <sys/param.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    39
#  include <sys/times.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    40
#  if ! defined(sco3_2)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    41
#   include <unistd.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    42
#  endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    43
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    44
#  if defined(isc3_2) || defined(sco3_2)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    45
#   include <sys/time.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    46
#  endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    47
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    48
#  if !defined(isc3_2)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    49
#   if defined(PCS) && defined(mips)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    50
#    include "/usr/include/bsd/sys/time.h"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    51
#    include "/usr/include/sys/time.h"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    52
#   else
a27a279701f8 Initial revision
claus
parents:
diff changeset
    53
#    include <time.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    54
#   endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
    55
#  endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    56
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    57
#  if defined(isc3_2)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
#   include <sys/bsdtypes.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    59
#  endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    60
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
# else /* not SYSV */
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    62
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    63
#  include <sys/time.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
#  include <sys/types.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
# endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    66
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
# include <pwd.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    68
# include <grp.h>
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
# include <sys/stat.h>
10
claus
parents: 5
diff changeset
    71
# include <errno.h>
claus
parents: 5
diff changeset
    72
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    73
/* 
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    74
 * posix systems should define these ... 
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    75
 * but on some (older) systems, they are not.
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    76
 */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
# ifndef S_IXUSR
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    78
#  ifdef S_IEXEC
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    79
#   define S_IXUSR S_IEXEC
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    80
#   define S_IXGRP (S_IEXEC>>3)
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    81
#   define S_IXOTH (S_IEXEC>>6)
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    82
#  endif
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    83
# endif
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    84
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    85
# ifndef S_IXUSR
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    86
#  define S_IXUSR 0100
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    87
#  define S_IXGRP 0010
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    88
#  define S_IXOTH 0001
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    89
# endif
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    90
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    91
# ifndef S_IRUSR
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    92
#  define S_IRUSR 0400
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    93
#  define S_IRGRP 0040
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    94
#  define S_IROTH 0004
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    95
# endif
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    96
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    97
# ifndef S_IWUSR
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    98
#  define S_IWUSR 0200
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
    99
#  define S_IWGRP 0020
40ca7cc6fb9c *** empty log message ***
claus
parents: 185
diff changeset
   100
#  define S_IWOTH 0002
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
# endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
   102
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   103
# ifndef MAXPATHLEN
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   104
#  include <sys/param.h>
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   105
#  ifndef MAXPATHLEN
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   106
#   define MAXPATHLEN 1024
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   107
#  endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   108
# endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   109
204
0a562ad64bcc uname fixes for unixware
claus
parents: 202
diff changeset
   110
# if defined(HAS_UNAME)
0a562ad64bcc uname fixes for unixware
claus
parents: 202
diff changeset
   111
#  include <sys/utsname.h>
0a562ad64bcc uname fixes for unixware
claus
parents: 202
diff changeset
   112
# endif
0a562ad64bcc uname fixes for unixware
claus
parents: 202
diff changeset
   113
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   114
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
   115
234
f03db82ccdd1 errnot cleanup
claus
parents: 216
diff changeset
   116
#include <stdio.h>
f03db82ccdd1 errnot cleanup
claus
parents: 216
diff changeset
   117
#include <fcntl.h>
f03db82ccdd1 errnot cleanup
claus
parents: 216
diff changeset
   118
f03db82ccdd1 errnot cleanup
claus
parents: 216
diff changeset
   119
extern int __immediateInterrupt__;
f03db82ccdd1 errnot cleanup
claus
parents: 216
diff changeset
   120
10
claus
parents: 5
diff changeset
   121
/*
claus
parents: 5
diff changeset
   122
 * on some systems errno is a macro ... check for it here
claus
parents: 5
diff changeset
   123
 */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   124
#ifndef errno
a27a279701f8 Initial revision
claus
parents:
diff changeset
   125
 extern errno;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   126
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
   127
10
claus
parents: 5
diff changeset
   128
/*
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   129
 * some (old ?) systems do not define this ...
10
claus
parents: 5
diff changeset
   130
 */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   131
#ifndef R_OK
a27a279701f8 Initial revision
claus
parents:
diff changeset
   132
# define R_OK    4       /* Test for Read permission */ 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   133
# define W_OK    2       /* Test for Write permission */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   134
# define X_OK    1       /* Test for eXecute permission */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   135
# define F_OK    0       /* Test for existence of File */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   136
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
   137
%}
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   138
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   139
2
claus
parents: 1
diff changeset
   140
!OperatingSystem class methodsFor:'documentation'!
claus
parents: 1
diff changeset
   141
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   142
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   143
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   144
 COPYRIGHT (c) 1988 by Claus Gittinger
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   145
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   146
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   147
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   148
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   149
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   150
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   151
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   152
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   153
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   154
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   155
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   156
version
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   157
"
275
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
   158
$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.29 1995-02-21 01:06:00 claus Exp $
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   159
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   160
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   161
2
claus
parents: 1
diff changeset
   162
documentation
claus
parents: 1
diff changeset
   163
"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   164
    this class gives access to some operating system services;
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   165
    some of it is very specific for unix, so do not depend on
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   166
    things available here in your applications - some may not
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   167
    be found in other OS's or be slightly dfferent ...
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   168
    Currently, there is only this class available - once more than
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   169
    Unix is supported, the corresponding class will be bound to the
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   170
    global variable OperatingSystem.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   171
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   172
    (On the other hand: I do not want to hide all features
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   173
     from you - in some situations it MAY be interresting to be
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   174
     able to get down to a select or fork system call easily.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   175
     You decide - portability vs. functionality)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   176
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   177
    Class variables:
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   178
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   179
	HostName        <String>        remembered hostname
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   180
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   181
	LastErrorNumber <Integer>       the last value of errno
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   182
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   183
	LastExecStatus  <Integer>       the returned exec status after
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   184
					the last call of system
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   186
	OSSignals       <Array>         Array of signals to be raised for corresponding
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   187
					OperatingSystem signals.
2
claus
parents: 1
diff changeset
   188
"
claus
parents: 1
diff changeset
   189
! !
claus
parents: 1
diff changeset
   190
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   191
!OperatingSystem class methodsFor:'initialization'!
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   192
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   193
initialize
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   194
    "initialize the class"
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   195
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   196
    ObjectMemory addDependent:self
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   197
!
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   198
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   199
update:something
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   200
    something == #earlyRestart ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   201
	"
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   202
	 flush cached data
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   203
	"
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   204
	HostName := nil.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   205
	LastErrorNumber := nil.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   206
	LastExecStatus := nil
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   207
    ]
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   208
! !
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   209
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   210
!OperatingSystem class methodsFor:'misc'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   211
a27a279701f8 Initial revision
claus
parents:
diff changeset
   212
exit
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   213
    "shutdown smalltalk immediately - 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   214
     return 'good'-status (0) to parent unix process."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   215
a27a279701f8 Initial revision
claus
parents:
diff changeset
   216
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   217
    mainExit(0);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   218
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
    "OperatingSystem exit - dont evaluate this"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   220
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   221
a27a279701f8 Initial revision
claus
parents:
diff changeset
   222
exit:exitCode
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   223
    "shutdown smalltalk immediately -
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   224
     returning an exit-code to the parent unix process."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
a27a279701f8 Initial revision
claus
parents:
diff changeset
   226
%{  /* NOCONTEXT */
252
   227
    if (! __isSmallInteger(exitCode))
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   228
	exit(1);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   229
    mainExit(_intVal(exitCode));
a27a279701f8 Initial revision
claus
parents:
diff changeset
   230
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   231
    "OperatingSystem exit:1 - dont evaluate this"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   232
! 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   233
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   234
exitWithCoreDump
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   235
    "shutdown smalltalk immediately - dumping core.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   236
     This always returns 'bad'-status to the parent unix process.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   237
     Use this only for debugging ST/X itself"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   238
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   239
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   240
    abort();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   241
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   242
    "OperatingSystem exitWithCoreDump - dont evaluate this"
10
claus
parents: 5
diff changeset
   243
! !
claus
parents: 5
diff changeset
   244
claus
parents: 5
diff changeset
   245
!OperatingSystem class methodsFor:'os queries'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   246
a27a279701f8 Initial revision
claus
parents:
diff changeset
   247
getEnvironment:aString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   248
    "get an environment string"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   249
a27a279701f8 Initial revision
claus
parents:
diff changeset
   250
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   251
a27a279701f8 Initial revision
claus
parents:
diff changeset
   252
    char *env;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   253
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
   254
    if (__isString(aString)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   255
	env =  (char *)getenv(_stringVal(aString));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   256
	if (env) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   257
	    RETURN ( _MKSTRING(env COMMA_CON) );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   258
	}
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   259
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   261
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   262
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   263
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   264
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   265
     OperatingSystem getEnvironment:'LANG'
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   266
     OperatingSystem getEnvironment:'LOGIN'
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   267
     OperatingSystem getEnvironment:'HOME'
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   268
     OperatingSystem getEnvironment:'NNTPSERVER'
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   269
     OperatingSystem getEnvironment:'MAIL'
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   270
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   271
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   272
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
getProcessId
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   274
    "return the (unix-)processId"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   275
a27a279701f8 Initial revision
claus
parents:
diff changeset
   276
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   277
a27a279701f8 Initial revision
claus
parents:
diff changeset
   278
    int pid = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   279
#ifndef transputer
a27a279701f8 Initial revision
claus
parents:
diff changeset
   280
    pid = getpid();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   281
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
   282
    RETURN ( _MKSMALLINT(pid) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   283
%}
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   284
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   285
     OperatingSystem getProcessId
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   286
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   287
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   288
a27a279701f8 Initial revision
claus
parents:
diff changeset
   289
getCPUType
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   290
    "return a string giving the type of machine we're running on.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   291
     This may normally not be of any interrest to you ..."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
a27a279701f8 Initial revision
claus
parents:
diff changeset
   293
    |cpu|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   294
    
a27a279701f8 Initial revision
claus
parents:
diff changeset
   295
%{  /* NOCONTEXT */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   296
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   297
#   ifdef vax
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   298
#    define CPU_STRING "vax"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   299
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   300
#   ifdef mips
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   301
#    define CPU_STRING "mips"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   302
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   303
#   ifdef i386
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   304
#    define CPU_STRING "i386"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   305
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   306
#   ifdef ns32k
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   307
#    define CPU_STRING "ns32k"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   308
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   309
#   ifdef mc68k
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   310
#    define CPU_STRING "mc68k"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   311
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   312
#   ifdef sparc
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   313
#    define CPU_STRING "sparc"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   314
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   315
#   ifdef hppa
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   316
#    define CPU_STRING "hppa"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   317
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   318
#   ifdef rs6000
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   319
#    define CPU_STRING "rs6000"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   320
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   321
#   ifdef alpha
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   322
#    define CPU_STRING "alpha"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   323
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   324
#   ifdef powerPC
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   325
#    define CPU_STRING "powerPC"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   326
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   327
#   ifdef transputer
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   328
#    define CPU_STRING "transputer"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   329
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   330
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   331
#   ifndef CPU_STRING
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   332
#    define CPU_STRING "unknown"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   333
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   334
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   335
    cpu = _MKSTRING(CPU_STRING COMMA_CON);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   336
#   undef CPU_STRING
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   337
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   338
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   339
    ^ cpu
a27a279701f8 Initial revision
claus
parents:
diff changeset
   340
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   341
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   342
     OperatingSystem getCPUType
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   343
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   344
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   345
    "examples: are we running on a ss-10/solaris ?"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   346
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   347
     (OperatingSystem getCPUType = 'sparc') 
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   348
     and:[OperatingSystem getOSType = 'solaris']
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   349
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   350
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   351
    "or on a pc/solaris ?"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   352
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   353
     (OperatingSystem getCPUType = 'i386')
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   354
     and:[OperatingSystem getOSType = 'solaris']
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   355
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   356
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   357
a27a279701f8 Initial revision
claus
parents:
diff changeset
   358
getOSType
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   359
    "return a string giving the type of OS we're running on.
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   360
     This can be used to adapt programs to certain environment
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   361
     differences (for example: mail-lock strategy ...)"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   362
a27a279701f8 Initial revision
claus
parents:
diff changeset
   363
    |os|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   364
a27a279701f8 Initial revision
claus
parents:
diff changeset
   365
%{  /* NOCONTEXT */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   366
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   367
#   ifdef MSDOS
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   368
#    define OS_STRING "msdos"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   369
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   370
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   371
#   ifdef NT
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   372
#    define OS_STRING "nt"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   373
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   374
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   375
#   ifdef sinix
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   376
#    define OS_STRING "sinix"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   377
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   378
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   379
#   ifdef ultrix
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   380
#    define OS_STRING "ultrix"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   381
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   382
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   383
#   ifdef sco
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   384
#    define OS_STRING "sco"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   385
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   386
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   387
#   ifdef hpux
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   388
#    define OS_STRING "hpux"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   389
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   390
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   391
#   ifdef LINUX
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   392
#    define OS_STRING "linux"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   393
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   394
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   395
#   ifdef sunos
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   396
#    define OS_STRING "sunos"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   397
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   398
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   399
#   ifdef solaris
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   400
#    define OS_STRING "solaris"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   401
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   402
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   403
#   ifdef IRIS
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   404
#    define OS_STRING "irix"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   405
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   406
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   407
    /*
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   408
     * no concrete info; become somewhat vague ...
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   409
     */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   410
#   ifndef OS_STRING
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   411
#    ifdef MACH
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   412
#     define OS_STRING "mach"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   413
#    endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   414
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   415
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   416
#   ifndef OS_STRING
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   417
#    ifdef BSD
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   418
#     define OS_STRING "bsd"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   419
#    endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   420
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   421
#    ifdef SYSV
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   422
#     ifdef SYSV3
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   423
#      define OS_STRING "sys5.3"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   424
#     else
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   425
#      ifdef SYSV4
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   426
#       define OS_STRING "sys5.4"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   427
#      else
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   428
#       define OS_STRING "sys5"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   429
#      endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   430
#     endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   431
#    endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   432
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   433
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   434
    /*
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   435
     * become very vague ...
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   436
     */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   437
#   ifndef OS_STRING
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   438
#    ifdef POSIX
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   439
#     define OS_STRING "posix"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   440
#    endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   441
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   442
#   ifndef OS_STRING
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   443
#    ifdef UNIX
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   444
#     define OS_STRING "unix"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   445
#    endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   446
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   447
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   448
#   ifndef OS_STRING
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   449
#    define OS_STRING "unknown"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   450
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   451
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   452
    os = _MKSTRING(OS_STRING COMMA_CON);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   453
#   undef OS_STRING
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   454
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   455
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   456
    ^ os
a27a279701f8 Initial revision
claus
parents:
diff changeset
   457
a27a279701f8 Initial revision
claus
parents:
diff changeset
   458
    "OperatingSystem getOSType"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   459
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   460
a27a279701f8 Initial revision
claus
parents:
diff changeset
   461
getSystemType
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   462
    "return a string giving the type of system we're running on.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   463
     This is almost the same as getOSType, but the returned string
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   464
     is slightly different for some systems (i.e. iris vs. irix).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   465
     Dont depend on this - use getOSType. I dont really see a point
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   466
     here ... (except for slight differences between next/mach and other
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   467
     machs)"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   468
a27a279701f8 Initial revision
claus
parents:
diff changeset
   469
    |sys|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   470
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   471
%{
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   472
#   ifdef NEXT
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   473
#    define SYS_STRING "next"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   474
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   475
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   476
#   ifdef IRIS
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   477
#    define SYS_STRING "iris"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   478
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   479
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   480
#   ifdef SYS_STRING
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   481
     sys = _MKSTRING(SYS_STRING COMMA_CON);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   482
#    undef SYS_STRING
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   483
#   endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   484
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   485
.
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   486
    sys isNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   487
	^ self getOSType
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   488
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   489
    ^ sys
a27a279701f8 Initial revision
claus
parents:
diff changeset
   490
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   491
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   492
     OperatingSystem getSystemType
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   493
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   494
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   495
10
claus
parents: 5
diff changeset
   496
getHostName
claus
parents: 5
diff changeset
   497
    "return the hostname we are running on - if there is
claus
parents: 5
diff changeset
   498
     a HOST environment variable, we are much faster here ..."
claus
parents: 5
diff changeset
   499
claus
parents: 5
diff changeset
   500
    |name p|
claus
parents: 5
diff changeset
   501
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   502
    HostName notNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   503
	^ HostName
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   504
    ].
10
claus
parents: 5
diff changeset
   505
    name := self getEnvironment:'HOST'.
204
0a562ad64bcc uname fixes for unixware
claus
parents: 202
diff changeset
   506
0a562ad64bcc uname fixes for unixware
claus
parents: 202
diff changeset
   507
%{  /* STACK: 2048 */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   508
#if defined(HAS_GETHOSTNAME)
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   509
    char buffer[128];
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   510
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   511
    if (gethostname(buffer, sizeof(buffer)) == 0) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   512
	name = _MKSTRING(buffer COMMA_CON);
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   513
    }
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   514
#else
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   515
# if defined(HAS_UNAME)
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   516
    struct utsname ubuff;
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   517
204
0a562ad64bcc uname fixes for unixware
claus
parents: 202
diff changeset
   518
    if (uname(&ubuff) >= 0) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   519
	name = _MKSTRING(ubuff.nodename COMMA_CON);
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   520
    }
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   521
# endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   522
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   523
%}.
10
claus
parents: 5
diff changeset
   524
    name isNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   525
	"since fork might be slow on some machines, give a warning ..."
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   526
	'please set the HOST shell variable for faster startup' errorPrintNL.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   527
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   528
	p := PipeStream readingFrom:'hostname'.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   529
	p notNil ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   530
	    name := p nextLine.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   531
	    p close
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   532
	]
10
claus
parents: 5
diff changeset
   533
    ].
claus
parents: 5
diff changeset
   534
    name isNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   535
	'cannot find out hostname' errorPrintNL.
10
claus
parents: 5
diff changeset
   536
    ].
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   537
    HostName := name.
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   538
    ^ name
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   539
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   540
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   541
     OperatingSystem getHostName
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   542
    "
10
claus
parents: 5
diff changeset
   543
!
claus
parents: 5
diff changeset
   544
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   545
isBSDlike
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   546
    "return true, if the OS we're running on is a 'real' unix."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   547
a27a279701f8 Initial revision
claus
parents:
diff changeset
   548
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   549
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   550
#if defined(BSD) || defined(MACH) || defined(SYSV4)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   551
    RETURN ( true );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   552
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
   553
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   554
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   555
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   556
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   557
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   558
isUNIXlike
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   559
    "return true, if the OS we're running on is a unix like."
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   560
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   561
%{  /* NOCONTEXT */
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   562
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   563
#if defined(MSDOS) || defined(NT)
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   564
    RETURN ( false );
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   565
#endif
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   566
%}
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   567
.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   568
    ^ true
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   569
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   570
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   571
isMSDOSlike
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   572
    "return true, if the OS we're running on is a unix like."
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   573
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   574
%{  /* NOCONTEXT */
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   575
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   576
#if defined(MSDOS) || defined(NT)
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   577
    RETURN ( true );
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   578
#endif
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   579
%}
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   580
.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   581
    ^ false
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   582
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   583
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   584
maxFileNameLength
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   585
    "return the max number of characters in a filename.
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   586
     This is no problem on 'real' unixes, but those 
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   587
     'instant ****-stations' always make problems .."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   588
a27a279701f8 Initial revision
claus
parents:
diff changeset
   589
%{  /* NOCONTEXT */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   590
 
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   591
    /*
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   592
     * XXX: newer systems provide a query function for this ... use it
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   593
     */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   594
#   if defined(BSD) || defined(SYSV4) || defined(LONGFILENAMES)
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   595
     RETURN ( _MKSMALLINT(255) );
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   596
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   597
252
   598
#   ifdef realIX
   599
      RETURN ( _MKSMALLINT(127) );
   600
#   endif
   601
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   602
#   ifdef SYSV
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   603
      RETURN ( _MKSMALLINT(14) );
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   604
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   605
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   606
#   ifdef MSDOS
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   607
     RETURN ( _MKSMALLINT(9) );
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   608
#   endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   609
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   610
#   ifdef NT
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   611
     /*
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   612
      * mhmh - depends on the filesystem type
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   613
      */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   614
     RETURN ( _MKSMALLINT(9) );
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   615
#   endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   616
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   617
.
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   618
    "unix default"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   619
    ^ 14
10
claus
parents: 5
diff changeset
   620
!
claus
parents: 5
diff changeset
   621
claus
parents: 5
diff changeset
   622
supportsIOInterrupts
claus
parents: 5
diff changeset
   623
    "return true, if the OS supports IO availability interrupts 
42
e33491f6f260 *** empty log message ***
claus
parents: 26
diff changeset
   624
     (i.e. SIGPOLL/SIGIO).
e33491f6f260 *** empty log message ***
claus
parents: 26
diff changeset
   625
e33491f6f260 *** empty log message ***
claus
parents: 26
diff changeset
   626
     Currently, this mechanism does not work at all ..."
10
claus
parents: 5
diff changeset
   627
claus
parents: 5
diff changeset
   628
%{  /* NOCONTEXT */
42
e33491f6f260 *** empty log message ***
claus
parents: 26
diff changeset
   629
#ifdef NOTDEF
e33491f6f260 *** empty log message ***
claus
parents: 26
diff changeset
   630
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   631
#   if defined(SIGPOLL) || defined(SIGIO)
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   632
#    if defined(F_GETFL) && defined(F_SETFL)
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   633
#     if defined(FASYNC)
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   634
      /*
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   635
       * mhmh they seem to NOT work on NS2.1
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   636
       */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   637
#      if !defined(NEXT)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   638
	RETURN (true);
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   639
#      endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   640
#     endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   641
#    endif
10
claus
parents: 5
diff changeset
   642
#   endif
42
e33491f6f260 *** empty log message ***
claus
parents: 26
diff changeset
   643
e33491f6f260 *** empty log message ***
claus
parents: 26
diff changeset
   644
#endif
10
claus
parents: 5
diff changeset
   645
%}
claus
parents: 5
diff changeset
   646
.
claus
parents: 5
diff changeset
   647
    ^ false
claus
parents: 5
diff changeset
   648
!
claus
parents: 5
diff changeset
   649
claus
parents: 5
diff changeset
   650
supportsNonBlockingIO
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   651
    "return true, if the OS supports nonblocking IO."
10
claus
parents: 5
diff changeset
   652
claus
parents: 5
diff changeset
   653
%{  /* NOCONTEXT */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   654
#   if defined(F_GETFL) && defined(F_SETFL)
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   655
#    if defined(FNDELAY)
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   656
       RETURN (true);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   657
#    endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   658
#   endif
10
claus
parents: 5
diff changeset
   659
%}
claus
parents: 5
diff changeset
   660
.
claus
parents: 5
diff changeset
   661
    ^ false
claus
parents: 5
diff changeset
   662
!
claus
parents: 5
diff changeset
   663
claus
parents: 5
diff changeset
   664
supportsSelect
claus
parents: 5
diff changeset
   665
    "return true, if the OS supports selecting on multiple
claus
parents: 5
diff changeset
   666
     filedescriptors via select."
claus
parents: 5
diff changeset
   667
claus
parents: 5
diff changeset
   668
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
   669
#if defined(sco)
claus
parents: 5
diff changeset
   670
    /*
claus
parents: 5
diff changeset
   671
     * sco has a broken select - always waiting 1 second
claus
parents: 5
diff changeset
   672
     */
claus
parents: 5
diff changeset
   673
    RETURN(false);
claus
parents: 5
diff changeset
   674
#endif
claus
parents: 5
diff changeset
   675
%}
claus
parents: 5
diff changeset
   676
.
claus
parents: 5
diff changeset
   677
    ^ true
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   678
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   679
2
claus
parents: 1
diff changeset
   680
!OperatingSystem class methodsFor:'users & groups'!
claus
parents: 1
diff changeset
   681
claus
parents: 1
diff changeset
   682
getLoginName
claus
parents: 1
diff changeset
   683
    "return a string with the users name"
claus
parents: 1
diff changeset
   684
claus
parents: 1
diff changeset
   685
%{  /* NOCONTEXT */
claus
parents: 1
diff changeset
   686
claus
parents: 1
diff changeset
   687
    char *name = "you";
claus
parents: 1
diff changeset
   688
#ifndef transputer
claus
parents: 1
diff changeset
   689
    name = (char *)getlogin();
26
8dba727d8981 *** empty log message ***
claus
parents: 18
diff changeset
   690
    if (! name || (name[0] == 0)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   691
	name = (char *)getenv("LOGNAME");
2
claus
parents: 1
diff changeset
   692
    }
claus
parents: 1
diff changeset
   693
#endif
claus
parents: 1
diff changeset
   694
    RETURN ( _MKSTRING(name COMMA_CON) );
claus
parents: 1
diff changeset
   695
%}
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   696
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   697
     OperatingSystem getLoginName
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   698
    "
2
claus
parents: 1
diff changeset
   699
!
claus
parents: 1
diff changeset
   700
claus
parents: 1
diff changeset
   701
getUserNameFromID:aNumber
claus
parents: 1
diff changeset
   702
    "return the user-name-string for a given numeric user-id"
claus
parents: 1
diff changeset
   703
claus
parents: 1
diff changeset
   704
%{  /* NOCONTEXT */
claus
parents: 1
diff changeset
   705
claus
parents: 1
diff changeset
   706
#ifndef transputer
claus
parents: 1
diff changeset
   707
    struct passwd *p;
claus
parents: 1
diff changeset
   708
252
   709
    if (__isSmallInteger(aNumber)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   710
	p = getpwuid(_intVal(aNumber));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   711
	if (p) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   712
	    RETURN ( _MKSTRING(p->pw_name COMMA_CON) );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   713
	}
2
claus
parents: 1
diff changeset
   714
    }
claus
parents: 1
diff changeset
   715
#endif
claus
parents: 1
diff changeset
   716
%}
claus
parents: 1
diff changeset
   717
.
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   718
    ^ '? (' , aNumber printString , ')'
2
claus
parents: 1
diff changeset
   719
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   720
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   721
     OperatingSystem getUserNameFromID:0
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   722
     OperatingSystem getUserNameFromID:100
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   723
     OperatingSystem getUserNameFromID:9991 
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   724
    "
2
claus
parents: 1
diff changeset
   725
!
claus
parents: 1
diff changeset
   726
claus
parents: 1
diff changeset
   727
getGroupNameFromID:aNumber
claus
parents: 1
diff changeset
   728
    "return the group-name-string for a given numeric group-id"
claus
parents: 1
diff changeset
   729
claus
parents: 1
diff changeset
   730
%{  /* NOCONTEXT */
claus
parents: 1
diff changeset
   731
claus
parents: 1
diff changeset
   732
#ifndef transputer
claus
parents: 1
diff changeset
   733
    struct group *g;
claus
parents: 1
diff changeset
   734
252
   735
    if (__isSmallInteger(aNumber)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   736
	g = getgrgid(_intVal(aNumber));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   737
	if (g) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   738
	    RETURN ( _MKSTRING(g->gr_name COMMA_CON) );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   739
	}
2
claus
parents: 1
diff changeset
   740
    }
claus
parents: 1
diff changeset
   741
#endif
claus
parents: 1
diff changeset
   742
%}
claus
parents: 1
diff changeset
   743
.
claus
parents: 1
diff changeset
   744
    ^ '???'
claus
parents: 1
diff changeset
   745
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   746
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   747
     OperatingSystem getGroupNameFromID:0
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   748
     OperatingSystem getGroupNameFromID:10
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   749
    "
2
claus
parents: 1
diff changeset
   750
!
claus
parents: 1
diff changeset
   751
claus
parents: 1
diff changeset
   752
getHomeDirectory
10
claus
parents: 5
diff changeset
   753
    "return the name of the users home directory"
2
claus
parents: 1
diff changeset
   754
claus
parents: 1
diff changeset
   755
    ^ OperatingSystem getEnvironment:'HOME'
claus
parents: 1
diff changeset
   756
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   757
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   758
     OperatingSystem getHomeDirectory
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   759
    "
2
claus
parents: 1
diff changeset
   760
! !
claus
parents: 1
diff changeset
   761
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   762
!OperatingSystem class methodsFor:'error messages'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   763
85
claus
parents: 77
diff changeset
   764
currentErrorNumber
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   765
    "returns the OS's last error nr (i.e. the value of errno).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   766
     Notice, that the value of this flag is only valid immediately
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   767
     after the error occurred - it gets updated with every other
85
claus
parents: 77
diff changeset
   768
     request to the OS.
claus
parents: 77
diff changeset
   769
     Use lastErrorNumber - currentErrorNumber is invalidated by
claus
parents: 77
diff changeset
   770
     many, many internal calls."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   771
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   772
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   773
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   774
     RETURN ( _MKSMALLINT(errno) );
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   775
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   776
     "
85
claus
parents: 77
diff changeset
   777
      OperatingSystem currentErrorNumber
claus
parents: 77
diff changeset
   778
     "
claus
parents: 77
diff changeset
   779
!
claus
parents: 77
diff changeset
   780
claus
parents: 77
diff changeset
   781
lastErrorNumber
claus
parents: 77
diff changeset
   782
    "return the last error number"
claus
parents: 77
diff changeset
   783
claus
parents: 77
diff changeset
   784
    ^ LastErrorNumber
claus
parents: 77
diff changeset
   785
claus
parents: 77
diff changeset
   786
     "
claus
parents: 77
diff changeset
   787
      OperatingSystem lastErrorNumber
claus
parents: 77
diff changeset
   788
     "
claus
parents: 77
diff changeset
   789
!
claus
parents: 77
diff changeset
   790
claus
parents: 77
diff changeset
   791
lastExecStatus
claus
parents: 77
diff changeset
   792
    "return the last execution status"
claus
parents: 77
diff changeset
   793
claus
parents: 77
diff changeset
   794
    ^ LastExecStatus
claus
parents: 77
diff changeset
   795
claus
parents: 77
diff changeset
   796
     "
claus
parents: 77
diff changeset
   797
      OperatingSystem lastExecStatus
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   798
     "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   799
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   800
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   801
lastErrorString
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   802
    "return a message string describing the last error"
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   803
85
claus
parents: 77
diff changeset
   804
    ^ self errorTextForNumber:LastErrorNumber
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   805
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   806
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   807
     OperatingSystem lastErrorString
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   808
    "
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   809
!
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   810
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   811
errorTextForNumber:errNr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   812
    "return a message string from a unix errorNumber 
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   813
     (as returned by a system call). 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   814
     Should be replaced by a resource lookup."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   815
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   816
%{
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   817
    /* claus:
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   818
     * I made this some primitive code, since errnos are not
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   819
     * standard across unixes
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   820
     */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   821
    char *msg = "unknown error";
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   822
    char buffer[50];
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   823
252
   824
    if (__isSmallInteger(errNr)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   825
	switch (_intVal(errNr)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   826
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   827
	     * POSIX errnos - these should be defined
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   828
	     */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   829
	    case EPERM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   830
		msg = "Operation not permitted";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   831
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   832
	    case ENOENT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   833
		msg = "No such file or directory";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   834
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   835
	    case ESRCH:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   836
		msg = "No such process";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   837
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   838
	    case EINTR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   839
		msg = "Interrupted system call";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   840
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   841
	    case EIO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   842
		msg = "I/O error";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   843
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   844
	    case ENXIO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   845
		msg = "No such device or address";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   846
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   847
	    case E2BIG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   848
		msg = "Arg list too long";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   849
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   850
	    case ENOEXEC:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   851
		msg = "Exec format error";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   852
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   853
	    case EBADF:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   854
		msg = "Bad file number";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   855
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   856
	    case ECHILD:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   857
		msg = "No child processes";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   858
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   859
#if !defined(EWOULDBLOCK) && defined(EAGAIN) && (EWOULDBLOCK != EAGAIN)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   860
	    case EAGAIN:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   861
		msg = "Try again";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   862
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   863
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   864
	    case ENOMEM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   865
		msg = "Out of memory";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   866
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   867
	    case EACCES:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   868
		msg = "Permission denied";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   869
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   870
	    case EFAULT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   871
		msg = "Bad address";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   872
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   873
	    case EBUSY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   874
		msg = "Device or resource busy";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   875
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   876
	    case EEXIST:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   877
		msg = "File exists";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   878
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   879
	    case EXDEV:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   880
		msg = "Cross-device link";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   881
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   882
	    case ENODEV:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   883
		msg = "No such device";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   884
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   885
	    case ENOTDIR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   886
		msg = "Not a directory";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   887
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   888
	    case EISDIR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   889
		msg = "Is a directory";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   890
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   891
	    case EINVAL:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   892
		msg = "Invalid argument";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   893
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   894
	    case ENFILE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   895
		msg = "File table overflow";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   896
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   897
	    case EMFILE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   898
		msg = "Too many open files";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   899
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   900
	    case ENOTTY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   901
		msg = "Not a typewriter";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   902
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   903
	    case EFBIG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   904
		msg = "File too large";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   905
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   906
	    case ENOSPC:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   907
		msg = "No space left on device";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   908
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   909
	    case ESPIPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   910
		msg = "Illegal seek";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   911
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   912
	    case EROFS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   913
		msg = "Read-only file system";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   914
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   915
	    case EMLINK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   916
		msg = "Too many links";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   917
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   918
	    case EPIPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   919
		msg = "Broken pipe";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   920
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   921
	    case EDOM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   922
		msg = "Math argument out of domain";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   923
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   924
	    case ERANGE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   925
		msg = "Math result not representable";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   926
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   927
#ifdef EDEADLK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   928
	    case EDEADLK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   929
		msg = "Resource deadlock would occur";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   930
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   931
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   932
#ifdef ENAMETOOLONG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   933
	    case ENAMETOOLONG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   934
		msg = "File name too long";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   935
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   936
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   937
#ifdef ENOLCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   938
	    case ENOLCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   939
		msg = "No record locks available";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   940
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   941
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   942
#ifdef ENOSYS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   943
	    case ENOSYS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   944
		msg = "Function not implemented";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   945
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   946
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   947
#ifdef ENOTEMPTY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   948
	    case ENOTEMPTY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   949
		msg = "Directory not empty";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   950
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   951
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   952
#ifdef EILSEQ
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   953
	    case EILSEQ:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   954
		msg = "Illegal byte sequence";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   955
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   956
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   957
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   958
	     * XPG3 errnos - defined on most systems
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   959
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   960
#ifdef ENOTBLK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   961
	    case ENOTBLK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   962
		msg = "Block device required";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   963
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   964
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   965
#ifdef ETXTBSY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   966
	    case ETXTBSY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   967
		msg = "Text file busy";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   968
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   969
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   970
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   971
	     * some others
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   972
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   973
#ifdef EWOULDBLOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   974
	    case EWOULDBLOCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   975
		msg = "Operation would block";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   976
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   977
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   978
#ifdef ENOMSG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   979
	    case ENOMSG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   980
		msg = "No message of desired type";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   981
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   982
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   983
#ifdef ELOOP
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   984
	    case ELOOP:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   985
		msg = "Too many levels of symbolic links";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   986
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   987
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   988
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   989
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   990
	     * some stream errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   991
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   992
#ifdef ETIME
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   993
	    case ETIME:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   994
		msg = "Timer expired";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   995
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   996
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   997
#ifdef ENOSR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   998
	    case ENOSR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   999
		msg = "Out of streams resources";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1000
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1001
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1002
#ifdef ENOSTR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1003
	    case ENOSTR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1004
		msg = "Device not a stream";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1005
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1006
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1007
#ifdef ECOMM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1008
	    case ECOMM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1009
		msg = "Communication error on send";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1010
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1011
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1012
#ifdef EPROTO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1013
	    case EPROTO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1014
		msg = "Protocol error";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1015
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1016
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1017
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1018
	     * nfs errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1019
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1020
#ifdef ESTALE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1021
	    case ESTALE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1022
		msg = "Stale NFS file handle";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1023
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1024
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1025
#ifdef EREMOTE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1026
	    case EREMOTE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1027
		msg = "Too many levels of remote in path";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1028
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1029
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1030
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1031
	     * some networking errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1032
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1033
#ifdef EINPROGRESS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1034
	    case EINPROGRESS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1035
		msg = "Operation now in progress";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1036
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1037
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1038
#ifdef EALREADY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1039
	    case EALREADY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1040
		msg = "Operation already in progress";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1041
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1042
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1043
#ifdef ENOTSOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1044
	    case ENOTSOCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1045
		msg = "Socket operation on non-socket";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1046
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1047
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1048
#ifdef EDESTADDRREQ
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1049
	    case EDESTADDRREQ:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1050
		msg = "Destination address required";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1051
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1052
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1053
#ifdef EMSGSIZE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1054
	    case EMSGSIZE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1055
		msg = "Message too long";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1056
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1057
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1058
#ifdef EPROTOTYPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1059
	    case EPROTOTYPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1060
		msg = "Protocol wrong type for socket";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1061
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1062
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1063
#ifdef ENOPROTOOPT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1064
	    case ENOPROTOOPT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1065
		msg = "Protocol not available";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1066
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1067
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1068
#ifdef EPROTONOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1069
	    case EPROTONOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1070
		msg = "Protocol not supported";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1071
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1072
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1073
#ifdef ESOCKTNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1074
	    case ESOCKTNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1075
		msg = "Socket type not supported";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1076
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1077
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1078
#ifdef EOPNOTSUPP
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1079
	    case EOPNOTSUPP:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1080
		msg = "Operation not supported on socket";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1081
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1082
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1083
#ifdef EPFNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1084
	    case EPFNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1085
		msg = "Protocol family not supported";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1086
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1087
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1088
#ifdef EAFNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1089
	    case EAFNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1090
		msg = "Address family not supported by protocol family";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1091
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1092
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1093
#ifdef EADDRINUSE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1094
	    case EADDRINUSE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1095
		msg = "Address already in use";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1096
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1097
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1098
#ifdef EADDRNOTAVAIL
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1099
	    case EADDRNOTAVAIL:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1100
		msg = "Can\'t assign requested address";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1101
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1102
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1103
#ifdef ETIMEDOUT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1104
	    case ETIMEDOUT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1105
		msg = "Connection timed out";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1106
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1107
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1108
#ifdef ECONNREFUSED
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1109
	    case ECONNREFUSED:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1110
		msg = "Connection refused";
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1111
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1112
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1113
	    default:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1114
		sprintf(buffer, "ErrorNr: %d", _intVal(errNr));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1115
		msg = buffer;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1116
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1117
	}
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1118
    }
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1119
    RETURN (_MKSTRING(msg COMMA_CON));
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1120
%}
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1121
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1122
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1123
!OperatingSystem class methodsFor:'signal constants'!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1124
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1125
sigHUP
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1126
    "return the signal number for SIGHUP
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1127
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1128
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1129
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1130
    return _MKSMALLINT(SIGHUP);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1131
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1132
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1133
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1134
sigINT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1135
    "return the signal number for SIGINT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1136
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1137
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1138
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1139
    return _MKSMALLINT(SIGINT);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1140
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1141
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1142
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1143
sigQUIT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1144
    "return the signal number for SIGQUIT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1145
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1146
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1147
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1148
    return _MKSMALLINT(SIGQUIT);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1149
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1150
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1151
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1152
sigILL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1153
    "return the signal number for SIGILL - 0 if not supported by OS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1154
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1155
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1156
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1157
#ifdef SIGILL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1158
    return _MKSMALLINT(SIGILL);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1159
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1160
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1161
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1162
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1163
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1164
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1165
sigTRAP
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1166
    "return the signal number for SIGTRAP - 0 if not supported by OS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1167
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1168
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1169
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1170
#ifdef SIGTRAP
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1171
    return _MKSMALLINT(SIGTRAP);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1172
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1173
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1174
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1175
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1176
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1177
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1178
sigIOT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1179
    "return the signal number for SIGIOT - 0 if not supported by OS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1180
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1181
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1182
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1183
#ifdef SIGIOT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1184
    return _MKSMALLINT(SIGIOT);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1185
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1186
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1187
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1188
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1189
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1190
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1191
sigEMT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1192
    "return the signal number for SIGEMT - 0 if not supported by OS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1193
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1194
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1195
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1196
#ifdef SIGEMT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1197
    return _MKSMALLINT(SIGEMT);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1198
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1199
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1200
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1201
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1202
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1203
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1204
sigFP
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1205
    "return the signal number for SIGFP - 0 if not supported by OS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1206
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1207
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1208
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1209
#ifdef SIGFPE
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1210
    return _MKSMALLINT(SIGFPE);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1211
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1212
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1213
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1214
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1215
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1216
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1217
sigKILL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1218
    "return the signal number for SIGKILL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1219
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1220
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1221
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1222
    return _MKSMALLINT(SIGKILL);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1223
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1224
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1225
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1226
sigBUS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1227
    "return the signal number for SIGBUS - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1228
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1229
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1230
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1231
#ifdef SIGBUS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1232
    return _MKSMALLINT(SIGBUS);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1233
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1234
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1235
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1236
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1237
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1238
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1239
sigSEGV
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1240
    "return the signal number for SIGSEGV - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1241
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1242
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1243
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1244
#ifdef SIGSEGV
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1245
    return _MKSMALLINT(SIGSEGV);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1246
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1247
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1248
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1249
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1250
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1251
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1252
sigSYS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1253
    "return the signal number for SIGSYS - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1254
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1255
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1256
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1257
#ifdef SIGSYS
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1258
    return _MKSMALLINT(SIGSYS);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1259
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1260
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1261
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1262
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1263
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1264
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1265
sigPIPE
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1266
    "return the signal number for SIGPIPE - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1267
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1268
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1269
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1270
#ifdef SIGPIPE
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1271
    return _MKSMALLINT(SIGPIPE);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1272
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1273
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1274
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1275
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1276
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1277
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1278
sigALRM
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1279
    "return the signal number for SIGALRM - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1280
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1281
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1282
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1283
    return _MKSMALLINT(SIGALRM);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1284
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1285
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1286
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1287
sigTERM
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1288
    "return the signal number for SIGTERM - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1289
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1290
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1291
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1292
#ifdef SIGTERM
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1293
    return _MKSMALLINT(SIGTERM);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1294
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1295
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1296
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1297
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1298
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1299
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1300
sigURG
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1301
    "return the signal number for SIGURG - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1302
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1303
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1304
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1305
#if defined(SIGURG)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1306
    return _MKSMALLINT(SIGURG);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1307
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1308
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1309
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1310
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1311
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1312
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1313
sigSTOP
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1314
    "return the signal number for SIGSTOP - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1315
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1316
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1317
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1318
#if defined(SIGSTOP)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1319
    return _MKSMALLINT(SIGSTOP);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1320
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1321
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1322
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1323
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1324
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1325
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1326
sigTSTP
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1327
    "return the signal number for SIGTSTP - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1328
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1329
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1330
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1331
#if defined(SIGTSTP)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1332
    return _MKSMALLINT(SIGTSTP);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1333
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1334
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1335
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1336
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1337
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1338
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1339
sigCONT
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1340
    "return the signal number for SIGCONT - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1341
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1342
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1343
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1344
#if defined(SIGCONT)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1345
    return _MKSMALLINT(SIGCONT);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1346
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1347
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1348
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1349
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1350
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1351
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1352
sigCHLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1353
    "return the signal number for SIGCHLD - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1354
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1355
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1356
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1357
#if defined(SIGCHLD)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1358
    return _MKSMALLINT(SIGCHLD);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1359
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1360
# if  defined(SIGCLD)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1361
    return _MKSMALLINT(SIGCLD);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1362
# else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1363
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1364
# endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1365
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1366
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1367
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1368
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1369
sigTTIN
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1370
    "return the signal number for SIGTTIN - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1371
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1372
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1373
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1374
#if defined(SIGTTIN)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1375
    return _MKSMALLINT(SIGTTIN);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1376
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1377
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1378
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1379
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1380
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1381
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1382
sigTTOU
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1383
    "return the signal number for SIGTTOU - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1384
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1385
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1386
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1387
#if defined(SIGTTOU)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1388
    return _MKSMALLINT(SIGTTOU);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1389
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1390
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1391
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1392
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1393
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1394
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1395
sigIO
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1396
    "return the signal number for SIGIO - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1397
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1398
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1399
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1400
#if defined(SIGIO)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1401
    return _MKSMALLINT(SIGIO);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1402
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1403
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1404
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1405
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1406
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1407
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1408
sigPOLL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1409
    "return the signal number for SIGPOLL - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1410
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1411
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1412
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1413
#if defined(SIGPOLL)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1414
    return _MKSMALLINT(SIGPOLL);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1415
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1416
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1417
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1418
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1419
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1420
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1421
sigXCPU
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1422
    "return the signal number for SIGXCPU - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1423
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1424
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1425
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1426
#if defined(SIGXCPU)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1427
    return _MKSMALLINT(SIGXCPU);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1428
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1429
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1430
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1431
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1432
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1433
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1434
sigXFSZ
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1435
    "return the signal number for SIGXFSZ - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1436
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1437
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1438
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1439
#if defined(SIGXFSZ)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1440
    return _MKSMALLINT(SIGXFSZ);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1441
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1442
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1443
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1444
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1445
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1446
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1447
sigVTALRM
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1448
    "return the signal number for SIGVTALRM - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1449
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1450
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1451
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1452
#if defined(SIGVTALRM)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1453
    return _MKSMALLINT(SIGVTALRM);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1454
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1455
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1456
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1457
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1458
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1459
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1460
sigPROF
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1461
    "return the signal number for SIGPROF - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1462
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1463
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1464
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1465
#if defined(SIGPROF)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1466
    return _MKSMALLINT(SIGPROF);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1467
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1468
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1469
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1470
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1471
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1472
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1473
sigWINCH
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1474
    "return the signal number for SIGWINCH - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1475
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1476
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1477
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1478
#if defined(SIGWINCH)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1479
    return _MKSMALLINT(SIGWINCH);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1480
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1481
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1482
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1483
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1484
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1485
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1486
sigLOST
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1487
    "return the signal number for SIGLOST - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1488
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1489
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1490
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1491
#if defined(SIGLOST)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1492
    return _MKSMALLINT(SIGLOST);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1493
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1494
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1495
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1496
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1497
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1498
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1499
sigUSR1
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1500
    "return the signal number for SIGUSR1 - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1501
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1502
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1503
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1504
#if defined(SIGUSR1)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1505
    return _MKSMALLINT(SIGUSR1);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1506
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1507
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1508
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1509
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1510
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1511
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1512
sigUSR2
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1513
    "return the signal number for SIGUSR2 - 0 if not supported
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1514
     (the numeric value is not the same across unix-systems)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1515
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1516
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1517
#if defined(SIGUSR2)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1518
    return _MKSMALLINT(SIGUSR2);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1519
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1520
    return _MKSMALLINT(0);
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1521
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1522
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1523
! !
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1524
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1525
!OperatingSystem class methodsFor:'interrupts & signals'!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1526
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1527
nameForSignal:aSignalNumber
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1528
    "for a given Unix signalnumber, return a descriptive string"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1529
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1530
    aSignalNumber == self sigHUP    ifTrue:[^ 'hangup'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1531
    aSignalNumber == self sigINT    ifTrue:[^ 'interrupt'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1532
    aSignalNumber == self sigKILL   ifTrue:[^ 'kill'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1533
    aSignalNumber == self sigQUIT   ifTrue:[^ 'quit'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1534
    aSignalNumber == self sigILL    ifTrue:[^ 'illegal instruction'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1535
    aSignalNumber == self sigTRAP   ifTrue:[^ 'trap'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1536
    aSignalNumber == self sigIOT    ifTrue:[^ 'iot trap'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1537
    aSignalNumber == self sigEMT    ifTrue:[^ 'emt trap'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1538
    aSignalNumber == self sigFP     ifTrue:[^ 'fp exception'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1539
    aSignalNumber == self sigBUS    ifTrue:[^ 'bus error'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1540
    aSignalNumber == self sigSEGV   ifTrue:[^ 'segmentation violation'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1541
    aSignalNumber == self sigSYS    ifTrue:[^ 'bad system call'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1542
    aSignalNumber == self sigPIPE   ifTrue:[^ 'broken pipe'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1543
    aSignalNumber == self sigALRM   ifTrue:[^ 'alarm timer'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1544
    aSignalNumber == self sigTERM   ifTrue:[^ 'termination'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1545
    aSignalNumber == self sigSTOP   ifTrue:[^ 'stop'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1546
    aSignalNumber == self sigTSTP   ifTrue:[^ 'tty stop'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1547
    aSignalNumber == self sigCONT   ifTrue:[^ 'continue'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1548
    aSignalNumber == self sigCHLD   ifTrue:[^ 'child death'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1549
    aSignalNumber == self sigTTIN   ifTrue:[^ 'background tty input'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1550
    aSignalNumber == self sigTTOU   ifTrue:[^ 'background tty output'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1551
    aSignalNumber == self sigIO     ifTrue:[^ 'io available'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1552
    aSignalNumber == self sigXCPU   ifTrue:[^ 'cpu time expired'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1553
    aSignalNumber == self sigXFSZ   ifTrue:[^ 'file size limit'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1554
    aSignalNumber == self sigVTALRM ifTrue:[^ 'virtual alarm timer'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1555
    aSignalNumber == self sigPROF   ifTrue:[^ 'profiling timer'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1556
    aSignalNumber == self sigWINCH  ifTrue:[^ 'winsize changed'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1557
    aSignalNumber == self sigLOST   ifTrue:[^ 'resource lost'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1558
    aSignalNumber == self sigUSR1   ifTrue:[^ 'user signal 1'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1559
    aSignalNumber == self sigUSR2   ifTrue:[^ 'user signal 2'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1560
    "notice: many systems map SIGPOLL and/or SIGUSR onto SIGIO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1561
	     therefor, keep SIGIO always above the two below" 
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1562
    aSignalNumber == self sigPOLL   ifTrue:[^ 'io available'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1563
    aSignalNumber == self sigURG    ifTrue:[^ 'urgent'].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1564
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1565
    ^ 'unknown signal'
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1566
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1567
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1568
     OperatingSystem nameForSignal:9
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1569
     OperatingSystem nameForSignal:(OperatingSystem sigPOLL) 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1570
    "
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1571
!
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1572
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1573
interruptPending
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1574
    "return true, if an interrupt is pending. The returned value is
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1575
     invalid if interrupts are not currently blocked, since otherwise 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1576
     the interrupt is usually already handled before arriving here,
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1577
     or may be served while returning from here."
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1578
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1579
%{   /* NOCONTEXT */
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1580
     extern OBJ INTERRUPTPENDING();
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1581
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1582
     RETURN ( INTERRUPTPENDING() );
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1583
%}        
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1584
!
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1585
10
claus
parents: 5
diff changeset
  1586
blockInterrupts
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1587
    "disable interrupt processing - if disabled, incoming
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1588
     interrupts will be registered and handled as soon as
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1589
     interrupts are reenabled by OperatingSystemclass>>unblockInterrupts.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1590
     Returns the previous blocking status i.e. true if interrupts
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1591
     where already blocked. You need this information for proper
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1592
     unblocking, in case of nested block/unblock calls."
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1593
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1594
%{  /* NOCONTEXT */
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1595
    extern OBJ BLOCKINTERRUPTS();
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1596
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1597
    return ( BLOCKINTERRUPTS() );
10
claus
parents: 5
diff changeset
  1598
%}
claus
parents: 5
diff changeset
  1599
!
claus
parents: 5
diff changeset
  1600
claus
parents: 5
diff changeset
  1601
unblockInterrupts
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1602
    "enable interrupt processing - if any interrupts are pending,
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1603
     these will be handled immediately.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1604
     When unblocking interrupts, take care of nested block/unblock
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1605
     calls - you must only unblock after a blockcall if they where
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1606
     really not blocked before. See OperatingSystemclass>>blockInterrupts."
10
claus
parents: 5
diff changeset
  1607
%{
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1608
    extern void UNBLOCKINTERRUPTS();
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1609
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1610
    UNBLOCKINTERRUPTS(SENDER);
10
claus
parents: 5
diff changeset
  1611
%}
claus
parents: 5
diff changeset
  1612
!
claus
parents: 5
diff changeset
  1613
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1614
disableSignal:signalNumber
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1615
    "disable (Unix-) signal processing for signalNumber.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1616
     Dont confuse Unix signals with smalltalk signals.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1617
     WARNING: for some signals, it is no good idea to disable
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1618
     them; for example, disabling the SIGINT signal turns off ^C
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1619
     handling.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1620
     Also, NOTICE that signal numbers are not portable between unix
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1621
     systems - use OperatingSystem sigXXX to get the numeric value for
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1622
     a signal.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1623
     Use only for fully debugged stand alone applications."
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1624
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1625
%{  /* NOCONTEXT */
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1626
252
  1627
    if (__isSmallInteger(signalNumber)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1628
	signal(_intVal(signalNumber), SIG_IGN);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1629
	RETURN (self);
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1630
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1631
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1632
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1633
     this error is triggered on non-integer argument
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1634
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1635
    self primitiveFailed
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1636
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1637
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1638
     'now, ^C is totally ignored ...' printNewline.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1639
     OperatingSystem disableSignal:(OperatingSystem sigINT).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1640
     1 to:1000000 do:[:i| ].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1641
     OperatingSystem enableSignal:(OperatingSystem sigINT).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1642
     '^C handled again.' printNewline
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1643
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1644
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1645
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1646
defaultSignal:signalNumber
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1647
    "revert to the default action on arrival of a (Unix-)signal.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1648
     Dont confuse Unix signals with smalltalk signals.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1649
     WARNING: for some signals, it is no good idea to revert to default;
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1650
     for example, the default for SIGINT (i.e. ^C) is to exit; while the
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1651
     default for SIGQUIT (^ \) is to dump core.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1652
     Also, NOTICE that signal numbers are not portable between unix
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1653
     systems - use OperatingSystem sigXXX to get the numeric value for
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1654
     a signal."
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1655
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1656
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1657
252
  1658
    if (__isSmallInteger(signalNumber)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1659
	signal(_intVal(signalNumber), SIG_DFL);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1660
	RETURN (self);
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1661
    }
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1662
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1663
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1664
     this error is triggered on non-integer argument
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1665
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1666
    self primitiveFailed
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1667
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1668
    "you better save a snapshot image before trying this ..."
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1669
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1670
     'if you hit ^C now, Smalltalk will exit immediately' printNewline.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1671
     OperatingSystem defaultSignal:(OperatingSystem sigINT).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1672
     1 to:1000000 do:[:i| ].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1673
     OperatingSystem enableSignal:(OperatingSystem sigINT).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1674
     'normal ^C handling again.' printNewline
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1675
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1676
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1677
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1678
enableSignal:signalNumber
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1679
    "enable (Unix-)signal processing for signalNumber.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1680
     Dont confuse Unix signals with smalltalk signals.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1681
     The signal will be delivered to one of the standard handlers
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1682
     (SIGINT, SIGQUIT, etc) or to a general handler, which
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1683
     sends #signalInterrupt:.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1684
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1685
     NOTICE that signal numbers are not portable between unix
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1686
     systems - use OperatingSystem sigXXX to get the numeric value for
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1687
     a signal."
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1688
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1689
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1690
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1691
#ifdef NSIG
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1692
# define SIG_LIMIT NSIG
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1693
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1694
# ifdef SIGUSR2
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1695
#  define SIG_LIMIT SIGUSR2
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1696
# else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1697
#  ifdef SIGUSR
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1698
#   define SIG_LIMIT SIGUSR
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1699
#  endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1700
# endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1701
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1702
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1703
#if defined(SIGPOLL) && !defined(SIGIO)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1704
# define SIGIO SIGPOLL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1705
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1706
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1707
#ifdef SIGCHLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1708
# define CHILD_SIGNAL   SIGCHLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1709
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1710
# ifdef SIGCLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1711
#  define CHILD_SIGNAL  SIGCLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1712
# endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1713
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1714
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1715
    int sigNr;
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1716
    extern void userInterrupt();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1717
    extern void fpExceptionInterrupt();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1718
    extern void ioInterrupt();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1719
#ifdef CHILD_SIGNAL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1720
    extern void signalChildInterrupt();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1721
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1722
    extern void signalPIPEInterrupt();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1723
    extern void signalBUSInterrupt();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1724
    extern void signalSEGVInterrupt();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1725
    extern void timerInterrupt();
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1726
    extern void signalInterrupt();
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1727
    void (*handler)();
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1728
#ifdef HAS_SIGACTION
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1729
    struct sigaction act, oldAct;
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1730
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1731
252
  1732
    if (__isSmallInteger(signalNumber)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1733
     && ((sigNr = _intVal(signalNumber)) > 0)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1734
     &&  (sigNr <= SIG_LIMIT)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1735
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1736
	 * standard signals are forced into standard handlers
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1737
	 * - all others go into general signalInterrupt
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1738
	 */
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1739
#if defined(SIGPOLL) && defined(SIGIO)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1740
	if (sigNr == SIGPOLL)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1741
	    sigNr = SIGIO;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1742
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1743
	switch (sigNr) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1744
	    case SIGINT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1745
	    case SIGQUIT:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1746
		handler = userInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1747
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1748
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1749
	    case SIGFPE:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1750
		handler = fpExceptionInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1751
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1752
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1753
	    case SIGPIPE:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1754
		handler = signalPIPEInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1755
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1756
#ifdef SIGBUS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1757
	    case SIGBUS:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1758
		handler = signalBUSInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1759
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1760
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1761
	    case SIGSEGV:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1762
		handler = signalSEGVInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1763
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1764
#ifdef SIGIO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1765
	    case SIGIO:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1766
		handler = ioInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1767
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1768
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1769
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1770
#ifdef CHILD_SIGNAL
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1771
	    case CHILD_SIGNAL:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1772
		handler = signalChildInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1773
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1774
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1775
	    case SIGALRM:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1776
		handler = timerInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1777
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1778
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1779
	    default:
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1780
		handler = signalInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1781
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1782
	}
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1783
#ifdef HAS_SIGACTION
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1784
	act.sa_flags = SA_RESTART;
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1785
	act.sa_mask = 0;
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1786
	act.sa_handler = function;
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1787
	sigaction(sigNr, &act, &oldAct);
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1788
#else
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1789
	signal(sigNr, handler);
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1790
#endif
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1791
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1792
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1793
	 * maybe, we should return the old enable-status
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1794
	 * as boolean here ...
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1795
	 */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1796
	RETURN (self);
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1797
    }
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1798
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1799
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1800
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1801
     this error is triggered on non-integer argument, or
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1802
     if the signal number is not in the valid range (1..NSIG)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1803
    "
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1804
    self primitiveFailed
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1805
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1806
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1807
enableUserInterrupts
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1808
    "enable userInterrupt (^C) handling;
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1809
     when enabled, ^C in the terminal window will send the message
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1810
     'userInterrupt' to the UserInterruptHandler object."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1811
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1812
    ^ self enableSignal:(self sigINT)
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1813
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1814
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1815
enableQuitInterrupts
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1816
    "enable quitInterrupt (usually ^\) handling, and make it a userinterrupt.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1817
     (the default will dump core and exit - which is not a good idea for
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1818
      end-user applications ...)"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1819
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1820
    ^ self enableSignal:(self sigQUIT)
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1821
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1822
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1823
disableUserInterrupts
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1824
    "disable userInterrupt processing;
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  1825
     when disabled, no ^C processing takes place.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1826
     Use this only for debugged stand-alone applications, since
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1827
     no exit to the debugger is possible with user interrupts disabled.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1828
     Be WARNED."
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1829
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1830
    ^ self disableSignal:(self sigINT)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1831
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1832
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1833
enableFpExceptionInterrupts
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1834
    "enable floating point exception interrupts (if the
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1835
     architecture supports it).
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1836
     after enabling, fpu-exceptions will send the message 
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1837
     'fpuExceptionInterrupt' to the FPUExceptionInterruptHandler object."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1838
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1839
    ^ self enableSignal:(self sigFP)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1840
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1841
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1842
enableHardSignalInterrupts
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1843
    "enable hard signal exception interrupts (trap, buserror & segm. violation).
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1844
     after enabling, these exceptions will send the message 
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1845
     'signalInterrupt' to the SignalInterruptHandler object."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1846
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1847
%{  /* NOCONTEXT */
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1848
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1849
    extern void signalPIPEInterrupt();
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1850
#ifdef SIGBUS
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1851
    extern void signalBUSInterrupt();
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  1852
#endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1853
    extern void signalSEGVInterrupt();
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1854
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1855
    signal(SIGPIPE, signalPIPEInterrupt);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1856
#ifdef SIGBUS
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1857
    signal(SIGBUS,  signalBUSInterrupt);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1858
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1859
    signal(SIGSEGV, signalSEGVInterrupt);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1860
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1861
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1862
10
claus
parents: 5
diff changeset
  1863
enableIOInterruptsOn:fd
claus
parents: 5
diff changeset
  1864
    "turn on IO interrupts for a filedescriptor"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1865
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1866
%{  /* NOCONTEXT */
10
claus
parents: 5
diff changeset
  1867
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1868
    int ret, flags, f;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1869
    extern void ioInterrupt();
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1870
    static int firstCall = 1;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1871
10
claus
parents: 5
diff changeset
  1872
#if defined(F_GETFL) && defined(F_SETFL)
claus
parents: 5
diff changeset
  1873
# if defined(FASYNC)
252
  1874
    if (__isSmallInteger(fd)) {
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1875
	if (firstCall) {
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1876
	    firstCall = 0;
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1877
#  ifdef SIGIO
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1878
	    signal(SIGIO, ioInterrupt);
10
claus
parents: 5
diff changeset
  1879
#  endif
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1880
#  ifdef SIGPOLL
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1881
	    signal(SIGPOLL, ioInterrupt);
10
claus
parents: 5
diff changeset
  1882
#  endif
101
b26288c3a005 *** empty log message ***
claus
parents: 95
diff changeset
  1883
#  ifdef SIGURG
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1884
	    signal(SIGURG, ioInterrupt);
101
b26288c3a005 *** empty log message ***
claus
parents: 95
diff changeset
  1885
#  endif
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1886
	}
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1887
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1888
	f = _intVal(fd);
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1889
	flags = fcntl(f, F_GETFL, 0);
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1890
	/*
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1891
	 * if already set, there is no need for this syscall ...
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1892
	 */
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1893
	if (flags & FASYNC) {
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1894
	    ret = flags;
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1895
	} else {
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1896
	    ret = fcntl(f, F_SETFL, flags | FASYNC);
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1897
	    if (ret >= 0) ret = flags;
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1898
	}
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1899
	RETURN ( _MKSMALLINT(ret) );
10
claus
parents: 5
diff changeset
  1900
    }
claus
parents: 5
diff changeset
  1901
# endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1902
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1903
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1904
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1905
     this error is triggered on non-integer argument
101
b26288c3a005 *** empty log message ***
claus
parents: 95
diff changeset
  1906
     or if the system does not support SIGIO
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1907
    "
10
claus
parents: 5
diff changeset
  1908
    self primitiveFailed
claus
parents: 5
diff changeset
  1909
!
claus
parents: 5
diff changeset
  1910
claus
parents: 5
diff changeset
  1911
disableIOInterruptsOn:fd
claus
parents: 5
diff changeset
  1912
    "turn off IO interrupts for a filedescriptor"
claus
parents: 5
diff changeset
  1913
claus
parents: 5
diff changeset
  1914
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  1915
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1916
    int ret, flags, f;
10
claus
parents: 5
diff changeset
  1917
claus
parents: 5
diff changeset
  1918
#if defined(F_GETFL) && defined(F_SETFL)
claus
parents: 5
diff changeset
  1919
# if defined(FASYNC)
252
  1920
    if (__isSmallInteger(fd)) {
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1921
	f = _intVal(fd);
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1922
	flags = fcntl(f, F_GETFL, 0);
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1923
	/*
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1924
	 * if already clear, there is no need for this syscall ...
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1925
	 */
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1926
	if (flags & FASYNC) {
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1927
	    ret = fcntl(f, F_SETFL, flags & ~FASYNC);
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1928
	    if (ret >= 0) ret = flags;
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1929
	} else {
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1930
	    ret = flags;
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1931
	}
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  1932
	RETURN ( _MKSMALLINT(ret) );
10
claus
parents: 5
diff changeset
  1933
    }
claus
parents: 5
diff changeset
  1934
# endif
claus
parents: 5
diff changeset
  1935
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1936
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1937
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1938
     this error is triggered on non-integer argument
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  1939
     or if the OS does not support IO interrupts.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1940
    "
10
claus
parents: 5
diff changeset
  1941
    self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1942
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1943
2
claus
parents: 1
diff changeset
  1944
enableChildSignalInterrupts
claus
parents: 1
diff changeset
  1945
    "enable childSignal interrupts 
claus
parents: 1
diff changeset
  1946
     (SIGCHLD, if the architecture supports it).
claus
parents: 1
diff changeset
  1947
     after enabling, these signals will send the message 
claus
parents: 1
diff changeset
  1948
     'childSignalInterrupt' to the ChildSignalInterruptHandler object."
claus
parents: 1
diff changeset
  1949
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1950
    ^ self enableSignal:(self sigCHLD)
2
claus
parents: 1
diff changeset
  1951
!
claus
parents: 1
diff changeset
  1952
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1953
startSpyTimer
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1954
    "trigger a spyInterrupt, to be signalled after some short (virtual) time.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1955
     This is used by MessageTally for profiling.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1956
     Should be changed to use real profiling timer if available.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1957
     On systems, where no virtual timer is available, use the real timer
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  1958
     (which is of course less correct)"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1959
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1960
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1961
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1962
    extern void spyInterrupt();
10
claus
parents: 5
diff changeset
  1963
#if defined(ITIMER_VIRTUAL)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1964
    struct itimerval dt;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1965
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1966
    dt.it_interval.tv_sec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1967
    dt.it_interval.tv_usec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1968
    dt.it_value.tv_sec = 0;
2
claus
parents: 1
diff changeset
  1969
    dt.it_value.tv_usec = 1000;   /* 1000 Hz */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1970
    setitimer(ITIMER_VIRTUAL, &dt, 0);
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  1971
# ifndef xxxSYSV4
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1972
#  if defined(BSD) || defined(HAS_SIGSETMASK)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1973
    sigsetmask(0);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1974
#  endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1975
# endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1976
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1977
# ifdef SIGVTALRM
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1978
    signal(SIGVTALRM, spyInterrupt);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1979
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1980
    signal(SIGALRM, spyInterrupt);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1981
# endif
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1982
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1983
    RETURN (true);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1984
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1985
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1986
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1987
    ^ false
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1988
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1989
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1990
stopSpyTimer
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1991
    "stop spy timing - disable spy timer"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1992
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1993
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1994
10
claus
parents: 5
diff changeset
  1995
#if defined(ITIMER_VIRTUAL)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1996
    struct itimerval dt;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1997
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1998
    dt.it_interval.tv_sec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1999
    dt.it_interval.tv_usec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2000
    dt.it_value.tv_sec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2001
    dt.it_value.tv_usec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2002
    setitimer(ITIMER_VIRTUAL, &dt, 0);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2003
    RETURN (true);
10
claus
parents: 5
diff changeset
  2004
#endif
claus
parents: 5
diff changeset
  2005
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2006
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2007
    ^ false
10
claus
parents: 5
diff changeset
  2008
!
claus
parents: 5
diff changeset
  2009
claus
parents: 5
diff changeset
  2010
enableTimer:millis
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2011
    "trigger a timerInterrupt, to be signalled after some (real) time."
10
claus
parents: 5
diff changeset
  2012
claus
parents: 5
diff changeset
  2013
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  2014
claus
parents: 5
diff changeset
  2015
    extern void timerInterrupt();
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2016
10
claus
parents: 5
diff changeset
  2017
#if defined(ITIMER_REAL)
claus
parents: 5
diff changeset
  2018
    struct itimerval dt;
claus
parents: 5
diff changeset
  2019
claus
parents: 5
diff changeset
  2020
    dt.it_interval.tv_sec = 0;
claus
parents: 5
diff changeset
  2021
    dt.it_interval.tv_usec = 0;
claus
parents: 5
diff changeset
  2022
    dt.it_value.tv_sec = _intVal(millis) / 1000;
claus
parents: 5
diff changeset
  2023
    dt.it_value.tv_usec = (_intVal(millis) % 1000) * 1000;  
claus
parents: 5
diff changeset
  2024
    setitimer(ITIMER_REAL, &dt, 0);
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2025
# ifndef xxxSYSV4
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2026
#  if defined(BSD) || defined(HAS_SIGSETMASK)
10
claus
parents: 5
diff changeset
  2027
    sigsetmask(0);
claus
parents: 5
diff changeset
  2028
#  endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2029
# endif
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2030
    signal(SIGALRM, timerInterrupt);
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2031
    RETURN (true);
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2032
#endif
10
claus
parents: 5
diff changeset
  2033
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2034
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2035
    ^ false
10
claus
parents: 5
diff changeset
  2036
!
claus
parents: 5
diff changeset
  2037
claus
parents: 5
diff changeset
  2038
disableTimer
claus
parents: 5
diff changeset
  2039
    "disable timer interrupt"
claus
parents: 5
diff changeset
  2040
claus
parents: 5
diff changeset
  2041
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  2042
claus
parents: 5
diff changeset
  2043
#if defined(ITIMER_REAL)
claus
parents: 5
diff changeset
  2044
    struct itimerval dt;
claus
parents: 5
diff changeset
  2045
claus
parents: 5
diff changeset
  2046
    dt.it_interval.tv_sec = 0;
claus
parents: 5
diff changeset
  2047
    dt.it_interval.tv_usec = 0;
claus
parents: 5
diff changeset
  2048
    dt.it_value.tv_sec = 0;
claus
parents: 5
diff changeset
  2049
    dt.it_value.tv_usec = 0;
claus
parents: 5
diff changeset
  2050
    setitimer(ITIMER_REAL, &dt, 0);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2051
    RETURN (true);
10
claus
parents: 5
diff changeset
  2052
#endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2053
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2054
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  2055
    ^ false
123
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2056
!
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2057
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2058
operatingSystemSignal:signalNumber
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2059
    "return the signal to be raised when an 
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2060
     operatingSystem-signal occurs, or nil"
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2061
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2062
    OSSignals notNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2063
	^ OSSignals at:signalNumber ifAbsent:[nil]
123
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2064
    ].
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2065
    ^ nil
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2066
!
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2067
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2068
operatingSystemSignal:signalNumber install:aSignal
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2069
    "install a signal to be raised when an operatingSystem-signal occurs"
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2070
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2071
    OSSignals isNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2072
	OSSignals := Array new:32
123
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2073
    ].
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  2074
    OSSignals at:signalNumber put:aSignal
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2075
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2076
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2077
!OperatingSystem class methodsFor:'time and date'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2078
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2079
getTimeLow
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2080
    "return low 16 bits of current time. 
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2081
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2082
     OBSOLETE: Dont use this method, use getTimeParts.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2083
     This method will not always return the correct time 
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2084
     if used together with getTimeHi, since a wrap between 
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2085
     the two getTimeXXX sends could occur.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2086
     WARNING: this method will vanish - dont use it."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2087
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2088
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2089
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2090
    RETURN ( _MKSMALLINT(time(0) & 0xFFFF) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2091
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2092
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2093
    "OperatingSystem getTimeLow"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2094
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2095
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2096
getTimeHi
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2097
    "return hi 16 bits of current time. 
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2098
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2099
     OBSOLETE: Dont use this method, use getTimeParts.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2100
     This method will NOT always return the correct time
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2101
     if used together with getTimeHi, since a wrap between 
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2102
     the two getTimeXXX sends could occur.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2103
     WARNING: this method will vanish - dont use it."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2104
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2105
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2106
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2107
    RETURN ( _MKSMALLINT((time(0) >> 16) & 0xFFFF) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2108
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2109
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2110
    "OperatingSystem getTimeHi"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2111
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2112
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2113
getTimeParts
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2114
    "return the current time as an array of 2 integers representing
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2115
     the current time (usually low 16bits / hi 16 bits) in some OS
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2116
     dependent way.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2117
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2118
     On unix, the values represent the seconds since 1970, on other
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2119
     systems this may be different.
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2120
     WARNING:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2121
       for portability, never use these values directly, but pass them
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2122
       to #computeTimeParts and/or #computeDatePartsOf:, which know how to 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2123
       interpret them.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2124
       Better yet, use Date>>today and Time>>now for ST-80 compatibility."
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2125
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2126
    |low hi|
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2127
%{
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2128
    int now;
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2129
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2130
    now = time(0);
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2131
    hi  = _MKSMALLINT((now >> 16) & 0xFFFF);
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2132
    low = _MKSMALLINT(now & 0xFFFF);
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2133
%}
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2134
.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2135
    ^ Array with:low with:hi
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2136
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2137
    "OperatingSystem getTimeParts"
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2138
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2139
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2140
getTimeInto:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2141
    "evaluate the argument aBlock, passing the time-parts of
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2142
     the current time as arguments.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2143
     See comment in 'OperatingSystem>>getTimeParts' on what to
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2144
     do with those parts."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2145
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2146
    |low hi|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2147
%{ 
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2148
    int now;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2149
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2150
    now = time(0);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2151
    hi  = _MKSMALLINT((now >> 16) & 0xFFFF);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2152
    low = _MKSMALLINT(now & 0xFFFF);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2153
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2154
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2155
    aBlock value:low value:hi
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2156
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2157
    "OperatingSystem getTimeInto:[:low :hi | low printNewline. hi printNewline]"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2158
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2159
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2160
getTime
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2161
    "return current Time in some OS dependent representation.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2162
     (on unix, its the seconds since 1970).
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2163
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2164
     WARNING: this is OperatingSystem dependent - for portable code,
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2165
     use getTimeParts and compute*PartsOf:and:for:.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2166
     Better yet, use Date>>today or Time>>now for fully ST-80 compatible code."
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2167
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2168
    OperatingSystem getTimeInto:[:low :hi | ^ hi*16r10000 + low]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2169
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2170
    "
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2171
     OperatingSystem getTime
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2172
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2173
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2174
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2175
computeDatePartsOf:timeParts for:aBlock
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2176
    "compute year, month and day from the ostime in timeParts,
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2177
     and evaluate the argument, a 3-arg block with these.
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2178
     Conversion is to localtime including any daylight saving adjustments."
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2179
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2180
     ^ self computeDatePartsOf:(timeParts at:1) and:(timeParts at:2) for:aBlock
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2181
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2182
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2183
computeTimePartsOf:timeParts for:aBlock
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2184
    "compute hour, minute and seconds from the ostime in timeParts,
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2185
     and evaluate the argument, a 3-arg block with these.
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2186
     Conversion is to localtime including any daylight saving adjustments."
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2187
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2188
     ^ self computeTimePartsOf:(timeParts at:1) and:(timeParts at:2) for:aBlock
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2189
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2190
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2191
computeDatePartsOf:timeLow and:timeHi for:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2192
    "compute year, month and day from the time-parts timeLow and
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2193
     timeHi and evaluate the argument, a 3-arg block with these.
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2194
     Conversion is to localtime including any daylight saving adjustments.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2195
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2196
     This method was added to avoid LargeInteger arithmetic and to be
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2197
     independent of how the OperatingSystem represents time;
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2198
     the time-parts expected are those returned by getTimeParts."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2199
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2200
    |year month day|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2201
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2202
    ((timeLow isMemberOf:SmallInteger) and:[timeHi isMemberOf:SmallInteger])
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2203
    ifFalse:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2204
	^ self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2205
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2206
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2207
    struct tm *tmPtr;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2208
    long t;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2209
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2210
    t = (_intVal(timeHi) << 16) | _intVal(timeLow);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2211
    tmPtr = localtime(&t);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2212
    year = _MKSMALLINT(tmPtr->tm_year + 1900);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2213
    month = _MKSMALLINT(tmPtr->tm_mon + 1);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2214
    day = _MKSMALLINT(tmPtr->tm_mday);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2215
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2216
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2217
    aBlock value:year value:month value:day
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2218
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2219
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2220
computeTimePartsOf:timeLow and:timeHi for:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2221
    "compute hours, minutes and seconds from the time-parts timeLow and
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2222
     timeHi and evaluate the argument, a 3-arg block with these.
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2223
     Conversion is to localtime including any daylight saving adjustments.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2224
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2225
     This method was added to avoid LargeInteger arithmetic and to be
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2226
     independent of how the OperatingSystem represents time;
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2227
     the time-parts expected are those returned by getTimeParts."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2228
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2229
    |hours minutes seconds|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2230
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2231
    ((timeLow isMemberOf:SmallInteger) and:[timeHi isMemberOf:SmallInteger])
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2232
    ifFalse:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2233
	^ self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2234
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2235
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2236
    struct tm *tmPtr;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2237
    long t;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2238
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2239
    t = (_intVal(timeHi) << 16) | _intVal(timeLow);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2240
    tmPtr = localtime(&t);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2241
    hours = _MKSMALLINT(tmPtr->tm_hour);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2242
    minutes = _MKSMALLINT(tmPtr->tm_min);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2243
    seconds = _MKSMALLINT(tmPtr->tm_sec);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2244
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2245
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2246
    aBlock value:hours value:minutes value:seconds
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2247
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2248
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2249
computeTimeAndDateFrom:timeParts
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2250
    "given an Array containing the OS-dependent time, return an Array
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2251
     containing year, month, day, hour, minute and seconds.
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2252
     Conversion is to localtime including any daylight saving adjustments."
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2253
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2254
    |low hi year month day hours minutes seconds ret|
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2255
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2256
    low := timeParts at:1.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2257
    hi := timeParts at:2.
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2258
%{
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2259
    struct tm *tmPtr;
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2260
    long t;
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2261
252
  2262
    if (__bothSmallInteger(low, hi)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2263
	t = (_intVal(hi) << 16) | _intVal(low);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2264
	tmPtr = localtime(&t);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2265
	hours = _MKSMALLINT(tmPtr->tm_hour);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2266
	minutes = _MKSMALLINT(tmPtr->tm_min);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2267
	seconds = _MKSMALLINT(tmPtr->tm_sec);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2268
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2269
	year = _MKSMALLINT(tmPtr->tm_year + 1900);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2270
	month = _MKSMALLINT(tmPtr->tm_mon + 1);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2271
	day = _MKSMALLINT(tmPtr->tm_mday);
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2272
    }
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2273
%}.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2274
    year notNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2275
	"I would love to have SELF-like inline objects ..."
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2276
	ret := Array new:6.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2277
	ret at:1 put:year.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2278
	ret at:2 put:month.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2279
	ret at:3 put:day.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2280
	ret at:4 put:hours.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2281
	ret at:5 put:minutes.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2282
	ret at:6 put:seconds.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2283
	^ ret
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2284
    ].
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2285
    ^ self primitiveFailed
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2286
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2287
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2288
computeTimePartsFromYear:y month:m day:d hour:h minute:min seconds:s
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2289
    "return an Array containing the OS-dependent time for the given
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2290
     time and day. The arguments are assumed to be in localtime including
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2291
     any daylight saving adjustings."
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2292
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2293
    |low hi|
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2294
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2295
%{
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2296
    struct tm tm;
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2297
    long t;
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2298
252
  2299
    if (__bothSmallInteger(y, m) 
  2300
     && __bothSmallInteger(d, h)
  2301
     && __bothSmallInteger(min, s)) {
  2302
	tm.tm_hour = __intVal(h);
  2303
	tm.tm_min = __intVal(min);
  2304
	tm.tm_sec = __intVal(s);
  2305
  2306
	tm.tm_year = __intVal(y) - 1900;
  2307
	tm.tm_mon = __intVal(m) - 1;
  2308
	tm.tm_mday = __intVal(d);
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2309
	tm.tm_isdst = -1;
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2310
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2311
	t = mktime(&tm);
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2312
	low = _MKSMALLINT(t & 0xFFFF);
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2313
	hi = _MKSMALLINT((t >> 16) & 0xFFFF);
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2314
    }
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2315
%}.
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2316
    low notNil ifTrue:[
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2317
	^ Array with:low with:hi
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2318
    ].    
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2319
    ^ self primitiveFailed
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2320
!
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2321
275
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2322
maximumMillisecondTimeDelta
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2323
    "this returns the maximum delta supported by millisecondCounter
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2324
     based methods. The returned value is half the value at which the
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2325
     timer wraps."
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2326
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2327
%{  /* NOCONTEXT */
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2328
    RETURN ( _MKSMALLINT(0x0FFFFFFF) );
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2329
%}
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2330
!
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  2331
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2332
getMillisecondTime
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2333
    "This returns the millisecond timers value. 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2334
     The range is limited to 0..1fffffff (i.e. the SmallInteger range) to avoid
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2335
     LargeInteger arithmetic when doing timeouts and delays.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2336
     SInce this value is wrapping around in regular intervals, this can only be used for 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2337
     short relative time deltas.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2338
     Use the millisecondTimeXXX:-methods to compare and add time deltas - these know about the wrap.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2339
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2340
     BAD DESIGN:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2341
	This should be changed to return some instance of RelativeTime,
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2342
	and these computations moved there.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2343
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2344
     Dont use this method in application code since it is an internal (private)
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2345
     interface. For compatibility with ST-80, use Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2346
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2347
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2348
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2349
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2350
    long t;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2351
#if !defined(HAS_GETTIMEOFDAY) && defined(SYSV) && defined(HZ)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2352
    /* 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2353
     * sys5 time
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2354
     */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2355
    long ticks;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2356
    struct tms tb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2357
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2358
    ticks = times(&tb);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2359
    t = (ticks * 1000) / HZ;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2360
#else /* assume HAS_GETTIMEOFDAY */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2361
    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2362
     * bsd time
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2363
     */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2364
    struct timeval tb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2365
    struct timezone tzb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2366
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2367
    gettimeofday(&tb, &tzb);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2368
    t = tb.tv_sec*1000 + tb.tv_usec/1000;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2369
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2370
    RETURN ( _MKSMALLINT(t & 0x1FFFFFFF) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2371
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2372
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2373
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2374
millisecondTimeDeltaBetween:msTime1 and:msTime2
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2375
    "subtract two millisecond times (such as returned getMillisecondTime)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2376
     and return the difference. Since milli-times wrap (at 16r01FFFFFFF), 
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2377
     some special handling is built-in here.
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2378
     The returned value is msTime1 - msTime2. The returned value is invalid
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2379
     if the delta is >= 0x10000000.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2380
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2381
     This should really be moved to some RelativeTime class."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2382
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2383
    (msTime1 > msTime2) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2384
	^ msTime1 - msTime2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2385
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2386
    ^ msTime1 + 16r10000000 - msTime2
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2387
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2388
    "
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2389
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:1   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2390
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:(16 / 3)  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2391
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:1000   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2392
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2393
     OperatingSystem millisecondTimeDeltaBetween:0 and:16r0FFFFFFF  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2394
     OperatingSystem millisecondTimeDeltaBetween:(13/3) and:16r0FFFFFFF     
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2395
     OperatingSystem millisecondTimeDeltaBetween:999 and:16r0FFFFFFF       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2396
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2397
     OperatingSystem millisecondTime:0 isAfter:16r0FFFFFFF    
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2398
     OperatingSystem millisecondTime:(13/3) isAfter:16r0FFFFFFF   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2399
     OperatingSystem millisecondTime:999 isAfter:16r0FFFFFFF       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2400
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2401
     OperatingSystem millisecondTime:0 isAfter:0          
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2402
     OperatingSystem millisecondTime:(13/3) isAfter:0  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2403
     OperatingSystem millisecondTime:999 isAfter:0       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2404
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2405
     OperatingSystem millisecondTime:1 isAfter:0        
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2406
     OperatingSystem millisecondTime:(13/3) isAfter:2
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2407
     OperatingSystem millisecondTime:999 isAfter:900       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2408
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2409
     |t1 t2|
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2410
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2411
     t1 := Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2412
     (Delay forMilliseconds:1) wait.   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2413
     t2 := Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2414
     OperatingSystem millisecondTimeDeltaBetween:t2 and:t1 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2415
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2416
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2417
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2418
millisecondTime:msTime1 isAfter:msTime2
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2419
    "return true if msTime1 is after msTime2, false if not.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2420
     The two arguments are supposed to be millisecond times 
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2421
     (such as returned getMillisecondTime) which wrap at 16r1FFFFFFF.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2422
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2423
     This should really be moved to some RelativeTime class."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2424
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2425
    (msTime1 > msTime2) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2426
	((msTime1 - msTime2) >= 16r10000000) ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2427
	    ^ false
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2428
	].
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2429
	^ true
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2430
    ].
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2431
    ((msTime2 - msTime1) > 16r10000000) ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2432
	^ true
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2433
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2434
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2435
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2436
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2437
millisecondTimeAdd:msTime1 and:msTime2
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2438
    "Add two millisecond times (such as returned getMillisecondTime).
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2439
     The returned value is msTime1 + msTime2 where a wrap occurs at:16r1FFFFFFF.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2440
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2441
     This should really be moved to some RelativeTime class."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2442
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2443
    |sum|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2444
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2445
    sum := msTime1 + msTime2.
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2446
    (sum > 16r1FFFFFFF) ifTrue:[^ sum - 16r20000000].
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2447
    (sum < 0) ifTrue:[^ sum + 16r20000000].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2448
    ^ sum
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2449
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2450
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2451
millisecondDelay:millis
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2452
    "delay execution for millis milliseconds or until the next event
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2453
     arrives.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2454
     All threads will sleep for the duration, but interrupts are
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2455
     still handled. Better use a Delay, to only delay the calling
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2456
     thread"
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2457
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2458
    self selectOnAnyReadable:nil
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2459
		    writable:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2460
		   exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2461
		 withTimeOut:millis
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2462
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2463
    "
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2464
     OperatingSystem millisecondDelay:2000
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2465
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2466
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2467
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2468
sleep:numberOfSeconds
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2469
    "cease any action for some time. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2470
     Not really useful since not even low-prio processes and interrupt
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2471
     handling will run during the sleep.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2472
     Use either OperatingSystem>>millisecondDelay: (which makes all
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2473
     threads sleep, but handles interrupts) or use a Delay (which makes
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2474
     only the calling thread sleep)."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2475
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2476
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2477
252
  2478
    if (__isSmallInteger(numberOfSeconds)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2479
	sleep(_intVal(numberOfSeconds));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2480
	RETURN ( self );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2481
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2482
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2483
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2484
     argument not integer
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2485
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2486
    self primitiveFailed
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2487
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2488
    "
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2489
     OperatingSystem sleep:2
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2490
    "
10
claus
parents: 5
diff changeset
  2491
! !
claus
parents: 5
diff changeset
  2492
claus
parents: 5
diff changeset
  2493
!OperatingSystem class methodsFor:'waiting for events'!
claus
parents: 5
diff changeset
  2494
claus
parents: 5
diff changeset
  2495
setBlocking:aBoolean on:fd
claus
parents: 5
diff changeset
  2496
    "set/clear the blocking attribute - if set (which is the default)
claus
parents: 5
diff changeset
  2497
     a read on the fileDescriptor will block until data is available.
claus
parents: 5
diff changeset
  2498
     If cleared, a read operation will immediately return with a value of
claus
parents: 5
diff changeset
  2499
     nil."
claus
parents: 5
diff changeset
  2500
claus
parents: 5
diff changeset
  2501
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  2502
claus
parents: 5
diff changeset
  2503
    int ret, flags;
claus
parents: 5
diff changeset
  2504
    int savInt;
claus
parents: 5
diff changeset
  2505
claus
parents: 5
diff changeset
  2506
#if defined(F_GETFL) && defined(F_SETFL)
claus
parents: 5
diff changeset
  2507
# if defined(FNDELAY)
252
  2508
    if (__isSmallInteger(fd)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2509
	flags = fcntl(_intVal(fd), F_GETFL, 0);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2510
	if (aBoolean == true) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2511
	    ret = fcntl(_intVal(fd), F_SETFL, flags & ~FNDELAY);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2512
	} else {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2513
	    ret = fcntl(_intVal(fd), F_SETFL, flags | FNDELAY);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2514
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2515
	if (ret >= 0) ret = flags;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2516
	RETURN ( _MKSMALLINT(ret) );
10
claus
parents: 5
diff changeset
  2517
    }
claus
parents: 5
diff changeset
  2518
# endif
claus
parents: 5
diff changeset
  2519
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2520
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2521
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2522
     fd argument not integer
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2523
    "
10
claus
parents: 5
diff changeset
  2524
    self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2525
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2526
10
claus
parents: 5
diff changeset
  2527
readCheck:fd
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2528
    "return true, if data is available on a filedescriptor (i.e. read
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2529
     is possible without blocking)"
10
claus
parents: 5
diff changeset
  2530
claus
parents: 5
diff changeset
  2531
    (self selectOnAnyReadable:(Array with:fd)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2532
		     writable:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2533
		    exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2534
		  withTimeOut:0) == fd
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2535
	ifTrue:[^ true].
10
claus
parents: 5
diff changeset
  2536
    ^ false
claus
parents: 5
diff changeset
  2537
!
claus
parents: 5
diff changeset
  2538
claus
parents: 5
diff changeset
  2539
writeCheck:fd
claus
parents: 5
diff changeset
  2540
    "return true, if filedescriptor can be written without blocking"
claus
parents: 5
diff changeset
  2541
claus
parents: 5
diff changeset
  2542
    (self selectOnAnyReadable:nil
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2543
		     writable:(Array with:fd)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2544
		    exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2545
		  withTimeOut:0) == fd
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2546
	ifTrue:[^ true].
10
claus
parents: 5
diff changeset
  2547
    ^ false
claus
parents: 5
diff changeset
  2548
!
claus
parents: 5
diff changeset
  2549
claus
parents: 5
diff changeset
  2550
selectOn:fd withTimeOut:millis
claus
parents: 5
diff changeset
  2551
    "wait for aFileDesriptor to become ready; timeout after t milliseconds.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2552
     Return true, if i/o ok, false if timed-out or interrupted.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2553
     With 0 as timeout argument, this can be used to check for availability
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2554
     of read-data.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2555
     Experimental."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2556
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2557
    ^ self selectOnAnyReadable:(Array with:fd)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2558
		      writable:(Array with:fd)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2559
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2560
		   withTimeOut:millis
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2561
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2562
10
claus
parents: 5
diff changeset
  2563
selectOn:fd1 and:fd2 withTimeOut:millis
claus
parents: 5
diff changeset
  2564
    "wait for any fd to become ready; timeout after t milliseconds.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2565
     A zero timeout-time will immediately return (i.e. poll).
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2566
     Return fd if i/o ok, nil if timed-out or interrupted.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2567
     Obsolete:
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2568
	This is a leftover method and will vanish."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2569
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2570
    ^ self selectOnAnyReadable:(Array with:fd1 with:fd2)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2571
		      writable:(Array with:fd1 with:fd2)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2572
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2573
		   withTimeOut:millis
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2574
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2575
10
claus
parents: 5
diff changeset
  2576
selectOnAnyReadable:fdArray withTimeOut:millis
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2577
    "wait for any fd in fdArray (an Array of integers) to become ready for 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2578
     reading. Timeout after t milliseconds. An empty set will always wait.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2579
     A zero timeout-time will immediately return (i.e. poll).
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2580
     Return first ready fd if i/o ok, nil if timed-out or interrupted.
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2581
     Experimental."
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2582
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2583
    ^ self selectOnAnyReadable:fdArray 
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2584
		      writable:nil 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2585
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2586
		   withTimeOut:millis
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2587
!
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2588
10
claus
parents: 5
diff changeset
  2589
selectOnAny:fdArray withTimeOut:millis
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2590
    "wait for any fd in fdArray (an Array of integers) to become ready;
10
claus
parents: 5
diff changeset
  2591
     timeout after t milliseconds. An empty set will always wait.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2592
     Return first ready fd if i/o ok, nil if timed-out or interrupted.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2593
     Experimental."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2594
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2595
    ^ self selectOnAnyReadable:fdArray
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2596
		      writable:fdArray
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2597
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2598
		   withTimeOut:millis
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2599
! 
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2600
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2601
selectOnAnyReadable:readFdArray writable:writeFdArray exception:exceptFdArray withTimeOut:millis
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2602
    "wait for any fd in readFdArray (an Array of integers) to become ready for 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2603
     reading, writeFdArray to become ready for writing, or exceptFdArray to 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2604
     arrive exceptional data (i.e. out-of-band data).
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2605
     Timeout after t milliseconds or, if the timeout time is 0, immediately..
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2606
     Empty fd-sets will always wait. Zero time can be used to poll file-
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2607
     descriptors (i.e. to check if I/O possible without blocking).
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2608
     Return first ready fd if I/O ok, nil if timed-out or interrupted."
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2609
10
claus
parents: 5
diff changeset
  2610
    |rcount wcount ecount|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2611
51
9b7ae5e18f3e *** empty log message ***
claus
parents: 42
diff changeset
  2612
    (readFdArray notNil and:[readFdArray class ~~ Array]) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2613
	^ self error:'argument must be nil or an Array'
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2614
    ].
51
9b7ae5e18f3e *** empty log message ***
claus
parents: 42
diff changeset
  2615
    (writeFdArray notNil and:[writeFdArray class ~~ Array]) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2616
	^ self error:'argument must be nil or an Array'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2617
    ].
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2618
    (exceptFdArray notNil and:[exceptFdArray class ~~ Array]) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2619
	^ self error:'argument must be nil or an Array'
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2620
    ].
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2621
    rcount := readFdArray size.
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  2622
    wcount := writeFdArray size.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2623
    ecount := exceptFdArray size.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2624
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2625
    fd_set rset, wset, eset;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2626
    int t, f, maxF, i, lX, bX;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2627
    struct timeval wt;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2628
    OBJ fd, retFd;
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2629
    int ret;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2630
252
  2631
    if (__isSmallInteger(millis)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2632
	FD_ZERO(&rset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2633
	FD_ZERO(&wset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2634
	FD_ZERO(&eset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2635
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2636
	maxF = -1;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2637
	for (i=0; i<_intVal(rcount);i++) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2638
	    fd = _ArrayInstPtr(readFdArray)->a_element[i];
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2639
	    if (fd != nil) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2640
		f = _intVal(fd);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2641
		if ((f >= 0) && (f < FD_SETSIZE)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2642
		    FD_SET(f, &rset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2643
		    if (f > maxF) maxF = f;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2644
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2645
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2646
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2647
	for (i=0; i<_intVal(wcount);i++) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2648
	    fd = _ArrayInstPtr(writeFdArray)->a_element[i];
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2649
	    if (fd != nil) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2650
		f = _intVal(fd);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2651
		if ((f >= 0) && (f < FD_SETSIZE)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2652
		    FD_SET(f, &wset);       
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2653
		    if (f > maxF) maxF = f;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2654
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2655
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2656
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2657
	for (i=0; i<_intVal(ecount);i++) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2658
	    fd = _ArrayInstPtr(exceptFdArray)->a_element[i];
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2659
	    if (fd != nil) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2660
		f = _intVal(fd);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2661
		if ((f >= 0) && (f < FD_SETSIZE)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2662
		    FD_SET(f, &eset);       
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2663
		    if (f > maxF) maxF = f;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2664
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2665
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2666
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2667
	t = _intVal(millis);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2668
	wt.tv_sec = t / 1000;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2669
	wt.tv_usec = (t % 1000) * 1000;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2670
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2671
#ifdef nonoIRIX5
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2672
	do {
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2673
	    errno = 0;
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2674
	    ret = select(maxF+1, &rset, &wset, &eset, &wt);
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2675
	} while ((ret < 0) && (errno == EINTR));
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2676
#else
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2677
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2678
# define TRY_THIS
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2679
# ifdef TRY_THIS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2680
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2681
	 * make certain, that interrupt gets us out of the select
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2682
	 */
234
f03db82ccdd1 errnot cleanup
claus
parents: 216
diff changeset
  2683
	__immediateInterrupt__ = 1;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2684
	errno = 0;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2685
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2686
	    ret = select(maxF+1, &rset, &wset, &eset, &wt);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2687
	} while ((ret < 0) && (errno == EINTR));
234
f03db82ccdd1 errnot cleanup
claus
parents: 216
diff changeset
  2688
	__immediateInterrupt__ = 0;
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2689
# else
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2690
	ret = select(maxF+1, &rset, &wset, &eset, &wt);
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  2691
# endif
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2692
#endif
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2693
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2694
	if (ret > 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2695
	    for (i=0; i <= maxF; i++) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2696
		if (FD_ISSET(i, &rset)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2697
		 || FD_ISSET(i, &wset)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2698
		 || FD_ISSET(i, &eset)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2699
		    RETURN ( _MKSMALLINT(i) );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2700
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2701
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2702
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2703
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2704
	 * return nil (means time expired)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2705
	 */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2706
	RETURN ( nil );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2707
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2708
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2709
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2710
     timeout argument not integer
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2711
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2712
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2713
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2714
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2715
!OperatingSystem class methodsFor:'executing commands'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2716
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2717
fork
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2718
    "fork a new (HEAVY-weight) unix process.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2719
     Dont confuse this with Block>>fork, which creates 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2720
     lightweight smalltalk processes. This method will return
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2721
     0 to the child process, abd a non-zero number (which is the childs
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2722
     unix-process-id) to the parent (original) process."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2723
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2724
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2725
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2726
    int pid;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2727
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2728
    pid = fork();
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2729
    RETURN ( _MKSMALLINT(pid) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2730
%}
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2731
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2732
     |id|
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2733
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2734
     id := OperatingSystem fork.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2735
     id == 0 ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2736
	OperatingSystem exit
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2737
     ]
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2738
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2739
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2740
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2741
exec:aPath withArguments:argArray
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2742
    "execute the unix command specified by the argument, aPath, with
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2743
     arguments in argArray (no arguments, if nil).
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2744
     If successful, this method does not return and smalltalk is gone.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2745
     If not sucessfull, false is returned. Normal use is with fork."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2746
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2747
%{
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2748
    char **argv;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2749
    int nargs, i;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2750
    OBJ arg;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2751
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2752
    if (__isString(aPath) && ((argArray == nil) || __isArray(argArray))) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2753
	nargs = argArray == nil ? 0 : _arraySize(argArray);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2754
	argv = (char **) malloc(sizeof(char *) * (nargs + 1));
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2755
	if (argv) {
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2756
	    for (i=0; i < nargs; i++) {
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2757
		arg = _ArrayInstPtr(argArray)->a_element[i];
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2758
		if (__isString(arg)) {
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2759
		    argv[i] = (char *) _stringVal(arg);
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  2760
		}
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2761
	    }
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2762
	    argv[i] = NULL;
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2763
	    execv(_stringVal(aPath), argv);
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2764
	    /* should not be reached */
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2765
	    free(argv);
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2766
	    RETURN ( false );
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2767
	}
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2768
    }
245
  2769
%}.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2770
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2771
     path-argument not string or
245
  2772
     argArray not an array/nil or
  2773
     malloc failed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2774
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2775
    self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2776
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2777
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2778
     |id|
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2779
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2780
     id := OperatingSystem fork.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2781
     id == 0 ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2782
	"I am the child"
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2783
	OperatingSystem exec:'/bin/sh' withArguments:'sh -c ls -l'.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2784
	"not reached"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2785
     ]
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2786
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2787
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2788
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2789
executeCommand:aCommandString
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2790
    "execute the unix command specified by the argument, aCommandString.
85
claus
parents: 77
diff changeset
  2791
     Return true if successful, false otherwise. 
claus
parents: 77
diff changeset
  2792
     Smalltalk is suspended, while the command is executing.
claus
parents: 77
diff changeset
  2793
     The return value of the system()-call is available in the variable
claus
parents: 77
diff changeset
  2794
     LastExecStatus (which is zero after successful execution); this value
claus
parents: 77
diff changeset
  2795
     consists of the reason for termination (0=normal) in the upper 8bits and,
claus
parents: 77
diff changeset
  2796
     iff it was a normal return, the value passed to exit() in the low 8bits."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2797
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2798
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2799
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2800
    int status;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2801
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  2802
    if (__isString(aCommandString)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2803
	status = system((char *) _stringVal(aCommandString));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2804
	OperatingSystem_LastExecStatus = _MKSMALLINT(status);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2805
	if (status == 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2806
	    RETURN ( true );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2807
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2808
	RETURN ( false );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2809
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2810
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2811
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2812
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2813
85
claus
parents: 77
diff changeset
  2814
    "
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2815
     OperatingSystem executeCommand:'pwd'. 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2816
     OperatingSystem lastExecStatus printNL.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2817
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2818
     OperatingSystem executeCommand:'ls -l'. 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2819
     OperatingSystem lastExecStatus printNL.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2820
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2821
     OperatingSystem executeCommand:'invalidCommand'. 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2822
     (OperatingSystem lastExecStatus printStringRadix:16) printNL.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2823
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2824
     OperatingSystem executeCommand:'rm /tmp/foofoofoofoo'. 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  2825
     (OperatingSystem lastExecStatus printStringRadix:16) printNL.
85
claus
parents: 77
diff changeset
  2826
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2827
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2828
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2829
!OperatingSystem class methodsFor:'file access'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2830
10
claus
parents: 5
diff changeset
  2831
getCharacter
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2832
    "read a character from keyboard - 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2833
     this is a blocking low-level read, provided for debugger 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2834
     and fatal conditions. Use Stdin or (even better) the event 
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2835
     mechanisms provided."
10
claus
parents: 5
diff changeset
  2836
claus
parents: 5
diff changeset
  2837
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  2838
claus
parents: 5
diff changeset
  2839
    RETURN ( _MKSMALLINT(getchar()) );
claus
parents: 5
diff changeset
  2840
%}
claus
parents: 5
diff changeset
  2841
!
claus
parents: 5
diff changeset
  2842
2
claus
parents: 1
diff changeset
  2843
fileSeparator
claus
parents: 1
diff changeset
  2844
    "return the character used to separate names in a path.
claus
parents: 1
diff changeset
  2845
     This character differs for MSDOS and other systems,
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2846
     (but those are currently not supported - so this is some
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2847
      preparation for the future)"
2
claus
parents: 1
diff changeset
  2848
claus
parents: 1
diff changeset
  2849
    ^ $/
claus
parents: 1
diff changeset
  2850
!
claus
parents: 1
diff changeset
  2851
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2852
parentDirectoryName
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2853
    "return the name used to refer to parent directories.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2854
     In MSDOS, Unix and other systems this is '..', but maybe different
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2855
     for other systems.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2856
     (but those are currently not supported - so this is some
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2857
      preparation for the future)"
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2858
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2859
    ^ '..'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2860
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2861
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  2862
caseSensitiveFilenames
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2863
    "return true, if the OS has caseSensitive file naming.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2864
     On MSDOS, this will return false. Since this is for Unix, we
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2865
     return true."
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2866
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2867
    ^ true
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2868
!
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2869
2
claus
parents: 1
diff changeset
  2870
baseNameOf:aPathString
claus
parents: 1
diff changeset
  2871
    "return the baseName of the argument, aPathString
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2872
     - thats the file/directory name without leading parent-dirs
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2873
     (i.e. OperatingSystem baseNameOf:'/usr/lib/st/file' -> 'file'
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2874
       and OperatingSystem baseNameOf:'/usr/lib' -> lib).
2
claus
parents: 1
diff changeset
  2875
     This method does not check if the path is valid 
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2876
     (i.e. if these directories really exist & is readable)."
2
claus
parents: 1
diff changeset
  2877
claus
parents: 1
diff changeset
  2878
    |prev index sep|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2879
2
claus
parents: 1
diff changeset
  2880
    sep := self fileSeparator.
claus
parents: 1
diff changeset
  2881
    ((aPathString size == 1) and:[(aPathString at:1) == sep]) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2882
	^ aPathString
2
claus
parents: 1
diff changeset
  2883
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2884
    prev := 1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2885
    [true] whileTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2886
	index := aPathString indexOf:sep startingAt:prev.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2887
	index == 0 ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2888
	    ^ aPathString copyFrom:prev
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2889
	].
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2890
	prev := index + 1
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2891
    ]
2
claus
parents: 1
diff changeset
  2892
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2893
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2894
     OperatingSystem baseNameOf:'/fee/foo/bar'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2895
     OperatingSystem baseNameOf:'foo/bar'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2896
     OperatingSystem baseNameOf:'../../foo/bar'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2897
     OperatingSystem baseNameOf:'hello'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2898
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2899
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2900
2
claus
parents: 1
diff changeset
  2901
directoryNameOf:aPathString
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2902
    "return the directoryName of the argument, aPath
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2903
     - thats the name of the directory where aPath is
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2904
     (i.e. OperatingSystem directoryNameOf:'/usr/lib/st/file' -> '/usr/lib/st'
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2905
       and OperatingSystem directoryNameOf:'/usr/lib' -> /usr').
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2906
     This method does not check if the path is valid
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2907
     (i.e. if these directories really exist & are readable)."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2908
2
claus
parents: 1
diff changeset
  2909
    |last index sep sepString|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2910
2
claus
parents: 1
diff changeset
  2911
    sep := self fileSeparator.
claus
parents: 1
diff changeset
  2912
    sepString := sep asString.
claus
parents: 1
diff changeset
  2913
    (aPathString = sepString) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2914
	"
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2915
	 the trivial '/' case
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2916
	"
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2917
	^ aPathString
2
claus
parents: 1
diff changeset
  2918
    ].
claus
parents: 1
diff changeset
  2919
    (aPathString startsWith:sepString) ifFalse:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2920
	(aPathString endsWith:sepString) ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2921
	    ^ aPathString copyTo:(aPathString size - 1)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2922
	].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2923
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2924
    last := 1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2925
    [true] whileTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2926
	index := aPathString indexOf:sep startingAt:(last + 1).
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2927
	index == 0 ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2928
	    (last == 1) ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2929
		(aPathString startsWith:sepString) ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2930
		    ^ sepString
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2931
		].
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2932
		^ '.'
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2933
	    ].
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2934
"
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2935
	    (aPathString startsWith:sepString) ifFalse:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2936
		(aPathString startsWith:('..' , sepString)) ifFalse:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2937
		    ^ './' , (aPathString copyTo:(last - 1))
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2938
		]
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2939
	    ].
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2940
"
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2941
	    ^ aPathString copyTo:(last - 1)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2942
	].
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2943
	last := index.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2944
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2945
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2946
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2947
     OperatingSystem directoryNameOf:'/fee/foo/bar'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2948
     OperatingSystem directoryNameOf:'foo/bar'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2949
     OperatingSystem directoryNameOf:'../../foo/bar'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2950
     OperatingSystem directoryNameOf:'bar'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2951
     OperatingSystem directoryNameOf:'/bar'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2952
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2953
!
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2954
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2955
pathNameOf:pathName
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2956
    "return the pathName of the argument, aPathString,
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2957
     - thats the full pathname of the directory, starting at '/'.
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2958
     This method needs the path to be valid
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2959
     (i.e. all directories must exist, be readable and executable).
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2960
     Notice: if symbolic links are involved, the result may look different
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2961
     from what you expect."
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2962
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2963
    |p path|
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2964
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2965
    "some systems have a convenient function for this ..."
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2966
%{  /* STACK: 16000 */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2967
#ifdef HAS_REALPATH
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2968
    char nameBuffer[MAXPATHLEN + 1];
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2969
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2970
    if (__isString(pathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2971
	if (realpath(_stringVal(pathName), nameBuffer)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2972
	    path = _MKSTRING(nameBuffer COMMA_CON);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2973
	}
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2974
    }
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2975
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2976
%}
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2977
.
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2978
    path isNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2979
	"have to fall back ..."
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2980
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2981
	p := PipeStream readingFrom:'cd ' , pathName , '; pwd'.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2982
	p isNil ifTrue:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2983
	    path := pathName
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2984
	] ifFalse:[
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2985
	    path := p nextLine.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2986
	    p close.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2987
	].
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2988
    ].
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2989
    ^ path.
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2990
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2991
    "
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2992
     OperatingSystem pathNameOf:'.'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2993
     OperatingSystem pathNameOf:'../smalltalk/../smalltalk'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2994
     OperatingSystem pathNameOf:'../../..'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2995
     OperatingSystem pathNameOf:'..'
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2996
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2997
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2998
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2999
isValidPath:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3000
    "return true, if 'aPathName' is a valid path name
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3001
     (i.e. the file or directory exists)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3002
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3003
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3004
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3005
    struct stat buf;
10
claus
parents: 5
diff changeset
  3006
    int ret;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3007
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3008
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3009
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3010
	    ret = stat((char *) _stringVal(aPathName), &buf);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3011
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3012
	RETURN ( ret ? false : true );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3013
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3014
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3015
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3016
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3017
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3018
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3019
isDirectory:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3020
    "return true, if 'aPathName' is a valid directory path name.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3021
     (i.e. exists and is a directory)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3022
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3023
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3024
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3025
    struct stat buf;
10
claus
parents: 5
diff changeset
  3026
    int ret;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3027
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3028
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3029
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3030
	    ret = stat((char *) _stringVal(aPathName), &buf);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3031
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3032
	if ((ret < 0) || ((buf.st_mode & S_IFMT) != S_IFDIR)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3033
	    RETURN ( false );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3034
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3035
	RETURN ( true );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3036
    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3037
%}.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3038
    self primitiveFailed
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3039
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3040
    "an alternative implementation would be:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3041
	^ (self infoOf:aPathName) at:#type == #directory
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3042
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3043
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3044
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3045
isReadable:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3046
    "return true, if the file/dir 'aPathName' is readable."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3047
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3048
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3049
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3050
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3051
	if (access(_stringVal(aPathName), R_OK) == 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3052
	    RETURN ( true );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3053
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3054
	OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3055
	RETURN ( false );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3056
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3057
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3058
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3059
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3060
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3061
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3062
isWritable:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3063
    "return true, if the given file is writable"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3064
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3065
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3066
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3067
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3068
	if (access(_stringVal(aPathName), W_OK) == 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3069
	    RETURN ( true );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3070
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3071
	OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3072
	RETURN ( false );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3073
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3074
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3075
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3076
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3077
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3078
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3079
isExecutable:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3080
    "return true, if the given file is executable"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3081
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3082
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3083
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3084
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3085
	if (access(_stringVal(aPathName), X_OK) == 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3086
	    RETURN ( true );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3087
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3088
	OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3089
	RETURN ( false );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3090
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3091
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3092
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3093
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3094
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3095
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3096
infoOf:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3097
    "return an dictionary filled with info for the file 'aPathName';
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3098
     info is: (type->t mode->n uid->u gid->g size->s id->ino).
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3099
     return nil if such a file does not exist. A dictionary is returned,
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3100
     since we might need to add more info in the future without affecting
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3101
     existing applications."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3102
2
claus
parents: 1
diff changeset
  3103
    |info type mode uid gid size id atimeLow atimeHi mtimeLow mtimeHi|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3104
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3105
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3106
    struct stat buf;
10
claus
parents: 5
diff changeset
  3107
    int ret;
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  3108
    OBJ tSym;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3109
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3110
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3111
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3112
	    ret = stat((char *) _stringVal(aPathName), &buf);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3113
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3114
	if (ret < 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3115
	    OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3116
	    RETURN ( nil );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3117
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3118
	switch (buf.st_mode & S_IFMT) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3119
	    case S_IFDIR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3120
		tSym = @symbol(directory);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3121
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3122
	    case S_IFCHR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3123
		tSym = @symbol(characterSpecial);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3124
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3125
	    case S_IFBLK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3126
		tSym = @symbol(blockSpecial);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3127
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3128
	    case S_IFREG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3129
		tSym = @symbol(regular);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3130
		break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3131
#ifdef S_IFLNK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3132
	    case S_IFLNK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3133
		tSym = @symbol(symbolicLink);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3134
		break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3135
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3136
#ifdef S_IFSOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3137
	    case S_IFSOCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3138
		tSym = @symbol(socket);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3139
		break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3140
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3141
#ifdef S_IFIFO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3142
	    case S_IFIFO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3143
		tSym = @symbol(fifo);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3144
		break;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3145
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3146
	    default:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3147
		tSym = @symbol(unknown);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3148
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3149
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3150
	type = tSym;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3151
	mode = _MKSMALLINT(buf.st_mode & 0777);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3152
	uid = _MKSMALLINT(buf.st_uid);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3153
	gid = _MKSMALLINT(buf.st_gid);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3154
	size = _MKSMALLINT(buf.st_size);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3155
	id = _MKSMALLINT(buf.st_ino);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3156
	atimeLow = _MKSMALLINT(buf.st_atime & 0xFFFF);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3157
	atimeHi = _MKSMALLINT((buf.st_atime >> 16) & 0xFFFF);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3158
	mtimeLow = _MKSMALLINT(buf.st_mtime & 0xFFFF);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3159
	mtimeHi = _MKSMALLINT((buf.st_mtime >> 16) & 0xFFFF);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3160
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3161
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3162
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3163
    mode notNil ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3164
	info := IdentityDictionary new.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3165
	info at:#type put:type.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3166
	info at:#mode put:mode.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3167
	info at:#uid put:uid.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3168
	info at:#gid put:gid.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3169
	info at:#size put:size.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3170
	info at:#id put:id.
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3171
	info at:#accessTime       put:(AbsoluteTime fromOSTimeLow:atimeLow and:atimeHi).
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3172
	info at:#modificationTime put:(AbsoluteTime fromOSTimeLow:mtimeLow and:mtimeHi).
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3173
	^ info
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3174
   ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3175
   self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3176
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3177
   "OperatingSystem infoOf:'/'"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3178
   "(OperatingSystem infoOf:'/') at:#uid"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3179
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3180
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3181
accessMaskFor:aSymbol
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3182
    "return the access bits mask for numbers as returned by 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3183
     OperatingSystem>>accessModeOf:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3184
     and expected by OperatingSystem>>changeAccessModeOf:to:.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3185
     Since these numbers are OS dependent, always use the mask
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3186
     (never hardcode 8rxxx into your code)."
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3187
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3188
%{  /* NOCONTEXT */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3189
#   ifndef S_IRUSR
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3190
    /* posix systems should define these ... */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3191
#    define S_IRUSR 0400
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3192
#    define S_IWUSR 0200
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3193
#    define S_IXUSR 0100
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3194
#    define S_IRGRP 0040
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3195
#    define S_IWGRP 0020
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3196
#    define S_IXGRP 0010
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3197
#    define S_IROTH 0004
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3198
#    define S_IWOTH 0002
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3199
#    define S_IXOTH 0001
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3200
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3201
#   endif
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3202
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3203
    if (aSymbol == @symbol(readUser)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3204
	return _MKSMALLINT(S_IRUSR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3205
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3206
    if (aSymbol == @symbol(writeUser)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3207
	return _MKSMALLINT(S_IWUSR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3208
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3209
    if (aSymbol == @symbol(executeUser)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3210
	return _MKSMALLINT(S_IXUSR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3211
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3212
    if (aSymbol == @symbol(readGroup)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3213
	return _MKSMALLINT(S_IRGRP);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3214
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3215
    if (aSymbol == @symbol(writeGroup)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3216
	return _MKSMALLINT(S_IWGRP);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3217
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3218
    if (aSymbol == @symbol(executeGroup)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3219
	return _MKSMALLINT(S_IXGRP);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3220
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3221
    if (aSymbol == @symbol(readOthers)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3222
	return _MKSMALLINT(S_IROTH);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3223
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3224
    if (aSymbol == @symbol(writeOthers)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3225
	return _MKSMALLINT(S_IWOTH);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3226
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3227
    if (aSymbol == @symbol(executeOthers)) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3228
	return _MKSMALLINT(S_IXOTH);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3229
    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3230
%}.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3231
    self primitiveFailed
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3232
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3233
    "
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3234
     OperatingSystem accessMaskFor:#readUser
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3235
    "
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3236
!
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3237
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3238
accessModeOf:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3239
    "return a number representing access rights rwxrwxrwx for owner,
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3240
     group and others. Return nil if such a file does not exist.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3241
     Notice that the returned number is OS dependent - use the 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3242
     modeMasks as returned by OperatingSystem>>accessMaskFor:"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3243
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3244
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3245
     this could have been implemented as:
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3246
	(self infoOf:aPathName) at:#mode
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3247
     but for huge directory searches the code below is faster
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3248
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3249
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3250
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3251
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3252
    struct stat buf;
10
claus
parents: 5
diff changeset
  3253
    int ret;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3254
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3255
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3256
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3257
	    ret = stat((char *) _stringVal(aPathName), &buf);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3258
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3259
	if (ret < 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3260
	    OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3261
	    RETURN ( nil );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3262
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3263
	RETURN ( _MKSMALLINT(buf.st_mode & 0777) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3264
    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3265
%}.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3266
   self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3267
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3268
   "
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3269
    (OperatingSystem accessModeOf:'/') printStringRadix:8
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3270
   "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3271
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3272
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3273
changeAccessModeOf:aPathName to:modeBits
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3274
    "change the access rights of aPathName to the OS dependent modeBits.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3275
     You should construct this mask using accessMaskFor, to be OS
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3276
     independent. Return true if changed, 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3277
     false if such a file does not exist or change was not allowd."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3278
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3279
%{  /* NOCONTEXT */
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3280
    int ret;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3281
252
  3282
    if (__isString(aPathName) && __isSmallInteger(modeBits)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3283
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3284
	    ret = chmod((char *)_stringVal(aPathName), _intVal(modeBits));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3285
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3286
	if (ret < 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3287
	    OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3288
	    RETURN ( false );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3289
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3290
	RETURN ( true );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3291
    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3292
%}.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3293
    self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3294
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3295
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3296
timeOfLastChange:aPathName
2
claus
parents: 1
diff changeset
  3297
    "return the time, when the file was last changed"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3298
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3299
    |timeLow timeHi|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3300
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3301
    struct stat buf;
10
claus
parents: 5
diff changeset
  3302
    int ret;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3303
    time_t mtime;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3304
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3305
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3306
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3307
	    ret = stat((char *) _stringVal(aPathName), &buf);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3308
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3309
	if (ret >= 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3310
	    timeLow = _MKSMALLINT(buf.st_mtime & 0xFFFF);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3311
	    timeHi = _MKSMALLINT((buf.st_mtime >> 16) & 0xFFFF);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3312
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3313
	OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3314
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3315
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3316
.
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3317
    timeLow notNil ifTrue:[^ AbsoluteTime fromOSTimeLow:timeLow and:timeHi].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3318
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3319
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3320
    "
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3321
     OperatingSystem timeOfLastChange:'/'
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3322
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3323
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3324
2
claus
parents: 1
diff changeset
  3325
timeOfLastAccess:aPathName
claus
parents: 1
diff changeset
  3326
    "return the time, when the file was last accessed"
claus
parents: 1
diff changeset
  3327
claus
parents: 1
diff changeset
  3328
    |timeLow timeHi|
claus
parents: 1
diff changeset
  3329
%{
claus
parents: 1
diff changeset
  3330
    struct stat buf;
claus
parents: 1
diff changeset
  3331
    time_t mtime;
10
claus
parents: 5
diff changeset
  3332
    int ret;
2
claus
parents: 1
diff changeset
  3333
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3334
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3335
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3336
	    ret = stat((char *) _stringVal(aPathName), &buf);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3337
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3338
	if (ret >= 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3339
	    timeLow = _MKSMALLINT(buf.st_atime & 0xFFFF);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3340
	    timeHi = _MKSMALLINT((buf.st_atime >> 16) & 0xFFFF);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3341
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3342
	OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
2
claus
parents: 1
diff changeset
  3343
    }
claus
parents: 1
diff changeset
  3344
%}
claus
parents: 1
diff changeset
  3345
.
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3346
    timeLow notNil ifTrue:[^ AbsoluteTime fromOSTimeLow:timeLow and:timeHi].
2
claus
parents: 1
diff changeset
  3347
    self primitiveFailed
claus
parents: 1
diff changeset
  3348
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3349
    "
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3350
     OperatingSystem timeOfLastAccess:'/'
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  3351
    "
2
claus
parents: 1
diff changeset
  3352
!
claus
parents: 1
diff changeset
  3353
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3354
idOf:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3355
    "return the fileNumber (i.e. inode number) of a file"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3356
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3357
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3358
     this could have been implemented as:
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3359
	(self infoOf:aPathName) at:#id 
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3360
     but for huge directory searches the code below is faster
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3361
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3362
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3363
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3364
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3365
    struct stat buf;
10
claus
parents: 5
diff changeset
  3366
    int ret;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3367
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3368
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3369
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3370
	    ret = stat((char *) _stringVal(aPathName), &buf);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3371
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3372
	if (ret >= 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3373
	    RETURN (_MKSMALLINT(buf.st_ino));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3374
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3375
	OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3376
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3377
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3378
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3379
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3380
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3381
    "OperatingSystem idOf:'/'"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3382
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3383
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3384
typeOf:aPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3385
    "return the type of a file as a symbol"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3386
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3387
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3388
     this could have been implemented as:
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3389
	(self infoOf:aPathName) at:#type 
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3390
     but for huge directory searches the code below is faster
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3391
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3392
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3393
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3394
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3395
    struct stat buf;
10
claus
parents: 5
diff changeset
  3396
    int ret;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3397
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3398
    if (__isString(aPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3399
	do {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3400
	    ret = stat((char *) _stringVal(aPathName), &buf);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3401
	} while (ret < 0 && errno == EINTR);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3402
	if (ret < 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3403
	    OperatingSystem_LastErrorNumber = _MKSMALLINT(errno);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3404
	    RETURN ( nil );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3405
	}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3406
	switch (buf.st_mode & S_IFMT) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3407
	    case S_IFDIR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3408
		RETURN ( @symbol(directory) );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3409
	    case S_IFCHR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3410
		RETURN ( @symbol(characterSpecial) );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3411
	    case S_IFBLK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3412
		RETURN ( @symbol(blockSpecial) );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3413
	    case S_IFREG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3414
		RETURN ( @symbol(regular) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3415
#ifdef S_IFLNK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3416
	    case S_IFLNK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3417
		RETURN ( @symbol(symbolicLink) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3418
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3419
#ifdef S_IFSOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3420
	    case S_IFSOCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3421
		RETURN ( @symbol(socket) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3422
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3423
#ifdef S_IFIFO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3424
	    case S_IFIFO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3425
		RETURN ( @symbol(fifo) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3426
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3427
	    default:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3428
		RETURN ( @symbol(unknown) );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3429
	}
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3430
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3431
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3432
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3433
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3434
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3435
    "OperatingSystem typeOf:'/'"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3436
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3437
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3438
createDirectory:newPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3439
    "create a new directory with name 'newPathName'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3440
     Return true if successful, false if failed."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3441
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3442
    "since createDirectory is not used too often,
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3443
     you'll forgive me using mkdir ..."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3444
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3445
    ^ self executeCommand:('mkdir ' , newPathName)
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3446
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3447
    "OperatingSystem createDirectory:'foo'"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3448
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3449
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3450
recursiveCreateDirectory:dirName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3451
    "create a directory - with all parent dirs if needed.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3452
     Return true if successful, false otherwise. If false
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3453
     is returned, a partial created tree may be left,
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3454
     which is not cleaned-up here."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3455
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3456
    self createDirectory:dirName.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3457
    (self isDirectory:dirName) ifFalse:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3458
	(self recursiveCreateDirectory:(self directoryNameOf:dirName)) ifFalse:[^ false].
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3459
	^ self createDirectory:dirName
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3460
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3461
    ^ (self isDirectory:dirName)
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3462
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3463
    "OperatingSystem recursiveCreateDirectory:'foo/bar/baz'"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3464
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3465
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3466
removeFile:fullPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3467
    "remove the file named 'fullPathName'; return true if successful"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3468
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3469
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3470
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3471
    if (__isString(fullPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3472
	RETURN ( (unlink((char *) _stringVal(fullPathName)) >= 0) ? true : false );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3473
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3474
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3475
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3476
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3477
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3478
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3479
removeDirectory:fullPathName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3480
    "remove the directory named 'fullPathName'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3481
     Return true if successful, false if directory is not empty or no permission"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3482
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3483
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3484
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3485
    if (__isString(fullPathName)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3486
	RETURN ( (rmdir((char *) _stringVal(fullPathName)) >= 0) ? true : false );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3487
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3488
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3489
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3490
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3491
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3492
18
e0994bb28ef5 added recursive rmdir
claus
parents: 17
diff changeset
  3493
recursiveRemoveDirectory:fullPathName
e0994bb28ef5 added recursive rmdir
claus
parents: 17
diff changeset
  3494
    "remove the directory named 'fullPathName' and all contained files/directories.
e0994bb28ef5 added recursive rmdir
claus
parents: 17
diff changeset
  3495
     Return true if successful."
e0994bb28ef5 added recursive rmdir
claus
parents: 17
diff changeset
  3496
e0994bb28ef5 added recursive rmdir
claus
parents: 17
diff changeset
  3497
    ^ self executeCommand:('rm -rf ' , fullPathName)
e0994bb28ef5 added recursive rmdir
claus
parents: 17
diff changeset
  3498
!
e0994bb28ef5 added recursive rmdir
claus
parents: 17
diff changeset
  3499
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3500
linkFile:oldPath to:newPath
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3501
    "link the file 'oldPath' to 'newPath'. The link will be a hard link.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3502
     Return true if successful, false if not."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3503
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3504
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3505
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3506
    if (__isString(oldPath) && __isString(newPath)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3507
	RETURN ( (link((char *) _stringVal(oldPath), (char *) _stringVal(newPath)) >= 0) ?
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3508
				true : false );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3509
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3510
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3511
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3512
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3513
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3514
    "OperatingSystem linkFile:'foo' to:'bar'"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3515
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3516
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3517
renameFile:oldPath to:newPath
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3518
    "rename the file 'oldPath' to 'newPath'. 
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3519
     Return true if sucessfull, false if not"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3520
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3521
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3522
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3523
    if (__isString(oldPath) && __isString(newPath)) {
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  3524
#if defined(HAS_RENAME)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3525
	if (rename((char *) _stringVal(oldPath), (char *) _stringVal(newPath)) >= 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3526
	    RETURN ( true );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3527
	}
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3528
#else
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3529
	if (link((char *) _stringVal(oldPath), (char *) _stringVal(newPath)) >= 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3530
	    if (unlink((char *) _stringVal(oldPath)) >= 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3531
		RETURN ( true );
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3532
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3533
	    unlink((char *) _stringVal(newPath));
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3534
	}
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3535
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  3536
	RETURN ( false );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3537
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3538
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3539
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3540
    self primitiveFailed
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3541
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  3542
    "OperatingSystem renameFile:'foo' to:'bar'"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3543
! !