Add filesystem tester snippet for retrieving OS/2 EAs.

This commit is contained in:
2018-01-10 16:29:45 +00:00
parent b054b2a754
commit bb4efed8c9
17 changed files with 1174 additions and 0 deletions

8
fstester/README.md Normal file
View File

@@ -0,0 +1,8 @@
DiscImageChef Filesystem Testers
================================
This folder contains source code for snippets designed to retrieve special features
(e.g. extended attributes) from all files on installed volumes (getters) as well as snippets
designed to create known files with all features specific to an
operating system / filesystem combination to reverse engineer them and/or test
DiscImageChef filesystem implementations.

View File

@@ -0,0 +1,8 @@
DiscImageChef Filesystem Testers: Getters
=========================================
This folder contains snippets designed to retrieve special features from files on a volume
that can be feed to the Setters snippets to create special test filesystem volumes.
`os2_32` contains a snippet designed to retrieve all Extended Attributes from an OS/2 volume,
under a 32-bit OS/2 version.

View File

@@ -0,0 +1,228 @@
/****************************************************************************
The Disc Image Chef
-----------------------------------------------------------------------------
Filename : dir.c
Author(s) : Natalia Portillo
Component : fstester.getter.os2
--[ Description ] -----------------------------------------------------------
Contains directory handlers
--[ License ] ---------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warraty of
MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2018 Natalia Portillo
*****************************************************************************/
#define INCL_DOSFILEMGR // File Manager values
#define INCL_DOSERRORS // DOS error values
#include <os2.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "dir.h"
#include "ea.h"
int GetAllInDir(PSZ path, ULONG *eaCounter)
{
HDIR hdirFindHandle;
FILEFINDBUF3 FindBuffer = {0}; // Returned from FindFirst/Next
ULONG ulResultBufLen;
ULONG ulFindCount;
APIRET rc; // Return code
PSZ pathWithWildcard;
PSZ fullPath;
ULONG flAttribute; // File attributes
int isDir = 0;
APIRET drc;
// Variables for EA saving
char *eaBuffer;
size_t eaSize;
char eaPath[8 + 1 + 3 + 1];
HFILE eaFileHandle; // Address of the handle for the file
ULONG ulAction = 0; // Address of the variable that receives the value that specifies the action taken by the DosOpen function
APIRET earc;
for(isDir = 0; isDir < 2; isDir++)
{
hdirFindHandle = HDIR_CREATE;
ulResultBufLen = sizeof(FILEFINDBUF3);
ulFindCount = 1; // Look for 1 file at a time
rc = NO_ERROR; // Return code
pathWithWildcard = malloc(strlen(path) + 5);
strcpy(pathWithWildcard, path);
strcat(pathWithWildcard, "\\*.*"); // Adds wildcard to passed path
flAttribute = FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN | FILE_READONLY; // All files
if(isDir)
flAttribute |= MUST_HAVE_DIRECTORY; // Must be a directory
rc = DosFindFirst(pathWithWildcard, // File pattern
&hdirFindHandle, // Directory search handle
flAttribute, // Search attribute
&FindBuffer, // Result buffer
ulResultBufLen, // Result buffer length
&ulFindCount, // Number of entries to find
FIL_STANDARD); // Return Level 1 file info
if(rc != NO_ERROR)
{
free(pathWithWildcard);
if(rc == ERROR_NO_MORE_FILES && !isDir)
continue;
printf("DosFindFirst error: return code = %u\n", rc);
return rc;
}
else
{
if(strcmp(FindBuffer.achName, ".") != 0 && strcmp(FindBuffer.achName, "..") != 0)
{
fullPath = malloc(strlen(path) + 2 + strlen(FindBuffer.achName) + 1);
fullPath = strcpy(fullPath, path); // Parent path
strcat(fullPath, "\\"); // Adds slashes
strcat(fullPath, FindBuffer.achName); // Adds filename
if(isDir)
printf("%s\\\n", fullPath); // Print directory name
else
printf("%s\n", fullPath); // Print file name
if(strcmp(FindBuffer.achName, ".") != 0 && strcmp(FindBuffer.achName, "..") != 0)
{
eaSize = 0;
GetEAs(fullPath, &eaBuffer, &eaSize);
if(eaSize != 0)
{
sprintf(&eaPath, "%08d.EA", *eaCounter);
earc = DosOpen(eaPath, &eaFileHandle, &ulAction, 0L, FILE_NORMAL,
OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, NULL);
if(earc == NO_ERROR)
{
earc = DosWrite(eaFileHandle, eaBuffer, eaSize, &ulAction);
if(earc == NO_ERROR)
{
printf("\tSaved %ld bytes from %ld bytes of EAs saved to %08d.EA\n", ulAction, eaSize,
*eaCounter);
*eaCounter += 1;
}
DosClose(eaFileHandle);
}
free(eaBuffer);
}
if(isDir)
{
drc = GetAllInDir(fullPath, eaCounter);
if(drc != NO_ERROR && drc != ERROR_NO_MORE_FILES)
{
printf("GetAllInDir(%s) returned %u\n", fullPath, drc);
return drc;
}
}
}
free(fullPath);
}
}
while(rc != ERROR_NO_MORE_FILES)
{
ulFindCount = 1; // Reset find count
rc = DosFindNext(hdirFindHandle, // Directory handle
&FindBuffer, // Result buffer
ulResultBufLen, // Result buffer length
&ulFindCount); // Number of entries to find
if(rc != NO_ERROR && rc != ERROR_NO_MORE_FILES)
{
free(pathWithWildcard);
printf("DosFindNext error: return code = %u\n", rc);
return rc;
}
else
{
if(strcmp(FindBuffer.achName, ".") == 0 || strcmp(FindBuffer.achName, "..") == 0)
continue;
fullPath = malloc(strlen(path) + 2 + strlen(FindBuffer.achName) + 1);
fullPath = strcpy(fullPath, path); // Parent path
strcat(fullPath, "\\"); // Adds slashes
strcat(fullPath, FindBuffer.achName); // Adds filename
if(isDir)
printf("%s\\\n", fullPath); // Print directory name
else
printf("%s\n", fullPath); // Print file name
eaSize = 0;
GetEAs(fullPath, &eaBuffer, &eaSize);
if(eaSize != 0)
{
sprintf(&eaPath, "%08d.EA", *eaCounter);
earc = DosOpen(eaPath, &eaFileHandle, &ulAction, 0L, FILE_NORMAL,
OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, NULL);
if(earc == NO_ERROR)
{
earc = DosWrite(eaFileHandle, eaBuffer, eaSize, &ulAction);
if(earc == NO_ERROR)
{
printf("\tSaved %ld bytes from %ld bytes of EAs saved to %08d.EA\n", ulAction, eaSize,
*eaCounter);
*eaCounter += 1;
}
DosClose(eaFileHandle);
}
else
printf("Error %d calling DosOpen\n", earc);
free(eaBuffer);
}
if(isDir)
{
drc = GetAllInDir(fullPath, eaCounter);
if(drc != NO_ERROR && drc != ERROR_NO_MORE_FILES)
{
printf("GetAllInDir(%s) returned %u\n", fullPath, drc);
return drc;
}
}
free(fullPath);
} /* endif */
} /* endwhile */
free(pathWithWildcard);
rc = DosFindClose(hdirFindHandle); // Close our directory handle
if(rc != NO_ERROR)
{
printf("DosFindClose error: return code = %u\n", rc);
return rc;
}
}
return ERROR_NO_MORE_FILES;
}

