Unix.st
author Claus Gittinger <cg@exept.de>
Fri, 24 Jan 1997 23:11:36 +0100
changeset 2262 4c4d810f006f
parent 2252 ece20502eaf2
child 2266 a94af740c68a
permissions -rw-r--r--
semaphore names
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:''
2131
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
    15
	classVariableNames:'HostName DomainName LastErrorNumber OSSignals SlowFork ForkFailed
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
    16
		ErrorSignal AccessDeniedErrorSignal FileNotFoundErrorSignal
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
    17
		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
2251
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
    22
Object subclass:#FileStatusInfo
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
    23
	instanceVariableNames:'type mode uid gid size id accessed modified statusChanged path'
2131
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
    24
	classVariableNames:''
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
    25
	poolDictionaries:''
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
    26
	privateIn:OperatingSystem
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
    27
!
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
    28
2251
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
    29
Object subclass:#OSProcessStatus
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
    30
	instanceVariableNames:'pid status code core'
1966
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    31
	classVariableNames:''
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    32
	poolDictionaries:''
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    33
	privateIn:OperatingSystem
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
    34
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
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
/*
2073
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   381
 * NeXT has no pid_t
2107
9987b837fe12 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2098
diff changeset
   382
 * and no sigemptyset
2073
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   383
 */
2156
56115af62ce5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2139
diff changeset
   384
# ifdef NEXT3
2073
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   385
   typedef int pid_t;
2107
9987b837fe12 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2098
diff changeset
   386
#  define sigemptyset(set)      ((*(set) = 0L), 0)
2156
56115af62ce5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2139
diff changeset
   387
#  define HAS_GETDOMAINNAME
2073
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   388
# endif
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   389
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   390
/*
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   391
 * some (BSD ?) have no timezone
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   392
 */
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   393
# if defined(ultrix) || defined(sunos) || defined(NEXT)
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   394
#  define HAS_NO_TIMEZONE
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   395
# endif
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   396
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
   397
/*
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   398
 * 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
   399
 */
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   400
# ifndef SA_RESTART
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   401
#  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
   402
# endif
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   403
# ifndef SA_SIGINFO
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   404
#  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
   405
# endif
7d5e32ed435e dummy SA_xxx defs for systems which dont have them (HP & ultrix)
Claus Gittinger <cg@exept.de>
parents: 762
diff changeset
   406
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   407
# 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
   408
#  include <sys/wait.h>
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   409
# endif
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
   410
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
   411
# if defined(HAS_SYSINFO)
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
   412
#  include <sys/systeminfo.h>
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
   413
# endif
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
   414
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
   415
#endif /* not transputer */
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   416
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   417
/*
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   418
 * 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
   419
 */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   420
#ifndef errno
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   421
 extern errno;
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   422
#endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   423
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   424
/*
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   425
 * some (old ?) systems do not define this ...
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   426
 */
675
f3461db7a0ee avoid a warning
Claus Gittinger <cg@exept.de>
parents: 674
diff changeset
   427
#if !defined(R_OK) && !defined(_AIX)
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   428
# define R_OK    4       /* Test for Read permission */ 
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   429
# define W_OK    2       /* Test for Write permission */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   430
# define X_OK    1       /* Test for eXecute permission */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   431
# define F_OK    0       /* Test for existence of File */
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   432
#endif
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   433
832
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   434
#ifdef WIN32
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   435
# define SIGHANDLER_ARG int
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   436
#else
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   437
# define SIGHANDLER_ARG
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   438
#endif
70e8b7fc357e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 831
diff changeset
   439
1441
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   440
#ifdef sunos
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   441
# define NO_WAITPID
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   442
#endif
2126
d3da2956f380 NEXT has no waitpid
Claus Gittinger <cg@exept.de>
parents: 2117
diff changeset
   443
#ifdef NEXT
d3da2956f380 NEXT has no waitpid
Claus Gittinger <cg@exept.de>
parents: 2117
diff changeset
   444
# define NO_WAITPID
d3da2956f380 NEXT has no waitpid
Claus Gittinger <cg@exept.de>
parents: 2117
diff changeset
   445
#endif
1441
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   446
437
claus
parents: 434
diff changeset
   447
%}
claus
parents: 434
diff changeset
   448
! !
claus
parents: 434
diff changeset
   449
claus
parents: 434
diff changeset
   450
!OperatingSystem primitiveFunctions!
claus
parents: 434
diff changeset
   451
