Unix.st
author Claus Gittinger <cg@exept.de>
Thu, 19 Dec 1996 17:21:04 +0100
changeset 2000 2c12eb609e05
parent 1991 6dc27b78da3e
child 2073 4c2bdfc668c9
permissions -rw-r--r--
commentary
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
798
90a518c71a7f recursiveRemoveDirectory does not print garbage to stderr any longer; computeDateAndTimeFrom: now returns the utcOffset
Stefan Vogel <sv@exept.de>
parents: 792
diff changeset
    14
	instanceVariableNames:''
90a518c71a7f recursiveRemoveDirectory does not print garbage to stderr any longer; computeDateAndTimeFrom: now returns the utcOffset
Stefan Vogel <sv@exept.de>
parents: 792
diff changeset
    15
	classVariableNames:'HostName DomainName LastErrorNumber LastExecStatus OSSignals
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 756
diff changeset
    16
		SlowFork ForkFailed ErrorSignal AccessDeniedErrorSignal
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
    17
		FileNotFoundErrorSignal LocaleInfo'
798
90a518c71a7f recursiveRemoveDirectory does not print garbage to stderr any longer; computeDateAndTimeFrom: now returns the utcOffset
Stefan Vogel <sv@exept.de>
parents: 792
diff changeset
    18
	poolDictionaries:''
90a518c71a7f recursiveRemoveDirectory does not print garbage to stderr any longer; computeDateAndTimeFrom: now returns the utcOffset
Stefan Vogel <sv@exept.de>
parents: 792
diff changeset
    19
	category:'System-Support'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
1991
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
    22
Object subclass:#FileStatusInfo
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
    23
	instanceVariableNames:'type mode uid gid size id accessed modified statusChanged path'
1966
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    24
	classVariableNames:''
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    25
	poolDictionaries:''
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    26
	privateIn:OperatingSystem
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    27
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    28
1991
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
    29
Object subclass:#OSProcessStatus
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
    30
	instanceVariableNames:'pid status code core'
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
    31
	classVariableNames:''
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
    32
	poolDictionaries:''
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
    33
	privateIn:OperatingSystem
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
    34
!
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
    35
437
claus
parents: 434
diff changeset
    36
!OperatingSystem primitiveDefinitions!
406
claus
parents: 384
diff changeset
    37