View File

@@ -0,0 +1,37 @@
/****************************************************************************
The Disc Image Chef
-----------------------------------------------------------------------------
Filename : dir.h
Author(s) : Natalia Portillo
Component : fstester.getter.os2
--[ Description ] -----------------------------------------------------------
Contains directory definitions
--[ License ] ---------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warraty of
MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2018 Natalia Portillo
*****************************************************************************/
#ifndef DIC_FSTESTER_GETTER_OS2_DIR_H
#define DIC_FSTESTER_GETTER_OS2_DIR_H
int GetAllInDir();
#endif

View File

@@ -0,0 +1,93 @@
/* Public domain code from Info/Zip
* Written by Kai Uew Rommel
* from zip30/os2/os2zip.c
* Modified by Natalia Portillo
*/
#include <stdlib.h>
#include <string.h>
#define INCL_NOPM
#define INCL_DOSNLS
#define INCL_DOSERRORS
#include <os2.h>
#include "ea.h"
void GetEAs(char *path, char **bufptr, size_t *size)
{
FILESTATUS4 fs;
PDENA2 pDENA, pFound;
EAOP2 eaop;
PGEA2 pGEA;
PGEA2LIST pGEAlist;
PFEA2LIST pFEAlist;
ULONG ulAttributes;
ULONG nLength;
ULONG nBlock;
if(DosQueryPathInfo(path, FIL_QUERYEASIZE, (PBYTE) & fs, sizeof(fs)))
return;
nBlock = max(fs.cbList, 65535);
if((pDENA = malloc((size_t)nBlock)) == NULL)
return;
ulAttributes = -1;
if(DosEnumAttribute(ENUMEA_REFTYPE_PATH, path, 1, pDENA, nBlock, &ulAttributes, ENUMEA_LEVEL_NO_VALUE) ||
ulAttributes == 0 || (pGEAlist = malloc((size_t)nBlock)) == NULL)
{
free(pDENA);
return;
}
pGEA = pGEAlist->list;
memset(pGEAlist, 0, nBlock);
pFound = pDENA;
while(ulAttributes--)
{
pGEA->cbName = pFound->cbName;
strcpy(pGEA->szName, pFound->szName);
nLength = sizeof(GEA2) + strlen(pGEA->szName);
nLength = ((nLength - 1) / sizeof(ULONG) + 1) * sizeof(ULONG);
pGEA->oNextEntryOffset = ulAttributes ? nLength : 0;
pGEA = (PGEA2)((PCH)pGEA + nLength);
pFound = (PDENA2)((PCH)pFound + pFound->oNextEntryOffset);
}
if(pGEA == pGEAlist->list) // No attributes to save
{
free(pDENA);
free(pGEAlist);
return;
}
pGEAlist->cbList = (PCH)pGEA - (PCH)pGEAlist;
pFEAlist = (PVOID)pDENA; // reuse buffer
pFEAlist->cbList = nBlock;
eaop.fpGEA2List = pGEAlist;
eaop.fpFEA2List = pFEAlist;
eaop.oError = 0;
if(DosQueryPathInfo(path, FIL_QUERYEASFROMLIST, (PBYTE) & eaop, sizeof(eaop)))
{
free(pDENA);
free(pGEAlist);
return;
}
*size = pFEAlist->cbList;
*bufptr = (char *)pFEAlist;
free(pDENA);
free(pGEAlist);
}