%{
claus
parents: 434
diff changeset
   452
claus
parents: 434
diff changeset
   453
/*
claus
parents: 434
diff changeset
   454
 * some systems' system() is broken in that it does not correctly 
claus
parents: 434
diff changeset
   455
 * handle EINTR and returns failure even though it actually succeeded. 
claus
parents: 434
diff changeset
   456
 * (LINUX is one of them)
claus
parents: 434
diff changeset
   457
 * Here is a fixed version. If you encounter EINTR returns from
claus
parents: 434
diff changeset
   458
 * OperatingSystem>>executeCommand, you ought to define WANT_SYSTEM
claus
parents: 434
diff changeset
   459
 * in the xxxIntern.h file to get this fixed version.
claus
parents: 434
diff changeset
   460
 *
claus
parents: 434
diff changeset
   461
 * As an added BONUS, this system() enables interrupts while waiting
claus
parents: 434
diff changeset
   462
 * 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
   463
 * (i.e. it is RT safe)
437
claus
parents: 434
diff changeset
   464
 */
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   465
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   466
#if defined(WANT_SYSTEM)
f74d003548dc system-fix
claus
parents: 424
diff changeset
   467
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   468
/* # define DPRINTF(x)     printf x */
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
   469
# define DPRINTF(x)     /* nothing */
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   470
437
claus
parents: 434
diff changeset
   471
# ifndef _STDDEF_H_INCLUDED_
claus
parents: 434
diff changeset
   472
#  include <stddef.h>
claus
parents: 434
diff changeset
   473
#  define _STDDEF_H_INCLUDED_
claus
parents: 434
diff changeset
   474
# endif
claus
parents: 434
diff changeset
   475
claus
parents: 434
diff changeset
   476
# ifndef _STDLIB_H_INCLUDED_
claus
parents: 434
diff changeset
   477
#  include <stdlib.h>
claus
parents: 434
diff changeset
   478
#  define _STDLIB_H_INCLUDED_
claus
parents: 434
diff changeset
   479
# endif
claus
parents: 434
diff changeset
   480
claus
parents: 434
diff changeset
   481
# ifndef _UNISTD_H_INCLUDED_
claus
parents: 434
diff changeset
   482
#  include <unistd.h>
claus
parents: 434
diff changeset
   483
#  define _UNISTD_H_INCLUDED_
claus
parents: 434
diff changeset
   484
# endif
claus
parents: 434
diff changeset
   485
claus
parents: 434
diff changeset
   486
# ifndef _SYS_WAIT_H_INCLUDED
claus
parents: 434
diff changeset
   487
#  include <sys/wait.h>
claus
parents: 434
diff changeset
   488
#  define _SYS_WAIT_H_INCLUDED
claus
parents: 434
diff changeset
   489
# endif
claus
parents: 434
diff changeset
   490
claus
parents: 434
diff changeset
   491
# ifndef _SIGNAL_H_INCLUDED_
claus
parents: 434
diff changeset
   492
#  include <signal.h>
claus
parents: 434
diff changeset
   493
#  define _SIGNAL_H_INCLUDED_
claus
parents: 434
diff changeset
   494
# endif
claus
parents: 434
diff changeset
   495
claus
parents: 434
diff changeset
   496
# ifndef _SYS_TYPES_H_INCLUDED_
claus
parents: 434
diff changeset
   497
#  include <sys/types.h>
claus
parents: 434
diff changeset
   498
#  define _SYS_TYPES_H_INCLUDED_
claus
parents: 434
diff changeset
   499
# endif
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   500
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   501
# if (!defined(HAVE_GNU_LD) && !defined (__ELF__)) || !defined(LINUX)
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   502
#  define       __environ       environ
512
f440411a55e4 no redef warnings on LINUX
Claus Gittinger <cg@exept.de>
parents: 511
diff changeset
   503
#  if !defined(LINUX)
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   504
#   define      __sigemptyset   sigemptyset
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   505
#   define      __sigaction     sigaction
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   506
#   define      __sigaddset     sigaddset
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   507
#   define      __sigprocmask   sigprocmask
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   508
#   define      __execve        execve
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   509
#   define      __wait          wait
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   510
#   define      __waitpid       waitpid
674
fba47329ac9d fixed startProcess
Claus Gittinger <cg@exept.de>
parents: 670
diff changeset
   511
#   if defined(HAS_VFORK)
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   512
#    define     FORK            vfork
514
81fa80a953e2 system() now interruptable with ultrix
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
   513
#   else
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   514
#    define     FORK            fork
514
81fa80a953e2 system() now interruptable with ultrix
Claus Gittinger <cg@exept.de>
parents: 513
diff changeset
   515
#   endif
512
f440411a55e4 no redef warnings on LINUX
Claus Gittinger <cg@exept.de>
parents: 511
diff changeset
   516
#  endif /* ! LINUX */
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   517
   extern char **environ;
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   518
# endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
   519
f74d003548dc system-fix
claus
parents: 424
diff changeset
   520
# define        SHELL_PATH      "/bin/sh"       /* Path of the shell.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   521
# define        SHELL_NAME      "sh"            /* Name to give it.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   522
f74d003548dc system-fix
claus
parents: 424
diff changeset
   523
# ifndef        FORK
f74d003548dc system-fix
claus
parents: 424
diff changeset
   524
#  define       FORK    __fork
f74d003548dc system-fix
claus
parents: 424
diff changeset
   525
# endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
   526
f74d003548dc system-fix
claus
parents: 424
diff changeset
   527
# ifndef CONST
f74d003548dc system-fix
claus
parents: 424
diff changeset
   528
#  ifdef __GNUC__
f74d003548dc system-fix
claus
parents: 424
diff changeset
   529
#   define CONST const
f74d003548dc system-fix
claus
parents: 424
diff changeset
   530
#  else
f74d003548dc system-fix
claus
parents: 424
diff changeset
   531
#   define CONST /* nothing */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   532
#  endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
   533
# endif
f74d003548dc system-fix
claus
parents: 424
diff changeset
   534
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
   535
static int
511
7626c5474c7f interruptable system() for IRIX5
Claus Gittinger <cg@exept.de>
parents: 507
diff changeset
   536
mySystem(line)
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   537
    register CONST char *line;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   538
{
f74d003548dc system-fix
claus
parents: 424
diff changeset
   539
    int status, save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   540
    pid_t pid;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   541
    struct sigaction sa, intr, quit;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   542
    sigset_t block, omask;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   543
f74d003548dc system-fix
claus
parents: 424
diff changeset
   544
    if (line == NULL)
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
   545
	return -1;
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   546
f74d003548dc system-fix
claus
parents: 424
diff changeset
   547
    sa.sa_handler = SIG_IGN;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   548
    sa.sa_flags = 0;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   549
    __sigemptyset (&sa.sa_mask);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   550
f74d003548dc system-fix
claus
parents: 424
diff changeset
   551
    if (__sigaction (SIGINT, &sa, &intr) < 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   552
	DPRINTF(("1: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   553
	return -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   554
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   555
    if (__sigaction (SIGQUIT, &sa, &quit) < 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   556
	save = errno;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   557
	(void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   558
	errno = save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   559
	DPRINTF(("2: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   560
	return -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   561
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   562
f74d003548dc system-fix
claus
parents: 424
diff changeset
   563
    __sigemptyset (&block);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   564
    __sigaddset (&block, SIGCHLD);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   565
    save = errno;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   566
    if (__sigprocmask(SIG_BLOCK, &block, &omask) < 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   567
	if (errno == ENOSYS)
f74d003548dc system-fix
claus
parents: 424
diff changeset
   568
	    errno = save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   569
	else {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   570
	    save = errno;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   571
	    (void) __sigaction(SIGINT, &intr, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   572
	    (void) __sigaction(SIGQUIT, &quit, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   573
	    errno = save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   574
	    DPRINTF(("3: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   575
	    return -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   576
	}
f74d003548dc system-fix
claus
parents: 424
diff changeset
   577
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   578
f74d003548dc system-fix
claus
parents: 424
diff changeset
   579
    pid = FORK ();
f74d003548dc system-fix
claus
parents: 424
diff changeset
   580
    if (pid == (pid_t) 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   581
	/* Child side.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   582
	CONST char *new_argv[4];
f74d003548dc system-fix
claus
parents: 424
diff changeset
   583
	new_argv[0] = SHELL_NAME;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   584
	new_argv[1] = "-c";
f74d003548dc system-fix
claus
parents: 424
diff changeset
   585
	new_argv[2] = line;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   586
	new_argv[3] = NULL;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   587
f74d003548dc system-fix
claus
parents: 424
diff changeset
   588
	/* Restore the signals.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   589
	(void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   590
	(void) __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   591
	(void) __sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   592
f74d003548dc system-fix
claus
parents: 424
diff changeset
   593
	/* Exec the shell.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   594
	(void) __execve (SHELL_PATH, (char *CONST *) new_argv, __environ);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   595
	_exit (127);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   596
    } else {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   597
	if (pid < (pid_t) 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   598
	    /* The fork failed.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   599
	    DPRINTF(("4: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   600
	    status = -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   601
	} else {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   602
	    /* Parent side.  */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   603
#ifdef  NO_WAITPID
f74d003548dc system-fix
claus
parents: 424
diff changeset
   604
	    pid_t child;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   605
f74d003548dc system-fix
claus
parents: 424
diff changeset
   606
	    do {
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
   607
		__BEGIN_INTERRUPTABLE__
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   608
		child = __wait (&status);
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   609
		__END_INTERRUPTABLE__
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
   610
		if (child < 0 && errno != EINTR) {
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   611
		    DPRINTF(("5: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   612
		    status = -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   613
		    break;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   614
		}
f74d003548dc system-fix
claus
parents: 424
diff changeset
   615
	    } while (child != pid);
f74d003548dc system-fix
claus
parents: 424
diff changeset
   616
#else
f74d003548dc system-fix
claus
parents: 424
diff changeset
   617
	    pid_t child;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   618
f74d003548dc system-fix
claus
parents: 424
diff changeset
   619
	    /* claus: the original did not care for EINTR here ... */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   620
	    do {
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
   621
		__BEGIN_INTERRUPTABLE__
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   622
		child = __waitpid (pid, &status, 0);
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
   623
		__END_INTERRUPTABLE__
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   624
	    } while ((child != pid) && (errno == EINTR));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   625
	    if (child != pid) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   626
		DPRINTF(("6: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   627
		status = -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   628
	    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   629
#endif /* NO_WAITPID */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   630
	}
f74d003548dc system-fix
claus
parents: 424
diff changeset
   631
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   632
    save = errno;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   633
    if ((__sigaction (SIGINT, &intr, (struct sigaction *) NULL)
f74d003548dc system-fix
claus
parents: 424
diff changeset
   634
     | __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL)
f74d003548dc system-fix
claus
parents: 424
diff changeset
   635
     | __sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL)) != 0) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   636
	if (errno == ENOSYS) {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   637
	    errno = save;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   638
	} else {
f74d003548dc system-fix
claus
parents: 424
diff changeset
   639
	    status = -1;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   640
	    DPRINTF(("7: errno=%d\n", errno));
f74d003548dc system-fix
claus
parents: 424
diff changeset
   641
	}
f74d003548dc system-fix
claus
parents: 424
diff changeset
   642
    }
f74d003548dc system-fix
claus
parents: 424
diff changeset
   643
f74d003548dc system-fix
claus
parents: 424
diff changeset
   644
    return status;
f74d003548dc system-fix
claus
parents: 424
diff changeset
   645
}
1441
91284e90f42a sunos has no __wait
Claus Gittinger <cg@exept.de>
parents: 1433
diff changeset
   646
#else
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   647
# define __wait wait
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   648
#endif /* WANT_SYSTEM */
f74d003548dc system-fix
claus
parents: 424
diff changeset
   649
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
   650
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   651
/*
f74d003548dc system-fix
claus
parents: 424
diff changeset
   652
 * some systems do not have realpath();
f74d003548dc system-fix
claus
parents: 424
diff changeset
   653
 * the alternative of reading from a 'pwp'-pipe
f74d003548dc system-fix
claus
parents: 424
diff changeset
   654
 * is way too slow. Here is a realpath for the rest of us.
440
claus
parents: 439
diff changeset
   655
 * define WANT_REALPATH in the xxxIntern-file to get it.
433
f74d003548dc system-fix
claus
parents: 424
diff changeset
   656
 */
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
   657
440
claus
parents: 439
diff changeset
   658
#if defined(HAS_REALPATH)
claus
parents: 439
diff changeset
   659
# undef WANT_REALPATH
claus
parents: 439
diff changeset
   660
#endif
claus
parents: 439
diff changeset
   661
#if !defined(HAS_GETWD) && !defined(HAS_GETCWD)
claus
parents: 439
diff changeset
   662
# undef WANT_REALPATH
claus
parents: 439
diff changeset
   663
#endif
claus
parents: 439
diff changeset
   664
claus
parents: 439
diff changeset
   665
#if defined(WANT_REALPATH)
406
claus
parents: 384
diff changeset
   666
claus
parents: 384
diff changeset
   667
# ifndef NULL
claus
parents: 384
diff changeset
   668
#  define NULL (char *)0
claus
parents: 384
diff changeset
   669
# endif
claus
parents: 384
diff changeset
   670
439
claus
parents: 438
diff changeset
   671
# define MAX_READLINKS 32
claus
parents: 438
diff changeset
   672
claus
parents: 438
diff changeset
   673
# ifndef MAXPATHLEN
claus
parents: 438
diff changeset
   674
#  define MAXPATHLEN     1024
claus
parents: 438
diff changeset
   675
# endif
406
claus
parents: 384
diff changeset
   676
claus
parents: 384
diff changeset
   677
static
claus
parents: 384
diff changeset
   678
char *realpath(path, resolved_path)
claus
parents: 384
diff changeset
   679
char *path;
claus
parents: 384
diff changeset
   680
char resolved_path [];
claus
parents: 384
diff changeset
   681
{
claus
parents: 384
diff changeset
   682
	char copy_path[MAXPATHLEN];
claus
parents: 384
diff changeset
   683
	char link_path[MAXPATHLEN];
claus
parents: 384
diff changeset
   684
	char *new_path = resolved_path;
claus
parents: 384
diff changeset
   685
	char *max_path;
claus
parents: 384
diff changeset
   686
	int readlinks = 0;
claus
parents: 384
diff changeset
   687
	int n;
claus
parents: 384
diff changeset
   688
claus
parents: 384
diff changeset
   689
	/* Make a copy of the source path since we may need to modify it. */
claus
parents: 384
diff changeset
   690
	strcpy(copy_path, path);
claus
parents: 384
diff changeset
   691
	path = copy_path;
claus
parents: 384
diff changeset
   692
	max_path = copy_path + MAXPATHLEN - 2;
claus
parents: 384
diff changeset
   693
	/* If it's a relative pathname use getwd for starters. */
claus
parents: 384
diff changeset
   694
	if (*path != '/') {
claus
parents: 384
diff changeset
   695
#ifdef HAS_GETCWD
claus
parents: 384
diff changeset
   696
		getcwd(new_path, MAXPATHLEN - 1);
claus
parents: 384
diff changeset
   697
#else
claus
parents: 384
diff changeset
   698
		getwd(new_path);
claus
parents: 384
diff changeset
   699
#endif
claus
parents: 384
diff changeset
   700
		new_path += strlen(new_path);
claus
parents: 384
diff changeset
   701
		if (new_path[-1] != '/')
claus
parents: 384
diff changeset
   702
			*new_path++ = '/';
claus
parents: 384
diff changeset
   703
	}
claus
parents: 384
diff changeset
   704
	else {
claus
parents: 384
diff changeset
   705
		*new_path++ = '/';
claus
parents: 384
diff changeset
   706
		path++;
claus
parents: 384
diff changeset
   707
	}
claus
parents: 384
diff changeset
   708
	/* Expand each slash-separated pathname component. */
claus
parents: 384
diff changeset
   709
	while (*path != '\0') {
claus
parents: 384
diff changeset
   710
		/* Ignore stray "/". */
claus
parents: 384
diff changeset
   711
		if (*path == '/') {
claus
parents: 384
diff changeset
   712
			path++;
claus
parents: 384
diff changeset
   713
			continue;
claus
parents: 384
diff changeset
   714
		}
claus
parents: 384
diff changeset
   715
		if (*path == '.') {
claus
parents: 384
diff changeset
   716
			/* Ignore ".". */
claus
parents: 384
diff changeset
   717
			if (path[1] == '\0' || path[1] == '/') {
claus
parents: 384
diff changeset
   718
				path++;
claus
parents: 384
diff changeset
   719
				continue;
claus
parents: 384
diff changeset
   720
			}
claus
parents: 384
diff changeset
   721
			if (path[1] == '.') {
claus
parents: 384
diff changeset
   722
				if (path[2] == '\0' || path[2] == '/') {
claus
parents: 384
diff changeset
   723
					path += 2;
claus
parents: 384
diff changeset
   724
					/* Ignore ".." at root. */
claus
parents: 384
diff changeset
   725
					if (new_path == resolved_path + 1)
claus
parents: 384
diff changeset
   726
						continue;
claus
parents: 384
diff changeset
   727
					/* Handle ".." by backing up. */
claus
parents: 384
diff changeset
   728
					while ((--new_path)[-1] != '/')
claus
parents: 384
diff changeset
   729
						;
claus
parents: 384
diff changeset
   730
					continue;
claus
parents: 384
diff changeset
   731
				}
claus
parents: 384
diff changeset
   732
			}
claus
parents: 384
diff changeset
   733
		}
claus
parents: 384
diff changeset
   734
		/* Safely copy the next pathname component. */
claus
parents: 384
diff changeset
   735
		while (*path != '\0' && *path != '/') {
claus
parents: 384
diff changeset
   736
			if (path > max_path) {
claus
parents: 384
diff changeset
   737
				errno = ENAMETOOLONG;
claus
parents: 384
diff changeset
   738
				return NULL;
claus
parents: 384
diff changeset
   739
			}
claus
parents: 384
diff changeset
   740
			*new_path++ = *path++;
claus
parents: 384
diff changeset
   741
		}
claus
parents: 384
diff changeset
   742
#ifdef S_IFLNK
claus
parents: 384
diff changeset
   743
		/* Protect against infinite loops. */
claus
parents: 384
diff changeset
   744
		if (readlinks++ > MAX_READLINKS) {
claus
parents: 384
diff changeset
   745
			errno = ELOOP;
claus
parents: 384
diff changeset
   746
			return NULL;
claus
parents: 384
diff changeset
   747
		}
claus
parents: 384
diff changeset
   748
		/* See if latest pathname component is a symlink. */
claus
parents: 384
diff changeset
   749
		*new_path = '\0';
claus
parents: 384
diff changeset
   750
		n = readlink(resolved_path, link_path, MAXPATHLEN - 1);
claus
parents: 384
diff changeset
   751
		if (n < 0) {
claus
parents: 384
diff changeset
   752
			/* EINVAL means the file exists but isn't a symlink. */
claus
parents: 384
diff changeset
   753
			if (errno != EINVAL)
claus
parents: 384
diff changeset
   754
				return NULL;
claus
parents: 384
diff changeset
   755
		}
claus
parents: 384
diff changeset
   756
		else {
claus
parents: 384
diff changeset
   757
			/* Note: readlink doesn't add the null byte. */
claus
parents: 384
diff changeset
   758
			link_path[n] = '\0';
claus
parents: 384
diff changeset
   759
			if (*link_path == '/')
claus
parents: 384
diff changeset
   760
				/* Start over for an absolute symlink. */
claus
parents: 384
diff changeset
   761
				new_path = resolved_path;
claus
parents: 384
diff changeset
   762
			else
claus
parents: 384
diff changeset
   763
				/* Otherwise back up over this component. */
claus
parents: 384
diff changeset
   764
				while (*(--new_path) != '/')
claus
parents: 384
diff changeset
   765
					;
claus
parents: 384
diff changeset
   766
			/* Safe sex check. */
claus
parents: 384
diff changeset
   767
			if (strlen(path) + n >= MAXPATHLEN) {
claus
parents: 384
diff changeset
   768
				errno = ENAMETOOLONG;
claus
parents: 384
diff changeset
   769
				return NULL;
claus
parents: 384
diff changeset
   770
			}
claus
parents: 384
diff changeset
   771
			/* Insert symlink contents into path. */
claus
parents: 384
diff changeset
   772
			strcat(link_path, path);
claus
parents: 384
diff changeset
   773
			strcpy(copy_path, link_path);
claus
parents: 384
diff changeset
   774
			path = copy_path;
claus
parents: 384
diff changeset
   775
		}
claus
parents: 384
diff changeset
   776
#endif /* S_IFLNK */
claus
parents: 384
diff changeset
   777
		*new_path++ = '/';
claus
parents: 384
diff changeset
   778
	}
claus
parents: 384
diff changeset
   779
	/* Delete trailing slash but don't whomp a lone slash. */
claus
parents: 384
diff changeset
   780
	if (new_path != resolved_path + 1 && new_path[-1] == '/')
claus
parents: 384
diff changeset
   781
		new_path--;
claus
parents: 384
diff changeset
   782
	/* Make sure it's null terminated. */
claus
parents: 384
diff changeset
   783
	*new_path = '\0';
claus
parents: 384
diff changeset
   784
	return resolved_path;
claus
parents: 384
diff changeset
   785
}
claus
parents: 384
diff changeset
   786
# define HAS_REALPATH
claus
parents: 384
diff changeset
   787
#endif /* WANT_REALPATH && not HAS_REALPATH */
claus
parents: 384
diff changeset
   788
%}
claus
parents: 384
diff changeset
   789
! !
claus
parents: 384
diff changeset
   790
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
   791
!OperatingSystem class methodsFor:'documentation'!
2
claus
parents: 1
diff changeset
   792
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   793
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   794
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   795
 COPYRIGHT (c) 1988 by Claus Gittinger
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   796
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   797
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   798
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   799
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   800
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   801
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   802
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   803
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   804
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   805
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   806
2
claus
parents: 1
diff changeset
   807
documentation
claus
parents: 1
diff changeset
   808
"
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 520
diff changeset
   809
    this class realizes access to most (all ?) required operating system services;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   810
    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
   811
    things available here in your applications 
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   812
    - some may not be found in other OS's or be slightly different ...
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   813
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   814
    (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
   815
     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
   816
     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
   817
     You decide - portability vs. functionality)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   818
1286
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   819
    [Class variables:]
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   820
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   821
	HostName        <String>        remembered hostname
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   822
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   823
	DomainName      <String>        remembered domainname
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
	LastErrorNumber <Integer>       the last value of errno
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
	OSSignals       <Array>         Array of signals to be raised for corresponding
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   828
					OperatingSystem signals.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   829
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   830
	ForkFailed      <Boolean>       set if a fork (or popen) has failed;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   831
					ST/X will avoid doing more forks/popens
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   832
					if this flag is set, for a slightly
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   833
					smoother operation.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   834
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   835
	SlowFork        <Boolean>       if set, fork and popen are avoided;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   836
					(more or less obsolete now)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   837
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   838
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   839
	ErrorSignal     <Signal>        Parentsignal of all OS error signals.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   840
					not directly raised.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   841
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   842
	AccessDeniedErrorSignal
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   843
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   844
	FileNotFoundErrorSignal
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   845
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   846
	LocaleInfo      <Dictionary>    if non nil, that is taken instead of the operating
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   847
					systems locale definitions (allows for overwriting
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   848
					these, or provide a compatible info on systems which do
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   849
					not support locales)
1286
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   850
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   851
    [author:]
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   852
	Claus Gittinger
1286
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   853
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1280
diff changeset
   854
    [see also:]
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   855
	OSProcessStatus
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   856
	Filename Date Time
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   857
	ExternalStream FileStream PipeStream Socket
2
claus
parents: 1
diff changeset
   858
"
1619
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   859
!
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   860
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   861
examples
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   862
"
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   863
  various queries
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   864
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   865
    Transcript 
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   866
	showCR:'hello ' , (OperatingSystem getLoginName)
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   867
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   868
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   869
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   870
    OperatingSystem isUNIXlike ifTrue:[
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   871
	Transcript showCR:'this is some UNIX-like OS'
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   872
    ] ifFalse:[
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   873
	Transcript showCR:'this OS is not UNIX-like'
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   874
    ]
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   875
								[exEnd]
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
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   878
    Transcript 
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   879
	showCR:'this machine is called ' , OperatingSystem getHostName
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   880
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   881
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   882
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   883
    Transcript 
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   884
	showCR:('this machine is in the '
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   885
	       , OperatingSystem getDomainName
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   886
	       , ' domain')
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   887
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   888
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   889
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   890
    Transcript 
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   891
	showCR:('this machine''s CPU is a '
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   892
	       , OperatingSystem getCPUType
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   893
	       )
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   894
								[exEnd]
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   895
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   896
								[exBegin]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   897
    Transcript showCR:'executing ls command ...'.
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   898
    OperatingSystem executeCommand:'ls'.
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   899
    Transcript showCR:'... done.'.
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   900
								[exEnd]
1622
e40404e0a49d more examples
Claus Gittinger <cg@exept.de>
parents: 1621
diff changeset
   901
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   902
  locking a file 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   903
  (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
   904
								[exBegin]
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   905
    |f|
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   906
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   907
    f := 'testFile' asFilename readWriteStream.
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   908
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   909
    10 timesRepeat:[
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   910
	'about to lock ...' printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   911
	[
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   912
	  OperatingSystem 
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   913
	    lockFD:(f fileDescriptor)
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   914
	    shared:false
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   915
	    blocking:false
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   916
	] whileFalse:[
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   917
	    'process ' print. OperatingSystem getProcessId print. ' is waiting' printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   918
	    Delay waitForSeconds:1
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   919
	].
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   920
	'LOCKED ...' printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   921
	Delay waitForSeconds:10.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   922
	'unlock ...' printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   923
	(OperatingSystem 
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   924
	    unlockFD:(f fileDescriptor)) printCR.
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   925
	Delay waitForSeconds:3.
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
   926
    ]
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
   927
								[exBegin]
1619
2ce129068706 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1617
diff changeset
   928
"
2
claus
parents: 1
diff changeset
   929
! !
claus
parents: 1
diff changeset
   930
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
   931
!OperatingSystem class methodsFor:'initialization'!
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   932
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   933
initialize
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   934
    "initialize the class"
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
   935
540
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   936
    ObjectMemory addDependent:self.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   937
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   938
    ErrorSignal isNil ifTrue:[
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   939
	ErrorSignal := Object errorSignal newSignalMayProceed:true..
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   940
	ErrorSignal nameClass:self message:#errorSignal.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   941
	ErrorSignal notifierString:'OS error encountered'.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   942
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   943
	AccessDeniedErrorSignal := ErrorSignal newSignalMayProceed:true.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   944
	AccessDeniedErrorSignal nameClass:self message:#accessDeniedError.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   945
	AccessDeniedErrorSignal notifierString:'OS access denied'.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   946
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   947
	FileNotFoundErrorSignal := ErrorSignal newSignalMayProceed:true.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   948
	FileNotFoundErrorSignal nameClass:self message:#fileNotFoundErrorSignal.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   949
	FileNotFoundErrorSignal notifierString:'OS file not found'.
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
   950
    ]
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   951
!
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   952
1470
266520246a88 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1441
diff changeset
   953
update:something with:aParameter from:changedObject
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
   954
    "catch image restart and flush some cached data"
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
   955
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   956
    something == #earlyRestart ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   957
	"
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   958
	 flush cached data
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   959
	"
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   960
	HostName := nil.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   961
	DomainName := nil.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
   962
	LastErrorNumber := nil.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   963
    ]
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
   964
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
   965
    "Modified: 22.4.1996 / 13:10:43 / cg"
1470
266520246a88 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1441
diff changeset
   966
    "Created: 15.6.1996 / 15:22:37 / cg"
2080
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
   967
    "Modified: 7.1.1997 / 19:36:11 / stefan"
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   968
! !
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
   969
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
   970
!OperatingSystem class methodsFor:'OS signal constants'!
616
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
sigABRT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   973
    "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
   974
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   975
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   976
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   977
#ifdef SIGABRT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   978
    RETURN ( __MKSMALLINT(SIGABRT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   979
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   980
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   981
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   982
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   983
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   984
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   985
sigALRM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   986
    "return the signal number for SIGALRM - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   987
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   988
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   989
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   990
#ifdef SIGALRM
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   991
    RETURN ( __MKSMALLINT(SIGALRM) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   992
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
   993
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   994
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   995
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   996
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   997
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   998
sigBREAK
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
   999
    "return the signal number for SIGBREAK - 0 if not supported.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1000
     This is an MSDOS specific signal"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1001
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1002
%{  /* NOCONTEXT */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1003
#ifdef SIGBREAK
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1004
    RETURN ( __MKSMALLINT(SIGBREAK) );
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1005
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1006
    RETURN ( __MKSMALLINT(0) );
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1007
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1008
%}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1009
!
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  1010
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1011
sigBUS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1012
    "return the signal number for SIGBUS - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1013
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1014
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1015
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1016
#ifdef SIGBUS
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1017
    RETURN ( __MKSMALLINT(SIGBUS) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1018
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1019
    RETURN ( __MKSMALLINT(0) );
616
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
sigCHLD
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1025
    "return the signal number for SIGCHLD - 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(SIGCHLD)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1030
    RETURN ( __MKSMALLINT(SIGCHLD) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1031
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1032
# if  defined(SIGCLD)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1033
    RETURN ( __MKSMALLINT(SIGCLD) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1034
# else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1035
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1036
# endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1037
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1038
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1039
!
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
sigCONT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1042
    "return the signal number for SIGCONT - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1043
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1044
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1045
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1046
#if defined(SIGCONT)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1047
    RETURN ( __MKSMALLINT(SIGCONT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1048
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1049
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1050
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1051
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1052
!
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
sigDANGER
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1055
    "return the signal number for SIGDANGER - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1056
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1057
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1058
%{  /* NOCONTEXT */
710
10d86ca4c4a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 704
diff changeset
  1059
#if defined(SIGDANGER)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1060
    RETURN ( __MKSMALLINT(SIGDANGER) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1061
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1062
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1063
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1064
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1065
!
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
sigEMT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1068
    "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
  1069
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1070
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1071
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1072
#ifdef SIGEMT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1073
    RETURN ( __MKSMALLINT(SIGEMT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1074
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1075
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1076
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1077
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1078
!
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
sigFP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1081
    "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
  1082
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1083
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1084
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1085
#ifdef SIGFPE
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1086
    RETURN ( __MKSMALLINT(SIGFPE) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1087
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1088
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1089
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1090
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1091
!
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
sigGRANT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1094
    "return the signal number for SIGGRANT - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1095
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1096
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1097
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1098
#if defined(SIGGRANT)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1099
    RETURN ( __MKSMALLINT(SIGGRANT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1100
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1101
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1102
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1103
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1104
!
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
sigHUP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1107
    "return the signal number for SIGHUP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1108
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1109
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1110
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1111
#ifdef SIGHUP
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1112
    RETURN ( __MKSMALLINT(SIGHUP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1113
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1114
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1115
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1116
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1117
!
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
sigILL
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1120
    "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
  1121
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1122
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1123
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1124
#ifdef SIGILL
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1125
    RETURN ( __MKSMALLINT(SIGILL) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1126
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1127
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1128
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1129
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1130
!
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
sigINT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1133
    "return the signal number for SIGINT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1134
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1135
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1136
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1137
#ifdef SIGINT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1138
    RETURN ( __MKSMALLINT(SIGINT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1139
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1140
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1141
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1142
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1143
!
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
sigIO
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1146
    "return the signal number for SIGIO - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1147
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1148
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1149
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1150
#if defined(SIGIO)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1151
    RETURN ( __MKSMALLINT(SIGIO) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1152
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1153
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1154
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1155
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1156
!
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
sigIOT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1159
    "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
  1160
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1161
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1162
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1163
#ifdef SIGIOT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1164
    RETURN ( __MKSMALLINT(SIGIOT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1165
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1166
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1167
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1168
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1169
!
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
sigKILL
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1172
    "return the signal number for SIGKILL
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1173
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1174
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1175
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1176
#ifdef SIGKILL
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1177
    RETURN ( __MKSMALLINT(SIGKILL) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1178
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1179
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1180
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1181
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1182
!
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
sigLOST
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1185
    "return the signal number for SIGLOST - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1186
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1187
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1188
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1189
#if defined(SIGLOST)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1190
    RETURN ( __MKSMALLINT(SIGLOST) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1191
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1192
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1193
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1194
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1195
!
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
sigMIGRATE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1198
    "return the signal number for SIGMIGRATE - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1199
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1200
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1201
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1202
#if defined(SIGMIGRATE)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1203
    RETURN ( __MKSMALLINT(SIGMIGRATE) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1204
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1205
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1206
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1207
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1208
!
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
sigMSG
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1211
    "return the signal number for SIGMSG - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1212
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1213
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1214
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1215
#if defined(SIGMSG)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1216
    RETURN ( __MKSMALLINT(SIGMSG) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1217
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1218
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1219
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1220
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1221
!
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
sigPIPE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1224
    "return the signal number for SIGPIPE - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1225
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1226
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1227
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1228
#ifdef SIGPIPE
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1229
    RETURN ( __MKSMALLINT(SIGPIPE) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1230
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1231
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1232
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1233
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1234
!
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
sigPOLL
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1237
    "return the signal number for SIGPOLL - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1238
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1239
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1240
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1241
#if defined(SIGPOLL)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1242
    RETURN ( __MKSMALLINT(SIGPOLL) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1243
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1244
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1245
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1246
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1247
!
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
sigPRE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1250
    "return the signal number for SIGPRE - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1251
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1252
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1253
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1254
#if defined(SIGPRE)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1255
    RETURN ( __MKSMALLINT(SIGPRE) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1256
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1257
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1258
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1259
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1260
!
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
sigPROF
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1263
    "return the signal number for SIGPROF - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1264
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1265
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1266
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1267
#if defined(SIGPROF)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1268
    RETURN ( __MKSMALLINT(SIGPROF) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1269
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1270
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1271
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1272
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1273
!
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
sigPWR
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1276
    "return the signal number for SIGPWR - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1277
     (not available on all systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1278
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1279
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1280
#if defined(SIGPWR)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1281
    RETURN ( __MKSMALLINT(SIGPWR) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1282
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1283
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1284
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1285
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1286
!
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
sigQUIT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1289
    "return the signal number for SIGQUIT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1290
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1291
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1292
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1293
#ifdef SIGQUIT
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1294
    RETURN ( __MKSMALLINT(SIGQUIT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1295
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1296
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1297
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1298
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1299
!
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
sigRETRACT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1302
    "return the signal number for SIGRETRACT - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1303
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1304
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1305
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1306
#if defined(SIGRETRACT)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1307
    RETURN ( __MKSMALLINT(SIGRETRACT) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1308
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1309
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1310
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1311
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1312
!
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
sigSAK
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1315
    "return the signal number for SIGSAK - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1316
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1317
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1318
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1319
#if defined(SIGSAK)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1320
    RETURN ( __MKSMALLINT(SIGSAK) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1321
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1322
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1323
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1324
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1325
!
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
sigSEGV
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1328
    "return the signal number for SIGSEGV - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1329
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1330
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1331
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1332
#ifdef SIGSEGV
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1333
    RETURN ( __MKSMALLINT(SIGSEGV) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1334
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1335
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1336
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1337
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1338
!
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
sigSOUND
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1341
    "return the signal number for SIGSOUND - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1342
     (seems to be an AIX special)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1343
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1344
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1345
#if defined(SIGSOUND)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1346
    RETURN ( __MKSMALLINT(SIGSOUND) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1347
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1348
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1349
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1350
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1351
!
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
sigSTOP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1354
    "return the signal number for SIGSTOP - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1355
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1356
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1357
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1358
#if defined(SIGSTOP)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1359
    RETURN ( __MKSMALLINT(SIGSTOP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1360
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1361
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1362
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1363
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1364
!
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
sigSYS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1367
    "return the signal number for SIGSYS - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1368
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1369
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1370
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1371
#ifdef SIGSYS
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1372
    RETURN ( __MKSMALLINT(SIGSYS) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1373
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1374
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1375
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1376
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1377
!
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
sigTERM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1380
    "return the signal number for SIGTERM - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1381
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1382
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1383
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1384
#ifdef SIGTERM
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1385
    RETURN ( __MKSMALLINT(SIGTERM) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1386
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1387
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1388
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1389
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1390
!
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
sigTRAP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1393
    "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
  1394
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1395
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1396
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1397
#ifdef SIGTRAP
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1398
    RETURN ( __MKSMALLINT(SIGTRAP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1399
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1400
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1401
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1402
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1403
!
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
sigTSTP
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1406
    "return the signal number for SIGTSTP - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1407
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1408
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1409
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1410
#if defined(SIGTSTP)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1411
    RETURN ( __MKSMALLINT(SIGTSTP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1412
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1413
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1414
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1415
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1416
!
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
sigTTIN
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1419
    "return the signal number for SIGTTIN - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1420
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1421
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1422
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1423
#if defined(SIGTTIN)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1424
    RETURN ( __MKSMALLINT(SIGTTIN) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1425
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1426
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1427
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1428
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1429
!
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
sigTTOU
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1432
    "return the signal number for SIGTTOU - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1433
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1434
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1435
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1436
#if defined(SIGTTOU)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1437
    RETURN ( __MKSMALLINT(SIGTTOU) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1438
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1439
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1440
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1441
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1442
!
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
sigURG
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1445
    "return the signal number for SIGURG - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1446
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1447
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1448
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1449
#if defined(SIGURG)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1450
    RETURN ( __MKSMALLINT(SIGURG) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1451
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1452
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1453
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1454
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1455
!
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
sigUSR1
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1458
    "return the signal number for SIGUSR1 - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1459
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1460
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1461
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1462
#if defined(SIGUSR1)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1463
    RETURN ( __MKSMALLINT(SIGUSR1) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1464
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1465
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1466
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1467
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1468
!
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
sigUSR2
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1471
    "return the signal number for SIGUSR2 - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1472
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1473
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1474
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1475
#if defined(SIGUSR2)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1476
    RETURN ( __MKSMALLINT(SIGUSR2) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1477
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1478
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1479
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1480
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1481
!
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
sigVTALRM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1484
    "return the signal number for SIGVTALRM - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1485
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1486
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1487
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1488
#if defined(SIGVTALRM)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1489
    RETURN ( __MKSMALLINT(SIGVTALRM) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1490
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1491
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1492
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1493
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1494
!
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
sigWINCH
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1497
    "return the signal number for SIGWINCH - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1498
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1499
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1500
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1501
#if defined(SIGWINCH)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1502
    RETURN ( __MKSMALLINT(SIGWINCH) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1503
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1504
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1505
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1506
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1507
!
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
sigXCPU
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1510
    "return the signal number for SIGXCPU - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1511
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1512
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1513
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1514
#if defined(SIGXCPU)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1515
    RETURN ( __MKSMALLINT(SIGXCPU) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1516
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1517
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1518
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1519
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1520
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1521
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1522
sigXFSZ
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1523
    "return the signal number for SIGXFSZ - 0 if not supported
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1524
     (the numeric value is not the same across unix-systems)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1525
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1526
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1527
#if defined(SIGXFSZ)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1528
    RETURN ( __MKSMALLINT(SIGXFSZ) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1529
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1530
    RETURN ( __MKSMALLINT(0) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1531
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1532
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1533
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1534
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  1535
!OperatingSystem class methodsFor:'Signal constants'!
540
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1536
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1537
accessDeniedErrorSignal
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1538
    "return the signal raised when a (file-) access is denied."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1539
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1540
    ^ AccessDeniedErrorSignal
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1541
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1542
540
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1543
errorSignal
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  1544
    "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
  1545
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1546
    ^ ErrorSignal
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  1547
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  1548
    "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
  1549
!
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1550
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1551
fileNotFoundErrorSignal
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1552
    "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
  1553
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1554
    ^ FileNotFoundErrorSignal
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1555
! !
c34cd0a2fd5f OS signals added (more to come)
Claus Gittinger <cg@exept.de>
parents: 535
diff changeset
  1556
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  1557
!OperatingSystem class methodsFor:'error messages'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1558
1153
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1559
clearLastErrorNumber
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1560
    "return the last errors number.
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1561
     See also: #lastErrorSymbol and #lastErrorString.
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1562
     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
  1563
	     environment - this interface will change."
1153
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1564
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1565
    LastErrorNumber := nil.
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1566
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1567
     "
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1568
      OperatingSystem clearLastErrorNumber
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1569
     "
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1570
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1571
    "Created: 12.4.1996 / 09:28:58 / stefan"
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1572
    "Modified: 12.4.1996 / 09:38:51 / stefan"
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1573
!
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  1574
85
claus
parents: 77
diff changeset
  1575
currentErrorNumber
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1576
    "returns the OS's last error nr (i.e. the value of errno).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1577
     Notice, that the value of this flag is only valid immediately
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1578
     after the error occurred - it gets updated with every other
85
claus
parents: 77
diff changeset
  1579
     request to the OS.
claus
parents: 77
diff changeset
  1580
     Use lastErrorNumber - currentErrorNumber is invalidated by
claus
parents: 77
diff changeset
  1581
     many, many internal calls."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1582
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1583
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1584
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  1585
     RETURN ( __MKSMALLINT(errno) );
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1586
%}
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  1587
     "
85
claus
parents: 77
diff changeset
  1588
      OperatingSystem currentErrorNumber
claus
parents: 77
diff changeset
  1589
     "
claus
parents: 77
diff changeset
  1590
!
claus
parents: 77
diff changeset
  1591
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1592
errorNumberFor:aSymbol
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1593
    "given a symbolic error, return the numeric;
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1594
     (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
  1595
     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
  1596
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1597
%{   /* NOCONTEXT */
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1598
    OBJ sym = aSymbol;
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1599
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1600
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1601
     * POSIX errnos - these should be defined
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1602
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1603
#ifdef EPERM
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1604
    if (sym == @symbol(EPERM)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1605
	RETURN ( __MKSMALLINT(EPERM) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1606
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1607
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1608
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1609
#ifdef ENOENT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1610
    if (sym == @symbol(ENOENT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1611
	RETURN ( __MKSMALLINT(ENOENT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1612
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1613
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1614
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1615
#ifdef ESRCH
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1616
    if (sym == @symbol(ESRCH)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1617
	RETURN ( __MKSMALLINT(ESRCH) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1618
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1619
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1620
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1621
#ifdef EINTR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1622
    if (sym == @symbol(EINTR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1623
	RETURN ( __MKSMALLINT(EINTR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1624
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1625
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1626
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1627
#ifdef EIO
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1628
    if (sym == @symbol(EIO)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1629
	RETURN ( __MKSMALLINT(EIO) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1630
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1631
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1632
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1633
#ifdef ENXIO
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1634
    if (sym == @symbol(ENXIO)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1635
	RETURN ( __MKSMALLINT(ENXIO) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1636
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1637
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1638
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1639
#ifdef E2BIG
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1640
    if (sym == @symbol(E2BIG)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1641
	RETURN ( __MKSMALLINT(E2BIG) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1642
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1643
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1644
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1645
#ifdef ENOEXEC
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1646
    if (sym == @symbol(ENOEXEC)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1647
	RETURN ( __MKSMALLINT(ENOEXEC) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1648
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1649
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1650
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1651
#ifdef EBADF
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1652
    if (sym == @symbol(EBADF)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1653
	RETURN ( __MKSMALLINT(EBADF) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1654
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1655
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1656
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1657
#ifdef ECHILD
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1658
    if (sym == @symbol(ECHILD)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1659
	RETURN ( __MKSMALLINT(ECHILD) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1660
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1661
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1662
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1663
#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
  1664
    if (sym == @symbol(EAGAIN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1665
	RETURN ( __MKSMALLINT(EAGAIN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1666
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1667
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1668
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1669
#ifdef ENOMEM
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1670
    if (sym == @symbol(ENOMEM)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1671
	RETURN ( __MKSMALLINT(ENOMEM) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1672
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1673
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1674
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1675
#ifdef EACCES
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1676
    if (sym == @symbol(EACCES)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1677
	RETURN ( __MKSMALLINT(EACCES) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1678
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1679
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1680
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1681
#ifdef EFAULT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1682
    if (sym == @symbol(EFAULT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1683
	RETURN ( __MKSMALLINT(EFAULT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1684
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1685
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1686
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1687
#ifdef EBUSY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1688
    if (sym == @symbol(EBUSY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1689
	RETURN ( __MKSMALLINT(EBUSY) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1690
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1691
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1692
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1693
#ifdef EXDEV
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1694
    if (sym == @symbol(EXDEV)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1695
	RETURN ( __MKSMALLINT(EXDEV) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1696
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1697
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1698
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1699
#ifdef ENODEV
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1700
    if (sym == @symbol(ENODEV)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1701
	RETURN ( __MKSMALLINT(ENODEV) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1702
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1703
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1704
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1705
#ifdef ENOTDIR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1706
    if (sym == @symbol(ENOTDIR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1707
	RETURN ( __MKSMALLINT(ENOTDIR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1708
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1709
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1710
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1711
#ifdef EISDIR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1712
    if (sym == @symbol(EISDIR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1713
	RETURN ( __MKSMALLINT(EISDIR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1714
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1715
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1716
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1717
#ifdef EINVAL
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1718
    if (sym == @symbol(EINVAL)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1719
	RETURN ( __MKSMALLINT(EINVAL) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1720
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1721
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1722
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1723
#ifdef ENFILE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1724
    if (sym == @symbol(ENFILE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1725
	RETURN ( __MKSMALLINT(ENFILE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1726
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1727
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1728
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1729
#ifdef EMFILE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1730
    if (sym == @symbol(EMFILE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1731
	RETURN ( __MKSMALLINT(EMFILE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1732
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1733
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1734
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1735
#ifdef ENOTTY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1736
    if (sym == @symbol(ENOTTY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1737
	RETURN ( __MKSMALLINT(ENOTTY) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1738
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1739
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1740
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1741
#ifdef EFBIG
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1742
    if (sym == @symbol(EFBIG)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1743
	RETURN ( __MKSMALLINT(EFBIG) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1744
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1745
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1746
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1747
#ifdef ENOSPC
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1748
    if (sym == @symbol(ENOSPC)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1749
	RETURN ( __MKSMALLINT(ENOSPC) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1750
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1751
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1752
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1753
#ifdef ESPIPE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1754
    if (sym == @symbol(ESPIPE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1755
	RETURN ( __MKSMALLINT(ESPIPE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1756
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1757
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1758
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1759
#ifdef EROFS
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1760
    if (sym == @symbol(EROFS)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1761
	RETURN ( __MKSMALLINT(EROFS) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1762
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1763
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1764
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1765
#ifdef EMLINK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1766
    if (sym == @symbol(EMLINK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1767
	RETURN ( __MKSMALLINT(EMLINK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1768
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1769
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1770
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1771
#ifdef EPIPE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1772
    if (sym == @symbol(EPIPE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1773
	RETURN ( __MKSMALLINT(EPIPE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1774
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1775
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1776
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1777
#ifdef EDOM
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1778
    if (sym == @symbol(EDOM)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1779
	RETURN ( __MKSMALLINT(EDOM) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1780
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1781
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1782
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1783
#ifdef ERANGE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1784
    if (sym == @symbol(ERANGE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1785
	RETURN ( __MKSMALLINT(ERANGE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1786
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1787
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1788
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1789
#ifdef EDEADLK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1790
    if (sym == @symbol(EDEADLK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1791
	RETURN ( __MKSMALLINT(EDEADLK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1792
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1793
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1794
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1795
#ifdef ENAMETOOLONG
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1796
    if (sym == @symbol(ENAMETOOLONG)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1797
	RETURN ( __MKSMALLINT(ENAMETOOLONG) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1798
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1799
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1800
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1801
#ifdef ENOLCK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1802
    if (sym == @symbol(ENOLCK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1803
	RETURN ( __MKSMALLINT(ENOLCK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1804
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1805
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1806
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1807
#ifdef ENOSYS
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1808
    if (sym == @symbol(ENOSYS)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1809
	RETURN ( __MKSMALLINT(ENOSYS) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1810
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1811
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1812
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1813
#ifdef ENOTEMPTY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1814
    if (sym == @symbol(ENOTEMPTY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1815
	RETURN ( __MKSMALLINT(ENOTEMPTY) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1818
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1819
#ifdef EEXIST
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1820
    if (sym == @symbol(EEXIST)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1821
	RETURN ( __MKSMALLINT(EEXIST) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1824
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1825
#ifdef EILSEQ
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1826
    if (sym == @symbol(EILSEQ)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1827
	RETURN ( __MKSMALLINT(EILSEQ) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1830
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
     * XPG3 errnos - defined on most systems
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1833
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1834
#ifdef ENOTBLK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1835
    if (sym == @symbol(ENOTBLK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1836
	RETURN ( __MKSMALLINT(ENOTBLK) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1839
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1840
#ifdef ETXTBSY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1841
    if (sym == @symbol(ETXTBSY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1842
	RETURN ( __MKSMALLINT(ETXTBSY) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1845
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1846
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1847
     * some others
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1848
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1849
#ifdef EWOULDBLOCK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1850
    if (sym == @symbol(EWOULDBLOCK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1851
	RETURN ( __MKSMALLINT(EWOULDBLOCK) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1854
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1855
#ifdef ENOMSG
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1856
    if (sym == @symbol(ENOMSG)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1857
	RETURN ( __MKSMALLINT(ENOMSG) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1860
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1861
#ifdef ELOOP
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1862
    if (sym == @symbol(ELOOP)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1863
	RETURN ( __MKSMALLINT(ELOOP) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1866
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1867
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1868
     * some stream errors
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1869
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1870
#ifdef ETIME
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1871
    if (sym == @symbol(ETIME)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1872
	RETURN ( __MKSMALLINT(ETIME) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1873
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1874
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1875
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1876
#ifdef ENOSR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1877
    if (sym == @symbol(ENOSR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1878
	RETURN ( __MKSMALLINT(ENOSR) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1879
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1880
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1881
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1882
#ifdef ENOSTR
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1883
    if (sym == @symbol(ENOSTR)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1884
	RETURN ( __MKSMALLINT(ENOSTR) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1887
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1888
#ifdef ECOMM
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1889
    if (sym == @symbol(ECOMM)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1890
	RETURN ( __MKSMALLINT(ECOMM) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1893
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1894
#ifdef EPROTO
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1895
    if (sym == @symbol(EPROTO)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1896
	RETURN ( __MKSMALLINT(EPROTO) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1899
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
     * nfs errors
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1902
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1903
#ifdef ESTALE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1904
    if (sym == @symbol(ESTALE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1905
	RETURN ( __MKSMALLINT(ESTALE) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1908
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1909
#ifdef EREMOTE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1910
    if (sym == @symbol(EREMOTE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1911
	RETURN ( __MKSMALLINT(EREMOTE) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1914
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1915
    /*
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1916
     * some networking errors
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1917
     */
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1918
#ifdef EINPROGRESS
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1919
    if (sym == @symbol(EINPROGRESS)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1920
	RETURN ( __MKSMALLINT(EINPROGRESS) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1921
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1922
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1923
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1924
#ifdef EALREADY
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1925
    if (sym == @symbol(EALREADY)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1926
	RETURN ( __MKSMALLINT(EALREADY) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1927
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1928
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1929
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1930
#ifdef ENOTSOCK
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1931
    if (sym == @symbol(ENOTSOCK)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1932
	RETURN ( __MKSMALLINT(ENOTSOCK) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1933
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1934
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1935
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1936
#ifdef EDESTADDRREQ
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1937
    if (sym == @symbol(EDESTADDRREQ)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1938
	RETURN ( __MKSMALLINT(EDESTADDRREQ) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1939
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1940
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1941
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1942
#ifdef EMSGSIZE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1943
    if (sym == @symbol(EMSGSIZE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1944
	RETURN ( __MKSMALLINT(EMSGSIZE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1945
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1946
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1947
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1948
#ifdef EPROTOTYPE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1949
    if (sym == @symbol(EPROTOTYPE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1950
	RETURN ( __MKSMALLINT(EPROTOTYPE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1951
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1952
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1953
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1954
#ifdef ENOPROTOOPT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1955
    if (sym == @symbol(ENOPROTOOPT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1956
	RETURN ( __MKSMALLINT(ENOPROTOOPT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1957
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1958
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1959
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1960
#ifdef EPROTONOSUPPORT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1961
    if (sym == @symbol(EPROTONOSUPPORT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1962
	RETURN ( __MKSMALLINT(EPROTONOSUPPORT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1963
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1964
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1965
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1966
#ifdef ESOCKTNOSUPPORT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1967
    if (sym == @symbol(ESOCKTNOSUPPORT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1968
	RETURN ( __MKSMALLINT(ESOCKTNOSUPPORT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1969
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1970
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1971
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1972
#ifdef EOPNOTSUPP
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1973
    if (sym == @symbol(EOPNOTSUPP)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1974
	RETURN ( __MKSMALLINT(EOPNOTSUPP) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1975
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1976
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1977
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1978
#ifdef EPFNOSUPPORT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1979
    if (sym == @symbol(EPFNOSUPPORT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1980
	RETURN ( __MKSMALLINT(EPFNOSUPPORT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1981
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1982
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1983
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1984
#ifdef EAFNOSUPPORT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1985
    if (sym == @symbol(EAFNOSUPPORT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1986
	RETURN ( __MKSMALLINT(EAFNOSUPPORT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1987
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1988
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1989
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1990
#ifdef EADDRINUSE
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1991
    if (sym == @symbol(EADDRINUSE)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1992
	RETURN ( __MKSMALLINT(EADDRINUSE) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1993
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1994
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1995
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1996
#ifdef EADDRNOTAVAIL
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1997
    if (sym == @symbol(EADDRNOTAVAIL)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1998
	RETURN ( __MKSMALLINT(EADDRNOTAVAIL) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  1999
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2000
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2001
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2002
#ifdef ETIMEDOUT
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2003
    if (sym == @symbol(ETIMEDOUT)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2004
	RETURN ( __MKSMALLINT(ETIMEDOUT) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2005
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2006
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2007
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2008
#ifdef ECONNREFUSED
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2009
    if (sym == @symbol(ECONNREFUSED)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2010
	RETURN ( __MKSMALLINT(ECONNREFUSED) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2011
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2012
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2013
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2014
#ifdef ENETDOWN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2015
    if (sym == @symbol(ENETDOWN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2016
	RETURN ( __MKSMALLINT(ENETDOWN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2017
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2018
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2019
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2020
#ifdef ENETUNREACH
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2021
    if (sym == @symbol(ENETUNREACH)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2022
	RETURN ( __MKSMALLINT(ENETUNREACH) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2023
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2024
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2025
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2026
#ifdef ENETRESET
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2027
    if (sym == @symbol(ENETRESET)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2028
	RETURN ( __MKSMALLINT(ENETRESET) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2029
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2030
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2031
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2032
#ifdef ECONNABORTED
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2033
    if (sym == @symbol(ECONNABORTED)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2034
	RETURN ( __MKSMALLINT(ECONNABORTED) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2035
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2036
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2037
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2038
#ifdef ECONNRESET
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2039
    if (sym == @symbol(ECONNRESET)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2040
	RETURN ( __MKSMALLINT(ECONNRESET) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2041
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2042
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2043
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2044
#ifdef EISCONN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2045
    if (sym == @symbol(EISCONN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2046
	RETURN ( __MKSMALLINT(EISCONN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2047
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2048
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2049
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2050
#ifdef ENOTCONN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2051
    if (sym == @symbol(ENOTCONN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2052
	RETURN ( __MKSMALLINT(ENOTCONN) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2053
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2054
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2055
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2056
#ifdef ESHUTDOWN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2057
    if (sym == @symbol(ESHUTDOWN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2058
	RETURN ( __MKSMALLINT(ESHUTDOWN) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2061
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2062
#ifdef EHOSTDOWN
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2063
    if (sym == @symbol(EHOSTDOWN)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2064
	RETURN ( __MKSMALLINT(EHOSTDOWN) );
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
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2067
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2068
#ifdef EHOSTUNREACH
1119
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2069
    if (sym == @symbol(EHOSTUNREACH)) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2070
	RETURN ( __MKSMALLINT(EHOSTUNREACH) );
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2071
    }
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2072
#endif
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2073
%}.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2074
    ^ -1
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2075
!
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2076
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2077
errorSymbolAndTextForNumber:errNr
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2078
    "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
  2079
     (as returned by a system call). 
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2080
     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
  2081
     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
  2082
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2083
    |sym text|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2084
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2085
%{
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2086
    /* claus:
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2087
     * I made this some primitive code, since errnos are not
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2088
     * standard across unixes
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2089
     */
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2090
    char *msg = "unknown error";
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2091
    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
  2092
    OBJ eno = errNr;
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2093
956d62a5656c compile seldom used methods with optSpace (is this a good idea ?)
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  2094
    if (__isSmallInteger(eno)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2095
	switch (__intVal(eno)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2096
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2097
	     * POSIX errnos - these should be defined
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2098
	     */
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2099
#ifdef EPERM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2100
	    case EPERM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2101
		msg = "Operation not permitted";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2102
		sym = @symbol(EPERM);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2103
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2104
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2105
#ifdef ENOENT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2106
	    case ENOENT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2107
		msg = "No such file or directory";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2108
		sym = @symbol(ENOENT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2109
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2110
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2111
#ifdef ESRCH
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2112
	    case ESRCH:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2113
		msg = "No such process";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2114
		sym = @symbol(ESRCH);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2115
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2116
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2117
#ifdef EINTR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2118
	    case EINTR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2119
		msg = "Interrupted system call";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2120
		sym = @symbol(EINTR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2121
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2122
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2123
#ifdef EIO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2124
	    case EIO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2125
		msg = "I/O error";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2126
		sym = @symbol(EIO);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2127
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2128
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2129
#ifdef ENXIO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2130
	    case ENXIO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2131
		msg = "No such device or address";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2132
		sym = @symbol(ENXIO);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2133
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2134
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2135
#ifdef E2BIG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2136
	    case E2BIG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2137
		msg = "Arg list too long";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2138
		sym = @symbol(E2BIG);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2139
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2140
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2141
#ifdef ENOEXEC
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2142
	    case ENOEXEC:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2143
		msg = "Exec format error";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2144
		sym = @symbol(ENOEXEC);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2145
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2146
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2147
#ifdef EBADF
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2148
	    case EBADF:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2149
		msg = "Bad file number";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2150
		sym = @symbol(EBADF);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2151
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2152
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2153
#ifdef ECHILD
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2154
	    case ECHILD:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2155
		msg = "No child processes";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2156
		sym = @symbol(ECHILD);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2157
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2158
#endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2159
#if !defined(EWOULDBLOCK) && defined(EAGAIN) && (EWOULDBLOCK != EAGAIN)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2160
	    case EAGAIN:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2161
		msg = "Try again";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2162
		sym = @symbol(EAGAIN);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2163
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2164
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2165
#ifdef ENOMEM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2166
	    case ENOMEM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2167
		msg = "Out of memory";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2168
		sym = @symbol(ENOMEM);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2169
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2170
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2171
#ifdef EACCES
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2172
	    case EACCES:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2173
		msg = "Permission denied";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2174
		sym = @symbol(EACCES);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2175
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2176
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2177
#ifdef EFAULT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2178
	    case EFAULT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2179
		msg = "Bad address";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2180
		sym = @symbol(EFAULT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2181
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2182
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2183
#ifdef EBUSY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2184
	    case EBUSY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2185
		msg = "Device or resource busy";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2186
		sym = @symbol(EBUSY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2187
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2188
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2189
#ifdef EEXIST
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2190
	    case EEXIST:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2191
		msg = "File exists";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2192
		sym = @symbol(EEXIST);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2193
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2194
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2195
#ifdef EXDEV
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2196
	    case EXDEV:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2197
		msg = "Cross-device link";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2198
		sym = @symbol(EXDEV);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2199
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2200
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2201
#ifdef ENODEV
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2202
	    case ENODEV:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2203
		msg = "No such device";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2204
		sym = @symbol(ENODEV);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2205
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2206
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2207
#ifdef ENOTDIR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2208
	    case ENOTDIR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2209
		msg = "Not a directory";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2210
		sym = @symbol(ENOTDIR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2211
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2212
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2213
#ifdef EISDIR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2214
	    case EISDIR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2215
		msg = "Is a directory";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2216
		sym = @symbol(EISDIR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2217
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2218
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2219
#ifdef EINVAL
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2220
	    case EINVAL:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2221
		msg = "Invalid argument";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2222
		sym = @symbol(EINVAL);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2223
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2224
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2225
#ifdef ENFILE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2226
	    case ENFILE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2227
		msg = "File table overflow";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2228
		sym = @symbol(ENFILE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2229
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2230
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2231
#ifdef EMFILE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2232
	    case EMFILE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2233
		msg = "Too many open files";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2234
		sym = @symbol(EMFILE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2235
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2236
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2237
#ifdef ENOTTY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2238
	    case ENOTTY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2239
		msg = "Not a typewriter";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2240
		sym = @symbol(ENOTTY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2241
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2242
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2243
#ifdef EFBIG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2244
	    case EFBIG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2245
		msg = "File too large";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2246
		sym = @symbol(EFBIG);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2247
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2248
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2249
#ifdef ENOSPC
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2250
	    case ENOSPC:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2251
		msg = "No space left on device";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2252
		sym = @symbol(ENOSPC);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2253
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2254
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2255
#ifdef ESPIPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2256
	    case ESPIPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2257
		msg = "Illegal seek";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2258
		sym = @symbol(ESPIPE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2259
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2260
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2261
#ifdef EROFS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2262
	    case EROFS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2263
		msg = "Read-only file system";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2264
		sym = @symbol(EROFS);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2265
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2266
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2267
#ifdef EMLINK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2268
	    case EMLINK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2269
		msg = "Too many links";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2270
		sym = @symbol(EMLINK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2271
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2272
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2273
#ifdef EPIPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2274
	    case EPIPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2275
		msg = "Broken pipe";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2276
		sym = @symbol(EPIPE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2277
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2278
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2279
#ifdef EDOM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2280
	    case EDOM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2281
		msg = "Math argument out of domain";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2282
		sym = @symbol(EDOM);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2283
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2284
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2285
#ifdef ERANGE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2286
	    case ERANGE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2287
		msg = "Math result not representable";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2288
		sym = @symbol(ERANGE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2289
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  2290
#endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2291
#ifdef EDEADLK
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  2292
# if EDEADLK != EWOULDBLOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2293
	    case EDEADLK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2294
		msg = "Resource deadlock would occur";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2295
		sym = @symbol(EDEADLK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2296
		break;
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  2297
# endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2298
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2299
#ifdef ENAMETOOLONG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2300
	    case ENAMETOOLONG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2301
		msg = "File name too long";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2302
		sym = @symbol(ENAMETOOLONG);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2303
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2304
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2305
#ifdef ENOLCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2306
	    case ENOLCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2307
		msg = "No record locks available";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2308
		sym = @symbol(ENOLCK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2309
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2310
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2311
#ifdef ENOSYS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2312
	    case ENOSYS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2313
		msg = "Function not implemented";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2314
		sym = @symbol(ENOSYS);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2315
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2316
#endif
359
claus
parents: 357
diff changeset
  2317
#if defined(ENOTEMPTY) && (ENOTEMPTY != EEXIST)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2318
	    case ENOTEMPTY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2319
		msg = "Directory not empty";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2320
		sym = @symbol(ENOTEMPTY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2321
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2322
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2323
#ifdef EILSEQ
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2324
	    case EILSEQ:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2325
		msg = "Illegal byte sequence";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2326
		sym = @symbol(EILSEQ);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2327
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2328
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2329
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2330
	     * XPG3 errnos - defined on most systems
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2331
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2332
#ifdef ENOTBLK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2333
	    case ENOTBLK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2334
		msg = "Block device required";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2335
		sym = @symbol(ENOTBLK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2336
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2337
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2338
#ifdef ETXTBSY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2339
	    case ETXTBSY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2340
		msg = "Text file busy";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2341
		sym = @symbol(ETXTBSY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2342
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2343
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2344
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2345
	     * some others
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2346
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2347
#ifdef EWOULDBLOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2348
	    case EWOULDBLOCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2349
		msg = "Operation would block";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2350
		sym = @symbol(EWOULDBLOCK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2351
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2352
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2353
#ifdef ENOMSG
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2354
	    case ENOMSG:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2355
		msg = "No message of desired type";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2356
		sym = @symbol(ENOMSG);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2357
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2358
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2359
#ifdef ELOOP
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2360
	    case ELOOP:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2361
		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
  2362
		sym = @symbol(ELOOP);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2363
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2364
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2365
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2366
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2367
	     * some stream errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2368
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2369
#ifdef ETIME
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2370
	    case ETIME:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2371
		msg = "Timer expired";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2372
		sym = @symbol(ETIME);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2373
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2374
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2375
#ifdef ENOSR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2376
	    case ENOSR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2377
		msg = "Out of streams resources";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2378
		sym = @symbol(ENOSR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2379
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2380
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2381
#ifdef ENOSTR
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2382
	    case ENOSTR:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2383
		msg = "Device not a stream";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2384
		sym = @symbol(ENOSTR);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2385
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2386
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2387
#ifdef ECOMM
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2388
	    case ECOMM:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2389
		msg = "Communication error on send";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2390
		sym = @symbol(ECOMM);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2391
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2392
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2393
#ifdef EPROTO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2394
	    case EPROTO:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2395
		msg = "Protocol error";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2396
		sym = @symbol(EPROTO);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2397
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2398
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2399
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2400
	     * nfs errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2401
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2402
#ifdef ESTALE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2403
	    case ESTALE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2404
		msg = "Stale NFS file handle";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2405
		sym = @symbol(ESTALE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2406
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2407
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2408
#ifdef EREMOTE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2409
	    case EREMOTE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2410
		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
  2411
		sym = @symbol(EREMOTE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2412
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2413
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2414
	    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2415
	     * some networking errors
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2416
	     */
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2417
#ifdef EINPROGRESS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2418
	    case EINPROGRESS:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2419
		msg = "Operation now in progress";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2420
		sym = @symbol(EINPROGRESS);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2421
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2422
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2423
#ifdef EALREADY
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2424
	    case EALREADY:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2425
		msg = "Operation already in progress";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2426
		sym = @symbol(EALREADY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2427
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2428
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2429
#ifdef ENOTSOCK
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2430
	    case ENOTSOCK:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2431
		msg = "Socket operation on non-socket";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2432
		sym = @symbol(ENOTSOCK);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2433
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2434
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2435
#ifdef EDESTADDRREQ
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2436
	    case EDESTADDRREQ:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2437
		msg = "Destination address required";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2438
		sym = @symbol(EDESTADDRREQ);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2439
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2440
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2441
#ifdef EMSGSIZE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2442
	    case EMSGSIZE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2443
		msg = "Message too long";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2444
		sym = @symbol(EMSGSIZE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2445
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2446
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2447
#ifdef EPROTOTYPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2448
	    case EPROTOTYPE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2449
		msg = "Protocol wrong type for socket";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2450
		sym = @symbol(EPROTOTYPE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2451
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2452
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2453
#ifdef ENOPROTOOPT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2454
	    case ENOPROTOOPT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2455
		msg = "Protocol not available";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2456
		sym = @symbol(ENOPROTOOPT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2457
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2458
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2459
#ifdef EPROTONOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2460
	    case EPROTONOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2461
		msg = "Protocol not supported";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2462
		sym = @symbol(EPROTONOSUPPORT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2463
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2464
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2465
#ifdef ESOCKTNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2466
	    case ESOCKTNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2467
		msg = "Socket type not supported";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2468
		sym = @symbol(ESOCKTNOSUPPORT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2469
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2470
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2471
#ifdef EOPNOTSUPP
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2472
	    case EOPNOTSUPP:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2473
		msg = "Operation not supported on socket";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2474
		sym = @symbol(EOPNOTSUPP);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2475
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2476
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2477
#ifdef EPFNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2478
	    case EPFNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2479
		msg = "Protocol family not supported";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2480
		sym = @symbol(EPFNOSUPPORT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2481
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2482
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2483
#ifdef EAFNOSUPPORT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2484
	    case EAFNOSUPPORT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2485
		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
  2486
		sym = @symbol(EAFNOSUPPORT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2487
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2488
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2489
#ifdef EADDRINUSE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2490
	    case EADDRINUSE:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2491
		msg = "Address already in use";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2492
		sym = @symbol(EADDRINUSE);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2493
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2494
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2495
#ifdef EADDRNOTAVAIL
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2496
	    case EADDRNOTAVAIL:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2497
		msg = "Can\'t assign requested address";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2498
		sym = @symbol(EADDRNOTAVAIL);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2499
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2500
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2501
#ifdef ETIMEDOUT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2502
	    case ETIMEDOUT:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2503
		msg = "Connection timed out";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2504
		sym = @symbol(ETIMEDOUT);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2505
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2506
#endif
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2507
#ifdef ECONNREFUSED
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2508
	    case ECONNREFUSED:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2509
		msg = "Connection refused";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2510
		sym = @symbol(ECONNREFUSED);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2511
		break;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2512
#endif
362
claus
parents: 359
diff changeset
  2513
#ifdef ENETDOWN
claus
parents: 359
diff changeset
  2514
	    case ENETDOWN:
claus
parents: 359
diff changeset
  2515
		msg = "Network is down";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2516
		sym = @symbol(ENETDOWN);
362
claus
parents: 359
diff changeset
  2517
		break;
claus
parents: 359
diff changeset
  2518
#endif
claus
parents: 359
diff changeset
  2519
#ifdef ENETUNREACH
claus
parents: 359
diff changeset
  2520
	    case ENETUNREACH:
claus
parents: 359
diff changeset
  2521
		msg = "Network is unreachable";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2522
		sym = @symbol(ENETUNREACH);
362
claus
parents: 359
diff changeset
  2523
		break;
claus
parents: 359
diff changeset
  2524
#endif
claus
parents: 359
diff changeset
  2525
#ifdef ENETRESET
claus
parents: 359
diff changeset
  2526
	    case ENETRESET:
claus
parents: 359
diff changeset
  2527
		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
  2528
		sym = @symbol(ENETRESET);
362
claus
parents: 359
diff changeset
  2529
		break;
claus
parents: 359
diff changeset
  2530
#endif
claus
parents: 359
diff changeset
  2531
#ifdef ECONNABORTED
claus
parents: 359
diff changeset
  2532
	    case ECONNABORTED:
claus
parents: 359
diff changeset
  2533
		msg = "Software caused connection abort";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2534
		sym = @symbol(ECONNABORTED);
362
claus
parents: 359
diff changeset
  2535
		break;
claus
parents: 359
diff changeset
  2536
#endif
claus
parents: 359
diff changeset
  2537
#ifdef ECONNRESET
claus
parents: 359
diff changeset
  2538
	    case ECONNRESET:
claus
parents: 359
diff changeset
  2539
		msg = "Connection reset by peer";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2540
		sym = @symbol(ECONNRESET);
362
claus
parents: 359
diff changeset
  2541
		break;
claus
parents: 359
diff changeset
  2542
#endif
claus
parents: 359
diff changeset
  2543
#ifdef EISCONN
claus
parents: 359
diff changeset
  2544
	    case EISCONN:
claus
parents: 359
diff changeset
  2545
		msg = "Socket is already connected";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2546
		sym = @symbol(EISCONN);
362
claus
parents: 359
diff changeset
  2547
		break;
claus
parents: 359
diff changeset
  2548
#endif
claus
parents: 359
diff changeset
  2549
#ifdef ENOTCONN
claus
parents: 359
diff changeset
  2550
	    case ENOTCONN:
claus
parents: 359
diff changeset
  2551
		msg = "Socket is not connected";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2552
		sym = @symbol(ENOTCONN);
362
claus
parents: 359
diff changeset
  2553
		break;
claus
parents: 359
diff changeset
  2554
#endif
claus
parents: 359
diff changeset
  2555
#ifdef ESHUTDOWN
claus
parents: 359
diff changeset
  2556
	    case ESHUTDOWN:
claus
parents: 359
diff changeset
  2557
		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
  2558
		sym = @symbol(ESHUTDOWN);
362
claus
parents: 359
diff changeset
  2559
		break;
claus
parents: 359
diff changeset
  2560
#endif
claus
parents: 359
diff changeset
  2561
#ifdef EHOSTDOWN
claus
parents: 359
diff changeset
  2562
	    case EHOSTDOWN:
claus
parents: 359
diff changeset
  2563
		msg = "Host is down";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2564
		sym = @symbol(EHOSTDOWN);
362
claus
parents: 359
diff changeset
  2565
		break;
claus
parents: 359
diff changeset
  2566
#endif
claus
parents: 359
diff changeset
  2567
#ifdef EHOSTUNREACH
claus
parents: 359
diff changeset
  2568
	    case EHOSTUNREACH:
claus
parents: 359
diff changeset
  2569
		msg = "No route to host";
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2570
		sym = @symbol(EHOSTUNREACH);
362
claus
parents: 359
diff changeset
  2571
		break;
claus
parents: 359
diff changeset
  2572
#endif
claus
parents: 359
diff changeset
  2573
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2574
	    default:
368
a3c21a89ec37 *** empty log message ***
claus
parents: 362
diff changeset
  2575
		{
809
5eef87c2907b e convenient macro for register saving (sparc only)
Claus Gittinger <cg@exept.de>
parents: 805
diff changeset
  2576
		    __BEGIN_PROTECT_REGISTERS__
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2577
		    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
  2578
		    __END_PROTECT_REGISTERS__
368
a3c21a89ec37 *** empty log message ***
claus
parents: 362
diff changeset
  2579
		}
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2580
		msg = buffer;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2581
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  2582
	}
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  2583
    }
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2584
    text = __MKSTRING(msg);
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2585
%}.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2586
    ^ Array with:sym with:text
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2587
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2588
    "
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2589
     OperatingSystem errorSymbolAndTextForNumber:4
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2590
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2591
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2592
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2593
errorSymbolForNumber:errNr
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2594
    "return a symbol for a unix errorNumber
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2595
     (as returned by a system call)."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2596
1153
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  2597
    ^ (self errorSymbolAndTextForNumber:errNr) at:1
1084
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
    "
1666
4797ec69fc53 comment
Claus Gittinger <cg@exept.de>
parents: 1654
diff changeset
  2600
     OperatingSystem errorSymbolForNumber:4
4797ec69fc53 comment
Claus Gittinger <cg@exept.de>
parents: 1654
diff changeset
  2601
     OperatingSystem errorSymbolForNumber:2
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2602
    "
1153
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  2603
8119975c55ce Fix errorSymbolForNumber, add clearLastErrorNumber.
Stefan Vogel <sv@exept.de>
parents: 1142
diff changeset
  2604
    "Modified: 12.4.1996 / 09:16:29 / stefan"
1666
4797ec69fc53 comment
Claus Gittinger <cg@exept.de>
parents: 1654
diff changeset
  2605
    "Modified: 13.9.1996 / 16:23:35 / cg"
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2606
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2607
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2608
errorTextForNumber:errNr
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2609
    "return a message string from a unix errorNumber 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2610
     (as returned by a system call). 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2611
     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
  2612
     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
  2613
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2614
    ^ (self errorSymbolAndTextForNumber:errNr) at:2
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2615
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2616
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2617
     OperatingSystem errorTextForNumber:4
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2618
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2619
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2620
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2621
lastErrorNumber
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2622
    "return the last errors number.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2623
     See also: #lastErrorSymbol and #lastErrorString.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2624
     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
  2625
	     environment - this interface will change."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2626
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2627
    ^ LastErrorNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2628
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2629
     "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2630
      OperatingSystem lastErrorNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2631
     "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2632
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2633
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2634
lastErrorString
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2635
    "return a message string describing the last error.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2636
     See also: #lastErrorNumber and #lastErrorSymbol.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2637
     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
  2638
	     environment - this interface will change."
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2639
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2640
    ^ self errorTextForNumber:LastErrorNumber
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2641
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2642
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2643
     OperatingSystem lastErrorString
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2644
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2645
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  2646
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2647
lastErrorSymbol
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2648
    "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
  2649
     See also: #lastErrorNumber and #lastErrorString.
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2650
     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
  2651
	     environment - this interface will change."
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2652
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2653
    ^ self errorSymbolForNumber:LastErrorNumber
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2654
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2655
    "
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2656
     OperatingSystem lastErrorSymbol
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  2657
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2658
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2659
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  2660
!OperatingSystem class methodsFor:'executing OS commands'!
616
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
canExecuteCommand:aCommandString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2663
    "return true, if the OS can execute aCommand."
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
    |cmd|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2666
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2667
    cmd := aCommandString asCollectionOfWords first.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2668
    ^ (self pathOfCommand:cmd) notNil
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
     OperatingSystem canExecuteCommand:'fooBar'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2672
     OperatingSystem canExecuteCommand:'ls'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2673
     OperatingSystem canExecuteCommand:'cvs'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2674
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2675
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2676
    "Created: 4.11.1995 / 19:13:54 / cg"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2677
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  2678
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2679
exec:aPath withArguments:argArray
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2680
    "execute the unix command specified by the argument, aPath, with
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2681
     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
  2682
     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
  2683
     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
  2684
     to another program."
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2685
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2686
    ^ 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
  2687
!
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2688
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2689
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
  2690
    "Internal combined fork & exec;
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2691
     If fork is false:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2692
	 execute the unix command specified by the argument, aPath, with
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2693
	 arguments in argArray (no arguments, if nil).
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2694
	 If successful, this method does not return and smalltalk is gone.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2695
	 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
  2696
     if its true:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2697
	for a child to do the above.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2698
	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
  2699
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2700
     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
  2701
	fdArray[1] = 15 -> use fd 15 as stdin.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2702
	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
  2703
	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
  2704
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  2705
     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
  2706
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2707
     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
  2708
	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
  2709
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2710
    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
  2711
	    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
  2712
	    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
  2713
	    read accesses."
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2714
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
#ifndef MSDOS_LIKE
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2717
    char **argv;
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2718
    int nargs, i, id;
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2719
    OBJ arg;
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2720
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2721
    if (__isString(aPath) && 
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2722
	((argArray == nil) || __isArray(argArray)) &&
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2723
	((fdArray == nil) || __isArray(fdArray)) &&
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2724
	((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
  2725
    ) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2726
	nargs = argArray == nil ? 0 : _arraySize(argArray);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2727
	argv = (char **) malloc(sizeof(char *) * (nargs + 1));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2728
	if (argv) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2729
	    for (i=0; i < nargs; i++) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2730
		arg = __ArrayInstPtr(argArray)->a_element[i];
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2731
		if (__isString(arg)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2732
		    argv[i] = (char *) __stringVal(arg);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2733
		} else {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2734
		    argv[i] = "";
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2735
		}
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
	    argv[i] = NULL;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2738
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2739
	    if (doFork == true) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2740
		int nfd, nclose;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2741
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2742
		nfd = fdArray == nil ? 0 : _arraySize(fdArray);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2743
		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
  2744
#ifdef HAS_VFORK
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2745
		id = vfork();
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2746
#else
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2747
		id = fork();
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2748
#endif
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2749
		if (id == 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2750
		    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2751
		    ** In child.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2752
		    ** first: dup filedescriptors
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2753
		    */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2754
		    for (i = 0; i < nfd; i++) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2755
			if (__isSmallInteger(__ArrayInstPtr(fdArray)->a_element[i]) &&
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2756
			    __intVal(__ArrayInstPtr(fdArray)->a_element[i]) != i
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2757
			) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2758
			    dup2(__intVal(__ArrayInstPtr(fdArray)->a_element[i]), i);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2759
			}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2760
		    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2761
		    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2762
		    ** second: close unused filedescriptors
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
		    for (i = 0; i < nfd; i++) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2765
			if (__ArrayInstPtr(fdArray)->a_element[i] == nil) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2766
			    close(i);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2767
			}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2768
		    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2769
		    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2770
		    ** third: close filedescriptors
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
		    for (i = 0; i < nclose; i++) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2773
			if (__isSmallInteger(__ArrayInstPtr(closeFdArray)->a_element[i])) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2774
			    close(__intVal(__ArrayInstPtr(closeFdArray)->a_element[i]));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2775
			}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2776
		    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2777
		    if (newPgrp == true) {
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2778
#if defined(_POSIX_JOB_CONTROL)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2779
			(void) setpgid(0, 0);
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2780
#else
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2781
#if defined(BSD)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2782
			(void) setpgrp(0);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2783
#endif
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2784
#endif
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
		    execv(__stringVal(aPath), argv);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2788
		    /* should not be reached */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2789
		    _exit(127);                 /* POSIX 2 compatible exit value */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2790
		}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2791
		/*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2792
		** In parent: succes or failure
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
		free(argv);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2795
		RETURN (__MKSMALLINT(id));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2796
	    } else {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2797
		execv(__stringVal(aPath), argv);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2798
		/* 
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2799
		 * should not be reached
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2800
		 * (well, it is, if you pass a wrong command-path)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2801
		 */
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2802
		free(argv);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2803
		RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2804
	    }
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2805
	}
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2806
    }
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2807
#endif
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2808
%}.
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
     path-argument not string
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2811
     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
  2812
     or malloc failed
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2813
     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
  2814
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2815
    ^ self primitiveFailed
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2816
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2817
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2818
     |id|
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2819
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2820
     id := OperatingSystem fork.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2821
     id == 0 ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2822
	"I am the child"
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2823
	OperatingSystem exec:'/bin/ls' withArguments:#('ls' '/tmp').
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2824
	"not reached"
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2825
     ]
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2826
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2827
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2828
     |id|
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2829
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2830
     id := OperatingSystem fork.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2831
     id == 0 ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2832
	"I am the child"
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2833
	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
  2834
	"not reached"
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2835
     ].
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2836
     id printNL.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2837
     (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
  2838
     'killing ...' printNL.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2839
     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
  2840
     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
  2841
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2842
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2843
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2844
exec:aPath withArguments:argArray fileDescriptors:fdArray fork:doFork
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2845
    "Internal combined fork & exec;
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2846
     If fork is false:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2847
	 execute the unix command specified by the argument, aPath, with
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2848
	 arguments in argArray (no arguments, if nil).
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2849
	 If successful, this method does not return and smalltalk is gone.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2850
	 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
  2851
     if its true:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2852
	for a child to do the above.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2853
	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
  2854
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2855
     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
  2856
	fdArray[1] = 15 -> use fd 15 as stdin.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  2857
	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
  2858
	will be closed for the child.
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2859
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2860
    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
  2861
	    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
  2862
	    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
  2863
	    read accesses."
1076
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2864
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2865
    ^ 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
  2866
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  2867
    "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
  2868
!
0bfb3317718b backward compatibility: #exec:withArguments:fileDescriptors:fork:
Claus Gittinger <cg@exept.de>
parents: 1062
diff changeset
  2869
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2870
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
  2871
    "Internal combined fork & exec;
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2872
     If fork is false:
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2873
	 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
  2874
	 arguments in argArray (no arguments, if nil).
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2875
	 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
  2876
	 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
  2877
     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
  2878
	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
  2879
	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
  2880
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2881
    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
  2882
	    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
  2883
	    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
  2884
	    read accesses."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2885
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2886
%{
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2887
#ifndef MSDOS_LIKE
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2888
    char **argv;
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2889
    int nargs, i, id;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2890
    OBJ arg;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2891
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2892
    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
  2893
	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
  2894
	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
  2895
	if (argv) {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2896
	    for (i=0; i < nargs; i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2897
		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
  2898
		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
  2899
		    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
  2900
		} else {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2901
		    argv[i] = "";
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2902
		}
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2903
	    }
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2904
	    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
  2905
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2906
	    if (doFork == true) {
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2907
#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
  2908
		id = vfork();
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2909
#else
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  2910
		id = fork();
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2911
#endif
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2912
		if (id == 0) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2913
		    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
  2914
		    /* 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
  2915
		    _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
  2916
		}
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2917
		free(argv);
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2918
		RETURN (__MKSMALLINT(id));
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2919
	    } else {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  2920
		execv(__stringVal(aPath), argv);
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2921
		/* 
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2922
		 * should not be reached
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2923
		 * (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
  2924
		 */
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2925
		free(argv);
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  2926
		RETURN ( false );
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2927
	    }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2928
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2929
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2930
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2931
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2932
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2933
     path-argument not string
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2934
     or argArray not an array/nil
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2935
     or malloc failed
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  2936
     or not supported by OS
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2937
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2938
    ^ self primitiveFailed
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2939
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2940
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2941
     |id|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2942
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2943
     id := OperatingSystem fork.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2944
     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
  2945
	"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
  2946
	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
  2947
	"not reached"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2948
     ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2949
    "
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2950
    "
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2951
     |id|
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2952
771
1ad3f852e201 merged fork/exec into one, in order to use vfork
Claus Gittinger <cg@exept.de>
parents: 766
diff changeset
  2953
     id := OperatingSystem fork.
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2954
     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
  2955
	"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
  2956
	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
  2957
	"not reached"
670
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2958
     ].
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2959
     id printNL.
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2960
     (Delay forSeconds:3.5) wait.
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2961
     'killing ...' printNL.
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2962
     OperatingSystem sendSignal:(OperatingSystem sigTERM) to:id.
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2963
     OperatingSystem sendSignal:(OperatingSystem sigKILL) to:id
4d6d0c031711 startProcess: / killProcess: added
Claus Gittinger <cg@exept.de>
parents: 640
diff changeset
  2964
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2965
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2966
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2967
executeCommand:aCommandString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  2968
    "execute the unix command specified by the argument, aCommandString.
676
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  2969
     The commandString is passed to a shell for execution - see the description of
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  2970
     '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
  2971
     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
  2972
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  2973
     ^ self executeCommand:aCommandString onError:[:status| false]
2080
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2974
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2975
"/Old code:
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2976
"/
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2977
"/%{ 
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2978
"/    int status;
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2979
"/
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2980
"/    if (__isString(aCommandString)) {
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2981
"/        /*
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2982
"/         * ST/X provides a modified (fixed) implementation of the
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2983
"/         * system() libc-function, which is interruptable ...
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2984
"/         */
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2985
"/# ifdef WANT_SYSTEM
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2986
"/        status = mySystem((char *) __stringVal(aCommandString));
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2987
"/# else
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2988
"/        status = system((char *) __stringVal(aCommandString));
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2989
"/# endif
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2990
"/        OperatingSystem_LastExecStatus = __MKSMALLINT(status);
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2991
"/        if (status == 0) {
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2992
"/            RETURN ( true );
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2993
"/        }
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2994
"/        OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2995
"/        RETURN ( false );
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2996
"/    }
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2997
"/%}.
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2998
"/    "/
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  2999
"/    "/ invalid argument (non-string)
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  3000
"/    "/
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  3001
"/    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3002
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3003
    "
805
850571f0255f WANT_SYSTEM for unixware.
Stefan Vogel <sv@exept.de>
parents: 803
diff changeset
  3004
     OperatingSystem executeCommand:'sleep 30'. 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3005
     OperatingSystem executeCommand:'pwd'. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3006
     OperatingSystem executeCommand:'ls -l'. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3007
     OperatingSystem executeCommand:'invalidCommand'. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3008
     OperatingSystem executeCommand:'rm /tmp/foofoofoofoo'. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3009
    "
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3010
2080
d93d4af439d7 Use #executeCommand:onError: to implement #executeCommand:.
Stefan Vogel <sv@exept.de>
parents: 2073
diff changeset
  3011
    "Modified: 7.1.1997 / 19:29:55 / stefan"
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3012
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3013
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3014
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
  3015
    "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
  3016
     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
  3017
     'sh -c' in your UNIX manual.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3018
     Return true if successful.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3019
     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
  3020
     as argument."
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 exitStatus sema|
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3023
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3024
    sema := Semaphore new.
2262
4c4d810f006f semaphore names
Claus Gittinger <cg@exept.de>
parents: 2252
diff changeset
  3025
    sema name:'Unix command wait'.
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3026
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 := self 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3029
		startProcess:aCommandString
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3030
		inputFrom:anExternalInStream 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3031
		outputTo:anExternalOutStream 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3032
		errorTo:anExternalErrStream.
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
	pid > 0 ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3035
	    Processor monitorPid:pid action:[:status |
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3036
		status stillAlive ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3037
		    exitStatus := status.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3038
		    sema signal
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3039
		].
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
	    sema wait.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3042
	] ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3043
	    exitStatus := OSProcessStatus processCreationFailure.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3044
	].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3045
    ] valueUninterruptably.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3046
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3047
    exitStatus success ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3048
	^ aBlock value:exitStatus
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3049
    ].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3050
    ^ true.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3051
!
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3052
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3053
executeCommand:aCommandString onError:aBlock
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3054
    "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
  3055
     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
  3056
     '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
  3057
     Return true if successful.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3058
     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
  3059
     as argument."
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3060
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3061
    |pid exitStatus sema|
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3062
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3063
    sema := Semaphore new.
2262
4c4d810f006f semaphore names
Claus Gittinger <cg@exept.de>
parents: 2252
diff changeset
  3064
    sema name:'Unix command wait'.
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3065
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3066
    [
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3067
	pid := self startProcess:aCommandString.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3068
	pid > 0 ifTrue:[
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3069
	    Processor monitorPid:pid action:[:status |
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3070
		status stillAlive ifFalse:[
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3071
		    exitStatus := status.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3072
		    sema signal
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3073
		].
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3074
	    ].
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3075
	    sema wait.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3076
	] ifFalse:[
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3077
	    exitStatus := OSProcessStatus processCreationFailure.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3078
	].
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3079
    ] valueUninterruptably.
827
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
    exitStatus success ifFalse:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3082
	^ aBlock value:exitStatus
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3083
    ].
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3084
    ^ true.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3085
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
     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
  3089
     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
  3090
     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
  3091
     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
  3092
     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
  3093
    "
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3094
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  3095
    "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
  3096
    "Modified: 28.12.1995 / 15:25:48 / stefan"
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3097
    "Modified: 28.2.1996 / 21:41:23 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3098
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3099
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3100
fork
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3101
    "fork a new (HEAVY-weight) unix process.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3102
     Dont confuse this with Block>>fork, which creates 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3103
     lightweight smalltalk processes. This method will return
676
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  3104
     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
  3105
     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
  3106
676
4aa4417c103c commentary
Claus Gittinger <cg@exept.de>
parents: 675
diff changeset
  3107
     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
  3108
     #startProcess: and #executCommand: for higher level interfaces."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3109
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3110
%{  /* NOCONTEXT */
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3111
#ifndef MSDOS_LIKE
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3112
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3113
    int pid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3114
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3115
    pid = fork();
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3116
    RETURN ( __MKSMALLINT(pid) );
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3117
#endif
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3118
%}.
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3119
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3120
    "/ not supported by OS
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3121
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3122
    ^ self primitiveFailed
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3123
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3124
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3125
     |id|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3126
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3127
     id := OperatingSystem fork.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3128
     id == 0 ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3129
	OperatingSystem exit
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3130
     ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3131
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3132
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3133
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3134
getStatusOfProcess:aProcessId
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3135
    "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
  3136
     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
  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
#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
  3140
    int status;
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
    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
  3143
	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
  3144
	{
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3145
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3146
# 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
  3147
	    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
  3148
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3149
	    do {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3150
		__BEGIN_INTERRUPTABLE__
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3151
		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
  3152
		__END_INTERRUPTABLE__
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3153
		if (child < 0 && errno != EINTR) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  3154
		    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
  3155
		    status = -1;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3156
		    break;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3157
		}
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3158
	    } 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
  3159
# else
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3160
	    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
  3161
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3162
	    /* 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
  3163
	    do {
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3164
		__BEGIN_INTERRUPTABLE__
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3165
		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
  3166
		__END_INTERRUPTABLE__
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3167
	    } 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
  3168
	    if (child != pid) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  3169
		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
  3170
		status = -1;
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3171
	    }
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3172
# 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
  3173
	}
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3174
	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
  3175
    }
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3176
#endif
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3177
%}.
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3178
    self primitiveFailed
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  3179
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3180
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3181
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3182
pathOfCommand:aCommand
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3183
    "find where aCommand's executable file is"
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3184
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3185
    |path f|
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
    path := self getEnvironment:'PATH'.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3188
    path notNil ifTrue:[
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3189
	(path asCollectionOfSubstringsSeparatedBy:$:) do:[:path |
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3190
	    (f := (path asFilename construct:aCommand)) isExecutable ifTrue:[
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3191
		^  f pathName
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3192
	    ]
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3193
	].
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
    ^ nil
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
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3198
     OperatingSystem pathOfCommand:'fooBar'  
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3199
     OperatingSystem pathOfCommand:'ls'  
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3200
     OperatingSystem pathOfCommand:'cvs'  
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3201
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3202
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3203
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3204
startProcess:aCommandString
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3205
    "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
  3206
     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
  3207
     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
  3208
     'sh -c' in your UNIX manual.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3209
     Return the processId if successful, nil otherwise.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3210
     Use #waitForProcess: for synchronization and exec status return,
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3211
     or #killProcess: to stop it."
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3212
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3213
    ^ self 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3214
	exec:'/bin/sh' 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3215
	withArguments:(Array with:'sh' with:'-c' with:aCommandString)
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3216
	fork:true.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3217
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3218
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3219
     |pid|
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3220
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3221
     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
  3222
     (Delay forSeconds:3) wait.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3223
     OperatingSystem killProcess:pid.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  3224
    "
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3225
!
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3226
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3227
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
  3228
    "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
  3229
     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
  3230
     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
  3231
     'sh -c' in your UNIX manual.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3232
     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
  3233
     each may be nil.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3234
     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
  3235
     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
  3236
     or #killProcess: to stop it."
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
    |in out err|
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3239
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3240
    anExternalInStream notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3241
	in := anExternalInStream fileDescriptor.
1046
7b50e6c3147f nil input -> /dev/null
ca
parents: 1045
diff changeset
  3242
    ] ifFalse:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3243
	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
  3244
    ].
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3245
    anExternalOutStream notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3246
	out := anExternalOutStream fileDescriptor.
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3247
    ].
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3248
    anExternalErrStream notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3249
	err := anExternalErrStream fileDescriptor.
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
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3252
    ^ self 
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3253
	exec:'/bin/sh' 
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3254
	withArguments:(Array with:'sh' with:'-c' with:aCommandString)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3255
	fileDescriptors:(Array with:in with:out with:err)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3256
	fork:true.
1045
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
    "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
  3259
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3260
     OperatingSystem executeCommand:'ls -l > out'.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3261
    "
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3262
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3263
    "non-blocking (lower prio threads continue):
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3264
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3265
     |in out err pid sema|
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3266
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3267
     in := 'out' asFilename readStream.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3268
     out := 'out2' asFilename writeStream.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3269
     err := 'err' asFilename writeStream.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3270
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3271
     sema := Semaphore new.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3272
     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
  3273
     pid notNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3274
	 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
  3275
     ].
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3276
     in close.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3277
     out close.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3278
     err close.
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3279
     sema wait.
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1323
diff changeset
  3280
     Transcript showCR:'finished'
1045
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3281
    "
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3282
c7a38395a1d4 added user-friendly interface: #startProcess:inputFrom:outputTo:errorTo:
Claus Gittinger <cg@exept.de>
parents: 1040
diff changeset
  3283
    "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
  3284
    "Modified: 29.2.1996 / 12:49:14 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3285
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3286
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  3287
!OperatingSystem class methodsFor:'file access'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3288
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3289
closeFd:anInteger
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3290
    "low level close of a filedescriptor"
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3291
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
#if !defined(transputer) && !defined(MSDOS_LIKE)
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3294
     if (__isSmallInteger(anInteger)) {
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3295
	close(__intVal(anInteger));
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3296
	RETURN(self);
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3297
     }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3298
#endif
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3299
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3300
     ^ self primitiveFailed.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3301
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3302
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3303
createDirectory:newPathName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3304
    "create a new directory with name 'newPathName'.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3305
     Return true if successful, false if failed.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3306
     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
  3307
1497
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3308
    "/ if it already exists this is ok
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3309
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3310
    (self isDirectory:newPathName) ifTrue:[^ true].
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3311
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3312
    "/ since createDirectory is not used too often,
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3313
    "/  you'll forgive me using mkdir ...
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3314
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3315
    ^ self executeCommand:('mkdir 2>/dev/null ', newPathName)
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
    "
1497
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3318
     OperatingSystem createDirectory:'foo'  
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3319
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3320
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3321
    "Modified: 20.12.1995 / 11:24:13 / stefan"
1497
92f5370f3942 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1487
diff changeset
  3322
    "Modified: 29.6.1996 / 14:06:54 / cg"
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3323
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3324
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3325
linkFile:oldPath to:newPath
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3326
    "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
  3327
     Return true if successful, false if not."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3328
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3329
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3330
#ifndef MSDOS_LIKE
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3331
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3332
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3333
    if (__isString(oldPath) && __isString(newPath)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3334
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3335
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3336
	    ret = link((char *) __stringVal(oldPath), (char *) __stringVal(newPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3337
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3338
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3339
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3340
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3341
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3342
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3343
	RETURN (true);
1084
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
#endif
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
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3348
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3349
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3350
     OperatingSystem linkFile:'foo' to:'bar'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3351
    "
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
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3354
makePipe
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3355
    "make a pipe, return array with two filedescriptors on success,
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3356
     nil on failure.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3357
     This is a lowLevel entry, not for public use.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3358
     See ExternalStream>>makePipe for a more user-friendly, public interface."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3359
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3360
    |fd1 fd2|    
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3361
                
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3362
%{       
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  3363
#ifdef UNIX_LIKE
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3364
     int fds[2];
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3365
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3366
     if (pipe(fds) < 0) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3367
	@global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3368
	RETURN ( nil );
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3369
     }
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
     fd1 = __MKSMALLINT(fds[0]);
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3372
     fd2 = __MKSMALLINT(fds[1]);
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  3373
#endif
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3374
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3375
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3376
     ^ Array with:fd1 with:fd2.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3377
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3378
1132
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3379
recursiveCopyDirectory:sourcePathName to:destination
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3380
    "copy the directory named 'sourcePathName' and all contained files/directories to 'destination'.
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3381
     Return true if successful."
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3382
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3383
    ^ self executeCommand:('cp -rf ' , sourcePathName, ' ', destination)
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3384
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3385
    "Modified: 7.3.1996 / 15:26:30 / cg"
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3386
!
b09ce8542506 checkin from browser
ca
parents: 1119
diff changeset
  3387
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3388
recursiveCreateDirectory:dirName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3389
    "create a directory - with all parent dirs if needed.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3390
     Return true if successful, false otherwise. If false
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3391
     is returned, a partial created tree may be left,
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3392
     which is not cleaned-up here."
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
    self createDirectory:dirName.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3395
    (self isDirectory:dirName) ifFalse:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3396
	(self recursiveCreateDirectory:(self directoryNameOf:dirName)) ifFalse:[^ false].
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3397
	^ self createDirectory:dirName
1084
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
    ^ true
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
     OperatingSystem recursiveCreateDirectory:'foo/bar/baz'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3403
     OperatingSystem recursiveRemoveDirectory:'foo'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3404
    "
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
    "Modified: 7.3.1996 / 15:26:22 / cg"
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
recursiveRemoveDirectory:fullPathName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3410
    "remove the directory named 'fullPathName' and all contained files/directories.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3411
     Return true if successful."
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
    ^ self executeCommand:('rm -rf ' , fullPathName)
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
     OperatingSystem recursiveCreateDirectory:'foo/bar/baz'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3417
     OperatingSystem recursiveRemoveDirectory:'foo'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3418
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3419
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3420
    "Modified: 7.3.1996 / 15:26:30 / cg"
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3421
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3422
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3423
removeDirectory:fullPathName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3424
    "remove the directory named 'fullPathName'.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3425
     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
  3426
     This is a lowLevel entry - use Filename protocol for compatibility."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3427
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3428
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3429
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3430
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3431
    if (__isString(fullPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3432
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3433
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3434
	    ret = rmdir((char *) __stringVal(fullPathName));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3435
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3436
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3437
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3438
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3439
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3440
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3441
	RETURN (true);
1084
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
    ^ self primitiveFailed
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
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3447
     OperatingSystem createDirectory:'foo'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3448
     OperatingSystem removeDirectory:'foo'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3449
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3450
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3451
!
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
removeFile:fullPathName
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3454
    "remove the file named 'fullPathName'; return true if successful.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3455
     This is a lowLevel entry - use Filename protocol for compatibility."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3456
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3457
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3458
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3459
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3460
    if (__isString(fullPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3461
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3462
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3463
	    ret = unlink((char *) __stringVal(fullPathName));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3464
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3465
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3466
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3467
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3468
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3469
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3470
	RETURN (true);
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3471
    }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3472
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3473
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3474
!
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
renameFile:oldPath to:newPath
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3477
    "rename the file 'oldPath' to 'newPath'. 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3478
     Return true if successful, false if not"
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3479
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3480
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3481
    int ret, eno;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3482
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3483
    if (__isString(oldPath) && __isString(newPath)) {
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3484
#if defined(HAS_RENAME)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3485
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3486
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3487
	    ret = rename((char *) __stringVal(oldPath), (char *) __stringVal(newPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3488
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3489
	__END_INTERRUPTABLE__
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3490
#else
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3491
# ifndef MSDOS_LIKE
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3492
	ret = link((char *) __stringVal(oldPath), (char *) __stringVal(newPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3493
	if (ret >= 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3494
	    ret = unlink((char *) __stringVal(oldPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3495
	    if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3496
		eno = errno;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3497
		unlink((char *) __stringVal(newPath));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3498
		errno = eno;
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
	}
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3501
# endif
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3502
#endif
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3503
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3504
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3505
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3506
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3507
	RETURN (true);
1084
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
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3511
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3512
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3513
     OperatingSystem renameFile:'foo' to:'bar'
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3514
    "
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3515
!
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3516
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3517
truncateFile:aPathName to:newSize
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3518
    "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
  3519
     This may not be supported on all architectures.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3520
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3521
     This is a low-level entry - use Filename protocol."
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3522
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3523
%{
1623
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3524
#ifdef HAS_TRUNCATE
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3525
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3526
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3527
    if (__isString(aPathName)
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3528
     && __isSmallInteger(newSize)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3529
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3530
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3531
	    ret = truncate((char *) __stringVal(aPathName), __intVal(newSize));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3532
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3533
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3534
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3535
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3536
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3537
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3538
	RETURN (true);
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3539
    }
1623
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3540
#else
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3541
# ifdef HAS_FTRUNCATE
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3542
    int ret;
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3543
    int fd;
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3544
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3545
    if (__isString(aPathName)
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3546
     && __isSmallInteger(newSize)) {
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3547
	do {
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3548
	    fd = open((char *) __stringVal(aPathName), 2);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3549
	} while (fd < 0 && errno == EINTR);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3550
	if (fd < 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
	}
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3554
        
1623
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3555
	ret = ftruncate(fd, __intVal(newSize));
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3556
	close(fd);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3557
	if (ret < 0) {
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3558
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3559
	    RETURN ( false );
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3560
	} 
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3561
	RETURN (true);
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3562
    }
95009f9bfc18 use ftruncate if truncate is not available
Claus Gittinger <cg@exept.de>
parents: 1622
diff changeset
  3563
# endif /* using FTRUNCATE */
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3564
#endif
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3565
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3566
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3567
! !
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3568
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  3569
!OperatingSystem class methodsFor:'file access rights'!
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3570
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3571
accessMaskFor:aSymbol
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3572
    "return the access bits mask for numbers as returned by 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3573
     OperatingSystem>>accessModeOf:
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3574
     and expected by OperatingSystem>>changeAccessModeOf:to:.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3575
     Since these numbers are OS dependent, always use the mask
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3576
     (never hardcode 8rxxx into your code)."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3577
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3578
%{  /* NOCONTEXT */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3579
#   ifndef S_IRUSR
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3580
    /* posix systems should define these ... */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3581
#    define S_IRUSR 0400
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3582
#    define S_IWUSR 0200
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3583
#    define S_IXUSR 0100
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3584
#    define S_IRGRP 0040
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3585
#    define S_IWGRP 0020
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3586
#    define S_IXGRP 0010
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3587
#    define S_IROTH 0004
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3588
#    define S_IWOTH 0002
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3589
#    define S_IXOTH 0001
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3590
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3591
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3592
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3593
    if (aSymbol == @symbol(readUser)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3594
	RETURN ( __MKSMALLINT(S_IRUSR) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3595
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3596
    if (aSymbol == @symbol(writeUser)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3597
	RETURN ( __MKSMALLINT(S_IWUSR) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3598
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3599
    if (aSymbol == @symbol(executeUser)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3600
	RETURN ( __MKSMALLINT(S_IXUSR) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3601
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3602
    if (aSymbol == @symbol(readGroup)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3603
	RETURN ( __MKSMALLINT(S_IRGRP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3604
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3605
    if (aSymbol == @symbol(writeGroup)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3606
	RETURN ( __MKSMALLINT(S_IWGRP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3607
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3608
    if (aSymbol == @symbol(executeGroup)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3609
	RETURN ( __MKSMALLINT(S_IXGRP) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3610
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3611
    if (aSymbol == @symbol(readOthers)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3612
	RETURN ( __MKSMALLINT(S_IROTH) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3613
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3614
    if (aSymbol == @symbol(writeOthers)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3615
	RETURN ( __MKSMALLINT(S_IWOTH) );
616
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
    if (aSymbol == @symbol(executeOthers)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  3618
	RETURN ( __MKSMALLINT(S_IXOTH) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3619
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3620
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3621
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3622
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3623
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3624
     OperatingSystem accessMaskFor:#readUser
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3625
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3626
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  3627
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3628
accessModeOf:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3629
    "return a number representing access rights rwxrwxrwx for owner,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3630
     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
  3631
     Notice that the returned number is OS dependent - use the 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3632
     modeMasks as returned by OperatingSystem>>accessMaskFor:"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3633
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3634
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3635
     this could have been implemented as:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3636
	(self infoOf:aPathName) at:#mode
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3637
     but for huge directory searches the code below is faster
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3638
    "
345
claus
parents: 329
diff changeset
  3639
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3640
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3641
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3642
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3643
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3644
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3645
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3646
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3647
	    ret = stat((char *) __stringVal(aPathName), &buf);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3648
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3649
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3650
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3651
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3652
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3653
	    RETURN ( nil );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3654
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3655
	RETURN ( __MKSMALLINT(buf.st_mode & 0777) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3656
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3657
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  3658
   ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3659
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3660
   "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3661
    (OperatingSystem accessModeOf:'/') printStringRadix:8
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3662
   "
345
claus
parents: 329
diff changeset
  3663
!
claus
parents: 329
diff changeset
  3664
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3665
changeAccessModeOf:aPathName to:modeBits
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3666
    "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
  3667
     You should construct this mask using accessMaskFor, to be OS
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3668
     independent. Return true if changed, 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3669
     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
  3670
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  3671
%{
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3672
    int ret;
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3673
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3674
    if (__isString(aPathName) && __isSmallInteger(modeBits)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3675
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3676
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3677
	    ret = chmod((char *)__stringVal(aPathName), __intVal(modeBits));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3678
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3679
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3680
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3681
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3682
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3683
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  3684
	RETURN ( true );
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3685
    }
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3686
%}.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3687
    ^ self primitiveFailed
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3688
! !
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3689
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  3690
!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
  3691
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3692
lockFD:aFileDescriptor shared:isSharedReadLock blocking:blockIfLocked
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3693
   "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
  3694
    (such as returned by ExternalStream>>fileDescriptor).
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3695
    On some systems, only advisory locks are available -
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3696
    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
  3697
    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
  3698
    (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
  3699
    The isSharedReadLock argument (if true) specifies if multiple readers
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3700
    are to be allowed - if false, they are not.
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3701
    On some systems, all locks are non-exclusive locks.
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3702
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3703
    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
  3704
1616
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3705
    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
  3706
    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
  3707
    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
  3708
    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
  3709
    argument."
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3710
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3711
%{
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3712
    if (__isSmallInteger(aFileDescriptor)) {
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3713
	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
  3714
	int lockArg;
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3715
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3716
	/*
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3717
	 * claus: sigh - each one has a different interface ... 
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3718
	 */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3719
#if defined(F_SETLK)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3720
	{
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3721
	    /* 
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3722
	     * new fcntl(SETLK) interface;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3723
	     * available on SYSV4 and Linux
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
	    struct flock flock;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3726
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3727
	    if (isSharedReadLock == true) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3728
		flock.l_type = F_RDLCK;
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3729
	    } else {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3730
		flock.l_type = F_WRLCK;
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3731
	    }
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3732
	    flock.l_whence = 0;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3733
	    flock.l_start = 0;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3734
	    flock.l_len = 0;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3735
	    lockArg = F_SETLK;
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3736
# if defined(F_SETLKW)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3737
	    if (blockIfLocked == true) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3738
		lockArg = F_SETLKW;
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3739
	    }
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3740
# endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3741
	    if (fcntl(fd, lockArg, &flock) != -1) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3742
		RETURN (true);
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3743
	    }
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3744
	}
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3745
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3746
#else /* no F_SETLK available */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3747
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3748
# if defined(LOCK_EX) && defined(LOCK_UN)
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3749
	/* 
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3750
	 * BSD 4.3 advisory locks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3751
	 */
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3752
	lockArg = LOCK_EX;
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3753
#  if defined(LOCK_SH)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3754
	if (isSharedReadLock == true) {
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3755
	    lockArg = LOCK_SH
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3756
	}
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3757
#  endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3758
#  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
  3759
	if (blockIfLocked == false) {
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3760
	    lockArg |= LOCK_NB;
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3761
	}
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3762
#  endif
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3763
	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
  3764
	    RETURN (true);
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3765
	}
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3766
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3767
# else /* no flock available */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3768
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3769
#  if defined(F_LOCK) && defined(F_UNLOCK)
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3770
	/* 
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3771
	 * SYSV3 advisory locks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3772
	 */
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3773
	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
  3774
	    RETURN (true);
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3775
	}
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3776
#  endif
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3777
# endif
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3778
#endif
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
%}.
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3781
    ^ false
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3782
!
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3783
1616
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3784
supportsFileLocks
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3785
    "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
  3786
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3787
%{ /* NOCONTEXT */
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3788
#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
  3789
    RETURN (true);
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3790
#else
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3791
# 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
  3792
    RETURN (true);
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3793
# else
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3794
#  if defined(F_LOCK) && defined(F_UNLOCK)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3795
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3796
#  endif
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3797
# endif
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3798
#endif
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3799
%}.
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3800
    ^ false
1616
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3801
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3802
    "
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3803
     OperatingSystem supportsFileLocks
fa734ea238f8 type & include file.h on all systems
Claus Gittinger <cg@exept.de>
parents: 1615
diff changeset
  3804
    "
1617
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3805
!
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3806
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3807
supportsNonBlockingFileLocks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3808
    "return true, if the OS supports nonBlocking file locking
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3809
     (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
  3810
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3811
%{ /* NOCONTEXT */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3812
#if defined(F_SETLK) && defined(F_SETLKW)
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3813
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3814
#else
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3815
# 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
  3816
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3817
# endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3818
#endif
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
    ^ false
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3821
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3822
    "
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3823
     OperatingSystem supportsNonBlockingFileLocks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3824
    "
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3825
!
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3826
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3827
supportsSharedLocks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3828
    "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
  3829
     file locking."
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3830
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3831
%{ /* NOCONTEXT */
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3832
#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
  3833
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3834
#else
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3835
# 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
  3836
    RETURN (true);
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3837
# endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3838
#endif
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3839
%}.
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3840
    ^ false
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3841
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3842
    "
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3843
     OperatingSystem supportsNonBlockingFileLocks
9b72f5efb8cb added fcntl based file locking
Claus Gittinger <cg@exept.de>
parents: 1616
diff changeset
  3844
    "
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3845
!
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3846
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3847
unlockFD:aFileDescriptor
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3848
    "clear a file lock on the file represented by aFileDescriptor,
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3849
     which was previously aquired by #lockFD:.
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3850
     Return false, if the unlock failed 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3851
     (which may happens when a wrong fd is passed, 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3852
      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
  3853
     Notice, that not all OS's support file locks; 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3854
     on some, this may simply be a no-op."
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3855
     
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3856
%{
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3857
    if (__isSmallInteger(aFileDescriptor)) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3858
	int fd = __intVal(aFileDescriptor);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3859
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3860
	/*
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3861
	 * claus: sigh - each one has a different interface ...
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3862
	 */
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3863
#if defined(F_SETLK)
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3864
	{
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3865
	    /*
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3866
	     * new fcntl(SETLK) interface;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3867
	     * available on SYSV4 and Linux
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3868
	     */
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3869
	    struct flock flock;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3870
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3871
	    flock.l_type = F_UNLCK;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3872
	    flock.l_whence = 0;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3873
	    flock.l_start = 0;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3874
	    flock.l_len = 0;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3875
	    if (fcntl(fd, F_SETLK, &flock) != -1) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3876
		RETURN (true);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3877
	    }
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3878
	}
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3879
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3880
#else /* no F_SETLK available */
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3881
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3882
# if defined(LOCK_EX) && defined(LOCK_UN)
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3883
	/*
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3884
	 * BSD 4.3 advisory locks
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3885
	 */
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3886
	if (flock(fd, LOCK_UN) != -1) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3887
	    RETURN (true);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  3888
	}
1621
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3889
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3890
# else /* no flock available */
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
#  if defined(F_LOCK) && defined(F_UNLOCK)
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3893
	/* 
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3894
	 * SYSV3 advisory locks
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
	if (lockf(fd, F_UNLOCK, 0) != -1) {
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3897
	    RETURN (true);
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3898
	}
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3899
#  endif
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3900
# endif
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3901
#endif
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3902
    }
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3903
%}.
30620c379b35 file-lock example
Claus Gittinger <cg@exept.de>
parents: 1619
diff changeset
  3904
    ^ false
1615
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3905
! !
0dc932c45c67 added support for advisory file locks (on systems that support them)
Claus Gittinger <cg@exept.de>
parents: 1600
diff changeset
  3906
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  3907
!OperatingSystem class methodsFor:'file queries'!
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  3908
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3909
baseNameOf:aPathString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3910
    "return the baseName of the argument, aPathString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3911
     - thats the file/directory name without leading parent-dirs
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3912
     (i.e. OperatingSystem baseNameOf:'/usr/lib/st/file' -> 'file'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3913
       and OperatingSystem baseNameOf:'/usr/lib' -> lib).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3914
     This method does not check if the path is valid 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3915
     (i.e. if these directories really exist & is readable)."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3916
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3917
    |prev index sep|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3918
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3919
    sep := self fileSeparator.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3920
    ((aPathString size == 1) and:[(aPathString at:1) == sep]) ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3921
	^ aPathString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3922
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3923
    prev := 1.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3924
    [true] whileTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3925
	index := aPathString indexOf:sep startingAt:prev.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3926
	index == 0 ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3927
	    ^ aPathString copyFrom:prev
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3928
	].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3929
	prev := index + 1
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
     OperatingSystem baseNameOf:'/fee/foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3934
     OperatingSystem baseNameOf:'foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3935
     OperatingSystem baseNameOf:'../../foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3936
     OperatingSystem baseNameOf:'hello'
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
!
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
caseSensitiveFilenames
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3941
    "return true, if the OS has caseSensitive file naming.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3942
     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
  3943
     return true."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3944
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3945
    ^ true
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3946
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3947
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3948
compressPath:pathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3949
    "return the pathName compressed - that is, remove all ..-entries
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3950
     and . entries. This does not always (in case of symbolic links)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3951
     return the true pathName and is therefore used as a fallback
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3952
     if realPath and popen failed."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3953
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3954
    |names n "{ Class: SmallInteger }" |
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3955
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3956
    names := pathName 
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3957
		asCollectionOfSubstringsSeparatedBy:self fileSeparator.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3958
    names := names asOrderedCollection.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3959
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3960
     cut off initial double-slashes
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3961
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3962
    [names startsWith:#('' '')] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3963
	names removeFirst.
616
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
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3966
     cut off double-slashes at end
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3967
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3968
    [names endsWith:#('')] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3969
	names removeLast.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3970
    ].
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
     cut off current-dir at beginning
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3973
    "
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3974
    n := names size.
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3975
    [(n >= 2) and:[names startsWith:#('.')]] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3976
	names removeFirst.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3977
	n := n - 1.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3978
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3979
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3980
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3981
     cut off parent-dirs at end
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3982
    "
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3983
    [(n > 2) 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3984
     and:[(names endsWith:#('..'))
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  3985
     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
  3986
	names removeLast; removeLast.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3987
	n := n - 2.
616
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
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3990
    ^ names asStringWith:self fileSeparator 
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3991
		    from:1
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3992
		    to:n
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  3993
		    compressTabs:false final:nil 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3994
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3995
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3996
     OperatingSystem compressPath:'./..'    
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3997
     OperatingSystem compressPath:'/foo/bar/baz/..'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3998
     OperatingSystem compressPath:'foo/bar/baz/..'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  3999
     OperatingSystem compressPath:'foo/bar/baz/../'  
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4000
     OperatingSystem compressPath:'foo/bar/baz/..///' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4001
     OperatingSystem compressPath:'///foo/bar/baz/..///' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4002
    "
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4003
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4004
    "Modified: 1.11.1996 / 20:13:48 / cg"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4005
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4006
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4007
directoryNameOf:aPathString
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4008
    "return the directoryName of the argument, aPath
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4009
     - thats the name of the directory where aPath is
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4010
     (i.e. OperatingSystem directoryNameOf:'/usr/lib/st/file' -> '/usr/lib/st'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4011
       and OperatingSystem directoryNameOf:'/usr/lib' -> /usr').
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4012
     This method does not check if the path is valid
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4013
     (i.e. if these directories really exist & are readable)."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4014
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4015
    |last index sep sepString p|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4016
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4017
    sep := self fileSeparator.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4018
    sepString := sep asString.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4019
    (aPathString = sepString) ifTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4020
	"
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4021
	 the trivial '/' case
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4022
	"
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4023
	^ aPathString
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4024
    ].
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4025
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4026
    p := aPathString.
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4027
    [p endsWith:sepString] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4028
	(p = sepString) ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4029
	    ^ p
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4030
	].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4031
	p := p copyWithoutLast:1
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4032
    ].
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4033
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4034
    last := 1.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4035
    [true] whileTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4036
	index := p indexOf:sep startingAt:(last + 1).
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4037
	index == 0 ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4038
	    (last == 1) ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4039
		(p startsWith:sepString) ifTrue:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4040
		    ^ sepString
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
		^ '.'
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4043
	    ].
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4044
"
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4045
	    (p startsWith:sepString) ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4046
		(p startsWith:('..' , sepString)) ifFalse:[
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4047
		    ^ './' , (p copyTo:(last - 1))
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4048
		]
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4049
	    ].
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4050
"
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4051
	    ^ p copyTo:(last - 1)
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4052
	].
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4053
	last := index.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4054
    ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4055
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4056
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4057
     OperatingSystem directoryNameOf:'/fee/foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4058
     OperatingSystem directoryNameOf:'foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4059
     OperatingSystem directoryNameOf:'../../foo/bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4060
     OperatingSystem directoryNameOf:'bar'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4061
     OperatingSystem directoryNameOf:'/bar'
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4062
     OperatingSystem directoryNameOf:'/tmp' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4063
     OperatingSystem directoryNameOf:'/tmp///' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4064
     OperatingSystem directoryNameOf:'/bar///' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4065
     OperatingSystem directoryNameOf:'/bar/'  
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4066
     OperatingSystem directoryNameOf:'./bar'  
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4067
     OperatingSystem directoryNameOf:'/./bar'  
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4068
    "
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4069
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4070
    "Modified: 22.10.1996 / 18:53:47 / cg"
616
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
fileSeparator
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4074
    "return the character used to separate names in a path.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4075
     This character differs for MSDOS and other systems,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4076
     (but those are currently not supported - so this is some
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4077
      preparation for the future)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4078
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4079
    ^ $/
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4080
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4081
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4082
idOf:aPathName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4083
    "return the fileNumber (i.e. inode number) of a file.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4085
     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
  4086
     some dummy id will be returned.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4087
     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
  4088
     physically identical, even if found in different directories 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4089
     (i.e. if they are hardLinked)."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4090
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4091
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4092
     this could have been implemented as:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4093
	(self infoOf:aPathName) at:#id 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4094
     but for huge directory searches the code below is faster
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4095
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4096
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4097
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4098
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4099
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4100
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4101
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4102
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4103
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4104
	    ret = stat((char *) __stringVal(aPathName), &buf);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4105
	} while (ret < 0 && errno == EINTR);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4106
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4107
	if (ret >= 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4108
	    RETURN (__MKSMALLINT(buf.st_ino));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4109
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4110
	@global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4111
	RETURN (nil);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4112
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4113
%}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4114
.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4115
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4116
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4117
    "OperatingSystem idOf:'/'"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4118
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4119
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4120
infoOf:aPathName
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4121
    "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
  4122
     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
  4123
     the returned object) is:
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4124
	 type  - a symbol giving the files fileType
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4125
	 mode  - numeric access mode 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4126
	 uid   - owners user id
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4127
	 gid   - owners group id
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4128
	 size  - files size
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4129
	 id    - files number (i.e. inode number)
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4130
	 accessed      - last access time (as osTime-stamp)
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4131
	 modified      - last modification time (as osTime-stamp)
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4132
	 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
  4133
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4134
     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
  4135
     all of the information.
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4136
     Return nil if such a file does not exist. 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4137
     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
  4138
     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
  4139
    "
616
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
    |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
  4142
     atime mtime ctime|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4143
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4144
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4145
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4146
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4147
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4148
    if (__isString(aPathName)) {
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4149
	__BEGIN_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4150
	do {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4151
	    ret = stat((char *) __stringVal(aPathName), &buf);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4152
	} while ((ret < 0) && (errno == EINTR));
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4153
	__END_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4154
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4155
	if (ret < 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4156
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4157
	    RETURN ( nil );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4158
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4159
	switch (buf.st_mode & S_IFMT) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4160
	    case S_IFDIR:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4161
		type = @symbol(directory);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4162
		break;
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4163
	    case S_IFREG:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4164
		type = @symbol(regular);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4165
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4166
#ifdef S_IFCHR
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4167
	    case S_IFCHR:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4168
		type = @symbol(characterSpecial);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4169
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4170
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4171
#ifdef S_IFBLK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4172
	    case S_IFBLK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4173
		type = @symbol(blockSpecial);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4174
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4175
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4176
#ifdef S_IFLNK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4177
	    case S_IFLNK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4178
		type = @symbol(symbolicLink);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4179
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4180
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4181
#ifdef S_IFSOCK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4182
	    case S_IFSOCK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4183
		type = @symbol(socket);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4184
		break;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4185
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4186
#ifdef S_IFIFO
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4187
	    case S_IFIFO:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4188
		type = @symbol(fifo);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4189
		break;
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4190
#endif
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4191
	    default:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4192
		type = @symbol(unknown);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4193
		break;
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4194
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4195
	mode = __MKSMALLINT(buf.st_mode & 0777);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4196
	uid = __MKSMALLINT(buf.st_uid);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4197
	gid = __MKSMALLINT(buf.st_gid);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4198
	size = __MKSMALLINT(buf.st_size);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4199
	id = __MKSMALLINT(buf.st_ino);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4200
	atime = __MKUINT(buf.st_atime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4201
	mtime = __MKUINT(buf.st_mtime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4202
	ctime = __MKUINT(buf.st_ctime);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4203
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4204
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4205
    mode notNil ifTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4206
	^ FileStatusInfo
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4207
	    type:type 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4208
	    mode:mode 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4209
	    uid:uid 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4210
	    gid:gid 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4211
	    size:size 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4212
	    id:id 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4213
	    accessed:(AbsoluteTime fromOSTime:(atime * 1000)) 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4214
	    modified:(AbsoluteTime fromOSTime:(mtime * 1000)) 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4215
	    statusChanged:(AbsoluteTime fromOSTime:(ctime * 1000))
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4216
	    path:nil
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4217
   ].
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4218
   ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4219
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4220
   "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4221
    OperatingSystem infoOf:'/'
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4222
    (OperatingSystem infoOf:'/') uid
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4223
    (OperatingSystem infoOf:'/') accessed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4224
   "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4225
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4226
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4227
isDirectory:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4228
    "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
  4229
     (i.e. exists and is a directory).
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4230
     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
  4231
     if you need to check for this, use #linkInfo:."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4232
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4233
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4234
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4235
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4236
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4237
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4238
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4239
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4240
	    ret = stat((char *) __stringVal(aPathName), &buf);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4241
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4242
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4243
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4244
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4245
	    RETURN ( false );
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4246
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4247
	RETURN ( ((buf.st_mode & S_IFMT) == S_IFDIR) ? true : false);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4248
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4249
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4250
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4251
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4252
    "an alternative implementation would be:
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4253
	^ (self infoOf:aPathName) at:#type == #directory
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4254
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4255
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4256
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4257
isExecutable:aPathName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4258
    "return true, if the given file is executable.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4259
     For symbolic links, the pointed-to-file is checked."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4260
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4261
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4262
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4263
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4264
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4265
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4266
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4267
	    ret = access(__stringVal(aPathName), X_OK);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4268
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4269
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4270
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4271
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4272
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4273
	RETURN ( ((ret == 0) ? true : false) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4274
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4275
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4276
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4277
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4278
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4279
isReadable:aPathName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4280
    "return true, if the file/dir 'aPathName' is readable.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4281
     For symbolic links, the pointed-to-file is checked."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4282
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4283
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4284
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4285
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4286
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4287
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4288
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4289
	    ret = access(__stringVal(aPathName), R_OK);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4290
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4291
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4292
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4293
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4294
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4295
	RETURN ( ((ret == 0) ? true : false) );
616
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
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4298
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4299
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4300
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4301
isSymbolicLink:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4302
    "return true, if the given file is a symbolic link"
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
    ^ (self linkInfoOf:aPathName) notNil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4305
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4306
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4307
     OperatingSystem isSymbolicLink:'Make.proto'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4308
     OperatingSystem isSymbolicLink:'Makefile' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4309
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4310
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4311
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4312
isValidPath:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4313
    "return true, if 'aPathName' is a valid path name
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4314
     (i.e. the file or directory exists)"
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4315
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4316
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4317
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4318
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4319
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4320
    if (__isString(aPathName) || __isSymbol(aPathName) ) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4321
	__BEGIN_INTERRUPTABLE__
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4322
	do {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4323
	    ret = stat((char *) __stringVal(aPathName), &buf);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4324
	} while ((ret < 0) && (errno == EINTR));
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4325
	__END_INTERRUPTABLE__
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4326
	if (ret < 0) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4327
	    OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4328
	    RETURN (false);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4329
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4330
	RETURN ( ret ? false : true );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4331
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4332
%}.
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4333
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4334
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4335
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4336
isWritable:aPathName
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4337
    "return true, if the given file is writable.
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4338
     For symbolic links, the pointed-to-file is checked."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4339
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4340
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4341
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4342
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4343
    if (__isString(aPathName)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4344
	__BEGIN_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4345
	do {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4346
	    ret = access(__stringVal(aPathName), W_OK);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4347
	} while ((ret < 0) && (errno == EINTR));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4348
	__END_INTERRUPTABLE__
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4349
	if (ret < 0) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4350
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4351
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4352
	RETURN ( ((ret == 0) ? true : false) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4353
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4354
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4355
    ^ self primitiveFailed
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4356
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4357
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4358
linkInfoOf:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4359
    "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
  4360
     IFF aPathName is a symbolic link. 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4361
     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
  4362
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4363
     The contents of the dictionary gives info about the link itself,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4364
     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
  4365
     in case of a symbolic link."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4366
     
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4367
    |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
  4368
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4369
%{  /* STACK: 1200 */
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4370
#ifdef S_IFLNK
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4371
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4372
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4373
    char pathBuffer[1024];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4374
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4375
    if (__isString(aPathName)) {
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4376
	__BEGIN_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4377
	do {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4378
	    ret = lstat((char *) __stringVal(aPathName), &buf);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4379
	} while ((ret < 0) && (errno == EINTR));
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4380
	__END_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4381
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4382
	if (ret < 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4383
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4384
	    RETURN ( nil );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4385
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4386
	switch (buf.st_mode & S_IFMT) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4387
	    default:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4388
		RETURN ( nil ); /* not a symbolic link */
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4389
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4390
	    case S_IFLNK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4391
		type = @symbol(symbolicLink);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4392
		break;
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4393
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4394
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4395
	mode = __MKSMALLINT(buf.st_mode & 0777);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4396
	uid = __MKSMALLINT(buf.st_uid);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4397
	gid = __MKSMALLINT(buf.st_gid);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4398
	size = __MKSMALLINT(buf.st_size);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4399
	id = __MKSMALLINT(buf.st_ino);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4400
	atime = __MKUINT(buf.st_atime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4401
	mtime = __MKUINT(buf.st_mtime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4402
	ctime = __MKUINT(buf.st_ctime);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4403
	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
  4404
	    OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4405
	    RETURN ( nil );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4406
	} 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4407
	pathBuffer[ret] = '\0';  /* readlink does not 0-terminate */
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4408
	path = __MKSTRING(pathBuffer);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4409
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4410
#else
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4411
    RETURN ( nil );
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4412
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4413
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4414
    mode notNil ifTrue:[
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4415
	info := IdentityDictionary new.
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4416
	^ FileStatusInfo
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4417
	    type:type 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4418
	    mode:mode 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4419
	    uid:uid 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4420
	    gid:gid 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4421
	    size:size 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4422
	    id:id 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4423
	    accessed:(AbsoluteTime fromOSTime:(atime * 1000)) 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4424
	    modified:(AbsoluteTime fromOSTime:(mtime * 1000)) 
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4425
	    statusChanged:(AbsoluteTime fromOSTime:(ctime * 1000))
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4426
	    path:path
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4427
   ].
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4428
   ^ self primitiveFailed
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
   "
1084
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4431
    OperatingSystem infoOf:'Make.proto'  
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4432
    OperatingSystem linkInfoOf:'Make.proto' 
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4433
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4434
    OperatingSystem infoOf:'resources/motif.style'   
d6ffc9368fd5 set LastErrorNumber; category changes
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
  4435
    OperatingSystem linkInfoOf:'resources/motif.style' 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4436
   "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4437
!
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
parentDirectoryName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4440
    "return the name used to refer to parent directories.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4441
     In MSDOS, Unix and other systems this is '..', but maybe different
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4442
     for other systems.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4443
     (but those are currently not supported - so this is some
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4444
      preparation for the future)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4445
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4446
    ^ '..'
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4447
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4448
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4449
pathNameOf:pathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4450
    "return the pathName of the argument, aPathString,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4451
     - thats the full pathname of the directory, starting at '/'.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4452
     This method needs the path to be valid
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4453
     (i.e. all directories must exist, be readable and executable).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4454
     Notice: if symbolic links are involved, the result may look different
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4455
     from what you expect."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4456
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4457
    |p path command|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4458
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4459
    "some systems have a convenient function for this ..."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4460
    path := self primPathNameOf:pathName.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4461
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4462
    path isNil ifTrue:[
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4463
        (self isValidPath:pathName) ifFalse:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4464
            p := pathName.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4465
            [(p size > 1)
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4466
             and:[p endsWith:(self fileSeparator)]
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4467
            ] whileTrue:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4468
                p := p copyWithoutLast:1.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4469
            ].
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4470
            ^ p
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4471
        ].
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4472
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4473
        (SlowFork==true or:[ForkFailed==true]) ifFalse:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4474
            PipeStream openErrorSignal handle:[:ex |
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4475
                ForkFailed := true.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4476
                'OperatingSystem [warning]: cannot fork/popen' errorPrintCR.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4477
                ex return.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4478
            ] do:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4479
                "have to fall back ..."
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4480
                command := 'cd ' , pathName , '; pwd'.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4481
                p := PipeStream readingFrom:command.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4482
            ].
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4483
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4484
            (p isNil or:[p atEnd]) ifTrue:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4485
                ('OperatingSystem [warning]: PipeStream for <' , command , '> failed') errorPrintCR.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4486
            ] ifFalse:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4487
                path := p nextLine.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4488
                p close.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4489
            ].
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4490
        ].
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4491
        path isNil ifTrue:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4492
            path := pathName
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4493
        ].
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4494
        (SlowFork==true or:[ForkFailed==true]) ifTrue:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4495
            path := self compressPath:path
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4496
        ]
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4497
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4498
    ^ path.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4499
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4500
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4501
     OperatingSystem pathNameOf:'.'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4502
     OperatingSystem pathNameOf:'../smalltalk/../smalltalk'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4503
     OperatingSystem pathNameOf:'../../..'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4504
     OperatingSystem pathNameOf:'..'
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4505
     OperatingSystem pathNameOf:'/tmp////' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4506
     OperatingSystem pathNameOf:'/foo/bar' 
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4507
     OperatingSystem pathNameOf:'/foo/bar/'
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4508
     OperatingSystem pathNameOf:'/foo/bar//'
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4509
    "
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4510
1991
6dc27b78da3e Fix pathNameOf: for systems not supporting primPathNameOf:
Stefan Vogel <sv@exept.de>
parents: 1987
diff changeset
  4511
    "Modified: 29.11.1996 / 18:02:12 / stefan"
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  4512
    "Modified: 10.1.1997 / 19:10:42 / cg"
359
claus
parents: 357
diff changeset
  4513
!
claus
parents: 357
diff changeset
  4514
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4515
primPathNameOf:pathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4516
    "return the pathName of the argument, aPathString,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4517
     - thats the full pathname of the directory, starting at '/'.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4518
     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
  4519
     realPath library function.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4520
     Notice: if symbolic links are involved, the result may look different
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4521
     from what you expect."
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
    |path|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4524
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4525
    "some systems have a convenient function for this ..."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4526
%{  /* STACK: 16000 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4527
#ifdef HAS_REALPATH
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4528
    char nameBuffer[MAXPATHLEN + 1];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4529
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4530
    if (__isString(pathName)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4531
	if (realpath(__stringVal(pathName), nameBuffer)) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  4532
	    RETURN ( __MKSTRING(nameBuffer) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4533
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4534
    }
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4535
#else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4536
# ifdef WIN32
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4537
    char nameBuffer[MAXPATHLEN + 1];
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4538
    char *pFinal;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4539
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4540
    if (__isString(pathName)) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4541
      if (GetFullPathName(__stringVal(pathName), sizeof(nameBuffer),
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4542
			  nameBuffer, &pFinal)) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4543
	  RETURN ( __MKSTRING(nameBuffer) );
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4544
      }
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4545
    }
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4546
# endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4547
#endif
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
    ^ nil
359
claus
parents: 357
diff changeset
  4550
!
claus
parents: 357
diff changeset
  4551
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4552
timeOfLastAccess:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4553
    "return the time, when the file was last accessed.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4554
     For nonexistent files, nil is returned."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4555
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4556
    "could be implemented as:
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4557
	(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
  4558
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4559
    |osSeconds|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4560
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4561
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4562
    time_t mtime;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4563
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4564
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4565
    if (__isString(aPathName)) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4566
	__BEGIN_INTERRUPTABLE__
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4567
	do {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4568
	    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
  4569
	} while (ret < 0 && errno == EINTR);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4570
	__END_INTERRUPTABLE__
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4571
	if (ret < 0) {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4572
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4573
	    RETURN (nil);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4574
	}
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4575
	osSeconds = __MKUINT(buf.st_atime);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4576
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4577
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4578
    osSeconds notNil ifTrue:[^ AbsoluteTime fromOSTime:(osSeconds * 1000)].
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4579
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4580
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4581
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4582
     OperatingSystem timeOfLastAccess:'/'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4583
    "
359
claus
parents: 357
diff changeset
  4584
!
claus
parents: 357
diff changeset
  4585
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4586
timeOfLastChange:aPathName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4587
    "return the time, when the file was last changed. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4588
     For nonexistent files, nil is returned."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4589
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4590
    "could be implemented as:
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4591
	(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
  4592
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4593
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4594
    |osSeconds|
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4595
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4596
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4597
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4598
    time_t mtime;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4599
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4600
    if (__isString(aPathName)) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4601
	__BEGIN_INTERRUPTABLE__
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4602
	do {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4603
	    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
  4604
	} while (ret < 0 && errno == EINTR);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4605
	__END_INTERRUPTABLE__
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4606
	if (ret < 0) {
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4607
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4608
	    RETURN ( nil );
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4609
	}
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  4610
	osSeconds = __MKUINT(buf.st_mtime);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4611
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4612
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  4613
    osSeconds notNil ifTrue:[^ AbsoluteTime fromOSTime:(osSeconds * 1000)].
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4614
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4615
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4616
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4617
     OperatingSystem timeOfLastChange:'/'
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
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4621
typeOf:aPathName
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4622
    "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
  4623
     nil is returned.
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4624
     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
  4625
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4626
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4627
     this could have been implemented as:
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4628
	(self infoOf:aPathName) at:#type 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4629
     but for huge directory searches the code below is faster
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4630
    "
359
claus
parents: 357
diff changeset
  4631
1104
219a06128193 removed NOCONTEXT directives ...
Claus Gittinger <cg@exept.de>
parents: 1084
diff changeset
  4632
%{
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4633
    struct stat buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4634
    int ret;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4635
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4636
    if (__isString(aPathName)) {
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4637
	__BEGIN_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4638
	do {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4639
	    ret = stat((char *) __stringVal(aPathName), &buf);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4640
	} while (ret < 0 && errno == EINTR);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4641
	__END_INTERRUPTABLE__
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4642
	if (ret < 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4643
	    @global(LastErrorNumber) = __MKSMALLINT(errno);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4644
	    RETURN ( nil );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4645
	}
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4646
	switch (buf.st_mode & S_IFMT) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4647
	    case S_IFDIR:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4648
		RETURN ( @symbol(directory) );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4649
	    case S_IFREG:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4650
		RETURN ( @symbol(regular) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4651
#ifdef S_IFCHR
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4652
	    case S_IFCHR:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4653
		RETURN ( @symbol(characterSpecial) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4654
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4655
#ifdef S_IFBLK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4656
	    case S_IFBLK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4657
		RETURN ( @symbol(blockSpecial) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4658
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4659
#ifdef S_IFLNK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4660
	    case S_IFLNK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4661
		RETURN ( @symbol(symbolicLink) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4662
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4663
#ifdef S_IFSOCK
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4664
	    case S_IFSOCK:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4665
		RETURN ( @symbol(socket) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4666
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4667
#ifdef S_IFIFO
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4668
	    case S_IFIFO:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4669
		RETURN ( @symbol(fifo) );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4670
#endif
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4671
	    default:
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4672
		RETURN ( @symbol(unknown) );
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  4673
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4674
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4675
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4676
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4677
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4678
    "
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4679
     OperatingSystem typeOf:'/'   
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4680
     OperatingSystem typeOf:'.'   
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4681
     OperatingSystem typeOf:'Make.proto' 
1858
cbbc11c01e10 return a private object for fileInfo.
Claus Gittinger <cg@exept.de>
parents: 1845
diff changeset
  4682
     OperatingSystem typeOf:'resources/motif.style' 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4683
    "
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4684
! !
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4685
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  4686
!OperatingSystem class methodsFor:'interrupts & signals'!
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4687
10
claus
parents: 5
diff changeset
  4688
blockInterrupts
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4689
    "disable interrupt processing - if disabled, incoming
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4690
     interrupts will be registered and handled as soon as
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4691
     interrupts are reenabled by OperatingSystemclass>>unblockInterrupts.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4692
     Returns the previous blocking status i.e. true if interrupts
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4693
     where already blocked. You need this information for proper
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4694
     unblocking, in case of nested block/unblock calls."
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4695
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4696
%{  /* NOCONTEXT */
710
10d86ca4c4a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 704
diff changeset
  4697
    RETURN ( __BLOCKINTERRUPTS() );
10
claus
parents: 5
diff changeset
  4698
%}
claus
parents: 5
diff changeset
  4699
!
claus
parents: 5
diff changeset
  4700
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4701
defaultSignal:signalNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4702
    "revert to the default action on arrival of a (Unix-)signal.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4703
     Dont confuse Unix signals with smalltalk signals.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4704
     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
  4705
     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
  4706
     default for SIGQUIT (^ \) is to dump core.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4707
     Also, NOTICE that signal numbers are not portable between unix
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4708
     systems - use OperatingSystem sigXXX to get the numeric value for
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4709
     a signal."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4710
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4711
%{  /* NOCONTEXT */
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
    if (__isSmallInteger(signalNumber)) {
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4714
#ifdef SIG_DFL
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4715
	signal(__intVal(signalNumber), SIG_DFL);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4716
	RETURN (self);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4717
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4718
    }
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
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4721
     this error is triggered on non-integer argument
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4722
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4723
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4724
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4725
    "you better save a snapshot image before trying this ..."
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
     'if you hit ^C now, Smalltalk will exit immediately' printNewline.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4728
     OperatingSystem defaultSignal:(OperatingSystem sigINT).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4729
     1 to:1000000 do:[:i| ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4730
     OperatingSystem enableSignal:(OperatingSystem sigINT).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4731
     'normal ^C handling again.' printNewline
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4732
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4733
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4734
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4735
disableChildSignalInterrupts
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4736
    "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
  4737
     (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
  4738
     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
  4739
     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
  4740
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4741
    ^ 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
  4742
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4743
    "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
  4744
!
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  4745
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4746
disableIOInterruptsOn:fd
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4747
    "turn off IO interrupts for a filedescriptor"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4748
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4749
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4750
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4751
    int ret, flags, f;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4752
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4753
#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
  4754
    if (__isSmallInteger(fd)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4755
	f = __intVal(fd);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4756
# if defined(SYSV4)
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 756
diff changeset
  4757
	ret = ioctl(f, I_SETSIG, 0);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4758
# else /*! SYSV4*/
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4759
	flags = fcntl(f, F_GETFL, 0);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4760
	/*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4761
	 * if already clear, there is no need for this syscall ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4762
	 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4763
	if (flags & FASYNC) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4764
	    ret = fcntl(f, F_SETFL, flags & ~FASYNC);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4765
	    if (ret >= 0) ret = flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4766
	} else {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4767
	    ret = flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4768
	}
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4769
# endif /* !SYSV4 */
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4770
	RETURN ( __MKSMALLINT(ret) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4771
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4772
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4773
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4774
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4775
     this error is triggered on non-integer argument
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4776
     or if the OS does not support IO interrupts.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4777
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4778
    ^ self primitiveFailed
10
claus
parents: 5
diff changeset
  4779
!
claus
parents: 5
diff changeset
  4780
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4781
disableSignal:signalNumber
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4782
    "disable (Unix-) signal processing for signalNumber.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4783
     Dont confuse Unix signals with smalltalk signals.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4784
     WARNING: for some signals, it is no good idea to disable
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4785
     them; for example, disabling the SIGINT signal turns off ^C
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4786
     handling.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4787
     Also, NOTICE that signal numbers are not portable between unix
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4788
     systems - use OperatingSystem sigXXX to get the numeric value for
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4789
     a signal.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4790
     Use only for fully debugged stand alone applications."
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4791
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4792
%{  /* NOCONTEXT */
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4793
252
  4794
    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
  4795
	int sigNo = __intVal(signalNumber);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4796
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4797
	if (sigNo == 0) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4798
	    RETURN (self);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4799
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4800
#ifdef SIG_IGN
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4801
	signal(sigNo, SIG_IGN);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  4802
	RETURN (self);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4803
#endif
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  4804
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4805
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4806
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4807
     this error is triggered on non-integer argument
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4808
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4809
    ^ self primitiveFailed
68
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
     'now, ^C is totally ignored ...' printNewline.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4813
     OperatingSystem disableSignal:(OperatingSystem sigINT).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4814
     1 to:1000000 do:[:i| ].
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4815
     OperatingSystem enableSignal:(OperatingSystem sigINT).
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4816
     '^C handled again.' printNewline
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4817
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4818
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4819
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4820
disableTimer
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4821
    "disable timer interrupts.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4822
     WARNING: 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4823
	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
  4824
	disabled, because no scheduling or timeouts are possible."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4825
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4826
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4827
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4828
#if defined(WIN32)
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4829
    KillTimer(NULL, w32TimerId);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4830
    w32TimerId = 0;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4831
    RETURN (true);
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4832
#else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4833
# if defined(ITIMER_REAL)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4834
    struct itimerval dt;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4835
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4836
    dt.it_interval.tv_sec = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4837
    dt.it_interval.tv_usec = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4838
    dt.it_value.tv_sec = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4839
    dt.it_value.tv_usec = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4840
    setitimer(ITIMER_REAL, &dt, 0);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4841
    RETURN (true);
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4842
# endif /* ITIMER_REAL */
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  4843
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4844
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4845
.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4846
    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4847
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4848
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4849
disableUserInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4850
    "disable userInterrupt processing;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4851
     when disabled, no ^C processing takes place.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4852
     WARNING:
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  4853
	 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
  4854
	 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
  4855
	 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
  4856
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4857
    self disableSignal:(self sigBREAK).
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4858
    self disableSignal:(self sigINT).
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4859
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4860
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4861
enableAbortInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4862
    "enable abort signalhandling, and make it a regular signalInterrupt.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4863
     (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
  4864
      end-user applications ...).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4865
     This is especially useful, if linked-in C-libraries call abort() ..."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4866
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4867
    self enableSignal:(self sigABRT)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4868
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4869
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4870
enableChildSignalInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4871
    "enable childSignal interrupts 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4872
     (SIGCHLD, if the architecture supports it).
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4873
     After enabling, these signals will send the message 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4874
     'childSignalInterrupt' to the ChildSignalInterruptHandler object."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4875
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4876
    self enableSignal:(self sigCHLD)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4877
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4878
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4879
enableFpExceptionInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4880
    "enable floating point exception interrupts (if the
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4881
     architecture supports it).
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4882
     After enabling, fpu-exceptions will send the message 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4883
     'fpuExceptionInterrupt' to the FPUExceptionInterruptHandler object."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4884
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4885
    self enableSignal:(self sigFP)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4886
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4887
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4888
enableHardSignalInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4889
    "enable hard signal exception interrupts (trap, buserror & segm. violation).
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4890
     After enabling, these exceptions will send the message 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4891
     'signalInterrupt' to the SignalInterruptHandler object."
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4892
855
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  4893
    "/ 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
  4894
"/    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
  4895
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  4896
    "/ ... 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
  4897
    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
  4898
1808
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  4899
    self enableSignal:(self sigILL).
640
be94dfc60eaa Anforderung von SA_SIGINFO in sigaction.
Stefan Vogel <sv@exept.de>
parents: 630
diff changeset
  4900
    self enableSignal:(self sigBUS).
be94dfc60eaa Anforderung von SA_SIGINFO in sigaction.
Stefan Vogel <sv@exept.de>
parents: 630
diff changeset
  4901
    self enableSignal:(self sigSEGV)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4902
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4903
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4904
enableIOInterruptsOn:fd
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4905
    "turn on IO interrupts for a filedescriptor"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4906
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4907
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4908
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4909
    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
  4910
#ifndef __signalIoInterrupt
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4911
    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
  4912
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4913
    static int firstCall = 1;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4914
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4915
#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
  4916
/*
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4917
 * SIGIO/SIGPOLL - data available for I/O
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4918
 * (used to wake up waiting processes)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4919
 */
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4920
#ifdef SIGIO
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4921
# define THESIGNAL SIGIO
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4922
#else
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4923
# ifdef SIGPOLL
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4924
#  define THESIGNAL SIGPOLL
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4925
# else
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4926
#  ifdef SIGURG
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4927
#   define THESIGNAL SIGURG
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4928
#  endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4929
# endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4930
#endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4931
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4932
    if (__isSmallInteger(fd)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4933
	if (firstCall) {
762
cea705669628 ok, stefan was right: HAS_SIGACTION works
Claus Gittinger <cg@exept.de>
parents: 761
diff changeset
  4934
#ifdef HAS_SIGACTION
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4935
	    struct sigaction act;
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4936
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4937
	    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4938
	     * Do not add SA_RESTART here. A signal can cause a
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4939
	     * thread switch, another thread can do a garbage collect
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4940
	     * and restarted system calls may write into old
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4941
	     * (collected) addresses.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  4942
	     */
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  4943
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  4944
	    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
  4945
	    sigemptyset(&act.sa_mask);
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4946
	    act.sa_handler = __signalIoInterrupt;
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4947
	    sigaction(THESIGNAL, &act, 0);
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4948
#else
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  4949
# ifdef HAS_SIGVEC
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4950
	    struct sigvec vec;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4951
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  4952
	    vec.sv_flags = SV_INTERRUPT;
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4953
	    sigemptyset(&vec.sv_mask);
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4954
	    vec.sv_handler = __signalIoInterrupt;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  4955
	    sigvec(THESIGNAL, &vec, NULL);
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  4956
# else
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4957
	    signal(THESIGNAL, __signalIoInterrupt);
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  4958
# endif
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4959
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4960
	    firstCall = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4961
	}
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4962
#undef THESIGNAL
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4963
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4964
	f = __intVal(fd);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4965
# if defined(SYSV4)
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 756
diff changeset
  4966
	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
  4967
# else /*! SYSV4*/
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4968
	flags = fcntl(f, F_GETFL, 0);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4969
	/*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4970
	 * if already set, there is no need for this syscall ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4971
	 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4972
	if (flags & FASYNC) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4973
	    ret = flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4974
	} else {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4975
	    ret = fcntl(f, F_SETFL, flags | FASYNC);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4976
	    if (ret >= 0) ret = flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4977
	}
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  4978
# endif /*!SYSV4*/
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  4979
	RETURN ( __MKSMALLINT(ret) );
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4980
    }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4981
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4982
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4983
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4984
     this error is triggered on non-integer argument
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4985
     or if the system does not support SIGIO
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4986
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  4987
    ^ self primitiveFailed
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4988
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4989
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4990
enableQuitInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4991
    "enable quitInterrupt (usually ^\) handling, and make it a userInterrupt.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4992
     (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
  4993
      end-user applications ...)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  4994
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  4995
    self enableSignal:(self sigQUIT)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4996
!
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4997
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  4998
enableSignal:signalNumber
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  4999
    "enable (Unix-)signal processing for signalNumber.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  5000
     Dont confuse Unix signals with smalltalk signals.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5001
     The signal will be delivered to one of the standard handlers
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5002
     (SIGINT, SIGQUIT, etc) or to a general handler, which
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5003
     sends #signalInterrupt:.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5004
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5005
     NOTICE that signal numbers are not portable between unix
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5006
     systems - use OperatingSystem sigXXX to get the numeric value for
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5007
     a signal."
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5008
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5009
%{  /* NOCONTEXT */
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5010
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5011
#ifdef NSIG
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5012
# define SIG_LIMIT NSIG
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5013
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5014
# ifdef SIGUSR2
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5015
#  define SIG_LIMIT SIGUSR2
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5016
# else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5017
#  ifdef SIGUSR
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5018
#   define SIG_LIMIT SIGUSR
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5019
#  endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5020
# endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5021
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5022
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5023
#if defined(SIGPOLL) && !defined(SIGIO)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5024
# define SIGIO SIGPOLL
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5025
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5026
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5027
#ifdef SIGCHLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5028
# define CHILD_SIGNAL   SIGCHLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5029
#else
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5030
# ifdef SIGCLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5031
#  define CHILD_SIGNAL  SIGCLD
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5032
# endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5033
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5034
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5035
    int sigNr;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5036
#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
  5037
# ifndef __signalUserInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5038
    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
  5039
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5040
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5041
#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
  5042
# ifndef __signalFpExceptionInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5043
    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
  5044
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5045
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5046
#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
  5047
# ifndef __signalIoInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5048
    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
  5049
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5050
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5051
#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
  5052
# ifndef __signalChildInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5053
    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
  5054
# endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5055
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5056
#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
  5057
# ifndef __signalPIPEInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5058
    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
  5059
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5060
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5061
#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
  5062
# ifndef __signalBUSInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5063
    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
  5064
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5065
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5066
#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
  5067
# ifndef __signalSEGVInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5068
    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
  5069
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5070
#endif
1808
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5071
#ifdef SIGILL
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5072
# ifndef __signalTrapInterrupt
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5073
    extern void __signalTrapInterrupt(SIGHANDLER_ARG);
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5074
# endif
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5075
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5076
#ifdef SIGALRM
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5077
# 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
  5078
#  ifndef __signalTimerInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5079
    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
  5080
#  endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5081
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5082
#endif
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5083
#ifndef __signalInterrupt
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5084
    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
  5085
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5086
    void (*handler)(SIGHANDLER_ARG);
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5087
252
  5088
    if (__isSmallInteger(signalNumber)
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  5089
     && ((sigNr = __intVal(signalNumber)) >= 0)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5090
#ifdef SIG_LIMIT
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5091
     &&  (sigNr <= SIG_LIMIT)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5092
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5093
    ) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5094
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5095
	 * standard signals are forced into standard handlers
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5096
	 * - all others go into general signalInterrupt
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5097
	 */
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5098
#if defined(SIGPOLL) && defined(SIGIO)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5099
	if (sigNr == SIGPOLL)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5100
	    sigNr = SIGIO;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5101
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5102
	switch (sigNr) {
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5103
	    case 0:
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5104
		/* enabling a non-supported signal */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5105
		RETURN (self);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5106
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5107
#ifdef SIGBREAK
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5108
	    case SIGBREAK:
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5109
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5110
#ifdef SIGINT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5111
	    case SIGINT:
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5112
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5113
#ifdef SIGQUIT
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5114
	    case SIGQUIT:
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5115
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5116
#if defined(SIGINT) || defined(SIGQUIT) || defined(SIGBREAK)
329
claus
parents: 322
diff changeset
  5117
		handler = __signalUserInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5118
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5119
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5120
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5121
#ifdef SIGFPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5122
	    case SIGFPE:
329
claus
parents: 322
diff changeset
  5123
		handler = __signalFpExceptionInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5124
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5125
#endif
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5126
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5127
#ifdef SIGPIPE
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5128
	    case SIGPIPE:
329
claus
parents: 322
diff changeset
  5129
		handler = __signalPIPEInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5130
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5131
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5132
#ifdef SIGBUS
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5133
	    case SIGBUS:
329
claus
parents: 322
diff changeset
  5134
		handler = __signalBUSInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5135
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5136
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5137
#ifdef SIGSEGV
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5138
	    case SIGSEGV:
329
claus
parents: 322
diff changeset
  5139
		handler = __signalSEGVInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5140
		break;
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5141
#endif
1982
8d4f97279e55 oops - SIGILL was never cought
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
  5142
#ifdef SIGILL
8d4f97279e55 oops - SIGILL was never cought
Claus Gittinger <cg@exept.de>
parents: 1966
diff changeset
  5143
	    case SIGILL:
1808
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5144
		handler = __signalTrapInterrupt;
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5145
		break;
58ed32d318d4 handle SIGILL like bus or segv
Claus Gittinger <cg@exept.de>
parents: 1799
diff changeset
  5146
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5147
#ifdef SIGIO
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5148
	    case SIGIO:
329
claus
parents: 322
diff changeset
  5149
		handler = __signalIoInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5150
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5151
#endif
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5152
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5153
#ifdef CHILD_SIGNAL
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5154
	    case CHILD_SIGNAL:
329
claus
parents: 322
diff changeset
  5155
		handler = __signalChildInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5156
		break;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5157
#endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5158
#ifdef SIGALRM
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5159
# ifndef WIN32
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5160
	    case SIGALRM:
329
claus
parents: 322
diff changeset
  5161
		handler = __signalTimerInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5162
		break;
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5163
# endif
443
Claus Gittinger <cg@exept.de>
parents: 440
diff changeset
  5164
#endif
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5165
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5166
	    default:
329
claus
parents: 322
diff changeset
  5167
		handler = __signalInterrupt;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5168
		break;
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5169
	}
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5170
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5171
	{
762
cea705669628 ok, stefan was right: HAS_SIGACTION works
Claus Gittinger <cg@exept.de>
parents: 761
diff changeset
  5172
#ifdef HAS_SIGACTION
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5173
	    struct sigaction act;
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5174
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5175
	    /*
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5176
	     * Do not add SA_RESTART here. A signal can cause a
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5177
	     * thread switch, another thread can do a garbage collect
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5178
	     * and restarted system calls may write into old
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5179
	     * (collected) addresses.
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5180
	     */
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5181
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5182
	    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
  5183
	    sigemptyset(&act.sa_mask);
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5184
	    act.sa_handler = handler;
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5185
	    sigaction(sigNr, &act, 0);
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  5186
#else
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5187
# ifdef HAS_SIGVEC
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5188
	    struct sigvec vec;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5189
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5190
	    vec.sv_flags = SV_INTERRUPT;
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5191
	    sigemptyset(&vec.sv_mask);
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5192
	    vec.sv_handler = handler;
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  5193
	    sigvec(sigNr, &vec, NULL);
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5194
# else
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5195
	    (void) signal(sigNr, handler);
766
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5196
# endif
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5197
#endif
9d6cc2cc834e igvec (SIGVEC) stuff added (for ultrix)
Claus Gittinger <cg@exept.de>
parents: 765
diff changeset
  5198
	}
213
3b56a17534fd *** empty log message ***
claus
parents: 204
diff changeset
  5199
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5200
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5201
	 * maybe, we should return the old enable-status
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5202
	 * as boolean here ...
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5203
	 */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  5204
	RETURN (self);
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5205
    }
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5206
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5207
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5208
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5209
     this error is triggered on non-integer argument, or
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5210
     if the signal number is not in the valid range (1..NSIG)
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5211
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5212
    ^ self primitiveFailed
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5213
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5214
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5215
enableTimer:milliSeconds
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5216
    "trigger a timerInterrupt, to be signalled after some (real) time."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5217
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5218
%{  /* NOCONTEXT */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5219
    int millis;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5220
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5221
    millis = __intVal(milliSeconds);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5222
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  5223
#if defined(ITIMER_REAL)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5224
    {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5225
	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
  5226
	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
  5227
#ifndef __signalTimerInterrupt
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5228
	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
  5229
#endif
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5230
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5231
	if (firstCall) {
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5232
# ifdef HAS_SIGACTION
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5233
	    struct sigaction act;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5234
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5235
	    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
  5236
	    sigemptyset(&act.sa_mask);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5237
	    act.sa_handler = __signalTimerInterrupt;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5238
	    sigaction(SIGALRM, &act, 0);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5239
# else
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5240
#  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
  5241
	    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
  5242
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  5243
	    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
  5244
	    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
  5245
	    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
  5246
	    sigvec(SIGALRM, &vec, NULL);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5247
#  else
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5248
	    signal(SIGALRM, __signalTimerInterrupt);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5249
#  endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5250
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5251
	    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
  5252
	}
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5253
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5254
	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
  5255
	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
  5256
	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
  5257
	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
  5258
	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
  5259
	RETURN (true);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5260
    }
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  5261
#else
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5262
# ifdef WIN32
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5263
    {
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
	 * two mechanisms - which one to use ?
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
#  ifdef USE_TimerProc
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5268
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5269
	extern VOID CALLBACK __win32TimerProc(HWND, UINT, UINT, DWORD);
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5270
	w32TimerId = SetTimer(NULL, 0, millis, __win32TimerProc);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5271
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5272
#  else /* USE_TimeProc */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5273
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5274
	extern void CALLBACK __win32TimeProc(UINT, UINT, DWORD, DWORD, DWORD, DWORD);
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5275
	timeSetEvent(millis, 5, (LPTIMECALLBACK)__win32TimeProc, 0, TIME_ONESHOT);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5276
#  endif
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5277
	RETURN (true);
640
be94dfc60eaa Anforderung von SA_SIGINFO in sigaction.
Stefan Vogel <sv@exept.de>
parents: 630
diff changeset
  5278
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5279
# endif /* WIN32 */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5280
#endif /* ITIMER_REAL */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5281
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5282
    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5283
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5284
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5285
enableUserInterrupts
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5286
    "enable userInterrupt (^C) handling;
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  5287
     when enabled, ^C in the terminal window will send the message
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  5288
     'userInterrupt' to the UserInterruptHandler object."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5289
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5290
    self enableSignal:(self sigINT).
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5291
    self enableSignal:(self sigBREAK).
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5292
!
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5293
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5294
interruptPending
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5295
    "return true, if an interrupt is pending. The returned value is
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5296
     invalid if interrupts are not currently blocked, since otherwise 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5297
     the interrupt is usually already handled before arriving here,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5298
     or may be served while returning from here."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5299
2117
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5300
%{  /* NOCONTEXT */
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5301
    extern OBJ __INTERRUPTPENDING();
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5302
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5303
    RETURN ( __INTERRUPTPENDING() );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5304
%}        
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5305
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5306
2117
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5307
interruptsBlocked
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5308
    "return true, if interrupt handling is currently disabled;
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5309
     false otherwise."
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5310
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5311
%{  /* NOCONTEXT */
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5312
    extern OBJ __INTERRUPTS_BLOCKED();
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5313
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5314
    RETURN ( __INTERRUPTS_BLOCKED() );
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5315
%}
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5316
!
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  5317
704
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5318
killProcess:processId
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5319
    "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
  5320
     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
  5321
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5322
     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
  5323
	      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
  5324
	      OperatingSystem>>getStatusOfProcess:aProcessId."
704
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5325
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5326
    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
  5327
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5328
    "Modified: 28.12.1995 / 15:06:18 / stefan"
704
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5329
!
42cb0141808d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 676
diff changeset
  5330
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5331
nameForSignal:aSignalNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5332
    "for a given Unix signalnumber, return a descriptive string"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5333
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5334
    aSignalNumber == self sigHUP    ifTrue:[^ 'hangup'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5335
    aSignalNumber == self sigINT    ifTrue:[^ 'interrupt'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5336
    aSignalNumber == self sigKILL   ifTrue:[^ 'kill'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5337
    aSignalNumber == self sigQUIT   ifTrue:[^ 'quit'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5338
    aSignalNumber == self sigILL    ifTrue:[^ 'illegal instruction'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5339
    aSignalNumber == self sigTRAP   ifTrue:[^ 'trap'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5340
    aSignalNumber == self sigABRT   ifTrue:[^ 'abort'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5341
    aSignalNumber == self sigIOT    ifTrue:[^ 'iot trap'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5342
    aSignalNumber == self sigEMT    ifTrue:[^ 'emt trap'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5343
    aSignalNumber == self sigFP     ifTrue:[^ 'fp exception'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5344
    aSignalNumber == self sigBUS    ifTrue:[^ 'bus error'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5345
    aSignalNumber == self sigSEGV   ifTrue:[^ 'segmentation violation'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5346
    aSignalNumber == self sigSYS    ifTrue:[^ 'bad system call'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5347
    aSignalNumber == self sigPIPE   ifTrue:[^ 'broken pipe'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5348
    aSignalNumber == self sigALRM   ifTrue:[^ 'alarm timer'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5349
    aSignalNumber == self sigTERM   ifTrue:[^ 'termination'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5350
    aSignalNumber == self sigSTOP   ifTrue:[^ 'stop'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5351
    aSignalNumber == self sigTSTP   ifTrue:[^ 'tty stop'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5352
    aSignalNumber == self sigCONT   ifTrue:[^ 'continue'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5353
    aSignalNumber == self sigCHLD   ifTrue:[^ 'child death'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5354
    aSignalNumber == self sigTTIN   ifTrue:[^ 'background tty input'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5355
    aSignalNumber == self sigTTOU   ifTrue:[^ 'background tty output'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5356
    aSignalNumber == self sigIO     ifTrue:[^ 'io available'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5357
    aSignalNumber == self sigXCPU   ifTrue:[^ 'cpu time expired'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5358
    aSignalNumber == self sigXFSZ   ifTrue:[^ 'file size limit'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5359
    aSignalNumber == self sigVTALRM ifTrue:[^ 'virtual alarm timer'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5360
    aSignalNumber == self sigPROF   ifTrue:[^ 'profiling timer'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5361
    aSignalNumber == self sigWINCH  ifTrue:[^ 'winsize changed'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5362
    aSignalNumber == self sigLOST   ifTrue:[^ 'resource lost'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5363
    aSignalNumber == self sigUSR1   ifTrue:[^ 'user signal 1'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5364
    aSignalNumber == self sigUSR2   ifTrue:[^ 'user signal 2'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5365
    aSignalNumber == self sigMSG    ifTrue:[^ 'HFT message'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5366
    aSignalNumber == self sigPWR    ifTrue:[^ 'power-fail'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5367
    aSignalNumber == self sigPRE    ifTrue:[^ 'programming exception'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5368
    aSignalNumber == self sigGRANT  ifTrue:[^ 'HFT access wanted'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5369
    aSignalNumber == self sigRETRACT ifTrue:[^ 'HFT access relinquish'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5370
    aSignalNumber == self sigSOUND   ifTrue:[^ 'HFT sound complete'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5371
    aSignalNumber == self sigDANGER  ifTrue:[^ 'low on paging space'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5372
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5373
    "notice: many systems map SIGPOLL and/or SIGUSR onto SIGIO
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5374
	     therefore, keep SIGIO always above the two below" 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5375
    aSignalNumber == self sigPOLL   ifTrue:[^ 'io available'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5376
    aSignalNumber == self sigURG    ifTrue:[^ 'urgent'].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5377
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5378
    ^ 'unknown signal'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5379
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5380
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5381
     OperatingSystem nameForSignal:9
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5382
     OperatingSystem nameForSignal:(OperatingSystem sigPOLL) 
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5383
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5384
!
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
operatingSystemSignal:signalNumber
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5387
    "return the signal to be raised when an 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5388
     operatingSystem-signal occurs, or nil"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5389
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5390
    OSSignals notNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5391
	^ OSSignals at:signalNumber ifAbsent:[nil]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5392
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5393
    ^ nil
10
claus
parents: 5
diff changeset
  5394
!
claus
parents: 5
diff changeset
  5395
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5396
operatingSystemSignal:signalNumber install:aSignal
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5397
    "install a signal to be raised when an operatingSystem-signal occurs"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5398
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5399
    OSSignals isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5400
	OSSignals := Array new:32
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5401
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5402
    OSSignals at:signalNumber put:aSignal
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5403
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5404
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5405
sendSignal:signalNumber to:processId
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5406
    "send a unix signal to some process (maybe myself).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5407
     Returns false if any error occurred, true otherwise.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5408
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5409
     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
  5410
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5411
     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
  5412
	      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
  5413
	      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
  5414
	      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
  5415
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5416
%{
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5417
#ifndef MSDOS_LIKE
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5418
    if (__bothSmallInteger(signalNumber, processId)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5419
	if (kill(__intVal(processId), __intVal(signalNumber)) < 0) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  5420
	    OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5421
	    RETURN ( false );
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
  5422
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5423
	RETURN ( true );
10
claus
parents: 5
diff changeset
  5424
    }
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5425
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5426
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5427
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5428
    "/ either invalid argument (non-integers)
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5429
    "/ or not supported by OS
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5430
    "/
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  5431
    ^ self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5432
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5433
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5434
startSpyTimer
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5435
    "trigger a spyInterrupt, to be signalled after some short (virtual) time.
359
claus
parents: 357
diff changeset
  5436
     This is used by the old MessageTally for profiling.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  5437
     Should be changed to use real profiling timer if available.
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  5438
     On systems, where no virtual timer is available, use the real timer
359
claus
parents: 357
diff changeset
  5439
     (which is of course less correct).
claus
parents: 357
diff changeset
  5440
     OBSOLETE: the new messageTally runs as a high prio process, not using 
claus
parents: 357
diff changeset
  5441
	       spy interrupts."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5442
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5443
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5444
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5445
#ifndef __spyInterrupt
329
claus
parents: 322
diff changeset
  5446
    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
  5447
#endif
10
claus
parents: 5
diff changeset
  5448
#if defined(ITIMER_VIRTUAL)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5449
    struct itimerval dt;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5450
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5451
# ifdef SIGVTALRM
329
claus
parents: 322
diff changeset
  5452
    signal(SIGVTALRM, __spyInterrupt);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5453
# else
329
claus
parents: 322
diff changeset
  5454
    signal(SIGALRM, __spyInterrupt);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5455
# endif
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5456
348
claus
parents: 345
diff changeset
  5457
    dt.it_interval.tv_sec = 0;
claus
parents: 345
diff changeset
  5458
    dt.it_interval.tv_usec = 0;
claus
parents: 345
diff changeset
  5459
    dt.it_value.tv_sec = 0;
claus
parents: 345
diff changeset
  5460
    dt.it_value.tv_usec = 1000;   /* 1000 Hz */
claus
parents: 345
diff changeset
  5461
    setitimer(ITIMER_VIRTUAL, &dt, 0);
claus
parents: 345
diff changeset
  5462
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5463
    RETURN (true);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5464
#endif
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5465
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5466
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5467
    ^ false
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5468
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5469
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5470
stopSpyTimer
359
claus
parents: 357
diff changeset
  5471
    "stop spy timing - disable spy timer.
claus
parents: 357
diff changeset
  5472
     OBSOLETE: the new messageTally runs as a high prio process, not using 
claus
parents: 357
diff changeset
  5473
	       spy interrupts."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5474
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5475
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5476
10
claus
parents: 5
diff changeset
  5477
#if defined(ITIMER_VIRTUAL)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5478
    struct itimerval dt;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5479
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5480
    dt.it_interval.tv_sec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5481
    dt.it_interval.tv_usec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5482
    dt.it_value.tv_sec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5483
    dt.it_value.tv_usec = 0;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5484
    setitimer(ITIMER_VIRTUAL, &dt, 0);
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5485
    RETURN (true);
10
claus
parents: 5
diff changeset
  5486
#endif
claus
parents: 5
diff changeset
  5487
%}
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5488
.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  5489
    ^ false
10
claus
parents: 5
diff changeset
  5490
!
claus
parents: 5
diff changeset
  5491
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5492
terminateProcess:processId
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5493
    "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
  5494
     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
  5495
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  5496
     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
  5497
	      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
  5498
	      OperatingSystem>>getStatusOfProcess:aProcessId."
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5499
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5500
    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
  5501
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5502
    "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
  5503
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  5504
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5505
terminateProcessGroup:processGroupId
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5506
    "terminate a unix process group.
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5507
     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
  5508
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5509
     WARNING: in order to avoid zombie processes (on unix),
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5510
	      you may have to fetch the processes exitstatus with
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  5511
	      OperatingSystem>>getStatusOfProcess:aProcessId."
1280
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5512
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5513
    self sendSignal:(self sigTERM) to:(processGroupId negated).
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5514
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5515
    "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
  5516
    "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
  5517
!
b7ae6227f48b Allow setting of process group in exec:....
Stefan Vogel <sv@exept.de>
parents: 1247
diff changeset
  5518
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5519
unblockInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5520
    "enable interrupt processing - if any interrupts are pending,
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5521
     these will be handled immediately.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5522
     When unblocking interrupts, take care of nested block/unblock
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5523
     calls - you must only unblock after a blockcall if they where
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5524
     really not blocked before. See OperatingSystemclass>>blockInterrupts."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5525
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5526
    __UNBLOCKINTERRUPTS();
1040
60e4c4bbbca2 return nil from unblockInterrupts (thats what the inlined code returns)
Claus Gittinger <cg@exept.de>
parents: 1034
diff changeset
  5527
    RETURN (nil);
616
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
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5530
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  5531
!OperatingSystem class methodsFor:'misc'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5532
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5533
exit
710
10d86ca4c4a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 704
diff changeset
  5534
    "shutdown smalltalk immediately - this method does not return.
10d86ca4c4a6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 704
diff changeset
  5535
     Return 'good'-status (0) to the parent unix process."
616
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
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5538
    __mainExit(0);
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
    "OperatingSystem exit - dont evaluate this"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5541
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5542
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5543
exit:exitCode
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5544
    "shutdown smalltalk immediately -
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5545
     returning an exit-code to the parent unix process."
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
    int code = 1;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5549
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5550
    if (__isSmallInteger(exitCode)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  5551
	code = __intVal(exitCode);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5552
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5553
    __mainExit(code);
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
    "OperatingSystem exit:1 - dont evaluate this"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5556
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5557
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5558
exitWithCoreDump
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5559
    "shutdown smalltalk immediately - dumping core.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5560
     This always returns 'bad'-status to the parent unix process.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5561
     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
  5562
     manually remove any tempfiles.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5563
     Use this only for debugging ST/X itself"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5564
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5565
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5566
    abort();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5567
%}
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5568
    "
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5569
     OperatingSystem exitWithCoreDump - dont evaluate this
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5570
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5571
!
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
slowFork:aBoolean
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5574
    "set/clear the `avoid-fork-if-possible-because-its-slow' flag.
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5575
     Only used internally on SYSV3 systems"
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5576
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5577
    SlowFork := aBoolean
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5578
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  5579
    "Modified: 22.4.1996 / 13:13:09 / cg"
616
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
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  5582
!OperatingSystem class methodsFor:'os queries'!
616
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
getCPUDefine
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5585
    "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
  5586
     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
  5587
     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
  5588
     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
  5589
     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
  5590
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5591
%{  /* NOCONTEXT */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5592
#   ifndef CPU_DEFINE
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5593
#       define CPU_DEFINE "-DunknownCPU"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5594
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5595
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5596
    RETURN ( __MKSTRING(CPU_DEFINE));
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5597
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5598
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5599
     OperatingSystem getCPUDefine
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5600
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5601
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5602
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5603
getCPUType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5604
    "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
  5605
     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
  5606
     (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
  5607
     This may normally not be of any interest to you ..."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5608
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5609
    |cpu|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5610
    
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5611
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5612
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5613
#   ifdef vax
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5614
#    define CPU_STRING "vax"
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 mips
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5617
#    define CPU_STRING "mips"
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 i386
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5620
#    define CPU_STRING "i386"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5621
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5622
#   ifdef ns32k
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5623
#    define CPU_STRING "ns32k"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5624
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5625
#   ifdef mc68k
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5626
#    define CPU_STRING "mc68k"
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 mc88k
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5629
#    define CPU_STRING "mc88k"
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 sparc
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5632
#    define CPU_STRING "sparc"
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
#   ifdef hppa
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5635
#    define CPU_STRING "hppa"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5636
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5637
#   ifdef rs6000
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5638
#    define CPU_STRING "rs6000"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5639
#   endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5640
#   ifdef powerPC
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5641
#    define CPU_STRING "powerPC"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5642
#   endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5643
#   ifdef alpha
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5644
#    define CPU_STRING "alpha"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5645
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5646
#   ifdef transputer
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5647
#    define CPU_STRING "transputer"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5648
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5649
#   ifdef ibm370
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5650
#    define CPU_STRING "ibm370"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5651
#   endif
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
#   ifndef CPU_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5654
#    define CPU_STRING "unknown"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5655
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5656
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5657
    cpu = __MKSTRING(CPU_STRING);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5658
#   undef CPU_STRING
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5659
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5660
    ^ cpu
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5661
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5662
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5663
     OperatingSystem getCPUType
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
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5666
    "examples: are we running on a ss-10/solaris ?"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5667
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5668
     (OperatingSystem getCPUType = 'sparc') 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5669
     and:[OperatingSystem getOSType = 'solaris']
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5670
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5671
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5672
    "or on a pc/solaris ?"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5673
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5674
     (OperatingSystem getCPUType = 'i386')
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5675
     and:[OperatingSystem getOSType = 'solaris']
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5676
    "
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
getCommandOutputFrom:aCommand
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5680
    "execute a simple command (such as hostname) and
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5681
     return the commands output as a string"
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
    |p result|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5684
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5685
    ForkFailed ifFalse:[
2131
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5686
        PipeStream openErrorSignal handle:[:ex |
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5687
            ForkFailed := true.
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5688
            'OperatingSystem [warning]: cannot fork/popen' errorPrintCR.
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5689
            ex return.
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5690
        ] do:[
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5691
            p := PipeStream readingFrom:aCommand.
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5692
            p notNil ifTrue:[
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5693
                result := p nextLine.
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5694
                p close
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5695
            ]
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5696
        ]
616
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
    ^ result
2131
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5699
1eeb310e109a newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 2126
diff changeset
  5700
    "Modified: 10.1.1997 / 18:00:07 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5701
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5702
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5703
getDomainName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5704
    "return the domain this host is in.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5705
     Notice:
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5706
        not all systems support this; on some, 'unknown' is returned."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5707
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5708
    |name|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5709
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5710
    DomainName notNil ifTrue:[
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5711
        ^ DomainName
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5712
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5713
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5714
%{  /* STACK: 2048 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5715
#if defined(HAS_GETDOMAINNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5716
    char buffer[128];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5717
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5718
    if (getdomainname(buffer, sizeof(buffer)) == 0) {
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5719
        name = __MKSTRING(buffer);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5720
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5721
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5722
# if defined(HAS_UNAME) && defined(HAS_UTS_DOMAINNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5723
    struct utsname ubuff;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5724
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5725
    if (uname(&ubuff) >= 0) {
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5726
        name = __MKSTRING(ubuff.domainname);
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5727
    }
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5728
# else
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5729
#  if defined(HAS_SYSINFO) && defined(SI_SRPC_DOMAIN)
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5730
    char buffer[256];
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5731
    int ret;
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5732
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5733
    if ((ret = sysinfo(SI_SRPC_DOMAIN, buffer, sizeof(buffer))) >= 0 && ret <= sizeof(buffer)) {
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5734
        name = __MKSTRING(buffer);
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5735
    }
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5736
#  endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5737
# endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5738
#endif
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
    name isNil ifTrue:[
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5741
        name := self getEnvironment:'DOMAIN'.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5742
        name isNil ifTrue:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5743
            name := self getCommandOutputFrom:'domainname'
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5744
        ]
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5745
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5746
    name isNil ifTrue:[
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5747
        'OperatingSystem [warning]: cannot find out domainname' errorPrintCR.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5748
        name := 'unknown'.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5749
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5750
    DomainName := name.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5751
    ^ name
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5752
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5753
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5754
     OperatingSystem getDomainName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5755
    "
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5756
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  5757
    "Modified: 26.4.1996 / 10:04:54 / stefan"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5758
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5759
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5760
getEnvironment:aStringOrSymbol
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5761
    "get an environment string"
10
claus
parents: 5
diff changeset
  5762
claus
parents: 5
diff changeset
  5763
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  5764
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5765
    char *env;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5766
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5767
    if (__isString(aStringOrSymbol) || __isSymbol(aStringOrSymbol)) {
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5768
#ifdef WIN32
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5769
	char buff[512];
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5770
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5771
	env = NULL;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5772
	if (GetEnvironmentVariable(__stringVal(aStringOrSymbol),
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5773
				   buff,
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5774
				   sizeof(buff)-1)) {
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5775
	    env = buff;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5776
	}
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5777
#else
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  5778
	env =  (char *)getenv(__stringVal(aStringOrSymbol));
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  5779
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5780
	if (env) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  5781
	    RETURN ( __MKSTRING(env) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5782
	}
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
%}
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
    ^ nil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5787
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
     OperatingSystem getEnvironment:'LANG'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5790
     OperatingSystem getEnvironment:'LOGIN'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5791
     OperatingSystem getEnvironment:'HOME'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5792
     OperatingSystem getEnvironment:'NNTPSERVER'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5793
     OperatingSystem getEnvironment:'MAIL'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5794
     OperatingSystem getEnvironment:'PATH'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5795
    "
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
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5798
getHostName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5799
    "return the hostname we are running on - if there is
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5800
     a HOST environment variable, we are much faster here ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5801
     Notice:
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5802
        not all systems support this; on some, 'unknown' is returned."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5803
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5804
    |name|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5805
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5806
    HostName notNil ifTrue:[
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5807
        ^ HostName
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5808
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5809
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5810
%{  /* STACK: 2048 */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5811
#if defined(HAS_GETHOSTNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5812
    char buffer[128];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5813
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5814
    if (gethostname(buffer, sizeof(buffer)) == 0) {
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5815
        name = __MKSTRING(buffer);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5816
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5817
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5818
# if defined(HAS_UNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5819
    struct utsname ubuff;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5820
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5821
    if (uname(&ubuff) >= 0) {
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5822
        name = __MKSTRING(ubuff.nodename);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5823
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5824
# else
1702
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5825
#  if defined(HAS_SYSINFO) && defined(SI_HOSTNAME)
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5826
    char buffer[256];
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5827
    int ret;
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5828
 
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5829
    if ((ret = sysinfo(SI_HOSTNAME, buffer, sizeof(buffer))) >= 0 && ret <= sizeof(buffer)) {
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5830
        name = __MKSTRING(buffer);
1702
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5831
    }
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5832
#  else
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5833
#   ifdef WIN32
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5834
    char buffer[128];
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5835
    int buffSize = sizeof(buffer);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5836
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5837
    if (GetComputerName(buffer, &buffSize) == TRUE) {
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5838
        name = __MKSTRING(buffer);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5839
    }
1702
777b74f65c7e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1688
diff changeset
  5840
#   endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  5841
#  endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  5842
# endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5843
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5844
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5845
    name isNil ifTrue:[
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5846
        name := self getEnvironment:'HOST'.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5847
        name isNil ifTrue:[
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5848
            name := self getCommandOutputFrom:'hostname'
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5849
        ]
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5850
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5851
    name isNil ifTrue:[
2139
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5852
        'OperatingSystem [warning]: cannot find out hostname' errorPrintCR.
54ab2e1f4d93 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2131
diff changeset
  5853
        name := 'unknown'.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5854
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5855
    HostName := name.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5856
    ^ name
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5857
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5858
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5859
     OperatingSystem getHostName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5860
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5861
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  5862
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5863
getLocaleInfo
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5864
    "return a dictionary filled with values from the locale information;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5865
     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
  5866
     Possible fields are:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5867
	decimalPoint                    <String>
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
	thousandsSep                    <String>
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
	internationalCurrencySymbol     <String>
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
	currencySymbol                  <String>
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
	monetaryDecimalPoint            <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5876
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5877
	monetaryThousandsSeparator      <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5878
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5879
	positiveSign                    <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5880
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5881
	negativeSign                    <String>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5882
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5883
	internationalFractionalDigits   <Integer>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5884
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5885
	fractionalDigits                <Integer>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5886
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5887
	positiveSignPrecedesCurrencySymbol      <Boolean>
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
	negativeSignPrecedesCurrencySymbol      <Boolean>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5890
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5891
	positiveSignSeparatedBySpaceFromCurrencySymbol  <Boolean>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5892
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5893
	negativeSignSeparatedBySpaceFromCurrencySymbol  <Boolean>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5894
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5895
	positiveSignPosition                            <Symbol>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5896
							one of: #parenthesesAround, 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5897
								#signPrecedes, 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5898
								#signSuceeds, 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5899
								#signPrecedesCurrencySymbol,
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5900
								#signSuceedsCurrencySymbol
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5901
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5902
	negativeSignPosition                            <like above>
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5903
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5904
     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
  5905
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5906
     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
  5907
     it should be used by applications as required.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5908
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5909
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5910
    |info val|
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5911
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5912
    LocaleInfo notNil ifTrue:[
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5913
	"/ return the internal info; useful on systems which do not
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5914
	"/ support this.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5915
	^ LocaleInfo
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5916
    ].
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5917
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5918
    info := IdentityDictionary new.
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
    char *decimalPoint;         /* something like "." (US) or "," (german) */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5921
    char *thousandsSep;         /* something like "," (US) or "." (german) */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5922
    char *intCurrencySymbol;    /* international currency symbol; something like "USD "  "DM  " */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5923
    char *currencySymbol;       /* local currency symbol;         something like "USD "  "DM  " */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5924
    char *monDecimalPoint;      /* money: decimal point */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5925
    char *monThousandsSep;      /* money: thousands sep */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5926
    char *positiveSign;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5927
    char *negativeSign;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5928
    int   intFractDigits;       /* money: international digits after decPoint */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5929
    int   fractDigits;          /* money: local digits after decPoint */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5930
    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
  5931
    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
  5932
    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
  5933
    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
  5934
    int   csPosSignPosition;    /* money: 0: ()'s around the value & currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5935
    int   csNegSignPosition;    /*        1: sign precedes the value & currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5936
				/*        2: sign succeeds the value & currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5937
				/*        3: sign immediately precedes the currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5938
				/*        4: sign immediately suceeds the currency symbol */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5939
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5940
#if defined(HAS_LOCALECONV)
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5941
    struct lconv *conf;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5942
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5943
    conf = localeconv();
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5944
    if (conf) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5945
	decimalPoint = conf->decimal_point;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5946
	thousandsSep = conf->thousands_sep;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5947
	intCurrencySymbol = conf->int_curr_symbol;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5948
	currencySymbol = conf->currency_symbol;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5949
	monDecimalPoint = conf->mon_decimal_point;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5950
	monThousandsSep = conf->mon_thousands_sep;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5951
	positiveSign = conf->positive_sign;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5952
	negativeSign = conf->negative_sign;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5953
	intFractDigits = conf->int_frac_digits;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5954
	fractDigits = conf->frac_digits;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5955
	csPosPrecedes = conf->p_cs_precedes; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5956
	csNegPrecedes = conf->n_cs_precedes; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5957
	csPosSepBySpace = conf->p_sep_by_space; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5958
	csNegSepBySpace = conf->n_sep_by_space; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5959
	csPosSignPosition = conf->p_sign_posn;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5960
	csNegSignPosition = conf->n_sign_posn;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5961
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5962
#else
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5963
    decimalPoint = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5964
    thousandsSep = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5965
    intCurrencySymbol = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5966
    currencySymbol = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5967
    monDecimalPoint = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5968
    monThousandsSep = (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5969
    positiveSign =  (char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5970
    negativeSign =(char *)0;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5971
    intFractDigits = -1;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5972
    fractDigits = -1;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5973
    csPosPrecedes = -1; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5974
    csNegPrecedes = -1; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5975
    csPosSepBySpace = -1; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5976
    csNegSepBySpace = -1; 
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5977
    csPosSignPosition = -1;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5978
    csNegSignPosition = -1;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5979
#endif
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5980
    if (decimalPoint) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5981
	val = __MKSTRING(decimalPoint);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5982
	__AT_PUT_(info, @symbol(decimalPoint), 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 (thousandsSep) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5985
	val = __MKSTRING(thousandsSep);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5986
	__AT_PUT_(info, @symbol(thousandsSeparator), 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 (intCurrencySymbol) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5989
	val = __MKSTRING(intCurrencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5990
	__AT_PUT_(info, @symbol(internationCurrencySymbol), 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 (currencySymbol) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5993
	val = __MKSTRING(currencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5994
	__AT_PUT_(info, @symbol(currencySymbol), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5995
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5996
    if (monDecimalPoint) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5997
	val = __MKSTRING(monDecimalPoint);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5998
	__AT_PUT_(info, @symbol(monetaryDecimalPoint), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  5999
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6000
    if (monThousandsSep) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6001
	val = __MKSTRING(monThousandsSep);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6002
	__AT_PUT_(info, @symbol(monetaryThousandsSeparator), val);
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
    if (positiveSign) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6005
	val = __MKSTRING(positiveSign);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6006
	__AT_PUT_(info, @symbol(positiveSign), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6007
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6008
    if (negativeSign) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6009
	val = __MKSTRING(negativeSign);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6010
	__AT_PUT_(info, @symbol(negativeSign), val);
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
    if (intFractDigits >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6013
	__AT_PUT_(info, @symbol(internationalFractionalDigits),  __MKSMALLINT(intFractDigits));
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6014
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6015
    if (fractDigits >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6016
	__AT_PUT_(info, @symbol(fractionalDigits),  __MKSMALLINT(fractDigits));
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6017
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6018
    if (csPosPrecedes >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6019
	if (csPosPrecedes == 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6020
	    val = false;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6021
	} else {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6022
	    val = true;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6023
	}
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6024
	__AT_PUT_(info, @symbol(positiveSignPrecedesCurrencySymbol), val );
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6025
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6026
    if (csNegPrecedes >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6027
	if (csNegPrecedes == 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6028
	    val = false;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6029
	} else {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6030
	    val = true;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6031
	}
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6032
	__AT_PUT_(info, @symbol(negativeSignPrecedesCurrencySymbol), val );
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6033
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6034
    if (csPosSepBySpace >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6035
	if (csPosSepBySpace == 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6036
	    val = false;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6037
	} else {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6038
	    val = true;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6039
	}
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6040
	__AT_PUT_(info, @symbol(positiveSignSeparatedBySpaceFromCurrencySymbol), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6041
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6042
    if (csNegSepBySpace >= 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6043
	if (csNegSepBySpace == 0) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6044
	    val = false;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6045
	} else {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6046
	    val = true;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6047
	}
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6048
	__AT_PUT_(info, @symbol(negativeSignSeparatedBySpaceFromCurrencySymbol), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6049
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6050
    switch (csPosSignPosition) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6051
	case 0:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6052
	    val = @symbol(parenthesesAround);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6053
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6054
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6055
	case 1:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6056
	    val = @symbol(signPrecedes);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6057
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6058
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6059
	case 2:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6060
	    val = @symbol(signSuceeds);
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 3:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6064
	    val = @symbol(signPrecedesCurrencySymbol);
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 4:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6068
	    val = @symbol(signSuceedsCurrencySymbol);
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
	default:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6072
	    val = nil;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6073
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6074
    if (val != nil) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6075
	__AT_PUT_(info, @symbol(positiveSignPosition), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6076
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6077
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6078
    switch (csNegSignPosition) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6079
	case 0:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6080
	    val = @symbol(parenthesesAround);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6081
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6082
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6083
	case 1:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6084
	    val = @symbol(signPrecedes);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6085
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6086
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6087
	case 2:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6088
	    val = @symbol(signSuceeds);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6089
	    break;
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
	case 3:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6092
	    val = @symbol(signPrecedesCurrencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6093
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6094
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6095
	case 4:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6096
	    val = @symbol(signSuceedsCurrencySymbol);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6097
	    break;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6098
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6099
	default:
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6100
	    val = nil;
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6101
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6102
    if (val != nil) {
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6103
	__AT_PUT_(info, @symbol(negativeSignPosition), val);
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6104
    }
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6105
%}.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6106
    ^ info
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6107
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6108
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6109
     OperatingSystem getLocaleInfo
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6110
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6111
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6112
    "Created: 23.12.1995 / 14:19:20 / cg"
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6113
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6114
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6115
getOSDefine
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6116
    "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
  6117
     compiled, and which should be passed down when compiling methods.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6118
     For example, on linux, this is '-DLINUX'."
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
%{  /* NOCONTEXT */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6121
#ifdef WIN32
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6122
# ifndef OS_DEFINE
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6123
#  define OS_DEFINE "-DWIN32"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6124
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6125
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6126
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6127
#ifndef OS_DEFINE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6128
# define OS_DEFINE "-DunknownOS"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6129
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6130
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6131
    RETURN ( __MKSTRING(OS_DEFINE));
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
  6132
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
  6133
#undef OS_DEFINE
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6134
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6135
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6136
     OperatingSystem getOSDefine
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6137
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6138
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6139
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6140
getOSType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6141
    "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
  6142
     This can be used to adapt programs to certain environment
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6143
     differences (for example: mail-lock strategy ...)"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6144
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6145
    |os|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6146
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6147
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6148
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6149
#   ifdef MSDOS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6150
#    define OS_STRING "msdos"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6151
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6152
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6153
#   ifdef WIN32
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
  6154
#    define OS_STRING "win32"
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6155
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6156
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6157
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6158
#   ifdef MSWINDOWS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6159
#    define OS_STRING "mswindows"
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 NT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6163
#    define OS_STRING "nt"
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 VMS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6167
#    define OS_STRING "vms"
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 MVS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6171
#    define OS_STRING "mvs"
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 OS2
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6175
#    define OS_STRING "os2"
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 sinix
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6179
#    define OS_STRING "sinix"
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 ultrix
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6183
#    define OS_STRING "ultrix"
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 sco
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6187
#    define OS_STRING "sco"
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 hpux
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6191
#    define OS_STRING "hpux"
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 LINUX
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6195
#    define OS_STRING "linux"
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
#   ifdef sunos
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6199
#    define OS_STRING "sunos"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6200
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6201
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6202
#   ifdef solaris
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6203
#    define OS_STRING "solaris"
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
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6206
#   ifdef IRIS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6207
#    define OS_STRING "irix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6208
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6209
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6210
#   ifdef aix
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6211
#    define OS_STRING "aix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6212
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6213
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6214
#   ifdef realIX
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6215
#    define OS_STRING "realIX"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6216
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6217
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6218
    /*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6219
     * no concrete info; become somewhat vague ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6220
     */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6221
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6222
#    ifdef MACH
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6223
#     define OS_STRING "mach"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6224
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6225
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6226
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6227
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6228
#    ifdef BSD
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6229
#     define OS_STRING "bsd"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6230
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6231
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6232
#    ifdef SYSV
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6233
#     ifdef SYSV3
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6234
#      define OS_STRING "sys5_3"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6235
#     else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6236
#      ifdef SYSV4
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6237
#       define OS_STRING "sys5_4"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6238
#      else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6239
#       define OS_STRING "sys5"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6240
#      endif
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
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6243
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6244
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6245
    /*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6246
     * become very vague ...
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6247
     */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6248
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6249
#    ifdef POSIX
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6250
#     define OS_STRING "posix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6251
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6252
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6253
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6254
#    ifdef UNIX
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6255
#     define OS_STRING "unix"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6256
#    endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6257
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6258
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6259
#   ifndef OS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6260
#    define OS_STRING "unknown"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6261
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6262
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6263
    os = __MKSTRING(OS_STRING);
1987
8249e9134622 win32 changes
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
  6264
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6265
#   undef OS_STRING
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6266
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6267
    ^ os
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6268
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6269
    "OperatingSystem getOSType"
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
getProcessId
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6273
    "return the (unix-)processId"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6274
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6275
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6276
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6277
    int pid = 0;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6278
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6279
    pid = getpid();
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  6280
#else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  6281
# ifdef WIN32
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  6282
    pid = GetCurrentProcessId() & 0x3FFFFFFF;
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  6283
# endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6284
#endif
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6285
    RETURN ( __MKSMALLINT(pid) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6286
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6287
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6288
     OperatingSystem getProcessId
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6289
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6290
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6291
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6292
getSystemID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6293
    "if supported by the OS, return the systemID;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6294
     a unique per machine identification.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6295
     WARNING:
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6296
	not all systems support this; on some, 'unknown' is returned."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6297
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6298
%{  /* NO_CONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6299
#if defined(IRIX5) && !defined(HAS_GETHOSTID)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6300
    char idBuffer[MAXSYSIDSIZE];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6301
    int retVal;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6302
    OBJ arr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6303
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6304
    if ((retVal = syssgi(SGI_SYSID, idBuffer)) == 0) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6305
	arr = __BYTEARRAY_UNINITIALIZED_NEW_INT(MAXSYSIDSIZE);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6306
	bcopy(idBuffer, __ByteArrayInstPtr(arr)->ba_element, MAXSYSIDSIZE);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6307
	RETURN (arr);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6308
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6309
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6310
#if defined(HAS_GETHOSTID)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6311
    int runningId;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6312
    OBJ arr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6313
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6314
    runningId = gethostid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6315
    arr = __BYTEARRAY_UNINITIALIZED_NEW_INT(4);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6316
    *(int *)(__ByteArrayInstPtr(arr)->ba_element) = runningId;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6317
    RETURN (arr);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6318
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6319
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6320
    ^ 'unknown'
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
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6323
     OperatingSystem getSystemID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6324
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6325
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6326
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6327
getSystemInfo
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6328
    "return info on the system weare running on.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6329
     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
  6330
     otherwise, some simulated info is returned.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6331
 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6332
     WARNING:
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6333
       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
  6334
       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
  6335
       OS, for example, linux returns 'ix86', while WIN32 returns 'x86'.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6336
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6337
       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
  6338
       information. 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6339
       (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
  6340
	may be based upon this info)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6341
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6342
     The returned info may (or may not) contain:
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6343
	#system -> some operating system identification (irix, Linux, nt, win32s ...) 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6344
	#version -> OS version (some os version identification)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6345
	#release -> OS release (3.5, 1.2.1 ...)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6346
	#node   -> some host identification (hostname)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6347
	#domain  -> domain name (hosts domain)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6348
	#machine -> type of machine (i586, mips ...)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6349
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6350
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6351
    |sys node rel ver mach dom mtyp brel info|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6352
1060
119d45f975e1 increased getSystemInfos stack - just to make certain
Claus Gittinger <cg@exept.de>
parents: 1058
diff changeset
  6353
%{  /* STACK: 4096 */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6354
#if defined(HAS_UNAME)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6355
    struct utsname ubuff;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6356
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6357
    if (uname(&ubuff) >= 0) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6358
	sys  = __MKSTRING(ubuff.sysname);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6359
	node = __MKSTRING(ubuff.nodename);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6360
	rel  = __MKSTRING(ubuff.release);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6361
	ver  = __MKSTRING(ubuff.version);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6362
	mach = __MKSTRING(ubuff.machine);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6363
# ifdef HAS_UTS_DOMAINNAME
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6364
	dom  = __MKSTRING(ubuff.domainname);
1675
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6365
# else
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6366
#  if defined(HAS_GETDOMAINNAME)
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6367
	{
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6368
	    char buffer[128];
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6369
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6370
	    if (getdomainname(buffer, sizeof(buffer)) == 0) {
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6371
		dom = __MKSTRING(buffer);
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6372
	    }
1675
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6373
	}
b4cd81adda85 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1666
diff changeset
  6374
#  endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6375
# endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6376
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6377
#else /* no uname */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6378
# ifdef WIN32 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6379
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6380
    char vsnBuffer[32];
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6381
    char *s;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6382
    int winVer;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6383
    DWORD vsn;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6384
    SYSTEM_INFO sysInfo;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6385
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6386
    vsn = GetVersion();
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6387
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6388
    if (HIWORD(vsn) & 0x8000) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6389
	s = "win32s";
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6390
    } else {
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  6391
	s = "nt";
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6392
    }
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6393
    sys = __MKSTRING(s);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6394
    winVer = LOWORD(vsn);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6395
    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
  6396
    rel = __MKSTRING(vsnBuffer);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6397
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6398
    GetSystemInfo(&sysInfo);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6399
    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
  6400
	sprintf(vsnBuffer, "%d", sysInfo.dwProcessorType);
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6401
	mach = __MKSTRING(vsnBuffer);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6402
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6403
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6404
# endif /* WIN32 */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6405
#endif /* no uname */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6406
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6407
    sys isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6408
	sys := self getSystemType.
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
    node isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6411
	node := self getHostName
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
    dom isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6414
	dom := self getDomainName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6415
    ].
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6416
    mach isNil ifTrue:[
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6417
	mach := self getCPUType
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6418
    ].
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6419
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6420
    info := IdentityDictionary new.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6421
    info at:#system put:sys.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6422
    info at:#node put:node.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6423
    rel notNil ifTrue:[info at:#release put:rel].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6424
    ver notNil ifTrue:[info at:#version put:ver].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6425
    mach notNil ifTrue:[info at:#machine put:mach].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6426
    dom notNil ifTrue:[info at:#domain put:dom].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6427
    ^ info
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
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6430
     OperatingSystem getSystemInfo
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6431
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6432
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6433
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6434
getSystemType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6435
    "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
  6436
     This is almost the same as getOSType, but the returned string
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6437
     is slightly different for some systems (i.e. iris vs. irix).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6438
     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
  6439
     here ... 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6440
     (except for slight differences between next/mach and other machs)"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6441
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6442
    |sys|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6443
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
#   ifdef NEXT
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6446
#    define SYS_STRING "next"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6447
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6448
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6449
#   ifdef IRIS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6450
#    define SYS_STRING "iris"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6451
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6452
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6453
#   ifdef WIN32 
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6454
#    define SYS_STRING  "win32"
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6455
#   endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6456
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6457
#   ifdef SYS_STRING
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  6458
     sys = __MKSTRING(SYS_STRING);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6459
#    undef SYS_STRING
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6460
#   endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6461
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6462
    sys isNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6463
	^ self getOSType
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6464
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6465
    ^ sys
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6466
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
     OperatingSystem getSystemType
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
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6471
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6472
isBSDlike
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6473
    "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
  6474
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6475
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6476
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6477
#if defined(BSD) || defined(MACH) || defined(SYSV4)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6478
    RETURN ( true );
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  6479
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6480
%}.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  6481
    ^ false
10
claus
parents: 5
diff changeset
  6482
!
claus
parents: 5
diff changeset
  6483
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6484
isMSDOSlike
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6485
    "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
  6486
     (in contrast to unix-like)."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6487
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6488
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6489
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6490
#if defined(MSDOS_LIKE)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6491
    RETURN ( true );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6492
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6493
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6494
    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6495
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6496
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6497
isMSWINDOWSlike
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6498
    "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
  6499
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6500
%{  /* NOCONTEXT */
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
#if defined(WIN32)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6503
    RETURN ( true );
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6504
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6505
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6506
%}.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6507
    ^ false
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6508
!
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6509
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6510
isOS2like
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6511
    "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
  6512
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6513
%{  /* NOCONTEXT */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6514
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6515
#if defined(OS2)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6516
    RETURN (true);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6517
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6518
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6519
%}.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6520
    ^ false
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6521
!
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6522
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6523
isUNIXlike
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6524
    "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
  6525
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6526
%{  /* NOCONTEXT */
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6527
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6528
#if !defined(UNIX_LIKE)
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6529
    RETURN ( false );
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6530
#endif
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6531
%}.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6532
    ^ true
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6533
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6534
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6535
maxFileNameLength
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6536
    "return the max number of characters in a filename.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6537
     CAVEAT:
947
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  6538
	 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
  6539
	 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
  6540
	 We return a somewhat conservative number here."
10
claus
parents: 5
diff changeset
  6541
claus
parents: 5
diff changeset
  6542
%{  /* NOCONTEXT */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6543
 
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
     * XXX: newer systems provide a query function for this ... use it
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6546
     */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6547
#   if defined(BSD) || defined(SYSV4) || defined(LONGFILENAMES)
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6548
     RETURN ( __MKSMALLINT(255) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6549
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6550
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6551
#   ifdef realIX
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6552
      RETURN ( __MKSMALLINT(127) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6553
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6554
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6555
#   ifdef SYSV
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6556
      RETURN ( __MKSMALLINT(14) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6557
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6558
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6559
#   ifdef MSDOS
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6560
     RETURN ( __MKSMALLINT(9) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6561
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6562
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6563
#   ifdef WIN32
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6564
     /*
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6565
      * mhmh - depends on the filesystem type
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6566
      */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6567
     RETURN ( __MKSMALLINT(9) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6568
#   endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6569
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6570
    "unix default"
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6571
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6572
    ^ 14
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6573
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6574
1034
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6575
setLocaleInfo:anInfoDictionary
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6576
    "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
  6577
     (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
  6578
     See description of fields in #getLocaleInfo.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6579
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6580
     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
  6581
     it should be used by applications as required."
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6582
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6583
    LocaleInfo := anInfoDictionary
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6584
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6585
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6586
     |d|
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6587
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6588
     d := IdentityDictionary new.
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6589
     d at:#decimalPoint                 put:'.'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6590
     d at:#thousandsSeparator           put:','         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6591
     d at:#currencySymbol               put:'USD'       .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6592
     d at:#monetaryDecimalPoint         put:'.'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6593
     d at:#monetaryThousandsSeparator   put:'.'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6594
     d at:#fractionalDigits             put:2           .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6595
     d at:#positiveSign                 put:'+'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6596
     d at:#negativeSign                 put:'-'         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6597
     d at:#positiveSignPrecedesCurrencySymbol put:true          .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6598
     d at:#negativeSignPrecedesCurrencySymbol put:false         .
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6599
     OperatingSystem setLocaleInfo:d
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6600
    "
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6601
!
4d3ef5de3ec8 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
  6602
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6603
supportsIOInterrupts
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6604
    "return true, if the OS supports IO availability interrupts 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6605
     (i.e. SIGPOLL/SIGIO).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6606
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6607
     Currently, this mechanism does work for SYSV4 only ..."
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6608
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6609
%{  /* NOCONTEXT */
1062
baa5827a7a40 Do not transparently restart system calls after a (Unix-)signal.
Stefan Vogel <sv@exept.de>
parents: 1060
diff changeset
  6610
#if defined(SYSV4) && defined(USE_SIGIO) && 0
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6611
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6612
# if defined(SIGPOLL) || defined(SIGIO)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6613
#  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
  6614
   /*
765
93bdb4f0e095 no, SIGIO does not work on SGI ...
Claus Gittinger <cg@exept.de>
parents: 764
diff changeset
  6615
    * 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
  6616
    * (not even on SGI ...)
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6617
    */
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6618
#   if !defined(NEXT)
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6619
     RETURN (true);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6620
#   endif
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6621
#  endif
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6622
# endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6623
10
claus
parents: 5
diff changeset
  6624
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6625
%}.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  6626
    ^ false
123
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  6627
!
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  6628
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6629
supportsNonBlockingIO
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6630
    "return true, if the OS supports nonblocking IO."
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
%{  /* NOCONTEXT */
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6633
#if defined(F_GETFL) && defined(F_SETFL) && defined(FNDELAY)
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6634
       RETURN (true);
754
0dcc8af63497 Fix enableIoInterrupts for SYSV4.
Stefan Vogel <sv@exept.de>
parents: 714
diff changeset
  6635
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6636
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6637
    ^ false
123
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  6638
!
98771547e5ce OSSignals now here
claus
parents: 101
diff changeset
  6639
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6640
supportsSelect
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6641
    "return true, if the OS supports selecting on multiple
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6642
     filedescriptors via select."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6643
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6644
%{  /* NOCONTEXT */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6645
#if defined(WIN32)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6646
    RETURN (false);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6647
#endif
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6648
#if defined(sco)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6649
    /*
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6650
     * 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
  6651
     */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6652
    RETURN(false);
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6653
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6654
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6655
.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6656
    ^ true
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6657
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6658
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  6659
!OperatingSystem class methodsFor:'shared memory access'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6660
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6661
shmAttach:id address:addr flags:flags
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6662
    "low level entry to shmat()-system call.
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6663
     Not supported on all operatingSystems"
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6664
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6665
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6666
#ifdef WANT_SHM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6667
    void *address, *shmaddr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6668
    int shmflg, shmid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6669
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6670
    if (__isSmallInteger(addr)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6671
     && __bothSmallInteger(flags, id)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6672
	shmaddr = (void *) __intVal(addr);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6673
	shmflg = __intVal(flags);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6674
	shmid = __intVal(id);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6675
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6676
	address = shmat(shmid, shmaddr, shmflg);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6677
	if (address != (void *)-1) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6678
	    RETURN (__MKEXTERNALBYTES(addr));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6679
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6680
	OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6681
	RETURN (nil);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6682
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6683
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6684
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  6685
    ^ self primitiveFailed
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6686
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6687
    "Modified: 22.4.1996 / 13:15:12 / cg"
370
claus
parents: 369
diff changeset
  6688
!
claus
parents: 369
diff changeset
  6689
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6690
shmDetach:addr
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6691
    "low level entry to shmdt()-system call.
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6692
     Not supported on all operatingSystems"
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6693
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6694
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6695
#ifdef WANT_SHM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6696
    void *shmaddr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6697
    int rslt;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6698
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6699
    if (__isSmallInteger(addr)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6700
	shmaddr = (void *) __intVal(addr);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6701
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6702
	rslt = shmdt(shmaddr);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6703
	if (rslt != -1) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6704
	    RETURN (true);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6705
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6706
	OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6707
	RETURN (false);
370
claus
parents: 369
diff changeset
  6708
    }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6709
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6710
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  6711
    ^ self primitiveFailed
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6712
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6713
    "Modified: 22.4.1996 / 13:15:03 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6714
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6715
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6716
shmGet:key size:size flags:flags
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6717
    "low level entry to shmget()-system call.
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6718
     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
  6719
     - use the provided wrapper class SharedExternalBytes instead."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6720
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6721
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6722
#ifdef WANT_SHM
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6723
    if (__bothSmallInteger(key, size)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6724
     && __isSmallInteger(flags)) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6725
	int rslt;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6726
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6727
	rslt = shmget(__intVal(key), __intVal(size), __intVal(flags));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6728
	if (rslt != -1) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6729
	    RETURN (__MKSMALLINT(rslt));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6730
	}
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6731
	OperatingSystem_LastErrorNumber = __MKSMALLINT(errno);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6732
	RETURN (nil);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6733
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6734
#endif
370
claus
parents: 369
diff changeset
  6735
%}.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  6736
    ^ self primitiveFailed
1247
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6737
2716d915e84e commentary
Claus Gittinger <cg@exept.de>
parents: 1153
diff changeset
  6738
    "Modified: 22.4.1996 / 13:14:46 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6739
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6740
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  6741
!OperatingSystem class methodsFor:'time and date'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6742
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6743
computeDatePartsOf:osTime for:aBlock
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6744
    "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
  6745
     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
  6746
     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
  6747
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6748
    |year month day osSeconds|
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
    osSeconds := osTime // 1000.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6751
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6752
    struct tm *tmPtr;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6753
    long t;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6754
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6755
    t = __longIntVal(osSeconds);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6756
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6757
    tmPtr = localtime(&t);
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6758
    year = __MKSMALLINT(tmPtr->tm_year + 1900);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6759
    month = __MKSMALLINT(tmPtr->tm_mon + 1);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6760
    day = __MKSMALLINT(tmPtr->tm_mday);
810
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6761
%}.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  6762
    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
  6763
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6764
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6765
     OperatingSystem computeDatePartsOf:0 for:[:y :m :d |
1885
219c3437ad01 added executeCommand with i/o redirection
Claus Gittinger <cg@exept.de>
parents: 1863
diff changeset
  6766
	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
  6767
     ]
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6768
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6769
!
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6770
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6771
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
  6772
    "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
  6773
     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
  6774
     any daylight saving adjustings."
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6775
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6776
    |osSeconds|
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
%{
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6779
    struct tm tm;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6780
    long t;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6781
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6782
    if (__bothSmallInteger(y, m) 
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6783
     && __bothSmallInteger(d, h)
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6784
     && __bothSmallInteger(min, s)) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6785
	tm.tm_hour = __intVal(h);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6786
	tm.tm_min = __intVal(min);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6787
	tm.tm_sec = __intVal(s);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6788
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6789
	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
  6790
	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
  6791
	tm.tm_mday = __intVal(d);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6792
	tm.tm_isdst = -1;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6793
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6794
	t = mktime(&tm);
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6795
	osSeconds = __MKUINT(t);
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6796
    }
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6797
%}.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6798
    osSeconds notNil ifTrue:[
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6799
	^ osSeconds * 1000 + millis
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6800
    ].    
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6801
    ^ self primitiveFailed
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6802
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6803
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6804
     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
  6805
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6806
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6807
!
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6808
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6809
computeTimeAndDateFrom:osTime
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6810
    "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
  6811
     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
  6812
     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
  6813
     dayInYear (1..) and dayInWeek (1..).
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6814
     Conversion is to localtime including any daylight saving adjustments."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6815
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6816
    |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
  6817
     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
  6818
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6819
    millis := osTime \\ 1000.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6820
    osSeconds := osTime // 1000.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6821
%{
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6822
    struct tm *tmPtr;
810
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6823
    struct tm *gmTmPtr;
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6824
    long t;
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6825
2073
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
  6826
#if defined(HAS_NO_TIMEZONE)
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  6827
#   define TIMEZONE     tmPtr->tm_gmtoff
811
6fbd6e7fdb74 mhmh - more ultrix kludges
Claus Gittinger <cg@exept.de>
parents: 810
diff changeset
  6828
#else
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6829
# ifdef MSDOS_LIKE
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  6830
#   define TIMEZONE 0
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6831
# else
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  6832
#   define TIMEZONE     timezone
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  6833
# endif
811
6fbd6e7fdb74 mhmh - more ultrix kludges
Claus Gittinger <cg@exept.de>
parents: 810
diff changeset
  6834
#endif
6fbd6e7fdb74 mhmh - more ultrix kludges
Claus Gittinger <cg@exept.de>
parents: 810
diff changeset
  6835
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6836
    t = __longIntVal(osSeconds);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6837
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6838
    tmPtr = localtime(&t);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6839
    hours = __MKSMALLINT(tmPtr->tm_hour);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6840
    minutes = __MKSMALLINT(tmPtr->tm_min);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6841
    seconds = __MKSMALLINT(tmPtr->tm_sec);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6842
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6843
    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
  6844
    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
  6845
    day = __MKSMALLINT(tmPtr->tm_mday);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6846
1511
823fcfbbb741 weekDay/yearDay start with0 in tm_ struct, but
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
  6847
    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
  6848
    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
  6849
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6850
    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
  6851
	dst = false;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6852
	utcOffset = __MKSMALLINT(TIMEZONE);
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6853
    } else {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6854
	dst = true;
800
067094efdaed use HAS_ALTZONE / HAS_DAYLIGHT
Claus Gittinger <cg@exept.de>
parents: 798
diff changeset
  6855
#ifdef HAS_ALTZONE
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6856
	utcOffset = __MKSMALLINT(altzone);
800
067094efdaed use HAS_ALTZONE / HAS_DAYLIGHT
Claus Gittinger <cg@exept.de>
parents: 798
diff changeset
  6857
#else
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6858
	utcOffset = __MKSMALLINT(TIMEZONE) + 3600;
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6859
#endif
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  6860
    }
241
6f30be88e314 *** empty log message ***
claus
parents: 234
diff changeset
  6861
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6862
    "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
  6863
    ret := Array new:11.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6864
    ret at:1 put:year.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6865
    ret at:2 put:month.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6866
    ret at:3 put:day.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6867
    ret at:4 put:hours.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6868
    ret at:5 put:minutes.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6869
    ret at:6 put:seconds.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6870
    ret at:7 put:utcOffset.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6871
    ret at:8 put:dst.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6872
    ret at:9 put:millis.
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6873
    ret at:10 put:yDay.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6874
    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
  6875
    ^ ret
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6876
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6877
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6878
     OperatingSystem computeTimeAndDateFrom:0
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6879
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6880
!
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6881
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6882
computeTimePartsOf:osTime for:aBlock
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6883
    "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
  6884
     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
  6885
     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
  6886
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6887
    |hours minutes seconds millis osSeconds|
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
    osSeconds := osTime // 1000.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6890
    millis := osTime \\ 1000.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6891
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6892
    struct tm *tmPtr;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6893
    long t;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6894
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6895
    t = __longIntVal(osSeconds);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6896
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  6897
    tmPtr = localtime(&t);
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6898
    hours = __MKSMALLINT(tmPtr->tm_hour);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6899
    minutes = __MKSMALLINT(tmPtr->tm_min);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  6900
    seconds = __MKSMALLINT(tmPtr->tm_sec);
810
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  6901
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6902
    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
  6903
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6904
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6905
     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
  6906
	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
  6907
     ]
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6908
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6909
!
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6910
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6911
computeUTCTimeAndDateFrom:osTime
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6912
    "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
  6913
     containing year, month, day, hour, minute and seconds,
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6914
     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
  6915
     dayInYear (1..) and dayInWeek (1..).
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6916
     Conversion is to UTC."
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
    |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
  6919
     dst yDay wDay osSeconds ret|
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6920
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6921
    millis := osTime \\ 1000.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6922
    osSeconds := osTime // 1000.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6923
%{
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6924
    struct tm *tmPtr;
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6925
    struct tm *gmTmPtr;
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6926
    long t;
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6927
2073
4c2bdfc668c9 NEXT changes (again)
Claus Gittinger <cg@exept.de>
parents: 2000
diff changeset
  6928
#if defined(HAS_NO_TIMEZONE)
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6929
#   define TIMEZONE     tmPtr->tm_gmtoff
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6930
#else
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6931
# ifdef MSDOS_LIKE
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6932
#   define TIMEZONE 0
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6933
# else
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6934
#   define TIMEZONE     timezone
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6935
# endif
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6936
#endif
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6937
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6938
    t = __longIntVal(osSeconds);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6939
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6940
    tmPtr = gmtime(&t);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6941
    hours = __MKSMALLINT(tmPtr->tm_hour);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6942
    minutes = __MKSMALLINT(tmPtr->tm_min);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6943
    seconds = __MKSMALLINT(tmPtr->tm_sec);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6944
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6945
    year = __MKSMALLINT(tmPtr->tm_year + 1900);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6946
    month = __MKSMALLINT(tmPtr->tm_mon + 1);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6947
    day = __MKSMALLINT(tmPtr->tm_mday);
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6948
1511
823fcfbbb741 weekDay/yearDay start with0 in tm_ struct, but
Claus Gittinger <cg@exept.de>
parents: 1510
diff changeset
  6949
    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
  6950
    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
  6951
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6952
    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
  6953
	dst = false;
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6954
	utcOffset = __MKSMALLINT(TIMEZONE);
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6955
    } else {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6956
	dst = true;
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6957
#ifdef HAS_ALTZONE
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6958
	utcOffset = __MKSMALLINT(altzone);
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6959
#else
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  6960
	utcOffset = __MKSMALLINT(TIMEZONE) + 3600;
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6961
#endif
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
%}.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6964
    "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
  6965
    ret := Array new:11.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6966
    ret at:1 put:year.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6967
    ret at:2 put:month.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6968
    ret at:3 put:day.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6969
    ret at:4 put:hours.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6970
    ret at:5 put:minutes.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6971
    ret at:6 put:seconds.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6972
    ret at:7 put:utcOffset.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6973
    ret at:8 put:dst.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6974
    ret at:9 put:millis.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6975
    ret at:10 put:yDay.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6976
    ret at:11 put:wDay.
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6977
    ^ ret
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6978
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6979
    "
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6980
     OperatingSystem computeUTCTimeAndDateFrom:0
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6981
    "
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6982
!
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  6983
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6984
computeUTCTimePartsOf:osTime for:aBlock
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6985
    "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
  6986
     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
  6987
     Conversion is to UTC."
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6988
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6989
    |hours minutes seconds millis osSeconds|
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6990
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6991
    osSeconds := osTime // 1000.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6992
    millis := osTime \\ 1000.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6993
%{
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6994
    struct tm *tmPtr;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6995
    long t;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6996
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6997
    t = __longIntVal(osSeconds);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6998
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  6999
    tmPtr = gmtime(&t);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7000
    hours = __MKSMALLINT(tmPtr->tm_hour);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7001
    minutes = __MKSMALLINT(tmPtr->tm_min);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7002
    seconds = __MKSMALLINT(tmPtr->tm_sec);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7003
%}.
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7004
    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
  7005
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7006
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  7007
     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
  7008
	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
  7009
     ]
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7010
    "
275
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  7011
!
a76029ddaa98 *** empty log message ***
claus
parents: 252
diff changeset
  7012
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7013
getMillisecondTime
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7014
    "This returns the millisecond timers value. 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7015
     The range is limited to 0..1fffffff (i.e. the SmallInteger range) to avoid
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7016
     LargeInteger arithmetic when doing timeouts and delays.
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7017
     Since this value is wrapping around in regular intervals, this can only be used for 
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7018
     short relative time deltas.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7019
     Use the millisecondTimeXXX:-methods to compare and add time deltas - these know about the wrap.
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7020
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7021
     BAD DESIGN:
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7022
	This should be changed to return some instance of RelativeTime,
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7023
	and these computations moved there.
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7024
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7025
     Dont use this method in application code since it is an internal (private)
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7026
     interface. For compatibility with ST-80, use Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7027
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7028
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7029
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7030
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7031
    long t;
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7032
#if !defined(HAS_GETTIMEOFDAY) && defined(SYSV) && defined(HZ)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7033
    /* 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7034
     * sys5 time
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7035
     */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7036
    long ticks;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7037
    struct tms tb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7038
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7039
    ticks = times(&tb);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7040
    t = (ticks * 1000) / HZ;
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7041
#else
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7042
# ifdef WIN32
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7043
    t = GetTickCount();
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7044
# else
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7045
#  ifdef MSDOS_LIKE
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7046
    struct _timeb timebuffer;
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7047
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7048
    _ftime(&timebuffer);
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7049
    t = (timebuffer.time * 1000) + timebuffer.millitm;
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7050
#  else /* assume HAS_GETTIMEOFDAY */
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7051
    /*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7052
     * bsd time
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7053
     */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7054
    struct timeval tb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7055
    struct timezone tzb;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7056
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7057
    gettimeofday(&tb, &tzb);
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7058
    t = tb.tv_sec*1000 + tb.tv_usec/1000;
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7059
#  endif
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7060
# endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7061
#endif
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7062
    RETURN ( __MKSMALLINT(t & 0x1FFFFFFF) );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7063
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7064
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7065
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7066
getOSTime
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7067
    "This returns the millisecond OS time.
2000
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7068
     The base of the returned value is not consistent across
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7069
     different OS's - some return the number of millis since jan, 1st 1970;
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7070
     others since 1900. The Time classes are prepared for this, and 
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7071
     convert as appropriate.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7072
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7073
     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
  7074
     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
  7075
     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
  7076
    "
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7077
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7078
    |seconds millis|
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
%{
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7081
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7082
    long t;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7083
#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
  7084
    /* 
2000
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7085
     * sys5 time; we have to fake the information
2c12eb609e05 commentary
Claus Gittinger <cg@exept.de>
parents: 1991
diff changeset
  7086
     * 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
  7087
     */
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7088
    int now;
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7089
    long ticks;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7090
    struct tms tb;
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
    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
  7093
    seconds = __MKUINT(now);
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
    ticks = times(&tb);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7096
    t = (ticks * 1000) / HZ;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7097
    t = t % 1000;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7098
    millis = __MKSMALLINT(t);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7099
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7100
#else
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7101
# ifdef MSDOS_LIKE
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7102
    struct _timeb timebuffer;
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
    _ftime(&timebuffer);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7105
    seconds = __MKUINT(timebuffer.time);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7106
    millis = __MKSMALLINT(timebuffer.millitm);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7107
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7108
# else /* assume HAS_GETTIMEOFDAY */
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7109
    /*
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7110
     * bsd time
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7111
     */
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7112
    struct timeval tb;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7113
    struct timezone tzb;
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7114
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7115
    gettimeofday(&tb, &tzb);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7116
    seconds = __MKUINT(tb.tv_sec);
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7117
    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
  7118
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7119
# endif
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7120
#endif
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7121
%}.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7122
    ^ (seconds * 1000) + millis
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7123
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7124
    "
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  7125
     OperatingSystem getOSTime printCR.
1499
0df07e1d0c2f osTime is now a largeInteger, which includes the milliseconds.
Claus Gittinger <cg@exept.de>
parents: 1497
diff changeset
  7126
     Delay waitForSeconds:0.2.
1510
d7987cc00dc4 added interface for UTC timeAndDate handling;
Claus Gittinger <cg@exept.de>
parents: 1499
diff changeset
  7127
     OperatingSystem getOSTime printCR.
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7128
    "
616
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
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7131
maximumMillisecondTimeDelta
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7132
    "this returns the maximum delta supported by millisecondCounter
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7133
     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
  7134
     timer wraps."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7135
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7136
%{  /* NOCONTEXT */
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7137
    RETURN ( __MKSMALLINT(0x0FFFFFFF) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7138
%}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7139
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7140
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7141
millisecondDelay:millis
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7142
    "delay execution for millis milliseconds or until the next event
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7143
     arrives.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7144
     All lower priority threads will also sleep for the duration, 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7145
     interrupts (and therefore, higher prio processes) are
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7146
     still handled. 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7147
     Better use a Delay, to only delay the calling thread.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7148
     (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
  7149
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7150
    |now then delta|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7151
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7152
%{  /* NOCONTEXT */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7153
#ifdef WIN32
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7154
    int t = __intVal(millis);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7155
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7156
    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
  7157
	Sleep(t);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7158
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7159
    RETURN (self);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7160
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7161
%}.
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7162
 
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7163
    now := OperatingSystem getMillisecondTime.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7164
    then := OperatingSystem millisecondTimeAdd:now and:millis.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7165
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7166
    [OperatingSystem millisecondTime:then isAfter:now] whileTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7167
	delta := OperatingSystem millisecondTimeDeltaBetween:then and:now.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7168
	self selectOnAnyReadable:nil writable:nil exception:nil withTimeOut:delta.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7169
	now := OperatingSystem getMillisecondTime.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7170
    ]
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7171
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
     OperatingSystem millisecondDelay:2000
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
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7177
millisecondTime:msTime1 isAfter:msTime2
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7178
    "return true if msTime1 is after msTime2, false if not.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7179
     The two arguments are supposed to be millisecond times 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7180
     (such as returned getMillisecondTime) which wrap at 16r1FFFFFFF.
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
     This should really be moved to some RelativeTime class."
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
    (msTime1 > msTime2) ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7185
	((msTime1 - msTime2) >= 16r10000000) ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7186
	    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7187
	].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7188
	^ true
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7189
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7190
    ((msTime2 - msTime1) > 16r10000000) ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7191
	^ true
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7192
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7193
    ^ false
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7194
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7195
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7196
millisecondTimeAdd:msTime1 and:msTime2
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7197
    "Add two millisecond times (such as returned getMillisecondTime).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7198
     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
  7199
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7200
     This should really be moved to some RelativeTime class."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7201
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7202
    |sum|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7203
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7204
    sum := msTime1 + msTime2.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7205
    (sum > 16r1FFFFFFF) ifTrue:[^ sum - 16r20000000].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7206
    (sum < 0) ifTrue:[^ sum + 16r20000000].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7207
    ^ sum
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7208
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7209
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7210
millisecondTimeDeltaBetween:msTime1 and:msTime2
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7211
    "subtract two millisecond times (such as returned getMillisecondTime)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7212
     and return the difference. Since milli-times wrap (at 16r01FFFFFFF), 
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7213
     some special handling is built-in here.
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7214
     The returned value is msTime1 - msTime2. The returned value is invalid
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7215
     if the delta is >= 0x10000000.
63
1f0cdefb013f *** empty log message ***
claus
parents: 51
diff changeset
  7216
810
9b3676f51220 mhmh - even though ultrix defines daylight,
Claus Gittinger <cg@exept.de>
parents: 809
diff changeset
  7217
     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
  7218
     better yet: create a subclass of Integer named LimitedRangeInteger."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7219
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7220
    (msTime1 > msTime2) ifTrue:[
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7221
	^ msTime1 - msTime2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7222
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7223
    ^ msTime1 + 16r10000000 - msTime2
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7224
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7225
    "
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7226
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:1   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7227
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:(16 / 3)  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7228
     OperatingSystem millisecondTimeAdd:16r0FFFFFFF and:1000   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7229
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7230
     OperatingSystem millisecondTimeDeltaBetween:0 and:16r0FFFFFFF  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7231
     OperatingSystem millisecondTimeDeltaBetween:(13/3) and:16r0FFFFFFF     
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7232
     OperatingSystem millisecondTimeDeltaBetween:999 and:16r0FFFFFFF       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7233
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7234
     OperatingSystem millisecondTime:0 isAfter:16r0FFFFFFF    
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7235
     OperatingSystem millisecondTime:(13/3) isAfter:16r0FFFFFFF   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7236
     OperatingSystem millisecondTime:999 isAfter:16r0FFFFFFF       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7237
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7238
     OperatingSystem millisecondTime:0 isAfter:0          
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7239
     OperatingSystem millisecondTime:(13/3) isAfter:0  
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7240
     OperatingSystem millisecondTime:999 isAfter:0       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7241
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7242
     OperatingSystem millisecondTime:1 isAfter:0        
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7243
     OperatingSystem millisecondTime:(13/3) isAfter:2
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7244
     OperatingSystem millisecondTime:999 isAfter:900       
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7245
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7246
     |t1 t2|
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7247
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7248
     t1 := Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7249
     (Delay forMilliseconds:1) wait.   
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7250
     t2 := Time millisecondClockValue.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7251
     OperatingSystem millisecondTimeDeltaBetween:t2 and:t1 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7252
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7253
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7254
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7255
sleep:numberOfSeconds
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7256
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7257
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7258
    "cease ANY action for some time. This suspends the whole smalltalk
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7259
     (unix-) process for some time.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7260
     Not really useful since not even low-prio processes and interrupt
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7261
     handling will run during the sleep.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7262
     Use either OperatingSystem>>millisecondDelay: (which makes all
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7263
     threads sleep, but handles interrupts) or use a Delay (which makes
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7264
     only the calling thread sleep)."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7265
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7266
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7267
252
  7268
    if (__isSmallInteger(numberOfSeconds)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7269
	sleep(__intVal(numberOfSeconds));
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7270
	RETURN ( self );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7271
    }
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7272
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7273
    "
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7274
     argument not integer
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7275
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  7276
    ^ self primitiveFailed
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7277
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7278
    "
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7279
     OperatingSystem sleep:2
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7280
    "
10
claus
parents: 5
diff changeset
  7281
! !
claus
parents: 5
diff changeset
  7282
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  7283
!OperatingSystem class methodsFor:'users & groups'!
616
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
getEffectiveGroupID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7286
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7287
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7288
    "return the current users (thats you) effective numeric group id.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7289
     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
  7290
     as a setuid program (of which you should think about twice)."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7291
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7292
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7293
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7294
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7295
    int uid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7296
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7297
    uid = getegid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7298
    RETURN ( __MKSMALLINT(uid) );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7299
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7300
    /* --- return same as getGroupID --- */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7301
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7302
    ^ self getGroupID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7303
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7304
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7305
     OperatingSystem getEffectiveGroupID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7306
    "
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
getEffectiveUserID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7310
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7311
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7312
    "return the current users (thats you) effective numeric user id.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7313
     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
  7314
     as a setuid program (of which you should think about twice)."
10
claus
parents: 5
diff changeset
  7315
claus
parents: 5
diff changeset
  7316
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  7317
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7318
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7319
    int uid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7320
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7321
    uid = geteuid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7322
    RETURN ( __MKSMALLINT(uid) );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7323
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7324
    /* --- return same as getUserID --- */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7325
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7326
    ^ self getUserID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7327
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7328
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7329
     OperatingSystem getEffectiveUserID
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7330
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7331
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7332
2251
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7333
getFullUserName
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7334
    "{ Pragma: +optSpace }"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7335
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7336
    "return a string with the users full name (thats you) - if available.
2251
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7337
     If not, return the login name as a fallBack."
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7338
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7339
    ^ self
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7340
        getFullUserNameFromID:(self getUserID)
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7341
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7342
    "
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7343
     OperatingSystem getFullUserName 
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7344
    "
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7345
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7346
    "Modified: 24.1.1997 / 11:31:55 / cg"
2251
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7347
!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  7348
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7349
getFullUserNameFromID:userID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7350
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7351
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7352
    "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
  7353
     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
  7354
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7355
    |info gecos|
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7356
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7357
    info := self userInfoOf:userID.
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7358
    (info notNil
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7359
    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
  7360
	gecos := info at:#gecos.
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7361
	(gecos includes:$,) ifTrue:[
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7362
	    ^ gecos copyTo:(gecos indexOf:$,) - 1
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7363
	].
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7364
	^ gecos
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7365
    ].
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7366
    ^ self getUserNameFromID:userID
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7367
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7368
    "
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7369
     OperatingSystem getFullUserNameFromID:0 
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7370
     OperatingSystem getFullUserNameFromID:(OperatingSystem getUserID)  
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7371
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7372
     OperatingSystem getUserNameFromID:(OperatingSystem getUserID)  
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7373
    "
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7374
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7375
    "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
  7376
!
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7377
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7378
getGroupID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7379
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7380
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7381
    "return the current users (thats you) numeric group id"
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
%{  /* NOCONTEXT */
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
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7386
    int uid;
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
    uid = getgid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7389
    RETURN ( __MKSMALLINT(uid) );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7390
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7391
# ifdef SYSTEM_HAS_GROUPS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7392
    /* ... */
10
claus
parents: 5
diff changeset
  7393
# endif
claus
parents: 5
diff changeset
  7394
#endif
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7395
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7396
    ^ 1 "just a dummy for systems which do not have userIDs"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7397
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7398
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7399
     OperatingSystem getGroupID
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
!
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
getGroupNameFromID:aNumber
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7404
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7405
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7406
    "return the group-name-string for a given numeric group-id"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7407
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7408
%{  /* NOCONTEXT */
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
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7411
    struct group *g;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7412
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7413
    if (__isSmallInteger(aNumber)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7414
	g = getgrgid(__intVal(aNumber));
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7415
	if (g) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7416
	    RETURN ( __MKSTRING(g->gr_name) );
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7417
	}
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7418
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7419
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7420
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7421
    ^ '???'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7422
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7423
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7424
     OperatingSystem getGroupNameFromID:0
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7425
     OperatingSystem getGroupNameFromID:10
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7426
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7427
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7428
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7429
getHomeDirectory
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7430
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7431
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7432
    "return the name of the users home directory
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7433
     (i.e. yours)"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7434
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7435
    ^ OperatingSystem getEnvironment:'HOME'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7436
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7437
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7438
     OperatingSystem getHomeDirectory
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7439
    "
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7440
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7441
    "Modified: 24.1.1997 / 11:32:13 / cg"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7442
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7443
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7444
getLoginName
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7445
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7446
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7447
    "return a string with the users login name (thats yours)"
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7448
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7449
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7450
    static char cachedName[64];
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7451
    static firstCall = 1;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7452
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7453
    char *name = (char *)0;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7454
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7455
    if (firstCall) {
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7456
        name = (char *)getlogin();
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7457
        if (! name || (name[0] == 0)) {
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7458
            name = (char *)getenv("LOGNAME");
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7459
        }
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7460
        if (name && (strlen(name) < sizeof(cachedName))) {
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7461
            strcpy(cachedName, name);
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7462
            firstCall = 0;
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7463
        }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7464
    } else {
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7465
        name = cachedName;
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7466
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7467
#else
1632
355409cd49d8 more for NT
Claus Gittinger <cg@exept.de>
parents: 1623
diff changeset
  7468
# ifdef WIN32
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7469
    if (firstCall) {
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7470
        int nameSize = sizeof(cachedName);
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7471
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7472
        if (GetUserName(cachedName, &nameSize) == TRUE) {
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7473
            name = cachedName;
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7474
            firstCall = 0;
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7475
        }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7476
    } else {
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7477
        name = cachedName;
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7478
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7479
# endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7480
#endif
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7481
    if (! name || (name[0] == 0) ) {
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7482
        name = (char *)getenv("LOGNAME");
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7483
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7484
    if (! name || (name[0] == 0) ) {
2252
ece20502eaf2 comments
Claus Gittinger <cg@exept.de>
parents: 2251
diff changeset
  7485
        name = "you";
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7486
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7487
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7488
    RETURN ( __MKSTRING(name) );
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7489
%}.
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7490
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7491
     OperatingSystem getLoginName
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7492
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7493
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7494
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7495
getUserID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7496
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7497
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7498
    "return the current users (thats you) numeric user id"
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
%{  /* NOCONTEXT */
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
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7503
    int uid;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7504
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7505
    uid = getuid();
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7506
    RETURN ( __MKSMALLINT(uid) );
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7507
#else
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7508
# ifdef SYSTEM_HAS_USERS
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7509
    /* ... */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7510
# endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7511
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7512
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7513
    ^ 1 "just a dummy for systems which do not have userIDs"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7514
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7515
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7516
     OperatingSystem getUserID
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  7517
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7518
!
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7519
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7520
getUserNameFromID:aNumber
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7521
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7522
1549
df9d235c992e added #getFullUserNameFromID:, to access the GECOS field
Claus Gittinger <cg@exept.de>
parents: 1512
diff changeset
  7523
    "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
  7524
     This is the login name, not the fullName."
616
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
%{  /* NOCONTEXT */
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7527
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7528
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7529
    struct passwd *p;
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 (__isSmallInteger(aNumber)) {
1588
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7532
	p = getpwuid(__intVal(aNumber));
0f9e80f6ae74 WANT_SYSTEM definition moved to sunIntern.h (for sunos)
Claus Gittinger <cg@exept.de>
parents: 1549
diff changeset
  7533
	if (p) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7534
	    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
  7535
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7536
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7537
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7538
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7539
    ^ '? (' , aNumber printString , ')'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7540
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7541
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7542
     OperatingSystem getUserNameFromID:0
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7543
     OperatingSystem getUserNameFromID:100
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7544
     OperatingSystem getUserNameFromID:9991 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7545
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7546
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7547
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7548
userInfoOf:aNameOrID
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7549
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7550
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7551
    "return a dictionary filled with userinfo. The argument can be either
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7552
     a string with the users name or its numeric id.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7553
     Notice, that not all systems provide (all of) this info;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7554
     DOS systems return nothing; 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7555
     non-SYSV4 systems have no age/comment.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7556
     Portable applications may want to check the systemType and NOT depend
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7557
     on all keys to be present in the returned dictionary.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7558
     Another notice: on some systems (SYSV4), the gecos field includes multiple
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7559
     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
  7560
     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
  7561
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7562
    |info name passw uid gid age comment
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7563
     gecos dir shell|
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7564
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7565
%{
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7566
#ifdef UNIX_LIKE
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7567
    struct passwd *buf;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7568
    int ret;
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
    if (__isString(aNameOrID)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7571
	buf = getpwnam(__stringVal(aNameOrID));
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7572
    } else if (__isSmallInteger(aNameOrID)) {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7573
	buf = getpwuid(__intVal(aNameOrID));
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7574
    } else {
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7575
	buf = (struct passwd *)0;
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
    if (buf) {
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7578
	name = __MKSTRING(buf->pw_name);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7579
	passw = __MKSTRING(buf->pw_passwd);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7580
# ifdef SYSV4
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7581
	age = __MKSTRING(buf->pw_age);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7582
	comment = __MKSTRING(buf->pw_comment);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7583
# endif
1688
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7584
	dir = __MKSTRING(buf->pw_dir);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7585
	gecos = __MKSTRING(buf->pw_gecos);
8a42db1eea60 removed all COMMA_CON / CON_COMMA uses
Claus Gittinger <cg@exept.de>
parents: 1675
diff changeset
  7586
	shell = __MKSTRING(buf->pw_shell);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7587
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7588
	uid = __MKSMALLINT(buf->pw_uid);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7589
	gid = __MKSMALLINT(buf->pw_gid);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7590
    }
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7591
#endif
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7592
%}.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7593
    info := IdentityDictionary new.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7594
    name notNil ifTrue:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7595
	info at:#name put:name.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7596
    ] ifFalse:[
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7597
	info at:#name put:'unknown'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7598
    ].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7599
    passw notNil ifTrue:[info at:#passwd put:passw].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7600
    age notNil ifTrue:[info at:#age put:age].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7601
    comment notNil ifTrue:[info at:#comment put:comment].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7602
    gecos notNil ifTrue:[info at:#gecos put:gecos].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7603
    shell notNil ifTrue:[info at:#shell put:shell].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7604
    dir notNil ifTrue:[info at:#dir put:dir].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7605
    uid notNil ifTrue:[info at:#uid put:uid].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7606
    gid  notNil ifTrue:[info at:#gid put:gid].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7607
    ^ info
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7608
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7609
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7610
     OperatingSystem userInfoOf:'root'
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7611
     OperatingSystem userInfoOf:1
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7612
     OperatingSystem userInfoOf:'claus' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7613
     OperatingSystem userInfoOf:'fooBar' 
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7614
     OperatingSystem userInfoOf:(OperatingSystem getUserID)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7615
    "
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7616
! !
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7617
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  7618
!OperatingSystem class methodsFor:'waiting for events'!
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7619
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7620
blockingChildProcessWait
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7621
     "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
  7622
%{ /*NOCONTEXT*/
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7623
#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
  7624
    RETURN(false);
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7625
#else
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7626
    RETURN(true);
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7627
#endif
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7628
%}
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7629
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7630
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7631
childProcessWait:blocking
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7632
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  7633
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7634
    "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
  7635
     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
  7636
     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
  7637
     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
  7638
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7639
    |pid status code core|
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7640
%{
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7641
#ifdef UNIX_LIKE
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7642
    int p;
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7643
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7644
# if defined(HAS_WAITPID)
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7645
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7646
    int s;
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7647
#   define __WAIT     waitpid(-1, &s, blocking == true ? WUNTRACED : WNOHANG|WUNTRACED)
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7648
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7649
# else
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7650
#  if defined(HAS_WAIT3)
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7651
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7652
    union wait s;
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7653
#   define __WAIT      wait3(&s, blocking == true ? WUNTRACED : WNOHANG|WUNTRACED, 0)
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7654
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7655
#  else /* neithe waitpid, nor wait3; use wait, which is blocking */
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7656
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7657
    int s;
1653
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7658
#   define __WAIT      wait(&s)
51bd45bcc19d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1633
diff changeset
  7659
#   define __BLOCKING_WAIT__ 1
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7660
1654
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7661
    if (blocking != true) {
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7662
	/*
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7663
	 * We do not support nonBlocking waits, so signal an error
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7664
	 * Sorry about the goto, but with all these ifdefs ...
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7665
	 */
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7666
	goto done;
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7667
    }
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7668
#  endif /*!HAS_WAIT3*/
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7669
# endif  /*!HAS_WAITPID*/
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7670
2098
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7671
# if !defined(WIFEXITED)
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7672
#  define WIFEXITED(stat)      (((int)((stat)&0377))==0)
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7673
#  define WIFSIGNALED(stat)    (((int)((stat)&0377))>0&&((int)(((stat)>>8)&0377))==0)
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7674
#  define WIFSTOPPED(stat)     (((int)((stat)&0377))==0177&&((int)(((stat)>>8)&0377))!=0)
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7675
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7676
#  define WEXITSTATUS(stat)    ((int)(((stat)>>8)&0377))
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7677
#  define WTERMSIG(stat)       (((int)((stat)&0377))&0177)
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7678
#  define WSTOPSIG(stat)       ((int)(((stat)>>8)&0377))
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7679
# endif /*!WIFEXITED*/
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7680
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7681
# if !defined(WCOREDUMP)
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7682
#  define WCOREDUMP(stat)      ((int)(((stat)>>8)&0200))
8790a0a6b214 WIFEXIT...WCOREDUMP are always needed
Claus Gittinger <cg@exept.de>
parents: 2080
diff changeset
  7683
# endif /*!WCOREDUMP*/
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7684
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7685
# if __BLOCKING_WAIT__
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  7686
    __BEGIN_INTERRUPTABLE__
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7687
# endif
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  7688
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7689
    do {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7690
	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
  7691
    } 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
  7692
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7693
# if __BLOCKING_WAIT__
1433
8b2eacaea59c Getdomainname for Unixware.
Stefan Vogel <sv@exept.de>
parents: 1422
diff changeset
  7694
    __END_INTERRUPTABLE__
1654
4352c5837f37 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1653
diff changeset
  7695
#   undef __BLOCKING_WAIT__
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7696
# endif
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7697
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7698
# undef __WAIT
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7699
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7700
    if (p == 0)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7701
	RETURN(nil)
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
    if (p == -1) {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7704
	if (errno == ECHILD)
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7705
	    RETURN(nil);
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7706
    } else {
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7707
	pid = __MKSMALLINT(p);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7708
	if (WIFEXITED(s)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7709
	    status = @symbol(exit);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7710
	    code = __MKSMALLINT(WEXITSTATUS(s));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7711
	    core = WCOREDUMP(s) ? true : false;
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7712
	} else if (WIFSIGNALED(s)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7713
	    status = @symbol(signal);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7714
	    code = __MKSMALLINT(WTERMSIG(s));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7715
	} else if (WIFSTOPPED(s)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7716
	    status = @symbol(stop);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7717
	    code = __MKSMALLINT(WSTOPSIG(s));
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7718
	}
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7719
# if defined(WIFCONTINUED)
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7720
	else if (WIFCONTINUED(s)) {
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7721
	    status = @symbol(continue);
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7722
	} 
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7723
# endif
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7724
    }
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7725
done: ;
1597
f35cd92a7648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1588
diff changeset
  7726
#endif /* UNIX_LIKE */
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7727
%}.
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7728
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7729
    pid isNil ifTrue:[
1487
349bf72ca044 nt fixes
Claus Gittinger <cg@exept.de>
parents: 1470
diff changeset
  7730
	^ self primitiveFailed
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7731
    ].
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7732
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7733
    ^ 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
  7734
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7735
    "
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7736
     OperatingSystem childProcessWait:false
827
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7737
    "
840
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7738
523533898acd Reset sigCHLD interrupt handler, when no more processes are being waited for.
Stefan Vogel <sv@exept.de>
parents: 832
diff changeset
  7739
    "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
  7740
!
3eb3911cb63e Support of SIGCHL interrupt handling and OS-independent proces status
Stefan Vogel <sv@exept.de>
parents: 813
diff changeset
  7741
10
claus
parents: 5
diff changeset
  7742
readCheck:fd
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7743
    "return true, if data is available on a filedescriptor (i.e. read
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7744
     is possible without blocking)"
10
claus
parents: 5
diff changeset
  7745
claus
parents: 5
diff changeset
  7746
    (self selectOnAnyReadable:(Array with:fd)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7747
		     writable:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7748
		    exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7749
		  withTimeOut:0) == fd
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7750
	ifTrue:[^ true].
10
claus
parents: 5
diff changeset
  7751
    ^ false
claus
parents: 5
diff changeset
  7752
!
claus
parents: 5
diff changeset
  7753
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7754
selectOn:fd1 and:fd2 withTimeOut:millis
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7755
    "wait for any fd to become ready; timeout after t milliseconds.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7756
     A zero timeout-time will immediately return (i.e. poll).
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7757
     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
  7758
     Obsolete:
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7759
	This is a leftover method and will vanish."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7760
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7761
    ^ self selectOnAnyReadable:(Array with:fd1 with:fd2)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7762
		      writable:(Array with:fd1 with:fd2)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7763
		     exception:nil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7764
		   withTimeOut:millis
10
claus
parents: 5
diff changeset
  7765
!
claus
parents: 5
diff changeset
  7766
claus
parents: 5
diff changeset
  7767
selectOn:fd withTimeOut:millis
claus
parents: 5
diff changeset
  7768
    "wait for aFileDesriptor to become ready; timeout after t milliseconds.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7769
     Return true, if i/o ok, false if timed-out or interrupted.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7770
     With 0 as timeout argument, this can be used to check for availability
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7771
     of read-data.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7772
     Experimental."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7773
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7774
    ^ self selectOnAnyReadable:(Array with:fd)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7775
		      writable:(Array with:fd)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7776
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7777
		   withTimeOut:millis
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7778
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7779
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7780
selectOnAny:fdArray withTimeOut:millis
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7781
    "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
  7782
     timeout after t milliseconds. An empty set will always wait.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7783
     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
  7784
     Experimental."
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7785
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7786
    ^ self selectOnAnyReadable:fdArray
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  7787
		      writable:fdArray
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7788
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7789
		   withTimeOut:millis
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7790
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7791
10
claus
parents: 5
diff changeset
  7792
selectOnAnyReadable:fdArray withTimeOut:millis
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7793
    "wait for any fd in fdArray (an Array of integers) to become ready for 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7794
     reading. Timeout after t milliseconds. An empty set will always wait.
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7795
     A zero timeout-time will immediately return (i.e. poll).
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7796
     Return first ready fd if i/o ok, nil if timed-out or interrupted.
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7797
     Experimental."
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7798
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7799
    ^ self selectOnAnyReadable:fdArray 
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7800
		      writable:nil 
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7801
		     exception:nil
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7802
		   withTimeOut:millis
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7803
!
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7804
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7805
selectOnAnyReadable:readFdArray writable:writeFdArray exception:exceptFdArray withTimeOut:millis
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7806
    "wait for any fd in readFdArray (an Array of integers) to become ready for 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7807
     reading, writeFdArray to become ready for writing, or exceptFdArray to 
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7808
     arrive exceptional data (i.e. out-of-band data).
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7809
     Timeout after t milliseconds or, if the timeout time is 0, immediately..
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7810
     Empty fd-sets will always wait. Zero time can be used to poll file-
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7811
     descriptors (i.e. to check if I/O possible without blocking).
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7812
     Return first ready fd if I/O ok, nil if timed-out or interrupted."
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
  7813
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7814
%{
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7815
#ifdef MSDOS_LIKE
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7816
    /*
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7817
     * support a delay-wait only
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7818
     * (i.e. fail if any filedescriptor is selected upon)
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7819
     */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7820
    int count;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7821
    int i;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7822
    int t;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7823
    OBJ fd;
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
    if (! __isSmallInteger(millis)) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7826
	goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7827
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7828
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7829
    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
  7830
	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
  7831
	    goto fail;  
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7832
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7833
	count = __arraySize(readFdArray);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7834
	for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7835
	    fd = __ArrayInstPtr(readFdArray)->a_element[i];
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7836
	    if (fd != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7837
		goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7838
	    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7839
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7840
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7841
    if (writeFdArray != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7842
	if (! __isArray(writeFdArray)) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7843
	    goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7844
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7845
	count = __arraySize(writeFdArray);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7846
	for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7847
	    fd = __ArrayInstPtr(writeFdArray)->a_element[i];
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7848
	    if (fd != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7849
		goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7850
	    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7851
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7852
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7853
    if (exceptFdArray != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7854
	if (! __isArray(exceptFdArray)) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7855
	    goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7856
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7857
	count = __arraySize(exceptFdArray);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7858
	for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7859
	    fd = __ArrayInstPtr(exceptFdArray)->a_element[i];
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7860
	    if (fd != nil) {
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7861
		goto fail;
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7862
	    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7863
	}
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7864
    }
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7865
    t = __intVal(millis);
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7866
    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
  7867
	/*
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  7868
	 * delay only 
2d067b1d716c added a method to fetch a unix processes' exitStatus (to avoid zombies)
Claus Gittinger <cg@exept.de>
parents: 932
diff changeset
  7869
	 */
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7870
	Sleep(t);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7871
    }
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7872
    RETURN (nil);
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7873
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7874
#else /* not MSDOS_LIKE */
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7875
    fd_set rset, wset, eset;
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7876
    struct timeval wt, et;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7877
    int t, f, maxF, i, lX, bX;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7878
    OBJ fd, retFd;
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7879
    int ret;
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7880
    int count;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7881
252
  7882
    if (__isSmallInteger(millis)) {
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7883
	FD_ZERO(&rset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7884
	FD_ZERO(&wset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7885
	FD_ZERO(&eset);
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7886
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7887
	maxF = -1;
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7888
	if (readFdArray != nil) {
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7889
	    if (! __isArray(readFdArray)) {
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7890
		goto fail;    
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7891
	    }
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7892
	    count = __arraySize(readFdArray);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7893
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7894
	    for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7895
		fd = __ArrayInstPtr(readFdArray)->a_element[i];
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7896
		if (fd != nil) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7897
		    f = __intVal(fd);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7898
		    if ((f >= 0) && (f < FD_SETSIZE)) {
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7899
			FD_SET(f, &rset);
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7900
			if (f > maxF) maxF = f;
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7901
		    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7902
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7903
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7904
	}
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7905
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7906
	if (writeFdArray != nil) {
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7907
	    if (! __isArray(writeFdArray)) {
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7908
		goto fail;    
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7909
	    }
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7910
	    count = __arraySize(writeFdArray);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7911
	    for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7912
		fd = __ArrayInstPtr(writeFdArray)->a_element[i];
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7913
		if (fd != nil) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7914
		    f = __intVal(fd);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7915
		    if ((f >= 0) && (f < FD_SETSIZE)) {
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7916
			FD_SET(f, &wset);       
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7917
			if (f > maxF) maxF = f;
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7918
		    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7919
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7920
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7921
	}
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7922
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7923
	if (exceptFdArray != nil) {
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7924
	    if (! __isArray(exceptFdArray)) {
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7925
		goto fail;    
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7926
	    }
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7927
	    count = __arraySize(exceptFdArray);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7928
	    for (i=0; i<count;i++) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7929
		fd = __ArrayInstPtr(exceptFdArray)->a_element[i];
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7930
		if (fd != nil) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7931
		    f = __intVal(fd);
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7932
		    if ((f >= 0) && (f < FD_SETSIZE)) {
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7933
			FD_SET(f, &eset);       
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7934
			if (f > maxF) maxF = f;
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7935
		    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7936
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7937
	    }
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7938
	}
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7939
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7940
	t = __intVal(millis);
774
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7941
	if (t) {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7942
	    wt.tv_sec = t / 1000;
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7943
	    wt.tv_usec = (t % 1000) * 1000;
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7944
	} else {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7945
	    wt.tv_sec = wt.tv_usec = 0;
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7946
	}
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7947
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7948
	/*
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7949
	 * make certain, that interrupt gets us out of the select
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7950
	 */
362
claus
parents: 359
diff changeset
  7951
	__BEGIN_INTERRUPTABLE__
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7952
	errno = 0;
774
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7953
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7954
	if (t == 0) {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7955
	    /* 
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7956
	     * 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
  7957
	     * interruptable.
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7958
	     */
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7959
	    do {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7960
		ret = select(maxF+1, &rset, &wset, &eset, &wt);
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7961
	    } while ((ret < 0) && (errno == EINTR));
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7962
	} else {
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7963
	    do {
813
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7964
		ret = select(maxF+1, &rset, &wset, &eset, &wt);
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7965
		/* 
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7966
		 * 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
  7967
		 * could otherwise stay in this loop forever ...
1f9611434418 first stuff for locale support added
Claus Gittinger <cg@exept.de>
parents: 811
diff changeset
  7968
		 * 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
  7969
		 * 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
  7970
		 */
774
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7971
	    } while (0 /* (ret < 0) && (errno == EINTR) */ );
e0ee05157570 selectOnAny with timeout vs. no timeout
Claus Gittinger <cg@exept.de>
parents: 771
diff changeset
  7972
	}
362
claus
parents: 359
diff changeset
  7973
	__END_INTERRUPTABLE__
95
d22739a0c6e9 *** empty log message ***
claus
parents: 88
diff changeset
  7974
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7975
	if (ret > 0) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7976
	    for (i=0; i <= maxF; i++) {
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7977
		if (FD_ISSET(i, &rset)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7978
		 || FD_ISSET(i, &wset)
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7979
		 || FD_ISSET(i, &eset)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7980
		    RETURN ( __MKSMALLINT(i) );
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7981
		}
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7982
	    }
855
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  7983
	} else {
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  7984
	    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
  7985
		if (errno != EINTR) {
1058
5d010b97ecb8 added methods to handle symbolic errno codes
Claus Gittinger <cg@exept.de>
parents: 1046
diff changeset
  7986
		    fprintf(stderr, "OS: select errno = %d\n", errno);
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  7987
		    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
  7988
		}
2de3c842c687 dont use SIGPIPE - it leads to trouble if its executed asynchrounously or
Claus Gittinger <cg@exept.de>
parents: 843
diff changeset
  7989
	    }
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7990
	}
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  7991
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7992
	/*
2117
460b14a6db96 added a query for interrupts being blocked
Claus Gittinger <cg@exept.de>
parents: 2107
diff changeset
  7993
	 * return nil (means time expired or interrupted)
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7994
	 */
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  7995
	RETURN ( nil );
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  7996
    }
831
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7997
#endif /* not MSDOS_LIKE */
bc2dac4b75fb merged in NT changes
Claus Gittinger <cg@exept.de>
parents: 830
diff changeset
  7998
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  7999
fail: ;
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  8000
%}.
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  8001
    "
300
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  8002
     timeout argument not integer,
fe1f742a9224 *** empty log message ***
claus
parents: 275
diff changeset
  8003
     or any fd-array nonNil and not an array
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  8004
     or not supported by OS
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
  8005
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  8006
    ^ self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  8007
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  8008
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8009
setBlocking:aBoolean on:fd
1845
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  8010
    "{ Pragma: +optSpace }"
9d7e909b61dd some methods are compiled for space
Claus Gittinger <cg@exept.de>
parents: 1808
diff changeset
  8011
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8012
    "set/clear the blocking attribute - if set (which is the default)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8013
     a read on the fileDescriptor will block until data is available.
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8014
     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
  8015
     nil."
10
claus
parents: 5
diff changeset
  8016
claus
parents: 5
diff changeset
  8017
%{  /* NOCONTEXT */
claus
parents: 5
diff changeset
  8018
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8019
    int ret, flags;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8020
    int savInt;
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8021
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8022
#if defined(F_GETFL) && defined(F_SETFL)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8023
# if defined(FNDELAY)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8024
    if (__isSmallInteger(fd)) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  8025
	int f = __intVal(fd);
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  8026
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  8027
	flags = fcntl(f, F_GETFL, 0);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8028
	if (aBoolean == true) {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  8029
	    ret = fcntl(f, F_SETFL, flags & ~FNDELAY);
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8030
	} else {
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  8031
	    ret = fcntl(f, F_SETFL, flags | FNDELAY);
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  8032
	}
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8033
	if (ret >= 0) ret = flags;
1135
7fcefc747f00 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1132
diff changeset
  8034
	RETURN ( __MKSMALLINT(ret) );
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  8035
    }
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8036
# endif
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  8037
#endif
308
f04744ef7b5d *** empty log message ***
claus
parents: 300
diff changeset
  8038
%}.
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
  8039
    "
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8040
     fd argument not integer
185
d9be85c4cfe4 more functions
claus
parents: 123
diff changeset
  8041
    "
792
06ec639ead96 changes for NT;
Claus Gittinger <cg@exept.de>
parents: 774
diff changeset
  8042
    ^ self primitiveFailed
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  8043
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  8044
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8045
writeCheck:fd
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8046
    "return true, if filedescriptor can be written without blocking"
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8047
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8048
    (self selectOnAnyReadable:nil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8049
		     writable:(Array with:fd)
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8050
		    exception:nil
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8051
		  withTimeOut:0) == fd
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8052
	ifTrue:[^ true].
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8053
    ^ false
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  8054
! !
434
0511ecb7c818 *** empty log message ***
claus
parents: 433
diff changeset
  8055
2251
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8056
!OperatingSystem::FileStatusInfo class methodsFor:'instance creation'!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8057
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8058
type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT statusChanged:sT path:lP
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8059
    ^ self basicNew
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8060
	type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT statusChanged:sT path:lP       
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8061
! !
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8062
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8063
!OperatingSystem::FileStatusInfo methodsFor:'accessing'!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8064
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8065
accessed
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8066
    "return accessed"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8067
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8068
    ^ accessed!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8069
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8070
gid
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8071
    "return gid"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8072
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8073
    ^ gid!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8074
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8075
id
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8076
    "return id"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8077
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8078
    ^ id!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8079
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8080
mode
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8081
    "return mode"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8082
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8083
    ^ mode!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8084
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8085
modified
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8086
    "return modified"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8087
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8088
    ^ modified!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8089
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8090
path
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8091
    "for symbolic links only: return the path where the symbolic link points to"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8092
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8093
    ^ path
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8094
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8095
!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8096
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8097
size
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8098
    "return size"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8099
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8100
    ^ size!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8101
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8102
statusChanged
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8103
    "return statusChanged"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8104
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8105
    ^ statusChanged!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8106
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8107
type
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8108
    "return type"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8109
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8110
    ^ type!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8111
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8112
uid
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8113
    "return uid"
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8114
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8115
    ^ uid! !
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8116
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8117
!OperatingSystem::FileStatusInfo methodsFor:'backward compatibility'!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8118
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8119
at:key
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8120
    "backward compatibility access: in previous releases, IdentityDictionaries
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8121
     were used to hold my information. Allow access via key messages.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8122
     This method will vanish - use the proper access protocol."
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8123
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8124
    ^ self perform:key
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8125
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8126
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8127
! !
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8128
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8129
!OperatingSystem::FileStatusInfo methodsFor:'private accessing'!
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8130
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8131
type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT statusChanged:sT path:lP
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8132
    type := t.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8133
    mode := m.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8134
    uid := u.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8135
    gid := g.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8136
    size := s.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8137
    id := i.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8138
    accessed := aT.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8139
    modified := mT.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8140
    statusChanged := sT.
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8141
    path := lP
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8142
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8143
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8144
! !
40f3765a94ff added #getFullUserName (a shortcut)
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
  8145
1966
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8146
!OperatingSystem::OSProcessStatus class methodsFor:'documentation'!
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
documentation
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
    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
  8151
    operating system processes (these are no smalltalk processes!!).
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
    [Instance variables:]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8154
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8155
	pid     <Integer>       OS-Process identifier
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8156
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8157
	status  <Symbol>        either #exit #signal #stop #continue
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    <Integer>       either exitcode or signalnumber
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
	core    <Boolean>       true if core has been dumped
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8162
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
    [author:]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8165
	Stefan Vogel
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8166
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8167
    [see also:]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8168
	OperatingSystem
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
! !
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
!OperatingSystem::OSProcessStatus class methodsFor:'instance creation'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8173
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8174
pid:pid status:status code:code core:core
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8175
    "private interface for OperatingSystem"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8176
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8177
    ^ 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
  8178
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8179
    "Created: 28.12.1995 / 14:16:14 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8180
    "Modified: 30.4.1996 / 18:25:00 / cg"
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
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8183
processCreationFailure
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8184
    "private interface for OperatingSystem"
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
    ^ 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
  8187
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8188
    "Created: 28.12.1995 / 14:35:29 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8189
    "Modified: 30.4.1996 / 18:25:05 / 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:'accessing'!
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
code
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8195
    "return the exitcode / signalNumber"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8196
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8197
    ^ code
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8198
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8199
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8200
    "Modified: 30.4.1996 / 18:26:23 / cg"
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
core
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8204
    "return true if core has been dumped, false otherwise"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8205
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8206
    ^ core == true
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
    "Modified: 28.12.1995 / 14:14:38 / stefan"
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
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8211
pid
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8212
    "return the pid"
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
    ^ pid
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8215
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8216
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8217
    "Modified: 30.4.1996 / 18:26:30 / cg"
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
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8220
status
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8221
    "return status as a Symbol;
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8222
     one of #exit #signal #stop #continue"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8223
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8224
    ^ status
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8225
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8226
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8227
    "Modified: 30.4.1996 / 18:26:54 / cg"
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
!OperatingSystem::OSProcessStatus methodsFor:'initialization'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8231
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8232
pid:newPid status:newStatus code:newCode core:newCore
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8233
    pid := newPid.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8234
    status := newStatus.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8235
    code := newCode.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8236
    core := newCore.
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
    "Created: 28.12.1995 / 14:18:22 / stefan"
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
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8241
!OperatingSystem::OSProcessStatus methodsFor:'private-OS interface'!
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
code:something
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8244
    "set the exitCode"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8245
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8246
    code := something.
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
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8249
    "Modified: 30.4.1996 / 18:25:18 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8250
!
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
core:something
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8253
    "set core"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8254
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8255
    core := something.
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
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8258
!
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
pid:something
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8261
    "set pid"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8262
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8263
    pid := something.
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
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8266
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8267
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8268
status:something
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8269
    "set status"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8270
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8271
    status := something.
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8272
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8273
    "Created: 28.12.1995 / 14:05:07 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8274
! !
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8275
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8276
!OperatingSystem::OSProcessStatus methodsFor:'queries'!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8277
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8278
couldNotExecute
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8279
    "return true when a command could not be executed"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8280
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8281
    ^ status == #exit and:[code = 127].
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8282
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8283
    "Created: 28.12.1995 / 15:43:17 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8284
    "Modified: 30.4.1996 / 18:27:03 / cg"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8285
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8286
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8287
stillAlive
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8288
    "true if process is still alive"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8289
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8290
    ^ status == #stop or:[status == #continue]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8291
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8292
    "Created: 28.12.1995 / 14:27:26 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8293
!
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8294
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8295
success
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8296
    "true if process terminated successfully"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8297
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8298
    ^ status == #exit and:[code = 0]
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8299
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8300
    "Created: 28.12.1995 / 14:13:05 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8301
    "Modified: 28.12.1995 / 14:13:41 / stefan"
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8302
! !
8b14cce1442b Make OSProcesStatus private to OperatingSystem.
Stefan Vogel <sv@exept.de>
parents: 1885
diff changeset
  8303
1799
0a2c5890f4f3 handle 'foo///' in directoryName
Claus Gittinger <cg@exept.de>
parents: 1702
diff changeset
  8304
!OperatingSystem class methodsFor:'documentation'!
630
b785d23d7c5b version at the end
Claus Gittinger <cg@exept.de>
parents: 616
diff changeset
  8305
b785d23d7c5b version at the end
Claus Gittinger <cg@exept.de>
parents: 616
diff changeset
  8306
version
2262
4c4d810f006f semaphore names
Claus Gittinger <cg@exept.de>
parents: 2252
diff changeset
  8307
    ^ '$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.194 1997-01-24 22:11:36 cg Exp $'
630
b785d23d7c5b version at the end
Claus Gittinger <cg@exept.de>
parents: 616
diff changeset
  8308
! !
616
8226d2eb1e3d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  8309
OperatingSystem initialize!