%{
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    38
#define UNIX_LIKE
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    39
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    40
#if defined(MSWINDOWS) || defined(OS2) || defined(MSDOS) || defined(WIN32)
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    41
# ifndef MSDOS_LIKE
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    42
#  define MSDOS_LIKE
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    43
# endif
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    44
# undef UNIX_LIKE
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    45
# ifdef i386
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    46
#  define _X86_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    47
# endif
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    48
#endif
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    49
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    50
#if defined(transputer)
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    51
# undef MSDOS_LIKE
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    52
# undef UNIX_LIKE
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    53
#endif
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
    54
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
    55
#if defined(_AIX)
439
claus
parents: 438
diff changeset
    56
# ifndef WANT_REALPATH
claus
parents: 438
diff changeset
    57
#  define WANT_REALPATH
claus
parents: 438
diff changeset
    58
# endif
513
0347f6d11d76 interruptable system() on AIX
Claus Gittinger <cg@exept.de>
parents: 512
diff changeset
    59
# ifndef WANT_SYSTEM
0347f6d11d76 interruptable system() on AIX
Claus Gittinger <cg@exept.de>
parents: 512
diff changeset
    60
#  define WANT_SYSTEM
0347f6d11d76 interruptable system() on AIX
Claus Gittinger <cg@exept.de>
parents: 512
diff changeset
    61
# endif
406
claus
parents: 384
diff changeset
    62
#endif
claus
parents: 384
diff changeset
    63
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
    64
#ifdef LINUX
1142
3964108b86ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1135
diff changeset
    65
  /* use inline string macros */
3964108b86ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1135
diff changeset
    66
# define __STRINGDEFS__
3964108b86ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1135
diff changeset
    67
# include <linuxIntern.h>
3964108b86ca *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1135
diff changeset
    68
439
claus
parents: 438
diff changeset
    69
# ifndef WANT_SYSTEM
claus
parents: 438
diff changeset
    70
#  define WANT_SYSTEM
claus
parents: 438
diff changeset
    71
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
    72
# define WANT_SHM
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
    73
#endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
    74
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
    75
#ifdef IRIX5
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
    76
# define WANT_SYSTEM
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
    77
#endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
    78
514
81fa80a953e2 system() now interruptable with ultrix
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
    79
#ifdef ultrix
81fa80a953e2 system() now interruptable with ultrix
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
    80
# define WANT_SYSTEM
81fa80a953e2 system() now interruptable with ultrix
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
    81
#endif
81fa80a953e2 system() now interruptable with ultrix
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
    82
515
43d76695a662 interruptable system() on hpux
Claus Gittinger <cg@exept.de>
parents: 514
diff changeset
    83
#ifdef hpux
43d76695a662 interruptable system() on hpux
Claus Gittinger <cg@exept.de>
parents: 514
diff changeset
    84
# define WANT_SYSTEM
43d76695a662 interruptable system() on hpux
Claus Gittinger <cg@exept.de>
parents: 514
diff changeset
    85
#endif
43d76695a662 interruptable system() on hpux
Claus Gittinger <cg@exept.de>
parents: 514
diff changeset
    86
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
    87
#ifdef solaris
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
    88
# define WANT_SYSTEM
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
    89
#endif
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
    90
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
    91
#if defined(SYSV4) && defined(i386) /* e.g. unixware */
520
9620f7dc79d2 interruptable system() on unixware - should now move WANT_SYSTEM into xxxIntern files
Claus Gittinger <cg@exept.de>
parents: 515
diff changeset
    92
# define WANT_SYSTEM
9620f7dc79d2 interruptable system() on unixware - should now move WANT_SYSTEM into xxxIntern files
Claus Gittinger <cg@exept.de>
parents: 515
diff changeset
    93
#endif
9620f7dc79d2 interruptable system() on unixware - should now move WANT_SYSTEM into xxxIntern files
Claus Gittinger <cg@exept.de>
parents: 515
diff changeset
    94
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    95
/*
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    96
 * notice: although many systems' include files
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    97
 * already block against multiple inclusion, some
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    98
 * do not. Therefore, this is done here again.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
    99
 * (it does not hurt)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   100
 */ 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   101
439
claus
parents: 438
diff changeset
   102
#ifdef WANT_REALPATH
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   103
439
claus
parents: 438
diff changeset
   104
# include <sys/param.h>
claus
parents: 438
diff changeset
   105
# define _SYS_PARAM_H_INCLUDED_
claus
parents: 438
diff changeset
   106
claus
parents: 438
diff changeset
   107
# include <errno.h>
claus
parents: 438
diff changeset
   108
# define _ERRNO_H_INCLUDED_
claus
parents: 438
diff changeset
   109
claus
parents: 438
diff changeset
   110
# include <sys/stat.h>
claus
parents: 438
diff changeset
   111
# define _SYS_STAT_H_INCLUDED_
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
   112
439
claus
parents: 438
diff changeset
   113
#endif /* WANT_REALPATH */
claus
parents: 438
diff changeset
   114
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   115
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   116
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   117
#ifdef WANT_SHM
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
   118
extern int shmctl(), shmget(), shmdt();
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
   119
extern char * shmat();
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
   120
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   121
# include <sys/types.h>
437
claus
parents: 434
diff changeset
   122
# define _SYS_TYPES_H_INCLUDED_
439
claus
parents: 438
diff changeset
   123
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   124
# include <sys/ipc.h>
437
claus
parents: 434
diff changeset
   125
# define _SYS_IPC_H_INCLUDED_
439
claus
parents: 438
diff changeset
   126
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   127
# include <sys/shm.h>
437
claus
parents: 434
diff changeset
   128
# define _SYS_SHM_H_INCLUDED_
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   129
439
claus
parents: 438
diff changeset
   130
#endif /* WANT_SHM */
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   131
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   132
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   133
#ifdef IRIX5
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   134
# include <sys/syssgi.h>
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   135
#endif
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   136
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   137
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   138
#ifdef transputer
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   139
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   140
# define unlink(f)      ((remove(f) == 0) ? 0 : -1)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   141
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   142
#else /* not transputer */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   143
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   144
# ifndef _SIGNAL_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   145
#  include <signal.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   146
#  define _SIGNAL_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   147
# endif
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   148
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   149
# ifdef SYSV
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   150
#  ifndef _SYS_TYPES_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   151
#   include <sys/types.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   152
#   define _SYS_TYPES_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   153
#  endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   154
#  ifndef _SYS_PARAM_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   155
#   include <sys/param.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   156
#   define _SYS_PARAM_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   157
#  endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   158
#  ifndef _SYS_TIMES_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   159
#   include <sys/times.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   160
#   define _SYS_TIMES_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   161
#  endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   162
#  ifndef _SYS_FILE_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   163
#   include <sys/file.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   164
#   define _SYS_FILE_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   165
#  endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   166
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   167
#  if ! defined(sco3_2)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   168
#   ifndef _UNISTD_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   169
#    include <unistd.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   170
#    define _UNISTD_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   171
#   endif
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   172
#  endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   173
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   174
#  if defined(isc3_2) || defined(sco3_2)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   175
#   ifndef _SYS_TIME_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   176
#    include <sys/time.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   177
#    define _SYS_TIME_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   178
#   endif
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   179
#  endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   180
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   181
#  if !defined(isc3_2)
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   182
#   if defined(PCS) && defined(mips)
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   183
#    include "/usr/include/bsd/sys/time.h"
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   184
#    include "/usr/include/sys/time.h"
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   185
#   else
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   186
#    ifndef _TIME_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   187
#     include <time.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   188
#     define _TIME_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   189
#    endif
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   190
#   endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   191
#  endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   192
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   193
#  if defined(isc3_2)
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   194
#   include <sys/bsdtypes.h>
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   195
#  endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   196
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   197
# else /* not SYSV */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   198
802
087384994c4a even worse
Claus Gittinger <cg@exept.de>
parents: 801
diff changeset
   199
#  ifdef MSDOS_LIKE
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   200
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   201
#   ifndef _SYS_TYPES_H_INCLUDED_
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   202
#    include <types.h>
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   203
#    define _SYS_TYPES_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   204
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   205
#   ifndef _TIME_H_INCLUDED_
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   206
#    include <C:\mstools\h\time.h>
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   207
#    define _TIME_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   208
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   209
#   ifndef _SYS_TIMEB_H_INCLUDED_
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   210
#    include <timeb.h>
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   211
#    define _SYS_TIMEB_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   212
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   213
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   214
#  else /* not MSDOS_like */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   215
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   216
#   ifndef _SYS_TIME_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   217
#    include <sys/time.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   218
#    define _SYS_TIME_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   219
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   220
#   ifndef _SYS_TYPES_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   221
#    include <sys/types.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   222
#    define _SYS_TYPES_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   223
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   224
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   225
#  endif /* not MSDOS */
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   226
# endif /* not SYSV */
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   227
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   228
# ifdef aix
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   229
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   230
#  ifndef _TIME_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   231
#   include <time.h>
914
d00401a9450e Fix syntax error (#defined -> #define).
Stefan Vogel <sv@exept.de>
parents: 855
diff changeset
   232
#   define _TIME_H_INCLUDED_
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   233
#  endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   234
#  ifndef _SYS_SELECT_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   235
#   include <sys/select.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   236
#   define _SYS_SELECT_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   237
#  endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   238
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   239
# endif /* aix */
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   240
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   241
# ifndef MSDOS_LIKE
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   242
#  include <pwd.h>
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   243
#  include <grp.h>
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   244
# endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   245
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   246
# ifndef _SYS_STAT_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   247
#  include <sys/stat.h>
1616
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
   248
#  define _SYS_STAT_H_INCLUDED_
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
   249
# endif
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
   250
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
   251
# ifndef _SYS_FILE_H_INCLUDED_
1633
dc4105e87116 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1632
diff changeset
   252
#  ifndef WIN32
dc4105e87116 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1632
diff changeset
   253
#   include <sys/file.h>
dc4105e87116 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1632
diff changeset
   254
#  endif
1616
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
   255
#  define _SYS_FILE_H_INCLUDED_
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   256
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   257
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   258
# ifndef _ERRNO_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   259
#  include <errno.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   260
#  define _ERRNO_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   261
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   262
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   263
# ifndef _STDIO_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   264
#  include <stdio.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   265
#  define _STDIO_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   266
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   267
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   268
# ifndef _FCNTL_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   269
#  include <fcntl.h>
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   270
#  define _FCNTL_H_INCLUDED_
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   271
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   272
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   273
# ifdef WIN32
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   274
#  define USE_TimerProc
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   275
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   276
#  undef INT
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   277
#  undef Array
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   278
#  undef Number
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   279
#  undef Method
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   280
#  undef Point
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   281
#  undef Rectangle
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   282
#  undef Block
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   283
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   284
/* #  include <windows.h> /* */
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   285
#  include <stdarg.h> /* */
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   286
#  include <windef.h> /* */
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   287
#  include <winbase.h> /* */
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   288
#  include <wingdi.h> /* */
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   289
#  include <winuser.h> /* */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   290
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   291
#  ifndef USE_TimerProc
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   292
#   include <mmsystem.h> /* */
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   293
#  else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   294
    static UINT w32TimerId;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   295
#  endif
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   296
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   297
#  ifdef __DEF_Array
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   298
#   define Array __DEF_Array
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   299
#  endif
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   300
#  ifdef __DEF_Number
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   301
#   define Number __DEF_Number
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   302
#  endif
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   303
#  ifdef __DEF_Method
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   304
#   define Method __DEF_Method
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   305
#  endif
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   306
#  ifdef __DEF_Point
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   307
#   define Point __DEF_Point
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   308
#  endif
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   309
#  ifdef __DEF_Block
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   310
#   define Block __DEF_Block
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   311
#  endif
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   312
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   313
#  define stat _stat
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   314
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   315
# endif /* WIN32 */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   316
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   317
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   318
# if defined(LINUX)
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   319
#  define HAS_LOCALECONV
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   320
# endif
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   321
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   322
# if defined (HAS_LOCALECONV)
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   323
#  ifndef _LOCALE_H_INCLUDED_
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   324
#   include <locale.h>
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   325
#   define _LOCALE_H_INCLUDED_
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   326
#  endif
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   327
# endif
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   328
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   329
/* 
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   330
 * posix systems should define these ... 
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   331
 * but on some (older) systems, they are not.
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   332
 */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   333
# ifndef S_IXUSR
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   334
#  ifdef S_IEXEC
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   335
#   define S_IXUSR S_IEXEC
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   336
#   define S_IXGRP (S_IEXEC>>3)
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   337
#   define S_IXOTH (S_IEXEC>>6)
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   338
#  endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   339
# endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   340
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   341
# ifndef S_IXUSR
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   342
#  define S_IXUSR 0100
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   343
#  define S_IXGRP 0010
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   344
#  define S_IXOTH 0001
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   345
# endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   346
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   347
# ifndef S_IRUSR
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   348
#  define S_IRUSR 0400
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   349
#  define S_IRGRP 0040
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   350
#  define S_IROTH 0004
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   351
# endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   352
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   353
# ifndef S_IWUSR
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   354
#  define S_IWUSR 0200
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   355
#  define S_IWGRP 0020
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   356
#  define S_IWOTH 0002
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   357
# endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   358
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   359
# ifndef MAXPATHLEN
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   360
#  ifndef MSDOS_LIKE
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   361
#   include <sys/param.h>
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   362
#  endif
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   363
#  ifndef MAXPATHLEN
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   364
#   ifdef FILENAME_MAX  /* i.e. MSDOS_LIKE */
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   365
#    define MAXPATHLEN FILENAME_MAX
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   366
#   else
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   367
#    define MAXPATHLEN 1024
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   368
#   endif
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   369
#  endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   370
# endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   371
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   372
# if defined(HAS_UNAME)
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   373
#  include <sys/utsname.h>
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   374
# endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   375
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
   376
# if defined(SYSV4)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
   377
#  include <stropts.h>
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
   378
# endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
   379
763
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   380
/*
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   381
 * sigaction dummies (you won't believe these call themself ``POSIX'' systems ...)
763
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   382
 */
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   383
# ifndef SA_RESTART
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   384
#  define SA_RESTART    0
763
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   385
# endif
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   386
# ifndef SA_SIGINFO
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   387
#  define SA_SIGINFO    0
763
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   388
# endif
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   389
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   390
# if defined(HAS_WAITPID) || defined(HAS_WAIT3)
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   391
#  include <sys/wait.h>
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   392
# endif
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   393
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
   394
# if defined(HAS_SYSINFO)
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
   395
#  include <sys/systeminfo.h>
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
   396
# endif
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
   397
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
   398
#endif /* not transputer */
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   399
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   400
/*
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   401
 * on some systems errno is a macro ... check for it here
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   402
 */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   403
#ifndef errno
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   404
 extern errno;
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   405
#endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   406
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   407
/*
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   408
 * some (old ?) systems do not define this ...
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   409
 */
675
f3461db7a0ee avoid a warning
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
   410
#if !defined(R_OK) && !defined(_AIX)
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   411
# define R_OK    4       /* Test for Read permission */ 
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   412
# define W_OK    2       /* Test for Write permission */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   413
# define X_OK    1       /* Test for eXecute permission */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   414
# define F_OK    0       /* Test for existence of File */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   415
#endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   416
832
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   417
#ifdef WIN32
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   418
# define SIGHANDLER_ARG int
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   419
#else
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   420
# define SIGHANDLER_ARG
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   421
#endif
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   422
1441
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   423
#ifdef sunos
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   424
# define NO_WAITPID
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   425
#endif
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   426
437
claus
parents: 434
diff changeset
   427
%}
claus
parents: 434
diff changeset
   428
! !
claus
parents: 434
diff changeset
   429
claus
parents: 434
diff changeset
   430
!OperatingSystem primitiveFunctions!
claus
parents: 434
diff changeset
   431
%{
claus
parents: 434
diff changeset
   432
claus
parents: 434
diff changeset
   433
/*
claus
parents: 434
diff changeset
   434
 * some systems' system() is broken in that it does not correctly 
claus
parents: 434
diff changeset
   435
 * handle EINTR and returns failure even though it actually succeeded. 
claus
parents: 434
diff changeset
   436
 * (LINUX is one of them)
claus
parents: 434
diff changeset
   437
 * Here is a fixed version. If you encounter EINTR returns from
claus
parents: 434
diff changeset
   438
 * OperatingSystem>>executeCommand, you ought to define WANT_SYSTEM
claus
parents: 434
diff changeset
   439
 * in the xxxIntern.h file to get this fixed version.
claus
parents: 434
diff changeset
   440
 *
claus
parents: 434
diff changeset
   441
 * As an added BONUS, this system() enables interrupts while waiting
claus
parents: 434
diff changeset
   442
 * for the child which enables other threads to continue.
507
a7780fc27ee9 mad system interuptable (needs WANT_SYSTEM to be defined in xxxIntern.h)
Claus Gittinger <cg@exept.de>
parents: 486
diff changeset
   443
 * (i.e. it is RT safe)
437
claus
parents: 434
diff changeset
   444
 */
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   445
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   446
#if defined(WANT_SYSTEM)
f74d003548dc system-fix
claus
parents: 424
diff changeset
   447
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   448
/* # define DPRINTF(x)     printf x */
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   449
# define DPRINTF(x)     /* nothing */
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   450
437
claus
parents: 434
diff changeset
   451
# ifndef _STDDEF_H_INCLUDED_
claus
parents: 434
diff changeset
   452
#  include <stddef.h>
claus
parents: 434
diff changeset
   453
#  define _STDDEF_H_INCLUDED_
claus
parents: 434
diff changeset
   454
# endif
claus
parents: 434
diff changeset
   455
claus
parents: 434
diff changeset
   456
# ifndef _STDLIB_H_INCLUDED_
claus
parents: 434
diff changeset
   457
#  include <stdlib.h>
claus
parents: 434
diff changeset
   458
#  define _STDLIB_H_INCLUDED_
claus
parents: 434
diff changeset
   459
# endif
claus
parents: 434
diff changeset
   460
claus
parents: 434
diff changeset
   461
# ifndef _UNISTD_H_INCLUDED_
claus
parents: 434
diff changeset
   462
#  include <unistd.h>
claus
parents: 434
diff changeset
   463
#  define _UNISTD_H_INCLUDED_
claus
parents: 434
diff changeset
   464
# endif
claus
parents: 434
diff changeset
   465
claus
parents: 434
diff changeset
   466
# ifndef _SYS_WAIT_H_INCLUDED
claus
parents: 434
diff changeset
   467
#  include <sys/wait.h>
claus
parents: 434
diff changeset
   468
#  define _SYS_WAIT_H_INCLUDED
claus
parents: 434
diff changeset
   469
# endif
claus
parents: 434
diff changeset
   470
claus
parents: 434
diff changeset
   471
# ifndef _SIGNAL_H_INCLUDED_
claus
parents: 434
diff changeset
   472
#  include <signal.h>
claus
parents: 434
diff changeset
   473
#  define _SIGNAL_H_INCLUDED_
claus
parents: 434
diff changeset
   474
# endif
claus
parents: 434
diff changeset
   475
claus
parents: 434
diff changeset
   476
# ifndef _SYS_TYPES_H_INCLUDED_
claus
parents: 434
diff changeset
   477
#  include <sys/types.h>
claus
parents: 434
diff changeset
   478
#  define _SYS_TYPES_H_INCLUDED_
claus
parents: 434
diff changeset
   479
# endif
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   480
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   481
# if (!defined(HAVE_GNU_LD) && !defined (__ELF__)) || !defined(LINUX)
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   482
#  define       __environ       environ
512
f440411a55e4 no redef warnings on LINUX
Claus Gittinger <cg@exept.de>
parents: 511
diff changeset
   483
#  if !defined(LINUX)
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   484
#   define      __sigemptyset   sigemptyset
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   485
#   define      __sigaction     sigaction
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   486
#   define      __sigaddset     sigaddset
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   487
#   define      __sigprocmask   sigprocmask
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   488
#   define      __execve        execve
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   489
#   define      __wait          wait
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   490
#   define      __waitpid       waitpid
674
fba47329ac9d fixed startProcess
Claus Gittinger <cg@exept.de>
parents: 670
diff changeset
   491
#   if defined(HAS_VFORK)
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   492
#    define     FORK            vfork
514
81fa80a953e2 system() now interruptable with ultrix
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
   493
#   else
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   494
#    define     FORK            fork
514
81fa80a953e2 system() now interruptable with ultrix
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
   495
#   endif
512
f440411a55e4 no redef warnings on LINUX
Claus Gittinger <cg@exept.de>
parents: 511
diff changeset
   496
#  endif /* ! LINUX */
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   497
   extern char **environ;
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   498
# endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
   499
f74d003548dc system-fix
claus
parents: 424
diff changeset
   500
# define        SHELL_PATH      "/bin/sh"       /* Path of the shell.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   501
# define        SHELL_NAME      "sh"            /* Name to give it.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   502
f74d003548dc system-fix
claus
parents: 424
diff changeset
   503
# ifndef        FORK
f74d003548dc system-fix
claus
parents: 424
diff changeset
   504
#  define       FORK    __fork
f74d003548dc system-fix
claus
parents: 424
diff changeset
   505
# endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
   506
f74d003548dc system-fix
claus
parents: 424
diff changeset
   507
# ifndef CONST
f74d003548dc system-fix
claus
parents: 424
diff changeset
   508
#  ifdef __GNUC__
f74d003548dc system-fix
claus
parents: 424
diff changeset
   509
#   define CONST const
f74d003548dc system-fix
claus
parents: 424
diff changeset
   510
#  else
f74d003548dc system-fix
claus
parents: 424
diff changeset
   511
#   define CONST /* nothing */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   512
#  endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
   513
# endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
   514
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
   515
static int
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   516
mySystem(line)
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   517
    register CONST char *line;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   518
{
f74d003548dc system-fix
claus
parents: 424
diff changeset
   519
    int status, save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   520
    pid_t pid;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   521
    struct sigaction sa, intr, quit;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   522
    sigset_t block, omask;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   523
f74d003548dc system-fix
claus
parents: 424
diff changeset
   524
    if (line == NULL)
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
   525
	return -1;
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   526
f74d003548dc system-fix
claus
parents: 424
diff changeset
   527
    sa.sa_handler = SIG_IGN;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   528
    sa.sa_flags = 0;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   529
    __sigemptyset (&sa.sa_mask);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   530
f74d003548dc system-fix
claus
parents: 424
diff changeset
   531
    if (__sigaction (SIGINT, &sa, &intr) < 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   532
	DPRINTF(("1: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   533
	return -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   534
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   535
    if (__sigaction (SIGQUIT, &sa, &quit) < 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   536
	save = errno;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   537
	(void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   538
	errno = save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   539
	DPRINTF(("2: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   540
	return -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   541
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   542
f74d003548dc system-fix
claus
parents: 424
diff changeset
   543
    __sigemptyset (&block);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   544
    __sigaddset (&block, SIGCHLD);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   545
    save = errno;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   546
    if (__sigprocmask(SIG_BLOCK, &block, &omask) < 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   547
	if (errno == ENOSYS)
f74d003548dc system-fix
claus
parents: 424
diff changeset
   548
	    errno = save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   549
	else {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   550
	    save = errno;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   551
	    (void) __sigaction(SIGINT, &intr, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   552
	    (void) __sigaction(SIGQUIT, &quit, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   553
	    errno = save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   554
	    DPRINTF(("3: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   555
	    return -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   556
	}
f74d003548dc system-fix
claus
parents: 424
diff changeset
   557
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   558
f74d003548dc system-fix
claus
parents: 424
diff changeset
   559
    pid = FORK ();
f74d003548dc system-fix
claus
parents: 424
diff changeset
   560
    if (pid == (pid_t) 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   561
	/* Child side.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   562
	CONST char *new_argv[4];
f74d003548dc system-fix
claus
parents: 424
diff changeset
   563
	new_argv[0] = SHELL_NAME;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   564
	new_argv[1] = "-c";
f74d003548dc system-fix
claus
parents: 424
diff changeset
   565
	new_argv[2] = line;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   566
	new_argv[3] = NULL;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   567
f74d003548dc system-fix
claus
parents: 424
diff changeset
   568
	/* Restore the signals.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   569
	(void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   570
	(void) __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   571
	(void) __sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   572
f74d003548dc system-fix
claus
parents: 424
diff changeset
   573
	/* Exec the shell.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   574
	(void) __execve (SHELL_PATH, (char *CONST *) new_argv, __environ);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   575
	_exit (127);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   576
    } else {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   577
	if (pid < (pid_t) 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   578
	    /* The fork failed.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   579
	    DPRINTF(("4: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   580
	    status = -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   581
	} else {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   582
	    /* Parent side.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   583
#ifdef  NO_WAITPID
f74d003548dc system-fix
claus
parents: 424
diff changeset
   584
	    pid_t child;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   585
f74d003548dc system-fix
claus
parents: 424
diff changeset
   586
	    do {
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
   587
		__BEGIN_INTERRUPTABLE__
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   588
		child = __wait (&status);
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   589
		__END_INTERRUPTABLE__
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
   590
		if (child < 0 && errno != EINTR) {
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   591
		    DPRINTF(("5: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   592
		    status = -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   593
		    break;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   594
		}
f74d003548dc system-fix
claus
parents: 424
diff changeset
   595
	    } while (child != pid);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   596
#else
f74d003548dc system-fix
claus
parents: 424
diff changeset
   597
	    pid_t child;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   598
f74d003548dc system-fix
claus
parents: 424
diff changeset
   599
	    /* claus: the original did not care for EINTR here ... */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   600
	    do {
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
   601
		__BEGIN_INTERRUPTABLE__
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   602
		child = __waitpid (pid, &status, 0);
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   603
		__END_INTERRUPTABLE__
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   604
	    } while ((child != pid) && (errno == EINTR));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   605
	    if (child != pid) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   606
		DPRINTF(("6: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   607
		status = -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   608
	    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   609
#endif /* NO_WAITPID */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   610
	}
f74d003548dc system-fix
claus
parents: 424
diff changeset
   611
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   612
    save = errno;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   613
    if ((__sigaction (SIGINT, &intr, (struct sigaction *) NULL)
f74d003548dc system-fix
claus
parents: 424
diff changeset
   614
     | __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL)
f74d003548dc system-fix
claus
parents: 424
diff changeset
   615
     | __sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL)) != 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   616
	if (errno == ENOSYS) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   617
	    errno = save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   618
	} else {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   619
	    status = -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   620
	    DPRINTF(("7: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   621
	}
f74d003548dc system-fix
claus
parents: 424
diff changeset
   622
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   623
f74d003548dc system-fix
claus
parents: 424
diff changeset
   624
    return status;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   625
}
1441
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   626
#else
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   627
# define __wait wait
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   628
#endif /* WANT_SYSTEM */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   629
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
   630
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   631
/*
f74d003548dc system-fix
claus
parents: 424
diff changeset
   632
 * some systems do not have realpath();
f74d003548dc system-fix
claus
parents: 424
diff changeset
   633
 * the alternative of reading from a 'pwp'-pipe
f74d003548dc system-fix
claus
parents: 424
diff changeset
   634
 * is way too slow. Here is a realpath for the rest of us.
440
claus
parents: 439
diff changeset
   635
 * define WANT_REALPATH in the xxxIntern-file to get it.
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   636
 */
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
   637
440
claus
parents: 439
diff changeset
   638
#if defined(HAS_REALPATH)
claus
parents: 439
diff changeset
   639
# undef WANT_REALPATH
claus
parents: 439
diff changeset
   640
#endif
claus
parents: 439
diff changeset
   641
#if !defined(HAS_GETWD) && !defined(HAS_GETCWD)
claus
parents: 439
diff changeset
   642
# undef WANT_REALPATH
claus
parents: 439
diff changeset
   643
#endif
claus
parents: 439
diff changeset
   644
claus
parents: 439
diff changeset
   645
#if defined(WANT_REALPATH)
406
claus
parents: 384
diff changeset
   646
claus
parents: 384
diff changeset
   647
# ifndef NULL
claus
parents: 384
diff changeset
   648
#  define NULL (char *)0
claus
parents: 384
diff changeset
   649
# endif
claus
parents: 384
diff changeset
   650
439
claus
parents: 438
diff changeset
   651
# define MAX_READLINKS 32
claus
parents: 438
diff changeset
   652
claus
parents: 438
diff changeset
   653
# ifndef MAXPATHLEN
claus
parents: 438
diff changeset
   654
#  define MAXPATHLEN     1024
claus
parents: 438
diff changeset
   655
# endif
406
claus
parents: 384
diff changeset
   656
claus
parents: 384
diff changeset
   657
static
claus
parents: 384
diff changeset
   658
char *realpath(path, resolved_path)
claus
parents: 384
diff changeset
   659
char *path;
claus
parents: 384
diff changeset
   660
char resolved_path [];
claus
parents: 384
diff changeset
   661
{
claus
parents: 384
diff changeset
   662
	char copy_path[MAXPATHLEN];
claus
parents: 384
diff changeset
   663
	char link_path[MAXPATHLEN];
claus
parents: 384
diff changeset
   664
	char *new_path = resolved_path;
claus
parents: 384
diff changeset
   665
	char *max_path;
claus
parents: 384
diff changeset
   666
	int readlinks = 0;
claus
parents: 384
diff changeset
   667
	int n;
claus
parents: 384
diff changeset
   668
claus
parents: 384
diff changeset
   669
	/* Make a copy of the source path since we may need to modify it. */
claus
parents: 384
diff changeset
   670
	strcpy(copy_path, path);
claus
parents: 384
diff changeset
   671
	path = copy_path;
claus
parents: 384
diff changeset
   672
	max_path = copy_path + MAXPATHLEN - 2;
claus
parents: 384
diff changeset
   673
	/* If it's a relative pathname use getwd for starters. */
claus
parents: 384
diff changeset
   674
	if (*path != '/') {
claus
parents: 384
diff changeset
   675
#ifdef HAS_GETCWD
claus
parents: 384
diff changeset
   676
		getcwd(new_path, MAXPATHLEN - 1);
claus
parents: 384
diff changeset
   677
#else
claus
parents: 384
diff changeset
   678
		getwd(new_path);
claus
parents: 384
diff changeset
   679
#endif
claus
parents: 384
diff changeset
   680
		new_path += strlen(new_path);
claus
parents: 384
diff changeset
   681
		if (new_path[-1] != '/')
claus
parents: 384
diff changeset
   682
			*new_path++ = '/';
claus
parents: 384
diff changeset
   683
	}
claus
parents: 384
diff changeset
   684
	else {
claus
parents: 384
diff changeset
   685
		*new_path++ = '/';
claus
parents: 384
diff changeset
   686
		path++;
claus
parents: 384
diff changeset
   687
	}
claus
parents: 384
diff changeset
   688
	/* Expand each slash-separated pathname component. */
claus
parents: 384
diff changeset
   689
	while (*path != '\0') {
claus
parents: 384
diff changeset
   690
		/* Ignore stray "/". */
claus
parents: 384
diff changeset
   691
		if (*path == '/') {
claus
parents: 384
diff changeset
   692
			path++;
claus
parents: 384
diff changeset
   693
			continue;
claus
parents: 384
diff changeset
   694
		}
claus
parents: 384
diff changeset
   695
		if (*path == '.') {
claus
parents: 384
diff changeset
   696
			/* Ignore ".". */
claus
parents: 384
diff changeset
   697
			if (path[1] == '\0' || path[1] == '/') {
claus
parents: 384
diff changeset
   698
				path++;
claus
parents: 384
diff changeset
   699
				continue;
claus
parents: 384
diff changeset
   700
			}
claus
parents: 384
diff changeset
   701
			if (path[1] == '.') {
claus
parents: 384
diff changeset
   702
				if (path[2] == '\0' || path[2] == '/') {
claus
parents: 384
diff changeset
   703
					path += 2;
claus
parents: 384
diff changeset
   704
					/* Ignore ".." at root. */
claus
parents: 384
diff changeset
   705
					if (new_path == resolved_path + 1)
claus
parents: 384
diff changeset
   706
						continue;
claus
parents: 384
diff changeset
   707
					/* Handle ".." by backing up. */
claus
parents: 384
diff changeset
   708
					while ((--new_path)[-1] != '/')
claus
parents: 384
diff changeset
   709
						;
claus
parents: 384
diff changeset
   710
					continue;
claus
parents: 384
diff changeset
   711
				}
claus
parents: 384
diff changeset
   712
			}
claus
parents: 384
diff changeset
   713
		}
claus
parents: 384
diff changeset
   714
		/* Safely copy the next pathname component. */
claus
parents: 384
diff changeset
   715
		while (*path != '\0' && *path != '/') {
claus
parents: 384
diff changeset
   716
			if (path > max_path) {
claus
parents: 384
diff changeset
   717
				errno = ENAMETOOLONG;
claus
parents: 384
diff changeset
   718
				return NULL;
claus
parents: 384
diff changeset
   719
			}
claus
parents: 384
diff changeset
   720
			*new_path++ = *path++;
claus
parents: 384
diff changeset
   721
		}
claus
parents: 384
diff changeset
   722
#ifdef S_IFLNK
claus
parents: 384
diff changeset
   723
		/* Protect against infinite loops. */
claus
parents: 384
diff changeset
   724
		if (readlinks++ > MAX_READLINKS) {
claus
parents: 384
diff changeset
   725
			errno = ELOOP;
claus
parents: 384
diff changeset
   726
			return NULL;
claus
parents: 384
diff changeset
   727
		}
claus
parents: 384
diff changeset
   728
		/* See if latest pathname component is a symlink. */
claus
parents: 384
diff changeset
   729
		*new_path = '\0';
claus
parents: 384
diff changeset
   730
		n = readlink(resolved_path, link_path, MAXPATHLEN - 1);
claus
parents: 384
diff changeset
   731
		if (n < 0) {
claus
parents: 384
diff changeset
   732
			/* EINVAL means the file exists but isn't a symlink. */
claus
parents: 384
diff changeset
   733
			if (errno != EINVAL)
claus
parents: 384
diff changeset
   734
				return NULL;
claus
parents: 384
diff changeset
   735
		}
claus
parents: 384
diff changeset
   736
		else {
claus
parents: 384
diff changeset
   737
			/* Note: readlink doesn't add the null byte. */
claus
parents: 384
diff changeset
   738
			link_path[n] = '\0';
claus
parents: 384
diff changeset
   739
			if (*link_path == '/')
claus
parents: 384
diff changeset
   740
				/* Start over for an absolute symlink. */
claus
parents: 384
diff changeset
   741
				new_path = resolved_path;
claus
parents: 384
diff changeset
   742
			else
claus
parents: 384
diff changeset
   743
				/* Otherwise back up over this component. */
claus
parents: 384
diff changeset
   744
				while (*(--new_path) != '/')
claus
parents: 384
diff changeset
   745
					;
claus
parents: 384
diff changeset
   746
			/* Safe sex check. */
claus
parents: 384
diff changeset
   747
			if (strlen(path) + n >= MAXPATHLEN) {
claus
parents: 384
diff changeset
   748
				errno = ENAMETOOLONG;
claus
parents: 384
diff changeset
   749
				return NULL;
claus
parents: 384
diff changeset
   750
			}
claus
parents: 384
diff changeset
   751
			/* Insert symlink contents into path. */
claus
parents: 384
diff changeset
   752
			strcat(link_path, path);
claus
parents: 384
diff changeset
   753
			strcpy(copy_path, link_path);
claus
parents: 384
diff changeset
   754
			path = copy_path;
claus
parents: 384
diff changeset
   755
		}
claus
parents: 384
diff changeset
   756
#endif /* S_IFLNK */
claus
parents: 384
diff changeset
   757
		*new_path++ = '/';
claus
parents: 384
diff changeset
   758
	}
claus
parents: 384
diff changeset
   759
	/* Delete trailing slash but don't whomp a lone slash. */
claus
parents: 384
diff changeset
   760
	if (new_path != resolved_path + 1 && new_path[-1] == '/')
claus
parents: 384
diff changeset
   761
		new_path--;
claus
parents: 384
diff changeset
   762
	/* Make sure it's null terminated. */
claus
parents: 384
diff changeset
   763
	*new_path = '\0';
claus
parents: 384
diff changeset
   764
	return resolved_path;
claus
parents: 384
diff changeset
   765
}
claus
parents: 384
diff changeset
   766
# define HAS_REALPATH
claus
parents: 384
diff changeset
   767
#endif /* WANT_REALPATH && not HAS_REALPATH */
claus
parents: 384
diff changeset
   768
%}
claus
parents: 384
diff changeset
   769
! !
claus
parents: 384
diff changeset
   770
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
   771
!OperatingSystem class methodsFor:'documentation'!
2
claus
parents: 1
diff changeset
   772
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   773
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   774
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   775
 COPYRIGHT (c) 1988 by Claus Gittinger
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   776
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   777
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   778
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   779
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   780
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   781
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   782
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   783
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   784
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   785
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   786
2
claus
parents: 1
diff changeset
   787
documentation
claus
parents: 1
diff changeset
   788
"
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   789
    this class realizes access to most (all ?) required operating system services;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   790
    some of it is very specific for unix, so do not depend on
1619
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   791
    things available here in your applications 
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   792
    - some may not be found in other OS's or be slightly different ...
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   793
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   794
    (On the other hand: I do not want to hide all features
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 756
diff changeset
   795
     from you - in some situations it MAY be interesting to be
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
   796
     able to get down to a select or fork system call easily (at least on Unix systems).
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   797
     You decide - portability vs. functionality)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   798
1286
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   799
    [Class variables:]
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   800
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   801
	HostName        <String>        remembered hostname
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   802
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   803
	DomainName      <String>        remembered domainname
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   804
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   805
	LastErrorNumber <Integer>       the last value of errno
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   806
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   807
	LastExecStatus  <Integer>       the returned exec status after
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   808
					the last call of system
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   809
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   810
	OSSignals       <Array>         Array of signals to be raised for corresponding
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   811
					OperatingSystem signals.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   812
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   813
	ForkFailed      <Boolean>       set if a fork (or popen) has failed;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   814
					ST/X will avoid doing more forks/popens
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   815
					if this flag is set, for a slightly
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   816
					smoother operation.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   817
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   818
	SlowFork        <Boolean>       if set, fork and popen are avoided;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   819
					(more or less obsolete now)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   820
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   821
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   822
	ErrorSignal     <Signal>        Parentsignal of all OS error signals.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   823
					not directly raised.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   824
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   825
	AccessDeniedErrorSignal
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   826
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   827
	FileNotFoundErrorSignal
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   828
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   829
	LocaleInfo      <Dictionary>    if non nil, that is taken instead of the operating
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   830
					systems locale definitions (allows for overwriting
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   831
					these, or provide a compatible info on systems which do
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   832
					not support locales)
1286
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   833
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   834
    [author:]
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   835
	Claus Gittinger
1286
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   836
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   837
    [see also:]
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   838
	OSProcessStatus
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   839
	Filename Date Time
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   840
	ExternalStream FileStream PipeStream Socket
2
claus
parents: 1
diff changeset
   841
"
1619
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   842
!
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   843
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   844
examples
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   845
"
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   846
  various queries
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   847
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   848
    Transcript 
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   849
	showCR:'hello ' , (OperatingSystem getLoginName)
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   850
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   851
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   852
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   853
    OperatingSystem isUNIXlike ifTrue:[
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   854
	Transcript showCR:'this is some UNIX-like OS'
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   855
    ] ifFalse:[
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   856
	Transcript showCR:'this OS is not UNIX-like'
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   857
    ]
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   858
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   859
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   860
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   861
    Transcript 
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   862
	showCR:'this machine is called ' , OperatingSystem getHostName
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   863
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   864
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   865
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   866
    Transcript 
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   867
	showCR:('this machine is in the '
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   868
	       , OperatingSystem getDomainName
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   869
	       , ' domain')
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   870
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   871
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   872
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   873
    Transcript 
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   874
	showCR:('this machine''s CPU is a '
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   875
	       , OperatingSystem getCPUType
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   876
	       )
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   877
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   878
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   879
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   880
    Transcript showCR:'executing ls command ...'.
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   881
    OperatingSystem executeCommand:'ls'.
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   882
    Transcript showCR:'... done.'.
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   883
								[exEnd]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   884
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   885
  locking a file 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   886
  (should be executed on two running smalltalks - not in two threads):
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   887
								[exBegin]
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   888
    |f|
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   889
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   890
    f := 'testFile' asFilename readWriteStream.
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   891
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   892
    10 timesRepeat:[
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   893
	'about to lock ...' printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   894
	[
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   895
	  OperatingSystem 
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   896
	    lockFD:(f fileDescriptor)
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   897
	    shared:false
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   898
	    blocking:false
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   899
	] whileFalse:[
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   900
	    'process ' print. OperatingSystem getProcessId print. ' is waiting' printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   901
	    Delay waitForSeconds:1
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   902
	].
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   903
	'LOCKED ...' printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   904
	Delay waitForSeconds:10.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   905
	'unlock ...' printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   906
	(OperatingSystem 
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   907
	    unlockFD:(f fileDescriptor)) printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   908
	Delay waitForSeconds:3.
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   909
    ]
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   910
								[exBegin]
1619
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   911
"
2
claus
parents: 1
diff changeset
   912
! !
claus
parents: 1
diff changeset
   913
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
   914
!OperatingSystem class methodsFor:'initialization'!
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   915
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   916
initialize
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   917
    "initialize the class"
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   918
540
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   919
    ObjectMemory addDependent:self.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   920
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   921
    ErrorSignal isNil ifTrue:[
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   922
	ErrorSignal := Object errorSignal newSignalMayProceed:true..
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   923
	ErrorSignal nameClass:self message:#errorSignal.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   924
	ErrorSignal notifierString:'OS error encountered'.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   925
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   926
	AccessDeniedErrorSignal := ErrorSignal newSignalMayProceed:true.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   927
	AccessDeniedErrorSignal nameClass:self message:#accessDeniedError.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   928
	AccessDeniedErrorSignal notifierString:'OS access denied'.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   929
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   930
	FileNotFoundErrorSignal := ErrorSignal newSignalMayProceed:true.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   931
	FileNotFoundErrorSignal nameClass:self message:#fileNotFoundErrorSignal.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   932
	FileNotFoundErrorSignal notifierString:'OS file not found'.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   933
    ]
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   934
!
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   935
1470
266520246a88 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1441
diff changeset
   936
update:something with:aParameter from:changedObject
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
   937
    "catch image restart and flush some cached data"
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
   938
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   939
    something == #earlyRestart ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   940
	"
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   941
	 flush cached data
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   942
	"
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   943
	HostName := nil.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   944
	DomainName := nil.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   945
	LastErrorNumber := nil.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   946
	LastExecStatus := nil
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   947
    ]
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
   948
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
   949
    "Modified: 22.4.1996 / 13:10:43 / cg"
1470
266520246a88 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1441
diff changeset
   950
    "Created: 15.6.1996 / 15:22:37 / cg"
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   951
! !
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   952
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
   953
!OperatingSystem class methodsFor:'OS signal constants'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   954
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   955
sigABRT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   956
    "return the signal number for SIGABRT - 0 if not supported by OS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   957
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   958
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   959
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   960
#ifdef SIGABRT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   961
    RETURN ( __MKSMALLINT(SIGABRT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   962
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   963
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   964
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   965
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   966
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   967
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   968
sigALRM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   969
    "return the signal number for SIGALRM - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   970
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   971
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   972
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   973
#ifdef SIGALRM
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   974
    RETURN ( __MKSMALLINT(SIGALRM) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   975
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   976
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   977
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   978
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   979
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   980
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   981
sigBREAK
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   982
    "return the signal number for SIGBREAK - 0 if not supported.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   983
     This is an MSDOS specific signal"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   984
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   985
%{  /* NOCONTEXT */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   986
#ifdef SIGBREAK
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   987
    RETURN ( __MKSMALLINT(SIGBREAK) );
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   988
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   989
    RETURN ( __MKSMALLINT(0) );
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   990
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   991
%}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   992
!
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   993
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   994
sigBUS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   995
    "return the signal number for SIGBUS - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   996
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   997
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   998
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   999
#ifdef SIGBUS
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1000
    RETURN ( __MKSMALLINT(SIGBUS) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1001
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1002
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1003
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1004
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1005
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1006
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1007
sigCHLD
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1008
    "return the signal number for SIGCHLD - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1009
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1010
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1011
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1012
#if defined(SIGCHLD)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1013
    RETURN ( __MKSMALLINT(SIGCHLD) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1014
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1015
# if  defined(SIGCLD)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1016
    RETURN ( __MKSMALLINT(SIGCLD) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1017
# else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1018
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1019
# endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1020
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1021
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1022
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1023
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1024
sigCONT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1025
    "return the signal number for SIGCONT - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1026
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1027
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1028
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1029
#if defined(SIGCONT)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1030
    RETURN ( __MKSMALLINT(SIGCONT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1031
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1032
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1033
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1034
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1035
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1036
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1037
sigDANGER
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1038
    "return the signal number for SIGDANGER - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1039
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1040
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1041
%{  /* NOCONTEXT */
710
10d86ca4c4a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 704
diff changeset
  1042
#if defined(SIGDANGER)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1043
    RETURN ( __MKSMALLINT(SIGDANGER) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1044
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1045
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1046
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1047
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1048
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1049
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1050
sigEMT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1051
    "return the signal number for SIGEMT - 0 if not supported by OS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1052
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1053
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1054
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1055
#ifdef SIGEMT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1056
    RETURN ( __MKSMALLINT(SIGEMT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1057
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1058
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1059
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1060
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1061
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1062
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1063
sigFP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1064
    "return the signal number for SIGFP - 0 if not supported by OS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1065
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1066
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1067
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1068
#ifdef SIGFPE
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1069
    RETURN ( __MKSMALLINT(SIGFPE) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1070
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1071
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1072
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1073
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1074
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1075
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1076
sigGRANT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1077
    "return the signal number for SIGGRANT - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1078
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1079
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1080
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1081
#if defined(SIGGRANT)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1082
    RETURN ( __MKSMALLINT(SIGGRANT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1083
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1084
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1085
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1086
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1087
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1088
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1089
sigHUP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1090
    "return the signal number for SIGHUP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1091
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1092
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1093
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1094
#ifdef SIGHUP
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1095
    RETURN ( __MKSMALLINT(SIGHUP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1096
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1097
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1098
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1099
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1100
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1101
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1102
sigILL
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1103
    "return the signal number for SIGILL - 0 if not supported by OS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1104
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1105
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1106
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1107
#ifdef SIGILL
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1108
    RETURN ( __MKSMALLINT(SIGILL) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1109
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1110
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1111
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1112
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1113
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1114
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1115
sigINT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1116
    "return the signal number for SIGINT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1117
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1118
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1119
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1120
#ifdef SIGINT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1121
    RETURN ( __MKSMALLINT(SIGINT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1122
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1123
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1124
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1125
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1126
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1127
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1128
sigIO
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1129
    "return the signal number for SIGIO - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1130
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1131
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1132
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1133
#if defined(SIGIO)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1134
    RETURN ( __MKSMALLINT(SIGIO) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1135
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1136
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1137
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1138
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1139
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1140
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1141
sigIOT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1142
    "return the signal number for SIGIOT - 0 if not supported by OS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1143
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1144
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1145
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1146
#ifdef SIGIOT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1147
    RETURN ( __MKSMALLINT(SIGIOT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1148
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1149
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1150
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1151
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1152
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1153
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1154
sigKILL
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1155
    "return the signal number for SIGKILL
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1156
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1157
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1158
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1159
#ifdef SIGKILL
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1160
    RETURN ( __MKSMALLINT(SIGKILL) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1161
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1162
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1163
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1164
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1165
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1166
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1167
sigLOST
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1168
    "return the signal number for SIGLOST - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1169
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1170
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1171
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1172
#if defined(SIGLOST)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1173
    RETURN ( __MKSMALLINT(SIGLOST) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1174
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1175
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1176
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1177
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1178
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1179
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1180
sigMIGRATE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1181
    "return the signal number for SIGMIGRATE - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1182
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1183
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1184
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1185
#if defined(SIGMIGRATE)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1186
    RETURN ( __MKSMALLINT(SIGMIGRATE) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1187
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1188
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1189
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1190
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1191
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1192
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1193
sigMSG
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1194
    "return the signal number for SIGMSG - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1195
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1196
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1197
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1198
#if defined(SIGMSG)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1199
    RETURN ( __MKSMALLINT(SIGMSG) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1200
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1201
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1202
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1203
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1204
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1205
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1206
sigPIPE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1207
    "return the signal number for SIGPIPE - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1208
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1209
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1210
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1211
#ifdef SIGPIPE
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1212
    RETURN ( __MKSMALLINT(SIGPIPE) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1213
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1214
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1215
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1216
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1217
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1218
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1219
sigPOLL
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1220
    "return the signal number for SIGPOLL - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1221
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1222
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1223
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1224
#if defined(SIGPOLL)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1225
    RETURN ( __MKSMALLINT(SIGPOLL) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1226
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1227
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1228
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1229
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1230
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1231
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1232
sigPRE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1233
    "return the signal number for SIGPRE - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1234
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1235
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1236
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1237
#if defined(SIGPRE)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1238
    RETURN ( __MKSMALLINT(SIGPRE) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1239
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1240
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1241
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1242
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1243
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1244
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1245
sigPROF
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1246
    "return the signal number for SIGPROF - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1247
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1248
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1249
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1250
#if defined(SIGPROF)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1251
    RETURN ( __MKSMALLINT(SIGPROF) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1252
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1253
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1254
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1255
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1256
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1257
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1258
sigPWR
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1259
    "return the signal number for SIGPWR - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1260
     (not available on all systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1261
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1262
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1263
#if defined(SIGPWR)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1264
    RETURN ( __MKSMALLINT(SIGPWR) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1265
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1266
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1267
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1268
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1269
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1270
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1271
sigQUIT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1272
    "return the signal number for SIGQUIT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1273
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1274
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1275
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1276
#ifdef SIGQUIT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1277
    RETURN ( __MKSMALLINT(SIGQUIT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1278
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1279
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1280
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1281
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1282
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1283
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1284
sigRETRACT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1285
    "return the signal number for SIGRETRACT - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1286
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1287
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1288
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1289
#if defined(SIGRETRACT)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1290
    RETURN ( __MKSMALLINT(SIGRETRACT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1291
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1292
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1293
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1294
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1295
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1296
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1297
sigSAK
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1298
    "return the signal number for SIGSAK - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1299
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1300
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1301
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1302
#if defined(SIGSAK)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1303
    RETURN ( __MKSMALLINT(SIGSAK) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1304
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1305
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1306
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1307
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1308
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1309
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1310
sigSEGV
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1311
    "return the signal number for SIGSEGV - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1312
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1313
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1314
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1315
#ifdef SIGSEGV
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1316
    RETURN ( __MKSMALLINT(SIGSEGV) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1317
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1318
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1319
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1320
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1321
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1322
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1323
sigSOUND
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1324
    "return the signal number for SIGSOUND - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1325
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1326
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1327
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1328
#if defined(SIGSOUND)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1329
    RETURN ( __MKSMALLINT(SIGSOUND) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1330
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1331
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1332
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1333
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1334
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1335
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1336
sigSTOP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1337
    "return the signal number for SIGSTOP - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1338
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1339
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1340
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1341
#if defined(SIGSTOP)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1342
    RETURN ( __MKSMALLINT(SIGSTOP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1343
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1344
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1345
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1346
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1347
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1348
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1349
sigSYS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1350
    "return the signal number for SIGSYS - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1351
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1352
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1353
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1354
#ifdef SIGSYS
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1355
    RETURN ( __MKSMALLINT(SIGSYS) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1356
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1357
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1358
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1359
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1360
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1361
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1362
sigTERM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1363
    "return the signal number for SIGTERM - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1364
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1365
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1366
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1367
#ifdef SIGTERM
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1368
    RETURN ( __MKSMALLINT(SIGTERM) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1369
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1370
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1371
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1372
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1373
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1374
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1375
sigTRAP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1376
    "return the signal number for SIGTRAP - 0 if not supported by OS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1377
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1378
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1379
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1380
#ifdef SIGTRAP
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1381
    RETURN ( __MKSMALLINT(SIGTRAP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1382
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1383
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1384
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1385
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1386
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1387
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1388
sigTSTP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1389
    "return the signal number for SIGTSTP - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1390
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1391
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1392
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1393
#if defined(SIGTSTP)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1394
    RETURN ( __MKSMALLINT(SIGTSTP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1395
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1396
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1397
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1398
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1399
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1400
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1401
sigTTIN
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1402
    "return the signal number for SIGTTIN - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1403
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1404
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1405
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1406
#if defined(SIGTTIN)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1407
    RETURN ( __MKSMALLINT(SIGTTIN) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1408
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1409
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1410
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1411
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1412
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1413
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1414
sigTTOU
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1415
    "return the signal number for SIGTTOU - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1416
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1417
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1418
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1419
#if defined(SIGTTOU)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1420
    RETURN ( __MKSMALLINT(SIGTTOU) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1421
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1422
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1423
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1424
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1425
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1426
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1427
sigURG
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1428
    "return the signal number for SIGURG - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1429
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1430
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1431
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1432
#if defined(SIGURG)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1433
    RETURN ( __MKSMALLINT(SIGURG) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1434
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1435
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1436
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1437
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1438
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1439
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1440
sigUSR1
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1441
    "return the signal number for SIGUSR1 - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1442
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1443
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1444
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1445
#if defined(SIGUSR1)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1446
    RETURN ( __MKSMALLINT(SIGUSR1) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1447
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1448
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1449
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1450
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1451
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1452
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1453
sigUSR2
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1454
    "return the signal number for SIGUSR2 - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1455
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1456
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1457
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1458
#if defined(SIGUSR2)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1459
    RETURN ( __MKSMALLINT(SIGUSR2) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1460
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1461
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1462
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1463
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1464
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1465
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1466
sigVTALRM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1467
    "return the signal number for SIGVTALRM - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1468
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1469
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1470
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1471
#if defined(SIGVTALRM)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1472
    RETURN ( __MKSMALLINT(SIGVTALRM) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1473
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1474
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1475
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1476
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1477
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1478
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1479
sigWINCH
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1480
    "return the signal number for SIGWINCH - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1481
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1482
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1483
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1484
#if defined(SIGWINCH)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1485
    RETURN ( __MKSMALLINT(SIGWINCH) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1486
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1487
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1488
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1489
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1490
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1491
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1492
sigXCPU
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1493
    "return the signal number for SIGXCPU - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1494
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1495
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1496
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1497
#if defined(SIGXCPU)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1498
    RETURN ( __MKSMALLINT(SIGXCPU) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1499
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1500
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1501
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1502
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1503
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1504
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1505
sigXFSZ
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1506
    "return the signal number for SIGXFSZ - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1507
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1508
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1509
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1510
#if defined(SIGXFSZ)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1511
    RETURN ( __MKSMALLINT(SIGXFSZ) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1512
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1513
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1514
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1515
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1516
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1517
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  1518
!OperatingSystem class methodsFor:'Signal constants'!
540
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1519
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1520
accessDeniedErrorSignal
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1521
    "return the signal raised when a (file-) access is denied."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1522
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1523
    ^ AccessDeniedErrorSignal
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1524
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1525
540
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1526
errorSignal
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  1527
    "return the parent signal of all OS signals."
540
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1528
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1529
    ^ ErrorSignal
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  1530
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  1531
    "Modified: 22.4.1996 / 13:11:31 / cg"
540
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1532
!
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1533
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1534
fileNotFoundErrorSignal
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1535
    "return the signal raised when a file was not found."
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1536
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1537
    ^ FileNotFoundErrorSignal
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1538
! !
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1539
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  1540
!OperatingSystem class methodsFor:'error messages'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1541
1153
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1542
clearLastErrorNumber
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1543
    "return the last errors number.
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1544
     See also: #lastErrorSymbol and #lastErrorString.
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1545
     Notice: having a single error number is a bad idea in a multithreaded
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  1546
	     environment - this interface will change."
1153
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1547
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1548
    LastErrorNumber := nil.
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1549
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1550
     "
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1551
      OperatingSystem clearLastErrorNumber
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1552
     "
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1553
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1554
    "Created: 12.4.1996 / 09:28:58 / stefan"
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1555
    "Modified: 12.4.1996 / 09:38:51 / stefan"
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1556
!
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1557
85
claus
parents: 77
diff changeset
  1558
currentErrorNumber
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1559
    "returns the OS's last error nr (i.e. the value of errno).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1560
     Notice, that the value of this flag is only valid immediately
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1561
     after the error occurred - it gets updated with every other
85
claus
parents: 77
diff changeset
  1562
     request to the OS.
claus
parents: 77
diff changeset
  1563
     Use lastErrorNumber - currentErrorNumber is invalidated by
claus
parents: 77
diff changeset
  1564
     many, many internal calls."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1565
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1566
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1567
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1568
     RETURN ( __MKSMALLINT(errno) );
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1569
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1570
     "
85
claus
parents: 77
diff changeset
  1571
      OperatingSystem currentErrorNumber
claus
parents: 77
diff changeset
  1572
     "
claus
parents: 77
diff changeset
  1573
!
claus
parents: 77
diff changeset
  1574
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1575
errorNumberFor:aSymbol
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1576
    "given a symbolic error, return the numeric;
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1577
     (i.e. errorNumberFor:#EBADF returns EBADF's value).
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1578
     Use this, since error numbers are really not standard across unix systems."
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1579
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1580
%{   /* NOCONTEXT */
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1581
    OBJ sym = aSymbol;
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1582
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1583
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1584
     * POSIX errnos - these should be defined
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1585
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1586
#ifdef EPERM
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1587
    if (sym == @symbol(EPERM)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1588
	RETURN ( __MKSMALLINT(EPERM) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1589
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1590
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1591
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1592
#ifdef ENOENT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1593
    if (sym == @symbol(ENOENT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1594
	RETURN ( __MKSMALLINT(ENOENT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1595
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1596
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1597
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1598
#ifdef ESRCH
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1599
    if (sym == @symbol(ESRCH)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1600
	RETURN ( __MKSMALLINT(ESRCH) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1601
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1602
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1603
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1604
#ifdef EINTR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1605
    if (sym == @symbol(EINTR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1606
	RETURN ( __MKSMALLINT(EINTR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1607
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1608
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1609
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1610
#ifdef EIO
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1611
    if (sym == @symbol(EIO)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1612
	RETURN ( __MKSMALLINT(EIO) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1613
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1614
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1615
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1616
#ifdef ENXIO
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1617
    if (sym == @symbol(ENXIO)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1618
	RETURN ( __MKSMALLINT(ENXIO) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1619
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1620
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1621
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1622
#ifdef E2BIG
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1623
    if (sym == @symbol(E2BIG)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1624
	RETURN ( __MKSMALLINT(E2BIG) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1625
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1626
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1627
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1628
#ifdef ENOEXEC
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1629
    if (sym == @symbol(ENOEXEC)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1630
	RETURN ( __MKSMALLINT(ENOEXEC) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1631
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1632
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1633
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1634
#ifdef EBADF
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1635
    if (sym == @symbol(EBADF)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1636
	RETURN ( __MKSMALLINT(EBADF) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1637
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1638
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1639
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1640
#ifdef ECHILD
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1641
    if (sym == @symbol(ECHILD)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1642
	RETURN ( __MKSMALLINT(ECHILD) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1643
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1644
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1645
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1646
#if defined(EAGAIN)
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1647
    if (sym == @symbol(EAGAIN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1648
	RETURN ( __MKSMALLINT(EAGAIN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1649
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1650
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1651
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1652
#ifdef ENOMEM
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1653
    if (sym == @symbol(ENOMEM)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1654
	RETURN ( __MKSMALLINT(ENOMEM) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1655
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1656
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1657
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1658
#ifdef EACCES
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1659
    if (sym == @symbol(EACCES)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1660
	RETURN ( __MKSMALLINT(EACCES) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1661
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1662
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1663
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1664
#ifdef EFAULT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1665
    if (sym == @symbol(EFAULT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1666
	RETURN ( __MKSMALLINT(EFAULT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1667
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1668
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1669
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1670
#ifdef EBUSY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1671
    if (sym == @symbol(EBUSY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1672
	RETURN ( __MKSMALLINT(EBUSY) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1673
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1674
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1675
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1676
#ifdef EXDEV
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1677
    if (sym == @symbol(EXDEV)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1678
	RETURN ( __MKSMALLINT(EXDEV) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1679
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1680
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1681
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1682
#ifdef ENODEV
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1683
    if (sym == @symbol(ENODEV)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1684
	RETURN ( __MKSMALLINT(ENODEV) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1685
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1686
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1687
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1688
#ifdef ENOTDIR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1689
    if (sym == @symbol(ENOTDIR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1690
	RETURN ( __MKSMALLINT(ENOTDIR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1691
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1692
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1693
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1694
#ifdef EISDIR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1695
    if (sym == @symbol(EISDIR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1696
	RETURN ( __MKSMALLINT(EISDIR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1697
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1698
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1699
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1700
#ifdef EINVAL
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1701
    if (sym == @symbol(EINVAL)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1702
	RETURN ( __MKSMALLINT(EINVAL) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1703
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1704
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1705
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1706
#ifdef ENFILE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1707
    if (sym == @symbol(ENFILE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1708
	RETURN ( __MKSMALLINT(ENFILE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1709
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1710
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1711
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1712
#ifdef EMFILE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1713
    if (sym == @symbol(EMFILE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1714
	RETURN ( __MKSMALLINT(EMFILE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1715
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1716
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1717
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1718
#ifdef ENOTTY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1719
    if (sym == @symbol(ENOTTY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1720
	RETURN ( __MKSMALLINT(ENOTTY) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1721
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1722
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1723
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1724
#ifdef EFBIG
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1725
    if (sym == @symbol(EFBIG)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1726
	RETURN ( __MKSMALLINT(EFBIG) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1727
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1728
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1729
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1730
#ifdef ENOSPC
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1731
    if (sym == @symbol(ENOSPC)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1732
	RETURN ( __MKSMALLINT(ENOSPC) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1733
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1734
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1735
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1736
#ifdef ESPIPE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1737
    if (sym == @symbol(ESPIPE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1738
	RETURN ( __MKSMALLINT(ESPIPE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1739
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1740
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1741
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1742
#ifdef EROFS
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1743
    if (sym == @symbol(EROFS)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1744
	RETURN ( __MKSMALLINT(EROFS) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1745
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1746
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1747
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1748
#ifdef EMLINK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1749
    if (sym == @symbol(EMLINK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1750
	RETURN ( __MKSMALLINT(EMLINK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1751
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1752
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1753
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1754
#ifdef EPIPE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1755
    if (sym == @symbol(EPIPE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1756
	RETURN ( __MKSMALLINT(EPIPE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1757
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1758
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1759
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1760
#ifdef EDOM
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1761
    if (sym == @symbol(EDOM)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1762
	RETURN ( __MKSMALLINT(EDOM) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1763
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1764
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1765
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1766
#ifdef ERANGE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1767
    if (sym == @symbol(ERANGE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1768
	RETURN ( __MKSMALLINT(ERANGE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1769
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1770
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1771
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1772
#ifdef EDEADLK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1773
    if (sym == @symbol(EDEADLK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1774
	RETURN ( __MKSMALLINT(EDEADLK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1775
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1776
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1777
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1778
#ifdef ENAMETOOLONG
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1779
    if (sym == @symbol(ENAMETOOLONG)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1780
	RETURN ( __MKSMALLINT(ENAMETOOLONG) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1781
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1782
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1783
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1784
#ifdef ENOLCK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1785
    if (sym == @symbol(ENOLCK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1786
	RETURN ( __MKSMALLINT(ENOLCK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1787
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1788
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1789
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1790
#ifdef ENOSYS
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1791
    if (sym == @symbol(ENOSYS)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1792
	RETURN ( __MKSMALLINT(ENOSYS) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1793
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1794
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1795
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1796
#ifdef ENOTEMPTY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1797
    if (sym == @symbol(ENOTEMPTY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1798
	RETURN ( __MKSMALLINT(ENOTEMPTY) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1799
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1800
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1801
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1802
#ifdef EEXIST
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1803
    if (sym == @symbol(EEXIST)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1804
	RETURN ( __MKSMALLINT(EEXIST) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1805
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1806
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1807
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1808
#ifdef EILSEQ
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1809
    if (sym == @symbol(EILSEQ)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1810
	RETURN ( __MKSMALLINT(EILSEQ) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1811
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1812
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1813
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1814
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1815
     * XPG3 errnos - defined on most systems
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1816
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1817
#ifdef ENOTBLK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1818
    if (sym == @symbol(ENOTBLK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1819
	RETURN ( __MKSMALLINT(ENOTBLK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1820
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1821
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1822
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1823
#ifdef ETXTBSY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1824
    if (sym == @symbol(ETXTBSY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1825
	RETURN ( __MKSMALLINT(ETXTBSY) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1826
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1827
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1828
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1829
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1830
     * some others
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1831
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1832
#ifdef EWOULDBLOCK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1833
    if (sym == @symbol(EWOULDBLOCK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1834
	RETURN ( __MKSMALLINT(EWOULDBLOCK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1835
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1836
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1837
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1838
#ifdef ENOMSG
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1839
    if (sym == @symbol(ENOMSG)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1840
	RETURN ( __MKSMALLINT(ENOMSG) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1841
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1842
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1843
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1844
#ifdef ELOOP
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1845
    if (sym == @symbol(ELOOP)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1846
	RETURN ( __MKSMALLINT(ELOOP) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1847
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1848
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1849
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1850
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1851
     * some stream errors
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1852
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1853
#ifdef ETIME
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1854
    if (sym == @symbol(ETIME)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1855
	RETURN ( __MKSMALLINT(ETIME) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1856
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1857
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1858
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1859
#ifdef ENOSR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1860
    if (sym == @symbol(ENOSR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1861
	RETURN ( __MKSMALLINT(ENOSR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1862
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1863
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1864
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1865
#ifdef ENOSTR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1866
    if (sym == @symbol(ENOSTR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1867
	RETURN ( __MKSMALLINT(ENOSTR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1868
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1869
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1870
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1871
#ifdef ECOMM
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1872
    if (sym == @symbol(ECOMM)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1873
	RETURN ( __MKSMALLINT(ECOMM) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1874
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1875
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1876
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1877
#ifdef EPROTO
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1878
    if (sym == @symbol(EPROTO)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1879
	RETURN ( __MKSMALLINT(EPROTO) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1880
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1881
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1882
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1883
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1884
     * nfs errors
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1885
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1886
#ifdef ESTALE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1887
    if (sym == @symbol(ESTALE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1888
	RETURN ( __MKSMALLINT(ESTALE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1889
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1890
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1891
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1892
#ifdef EREMOTE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1893
    if (sym == @symbol(EREMOTE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1894
	RETURN ( __MKSMALLINT(EREMOTE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1895
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1896
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1897
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1898
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1899
     * some networking errors
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1900
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1901
#ifdef EINPROGRESS
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1902
    if (sym == @symbol(EINPROGRESS)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1903
	RETURN ( __MKSMALLINT(EINPROGRESS) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1904
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1905
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1906
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1907
#ifdef EALREADY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1908
    if (sym == @symbol(EALREADY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1909
	RETURN ( __MKSMALLINT(EALREADY) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1910
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1911
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1912
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1913
#ifdef ENOTSOCK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1914
    if (sym == @symbol(ENOTSOCK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1915
	RETURN ( __MKSMALLINT(ENOTSOCK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1916
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1917
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1918
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1919
#ifdef EDESTADDRREQ
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1920
    if (sym == @symbol(EDESTADDRREQ)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1921
	RETURN ( __MKSMALLINT(EDESTADDRREQ) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1922
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1923
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1924
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1925
#ifdef EMSGSIZE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1926
    if (sym == @symbol(EMSGSIZE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1927
	RETURN ( __MKSMALLINT(EMSGSIZE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1928
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1929
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1930
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1931
#ifdef EPROTOTYPE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1932
    if (sym == @symbol(EPROTOTYPE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1933
	RETURN ( __MKSMALLINT(EPROTOTYPE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1934
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1935
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1936
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1937
#ifdef ENOPROTOOPT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1938
    if (sym == @symbol(ENOPROTOOPT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1939
	RETURN ( __MKSMALLINT(ENOPROTOOPT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1940
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1941
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1942
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1943
#ifdef EPROTONOSUPPORT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1944
    if (sym == @symbol(EPROTONOSUPPORT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1945
	RETURN ( __MKSMALLINT(EPROTONOSUPPORT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1946
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1947
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1948
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1949
#ifdef ESOCKTNOSUPPORT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1950
    if (sym == @symbol(ESOCKTNOSUPPORT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1951
	RETURN ( __MKSMALLINT(ESOCKTNOSUPPORT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1952
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1953
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1954
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1955
#ifdef EOPNOTSUPP
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1956
    if (sym == @symbol(EOPNOTSUPP)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1957
	RETURN ( __MKSMALLINT(EOPNOTSUPP) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1958
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1959
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1960
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1961
#ifdef EPFNOSUPPORT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1962
    if (sym == @symbol(EPFNOSUPPORT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1963
	RETURN ( __MKSMALLINT(EPFNOSUPPORT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1964
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1965
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1966
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1967
#ifdef EAFNOSUPPORT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1968
    if (sym == @symbol(EAFNOSUPPORT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1969
	RETURN ( __MKSMALLINT(EAFNOSUPPORT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1970
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1971
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1972
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1973
#ifdef EADDRINUSE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1974
    if (sym == @symbol(EADDRINUSE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1975
	RETURN ( __MKSMALLINT(EADDRINUSE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1976
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1977
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1978
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1979
#ifdef EADDRNOTAVAIL
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1980
    if (sym == @symbol(EADDRNOTAVAIL)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1981
	RETURN ( __MKSMALLINT(EADDRNOTAVAIL) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1982
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1983
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1984
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1985
#ifdef ETIMEDOUT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1986
    if (sym == @symbol(ETIMEDOUT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1987
	RETURN ( __MKSMALLINT(ETIMEDOUT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1988
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1989
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1990
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1991
#ifdef ECONNREFUSED
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1992
    if (sym == @symbol(ECONNREFUSED)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1993
	RETURN ( __MKSMALLINT(ECONNREFUSED) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1994
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1995
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1996
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1997
#ifdef ENETDOWN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1998
    if (sym == @symbol(ENETDOWN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1999
	RETURN ( __MKSMALLINT(ENETDOWN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2000
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2001
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2002
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2003
#ifdef ENETUNREACH
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2004
    if (sym == @symbol(ENETUNREACH)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2005
	RETURN ( __MKSMALLINT(ENETUNREACH) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2006
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2007
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2008
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2009
#ifdef ENETRESET
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2010
    if (sym == @symbol(ENETRESET)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2011
	RETURN ( __MKSMALLINT(ENETRESET) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2012
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2013
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2014
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2015
#ifdef ECONNABORTED
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2016
    if (sym == @symbol(ECONNABORTED)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2017
	RETURN ( __MKSMALLINT(ECONNABORTED) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2018
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2019
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2020
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2021
#ifdef ECONNRESET
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2022
    if (sym == @symbol(ECONNRESET)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2023
	RETURN ( __MKSMALLINT(ECONNRESET) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2024
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2025
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2026
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2027
#ifdef EISCONN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2028
    if (sym == @symbol(EISCONN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2029
	RETURN ( __MKSMALLINT(EISCONN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2030
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2031
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2032
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2033
#ifdef ENOTCONN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2034
    if (sym == @symbol(ENOTCONN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2035
	RETURN ( __MKSMALLINT(ENOTCONN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2036
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2037
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2038
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2039
#ifdef ESHUTDOWN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2040
    if (sym == @symbol(ESHUTDOWN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2041
	RETURN ( __MKSMALLINT(ESHUTDOWN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2042
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2043
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2044
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2045
#ifdef EHOSTDOWN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2046
    if (sym == @symbol(EHOSTDOWN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2047
	RETURN ( __MKSMALLINT(EHOSTDOWN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2048
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2049
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2050
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2051
#ifdef EHOSTUNREACH
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2052
    if (sym == @symbol(EHOSTUNREACH)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2053
	RETURN ( __MKSMALLINT(EHOSTUNREACH) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2054
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2055
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2056
%}.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2057
    ^ -1
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2058
!
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2059
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2060
errorSymbolAndTextForNumber:errNr
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2061
    "return an array consisting of symbol &  message string from a unix errorNumber 
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2062
     (as returned by a system call). 
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2063
     The returned message is in english (as found in /usr/include/errno.h)
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2064
     and should be replaced by a resource lookup before being presented to the user."
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2065
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2066
    |sym text|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2067
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2068
%{
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2069
    /* claus:
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2070
     * I made this some primitive code, since errnos are not
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2071
     * standard across unixes
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2072
     */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2073
    char *msg = "unknown error";
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2074
    char buffer[50];
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2075
    OBJ eno = errNr;
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2076
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2077
    if (__isSmallInteger(eno)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2078
	switch (__intVal(eno)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2079
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2080
	     * POSIX errnos - these should be defined
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2081
	     */
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2082
#ifdef EPERM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2083
	    case EPERM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2084
		msg = "Operation not permitted";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2085
		sym = @symbol(EPERM);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2086
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2087
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2088
#ifdef ENOENT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2089
	    case ENOENT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2090
		msg = "No such file or directory";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2091
		sym = @symbol(ENOENT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2092
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2093
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2094
#ifdef ESRCH
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2095
	    case ESRCH:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2096
		msg = "No such process";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2097
		sym = @symbol(ESRCH);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2098
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2099
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2100
#ifdef EINTR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2101
	    case EINTR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2102
		msg = "Interrupted system call";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2103
		sym = @symbol(EINTR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2104
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2105
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2106
#ifdef EIO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2107
	    case EIO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2108
		msg = "I/O error";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2109
		sym = @symbol(EIO);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2110
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2111
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2112
#ifdef ENXIO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2113
	    case ENXIO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2114
		msg = "No such device or address";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2115
		sym = @symbol(ENXIO);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2116
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2117
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2118
#ifdef E2BIG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2119
	    case E2BIG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2120
		msg = "Arg list too long";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2121
		sym = @symbol(E2BIG);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2122
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2123
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2124
#ifdef ENOEXEC
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2125
	    case ENOEXEC:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2126
		msg = "Exec format error";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2127
		sym = @symbol(ENOEXEC);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2128
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2129
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2130
#ifdef EBADF
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2131
	    case EBADF:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2132
		msg = "Bad file number";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2133
		sym = @symbol(EBADF);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2134
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2135
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2136
#ifdef ECHILD
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2137
	    case ECHILD:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2138
		msg = "No child processes";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2139
		sym = @symbol(ECHILD);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2140
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2141
#endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2142
#if !defined(EWOULDBLOCK) && defined(EAGAIN) && (EWOULDBLOCK != EAGAIN)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2143
	    case EAGAIN:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2144
		msg = "Try again";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2145
		sym = @symbol(EAGAIN);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2146
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2147
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2148
#ifdef ENOMEM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2149
	    case ENOMEM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2150
		msg = "Out of memory";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2151
		sym = @symbol(ENOMEM);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2152
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2153
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2154
#ifdef EACCES
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2155
	    case EACCES:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2156
		msg = "Permission denied";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2157
		sym = @symbol(EACCES);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2158
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2159
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2160
#ifdef EFAULT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2161
	    case EFAULT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2162
		msg = "Bad address";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2163
		sym = @symbol(EFAULT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2164
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2165
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2166
#ifdef EBUSY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2167
	    case EBUSY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2168
		msg = "Device or resource busy";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2169
		sym = @symbol(EBUSY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2170
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2171
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2172
#ifdef EEXIST
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2173
	    case EEXIST:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2174
		msg = "File exists";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2175
		sym = @symbol(EEXIST);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2176
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2177
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2178
#ifdef EXDEV
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2179
	    case EXDEV:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2180
		msg = "Cross-device link";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2181
		sym = @symbol(EXDEV);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2182
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2183
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2184
#ifdef ENODEV
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2185
	    case ENODEV:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2186
		msg = "No such device";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2187
		sym = @symbol(ENODEV);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2188
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2189
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2190
#ifdef ENOTDIR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2191
	    case ENOTDIR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2192
		msg = "Not a directory";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2193
		sym = @symbol(ENOTDIR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2194
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2195
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2196
#ifdef EISDIR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2197
	    case EISDIR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2198
		msg = "Is a directory";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2199
		sym = @symbol(EISDIR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2200
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2201
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2202
#ifdef EINVAL
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2203
	    case EINVAL:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2204
		msg = "Invalid argument";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2205
		sym = @symbol(EINVAL);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2206
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2207
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2208
#ifdef ENFILE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2209
	    case ENFILE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2210
		msg = "File table overflow";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2211
		sym = @symbol(ENFILE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2212
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2213
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2214
#ifdef EMFILE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2215
	    case EMFILE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2216
		msg = "Too many open files";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2217
		sym = @symbol(EMFILE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2218
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2219
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2220
#ifdef ENOTTY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2221
	    case ENOTTY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2222
		msg = "Not a typewriter";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2223
		sym = @symbol(ENOTTY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2224
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2225
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2226
#ifdef EFBIG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2227
	    case EFBIG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2228
		msg = "File too large";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2229
		sym = @symbol(EFBIG);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2230
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2231
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2232
#ifdef ENOSPC
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2233
	    case ENOSPC:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2234
		msg = "No space left on device";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2235
		sym = @symbol(ENOSPC);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2236
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2237
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2238
#ifdef ESPIPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2239
	    case ESPIPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2240
		msg = "Illegal seek";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2241
		sym = @symbol(ESPIPE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2242
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2243
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2244
#ifdef EROFS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2245
	    case EROFS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2246
		msg = "Read-only file system";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2247
		sym = @symbol(EROFS);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2248
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2249
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2250
#ifdef EMLINK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2251
	    case EMLINK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2252
		msg = "Too many links";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2253
		sym = @symbol(EMLINK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2254
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2255
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2256
#ifdef EPIPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2257
	    case EPIPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2258
		msg = "Broken pipe";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2259
		sym = @symbol(EPIPE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2260
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2261
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2262
#ifdef EDOM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2263
	    case EDOM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2264
		msg = "Math argument out of domain";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2265
		sym = @symbol(EDOM);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2266
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2267
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2268
#ifdef ERANGE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2269
	    case ERANGE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2270
		msg = "Math result not representable";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2271
		sym = @symbol(ERANGE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2272
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2273
#endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2274
#ifdef EDEADLK
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  2275
# if EDEADLK != EWOULDBLOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2276
	    case EDEADLK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2277
		msg = "Resource deadlock would occur";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2278
		sym = @symbol(EDEADLK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2279
		break;
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  2280
# endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2281
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2282
#ifdef ENAMETOOLONG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2283
	    case ENAMETOOLONG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2284
		msg = "File name too long";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2285
		sym = @symbol(ENAMETOOLONG);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2286
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2287
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2288
#ifdef ENOLCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2289
	    case ENOLCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2290
		msg = "No record locks available";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2291
		sym = @symbol(ENOLCK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2292
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2293
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2294
#ifdef ENOSYS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2295
	    case ENOSYS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2296
		msg = "Function not implemented";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2297
		sym = @symbol(ENOSYS);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2298
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2299
#endif
359
claus
parents: 357
diff changeset
  2300
#if defined(ENOTEMPTY) && (ENOTEMPTY != EEXIST)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2301
	    case ENOTEMPTY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2302
		msg = "Directory not empty";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2303
		sym = @symbol(ENOTEMPTY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2304
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2305
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2306
#ifdef EILSEQ
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2307
	    case EILSEQ:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2308
		msg = "Illegal byte sequence";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2309
		sym = @symbol(EILSEQ);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2310
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2311
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2312
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2313
	     * XPG3 errnos - defined on most systems
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2314
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2315
#ifdef ENOTBLK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2316
	    case ENOTBLK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2317
		msg = "Block device required";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2318
		sym = @symbol(ENOTBLK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2319
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2320
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2321
#ifdef ETXTBSY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2322
	    case ETXTBSY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2323
		msg = "Text file busy";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2324
		sym = @symbol(ETXTBSY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2325
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2326
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2327
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2328
	     * some others
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2329
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2330
#ifdef EWOULDBLOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2331
	    case EWOULDBLOCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2332
		msg = "Operation would block";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2333
		sym = @symbol(EWOULDBLOCK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2334
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2335
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2336
#ifdef ENOMSG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2337
	    case ENOMSG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2338
		msg = "No message of desired type";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2339
		sym = @symbol(ENOMSG);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2340
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2341
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2342
#ifdef ELOOP
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2343
	    case ELOOP:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2344
		msg = "Too many levels of symbolic links";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2345
		sym = @symbol(ELOOP);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2346
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2347
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2348
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2349
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2350
	     * some stream errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2351
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2352
#ifdef ETIME
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2353
	    case ETIME:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2354
		msg = "Timer expired";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2355
		sym = @symbol(ETIME);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2356
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2357
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2358
#ifdef ENOSR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2359
	    case ENOSR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2360
		msg = "Out of streams resources";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2361
		sym = @symbol(ENOSR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2362
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2363
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2364
#ifdef ENOSTR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2365
	    case ENOSTR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2366
		msg = "Device not a stream";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2367
		sym = @symbol(ENOSTR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2368
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2369
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2370
#ifdef ECOMM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2371
	    case ECOMM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2372
		msg = "Communication error on send";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2373
		sym = @symbol(ECOMM);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2374
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2375
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2376
#ifdef EPROTO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2377
	    case EPROTO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2378
		msg = "Protocol error";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2379
		sym = @symbol(EPROTO);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2380
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2381
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2382
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2383
	     * nfs errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2384
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2385
#ifdef ESTALE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2386
	    case ESTALE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2387
		msg = "Stale NFS file handle";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2388
		sym = @symbol(ESTALE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2389
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2390
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2391
#ifdef EREMOTE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2392
	    case EREMOTE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2393
		msg = "Too many levels of remote in path";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2394
		sym = @symbol(EREMOTE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2395
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2396
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2397
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2398
	     * some networking errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2399
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2400
#ifdef EINPROGRESS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2401
	    case EINPROGRESS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2402
		msg = "Operation now in progress";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2403
		sym = @symbol(EINPROGRESS);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2404
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2405
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2406
#ifdef EALREADY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2407
	    case EALREADY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2408
		msg = "Operation already in progress";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2409
		sym = @symbol(EALREADY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2410
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2411
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2412
#ifdef ENOTSOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2413
	    case ENOTSOCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2414
		msg = "Socket operation on non-socket";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2415
		sym = @symbol(ENOTSOCK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2416
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2417
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2418
#ifdef EDESTADDRREQ
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2419
	    case EDESTADDRREQ:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2420
		msg = "Destination address required";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2421
		sym = @symbol(EDESTADDRREQ);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2422
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2423
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2424
#ifdef EMSGSIZE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2425
	    case EMSGSIZE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2426
		msg = "Message too long";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2427
		sym = @symbol(EMSGSIZE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2428
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2429
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2430
#ifdef EPROTOTYPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2431
	    case EPROTOTYPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2432
		msg = "Protocol wrong type for socket";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2433
		sym = @symbol(EPROTOTYPE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2434
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2435
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2436
#ifdef ENOPROTOOPT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2437
	    case ENOPROTOOPT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2438
		msg = "Protocol not available";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2439
		sym = @symbol(ENOPROTOOPT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2440
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2441
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2442
#ifdef EPROTONOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2443
	    case EPROTONOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2444
		msg = "Protocol not supported";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2445
		sym = @symbol(EPROTONOSUPPORT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2446
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2447
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2448
#ifdef ESOCKTNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2449
	    case ESOCKTNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2450
		msg = "Socket type not supported";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2451
		sym = @symbol(ESOCKTNOSUPPORT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2452
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2453
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2454
#ifdef EOPNOTSUPP
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2455
	    case EOPNOTSUPP:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2456
		msg = "Operation not supported on socket";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2457
		sym = @symbol(EOPNOTSUPP);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2458
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2459
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2460
#ifdef EPFNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2461
	    case EPFNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2462
		msg = "Protocol family not supported";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2463
		sym = @symbol(EPFNOSUPPORT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2464
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2465
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2466
#ifdef EAFNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2467
	    case EAFNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2468
		msg = "Address family not supported by protocol family";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2469
		sym = @symbol(EAFNOSUPPORT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2470
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2471
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2472
#ifdef EADDRINUSE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2473
	    case EADDRINUSE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2474
		msg = "Address already in use";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2475
		sym = @symbol(EADDRINUSE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2476
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2477
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2478
#ifdef EADDRNOTAVAIL
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2479
	    case EADDRNOTAVAIL:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2480
		msg = "Can\'t assign requested address";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2481
		sym = @symbol(EADDRNOTAVAIL);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2482
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2483
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2484
#ifdef ETIMEDOUT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2485
	    case ETIMEDOUT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2486
		msg = "Connection timed out";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2487
		sym = @symbol(ETIMEDOUT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2488
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2489
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2490
#ifdef ECONNREFUSED
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2491
	    case ECONNREFUSED:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2492
		msg = "Connection refused";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2493
		sym = @symbol(ECONNREFUSED);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2494
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2495
#endif
362
claus
parents: 359
diff changeset
  2496
#ifdef ENETDOWN
claus
parents: 359
diff changeset
  2497
	    case ENETDOWN:
claus
parents: 359
diff changeset
  2498
		msg = "Network is down";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2499
		sym = @symbol(ENETDOWN);
362
claus
parents: 359
diff changeset
  2500
		break;
claus
parents: 359
diff changeset
  2501
#endif
claus
parents: 359
diff changeset
  2502
#ifdef ENETUNREACH
claus
parents: 359
diff changeset
  2503
	    case ENETUNREACH:
claus
parents: 359
diff changeset
  2504
		msg = "Network is unreachable";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2505
		sym = @symbol(ENETUNREACH);
362
claus
parents: 359
diff changeset
  2506
		break;
claus
parents: 359
diff changeset
  2507
#endif
claus
parents: 359
diff changeset
  2508
#ifdef ENETRESET
claus
parents: 359
diff changeset
  2509
	    case ENETRESET:
claus
parents: 359
diff changeset
  2510
		msg = "Network dropped conn due to reset";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2511
		sym = @symbol(ENETRESET);
362
claus
parents: 359
diff changeset
  2512
		break;
claus
parents: 359
diff changeset
  2513
#endif
claus
parents: 359
diff changeset
  2514
#ifdef ECONNABORTED
claus
parents: 359
diff changeset
  2515
	    case ECONNABORTED:
claus
parents: 359
diff changeset
  2516
		msg = "Software caused connection abort";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2517
		sym = @symbol(ECONNABORTED);
362
claus
parents: 359
diff changeset
  2518
		break;
claus
parents: 359
diff changeset
  2519
#endif
claus
parents: 359
diff changeset
  2520
#ifdef ECONNRESET
claus
parents: 359
diff changeset
  2521
	    case ECONNRESET:
claus
parents: 359
diff changeset
  2522
		msg = "Connection reset by peer";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2523
		sym = @symbol(ECONNRESET);
362
claus
parents: 359
diff changeset
  2524
		break;
claus
parents: 359
diff changeset
  2525
#endif
claus
parents: 359
diff changeset
  2526
#ifdef EISCONN
claus
parents: 359
diff changeset
  2527
	    case EISCONN:
claus
parents: 359
diff changeset
  2528
		msg = "Socket is already connected";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2529
		sym = @symbol(EISCONN);
362
claus
parents: 359
diff changeset
  2530
		break;
claus
parents: 359
diff changeset
  2531
#endif
claus
parents: 359
diff changeset
  2532
#ifdef ENOTCONN
claus
parents: 359
diff changeset
  2533
	    case ENOTCONN:
claus
parents: 359
diff changeset
  2534
		msg = "Socket is not connected";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2535
		sym = @symbol(ENOTCONN);
362
claus
parents: 359
diff changeset
  2536
		break;
claus
parents: 359
diff changeset
  2537
#endif
claus
parents: 359
diff changeset
  2538
#ifdef ESHUTDOWN
claus
parents: 359
diff changeset
  2539
	    case ESHUTDOWN:
claus
parents: 359
diff changeset
  2540
		msg = "Can't send after socket shutdown";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2541
		sym = @symbol(ESHUTDOWN);
362
claus
parents: 359
diff changeset
  2542
		break;
claus
parents: 359
diff changeset
  2543
#endif
claus
parents: 359
diff changeset
  2544
#ifdef EHOSTDOWN
claus
parents: 359
diff changeset
  2545
	    case EHOSTDOWN:
claus
parents: 359
diff changeset
  2546
		msg = "Host is down";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2547
		sym = @symbol(EHOSTDOWN);
362
claus
parents: 359
diff changeset
  2548
		break;
claus
parents: 359
diff changeset
  2549
#endif
claus
parents: 359
diff changeset
  2550
#ifdef EHOSTUNREACH
claus
parents: 359
diff changeset
  2551
	    case EHOSTUNREACH:
claus
parents: 359
diff changeset
  2552
		msg = "No route to host";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2553
		sym = @symbol(EHOSTUNREACH);
362
claus
parents: 359
diff changeset
  2554
		break;
claus
parents: 359
diff changeset
  2555
#endif
claus
parents: 359
diff changeset
  2556
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2557
	    default:
368
a3c21a89ec37 *** empty log message ***
claus
parents: 362
diff changeset
  2558
		{
809
5eef87c2907b e convenient macro for register saving (sparc only)
Claus Gittinger <cg@exept.de>
parents: 805
diff changeset
  2559
		    __BEGIN_PROTECT_REGISTERS__
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2560
		    sprintf(buffer, "ErrorNr: %d", __intVal(eno));
809
5eef87c2907b e convenient macro for register saving (sparc only)
Claus Gittinger <cg@exept.de>
parents: 805
diff changeset
  2561
		    __END_PROTECT_REGISTERS__
368
a3c21a89ec37 *** empty log message ***
claus
parents: 362
diff changeset
  2562
		}
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2563
		msg = buffer;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2564
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2565
	}
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2566
    }
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2567
    text = __MKSTRING(msg);
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2568
%}.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2569
    ^ Array with:sym with:text
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2570
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2571
    "
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2572
     OperatingSystem errorSymbolAndTextForNumber:4
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2573
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2574
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2575
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2576
errorSymbolForNumber:errNr
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2577
    "return a symbol for a unix errorNumber
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2578
     (as returned by a system call)."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2579
1153
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  2580
    ^ (self errorSymbolAndTextForNumber:errNr) at:1
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2581
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2582
    "
1666
4797ec69fc53 comment
Claus Gittinger <cg@exept.de>
parents: 1654
diff changeset
  2583
     OperatingSystem errorSymbolForNumber:4
4797ec69fc53 comment
Claus Gittinger <cg@exept.de>
parents: 1654
diff changeset
  2584
     OperatingSystem errorSymbolForNumber:2
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2585
    "
1153
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  2586
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  2587
    "Modified: 12.4.1996 / 09:16:29 / stefan"
1666
4797ec69fc53 comment
Claus Gittinger <cg@exept.de>
parents: 1654
diff changeset
  2588
    "Modified: 13.9.1996 / 16:23:35 / cg"
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2589
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2590
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2591
errorTextForNumber:errNr
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2592
    "return a message string from a unix errorNumber 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2593
     (as returned by a system call). 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2594
     The returned message is in english (as found in /usr/include/errno.h)
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2595
     and should be replaced by a resource lookup before being presented to the user."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2596
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2597
    ^ (self errorSymbolAndTextForNumber:errNr) at:2
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2598
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2599
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2600
     OperatingSystem errorTextForNumber:4
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2601
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2602
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2603
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2604
lastErrorNumber
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2605
    "return the last errors number.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2606
     See also: #lastErrorSymbol and #lastErrorString.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2607
     Notice: having a single error number is a bad idea in a multithreaded
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2608
	     environment - this interface will change."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2609
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2610
    ^ LastErrorNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2611
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2612
     "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2613
      OperatingSystem lastErrorNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2614
     "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2615
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2616
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2617
lastErrorString
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2618
    "return a message string describing the last error.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2619
     See also: #lastErrorNumber and #lastErrorSymbol.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2620
     Notice: having a single error number is a bad idea in a multithreaded
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2621
	     environment - this interface will change."
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2622
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2623
    ^ self errorTextForNumber:LastErrorNumber
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2624
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2625
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2626
     OperatingSystem lastErrorString
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2627
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2628
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2629
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2630
lastErrorSymbol
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2631
    "return a symbol (such as #EBADF or #EACCESS) describing the last error.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2632
     See also: #lastErrorNumber and #lastErrorString.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2633
     Notice: having a single error number is a bad idea in a multithreaded
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2634
	     environment - this interface will change."
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2635
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2636
    ^ self errorSymbolForNumber:LastErrorNumber
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2637
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2638
    "
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2639
     OperatingSystem lastErrorSymbol
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2640
    "
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2641
!
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2642
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2643
lastExecStatus
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2644
    "return the last execution status.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2645
     Notice: having a single error number is a bad idea in a multithreaded
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2646
	     environment - this interface will change."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2647
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2648
    ^ LastExecStatus
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2649
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2650
     "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2651
      OperatingSystem lastExecStatus
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2652
     "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2653
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2654
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  2655
!OperatingSystem class methodsFor:'executing OS commands'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2656
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2657
canExecuteCommand:aCommandString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2658
    "return true, if the OS can execute aCommand."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2659
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2660
    |cmd|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2661
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2662
    cmd := aCommandString asCollectionOfWords first.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2663
    ^ (self pathOfCommand:cmd) notNil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2664
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2665
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2666
     OperatingSystem canExecuteCommand:'fooBar'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2667
     OperatingSystem canExecuteCommand:'ls'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2668
     OperatingSystem canExecuteCommand:'cvs'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2669
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2670
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2671
    "Created: 4.11.1995 / 19:13:54 / cg"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2672
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2673
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2674
exec:aPath withArguments:argArray
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2675
    "execute the unix command specified by the argument, aPath, with
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2676
     arguments in argArray (no arguments, if nil).
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2677
     If successful, this method does NOT return and smalltalk is gone.
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2678
     If not successful, false is returned. Can be used with fork or to transfer
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2679
     to another program."
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2680
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2681
    ^ self exec:aPath withArguments:argArray fork:false
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2682
!
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2683
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2684
exec:aPath withArguments:argArray fileDescriptors:fdArray closeDescriptors:closeFdArray fork:doFork newPgrp:newPgrp
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2685
    "Internal combined fork & exec;
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2686
     If fork is false:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2687
	 execute the unix command specified by the argument, aPath, with
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2688
	 arguments in argArray (no arguments, if nil).
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2689
	 If successful, this method does not return and smalltalk is gone.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2690
	 If not successful, false is returned. Normal use is with forkForCommand.
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2691
     if its true:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2692
	for a child to do the above.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2693
	The id of the child process is returned; -1 if fork failed.
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2694
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2695
     fdArray contains the filedescriptors, to be used for the child (if fork is true).
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2696
	fdArray[1] = 15 -> use fd 15 as stdin.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2697
	If an element of the array is set to nil, the corresponding filedescriptor
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2698
	will be closed for the child.
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  2699
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  2700
     closeFdArray contains descriptors that will be closed in the subprocess.
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2701
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2702
     If newPgrp is true, the subprocess will be established in a new process group.
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2703
	Ths processgroup will be equal to id.
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2704
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2705
    Notice: this used to be two separate ST-methods; however, in order to use
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2706
	    vfork on some machines, it had to be merged into one, to avoid write
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2707
	    accesses to ST/X memory from the vforked-child. The code below only does
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2708
	    read accesses."
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2709
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2710
%{
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2711
#ifndef MSDOS_LIKE
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2712
    char **argv;
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2713
    int nargs, i, id;
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2714
    OBJ arg;
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2715
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2716
    if (__isString(aPath) && 
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2717
	((argArray == nil) || __isArray(argArray)) &&
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2718
	((fdArray == nil) || __isArray(fdArray)) &&
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2719
	((closeFdArray == nil) || __isArray(closeFdArray))
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2720
    ) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2721
	nargs = argArray == nil ? 0 : _arraySize(argArray);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2722
	argv = (char **) malloc(sizeof(char *) * (nargs + 1));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2723
	if (argv) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2724
	    for (i=0; i < nargs; i++) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2725
		arg = __ArrayInstPtr(argArray)->a_element[i];
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2726
		if (__isString(arg)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2727
		    argv[i] = (char *) __stringVal(arg);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2728
		} else {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2729
		    argv[i] = "";
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2730
		}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2731
	    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2732
	    argv[i] = NULL;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2733
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2734
	    if (doFork == true) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2735
		int nfd, nclose;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2736
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2737
		nfd = fdArray == nil ? 0 : _arraySize(fdArray);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2738
		nclose = closeFdArray == nil ? 0 : _arraySize(closeFdArray);
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2739
#ifdef HAS_VFORK
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2740
		id = vfork();
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2741
#else
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2742
		id = fork();
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2743
#endif
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2744
		if (id == 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2745
		    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2746
		    ** In child.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2747
		    ** first: dup filedescriptors
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2748
		    */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2749
		    for (i = 0; i < nfd; i++) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2750
			if (__isSmallInteger(__ArrayInstPtr(fdArray)->a_element[i]) &&
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2751
			    __intVal(__ArrayInstPtr(fdArray)->a_element[i]) != i
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2752
			) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2753
			    dup2(__intVal(__ArrayInstPtr(fdArray)->a_element[i]), i);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2754
			}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2755
		    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2756
		    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2757
		    ** second: close unused filedescriptors
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2758
		    */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2759
		    for (i = 0; i < nfd; i++) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2760
			if (__ArrayInstPtr(fdArray)->a_element[i] == nil) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2761
			    close(i);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2762
			}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2763
		    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2764
		    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2765
		    ** third: close filedescriptors
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2766
		    */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2767
		    for (i = 0; i < nclose; i++) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2768
			if (__isSmallInteger(__ArrayInstPtr(closeFdArray)->a_element[i])) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2769
			    close(__intVal(__ArrayInstPtr(closeFdArray)->a_element[i]));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2770
			}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2771
		    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2772
		    if (newPgrp == true) {
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2773
#if defined(_POSIX_JOB_CONTROL)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2774
			(void) setpgid(0, 0);
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2775
#else
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2776
#if defined(BSD)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2777
			(void) setpgrp(0);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2778
#endif
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2779
#endif
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2780
		    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2781
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2782
		    execv(__stringVal(aPath), argv);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2783
		    /* should not be reached */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2784
		    _exit(127);                 /* POSIX 2 compatible exit value */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2785
		}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2786
		/*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2787
		** In parent: succes or failure
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2788
		*/
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2789
		free(argv);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2790
		RETURN (__MKSMALLINT(id));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2791
	    } else {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2792
		execv(__stringVal(aPath), argv);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2793
		/* 
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2794
		 * should not be reached
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2795
		 * (well, it is, if you pass a wrong command-path)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2796
		 */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2797
		free(argv);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2798
		RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2799
	    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2800
	}
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2801
    }
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2802
#endif
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2803
%}.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2804
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2805
     path-argument not string
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2806
     or argArray not an array/nil
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2807
     or malloc failed
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2808
     or not supported by OS
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2809
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2810
    ^ self primitiveFailed
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2811
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2812
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2813
     |id|
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2814
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2815
     id := OperatingSystem fork.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2816
     id == 0 ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2817
	"I am the child"
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2818
	OperatingSystem exec:'/bin/ls' withArguments:#('ls' '/tmp').
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2819
	"not reached"
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2820
     ]
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2821
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2822
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2823
     |id|
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2824
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2825
     id := OperatingSystem fork.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2826
     id == 0 ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2827
	"I am the child"
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2828
	OperatingSystem exec:'/bin/sh' withArguments:#('sh' '-c' 'sleep 2;echo 1;sleep 2;echo 2').
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2829
	"not reached"
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2830
     ].
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2831
     id printNL.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2832
     (Delay forSeconds:3.5) wait.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2833
     'killing ...' printNL.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2834
     OperatingSystem sendSignal:(OperatingSystem sigTERM) to:id.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2835
     OperatingSystem sendSignal:(OperatingSystem sigKILL) to:id
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2836
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2837
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2838
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2839
exec:aPath withArguments:argArray fileDescriptors:fdArray fork:doFork
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2840
    "Internal combined fork & exec;
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2841
     If fork is false:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2842
	 execute the unix command specified by the argument, aPath, with
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2843
	 arguments in argArray (no arguments, if nil).
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2844
	 If successful, this method does not return and smalltalk is gone.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2845
	 If not successful, false is returned. Normal use is with forkForCommand.
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2846
     if its true:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2847
	for a child to do the above.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2848
	The id of the child process is returned; -1 if fork failed.
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2849
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2850
     fdArray contains the filedescriptors, to be used for the child (if fork is true).
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2851
	fdArray[1] = 15 -> use fd 15 as stdin.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2852
	If an element of the array is set to nil, the corresponding filedescriptor
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2853
	will be closed for the child.
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2854
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2855
    Notice: this used to be two separate ST-methods; however, in order to use
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2856
	    vfork on some machines, it had to be merged into one, to avoid write
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2857
	    accesses to ST/X memory from the vforked-child. The code below only does
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2858
	    read accesses."
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2859
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2860
    ^ self exec:aPath withArguments:argArray fileDescriptors:fdArray closeDescriptors:nil fork:doFork newPgrp:false
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2861
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2862
    "Modified: 23.4.1996 / 17:05:41 / stefan"
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2863
!
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2864
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2865
exec:aPath withArguments:argArray fork:doFork
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2866
    "Internal combined fork & exec;
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2867
     If fork is false:
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2868
	 execute the unix command specified by the argument, aPath, with
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2869
	 arguments in argArray (no arguments, if nil).
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2870
	 If successful, this method does not return and smalltalk is gone.
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2871
	 If not successful, false is returned. Normal use is with forkForCommand.
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2872
     if its true:
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2873
	for a child to do the above.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2874
	The id of the child process is returned; -1 if fork failed.
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2875
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2876
    Notice: this used to be two separate ST-methods; however, in order to use
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2877
	    vfork on some machines, it had to be merged into one, to avoid write
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2878
	    accesses to ST/X memory from the vforked-child. The code below only does
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2879
	    read accesses."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2880
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2881
%{
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2882
#ifndef MSDOS_LIKE
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2883
    char **argv;
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2884
    int nargs, i, id;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2885
    OBJ arg;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2886
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2887
    if (__isString(aPath) && ((argArray == nil) || __isArray(argArray))) {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2888
	nargs = argArray == nil ? 0 : _arraySize(argArray);
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2889
	argv = (char **) malloc(sizeof(char *) * (nargs + 1));
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2890
	if (argv) {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2891
	    for (i=0; i < nargs; i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2892
		arg = __ArrayInstPtr(argArray)->a_element[i];
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2893
		if (__isString(arg)) {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2894
		    argv[i] = (char *) __stringVal(arg);
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2895
		} else {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2896
		    argv[i] = "";
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2897
		}
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2898
	    }
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2899
	    argv[i] = NULL;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2900
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2901
	    if (doFork == true) {
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2902
#ifdef HAS_VFORK
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2903
		id = vfork();
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2904
#else
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2905
		id = fork();
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2906
#endif
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2907
		if (id == 0) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2908
		    execv(__stringVal(aPath), argv);
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2909
		    /* should not be reached */
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2910
		    _exit(127);         /* POSIX-2 compatible exit value */
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2911
		}
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2912
		free(argv);
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2913
		RETURN (__MKSMALLINT(id));
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2914
	    } else {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2915
		execv(__stringVal(aPath), argv);
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2916
		/* 
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2917
		 * should not be reached
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2918
		 * (well, it is, if you pass a wrong command-path)
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2919
		 */
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2920
		free(argv);
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2921
		RETURN ( false );
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2922
	    }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2923
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2924
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2925
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2926
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2927
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2928
     path-argument not string
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2929
     or argArray not an array/nil
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2930
     or malloc failed
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2931
     or not supported by OS
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2932
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2933
    ^ self primitiveFailed
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2934
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2935
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2936
     |id|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2937
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2938
     id := OperatingSystem fork.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2939
     id == 0 ifTrue:[
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2940
	"I am the child"
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2941
	OperatingSystem exec:'/bin/ls' withArguments:#('ls' '/tmp').
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2942
	"not reached"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2943
     ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2944
    "
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2945
    "
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2946
     |id|
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2947
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2948
     id := OperatingSystem fork.
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2949
     id == 0 ifTrue:[
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2950
	"I am the child"
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2951
	OperatingSystem exec:'/bin/sh' withArguments:#('sh' '-c' 'sleep 2;echo 1;sleep 2;echo 2').
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2952
	"not reached"
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2953
     ].
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2954
     id printNL.
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2955
     (Delay forSeconds:3.5) wait.
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2956
     'killing ...' printNL.
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2957
     OperatingSystem sendSignal:(OperatingSystem sigTERM) to:id.
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2958
     OperatingSystem sendSignal:(OperatingSystem sigKILL) to:id
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2959
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2960
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2961
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2962
executeCommand:aCommandString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2963
    "execute the unix command specified by the argument, aCommandString.
676
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  2964
     The commandString is passed to a shell for execution - see the description of
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  2965
     'sh -c' in your UNIX manual.
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2966
     Return true if successful, false otherwise."
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2967
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2968
" when all machines have been checked, this will be defined as:
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2969
     ^ self executeCommand:aCommandString onError:[:status| false]
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2970
until then:"
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2971
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2972
%{ 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2973
    int status;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2974
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2975
    if (__isString(aCommandString)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2976
	/*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2977
	 * ST/X provides a modified (fixed) implementation of the
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2978
	 * system() libc-function, which is interruptable ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2979
	 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2980
# ifdef WANT_SYSTEM
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2981
	status = mySystem((char *) __stringVal(aCommandString));
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2982
# else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2983
	status = system((char *) __stringVal(aCommandString));
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2984
# endif
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2985
	OperatingSystem_LastExecStatus = __MKSMALLINT(status);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2986
	if (status == 0) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2987
	    RETURN ( true );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2988
	}
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2989
	OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2990
	RETURN ( false );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2991
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2992
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2993
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2994
    "/ invalid argument (non-string)
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2995
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2996
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2997
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2998
    "
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
  2999
     OperatingSystem executeCommand:'sleep 30'. 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3000
     OperatingSystem executeCommand:'pwd'. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3001
     OperatingSystem executeCommand:'ls -l'. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3002
     OperatingSystem executeCommand:'invalidCommand'. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3003
     OperatingSystem executeCommand:'rm /tmp/foofoofoofoo'. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3004
    "
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3005
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3006
    "Modified: 27.12.1995 / 23:40:35 / stefan"
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3007
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3008
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3009
executeCommand:aCommandString inputFrom:anExternalInStream outputTo:anExternalOutStream errorTo:anExternalErrStream onError:aBlock
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3010
    "execute the unix command specified by the argument, aCommandString.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3011
     The commandString is passed to a shell for execution - see the description of
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3012
     'sh -c' in your UNIX manual.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3013
     Return true if successful.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3014
     If not successfull, aBlock is called with a Dictionary containing the exit status
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3015
     as argument."
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3016
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3017
    |pid exitStatus sema|
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3018
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3019
    sema := Semaphore new.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3020
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3021
    [
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3022
	pid := self 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3023
		startProcess:aCommandString
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3024
		inputFrom:anExternalInStream 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3025
		outputTo:anExternalOutStream 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3026
		errorTo:anExternalErrStream.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3027
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3028
	pid > 0 ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3029
	    Processor monitorPid:pid action:[:status |
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3030
		status stillAlive ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3031
		    exitStatus := status.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3032
		    sema signal
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3033
		].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3034
	    ].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3035
	    sema wait.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3036
	] ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3037
	    exitStatus := OSProcessStatus processCreationFailure.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3038
	].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3039
    ] valueUninterruptably.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3040
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3041
    exitStatus success ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3042
	^ aBlock value:exitStatus
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3043
    ].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3044
    ^ true.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3045
!
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3046
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3047
executeCommand:aCommandString onError:aBlock
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3048
    "execute the unix command specified by the argument, aCommandString.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3049
     The commandString is passed to a shell for execution - see the description of
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3050
     'sh -c' in your UNIX manual.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3051
     Return true if successful.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3052
     If not successfull, aBlock is called with a Dictionary containing the exit status
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3053
     as argument."
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3054
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3055
    |pid exitStatus sema|
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3056
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3057
    sema := Semaphore new.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3058
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3059
    [
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3060
	pid := self startProcess:aCommandString.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3061
	pid > 0 ifTrue:[
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3062
	    Processor monitorPid:pid action:[:status |
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3063
		status stillAlive ifFalse:[
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3064
		    exitStatus := status.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3065
		    sema signal
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3066
		].
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3067
	    ].
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3068
	    sema wait.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3069
	] ifFalse:[
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3070
	    exitStatus := OSProcessStatus processCreationFailure.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3071
	].
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3072
    ] valueUninterruptably.
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3073
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3074
    exitStatus success ifFalse:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3075
	^ aBlock value:exitStatus
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3076
    ].
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3077
    ^ true.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3078
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3079
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3080
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3081
     OperatingSystem executeCommand:'sleep 30' onError:[]. 
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3082
     OperatingSystem executeCommand:'pwd' onError:[:status|status inspect]. 
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3083
     OperatingSystem executeCommand:'ls -l' onError:[]. 
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3084
     OperatingSystem executeCommand:'invalidCommand' onError:[:status| status inspect]. 
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3085
     OperatingSystem executeCommand:'rm /tmp/foofoofoofoo'onError:[:status | status inspect]. 
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3086
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3087
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3088
    "Created: 22.12.1995 / 14:49:59 / stefan"
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3089
    "Modified: 28.12.1995 / 15:25:48 / stefan"
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3090
    "Modified: 28.2.1996 / 21:41:23 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3091
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3092
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3093
fork
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3094
    "fork a new (HEAVY-weight) unix process.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3095
     Dont confuse this with Block>>fork, which creates 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3096
     lightweight smalltalk processes. This method will return
676
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  3097
     0 to the child process, and a non-zero number (which is the childs
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  3098
     unix-process-id) to the parent (original) process.
764
eadba1b6a721 vfork interface (for poor BSD ultrix) - without it, it takes 20 seconds
Claus Gittinger <cg@exept.de>
parents: 763
diff changeset
  3099
676
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  3100
     In normal situations, you dont need to use this low level entry; see
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  3101
     #startProcess: and #executCommand: for higher level interfaces."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3102
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3103
%{  /* NOCONTEXT */
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3104
#ifndef MSDOS_LIKE
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3105
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3106
    int pid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3107
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3108
    pid = fork();
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3109
    RETURN ( __MKSMALLINT(pid) );
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3110
#endif
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3111
%}.
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3112
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3113
    "/ not supported by OS
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3114
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3115
    ^ self primitiveFailed
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3116
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3117
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3118
     |id|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3119
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3120
     id := OperatingSystem fork.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3121
     id == 0 ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3122
	OperatingSystem exit
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3123
     ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3124
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3125
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3126
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3127
getStatusOfProcess:aProcessId
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3128
    "wait for a process to terminate and fetch its exit status.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3129
     This is required to avoid zombie processes."
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3130
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3131
%{
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3132
#ifndef MSDOS_LIKE
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3133
    int status;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3134
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3135
    if (__isSmallInteger(aProcessId)) {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3136
	pid_t pid = (pid_t)(__intVal(aProcessId));
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3137
	{
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3138
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3139
# ifdef  NO_WAITPID
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3140
	    pid_t child;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3141
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3142
	    do {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3143
		__BEGIN_INTERRUPTABLE__
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3144
		child = __wait (&status);
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3145
		__END_INTERRUPTABLE__
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3146
		if (child < 0 && errno != EINTR) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  3147
		    fprintf(stderr, "OS: child-wait errno=%d\n", errno);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3148
		    status = -1;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3149
		    break;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3150
		}
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3151
	    } while (child != pid);
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3152
# else
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3153
	    pid_t child;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3154
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3155
	    /* claus: the original did not care for EINTR here ... */
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3156
	    do {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3157
		__BEGIN_INTERRUPTABLE__
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3158
		child = __waitpid (pid, &status, 0);
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3159
		__END_INTERRUPTABLE__
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3160
	    } while ((child != pid) && (errno == EINTR));
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3161
	    if (child != pid) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  3162
		fprintf(stderr, "OS: child-waitpid errno=%d\n", errno);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3163
		status = -1;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3164
	    }
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3165
# endif /* NO_WAITPID */
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3166
	}
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3167
	RETURN ( __MKSMALLINT(status));
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3168
    }
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3169
#endif
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3170
%}.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3171
    self primitiveFailed
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3172
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3173
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3174
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3175
pathOfCommand:aCommand
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3176
    "find where aCommand's executable file is"
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3177
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3178
    |path f|
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3179
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3180
    path := self getEnvironment:'PATH'.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3181
    path notNil ifTrue:[
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3182
	(path asCollectionOfSubstringsSeparatedBy:$:) do:[:path |
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3183
	    (f := (path asFilename construct:aCommand)) isExecutable ifTrue:[
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3184
		^  f pathName
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3185
	    ]
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3186
	].
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3187
    ].
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3188
    ^ nil
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3189
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3190
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3191
     OperatingSystem pathOfCommand:'fooBar'  
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3192
     OperatingSystem pathOfCommand:'ls'  
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3193
     OperatingSystem pathOfCommand:'cvs'  
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3194
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3195
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3196
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3197
startProcess:aCommandString
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3198
    "start executing the unix command as specified by the argument, aCommandString
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3199
     as a separate process; do not wait for the command to finish.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3200
     The commandString is passed to a shell for execution - see the description of
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3201
     'sh -c' in your UNIX manual.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3202
     Return the processId if successful, nil otherwise.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3203
     Use #waitForProcess: for synchronization and exec status return,
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3204
     or #killProcess: to stop it."
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3205
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3206
    ^ self 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3207
	exec:'/bin/sh' 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3208
	withArguments:(Array with:'sh' with:'-c' with:aCommandString)
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3209
	fork:true.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3210
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3211
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3212
     |pid|
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3213
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3214
     pid := OperatingSystem startProcess:'sleep 2; echo 1; sleep 2; echo 2'.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3215
     (Delay forSeconds:3) wait.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3216
     OperatingSystem killProcess:pid.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3217
    "
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3218
!
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3219
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3220
startProcess:aCommandString inputFrom:anExternalInStream outputTo:anExternalOutStream errorTo:anExternalErrStream
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3221
    "start executing the unix command as specified by the argument, aCommandString
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3222
     as a separate process; do not wait for the command to finish.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3223
     The commandString is passed to a shell for execution - see the description of
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3224
     'sh -c' in your UNIX manual.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3225
     The command gets stdIn, stdOut and stdErr assigned from the arguments;
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3226
     each may be nil.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3227
     Return the processId if successful, nil otherwise.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3228
     Use #monitorPid:action: for synchronization and exec status return,
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3229
     or #killProcess: to stop it."
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3230
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3231
    |in out err|
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3232
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3233
    anExternalInStream notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3234
	in := anExternalInStream fileDescriptor.
1046
7b50e6c3147f nil input -> /dev/null
ca
parents: 1045
diff changeset
  3235
    ] ifFalse:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3236
	in := '/dev/null' asFilename readStream fileDescriptor
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3237
    ].
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3238
    anExternalOutStream notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3239
	out := anExternalOutStream fileDescriptor.
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3240
    ].
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3241
    anExternalErrStream notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3242
	err := anExternalErrStream fileDescriptor.
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3243
    ].
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3244
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3245
    ^ self 
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3246
	exec:'/bin/sh' 
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3247
	withArguments:(Array with:'sh' with:'-c' with:aCommandString)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3248
	fileDescriptors:(Array with:in with:out with:err)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3249
	fork:true.
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3250
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3251
    "blocking at current prio (i.e. only higher prio threads execute):
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3252
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3253
     OperatingSystem executeCommand:'ls -l > out'.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3254
    "
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3255
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3256
    "non-blocking (lower prio threads continue):
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3257
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3258
     |in out err pid sema|
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3259
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3260
     in := 'out' asFilename readStream.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3261
     out := 'out2' asFilename writeStream.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3262
     err := 'err' asFilename writeStream.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3263
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3264
     sema := Semaphore new.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3265
     pid := OperatingSystem startProcess:'sleep 10; grep drw' inputFrom:in outputTo:out errorTo:err.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3266
     pid notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3267
	 Processor monitorPid:pid action:[:OSstatus | sema signal ].
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3268
     ].
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3269
     in close.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3270
     out close.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3271
     err close.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3272
     sema wait.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1323
diff changeset
  3273
     Transcript showCR:'finished'
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3274
    "
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3275
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3276
    "Created: 29.2.1996 / 12:31:29 / cg"
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3277
    "Modified: 29.2.1996 / 12:49:14 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3278
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3279
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  3280
!OperatingSystem class methodsFor:'file access'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3281
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3282
closeFd:anInteger
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3283
    "low level close of a filedescriptor"
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3284
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3285
%{
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3286
#if !defined(transputer) && !defined(MSDOS_LIKE)
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3287
     if (__isSmallInteger(anInteger)) {
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3288
	close(__intVal(anInteger));
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3289
	RETURN(self);
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3290
     }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3291
#endif
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3292
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3293
     ^ self primitiveFailed.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3294
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3295
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3296
createDirectory:newPathName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3297
    "create a new directory with name 'newPathName'.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3298
     Return true if successful, false if failed.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3299
     This is a low-level entry - use Filename protocol for compatibility."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3300
1497
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3301
    "/ if it already exists this is ok
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3302
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3303
    (self isDirectory:newPathName) ifTrue:[^ true].
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3304
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3305
    "/ since createDirectory is not used too often,
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3306
    "/  you'll forgive me using mkdir ...
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3307
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3308
    ^ self executeCommand:('mkdir 2>/dev/null ', newPathName)
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3309
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3310
    "
1497
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3311
     OperatingSystem createDirectory:'foo'  
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3312
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3313
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3314
    "Modified: 20.12.1995 / 11:24:13 / stefan"
1497
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3315
    "Modified: 29.6.1996 / 14:06:54 / cg"
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3316
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3317
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3318
linkFile:oldPath to:newPath
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3319
    "link the file 'oldPath' to 'newPath'. The link will be a hard link.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3320
     Return true if successful, false if not."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3321
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3322
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3323
#ifndef MSDOS_LIKE
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3324
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3325
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3326
    if (__isString(oldPath) && __isString(newPath)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3327
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3328
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3329
	    ret = link((char *) __stringVal(oldPath), (char *) __stringVal(newPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3330
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3331
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3332
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3333
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3334
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3335
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3336
	RETURN (true);
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3337
    }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3338
#endif
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3339
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3340
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3341
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3342
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3343
     OperatingSystem linkFile:'foo' to:'bar'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3344
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3345
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3346
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3347
makePipe
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3348
    "make a pipe, return array with two filedescriptors on success,
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3349
     nil on failure.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3350
     This is a lowLevel entry, not for public use.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3351
     See ExternalStream>>makePipe for a more user-friendly, public interface."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3352
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3353
    |fd1 fd2|    
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3354
                
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3355
%{       
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  3356
#ifdef UNIX_LIKE
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3357
     int fds[2];
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3358
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3359
     if (pipe(fds) < 0) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3360
	@global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3361
	RETURN ( nil );
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3362
     }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3363
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3364
     fd1 = __MKSMALLINT(fds[0]);
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3365
     fd2 = __MKSMALLINT(fds[1]);
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  3366
#endif
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3367
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3368
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3369
     ^ Array with:fd1 with:fd2.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3370
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3371
1132
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3372
recursiveCopyDirectory:sourcePathName to:destination
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3373
    "copy the directory named 'sourcePathName' and all contained files/directories to 'destination'.
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3374
     Return true if successful."
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3375
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3376
    ^ self executeCommand:('cp -rf ' , sourcePathName, ' ', destination)
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3377
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3378
    "Modified: 7.3.1996 / 15:26:30 / cg"
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3379
!
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3380
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3381
recursiveCreateDirectory:dirName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3382
    "create a directory - with all parent dirs if needed.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3383
     Return true if successful, false otherwise. If false
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3384
     is returned, a partial created tree may be left,
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3385
     which is not cleaned-up here."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3386
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3387
    self createDirectory:dirName.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3388
    (self isDirectory:dirName) ifFalse:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3389
	(self recursiveCreateDirectory:(self directoryNameOf:dirName)) ifFalse:[^ false].
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3390
	^ self createDirectory:dirName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3391
    ].
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3392
    ^ true
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3393
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3394
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3395
     OperatingSystem recursiveCreateDirectory:'foo/bar/baz'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3396
     OperatingSystem recursiveRemoveDirectory:'foo'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3397
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3398
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3399
    "Modified: 7.3.1996 / 15:26:22 / cg"
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3400
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3401
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3402
recursiveRemoveDirectory:fullPathName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3403
    "remove the directory named 'fullPathName' and all contained files/directories.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3404
     Return true if successful."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3405
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3406
    ^ self executeCommand:('rm -rf ' , fullPathName)
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3407
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3408
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3409
     OperatingSystem recursiveCreateDirectory:'foo/bar/baz'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3410
     OperatingSystem recursiveRemoveDirectory:'foo'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3411
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3412
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3413
    "Modified: 7.3.1996 / 15:26:30 / cg"
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3414
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3415
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3416
removeDirectory:fullPathName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3417
    "remove the directory named 'fullPathName'.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3418
     Return true if successful, false if directory is not empty or no permission.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3419
     This is a lowLevel entry - use Filename protocol for compatibility."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3420
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3421
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3422
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3423
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3424
    if (__isString(fullPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3425
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3426
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3427
	    ret = rmdir((char *) __stringVal(fullPathName));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3428
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3429
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3430
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3431
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3432
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3433
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3434
	RETURN (true);
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3435
    }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3436
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3437
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3438
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3439
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3440
     OperatingSystem createDirectory:'foo'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3441
     OperatingSystem removeDirectory:'foo'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3442
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3443
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3444
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3445
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3446
removeFile:fullPathName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3447
    "remove the file named 'fullPathName'; return true if successful.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3448
     This is a lowLevel entry - use Filename protocol for compatibility."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3449
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3450
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3451
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3452
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3453
    if (__isString(fullPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3454
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3455
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3456
	    ret = unlink((char *) __stringVal(fullPathName));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3457
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3458
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3459
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3460
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3461
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3462
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3463
	RETURN (true);
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3464
    }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3465
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3466
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3467
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3468
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3469
renameFile:oldPath to:newPath
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3470
    "rename the file 'oldPath' to 'newPath'. 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3471
     Return true if successful, false if not"
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3472
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3473
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3474
    int ret, eno;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3475
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3476
    if (__isString(oldPath) && __isString(newPath)) {
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3477
#if defined(HAS_RENAME)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3478
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3479
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3480
	    ret = rename((char *) __stringVal(oldPath), (char *) __stringVal(newPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3481
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3482
	__END_INTERRUPTABLE__
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3483
#else
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3484
# ifndef MSDOS_LIKE
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3485
	ret = link((char *) __stringVal(oldPath), (char *) __stringVal(newPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3486
	if (ret >= 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3487
	    ret = unlink((char *) __stringVal(oldPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3488
	    if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3489
		eno = errno;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3490
		unlink((char *) __stringVal(newPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3491
		errno = eno;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3492
	    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3493
	}
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3494
# endif
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3495
#endif
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3496
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3497
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3498
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3499
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3500
	RETURN (true);
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3501
    }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3502
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3503
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3504
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3505
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3506
     OperatingSystem renameFile:'foo' to:'bar'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3507
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3508
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3509
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3510
truncateFile:aPathName to:newSize
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3511
    "change a files size return true on success, false on failure.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3512
     This may not be supported on all architectures.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3513
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3514
     This is a low-level entry - use Filename protocol."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3515
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3516
%{
1623
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3517
#ifdef HAS_TRUNCATE
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3518
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3519
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3520
    if (__isString(aPathName)
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3521
     && __isSmallInteger(newSize)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3522
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3523
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3524
	    ret = truncate((char *) __stringVal(aPathName), __intVal(newSize));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3525
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3526
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3527
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3528
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3529
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3530
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3531
	RETURN (true);
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3532
    }
1623
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3533
#else
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3534
# ifdef HAS_FTRUNCATE
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3535
    int ret;
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3536
    int fd;
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3537
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3538
    if (__isString(aPathName)
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3539
     && __isSmallInteger(newSize)) {
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3540
	do {
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3541
	    fd = open((char *) __stringVal(aPathName), 2);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3542
	} while (fd < 0 && errno == EINTR);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3543
	if (fd < 0) {
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3544
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3545
	    RETURN ( false );
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3546
	}
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3547
        
1623
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3548
	ret = ftruncate(fd, __intVal(newSize));
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3549
	close(fd);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3550
	if (ret < 0) {
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3551
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3552
	    RETURN ( false );
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3553
	} 
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3554
	RETURN (true);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3555
    }
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3556
# endif /* using FTRUNCATE */
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3557
#endif
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3558
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3559
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3560
! !
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3561
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  3562
!OperatingSystem class methodsFor:'file access rights'!
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3563
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3564
accessMaskFor:aSymbol
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3565
    "return the access bits mask for numbers as returned by 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3566
     OperatingSystem>>accessModeOf:
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3567
     and expected by OperatingSystem>>changeAccessModeOf:to:.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3568
     Since these numbers are OS dependent, always use the mask
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3569
     (never hardcode 8rxxx into your code)."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3570
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3571
%{  /* NOCONTEXT */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3572
#   ifndef S_IRUSR
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3573
    /* posix systems should define these ... */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3574
#    define S_IRUSR 0400
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3575
#    define S_IWUSR 0200
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3576
#    define S_IXUSR 0100
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3577
#    define S_IRGRP 0040
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3578
#    define S_IWGRP 0020
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3579
#    define S_IXGRP 0010
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3580
#    define S_IROTH 0004
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3581
#    define S_IWOTH 0002
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3582
#    define S_IXOTH 0001
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3583
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3584
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3585
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3586
    if (aSymbol == @symbol(readUser)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3587
	RETURN ( __MKSMALLINT(S_IRUSR) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3588
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3589
    if (aSymbol == @symbol(writeUser)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3590
	RETURN ( __MKSMALLINT(S_IWUSR) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3591
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3592
    if (aSymbol == @symbol(executeUser)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3593
	RETURN ( __MKSMALLINT(S_IXUSR) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3594
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3595
    if (aSymbol == @symbol(readGroup)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3596
	RETURN ( __MKSMALLINT(S_IRGRP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3597
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3598
    if (aSymbol == @symbol(writeGroup)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3599
	RETURN ( __MKSMALLINT(S_IWGRP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3600
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3601
    if (aSymbol == @symbol(executeGroup)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3602
	RETURN ( __MKSMALLINT(S_IXGRP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3603
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3604
    if (aSymbol == @symbol(readOthers)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3605
	RETURN ( __MKSMALLINT(S_IROTH) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3606
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3607
    if (aSymbol == @symbol(writeOthers)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3608
	RETURN ( __MKSMALLINT(S_IWOTH) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3609
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3610
    if (aSymbol == @symbol(executeOthers)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3611
	RETURN ( __MKSMALLINT(S_IXOTH) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3612
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3613
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3614
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3615
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3616
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3617
     OperatingSystem accessMaskFor:#readUser
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3618
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3619
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3620
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3621
accessModeOf:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3622
    "return a number representing access rights rwxrwxrwx for owner,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3623
     group and others. Return nil if such a file does not exist.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3624
     Notice that the returned number is OS dependent - use the 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3625
     modeMasks as returned by OperatingSystem>>accessMaskFor:"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3626
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3627
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3628
     this could have been implemented as:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3629
	(self infoOf:aPathName) at:#mode
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3630
     but for huge directory searches the code below is faster
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3631
    "
345
claus
parents: 329
diff changeset
  3632
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3633
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3634
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3635
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3636
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3637
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3638
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3639
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3640
	    ret = stat((char *) __stringVal(aPathName), &buf);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3641
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3642
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3643
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3644
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3645
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3646
	    RETURN ( nil );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3647
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3648
	RETURN ( __MKSMALLINT(buf.st_mode & 0777) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3649
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3650
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3651
   ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3652
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3653
   "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3654
    (OperatingSystem accessModeOf:'/') printStringRadix:8
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3655
   "
345
claus
parents: 329
diff changeset
  3656
!
claus
parents: 329
diff changeset
  3657
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3658
changeAccessModeOf:aPathName to:modeBits
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3659
    "change the access rights of aPathName to the OS dependent modeBits.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3660
     You should construct this mask using accessMaskFor, to be OS
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3661
     independent. Return true if changed, 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3662
     false if such a file does not exist or change was not allowd."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3663
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3664
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3665
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3666
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3667
    if (__isString(aPathName) && __isSmallInteger(modeBits)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3668
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3669
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3670
	    ret = chmod((char *)__stringVal(aPathName), __intVal(modeBits));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3671
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3672
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3673
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3674
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3675
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3676
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3677
	RETURN ( true );
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3678
    }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3679
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3680
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3681
! !
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3682
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  3683
!OperatingSystem class methodsFor:'file locking'!
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3684
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3685
lockFD:aFileDescriptor shared:isSharedReadLock blocking:blockIfLocked
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3686
   "set a lock on the file represented by aFileDescriptor.
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3687
    (such as returned by ExternalStream>>fileDescriptor).
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3688
    On some systems, only advisory locks are available -
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3689
    these depends on other accessors to also perform the locking operation.
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3690
    If they do not, they may still access the file 
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3691
    (on some systems, locks are mandatory, on others, they are advisory). 
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3692
    The isSharedReadLock argument (if true) specifies if multiple readers
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3693
    are to be allowed - if false, they are not.
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3694
    On some systems, all locks are non-exclusive locks.
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3695
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3696
    Returns true, if the lock was aquired, false otherwise.
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3697
1616
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3698
    Notice, that not all OS's support these locks; 
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3699
    on some, this may simply be a no-op.
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3700
    Also notice, that some systems block the process, to wait for the lock.
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3701
    This can (again: on some systems) be avoided by passing a false blockIfLocked
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3702
    argument."
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3703
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3704
%{
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3705
    if (__isSmallInteger(aFileDescriptor)) {
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3706
	int fd = __intVal(aFileDescriptor);
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3707
	int lockArg;
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3708
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3709
	/*
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3710
	 * claus: sigh - each one has a different interface ... 
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3711
	 */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3712
#if defined(F_SETLK)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3713
	{
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3714
	    /* 
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3715
	     * new fcntl(SETLK) interface;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3716
	     * available on SYSV4 and Linux
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3717
	     */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3718
	    struct flock flock;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3719
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3720
	    if (isSharedReadLock == true) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3721
		flock.l_type = F_RDLCK;
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3722
	    } else {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3723
		flock.l_type = F_WRLCK;
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3724
	    }
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3725
	    flock.l_whence = 0;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3726
	    flock.l_start = 0;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3727
	    flock.l_len = 0;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3728
	    lockArg = F_SETLK;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3729
# if defined(F_SETLKW)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3730
	    if (blockIfLocked == true) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3731
		lockArg = F_SETLKW;
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3732
	    }
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3733
# endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3734
	    if (fcntl(fd, lockArg, &flock) != -1) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3735
		RETURN (true);
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3736
	    }
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3737
	}
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3738
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3739
#else /* no F_SETLK available */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3740
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3741
# if defined(LOCK_EX) && defined(LOCK_UN)
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3742
	/* 
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3743
	 * BSD 4.3 advisory locks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3744
	 */
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3745
	lockArg = LOCK_EX;
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3746
#  if defined(LOCK_SH)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3747
	if (isSharedReadLock == true) {
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3748
	    lockArg = LOCK_SH
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3749
	}
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3750
#  endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3751
#  if defined(LOCK_NB)
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3752
	if (blockIfLocked == false) {
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3753
	    lockArg |= LOCK_NB;
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3754
	}
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3755
#  endif
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3756
	if (flock(fd, lockArg) != -1) {
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3757
	    RETURN (true);
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3758
	}
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3759
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3760
# else /* no flock available */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3761
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3762
#  if defined(F_LOCK) && defined(F_UNLOCK)
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3763
	/* 
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3764
	 * SYSV3 advisory locks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3765
	 */
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3766
	if (lockf(fd, F_LOCK, 0) != -1) {
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3767
	    RETURN (true);
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3768
	}
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3769
#  endif
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3770
# endif
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3771
#endif
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3772
    }
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3773
%}.
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3774
    ^ false
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3775
!
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3776
1616
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3777
supportsFileLocks
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3778
    "return true, if the OS supports file locking"
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3779
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3780
%{ /* NOCONTEXT */
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3781
#if defined(F_SETLK)
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3782
    RETURN (true);
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3783
#else
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3784
# if defined(LOCK_EX) && defined(LOCK_UN)
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3785
    RETURN (true);
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3786
# else
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3787
#  if defined(F_LOCK) && defined(F_UNLOCK)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3788
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3789
#  endif
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3790
# endif
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3791
#endif
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3792
%}.
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3793
    ^ false
1616
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3794
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3795
    "
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3796
     OperatingSystem supportsFileLocks
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3797
    "
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3798
!
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3799
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3800
supportsNonBlockingFileLocks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3801
    "return true, if the OS supports nonBlocking file locking
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3802
     (i.e. with immediate return instead of waiting for the lock)"
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3803
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3804
%{ /* NOCONTEXT */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3805
#if defined(F_SETLK) && defined(F_SETLKW)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3806
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3807
#else
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3808
# if defined(LOCK_EX) && defined(LOCK_UN) && defined(LOCK_NB)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3809
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3810
# endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3811
#endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3812
%}.
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3813
    ^ false
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3814
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3815
    "
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3816
     OperatingSystem supportsNonBlockingFileLocks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3817
    "
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3818
!
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3819
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3820
supportsSharedLocks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3821
    "return true, if the OS supports shared (i.e. multiple reader)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3822
     file locking."
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3823
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3824
%{ /* NOCONTEXT */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3825
#if defined(F_SETLK) && defined(F_RDLCK) && defined(F_WRLCK)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3826
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3827
#else
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3828
# if defined(LOCK_EX) && defined(LOCK_SH) && defined(LOCK_UN)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3829
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3830
# endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3831
#endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3832
%}.
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3833
    ^ false
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3834
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3835
    "
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3836
     OperatingSystem supportsNonBlockingFileLocks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3837
    "
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3838
!
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3839
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3840
unlockFD:aFileDescriptor
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3841
    "clear a file lock on the file represented by aFileDescriptor,
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3842
     which was previously aquired by #lockFD:.
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3843
     Return false, if the unlock failed 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3844
     (which may happens when a wrong fd is passed, 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3845
      no lock was set previously, or the systsem does not support locks).
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3846
     Notice, that not all OS's support file locks; 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3847
     on some, this may simply be a no-op."
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3848
     
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3849
%{
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3850
    if (__isSmallInteger(aFileDescriptor)) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3851
	int fd = __intVal(aFileDescriptor);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3852
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3853
	/*
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3854
	 * claus: sigh - each one has a different interface ...
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3855
	 */
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3856
#if defined(F_SETLK)
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3857
	{
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3858
	    /*
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3859
	     * new fcntl(SETLK) interface;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3860
	     * available on SYSV4 and Linux
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3861
	     */
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3862
	    struct flock flock;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3863
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3864
	    flock.l_type = F_UNLCK;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3865
	    flock.l_whence = 0;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3866
	    flock.l_start = 0;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3867
	    flock.l_len = 0;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3868
	    if (fcntl(fd, F_SETLK, &flock) != -1) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3869
		RETURN (true);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3870
	    }
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3871
	}
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3872
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3873
#else /* no F_SETLK available */
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3874
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3875
# if defined(LOCK_EX) && defined(LOCK_UN)
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3876
	/*
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3877
	 * BSD 4.3 advisory locks
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3878
	 */
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3879
	if (flock(fd, LOCK_UN) != -1) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3880
	    RETURN (true);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3881
	}
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3882
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3883
# else /* no flock available */
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3884
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3885
#  if defined(F_LOCK) && defined(F_UNLOCK)
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3886
	/* 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3887
	 * SYSV3 advisory locks
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3888
	 */
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3889
	if (lockf(fd, F_UNLOCK, 0) != -1) {
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3890
	    RETURN (true);
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3891
	}
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3892
#  endif
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3893
# endif
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3894
#endif
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3895
    }
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3896
%}.
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3897
    ^ false
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3898
! !
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3899
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  3900
!OperatingSystem class methodsFor:'file queries'!
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3901
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3902
baseNameOf:aPathString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3903
    "return the baseName of the argument, aPathString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3904
     - thats the file/directory name without leading parent-dirs
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3905
     (i.e. OperatingSystem baseNameOf:'/usr/lib/st/file' -> 'file'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3906
       and OperatingSystem baseNameOf:'/usr/lib' -> lib).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3907
     This method does not check if the path is valid 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3908
     (i.e. if these directories really exist & is readable)."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3909
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3910
    |prev index sep|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3911
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3912
    sep := self fileSeparator.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3913
    ((aPathString size == 1) and:[(aPathString at:1) == sep]) ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3914
	^ aPathString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3915
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3916
    prev := 1.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3917
    [true] whileTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3918
	index := aPathString indexOf:sep startingAt:prev.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3919
	index == 0 ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3920
	    ^ aPathString copyFrom:prev
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3921
	].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3922
	prev := index + 1
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3923
    ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3924
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3925
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3926
     OperatingSystem baseNameOf:'/fee/foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3927
     OperatingSystem baseNameOf:'foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3928
     OperatingSystem baseNameOf:'../../foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3929
     OperatingSystem baseNameOf:'hello'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3930
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3931
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3932
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3933
caseSensitiveFilenames
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3934
    "return true, if the OS has caseSensitive file naming.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3935
     On MSDOS, this will return false. Since this is for Unix, we
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3936
     return true."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3937
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3938
    ^ true
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3939
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3940
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3941
compressPath:pathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3942
    "return the pathName compressed - that is, remove all ..-entries
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3943
     and . entries. This does not always (in case of symbolic links)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3944
     return the true pathName and is therefore used as a fallback
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3945
     if realPath and popen failed."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3946
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3947
    |names n "{ Class: SmallInteger }" |
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3948
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3949
    names := pathName 
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3950
		asCollectionOfSubstringsSeparatedBy:self fileSeparator.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3951
    names := names asOrderedCollection.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3952
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3953
     cut off initial double-slashes
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3954
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3955
    [names startsWith:#('' '')] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3956
	names removeFirst.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3957
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3958
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3959
     cut off double-slashes at end
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3960
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3961
    [names endsWith:#('')] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3962
	names removeLast.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3963
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3964
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3965
     cut off current-dir at beginning
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3966
    "
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3967
    n := names size.
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3968
    [(n >= 2) and:[names startsWith:#('.')]] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3969
	names removeFirst.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3970
	n := n - 1.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3971
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3972
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3973
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3974
     cut off parent-dirs at end
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3975
    "
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3976
    [(n > 2) 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3977
     and:[(names endsWith:#('..'))
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3978
     and:[((names at:(n - 1)) startsWith:'.') not ]]] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3979
	names removeLast; removeLast.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3980
	n := n - 2.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3981
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3982
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3983
    ^ names asStringWith:self fileSeparator 
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3984
		    from:1
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3985
		    to:n
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3986
		    compressTabs:false final:nil 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3987
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3988
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3989
     OperatingSystem compressPath:'./..'    
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3990
     OperatingSystem compressPath:'/foo/bar/baz/..'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3991
     OperatingSystem compressPath:'foo/bar/baz/..'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3992
     OperatingSystem compressPath:'foo/bar/baz/../'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3993
     OperatingSystem compressPath:'foo/bar/baz/..///' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3994
     OperatingSystem compressPath:'///foo/bar/baz/..///' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3995
    "
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3996
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3997
    "Modified: 1.11.1996 / 20:13:48 / cg"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3998
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3999
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4000
directoryNameOf:aPathString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4001
    "return the directoryName of the argument, aPath
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4002
     - thats the name of the directory where aPath is
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4003
     (i.e. OperatingSystem directoryNameOf:'/usr/lib/st/file' -> '/usr/lib/st'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4004
       and OperatingSystem directoryNameOf:'/usr/lib' -> /usr').
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4005
     This method does not check if the path is valid
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4006
     (i.e. if these directories really exist & are readable)."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4007
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4008
    |last index sep sepString p|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4009
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4010
    sep := self fileSeparator.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4011
    sepString := sep asString.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4012
    (aPathString = sepString) ifTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4013
	"
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4014
	 the trivial '/' case
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4015
	"
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4016
	^ aPathString
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4017
    ].
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4018
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4019
    p := aPathString.
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4020
    [p endsWith:sepString] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4021
	(p = sepString) ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4022
	    ^ p
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4023
	].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4024
	p := p copyWithoutLast:1
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4025
    ].
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4026
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4027
    last := 1.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4028
    [true] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4029
	index := p indexOf:sep startingAt:(last + 1).
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4030
	index == 0 ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4031
	    (last == 1) ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4032
		(p startsWith:sepString) ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4033
		    ^ sepString
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4034
		].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4035
		^ '.'
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4036
	    ].
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4037
"
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4038
	    (p startsWith:sepString) ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4039
		(p startsWith:('..' , sepString)) ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4040
		    ^ './' , (p copyTo:(last - 1))
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4041
		]
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4042
	    ].
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4043
"
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4044
	    ^ p copyTo:(last - 1)
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4045
	].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4046
	last := index.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4047
    ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4048
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4049
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4050
     OperatingSystem directoryNameOf:'/fee/foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4051
     OperatingSystem directoryNameOf:'foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4052
     OperatingSystem directoryNameOf:'../../foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4053
     OperatingSystem directoryNameOf:'bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4054
     OperatingSystem directoryNameOf:'/bar'
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4055
     OperatingSystem directoryNameOf:'/tmp' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4056
     OperatingSystem directoryNameOf:'/tmp///' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4057
     OperatingSystem directoryNameOf:'/bar///' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4058
     OperatingSystem directoryNameOf:'/bar/'  
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4059
     OperatingSystem directoryNameOf:'./bar'  
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4060
     OperatingSystem directoryNameOf:'/./bar'  
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4061
    "
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4062
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4063
    "Modified: 22.10.1996 / 18:53:47 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4064
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4065
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4066
fileSeparator
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4067
    "return the character used to separate names in a path.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4068
     This character differs for MSDOS and other systems,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4069
     (but those are currently not supported - so this is some
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4070
      preparation for the future)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4071
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4072
    ^ $/
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4073
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4074
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4075
idOf:aPathName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4076
    "return the fileNumber (i.e. inode number) of a file.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4077
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4078
     Not all operatingSystems may provide this - on those that do not,
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4079
     some dummy id will be returned.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4080
     On unix, this information can be used to check for two files being 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4081
     physically identical, even if found in different directories 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4082
     (i.e. if they are hardLinked)."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4083
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4084
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4085
     this could have been implemented as:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4086
	(self infoOf:aPathName) at:#id 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4087
     but for huge directory searches the code below is faster
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4088
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4089
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4090
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4091
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4092
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4093
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4094
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4095
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4096
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4097
	    ret = stat((char *) __stringVal(aPathName), &buf);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4098
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4099
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4100
	if (ret >= 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4101
	    RETURN (__MKSMALLINT(buf.st_ino));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4102
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4103
	@global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4104
	RETURN (nil);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4105
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4106
%}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4107
.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4108
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4109
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4110
    "OperatingSystem idOf:'/'"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4111
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4112
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4113
infoOf:aPathName
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4114
    "return some object filled with info for the file 'aPathName';
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4115
     the info (for which corresponding access methods are understood by
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4116
     the returned object) is:
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4117
	 type  - a symbol giving the files fileType
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4118
	 mode  - numeric access mode 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4119
	 uid   - owners user id
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4120
	 gid   - owners group id
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4121
	 size  - files size
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4122
	 id    - files number (i.e. inode number)
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4123
	 accessed      - last access time (as osTime-stamp)
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4124
	 modified      - last modification time (as osTime-stamp)
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4125
	 statusChanged - last status change time (as osTime-stamp)
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4126
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4127
     Some of the fields may be returned as nil on systems which do not provide
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4128
     all of the information.
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4129
     Return nil if such a file does not exist. 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4130
     For symbolic links, the info of the pointed-to-file is returned;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4131
     use #linkInfoOf: to get info about the link itself.
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4132
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4133
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4134
    |info type mode uid gid size id 
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4135
     atime mtime ctime|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4136
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4137
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4138
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4139
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4140
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4141
    if (__isString(aPathName)) {
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4142
	__BEGIN_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4143
	do {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4144
	    ret = stat((char *) __stringVal(aPathName), &buf);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4145
	} while ((ret < 0) && (errno == EINTR));
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4146
	__END_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4147
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4148
	if (ret < 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4149
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4150
	    RETURN ( nil );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4151
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4152
	switch (buf.st_mode & S_IFMT) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4153
	    case S_IFDIR:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4154
		type = @symbol(directory);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4155
		break;
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4156
	    case S_IFREG:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4157
		type = @symbol(regular);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4158
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4159
#ifdef S_IFCHR
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4160
	    case S_IFCHR:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4161
		type = @symbol(characterSpecial);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4162
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4163
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4164
#ifdef S_IFBLK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4165
	    case S_IFBLK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4166
		type = @symbol(blockSpecial);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4167
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4168
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4169
#ifdef S_IFLNK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4170
	    case S_IFLNK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4171
		type = @symbol(symbolicLink);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4172
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4173
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4174
#ifdef S_IFSOCK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4175
	    case S_IFSOCK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4176
		type = @symbol(socket);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4177
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4178
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4179
#ifdef S_IFIFO
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4180
	    case S_IFIFO:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4181
		type = @symbol(fifo);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4182
		break;
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4183
#endif
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4184
	    default:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4185
		type = @symbol(unknown);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4186
		break;
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4187
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4188
	mode = __MKSMALLINT(buf.st_mode & 0777);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4189
	uid = __MKSMALLINT(buf.st_uid);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4190
	gid = __MKSMALLINT(buf.st_gid);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4191
	size = __MKSMALLINT(buf.st_size);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4192
	id = __MKSMALLINT(buf.st_ino);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4193
	atime = __MKUINT(buf.st_atime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4194
	mtime = __MKUINT(buf.st_mtime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4195
	ctime = __MKUINT(buf.st_ctime);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4196
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4197
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4198
    mode notNil ifTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4199
	^ FileStatusInfo
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4200
	    type:type 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4201
	    mode:mode 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4202
	    uid:uid 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4203
	    gid:gid 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4204
	    size:size 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4205
	    id:id 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4206
	    accessed:(AbsoluteTime fromOSTime:(atime * 1000)) 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4207
	    modified:(AbsoluteTime fromOSTime:(mtime * 1000)) 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4208
	    statusChanged:(AbsoluteTime fromOSTime:(ctime * 1000))
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4209
	    path:nil
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4210
   ].
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4211
   ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4212
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4213
   "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4214
    OperatingSystem infoOf:'/'
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4215
    (OperatingSystem infoOf:'/') uid
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4216
    (OperatingSystem infoOf:'/') accessed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4217
   "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4218
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4219
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4220
isDirectory:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4221
    "return true, if 'aPathName' is a valid directory path name.
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4222
     (i.e. exists and is a directory).
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4223
     This also returns true for symbolic links pointing to a directory;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4224
     if you need to check for this, use #linkInfo:."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4225
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4226
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4227
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4228
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4229
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4230
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4231
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4232
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4233
	    ret = stat((char *) __stringVal(aPathName), &buf);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4234
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4235
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4236
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4237
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4238
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4239
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4240
	RETURN ( ((buf.st_mode & S_IFMT) == S_IFDIR) ? true : false);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4241
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4242
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4243
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4244
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4245
    "an alternative implementation would be:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4246
	^ (self infoOf:aPathName) at:#type == #directory
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4247
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4248
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4249
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4250
isExecutable:aPathName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4251
    "return true, if the given file is executable.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4252
     For symbolic links, the pointed-to-file is checked."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4253
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4254
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4255
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4256
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4257
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4258
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4259
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4260
	    ret = access(__stringVal(aPathName), X_OK);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4261
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4262
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4263
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4264
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4265
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4266
	RETURN ( ((ret == 0) ? true : false) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4267
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4268
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4269
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4270
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4271
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4272
isReadable:aPathName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4273
    "return true, if the file/dir 'aPathName' is readable.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4274
     For symbolic links, the pointed-to-file is checked."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4275
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4276
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4277
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4278
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4279
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4280
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4281
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4282
	    ret = access(__stringVal(aPathName), R_OK);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4283
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4284
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4285
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4286
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4287
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4288
	RETURN ( ((ret == 0) ? true : false) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4289
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4290
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4291
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4292
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4293
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4294
isSymbolicLink:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4295
    "return true, if the given file is a symbolic link"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4296
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4297
    ^ (self linkInfoOf:aPathName) notNil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4298
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4299
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4300
     OperatingSystem isSymbolicLink:'Make.proto'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4301
     OperatingSystem isSymbolicLink:'Makefile' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4302
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4303
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4304
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4305
isValidPath:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4306
    "return true, if 'aPathName' is a valid path name
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4307
     (i.e. the file or directory exists)"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4308
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4309
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4310
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4311
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4312
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4313
    if (__isString(aPathName) || __isSymbol(aPathName) ) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4314
	__BEGIN_INTERRUPTABLE__
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4315
	do {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4316
	    ret = stat((char *) __stringVal(aPathName), &buf);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4317
	} while ((ret < 0) && (errno == EINTR));
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4318
	__END_INTERRUPTABLE__
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4319
	if (ret < 0) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4320
	    OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4321
	    RETURN (false);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4322
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4323
	RETURN ( ret ? false : true );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4324
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4325
%}.
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4326
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4327
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4328
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4329
isWritable:aPathName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4330
    "return true, if the given file is writable.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4331
     For symbolic links, the pointed-to-file is checked."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4332
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4333
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4334
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4335
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4336
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4337
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4338
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4339
	    ret = access(__stringVal(aPathName), W_OK);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4340
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4341
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4342
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4343
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4344
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4345
	RETURN ( ((ret == 0) ? true : false) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4346
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4347
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4348
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4349
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4350
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4351
linkInfoOf:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4352
    "return a dictionary filled with info for the file 'aPathName',
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4353
     IFF aPathName is a symbolic link. 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4354
     If aPathName is invalid, or its NOT a symbolic link, nil is returned.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4355
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4356
     The contents of the dictionary gives info about the link itself,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4357
     on contrast to #infoOf:, which returns the info of the pointed to file
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4358
     in case of a symbolic link."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4359
     
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4360
    |info type mode uid gid size id atime mtime ctime path|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4361
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4362
%{  /* STACK: 1200 */
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4363
#ifdef S_IFLNK
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4364
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4365
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4366
    char pathBuffer[1024];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4367
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4368
    if (__isString(aPathName)) {
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4369
	__BEGIN_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4370
	do {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4371
	    ret = lstat((char *) __stringVal(aPathName), &buf);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4372
	} while ((ret < 0) && (errno == EINTR));
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4373
	__END_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4374
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4375
	if (ret < 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4376
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4377
	    RETURN ( nil );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4378
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4379
	switch (buf.st_mode & S_IFMT) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4380
	    default:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4381
		RETURN ( nil ); /* not a symbolic link */
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4382
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4383
	    case S_IFLNK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4384
		type = @symbol(symbolicLink);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4385
		break;
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4386
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4387
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4388
	mode = __MKSMALLINT(buf.st_mode & 0777);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4389
	uid = __MKSMALLINT(buf.st_uid);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4390
	gid = __MKSMALLINT(buf.st_gid);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4391
	size = __MKSMALLINT(buf.st_size);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4392
	id = __MKSMALLINT(buf.st_ino);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4393
	atime = __MKUINT(buf.st_atime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4394
	mtime = __MKUINT(buf.st_mtime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4395
	ctime = __MKUINT(buf.st_ctime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4396
	if ((ret = readlink((char *) __stringVal(aPathName), pathBuffer, sizeof(pathBuffer))) < 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4397
	    OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4398
	    RETURN ( nil );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4399
	} 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4400
	pathBuffer[ret] = '\0';  /* readlink does not 0-terminate */
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4401
	path = __MKSTRING(pathBuffer);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4402
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4403
#else
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4404
    RETURN ( nil );
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4405
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4406
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4407
    mode notNil ifTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4408
	info := IdentityDictionary new.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4409
	^ FileStatusInfo
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4410
	    type:type 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4411
	    mode:mode 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4412
	    uid:uid 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4413
	    gid:gid 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4414
	    size:size 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4415
	    id:id 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4416
	    accessed:(AbsoluteTime fromOSTime:(atime * 1000)) 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4417
	    modified:(AbsoluteTime fromOSTime:(mtime * 1000)) 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4418
	    statusChanged:(AbsoluteTime fromOSTime:(ctime * 1000))
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4419
	    path:path
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4420
   ].
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4421
   ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4422
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4423
   "
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4424
    OperatingSystem infoOf:'Make.proto'  
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4425
    OperatingSystem linkInfoOf:'Make.proto' 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4426
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4427
    OperatingSystem infoOf:'resources/motif.style'   
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4428
    OperatingSystem linkInfoOf:'resources/motif.style' 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4429
   "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4430
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4431
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4432
parentDirectoryName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4433
    "return the name used to refer to parent directories.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4434
     In MSDOS, Unix and other systems this is '..', but maybe different
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4435
     for other systems.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4436
     (but those are currently not supported - so this is some
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4437
      preparation for the future)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4438
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4439
    ^ '..'
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4440
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4441
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4442
pathNameOf:pathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4443
    "return the pathName of the argument, aPathString,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4444
     - thats the full pathname of the directory, starting at '/'.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4445
     This method needs the path to be valid
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4446
     (i.e. all directories must exist, be readable and executable).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4447
     Notice: if symbolic links are involved, the result may look different
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4448
     from what you expect."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4449
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4450
    |p path command|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4451
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4452
    "some systems have a convenient function for this ..."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4453
    path := self primPathNameOf:pathName.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4454
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4455
    path isNil ifTrue:[
1991
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4456
        (self isValidPath:pathName) ifFalse:[
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4457
            p := pathName.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4458
            [(p size > 1)
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4459
             and:[p endsWith:(self fileSeparator)]
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4460
            ] whileTrue:[
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4461
                p := p copyWithoutLast:1.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4462
            ].
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4463
            ^ p
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4464
        ].
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4465
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4466
        (SlowFork==true or:[ForkFailed==true]) ifFalse:[
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4467
            PipeStream openErrorSignal handle:[:ex |
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4468
                ForkFailed := true.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4469
                'OS: cannot fork/popen' errorPrintNL.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4470
                ex return.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4471
            ] do:[
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4472
                "have to fall back ..."
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4473
                command := 'cd ' , pathName , '; pwd'.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4474
                p := PipeStream readingFrom:command.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4475
            ].
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4476
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4477
            (p isNil or:[p atEnd]) ifTrue:[
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4478
                ('OS: PipeStream for <' , command , '> failed') errorPrintNL.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4479
            ] ifFalse:[
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4480
                path := p nextLine.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4481
                p close.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4482
            ].
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4483
        ].
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4484
        path isNil ifTrue:[
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4485
            path := pathName
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4486
        ].
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4487
        (SlowFork==true or:[ForkFailed==true]) ifTrue:[
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4488
            path := self compressPath:path
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4489
        ]
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4490
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4491
    ^ path.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4492
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4493
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4494
     OperatingSystem pathNameOf:'.'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4495
     OperatingSystem pathNameOf:'../smalltalk/../smalltalk'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4496
     OperatingSystem pathNameOf:'../../..'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4497
     OperatingSystem pathNameOf:'..'
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4498
     OperatingSystem pathNameOf:'/tmp////' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4499
     OperatingSystem pathNameOf:'/foo/bar' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4500
     OperatingSystem pathNameOf:'/foo/bar/'
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4501
     OperatingSystem pathNameOf:'/foo/bar//'
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4502
    "
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4503
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4504
    "Modified: 22.10.1996 / 17:59:19 / cg"
1991
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4505
    "Modified: 29.11.1996 / 18:02:12 / stefan"
359
claus
parents: 357
diff changeset
  4506
!
claus
parents: 357
diff changeset
  4507
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4508
primPathNameOf:pathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4509
    "return the pathName of the argument, aPathString,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4510
     - thats the full pathname of the directory, starting at '/'.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4511
     This method here returns nil, if the OS does not provide a
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4512
     realPath library function.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4513
     Notice: if symbolic links are involved, the result may look different
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4514
     from what you expect."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4515
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4516
    |path|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4517
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4518
    "some systems have a convenient function for this ..."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4519
%{  /* STACK: 16000 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4520
#ifdef HAS_REALPATH
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4521
    char nameBuffer[MAXPATHLEN + 1];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4522
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4523
    if (__isString(pathName)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4524
	if (realpath(__stringVal(pathName), nameBuffer)) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  4525
	    RETURN ( __MKSTRING(nameBuffer) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4526
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4527
    }
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4528
#else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4529
# ifdef WIN32
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4530
    char nameBuffer[MAXPATHLEN + 1];
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4531
    char *pFinal;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4532
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4533
    if (__isString(pathName)) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4534
      if (GetFullPathName(__stringVal(pathName), sizeof(nameBuffer),
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4535
			  nameBuffer, &pFinal)) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4536
	  RETURN ( __MKSTRING(nameBuffer) );
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4537
      }
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4538
    }
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4539
# endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4540
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4541
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4542
    ^ nil
359
claus
parents: 357
diff changeset
  4543
!
claus
parents: 357
diff changeset
  4544
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4545
timeOfLastAccess:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4546
    "return the time, when the file was last accessed.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4547
     For nonexistent files, nil is returned."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4548
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4549
    "could be implemented as:
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4550
	(self infoOf:aPathName) at:#accessed 
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4551
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4552
    |osSeconds|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4553
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4554
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4555
    time_t mtime;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4556
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4557
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4558
    if (__isString(aPathName)) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4559
	__BEGIN_INTERRUPTABLE__
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4560
	do {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4561
	    ret = stat((char *) __stringVal(aPathName), &buf);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4562
	} while (ret < 0 && errno == EINTR);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4563
	__END_INTERRUPTABLE__
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4564
	if (ret < 0) {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4565
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4566
	    RETURN (nil);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4567
	}
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4568
	osSeconds = __MKUINT(buf.st_atime);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4569
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4570
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4571
    osSeconds notNil ifTrue:[^ AbsoluteTime fromOSTime:(osSeconds * 1000)].
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4572
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4573
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4574
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4575
     OperatingSystem timeOfLastAccess:'/'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4576
    "
359
claus
parents: 357
diff changeset
  4577
!
claus
parents: 357
diff changeset
  4578
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4579
timeOfLastChange:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4580
    "return the time, when the file was last changed. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4581
     For nonexistent files, nil is returned."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4582
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4583
    "could be implemented as:
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4584
	(self infoOf:aPathName) at:#modified
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4585
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4586
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4587
    |osSeconds|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4588
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4589
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4590
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4591
    time_t mtime;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4592
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4593
    if (__isString(aPathName)) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4594
	__BEGIN_INTERRUPTABLE__
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4595
	do {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4596
	    ret = stat((char *) __stringVal(aPathName), &buf);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4597
	} while (ret < 0 && errno == EINTR);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4598
	__END_INTERRUPTABLE__
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4599
	if (ret < 0) {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4600
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4601
	    RETURN ( nil );
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4602
	}
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4603
	osSeconds = __MKUINT(buf.st_mtime);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4604
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4605
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4606
    osSeconds notNil ifTrue:[^ AbsoluteTime fromOSTime:(osSeconds * 1000)].
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4607
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4608
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4609
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4610
     OperatingSystem timeOfLastChange:'/'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4611
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4612
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4613
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4614
typeOf:aPathName
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4615
    "return the type of a file as a symbol; for nonexistent files,
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4616
     nil is returned.
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4617
     Notice: for symbolic links, the type of the pointed-to file is returned."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4618
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4619
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4620
     this could have been implemented as:
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4621
	(self infoOf:aPathName) at:#type 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4622
     but for huge directory searches the code below is faster
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4623
    "
359
claus
parents: 357
diff changeset
  4624
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4625
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4626
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4627
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4628
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4629
    if (__isString(aPathName)) {
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4630
	__BEGIN_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4631
	do {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4632
	    ret = stat((char *) __stringVal(aPathName), &buf);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4633
	} while (ret < 0 && errno == EINTR);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4634
	__END_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4635
	if (ret < 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4636
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4637
	    RETURN ( nil );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4638
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4639
	switch (buf.st_mode & S_IFMT) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4640
	    case S_IFDIR:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4641
		RETURN ( @symbol(directory) );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4642
	    case S_IFREG:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4643
		RETURN ( @symbol(regular) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4644
#ifdef S_IFCHR
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4645
	    case S_IFCHR:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4646
		RETURN ( @symbol(characterSpecial) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4647
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4648
#ifdef S_IFBLK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4649
	    case S_IFBLK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4650
		RETURN ( @symbol(blockSpecial) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4651
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4652
#ifdef S_IFLNK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4653
	    case S_IFLNK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4654
		RETURN ( @symbol(symbolicLink) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4655
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4656
#ifdef S_IFSOCK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4657
	    case S_IFSOCK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4658
		RETURN ( @symbol(socket) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4659
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4660
#ifdef S_IFIFO
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4661
	    case S_IFIFO:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4662
		RETURN ( @symbol(fifo) );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4663
#endif
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4664
	    default:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4665
		RETURN ( @symbol(unknown) );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4666
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4667
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4668
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4669
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4670
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4671
    "
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4672
     OperatingSystem typeOf:'/'   
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4673
     OperatingSystem typeOf:'.'   
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4674
     OperatingSystem typeOf:'Make.proto' 
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4675
     OperatingSystem typeOf:'resources/motif.style' 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4676
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4677
! !
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4678
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4679
!OperatingSystem class methodsFor:'interrupts & signals'!
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4680
10
claus
parents: 5
diff changeset
  4681
blockInterrupts
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4682
    "disable interrupt processing - if disabled, incoming
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4683
     interrupts will be registered and handled as soon as
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4684
     interrupts are reenabled by OperatingSystemclass>>unblockInterrupts.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4685
     Returns the previous blocking status i.e. true if interrupts
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4686
     where already blocked. You need this information for proper
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4687
     unblocking, in case of nested block/unblock calls."
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4688
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4689
%{  /* NOCONTEXT */
710
10d86ca4c4a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 704
diff changeset
  4690
    RETURN ( __BLOCKINTERRUPTS() );
10
claus
parents: 5
diff changeset
  4691
%}
claus
parents: 5
diff changeset
  4692
!
claus
parents: 5
diff changeset
  4693
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4694
defaultSignal:signalNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4695
    "revert to the default action on arrival of a (Unix-)signal.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4696
     Dont confuse Unix signals with smalltalk signals.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4697
     WARNING: for some signals, it is no good idea to revert to default;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4698
     for example, the default for SIGINT (i.e. ^C) is to exit; while the
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4699
     default for SIGQUIT (^ \) is to dump core.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4700
     Also, NOTICE that signal numbers are not portable between unix
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4701
     systems - use OperatingSystem sigXXX to get the numeric value for
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4702
     a signal."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4703
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4704
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4705
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4706
    if (__isSmallInteger(signalNumber)) {
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4707
#ifdef SIG_DFL
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4708
	signal(__intVal(signalNumber), SIG_DFL);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4709
	RETURN (self);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4710
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4711
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4712
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4713
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4714
     this error is triggered on non-integer argument
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4715
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4716
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4717
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4718
    "you better save a snapshot image before trying this ..."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4719
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4720
     'if you hit ^C now, Smalltalk will exit immediately' printNewline.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4721
     OperatingSystem defaultSignal:(OperatingSystem sigINT).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4722
     1 to:1000000 do:[:i| ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4723
     OperatingSystem enableSignal:(OperatingSystem sigINT).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4724
     'normal ^C handling again.' printNewline
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4725
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4726
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4727
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4728
disableChildSignalInterrupts
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4729
    "disable childSignal interrupts 
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4730
     (SIGCHLD, if the architecture supports it).
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4731
     We have to set the signal back to default, because ignoring 
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4732
     SIGCHLD breaks wait & co"
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4733
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4734
    ^ self defaultSignal:(self sigCHLD)
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4735
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4736
    "Created: 5.1.1996 / 15:45:28 / stefan"
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4737
!
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4738
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4739
disableIOInterruptsOn:fd
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4740
    "turn off IO interrupts for a filedescriptor"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4741
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4742
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4743
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4744
    int ret, flags, f;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4745
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4746
#if (defined(F_GETFL) && defined(F_SETFL) && defined(FASYNC)) || defined(SYSV4)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4747
    if (__isSmallInteger(fd)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4748
	f = __intVal(fd);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4749
# if defined(SYSV4)
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 756
diff changeset
  4750
	ret = ioctl(f, I_SETSIG, 0);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4751
# else /*! SYSV4*/
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4752
	flags = fcntl(f, F_GETFL, 0);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4753
	/*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4754
	 * if already clear, there is no need for this syscall ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4755
	 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4756
	if (flags & FASYNC) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4757
	    ret = fcntl(f, F_SETFL, flags & ~FASYNC);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4758
	    if (ret >= 0) ret = flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4759
	} else {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4760
	    ret = flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4761
	}
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4762
# endif /* !SYSV4 */
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4763
	RETURN ( __MKSMALLINT(ret) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4764
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4765
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4766
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4767
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4768
     this error is triggered on non-integer argument
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4769
     or if the OS does not support IO interrupts.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4770
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4771
    ^ self primitiveFailed
10
claus
parents: 5
diff changeset
  4772
!
claus
parents: 5
diff changeset
  4773
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4774
disableSignal:signalNumber
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4775
    "disable (Unix-) signal processing for signalNumber.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4776
     Dont confuse Unix signals with smalltalk signals.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4777
     WARNING: for some signals, it is no good idea to disable
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4778
     them; for example, disabling the SIGINT signal turns off ^C
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4779
     handling.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4780
     Also, NOTICE that signal numbers are not portable between unix
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4781
     systems - use OperatingSystem sigXXX to get the numeric value for
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4782
     a signal.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4783
     Use only for fully debugged stand alone applications."
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4784
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4785
%{  /* NOCONTEXT */
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4786
252
  4787
    if (__isSmallInteger(signalNumber)) {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  4788
	int sigNo = __intVal(signalNumber);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4789
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4790
	if (sigNo == 0) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4791
	    RETURN (self);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4792
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4793
#ifdef SIG_IGN
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4794
	signal(sigNo, SIG_IGN);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  4795
	RETURN (self);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4796
#endif
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4797
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4798
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4799
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4800
     this error is triggered on non-integer argument
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4801
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4802
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4803
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4804
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4805
     'now, ^C is totally ignored ...' printNewline.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4806
     OperatingSystem disableSignal:(OperatingSystem sigINT).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4807
     1 to:1000000 do:[:i| ].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4808
     OperatingSystem enableSignal:(OperatingSystem sigINT).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4809
     '^C handled again.' printNewline
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4810
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4811
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4812
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4813
disableTimer
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4814
    "disable timer interrupts.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4815
     WARNING: 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4816
	the system will not operate correctly with timer interrupts
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  4817
	disabled, because no scheduling or timeouts are possible."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4818
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4819
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4820
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4821
#if defined(WIN32)
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4822
    KillTimer(NULL, w32TimerId);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4823
    w32TimerId = 0;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4824
    RETURN (true);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4825
#else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4826
# if defined(ITIMER_REAL)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4827
    struct itimerval dt;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4828
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4829
    dt.it_interval.tv_sec = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4830
    dt.it_interval.tv_usec = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4831
    dt.it_value.tv_sec = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4832
    dt.it_value.tv_usec = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4833
    setitimer(ITIMER_REAL, &dt, 0);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4834
    RETURN (true);
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4835
# endif /* ITIMER_REAL */
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4836
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4837
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4838
.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4839
    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4840
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4841
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4842
disableUserInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4843
    "disable userInterrupt processing;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4844
     when disabled, no ^C processing takes place.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4845
     WARNING:
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  4846
	 If at all, use this only for debugged stand-alone applications, since
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  4847
	 no exit to the debugger is possible with user interrupts disabled.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  4848
	 We recommend setting up a handler for the signal instead of disabling it."
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4849
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4850
    self disableSignal:(self sigBREAK).
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4851
    self disableSignal:(self sigINT).
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4852
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4853
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4854
enableAbortInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4855
    "enable abort signalhandling, and make it a regular signalInterrupt.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4856
     (the default will dump core and exit - which is not a good idea for
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4857
      end-user applications ...).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4858
     This is especially useful, if linked-in C-libraries call abort() ..."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4859
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4860
    self enableSignal:(self sigABRT)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4861
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4862
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4863
enableChildSignalInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4864
    "enable childSignal interrupts 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4865
     (SIGCHLD, if the architecture supports it).
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4866
     After enabling, these signals will send the message 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4867
     'childSignalInterrupt' to the ChildSignalInterruptHandler object."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4868
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4869
    self enableSignal:(self sigCHLD)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4870
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4871
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4872
enableFpExceptionInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4873
    "enable floating point exception interrupts (if the
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4874
     architecture supports it).
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4875
     After enabling, fpu-exceptions will send the message 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4876
     'fpuExceptionInterrupt' to the FPUExceptionInterruptHandler object."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4877
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4878
    self enableSignal:(self sigFP)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4879
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4880
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4881
enableHardSignalInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4882
    "enable hard signal exception interrupts (trap, buserror & segm. violation).
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4883
     After enabling, these exceptions will send the message 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4884
     'signalInterrupt' to the SignalInterruptHandler object."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4885
855
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  4886
    "/ leads to trouble ...
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  4887
"/    self enableSignal:(self sigPIPE).
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  4888
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  4889
    "/ ... better to ignore them, and let it be handled as a writeErrorSignal.
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  4890
    self disableSignal:(self sigPIPE).
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  4891
1808
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  4892
    self enableSignal:(self sigILL).
640
be94dfc60eaa Anforderung von SA_SIGINFO in sigaction.
Stefan Vogel <sv@exept.de>
parents: 630
diff changeset
  4893
    self enableSignal:(self sigBUS).
be94dfc60eaa Anforderung von SA_SIGINFO in sigaction.
Stefan Vogel <sv@exept.de>
parents: 630
diff changeset
  4894
    self enableSignal:(self sigSEGV)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4895
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4896
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4897
enableIOInterruptsOn:fd
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4898
    "turn on IO interrupts for a filedescriptor"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4899
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4900
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4901
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4902
    int ret, flags, f;
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  4903
#ifndef __signalIoInterrupt
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4904
    extern void __signalIoInterrupt();
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  4905
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4906
    static int firstCall = 1;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4907
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4908
#if (defined(F_GETFL) && defined(F_SETFL) && defined(FASYNC)) || defined(SYSV4)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4909
/*
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4910
 * SIGIO/SIGPOLL - data available for I/O
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4911
 * (used to wake up waiting processes)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4912
 */
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4913
#ifdef SIGIO
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4914
# define THESIGNAL SIGIO
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4915
#else
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4916
# ifdef SIGPOLL
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4917
#  define THESIGNAL SIGPOLL
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4918
# else
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4919
#  ifdef SIGURG
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4920
#   define THESIGNAL SIGURG
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4921
#  endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4922
# endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4923
#endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4924
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4925
    if (__isSmallInteger(fd)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4926
	if (firstCall) {
762
cea705669628 ok, stefan was right: HAS_SIGACTION works
Claus Gittinger <cg@exept.de>
parents: 761
diff changeset
  4927
#ifdef HAS_SIGACTION
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4928
	    struct sigaction act;
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4929
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4930
	    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4931
	     * Do not add SA_RESTART here. A signal can cause a
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4932
	     * thread switch, another thread can do a garbage collect
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4933
	     * and restarted system calls may write into old
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4934
	     * (collected) addresses.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4935
	     */
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  4936
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  4937
	    act.sa_flags = SA_SIGINFO; /* <- if you add more, remember dummys at the top */
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4938
	    sigemptyset(&act.sa_mask);
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4939
	    act.sa_handler = __signalIoInterrupt;
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4940
	    sigaction(THESIGNAL, &act, 0);
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4941
#else
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  4942
# ifdef HAS_SIGVEC
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4943
	    struct sigvec vec;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4944
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  4945
	    vec.sv_flags = SV_INTERRUPT;
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4946
	    sigemptyset(&vec.sv_mask);
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4947
	    vec.sv_handler = __signalIoInterrupt;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4948
	    sigvec(THESIGNAL, &vec, NULL);
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  4949
# else
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4950
	    signal(THESIGNAL, __signalIoInterrupt);
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  4951
# endif
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4952
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4953
	    firstCall = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4954
	}
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4955
#undef THESIGNAL
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4956
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4957
	f = __intVal(fd);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4958
# if defined(SYSV4)
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 756
diff changeset
  4959
	ret = ioctl(f, I_SETSIG, S_INPUT | S_HIPRI | S_ERROR | S_RDNORM | S_RDBAND | S_MSG | S_HANGUP);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4960
# else /*! SYSV4*/
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4961
	flags = fcntl(f, F_GETFL, 0);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4962
	/*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4963
	 * if already set, there is no need for this syscall ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4964
	 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4965
	if (flags & FASYNC) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4966
	    ret = flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4967
	} else {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4968
	    ret = fcntl(f, F_SETFL, flags | FASYNC);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4969
	    if (ret >= 0) ret = flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4970
	}
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4971
# endif /*!SYSV4*/
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4972
	RETURN ( __MKSMALLINT(ret) );
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4973
    }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4974
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4975
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4976
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4977
     this error is triggered on non-integer argument
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4978
     or if the system does not support SIGIO
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4979
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4980
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4981
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4982
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4983
enableQuitInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4984
    "enable quitInterrupt (usually ^\) handling, and make it a userInterrupt.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4985
     (the default will dump core and exit - which is not a good idea for
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4986
      end-user applications ...)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4987
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4988
    self enableSignal:(self sigQUIT)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4989
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4990
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4991
enableSignal:signalNumber
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4992
    "enable (Unix-)signal processing for signalNumber.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4993
     Dont confuse Unix signals with smalltalk signals.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4994
     The signal will be delivered to one of the standard handlers
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4995
     (SIGINT, SIGQUIT, etc) or to a general handler, which
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4996
     sends #signalInterrupt:.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4997
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4998
     NOTICE that signal numbers are not portable between unix
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4999
     systems - use OperatingSystem sigXXX to get the numeric value for
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5000
     a signal."
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5001
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5002
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5003
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5004
#ifdef NSIG
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5005
# define SIG_LIMIT NSIG
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5006
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5007
# ifdef SIGUSR2
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5008
#  define SIG_LIMIT SIGUSR2
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5009
# else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5010
#  ifdef SIGUSR
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5011
#   define SIG_LIMIT SIGUSR
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5012
#  endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5013
# endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5014
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5015
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5016
#if defined(SIGPOLL) && !defined(SIGIO)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5017
# define SIGIO SIGPOLL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5018
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5019
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5020
#ifdef SIGCHLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5021
# define CHILD_SIGNAL   SIGCHLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5022
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5023
# ifdef SIGCLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5024
#  define CHILD_SIGNAL  SIGCLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5025
# endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5026
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5027
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5028
    int sigNr;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5029
#if defined(SIGINT) || defined(SIGQUIT)
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5030
# ifndef __signalUserInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5031
    extern void __signalUserInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5032
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5033
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5034
#ifdef SIGFPE
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5035
# ifndef __signalFpExceptionInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5036
    extern void __signalFpExceptionInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5037
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5038
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5039
#ifdef SIGIO
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5040
# ifndef __signalIoInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5041
    extern void __signalIoInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5042
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5043
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5044
#ifdef CHILD_SIGNAL
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5045
# ifndef __signalChildInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5046
    extern void __signalChildInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5047
# endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5048
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5049
#ifdef SIGPIPE
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5050
# ifndef __signalPIPEInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5051
    extern void __signalPIPEInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5052
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5053
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5054
#ifdef SIGBUS
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5055
# ifndef __signalBUSInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5056
    extern void __signalBUSInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5057
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5058
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5059
#ifdef SIGSEGV
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5060
# ifndef __signalSEGVInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5061
    extern void __signalSEGVInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5062
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5063
#endif
1808
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5064
#ifdef SIGILL
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5065
# ifndef __signalTrapInterrupt
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5066
    extern void __signalTrapInterrupt(SIGHANDLER_ARG);
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5067
# endif
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5068
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5069
#ifdef SIGALRM
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5070
# ifndef WIN32
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5071
#  ifndef __signalTimerInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5072
    extern void __signalTimerInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5073
#  endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5074
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5075
#endif
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5076
#ifndef __signalInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5077
    extern void __signalInterrupt(SIGHANDLER_ARG);
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5078
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5079
    void (*handler)(SIGHANDLER_ARG);
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5080
252
  5081
    if (__isSmallInteger(signalNumber)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  5082
     && ((sigNr = __intVal(signalNumber)) >= 0)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5083
#ifdef SIG_LIMIT
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5084
     &&  (sigNr <= SIG_LIMIT)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5085
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5086
    ) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5087
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5088
	 * standard signals are forced into standard handlers
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5089
	 * - all others go into general signalInterrupt
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5090
	 */
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5091
#if defined(SIGPOLL) && defined(SIGIO)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5092
	if (sigNr == SIGPOLL)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5093
	    sigNr = SIGIO;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5094
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5095
	switch (sigNr) {
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5096
	    case 0:
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5097
		/* enabling a non-supported signal */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5098
		RETURN (self);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5099
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5100
#ifdef SIGBREAK
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5101
	    case SIGBREAK:
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5102
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5103
#ifdef SIGINT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5104
	    case SIGINT:
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5105
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5106
#ifdef SIGQUIT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5107
	    case SIGQUIT:
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5108
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5109
#if defined(SIGINT) || defined(SIGQUIT) || defined(SIGBREAK)
329
claus
parents: 322
diff changeset
  5110
		handler = __signalUserInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5111
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5112
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5113
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5114
#ifdef SIGFPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5115
	    case SIGFPE:
329
claus
parents: 322
diff changeset
  5116
		handler = __signalFpExceptionInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5117
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5118
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5119
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5120
#ifdef SIGPIPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5121
	    case SIGPIPE:
329
claus
parents: 322
diff changeset
  5122
		handler = __signalPIPEInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5123
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5124
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5125
#ifdef SIGBUS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5126
	    case SIGBUS:
329
claus
parents: 322
diff changeset
  5127
		handler = __signalBUSInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5128
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5129
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5130
#ifdef SIGSEGV
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5131
	    case SIGSEGV:
329
claus
parents: 322
diff changeset
  5132
		handler = __signalSEGVInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5133
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5134
#endif
1982
8d4f97279e55 oops - SIGILL was never cought
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
  5135
#ifdef SIGILL
8d4f97279e55 oops - SIGILL was never cought
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
  5136
	    case SIGILL:
1808
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5137
		handler = __signalTrapInterrupt;
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5138
		break;
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5139
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5140
#ifdef SIGIO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5141
	    case SIGIO:
329
claus
parents: 322
diff changeset
  5142
		handler = __signalIoInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5143
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5144
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5145
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5146
#ifdef CHILD_SIGNAL
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5147
	    case CHILD_SIGNAL:
329
claus
parents: 322
diff changeset
  5148
		handler = __signalChildInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5149
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5150
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5151
#ifdef SIGALRM
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5152
# ifndef WIN32
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5153
	    case SIGALRM:
329
claus
parents: 322
diff changeset
  5154
		handler = __signalTimerInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5155
		break;
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5156
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5157
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5158
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5159
	    default:
329
claus
parents: 322
diff changeset
  5160
		handler = __signalInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5161
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5162
	}
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5163
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5164
	{
762
cea705669628 ok, stefan was right: HAS_SIGACTION works
Claus Gittinger <cg@exept.de>
parents: 761
diff changeset
  5165
#ifdef HAS_SIGACTION
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5166
	    struct sigaction act;
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5167
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5168
	    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5169
	     * Do not add SA_RESTART here. A signal can cause a
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5170
	     * thread switch, another thread can do a garbage collect
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5171
	     * and restarted system calls may write into old
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5172
	     * (collected) addresses.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5173
	     */
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5174
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5175
	    act.sa_flags = SA_SIGINFO; /* <- if you add more, remember dummys at the top */
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5176
	    sigemptyset(&act.sa_mask);
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5177
	    act.sa_handler = handler;
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5178
	    sigaction(sigNr, &act, 0);
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  5179
#else
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5180
# ifdef HAS_SIGVEC
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5181
	    struct sigvec vec;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5182
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5183
	    vec.sv_flags = SV_INTERRUPT;
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5184
	    sigemptyset(&vec.sv_mask);
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5185
	    vec.sv_handler = handler;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5186
	    sigvec(sigNr, &vec, NULL);
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5187
# else
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5188
	    (void) signal(sigNr, handler);
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5189
# endif
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5190
#endif
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5191
	}
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  5192
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5193
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5194
	 * maybe, we should return the old enable-status
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5195
	 * as boolean here ...
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5196
	 */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5197
	RETURN (self);
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5198
    }
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5199
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5200
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5201
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5202
     this error is triggered on non-integer argument, or
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5203
     if the signal number is not in the valid range (1..NSIG)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5204
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5205
    ^ self primitiveFailed
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5206
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5207
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5208
enableTimer:milliSeconds
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5209
    "trigger a timerInterrupt, to be signalled after some (real) time."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5210
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5211
%{  /* NOCONTEXT */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5212
    int millis;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5213
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5214
    millis = __intVal(milliSeconds);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5215
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  5216
#if defined(ITIMER_REAL)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5217
    {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5218
	static int firstCall = 1;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5219
	struct itimerval dt;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5220
#ifndef __signalTimerInterrupt
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5221
	extern void __signalTimerInterrupt(SIGHANDLER_ARG);
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5222
#endif
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5223
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5224
	if (firstCall) {
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5225
# ifdef HAS_SIGACTION
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5226
	    struct sigaction act;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5227
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5228
	    act.sa_flags = SA_SIGINFO; /* <- if you add more, remember dummys at the top */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5229
	    sigemptyset(&act.sa_mask);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5230
	    act.sa_handler = __signalTimerInterrupt;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5231
	    sigaction(SIGALRM, &act, 0);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5232
# else
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5233
#  ifdef HAS_SIGVEC
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5234
	    struct sigvec vec;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5235
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5236
	    vec.sv_flags = SV_INTERRUPT;
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5237
	    sigemptyset(&vec.sv_mask);
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5238
	    vec.sv_handler = __signalTimerInterrupt;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5239
	    sigvec(SIGALRM, &vec, NULL);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5240
#  else
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5241
	    signal(SIGALRM, __signalTimerInterrupt);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5242
#  endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5243
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5244
	    firstCall = 0;
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5245
	}
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5246
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5247
	dt.it_interval.tv_sec = 0;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5248
	dt.it_interval.tv_usec = 0;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5249
	dt.it_value.tv_sec = millis / 1000;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5250
	dt.it_value.tv_usec = (millis % 1000) * 1000;  
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5251
	setitimer(ITIMER_REAL, &dt, 0);
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5252
	RETURN (true);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5253
    }
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  5254
#else
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5255
# ifdef WIN32
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5256
    {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5257
	/*
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5258
	 * two mechanisms - which one to use ?
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5259
	 */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5260
#  ifdef USE_TimerProc
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5261
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5262
	extern VOID CALLBACK __win32TimerProc(HWND, UINT, UINT, DWORD);
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5263
	w32TimerId = SetTimer(NULL, 0, millis, __win32TimerProc);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5264
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5265
#  else /* USE_TimeProc */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5266
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5267
	extern void CALLBACK __win32TimeProc(UINT, UINT, DWORD, DWORD, DWORD, DWORD);
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5268
	timeSetEvent(millis, 5, (LPTIMECALLBACK)__win32TimeProc, 0, TIME_ONESHOT);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5269
#  endif
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5270
	RETURN (true);
640
be94dfc60eaa Anforderung von SA_SIGINFO in sigaction.
Stefan Vogel <sv@exept.de>
parents: 630
diff changeset
  5271
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5272
# endif /* WIN32 */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5273
#endif /* ITIMER_REAL */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5274
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5275
    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5276
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5277
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5278
enableUserInterrupts
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5279
    "enable userInterrupt (^C) handling;
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  5280
     when enabled, ^C in the terminal window will send the message
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  5281
     'userInterrupt' to the UserInterruptHandler object."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5282
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5283
    self enableSignal:(self sigINT).
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5284
    self enableSignal:(self sigBREAK).
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5285
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5286
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5287
interruptPending
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5288
    "return true, if an interrupt is pending. The returned value is
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5289
     invalid if interrupts are not currently blocked, since otherwise 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5290
     the interrupt is usually already handled before arriving here,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5291
     or may be served while returning from here."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5292
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5293
%{   /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5294
     extern OBJ __INTERRUPTPENDING();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5295
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5296
     RETURN ( __INTERRUPTPENDING() );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5297
%}        
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5298
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5299
704
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5300
killProcess:processId
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5301
    "kill a unix process.
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5302
     The process terminates immediately and has no chance to perform any cleanup actions.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5303
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5304
     WARNING: in order to avoid zombie processes (on unix),
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5305
	      you have to fetch the processes exitstatus with
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5306
	      OperatingSystem>>getStatusOfProcess:aProcessId."
704
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5307
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5308
    self sendSignal:(self sigKILL) to:processId.
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5309
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5310
    "Modified: 28.12.1995 / 15:06:18 / stefan"
704
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5311
!
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5312
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5313
nameForSignal:aSignalNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5314
    "for a given Unix signalnumber, return a descriptive string"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5315
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5316
    aSignalNumber == self sigHUP    ifTrue:[^ 'hangup'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5317
    aSignalNumber == self sigINT    ifTrue:[^ 'interrupt'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5318
    aSignalNumber == self sigKILL   ifTrue:[^ 'kill'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5319
    aSignalNumber == self sigQUIT   ifTrue:[^ 'quit'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5320
    aSignalNumber == self sigILL    ifTrue:[^ 'illegal instruction'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5321
    aSignalNumber == self sigTRAP   ifTrue:[^ 'trap'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5322
    aSignalNumber == self sigABRT   ifTrue:[^ 'abort'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5323
    aSignalNumber == self sigIOT    ifTrue:[^ 'iot trap'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5324
    aSignalNumber == self sigEMT    ifTrue:[^ 'emt trap'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5325
    aSignalNumber == self sigFP     ifTrue:[^ 'fp exception'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5326
    aSignalNumber == self sigBUS    ifTrue:[^ 'bus error'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5327
    aSignalNumber == self sigSEGV   ifTrue:[^ 'segmentation violation'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5328
    aSignalNumber == self sigSYS    ifTrue:[^ 'bad system call'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5329
    aSignalNumber == self sigPIPE   ifTrue:[^ 'broken pipe'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5330
    aSignalNumber == self sigALRM   ifTrue:[^ 'alarm timer'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5331
    aSignalNumber == self sigTERM   ifTrue:[^ 'termination'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5332
    aSignalNumber == self sigSTOP   ifTrue:[^ 'stop'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5333
    aSignalNumber == self sigTSTP   ifTrue:[^ 'tty stop'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5334
    aSignalNumber == self sigCONT   ifTrue:[^ 'continue'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5335
    aSignalNumber == self sigCHLD   ifTrue:[^ 'child death'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5336
    aSignalNumber == self sigTTIN   ifTrue:[^ 'background tty input'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5337
    aSignalNumber == self sigTTOU   ifTrue:[^ 'background tty output'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5338
    aSignalNumber == self sigIO     ifTrue:[^ 'io available'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5339
    aSignalNumber == self sigXCPU   ifTrue:[^ 'cpu time expired'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5340
    aSignalNumber == self sigXFSZ   ifTrue:[^ 'file size limit'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5341
    aSignalNumber == self sigVTALRM ifTrue:[^ 'virtual alarm timer'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5342
    aSignalNumber == self sigPROF   ifTrue:[^ 'profiling timer'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5343
    aSignalNumber == self sigWINCH  ifTrue:[^ 'winsize changed'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5344
    aSignalNumber == self sigLOST   ifTrue:[^ 'resource lost'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5345
    aSignalNumber == self sigUSR1   ifTrue:[^ 'user signal 1'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5346
    aSignalNumber == self sigUSR2   ifTrue:[^ 'user signal 2'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5347
    aSignalNumber == self sigMSG    ifTrue:[^ 'HFT message'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5348
    aSignalNumber == self sigPWR    ifTrue:[^ 'power-fail'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5349
    aSignalNumber == self sigPRE    ifTrue:[^ 'programming exception'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5350
    aSignalNumber == self sigGRANT  ifTrue:[^ 'HFT access wanted'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5351
    aSignalNumber == self sigRETRACT ifTrue:[^ 'HFT access relinquish'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5352
    aSignalNumber == self sigSOUND   ifTrue:[^ 'HFT sound complete'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5353
    aSignalNumber == self sigDANGER  ifTrue:[^ 'low on paging space'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5354
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5355
    "notice: many systems map SIGPOLL and/or SIGUSR onto SIGIO
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5356
	     therefore, keep SIGIO always above the two below" 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5357
    aSignalNumber == self sigPOLL   ifTrue:[^ 'io available'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5358
    aSignalNumber == self sigURG    ifTrue:[^ 'urgent'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5359
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5360
    ^ 'unknown signal'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5361
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5362
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5363
     OperatingSystem nameForSignal:9
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5364
     OperatingSystem nameForSignal:(OperatingSystem sigPOLL) 
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5365
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5366
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5367
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5368
operatingSystemSignal:signalNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5369
    "return the signal to be raised when an 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5370
     operatingSystem-signal occurs, or nil"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5371
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5372
    OSSignals notNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5373
	^ OSSignals at:signalNumber ifAbsent:[nil]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5374
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5375
    ^ nil
10
claus
parents: 5
diff changeset
  5376
!
claus
parents: 5
diff changeset
  5377
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5378
operatingSystemSignal:signalNumber install:aSignal
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5379
    "install a signal to be raised when an operatingSystem-signal occurs"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5380
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5381
    OSSignals isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5382
	OSSignals := Array new:32
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5383
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5384
    OSSignals at:signalNumber put:aSignal
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5385
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5386
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5387
sendSignal:signalNumber to:processId
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5388
    "send a unix signal to some process (maybe myself).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5389
     Returns false if any error occurred, true otherwise.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5390
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5391
     Do not confuse UNIX signals with Smalltalk-Signals.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5392
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5393
     WARNING: in order to avoid zombie processes (on unix),
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5394
	      you may have to fetch the processes exitstatus with
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5395
	      OperatingSystem>>getStatusOfProcess:aProcessId
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5396
	      if the signal terminates that process."
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5397
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5398
%{
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5399
#ifndef MSDOS_LIKE
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5400
    if (__bothSmallInteger(signalNumber, processId)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5401
	if (kill(__intVal(processId), __intVal(signalNumber)) < 0) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  5402
	    OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5403
	    RETURN ( false );
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  5404
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5405
	RETURN ( true );
10
claus
parents: 5
diff changeset
  5406
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5407
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5408
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5409
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5410
    "/ either invalid argument (non-integers)
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5411
    "/ or not supported by OS
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5412
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5413
    ^ self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5414
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5415
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5416
startSpyTimer
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5417
    "trigger a spyInterrupt, to be signalled after some short (virtual) time.
359
claus
parents: 357
diff changeset
  5418
     This is used by the old MessageTally for profiling.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5419
     Should be changed to use real profiling timer if available.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5420
     On systems, where no virtual timer is available, use the real timer
359
claus
parents: 357
diff changeset
  5421
     (which is of course less correct).
claus
parents: 357
diff changeset
  5422
     OBSOLETE: the new messageTally runs as a high prio process, not using 
claus
parents: 357
diff changeset
  5423
	       spy interrupts."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5424
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5425
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5426
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5427
#ifndef __spyInterrupt
329
claus
parents: 322
diff changeset
  5428
    extern void __spyInterrupt();
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5429
#endif
10
claus
parents: 5
diff changeset
  5430
#if defined(ITIMER_VIRTUAL)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5431
    struct itimerval dt;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5432
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5433
# ifdef SIGVTALRM
329
claus
parents: 322
diff changeset
  5434
    signal(SIGVTALRM, __spyInterrupt);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5435
# else
329
claus
parents: 322
diff changeset
  5436
    signal(SIGALRM, __spyInterrupt);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5437
# endif
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5438
348
claus
parents: 345
diff changeset
  5439
    dt.it_interval.tv_sec = 0;
claus
parents: 345
diff changeset
  5440
    dt.it_interval.tv_usec = 0;
claus
parents: 345
diff changeset
  5441
    dt.it_value.tv_sec = 0;
claus
parents: 345
diff changeset
  5442
    dt.it_value.tv_usec = 1000;   /* 1000 Hz */
claus
parents: 345
diff changeset
  5443
    setitimer(ITIMER_VIRTUAL, &dt, 0);
claus
parents: 345
diff changeset
  5444
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5445
    RETURN (true);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5446
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5447
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5448
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5449
    ^ false
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5450
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5451
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5452
stopSpyTimer
359
claus
parents: 357
diff changeset
  5453
    "stop spy timing - disable spy timer.
claus
parents: 357
diff changeset
  5454
     OBSOLETE: the new messageTally runs as a high prio process, not using 
claus
parents: 357
diff changeset
  5455
	       spy interrupts."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5456
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5457
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5458
10
claus
parents: 5
diff changeset
  5459
#if defined(ITIMER_VIRTUAL)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5460
    struct itimerval dt;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5461
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5462
    dt.it_interval.tv_sec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5463
    dt.it_interval.tv_usec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5464
    dt.it_value.tv_sec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5465
    dt.it_value.tv_usec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5466
    setitimer(ITIMER_VIRTUAL, &dt, 0);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5467
    RETURN (true);
10
claus
parents: 5
diff changeset
  5468
#endif
claus
parents: 5
diff changeset
  5469
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5470
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5471
    ^ false
10
claus
parents: 5
diff changeset
  5472
!
claus
parents: 5
diff changeset
  5473
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5474
terminateProcess:processId
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5475
    "terminate a unix process.
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5476
     The process has a chance to do some cleanup.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5477
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5478
     WARNING: in order to avoid zombie processes (on unix),
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5479
	      you may have to fetch the processes exitstatus with
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5480
	      OperatingSystem>>getStatusOfProcess:aProcessId."
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5481
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5482
    self sendSignal:(self sigTERM) to:processId.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5483
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5484
    "Modified: 28.12.1995 / 15:05:37 / stefan"
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5485
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5486
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5487
terminateProcessGroup:processGroupId
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5488
    "terminate a unix process group.
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5489
     The process has a chance to do some cleanup.
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5490
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5491
     WARNING: in order to avoid zombie processes (on unix),
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5492
	      you may have to fetch the processes exitstatus with
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5493
	      OperatingSystem>>getStatusOfProcess:aProcessId."
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5494
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5495
    self sendSignal:(self sigTERM) to:(processGroupId negated).
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5496
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5497
    "Modified: 28.12.1995 / 15:05:37 / stefan"
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5498
    "Created: 23.4.1996 / 16:40:34 / stefan"
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5499
!
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5500
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5501
unblockInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5502
    "enable interrupt processing - if any interrupts are pending,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5503
     these will be handled immediately.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5504
     When unblocking interrupts, take care of nested block/unblock
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5505
     calls - you must only unblock after a blockcall if they where
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5506
     really not blocked before. See OperatingSystemclass>>blockInterrupts."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5507
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5508
    __UNBLOCKINTERRUPTS();
1040
60e4c4bbbca2 return nil from unblockInterrupts (thats what the inlined code returns)
Claus Gittinger <cg@exept.de>
parents: 1034
diff changeset
  5509
    RETURN (nil);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5510
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5511
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5512
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  5513
!OperatingSystem class methodsFor:'misc'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5514
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5515
exit
710
10d86ca4c4a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 704
diff changeset
  5516
    "shutdown smalltalk immediately - this method does not return.
10d86ca4c4a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 704
diff changeset
  5517
     Return 'good'-status (0) to the parent unix process."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5518
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5519
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5520
    __mainExit(0);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5521
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5522
    "OperatingSystem exit - dont evaluate this"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5523
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5524
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5525
exit:exitCode
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5526
    "shutdown smalltalk immediately -
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5527
     returning an exit-code to the parent unix process."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5528
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5529
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5530
    int code = 1;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5531
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5532
    if (__isSmallInteger(exitCode)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  5533
	code = __intVal(exitCode);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5534
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5535
    __mainExit(code);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5536
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5537
    "OperatingSystem exit:1 - dont evaluate this"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5538
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5539
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5540
exitWithCoreDump
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5541
    "shutdown smalltalk immediately - dumping core.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5542
     This always returns 'bad'-status to the parent unix process.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5543
     Notice, that no cleanup is performed at all - you may have to
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5544
     manually remove any tempfiles.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5545
     Use this only for debugging ST/X itself"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5546
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5547
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5548
    abort();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5549
%}
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5550
    "
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5551
     OperatingSystem exitWithCoreDump - dont evaluate this
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5552
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5553
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5554
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5555
slowFork:aBoolean
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5556
    "set/clear the `avoid-fork-if-possible-because-its-slow' flag.
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5557
     Only used internally on SYSV3 systems"
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5558
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5559
    SlowFork := aBoolean
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5560
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5561
    "Modified: 22.4.1996 / 13:13:09 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5562
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5563
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  5564
!OperatingSystem class methodsFor:'os queries'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5565
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5566
getCPUDefine
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5567
    "return a string which was used to identify this CPU type when STX was
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5568
     compiled, and which should be passed down when compiling methods.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5569
     For example, on linux, this may be '-Di386'; on a vax, this would be '-Dvax'.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5570
     This is normally not of interest to 'normal' users; however, it is passed
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5571
     down to the c-compiler when methods are incrementally compiled to machine code."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5572
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5573
%{  /* NOCONTEXT */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5574
#   ifndef CPU_DEFINE
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5575
#       define CPU_DEFINE "-DunknownCPU"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5576
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5577
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5578
    RETURN ( __MKSTRING(CPU_DEFINE));
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5579
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5580
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5581
     OperatingSystem getCPUDefine
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5582
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5583
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5584
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5585
getCPUType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5586
    "return a string giving the type of machine we're running on.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5587
     Here, the machine for which ST/X was compiled is returned
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5588
     (i.e. for all x86's, the same i386 is returned).
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 756
diff changeset
  5589
     This may normally not be of any interest to you ..."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5590
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5591
    |cpu|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5592
    
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5593
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5594
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5595
#   ifdef vax
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5596
#    define CPU_STRING "vax"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5597
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5598
#   ifdef mips
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5599
#    define CPU_STRING "mips"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5600
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5601
#   ifdef i386
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5602
#    define CPU_STRING "i386"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5603
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5604
#   ifdef ns32k
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5605
#    define CPU_STRING "ns32k"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5606
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5607
#   ifdef mc68k
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5608
#    define CPU_STRING "mc68k"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5609
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5610
#   ifdef mc88k
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5611
#    define CPU_STRING "mc88k"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5612
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5613
#   ifdef sparc
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5614
#    define CPU_STRING "sparc"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5615
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5616
#   ifdef hppa
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5617
#    define CPU_STRING "hppa"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5618
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5619
#   ifdef rs6000
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5620
#    define CPU_STRING "rs6000"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5621
#   endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5622
#   ifdef powerPC
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5623
#    define CPU_STRING "powerPC"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5624
#   endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5625
#   ifdef alpha
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5626
#    define CPU_STRING "alpha"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5627
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5628
#   ifdef transputer
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5629
#    define CPU_STRING "transputer"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5630
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5631
#   ifdef ibm370
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5632
#    define CPU_STRING "ibm370"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5633
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5634
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5635
#   ifndef CPU_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5636
#    define CPU_STRING "unknown"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5637
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5638
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5639
    cpu = __MKSTRING(CPU_STRING);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5640
#   undef CPU_STRING
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5641
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5642
    ^ cpu
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5643
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5644
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5645
     OperatingSystem getCPUType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5646
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5647
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5648
    "examples: are we running on a ss-10/solaris ?"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5649
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5650
     (OperatingSystem getCPUType = 'sparc') 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5651
     and:[OperatingSystem getOSType = 'solaris']
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5652
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5653
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5654
    "or on a pc/solaris ?"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5655
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5656
     (OperatingSystem getCPUType = 'i386')
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5657
     and:[OperatingSystem getOSType = 'solaris']
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5658
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5659
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5660
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5661
getCommandOutputFrom:aCommand
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5662
    "execute a simple command (such as hostname) and
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5663
     return the commands output as a string"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5664
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5665
    |p result|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5666
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5667
    ForkFailed ifFalse:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5668
	PipeStream openErrorSignal handle:[:ex |
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5669
	    ForkFailed := true.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5670
	    'OS: cannot fork/popen' errorPrintNL.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5671
	    ex return.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5672
	] do:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5673
	    p := PipeStream readingFrom:aCommand.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5674
	    p notNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5675
		result := p nextLine.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5676
		p close
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5677
	    ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5678
	]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5679
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5680
    ^ result
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5681
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5682
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5683
getDomainName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5684
    "return the domain this host is in.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5685
     Notice:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5686
	not all systems support this; on some, 'unknown' is returned."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5687
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5688
    |name|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5689
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5690
    DomainName notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5691
	^ DomainName
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5692
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5693
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5694
%{  /* STACK: 2048 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5695
#if defined(HAS_GETDOMAINNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5696
    char buffer[128];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5697
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5698
    if (getdomainname(buffer, sizeof(buffer)) == 0) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5699
	name = __MKSTRING(buffer);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5700
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5701
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5702
# if defined(HAS_UNAME) && defined(HAS_UTS_DOMAINNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5703
    struct utsname ubuff;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5704
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5705
    if (uname(&ubuff) >= 0) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5706
	name = __MKSTRING(ubuff.domainname);
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5707
    }
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5708
# else
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5709
#  if defined(HAS_SYSINFO) && defined(SI_SRPC_DOMAIN)
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5710
    char buffer[256];
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5711
    int ret;
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5712
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5713
    if ((ret = sysinfo(SI_SRPC_DOMAIN, buffer, sizeof(buffer))) >= 0 && ret <= sizeof(buffer)) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5714
	name = __MKSTRING(buffer);
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5715
    }
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5716
#  endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5717
# endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5718
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5719
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5720
    name isNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5721
	name := self getEnvironment:'DOMAIN'.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5722
	name isNil ifTrue:[
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5723
	    name := self getCommandOutputFrom:'domainname'
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5724
	]
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5725
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5726
    name isNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5727
	'OS: cannot find out domainname' errorPrintNL.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5728
	name := 'unknown'.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5729
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5730
    DomainName := name.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5731
    ^ name
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5732
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5733
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5734
     OperatingSystem getDomainName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5735
    "
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5736
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5737
    "Modified: 26.4.1996 / 10:04:54 / stefan"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5738
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5739
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5740
getEnvironment:aStringOrSymbol
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5741
    "get an environment string"
10
claus
parents: 5
diff changeset
  5742
claus
parents: 5
diff changeset
  5743
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  5744
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5745
    char *env;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5746
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5747
    if (__isString(aStringOrSymbol) || __isSymbol(aStringOrSymbol)) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5748
#ifdef WIN32
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5749
	char buff[512];
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5750
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5751
	env = NULL;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5752
	if (GetEnvironmentVariable(__stringVal(aStringOrSymbol),
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5753
				   buff,
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5754
				   sizeof(buff)-1)) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5755
	    env = buff;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5756
	}
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5757
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  5758
	env =  (char *)getenv(__stringVal(aStringOrSymbol));
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5759
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5760
	if (env) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5761
	    RETURN ( __MKSTRING(env) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5762
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5763
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5764
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5765
.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5766
    ^ nil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5767
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5768
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5769
     OperatingSystem getEnvironment:'LANG'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5770
     OperatingSystem getEnvironment:'LOGIN'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5771
     OperatingSystem getEnvironment:'HOME'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5772
     OperatingSystem getEnvironment:'NNTPSERVER'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5773
     OperatingSystem getEnvironment:'MAIL'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5774
     OperatingSystem getEnvironment:'PATH'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5775
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5776
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5777
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5778
getHostName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5779
    "return the hostname we are running on - if there is
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5780
     a HOST environment variable, we are much faster here ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5781
     Notice:
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5782
	not all systems support this; on some, 'unknown' is returned."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5783
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5784
    |name|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5785
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5786
    HostName notNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5787
	^ HostName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5788
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5789
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5790
%{  /* STACK: 2048 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5791
#if defined(HAS_GETHOSTNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5792
    char buffer[128];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5793
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5794
    if (gethostname(buffer, sizeof(buffer)) == 0) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5795
	name = __MKSTRING(buffer);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5796
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5797
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5798
# if defined(HAS_UNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5799
    struct utsname ubuff;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5800
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5801
    if (uname(&ubuff) >= 0) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5802
	name = __MKSTRING(ubuff.nodename);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5803
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5804
# else
1702
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5805
#  if defined(HAS_SYSINFO) && defined(SI_HOSTNAME)
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5806
    char buffer[256];
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5807
    int ret;
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5808
 
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5809
    if ((ret = sysinfo(SI_HOSTNAME, buffer, sizeof(buffer))) >= 0 && ret <= sizeof(buffer)) {
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  5810
	name = __MKSTRING(buffer);
1702
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5811
    }
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5812
#  else
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5813
#   ifdef WIN32
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5814
    char buffer[128];
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5815
    int buffSize = sizeof(buffer);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5816
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5817
    if (GetComputerName(buffer, &buffSize) == TRUE) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5818
	name = __MKSTRING(buffer);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5819
    }
1702
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5820
#   endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5821
#  endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5822
# endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5823
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5824
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5825
    name isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5826
	name := self getEnvironment:'HOST'.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5827
	name isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5828
	    name := self getCommandOutputFrom:'hostname'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5829
	]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5830
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5831
    name isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5832
	'OS: cannot find out hostname' errorPrintNL.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5833
	name := 'unknown'.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5834
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5835
    HostName := name.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5836
    ^ name
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5837
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5838
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5839
     OperatingSystem getHostName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5840
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5841
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5842
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5843
getLocaleInfo
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5844
    "return a dictionary filled with values from the locale information;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5845
     Not all fields may be present, depending on the OS's setup and capabilities.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5846
     Possible fields are:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5847
	decimalPoint                    <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5848
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5849
	thousandsSep                    <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5850
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5851
	internationalCurrencySymbol     <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5852
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5853
	currencySymbol                  <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5854
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5855
	monetaryDecimalPoint            <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5856
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5857
	monetaryThousandsSeparator      <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5858
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5859
	positiveSign                    <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5860
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5861
	negativeSign                    <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5862
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5863
	internationalFractionalDigits   <Integer>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5864
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5865
	fractionalDigits                <Integer>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5866
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5867
	positiveSignPrecedesCurrencySymbol      <Boolean>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5868
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5869
	negativeSignPrecedesCurrencySymbol      <Boolean>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5870
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5871
	positiveSignSeparatedBySpaceFromCurrencySymbol  <Boolean>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5872
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5873
	negativeSignSeparatedBySpaceFromCurrencySymbol  <Boolean>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5874
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5875
	positiveSignPosition                            <Symbol>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5876
							one of: #parenthesesAround, 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5877
								#signPrecedes, 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5878
								#signSuceeds, 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5879
								#signPrecedesCurrencySymbol,
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5880
								#signSuceedsCurrencySymbol
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5881
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5882
	negativeSignPosition                            <like above>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5883
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5884
     it is up to the application to deal with undefined values.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5885
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5886
     Notice, that (for now), the system does not use this information;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5887
     it should be used by applications as required.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5888
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5889
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5890
    |info val|
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5891
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5892
    LocaleInfo notNil ifTrue:[
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5893
	"/ return the internal info; useful on systems which do not
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5894
	"/ support this.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5895
	^ LocaleInfo
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5896
    ].
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5897
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5898
    info := IdentityDictionary new.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5899
%{
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5900
    char *decimalPoint;         /* something like "." (US) or "," (german) */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5901
    char *thousandsSep;         /* something like "," (US) or "." (german) */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5902
    char *intCurrencySymbol;    /* international currency symbol; something like "USD "  "DM  " */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5903
    char *currencySymbol;       /* local currency symbol;         something like "USD "  "DM  " */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5904
    char *monDecimalPoint;      /* money: decimal point */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5905
    char *monThousandsSep;      /* money: thousands sep */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5906
    char *positiveSign;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5907
    char *negativeSign;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5908
    int   intFractDigits;       /* money: international digits after decPoint */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5909
    int   fractDigits;          /* money: local digits after decPoint */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5910
    int   csPosPrecedes;        /* money: 1 if currency symbol precedes a positive value; 0 if it sceeds */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5911
    int   csNegPrecedes;        /* money: 1 if currency symbol precedes a negative value; 0 if it sceeds */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5912
    int   csPosSepBySpace;      /* money: 1 if currency symbol should be separated by a space from a positive value; 0 if no space */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5913
    int   csNegSepBySpace;      /* money: 1 if currency symbol should be separated by a space from a negative value; 0 if no space */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5914
    int   csPosSignPosition;    /* money: 0: ()'s around the value & currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5915
    int   csNegSignPosition;    /*        1: sign precedes the value & currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5916
				/*        2: sign succeeds the value & currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5917
				/*        3: sign immediately precedes the currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5918
				/*        4: sign immediately suceeds the currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5919
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5920
#if defined(HAS_LOCALECONV)
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5921
    struct lconv *conf;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5922
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5923
    conf = localeconv();
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5924
    if (conf) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5925
	decimalPoint = conf->decimal_point;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5926
	thousandsSep = conf->thousands_sep;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5927
	intCurrencySymbol = conf->int_curr_symbol;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5928
	currencySymbol = conf->currency_symbol;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5929
	monDecimalPoint = conf->mon_decimal_point;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5930
	monThousandsSep = conf->mon_thousands_sep;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5931
	positiveSign = conf->positive_sign;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5932
	negativeSign = conf->negative_sign;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5933
	intFractDigits = conf->int_frac_digits;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5934
	fractDigits = conf->frac_digits;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5935
	csPosPrecedes = conf->p_cs_precedes; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5936
	csNegPrecedes = conf->n_cs_precedes; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5937
	csPosSepBySpace = conf->p_sep_by_space; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5938
	csNegSepBySpace = conf->n_sep_by_space; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5939
	csPosSignPosition = conf->p_sign_posn;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5940
	csNegSignPosition = conf->n_sign_posn;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5941
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5942
#else
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5943
    decimalPoint = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5944
    thousandsSep = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5945
    intCurrencySymbol = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5946
    currencySymbol = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5947
    monDecimalPoint = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5948
    monThousandsSep = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5949
    positiveSign =  (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5950
    negativeSign =(char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5951
    intFractDigits = -1;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5952
    fractDigits = -1;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5953
    csPosPrecedes = -1; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5954
    csNegPrecedes = -1; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5955
    csPosSepBySpace = -1; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5956
    csNegSepBySpace = -1; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5957
    csPosSignPosition = -1;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5958
    csNegSignPosition = -1;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5959
#endif
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5960
    if (decimalPoint) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5961
	val = __MKSTRING(decimalPoint);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5962
	__AT_PUT_(info, @symbol(decimalPoint), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5963
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5964
    if (thousandsSep) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5965
	val = __MKSTRING(thousandsSep);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5966
	__AT_PUT_(info, @symbol(thousandsSeparator), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5967
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5968
    if (intCurrencySymbol) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5969
	val = __MKSTRING(intCurrencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5970
	__AT_PUT_(info, @symbol(internationCurrencySymbol), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5971
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5972
    if (currencySymbol) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5973
	val = __MKSTRING(currencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5974
	__AT_PUT_(info, @symbol(currencySymbol), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5975
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5976
    if (monDecimalPoint) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5977
	val = __MKSTRING(monDecimalPoint);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5978
	__AT_PUT_(info, @symbol(monetaryDecimalPoint), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5979
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5980
    if (monThousandsSep) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5981
	val = __MKSTRING(monThousandsSep);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5982
	__AT_PUT_(info, @symbol(monetaryThousandsSeparator), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5983
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5984
    if (positiveSign) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5985
	val = __MKSTRING(positiveSign);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5986
	__AT_PUT_(info, @symbol(positiveSign), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5987
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5988
    if (negativeSign) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5989
	val = __MKSTRING(negativeSign);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5990
	__AT_PUT_(info, @symbol(negativeSign), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5991
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5992
    if (intFractDigits >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5993
	__AT_PUT_(info, @symbol(internationalFractionalDigits),  __MKSMALLINT(intFractDigits));
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5994
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5995
    if (fractDigits >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5996
	__AT_PUT_(info, @symbol(fractionalDigits),  __MKSMALLINT(fractDigits));
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5997
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5998
    if (csPosPrecedes >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5999
	if (csPosPrecedes == 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6000
	    val = false;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6001
	} else {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6002
	    val = true;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6003
	}
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6004
	__AT_PUT_(info, @symbol(positiveSignPrecedesCurrencySymbol), val );
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6005
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6006
    if (csNegPrecedes >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6007
	if (csNegPrecedes == 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6008
	    val = false;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6009
	} else {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6010
	    val = true;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6011
	}
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6012
	__AT_PUT_(info, @symbol(negativeSignPrecedesCurrencySymbol), val );
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6013
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6014
    if (csPosSepBySpace >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6015
	if (csPosSepBySpace == 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6016
	    val = false;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6017
	} else {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6018
	    val = true;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6019
	}
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6020
	__AT_PUT_(info, @symbol(positiveSignSeparatedBySpaceFromCurrencySymbol), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6021
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6022
    if (csNegSepBySpace >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6023
	if (csNegSepBySpace == 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6024
	    val = false;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6025
	} else {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6026
	    val = true;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6027
	}
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6028
	__AT_PUT_(info, @symbol(negativeSignSeparatedBySpaceFromCurrencySymbol), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6029
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6030
    switch (csPosSignPosition) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6031
	case 0:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6032
	    val = @symbol(parenthesesAround);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6033
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6035
	case 1:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6036
	    val = @symbol(signPrecedes);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6037
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6038
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6039
	case 2:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6040
	    val = @symbol(signSuceeds);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6041
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6042
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6043
	case 3:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6044
	    val = @symbol(signPrecedesCurrencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6045
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6046
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6047
	case 4:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6048
	    val = @symbol(signSuceedsCurrencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6049
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6050
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6051
	default:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6052
	    val = nil;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6053
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6054
    if (val != nil) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6055
	__AT_PUT_(info, @symbol(positiveSignPosition), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6056
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6057
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6058
    switch (csNegSignPosition) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6059
	case 0:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6060
	    val = @symbol(parenthesesAround);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6061
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6062
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6063
	case 1:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6064
	    val = @symbol(signPrecedes);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6065
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6066
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6067
	case 2:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6068
	    val = @symbol(signSuceeds);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6069
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6070
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6071
	case 3:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6072
	    val = @symbol(signPrecedesCurrencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6073
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6074
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6075
	case 4:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6076
	    val = @symbol(signSuceedsCurrencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6077
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6078
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6079
	default:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6080
	    val = nil;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6081
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6082
    if (val != nil) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6083
	__AT_PUT_(info, @symbol(negativeSignPosition), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6084
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6085
%}.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6086
    ^ info
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6087
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6088
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6089
     OperatingSystem getLocaleInfo
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6090
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6091
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6092
    "Created: 23.12.1995 / 14:19:20 / cg"
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6093
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6094
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6095
getOSDefine
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6096
    "return a string which was used to identify this machine when stx was
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6097
     compiled, and which should be passed down when compiling methods.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6098
     For example, on linux, this is '-DLINUX'."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6099
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6100
%{  /* NOCONTEXT */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6101
#ifdef WIN32
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6102
# ifndef OS_DEFINE
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6103
#  define OS_DEFINE "-DWIN32"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6104
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6105
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6106
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6107
#ifndef OS_DEFINE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6108
# define OS_DEFINE "-DunknownOS"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6109
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6110
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6111
    RETURN ( __MKSTRING(OS_DEFINE));
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
  6112
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
  6113
#undef OS_DEFINE
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6114
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6115
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6116
     OperatingSystem getOSDefine
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6117
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6118
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6119
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6120
getOSType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6121
    "return a string giving the type of OS we're running on.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6122
     This can be used to adapt programs to certain environment
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6123
     differences (for example: mail-lock strategy ...)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6124
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6125
    |os|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6126
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6127
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6128
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6129
#   ifdef MSDOS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6130
#    define OS_STRING "msdos"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6131
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6132
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6133
#   ifdef WIN32
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
  6134
#    define OS_STRING "win32"
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6135
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6136
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6137
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6138
#   ifdef MSWINDOWS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6139
#    define OS_STRING "mswindows"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6140
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6141
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6142
#   ifdef NT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6143
#    define OS_STRING "nt"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6144
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6145
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6146
#   ifdef VMS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6147
#    define OS_STRING "vms"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6148
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6149
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6150
#   ifdef MVS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6151
#    define OS_STRING "mvs"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6152
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6153
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6154
#   ifdef OS2
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6155
#    define OS_STRING "os2"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6156
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6157
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6158
#   ifdef sinix
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6159
#    define OS_STRING "sinix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6160
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6161
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6162
#   ifdef ultrix
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6163
#    define OS_STRING "ultrix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6164
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6165
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6166
#   ifdef sco
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6167
#    define OS_STRING "sco"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6168
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6169
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6170
#   ifdef hpux
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6171
#    define OS_STRING "hpux"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6172
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6173
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6174
#   ifdef LINUX
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6175
#    define OS_STRING "linux"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6176
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6177
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6178
#   ifdef sunos
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6179
#    define OS_STRING "sunos"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6180
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6181
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6182
#   ifdef solaris
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6183
#    define OS_STRING "solaris"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6184
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6185
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6186
#   ifdef IRIS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6187
#    define OS_STRING "irix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6188
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6189
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6190
#   ifdef aix
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6191
#    define OS_STRING "aix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6192
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6193
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6194
#   ifdef realIX
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6195
#    define OS_STRING "realIX"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6196
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6197
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6198
    /*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6199
     * no concrete info; become somewhat vague ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6200
     */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6201
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6202
#    ifdef MACH
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6203
#     define OS_STRING "mach"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6204
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6205
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6206
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6207
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6208
#    ifdef BSD
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6209
#     define OS_STRING "bsd"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6210
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6211
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6212
#    ifdef SYSV
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6213
#     ifdef SYSV3
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6214
#      define OS_STRING "sys5_3"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6215
#     else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6216
#      ifdef SYSV4
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6217
#       define OS_STRING "sys5_4"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6218
#      else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6219
#       define OS_STRING "sys5"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6220
#      endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6221
#     endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6222
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6223
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6224
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6225
    /*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6226
     * become very vague ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6227
     */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6228
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6229
#    ifdef POSIX
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6230
#     define OS_STRING "posix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6231
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6232
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6233
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6234
#    ifdef UNIX
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6235
#     define OS_STRING "unix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6236
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6237
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6238
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6239
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6240
#    define OS_STRING "unknown"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6241
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6242
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6243
    os = __MKSTRING(OS_STRING);
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
  6244
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6245
#   undef OS_STRING
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6246
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6247
    ^ os
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6248
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6249
    "OperatingSystem getOSType"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6250
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6251
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6252
getProcessId
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6253
    "return the (unix-)processId"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6254
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6255
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6256
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6257
    int pid = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6258
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6259
    pid = getpid();
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  6260
#else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  6261
# ifdef WIN32
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  6262
    pid = GetCurrentProcessId() & 0x3FFFFFFF;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  6263
# endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6264
#endif
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6265
    RETURN ( __MKSMALLINT(pid) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6266
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6267
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6268
     OperatingSystem getProcessId
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6269
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6270
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6271
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6272
getSystemID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6273
    "if supported by the OS, return the systemID;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6274
     a unique per machine identification.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6275
     WARNING:
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6276
	not all systems support this; on some, 'unknown' is returned."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6277
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6278
%{  /* NO_CONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6279
#if defined(IRIX5) && !defined(HAS_GETHOSTID)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6280
    char idBuffer[MAXSYSIDSIZE];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6281
    int retVal;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6282
    OBJ arr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6283
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6284
    if ((retVal = syssgi(SGI_SYSID, idBuffer)) == 0) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6285
	arr = __BYTEARRAY_UNINITIALIZED_NEW_INT(MAXSYSIDSIZE);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6286
	bcopy(idBuffer, __ByteArrayInstPtr(arr)->ba_element, MAXSYSIDSIZE);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6287
	RETURN (arr);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6288
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6289
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6290
#if defined(HAS_GETHOSTID)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6291
    int runningId;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6292
    OBJ arr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6293
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6294
    runningId = gethostid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6295
    arr = __BYTEARRAY_UNINITIALIZED_NEW_INT(4);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6296
    *(int *)(__ByteArrayInstPtr(arr)->ba_element) = runningId;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6297
    RETURN (arr);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6298
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6299
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6300
    ^ 'unknown'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6301
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6302
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6303
     OperatingSystem getSystemID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6304
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6305
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6306
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6307
getSystemInfo
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6308
    "return info on the system weare running on.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6309
     If the system supports the uname system call, that info is returned;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6310
     otherwise, some simulated info is returned.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6311
 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6312
     WARNING:
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6313
       Do not depend on the amount and contents of the returned information, some
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6314
       systems may return more/less than others. Also, the contents depends on the
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6315
       OS, for example, linux returns 'ix86', while WIN32 returns 'x86'.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6316
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6317
       This method is mainly provided to augment error reports with some system
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6318
       information. 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6319
       (in case of system/version specific OS errors, conditional workarounds and patches
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  6320
	may be based upon this info)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6321
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6322
     The returned info may (or may not) contain:
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6323
	#system -> some operating system identification (irix, Linux, nt, win32s ...) 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6324
	#version -> OS version (some os version identification)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6325
	#release -> OS release (3.5, 1.2.1 ...)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6326
	#node   -> some host identification (hostname)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6327
	#domain  -> domain name (hosts domain)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6328
	#machine -> type of machine (i586, mips ...)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6329
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6330
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6331
    |sys node rel ver mach dom mtyp brel info|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6332
1060
119d45f975e1 increased getSystemInfos stack - just to make certain
Claus Gittinger <cg@exept.de>
parents: 1058
diff changeset
  6333
%{  /* STACK: 4096 */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6334
#if defined(HAS_UNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6335
    struct utsname ubuff;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6336
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6337
    if (uname(&ubuff) >= 0) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6338
	sys  = __MKSTRING(ubuff.sysname);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6339
	node = __MKSTRING(ubuff.nodename);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6340
	rel  = __MKSTRING(ubuff.release);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6341
	ver  = __MKSTRING(ubuff.version);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6342
	mach = __MKSTRING(ubuff.machine);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6343
# ifdef HAS_UTS_DOMAINNAME
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6344
	dom  = __MKSTRING(ubuff.domainname);
1675
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6345
# else
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6346
#  if defined(HAS_GETDOMAINNAME)
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6347
	{
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6348
	    char buffer[128];
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6349
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6350
	    if (getdomainname(buffer, sizeof(buffer)) == 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6351
		dom = __MKSTRING(buffer);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6352
	    }
1675
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6353
	}
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6354
#  endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6355
# endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6356
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6357
#else /* no uname */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6358
# ifdef WIN32 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6359
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6360
    char vsnBuffer[32];
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6361
    char *s;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6362
    int winVer;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6363
    DWORD vsn;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6364
    SYSTEM_INFO sysInfo;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6365
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6366
    vsn = GetVersion();
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6367
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6368
    if (HIWORD(vsn) & 0x8000) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6369
	s = "win32s";
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6370
    } else {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  6371
	s = "nt";
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6372
    }
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6373
    sys = __MKSTRING(s);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6374
    winVer = LOWORD(vsn);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6375
    sprintf(vsnBuffer, "%d.%d", LOBYTE(winVer), HIBYTE(winVer));
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6376
    rel = __MKSTRING(vsnBuffer);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6377
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6378
    GetSystemInfo(&sysInfo);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6379
    if (sysInfo.dwProcessorType) {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  6380
	sprintf(vsnBuffer, "%d", sysInfo.dwProcessorType);
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6381
	mach = __MKSTRING(vsnBuffer);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6382
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6383
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6384
# endif /* WIN32 */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6385
#endif /* no uname */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6386
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6387
    sys isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6388
	sys := self getSystemType.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6389
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6390
    node isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6391
	node := self getHostName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6392
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6393
    dom isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6394
	dom := self getDomainName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6395
    ].
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6396
    mach isNil ifTrue:[
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6397
	mach := self getCPUType
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6398
    ].
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6399
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6400
    info := IdentityDictionary new.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6401
    info at:#system put:sys.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6402
    info at:#node put:node.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6403
    rel notNil ifTrue:[info at:#release put:rel].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6404
    ver notNil ifTrue:[info at:#version put:ver].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6405
    mach notNil ifTrue:[info at:#machine put:mach].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6406
    dom notNil ifTrue:[info at:#domain put:dom].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6407
    ^ info
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6408
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6409
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6410
     OperatingSystem getSystemInfo
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6411
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6412
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6413
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6414
getSystemType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6415
    "return a string giving the type of system we're running on.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6416
     This is almost the same as getOSType, but the returned string
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6417
     is slightly different for some systems (i.e. iris vs. irix).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6418
     Dont depend on this - use getOSType. I dont really see a point
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6419
     here ... 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6420
     (except for slight differences between next/mach and other machs)"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6421
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6422
    |sys|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6423
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6424
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6425
#   ifdef NEXT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6426
#    define SYS_STRING "next"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6427
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6428
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6429
#   ifdef IRIS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6430
#    define SYS_STRING "iris"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6431
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6432
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6433
#   ifdef WIN32 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6434
#    define SYS_STRING  "win32"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6435
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6436
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6437
#   ifdef SYS_STRING
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6438
     sys = __MKSTRING(SYS_STRING);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6439
#    undef SYS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6440
#   endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6441
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6442
    sys isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6443
	^ self getOSType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6444
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6445
    ^ sys
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6446
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6447
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6448
     OperatingSystem getSystemType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6449
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6450
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6451
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6452
isBSDlike
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6453
    "return true, if the OS we're running on is a 'real' unix."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6454
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6455
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6456
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6457
#if defined(BSD) || defined(MACH) || defined(SYSV4)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6458
    RETURN ( true );
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  6459
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6460
%}.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  6461
    ^ false
10
claus
parents: 5
diff changeset
  6462
!
claus
parents: 5
diff changeset
  6463
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6464
isMSDOSlike
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6465
    "return true, if the OS we're running on is dos like 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6466
     (in contrast to unix-like)."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6467
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6468
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6469
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6470
#if defined(MSDOS_LIKE)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6471
    RETURN ( true );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6472
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6473
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6474
    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6475
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6476
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6477
isMSWINDOWSlike
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6478
    "return true, if the OS we're running on is MS-Windows like."
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6479
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6480
%{  /* NOCONTEXT */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6481
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6482
#if defined(WIN32)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6483
    RETURN ( true );
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6484
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6485
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6486
%}.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6487
    ^ false
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6488
!
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6489
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6490
isOS2like
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6491
    "return true, if the OS we're running on is OS2 like"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6492
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6493
%{  /* NOCONTEXT */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6494
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6495
#if defined(OS2)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6496
    RETURN (true);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6497
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6498
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6499
%}.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6500
    ^ false
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6501
!
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6502
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6503
isUNIXlike
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6504
    "return true, if the OS we're running on is a unix like."
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6505
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6506
%{  /* NOCONTEXT */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6507
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6508
#if !defined(UNIX_LIKE)
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6509
    RETURN ( false );
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6510
#endif
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6511
%}.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6512
    ^ true
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6513
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6514
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6515
maxFileNameLength
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6516
    "return the max number of characters in a filename.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6517
     CAVEAT:
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  6518
	 Actually, the following is somewhat wrong - some systems
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  6519
	 support different sizezs, depending on the volume.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  6520
	 We return a somewhat conservative number here."
10
claus
parents: 5
diff changeset
  6521
claus
parents: 5
diff changeset
  6522
%{  /* NOCONTEXT */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6523
 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6524
    /*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6525
     * XXX: newer systems provide a query function for this ... use it
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6526
     */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6527
#   if defined(BSD) || defined(SYSV4) || defined(LONGFILENAMES)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6528
     RETURN ( __MKSMALLINT(255) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6529
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6530
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6531
#   ifdef realIX
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6532
      RETURN ( __MKSMALLINT(127) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6533
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6534
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6535
#   ifdef SYSV
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6536
      RETURN ( __MKSMALLINT(14) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6537
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6538
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6539
#   ifdef MSDOS
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6540
     RETURN ( __MKSMALLINT(9) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6541
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6542
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6543
#   ifdef WIN32
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6544
     /*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6545
      * mhmh - depends on the filesystem type
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6546
      */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6547
     RETURN ( __MKSMALLINT(9) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6548
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6549
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6550
    "unix default"
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6551
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6552
    ^ 14
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6553
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6554
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6555
setLocaleInfo:anInfoDictionary
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6556
    "set the locale information; if set, this oerrides the OS's settings.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6557
     (internal in ST/X only - the OS's settings remain unaffected)
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6558
     See description of fields in #getLocaleInfo.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6559
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6560
     Notice, that (for now), the system does not use this information;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6561
     it should be used by applications as required."
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6562
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6563
    LocaleInfo := anInfoDictionary
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6564
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6565
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6566
     |d|
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6567
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6568
     d := IdentityDictionary new.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6569
     d at:#decimalPoint                 put:'.'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6570
     d at:#thousandsSeparator           put:','         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6571
     d at:#currencySymbol               put:'USD'       .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6572
     d at:#monetaryDecimalPoint         put:'.'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6573
     d at:#monetaryThousandsSeparator   put:'.'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6574
     d at:#fractionalDigits             put:2           .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6575
     d at:#positiveSign                 put:'+'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6576
     d at:#negativeSign                 put:'-'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6577
     d at:#positiveSignPrecedesCurrencySymbol put:true          .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6578
     d at:#negativeSignPrecedesCurrencySymbol put:false         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6579
     OperatingSystem setLocaleInfo:d
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6580
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6581
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6582
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6583
supportsIOInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6584
    "return true, if the OS supports IO availability interrupts 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6585
     (i.e. SIGPOLL/SIGIO).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6586
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6587
     Currently, this mechanism does work for SYSV4 only ..."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6588
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6589
%{  /* NOCONTEXT */
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  6590
#if defined(SYSV4) && defined(USE_SIGIO) && 0
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6591
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6592
# if defined(SIGPOLL) || defined(SIGIO)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6593
#  if (defined(F_GETFL) && defined(F_SETFL) && defined(FASYNC)) || defined(SYSV4)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6594
   /*
765
93bdb4f0e095 no, SIGIO does not work on SGI ...
Claus Gittinger <cg@exept.de>
parents: 764
diff changeset
  6595
    * currently the only system where they work is unixware SYSV4
93bdb4f0e095 no, SIGIO does not work on SGI ...
Claus Gittinger <cg@exept.de>
parents: 764
diff changeset
  6596
    * (not even on SGI ...)
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6597
    */
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6598
#   if !defined(NEXT)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6599
     RETURN (true);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6600
#   endif
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6601
#  endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6602
# endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6603
10
claus
parents: 5
diff changeset
  6604
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6605
%}.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  6606
    ^ false
123
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  6607
!
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  6608
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6609
supportsNonBlockingIO
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6610
    "return true, if the OS supports nonblocking IO."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6611
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6612
%{  /* NOCONTEXT */
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6613
#if defined(F_GETFL) && defined(F_SETFL) && defined(FNDELAY)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6614
       RETURN (true);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6615
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6616
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6617
    ^ false
123
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  6618
!
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  6619
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6620
supportsSelect
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6621
    "return true, if the OS supports selecting on multiple
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6622
     filedescriptors via select."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6623
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6624
%{  /* NOCONTEXT */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6625
#if defined(WIN32)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6626
    RETURN (false);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6627
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6628
#if defined(sco)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6629
    /*
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6630
     * sco has a select, but its broken: always waiting 1 second
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6631
     */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6632
    RETURN(false);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6633
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6634
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6635
.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6636
    ^ true
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6637
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6638
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  6639
!OperatingSystem class methodsFor:'shared memory access'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6640
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6641
shmAttach:id address:addr flags:flags
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6642
    "low level entry to shmat()-system call.
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6643
     Not supported on all operatingSystems"
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6644
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6645
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6646
#ifdef WANT_SHM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6647
    void *address, *shmaddr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6648
    int shmflg, shmid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6649
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6650
    if (__isSmallInteger(addr)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6651
     && __bothSmallInteger(flags, id)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6652
	shmaddr = (void *) __intVal(addr);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6653
	shmflg = __intVal(flags);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6654
	shmid = __intVal(id);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6655
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6656
	address = shmat(shmid, shmaddr, shmflg);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6657
	if (address != (void *)-1) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6658
	    RETURN (__MKEXTERNALBYTES(addr));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6659
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6660
	OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6661
	RETURN (nil);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6662
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6663
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6664
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  6665
    ^ self primitiveFailed
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6666
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6667
    "Modified: 22.4.1996 / 13:15:12 / cg"
370
claus
parents: 369
diff changeset
  6668
!
claus
parents: 369
diff changeset
  6669
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6670
shmDetach:addr
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6671
    "low level entry to shmdt()-system call.
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6672
     Not supported on all operatingSystems"
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6673
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6674
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6675
#ifdef WANT_SHM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6676
    void *shmaddr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6677
    int rslt;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6678
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6679
    if (__isSmallInteger(addr)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6680
	shmaddr = (void *) __intVal(addr);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6681
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6682
	rslt = shmdt(shmaddr);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6683
	if (rslt != -1) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6684
	    RETURN (true);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6685
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6686
	OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6687
	RETURN (false);
370
claus
parents: 369
diff changeset
  6688
    }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6689
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6690
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  6691
    ^ self primitiveFailed
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6692
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6693
    "Modified: 22.4.1996 / 13:15:03 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6694
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6695
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6696
shmGet:key size:size flags:flags
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6697
    "low level entry to shmget()-system call.
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6698
     This is not for public use and not supported with all operatingSystems.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6699
     - use the provided wrapper class SharedExternalBytes instead."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6700
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6701
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6702
#ifdef WANT_SHM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6703
    if (__bothSmallInteger(key, size)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6704
     && __isSmallInteger(flags)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6705
	int rslt;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6706
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6707
	rslt = shmget(__intVal(key), __intVal(size), __intVal(flags));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6708
	if (rslt != -1) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6709
	    RETURN (__MKSMALLINT(rslt));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6710
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6711
	OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6712
	RETURN (nil);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6713
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6714
#endif
370
claus
parents: 369
diff changeset
  6715
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  6716
    ^ self primitiveFailed
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6717
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6718
    "Modified: 22.4.1996 / 13:14:46 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6719
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6720
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  6721
!OperatingSystem class methodsFor:'time and date'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6722
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6723
computeDatePartsOf:osTime for:aBlock
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6724
    "compute year, month and day from the OS time, osTime
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6725
     and evaluate the argument, a 3-arg block with these.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6726
     Conversion is to localtime including any daylight saving adjustments."
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6727
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6728
    |year month day osSeconds|
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6729
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6730
    osSeconds := osTime // 1000.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6731
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6732
    struct tm *tmPtr;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6733
    long t;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6734
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6735
    t = __longIntVal(osSeconds);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6736
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6737
    tmPtr = localtime(&t);
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6738
    year = __MKSMALLINT(tmPtr->tm_year + 1900);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6739
    month = __MKSMALLINT(tmPtr->tm_mon + 1);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6740
    day = __MKSMALLINT(tmPtr->tm_mday);
810
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6741
%}.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6742
    aBlock value:year value:month value:day
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6743
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6744
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6745
     OperatingSystem computeDatePartsOf:0 for:[:y :m :d |
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6746
	y printCR. m printCR. d printCR
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6747
     ]
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6748
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6749
!
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6750
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6751
computeOSTimeFromYear:y month:m day:d hour:h minute:min seconds:s millis:millis
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6752
    "return the OS-dependent time for the given time and day. 
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6753
     The arguments are assumed to be in localtime including
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6754
     any daylight saving adjustings."
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6755
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6756
    |osSeconds|
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6757
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6758
%{
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6759
    struct tm tm;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6760
    long t;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6761
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6762
    if (__bothSmallInteger(y, m) 
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6763
     && __bothSmallInteger(d, h)
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6764
     && __bothSmallInteger(min, s)) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6765
	tm.tm_hour = __intVal(h);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6766
	tm.tm_min = __intVal(min);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6767
	tm.tm_sec = __intVal(s);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6768
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6769
	tm.tm_year = __intVal(y) - 1900;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6770
	tm.tm_mon = __intVal(m) - 1;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6771
	tm.tm_mday = __intVal(d);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6772
	tm.tm_isdst = -1;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6773
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6774
	t = mktime(&tm);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6775
	osSeconds = __MKUINT(t);
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6776
    }
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6777
%}.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6778
    osSeconds notNil ifTrue:[
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6779
	^ osSeconds * 1000 + millis
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6780
    ].    
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6781
    ^ self primitiveFailed
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6782
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6783
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6784
     OperatingSystem computeOSTimeFromYear:1970 month:1 day:1 hour:0 minute:0 seconds:0 millis:0
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6785
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6786
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6787
!
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6788
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6789
computeTimeAndDateFrom:osTime
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6790
    "given an OS-dependent time in osTime, return an Array
1511
823fcfbbb741 weekDay/yearDay start with0 in tm_ struct, but
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
  6791
     containing (full-) year, month, day, hour, minute and seconds,
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6792
     offset to UTC, daylight savings time flag, milliseconds,
1511
823fcfbbb741 weekDay/yearDay start with0 in tm_ struct, but
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
  6793
     dayInYear (1..) and dayInWeek (1..).
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6794
     Conversion is to localtime including any daylight saving adjustments."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6795
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6796
    |low hi year month day hours minutes seconds millis utcOffset 
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6797
     dst yDay wDay osSeconds ret|
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6798
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6799
    millis := osTime \\ 1000.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6800
    osSeconds := osTime // 1000.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6801
%{
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6802
    struct tm *tmPtr;
810
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6803
    struct tm *gmTmPtr;
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6804
    long t;
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6805
1441
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
  6806
#if defined(ultrix) || defined(sunos) /* mhmh - isnt this ifdef BSD ? */
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  6807
#   define TIMEZONE     tmPtr->tm_gmtoff
811
6fbd6e7fdb74 mhmh - more ultrix kludges
Claus Gittinger <cg@exept.de>
parents: 810
diff changeset
  6808
#else
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6809
# ifdef MSDOS_LIKE
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6810
#   define TIMEZONE 0
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6811
# else
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  6812
#   define TIMEZONE     timezone
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6813
# endif
811
6fbd6e7fdb74 mhmh - more ultrix kludges
Claus Gittinger <cg@exept.de>
parents: 810
diff changeset
  6814
#endif
6fbd6e7fdb74 mhmh - more ultrix kludges
Claus Gittinger <cg@exept.de>
parents: 810
diff changeset
  6815
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6816
    t = __longIntVal(osSeconds);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6817
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6818
    tmPtr = localtime(&t);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6819
    hours = __MKSMALLINT(tmPtr->tm_hour);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6820
    minutes = __MKSMALLINT(tmPtr->tm_min);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6821
    seconds = __MKSMALLINT(tmPtr->tm_sec);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6822
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6823
    year = __MKSMALLINT(tmPtr->tm_year + 1900);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6824
    month = __MKSMALLINT(tmPtr->tm_mon + 1);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6825
    day = __MKSMALLINT(tmPtr->tm_mday);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6826
1511
823fcfbbb741 weekDay/yearDay start with0 in tm_ struct, but
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
  6827
    yDay = __MKSMALLINT(tmPtr->tm_yday+1);
1512
d4e6376dce78 weekDay fix (sunday is 0 in tm_wday)
Claus Gittinger <cg@exept.de>
parents: 1511
diff changeset
  6828
    wDay = __MKSMALLINT(tmPtr->tm_wday == 0 ? 7 : tmPtr->tm_wday);
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6829
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6830
    if (tmPtr->tm_isdst == 0) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6831
	dst = false;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6832
	utcOffset = __MKSMALLINT(TIMEZONE);
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6833
    } else {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6834
	dst = true;
800
067094efdaed use HAS_ALTZONE / HAS_DAYLIGHT
Claus Gittinger <cg@exept.de>
parents: 798
diff changeset
  6835
#ifdef HAS_ALTZONE
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6836
	utcOffset = __MKSMALLINT(altzone);
800
067094efdaed use HAS_ALTZONE / HAS_DAYLIGHT
Claus Gittinger <cg@exept.de>
parents: 798
diff changeset
  6837
#else
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6838
	utcOffset = __MKSMALLINT(TIMEZONE) + 3600;
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6839
#endif
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6840
    }
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  6841
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6842
    "I would love to have SELF-like inline objects ..."
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6843
    ret := Array new:11.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6844
    ret at:1 put:year.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6845
    ret at:2 put:month.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6846
    ret at:3 put:day.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6847
    ret at:4 put:hours.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6848
    ret at:5 put:minutes.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6849
    ret at:6 put:seconds.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6850
    ret at:7 put:utcOffset.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6851
    ret at:8 put:dst.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6852
    ret at:9 put:millis.
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6853
    ret at:10 put:yDay.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6854
    ret at:11 put:wDay.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6855
    ^ ret
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6856
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6857
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6858
     OperatingSystem computeTimeAndDateFrom:0
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6859
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6860
!
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6861
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6862
computeTimePartsOf:osTime for:aBlock
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6863
    "compute hours, minutes, seconds and milliseconds from the osTime 
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6864
     and evaluate the argument, a 4-arg block with these.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6865
     Conversion is to localtime including any daylight saving adjustments."
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6866
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6867
    |hours minutes seconds millis osSeconds|
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6868
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6869
    osSeconds := osTime // 1000.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6870
    millis := osTime \\ 1000.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6871
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6872
    struct tm *tmPtr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6873
    long t;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6874
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6875
    t = __longIntVal(osSeconds);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6876
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6877
    tmPtr = localtime(&t);
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6878
    hours = __MKSMALLINT(tmPtr->tm_hour);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6879
    minutes = __MKSMALLINT(tmPtr->tm_min);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6880
    seconds = __MKSMALLINT(tmPtr->tm_sec);
810
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6881
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6882
    aBlock value:hours value:minutes value:seconds value:millis
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6883
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6884
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6885
     OperatingSystem computeTimePartsOf:100 for:[:h :m :s :milli |
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6886
	h printCR. m printCR. s printCR. millis printCR
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6887
     ]
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6888
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6889
!
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6890
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6891
computeUTCTimeAndDateFrom:osTime
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6892
    "given an OS-dependent time in osTime, return an Array
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6893
     containing year, month, day, hour, minute and seconds,
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6894
     offset to UTC, daylight savings time flag, milliseconds,
1511
823fcfbbb741 weekDay/yearDay start with0 in tm_ struct, but
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
  6895
     dayInYear (1..) and dayInWeek (1..).
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6896
     Conversion is to UTC."
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6897
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6898
    |low hi year month day hours minutes seconds millis utcOffset 
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6899
     dst yDay wDay osSeconds ret|
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6900
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6901
    millis := osTime \\ 1000.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6902
    osSeconds := osTime // 1000.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6903
%{
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6904
    struct tm *tmPtr;
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6905
    struct tm *gmTmPtr;
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6906
    long t;
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6907
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6908
#if defined(ultrix) || defined(sunos) /* mhmh - isnt this ifdef BSD ? */
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6909
#   define TIMEZONE     tmPtr->tm_gmtoff
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6910
#else
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6911
# ifdef MSDOS_LIKE
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6912
#   define TIMEZONE 0
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6913
# else
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6914
#   define TIMEZONE     timezone
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6915
# endif
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6916
#endif
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6917
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6918
    t = __longIntVal(osSeconds);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6919
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6920
    tmPtr = gmtime(&t);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6921
    hours = __MKSMALLINT(tmPtr->tm_hour);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6922
    minutes = __MKSMALLINT(tmPtr->tm_min);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6923
    seconds = __MKSMALLINT(tmPtr->tm_sec);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6924
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6925
    year = __MKSMALLINT(tmPtr->tm_year + 1900);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6926
    month = __MKSMALLINT(tmPtr->tm_mon + 1);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6927
    day = __MKSMALLINT(tmPtr->tm_mday);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6928
1511
823fcfbbb741 weekDay/yearDay start with0 in tm_ struct, but
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
  6929
    yDay = __MKSMALLINT(tmPtr->tm_yday + 1);
1512
d4e6376dce78 weekDay fix (sunday is 0 in tm_wday)
Claus Gittinger <cg@exept.de>
parents: 1511
diff changeset
  6930
    wDay = __MKSMALLINT(tmPtr->tm_wday == 0 ? 7 : tmPtr->tm_wday);
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6931
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6932
    if (tmPtr->tm_isdst == 0) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6933
	dst = false;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6934
	utcOffset = __MKSMALLINT(TIMEZONE);
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6935
    } else {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6936
	dst = true;
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6937
#ifdef HAS_ALTZONE
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6938
	utcOffset = __MKSMALLINT(altzone);
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6939
#else
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6940
	utcOffset = __MKSMALLINT(TIMEZONE) + 3600;
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6941
#endif
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6942
    }
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6943
%}.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6944
    "I would love to have SELF-like inline objects ..."
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6945
    ret := Array new:11.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6946
    ret at:1 put:year.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6947
    ret at:2 put:month.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6948
    ret at:3 put:day.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6949
    ret at:4 put:hours.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6950
    ret at:5 put:minutes.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6951
    ret at:6 put:seconds.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6952
    ret at:7 put:utcOffset.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6953
    ret at:8 put:dst.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6954
    ret at:9 put:millis.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6955
    ret at:10 put:yDay.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6956
    ret at:11 put:wDay.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6957
    ^ ret
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6958
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6959
    "
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6960
     OperatingSystem computeUTCTimeAndDateFrom:0
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6961
    "
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6962
!
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6963
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6964
computeUTCTimePartsOf:osTime for:aBlock
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6965
    "compute hours, minutes, seconds and milliseconds from the osTime 
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6966
     and evaluate the argument, a 4-arg block with these.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6967
     Conversion is to UTC."
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6968
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6969
    |hours minutes seconds millis osSeconds|
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6970
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6971
    osSeconds := osTime // 1000.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6972
    millis := osTime \\ 1000.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6973
%{
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6974
    struct tm *tmPtr;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6975
    long t;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6976
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6977
    t = __longIntVal(osSeconds);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6978
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6979
    tmPtr = gmtime(&t);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6980
    hours = __MKSMALLINT(tmPtr->tm_hour);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6981
    minutes = __MKSMALLINT(tmPtr->tm_min);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6982
    seconds = __MKSMALLINT(tmPtr->tm_sec);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6983
%}.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6984
    aBlock value:hours value:minutes value:seconds value:millis
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6985
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6986
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6987
     OperatingSystem computeUTCTimePartsOf:100 for:[:h :m :s :milli |
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6988
	h printCR. m printCR. s printCR. milli printCR
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6989
     ]
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6990
    "
275
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  6991
!
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  6992
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6993
getMillisecondTime
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  6994
    "This returns the millisecond timers value. 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  6995
     The range is limited to 0..1fffffff (i.e. the SmallInteger range) to avoid
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  6996
     LargeInteger arithmetic when doing timeouts and delays.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  6997
     Since this value is wrapping around in regular intervals, this can only be used for 
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  6998
     short relative time deltas.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  6999
     Use the millisecondTimeXXX:-methods to compare and add time deltas - these know about the wrap.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7000
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7001
     BAD DESIGN:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7002
	This should be changed to return some instance of RelativeTime,
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7003
	and these computations moved there.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7004
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7005
     Dont use this method in application code since it is an internal (private)
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7006
     interface. For compatibility with ST-80, use Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7007
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7008
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7009
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7010
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7011
    long t;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7012
#if !defined(HAS_GETTIMEOFDAY) && defined(SYSV) && defined(HZ)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7013
    /* 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7014
     * sys5 time
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7015
     */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7016
    long ticks;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7017
    struct tms tb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7018
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7019
    ticks = times(&tb);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7020
    t = (ticks * 1000) / HZ;
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7021
#else
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7022
# ifdef WIN32
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7023
    t = GetTickCount();
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7024
# else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7025
#  ifdef MSDOS_LIKE
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7026
    struct _timeb timebuffer;
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7027
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7028
    _ftime(&timebuffer);
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7029
    t = (timebuffer.time * 1000) + timebuffer.millitm;
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7030
#  else /* assume HAS_GETTIMEOFDAY */
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7031
    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7032
     * bsd time
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7033
     */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7034
    struct timeval tb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7035
    struct timezone tzb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7036
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7037
    gettimeofday(&tb, &tzb);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7038
    t = tb.tv_sec*1000 + tb.tv_usec/1000;
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7039
#  endif
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7040
# endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7041
#endif
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7042
    RETURN ( __MKSMALLINT(t & 0x1FFFFFFF) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7043
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7044
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7045
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7046
getOSTime
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7047
    "This returns the millisecond OS time.
2000
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7048
     The base of the returned value is not consistent across
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7049
     different OS's - some return the number of millis since jan, 1st 1970;
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7050
     others since 1900. The Time classes are prepared for this, and 
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7051
     convert as appropriate.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7052
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7053
     Dont use this method in application code since it is an internal (private)
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7054
     interface. For compatibility with ST-80, use Time>>millisecondClockValue.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7055
     or use instances of Time, Date or AbsoluteTime to work with.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7056
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7057
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7058
    |seconds millis|
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7059
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7060
%{
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7061
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7062
    long t;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7063
#if !defined(HAS_GETTIMEOFDAY) && defined(SYSV) && defined(HZ)
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7064
    /* 
2000
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7065
     * sys5 time; we have to fake the information
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7066
     * the returned value is inexact.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7067
     */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7068
    int now;
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7069
    long ticks;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7070
    struct tms tb;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7071
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7072
    now = time(0);   /* seconds since 1970 ... */
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7073
    seconds = __MKUINT(now);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7074
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7075
    ticks = times(&tb);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7076
    t = (ticks * 1000) / HZ;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7077
    t = t % 1000;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7078
    millis = __MKSMALLINT(t);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7079
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7080
#else
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7081
# ifdef MSDOS_LIKE
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7082
    struct _timeb timebuffer;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7083
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7084
    _ftime(&timebuffer);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7085
    seconds = __MKUINT(timebuffer.time);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7086
    millis = __MKSMALLINT(timebuffer.millitm);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7087
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7088
# else /* assume HAS_GETTIMEOFDAY */
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7089
    /*
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7090
     * bsd time
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7091
     */
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7092
    struct timeval tb;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7093
    struct timezone tzb;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7094
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7095
    gettimeofday(&tb, &tzb);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7096
    seconds = __MKUINT(tb.tv_sec);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7097
    millis = __MKSMALLINT(tb.tv_usec / 1000);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7098
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7099
# endif
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7100
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7101
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7102
    ^ (seconds * 1000) + millis
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7103
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7104
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  7105
     OperatingSystem getOSTime printCR.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7106
     Delay waitForSeconds:0.2.
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  7107
     OperatingSystem getOSTime printCR.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7108
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7109
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7110
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7111
maximumMillisecondTimeDelta
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7112
    "this returns the maximum delta supported by millisecondCounter
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7113
     based methods. The returned value is half the value at which the
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7114
     timer wraps."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7115
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7116
%{  /* NOCONTEXT */
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7117
    RETURN ( __MKSMALLINT(0x0FFFFFFF) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7118
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7119
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7120
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7121
millisecondDelay:millis
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7122
    "delay execution for millis milliseconds or until the next event
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7123
     arrives.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7124
     All lower priority threads will also sleep for the duration, 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7125
     interrupts (and therefore, higher prio processes) are
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7126
     still handled. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7127
     Better use a Delay, to only delay the calling thread.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7128
     (however, a delay cannot be used in the event handler or scheduler)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7129
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7130
    |now then delta|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7131
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7132
%{  /* NOCONTEXT */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7133
#ifdef WIN32
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7134
    int t = __intVal(millis);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7135
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7136
    if (t) {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  7137
	Sleep(t);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7138
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7139
    RETURN (self);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7140
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7141
%}.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7142
 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7143
    now := OperatingSystem getMillisecondTime.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7144
    then := OperatingSystem millisecondTimeAdd:now and:millis.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7145
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7146
    [OperatingSystem millisecondTime:then isAfter:now] whileTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7147
	delta := OperatingSystem millisecondTimeDeltaBetween:then and:now.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7148
	self selectOnAnyReadable:nil writable:nil exception:nil withTimeOut:delta.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7149
	now := OperatingSystem getMillisecondTime.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7150
    ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7151
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7152
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7153
     OperatingSystem millisecondDelay:2000
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7154
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7155
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7156
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7157
millisecondTime:msTime1 isAfter:msTime2
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7158
    "return true if msTime1 is after msTime2, false if not.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7159
     The two arguments are supposed to be millisecond times 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7160
     (such as returned getMillisecondTime) which wrap at 16r1FFFFFFF.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7161
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7162
     This should really be moved to some RelativeTime class."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7163
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7164
    (msTime1 > msTime2) ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7165
	((msTime1 - msTime2) >= 16r10000000) ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7166
	    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7167
	].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7168
	^ true
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7169
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7170
    ((msTime2 - msTime1) > 16r10000000) ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7171
	^ true
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7172
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7173
    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7174
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7175
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7176
millisecondTimeAdd:msTime1 and:msTime2
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7177
    "Add two millisecond times (such as returned getMillisecondTime).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7178
     The returned value is msTime1 + msTime2 where a wrap occurs at:16r1FFFFFFF.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7179
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7180
     This should really be moved to some RelativeTime class."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7181
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7182
    |sum|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7183
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7184
    sum := msTime1 + msTime2.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7185
    (sum > 16r1FFFFFFF) ifTrue:[^ sum - 16r20000000].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7186
    (sum < 0) ifTrue:[^ sum + 16r20000000].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7187
    ^ sum
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7188
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7189
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7190
millisecondTimeDeltaBetween:msTime1 and:msTime2
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7191
    "subtract two millisecond times (such as returned getMillisecondTime)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7192
     and return the difference. Since milli-times wrap (at 16r01FFFFFFF), 
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7193
     some special handling is built-in here.
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7194
     The returned value is msTime1 - msTime2. The returned value is invalid
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7195
     if the delta is >= 0x10000000.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  7196
810
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  7197
     This should really be moved to some RelativeTime class;
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  7198
     better yet: create a subclass of Integer named LimitedRangeInteger."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7199
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7200
    (msTime1 > msTime2) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7201
	^ msTime1 - msTime2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7202
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7203
    ^ msTime1 + 16r10000000 - msTime2
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7204
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7205
    "
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7206
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:1   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7207
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:(16 / 3)  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7208
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:1000   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7209
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7210
     OperatingSystem millisecondTimeDeltaBetween:0 and:16r0FFFFFFF  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7211
     OperatingSystem millisecondTimeDeltaBetween:(13/3) and:16r0FFFFFFF     
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7212
     OperatingSystem millisecondTimeDeltaBetween:999 and:16r0FFFFFFF       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7213
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7214
     OperatingSystem millisecondTime:0 isAfter:16r0FFFFFFF    
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7215
     OperatingSystem millisecondTime:(13/3) isAfter:16r0FFFFFFF   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7216
     OperatingSystem millisecondTime:999 isAfter:16r0FFFFFFF       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7217
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7218
     OperatingSystem millisecondTime:0 isAfter:0          
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7219
     OperatingSystem millisecondTime:(13/3) isAfter:0  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7220
     OperatingSystem millisecondTime:999 isAfter:0       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7221
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7222
     OperatingSystem millisecondTime:1 isAfter:0        
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7223
     OperatingSystem millisecondTime:(13/3) isAfter:2
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7224
     OperatingSystem millisecondTime:999 isAfter:900       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7225
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7226
     |t1 t2|
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7227
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7228
     t1 := Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7229
     (Delay forMilliseconds:1) wait.   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7230
     t2 := Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7231
     OperatingSystem millisecondTimeDeltaBetween:t2 and:t1 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7232
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7233
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7234
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7235
sleep:numberOfSeconds
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7236
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7237
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7238
    "cease ANY action for some time. This suspends the whole smalltalk
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7239
     (unix-) process for some time.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7240
     Not really useful since not even low-prio processes and interrupt
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7241
     handling will run during the sleep.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7242
     Use either OperatingSystem>>millisecondDelay: (which makes all
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7243
     threads sleep, but handles interrupts) or use a Delay (which makes
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7244
     only the calling thread sleep)."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7245
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7246
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7247
252
  7248
    if (__isSmallInteger(numberOfSeconds)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7249
	sleep(__intVal(numberOfSeconds));
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7250
	RETURN ( self );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7251
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7252
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7253
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7254
     argument not integer
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7255
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7256
    ^ self primitiveFailed
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7257
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7258
    "
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7259
     OperatingSystem sleep:2
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7260
    "
10
claus
parents: 5
diff changeset
  7261
! !
claus
parents: 5
diff changeset
  7262
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  7263
!OperatingSystem class methodsFor:'users & groups'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7264
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7265
getEffectiveGroupID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7266
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7267
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7268
    "return the current users (thats you) effective numeric group id.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7269
     This is only different from getGroupID, if you have ST/X running
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7270
     as a setuid program (of which you should think about twice)."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7271
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7272
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7273
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7274
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7275
    int uid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7276
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7277
    uid = getegid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7278
    RETURN ( __MKSMALLINT(uid) );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7279
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7280
    /* --- return same as getGroupID --- */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7281
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7282
    ^ self getGroupID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7283
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7284
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7285
     OperatingSystem getEffectiveGroupID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7286
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7287
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7288
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7289
getEffectiveUserID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7290
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7291
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7292
    "return the current users (thats you) effective numeric user id.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7293
     This is only different from getUserID, if you have ST/X running
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7294
     as a setuid program (of which you should think about twice)."
10
claus
parents: 5
diff changeset
  7295
claus
parents: 5
diff changeset
  7296
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  7297
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7298
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7299
    int uid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7300
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7301
    uid = geteuid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7302
    RETURN ( __MKSMALLINT(uid) );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7303
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7304
    /* --- return same as getUserID --- */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7305
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7306
    ^ self getUserID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7307
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7308
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7309
     OperatingSystem getEffectiveUserID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7310
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7311
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7312
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7313
getFullUserNameFromID:userID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7314
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7315
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7316
    "return a string with the users full name - if available.
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7317
     If not, return the login name as a fallBack."
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7318
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7319
    |info gecos|
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7320
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7321
    info := self userInfoOf:userID.
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7322
    (info notNil
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7323
    and:[info includesKey:#gecos]) ifTrue:[
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7324
	gecos := info at:#gecos.
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7325
	(gecos includes:$,) ifTrue:[
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7326
	    ^ gecos copyTo:(gecos indexOf:$,) - 1
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7327
	].
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7328
	^ gecos
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7329
    ].
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7330
    ^ self getUserNameFromID:userID
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7331
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7332
    "
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7333
     OperatingSystem getFullUserNameFromID:0 
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7334
     OperatingSystem getFullUserNameFromID:(OperatingSystem getUserID)  
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7335
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7336
     OperatingSystem getUserNameFromID:(OperatingSystem getUserID)  
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7337
    "
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7338
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7339
    "Modified: 15.7.1996 / 12:44:21 / cg"
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7340
!
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7341
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7342
getGroupID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7343
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7344
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7345
    "return the current users (thats you) numeric group id"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7346
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7347
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7348
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7349
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7350
    int uid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7351
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7352
    uid = getgid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7353
    RETURN ( __MKSMALLINT(uid) );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7354
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7355
# ifdef SYSTEM_HAS_GROUPS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7356
    /* ... */
10
claus
parents: 5
diff changeset
  7357
# endif
claus
parents: 5
diff changeset
  7358
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7359
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7360
    ^ 1 "just a dummy for systems which do not have userIDs"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7361
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7362
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7363
     OperatingSystem getGroupID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7364
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7365
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7366
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7367
getGroupNameFromID:aNumber
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7368
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7369
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7370
    "return the group-name-string for a given numeric group-id"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7371
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7372
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7373
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7374
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7375
    struct group *g;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7376
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7377
    if (__isSmallInteger(aNumber)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7378
	g = getgrgid(__intVal(aNumber));
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7379
	if (g) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7380
	    RETURN ( __MKSTRING(g->gr_name) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7381
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7382
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7383
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7384
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7385
    ^ '???'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7386
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7387
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7388
     OperatingSystem getGroupNameFromID:0
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7389
     OperatingSystem getGroupNameFromID:10
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7390
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7391
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7392
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7393
getHomeDirectory
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7394
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7395
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7396
    "return the name of the users home directory"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7397
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7398
    ^ OperatingSystem getEnvironment:'HOME'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7399
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7400
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7401
     OperatingSystem getHomeDirectory
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7402
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7403
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7404
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7405
getLoginName
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7406
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7407
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7408
    "return a string with the users login name"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7409
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7410
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7411
    static char cachedName[64];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7412
    static firstCall = 1;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7413
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7414
    char *name = (char *)0;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7415
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7416
    if (firstCall) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7417
	name = (char *)getlogin();
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7418
	if (! name || (name[0] == 0)) {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7419
	    name = (char *)getenv("LOGNAME");
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7420
	}
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7421
	if (name && (strlen(name) < sizeof(cachedName))) {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7422
	    strcpy(cachedName, name);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7423
	    firstCall = 0;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7424
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7425
    } else {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7426
	name = cachedName;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7427
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7428
#else
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7429
# ifdef WIN32
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7430
    if (firstCall) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7431
	int nameSize = sizeof(cachedName);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7432
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7433
	if (GetUserName(cachedName, &nameSize) == TRUE) {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7434
	    name = cachedName;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7435
	    firstCall = 0;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7436
	}
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7437
    } else {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7438
	name = cachedName;
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7439
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7440
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7441
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7442
    if (! name || (name[0] == 0) ) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7443
	name = (char *)getenv("LOGNAME");
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7444
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7445
    if (! name || (name[0] == 0) ) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7446
	name = "you";
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7447
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7448
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7449
    RETURN ( __MKSTRING(name) );
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7450
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7451
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7452
     OperatingSystem getLoginName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7453
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7454
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7455
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7456
getUserID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7457
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7458
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7459
    "return the current users (thats you) numeric user id"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7460
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7461
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7462
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7463
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7464
    int uid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7465
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7466
    uid = getuid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7467
    RETURN ( __MKSMALLINT(uid) );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7468
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7469
# ifdef SYSTEM_HAS_USERS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7470
    /* ... */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7471
# endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7472
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7473
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7474
    ^ 1 "just a dummy for systems which do not have userIDs"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7475
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7476
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7477
     OperatingSystem getUserID
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7478
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7479
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7480
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7481
getUserNameFromID:aNumber
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7482
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7483
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7484
    "return the user-name-string for a given numeric user-id.
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7485
     This is the login name, not the fullName."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7486
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7487
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7488
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7489
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7490
    struct passwd *p;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7491
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7492
    if (__isSmallInteger(aNumber)) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7493
	p = getpwuid(__intVal(aNumber));
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7494
	if (p) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7495
	    RETURN ( __MKSTRING(p->pw_name) );
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7496
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7497
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7498
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7499
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7500
    ^ '? (' , aNumber printString , ')'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7501
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7502
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7503
     OperatingSystem getUserNameFromID:0
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7504
     OperatingSystem getUserNameFromID:100
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7505
     OperatingSystem getUserNameFromID:9991 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7506
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7507
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7508
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7509
userInfoOf:aNameOrID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7510
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7511
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7512
    "return a dictionary filled with userinfo. The argument can be either
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7513
     a string with the users name or its numeric id.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7514
     Notice, that not all systems provide (all of) this info;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7515
     DOS systems return nothing; 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7516
     non-SYSV4 systems have no age/comment.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7517
     Portable applications may want to check the systemType and NOT depend
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7518
     on all keys to be present in the returned dictionary.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7519
     Another notice: on some systems (SYSV4), the gecos field includes multiple
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7520
     entries (i.e. not just the name), separated by commas. You may want to
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7521
     extract any substring, up to the first comma to get the real life name."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7522
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7523
    |info name passw uid gid age comment
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7524
     gecos dir shell|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7525
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7526
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7527
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7528
    struct passwd *buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7529
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7530
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7531
    if (__isString(aNameOrID)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7532
	buf = getpwnam(__stringVal(aNameOrID));
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7533
    } else if (__isSmallInteger(aNameOrID)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7534
	buf = getpwuid(__intVal(aNameOrID));
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7535
    } else {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7536
	buf = (struct passwd *)0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7537
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7538
    if (buf) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7539
	name = __MKSTRING(buf->pw_name);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7540
	passw = __MKSTRING(buf->pw_passwd);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7541
# ifdef SYSV4
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7542
	age = __MKSTRING(buf->pw_age);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7543
	comment = __MKSTRING(buf->pw_comment);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7544
# endif
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7545
	dir = __MKSTRING(buf->pw_dir);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7546
	gecos = __MKSTRING(buf->pw_gecos);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7547
	shell = __MKSTRING(buf->pw_shell);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7548
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7549
	uid = __MKSMALLINT(buf->pw_uid);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7550
	gid = __MKSMALLINT(buf->pw_gid);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7551
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7552
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7553
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7554
    info := IdentityDictionary new.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7555
    name notNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7556
	info at:#name put:name.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7557
    ] ifFalse:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7558
	info at:#name put:'unknown'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7559
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7560
    passw notNil ifTrue:[info at:#passwd put:passw].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7561
    age notNil ifTrue:[info at:#age put:age].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7562
    comment notNil ifTrue:[info at:#comment put:comment].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7563
    gecos notNil ifTrue:[info at:#gecos put:gecos].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7564
    shell notNil ifTrue:[info at:#shell put:shell].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7565
    dir notNil ifTrue:[info at:#dir put:dir].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7566
    uid notNil ifTrue:[info at:#uid put:uid].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7567
    gid  notNil ifTrue:[info at:#gid put:gid].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7568
    ^ info
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7569
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7570
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7571
     OperatingSystem userInfoOf:'root'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7572
     OperatingSystem userInfoOf:1
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7573
     OperatingSystem userInfoOf:'claus' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7574
     OperatingSystem userInfoOf:'fooBar' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7575
     OperatingSystem userInfoOf:(OperatingSystem getUserID)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7576
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7577
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7578
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  7579
!OperatingSystem class methodsFor:'waiting for events'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7580
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7581
blockingChildProcessWait
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7582
     "return true, if childProcessWait: blocks, if no childs are ready"
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7583
%{ /*NOCONTEXT*/
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7584
#if defined(HAS_WAITPID) || defined(HAS_WAIT3)
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7585
    RETURN(false);
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7586
#else
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7587
    RETURN(true);
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7588
#endif
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7589
%}
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7590
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7591
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7592
childProcessWait:blocking
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7593
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7594
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7595
    "get status changes from child processes.
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7596
     Return an OSProcessStatus or nil, if no process has terminated.
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7597
     If blocking is true, we wait until a process changed state, 
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7598
     otherwise we return immediately."
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7599
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7600
    |pid status code core|
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7601
%{
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7602
#ifdef UNIX_LIKE
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7603
    int p;
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7604
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7605
# if defined(HAS_WAITPID)
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7606
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7607
    int s;
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7608
#   define __WAIT     waitpid(-1, &s, blocking == true ? WUNTRACED : WNOHANG|WUNTRACED)
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7609
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7610
# else
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7611
#  if defined(HAS_WAIT3)
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7612
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7613
    union wait s;
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7614
#   define __WAIT      wait3(&s, blocking == true ? WUNTRACED : WNOHANG|WUNTRACED, 0)
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7615
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7616
#  else /* neithe waitpid, nor wait3; use wait, which is blocking */
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7617
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7618
    int s;
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7619
#   define __WAIT      wait(&s)
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7620
#   define __BLOCKING_WAIT__ 1
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7621
1654
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7622
    if (blocking != true) {
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7623
	/*
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7624
	 * We do not support nonBlocking waits, so signal an error
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7625
	 * Sorry about the goto, but with all these ifdefs ...
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7626
	 */
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7627
	goto done;
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7628
    }
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7629
#  endif /*!HAS_WAIT3*/
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7630
# endif  /*!HAS_WAITPID*/
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7631
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7632
# if defined(HAS_WAIT3) || defined(HAS_WAITPID)
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7633
#   if !defined(WIFEXITED)
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7634
#    define WIFEXITED(stat)      (((int)((stat)&0377))==0)
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7635
#    define WIFSIGNALED(stat)    (((int)((stat)&0377))>0&&((int)(((stat)>>8)&0377))==0)
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7636
#    define WIFSTOPPED(stat)     (((int)((stat)&0377))==0177&&((int)(((stat)>>8)&0377))!=0)
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7637
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7638
#    define WEXITSTATUS(stat)    ((int)(((stat)>>8)&0377))
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7639
#    define WTERMSIG(stat)       (((int)((stat)&0377))&0177)
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7640
#    define WSTOPSIG(stat)       ((int)(((stat)>>8)&0377))
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7641
#   endif /*!WIFEXITED*/
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7642
#   if !defined(WCOREDUMP)
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7643
#    define WCOREDUMP(stat)      ((int)(((stat)>>8)&0200))
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7644
#   endif /*!WCOREDUMP*/
1654
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7645
# endif
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7646
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7647
# if __BLOCKING_WAIT__
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  7648
    __BEGIN_INTERRUPTABLE__
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7649
# endif
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  7650
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7651
    do {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7652
	p = __WAIT;
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7653
    } while (p == -1 && errno == EINTR);
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7654
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7655
# if __BLOCKING_WAIT__
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  7656
    __END_INTERRUPTABLE__
1654
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7657
#   undef __BLOCKING_WAIT__
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7658
# endif
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7659
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7660
# undef __WAIT
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7661
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7662
    if (p == 0)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7663
	RETURN(nil)
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7664
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7665
    if (p == -1) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7666
	if (errno == ECHILD)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7667
	    RETURN(nil);
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7668
    } else {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7669
	pid = __MKSMALLINT(p);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7670
	if (WIFEXITED(s)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7671
	    status = @symbol(exit);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7672
	    code = __MKSMALLINT(WEXITSTATUS(s));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7673
	    core = WCOREDUMP(s) ? true : false;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7674
	} else if (WIFSIGNALED(s)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7675
	    status = @symbol(signal);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7676
	    code = __MKSMALLINT(WTERMSIG(s));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7677
	} else if (WIFSTOPPED(s)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7678
	    status = @symbol(stop);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7679
	    code = __MKSMALLINT(WSTOPSIG(s));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7680
	}
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7681
# if defined(WIFCONTINUED)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7682
	else if (WIFCONTINUED(s)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7683
	    status = @symbol(continue);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7684
	} 
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7685
# endif
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7686
    }
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7687
done: ;
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7688
#endif /* UNIX_LIKE */
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7689
%}.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7690
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7691
    pid isNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7692
	^ self primitiveFailed
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7693
    ].
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7694
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7695
    ^ OSProcessStatus pid:pid status:status code:code core:core
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7696
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7697
    "
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7698
     OperatingSystem childProcessWait:false
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7699
    "
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7700
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7701
    "Created: 5.1.1996 / 16:39:14 / stefan"
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7702
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7703
10
claus
parents: 5
diff changeset
  7704
readCheck:fd
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7705
    "return true, if data is available on a filedescriptor (i.e. read
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7706
     is possible without blocking)"
10
claus
parents: 5
diff changeset
  7707
claus
parents: 5
diff changeset
  7708
    (self selectOnAnyReadable:(Array with:fd)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7709
		     writable:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7710
		    exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7711
		  withTimeOut:0) == fd
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7712
	ifTrue:[^ true].
10
claus
parents: 5
diff changeset
  7713
    ^ false
claus
parents: 5
diff changeset
  7714
!
claus
parents: 5
diff changeset
  7715
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7716
selectOn:fd1 and:fd2 withTimeOut:millis
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7717
    "wait for any fd to become ready; timeout after t milliseconds.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7718
     A zero timeout-time will immediately return (i.e. poll).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7719
     Return fd if i/o ok, nil if timed-out or interrupted.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7720
     Obsolete:
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7721
	This is a leftover method and will vanish."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7722
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7723
    ^ self selectOnAnyReadable:(Array with:fd1 with:fd2)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7724
		      writable:(Array with:fd1 with:fd2)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7725
		     exception:nil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7726
		   withTimeOut:millis
10
claus
parents: 5
diff changeset
  7727
!
claus
parents: 5
diff changeset
  7728
claus
parents: 5
diff changeset
  7729
selectOn:fd withTimeOut:millis
claus
parents: 5
diff changeset
  7730
    "wait for aFileDesriptor to become ready; timeout after t milliseconds.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7731
     Return true, if i/o ok, false if timed-out or interrupted.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7732
     With 0 as timeout argument, this can be used to check for availability
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7733
     of read-data.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7734
     Experimental."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7735
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7736
    ^ self selectOnAnyReadable:(Array with:fd)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7737
		      writable:(Array with:fd)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7738
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7739
		   withTimeOut:millis
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7740
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7741
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7742
selectOnAny:fdArray withTimeOut:millis
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7743
    "wait for any fd in fdArray (an Array of integers) to become ready;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7744
     timeout after t milliseconds. An empty set will always wait.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7745
     Return first ready fd if i/o ok, nil if timed-out or interrupted.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7746
     Experimental."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7747
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7748
    ^ self selectOnAnyReadable:fdArray
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7749
		      writable:fdArray
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7750
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7751
		   withTimeOut:millis
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7752
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7753
10
claus
parents: 5
diff changeset
  7754
selectOnAnyReadable:fdArray withTimeOut:millis
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7755
    "wait for any fd in fdArray (an Array of integers) to become ready for 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7756
     reading. Timeout after t milliseconds. An empty set will always wait.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7757
     A zero timeout-time will immediately return (i.e. poll).
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7758
     Return first ready fd if i/o ok, nil if timed-out or interrupted.
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7759
     Experimental."
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7760
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7761
    ^ self selectOnAnyReadable:fdArray 
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7762
		      writable:nil 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7763
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7764
		   withTimeOut:millis
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7765
!
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7766
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7767
selectOnAnyReadable:readFdArray writable:writeFdArray exception:exceptFdArray withTimeOut:millis
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7768
    "wait for any fd in readFdArray (an Array of integers) to become ready for 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7769
     reading, writeFdArray to become ready for writing, or exceptFdArray to 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7770
     arrive exceptional data (i.e. out-of-band data).
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7771
     Timeout after t milliseconds or, if the timeout time is 0, immediately..
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7772
     Empty fd-sets will always wait. Zero time can be used to poll file-
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7773
     descriptors (i.e. to check if I/O possible without blocking).
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7774
     Return first ready fd if I/O ok, nil if timed-out or interrupted."
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7775
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7776
%{
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7777
#ifdef MSDOS_LIKE
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7778
    /*
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7779
     * support a delay-wait only
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7780
     * (i.e. fail if any filedescriptor is selected upon)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7781
     */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7782
    int count;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7783
    int i;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7784
    int t;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7785
    OBJ fd;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7786
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7787
    if (! __isSmallInteger(millis)) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7788
	goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7789
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7790
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7791
    if (readFdArray != nil) {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  7792
	if (! __isArray(readFdArray)) {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  7793
	    goto fail;  
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7794
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7795
	count = __arraySize(readFdArray);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7796
	for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7797
	    fd = __ArrayInstPtr(readFdArray)->a_element[i];
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7798
	    if (fd != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7799
		goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7800
	    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7801
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7802
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7803
    if (writeFdArray != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7804
	if (! __isArray(writeFdArray)) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7805
	    goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7806
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7807
	count = __arraySize(writeFdArray);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7808
	for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7809
	    fd = __ArrayInstPtr(writeFdArray)->a_element[i];
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7810
	    if (fd != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7811
		goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7812
	    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7813
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7814
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7815
    if (exceptFdArray != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7816
	if (! __isArray(exceptFdArray)) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7817
	    goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7818
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7819
	count = __arraySize(exceptFdArray);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7820
	for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7821
	    fd = __ArrayInstPtr(exceptFdArray)->a_element[i];
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7822
	    if (fd != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7823
		goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7824
	    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7825
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7826
    }
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7827
    t = __intVal(millis);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7828
    if (t != 0) {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  7829
	/*
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  7830
	 * delay only 
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  7831
	 */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7832
	Sleep(t);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7833
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7834
    RETURN (nil);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7835
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7836
#else /* not MSDOS_LIKE */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7837
    fd_set rset, wset, eset;
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7838
    struct timeval wt, et;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7839
    int t, f, maxF, i, lX, bX;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7840
    OBJ fd, retFd;
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7841
    int ret;
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7842
    int count;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7843
252
  7844
    if (__isSmallInteger(millis)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7845
	FD_ZERO(&rset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7846
	FD_ZERO(&wset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7847
	FD_ZERO(&eset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7848
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7849
	maxF = -1;
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7850
	if (readFdArray != nil) {
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7851
	    if (! __isArray(readFdArray)) {
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7852
		goto fail;    
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7853
	    }
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7854
	    count = __arraySize(readFdArray);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7855
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7856
	    for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7857
		fd = __ArrayInstPtr(readFdArray)->a_element[i];
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7858
		if (fd != nil) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7859
		    f = __intVal(fd);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7860
		    if ((f >= 0) && (f < FD_SETSIZE)) {
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7861
			FD_SET(f, &rset);
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7862
			if (f > maxF) maxF = f;
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7863
		    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7864
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7865
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7866
	}
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7867
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7868
	if (writeFdArray != nil) {
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7869
	    if (! __isArray(writeFdArray)) {
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7870
		goto fail;    
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7871
	    }
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7872
	    count = __arraySize(writeFdArray);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7873
	    for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7874
		fd = __ArrayInstPtr(writeFdArray)->a_element[i];
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7875
		if (fd != nil) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7876
		    f = __intVal(fd);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7877
		    if ((f >= 0) && (f < FD_SETSIZE)) {
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7878
			FD_SET(f, &wset);       
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7879
			if (f > maxF) maxF = f;
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7880
		    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7881
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7882
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7883
	}
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7884
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7885
	if (exceptFdArray != nil) {
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7886
	    if (! __isArray(exceptFdArray)) {
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7887
		goto fail;    
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7888
	    }
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7889
	    count = __arraySize(exceptFdArray);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7890
	    for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7891
		fd = __ArrayInstPtr(exceptFdArray)->a_element[i];
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7892
		if (fd != nil) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7893
		    f = __intVal(fd);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7894
		    if ((f >= 0) && (f < FD_SETSIZE)) {
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7895
			FD_SET(f, &eset);       
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7896
			if (f > maxF) maxF = f;
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7897
		    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7898
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7899
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7900
	}
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7901
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7902
	t = __intVal(millis);
774
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7903
	if (t) {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7904
	    wt.tv_sec = t / 1000;
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7905
	    wt.tv_usec = (t % 1000) * 1000;
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7906
	} else {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7907
	    wt.tv_sec = wt.tv_usec = 0;
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7908
	}
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7909
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7910
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7911
	 * make certain, that interrupt gets us out of the select
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7912
	 */
362
claus
parents: 359
diff changeset
  7913
	__BEGIN_INTERRUPTABLE__
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7914
	errno = 0;
774
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7915
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7916
	if (t == 0) {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7917
	    /* 
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7918
	     * if there is no timeout time, we can stay here 
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7919
	     * interruptable.
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7920
	     */
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7921
	    do {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7922
		ret = select(maxF+1, &rset, &wset, &eset, &wt);
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7923
	    } while ((ret < 0) && (errno == EINTR));
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7924
	} else {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7925
	    do {
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7926
		ret = select(maxF+1, &rset, &wset, &eset, &wt);
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7927
		/* 
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7928
		 * for now: dont loop; if we did, we had to adjust the vt-timeval;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7929
		 * could otherwise stay in this loop forever ...
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7930
		 * Premature return (before the time expired) must be handled by the caller.
774
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7931
		 * A good solution is to update the wt-timeval and redo the select.
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7932
		 */
774
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7933
	    } while (0 /* (ret < 0) && (errno == EINTR) */ );
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7934
	}
362
claus
parents: 359
diff changeset
  7935
	__END_INTERRUPTABLE__
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7936
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7937
	if (ret > 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7938
	    for (i=0; i <= maxF; i++) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7939
		if (FD_ISSET(i, &rset)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7940
		 || FD_ISSET(i, &wset)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7941
		 || FD_ISSET(i, &eset)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7942
		    RETURN ( __MKSMALLINT(i) );
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7943
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7944
	    }
855
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  7945
	} else {
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  7946
	    if (ret < 0) {
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  7947
		if (errno != EINTR) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  7948
		    fprintf(stderr, "OS: select errno = %d\n", errno);
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7949
		    OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
855
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  7950
		}
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  7951
	    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7952
	}
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7953
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7954
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7955
	 * return nil (means time expired)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7956
	 */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7957
	RETURN ( nil );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7958
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7959
#endif /* not MSDOS_LIKE */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7960
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7961
fail: ;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7962
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7963
    "
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7964
     timeout argument not integer,
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7965
     or any fd-array nonNil and not an array
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7966
     or not supported by OS
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7967
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7968
    ^ self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7969
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7970
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7971
setBlocking:aBoolean on:fd
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7972
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7973
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7974
    "set/clear the blocking attribute - if set (which is the default)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7975
     a read on the fileDescriptor will block until data is available.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7976
     If cleared, a read operation will immediately return with a value of
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7977
     nil."
10
claus
parents: 5
diff changeset
  7978
claus
parents: 5
diff changeset
  7979
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  7980
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7981
    int ret, flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7982
    int savInt;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7983
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7984
#if defined(F_GETFL) && defined(F_SETFL)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7985
# if defined(FNDELAY)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7986
    if (__isSmallInteger(fd)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7987
	int f = __intVal(fd);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7988
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7989
	flags = fcntl(f, F_GETFL, 0);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7990
	if (aBoolean == true) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7991
	    ret = fcntl(f, F_SETFL, flags & ~FNDELAY);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7992
	} else {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7993
	    ret = fcntl(f, F_SETFL, flags | FNDELAY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7994
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7995
	if (ret >= 0) ret = flags;
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7996
	RETURN ( __MKSMALLINT(ret) );
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  7997
    }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7998
# endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  7999
#endif
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  8000
%}.
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  8001
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8002
     fd argument not integer
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  8003
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  8004
    ^ self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  8005
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  8006
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8007
writeCheck:fd
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8008
    "return true, if filedescriptor can be written without blocking"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8009
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8010
    (self selectOnAnyReadable:nil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8011
		     writable:(Array with:fd)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8012
		    exception:nil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8013
		  withTimeOut:0) == fd
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8014
	ifTrue:[^ true].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8015
    ^ false
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  8016
! !
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
  8017
1991
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8018
!OperatingSystem::FileStatusInfo class methodsFor:'instance creation'!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8019
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8020
type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT statusChanged:sT path:lP
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8021
    ^ self basicNew
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8022
	type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT statusChanged:sT path:lP       
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8023
! !
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8024
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8025
!OperatingSystem::FileStatusInfo methodsFor:'accessing'!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8026
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8027
accessed
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8028
    "return accessed"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8029
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8030
    ^ accessed!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8031
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8032
gid
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8033
    "return gid"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8034
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8035
    ^ gid!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8036
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8037
id
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8038
    "return id"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8039
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8040
    ^ id!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8041
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8042
mode
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8043
    "return mode"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8044
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8045
    ^ mode!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8046
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8047
modified
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8048
    "return modified"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8049
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8050
    ^ modified!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8051
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8052
path
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8053
    "for symbolic links only: return the path where the symbolic link points to"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8054
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8055
    ^ path
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8056
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8057
!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8058
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8059
size
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8060
    "return size"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8061
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8062
    ^ size!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8063
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8064
statusChanged
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8065
    "return statusChanged"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8066
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8067
    ^ statusChanged!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8068
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8069
type
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8070
    "return type"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8071
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8072
    ^ type!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8073
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8074
uid
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8075
    "return uid"
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8076
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8077
    ^ uid! !
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8078
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8079
!OperatingSystem::FileStatusInfo methodsFor:'backward compatibility'!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8080
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8081
at:key
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8082
    "backward compatibility access: in previous releases, IdentityDictionaries
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8083
     were used to hold my information. Allow access via key messages.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8084
     This method will vanish - use the proper access protocol."
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8085
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8086
    ^ self perform:key
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8087
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8088
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8089
! !
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8090
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8091
!OperatingSystem::FileStatusInfo methodsFor:'private accessing'!
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8092
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8093
type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT statusChanged:sT path:lP
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8094
    type := t.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8095
    mode := m.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8096
    uid := u.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8097
    gid := g.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8098
    size := s.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8099
    id := i.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8100
    accessed := aT.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8101
    modified := mT.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8102
    statusChanged := sT.
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8103
    path := lP
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8104
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8105
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8106
! !
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  8107
1966
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8108
!OperatingSystem::OSProcessStatus class methodsFor:'documentation'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8109
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8110
documentation
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8111
"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8112
    This is an auxillary class, that holds information about status changes of
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8113
    operating system processes (these are no smalltalk processes!!).
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8114
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8115
    [Instance variables:]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8116
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8117
	pid     <Integer>       OS-Process identifier
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8118
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8119
	status  <Symbol>        either #exit #signal #stop #continue
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8120
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8121
	code    <Integer>       either exitcode or signalnumber
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8122
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8123
	core    <Boolean>       true if core has been dumped
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8124
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8125
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8126
    [author:]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8127
	Stefan Vogel
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8128
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8129
    [see also:]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8130
	OperatingSystem
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8131
"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8132
! !
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8133
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8134
!OperatingSystem::OSProcessStatus class methodsFor:'instance creation'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8135
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8136
pid:pid status:status code:code core:core
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8137
    "private interface for OperatingSystem"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8138
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8139
    ^ self new pid:pid status:status code:code core:core
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8140
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8141
    "Created: 28.12.1995 / 14:16:14 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8142
    "Modified: 30.4.1996 / 18:25:00 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8143
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8144
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8145
processCreationFailure
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8146
    "private interface for OperatingSystem"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8147
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8148
    ^ self new pid:-1 status:#failure code:-1 core:false
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8149
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8150
    "Created: 28.12.1995 / 14:35:29 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8151
    "Modified: 30.4.1996 / 18:25:05 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8152
! !
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8153
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8154
!OperatingSystem::OSProcessStatus methodsFor:'accessing'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8155
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8156
code
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8157
    "return the exitcode / signalNumber"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8158
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8159
    ^ code
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8160
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8161
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8162
    "Modified: 30.4.1996 / 18:26:23 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8163
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8164
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8165
core
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8166
    "return true if core has been dumped, false otherwise"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8167
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8168
    ^ core == true
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8169
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8170
    "Modified: 28.12.1995 / 14:14:38 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8171
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8172
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8173
pid
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8174
    "return the pid"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8175
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8176
    ^ pid
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8177
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8178
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8179
    "Modified: 30.4.1996 / 18:26:30 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8180
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8181
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8182
status
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8183
    "return status as a Symbol;
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8184
     one of #exit #signal #stop #continue"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8185
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8186
    ^ status
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8187
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8188
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8189
    "Modified: 30.4.1996 / 18:26:54 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8190
! !
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8191
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8192
!OperatingSystem::OSProcessStatus methodsFor:'initialization'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8193
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8194
pid:newPid status:newStatus code:newCode core:newCore
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8195
    pid := newPid.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8196
    status := newStatus.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8197
    code := newCode.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8198
    core := newCore.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8199
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8200
    "Created: 28.12.1995 / 14:18:22 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8201
! !
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8202
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8203
!OperatingSystem::OSProcessStatus methodsFor:'private-OS interface'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8204
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8205
code:something
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8206
    "set the exitCode"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8207
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8208
    code := something.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8209
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8210
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8211
    "Modified: 30.4.1996 / 18:25:18 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8212
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8213
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8214
core:something
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8215
    "set core"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8216
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8217
    core := something.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8218
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8219
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8220
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8221
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8222
pid:something
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8223
    "set pid"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8224
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8225
    pid := something.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8226
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8227
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8228
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8229
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8230
status:something
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8231
    "set status"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8232
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8233
    status := something.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8234
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8235
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8236
! !
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8237
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8238
!OperatingSystem::OSProcessStatus methodsFor:'queries'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8239
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8240
couldNotExecute
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8241
    "return true when a command could not be executed"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8242
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8243
    ^ status == #exit and:[code = 127].
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8244
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8245
    "Created: 28.12.1995 / 15:43:17 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8246
    "Modified: 30.4.1996 / 18:27:03 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8247
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8248
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8249
stillAlive
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8250
    "true if process is still alive"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8251
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8252
    ^ status == #stop or:[status == #continue]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8253
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8254
    "Created: 28.12.1995 / 14:27:26 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8255
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8256
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8257
success
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8258
    "true if process terminated successfully"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8259
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8260
    ^ status == #exit and:[code = 0]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8261
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8262
    "Created: 28.12.1995 / 14:13:05 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8263
    "Modified: 28.12.1995 / 14:13:41 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8264
! !
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8265
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  8266
!OperatingSystem class methodsFor:'documentation'!
630
b785d23d7c5b version at the end
Claus Gittinger <cg@exept.de>
parents: 616
diff changeset
  8267
b785d23d7c5b version at the end
Claus Gittinger <cg@exept.de>
parents: 616
diff changeset
  8268
version
2000
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  8269
    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.182 1996-12-19 16:21:04 cg Exp $'
630
b785d23d7c5b version at the end
Claus Gittinger <cg@exept.de>
parents: 616
diff changeset
  8270
! !
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8271
OperatingSystem initialize!