View File

@@ -0,0 +1,41 @@
/****************************************************************************
The Disc Image Chef
-----------------------------------------------------------------------------
Filename : ea.h
Author(s) : Natalia Portillo
Component : fstester.getter.os2
--[ Description ] -----------------------------------------------------------
Contains extended attribute definitions
--[ License ] ---------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warraty of
MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2018 Natalia Portillo
*****************************************************************************/
#ifndef DIC_FSTESTER_GETTER_OS2_EA_H
#define DIC_FSTESTER_GETTER_OS2_EA_H
#ifndef max
#define max(a, b) ((a) < (b) ? (b) : (a))
#endif
void GetEAs();
#endif

View File

@@ -0,0 +1,46 @@
/****************************************************************************
The Disc Image Chef
-----------------------------------------------------------------------------
Filename : main.c
Author(s) : Natalia Portillo
Component : fstester.getter.os2
--[ Description ] -----------------------------------------------------------
Contains global definitions
--[ License ] ---------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warraty of
MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2018 Natalia Portillo
*****************************************************************************/
#include <stdio.h>
#include <os2.h>
#include "main.h"
#include "dir.h"
int main()
{
ULONG eaCounter = 0;
printf("The Disc Image Chef Filesystem Tester (Getter) for OS/2 %s\n", DIC_FSTESTER_VERSION);
printf("%s\n", DIC_COPYRIGHT);
return GetAllInDir("C:", &eaCounter);
}

