diff --git a/setter/.idea/codeStyles/Project.xml b/setter/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..30aa626
--- /dev/null
+++ b/setter/.idea/codeStyles/Project.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/setter/.idea/misc.xml b/setter/.idea/misc.xml
new file mode 100644
index 0000000..79b3c94
--- /dev/null
+++ b/setter/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/setter/.idea/vcs.xml b/setter/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/setter/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/setter/cmakelists.txt b/setter/cmakelists.txt
new file mode 100644
index 0000000..af2cc20
--- /dev/null
+++ b/setter/cmakelists.txt
@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.10)
+project(setter C)
+
+set(CMAKE_C_STANDARD 90)
+
+add_executable(setter main.c)
\ No newline at end of file
diff --git a/setter/consts.h b/setter/consts.h
new file mode 100644
index 0000000..4505886
--- /dev/null
+++ b/setter/consts.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : consts.h
+Author(s) : Natalia Portillo
+
+Component : fstester.setter
+
+--[ Description ] -----------------------------------------------------------
+
+Constants
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#ifndef DIC_FSTESTER_SETTER_CONSTS_H
+#define DIC_FSTESTER_SETTER_CONSTS_H
+
+extern const char *filenames[] = {
+"FILNAM", "FILNAM.EXT", "FILENAME", "FILENAME.EXT", "UPPCAS", "lowcas", "UPPER.low",
+"lower.UP", "CamUpr", "Dromed", "droMed", "FIL NA", " FILNA", "FILNA ", "FILE. XT",
+"FILE .EXT", "FILE . XT", "Fourteen_Chars", "FifteenCharacts", "Sixteen_Characts",
+"Twenty_One_Characters", "This name has thirty charactrs",
+"This name has thirty one chactrs", "This name has thirty two chacters",
+"This filename has fourty four characterrs",
+"This filename has sixty three characters like a lazy dromedaire",
+"This filename has sixty four characters like a redy lazy fox dog",
+"This filename has one hundred twenty eight characters and once upon a time in a place which name you must buy the book yetnotget",
+"This filename has two hundred thirty six characters and once upon a time in a place which name i have no desire to call to mind there lived not long since one of those gentlemen that keep a lance and well you know it so go and read its",
+"This filename has two hundred fourty eight characters and once upon a time in a place which name i have no desire to call to mind there lived not long since one of those gentlemen that keep a lance and well you know it so go and read the book yout",
+"This filename has two hundred fifty three characters and once upon a time in a place which name i have no desire to call to mind there lived not long since one of those gentlemen that keep a lance and well you know it so go and read the book as you get",
+"This filename has two hundred fifty four characters and once upon a time in a place which name i have no desire to call to mind there lived not long since one of those gentlemen that keep a lance and well you know it so go and read the book as you mustd",
+"This filename has two hundred fifty five characters and once upon a time in a place which name i have no desire to call to mind there lived not long since one of those gentlemen that keep a lance and well you know it so go and read the book as you mustdo",
+"This filename has two hundred fifty six characters and once upon a time in a place which name i have no desire to call to mind there lived not long since one of those gentlemen that keep a lance and well you know it so go and read the book as you must get",
+"?NM?E?", "N!A!M!", "NA/ME", "NA\\ME", "'QUOT'", "\"QUOT\"", "NA>ME>", "N.
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#ifndef DIC_FSTESTER_SETTER_DEFS_H
+#define DIC_FSTESTER_SETTER_DEFS_H
+
+void GetOsInfo();
+void GetVolumeInfo(const char *path, size_t *clusterSize);
+void FileAttributes(const char *path);
+void FilePermissions(const char *path);
+void ExtendedAttributes(const char *path);
+void ResourceFork(const char *path);
+void Filenames(const char *path);
+void Timestamps(const char *path);
+void DirectoryDepth(const char *path);
+void Fragmentation(const char *path, size_t clusterSize);
+void Sparse(const char *path);
+void MillionFiles(const char *path);
+void DeleteFiles(const char *path);
+
+#define FILENAME_FORMAT "This file should be named \"%s\".\n"
+
+#endif
+
diff --git a/setter/dos.c b/setter/dos.c
new file mode 100644
index 0000000..979ef51
--- /dev/null
+++ b/setter/dos.c
@@ -0,0 +1,111 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : dos.c
+Author(s) : Natalia Portillo
+
+Component : fstester.setter.os2
+
+--[ Description ] -----------------------------------------------------------
+
+Contains DOS code
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#if defined(__DOS__) || defined (MSDOS)
+
+#include
+#include
+#include
+#include
+
+#include
+
+#include "defs.h"
+#include "dosos2.h"
+#include "consts.h"
+
+void GetOsInfo()
+{
+ // TODO: Implement
+}
+
+void GetVolumeInfo(const char *path, size_t *clusterSize)
+{
+ // TODO: Implement
+}
+
+void FileAttributes(const char *path)
+{
+ // TODO: Implement
+}
+
+void FilePermissions(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void ExtendedAttributes(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void ResourceFork(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void Filenames(const char *path)
+{
+ // TODO: Implement
+}
+
+#define DATETIME_FORMAT "This file is dated %04d/%02d/%02d %02d:%02d:%02d for %s\n"
+
+void Timestamps(const char *path)
+{
+ // TODO: Implement
+}
+
+void DirectoryDepth(const char *path)
+{
+ // TODO: Implement
+}
+
+void Fragmentation(const char *path, size_t clusterSize)
+{
+ // TODO: Implement
+}
+
+void Sparse(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void MillionFiles(const char *path)
+{
+ // TODO: Implement
+}
+
+void DeleteFiles(const char *path)
+{
+ // TODO: Implement
+}
+#endif
diff --git a/setter/dos.lk1 b/setter/dos.lk1
new file mode 100644
index 0000000..aac7166
--- /dev/null
+++ b/setter/dos.lk1
@@ -0,0 +1,2 @@
+FIL common.obj,dos.obj,main.obj
+
diff --git a/setter/dos.mk b/setter/dos.mk
new file mode 100644
index 0000000..e3821e3
--- /dev/null
+++ b/setter/dos.mk
@@ -0,0 +1,3 @@
+project : C:\dic\dos.exe .SYMBOLIC
+
+!include C:\dic\dos.mk1
diff --git a/setter/dos.mk1 b/setter/dos.mk1
new file mode 100644
index 0000000..913f5c9
--- /dev/null
+++ b/setter/dos.mk1
@@ -0,0 +1,24 @@
+!define BLANK ""
+C:\dic\common.obj : C:\dic\common.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc common.c -i="C:\WATCOM/h" -w4 -e25 -zq -od -d2 -bt=dos -fo=.obj -ml
+
+C:\dic\dos.obj : C:\dic\dos.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc dos.c -i="C:\WATCOM/h" -w4 -e25 -zq -od -d2 -bt=dos -fo=.obj -ml
+
+C:\dic\main.obj : C:\dic\main.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc main.c -i="C:\WATCOM/h" -w4 -e25 -zq -od -d2 -bt=dos -fo=.obj -ml
+
+C:\dic\dos.exe : C:\dic\common.obj C:\dic\dos.obj C:\dic\main.obj C:\dic\con&
+sts.h C:\dic\defs.h C:\dic\dosos2.h C:\dic\main.h .AUTODEPEND
+ @C:
+ cd C:\dic
+ @%write dos.lk1 FIL common.obj,dos.obj,main.obj
+ @%append dos.lk1
+ *wlink name dos d all SYS dos op m op maxe=25 op q op symf @dos.lk1
+
diff --git a/setter/dos.tgt b/setter/dos.tgt
new file mode 100644
index 0000000..222ca5f
--- /dev/null
+++ b/setter/dos.tgt
@@ -0,0 +1,207 @@
+40
+targetIdent
+0
+MProject
+1
+MComponent
+0
+2
+WString
+3
+EXE
+3
+WString
+5
+de6eo
+1
+0
+1
+4
+MCommand
+0
+5
+MCommand
+0
+6
+MItem
+7
+dos.exe
+7
+WString
+3
+EXE
+8
+WVList
+0
+9
+WVList
+0
+-1
+1
+1
+0
+10
+WPickList
+9
+11
+MItem
+3
+*.c
+12
+WString
+4
+COBJ
+13
+WVList
+0
+14
+WVList
+0
+-1
+1
+1
+0
+15
+MItem
+8
+common.c
+16
+WString
+4
+COBJ
+17
+WVList
+0
+18
+WVList
+0
+11
+1
+1
+0
+19
+MItem
+5
+dos.c
+20
+WString
+4
+COBJ
+21
+WVList
+0
+22
+WVList
+0
+11
+1
+1
+0
+23
+MItem
+6
+main.c
+24
+WString
+4
+COBJ
+25
+WVList
+0
+26
+WVList
+0
+11
+1
+1
+0
+27
+MItem
+3
+*.h
+28
+WString
+3
+NIL
+29
+WVList
+0
+30
+WVList
+0
+-1
+1
+1
+0
+31
+MItem
+8
+consts.h
+32
+WString
+3
+NIL
+33
+WVList
+0
+34
+WVList
+0
+27
+1
+1
+0
+35
+MItem
+6
+defs.h
+36
+WString
+3
+NIL
+37
+WVList
+0
+38
+WVList
+0
+27
+1
+1
+0
+39
+MItem
+8
+dosos2.h
+40
+WString
+3
+NIL
+41
+WVList
+0
+42
+WVList
+0
+27
+1
+1
+0
+43
+MItem
+6
+main.h
+44
+WString
+3
+NIL
+45
+WVList
+0
+46
+WVList
+0
+27
+1
+1
+0
diff --git a/setter/dos.wpj b/setter/dos.wpj
new file mode 100644
index 0000000..c8f11b8
--- /dev/null
+++ b/setter/dos.wpj
@@ -0,0 +1,43 @@
+40
+projectIdent
+0
+VpeMain
+1
+WRect
+1504
+1490
+7680
+9220
+2
+MProject
+3
+MCommand
+0
+4
+MCommand
+0
+1
+5
+WFileName
+7
+dos.tgt
+6
+WVList
+1
+7
+VComponent
+8
+WRect
+0
+0
+5712
+4330
+0
+0
+9
+WFileName
+7
+dos.tgt
+0
+7
+7
diff --git a/setter/dosos2.h b/setter/dosos2.h
new file mode 100644
index 0000000..beeffe8
--- /dev/null
+++ b/setter/dosos2.h
@@ -0,0 +1,46 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : dosos2.h
+Author(s) : Natalia Portillo
+
+Component : fstester.setter
+
+--[ Description ] -----------------------------------------------------------
+
+Contains definitions commons to DOS and OS/2
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#if defined(__OS2__) || defined (__os2__) || defined(__DOS__) || defined (MSDOS)
+
+#ifndef DIC_FSTESTER_SETTER_DOSOS2_H
+#define DIC_FSTESTER_SETTER_DOSOS2_H
+
+const char* archivedAttributeText = "This file has the archived attribute set.\n";
+const char* systemAttributeText = "This file has the system attribute set.\n";
+const char* hiddenAttributeText = "This file has the hidden attribute set.\n";
+const char* readonlyAttributeText = "This file has the read-only attribute set.\n";
+const char* noAttributeText = "This file has no attribute set.\n";
+
+
+#endif
+
+#endif
diff --git a/setter/main.c b/setter/main.c
new file mode 100644
index 0000000..756217e
--- /dev/null
+++ b/setter/main.c
@@ -0,0 +1,71 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : main.c
+Author(s) : Natalia Portillo
+
+Component : fstester.setter
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#include
+
+#include "main.h"
+#include "defs.h"
+#include "consts.h"
+
+int main(int argc, char **argv)
+{
+ size_t clusterSize = 0;
+
+ printf("The Disc Image Chef Filesystem Tester (Setter) %s\n", DIC_FSTESTER_VERSION);
+ printf("%s\n", DIC_COPYRIGHT);
+
+ printf("Running in %s (%s)\n", OS_NAME, OS_ARCH);
+ printf("\n");
+
+ if(argc != 2)
+ {
+ printf("Usage %s \n", argv[0]);
+ return -1;
+ }
+
+ GetOsInfo();
+ GetVolumeInfo(argv[1], &clusterSize);
+ FileAttributes(argv[1]);
+ FilePermissions(argv[1]);
+ ExtendedAttributes(argv[1]);
+ ResourceFork(argv[1]);
+ Filenames(argv[1]);
+ Timestamps(argv[1]);
+ DirectoryDepth(argv[1]);
+ Fragmentation(argv[1], clusterSize);
+ Sparse(argv[1]);
+ MillionFiles(argv[1]);
+ DeleteFiles(argv[1]);
+ GetVolumeInfo(argv[1], &clusterSize);
+
+ return 0;
+}
+
diff --git a/setter/main.h b/setter/main.h
new file mode 100644
index 0000000..17f2a4e
--- /dev/null
+++ b/setter/main.h
@@ -0,0 +1,157 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : main.h
+Author(s) : Natalia Portillo
+
+Component : fstester.setter
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#ifndef DIC_FSTESTER_GETTER_MAIN_H
+#define DIC_FSTESTER_GETTER_MAIN_H
+
+#define DIC_FSTESTER_VERSION "0.1"
+#define DIC_COPYRIGHT "Copyright (C) 2011-2018 Natalia Portillo"
+
+#if defined(__alpha__) || defined (_M_ALPHA)
+#define OS_ARCH "axp"
+#elif defined(__aarch64__)
+#define OS_ARCH "aarch64"
+#elif defined(__arm__)
+#define OS_ARCH "arm"
+#elif defined(__I86__) || defined (__i86__) || defined (_M_I86)
+#define OS_ARCH "x86"
+#elif defined(__I386__) || defined (__i386__) || defined (__THW_INTEL) || defined (_M_IX86)
+#define OS_ARCH "ia32"
+#elif defined(__ia64__) || defined (_M_IA64)
+#define OS_ARCH "ia64"
+#elif defined(__m68k__) || defined (_M_M68K) || defined (M68000) || defined (__MC68K__)
+#define OS_ARCH "m68k"
+#elif defined(__mips__) || defined (__mips) || defined (__MIPS__)
+#define OS_ARCH "mips"
+#elif defined(__hppa__) || defined (__hppa)
+#define OS_ARCH "parisc"
+#elif defined(__ppc64__) || defined (__PPC64__) || defined (_ARCH_PPC64)
+#define OS_ARCH "ppc64"
+#elif defined(__powerpc__) || defined (_M_PPC) || defined (__PPC__) || defined (_ARCH_PPC)
+#define OS_ARCH "ppc"
+#elif defined(_POWER)
+#define OS_ARCH "power"
+#elif defined(__sparc__) || defined (__SPARC__) || defined (__sparc)
+#define OS_ARCH "sparc"
+#elif defined(vax)
+#define OS_ARCH "vax"
+#elif defined(__x86_64__) || defined (__amd64)
+#define OS_ARCH "x86_64"
+#else
+#define OS_ARCH "unknown"
+#endif
+
+#if defined (_AIX) || defined (__TOS_AIX__)
+#define OS_NAME "AIX"
+#elif defined(__ANDROID__)
+#define OS_NAME "Android"
+#elif defined(AMIGA) || defined (__amigaos__)
+#define OS_NAME "AmigaOS"
+#elif defined(__BEOS__)
+#define OS_NAME "BeOS"
+#elif defined(__bsdi__)
+#define OS_NAME "BSD/OS"
+#elif defined(__CYGWIN__)
+#define OS_NAME "Windows NT with Cygwin"
+#elif defined(__DOS__) || defined (MSDOS)
+#define OS_NAME "DOS"
+#elif defined(__DragonFly__)
+#define OS_NAME "DragonFly BSD"
+#elif defined(__FreeBSD__)
+#define OS_NAME "FreeBSD"
+#elif defined(__gnu_hurd__)
+#define OS_NAME "GNU/Hurd"
+#elif defined(__linux__) || defined (__LINUX__) || defined (__gnu_linux)
+#define OS_NAME "Linux"
+#elif defined(_hpux) || defined (hpux) || defined (__hpux)
+#define OS_NAME "HP-UX"
+#elif defined(__INTERIX)
+#define OS_NAME "Windows NT with POSIX subsystem"
+#elif defined(sgi) || defined (__sgi)
+#define OS_NAME "IRIX"
+#elif defined(__Lynx__)
+#define OS_NAME "LynxOS"
+#elif defined(macintosh)
+#define OS_NAME "Mac OS"
+#elif defined(__APPLE__) && defined(__MACH__)
+#define OS_NAME "Mac OS X"
+#elif defined(__minix)
+#define OS_NAME "MINIX"
+#elif defined(__MORPHOS__)
+#define OS_NAME "MorphOS"
+#elif defined(__NetBSD__)
+#define OS_NAME "NetBSD"
+#elif defined(__NETWARE__) || defined (__netware__)
+#define OS_NAME "NetWare"
+#elif defined(__OpenBSD__)
+#define OS_NAME "OpenBSD"
+#elif defined(__OS2__) || defined (__os2__)
+#define OS_NAME "OS/2"
+#elif defined(__palmos__)
+#define OS_NAME "PalmOS"
+#elif defined(EPLAN9)
+#define OS_NAME "Plan 9"
+#elif defined(__QNX__) || defined (__QNXNTO__)
+#define OS_NAME "QNX"
+#elif defined(_UNIXWARE7)
+#define OS_NAME "UnixWare"
+#elif defined(_SCO_DS)
+#define OS_NAME "SCO OpenServer"
+#elif defined(sun) || defined (__sun) || defined (__sun__)
+#if defined (__SVR4) || defined (__svr4__)
+#define OS_NAME "Solaris"
+#else
+#define OS_NAME "SunOS"
+#endif
+#elif defined(__SYLLABLE__)
+#define OS_NAME "Syllable"
+#elif defined(__osf__) || defined (__osf)
+#define OS_NAME "Tru64 UNIX"
+#elif defined(ultrix) || defined (__ultrix) || defined (__ultrix__)
+#define OS_NAME "Ultrix"
+#elif defined(VMS) || defined (__VMS)
+#define OS_NAME "VMS"
+#elif defined(__VXWORKS__) || defined (__vxworks)
+#define OS_NAME "VxWorks"
+#elif defined(__WINDOWS__) || defined (__TOS_WIN__) || defined (__WIN32__) || defined (_WIN64) || defined (_WIN32) || defined (__NT__)
+#define OS_NAME "Windows"
+#elif defined(M_XENIX)
+#define OS_NAME "XENIX"
+#elif defined(__MVS__)
+#define OS_NAME "z/OS"
+#elif defined(defined (unix)) || defined (defined (UNIX)) || defined (defined (__unix)) || defined (defined (__unix__)) || defined (defined (__UNIX__)
+#define OS_NAME "Unknown UNIX"
+#else
+#define OS_NAME "Unknown"
+#endif
+
+#endif
+
diff --git a/setter/os2.c b/setter/os2.c
new file mode 100644
index 0000000..e2143a4
--- /dev/null
+++ b/setter/os2.c
@@ -0,0 +1,38 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : os2_32.c
+Author(s) : Natalia Portillo
+
+Component : fstester.setter.os2
+
+--[ Description ] -----------------------------------------------------------
+
+Contains common OS/2 code
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#if defined(__OS2__) || defined (__os2__)
+
+#define INCL_DOSMISC
+#include
+
+
+#endif
diff --git a/setter/os2_16.c b/setter/os2_16.c
new file mode 100644
index 0000000..c35f37e
--- /dev/null
+++ b/setter/os2_16.c
@@ -0,0 +1,1449 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : os2_16.c
+Author(s) : Natalia Portillo
+
+Component : fstester.setter.os2
+
+--[ Description ] -----------------------------------------------------------
+
+Contains 16-bit OS/2 code
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#if (defined(__I86__) || defined (__i86__) || defined (_M_I86)) && (defined(__OS2__) || defined (__os2__))
+
+#include
+#include
+#include
+#include
+
+#define INCL_DOSMISC
+#define INCL_DOSFILEMGR
+#include
+
+#include "defs.h"
+#include "os2_16.h"
+#include "dosos2.h"
+#include "consts.h"
+
+void GetOsInfo()
+{
+ USHORT Version;
+ USHORT rc;
+ BYTE MajorVer;
+ BYTE MinorVer;
+ USHORT pathLen[1];
+
+ rc = DosGetVersion(&Version);
+
+ if(rc)
+ {
+ printf("Error %d querying OS/2 version.\n", rc);
+ return;
+ }
+
+ MajorVer = HIBYTE(Version) / 10;
+ MinorVer = LOBYTE(Version) / 10;
+
+ if(MajorVer == 2)
+ {
+ MajorVer = MinorVer;
+ MinorVer = 0;
+ }
+
+ printf("OS information:\n");
+ printf("\tRunning under OS/2 %d.%d\n", MajorVer, MinorVer);
+
+ rc = DosQSysInfo(0, (PBYTE) pathLen, sizeof(USHORT));
+
+ printf("\tMaximum path is %d bytes.\n", pathLen[0]);
+}
+
+void GetVolumeInfo(const char *path, size_t *clusterSize)
+{
+ USHORT rc;
+ BYTE bData[64];
+ USHORT cbData = sizeof(bData);
+ PFSALLOCATE pfsAllocateBuffer;
+ USHORT driveNo = path[0] - '@';
+ char *fsdName;
+ PFSINFO pfsInfo;
+
+ *clusterSize = 0;
+
+ rc = DosQFSAttach((PSZ)path, 0, FSAIL_QUERYNAME, (PVOID) &bData, &cbData, 0);
+
+ printf("Volume information:\n");
+ printf("\tPath: %s\n", path);
+ printf("\tDrive number: %d\n", driveNo - 1);
+
+ if(rc)
+ {
+ printf("Error %d requesting volume information.\n", rc);
+ }
+ else
+ {
+ fsdName = &bData[4 + (USHORT) bData[2] + 1 + 2];
+ printf("\tFSD name: %s\n", fsdName);
+ }
+
+ pfsAllocateBuffer = (PFSALLOCATE)malloc(sizeof(FSALLOCATE));
+ rc = DosQFSInfo(driveNo, 1, (PBYTE) pfsAllocateBuffer, sizeof(FSALLOCATE));
+
+ if(rc)
+ {
+ printf("Error %d requesting volume information.\n", rc);
+ }
+ else
+ {
+ printf("\tBytes per sector: %u\n", pfsAllocateBuffer->cbSector);
+ printf("\tSectors per cluster: %lu (%lu bytes)\n", pfsAllocateBuffer->cSectorUnit, pfsAllocateBuffer->cSectorUnit * pfsAllocateBuffer->cbSector);
+ printf("\tClusters: %lu (%lu bytes)\n", pfsAllocateBuffer->cUnit, pfsAllocateBuffer->cSectorUnit * pfsAllocateBuffer->cbSector * pfsAllocateBuffer->cUnit);
+ printf("\tFree clusters: %lu (%lu bytes)\n", pfsAllocateBuffer->cUnitAvail, pfsAllocateBuffer->cSectorUnit * pfsAllocateBuffer->cbSector * pfsAllocateBuffer->cUnitAvail);
+
+ *clusterSize = pfsAllocateBuffer->cSectorUnit * pfsAllocateBuffer->cbSector;
+ }
+
+ free(pfsAllocateBuffer);
+
+ pfsInfo = (PFSINFO)malloc(sizeof(FSINFO));
+ rc = DosQFSInfo(driveNo, 2, (PBYTE) pfsInfo, sizeof(FSINFO));
+
+ if(rc)
+ {
+ printf("Error %d requesting volume information.\n", rc);
+ }
+ else
+ {
+ printf("\tVolume label: %s\n", pfsInfo->vol.szVolLabel);
+ printf("\tVolume created on %d/%02d/%02d %02d:%02d:%02d\n",
+ pfsInfo->fdateCreation.year + 1980, pfsInfo->fdateCreation.month - 1, pfsInfo->fdateCreation.day,
+ pfsInfo->ftimeCreation.hours, pfsInfo->ftimeCreation.minutes, pfsInfo->ftimeCreation.twosecs*2);
+ }
+
+ free(pfsInfo);
+}
+
+void FileAttributes(const char *path)
+{
+ char drivePath[4];
+ USHORT rc = 0, wRc = 0, cRc = 0;
+ USHORT actionTaken = 0;
+ HFILE handle;
+
+ drivePath[0] = path[0];
+ drivePath[1] = ':';
+ drivePath[2] = '\\';
+ drivePath[3] = 0;
+
+ rc = DosChDir(drivePath, 0);
+
+ if(rc)
+ {
+ printf("Cannot change to specified path, not continuing.\n");
+ return;
+ }
+
+ rc = DosMkDir("ATTRS", 0);
+
+ if(rc)
+ {
+ printf("Cannot create working directory.\n");
+ return;
+ }
+
+ rc = DosChDir("ATTRS", 0);
+
+ printf("Creating attributes files.\n");
+
+ rc = DosOpen("NONE", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) noAttributeText, strlen(noAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("NONE", FILE_NORMAL, 0);
+ }
+
+ printf("\tFile with no attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "NONE", rc, wRc, cRc);
+
+ rc = DosOpen("ARCHIVE", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) archivedAttributeText, strlen(archivedAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("ARCHIVE", FILE_ARCHIVED, 0);
+ }
+
+ printf("\tFile with archived attribute: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ARCHIVE", rc, wRc, cRc);
+
+ rc = DosOpen("SYSTEM", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) systemAttributeText, strlen(systemAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("SYSTEM", FILE_SYSTEM, 0);
+ }
+
+ printf("\tFile with system attribute: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "SYSTEM", rc, wRc, cRc);
+
+ rc = DosOpen("HIDDEN", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) hiddenAttributeText, strlen(hiddenAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("HIDDEN", FILE_HIDDEN, 0);
+ }
+
+ printf("\tFile with hidden attribute: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "HIDDEN", rc, wRc, cRc);
+
+ rc = DosOpen("READONLY", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) readonlyAttributeText, strlen(readonlyAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("READONLY", FILE_READONLY, 0);
+ }
+
+ printf("\tFile with read-only attribute: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "READONLY", rc, wRc, cRc);
+
+ rc = DosOpen("HIDDREAD", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) hiddenAttributeText, strlen(hiddenAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) readonlyAttributeText, strlen(readonlyAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("HIDDREAD", FILE_HIDDEN | FILE_READONLY, 0);
+ }
+
+ printf("\tFile with hidden, read-only attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "HIDDREAD", rc, wRc, cRc);
+
+ rc = DosOpen("SYSTREAD", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) systemAttributeText, strlen(systemAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) readonlyAttributeText, strlen(readonlyAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("SYSTREAD", FILE_SYSTEM | FILE_READONLY, 0);
+ }
+
+ printf("\tFile with system, read-only attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "SYSTREAD", rc, wRc, cRc);
+
+ rc = DosOpen("SYSTHIDD", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) systemAttributeText, strlen(systemAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) hiddenAttributeText, strlen(hiddenAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("SYSTHIDD", FILE_SYSTEM | FILE_HIDDEN, 0);
+ }
+
+ printf("\tFile with system, hidden attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "SYSTHIDD", rc, wRc, cRc);
+
+ rc = DosOpen("SYSRDYHD", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) systemAttributeText, strlen(systemAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) readonlyAttributeText, strlen(readonlyAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) hiddenAttributeText, strlen(hiddenAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("SYSRDYHD", FILE_SYSTEM | FILE_READONLY | FILE_HIDDEN, 0);
+ }
+
+ printf("\tFile with system, read-only, hidden attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "SYSRDYHD", rc, wRc, cRc);
+
+ rc = DosOpen("ARCHREAD", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) archivedAttributeText, strlen(archivedAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) readonlyAttributeText, strlen(readonlyAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("ARCHREAD", FILE_ARCHIVED | FILE_READONLY, 0);
+ }
+
+ printf("\tFile with archived, read-only attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ARCHREAD", rc, wRc, cRc);
+
+ rc = DosOpen("ARCHHIDD", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) archivedAttributeText, strlen(archivedAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) hiddenAttributeText, strlen(hiddenAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("ARCHHIDD", FILE_ARCHIVED | FILE_HIDDEN, 0);
+ }
+
+ printf("\tFile with archived, hidden attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ARCHHIDD", rc, wRc, cRc);
+
+ rc = DosOpen("ARCHDRDY", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) archivedAttributeText, strlen(archivedAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) hiddenAttributeText, strlen(hiddenAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) readonlyAttributeText, strlen(readonlyAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("ARCHDRDY", FILE_ARCHIVED | FILE_HIDDEN | FILE_READONLY, 0);
+ }
+
+ printf("\tFile with archived, hidden, read-only attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ARCHDRDY", rc, wRc, cRc);
+
+ rc = DosOpen("ARCHSYST", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) archivedAttributeText, strlen(archivedAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) systemAttributeText, strlen(systemAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("ARCHSYST", FILE_ARCHIVED | FILE_SYSTEM, 0);
+ }
+
+ printf("\tFile with archived, system attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ARCHSYST", rc, wRc, cRc);
+
+ rc = DosOpen("ARSYSRDY", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) archivedAttributeText, strlen(archivedAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) systemAttributeText, strlen(systemAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) readonlyAttributeText, strlen(readonlyAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("ARSYSRDY", FILE_ARCHIVED | FILE_SYSTEM | FILE_READONLY, 0);
+ }
+
+ printf("\tFile with archived, system, read-only attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ARSYSRDY", rc, wRc, cRc);
+
+ rc = DosOpen("ARCSYSHD", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) archivedAttributeText, strlen(archivedAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) systemAttributeText, strlen(systemAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) hiddenAttributeText, strlen(hiddenAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("ARCSYSHD", FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN, 0);
+ }
+
+ printf("\tFile with archived, system, hidden attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ARCSYSHD", rc, wRc, cRc);
+
+ rc = DosOpen("ARSYHDRD", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ wRc = DosWrite(handle, (PVOID) archivedAttributeText, strlen(archivedAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) systemAttributeText, strlen(systemAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) hiddenAttributeText, strlen(hiddenAttributeText), &actionTaken);
+ wRc = DosWrite(handle, (PVOID) readonlyAttributeText, strlen(readonlyAttributeText), &actionTaken);
+ cRc = DosClose(handle);
+ rc = DosSetFileMode("ARSYHDRD", FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN | FILE_READONLY, 0);
+ }
+
+ printf("\tFile with all (archived, system, hidden, read-only) attributes: name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ARSYHDRD", rc, wRc, cRc);
+}
+
+void FilePermissions(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void ExtendedAttributes(const char *path)
+{
+ char drivePath[4];
+ USHORT rc = 0, wRc = 0, cRc = 0;
+ USHORT actionTaken = 0;
+ HFILE handle;
+ char message[300];
+ EAOP eap;
+
+ drivePath[0] = path[0];
+ drivePath[1] = ':';
+ drivePath[2] = '\\';
+ drivePath[3] = 0;
+
+ rc = DosChDir(drivePath, 0);
+
+ if(rc)
+ {
+ printf("Cannot change to specified path, not continuing.\n");
+ return;
+ }
+
+ rc = DosMkDir("XATTRS", 0);
+
+ if(rc)
+ {
+ printf("Cannot create working directory.\n");
+ return;
+ }
+
+ rc = DosChDir("XATTRS", 0);
+
+ printf("Creating files with extended attributes.\n");
+
+ rc = DosOpen("COMMENTS", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ eap.fpGEAList = NULL;
+ eap.fpFEAList = (PFEALIST)&CommentsEA;
+ eap.oError = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, "This files has an optional .COMMENTS EA\n");
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ rc = DosSetFileInfo(handle, 2, (PBYTE) &eap, sizeof(EAOP));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile with comments = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "COMMENTS", rc, wRc, cRc);
+
+ rc = DosOpen("COMMENTS.CRT", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ eap.fpGEAList = NULL;
+ eap.fpFEAList = (PFEALIST)&CommentsEACritical;
+ eap.oError = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, "This files has a critical .COMMENTS EA\n");
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ rc = DosSetFileInfo(handle, 2, (PBYTE) &eap, sizeof(EAOP));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile with comments = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "COMMENTS.CRT", rc, wRc, cRc);
+
+ rc = DosOpen("ICON", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ eap.fpGEAList = NULL;
+ eap.fpFEAList = (PFEALIST)&IconEA;
+ eap.oError = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, "This files has an optional .ICON EA\n");
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ rc = DosSetFileInfo(handle, 2, (PBYTE) &eap, sizeof(EAOP));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile with icon = \"%s\", rc = %d, wRc = %d, cRc = %d\n", "ICON", rc, wRc, cRc);
+}
+
+void ResourceFork(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void Filenames(const char *path)
+{
+ char drivePath[4];
+ USHORT rc = 0, wRc = 0, cRc = 0;
+ USHORT actionTaken = 0;
+ HFILE handle;
+ char message[300];
+ int pos = 0;
+
+ drivePath[0] = path[0];
+ drivePath[1] = ':';
+ drivePath[2] = '\\';
+ drivePath[3] = 0;
+
+ rc = DosChDir(drivePath, 0);
+
+ if(rc)
+ {
+ printf("Cannot change to specified path, not continuing.\n");
+ return;
+ }
+
+ rc = DosMkDir("FILENAME", 0);
+
+ if(rc)
+ {
+ printf("Cannot create working directory.\n");
+ return;
+ }
+
+ rc = DosChDir("FILENAME", 0);
+
+ printf("Creating files with different filenames.\n");
+
+ for(pos = 0; filenames[pos]; pos++)
+ {
+ rc = DosOpen((PSZ)filenames[pos], &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&message, 0, 300);
+ sprintf(&message, FILENAME_FORMAT, filenames[pos]);
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d\n", filenames[pos], rc, wRc, cRc);
+ }
+}
+
+#define DATETIME_FORMAT "This file is dated %04d/%02d/%02d %02d:%02d:%02d for %s\n"
+
+void Timestamps(const char *path)
+{
+ char drivePath[4];
+ USHORT rc = 0, wRc = 0, cRc = 0, tRc = 0;
+ USHORT actionTaken = 0;
+ HFILE handle;
+ char message[300];
+ FILESTATUS status;
+
+ drivePath[0] = path[0];
+ drivePath[1] = ':';
+ drivePath[2] = '\\';
+ drivePath[3] = 0;
+
+ rc = DosChDir(drivePath, 0);
+
+ if(rc)
+ {
+ printf("Cannot change to specified path, not continuing.\n");
+ return;
+ }
+
+ rc = DosMkDir("TIMES", 0);
+
+ if(rc)
+ {
+ printf("Cannot create working directory.\n");
+ return;
+ }
+
+ rc = DosChDir("TIMES", 0);
+
+ printf("Creating timestamped files.\n");
+
+ rc = DosOpen((PSZ)"MAXCTIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateCreation.year = 127;
+ status.fdateCreation.month = 12;
+ status.fdateCreation.day = 31;
+ status.ftimeCreation.hours = 23;
+ status.ftimeCreation.minutes = 59;
+ status.ftimeCreation.twosecs = 29;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateCreation.year + 1980, status.fdateCreation.month, status.fdateCreation.day,
+ status.ftimeCreation.hours, status.ftimeCreation.minutes, status.ftimeCreation.twosecs*2,
+ "creation");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "MAXCTIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"MINCTIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateCreation.year = 0;
+ status.fdateCreation.month = 1;
+ status.fdateCreation.day = 1;
+ status.ftimeCreation.hours = 0;
+ status.ftimeCreation.minutes = 0;
+ status.ftimeCreation.twosecs = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateCreation.year + 1980, status.fdateCreation.month, status.fdateCreation.day,
+ status.ftimeCreation.hours, status.ftimeCreation.minutes, status.ftimeCreation.twosecs*2,
+ "creation");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "MINCTIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"Y19CTIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateCreation.year = 1999 - 1980;
+ status.fdateCreation.month = 12;
+ status.fdateCreation.day = 31;
+ status.ftimeCreation.hours = 23;
+ status.ftimeCreation.minutes = 59;
+ status.ftimeCreation.twosecs = 29;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateCreation.year + 1980, status.fdateCreation.month, status.fdateCreation.day,
+ status.ftimeCreation.hours, status.ftimeCreation.minutes, status.ftimeCreation.twosecs*2,
+ "creation");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "Y19CTIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"Y2KCTIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateCreation.year = 2000 - 1980;
+ status.fdateCreation.month = 1;
+ status.fdateCreation.day = 1;
+ status.ftimeCreation.hours = 0;
+ status.ftimeCreation.minutes = 0;
+ status.ftimeCreation.twosecs = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateCreation.year + 1980, status.fdateCreation.month, status.fdateCreation.day,
+ status.ftimeCreation.hours, status.ftimeCreation.minutes, status.ftimeCreation.twosecs*2,
+ "creation");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "Y19CTIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"MAXWTIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateLastWrite.year = 127;
+ status.fdateLastWrite.month = 12;
+ status.fdateLastWrite.day = 31;
+ status.ftimeLastWrite.hours = 23;
+ status.ftimeLastWrite.minutes = 59;
+ status.ftimeLastWrite.twosecs = 29;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateLastWrite.year + 1980, status.fdateLastWrite.month, status.fdateLastWrite.day,
+ status.ftimeLastWrite.hours, status.ftimeLastWrite.minutes, status.ftimeLastWrite.twosecs*2,
+ "last written");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "MAXWTIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"MINWTIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateLastWrite.year = 0;
+ status.fdateLastWrite.month = 1;
+ status.fdateLastWrite.day = 1;
+ status.ftimeLastWrite.hours = 0;
+ status.ftimeLastWrite.minutes = 0;
+ status.ftimeLastWrite.twosecs = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateLastWrite.year + 1980, status.fdateLastWrite.month, status.fdateLastWrite.day,
+ status.ftimeLastWrite.hours, status.ftimeLastWrite.minutes, status.ftimeLastWrite.twosecs*2,
+ "last written");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "MINWTIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"Y19WTIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateLastWrite.year = 1999 - 1980;
+ status.fdateLastWrite.month = 12;
+ status.fdateLastWrite.day = 31;
+ status.ftimeLastWrite.hours = 23;
+ status.ftimeLastWrite.minutes = 59;
+ status.ftimeLastWrite.twosecs = 29;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateLastWrite.year + 1980, status.fdateLastWrite.month, status.fdateLastWrite.day,
+ status.ftimeLastWrite.hours, status.ftimeLastWrite.minutes, status.ftimeLastWrite.twosecs*2,
+ "last written");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "Y19WTIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"Y2KWTIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateLastWrite.year = 2000 - 1980;
+ status.fdateLastWrite.month = 1;
+ status.fdateLastWrite.day = 1;
+ status.ftimeLastWrite.hours = 0;
+ status.ftimeLastWrite.minutes = 0;
+ status.ftimeLastWrite.twosecs = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateLastWrite.year + 1980, status.fdateLastWrite.month, status.fdateLastWrite.day,
+ status.ftimeLastWrite.hours, status.ftimeLastWrite.minutes, status.ftimeLastWrite.twosecs*2,
+ "last written");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "Y2KWTIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"MAXATIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateLastAccess.year = 127;
+ status.fdateLastAccess.month = 12;
+ status.fdateLastAccess.day = 31;
+ status.ftimeLastAccess.hours = 23;
+ status.ftimeLastAccess.minutes = 59;
+ status.ftimeLastAccess.twosecs = 29;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateLastAccess.year + 1980, status.fdateLastAccess.month, status.fdateLastAccess.day,
+ status.ftimeLastAccess.hours, status.ftimeLastAccess.minutes, status.ftimeLastAccess.twosecs*2,
+ "last access");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "MAXATIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"MINATIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateLastAccess.year = 0;
+ status.fdateLastAccess.month = 1;
+ status.fdateLastAccess.day = 1;
+ status.ftimeLastAccess.hours = 0;
+ status.ftimeLastAccess.minutes = 0;
+ status.ftimeLastAccess.twosecs = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateLastAccess.year + 1980, status.fdateLastAccess.month, status.fdateLastAccess.day,
+ status.ftimeLastAccess.hours, status.ftimeLastAccess.minutes, status.ftimeLastAccess.twosecs*2,
+ "last access");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "MINATIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"Y19ATIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateLastAccess.year = 1999 - 1980;
+ status.fdateLastAccess.month = 12;
+ status.fdateLastAccess.day = 31;
+ status.ftimeLastAccess.hours = 23;
+ status.ftimeLastAccess.minutes = 59;
+ status.ftimeLastAccess.twosecs = 29;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateLastAccess.year + 1980, status.fdateLastAccess.month, status.fdateLastAccess.day,
+ status.ftimeLastAccess.hours, status.ftimeLastAccess.minutes, status.ftimeLastAccess.twosecs*2,
+ "last access");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "Y19ATIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"Y2KATIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateLastAccess.year = 2000 - 1980;
+ status.fdateLastAccess.month = 1;
+ status.fdateLastAccess.day = 1;
+ status.ftimeLastAccess.hours = 0;
+ status.ftimeLastAccess.minutes = 0;
+ status.ftimeLastAccess.twosecs = 0;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateLastAccess.year + 1980, status.fdateLastAccess.month, status.fdateLastAccess.day,
+ status.ftimeLastAccess.hours, status.ftimeLastAccess.minutes, status.ftimeLastAccess.twosecs*2,
+ "last access");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "Y2KATIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"MAX_TIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateCreation.year = 127;
+ status.fdateCreation.month = 12;
+ status.fdateCreation.day = 31;
+ status.ftimeCreation.hours = 23;
+ status.ftimeCreation.minutes = 59;
+ status.ftimeCreation.twosecs = 29;
+ status.fdateLastAccess = status.fdateCreation;
+ status.ftimeLastAccess = status.ftimeCreation;
+ status.fdateLastWrite = status.fdateCreation;
+ status.ftimeLastWrite = status.ftimeCreation;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateCreation.year + 1980, status.fdateCreation.month, status.fdateCreation.day,
+ status.ftimeCreation.hours, status.ftimeCreation.minutes, status.ftimeCreation.twosecs*2,
+ "all");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "MAX_TIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"MIN_TIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateCreation.year = 0;
+ status.fdateCreation.month = 1;
+ status.fdateCreation.day = 1;
+ status.ftimeCreation.hours = 0;
+ status.ftimeCreation.minutes = 0;
+ status.ftimeCreation.twosecs = 0;
+ status.fdateLastAccess = status.fdateCreation;
+ status.ftimeLastAccess = status.ftimeCreation;
+ status.fdateLastWrite = status.fdateCreation;
+ status.ftimeLastWrite = status.ftimeCreation;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateCreation.year + 1980, status.fdateCreation.month, status.fdateCreation.day,
+ status.ftimeCreation.hours, status.ftimeCreation.minutes, status.ftimeCreation.twosecs*2,
+ "all");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "MIN_TIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"Y19_TIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateCreation.year = 1999 - 1980;
+ status.fdateCreation.month = 12;
+ status.fdateCreation.day = 31;
+ status.ftimeCreation.hours = 23;
+ status.ftimeCreation.minutes = 59;
+ status.ftimeCreation.twosecs = 29;
+ status.fdateLastAccess = status.fdateCreation;
+ status.ftimeLastAccess = status.ftimeCreation;
+ status.fdateLastWrite = status.fdateCreation;
+ status.ftimeLastWrite = status.ftimeCreation;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateCreation.year + 1980, status.fdateCreation.month, status.fdateCreation.day,
+ status.ftimeCreation.hours, status.ftimeCreation.minutes, status.ftimeCreation.twosecs*2,
+ "all");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "Y19_TIME", rc, wRc, cRc, tRc);
+
+ rc = DosOpen((PSZ)"Y2K_TIME", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+
+ if(!rc)
+ {
+ memset(&status, 0, sizeof(FILESTATUS));
+ status.fdateCreation.year = 2000 - 1980;
+ status.fdateCreation.month = 1;
+ status.fdateCreation.day = 1;
+ status.ftimeCreation.hours = 0;
+ status.ftimeCreation.minutes = 0;
+ status.ftimeCreation.twosecs = 0;
+ status.fdateLastAccess = status.fdateCreation;
+ status.ftimeLastAccess = status.ftimeCreation;
+ status.fdateLastWrite = status.fdateCreation;
+ status.ftimeLastWrite = status.ftimeCreation;
+ memset(&message, 0, 300);
+ sprintf(&message, DATETIME_FORMAT,
+ status.fdateCreation.year + 1980, status.fdateCreation.month, status.fdateCreation.day,
+ status.ftimeCreation.hours, status.ftimeCreation.minutes, status.ftimeCreation.twosecs*2,
+ "all");
+
+ wRc = DosWrite(handle, &message, strlen(message), &actionTaken);
+ tRc = DosSetFileInfo(handle, 1, (PBYTE) &status, sizeof(FILESTATUS));
+ cRc = DosClose(handle);
+ }
+
+ printf("\tFile name = \"%s\", rc = %d, wRc = %d, cRc = %d, tRc = %d\n", "Y2K_TIME", rc, wRc, cRc, tRc);
+}
+
+void DirectoryDepth(const char *path)
+{
+ char drivePath[4];
+ USHORT rc = 0;
+ char filename[9];
+ long pos = 2;
+
+ drivePath[0] = path[0];
+ drivePath[1] = ':';
+ drivePath[2] = '\\';
+ drivePath[3] = 0;
+
+ rc = DosChDir(drivePath, 0);
+
+ if(rc)
+ {
+ printf("Cannot change to specified path, not continuing.\n");
+ return;
+ }
+
+ rc = DosMkDir("DEPTH", 0);
+
+ if(rc)
+ {
+ printf("Cannot create working directory.\n");
+ return;
+ }
+
+ rc = DosChDir("DEPTH", 0);
+
+ printf("Creating deepest directory tree.\n");
+
+ while(!rc)
+ {
+ memset(&filename, 0, 9);
+ sprintf(&filename, "%08d", pos);
+ rc = DosMkDir(filename, 0);
+
+ if(!rc)
+ rc = DosChDir(filename, 0);
+
+ pos++;
+ }
+
+ printf("\tCreated %d levels of directory hierarchy\n", pos);
+}
+
+void Fragmentation(const char *path, size_t clusterSize)
+{
+ size_t halfCluster = clusterSize / 2;
+ size_t quarterCluster = clusterSize / 4;
+ size_t twoCluster = clusterSize * 2;
+ size_t threeQuartersCluster = halfCluster + quarterCluster;
+ size_t twoAndThreeQuartCluster = threeQuartersCluster + twoCluster;
+ unsigned char *buffer;
+ char drivePath[4];
+ USHORT rc = 0, wRc = 0, cRc = 0;
+ USHORT actionTaken = 0;
+ HFILE handle;
+ long i;
+
+ drivePath[0] = path[0];
+ drivePath[1] = ':';
+ drivePath[2] = '\\';
+ drivePath[3] = 0;
+
+ rc = DosChDir(drivePath, 0);
+
+ if(rc)
+ {
+ printf("Cannot change to specified path, not continuing.\n");
+ return;
+ }
+
+ rc = DosMkDir("FRAGS", 0);
+
+ if(rc)
+ {
+ printf("Cannot create working directory.\n");
+ return;
+ }
+
+ rc = DosChDir("FRAGS", 0);
+
+ rc = DosOpen((PSZ)"HALFCLST", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(halfCluster);
+ memset(buffer, 0, halfCluster);
+
+ for(i = 0; i < halfCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, halfCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "HALFCLST", halfCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"QUARCLST", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(quarterCluster);
+ memset(buffer, 0, quarterCluster);
+
+ for(i = 0; i < quarterCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, quarterCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "QUARCLST", quarterCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"TWOCLST", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(twoCluster);
+ memset(buffer, 0, twoCluster);
+
+ for(i = 0; i < twoCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, twoCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "TWOCLST", twoCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"TRQTCLST", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(threeQuartersCluster);
+ memset(buffer, 0, threeQuartersCluster);
+
+ for(i = 0; i < threeQuartersCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, threeQuartersCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "TRQTCLST", threeQuartersCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"TWTQCLST", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(twoAndThreeQuartCluster);
+ memset(buffer, 0, twoAndThreeQuartCluster);
+
+ for(i = 0; i < twoAndThreeQuartCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, twoAndThreeQuartCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "TWTQCLST", twoAndThreeQuartCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"TWO1", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(twoCluster);
+ memset(buffer, 0, twoCluster);
+
+ for(i = 0; i < twoCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, twoCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "TWO1", twoCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"TWO2", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(twoCluster);
+ memset(buffer, 0, twoCluster);
+
+ for(i = 0; i < twoCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, twoCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "TWO2", twoCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"TWO3", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(twoCluster);
+ memset(buffer, 0, twoCluster);
+
+ for(i = 0; i < twoCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, twoCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tDeleting \"TWO2\".\n");
+ rc = DosDelete((PSZ)"TWO2", 0);
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "TWO3", twoCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"FRAGTHRQ", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(threeQuartersCluster);
+ memset(buffer, 0, threeQuartersCluster);
+
+ for(i = 0; i < threeQuartersCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, threeQuartersCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tDeleting \"TWO1\".\n");
+ rc = DosDelete((PSZ)"TWO1", 0);
+ printf("\tDeleting \"TWO3\".\n");
+ rc = DosDelete((PSZ)"TWO3", 0);
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "FRAGTHRQ", threeQuartersCluster, rc, wRc, cRc);
+
+ rc = DosOpen((PSZ)"FRAGSIXQ", &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(!rc)
+ {
+ buffer = malloc(twoAndThreeQuartCluster);
+ memset(buffer, 0, twoAndThreeQuartCluster);
+
+ for(i = 0; i < twoAndThreeQuartCluster; i++)
+ buffer[i] = clauniaBytes[i % CLAUNIA_SIZE];
+
+ wRc = DosWrite(handle, buffer, twoAndThreeQuartCluster, &actionTaken);
+ cRc = DosClose(handle);
+ free(buffer);
+ }
+
+ printf("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d\n", "FRAGSIXQ", twoAndThreeQuartCluster, rc, wRc, cRc);
+}
+
+void Sparse(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void MillionFiles(const char *path)
+{
+ char drivePath[4];
+ USHORT rc = 0;
+ char filename[9];
+ unsigned long long pos = 0;
+ USHORT actionTaken = 0;
+ HFILE handle;
+
+ drivePath[0] = path[0];
+ drivePath[1] = ':';
+ drivePath[2] = '\\';
+ drivePath[3] = 0;
+
+ rc = DosChDir(drivePath, 0);
+
+ if(rc)
+ {
+ printf("Cannot change to specified path, not continuing.\n");
+ return;
+ }
+
+ rc = DosMkDir("MILLION", 0);
+
+ if(rc)
+ {
+ printf("Cannot create working directory.\n");
+ return;
+ }
+
+ rc = DosChDir("MILLION", 0);
+
+ printf("Creating lots of files.\n");
+
+ for(pos = 0; pos < 100000ULL; pos++)
+ {
+ memset(&filename, 0, 9);
+ sprintf(&filename, "%08d", pos);
+ rc = DosOpen(&filename, &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(rc)
+ break;
+
+ DosClose(handle);
+ }
+
+ printf("\tCreated %llu files\n", pos);
+}
+
+void DeleteFiles(const char *path)
+{
+ char drivePath[4];
+ USHORT rc = 0;
+ char filename[9];
+ short pos = 0;
+ USHORT actionTaken = 0;
+ HFILE handle;
+
+ drivePath[0] = path[0];
+ drivePath[1] = ':';
+ drivePath[2] = '\\';
+ drivePath[3] = 0;
+
+ rc = DosChDir(drivePath, 0);
+
+ if(rc)
+ {
+ printf("Cannot change to specified path, not continuing.\n");
+ return;
+ }
+
+ rc = DosMkDir("DELETED", 0);
+
+ if(rc)
+ {
+ printf("Cannot create working directory.\n");
+ return;
+ }
+
+ rc = DosChDir("DELETED", 0);
+
+ printf("Creating and deleting files.\n");
+
+ for(pos = 0; pos < 64; pos++)
+ {
+ memset(&filename, 0, 9);
+ sprintf(&filename, "%X", pos);
+ rc = DosOpen(&filename, &handle, &actionTaken, 0,
+ FILE_NORMAL,
+ OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS,
+ OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_NO_CACHE | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READWRITE, 0);
+ if(rc)
+ break;
+
+ DosClose(handle);
+ DosDelete(&filename, 0);
+ }
+}
+#endif
+
diff --git a/setter/os2_16.h b/setter/os2_16.h
new file mode 100644
index 0000000..eb5e997
--- /dev/null
+++ b/setter/os2_16.h
@@ -0,0 +1,302 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : os2_16.h
+Author(s) : Natalia Portillo
+
+Component : fstester.setter
+
+--[ Description ] -----------------------------------------------------------
+
+Contains 16-bit OS/2 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#if (defined(__OS2__) || defined (__os2__)) && (defined(__I86__) || defined (__i86__) || defined (_M_I86))
+#ifndef DIC_FSTESTER_SETTER_OS2_16_H
+#define DIC_FSTESTER_SETTER_OS2_16_H
+
+/* Information level types (defins method of query) */
+#define FSAIL_QUERYNAME 1 /* Return data for a Drive or Device */
+#define FSAIL_DEVNUMBER 2 /* Return data for Ordinal Device # */
+#define FSAIL_DRVNUMBER 3 /* Return data for Ordinal Drive # */
+
+/* Item types (from data structure item "iType") */
+#define FSAT_CHARDEV 1 /* Resident character device */
+#define FSAT_PSEUDODEV 2 /* Pseudo-character device */
+#define FSAT_LOCALDRV 3 /* Local drive */
+#define FSAT_REMOTEDRV 4 /* Remote drive attached to FSD */
+
+/* Cannot be used directly must be traversed manually, at least with OpenWatcom 1.8 */
+typedef struct _FSQBUFFER /* fsqbuf Data structure for QFSAttach */
+{
+ USHORT iType; /* Item type */
+ USHORT cbName; /* Length of item name, sans NULL */
+ UCHAR szName[1]; /* ASCIIZ item name */
+ USHORT cbFSDName; /* Length of FSD name, sans NULL */
+ UCHAR szFSDName[1]; /* ASCIIZ FSD name */
+ USHORT cbFSAData; /* Length of FSD Attach data returned */
+ UCHAR rgFSAData[1]; /* FSD Attach data from FSD */
+} FSQBUFFER;
+typedef FSQBUFFER *PFSQBUFFER;
+
+unsigned char CommentsEA[72] =
+{
+ 0x45, 0x00, 0x00, 0x00, 0x00, 0x09, 0x33, 0x00, 0x2E, 0x43, 0x4F, 0x4D, 0x4D, 0x45, 0x4E, 0x54,
+ 0x53, 0x00, 0xFD, 0xFF, 0x2E, 0x00, 0x54, 0x68, 0x69, 0x73, 0x20, 0x45, 0x41, 0x20, 0x63, 0x6F,
+ 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x73, 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x20,
+ 0x66, 0x6F, 0x72, 0x20, 0x57, 0x6F, 0x72, 0x6B, 0x50, 0x6C, 0x61, 0x63, 0x65, 0x20, 0x53, 0x68,
+ 0x65, 0x6C, 0x6C, 0x2E, 0x00, 0x00, 0x00, 0x00
+};
+
+unsigned char CommentsEACritical[72] =
+{
+ 0x45, 0x00, 0x00, 0x00, 0x80, 0x09, 0x33, 0x00, 0x2E, 0x43, 0x4F, 0x4D, 0x4D, 0x45, 0x4E, 0x54,
+ 0x53, 0x00, 0xFD, 0xFF, 0x2E, 0x00, 0x54, 0x68, 0x69, 0x73, 0x20, 0x45, 0x41, 0x20, 0x63, 0x6F,
+ 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x73, 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x20,
+ 0x66, 0x6F, 0x72, 0x20, 0x57, 0x6F, 0x72, 0x6B, 0x50, 0x6C, 0x61, 0x63, 0x65, 0x20, 0x53, 0x68,
+ 0x65, 0x6C, 0x6C, 0x2E, 0x00, 0x00, 0x00, 0x00
+};
+
+unsigned char IconEA[3516] = {
+ 0xBC, 0x0D, 0x00, 0x00, 0x00, 0x05, 0xAE, 0x0D, 0x2E, 0x49, 0x43, 0x4F, 0x4E, 0x00, 0xF9, 0xFF,
+ 0xAA, 0x0D, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xDA, 0x01, 0x00, 0x00, 0x0C, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xDA, 0x02, 0x00, 0x00, 0x0C, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F,
+ 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80,
+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0x80, 0x00, 0xFF,
+ 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00,
+ 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x10, 0x00, 0xDA, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x10, 0x00, 0xDA, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x14, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00,
+ 0x5A, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00,
+ 0xDA, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x1A, 0x07,
+ 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x28, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0xBA, 0x07,
+ 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x03, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0A, 0x08, 0x00, 0x00,
+ 0x0C, 0x00, 0x00, 0x00, 0x28, 0x00, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF,
+ 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x8A, 0x0A, 0x00, 0x00,
+ 0x0C, 0x00, 0x00, 0x00, 0x28, 0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F,
+ 0x3F, 0x3F, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0xA0,
+ 0x80, 0x28, 0x50, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0x00, 0xD0, 0xD8, 0xB0, 0xC0, 0xFF, 0xFF,
+ 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F,
+ 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x7F,
+ 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F,
+ 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F,
+ 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F,
+ 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F,
+ 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x33, 0x12, 0x22, 0x22, 0x22, 0x22, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x12, 0x22, 0x22, 0x22, 0x22, 0x13, 0x12, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0x31, 0x11, 0x11, 0x11, 0x11, 0x31, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x21, 0x31, 0x22, 0x22, 0x22, 0x21, 0x31, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x07, 0xFC, 0x1F, 0xFC, 0x07, 0xF0, 0x1F, 0xFC, 0x07, 0xF0, 0x1F, 0xFC, 0x07, 0xF0, 0x1F,
+ 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x3F,
+ 0xFE, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07,
+ 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07,
+ 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07,
+ 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F,
+ 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xF8, 0x03, 0xE0, 0x03, 0x88, 0x0E, 0x20, 0x02, 0x08, 0x08, 0x20, 0x02, 0x88, 0x0A, 0x20,
+ 0x02, 0x8F, 0xFA, 0x20, 0x02, 0xC0, 0x06, 0x20, 0x01, 0x40, 0x04, 0x20, 0x01, 0x40, 0x04, 0x40,
+ 0x01, 0x7F, 0xFC, 0x60, 0x01, 0x20, 0x08, 0x10, 0x02, 0x20, 0x08, 0x08, 0x04, 0x00, 0x00, 0x08,
+ 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88,
+ 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88,
+ 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x90, 0x0B, 0xFF, 0xFF, 0xA0,
+ 0x04, 0x00, 0x00, 0x40, 0x03, 0xFD, 0x7F, 0x80, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0x41, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x27, 0x09,
+ 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x1F, 0x09, 0x00, 0x00, 0x4A, 0x09, 0x00, 0x00, 0x9F, 0x0A,
+ 0x00, 0x00, 0xE3, 0x0A, 0x00, 0x00, 0xE4, 0x09, 0x00, 0x00, 0x02, 0x0A, 0x00, 0x00, 0x29, 0x0A,
+ 0x00, 0x00, 0x55, 0x0A, 0x00, 0x00, 0x72, 0x0A, 0x00, 0x00, 0x88, 0x0A, 0xFF, 0xFF, 0x00, 0x00,
+ 0xE7, 0xCF, 0xE5, 0x1C, 0xE7, 0xCF, 0x65, 0x00, 0xF0, 0x1F, 0xDD, 0x04, 0xF3, 0x9F, 0xF2, 0x03,
+ 0xE0, 0x0F, 0xC7, 0x04, 0xDF, 0xF7, 0x0B, 0x05, 0xDF, 0xF7, 0xF8, 0x04, 0xDF, 0xF7, 0x32, 0x04,
+ 0xDF, 0xF7, 0xA8, 0x04, 0xDF, 0xF7, 0x9E, 0x04, 0xDF, 0xF7, 0xBA, 0x04, 0xE0, 0x0F, 0x7A, 0x04,
+ 0xFD, 0x7F, 0x85, 0x04, 0xFE, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xDF, 0x04, 0xFF, 0xFF, 0x00, 0x00,
+ 0xE7, 0xCF, 0x00, 0x1F, 0xE7, 0xCF, 0x00, 0x1F, 0xF0, 0x1F, 0x00, 0x1F, 0xF3, 0x9F, 0x00, 0x1F,
+ 0xE0, 0x0F, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F,
+ 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x7F, 0xE0, 0x0F, 0x00, 0x7F,
+ 0xFD, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00,
+ 0xE3, 0xF1, 0xF0, 0x00, 0xEB, 0xF5, 0xF1, 0x11, 0xE9, 0xE5, 0xF0, 0x00, 0xF4, 0x0B, 0xF0, 0x00,
+ 0xF7, 0xFB, 0xF0, 0x00, 0xFA, 0x17, 0xF1, 0x11, 0xFA, 0xD7, 0xF0, 0x00, 0xE0, 0x01, 0xF0, 0x0F,
+ 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xFF, 0xFF,
+ 0xDF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF,
+ 0xFF, 0x5F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF6, 0x66, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0xE3, 0xF1, 0xF0, 0x01, 0xEB, 0xF5, 0xF1, 0x11, 0xE9, 0xE5, 0xF0, 0x00, 0xF4, 0x0B, 0xF0, 0x01,
+ 0xF7, 0xFB, 0xF1, 0x11, 0xFA, 0x17, 0xF0, 0x00, 0xFA, 0xD7, 0xF0, 0x01, 0xE0, 0x01, 0xF1, 0x11,
+ 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x01, 0xDF, 0xFE, 0xF1, 0x11, 0xDF, 0xFE, 0xF0, 0x00,
+ 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x00, 0xE0, 0x01, 0xF0, 0x00,
+ 0xFF, 0x5F, 0xF1, 0x00, 0xFF, 0xBF, 0xF0, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x88, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x88, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x87, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x77, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x87, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF0, 0x66, 0x66, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xC3, 0xFF, 0xE1,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0x81,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0xFF, 0x06, 0x60, 0xFF, 0x01, 0xFF, 0x01,
+ 0xFF, 0x00, 0x37, 0x77, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x77, 0x77, 0x77, 0xFF, 0x80, 0x00, 0x03,
+ 0xFF, 0xEE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0x80, 0x00, 0x03,
+ 0xFF, 0x00, 0x00, 0xEE, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x00, 0x33, 0x33, 0xFF, 0xC0, 0x00, 0x01,
+ 0xFF, 0x33, 0x33, 0x33, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0E, 0xEE, 0x00, 0xFE, 0x00, 0x00, 0x00,
+ 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
+ 0x7F, 0x00, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00,
+ 0x7F, 0xEE, 0x0E, 0xEE, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00,
+ 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00,
+ 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x0E, 0xEE, 0x0E, 0xFC, 0x00, 0x00, 0x00,
+ 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
+ 0x7F, 0x40, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00,
+ 0xFF, 0x00, 0x0E, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x33, 0x33, 0x33, 0xFE, 0x00, 0x00, 0x03,
+ 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xF0, 0x33, 0x33, 0xFF, 0xFF, 0x87, 0xFF,
+ 0xFF, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x5D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x12, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x22, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x33, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x13, 0x33, 0x12, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x31, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x33, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x12, 0x22, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x33, 0x12, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x13, 0x33, 0x12,
+ 0x22, 0x22, 0x22, 0x13, 0x33, 0x12, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x12,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x12,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14,
+ 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x44, 0x44, 0x12,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33,
+ 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14,
+ 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+#endif
+#endif
diff --git a/setter/os2_16.lk1 b/setter/os2_16.lk1
new file mode 100644
index 0000000..18d110b
--- /dev/null
+++ b/setter/os2_16.lk1
@@ -0,0 +1,2 @@
+FIL main.obj,os2.obj,os2_16.obj
+
diff --git a/setter/os2_16.mk b/setter/os2_16.mk
new file mode 100644
index 0000000..3cf57f0
--- /dev/null
+++ b/setter/os2_16.mk
@@ -0,0 +1,3 @@
+project : C:\dic\os2_16.exe .SYMBOLIC
+
+!include C:\dic\os2_16.mk1
diff --git a/setter/os2_16.mk1 b/setter/os2_16.mk1
new file mode 100644
index 0000000..044d729
--- /dev/null
+++ b/setter/os2_16.mk1
@@ -0,0 +1,36 @@
+!define BLANK ""
+C:\dic\main.obj : C:\dic\main.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc main.c -i="C:\WATCOM/h;C:\WATCOM/h/os21x" -w4 -e25 -zq -od -d2 -bt=os2&
+ -fo=.obj -ml
+
+C:\dic\os2.obj : C:\dic\os2.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc os2.c -i="C:\WATCOM/h;C:\WATCOM/h/os21x" -w4 -e25 -zq -od -d2 -bt=os2 &
+-fo=.obj -ml
+
+C:\dic\os2_16.obj : C:\dic\os2_16.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc os2_16.c -i="C:\WATCOM/h;C:\WATCOM/h/os21x" -w4 -e25 -zq -od -d2 -bt=o&
+s2 -fo=.obj -ml
+
+C:\dic\os2_16.exe : C:\dic\main.obj C:\dic\os2.obj C:\dic\os2_16.obj C:\dic\&
+consts.h C:\dic\defs.h C:\dic\dosos2.h C:\dic\main.h C:\dic\os2_16.h .AUTODE&
+PEND
+ @C:
+ cd C:\dic
+ @%write os2_16.lk1 FIL main.obj,os2.obj,os2_16.obj
+ @%append os2_16.lk1
+!ifneq BLANK ""
+ *wlib -q -n -b os2_16.imp
+ @%append os2_16.lk1 LIBR os2_16.imp
+!endif
+ *wlink name os2_16 d all SYS os2 op m libr os2 op maxe=25 op q op symf @os2&
+_16.lk1
+!ifneq BLANK ""
+ rc -i $[: -i C:\WATCOM\h -i C:\WATCOM\h\os2 os2_16.exe
+!endif
+
diff --git a/setter/os2_16.tgt b/setter/os2_16.tgt
new file mode 100644
index 0000000..db27f5a
--- /dev/null
+++ b/setter/os2_16.tgt
@@ -0,0 +1,241 @@
+40
+targetIdent
+0
+MProject
+1
+MComponent
+0
+2
+WString
+4
+OEXE
+3
+WString
+5
+oc6eo
+1
+0
+1
+4
+MCommand
+0
+5
+MCommand
+0
+6
+MItem
+10
+os2_16.exe
+7
+WString
+4
+OEXE
+8
+WVList
+1
+9
+MVState
+10
+WString
+7
+OS2LINK
+11
+WString
+18
+?????Libraries(,):
+1
+12
+WString
+3
+os2
+0
+13
+WVList
+0
+-1
+1
+1
+0
+14
+WPickList
+10
+15
+MItem
+3
+*.c
+16
+WString
+4
+COBJ
+17
+WVList
+0
+18
+WVList
+0
+-1
+1
+1
+0
+19
+MItem
+6
+main.c
+20
+WString
+4
+COBJ
+21
+WVList
+0
+22
+WVList
+0
+15
+1
+1
+0
+23
+MItem
+5
+os2.c
+24
+WString
+4
+COBJ
+25
+WVList
+0
+26
+WVList
+0
+15
+1
+1
+0
+27
+MItem
+8
+os2_16.c
+28
+WString
+4
+COBJ
+29
+WVList
+0
+30
+WVList
+0
+15
+1
+1
+0
+31
+MItem
+3
+*.h
+32
+WString
+3
+NIL
+33
+WVList
+0
+34
+WVList
+0
+-1
+1
+1
+0
+35
+MItem
+8
+consts.h
+36
+WString
+3
+NIL
+37
+WVList
+0
+38
+WVList
+0
+31
+1
+1
+0
+39
+MItem
+6
+defs.h
+40
+WString
+3
+NIL
+41
+WVList
+0
+42
+WVList
+0
+31
+1
+1
+0
+43
+MItem
+8
+dosos2.h
+44
+WString
+3
+NIL
+45
+WVList
+0
+46
+WVList
+0
+31
+1
+1
+0
+47
+MItem
+6
+main.h
+48
+WString
+3
+NIL
+49
+WVList
+0
+50
+WVList
+0
+31
+1
+1
+0
+51
+MItem
+8
+os2_16.h
+52
+WString
+3
+NIL
+53
+WVList
+0
+54
+WVList
+0
+31
+1
+1
+0
diff --git a/setter/os2_16.wpj b/setter/os2_16.wpj
new file mode 100644
index 0000000..16c8f05
--- /dev/null
+++ b/setter/os2_16.wpj
@@ -0,0 +1,43 @@
+40
+projectIdent
+0
+VpeMain
+1
+WRect
+1496
+1450
+7680
+9220
+2
+MProject
+3
+MCommand
+0
+4
+MCommand
+0
+1
+5
+WFileName
+10
+os2_16.tgt
+6
+WVList
+1
+7
+VComponent
+8
+WRect
+0
+0
+5712
+4330
+0
+0
+9
+WFileName
+10
+os2_16.tgt
+0
+5
+7
diff --git a/setter/os2_32.c b/setter/os2_32.c
new file mode 100644
index 0000000..aec13ea
--- /dev/null
+++ b/setter/os2_32.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : os2_32.c
+Author(s) : Natalia Portillo
+
+Component : fstester.setter.os2
+
+--[ Description ] -----------------------------------------------------------
+
+Contains 32-bit OS/2 code
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#if (defined(__I386__) || defined (__i386__) || defined (__THW_INTEL) || defined (_M_IX86)) && (defined(__OS2__) || defined (__os2__))
+
+#include
+#include
+#include
+#include
+
+#define INCL_DOSMISC
+#define INCL_DOSFILEMGR
+#include
+
+#include "defs.h"
+#include "os2_16.h"
+#include "dosos2.h"
+#include "consts.h"
+
+void GetOsInfo()
+{
+ // TODO: Implement
+}
+
+void GetVolumeInfo(const char *path, size_t *clusterSize)
+{
+ // TODO: Implement
+}
+
+void FileAttributes(const char *path)
+{
+ // TODO: Implement
+}
+
+void FilePermissions(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void ExtendedAttributes(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void ResourceFork(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void Filenames(const char *path)
+{
+ // TODO: Implement
+}
+
+#define DATETIME_FORMAT "This file is dated %04d/%02d/%02d %02d:%02d:%02d for %s\n"
+
+void Timestamps(const char *path)
+{
+ // TODO: Implement
+}
+
+void DirectoryDepth(const char *path)
+{
+ // TODO: Implement
+}
+
+void Fragmentation(const char *path, size_t clusterSize)
+{
+ // TODO: Implement
+}
+
+void Sparse(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void MillionFiles(const char *path)
+{
+ // TODO: Implement
+}
+
+void DeleteFiles(const char *path)
+{
+ // TODO: Implement
+}
+#endif
diff --git a/setter/os2_32.h b/setter/os2_32.h
new file mode 100644
index 0000000..dfa58ae
--- /dev/null
+++ b/setter/os2_32.h
@@ -0,0 +1,38 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : os2_32.h
+Author(s) : Natalia Portillo
+
+Component : fstester.setter.os2
+
+--[ Description ] -----------------------------------------------------------
+
+Contains 32-bit OS/2 declarations
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#if (defined(__OS2__) || defined (__os2__)) && (defined(__I386__) || defined (__i386__) || defined (__THW_INTEL) || defined (_M_IX86))
+
+#define INCL_DOSMISC
+#include
+
+
+#endif
diff --git a/setter/os2_32.lk1 b/setter/os2_32.lk1
new file mode 100644
index 0000000..d10dc18
--- /dev/null
+++ b/setter/os2_32.lk1
@@ -0,0 +1,2 @@
+FIL common.obj,main.obj,os2.obj,os2_32.obj
+
diff --git a/setter/os2_32.mk b/setter/os2_32.mk
new file mode 100644
index 0000000..d4dfcc2
--- /dev/null
+++ b/setter/os2_32.mk
@@ -0,0 +1,3 @@
+project : C:\dic\os2_32.exe .SYMBOLIC
+
+!include C:\dic\os2_32.mk1
diff --git a/setter/os2_32.mk1 b/setter/os2_32.mk1
new file mode 100644
index 0000000..2637ab0
--- /dev/null
+++ b/setter/os2_32.mk1
@@ -0,0 +1,40 @@
+!define BLANK ""
+C:\dic\common.obj : C:\dic\common.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc386 common.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3r &
+-bt=os2 -fo=.obj -mf
+
+C:\dic\main.obj : C:\dic\main.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc386 main.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3r -b&
+t=os2 -fo=.obj -mf
+
+C:\dic\os2.obj : C:\dic\os2.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc386 os2.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3r -bt&
+=os2 -fo=.obj -mf
+
+C:\dic\os2_32.obj : C:\dic\os2_32.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc386 os2_32.c -i="C:\WATCOM/h;C:\WATCOM/h/os2" -w4 -e25 -zq -od -d2 -3r &
+-bt=os2 -fo=.obj -mf
+
+C:\dic\os2_32.exe : C:\dic\common.obj C:\dic\main.obj C:\dic\os2.obj C:\dic\&
+os2_32.obj C:\dic\defs.h C:\dic\main.h .AUTODEPEND
+ @C:
+ cd C:\dic
+ @%write os2_32.lk1 FIL common.obj,main.obj,os2.obj,os2_32.obj
+ @%append os2_32.lk1
+!ifneq BLANK ""
+ *wlib -q -n -b os2_32.imp
+ @%append os2_32.lk1 LIBR os2_32.imp
+!endif
+ *wlink name os2_32 d all SYS os2v2 op m op maxe=25 op q op symf @os2_32.lk1
+!ifneq BLANK ""
+ rc -i $[: -i C:\WATCOM\h -i C:\WATCOM\h\os2 os2_32.exe
+!endif
+
diff --git a/setter/os2_32.tgt b/setter/os2_32.tgt
new file mode 100644
index 0000000..0e1e684
--- /dev/null
+++ b/setter/os2_32.tgt
@@ -0,0 +1,213 @@
+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
+10
+os2_32.exe
+7
+WString
+4
+OEXE
+8
+WVList
+0
+9
+WVList
+0
+-1
+1
+1
+0
+10
+WPickList
+8
+11
+MItem
+3
+*.c
+12
+WString
+4
+COBJ
+13
+WVList
+2
+14
+MRState
+15
+WString
+3
+WCC
+16
+WString
+33
+??2??80386 Register based calling
+1
+1
+17
+MRState
+18
+WString
+3
+WCC
+19
+WString
+39
+??2??Pentium Pro Register based calling
+1
+0
+20
+WVList
+0
+-1
+1
+1
+0
+21
+MItem
+8
+common.c
+22
+WString
+4
+COBJ
+23
+WVList
+0
+24
+WVList
+0
+11
+1
+1
+0
+25
+MItem
+6
+main.c
+26
+WString
+4
+COBJ
+27
+WVList
+0
+28
+WVList
+0
+11
+1
+1
+0
+29
+MItem
+5
+os2.c
+30
+WString
+4
+COBJ
+31
+WVList
+0
+32
+WVList
+0
+11
+1
+1
+0
+33
+MItem
+8
+os2_32.c
+34
+WString
+4
+COBJ
+35
+WVList
+0
+36
+WVList
+0
+11
+1
+1
+0
+37
+MItem
+3
+*.h
+38
+WString
+3
+NIL
+39
+WVList
+0
+40
+WVList
+0
+-1
+1
+1
+0
+41
+MItem
+6
+defs.h
+42
+WString
+3
+NIL
+43
+WVList
+0
+44
+WVList
+0
+37
+1
+1
+0
+45
+MItem
+6
+main.h
+46
+WString
+3
+NIL
+47
+WVList
+0
+48
+WVList
+0
+37
+1
+1
+0
diff --git a/setter/os2_32.wpj b/setter/os2_32.wpj
new file mode 100644
index 0000000..55da0fd
--- /dev/null
+++ b/setter/os2_32.wpj
@@ -0,0 +1,43 @@
+40
+projectIdent
+0
+VpeMain
+1
+WRect
+1504
+1490
+7680
+9210
+2
+MProject
+3
+MCommand
+0
+4
+MCommand
+0
+1
+5
+WFileName
+10
+os2_32.tgt
+6
+WVList
+1
+7
+VComponent
+8
+WRect
+440
+440
+5712
+4330
+0
+0
+9
+WFileName
+10
+os2_32.tgt
+0
+0
+7
diff --git a/setter/unix.c b/setter/unix.c
new file mode 100644
index 0000000..7fcd520
--- /dev/null
+++ b/setter/unix.c
@@ -0,0 +1,4 @@
+//
+// Created by claunia on 11/01/18.
+//
+
diff --git a/setter/win32.c b/setter/win32.c
new file mode 100644
index 0000000..70a1fab
--- /dev/null
+++ b/setter/win32.c
@@ -0,0 +1,106 @@
+/****************************************************************************
+The Disc Image Chef
+-----------------------------------------------------------------------------
+
+Filename : win32.c
+Author(s) : Natalia Portillo
+
+Component : fstester.setter.os2
+
+--[ Description ] -----------------------------------------------------------
+
+Contains 32-bit and 64-bit Windows code
+
+--[ 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 .
+
+-----------------------------------------------------------------------------
+Copyright (C) 2011-2018 Natalia Portillo
+*****************************************************************************/
+
+#if defined(__WINDOWS__) || defined (__TOS_WIN__) || defined (__WIN32__) || defined (_WIN64) || defined (_WIN32) || defined (__NT__)
+
+#include
+#include
+#include
+#include
+
+#include "defs.h"
+#include "consts.h"
+
+void GetOsInfo()
+{
+ // TODO: Implement
+}
+
+void GetVolumeInfo(const char *path, size_t *clusterSize)
+{
+ // TODO: Implement
+}
+
+void FileAttributes(const char *path)
+{
+ // TODO: Implement
+}
+
+void FilePermissions(const char *path)
+{
+ /* Do nothing, not supported by target operating system */
+}
+
+void ExtendedAttributes(const char *path)
+{
+ // TODO: Implement
+}
+
+void ResourceFork(const char *path)
+{
+ // TODO: Implement with ADS
+}
+
+void Filenames(const char *path)
+{
+ // TODO: Implement
+}
+
+void Timestamps(const char *path)
+{
+ // TODO: Implement
+}
+
+void DirectoryDepth(const char *path)
+{
+ // TODO: Implement
+}
+
+void Fragmentation(const char *path, size_t clusterSize)
+{
+ // TODO: Implement
+}
+
+void Sparse(const char *path)
+{
+ // TODO: Implement
+}
+
+void MillionFiles(const char *path)
+{
+ // TODO: Implement
+}
+
+void DeleteFiles(const char *path)
+{
+ // TODO: Implement
+}
+#endif
diff --git a/setter/win32.lk1 b/setter/win32.lk1
new file mode 100644
index 0000000..2195538
--- /dev/null
+++ b/setter/win32.lk1
@@ -0,0 +1,2 @@
+FIL main.obj,win32.obj
+
diff --git a/setter/win32.mk b/setter/win32.mk
new file mode 100644
index 0000000..0a81edc
--- /dev/null
+++ b/setter/win32.mk
@@ -0,0 +1,3 @@
+project : C:\dic\win32.exe .SYMBOLIC
+
+!include C:\dic\win32.mk1
diff --git a/setter/win32.mk1 b/setter/win32.mk1
new file mode 100644
index 0000000..60119c0
--- /dev/null
+++ b/setter/win32.mk1
@@ -0,0 +1,28 @@
+!define BLANK ""
+C:\dic\main.obj : C:\dic\main.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc386 main.c -i="C:\WATCOM/h;C:\WATCOM/h/nt" -w4 -e25 -zq -od -d2 -3r -bt&
+=nt -fo=.obj -mf
+
+C:\dic\win32.obj : C:\dic\win32.c .AUTODEPEND
+ @C:
+ cd C:\dic
+ *wcc386 win32.c -i="C:\WATCOM/h;C:\WATCOM/h/nt" -w4 -e25 -zq -od -d2 -3r -b&
+t=nt -fo=.obj -mf
+
+C:\dic\win32.exe : C:\dic\main.obj C:\dic\win32.obj C:\dic\consts.h C:\dic\d&
+efs.h C:\dic\main.h .AUTODEPEND
+ @C:
+ cd C:\dic
+ @%write win32.lk1 FIL main.obj,win32.obj
+ @%append win32.lk1
+!ifneq BLANK ""
+ *wlib -q -n -b win32.imp
+ @%append win32.lk1 LIBR win32.imp
+!endif
+!ifneq BLANK ""
+ @%append win32.lk1 op resource=
+!endif
+ *wlink name win32 d all SYS nt op m op maxe=25 op q op symf @win32.lk1
+
diff --git a/setter/win32.tgt b/setter/win32.tgt
new file mode 100644
index 0000000..a00673f
--- /dev/null
+++ b/setter/win32.tgt
@@ -0,0 +1,195 @@
+40
+targetIdent
+0
+MProject
+1
+MComponent
+0
+2
+WString
+4
+NEXE
+3
+WString
+5
+nc2eo
+1
+0
+1
+4
+MCommand
+0
+5
+MCommand
+0
+6
+MItem
+9
+win32.exe
+7
+WString
+4
+NEXE
+8
+WVList
+0
+9
+WVList
+0
+-1
+1
+1
+0
+10
+WPickList
+7
+11
+MItem
+3
+*.c
+12
+WString
+4
+COBJ
+13
+WVList
+2
+14
+MRState
+15
+WString
+3
+WCC
+16
+WString
+33
+??2??80386 Register based calling
+1
+1
+17
+MRState
+18
+WString
+3
+WCC
+19
+WString
+39
+??2??Pentium Pro Register based calling
+1
+0
+20
+WVList
+0
+-1
+1
+1
+0
+21
+MItem
+6
+main.c
+22
+WString
+4
+COBJ
+23
+WVList
+0
+24
+WVList
+0
+11
+1
+1
+0
+25
+MItem
+7
+win32.c
+26
+WString
+4
+COBJ
+27
+WVList
+0
+28
+WVList
+0
+11
+1
+1
+0
+29
+MItem
+3
+*.h
+30
+WString
+3
+NIL
+31
+WVList
+0
+32
+WVList
+0
+-1
+1
+1
+0
+33
+MItem
+8
+consts.h
+34
+WString
+3
+NIL
+35
+WVList
+0
+36
+WVList
+0
+29
+1
+1
+0
+37
+MItem
+6
+defs.h
+38
+WString
+3
+NIL
+39
+WVList
+0
+40
+WVList
+0
+29
+1
+1
+0
+41
+MItem
+6
+main.h
+42
+WString
+3
+NIL
+43
+WVList
+0
+44
+WVList
+0
+29
+1
+1
+0
diff --git a/setter/win32.wpj b/setter/win32.wpj
new file mode 100644
index 0000000..4739264
--- /dev/null
+++ b/setter/win32.wpj
@@ -0,0 +1,43 @@
+40
+projectIdent
+0
+VpeMain
+1
+WRect
+1504
+1490
+7680
+9220
+2
+MProject
+3
+MCommand
+0
+4
+MCommand
+0
+1
+5
+WFileName
+9
+win32.tgt
+6
+WVList
+1
+7
+VComponent
+8
+WRect
+216
+220
+5712
+4330
+0
+0
+9
+WFileName
+9
+win32.tgt
+0
+2
+7