Win32OperatingSystem.st
changeset 11258 5117e5bd0dc3
parent 11253 ea6152cdf700
child 11289 11c2bb7debc4
equal deleted inserted replaced
11257:9689500b7608 11258:5117e5bd0dc3
    33 	privateIn:Win32OperatingSystem
    33 	privateIn:Win32OperatingSystem
    34 !
    34 !
    35 
    35 
    36 Object subclass:#FileStatusInfo
    36 Object subclass:#FileStatusInfo
    37 	instanceVariableNames:'type mode uid gid size id accessed modified created statusChanged
    37 	instanceVariableNames:'type mode uid gid size id accessed modified created statusChanged
    38 		path fullName alternativeName'
    38 		fullName alternativeName sourcePath linkTargetPath'
    39 	classVariableNames:''
    39 	classVariableNames:''
    40 	poolDictionaries:''
    40 	poolDictionaries:''
    41 	privateIn:Win32OperatingSystem
    41 	privateIn:Win32OperatingSystem
    42 !
    42 !
    43 
    43 
   434 #define _HANDLEVal(o)        (HANDLE)(__externalAddressVal(o))
   434 #define _HANDLEVal(o)        (HANDLE)(__externalAddressVal(o))
   435 
   435 
   436 %}
   436 %}
   437 ! !
   437 ! !
   438 
   438 
       
   439 !Win32OperatingSystem primitiveVariables!
       
   440 %{
       
   441 static int coInitialized = 0;
       
   442 %}
       
   443 ! !
       
   444 
   439 !Win32OperatingSystem primitiveFunctions!
   445 !Win32OperatingSystem primitiveFunctions!
   440 %{
   446 %{
   441 
   447 
   442 /* isWindows-NT flag:
   448 /* isWindows-NT flag:
   443  *  1 for NT based systemes, such as NT,XP or 2k
   449  *  1 for NT based systemes, such as NT,XP or 2k
   563     static HINSTANCE libHandle = NULL;
   569     static HINSTANCE libHandle = NULL;
   564 
   570 
   565     return __get_functionAddress(&libHandle, "ole32.DLL", functionName);
   571     return __get_functionAddress(&libHandle, "ole32.DLL", functionName);
   566 }
   572 }
   567 
   573 
   568 %}
       
   569 ! !
       
   570 
       
   571 !Win32OperatingSystem primitiveVariables!
       
   572 %{
       
   573 static int coInitialized = 0;
       
   574 %}
   574 %}
   575 ! !
   575 ! !
   576 
   576 
   577 !Win32OperatingSystem class methodsFor:'documentation'!
   577 !Win32OperatingSystem class methodsFor:'documentation'!
   578 
   578 
  5089 
  5089 
  5090 linkInfoOf:aPathName
  5090 linkInfoOf:aPathName
  5091     "return some object filled with info for the file 'aPathName';
  5091     "return some object filled with info for the file 'aPathName';
  5092      the info (for which corresponding access methods are understood by
  5092      the info (for which corresponding access methods are understood by
  5093      the returned object) is:
  5093      the returned object) is:
  5094 	 type            - a symbol giving the files type
  5094          type            - a symbol giving the files type
  5095 	 mode            - numeric access mode
  5095          mode            - numeric access mode
  5096 	 uid             - owners user id
  5096          uid             - owners user id
  5097 	 gid             - owners group id
  5097          gid             - owners group id
  5098 	 size            - files size
  5098          size            - files size
  5099 	 id              - files number (i.e. inode number)
  5099          id              - files number (i.e. inode number)
  5100 	 accessed        - last access time (as Timestamp)
  5100          accessed        - last access time (as Timestamp)
  5101 	 modified        - last modification time (as Timestamp)
  5101          modified        - last modification time (as Timestamp)
  5102 	 statusChanged   - last status change time (as Timestamp)
  5102          statusChanged   - last status change time (as Timestamp)
  5103 	 alternativeName - (windows only:) the MSDOS name of the file
  5103          alternativeName - (windows only:) the MSDOS name of the file
  5104 
  5104 
  5105      Some of the fields may be returned as nil on systems which do not provide
  5105      Some of the fields may be returned as nil on systems which do not provide
  5106      all of the information.
  5106      all of the information.
  5107      Return nil if such a file does not exist.
  5107      Return nil if such a file does not exist.
  5108      For symbolic links (if supported by the OS),
  5108      For symbolic links (if supported by the OS),
  5113     |info type mode uid gid size id
  5113     |info type mode uid gid size id
  5114      atime mtime ctime
  5114      atime mtime ctime
  5115      aYr aMon aDay aHr aMin aSec aMS
  5115      aYr aMon aDay aHr aMin aSec aMS
  5116      mYr mMon mDay mHr mMin mSec mMS
  5116      mYr mMon mDay mHr mMin mSec mMS
  5117      cYr cMon cDay cHr cMin cSec cMS
  5117      cYr cMon cDay cHr cMin cSec cMS
  5118      fileName alternativeName path|
  5118      fileName alternativeName|
  5119 
  5119 
  5120 %{
  5120 %{
  5121     int ret;
  5121     int ret;
  5122     char alternativeFileNameBuffer[15];
  5122     char alternativeFileNameBuffer[15];
  5123     char fileNameBuffer[MAX_PATH+1];
  5123     char fileNameBuffer[MAX_PATH+1];
  5124 
  5124 
  5125     unsigned INT ino;
  5125     unsigned INT ino;
  5126 
  5126 
  5127     if (__isString(aPathName)) {
  5127     if (__isString(aPathName)) {
  5128 	HANDLE hFile;
  5128         HANDLE hFile;
  5129 	FILETIME tempFileTime;
  5129         FILETIME tempFileTime;
  5130 	SYSTEMTIME creationTime;
  5130         SYSTEMTIME creationTime;
  5131 	SYSTEMTIME accessTime;
  5131         SYSTEMTIME accessTime;
  5132 	SYSTEMTIME modificationTime;
  5132         SYSTEMTIME modificationTime;
  5133 	int modeBits = 0;
  5133         int modeBits = 0;
  5134 	WIN32_FIND_DATA findStruct;
  5134         WIN32_FIND_DATA findStruct;
  5135 
  5135 
  5136 #ifdef DO_WRAP_CALLS
  5136 #ifdef DO_WRAP_CALLS
  5137 	{
  5137         {
  5138 	    char _aPathName[MAXPATHLEN];
  5138             char _aPathName[MAXPATHLEN];
  5139 
  5139 
  5140 	    strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
  5140             strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
  5141 	    do {
  5141             do {
  5142 		__threadErrno = 0;
  5142                 __threadErrno = 0;
  5143 		hFile = STX_API_CALL2( "FindFirstFile", FindFirstFile, _aPathName, &findStruct);
  5143                 hFile = STX_API_CALL2( "FindFirstFile", FindFirstFile, _aPathName, &findStruct);
  5144 	    } while ((hFile < 0) && (__threadErrno == EINTR));
  5144             } while ((hFile < 0) && (__threadErrno == EINTR));
  5145 	}
  5145         }
  5146 #else
  5146 #else
  5147 	hFile = FindFirstFile(__stringVal(aPathName), &findStruct);
  5147         hFile = FindFirstFile(__stringVal(aPathName), &findStruct);
  5148 	if (hFile < 0) {
  5148         if (hFile < 0) {
  5149 	    __threadErrno = __WIN32_ERR(GetLastError());
  5149             __threadErrno = __WIN32_ERR(GetLastError());
  5150 	}
  5150         }
  5151 #endif
  5151 #endif
  5152 	if (! hFile || (hFile == (HANDLE)(-1)) || (hFile == INVALID_HANDLE_VALUE)) {
  5152         if (! hFile || (hFile == (HANDLE)(-1)) || (hFile == INVALID_HANDLE_VALUE)) {
  5153 	    @global(LastErrorNumber) = __mkSmallInteger(__threadErrno);
  5153             @global(LastErrorNumber) = __mkSmallInteger(__threadErrno);
  5154 	} else {
  5154         } else {
  5155 	    FindClose(hFile);
  5155             FindClose(hFile);
  5156 
  5156 
  5157 	    id = __mkSmallInteger(0);   /* could get it by opening ... */
  5157             id = __mkSmallInteger(0);   /* could get it by opening ... */
  5158 	    size = __MKLARGEINT64(1, findStruct.nFileSizeLow, findStruct.nFileSizeHigh);
  5158             size = __MKLARGEINT64(1, findStruct.nFileSizeLow, findStruct.nFileSizeHigh);
  5159 
  5159 
  5160 	    if (findStruct.cFileName[0] != '\0') {
  5160             if (findStruct.cFileName[0] != '\0') {
  5161 		bcopy(findStruct.cFileName, fileNameBuffer, MAX_PATH);
  5161                 bcopy(findStruct.cFileName, fileNameBuffer, MAX_PATH);
  5162 		fileNameBuffer[MAX_PATH] = '\0';
  5162                 fileNameBuffer[MAX_PATH] = '\0';
  5163 		fileName = __MKSTRING(fileNameBuffer);             /* FULL name */
  5163                 fileName = __MKSTRING(fileNameBuffer);             /* FULL name */
  5164 	    }
  5164             }
  5165 
  5165 
  5166 	    if (findStruct.cAlternateFileName[0] != '\0') {
  5166             if (findStruct.cAlternateFileName[0] != '\0') {
  5167 		bcopy(findStruct.cAlternateFileName, alternativeFileNameBuffer, 14);
  5167                 bcopy(findStruct.cAlternateFileName, alternativeFileNameBuffer, 14);
  5168 		alternativeFileNameBuffer[14] = '\0';
  5168                 alternativeFileNameBuffer[14] = '\0';
  5169 		alternativeName = __MKSTRING(alternativeFileNameBuffer); /* DOS name */
  5169                 alternativeName = __MKSTRING(alternativeFileNameBuffer); /* DOS name */
  5170 	    }
  5170             }
  5171 
  5171 
  5172 	    /*
  5172             /*
  5173 	     * simulate access bits
  5173              * simulate access bits
  5174 	     */
  5174              */
  5175 	    if (findStruct.dwFileAttributes & FILE_ATTRIBUTE_READONLY) {
  5175             if (findStruct.dwFileAttributes & FILE_ATTRIBUTE_READONLY) {
  5176 		modeBits = 0444;
  5176                 modeBits = 0444;
  5177 	    } else {
  5177             } else {
  5178 		modeBits = 0666;
  5178                 modeBits = 0666;
  5179 	    }
  5179             }
  5180 
  5180 
  5181 	    if (findStruct.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
  5181             if (findStruct.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
  5182 		type = @symbol(directory);
  5182                 type = @symbol(directory);
  5183 		modeBits |= 0111;   /* executable */
  5183                 modeBits |= 0111;   /* executable */
  5184 	    } else {
  5184             } else {
  5185 		type = @symbol(regular);
  5185                 type = @symbol(regular);
  5186 	    }
  5186             }
  5187 
  5187 
  5188 	    mode = __mkSmallInteger(modeBits);
  5188             mode = __mkSmallInteger(modeBits);
  5189 
  5189 
  5190 	    /*
  5190             /*
  5191 	     * sigh - convert from stupid time to useful time
  5191              * sigh - convert from stupid time to useful time
  5192 	     */
  5192              */
  5193 	    FileTimeToLocalFileTime(&findStruct.ftCreationTime, &tempFileTime);
  5193             FileTimeToLocalFileTime(&findStruct.ftCreationTime, &tempFileTime);
  5194 	    FileTimeToSystemTime(&tempFileTime, &creationTime);
  5194             FileTimeToSystemTime(&tempFileTime, &creationTime);
  5195 	    FileTimeToLocalFileTime(&findStruct.ftLastAccessTime, &tempFileTime);
  5195             FileTimeToLocalFileTime(&findStruct.ftLastAccessTime, &tempFileTime);
  5196 	    FileTimeToSystemTime(&tempFileTime, &accessTime);
  5196             FileTimeToSystemTime(&tempFileTime, &accessTime);
  5197 	    FileTimeToLocalFileTime(&findStruct.ftLastWriteTime, &tempFileTime);
  5197             FileTimeToLocalFileTime(&findStruct.ftLastWriteTime, &tempFileTime);
  5198 	    FileTimeToSystemTime(&tempFileTime, &modificationTime);
  5198             FileTimeToSystemTime(&tempFileTime, &modificationTime);
  5199 	    aYr  = __mkSmallInteger(accessTime.wYear);
  5199             aYr  = __mkSmallInteger(accessTime.wYear);
  5200 	    aMon = __mkSmallInteger(accessTime.wMonth);
  5200             aMon = __mkSmallInteger(accessTime.wMonth);
  5201 	    aDay = __mkSmallInteger(accessTime.wDay);
  5201             aDay = __mkSmallInteger(accessTime.wDay);
  5202 	    aHr  = __mkSmallInteger(accessTime.wHour);
  5202             aHr  = __mkSmallInteger(accessTime.wHour);
  5203 	    aMin = __mkSmallInteger(accessTime.wMinute);
  5203             aMin = __mkSmallInteger(accessTime.wMinute);
  5204 	    aSec = __mkSmallInteger(accessTime.wSecond);
  5204             aSec = __mkSmallInteger(accessTime.wSecond);
  5205 	    aMS  = __mkSmallInteger(accessTime.wMilliseconds);
  5205             aMS  = __mkSmallInteger(accessTime.wMilliseconds);
  5206 
  5206 
  5207 	    mYr  = __mkSmallInteger(modificationTime.wYear);
  5207             mYr  = __mkSmallInteger(modificationTime.wYear);
  5208 	    mMon = __mkSmallInteger(modificationTime.wMonth);
  5208             mMon = __mkSmallInteger(modificationTime.wMonth);
  5209 	    mDay = __mkSmallInteger(modificationTime.wDay);
  5209             mDay = __mkSmallInteger(modificationTime.wDay);
  5210 	    mHr  = __mkSmallInteger(modificationTime.wHour);
  5210             mHr  = __mkSmallInteger(modificationTime.wHour);
  5211 	    mMin = __mkSmallInteger(modificationTime.wMinute);
  5211             mMin = __mkSmallInteger(modificationTime.wMinute);
  5212 	    mSec = __mkSmallInteger(modificationTime.wSecond);
  5212             mSec = __mkSmallInteger(modificationTime.wSecond);
  5213 	    mMS  = __mkSmallInteger(modificationTime.wMilliseconds);
  5213             mMS  = __mkSmallInteger(modificationTime.wMilliseconds);
  5214 
  5214 
  5215 	    cYr  = __mkSmallInteger(creationTime.wYear);
  5215             cYr  = __mkSmallInteger(creationTime.wYear);
  5216 	    cMon = __mkSmallInteger(creationTime.wMonth);
  5216             cMon = __mkSmallInteger(creationTime.wMonth);
  5217 	    cDay = __mkSmallInteger(creationTime.wDay);
  5217             cDay = __mkSmallInteger(creationTime.wDay);
  5218 	    cHr  = __mkSmallInteger(creationTime.wHour);
  5218             cHr  = __mkSmallInteger(creationTime.wHour);
  5219 	    cMin = __mkSmallInteger(creationTime.wMinute);
  5219             cMin = __mkSmallInteger(creationTime.wMinute);
  5220 	    cSec = __mkSmallInteger(creationTime.wSecond);
  5220             cSec = __mkSmallInteger(creationTime.wSecond);
  5221 	    cMS  = __mkSmallInteger(creationTime.wMilliseconds);
  5221             cMS  = __mkSmallInteger(creationTime.wMilliseconds);
  5222 	}
  5222         }
  5223     }
  5223     }
  5224 %}.
  5224 %}.
  5225     (aPathName endsWith:'.lnk') ifTrue:[
  5225     (aPathName endsWith:'.lnk') ifTrue:[
  5226 	type := #symbolicLink.
  5226         type := #symbolicLink.
  5227 	path := nil.
  5227         "/ now done lazyly in FileStatusInfo, when the path is accessed
  5228 	"/ now done lazyly in FileStatusInfo, when the path is accessed
  5228         "/ path := self getLinkTarget:aPathName.
  5229 	"/ path := self getLinkTarget:aPathName.
       
  5230     ].
  5229     ].
  5231 
  5230 
  5232     mode isNil ifTrue:[
  5231     mode isNil ifTrue:[
  5233 	(self isDirectory:aPathName) ifTrue:[
  5232         (self isDirectory:aPathName) ifTrue:[
  5234 	    "/ the code above fails for root directories (these do not exist).
  5233             "/ the code above fails for root directories (these do not exist).
  5235 	    "/ simulate
  5234             "/ simulate
  5236 	    mode := 8r777.
  5235             mode := 8r777.
  5237 	    type := #directory.
  5236             type := #directory.
  5238 	    uid := gid := 0.
  5237             uid := gid := 0.
  5239 	    size := 0.
  5238             size := 0.
  5240 	    id := 0.
  5239             id := 0.
  5241 	    atime := mtime := ctime := Timestamp now.
  5240             atime := mtime := ctime := Timestamp now.
  5242 	].
  5241         ].
  5243     ].
  5242     ].
  5244     mode notNil ifTrue:[
  5243     mode notNil ifTrue:[
  5245 	atime isNil ifTrue:[
  5244         atime isNil ifTrue:[
  5246 	    atime := Timestamp day:aDay month:aMon year:aYr hour:aHr minutes:aMin seconds:aSec milliseconds:aMS.
  5245             atime := Timestamp day:aDay month:aMon year:aYr hour:aHr minutes:aMin seconds:aSec milliseconds:aMS.
  5247 	].
  5246         ].
  5248 	mtime isNil ifTrue:[
  5247         mtime isNil ifTrue:[
  5249 	    mtime := Timestamp day:mDay month:mMon year:mYr hour:mHr minutes:mMin seconds:mSec milliseconds:mMS.
  5248             mtime := Timestamp day:mDay month:mMon year:mYr hour:mHr minutes:mMin seconds:mSec milliseconds:mMS.
  5250 	].
  5249         ].
  5251 	ctime isNil ifTrue:[
  5250         ctime isNil ifTrue:[
  5252 	    ctime := Timestamp day:cDay month:cMon year:cYr hour:cHr minutes:cMin seconds:cSec milliseconds:cMS.
  5251             ctime := Timestamp day:cDay month:cMon year:cYr hour:cHr minutes:cMin seconds:cSec milliseconds:cMS.
  5253 	].
  5252         ].
  5254 
  5253 
  5255 	info := FileStatusInfo
  5254         info := FileStatusInfo
  5256 		    type:type
  5255                     type:type
  5257 		    mode:mode
  5256                     mode:mode
  5258 		    uid:uid
  5257                     uid:uid
  5259 		    gid:gid
  5258                     gid:gid
  5260 		    size:size
  5259                     size:size
  5261 		    id:id
  5260                     id:id
  5262 		    accessed:atime
  5261                     accessed:atime
  5263 		    modified:mtime
  5262                     modified:mtime
  5264 		    created:ctime
  5263                     created:ctime
  5265 		    path:path
  5264                     sourcePath:aPathName
  5266 		    fullName:fileName
  5265                     fullName:fileName
  5267 		    alternativeName:alternativeName.
  5266                     alternativeName:alternativeName.
  5268 	^ info
  5267         ^ info
  5269    ].
  5268    ].
  5270    ^ nil
  5269    ^ nil
  5271 
  5270 
  5272    "
  5271    "
  5273     OperatingSystem linkInfoOf:'c:\windows'
  5272     OperatingSystem linkInfoOf:'c:\windows'
 10632     "Created: / 03-08-2006 / 15:08:49 / fm"
 10631     "Created: / 03-08-2006 / 15:08:49 / fm"
 10633 ! !
 10632 ! !
 10634 
 10633 
 10635 !Win32OperatingSystem::FileStatusInfo class methodsFor:'instance creation'!
 10634 !Win32OperatingSystem::FileStatusInfo class methodsFor:'instance creation'!
 10636 
 10635 
 10637 type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT created:cT path:lP alternativeName:name2
 10636 type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT created:cT sourcePath:lP fullName:fullName alternativeName:name2
 10638     ^ self basicNew
 10637     ^ self basicNew
 10639 	type:t mode:m uid:u gid:g size:s
 10638         type:t mode:m uid:u gid:g size:s
 10640 	id:i accessed:aT modified:mT created:cT
 10639         id:i accessed:aT modified:mT created:cT
 10641 	path:lP alternativeName:name2
 10640         sourcePath:lP
 10642 !
 10641         fullName:fullName
 10643 
 10642         alternativeName:name2
 10644 type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT created:cT path:lP fullName:fullName alternativeName:name2
       
 10645     ^ self basicNew
       
 10646 	type:t mode:m uid:u gid:g size:s
       
 10647 	id:i accessed:aT modified:mT created:cT
       
 10648 	path:lP
       
 10649 	fullName:fullName
       
 10650 	alternativeName:name2
       
 10651 ! !
 10643 ! !
 10652 
 10644 
 10653 !Win32OperatingSystem::FileStatusInfo methodsFor:'accessing'!
 10645 !Win32OperatingSystem::FileStatusInfo methodsFor:'accessing'!
 10654 
 10646 
 10655 accessTime
 10647 accessTime
 10696     "return id"
 10688     "return id"
 10697 
 10689 
 10698     ^ id
 10690     ^ id
 10699 !
 10691 !
 10700 
 10692 
       
 10693 linkTargetPath
       
 10694     "for symbolic links only: return the path where the symbolic link points to"
       
 10695 
       
 10696     "/ access lazily...
       
 10697     linkTargetPath isNil ifTrue:[
       
 10698         type == #symbolicLink ifTrue:[
       
 10699             linkTargetPath := OperatingSystem getLinkTarget:sourcePath.
       
 10700         ]
       
 10701     ].
       
 10702 
       
 10703     ^ linkTargetPath
       
 10704 
       
 10705     "Modified: / 07-02-2007 / 10:31:56 / cg"
       
 10706 !
       
 10707 
 10701 mode
 10708 mode
 10702     "return mode"
 10709     "return mode"
 10703 
 10710 
 10704     ^ mode
 10711     ^ mode
 10705 !
 10712 !
 10719 
 10726 
 10720     "Created: / 1.2.2002 / 11:07:04 / cg"
 10727     "Created: / 1.2.2002 / 11:07:04 / cg"
 10721 !
 10728 !
 10722 
 10729 
 10723 path
 10730 path
 10724     "for symbolic links only: return the path where the symbolic link points to"
 10731     "for symbolic links only: return the path where the symbolic link points to.
 10725 
 10732      bad named method - left here for backward compatibility"
 10726     "/ access lazily...
 10733 
 10727     path isNil ifTrue:[
 10734     ^ self linkTargetPath.
 10728 	type == #symbolicLink ifTrue:[
       
 10729 	    path := OperatingSystem getLinkTarget:fullName.
       
 10730 	]
       
 10731     ].
       
 10732 
       
 10733     ^ path
       
 10734 
       
 10735     "Modified: / 07-02-2007 / 10:31:56 / cg"
       
 10736 !
 10735 !
 10737 
 10736 
 10738 size
 10737 size
 10739     "return size"
 10738     "return size"
 10740 
 10739 
 10826     ^ statusChanged
 10825     ^ statusChanged
 10827 ! !
 10826 ! !
 10828 
 10827 
 10829 !Win32OperatingSystem::FileStatusInfo methodsFor:'private accessing'!
 10828 !Win32OperatingSystem::FileStatusInfo methodsFor:'private accessing'!
 10830 
 10829 
 10831 type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT created:cT path:lP alternativeName:name2
 10830 type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT created:cT sourcePath:lP fullName:name1 alternativeName:name2
 10832     type := t.
 10831     type := t.
 10833     mode := m.
 10832     mode := m.
 10834     uid := u.
 10833     uid := u.
 10835     gid := g.
 10834     gid := g.
 10836     size := s.
 10835     size := s.
 10837     id := i.
 10836     id := i.
 10838     accessed := aT.
 10837     accessed := aT.
 10839     modified := mT.
 10838     modified := mT.
 10840     created := cT.
 10839     created := cT.
 10841     path := lP.
 10840     sourcePath := lP.
 10842     alternativeName := name2.
       
 10843 !
       
 10844 
       
 10845 type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT created:cT path:lP fullName:name1 alternativeName:name2
       
 10846     type := t.
       
 10847     mode := m.
       
 10848     uid := u.
       
 10849     gid := g.
       
 10850     size := s.
       
 10851     id := i.
       
 10852     accessed := aT.
       
 10853     modified := mT.
       
 10854     created := cT.
       
 10855     path := lP.
       
 10856     fullName := name1.
 10841     fullName := name1.
 10857     alternativeName := name2.
 10842     alternativeName := name2.
 10858 ! !
 10843 ! !
 10859 
 10844 
 10860 !Win32OperatingSystem::FileStatusInfo methodsFor:'queries-access'!
 10845 !Win32OperatingSystem::FileStatusInfo methodsFor:'queries-access'!
 15659 ! !
 15644 ! !
 15660 
 15645 
 15661 !Win32OperatingSystem class methodsFor:'documentation'!
 15646 !Win32OperatingSystem class methodsFor:'documentation'!
 15662 
 15647 
 15663 version
 15648 version
 15664     ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.350 2008-10-21 11:47:41 ca Exp $'
 15649     ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.351 2008-10-21 14:08:10 ca Exp $'
 15665 ! !
 15650 ! !
 15666 
 15651 
 15667 Win32OperatingSystem initialize!
 15652 Win32OperatingSystem initialize!
 15668 Win32OperatingSystem::PerformanceData initialize!
 15653 Win32OperatingSystem::PerformanceData initialize!
 15669 Win32OperatingSystem::RegistryEntry initialize!
 15654 Win32OperatingSystem::RegistryEntry initialize!