View File

@@ -0,0 +1,38 @@
/****************************************************************************
The Disc Image Chef
-----------------------------------------------------------------------------
Filename : main.h
Author(s) : Natalia Portillo
Component : fstester.getter.os2
--[ Description ] -----------------------------------------------------------
Contains global definitions
--[ License ] ---------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warraty of
MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2018 Natalia Portillo
*****************************************************************************/
#ifndef DIC_FSTESTER_GETTER_OS2_MAIN_H
#define DIC_FSTESTER_GETTER_OS2_MAIN_H
#define DIC_FSTESTER_VERSION "0.1"
#define DIC_COPYRIGHT "Copyright (C) 2011-2018 Natalia Portillo"
#endif

BIN
fstester/getter/os2_32/OS2.EXE Executable file

Binary file not shown.

View File

@@ -0,0 +1,2 @@
FIL dir.obj,ea.obj,main.obj

View File

@@ -0,0 +1,326 @@
Open Watcom Linker Version 1.8
Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
Created on: 18/01/10 16:16:05
Executable Image: os2.exe
creating an OS/2 32-bit executable
+------------+
| Groups |
+------------+
Group Address Size
===== ======= ====
DGROUP 0002:00000000 00010820
+--------------+
| Segments |
+--------------+
Segment Class Group Address Size
======= ===== ===== ======= ====
BEGTEXT CODE AUTO 0001:00000000 00000007
_TEXT CODE AUTO 0001:00000010 0000347f
_NULL BEGDATA DGROUP 0002:00000000 00000004
_AFTERNULL BEGDATA DGROUP 0002:00000004 00000000
CONST DATA DGROUP 0002:00000004 00000198
CONST2 DATA DGROUP 0002:0000019c 00000000
_DATA DATA DGROUP 0002:0000019c 00000434
XIB DATA DGROUP 0002:000005d0 00000000
XI DATA DGROUP 0002:000005d0 00000012
XIE DATA DGROUP 0002:000005e2 00000000
YIB DATA DGROUP 0002:000005e2 00000000
YI DATA DGROUP 0002:000005e2 00000006
YIE DATA DGROUP 0002:000005e8 00000000
TIB DATA DGROUP 0002:000005e8 00000000
TI DATA DGROUP 0002:000005e8 00000000
TIE DATA DGROUP 0002:000005e8 00000000
DATA DATA DGROUP 0002:000005e8 00000000
_BSS BSS DGROUP 0002:000005e8 0000022c
STACK STACK DGROUP 0002:00000820 00010000
+----------------+
| Memory Map |
+----------------+
* = unreferenced symbol
+ = symbol only referenced locally
Address Symbol
======= ======
Module: dir.obj(C:\dic\os2\dir.c)
0001:00000130 GetAllInDir
Module: ea.obj(C:\dic\os2\ea.c)
0001:00000710 GetEAs
Module: main.obj(C:\dic\os2\main.c)
0001:0000092d main
Module: C:\WATCOM/lib386/os2\clib3s.lib(stk)
0001:000009a1* __STK
0001:00000991 __CHK
0001:000009cd* __GRO
0001:000009c0* __STKOVERFLOW
Module: C:\WATCOM/lib386/os2\clib3s.lib(strlen.c)
0001:000009f0 strlen
Module: C:\WATCOM/lib386/os2\clib3s.lib(nmalloc.c)
0001:00000a10 malloc
0001:00000a20 _nmalloc
0002:000001ac __nheapbeg
0002:000001b0 __MiniHeapRover
0002:000001b4 __LargestSizeB4MiniHeapRover
Module: C:\WATCOM/lib386/os2\clib3s.lib(strcpy.c)
0001:00000b40 strcpy
Module: C:\WATCOM/lib386/os2\clib3s.lib(strcat.c)
0001:00000b70 strcat
Module: C:\WATCOM/lib386/os2\clib3s.lib(nfree.c)
0001:00000bb0 free
0001:00000bc0 _nfree
0002:000005e8 __MiniHeapFreeRover
Module: C:\WATCOM/lib386/os2\clib3s.lib(printf.c)
0001:00000cd0 printf
Module: C:\WATCOM/lib386/os2\clib3s.lib(_strcmp)
0001:00000d00 strcmp
Module: C:\WATCOM/lib386/os2\clib3s.lib(sprintf.c)
0001:00000e50 sprintf
Module: C:\WATCOM/lib386/os2\clib3s.lib(memset.c)
0001:00000e80 memset
Module: C:\WATCOM/lib386/os2\clib3s.lib(cstart)
0001:00000ea0 _cstart_
Module: C:\WATCOM/lib386/os2\clib3s.lib(xmsgo32.c)
0001:00000f00+ __exit_with_msg
0001:00000f50 __fatal_runtime_error
Module: C:\WATCOM/lib386/os2\clib3s.lib(maino32.c)
0002:000001b8+ __FirstThreadData
0002:000001bc __GetThreadPtr
0002:000001c0 _AccessFileH
0002:000001c4 _ReleaseFileH
0002:000001c8 _AccessIOB
0002:000001cc _ReleaseIOB
0002:000001d0 _AccessNHeap
0002:000001d4* _AccessFHeap
0002:000001d8 _ReleaseNHeap
0002:000001dc* _ReleaseFHeap
0002:000001e0* _AccessTDList
0001:00000f8b __threadstack
0001:00000f92* __threadid
0001:00000f9b __OS2MainInit
0001:0000100c+ __OS2Init
0001:0000104d* __OS2Fini
0001:00001055+ __shutdown_stack_checking
0001:0000106a __exit
0002:000001e4* _ReleaseTDList
0002:000001e8+ __sig_init_rtn
0002:000001ec* __sig_fini_rtn
0002:000001f0* __threadstksize
0002:000001f4 __process_fini
0002:000005ec __Is_DLL
0002:000005f0+ __saved_CS
Module: C:\WATCOM/lib386/os2\clib3s.lib(nmemneed.c)
0001:000010c0 __nmemneed
Module: C:\WATCOM/lib386/os2\clib3s.lib(mem.c)
0001:000010d0 __MemAllocator
0001:00001180 __MemFree
Module: C:\WATCOM/lib386/os2\clib3s.lib(grownear.c)
0001:00001430 __ExpandDGROUP
Module: C:\WATCOM/lib386/os2\clib3s.lib(iob.c)
0002:000001f8 __iob
0002:00000400* _fmode
0002:000006f4 __OpenStreams
0002:000006f8 __ClosedStreams
Module: C:\WATCOM/lib386/os2\clib3s.lib(fprtf.c)
0001:00001470 __fprtf
Module: C:\WATCOM/lib386/os2\clib3s.lib(vsprintf.c)
0001:00001570 vsprintf
Module: C:\WATCOM/lib386/os2\clib3s.lib(__stos)
0001:000015a0 __STOSB
0001:000015d7* __STOSD
Module: C:\WATCOM/lib386/os2\clib3s.lib(main2o32.c)
0001:00001650 __OS2Main
Module: C:\WATCOM/lib386/os2\clib3s.lib(segdefns)
0001:00000003 ___begtext
0002:00000000* __nullarea
0002:000005d0 _Start_XI
0002:000005e2 _End_XI
0002:000005e2 _Start_YI
0002:000005e8 _End_YI
Module: C:\WATCOM/lib386/os2\clib3s.lib(enterdb.c)
0001:000016c0 __EnterWVIDEO
0002:00000404+ __WD_Present
Module: C:\WATCOM/lib386/os2\clib3s.lib(crwdata)
0002:0000044c _osmajor
0002:0000044d _osminor
0002:00000418* _LpDllName
0002:0000041c* _LpwCmdLine
0002:00000420* _LpwPgmName
0002:00000424* _LpwDllName
0002:00000410 _LpCmdLine
0002:00000414 _LpPgmName
0002:00000408* _dynend
0002:0000040c _curbrk
0002:00000428* _STACKLOW
0002:0000042c* _STACKTOP
0002:00000430 __ASTACKSIZ
0002:00000434 __ASTACKPTR
0002:00000438* _cbyte
0002:0000043c* _cbyte2
0002:00000440* _child
0002:00000446 _Envptr
0002:0000044a* _Envseg
0002:00000444* __no87
0002:0000044e* __FPE_handler
Module: C:\WATCOM/lib386/os2\clib3s.lib(cinit.c)
0001:000016f0 __CommonInit
0002:000006fc __hmodule
Module: C:\WATCOM/lib386/os2\clib3s.lib(initrtns.c)
0001:00001710 __InitRtns
0001:00001770 __FiniRtns
Module: C:\WATCOM/lib386/os2\clib3s.lib(amblksiz.c)
0002:00000454 _amblksiz
Module: C:\WATCOM/lib386/os2\clib3s.lib(heapen.c)
0001:000017e0* _heapenable
0002:00000458 __heap_enabled
Module: C:\WATCOM/lib386/os2\clib3s.lib(nheapmin.c)
0001:00001800* _heapshrink
0001:00001810* _heapmin
0001:00001820* _nheapmin
0001:000018e0 _nheapshrink
Module: C:\WATCOM/lib386/os2\clib3s.lib(initfile.c)
0001:00001950 __InitFiles
Module: C:\WATCOM/lib386/os2\clib3s.lib(ioexit.c)
0001:00001a60* fcloseall
0001:00001a70 __full_io_exit
Module: C:\WATCOM/lib386/os2\clib3s.lib(fputc.c)
0001:00001a80 fputc
Module: C:\WATCOM/lib386/os2\clib3s.lib(ioalloc.c)
0001:00001b80 __ioalloc
Module: C:\WATCOM/lib386/os2\clib3s.lib(prtf.c)
0001:00001c20 __prtf
Module: C:\WATCOM/lib386/os2\clib3s.lib(flush.c)
0001:000029d0 __flush
Module: C:\WATCOM/lib386/os2\clib3s.lib(mthrdini.c)
0001:00002ae0 __InitThreadData
0002:0000045c __ThreadDataSize
Module: C:\WATCOM/lib386/os2\clib3s.lib(cmain386.c)
0001:00002b00 __CMain
Module: C:\WATCOM/lib386/os2\clib3s.lib(dosseg)
0000:00001234 __DOSseg__
Module: C:\WATCOM/lib386/os2\clib3s.lib(fclose.c)
0001:00002b50+ __doclose
0001:00002c10 __shutdown_stream
0001:00002c40* fclose
0002:00000700+ __RmTmpFileFn
Module: C:\WATCOM/lib386/os2\clib3s.lib(freefp.c)
0001:00002c80 __freefp
0001:00002cd0 __purgefp
Module: C:\WATCOM/lib386/os2\clib3s.lib(seterrno.c)
0001:00002d02 __set_errno
0001:00002d13* __set_EDOM
0001:00002d21* __set_ERANGE
0001:00002d2f* __set_EINVAL
0001:00002d42 __set_doserrno
Module: C:\WATCOM/lib386/os2\clib3s.lib(chktty.c)
0001:00002d60 __chktty
Module: C:\WATCOM/lib386/os2\clib3s.lib(wctomb.c)
0001:00002da0 wctomb
Module: C:\WATCOM/lib386/os2\clib3s.lib(itoa.c)
0001:00002de0+ utoa
0001:00002e40 itoa
Module: C:\WATCOM/lib386/os2\clib3s.lib(strupr.c)
0001:00002e80 strupr
Module: C:\WATCOM/lib386/os2\clib3s.lib(noefgfmt.c)
0002:00000460 __EFG_printf
0002:00000464* __EFG_scanf
Module: C:\WATCOM/lib386/os2\clib3s.lib(lltoa.c)
0001:00002ee0 ulltoa
0001:00002f50* lltoa
Module: C:\WATCOM/lib386/os2\clib3s.lib(ltoa.c)
0001:00002f90 ultoa
0001:00002ff0* ltoa
Module: C:\WATCOM/lib386/os2\clib3s.lib(mbisdbcs.c)
0002:00000704 __IsDBCS
Module: C:\WATCOM/lib386/os2\clib3s.lib(mbislead.c)
0001:00003030* _ismbblead
0002:00000708 __MBCSIsTable
Module: C:\WATCOM/lib386/os2\clib3s.lib(lseekos2.c)
0001:00003060 __lseek
Module: C:\WATCOM/lib386/os2\clib3s.lib(fsync.c)
0001:000030a0 fsync
Module: C:\WATCOM/lib386/os2\clib3s.lib(qwrit.c)
0001:000030d0 __qwrite
Module: C:\WATCOM/lib386/os2\clib3s.lib(___argc.c)
0002:0000080c ___Argc
0002:00000810 ___Argv
Module: C:\WATCOM/lib386/os2\clib3s.lib(exit.c)
0001:00003190+ __null_int23_exit
0001:00003192 exit
0001:000031e2* _exit
0002:00000468+ __int23_exit
0002:0000046c+ __FPE_handler_exit
Module: C:\WATCOM/lib386/os2\clib3s.lib(_clseos2.c)
0001:00003200 __close
Module: C:\WATCOM/lib386/os2\clib3s.lib(isattos2.c)
0001:00003250 isatty
Module: C:\WATCOM/lib386/os2\clib3s.lib(alphabet.c)
0002:00000174 __Alphabet
Module: C:\WATCOM/lib386/os2\clib3s.lib(mbinit.c)
0001:000032c1 __mbinit
0002:00000470+ __MBCodePage
Module: C:\WATCOM/lib386/os2\clib3s.lib(dosret.c)
0001:000033d0+ _dosretax
0001:000033f0* _dosret0
0001:00003410 __set_errno_dos
Module: C:\WATCOM/lib386/os2\clib3s.lib(iomode.c)
0001:00003450 __GetIOMode
0001:00003470 __SetIOMode_nogrow
0002:00000578+ __NFiles
0002:0000057c+ __init_mode
0002:000005cc+ __io_mode
+----------------------+
| Imported Symbols |
+----------------------+
Symbol Module
====== ======
DosFindFirst DOSCALLS
DosOpen DOSCALLS
DosWrite DOSCALLS
DosClose DOSCALLS
DosFindNext DOSCALLS
DosFindClose DOSCALLS
DosQueryPathInfo DOSCALLS
DosEnumAttribute DOSCALLS
DosQuerySysInfo DOSCALLS
DosExit DOSCALLS
DosAllocMem DOSCALLS
DosFreeMem DOSCALLS
DosSetFilePtr DOSCALLS
DosResetBuffer DOSCALLS
DosQueryHType DOSCALLS
DosQueryDBCSEnv NLS
DosQueryCp DOSCALLS
+--------------------+
| Libraries Used |
+--------------------+
C:\WATCOM/lib386/os2\clib3s.lib
C:\WATCOM/lib386/os2\os2386.lib
+-----------------------+
| Linker Statistics |
+-----------------------+
Stack size: 00010000 (65536.)
Memory size: 00013caf (81071.)
Entry point address: 0001:00000ea0
Link time: 00:00.08

