From 5f4b9655a55dd1678fcb930d04953efa3be345e8 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 11 Jan 2018 17:53:37 +0000 Subject: [PATCH] Add 16-bit OS/2 code to create test volumes. Signed-off-by: Natalia Portillo --- setter/.idea/codeStyles/Project.xml | 29 + setter/.idea/misc.xml | 4 + setter/.idea/vcs.xml | 6 + setter/cmakelists.txt | 6 + setter/consts.h | 58 ++ setter/defs.h | 52 + setter/dos.c | 111 ++ setter/dos.lk1 | 2 + setter/dos.mk | 3 + setter/dos.mk1 | 24 + setter/dos.tgt | 207 ++++ setter/dos.wpj | 43 + setter/dosos2.h | 46 + setter/main.c | 71 ++ setter/main.h | 157 +++ setter/os2.c | 38 + setter/os2_16.c | 1449 +++++++++++++++++++++++++++ setter/os2_16.h | 302 ++++++ setter/os2_16.lk1 | 2 + setter/os2_16.mk | 3 + setter/os2_16.mk1 | 36 + setter/os2_16.tgt | 241 +++++ setter/os2_16.wpj | 43 + setter/os2_32.c | 114 +++ setter/os2_32.h | 38 + setter/os2_32.lk1 | 2 + setter/os2_32.mk | 3 + setter/os2_32.mk1 | 40 + setter/os2_32.tgt | 213 ++++ setter/os2_32.wpj | 43 + setter/unix.c | 4 + setter/win32.c | 106 ++ setter/win32.lk1 | 2 + setter/win32.mk | 3 + setter/win32.mk1 | 28 + setter/win32.tgt | 195 ++++ setter/win32.wpj | 43 + 37 files changed, 3767 insertions(+) create mode 100644 setter/.idea/codeStyles/Project.xml create mode 100644 setter/.idea/misc.xml create mode 100644 setter/.idea/vcs.xml create mode 100644 setter/cmakelists.txt create mode 100644 setter/consts.h create mode 100644 setter/defs.h create mode 100644 setter/dos.c create mode 100644 setter/dos.lk1 create mode 100644 setter/dos.mk create mode 100644 setter/dos.mk1 create mode 100644 setter/dos.tgt create mode 100644 setter/dos.wpj create mode 100644 setter/dosos2.h create mode 100644 setter/main.c create mode 100644 setter/main.h create mode 100644 setter/os2.c create mode 100644 setter/os2_16.c create mode 100644 setter/os2_16.h create mode 100644 setter/os2_16.lk1 create mode 100644 setter/os2_16.mk create mode 100644 setter/os2_16.mk1 create mode 100644 setter/os2_16.tgt create mode 100644 setter/os2_16.wpj create mode 100644 setter/os2_32.c create mode 100644 setter/os2_32.h create mode 100644 setter/os2_32.lk1 create mode 100644 setter/os2_32.mk create mode 100644 setter/os2_32.mk1 create mode 100644 setter/os2_32.tgt create mode 100644 setter/os2_32.wpj create mode 100644 setter/unix.c create mode 100644 setter/win32.c create mode 100644 setter/win32.lk1 create mode 100644 setter/win32.mk create mode 100644 setter/win32.mk1 create mode 100644 setter/win32.tgt create mode 100644 setter/win32.wpj 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