View File

@@ -0,0 +1,3 @@
project : C:\dic\os2\os2.exe .SYMBOLIC
!include C:\dic\os2\os2.mk1

View File

@@ -0,0 +1,35 @@
!define BLANK ""
C:\dic\os2\dir.obj : C:\dic\os2\dir.c .AUTODEPEND
@C:
cd C:\dic\os2
*wcc386 dir.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3s -bt&
=os2 -fo=.obj -mf
C:\dic\os2\ea.obj : C:\dic\os2\ea.c .AUTODEPEND
@C:
cd C:\dic\os2
*wcc386 ea.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3s -bt=&
os2 -fo=.obj -mf
C:\dic\os2\main.obj : C:\dic\os2\main.c .AUTODEPEND
@C:
cd C:\dic\os2
*wcc386 main.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3s -b&
t=os2 -fo=.obj -mf
C:\dic\os2\os2.exe : C:\dic\os2\dir.obj C:\dic\os2\ea.obj C:\dic\os2\main.ob&
j C:\dic\os2\dir.h C:\dic\os2\ea.h C:\dic\os2\main.h .AUTODEPEND
@C:
cd C:\dic\os2
@%write os2.lk1 FIL dir.obj,ea.obj,main.obj
@%append os2.lk1
!ifneq BLANK ""
*wlib -q -n -b os2.imp
@%append os2.lk1 LIBR os2.imp
!endif
*wlink name os2 d all SYS os2v2 op m op maxe=25 op q op symf op vers=0.1.0 &
@os2.lk1
!ifneq BLANK ""
rc -i $[: -i C:\WATCOM\h -i C:\WATCOM\h\os2 os2.exe
!endif

Binary file not shown.

View File

@@ -0,0 +1,238 @@
40
targetIdent
0
MProject
1
MComponent
0
2
WString
4
OEXE
3
WString
5
oc2eo
1
0
1
4
MCommand
0
5
MCommand
0
6
MItem
7
os2.exe
7
WString
4
OEXE
8
WVList
1
9
MVState
10
WString
7
OS2LINK
11
WString
31
o????Version (Major.minor.rev):
1
12
WString
5
0.1.0
0
13
WVList
1
14
ActionStates
15
WString
5
&Make
16
WVList
0
-1
1
1
0
17
WPickList
8
18
MItem
3
*.c
19
WString
4
COBJ
20
WVList
2
21
MRState
22
WString
3
WCC
23
WString
30
??2??80386 Stack based calling
1
1
24
MRState
25
WString
3
WCC
26
WString
39
??2??Pentium Pro Register based calling
1
0
27
WVList
0
-1
1
1
0
28
MItem
5
dir.c
29
WString
4
COBJ
30
WVList
0
31
WVList
0
18
1
1
0
32
MItem
4
ea.c
33
WString
4
COBJ
34
WVList
0
35
WVList
0
18
1
1
0
36
MItem
6
main.c
37
WString
4
COBJ
38
WVList
0
39
WVList
0
18
1
1
0
40
MItem
3
*.h
41
WString
3
NIL
42
WVList
0
43
WVList
0
-1
1
1
0
44
MItem
5
dir.h
45
WString
3
NIL
46
WVList
0
47
WVList
0
40
1
1
0
48
MItem
4
ea.h
49
WString
3
NIL
50
WVList
0
51
WVList
0
40
1
1
0
52
MItem
6
main.h
53
WString
3
NIL
54
WVList
0
55
WVList
0
40
1
1
0

View File

@@ -0,0 +1,43 @@
40
projectIdent
0
VpeMain
1
WRect
624
1450
7680
9210
2
MProject
3
MCommand
0
4
MCommand
0
1
5
WFileName
7
os2.tgt
6
WVList
1
7
VComponent
8
WRect
0
0
5712
4330
0
0
9
WFileName
7
os2.tgt
0
2
7

View File

@@ -0,0 +1,28 @@
DiscImageChef 32-bit OS/2 Filesystem Getter
===========================================
This snippet is designed to retrieve all Extended Attributes from all files in the `C:`
volume, saving them as a set of COUNTER.EA files in executing directory.
The format of those files should be as `FEA2LIST` structure (following).
It compiles under OpenWatcom.
```
/* FEA2 defines the format for setting the full extended attributes in the file. */
typedef struct _FEA2 {
ULONG oNextEntryOffset; /* Offset to next entry. */
BYTE fEA; /* Extended attributes flag. */
BYTE cbName; /* Length of szName, not including NULL. */
USHORT cbValue; /* Value length. */
CHAR szName[1]; /* Extended attribute name. */
} FEA2;
typedef FEA2 *PFEA2;
/* FEA2 data structure. */
typedef struct _FEA2LIST {
ULONG cbList; /* Total bytes of structure including full list. */
FEA2 list[1]; /* Variable-length FEA2 structures. */
} FEA2LIST;
typedef FEA2LIST *PFEA2LIST;
```