From 852cf1bb1715a14d12704f97b46d5c23bb728428 Mon Sep 17 00:00:00 2001 From: Tiberiu Chibici Date: Tue, 14 Sep 2021 18:52:47 +0300 Subject: [PATCH] [GOOD] BUILD 0.1.0.590 DATE 9/05/2011 AT 2:40 PM ==================================================== Mainly changed: FS.Initrd + (kind of) refractored VFS, bugfixed + Rewrote 'initrd' file system, fixed many problems + Working 'cat' and 'dir' console commands + Wrote 'initrd' image write application (for windows), however it may be bugged --- Kernel/debug/commands.c | 51 ++-- Kernel/hal/cpu/irq-asm.asm | 64 ++--- Kernel/hal/cpu/isrs-asm.asm | 116 ++++---- Kernel/hal/filesys/fat/fat.c | 3 + Kernel/hal/filesys/fat/fat.h | 2 + Kernel/hal/filesys/fat/fat12.c | 2 + Kernel/hal/filesys/fat/fat16.c | 3 +- Kernel/hal/filesys/fat/fat32.c | 2 + Kernel/hal/filesys/initrd/initrd.c | 271 +++++++++--------- Kernel/hal/filesys/initrd/initrd.h | 41 +-- Kernel/hal/hal.c | 4 +- Kernel/hal/vfs.c | 257 +++++++++-------- Kernel/include/array.h | 54 ++++ Kernel/include/fileio.h | 72 +++-- Kernel/include/memory-add.h | 1 + Kernel/include/stdlib.h | 25 +- Kernel/include/version.h | 2 +- Kernel/library/array/dynamic_arr.c | 103 +++++++ Kernel/library/{stdlib => array}/ord_arr.c | 1 + Kernel/library/stdlib/str_ops.c | 15 + Kernel/memory/mem-paging.c~ | 75 ----- Kernel/memory/mem-phys.c~ | 109 ------- Modules/Rom image maker/.dep.inc | 5 + Modules/Rom image maker/Makefile | 128 +++++++++ .../build/Debug/MinGW-Windows/commands.o | Bin 0 -> 173726 bytes .../build/Debug/MinGW-Windows/commands.o.d | 5 + .../build/Debug/MinGW-Windows/info.o | Bin 0 -> 10405 bytes .../build/Debug/MinGW-Windows/info.o.d | 5 + .../build/Debug/MinGW-Windows/main.o | Bin 0 -> 12622 bytes .../build/Debug/MinGW-Windows/main.o.d | 3 + Modules/Rom image maker/commands.cpp | 246 ++++++++++++++++ .../Debug/MinGW-Windows/ramdiskwriter.exe | Bin 0 -> 236087 bytes Modules/Rom image maker/info.cpp | 70 +++++ Modules/Rom image maker/info.h | 20 ++ .../Rom image maker/initrd maker language.txt | 14 + Modules/Rom image maker/main.cpp | 131 +++++++++ Modules/Rom image maker/myram.sys | Bin 0 -> 13831 bytes .../nbproject/Makefile-Debug.mk | 94 ++++++ .../nbproject/Makefile-Release.mk | 94 ++++++ .../nbproject/Makefile-impl.mk | 133 +++++++++ .../nbproject/Makefile-variables.mk | 24 ++ .../nbproject/Package-Debug.bash | 74 +++++ .../nbproject/Package-Release.bash | 74 +++++ .../nbproject/configurations.xml | 70 +++++ .../nbproject/private/configurations.xml | 37 +++ .../nbproject/private/private.properties | 0 .../nbproject/private/private.xml | 4 + .../nbproject/project.properties | 0 Modules/Rom image maker/nbproject/project.xml | 20 ++ Modules/Rom image maker/sample.txt | 16 ++ Modules/Rom image maker/types.h | 41 +++ Modules/initrd maker language.txt | 14 + Modules/initrd.lux | Bin 0 -> 13831 bytes build/console.o | Bin 11224 -> 11292 bytes build/dynamic_arr.o | Bin 0 -> 1848 bytes build/fat.o | Bin 1756 -> 547 bytes build/fat12.o | Bin 1000 -> 549 bytes build/fat16.o | Bin 1000 -> 549 bytes build/fat32.o | Bin 1000 -> 549 bytes build/hal.o | Bin 2180 -> 2136 bytes build/initrd.o | Bin 3556 -> 3000 bytes build/irq-asm.o | Bin 1072 -> 1168 bytes build/isrs-asm.o | Bin 1920 -> 2096 bytes build/str_ops.o | Bin 1552 -> 1744 bytes build/vfs.o | Bin 4584 -> 5140 bytes change.log | 11 +- filelistC.txt | 27 +- kernel.bin | Bin 62513 -> 62598 bytes luxos.img | Bin 0 -> 1474560 bytes scripts/build.bat | 3 +- scripts/version.txt | 2 +- 71 files changed, 1979 insertions(+), 659 deletions(-) create mode 100644 Kernel/include/array.h create mode 100644 Kernel/library/array/dynamic_arr.c rename Kernel/library/{stdlib => array}/ord_arr.c (99%) delete mode 100644 Kernel/memory/mem-paging.c~ delete mode 100644 Kernel/memory/mem-phys.c~ create mode 100644 Modules/Rom image maker/.dep.inc create mode 100644 Modules/Rom image maker/Makefile create mode 100644 Modules/Rom image maker/build/Debug/MinGW-Windows/commands.o create mode 100644 Modules/Rom image maker/build/Debug/MinGW-Windows/commands.o.d create mode 100644 Modules/Rom image maker/build/Debug/MinGW-Windows/info.o create mode 100644 Modules/Rom image maker/build/Debug/MinGW-Windows/info.o.d create mode 100644 Modules/Rom image maker/build/Debug/MinGW-Windows/main.o create mode 100644 Modules/Rom image maker/build/Debug/MinGW-Windows/main.o.d create mode 100644 Modules/Rom image maker/commands.cpp create mode 100644 Modules/Rom image maker/dist/Debug/MinGW-Windows/ramdiskwriter.exe create mode 100644 Modules/Rom image maker/info.cpp create mode 100644 Modules/Rom image maker/info.h create mode 100644 Modules/Rom image maker/initrd maker language.txt create mode 100644 Modules/Rom image maker/main.cpp create mode 100644 Modules/Rom image maker/myram.sys create mode 100644 Modules/Rom image maker/nbproject/Makefile-Debug.mk create mode 100644 Modules/Rom image maker/nbproject/Makefile-Release.mk create mode 100644 Modules/Rom image maker/nbproject/Makefile-impl.mk create mode 100644 Modules/Rom image maker/nbproject/Makefile-variables.mk create mode 100644 Modules/Rom image maker/nbproject/Package-Debug.bash create mode 100644 Modules/Rom image maker/nbproject/Package-Release.bash create mode 100644 Modules/Rom image maker/nbproject/configurations.xml create mode 100644 Modules/Rom image maker/nbproject/private/configurations.xml create mode 100644 Modules/Rom image maker/nbproject/private/private.properties create mode 100644 Modules/Rom image maker/nbproject/private/private.xml create mode 100644 Modules/Rom image maker/nbproject/project.properties create mode 100644 Modules/Rom image maker/nbproject/project.xml create mode 100644 Modules/Rom image maker/sample.txt create mode 100644 Modules/Rom image maker/types.h create mode 100644 Modules/initrd maker language.txt create mode 100644 Modules/initrd.lux create mode 100644 build/dynamic_arr.o create mode 100644 luxos.img diff --git a/Kernel/debug/commands.c b/Kernel/debug/commands.c index 2782440..3b9abe6 100644 --- a/Kernel/debug/commands.c +++ b/Kernel/debug/commands.c @@ -258,41 +258,45 @@ void CommandRead(string argv[], int32 argc) } -extern MountPoint* mpArray; -extern uint32 mpCount; void CommandDir (string argv[], int32 argc) { - if (argc < 2) - { + // No parameters? Display root content + if (argc < 2) { ConsoleWrite ("Content of root: \n\n"); uint32 i = 0; + MountPoint* mp = VfsGetMountPoint(0); - for (i = 0; i < mpCount; i++) - ConsoleWrite ("\t\t[DEV] %s\n", mpArray[i].Name); + for (i = 1; mp != NULL; i++) + { + ConsoleWrite ("\t[DEV] %s\n", mp->Name); + mp = VfsGetMountPoint(i); + } return; } + // Make sure directory exists DirectoryEntry* temp = VfsTest(argv[1]); - if (temp == NULL) - { - ConsoleWrite("%#! Invalid path!\n", ColorLightRed); - return; + if (temp == NULL) { + ConsoleWrite("%#! Invalid path!\n", ColorLightRed); return; } + // Write contents ConsoleWrite ("Content of directory %#%s:\n\n", ColorWhite, argv[1]); FILE dir; VfsOpen(&dir, argv[1]); uint32 i; temp = VfsReadDirectory(&dir,0); - for (i = 1; temp != NULL; i++, temp = VfsReadDirectory(&dir, 0)) + for (i = 1; temp != NULL; i++) { - ConsoleWrite ("\t\t[%s] ", (temp->Flags & 0x1) ? "FIL" : "DIR" ); + ConsoleWrite ("\t[%s] ", (temp->Flags & 0x1) ? "FIL" : "DIR" ); ConsoleWrite ("%s", temp->Name); Point p = {60, -1}; ConsoleCursorGoto(p); ConsoleWrite ("%u bytes\n", temp->Size); + + temp = VfsReadDirectory(&dir, i); } VfsClose(&dir); @@ -305,18 +309,25 @@ void CommandCat (string argv[], int32 argc) return; } - ConsoleWrite("Contents of file %s:\n--------------------------\n"); FILE f; - VfsOpen(&f, argv[1]); - uint8* buffer = kmalloc(0x1000); - uint32 sz, i; - while ((sz = VfsRead(&f, 1, 0x1000, buffer))) - { - for (i = 0; i < sz; i++) ConsoleWrite("%c", buffer[i]); + // Try to open + if (!VfsOpen(&f, argv[1])) { + ConsoleWrite ("%#! Invalid file: %s\n.", ColorLightRed, argv[1]); + return; } - ConsoleWrite("\n--------------------------\n"); + uint8* buffer = kmalloc(0x100); + uint32 sz, i; + + ConsoleWrite("----[%s]------\n", argv[1]); + + while ((sz = VfsRead(&f, 1, 0x100, buffer))) + { + for (i = 0; i < sz; i++) ConsoleWrite("%#%c", ColorLightGray, buffer[i]); + } + + ConsoleWrite("\n------------[EOF]------------\n"); kfree(buffer); VfsClose(&f); } diff --git a/Kernel/hal/cpu/irq-asm.asm b/Kernel/hal/cpu/irq-asm.asm index b63337e..a88164c 100644 --- a/Kernel/hal/cpu/irq-asm.asm +++ b/Kernel/hal/cpu/irq-asm.asm @@ -21,113 +21,113 @@ global Irq_15 ; 32: IRQ0 Irq_0: cli - push byte 0 - push byte 32; Note that these don't push an error code on the stack: + push dword 0 + push dword 32; Note that these don't push an error code on the stack: ; We need to push a dummy error code jmp irq_common_stub ; 33: IRQ1 Irq_1: cli - push byte 0 - push byte 33 + push dword 0 + push dword 33 jmp irq_common_stub ; 34: IRQ2 Irq_2: cli - push byte 0 - push byte 34 + push dword 0 + push dword 34 jmp irq_common_stub ; 35: IRQ3 Irq_3: cli - push byte 0 - push byte 35 + push dword 0 + push dword 35 jmp irq_common_stub ; 36: IRQ4 Irq_4: cli - push byte 0 - push byte 36 + push dword 0 + push dword 36 jmp irq_common_stub ; 37: IRQ5 Irq_5: cli - push byte 0 - push byte 37 + push dword 0 + push dword 37 jmp irq_common_stub ; 38: IRQ6 Irq_6: cli - push byte 0 - push byte 38 + push dword 0 + push dword 38 jmp irq_common_stub ; 39: IRQ7 Irq_7: cli - push byte 0 - push byte 39 + push dword 0 + push dword 39 jmp irq_common_stub ; 40: IRQ8 Irq_8: cli - push byte 0 - push byte 40 + push dword 0 + push dword 40 jmp irq_common_stub ; 41: IRQ9 Irq_9: cli - push byte 0 - push byte 41 + push dword 0 + push dword 41 jmp irq_common_stub ; 42: IRQ10 Irq_10: cli - push byte 0 - push byte 42 + push dword 0 + push dword 42 jmp irq_common_stub ; 43: IRQ11 Irq_11: cli - push byte 0 - push byte 43 + push dword 0 + push dword 43 jmp irq_common_stub ; 44: IRQ12 Irq_12: cli - push byte 0 - push byte 44 + push dword 0 + push dword 44 jmp irq_common_stub ; 45: IRQ13 Irq_13: cli - push byte 0 - push byte 45 + push dword 0 + push dword 45 jmp irq_common_stub ; 46: IRQ14 Irq_14: cli - push byte 0 - push byte 46 + push dword 0 + push dword 46 jmp irq_common_stub ; 47: IRQ15 Irq_15: cli - push byte 0 - push byte 47 + push dword 0 + push dword 47 jmp irq_common_stub extern IrqHandler diff --git a/Kernel/hal/cpu/isrs-asm.asm b/Kernel/hal/cpu/isrs-asm.asm index b96ab5d..1f1ce04 100644 --- a/Kernel/hal/cpu/isrs-asm.asm +++ b/Kernel/hal/cpu/isrs-asm.asm @@ -36,158 +36,158 @@ global isr_exception_31 isr_exception_0: cli - push byte 0; A normal ISR stub that pops a dummy error code to keep a + push dword 0; A normal ISR stub that pops a dummy error code to keep a ; uniform stack frame - push byte 0 + push dword 0 jmp isr_common_stub isr_exception_1: cli - push byte 0 - push byte 1 + push dword 0 + push dword 1 jmp isr_common_stub isr_exception_2: cli - push byte 0 - push byte 2 + push dword 0 + push dword 2 jmp isr_common_stub isr_exception_3: cli - push byte 0 - push byte 3 + push dword 0 + push dword 3 jmp isr_common_stub isr_exception_4: cli - push byte 0 - push byte 4 + push dword 0 + push dword 4 jmp isr_common_stub isr_exception_5: cli - push byte 0 - push byte 5 + push dword 0 + push dword 5 jmp isr_common_stub isr_exception_6: cli - push byte 0 - push byte 6 + push dword 0 + push dword 6 jmp isr_common_stub isr_exception_7: cli - push byte 0 - push byte 7 + push dword 0 + push dword 7 jmp isr_common_stub isr_exception_8: cli - push byte 8 + push dword 8 jmp isr_common_stub isr_exception_9: cli - push byte 0 - push byte 9 + push dword 0 + push dword 9 jmp isr_common_stub isr_exception_10: cli - push byte 10 + push dword 10 jmp isr_common_stub isr_exception_11: cli - push byte 11 + push dword 11 jmp isr_common_stub isr_exception_12: cli - push byte 12 + push dword 12 jmp isr_common_stub isr_exception_13: cli - push byte 13 + push dword 13 jmp isr_common_stub isr_exception_14: cli - push byte 14 + push dword 14 jmp isr_common_stub isr_exception_15: cli - push byte 0 - push byte 15 + push dword 0 + push dword 15 jmp isr_common_stub isr_exception_16: cli - push byte 0 - push byte 16 + push dword 0 + push dword 16 jmp isr_common_stub isr_exception_17: cli - push byte 0 - push byte 17 + push dword 0 + push dword 17 jmp isr_common_stub isr_exception_18: cli - push byte 0 - push byte 18 + push dword 0 + push dword 18 jmp isr_common_stub isr_exception_19: cli - push byte 0 - push byte 19 + push dword 0 + push dword 19 jmp isr_common_stub isr_exception_20: cli - push byte 0 - push byte 20 + push dword 0 + push dword 20 jmp isr_common_stub isr_exception_21: cli - push byte 0 - push byte 21 + push dword 0 + push dword 21 jmp isr_common_stub isr_exception_22: cli - push byte 0 - push byte 22 + push dword 0 + push dword 22 jmp isr_common_stub isr_exception_23: cli - push byte 0 - push byte 23 + push dword 0 + push dword 23 jmp isr_common_stub isr_exception_24: cli - push byte 0 - push byte 24 + push dword 0 + push dword 24 jmp isr_common_stub isr_exception_25: cli - push byte 0 - push byte 25 + push dword 0 + push dword 25 jmp isr_common_stub isr_exception_26: cli - push byte 0 - push byte 26 + push dword 0 + push dword 26 jmp isr_common_stub isr_exception_27: cli - push byte 0 - push byte 27 + push dword 0 + push dword 27 jmp isr_common_stub isr_exception_28: cli - push byte 0 - push byte 28 + push dword 0 + push dword 28 jmp isr_common_stub isr_exception_29: cli - push byte 0 - push byte 29 + push dword 0 + push dword 29 jmp isr_common_stub isr_exception_30: cli - push byte 0 - push byte 30 + push dword 0 + push dword 30 jmp isr_common_stub isr_exception_31: cli - push byte 0 - push byte 31 + push dword 0 + push dword 31 jmp isr_common_stub extern IsrsFaultHandler diff --git a/Kernel/hal/filesys/fat/fat.c b/Kernel/hal/filesys/fat/fat.c index 8961ae6..bc84cb1 100644 --- a/Kernel/hal/filesys/fat/fat.c +++ b/Kernel/hal/filesys/fat/fat.c @@ -5,6 +5,7 @@ * Author: Tiberiu */ +#if NEVER #include #include #include "fat.h" @@ -78,3 +79,5 @@ void FatInstall() VfsInstallFs(&fat12); VfsInstallFs(&fat16); VfsInstallFs(&fat32); } + +#endif diff --git a/Kernel/hal/filesys/fat/fat.h b/Kernel/hal/filesys/fat/fat.h index 0a9d3af..e790966 100644 --- a/Kernel/hal/filesys/fat/fat.h +++ b/Kernel/hal/filesys/fat/fat.h @@ -5,6 +5,7 @@ * Author: Tiberiu */ +#ifdef NEVER #ifndef FAT_H_ #define FAT_H_ @@ -133,3 +134,4 @@ extern uint32 Fat16Detect (DevReadRoutine r, uint32 blocksz); extern uint32 Fat32Detect (DevReadRoutine r, uint32 blocksz); #endif /* FAT_H_ */ +#endif diff --git a/Kernel/hal/filesys/fat/fat12.c b/Kernel/hal/filesys/fat/fat12.c index 83ebbd5..9ced36e 100644 --- a/Kernel/hal/filesys/fat/fat12.c +++ b/Kernel/hal/filesys/fat/fat12.c @@ -4,6 +4,7 @@ * Created on: Aug 29, 2011 * Author: Tiberiu */ +#if NEVER #include #include #include "fat.h" @@ -23,3 +24,4 @@ uint32 Fat12Detect (DevReadRoutine r, uint32 blocksz) kfree(buffer); return (res == 12); } +#endif diff --git a/Kernel/hal/filesys/fat/fat16.c b/Kernel/hal/filesys/fat/fat16.c index 8db1269..eae823e 100644 --- a/Kernel/hal/filesys/fat/fat16.c +++ b/Kernel/hal/filesys/fat/fat16.c @@ -4,6 +4,7 @@ * Created on: Aug 31, 2011 * Author: Tiberiu */ +#ifdef NEVER #include #include #include "fat.h" @@ -23,4 +24,4 @@ uint32 Fat16Detect (DevReadRoutine r, uint32 blocksz) kfree(buffer); return (res == 16); } - +#endif diff --git a/Kernel/hal/filesys/fat/fat32.c b/Kernel/hal/filesys/fat/fat32.c index 3350cba..6c4130b 100644 --- a/Kernel/hal/filesys/fat/fat32.c +++ b/Kernel/hal/filesys/fat/fat32.c @@ -4,6 +4,7 @@ * Created on: Aug 31, 2011 * Author: Tiberiu */ +#if NEVER #include #include #include "fat.h" @@ -24,3 +25,4 @@ uint32 Fat32Detect (DevReadRoutine r, uint32 blocksz) return (res == 32); } +#endif diff --git a/Kernel/hal/filesys/initrd/initrd.c b/Kernel/hal/filesys/initrd/initrd.c index ac1da20..1c7fbd2 100644 --- a/Kernel/hal/filesys/initrd/initrd.c +++ b/Kernel/hal/filesys/initrd/initrd.c @@ -16,124 +16,76 @@ #include "initrd.h" -luxDEVICE *luxDevices; -uint32 luxDeviceCount; - -luxFILE *luxFiles; -uint32 luxFileCount; -uint32 luxFilesAllocated; - - /************************************** * DEVICE 'FAKE' READ ROUTINE * **************************************/ -uint32 luxDevRead (uint32 UNUSED(offset), void* UNUSED(buffer)) +uint32 luxInitrdDevRead (uint32 UNUSED(offset), void* UNUSED(buffer)) { return LUXMAGIC; } -/************************************** - * INITIALIZATION ROUTINE * - **************************************/ -void luxInitrdInstall (MultibootInfo* info) -{ - // Install filesystem - FileSystem fs = {0, "luxinitrd", luxDetect, 0, 0, - luxOpen, luxClose, luxRead, 0, luxTest, luxReadDir}; - - VfsInstallFs(&fs); - - - // See what modules are loaded in the multiboot info - if ((info->Flags & 8) == 0 || info->ModulesCount == 0) return; // nothing was loaded - - uint32 i; - MultibootModule* modules = (MultibootModule*) info->ModulesAddress; - luxDevices = kmalloc(sizeof(luxDEVICE) * info->ModulesCount); - luxDeviceCount = 0; - - for (i = 0; i < info->ModulesCount; i++) { - - // Check magic number, to make sure module is a initrd image - luxHeader* head = (luxHeader*) modules[i].ModuleStart; - if (head->Magic != LUXMAGIC) { - Log("Initrd", "Magic = 0x%x [bad] ModuleStart = 0x%x\n", head->Magic, modules[i].ModuleStart); - continue; - } - - // Set up entry - luxDevices[luxDeviceCount].Data = (void*) modules[i].ModuleStart; - luxDevices[luxDeviceCount].Size = modules[i].ModuleEnd - modules[i].ModuleStart; - - // Register virtual device. Instead of blocksize, we give the dev no, so we can identify it later - VfsMount("initrd", luxDevRead, 0, luxDeviceCount); - ++luxDeviceCount; - } - -} - /************************************** * OTHER USEFUL ROUTINES * **************************************/ -uint32 luxGetFileSlot() -{ - // Find an empty slot - uint32 i = 0; - for (i = 0; i < luxFileCount; i++) - if (luxFiles[i].Id == 0xffffffff) return i; - - // Nothing found? Allocate more slots if necessary - if (luxFileCount >= luxFilesAllocated) - { - luxFilesAllocated += 4; - luxFiles = kmrealloc(luxFiles, luxFilesAllocated); - } - - // Give last slot - ++luxFileCount; - return (luxFileCount-1); -} - // Navigates and returns the directory entry that contains the file/folder -luxDirectoryEntry* luxGetFile (string path, uint32 dev) +luxDirectoryEntry rootDirectoryEntry; +luxDirectoryEntry* luxGetFile (string path, uint32 data) { - luxHeader* root = (luxHeader*) luxDevices[dev].Data; - luxDirectory* current = root->Root; - luxDirectoryEntry rt = {"root", 0xB68, 0, 0, 0, {0,0}, {0,0}, {0,0}, (uint32)&root->Root}; + luxHeader* head = (luxHeader*)data; + uint32 end = strlen(path); + uint32 start, next = 0; + char* tmp; - if (path[0] != '\\') - return &rt; + // Remove ending '/' (if any) + if (path[end-1] == '/') --end; - path = path + 1; + // Empty string? Return the root + if (end == 0) { + rootDirectoryEntry.De.Flags = 0xB68; // read & execute only + rootDirectoryEntry.De.GroupId = 0; // system group + rootDirectoryEntry.De.OwnerId = 0; // system owner + rootDirectoryEntry.De.Size = sizeof(uint32) + head->RootSize * sizeof(luxDirectoryEntry); + rootDirectoryEntry.Offset = (uint32)(&head->RootSize) - data; // calculate offset - - while (path) - { - // Trim the next path separator - string tmp = strchr(path, '\\'); - if (tmp) { - *tmp = 0; tmp = tmp + 1; - if (!*tmp) tmp = 0; - } - - // Find the folder/file in current directory - uint32 i, found = 0xffffffff; - for (i = 0; i < current->Count && found == 0xffffffff; i++) - if (strcmp(path, current->Entries[i].Name) == 0) found = i; - - // Check if the file/folder was found - if (found == 0xffffffff) return NULL; - - // Return entry pointer if done - if (!tmp) return ¤t->Entries[found]; - - // Go inside - current = (luxDirectory*) (current->Entries[found].Offset + (uint32)root); - path = tmp; + return &rootDirectoryEntry; + } + + // Make sure path is correct + if (path[0] != '/') return NULL; + + // Parse each directory until we find the one containing the file; + uint32 cDir = (uint32)&head->RootSize; + while (next < end) + { + // Parse string + start = next + 1; // Skip path separator + tmp = strchr(&path[start], '/'); // Find next separator + next = (!tmp) ? end : (uint32)(tmp - path) ; // Mark end of string, or next dir position in path + + // strchr doesn't know when to end + if (next >= end) { tmp = 0; next = end; } + + // Look for directory + uint32 i, find = 0xffffffff; + uint32 size = *(uint32*)cDir; + luxDirectoryEntry* de = (luxDirectoryEntry*) (cDir + sizeof(uint32)); + for (i = 0; i < size && find == 0xffffffff; i++) + if (strncmp(de[i].De.Name, &path[start], strlen(de[i].De.Name)) == 0) + find = i; + + // Not found? Nope, not good + if (find == 0xffffffff) return NULL; + + // End of string? Return directory entry + if (!tmp) return &de[find]; + + // make sure we don't try to read a file as a folder + if ((de[find].De.Flags & 0x7) != FileDirectory) return NULL; + // Not end of string? Continue + cDir = (uint32) (data + de[find].Offset); } - // We shouldn't get here return NULL; } @@ -141,62 +93,107 @@ luxDirectoryEntry* luxGetFile (string path, uint32 dev) /************************************** * FILE SYSTEM INTERFACE ROUTINES * **************************************/ -uint32 luxDetect (DevReadRoutine rd, uint32 blocksz) +uint32 luxDetect (MountPoint* mp) { - // Check magic result, which is returned by our device read function - void* buffer = kmalloc(blocksz); - uint32 result = (*rd)(0, buffer); - kfree(buffer); + void* buffer = kmalloc(mp->BlockSize); // must allocate a buffer for non-initrd devices... + uint32 result = mp->Read(0, buffer); // read something + kfree(buffer); // get rid of the not needed buffer - return (result == LUXMAGIC); + return (result == LUXMAGIC); // returned magic number? good } -// Returns element count read -uint32 luxRead (const MountPoint* UNUSED(mp), FILE* f, uint32 elemsz, uint32 n, uint8* buffer) +// Test if a file exists +DirectoryEntry* luxTest (MountPoint* mp, string path) { - uint32 temp = Min(n*elemsz, luxFiles[f->Id].Size); - - memcpy(buffer, luxFiles[f->Id].Pos, temp); - luxFiles[f->Id].Size -= temp; - - return temp; + // MountPoint.FsData[0] contains initrd image start address + // luxDirectoryEntry contains a DirectoryEntry + return (DirectoryEntry*) luxGetFile(path, mp->FsData[0]); // Get a directory and see } -FILE* luxOpen (const MountPoint* mp, FILE* f, string path) +// Open a file +FILE* luxOpen (MountPoint* mp, FILE* f, string path) { - f->Id = luxGetFileSlot(); - luxDirectoryEntry* entry = luxGetFile(path, mp->BlockSize); + // Find it first. mp->FsData[0] contains initrd image start address. + luxDirectoryEntry* entry = luxGetFile(path, mp->FsData[0]); - f->Name = entry->Name; - f->Flags = entry->Flags; - f->GroupId = entry->GroupId; - f->OwnerId = entry->OwnerId; - f->Size = entry->Size; + // Invalid entry + if (entry == NULL) return NULL; - luxFiles[f->Id].Id = f->Id; - luxFiles[f->Id].Pos = luxFiles[f->Id].Start = entry->Offset + luxDevices[mp->BlockSize].Data; - luxFiles[f->Id].Size = entry->Size; + // Set some data fields + f->Name = entry->De.Name; + f->Flags = entry->De.Flags; + f->GroupId = entry->De.GroupId; + f->OwnerId = entry->De.OwnerId; + f->Size = entry->De.Size; + // Set up the buffer info. We will use these to read/write the file. + f->BufStart = (void*) (mp->FsData[0] + entry->Offset); + f->BufPos = f->BufStart; + f->BufEnd = f->BufStart + entry->De.Size; + + // And return it return f; } -DirectoryEntry* luxTest (const MountPoint* mp, string path) +// Close a file +FILE* luxClose (MountPoint* UNUSED(mp), FILE* f) { - return (DirectoryEntry*) luxGetFile(path, mp->BlockSize); -} - -FILE* luxClose (const MountPoint* UNUSED(mp), FILE* f) -{ - luxFiles[f->Id].Id = NULL; - + // Just empty buffer info, so we don't attempt to read it again + f->BufStart = f->BufPos = f->BufEnd = NULL; return f; } -DirectoryEntry* luxReadDir (const MountPoint* UNUSED(mp), FILE* f, uint32 index) +// Read data from a file +// Returns byte count read +uint32 luxRead (MountPoint* UNUSED(mp), FILE* f, uint32 elemsz, uint32 n, uint8* buffer) { - luxDirectory* dir = luxFiles[f->Id].Start; + // Make sure we don't read more than we can + uint32 total = Min(elemsz * n, (uint32)f->BufEnd - (uint32)f->BufPos); - if (index > dir->Count) return NULL; - return (DirectoryEntry*) &dir->Entries[index]; + memcpy(buffer, f->BufPos, total); // Copy data + f->BufPos = (void*) ((uint32)f->BufPos + total); // Set new buffer position + return total; // Return byte count read } +// Read contents of a directory +DirectoryEntry* luxReadDir (MountPoint* UNUSED(mp), FILE* f, uint32 index) +{ + uint32 size = *(uint32*)f->BufStart; + luxDirectoryEntry* de = (luxDirectoryEntry*) ((uint32)f->BufStart + sizeof(uint32)); + + if (index >= size) return NULL; + return (DirectoryEntry*) &de[index]; +} + + +/************************************** + * INITIALIZATION ROUTINE * + **************************************/ +void luxInitrdInstall (MultibootInfo* info) +{ + uint32 i; + MountPoint* mp; + + // Register file system + FileSystem fs = {0, "luxinitrd", luxDetect, 0, 0, + luxOpen, luxClose, luxRead, 0, luxTest, luxReadDir}; + VfsInstallFs(&fs); + + // Check for multiboot info flags to see if any modules are loaded + if ((info->Flags & 8) == 0) return; + + // Loop through each module and if it is an initrd image, mount it + MultibootModule* modules = (MultibootModule*) info->ModulesAddress; + + for (i = 0; i < info->ModulesCount; i++) + if ((*(uint32*) modules[i].ModuleStart) == LUXMAGIC) + { + // Mount the device + Log("Initrd", "Found initrd image at 0x%x.\n", modules[i].ModuleStart); + mp = VfsMount("initrd", luxInitrdDevRead, NULL, 0x0); + + // Set up data fields + mp->FsData[0] = modules[i].ModuleStart; + mp->FsData[1] = modules[i].ModuleEnd; + } +} diff --git a/Kernel/hal/filesys/initrd/initrd.h b/Kernel/hal/filesys/initrd/initrd.h index 03e9357..bee6c8d 100644 --- a/Kernel/hal/filesys/initrd/initrd.h +++ b/Kernel/hal/filesys/initrd/initrd.h @@ -5,6 +5,7 @@ * Author: Tiberiu */ + #ifndef INITDR_H_ #define INITDR_H_ @@ -12,45 +13,15 @@ #include typedef struct { - char Name[256]; - uint32 Flags, OwnerId, GroupId, Size; - TimeSystem TimeCreated, TimeModified, TimeAccessed; + DirectoryEntry De; uint32 Offset; -} luxDirectoryEntry; - -typedef struct { - uint32 Count; - luxDirectoryEntry* Entries; -} luxDirectory; +} __attribute__((packed)) luxDirectoryEntry; typedef struct { uint32 Magic; char Oem[6]; - luxDirectory* Root; -} luxHeader; - -typedef struct { - uint32 DeviceId; - uint32 Size; - void* Data; -} luxDEVICE; - -typedef struct { - uint32 Id; - uint32 Size; - void* Start; - void* Pos; -} luxFILE; - - -extern uint32 luxDevRead (uint32 offset, void* buffer); -extern void luxInitrdInstall (MultibootInfo* info); -extern uint32 luxDetect (DevReadRoutine rd, uint32 blocksz); -extern uint32 luxRead (const MountPoint* mp, FILE* f, uint32 elemsz, uint32 n, uint8* buffer); -extern FILE* luxOpen (const MountPoint* mp, FILE* f, string path); -extern DirectoryEntry* luxTest (const MountPoint* mp, string path); -extern FILE* luxClose (const MountPoint* mp, FILE* f); -extern DirectoryEntry* luxReadDir (const MountPoint* mp, FILE* f, uint32 index); - + uint32 RootSize; + // After RootSize is the root content +} __attribute__((packed)) luxHeader; #endif /* INITDR_H_ */ diff --git a/Kernel/hal/hal.c b/Kernel/hal/hal.c index 782a8d5..0569d3e 100644 --- a/Kernel/hal/hal.c +++ b/Kernel/hal/hal.c @@ -8,7 +8,7 @@ #include "keyboard/keyboard.h" #include "mouse/mouse.h" -#include "filesys/fat/fat.h" +//#include "filesys/fat/fat.h" #include #include @@ -38,5 +38,5 @@ void HalInitialize() // Install VFS VfsInstall(); - FatInstall(); + //FatInstall(); } diff --git a/Kernel/hal/vfs.c b/Kernel/hal/vfs.c index 110c4f6..b1f8c0d 100644 --- a/Kernel/hal/vfs.c +++ b/Kernel/hal/vfs.c @@ -1,152 +1,169 @@ +#include #include -#include #include #include +#include -#define MAX_FS_COUNT 64 #define BAD 0xffffffff -FileSystem* fsArray; -uint32 fsCount; +DynamicArray fsList; +DynamicArray mpList; +FileSystem* fsArray; MountPoint* mpArray; -uint32 mpCount; -uint32 mpAllocated; void VfsInstall () { - fsArray = (FileSystem*) kmalloc(MAX_FS_COUNT * sizeof(FileSystem)); - fsCount = 0; + DynamicArrayCreate(sizeof(FileSystem), &fsList); + DynamicArrayCreate(sizeof(MountPoint), &mpList); - mpArray = (MountPoint*) kmalloc(32 * sizeof(MountPoint)); - mpCount = 0; - mpAllocated = 32; + fsArray = (FileSystem*) fsList.Data; + mpArray = (MountPoint*) mpList.Data; - Log("VFS", "%#VFS now in business.\n", ColorLightGreen); + Log("VFS", "%#Vfs now in business.\n", ColorLightGreen); } -uint8 VfsInstallFs (FileSystem* fs) +void VfsInstallFs (FileSystem* fs) { - if (fsCount >= MAX_FS_COUNT) { - Error("VFS", "%#Failed to install file system '%s': FS count reached.\n", ColorLightRed, fs->Name); - return 0; + fs->Id = fsList.Size; + DynamicArrayPush(fs, &fsList); + + Log("VFS", "Installed file system %#%s%# (id=%u).\n", ColorWhite, fs->Name, + ColorLightGray, fs->Id); +} + +int32 _VfsFindDevice (string name) +{ + int32 i; + for (i = 0; (uint32)i < mpList.Size; i++) + if (mpArray[i].Id != BAD && strcmp (name, mpArray[i].Name) == 0) return i; + + return -1; +} + +string _VfsGetDevice (string path, int32* dev) +{ + // Make sure path is valid + if (!path || *path != '/') { + *dev = -1; return NULL; } - memcpy(&fsArray[fsCount], fs, sizeof(FileSystem)); - fsArray[fsCount].Id = fsCount; + // Do we need to return root? + path++; + if (*path == '\0') return NULL; // Yes, but not implemented yet - ++fsCount; - Log("VFS", "Installed file system %#%s.\n", ColorWhite, fs->Name); - return 1; + // Find the next '/' + int32 i, index = -1, len = strlen(path); + for (i = 0; i < len && index == -1; i++) + if (path[i] == '/') index = i; + + if (index == -1) index = len; + + // Find the device + *dev = -1; + for (i = 0; (uint32)i < mpList.Size && *dev == -1; i++) + if (mpArray[i].Id != BAD && strncmp(path, mpArray[i].Name, index) == 0) + *dev = i; + + return &path[index]; } -uint32 VfsFindDevice (string dev) +int32 _VfsDetectFs (MountPoint* mp) { - uint32 i; - for (i = 0; i < mpCount; i++) - if (mpArray[i].Id != BAD && strcmp(dev, mpArray[i].Name) == 0) - return i; + int32 i; + for (i = 0; (uint32)i < fsList.Size; i++) + if (fsArray[i].Detect && fsArray[i].Detect(mp)) return i; - return BAD; + return -1; } - -// Returns mount point index, removes dev name from path -uint32 VfsParsePath (string* path) +int32 VfsTestDevname (string name) { - // Sanity check - if (!path || !(*path)) return BAD; + // Check if name exists + uint8 success = (_VfsFindDevice(name) == -1); - string dev = *path, p = strchr(*path, ':'); - if (p == NULL) return BAD; // invalid path + // Set up for search + char find; + uint32 len = strlen(name); + name[len+1] = '\0'; - // Split string - *path = p+1; *p = '\0'; - - return VfsFindDevice(dev); -} - -uint8 VfsMount (string Name, DevReadRoutine R, DevWriteRoutine W, uint32 BlockSize) -{ - uint32 i, fsId = BAD, mpIndex = BAD; - - // Try to figure out the file system - for (i = 0; i < fsCount && fsId == BAD; i++) - if (fsArray[i].Detect && fsArray[i].Detect(R, BlockSize)) - fsId = i; - - if (fsId == BAD) { - Error("VFS", "%#Failed to mount device %s: no file system found.\n", ColorLightRed, Name) - return 0; // No file system, no good - } - - // Try to find an empty slot to fill - for (i = 0; i < mpCount && mpIndex == BAD; i++) - if (mpArray[i].Id == BAD) mpIndex = i; - - // No empty slots? - if (mpIndex == BAD) + // Name exists? Try a number + for (find = '0'; find <= '9' && !success; find++) { - // Make sure we have enough space - if (mpCount == mpAllocated) { - mpAllocated += 4; - mpArray = kmrealloc(mpArray, mpAllocated * sizeof(MountPoint)); - } - - mpIndex = mpCount++; + name[len] = find; + success = (_VfsFindDevice(name) == -1); } - // Add to mount point list, set up data - mpArray[mpIndex].Id = mpIndex; - mpArray[mpIndex].FsId = fsId; - mpArray[mpIndex].BlockSize = BlockSize; - mpArray[mpIndex].Read = R; - mpArray[mpIndex].Write = W; - - // Change name if it already exists - uint32 find = VfsFindDevice(Name); - if (find != BAD) + // Whoa... nothing? Try the alphabet. + for (find = 'a'; find <= 'z' && !success; find++) { - uint32 len = strlen(Name); - uint8 success = 0; - Name[len+1] = '\0'; - - // Try to find a number index - for (find = '0'; find <= '9' && !success; find++) - { - Name[len] = find; - if (VfsFindDevice(Name) == BAD) success = 1; - } - - // What? Haven't found anything yet? Try the alphabet - for (find = 'a'; find <= 'z' && !success; find++) - { - Name[len] = find; - if (VfsFindDevice(Name) == BAD) success = 1; - } - - // Still nothing? How in the world is this even possible ?!?!?! - if (!success) return 0; + name[len] = find; + success = (_VfsFindDevice(name) == -1); } - memcpy(mpArray[mpIndex].Name, Name, sizeof(char) * MAX_MOUNTPOINTNAME_LEN); - - // Tell file system to mount the device - if (fsArray[mpArray[mpIndex].FsId].MountDevice) - fsArray[mpArray[mpIndex].FsId].MountDevice(&mpArray[mpIndex]); - - Log("VFS", "Mounted device %#%s%# using the %#%s%# file system.\n", ColorWhite, Name, - ColorLightGray, ColorWhite, fsArray[fsId].Name, ColorLightGray); - return 1; + return success; } -void VfsUnmount (uint32 dev_id) +MountPoint* VfsMount (string devname, DevReadRoutine R, DevWriteRoutine W, uint32 bs) { - if (fsArray[mpArray[dev_id].FsId].UnmountDevice) - fsArray[mpArray[dev_id].FsId].UnmountDevice(&mpArray[dev_id]); + // Create a mount point + MountPoint mp ; + strcpy(mp.Name, devname); + mp.BlockSize = bs; + mp.Read = R; + mp.Write = W; - mpArray[dev_id].Id = BAD; - mpCount--; + // Detect file system + int32 fsid = _VfsDetectFs(&mp); + if (fsid == -1) { + Error("VFS", "%#Failed to mount device %s: could not find a file system.\n", ColorLightRed, devname); + return NULL; + } + mp.FsId = (uint32) fsid; + + // Rename if it has problems + if (!VfsTestDevname(mp.Name)) { + Error("VFS", "%#Failed to mount device %s: bad name.\n", ColorLightRed, devname); + return NULL; + } + + // Find an empty slot + uint32 empty = BAD, i; + for (i = 0; i < mpList.Size && empty == BAD; i++) + if (mpArray[i].Id == BAD) empty = i; + + // Mount it + if (empty == BAD) { + mp.Id = mpList.Size; + DynamicArrayPush(&mp, &mpList); + } + + else { + mp.Id = empty; + memcpy ( &mpArray[empty], &mp, sizeof(MountPoint)); + } + + // Tell the FS to mount the device + if (fsArray[fsid].MountDevice) + fsArray[fsid].MountDevice(&mpArray[mp.Id]); + + // Log + Log("VFS", "Mounted device %#%s%# using the %#%s%# file system.\n", ColorWhite, mp.Name, + ColorLightGray, ColorWhite, fsArray[fsid].Name, ColorLightGray); + + return &mpArray[mp.Id]; +} + +void VfsUnmount (uint32 devid) +{ + if (fsArray[mpArray[devid].FsId].UnmountDevice) + fsArray[mpArray[devid].FsId].UnmountDevice(&mpArray[devid],0); + + // Invalidate ID + mpArray[devid].Id = BAD; + + // We shouldn't remove it from the array, because it will invalidate + // all other devices' IDs. } // Returns pointer to FILE structure that was inputed if success, null otherwise @@ -155,23 +172,25 @@ FILE* VfsOpen (FILE* file, string path) if (!file) return NULL; // Parse string - uint32 dev = VfsParsePath(&path); + int32 dev; string temp; + temp = _VfsGetDevice(path, &dev); file->DeviceId = dev; // Device not found, or Open routine doesn't exist - if (dev == BAD || !fsArray[mpArray[dev].FsId].Open) return NULL; + if (dev == -1 || !fsArray[mpArray[dev].FsId].Open) return NULL; // Ask the FS to do the 'opening' - return fsArray[mpArray[dev].FsId].Open(&mpArray[dev],file,path); + return fsArray[mpArray[dev].FsId].Open(&mpArray[dev],file,temp); } DirectoryEntry* VfsTest (string path) { // Parse string - uint32 dev = VfsParsePath(&path); + int32 dev; + path = _VfsGetDevice(path, &dev); // Device not found, or Open routine doesn't exist - if (dev == BAD || !fsArray[mpArray[dev].FsId].Test) return NULL; + if (dev == -1 || !fsArray[mpArray[dev].FsId].Test) return NULL; // Ask the FS to do the 'opening' return fsArray[mpArray[dev].FsId].Test(&mpArray[dev],path); @@ -212,3 +231,9 @@ DirectoryEntry* VfsReadDirectory (FILE* handle, uint32 index) if (!fsArray[mp->FsId].ReadDirectory) return NULL; return fsArray[mp->FsId].ReadDirectory(mp, handle, index); } + +MountPoint* VfsGetMountPoint (uint32 dev_id) +{ + if (dev_id < mpList.Size) return &mpArray[dev_id]; + return NULL; +} diff --git a/Kernel/include/array.h b/Kernel/include/array.h new file mode 100644 index 0000000..0d42713 --- /dev/null +++ b/Kernel/include/array.h @@ -0,0 +1,54 @@ +/* + * array.h + * + * Created on: Sep 3, 2011 + * Author: Tiberiu + */ + +#ifndef ARRAY_H_ +#define ARRAY_H_ + +#include + +/******************************************* + * Dynamically expanding array * + *******************************************/ +typedef struct { + // You can cast the Data to any type of array + // because it contains the actual data, not pointers + void* Data; + uint32 ElemSize; + uint32 Size; + uint32 Allocated; +} DynamicArray; + +extern void DynamicArrayCreate (uint32 ElemSize, DynamicArray* arr); +extern void DynamicArrayPush (void* item, DynamicArray* arr); +extern void DynamicArrayPop (DynamicArray* arr); +extern void DynamicArrayInsert (void* item, uint32 index, DynamicArray* arr); +extern void DynamicArrayRemove (uint32 index, DynamicArray* arr); +extern void DynamicArraySwap (uint32 a, uint32 b, DynamicArray* arr); +extern void DynamicArrayDispose (DynamicArray* arr); + + +/******************************************* + * Ordered array * + *******************************************/ +typedef int (*ComparePredicate) (uint32, uint32); +typedef struct { + uint32* Data; + uint32 Size; + uint32 SizeLimit; + ComparePredicate Compare; +} OrderedArray; + +extern OrderedArray OrderedArrayCreate (uint32 maxSize, ComparePredicate p); +extern OrderedArray OrderedArrayPlace (uint32 addr, uint32 maxSize, ComparePredicate p); +extern void OrderedArrayDispose (OrderedArray* arr); +extern uint32 OrderedArraySearch (uint32 key, OrderedArray* arr, ComparePredicate predicate); +extern void OrderedArrayInsert (uint32 item, OrderedArray* arr); +extern uint32 OrderedArrayLookup (uint32 index, OrderedArray* arr); +extern void OrderedArrayDeleteIndex (uint32 index, OrderedArray* arr); + + +#endif /* ARRAY_H_ */ diff --git a/Kernel/include/fileio.h b/Kernel/include/fileio.h index 5161fa4..99078ba 100644 --- a/Kernel/include/fileio.h +++ b/Kernel/include/fileio.h @@ -43,24 +43,23 @@ enum FileFlags typedef struct { uint32 DeviceId; // The VFS identifies the mounted device that uses this - uint32 Id; // The FS idenitifies files using this field - //char Name[MAX_FILENAME_LEN]; + uint32 Id; // The FS identifies files using this field char* Name; - /*** Looks like this: - * bits description - * 0-2 file type - * 3-5 owner permissions (rwx) - * 6-8 group permissions (rwx) - * 9-11 other permissions (rwx) - * 12 hidden - * 13-31 (unassigned yet) + /*** Flags look like this: * - * Note: In windows FS, the readonly and system - * attributes are set using permissions and owner id */ - uint32 Flags; - uint32 OwnerId, GroupId; + * bits 31 ... 13 | 12 | 11 10 9 | 8 7 6 | 5 4 3 | 2 1 0 + * unassigned | Hidden | x w r | x w r | x w r | file type (enum above) + * | others | group | owner | + * Note: In windows FSs, the readonly and system attributes are set + * using permissions mask and owner id (0 = system) */ + uint32 Flags, OwnerId, GroupId; uint32 Size; + + // Useful for file systems + void *BufStart, *BufPos, *BufEnd ; + uint32 FsData[8]; // Can store info such as current cluster, etc + } FILE; @@ -70,31 +69,32 @@ typedef struct _DirectoryEntry uint32 Flags, OwnerId, GroupId, Size; TimeSystem TimeCreated, TimeModified, TimeAccessed; -} DirectoryEntry; +} __attribute__((packed)) DirectoryEntry; typedef struct { - uint32 Id; - uint32 FsId; + uint32 Id, FsId; char Name[MAX_MOUNTPOINTNAME_LEN]; uint32 BlockSize; DevReadRoutine Read; DevWriteRoutine Write; + + uint32 FsData[8]; } MountPoint; // File system routines -typedef uint32 (*FsReadRoutine)(const MountPoint*, FILE*, uint32, uint32, uint8*); -typedef uint32 (*FsWriteRoutine)(const MountPoint*, FILE*, uint32, uint32, uint8*); -typedef FILE* (*FsOpenRoutine)(const MountPoint*, FILE*,string); -typedef DirectoryEntry* (*FsTestRoutine)(const MountPoint*, string); // Test if a file exists, and returns info -typedef FILE* (*FsCloseRoutine)(const MountPoint*, FILE*); -typedef DirectoryEntry* (*FsReadDirRoutine)(const MountPoint*,FILE*,uint32); +typedef uint32 (*FsReadRoutine) (MountPoint*, FILE*, uint32, uint32, uint8*); +typedef uint32 (*FsWriteRoutine) (MountPoint*, FILE*, uint32, uint32, uint8*); +typedef FILE* (*FsOpenRoutine) (MountPoint*, FILE*, string); +typedef DirectoryEntry* (*FsTestRoutine) (MountPoint*, string); // Test if a file exists, and returns info +typedef FILE* (*FsCloseRoutine) (MountPoint*, FILE*); +typedef DirectoryEntry* (*FsReadDirRoutine) (MountPoint*, FILE*, uint32); -typedef uint32 (*FsDetectRoutine) (DevReadRoutine, uint32 blocksz); -typedef void (*FsMountRoutine) (const MountPoint*); -typedef void (*FsUnmountRoutine) (const MountPoint*); +typedef uint32 (*FsDetectRoutine) (MountPoint*); +typedef void (*FsMountRoutine) (MountPoint*); +typedef void (*FsUnmountRoutine) (MountPoint*, uint8 Forced); // If forced, the FS shouldn't try to write to device // File system structure typedef struct { @@ -115,18 +115,16 @@ typedef struct { // Vfs routines -extern void VfsInstall (); -extern uint8 VfsInstallFs (FileSystem* fs); -extern uint32 VfsFindDevice (string dev); -extern uint32 VfsParsePath (string* path); -extern uint8 VfsMount (string Name, DevReadRoutine R, DevWriteRoutine W, uint32 BlockSize); -extern void VfsUnmount (uint32 dev_id); -extern FILE* VfsOpen (FILE* file, string path); +extern void VfsInstall (); +extern void VfsInstallFs (FileSystem* fs); +extern MountPoint* VfsMount (string devname, DevReadRoutine R, DevWriteRoutine W, uint32 bs); +extern void VfsUnmount (uint32 dev_id); +extern FILE* VfsOpen (FILE* file, string path); extern DirectoryEntry* VfsTest (string path); -extern FILE* VfsClose (FILE* file); -extern uint32 VfsRead (FILE* file, uint32 bsz, uint32 n, uint8* buffer); -extern uint32 VfsWrite (FILE* file, uint32 bsz, uint32 n, uint8* buffer); +extern FILE* VfsClose (FILE* file); +extern uint32 VfsRead (FILE* file, uint32 bsz, uint32 n, uint8* buffer); +extern uint32 VfsWrite (FILE* file, uint32 bsz, uint32 n, uint8* buffer); extern DirectoryEntry* VfsReadDirectory (FILE* handle, uint32 index); - +extern MountPoint* VfsGetMountPoint (uint32 dev_id); #endif /* FILEIO_H_ */ diff --git a/Kernel/include/memory-add.h b/Kernel/include/memory-add.h index abe856d..08b99a9 100644 --- a/Kernel/include/memory-add.h +++ b/Kernel/include/memory-add.h @@ -11,6 +11,7 @@ #include #include #include +#include /*************************************************** * Paging * diff --git a/Kernel/include/stdlib.h b/Kernel/include/stdlib.h index 4d53203..34d87d1 100644 --- a/Kernel/include/stdlib.h +++ b/Kernel/include/stdlib.h @@ -23,10 +23,11 @@ ***************************************************/ extern uint32 strlen (string s); extern int32 strcmp (string a, string b); -extern int32 strcasecmp (string a, string b); +extern int32 strncmp (string a, string b, uint32 n); +extern int32 strcasecmp (string a, string b); extern string strcpy (string s1, const string s2); -extern char* strchr (string s, int c); -extern char* strrchr (string s, int c); +extern char* strchr (string s, int c); +extern char* strrchr (string s, int c); /*************************************************** * Number operations: len * @@ -50,23 +51,5 @@ extern int32 ConvertStringToInt (string buffer); extern uint32 ConvertStringToUInt (string buffer); extern uint32 ConvertStringToIntHex (string buffer); -/*************************************************** - * Ordered array implementation * - ***************************************************/ -typedef int (*ComparePredicate) (uint32, uint32); -typedef struct { - uint32* Data; - uint32 Size; - uint32 SizeLimit; - ComparePredicate Compare; -} OrderedArray; - -extern OrderedArray OrderedArrayCreate (uint32 maxSize, ComparePredicate p); -extern OrderedArray OrderedArrayPlace (uint32 addr, uint32 maxSize, ComparePredicate p); -extern void OrderedArrayDispose (OrderedArray* arr); -extern uint32 OrderedArraySearch (uint32 key, OrderedArray* arr, ComparePredicate predicate); -extern void OrderedArrayInsert (uint32 item, OrderedArray* arr); -extern uint32 OrderedArrayLookup (uint32 index, OrderedArray* arr); -extern void OrderedArrayDeleteIndex (uint32 index, OrderedArray* arr); #endif diff --git a/Kernel/include/version.h b/Kernel/include/version.h index a4e91e8..973f121 100644 --- a/Kernel/include/version.h +++ b/Kernel/include/version.h @@ -1 +1 @@ -#define OS_BUILD "0.1.0.551" +#define OS_BUILD "0.1.0.590" diff --git a/Kernel/library/array/dynamic_arr.c b/Kernel/library/array/dynamic_arr.c new file mode 100644 index 0000000..6b0fa2f --- /dev/null +++ b/Kernel/library/array/dynamic_arr.c @@ -0,0 +1,103 @@ +/* + * dynamic-arr.c + * + * Created on: Sep 3, 2011 + * Author: Tiberiu + */ + +#include +#include +#include + +void DynamicArrayCreate (uint32 ElemSize, DynamicArray* arr) +{ + // Create a simple array. Allocate 16 elems for start + arr->ElemSize = ElemSize; + arr->Size = 0; + arr->Allocated = 0x10; + arr->Data = kmalloc(0x10 * ElemSize); +} + +void DynamicArrayPush (void* item, DynamicArray* arr) +{ + // Make sure we have enough space + if (arr->Allocated <= arr->Size) + { + arr->Allocated += 0x10; + arr->Data = kmrealloc(arr->Data, arr->Allocated * arr->ElemSize); + } + + // Calculate the address of next item + uint32 addr = (uint32)arr->Data + arr->Size * arr->ElemSize; + + // Copy data + memcpy((void*)addr, item, arr->ElemSize); + ++arr->Size; +} + +void DynamicArrayPop (DynamicArray* arr) +{ + // Decrease size + --arr->Size; +} + +void DynamicArrayInsert (void* item, uint32 index, DynamicArray* arr) +{ + // Make sure we have enough space + if (arr->Allocated <= arr->Size) + { + arr->Allocated += 0x10; + arr->Data = kmrealloc(arr->Data, arr->Allocated * arr->ElemSize); + } + + // Move the data out of the way + uint8* buffer = (uint8*) arr->Data; + uint32 start = index * arr->ElemSize; + uint32 end = arr->Size * arr->ElemSize; + + for (--end; end >= start; end--) + buffer[end + arr->ElemSize] = buffer[end]; + + // Insert item + memcpy((void*)((uint32)arr->Data + start), item, arr->ElemSize); + ++ arr->Size; +} + +void DynamicArrayRemove (uint32 index, DynamicArray* arr) +{ + uint8* buffer = (uint8*) arr->Data; + uint32 start = index * arr->ElemSize; + uint32 end = (arr->Size-1) * arr->ElemSize; + + for (; start < end; start++) + buffer[start] = buffer[start + arr->ElemSize]; + + -- arr->Size; +} + +void DynamicArraySwap (uint32 a, uint32 b, DynamicArray* arr) +{ + uint8 temp, *buffer = (uint8*) arr->Data; + uint32 addra = a * arr->ElemSize; + uint32 addrb = b * arr->ElemSize; + uint32 i; + + for (i = 0; i < arr->ElemSize; i++) + { + // Swap byte i from elem A with byte i from elem B + temp = buffer[addra + i]; + buffer[addra + i] = buffer[addrb + i]; + buffer[addrb + i] = temp; + } +} + +void DynamicArrayDispose (DynamicArray* arr) +{ + // Free used data + kfree(arr->Data); + + // Set everything to 0 so we don't attempt to add more items and stuff + arr->Allocated = 0; + arr->Size = 0; + arr->ElemSize = 0; +} diff --git a/Kernel/library/stdlib/ord_arr.c b/Kernel/library/array/ord_arr.c similarity index 99% rename from Kernel/library/stdlib/ord_arr.c rename to Kernel/library/array/ord_arr.c index 1c9758b..d5e8065 100644 --- a/Kernel/library/stdlib/ord_arr.c +++ b/Kernel/library/array/ord_arr.c @@ -15,6 +15,7 @@ #include #include +#include int StandardComparePredicate (uint32 a, uint32 b) { diff --git a/Kernel/library/stdlib/str_ops.c b/Kernel/library/stdlib/str_ops.c index f96ea79..f1b8770 100644 --- a/Kernel/library/stdlib/str_ops.c +++ b/Kernel/library/stdlib/str_ops.c @@ -29,6 +29,21 @@ int32 strcmp (string a, string b) return ((c1 < c2) ? -1 : (c1 > c2)); } +int32 strncmp (string a, string b, uint32 n) +{ + unsigned char uc1, uc2; + if (!n) return 0; + + while (n-- > 0 && *a == *b) { + if (n == 0 || (*a == *b && *a == '\0')) return 0; + a++; b++; + } + + uc1 = (* (unsigned char*)a); + uc2 = (* (unsigned char*)b); + return ((uc1 < uc2) ? -1 : (uc1 > uc2)); +} + int32 strcasecmp (string a, string b) { unsigned char c1, c2; diff --git a/Kernel/memory/mem-paging.c~ b/Kernel/memory/mem-paging.c~ deleted file mode 100644 index 40fbe2d..0000000 --- a/Kernel/memory/mem-paging.c~ +++ /dev/null @@ -1,75 +0,0 @@ -/* - * memory-vi.c - * - * Created on: Aug 23, 2011 - * Author: Tiberiu - */ -#include -#include -/******************************* - * Data * - *******************************/ -PageDirectory* CurrentDirectory; -PageDirectory* KernelDirectory; - -/******************************* - * Useful routines * - *******************************/ -void PagingInitialize(uint32 kernel_used) -{ - LogMem("Virtual memory manager initialization started. End of kernel = 0x%x\n", kernel_used); - PageDirectory* kernelPd = (PageDirectory*) kmalloc_a(sizeof(PageDirectory)); - memset(kernelPd, 0, sizeof(PageDirectory)); - - CurrentDirectory = kernelPd; - KernelDirectory = kernelPd; - - uint32 i; - for (i = 0; i < kernel_used; i+=0x1000) - MemPhAllocFrame(PagingGetPage(i, 1, kernelPd), 0, 0); - - LogMem("Identity mapped first 0x%x bytes.\n", kernel_used); - - for (i = KERNEL_HEAP_START; i < KERNEL_HEAP_END; i+=0x1000) - MemPhAllocFrame(PagingGetPage(i, 1, kernelPd), 1, 1); - - LogMem("Mapped kernel space.\n"); - - PagingSwitchPageDirectory (kernelPd); -} - -void PagingSwitchPageDirectory (PageDirectory* dir) -{ - CurrentDirectory = dir; - asm volatile ("mov %0, %%cr3":: "r"(&dir->TablesPhysical)); - LogMem("Switched page directory to 0x%x.\n", (uint32)(&dir->TablesPhysical)); - - uint32 cr0; - asm volatile ("mov %%cr0, %0": "=r"(cr0)); - cr0 |= 0x80000000; - asm volatile ("mov %0, %%cr0":: "r"(cr0)); - - LogMem("Enabled paging.\n"); -} - -Page* PagingGetPage(uint32 addr, uint8 make, PageDirectory* dir) -{ - addr >>= 12; - - uint32 tableIndex = addr >> 10; - - if (dir->Tables[tableIndex]) - return &dir->Tables[tableIndex]->Pages[addr&0x3ff]; - - else if (make) - { - uint32 temp; - dir->Tables[tableIndex] = (PageTable*)kmalloc_ap(sizeof(PageTable), &temp); - memset (dir->Tables[tableIndex], 0, 0x1000); - dir->TablesPhysical[tableIndex] = temp | 0x7; - return &dir->Tables[tableIndex]->Pages[addr&0x3ff]; - } - - else return 0; -} - diff --git a/Kernel/memory/mem-phys.c~ b/Kernel/memory/mem-phys.c~ deleted file mode 100644 index 484315b..0000000 --- a/Kernel/memory/mem-phys.c~ +++ /dev/null @@ -1,109 +0,0 @@ -/* - * mem-phys.c - * - * Created on: Aug 27, 2011 - * Author: Tiberiu - */ -#include - -uint32* FrameMap; -uint32 TotalFrames; -uint32 TotalMemory; -uint32 UsedFrames; - -inline void ConvertIndexToFrame (uint32 index, uint32* address, uint32* offset) -{ - *address = (index >> 5); - *offset = index & 0x1f; -} - -inline uint32 ConvertFrameToIndex (uint32 address, uint32 offset) -{ - return (address<<5) | offset; -} - -void MemPhSetFrame (uint32 frame, uint8 value) -{ - uint32 addr, off; - ConvertIndexToFrame(frame, &addr, &off); - - if (value) { - if ((FrameMap[addr] & (1<> 5; addr++) - if (FrameMap[addr] != 0xffffffff) - { - for (pos = 0; (FrameMap[addr] & (1<> 2; - TotalMemory = SystemMemoryKb; - - FrameMap = (uint32*) kmalloc(sizeof(uint32) * (1 + (TotalFrames>>5))); - memset(FrameMap, 0, sizeof(uint32) * (1 + (TotalFrames>>5))); - LogMem("%#Started physical memory manager ok!, found %ukb\n", ColorLightGreen, SystemMemoryKb); -} - -void MemPhReserveFrames (uint32 address, uint32 length) -{ - address >>= 12; - length = (length>>12) + ((length & 0xfff) > 0); - uint32 end = address + length; - - for (; address < end ; address++) - MemPhSetFrame(address, 1); -} diff --git a/Modules/Rom image maker/.dep.inc b/Modules/Rom image maker/.dep.inc new file mode 100644 index 0000000..4560e55 --- /dev/null +++ b/Modules/Rom image maker/.dep.inc @@ -0,0 +1,5 @@ +# This code depends on make tool being used +DEPFILES=$(wildcard $(addsuffix .d, ${OBJECTFILES})) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/Modules/Rom image maker/Makefile b/Modules/Rom image maker/Makefile new file mode 100644 index 0000000..ec9de69 --- /dev/null +++ b/Modules/Rom image maker/Makefile @@ -0,0 +1,128 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_PLATFORM_${CONF} platform name (current configuration) +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# build tests +build-tests: .build-tests-post + +.build-tests-pre: +# Add your pre 'build-tests' code here... + +.build-tests-post: .build-tests-impl +# Add your post 'build-tests' code here... + + +# run tests +test: .test-post + +.test-pre: +# Add your pre 'test' code here... + +.test-post: .test-impl +# Add your post 'test' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/Modules/Rom image maker/build/Debug/MinGW-Windows/commands.o b/Modules/Rom image maker/build/Debug/MinGW-Windows/commands.o new file mode 100644 index 0000000000000000000000000000000000000000..c5c8011c472ff10189963774ab67b88bdc746401 GIT binary patch literal 173726 zcmdSC4V+{}bvJxx1z8jomBcU91xDP3Wp}#gdj}Af9&iB>Sx^H?+cVR%+sk}8-NWws zh>k88))k{h)F_Dyq7pR;QDcarK_#M*`1+M-o|q>aAET(~gNjO&JiPz^IaPJ*cHdjK zKQ_Pj_x5jR`*huNPMtdERMo%gR^Ps`@8uC+UwHnSXtIyg5q+B))jbW8=Jnv?qUff_ zN70*#Yoz23{J$<5c*UlfN~2<#GTzUM2JYH4Rj>P(&ysrlk|d&C;NWv*3Cnf)_16i?tki<=p)ZleKcd; zv1rF~vLVNzeC^YeMY?Svf|spcPaQjVd{MhKC|A0>?>1QSF+dP)k_f*P*ufLhEFpyBlc8q~N5OM8oh!@fT9-2uK`EqtR1eIEzkgW$W~@EvXS4Hgpi zy$t2IJ!4Ju-DZ7*BMH8B;5*`Y`1tH5KMy7SN4|dWJ*I_kC}Cd%d?oN5XZVi9XKC;7 zP@>+mP<{va&NY0_FT-O+Tyn2Omn>>$+)cr-&3EdZLq?cSEEDrGvCR#E{$)r zn6QuWT@Sv6=6Xj*2dKxs?f_8&-yXx~;xSf8#Fu&XF!;XStZyu7ANh`b)|%)$Eqvqb zV(zsbR6qE>-^@3j^fUP`1m6QKd`UmEQ4R3@#_-XT;=e*+!0+kgyA^zo-`bQfg+fB% zG2r_q`23gZD-Qem)`8&=_@3ILuQ=`pM4bNYHPMMJe1n62fEnKb@cA#TcW}se;0zLO z4161nz7rv!d_#$ZJ{ILSotUO?xF|N6ifF?}z_)si^74PxH!?78c=$${L*RRR3*YFV zpZNXYJNBfsdPfufI~@b}5cqC0`rLS07#sEdcPsQQ^{j3d6o%*x#-P-^*J0#{2=A@x3** z-r}I&4(9zwz&G2XZ*ahm8{_-URDFY^zCPCby;Q!TL_ElMe=6T_!LN5C_#On`Qj2{f z1%E(g9;`cgP4uc(z7gMl)K>!EwJm(3qs{(X0-yiVxQz|_@ugq(r1Fg?2HthxyB>UR zZmxH5py21hz2LhIeD5-R^pn&(SV$m=J5k-@on14&)^Iux;a02Mi&#T~jQ%k)gi9BFC?gih+TiP*_0BozQ@U%727Y&~qCx^xo z`CJ0qD)^2#Pi>6bF+S|am;Lf?@SSM*T)qqs4Ey=KgbNRVZ=>PEGDH15Tp02F!aR7z z<~7lux9BS-CjPgB?|SgvVfb8phX)h$TR-@YA6OIps72pk0&vjJXMyiQ!{^#NoQ%f< z;CmDJo`f|NU(82|+i()FF%Mo{SQAYdzSu9L1HS*B559ZBH)r_bddCv;FWYe()?{yN z(KnVD|Ck43;Cp)u-*{piqTO@g`xC>*)|_=L);+`HiMTOO8)hvCQeNcSG~HNSuG?N2@1tJ5SV!HpX{MF$dhp%Z#CO^L|JZl`Qx8n8T^&1d%@0y3B#-k5RKKuo_@}{}!!n-!;edz4nxQj_7Bj z#j<-?djyl|R=)F!GXfRtyXy#4hISkWUHd<$CHs%P=g4E27j8nJc#K&6Xl|aO`v53CFyTtr81f z^5X6L?tj@mli!43bkF3s`F6wPcW$`s!Tra6@)o4z{)>;;|BAIYOx|hZDFzqXa{WD% zcQJ4hAK#j{{a3>7Bl_uXpLze}9S0`wK#eG*6Gg+1i#N<4bKtVO_g{AVfyvwVPk#Ks zWq0g9PV@4>vqL#@A7z3%o#qa^u-D({;4ovc@8hzOVH`7)7zSy__ z^~{a~D4?eOuV>cW08R+N7whmzBur6jqWd1a`(;;LS$?_XaR7aLammY8o)Hf#ruee8`#yKXfhTRhLS$qw-LK6PFHgAR-K;Pm(k|u*zJ0AJg{7uk|&a zL*pkO+IP)EkF1;?@-^hcQv*e6I(Q4 z=1Z@_HE#dDBcSHT7iBSKYe=-Ic9#q(cO9Ynvb4c!R@ZkV8yH|>)4q0}HtvK>J_hKm zm@aO>TpIoGMo|0iKJE$~gW!q-mmPCpl|GyhPd?#ocRk?~cj?uA_pfJ^8E!DzK$}c# zp7EH1S-F8>GQ#{M!z9w~p2-I_;zS0=h!C!_DwrV+c9`SAeb+n~HJ)=bCs{Hdn0yd# zf=`-we~hW&A#07{_8#t_5<=iyGonln!=bDF}tzWdnUPzMYCiEYOPL_ zXaD5gnH<*Q{ny<_`)~Y+m__=4(EBI9xc{s>C-aq-({g-`HgMHn* zgykk-A${OR()%aBz5lZBWY(YwxqtFdB2d=#41Cgen0k@gFM?u&t=0pRzU4zF-HWjW zpboxrnE@>LK6Wb^Jl@B=M{*LhioLFbzK^MRbKDD=!Fb*G{NFzEh(GBgnUWs`as28i z*2zruAw{Aw$*g*Q*C6@244l`GLf! z`0P{;+VdN<^~cZ5y!;+Oi5n*G2TXsXul>5a8Wa9!we!YW(hj$@}7VI?`wU z@n311O_z#s>YT}X^nn31^M=X0Z@BC};MC`0DQj`ktycN#t~utBM}Wznw(pv?eJf8! z1>%~?+Z^b#9J_>L<_4srsgh*uuX`qMLmtE+6yy9y_D|k);If{3{N*Wc3QA7zob1O%)**8qOHtxH7&LPQt_sf9DHlwX#@ZE7=@UKzfeeCF8`aId9 z=r>33o*r&FMl8{)tEbt4BWtlal3mzDIBO=tYlyt4DvrqyNdHAN1(cj)RJ|*-NEZ5g9=KZT4|54aLS&g`xqc6+TFXdXp?_f+>1v=wvz0miF z&ND$<8?N=}PYKUERU!VjI=?RE&yeyT3%yQgPV=kLX+l3$XzpfUyGm%?H91S@=Slfx zLQe|4Q)uquL=mzZdR{2>TZCp7MbZ0({ym{TDfBCZ{+iI!LjOSMT|z%1^t{kdIhs0k z!(+41S4;W1Lcdz*D}{cY&?`b;Cp7=FZTIOv0FU+C|Mci0HgRqFYdre1pjV^);`8-b ztF1K^Dec98c{7m8b znRvlhI=06wyrOD^s}B4 zm%j$|YIKqKDdr~f=fAkxnpDVt7(t7g0Na$09ezDMdPht6$LVpBqeZA56 ze?YHBIzAkU;b1j7UalN3^fQGX6#7|0Um*0eg{}y_PUyWtpCI&GgocChx=m;}0I$1+ zK3VAR3Jt^gLOQNSFcz<83#~bDy3jBjuPcN;Rp`A!Yi_(tXuaF{aiR5&*VlyBG3}>9 z>n-$SHnXk~(X(D?9qY~&T6f2%h1NS9uM>K!@c)s}7YO|^p)VHtUZGp#`+X_@miT-e zCay+56#5M?Yc=|f&{SY^z^CtriL24`MgNg75q(PNX9@jvq0blkn?mzHt7k^aub1*$ zgx)Xo{X)M{=pveG=a)S~ze&nJEA$OQp9mMMMsF7SfY5&+^n*gbMd&NGkms#Jzfb75 z3H=kH|4``B3G%e&@M}^2df|woe-fU{<iD}=teM!F*ORacSTA#`D$^t{l~BI&x& zUtS`;SIc4FEi@9Z_b$h=Sc9o|HG%{1`ecJN9DvugSCfVV@T%=0jYi{De-&ws9Y0&0 z*StE``H!GiBN%92mWLlL{rK0${L`S}AL0J|D(L~C$KOC&=YmHg6>RyNkg~R%j8^B% zk+QEB$te0bXgi1ggV5*7mA4>Gt!+5UQGK9` zLXTkayc+Su3(iPAjr2Q&e$J3Vn>wUlsasLjQ-*PZ0V)g+5m3$D{kLMo$#_M4_K7^r+BJ5&FAllIK}M zUwt;|bwcyMH2Z%lJesRFpGSV37go`wEl&Q$g`{5~dOnM(+K#b1v24H?BIP&C^hNz< zF8(0sgP_;S6`aj5<@{KRo*6ybl|Re0hUL$Wp6kj_hz1>fqRf7`LnqsXRsAEpbQk`t zoma?yjJ-fx8e>F6{ejn&-g+u=2SKxqmw=`o*2`B3<@QyIPIh`qXd!j+#d13Wm4G2DT8#2jqMe}2(76hptoB-d z>YK;k4zcYtnMtk{+fEbP{>adpWvur!QxoY;o^6|*4@*(ejHcun^z0mR>+n)E94#14 zCA1vFtGr6lcyyzqw?tnwH0}I*{Jmf7JVQo;yT!IM#Lll9I<`~CQi_+NGd(+>=h=C- zXXjS40we!9@Ld%BFX&v2&d&59dHAAjugBjH#kO;!pJOySYL@XmS8V$oL&vtAOEGzs zfSDDkvEJvKk(l)P(Hk7k1-eIr&n5IDopniH6rF&&_$pydT6FY_qO%-*Nu(B3=v!yMMk#>=XcG?$dtB10;Vb#^_^?epl4zeD$8_WJlj*b^=uYqAULsL7?x2JzRtMezP_lf^Lga=_~fT4@$dk zj=10cd1=?p(yo6nbev;18_QVlEec{#Qi|SZR=V1kpNX<>iOvs1$HD185j`Ieom5aV z>jpjasOQOE?53}v$~?}-4WoXyh`Y4haCNdXpM{e zJrUrM;rU{;>gX>;yy3=IDY`fMJ4b&iy5G@XiGBt8MdFiBBz(fQTp{J3N{m-$p?q4( zKNIoR-J;N+jd))Um!iAyXWMuPw5^LY>*DJW{wz&Db5HtJqGuJKqUfq!j2CyOaSsSf ztp4b0(Y*@c(3Y>USY9P~$HuM{eIt6DEB~f^PlO*!(YL&Q_ieWWSBn1G>x18k?95P# z{>{s=??zaz$g33n@8~m*{*UO#j{ZUPYe)YmdV=%qPoj$*{R6vdggrlt8m|23GG0-< zgwgFUUHLDgzjgGlqI*H#3O}r(y&Nb1Qs{3a`Z)dY87cokbibF|*0w{qZtEpYoqW;% zUjh9E@$=86?0p&j_9ouP<4ei|Bca%u0pRpYiy+>r}ag4Vj z`xTM>nxW(IR(Z%*LWKPGo{qBbh@MFFJnD6{A@Xd{a+Qtxe7wZ@<%!_$=OJ3WN+NsO z8rpw}p<^4ANBE*mYpe~WXkg88EX1o671nG}679K}JC1B!$p_1o|Lo zw*5~H&9>iRXs&3#4f zBy05C-={riN`E;6bkZK>As^Q`vKaxIdXB{3jo|N(CP78f--(_{ug_{Zua&^lEc*?S zy^@!sBd@0oSBmU249!?P7j)7d<)=*Z7{We#4fy+`UA!E9SoG}j?9p;wD}l%F7aR%x zMr3u2`lZOe(31_1U60+*dUcHI2W`i$BIu<3;c@KuMbB2r`Hzd9t&;PfYtf@T+Lo<} z{C^G#pZZ4HqsaRl&<8=sW0XbY^ur|y*^?prB9Z;IxZqMlhV|Fv9Y zXV>`o#twfh`0bwgMxiyPeQ##@J17=y0Nro)z+V9RAZXh8azoS3Inc?rzm1~uDgnva zF@ZKe8-IT%I~*!dB|779+$6&K78CC(6*QHa`Y_F2SHQzRM1I# zl!tsJ@c4dUTk4|cKX^I%hUobZvFG0nO`Q)KT6Xo`(yU))DPM}d@9inw=T_>a=!a32 z40x5IA9?HRA7izruTu2W=&O$YdGrHE{~~(W(GN!05|vje`ek&UqaTW1;OO5*=&pw6 z;phX7{x1(x_4WP4l|QQQw~jud?>NaO+IeK3`T92KqxufG^0j?;Ir=eu_c{8peUCQI zEk(!lJqPrq@YO2X>#y<8SJR?Hc>gZ`W`yVG!t)xTe-V8LnC(qMKNx)*^m~Q=W%N}K z%US3Fhg=vYs94EY1__eVVWfP0`K z`^mNZ@G;QIb}0|}O3|HbZ9ghSpI%Fx$rsCsUHK|SpIOT}@u)v!>^`;D-;1!ahj4uz z{`jKLPsHC7h5v3@_H6{+AAL^fgP;$Brfs(ynr-}BL$gnP)6g-FQdwMrJzo%6rN4Oe zNhI(pMSp*EjJ3Xe^foO<`9BqkEWe}D8r@%fIovt1t)pYJv_+w}%R%UFTWCBqLA^lhI1KO}zE@(-`Q zgalrt=r7jpS5ka?E9iGXXMgk#$-VE1{&z_3{oK&3_Yu(78acj|48Nsq?AVq;{JrEx z>eTyXdqCTLp*Mm~>QNrmb5&yeJQ9WfTl8GY%h5^ipq@)*{45xnww(bwsZ;qWQ;IH2 zjP0W+`$O>eo0aG7qGw8Ue#X$$`NbBUQ&cCf5@h}M5(_=^oz!`jTz?VhgP)K^yt|2Ekm>I-)qqs9=lHeBkFwj8rFFO=!2joiSfB)%6W~n-(K?EDzb0j<>+5P zC)=XsyjH?au`hch%7$?8ZdG>HQ12g;{+aZs4}k8E?i2b6IO=o|H0ye{q1nbwhNcgn z2Rd1=%Hk60{doejZA95S!QXFol)ffU-{c=YqivAt+LC|c=&kW7FqJvt_wmcDZvMuxEkXI>MO4Q4?EP&s}?lYoC zV|Qlvpp$J6W5u_FA78i-6aE5pf5cOKz7LOYqfWk3Nb7UcfC!uM>*&1RfZ|*MqQtaF-In#G5+qGB5kjELCZF!oZ)+W;YeO?eUobS=^-qS5+oiI>~rxlpPyO(L+bA zXCYpt=s%CLYt>Tpo1@N>QkMVrs8=}p;iGJ?DnBD7m)GuabY<=D zJ9=vEosO=q{i>s{So=dqSJ(b0=<8s^YIH>co3XC9Ncoj(eLQ39J%sC44{7S*i*5fc z{{C2Guamai0lGihCv*`Dh=ZW{VXL9(hZh+-_Ji`{659Lwo*%AX%kh&hmY=62=c^U*Nq{^;{Ue;)Kf&}{oR3{CytH8k7)3((2BR2G*|*WV@fJh!3jg4?M7MZ6rn z0rWx8)ceuMb-Q6Hwx*9(0W=!2l?hyP({+WbaC z)8==BPS&fkxCEPTa2Nph7W=q<;j0wAr7zCCxAqZR@>Po7-uD6}LBFH#Mn}K1?>&xw zS0BfRpQ7GX=wW_7Ec9FZ{BhonQHQ{LtC8);`v>s%*pIM{Uy?bu3i=>uwy|Mows9Zm zWV@6fmtfnMTGo&M0)CwB7r#9Sx<5Ka=pBDX{ilczcN?1e-(YC^@STR{c>6&^bKUpX zpp!PJPF#Wwr@0))`IEkrScn(fIEBB*{yA;6{2S<`ACw=LQ19(6`7`>L)VZE&qK|<-2$~;0 zXK3pDs-YRLL!guTRTh_^f5Td9Kh8m|eH;t%Dn+My`w6G59n)fzZ;~-zc{Z=T+?5w( zP8|9u{j*`M-@mN>L*TWjhyHmj{HAo7TT~X8 zVB252Jf!|}@b`P*UyZ7we;IVYIp6*@(Ab~Xx(qFK89L7MD@9iI&nEP5L}A~@sq;y~ zvj_A+(6s-0LsRE_3{9Q48Jhj~4nwp5ei8Jwc(<>T(aF!H=*eFHJ+3c~(eL!ddp=L; zW1IOZVTUosOHc2+UW-xwjJ~fp`uM(YI{I0C-*fc3zWW`0Lf^P)eJMJr?<~;A{}uiD zWEnp<34L6jk5&9w?=Z5oYaaAg@b^crlfG~R=!2l?tM`Du*3`+jlHswm9iORZJ^p?n z^==dGkN*U9o-OnW=!2lC^EyM*|8F-m{eLUyWL+wYOQ`pJ=V#XScKkgA{?!PBG+s|c zs^M(8(2x8L>&0Y<*Vrdn?}wz`=Np>!zQoY1cPHp%y(&xjQuJquygC78cYz<@Hxd2+ z47%T(>Amn%tZPE*dYPeF*Hwm&^L9dHRsR`@b`it88vOlcw)>gL-m2@DJE{LxS-%`- zXzD!K(9GKrLo@fz1)Xfytti!3DSE#*mVUsUt0_f)iaTSL=Rwr%41Yh~AHd(Ag1Y}cuvllH4DE+H=O zaB(R`@9bmS`NBPsKCUbGK^FH}1Xr;9F8tYCJp`KLKVP(sSmiCk{~WRH!$Ln-=(|Dp zqkoZi^fR>cB(eECL(}FL8#<1!@>8Z1t#@{^uIJ-#2l#P+R&?GXvQH76A2l>}e%8>j zPUXiX=zK~-=LsnLy6Ef^ok#vH?d%hszhh|X>^F3*Q~6cr8mF@qJ<5$&w3++r!;tOA zd5m{M(VXb{x#Z;Q4Nd)T2YoHx$-@`VZ`fA}r)1)Fp8BDdoc~MI@r;u) zSx^{*7hO&!)6?<}Zou(Cn*t_D3gf6vgIX?6t<>fkwT1H4mGWGzt}!hlSJ)ZA$bPgm zSKYI&IZ2C1luHIDijr=Y$;;Ft@&eb<0g#UNdYrFCqysKX7Tc@V<{|=KA6u?g=C;6y z!3`VnUvZ)~U)f1l? z+QRhQ%1m{0y)jc;+_bYz4W86Ybrxdv+N-M4&5Im2=&8{S(Qepp3ek2J7B_TWL1lRd zDkztCEUZj>K^Zg^Av96Bwm7viyXDfx`T|SqgGCNyTkr|>nz*UY%G2nj>O=Ked8$&c zD(A+LA$qYqJLmj5KB6TUC5;q%zZ5ZtSf}bLj7UU~JG1bFEgYAqlpFI)vkR4ZTT8Jh z)hsSmmn(R5-x*t2JA!|b7{3w!Bibjs59pz%xDV)8yn;@0l_}$RIkBaD`9&k@gv$2G zOD@=6o+zHZX#%;7#+CUXL8%12#8yHvRy8dDlWtaYPSIDyjPw!^{NgR5Z5L_bFx@lg{$CqLk`$Y%V1uj zSR03{k{!;m@RS$>&%$AGG1~|mQM^*GPA>v;nTB%s=M{La`w@2f)Kks)do|$M;__ip zHB|%9t2gG#mAM^@?0aozYg*37CQf5Mz~s?`jj90V%+xgh#${+8d*#Za9f4)cT&~V1 z24sI+9Ow9b(t1j6#Q(^alideo$SLjv@`6{823MIfH^dA}{n^9fI7d@khYpM5=r^p7 zgJYAP>`{?=I9O?Y*@NOZI#FtUtu>{Mi4;#%V~51K*w4u0y7M!VU8g?dXnxkIFX?G^ zX1ZZqn$97V9yOn28g-v+91sG!n>^0=5w#=aZ*(wMlXW--26`N0POGkv&!J0Z2(2~b zb&e6XeTiC|O-FUDYFjb}1jy@9+*GYiG9-u}mjR5EHZF%F|7wf% z+1)dTB?V>4h}EHh31sHn;&f&1uptT6)`OwWoH<~!t0k2MP1lFUW~$Rz1!LoCkxOMP z1Tc*Vs%Y$7T&Z){tX!`ynF~7W?O0x1S;87QvF77Kb$Vraxm@2nKZR{9)ugLGmRA?1 z_a?8Ib>RHs0swZa5oSTi%W0+*bZN-TP4<}8Ar>>WM(ye1Hh2D3Og1MLaI)rUKqm#EbQv#rRC~$b*382435YpxUW2gwl7tt zWeF_$hOiQtSV$EcF3P1;F)Wf<8=HiP)zL0v-w4fENVzadBN7AFuoVV}w>VP$D1}rUhoqSjlDlk+Ho1rR}lPYDX8cq&Xsw*%^Q5Od(!ti6d-i|(M{O{NxE#~qG=sd+T%U|T7?CP^sXftl?vt#w-To`yZG z%F0{=`mybVimH{F@>SKnvKlOmaT;aja?$KAFD^{$S{K*h&-&O5K%rUK$cTiW<6Fj5 zEjgbG!6Asr7uzLNfIJ&B`#|m^av3{8?jz=4%+zB{QEUcju}hG`NV92yG)M3ADy9yp zo>MXOCN_s!^#)R&dYOkQLfPp*#(C0tAz@6Qby;13+A>XuyM+z%{0e@p(S?~1eQbJh zWdX>{#!X{cov&a}MkXK?xW5P=wXUgnUC|W?;&m1%zVZrm!14-o$U=dFEORAp`)C|l zV{S0CT#kr4#RTV1?4hVZ3BXloRUV8ll#6#$#6l6~+9=DWP(!n$42{`_#BrA4?4Z`IiW~yuHkuU6r||os}({i&TavUd1tC zP|VogC=@)|LeZC)oWLhw1}90wnhc0^Dg>0HA=|MvsEi^tSDkHyBt{`X9${Xb4)W3(un6mNZO6_aGutUl!d{=Q;kIXO zwia|`VGu$wt4i)%+%3EQdCkWCI$?BD3Nu4uj5NiB)03-*JXRQRQgxNNswGP7%?-k7ab=Ym;T7=on7E3$NZ zzNB;)%PDeln=D_D!H!u?jWbx*gqlcKPF2Vy0@cOYHUyMQZL8GgawH_cv&ttjm8GSS zN$eJ2QPxHg_CeI57V7 zG;fXdu%;Jz;OpH&2;#ybRe^O+x9#GMHS|f|8d=6#9~&j8OKHsUMcq`x8>ad_bqq?i z>9Sruo%eM&;@-uUEu@gH6{wNYGqt!f#}yRr-)P~wGq*&$ea%1!tN?(ZNwYZ$)2iHD zXwh%WS;gT9nm7dO?#}LNhSy}%V&q{lZ<=>Gd(cF2M0pzFxk?j?D`;7%;l5yFo(Qfe z+XwZ*k;XhWhNk`X8A`AaG$jh=QG{(If&Lhn^mG8(W-5CPpY9N`Y|)CEjUklnt>Tyo z#t_Jw?I0BHj)l!85IN&Qv;Tv_T73qmPgLG){rEc}Xo@TsrAZsvGNjze+Cup#%f&-k`-WDb-ux*vZOvdG*D?^7@T4*VZmlLNO`1S8ao?+7r0-K z95p%5^2+pdwT`VoDK~k~^4&a2Xo@xUX~`DW#3a|FF?!SmMM%KPGOr=^%zN`mwZv&K zIe|Am0V}a4Wse!ce+i@jU9y_RJD0C`6D$yaMB<#H?Ut*Y;L#;?g1yRKa7l!9ndh=V z2Y>=u$eW6EhQyh)XHs-iG5R( zBNCcXJeh%%8v5@}DWod104argpk7L0L%W!o7+?p6Vl+%@aQ{SuZwmxR`W!ZUu&E6w zX|Ked9B%SKFhy{y(lfxthCNPHCje!kS#>Z^pjtxJB9uLdj%?Ih#eSpIjs&bsvm+y4 zpfAe^n=;)Gkvx95zztXYKc*udwq|r_E8teAU#tTm_ia#$y+s)xW%HB+9L@}pJ1$4U zvK(iOP;5?JA+3-uC^p=2F_MPdIOzj!b2JFtNF5gQXi%aY8N_lNNJ25TJu3Csd?XdG z8S|Sia%kdJZG~QpZRUc2SB-fsmyHXwO?owM0>=mlCuF^=#vj^3m5tlUUc`z`Lt8Ez z_n7w1`pt#UMAWu7dC@q^G?&-B)*4S)i<4K`uV|8KEHB2bVUl}oZMtaOWSYv0aZ7pL z)^BOkRpTXXsGN)E?2KLZMBexp5}7k!(QRZ(By-2V5@!#VA2_$JLo5$<0HW3#Ji5o( z76=RBEKZ;V2l7~=HxO`?7)3l!$1*r*;}ExvS-3D)TewOld_}HWx`KoDY%|Kn@Ftu) z;xbI>TDBZlY$kQ6)Ty3l3T1LudvGU`2U`Uw7(7dpyix;bQ7Qo6@TLJ;3|V$|g9~J^ z;=yMb!(9Q~FEhL=u%kTPEMvG_abx(fcs4w6BMdTgI7zLWJL4EWacaez-Bn+Bv^IC& zq~_pkUPR(&)!fvAEVK*z^bUtHtYAPfzMc?g)F8T0BBLw{L{v;h$!%g2ewR_mlf#@* zsJJzw4BY$g$f!Y#58`3CK%zN_&LtV;3XpS>QLez|+#qsIGD@zvcns08!Gsz_PR5lw zBrphfGNA^EN0RD-`2=;Gc%|N8It`)=WYybJU&bsC9e!nYW|v$B4m3m5Ai4~WUm$(r zks^19k}>>nCloqob3&mWW)yHDpd(E5$0#%IpfoW?>G27a`ePK2O&})|i*7{E_F4Eq z!a0P_r5R-lkaL<*w!r4x5OPg3idS4n#;kXPSv7>b)aY7at)Ax~kX1t*GFw#!GYcvi zY*&9UyN1vmvg%K*HzUKKr@2y_W!OinR_1Xgn{%yxlSHr=x9)I3W+1u3iJiMU<^ndg zRDyFl1mUSYb$%h>bhm~!+jP+4m^qURbA-EmkS}PBc!PSod524(Jwfixsd2phB06XT zbchXZYZ3K=Ax{&&Zp3z~9-0R|7)zWjdO1%EcKBi~1Rv0X{%WzD*v zR~4nyW8%m==e8c7tE*~w%R7#X2{GZet-&yal(PfWW_{laB!};TrkohO)JnLBnq~3aso~o z5}5kYWCgTwOJYN^4M?5-MOSL=aa6pXayrl1oN0Rq#=zF-=;94}WuFc2h@raQ6mUS( zeqsx3069WQfJ8QK$sqbl+*`LzO=^?|(!N!R@S0VtF~P+N^@^J?9{O==QLeFa%Kh89 zs$AUFDkeS1iScBG{emXNkb63Gu+d4I0u9aXN>G?-M|$XZ|I~(#yCyB6<7g~4;;MQI z0hZ9Y0t8n==L&3au_V*b$(76&P3MHpEDzx?nh?85fICXrr31>tp@Z@?mrYM?!Vm}y6P=y*cgJSxFP5R2E=2x29xrs~obGnAc#TmfP%5p)GM##};5 z=aVa$4Xflu5E&ufa%v=%ux8eGoBnc)1E;|fJ-afQ6G3x$v{fwF`M4s?vMJEe?9K;; zX%U3^@pez5Wv9DGGWfl4C=Fv^-KfUms<@1cROyATzyb|dV52;Q=t>ObN@mk`=EQIa zIU)XXYSa*eIOYNt0>U_p#4u(2JrAV#iaHmH^t zISXQ(8a2d#n9(4JspUm39mGH^7`ZV!v!vJ*XlQoipfD|RVn=%9(mLN*8ipCOS%$0P zxiLG(xdMw}T!9Vpn8h%1C9`F_azZ#}F^p5Ah8PSp7Q`^SazY5@X|97&F^t%e9zy$=E<1LPrGc1nn`*c!UK_VloGY*(#ueBAk6REUS29~QmlM8m3u2ra zHN=3J@gRtq%LyNpr-ct`2Zfn-1j3ir4ad{K%(%@rTvhkk8O|2q z>2h|n%&-&&Y^)0d7S9NGW(((YLRlEFfX3+&V_3H#f{~3^MFnZDgj_hPypNS_SfIgyutI01EqP&0>#YUe4{OaiQ|jCXIE)p8(?p4eA8hN z^4#XEa)8Z?(q{mmj)n+Hr0&lUkhLhXbYN>2FV;8u&8+yTe>3dAnQG=xX6W`JGL5BxtQ6;YF<#e z)9cw12Nl(;X>Ri~HK^6RprV4bph7MjRCCmcsce_N#vU3LXmFsDnzK&L1BTe*g1W6P z-*w+nT~6M4LrfNQsF2LyZOkq%|ww#Wi~YsLukyfBQ1jd zt&ak>p;IErEpYXlY*RCW+|Jer#zhVR#YHa8+`-id%EgRk<=u!Z3_JYe)Tpzt^K1y) z6;dLIdx|*`H0UQ0!Mr<>`1)1CJ#kuzQJGB*L=YNVBPe#HMKI+)WML!~`*1H@1BvVE zFYaq=Ambv3ec~b)Ztmb}Amw64>+C^rKA z4%~DapfKWQ9oIHv3ysQbYABEf^E6xU-H?n2u=LxJ1?)(t^hxf98wXm9!<}stN>}7y zkL+u+=VGJMaB)l5gwle7luna(Te857V9$~`l-Pt;_qn~%RP{N166#w+nRj2ZFzO~9 zx1n!rNdlfkVB{vL_OMpC1C1GWr1i zg2+u>4Pw*&ccNu^cP9(n3f3SxHR>-^ZV0$-&1-b<=wd~x?{$%8jYkqXPUA4*(0>&1+w<=wz6x>Lxp8dtd?0yrn{7ADoVdN1z|CcgV?hbwo)+A}J% zsevfkbI6Gt6gx7bm^MEax#!&)&iF{OY)><;+{xDAH7>GvhgwW~EZ!-`CzIu3MjP{P zVix0*$xe-_$>5!$+wV-lJ9+moslGLwd3P|2@zLZoqcWQs2&X-poCv4bkr~dGp2_X* z)=;{$$wk?jW+>h1WUt6V9k0j*+#ONYiy7_9yLDMK-x#F<_85VN(jHPSx?RqcQ0CpZ zr25uS=H0d|x--hDMrAfN5K4PUIT1>+BOJ=q?um`(l$g4+%0=0jW=!2_Wv|GgpP0*` zA9rL~`7;`tce}Fajx5J&G^W^QHbh{TC+}t@)wjkp?^b1T$e|y%Z|@nE+0;->)6h@i zHsxXaeq0?tV#FV+!x^K@koNbSd zd_rO40G^g0ZrYG|VgeoKGLU$f1p<~xm;%Meet`|Xf@6EdYie;I z&8T2_6(ReQqt?+JLky^&r+Fu(>RXUc{mtWY`Ky4-eW$JpTIfJrvUQ?;2IeguR+ zMTB2eNf~Z|`7kH@p~jE2`cKDz@d}_xaJ=KYpeesVz_VXqvq6!wz2didB-^%N#1%yQ z8r3F3XqGmO7{x$6!MGbV4JU^*grcv=I^EJXJ&~OQ24v@&XEOoMsGM1xH&1~~%LGN- zUM3*g&6%M18!Zyh%Xd55x&p!8K8MW}1>W{bqW#&ng);$3b`oRmL2!QJW+UG@5VcuP zI1?0%)79CQ>gk7!=~{t#x~1(~sG&^W>w!*#(R0nSneg9&?g;4&m^)pbw45?eZ{&}H zH~l9kYX;@n&B^5+$`tnT8saHGl6ErR%}0fO?xQAR!N5K(_FOw=t=pC{GhU6CIa^am zjiUTQFVZbmEmjE<)Zg6gxH`=`SDk-C1J&qqVSA%J(>4E`F8^jRbm?rJVtO|=r{*E+ zPz2ewy@x#^-DA9wjgCH@S*K|x&jM;nGkGu&!pdt1D1P0UTSM_jO*3~@(@dV=1AMB* zu@5WTY!0QSP|++VVlk;vQmELpn4qe_s6@_p3WJGyw#k{8 z)clhgXlPK_o@8h>PY0XW5Nn>kyQI){NzB%cy;%Rbewpawuvu>n=Gg2jkd8g0zy7Um z&1-b2>6zM{30sdqYR1BN^K%bQA+>ch7jOO!`?cv8y8J(J`x!53k(1X#&6Vh$l*|;J1TR zKXSvRP+EJ?IyublY704V+-XO1E@24I-ZX(S+d2ux zBb{$=_IQ}!vaM%BlKZkkhZCOT;Y zTCO>wRd~~?S7Rta+L%W5aCmll(uDSB(%qBEnRIvBOsdaPu~oXM6oK`c6?A0IRH_d~ zu@$(vP3{*lVT@Z5La)M*AN|>M_azKo^K6PoczCf(udWypdP1J9;yl5#>(ZZGv7ORFBQKPh zwU!K4cA=A4%wz3oJC4&W-3C?aJ4RM<5gyN>)2ic3*pNM~ng_gKTD4P2 zV`GBL4uVaA)<>-%z+x-kkzv{j*~&*j+&nMPVqv_?_uF1g>16KF#xXOQo??BgTLPP8aJ8OOOp)?d3lmLS*V&u=8~Nzcjrf6(ncD1Z zxgj41#Q-xglA>-3&=+x#Fdqzt0-F zGci@Wc>sjZjF(vJFy7{<%--p*D5h| zTAPx}+!;=7QTJZV+9pLS^e|;Ntv2V-#g4)dR zo+iji#t6QkJhd{vgdZl>kwl+1z){l!~gTya8db3k&T8c!Hj@=OzpV3j+(nZ^p9-d2@! zX;ro*xg$l=2y(|PjyyfDfZK$M87nI;2}y1m__KNo0^|-^T$LM@JJBDU9-%+G5BPVq zo5m(HEOFm1F)Se$TZbF7V+MEFt}7jx`(`rSxMB-l2NMHK_J|9`#`-1+yT)ksr*3H?emn z>zJuF!P!$!HC5Pr6%D9@TW>m2*gQ>qcfUn5ezaU>C}LEzT@~AFl_H$X^~5SXO;d8T zJMA=QV`?bp=Mz2_>u60rWa z;Ln<2-(`cQ$&A*xF3nM`hs>?ZH2Yfx=4(v?SG?Rf*-ly30F!HNxudqHsdd&Hi7utt zW&5|hb7xVq4Vj!A4U_&34utwF3}_eA-9RXoqZD<7R0qdE^BjzpTumANd<{^aO54N^i3T*zitvjWqrK2(M4wV5c&}gL_v^%_Dq z$9dQr@UK7G!;COzvI0Bio4wK4dN{=Pw6rll)%vWF-|ma12WdWI{MYARr#Uob8p_Im ztXaT313ODBb1vZCu*{7TT^u6p*h^Uxg4xNIAAw?B>!t>@caFug)(n?>#IQ&ei5&VJF^#&9%Xe z6ULmG>cZmkyl)TCL)DbF7-Y&TQ}yaX1IC!oOE8251*k2T7gpx0%eCpUHap%mk{{2m z7i#r#eW^NKtIXA2Rh`+gxww9CjCU4zkJoPf7x6=4DQXHsN#V(fnc5Dx)+oUULM0Y? zWGER?87o^DaMIebGQ`GItS~S+K_le1Yn<^x$#KUoqWIE&6_0*vPqr`sVIv{Z)jbs) zSh7wF);k7KVV|5>uFTZ-wAapI;hmg77D9Syae;x=`s~^~!$XClFO$^Ju9pi#z79H@ zhqgMl!;?vB=)ew72kqEdVIWNZY0LkGqA#NwUb#}MHp&-OE^04?g+Z!tLaKwght9LG zqXRvo)RPcYUD|<-F<6~qVUOPuH&aYjoCl~(C4DXBxkVhuY|k~ru?i8>o>8419v*K` z13Ohs_(gPzqpCNW1UrUwDkCA%_$lg@xyAM?R{qI}#&Tt;%@z*}FGOk!dlztQwLDeD zSIesH)ma#B5<`#nrV({HK#WAs+_7(DMX%tAPP)5mvUnad$MQK+1EY@N1|YG!`^X!S zSS`e#729JD(>)=*;BC!k*bsnF(51UWu`aO$RqK1xMs`LG0SqNI1oOj3QB4a#2xF=O zPE9i}zu{TyWl@`Flf5aEoEYOrh{7h`x6GVjRexb9DUZi~=1!}bl6iA!N@Z=#qbX8t z&7moBZOxx4ayfHnibNapW{Oltb7q=+C-Y^Re9@m@bLPr4`5|9EXP!)x?_iEh6Yq3> zOw-Zk+?d%33LVUcY4x{17p6$JH4mo9wKoT*2(rS^{Ffrq-rScW*yg;K9hu}@2WZKC zXAF}-IB0w@xs zAa$6%An277EV$f!i=cI4Rutp(Cr+t|{!AY!gmIG1mRX3EVp+Jw*#O3!Hc9altjPc` z@s~!>9w4hu!OL{l;AMKUWAHLP*$sG^p6m|1plR(a{#)D)E5i%_6p3!Y3+(G;!JkrV zM~nS5`JTWFQ>Pd3!uE3&>xNR!w`7ws6ii}*Cp zv18;e;8O%U1~1c-U4j?7rmaPL#t;tq4DiCkas)4!M>1v8&`W&mt$CuEp3FioA(=e% z5|XuT%SJCD=^XSD5^V>)gyh>pFF_5t=!M4~1vltHI!ugue@bRZK`%V&C+Nj-xQ!a@ z(C8js^Ig`~poh^5kMqS=IP`+5)r96-Wv%+d=mq*S(>IJ>c&;$ZvJiU7{;EDUbL^gH z%Ak>rUWjDP4n@u#i8t7Tyj!{gKf zVq6>5qQrNw)AeS2Z4rkk0-Y%v#JDFT`+G4wx_h3k;Fh=V42GF03-E#0Hjj@BlUaoodOuv-vfYwc+UU^I(h>zP|yp2 zfp`x9Mmt950ER|)1z@zojsOh0Mt1;)uIUB9Kt2P&;LA1wVC>QElmQ@Z8wO&TBViVP z3CZN)myoP&S~h+ON$22~kZ3#jB_!V-ehF&G#V_Vto-!ZG1_K{AC-_Akn+I&cFI)}Zb9(Z}a^W<7ld@9;Q|}tV)H_Eo^{x<1y-Ngxrgep2U}c90 zrrs5Tfqgw87>2GF1S9o(2&7X4BlUaoogx_4-vfeyc+Ut1I(kDeP|yp4fp`xHMmt95 z2!=*?g^HY(6p|w46N)B%QU*e zGO({FEW^l(b&ItMScuE0yJOYnlGbp>8vWryIU))jbxeLaB} zhOQUzBK3RVqf_uA^?UN2f*01`19*XW&)@|*dIK*|&@z%J`22HjYsg3xerrI$1a(><>b%6E&-Wb>=KZ*O$%U`fOH;q35d3Z zT>|oLVwaGHT%x zQxLPOYY?-ma}cwuD-g4*OAv#mbp>KzWrrYUS63hg_Vol}7`k3SjMVRekWN92)bGi6 z3SwA)4?gyh>pF+mOaD8?T6 zz=SBsVH~hVP>d@8tPvFB3hW-uIN*$+7`YOf(|6^dm~r4CK`~B~+9HpJ#$)&FBiZe< z*PHLc?8-qg(4U!(VH7iN@l}dt;TC7380ZXHlYwIJ2&EnCylt3q;Hyp%%v{$9X0CGt zGuIV@nd=h4plMwp7+BdMf|=_I!N9(r5DY`t3xbjQJp|Gzf|2??`A!iG>+b=&mxE(iMP^op zflOh*Vyral!tKt6GSnI}D1>Fwwq*(fz+0W7n)$9#&3xymX1*&_Gv6huLDRZIHL$Wn zR5RZds)2nyp&Ev+7gQtld#I#SR3r6!@|~g@*53oFfq2iT20D5}HBitCs)2Y9s75`V&}_xg$QG3Tr5sFpx6tH?z+g#mj6gj1t|5kNcwaJ(X59zi&95r3ROx%m6& z0&(*Q4&l%>y&xROXCWLsi(L^;=5G0(bc6%JjKP`$83-pNl#6ge!nS<@gcB0aLpUMX zwh&H8L7NCCs3ITX@Yg34QebLSFu@-zFxbTv0rV)siMi}XPl3Nypa@4UhUWP_c?gF; zc;J~sUB)PL&Zi*1SP-rw2jQTO%oNQ*IPtG2xTbpMg??b>cGC9pbkUV3)GSNJ*d(t)RFo<`A(q@ z>+b>TK)h$D10B6V9VqAp>Oi~)sG}XDbEre3yMj7eVMkC0U86gwL)Y{Ibs(Pwb@)p! zvYC^)nZ7q2>Oe4K)TTfN)CmdYLYllk>(7jBfnOC=9Wtv@`Gvo&4o@kab~+lHnW{0 zo7t|A&1{#*22JY<*}%#Uk;k&V>v$#;ruSbq=52I4&< z8|df_*+4-r$Ohs)ARFx%og*6>-4(LY3OhnJ=o;N28@i?!WCQsuWHX2rAdyYxH*IFq zfeqv`W(^8t0Gp6dF0cs++vWv;O-MWs*o0);0yZH9Z33I1ihN*$A4f1q0yCpx2>#-M z0-Lx9SVw_PT;z6o1_5yt*vQ4u^gf#lYygrJ*f?FrD7%>>KY0+YBM;aFaykdtxSwGt zq?wm%RTi+x{`G~~0I-=^T$!4yI%LBiVyG7|X4RLf)3wT6?Nu#5Bj0jtX{KvrGt)V; zndu7I%yfxt(6p|Q4Xo@C+01l>Y+zqc$cCZo1=&db9x~|^*+~7Ke5c5U_4j~mAl@^w zfsWpg4HWc(Y#`nPveAywIkKVAT_GE-up?xHuF)N`p=)|UHjvLkHh74=Ae+o%#WU&1 z267q5h5{MLCM1-LY(m1ec>!b-63;_6A=$Q&O-MnT$R?;FAKBpd5)72U%%~uOKZ2mh zCN2WlQDhSrxs4tC9)UqNaxpZ&&*UK+{)mDi8>h<{WlsmmuONi$$U!!!BQr(wkc|Ug zY3Aixm5FRJvDQog*~rnGCV0aiXy_E)RJ(>Z)z0BfwJUg2?GoOgXqMyrI!u z!5gixBY1@YkGkcSj9c zJP+Q4WZQx_Aq8#1o1lt(c!Qr)Fn9tpqaq3ZMuNhdxCn?x;Z0oRws-Jz1qR;8#n2>Q z&4V}mjRl1_PM0yto&&<~GlYKwvzqrED%6pgqB-!!{cuAe&Af2S0lKo_P4@3KpfT|s zsoKKq;-;NZWA9S6j`tOO8GNv~rLlf!U?X}fc3E+3N=geOT8h}Rw5X+HT8QYfa9~5^ z$s@if9F#IEjR2ET3ym;B&9cIVsNPtvE$mR02-^C>MpScYZN9pFZ@p2S*9!ov^|4Z= zQQe|OZbTi$33Azj!6Hi*m#WK^#^UlBTclh-BwED-S8SY|WcNO!wWsicy^eOCER1N| zRrZ35MqwZ}OMf19sb+h7vs7EIPQ&GUCl?yado^4nxr)Sr77a+TFbXS%Bza!2I8&RgdDn{IG1tzX zp03vG-nGGjAzpjo>}#G-(c|Av8-GHp_%k5r-Wzt;uX(c0QW36D?-P z1Ki}E>FQFWwzyE&eB^P7DhjvnU1$J0EH5uEZyDH#f^#Yh3yX~xE>#y^xYAf!X>2L5 zblbw!*sq?sxYF3UrI=*fwm_~ykL#Sp`T5Gi%$A{z`01JI?s8>rZgHAp(CHT~&Qwp4 z{ct2XET|WfBLzy)PfkM8>>|E8=98 zHZ4dcj99(`>%SH&C7D~T6k{c?(JhhAS9N7HzQ8kRhcJK0Lw&k^(2n805*Y_)5CF^p z?YF+vNbP#^#JLW4X(Y6`Nv7}U7<=jr-xfNPce)sPI8#0%J5J`u z#IyG<$o0plv0(C&?L~NY>n7?DJQN#(kV;JmAH!y74*8RBX&?$CKva7z;JYXIF)(SKb7{!VCeho^7pW zAh?C}ao4T{eN%kycxj~&)DkUylysN0X4(pYb**PB|V;WaIr zh{`V(a4HC0C*+Ow#>|#2&0$}6=9Vp%w>G~t$Mbn`BXMk@80P_Om?*!XTyIpC1p>00 zVe~AraJIHktM6prXQ{47P+VP@DKE}KWO2E&LjWo-j|e<%39T8W-4FLkOwCwr3Y!|< zC={*TjEl)LBpjkUiA_Iyk&RMdXS#Iq%c*FqTg^I|e1(GgjKZcMn%-fXVx|<^2-9Z- z^P=wv}dQorp!ic&~DI)$1?jVD(cwslI_YJbvfx|_=zWWGISN`cqU9Z>NPU4quPk^v_{g* z2=y)a3=YyQ5WEsFM}}{Ow?oM+UCB=pIV~(oo;3gezih|dsEm^-wgIf z)Ye7}beG9>=w#CCZ(_6>OuG%>>D1m`F(POlK2TeG1}AhRGn_x#k>=v|`)6iOLv?@o$s`lda(Co>bt7k{D2GeWtHBCmX9Xl_xQ4Zi*-B z0NyGX(3%{z`CBMn1V+sY#F$~)%O4ZrgpA(Seq<7`tGRFC$=-go3Z>%O+OI|XRK|J| zwX~4~+NT^oyjt)>4s?)lY!m~80Sg5Ijqq9vXw-+jW8ko$m2Kk#-?|V;zDQ09yin`2OvCz*tcX1eTsfE{y|5P{*qWmZ*Qb~D>33!>h;==1sPlU zU}BDO&gZ5Jw&r(E(??Y4q~@mNz*Kcd&D3I6X{HuDc^ErAOu<6Mvp2`WVX;T|1<_(YXW45xAC{bH(>mD-=)y8S=$L~UQk#Yv3xUDX zqZFHn{SB;@G(;9mq{|F~&uaYQ9Hv%!-gvP-UW%ULT_MPyQ<78ya znXW8VrfUt|oXfY=vYU2R=a-yla>&wOt83GB!=lINM3bt^SL;4#PE$q=ubF%8WN^jH zjo*`4WKhQxGYvE&;Pj-b?NQxut9h`h8~P25F-=UW%N$QsA2I}pdbzT&qgtNcS)IPh z*qb)zcc#BElvE7s3#hH4d%k?kY$%g=wt$Xh)%+B0)R)lT}i2uEAyyKP)E z0(?%!ZILczwnfs=l(8bYXvj&SPL1)v7a&z#2OT~;&`&&LNYXhuh760kww=PEnEv21 z65ad*$dwirQ+Rj{*gmRzpY`39B^``#(8M<-F?Ir2d-Hf!0uNCcZX=o{$Mjsaq8q9? zc{?neCTTI8&DQ4T%1H^knShSm0qBqb<=D>}FZ|kPxfuFwsqJnQB$ITv^#; z+?zzx3HO=^x7Ys)gJ@K&z3r6KF@@GmL~;*VwjuZp%6f5Z$Ul1%JY}=pKQ}X=M{Jr7 zxtJ3+7gqq#^u7mfNf*r-n{#&7=5WV*fpc>Wfwu8`b*7 z(_7Bf^LF(uOG-56m$oQXzI=OQ6nA}>r*|%2JYBP#<#N4XnK4Izgm*VY=WN-GZ3@ z_9BVZ5)X`-j)ZL>6c%`@j~T~fvQsOwv(;s|Z4BeZh6of72x{txwm1kf;8?W@^Xsn? zy*Qw2bAP60G$9LdVAl3uyTw$-R|0B{y4h(m$I%KrWLPgW4bggPkX9>dDe&MPx8LFd zv$+!&*x{O|*0_^tuQ+g17;ds;+r{R@T4IB)c^8^b3=;GbE0k%&oc$=^=$to_}fOH=g)^%T0}fKL5#~T@6ivhu^ppn1s9DA*8fLhUtE8w-6_g zc$lGxbw~CQM;bs+^`hHOlP!seW=nuwGb9huIDH2SlrDmqU-63e9TWIoERu(tyR^f& zwN!Q|8Vazg_ZG)@1nfv~ih?zsL}XH%Hk(a=0^TK}1s*44Z+AYC`xgEQ!A@g~6Rf)N zW-U1lCvs3jfsga>O)*20G0C{OmztLvO*Nl-s;SxZY}3dB(7c4&el{u4d!(0^6cn<# z_Kc*dq^YjNNzfj03pLhc^U!(wG}q=H(`tS`(U{(~B@MMZgZMUfA}#EgW8QiEQo1F- zV|~^7VRHcUFr*9i|1P-zHetiaI`34o#2HHV8YWC)tbkG8oYhPCE>s(^^m8_7{OpOz z=Jbi(;#tsBubFFc!)dV_dX4(FmiC$aMEj__7t7~s&T>xW#&2e`&-FJA6-T_o#*by*P1sNh;)w8!@a$aI10VYj#0~u$3v{%kZZe^nelLp({o7=S**a!8PPPs z!H6ESNKbMY{lG_9{n|Cp++w}zmRK)1`@C)ESXBMO>iqTwK{~&NW+Ap+nDM5yMdeKk zvx~elzG++q9^2)ViFO^9)$$ZT{bqNJ6<_0nk+BV_meK}cbLh&TEpuAb9w%#QVgV;T z#CYtW0%z)q2xW(_A@#;wSs^M~(zIaErHi?1X%{d&;oP!-u_uQMxXK(Y*t5fNfkiNm z107%b7Qd1y3m9|7bh6Zy#RZ8KO!B;D4AF+|%D`z5z zwNyjvG&HSYMofpdZn7382ERND?T%HGbbcBXSg2ofdvX-%>0(f%p3Va}!KyP?H2-gR-vS<2b)9=gBMU(Us4ygk5aNIV^N7)m zWg~$hehuJYjDsXY3}ld{u{B07^zb8r#6_lMqKHR6xZx5fp($UQ}cA=#Zz6VPlHsKTb|rbjaf=uj&u-Q zc(2B;Gd41E^puNdume$+juh#}Tn;0Uqa_@>(T;eKi*n@9U$7rz7b55Cj1-a_7RnMt zf8mY{1W~r)6zs_$g%o&MyoYvWXwkNtefXS1vafOmrbu6g7KgjB!^8xXhn9MCdn>ql zyc{i(&Px$ZH@|2{fYvy1Cji}F$2Yb3WzLU-CT9W8M_$;2iZp`aB+_r^P|Iq&zkkD35lnxlMv8kXXJh z2?{JQ4eK?O$D9;XWiF?f>bjQv*`P9`<;JN-n`5Kws`qf2Oj$-j76m$OV2I4s6o}t; zOkluPw|5VxTd@fdHt9ecoYwl|KbC5sT(=B04q`HPd0A3lbz#}*`@X_AAp7vuZ zVj9gd#R4|DqRi+hOc8dRb%_OxbYL#7@P;M%zL6Jfr7)jd5g}ut!exQ|Qbf>Bdn24X zT3i##on%wd4@$+xBxD6apa!KcFvtd@O9G9X>TxtF!NtBtERaerf>ip8`SoAYce~*= zKAP{GUJS0W+;mHU@Q7)AvSP}dGd5aqL3gmFfU+HEE>(`7zz`?0rXWLZ10;_fc=UC* zC$oH&ZIm{q{C1T)&Xio)l8T4S#<6t!eMR%hVrKCSGF{z zmcw4QEJme{fAXjm2@;z6aYU%RH?|+%^l= ze^7C>Z5Dd0X!+BffVcpnDriV8wYv}5FOgwCHm+)gu?V!Qq}3$+VIQ^Ow9{Sd-Lzp9 z6%DflE|nt3=Ajboqoyy`j4ErTHJ9i>Z7%)c{=UHs?KS5#CH)?1B@)H$MAIxA>gYhW zZ^kFe{aa|tl3UBEzV1%hd5V>a`+3qsPj$<>>;%5VArpuF>2&WJY4sAx-?@fqZVeMw zbC~se;nj^4Mqg*OGEFqVhH?KB>t?`9MjF?YfQktzzvA%g%3kb^Q>>auuBA$^P*vH0 zTCioQt_gK2LQIDvHChq!qbotGqfNZ%i|EitnN{>+uA(oOD!MtmiVo!r9V;-uet9Md z(_*?qRO3~4DR*AiCUqxkD*YeboC)b@%o4m)8Z%g!KW@ z@Uey2HK|e{)TGK|CpMDoN_A&?GSXLMSq1urkX;A%ghV2w^t22m5)^DNedo;|Y{59B zj;G#ix$PSnc4iS$lC_A(xrJjii5pT=SF!`OB`=rey2#Jh{yyjtmRs|>@2RaFkFKX= zn=6)8M|^1QPfxE<`(e`V^2>wI4E4pPpo5yzEA#Dh;cZQMm1>BzDwL@OMhHsve(9qv zf7c$_Q742+wij-bh}sEUIajo7xT7|XOhfv8+F=Z>ibOdZ)jp~|BpT4U;OZMwC(u$; zePeQIDy#2Oy)fJP4NZ%grQ%G96Qh1&==)Gf42GF#w2`_NW;06q!p~OONojz`v2!mP z?$SfHnOxEQ3pBTv59Tf9pR##|1bwiY+qF#CPenfmz4%N6zC)CrpU;RSMP?cj_yE!EmrenDVqA65KRDMw>~R-zDk3g6 z+mNtdNQTR03bPCHDA1iY-&w||Mi$x^Pp#zbcck-8pKLmv@Ay3GQ}L(yo7x9D%hOB@ zo+Z&KMiYB+s-;=1skA3c%sOB@jNxv7R-&RdhNc;4aKuhE_yf2^wVisqb7*j%IyQRL zr&k*q$5^)MHcVx8meXCJZS!q+0p?`Yjmso6={q|&GnId_!1%YT458c1aM zBc*`~lRD;3W@GHKqRJQ?-!0K(Db{bNm1a`K(~1D)n1&njMq3l~*`rmTVgqyZC8VQH z{=l3w_&&Lzk-*G2wI+-;;PIHE#-O6&4zw?F%M_||D->!9CHk?uF%4HvL7%nMBy3Nn zv$I=948>mNbjO1|?~01Z&cdQ;3u)NCd{ZjblkUv4_Zs_1;|bUYg*I2lxM!+mf%&sT zpu8-_%&S+!_R+xj@nv_Puu z{8`QbLs=r=VTtBce$vsZs6=Vi;rpV^26V5jwOp3Lv=WvO=xVM6ZQo!P4L}!~d)n_z zr@GSZWe(>%HCdS}x+*ItN*QIeoo~a|NYpt(70w$b$>IsuJa-S-A*KRTLY141s;EM^ z&32pVrUypdX_HViA{&r;>~vRtmSg@qFW03NX&W%5o6?w{3-+s1)C@2)(=vrRg$+xq z98?Z?TC04aQSbf6^$ zA!!p5`;Ibz6gWlO+Ld1k!2$)uF0&=lWRONb;fhMZ9l}YO-KS(@D5pM2-}UadE!2LP z?>4`?Grib+&`hY7nRmGsg+}W9DKKYMjpQXvh0G#`^n5CwyIhO(qD|#?Lg%3u8f*;r z@o|NDtzom$z)^;<5>0Cl{23GUX3dx%*6x!i%%Ej{>ms)`9I^%}&(c<0Kz0N((0KqS zZs(zqgjJ@J1iJ=o<8sq4&p9I$xit+mnI@OoJ2wmu4ppE&%;Z&w$TKWWfd;qwOOEr` zHFWiLrVdZNqJJfX!wX8*o-q(V#$VR;9$G-qDZrL;OSHJC<|vy-=!xZnG&& zo9*fvU!#Nd6K!26<2l;J<-x&xk>dcxKw$5AVrmoP!qxirGOfJa#qiRJldFUntjsX7)*!%^9q)_mCD#D=;Q z&9C`|joBnLA+@FvX~Br%P^JStJ~NGvC#<8z*3bGG1wA)pGFQ+ynLO~JZqxi>fhcyW ze<0I`&3d=kwk|3ze+TK*wJUC1vUo)*wLEoGAEvl$SeCpjKxQY`lETosH?uh^KcfhB zV-WNTdcep29`7Q}Pgv*U;dFVySf_v%ZR_%QgL6hb`AN{>#@tfCnU;JkQ@VG!M?S{M z^sehm^$(_pJNvG%v6>y)$ty*GFk3>xM7yMYU`}EIeSOn#Wjt{upRkR2^0w?-BL`|n zlXcl;v#Upwwb|;~dp%q~c;TUkHm&vM&h_Sc18cqR;mrf>J)j>s5~(VD#~bhDNVVrh zA`uG3y7VZXn^(7t9O#}%?j-s|a=Zrr#*(|n+V*DapS=SQ*;UoqJ8H+0Pg*9%lCQf^ zIGjMYPGpmZ$8J9yARHP?9?IS}yV}MxvMYA$ z?ItdWK{JuOw!v#%HpyNfz-&zNH=BHWEcvz#;0Kgm&Yu+%$=4xOn##q}S z&-uo(gwPyG!7&vLKkkun7C^2O@joWzYRu1)ZR0~N^vI#sSqAO@v6wfStjEi` zZ0qchQYkM(UIclv!Abs4Bo9%Zkj@lQ0GlQRUOUoNO}4<1pbZ~d#%Z_z3)+qleVWNk z7=2oYhkSjyfnp!6A6;B~(eCFCSAkz9c*MBm9kj$(FqHZb1)GFsv6C>BDq3E(T-kEX zy62IUlZT1LTqUqFWp_}=A`T%hlzZ0#XI~)wv>IGL8fB4;?5d`sZuJj}pR618o_nJz zT2(A~a!;c5e81m^aG`A>Mo4s*tGjh+{-q1-L>1f;A*(y>D4!e$R zCTz$bAJ`7}6G^(`-xIU&4+d7u$knJkY_@OH#5pDS)NNmadt!A_^~heeEqP@bB>@H} zdC+&6+&h-sE4gq0Ax|XlSL0zF)n;MNl5dEkH~r`jfC53jNiQ6sQ|UGG&ptnzJeaN8 zmj?eNm|*zeW8|KLESH0k@oaMI{u3sWTS-qxlUuXNJ)_Az5_G=DSI3gC3O`!ajiS~| z?xtA4&KT?`M}~;4&3qj%DBmSadT%V+OQXq`;B_pyTWR2%>`C=#l_fcE5r>*DHLs)a z&Ebzr_`VF1yGE0{5dOX|Q_3E_8}hZ)iFktWC>0RBmQkmcB^i<&YQYN&nxw&;OL3&K zeE(?M=dv8~$l=J)7f0{oNbcK=s1PcmH8OaVDB{q#3Fb&x9+~>b$Z7}GJ?+nhDRTzSJ@?K1!?j4 z<6Tsgq{_49xUFvVv}`>Ja|yeFkfT>to%-nbsoxzRF{Y!GAK2dzTT?xee4FGya!+k! z=pfyWiGQrvunAbWm`@51*>of_h@Ko0;$~jP7V>jKmPrZBcrH?lXd%k z1URy*;nq)>w&tAtR6uf{Mtk{iJxjsVFe)f+z?e948!!{egW~C+h|ci@{z4c-4Bq}T zb6=@9ZXb>un8_ss_03r9KJqadxoCHhS_e8&w4H#GGC{$RMV(kgwTz%zLbi_eCFpRI z(*~J2a!;K%RE+(wa)Ve|_CAj@Q76`choFEoUY0nt9qEEBCXlHlvxSkhu zz-6PJivY?o>19adj+cE~VABe6IkIauS~Mb4aEw}=qNlbB__Z9YK&IF?zx$BpPIh?KcWZDPF1&USEG#KQ3C9z~AojqtTEar!zeCGB>!XQV;-WH2 z(S+AD0TbaDJ=01#jPfM~#P%g9d^8noXc{m27{aDxsiOhbY>}S&wl1{3iF{_pzI!kiq-G>XhxgC2Afn@9w!mBZ!8J%_#Fs{JRxZXBuI{|%F_ zVtpdhw)uQW+a^Xv&obcF>`=lesSlSRKTE*lOwj7ZNO9*I=H1pvHY795;*|GbFle%V zI&S^BIZi_jCUbIinKTFa0zr(-p<-+7KGKaes7S#!8FGEjB2CJ@q)8u1VGn1k{4t?P z$ncRc8B*p*kJU)hG3mB2Q>?ZyUzWq5)+xjw@svcXR*C!n%5@H&>s+2ucRE?fv2nqI zz#W|_-u5_}`WG@<#wHyFt}Ze@GLGIfT1tnmOxB+|HjWYjd|ftqKpUfeRwM(BQDh8T zAUAQrhGwvWoym4^27DcXbaJh+X}CI?oF6#%XpIYzG_^0muT93jMmGDDmf_a0IQER8 zU#4+LN?+A}sgu&z105d9R1yl}atn_X?U39W*|m&^E=>7BK91Hy>9cLV4N=?56)VaG z@})62e&r~BP&>0P2QTo7l#cV!>HQHA9(Ok<5O(pewfO>~iu-F(mxpjzC(Pk?O81-muyH3YN`imx6%Cp={TMvAFLRs9snkdugmDz#9yf(+=cuEgtZa+KXyDt~S_oLpy8_Bw3Fx zh~*_nwt2zr9IXzdzNJQHh>8|AD9BUT6E)*uO@6D_hW7x!8a)kFC+jZS9Zl9Vf82#Y z2D)=Lc=UFj?0K)_Hw&01N@CtMxYN`}jn@J+hiRQky9?+NrcwR<5x9$a&jMY|XgAP# z?3bE$S267{kc3D5dO=lqBdAUhJqzu?=7xQQsK*IYy(1rNbcr!2_Hj~k5K*Vj0cOK9jpqMuwNaDR7 zNa9@sB=P9`L_((!p9Nync9Njkm*B3CUbKULaWK$4D{8J54ZfrP)=K*C=Kki@ZG z(N}wX9G3Vmfy7 zAkmFmfJ9bnf#$K_tw2U!^zDSAeTx1c5LtqlH|Hc9N&+a(v^JmyMxWKUj{^xWJAs7f zJwPIjp8;LQK7OI@4k`K%Mc#XCC^LX0m8UChrlNBcov$daXaUgWETKh8O9C}AZ55D| z%e6pPFm1iM`x7AH{$U{D`7wR_jJ|zVX)i1KpFqO%TT1&m&?Owl33WDYbwEP9KxvmK zZK=|(1CsDsly(cyRUBR~(AkW(0Evy*s_yOsTEuTZr?f|a=5j844M^YsrmSN|1AEYb<6#XiU(p8+IqKLm6>)2;$Kmr)y#*sD8~wh>5t+zT|9-94tX zCxIkI-vSbgM7Bk^nx$w5-U{uyQ>dPxUpElU7|?bgdHXktn!viy-cWQmMpT8?`bUzs z8t)+>p><)lT+kDzi-oK4b^*~OdX0AoNZ!_gK|wDmnstVy9Z=N$K1+KQ^QM%_8n6CL zkz|cG2j~M#y9J2kSK~bbL^7@Mb^x8n$U93kqQ+YYL^@RCZ3CLiXdH;Fe2sVM`$gMp zye=Rr3pL(Opeq<10BT~?2u4VoYP=OdS2DUAXc41bKua0z0b0zc4s2e-=sKX~jJkoY zWwae=1*6x2Ze$cY$MbGtbScm(Mz;ac3WOSO2#DH0HQtjzw=jAG=vGG6P_&OTY6SWO zqq~9H8SMe;WaQ2AytRxPfYvkG477pKLqJ`O#({bm9R#|Q(IXIdKcgK$y^Qt(4Kiwg z;5Rbb477#OLqMAt#b$fn-HZ+ZeTGpdGVNYQ_XBNZv;*iqM!SJV77z7F&Nqj8|mF**qJFr!%)dftPKRslW2Xb9-@jGhGg0;4y89%pm_=rKl( zFfLzW)Cu%OMvnkJ!Dt82ml=5%dETEh!U7}j&lueS^fgACfu3aab)auBs=e6ro?>(< z&^H-%0ey?nlR!^1YJ>{^HKV#qJ?}e=UIN;|=+zH<-uD>wL&5)+(IY@R8SMsoj*)kn z=lva{2B2MxT7jNtv<+y2(cb|5cSdgl{gBZ?pucC-)Zlq9GwK3*kMhAg@%ILOvp7&3TwgUYlqi+NK3!^uH z-e7chqvyTF=qaH8!)PziUPcS&W15H2HlTfsx)ylezcJbhbb!%LpkFdN0Q3t+jW7#` z7p_ZzZ$l4Qb#SsGYkQItic_{3uq(mD8fJw z;4Zb$e^nZ3t6#e;<=9RG4GIMx6#i00*DxZkmNPm9cd}eDj`J2qPy@DC;uo2Nw_%{wR=y_l%;KfXK4O*aC=z z{vFSx6)|puJ;8`{PyAAUTF|F}$lAud2Z6}O#ysjpOKeXAk&TUc&jX2%{{Q76^ z?~PhCUr`H?f$q?1%1#k^U#PcR~_`ynHG`!XYv@oq*-ac^g|O3_`4$cFuh-;xb8dI0oe zrctR7znAITg+M>yx7X@hN~O>~1tjrO$b0aMaa}GUQ`)GG5*sFRxgO7AH|SYn>s7QJ zNZgUcqy)U6Z{Grpn7P_8yLgGQl4?{Swg z6w_d0}x7P25q)g5p3DGSvj)*N^Q|(Ebg-n0FoS zzhvZxat@v)luHz$k~Fk14k%>FH>&T%??)7^P(*LUU9Zweej>H=fezspX7(3*f2 zamc=$iRUQOD32sX#9s~5W&w#00PkYZYPkP;J|m(@8_7p=*JZlX^oZ;CM^GO`0^d8x z3*1*zRg5d*&GM=cTG+M0xT(R*Xyh#1eTP-X!&Y^JaG3TmD3nqTnJHfZg|y12eAoC| z18OuUGKp!8li{$yztH>7v#qBbBdwVff|jRj(fhZ3)GGE)oduFrG0W{GySCbf-tYtgkuh#`;=rD1QWZ z(a1BnlitW>ef6mu>+2yyISme@5wddmaXqhYtgl}f3duYg`2gvq!H`dp6WH@oX7r$uaD!S7nU)I-M>c;wd z)KIA46-w9h>c;x|xuKBWMk79V6q$|dOcD~VnJSH?hCys_7-JSsK@;W--D0 z5dK9YAI3dDt_gKx<2r?$<2o0=XvDYQM6{$G6NwRAvpwtUGD9JmOKrst_(mM2Qfv5RBO;uyzOFL9NaoSVS`;orz%%)xYrDF! zasAp*F2vhtgsh@}Szk*j(YP+uxJC_S4ye&c9Cz#1M{lYd8&?yF0oO(NMI+(4{EWJ> zzAhp$;JO&UXvDC~6hE%T>c;wNH56*a!eT@0eok9nC)ADgHJ^lsi`vN1$dkC&&?8^g z*EiLT^>r2r4;N`*G%^o&L}xDRYn{5WzMeJ|l0zYD^Rl|JzV;dl^`)Yb%W=<->q5#F zT$gEnwHrzUsD*6QJ?h5BMWe2CQT`U)RT=yh~0b+@%buW3FWZcP)K@( z^zd1AW8;dFQs8RDFRY}{yN{_G>+5ktq4sv6bnR9*)>nj73D*Mrq7l-N{B(7x8|&+b zhC(?d+MDmIiUPxRxk_Wcp)`S7D6T(KH#V+XQb1hI_!W{yo4T>SzGNs@u&+}n0KKgC z{$F)teO*jyi|b1KqLFZWIHGQ>uh$G^A^Um>_gehqvT-FzwQ(&}Y5b+3Tm@=0@;!cQ zZ`K!$ozr!d`Z|M@9oNc(KN!klPz%+|@1X*LYq9!TYA8!UjYgK!ogDCGc;wd!BCdLU7@nPgo+WaWy;}BLrH>KsC><#VuUNH zz8*A`Ye0=gzJ~h@a=@46@Ym|ba(D|BEL_*(SEwfXD|KUi&7gvX>pJ{USK^+ZUz^m8 z_4THqu*@T?$S;0!Sq`tK!iQ_Qrt4`#`6#H-NO<}BwYsr!T|vbW*Y)^CBXrN_@C)k3 z`uc^TtYBZHl$I|aT}MS0*9zruyP@0wYBcg0-1BR__fe6>b%XjEGnAE}MkB0O?1FAK z*0ZR{;##S`zG^5pf?CM39Z@$nT{lx9#>Fy^^h9L7MQApzm(`8+bu|@YTpzO9Jg0ZM9JM|a;~+Jr*BunWxqwn=m- z1lI<95oIWk@?ak28v#mc-9XyLBxz5r+k|auERAD_oAyo$pDw2K@Bw;4P>GEPLk7aeu)6vs!0um0>Jw1IJO)@NH zFm1~&Q{Zc$ql?RqNf(7<3Bu31zJ3)vQ+|(_*$T|2J%}zhVXW%NcyrfxbfnUoJ8)KK z3MCig-`3qq-UbQ#%WYH=wmy}}*e6*PgeUIk5PNmE65FDhU6ca;9eR#?-GS1aS7WwS zmEG+UDL>?bN53}?W+S>MxJL&NExWi|m*ypcJ zug~;OhEF-mUOC0-vr}-W3^qX37;qNn0yzxPWS-sJ7Ka-lfs+s|Z_t_Rxa7$Tw3VRG zL`mn%0?x6OULv(RO;#QUkma4lB^xig3RJ?wQHAbDo$2ZC&QTdH0>K~)DsaAL6m*)S z8qRKNbY!wU*%8|!YKGFzVklGCG7(qdvzl=>Pker7X5G3pcHi%iLmNr6m++a%O>$=P zVg%ynSE+L*P2mgWq`w=1!v>6C7bI_DT}hdx~=U^`Jx-+9#<>B@3S ziJU*JVFk*Ge-yO7KepqU9q(!c#SptSq_3I<4qOs1t~Qsj-CO{34;J>BaUwkC!+rhG zO67vJ!l8!G92cmeAz?X(+?cJo!%oo+_zG-~ThX0lHJXx25IpZv{UK3PeU_xgRaT+M z&5d$QFrBHWT)D;Tr~?f-{?G|{8jc!tVmpeX{2X7?ekh+4x6}nwd#0Wf-Si%KrxCkK z6@IK){;759xn<}bKPgUmDV>nu`E2S@c3ut~8>U?=JSS}sNebXeH>;ge|U})I2oF0ItoW)b#&%fG~4gmqa{?CGws5TZ&P+*VbI7A zG>KD%PmFNAP0Mi%ZiLfyxPr!sR(vH+dC~C1nwv8$rf_3_H^QUZrr-5AsZIAinRCLB zc5stsMgVMrR(=9_6ohm#-zYGi^RHK#@Lz%oZOP=0OdOiUm==gBhcOh@oE1-Y8!%tg>? z&d9HJ`GezwI+?+qOF2>|3yuQY84n7sq$3Tk(C8&kixlJRDCSLy1v5EWb`KIiQlRtbnFv;*(@ps8PZ*I+picGq}km`A(;8-kG_Ww%GgxPU9>$Cvh6%vxzKg0@2K>lggHw7S0>~cWSvwPR_H4 zno`Ts=xz6Hu?y`s;=Dqw2}(}cYD1G+W;q>GzX2Aqpvr$4@Tp>S`p*ethDj_TWcA`$ z)q?GB7<4QIppYi-S|cdYrsYZ|Z`lBIUA#pe?op$4I1Ov>6kQ-7S<;x7 zMftK*0;vHrCm?3$iH>Qa$O;Ona}XOE0WUk%vroOsXWN>VT(^$4b|DA3(X{n$!s75$%Z3#jQa7ashkMd+mRi4gbE-c*Fxb}% z_J_8l1~)W-9CW)LI}oJ@a>#AH1K4!Lyjat^dLQ@m9D8?my}R~e2=;Dh1SB+xi9oG3>)lyr$nMT| zXV!@+RHji?tW{LC4=sIY6)GMmLMn3{`UT!4T83H+l9D=QE$(PZ=diP%iZ~PLiF|s5#1)w zH{mcSqDMwb1;1eEb%MJ^^vuYt=XGi`Ws9We`Gr|S_}eRmxUgP`=ak>8xGg%xdY<3V zs!!Y`#0#I-XZqMTHPUDguoq1cWlL)zzTGoRe>r)6%h~Ku@7Ex1I!3eXXf}9Qs>RTX5LY zni{}ipfxp!!{E8imoHz&IF@EG=nJhGIqoOVKMjwka<4$8*T^v>C(jJ(Bq9kXpSUQR zH=R4kMqXT+dAXH)u{HDZQttH9%(EXJhQ0qTx)UE!bk8l#ywJ)$*P3}j8gAuIw`QK@ z{Hz)2!0JeU&IUh&NZTB;Xq^G9&qd|oYOL`^ z(PEuJ#%I}P5?IIZxPf0{ogb~T`4-E+$nrlk9%Q`Cco*ZojpQrAcpKvs<22*D89%_7 z*doLc#`iOBGTzVlDaH>m{t4rU8UKp$5yo#aE;9ZT<3}0)lW~>tH7NLtLS8y4c|;M2fJH*Z-br;{uygS;ysyh#j572vDI zjsSl_#DGU(XA%0#D7@5k2LHP6`@p0_+YtVf_)l>R*D^lDF0necC8yV&ykE=39_2 zA)euwZ!uz)cTH$Q47VCF4+=~PZ&`7h_)>tkifsWN5?=}M_JBcIaXWG<#Pb~ItsLje zj0eR<#Qb~4w}}f~;-|i}QT)W+x1c|SnftP;M%iE%DdwF<%){aa>WD2Xc8RSL0*?qE z_yhL4lXG~U@o?81l0Iz|1FhPN979YzjTriI?Kur*gxu3CA-`h*6SH86tXL#Z3tcI* zVqDxu#<69^1oL|kHW!7(`Ps=hE?zP6BUz8Nhdz2eP;AfRKMnmMF)60j3Gpz;Hfh8* z2@Sbr#XUxBQ$}oABet9o+aC61b3Au(Y<0$Wf9%-Ea|!=+4=$Wq*&Qj?>tcFhbjGtA z-smA`)^0e>(X3l+R_&VajqbDkDZ5bf9&EUe+C>Ns6sjf1J9fC?_;zD7v@usKTKS?| ztveOFG$Qi(d4IN&ultR>zfiX){5zt8HadevcZSUE-RKuCDQR^BAp3f zDkElHx56D0k;&a&I9T+;5=rbpD>!zK~tJq$`!XDy^RMA32JE8JZG+Emj)>yIlicjlfsEb zDIRMK(X3KK9%wkM7K>n5Ryq^2FktVf+wcbi!%j^)jv-^gIB^2QYM`=1pof%(dU05e zTd8C^Lwi`~9Pn;_^3^>_NPpun|h>!w`B(ZULlardy&o-Tk z@6_`1g?z>F9ksw2*q3YD;j*m|5-8VWiGFowFN3qnU zFm8>;M-n4r)DZkRwPK}NvPV6?)tW_PQsT-Hrbgr)ceYucION|EBdHg+sFY3M41U$T$(-ejSfw(D zGH3bOf@e$3;belcm@ij?ypAWO1XWV?!s=%cafp0MTd^e12)I*5CbV#zXC?1f>*ZRZ zs=ZhiyK(Dwqu{%Z$qDj~$=}Ms4`Ywn-X5G_h3*JWu&$^Di{zM+QN7GeQ&M`Ie5yynkWub2 zC|Z?Ox1__Siz3-X0WhU%G?3L36|T%a#U!Aeo%6tu11FN+Qf2jXk~T; ziAAP37-SX+3&k`>#0YWIvx{!6Bng!mrt(iM$lRx|ur!I_QnBI|k8uK%#?<>&s$NN| zS6)2nSMvx!l@YEikf5+DiL6`@9d(~c9B}Cu%KkJdXdc4T~+ylY{ABTknF3f z7lg;d&M{fNNHY|w+6AHGm2hp8{jD)BlV(MOfR;WDXc&90X!?XJnm*x*mXsAu%7Wrx z`PJ^#ED0_K4rDb;ay3hGWiyR*uViF|3Jg4TuVTqzu3}+uG$5**D|~dSVAMBspsUxX z=a7e@g!kk=T@dL=q)Ew3UefbvsZa1~mKQrnuz*RDj^Lt&Ws-r2)*s2R7KamQC9GAP z+A*3=ta{>-RBhtMT*=aC;_h>y4E&O^M(9`(41Q>RlAlBbT1;XH3$zMI3O9;j6p|rT z6oa&AN>@`XMT=!C4}TbY@NIi=0>14CPQW*60n?5tSuk^BoW<@eOA#@(56Q9=4G4DH z7$EI*CmPuy9w@!8SIm@THBG7H7kMIoD zSC7DtCJe1Ka*8Cbu(TFqV2S3EJ$A27FbiVqk+pej54tO5(BJf5w|6XJGn$6_|PqGNnEHdia1Zi85N%LJiq-K$cTRbH5I)?P}bp}TemL?Gk zi0h0zl@EqND?I~JD?RIRu_3Ks9@09eYY~W^1G(bpuH+SN_@K)I-|+|L)?yLN(d>r0 zYt$Zk%Q5frn!@M|XzwbSMttdUSBX^X)3jG1*=^Tkvs> zqTnRQNk^T_TQ8F#X%q-#Elt;0>VrD7Jv_tsc7$gb7_}ihutW9;G8>DAp>*d5I`brj zo!Kez0!>tBIvVWG5H?5?X8P}5ZlKNuu7m$>jyqkb*h~knnkiYQf!CLAV@LkLZDtju)FzyujRpXMKdd~d^T)(vqi#?SW$`923$Ni~+>hkKgJX}quTZCK%4S+NxEOcNPu zdBDYEp%XS)3FJ;T-BT>uo)%QaGJZ7f_cG{2~T&Vel6S+nMuUw+T5KI?pHP_!?w`=>G ze!b~W#7MfgHeaYXr3VZC(Fvq zVtBAPu?I7VXVW^Ft4j>Buxv#KBCG0vf@pT&S6P%pe%pjP+aSVWUh%B`h!vl9Yx8!) zC;A?8!%BrGC-#mfZy&DdAxYpNMUq~~XH2#sA0m~xSWJz949#l;HTSrDGJq+5#G=ur zjnS$VrQ(OnGQF461BNNpt>B~3&raaFiPyETF>ct7k#bm7k2?|X7o!S`sUUzeiz6d#r}R{}IbDTGbhKEgNLxgJM< zW|Bg+hYQ|%5Wzac+G(TA&{tm8VFe5O(`}LiIHNC-p$>iDqVIyCJNnk)PvRR3&4H4^p@5l=1$^(=yg6`*x+Gm88V8?PF~c x-1#($M-_{u4lW)wQ|HGx$*-suvb?Mk%OXPJwdw+QYg_0n>A0Y|rSmcs{|4NDV4na0 literal 0 HcmV?d00001 diff --git a/Modules/Rom image maker/build/Debug/MinGW-Windows/info.o.d b/Modules/Rom image maker/build/Debug/MinGW-Windows/info.o.d new file mode 100644 index 0000000..42e50fb --- /dev/null +++ b/Modules/Rom image maker/build/Debug/MinGW-Windows/info.o.d @@ -0,0 +1,5 @@ +build/Debug/MinGW-Windows/info.o: info.cpp types.h info.h + +types.h: + +info.h: diff --git a/Modules/Rom image maker/build/Debug/MinGW-Windows/main.o b/Modules/Rom image maker/build/Debug/MinGW-Windows/main.o new file mode 100644 index 0000000000000000000000000000000000000000..f8480e3285c6a0f6bb25bed64132b99c01ebddfb GIT binary patch literal 12622 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 CT5ePT literal 0 HcmV?d00001 diff --git a/Modules/Rom image maker/build/Debug/MinGW-Windows/main.o.d b/Modules/Rom image maker/build/Debug/MinGW-Windows/main.o.d new file mode 100644 index 0000000..2852c32 --- /dev/null +++ b/Modules/Rom image maker/build/Debug/MinGW-Windows/main.o.d @@ -0,0 +1,3 @@ +build/Debug/MinGW-Windows/main.o: main.cpp types.h + +types.h: diff --git a/Modules/Rom image maker/commands.cpp b/Modules/Rom image maker/commands.cpp new file mode 100644 index 0000000..4801044 --- /dev/null +++ b/Modules/Rom image maker/commands.cpp @@ -0,0 +1,246 @@ + +#include +#include +#include +#include +#include "info.h" +using namespace std; + +struct Node +{ + char Name[256]; + unsigned Flags; + unsigned Size; + unsigned Offset; + + Node* Parent; + vector Children; +}; + +Node Root; +Node* Current; +vector list; +unsigned Flags; + +FILE* Out; + +char* removeQuotes (char* s) +{ + if (*s == '"') s = s + 1; + char* tmp = strrchr(s, '"'); + if (tmp) *tmp = '\0'; + + return s; +} + +int32 indexOf (char* s) +{ + for (int i = 0; i < (int)Current->Children.size(); i++) + if (strcmp(s, Current->Children[i]->Name) == 0) return i; + + return -1; +} + +void CommandCreate (char** argv, int argc) +{ + if (argc < 2) throw ExcSyntaxError; + argv[1] = removeQuotes(argv[1]); + + // Set up root + Root.Parent = &Root; + Root.Flags = 0xB68; + Current = &Root; + Flags = 0xB68; + + // Open 'root' file + Out = fopen(argv[1], "wb"); + if (!Out) throw ExcCannotOpenOutput; +} + +void CommandSetFlags (char** argv, int argc) +{ + if (argc < 2) throw ExcSyntaxError; + argv[1] = removeQuotes(argv[1]); + + unsigned long tmp = strtoul(argv[1], NULL, 0x10); + Flags = (uint32) tmp & 0x497; +} + +void CommandAddFile (char** argv, int argc) +{ + if (argc < 2) throw ExcSyntaxError; + argv[1] = removeQuotes(argv[1]); + + Node* node = new Node(); + memset(node, 0, sizeof(Node)); + + strcpy(node->Name, argv[1]); + node->Flags = Flags | 0x1; // File + node->Parent = Current; + + list.push_back(node); + Current->Children.push_back(node); +} + +void CommandAddDirectory (char** argv, int argc) +{ + if (argc < 2) throw ExcSyntaxError; + argv[1] = removeQuotes(argv[1]); + + Node* node = new Node(); + memset(node, 0, sizeof(Node)); + strcpy(node->Name, argv[1]); + node->Flags = Flags | 0x2; // Directory + node->Parent = Current; + + list.push_back(node); + Current->Children.push_back(node); +} + +void CommandChangeDirectory (char** argv, int argc) +{ + if (argc < 2) throw ExcSyntaxError; + argv[1] = removeQuotes(argv[1]); + + if (argv[1][0] == '\0') return; + + // See if we need to go to root + if (argv[1][0] == '\\') { + Current = &Root; + argv[1] = argv[1] + 1; + } + + // Process every folder in path + while (argv[1]) + { + char* next = strchr(argv[1], '\\'); + // mark next entry to parse + if (next) { *next = 0; next = next+1; } + + // previous dir? + if (strcmp(argv[1], "..") == 0) Current = Current->Parent; + + else { + // Find next node + int index = indexOf(argv[1]); + if (index == -1 && strcmp(argv[1], ".") != 0) throw ExcInvalidPath; // Invalid path + + // Set as current + Current = Current->Children[index]; + } + argv[1] = next; + } + +} + +unsigned CurrentOffset; +void ProcessNodes(Node* node) +{ + for (int i = 0; i < node->Children.size(); i++) + { + // Calculate size & offset + node->Children[i]->Offset = CurrentOffset; + + // File + if (node->Children[i]->Flags & 0x1) + node->Children[i]->Size = InfoGetFileSize(node->Children[i]->Name); + // Directory + else + node->Children[i]->Size = sizeof(unsigned) + + (sizeof(DirectoryEntry) * node->Children[i]->Children.size()); + + CurrentOffset += node->Children[i]->Size; + + // If it is a directory, go in + if (node->Children[i]->Flags & 0x2) + ProcessNodes(node->Children[i]); + } +} + +bool NodeSort (Node* a, Node* b) +{ + return (a->Offset < b->Offset); +} + +void WriteFile (char* path) +{ + FILE* in = fopen(path, "rb"); + if (!in) throw ExcCannotOpenInput; + + void* buffer = malloc(0x1000); + uint32 r = 0; + + // Copy in 4kb blocks + while (r = fread(buffer, sizeof(uint8), 0x1000, in)) + fwrite(buffer, sizeof(uint8), r, Out ); + + free(buffer); +} + +void WriteDirectory (Node* node) +{ + unsigned sz = node->Children.size(); + + // Write directory header (items count) + fwrite (&sz, 1, sizeof (unsigned), Out); + + for (int i = 0; i < sz; i++) + { + // Get the info + DirectoryEntry dir; + memset (&dir, 0, sizeof(DirectoryEntry)); + + char* temp = InfoGetFileName(node->Children[i]->Name); + strcpy(dir.Name, temp); + dir.Flags = node->Children[i]->Flags; + dir.OwnerId = dir.GroupId = 0; + dir.Size = node->Children[i]->Size; + dir.TimeCreated = InfoGetFileCreated(node->Children[i]->Name); + dir.TimeModified = InfoGetFileModified(node->Children[i]->Name); + dir.TimeAccessed = InfoGetTime(); + dir.Offset = node->Children[i]->Offset; + + // Write it + fwrite (&dir, 1, sizeof(DirectoryEntry), Out); + } +} + +void CommandClose () +{ + unsigned MAGIC = 0xCC23AA90; + char* OemStr = "luxram"; + CurrentOffset = sizeof(MAGIC) + strlen(OemStr); + + // Process root + Root.Offset = CurrentOffset; + Root.Size = sizeof (unsigned) + (Root.Children.size() * sizeof(DirectoryEntry)); + CurrentOffset += Root.Size; + + // Process recursively all the nodes + ProcessNodes(&Root); + + // Now we need to sort the nodes by offset + sort(list.begin(), list.end(), NodeSort); + + // And now we need to write everything to output file + fwrite(&MAGIC, sizeof(uint8), 4, Out); // Magic number + fwrite(OemStr, sizeof(uint8), strlen(OemStr), Out); // Oem string + + WriteDirectory(&Root); // Write the root + + for (int i = 0; i < list.size(); i++) + { + // If file, write content + if (list[i]->Flags & 1) WriteFile(list[i]->Name); + + // If directory, write list + else WriteDirectory(list[i]); + } + + // Done; cleanup + while (list.size()) { + delete list.back(); + list.pop_back(); + } + fclose(Out); +} diff --git a/Modules/Rom image maker/dist/Debug/MinGW-Windows/ramdiskwriter.exe b/Modules/Rom image maker/dist/Debug/MinGW-Windows/ramdiskwriter.exe new file mode 100644 index 0000000000000000000000000000000000000000..bee703b81587aa1185d74af321bab5c82022fd18 GIT binary patch literal 236087 zcmeEv4|r6?)%WZsz=FYz8Z>H@MT4RO5=G13c1d;tkzfQ?s1idUL83s?WS2jdz~Ux0 zx0hA4(9#zB5~03SX^SmVRMY^Ggi19cwY1naD%Kk}wNWXiO4;vs&dj}gcL~+^{hsf6 zzVCZ`b#l+loH=vm%$YN1{_Lgj&UGS92$7Buj|;IIZ+g7^_h0`BBm3Ne&z&oF_WjME z-Hxfh88mZYMUAJby7Hdt(#4+nrAwAn20io2J=LKlo{A+N-)%EIiz~~@hxhN_FISN+ z@(VH5(N~=RMA&q--Ez^ow}Zh6Ir7Eto!&QdtI>z$5;s&ukCl1s8F>9!iJI7;lpe z2_WOu1WV@uK0Xh6;c33y%*M=hUM`=$18k!iiWTA+bY1|EMh#c=SzB?6^FQyzS>1rfO0MZ+oR(h`SJebt>8>dU~ z%E>iO12wu!;L$HTfu?O?dMKb5WNJYF6Y#i7BBB?JptN5nrxj7!E~Ir-#N%=8WOUEf zM33c_jaHB_;sXp2H(F1}=M((Q29#SyD-a@RkJcV1JZIqRRq5NoQQZv zPI4a0W+3wFkA?a%%N-pgW0c^`CG@-(iZGkx_2Fxucg$GRxgGl3Qor)^czopbUO-_$ zRcpN>T3-h!8ZflX=l+llt5KA$&2>fV%aBT)xP2PRVaPeqzo?dy2BAW&elrjvFVJ5R z%2YXjy9?&vX4FJ+6oPW6pEiK&g3)>dc~r}HfJuYr z_wZk$^;;>t4+Fn)(RJ0_qC zVqkC*fqs%emJRzgI1wEeDD3N!u;03qmHi8<8wt;<<1lKb>hh8Z{P0T=sKL1IctjBx znMB~uFGb)67`~1oMPO7Cfs4Nsfl88?8w3)fEA5uYjfVk8UYLz?j$pQ4KbHuY$gDPhnU4B4aC%m*vGPj9pn@BL7kPpH zrn|rOIqMTe_O?6qa7Lq7#M^aNHItcHJu$-!TnGj_o@EMl?t^D7@ZM|`XgH%lkIm&8 zcA`M+&SZWbJuCSK343TV_O`QP&jvO`c@zjzz+B^c7rl>$<_8tHr6(|Kk(VFciG8|w;? zSL<@D9z;xdpaC}3Gj2c)u#qH>*iA631nB-#WBsn$fp|x=W z_sXZ3cv{&?^ z6#`ZE0*uXA|EX2ufev*|PtKh*pA{bI%Fr&kgRPB=u>IY!b0weK!6(Vtviy_}~f zWA(Mr4#-j%)wz%X0M%Xcoj!95>^_(ni8i2uNK-mS7vfofo8;Rh%V011I=1shwk5@`FHAp-5Ts>E=y&n z=HH^d5Zl1?oXBf zGBo}R<$uFKTMN;&^H2Q?`TrfrXUKmOgmE_cZ)NId%HM_6+n165T$%;V@tKhSvy^Pf z-}xov{|da?9_9ZF&S3d}ha_l|{~5OAD(LE21!@?V*?5H{TVYKTnrya$ymhz@q%W#n z;Zbu!mnO`LN)EUp`_lFE^EL7`VV~eTyX!ijpfrTxj#|Y@AHPvS{UXgT9D6dqY#(J& zDp5e@iA~&K%v@NboX=_quK}EFA+?RIHW?y{1;o6+J5t*n4^2#vnP`#uQxTB~T2`$e zdb)+TbZA6@za*=6D2EvCKGV*ZK>WI7K$lI1eRp=aF#6aA(aOx4i(J;^5r)kg?eBI+ zrn4ZKFu1hxT|_psaV8H(SI;=dAw{gX!!&jy?GCte`HDq5r56b+yN8S)b8(VY-#(Cj zBpqa8(|SN$c{U33nS#ahc8sHnrlG`5Q@W(r1GV8?NDotWj$YKj9+3JfBx>60hHTuR z9`N4A94xis5lk0R%%!4Z1E9o;45H8j8G4vxIQ9Yh>wdJ!y{pOeP==6lO(w07E2U4d zcv6~}nDIW$A>BxmI&p?>?6?HE*aO1+WE|z<-7WqTq(Ra%$Y6y+E>#5vxWN$nR>nOM zsXZZrgBxj*g?eGF&09z*xK+T7VQT26{<;ehxlUZuxf}%T-F@{8;{Sw2j_Rg)!K6n! zR3PC23ALYv34>Pgku9J^*wlf9O$~_F@1|)O1-{1<4o?a8>gHkrB0JzA6wvB-0$u07 zG*lABTYD}(h>J@VhF!+&Mzyy1_t1-GG7zy>_Ys_aQh5@i=5Ou+<2A-0jyGW0q}9_# zm9}9!vqiAZu;y>o0*87izRoHxdQm0!NG&xXBwCWfP+itZyJ# z^B>g$Z}m{aaMc7-Ma|!y)KRABk!2Ho5Oa;(hPWMsm2Wi!?(n)NuRH|Xaw}^uYepVW zG5EI7uwvt}We6ZB=Lo!vb6`2G0lFoZaOjU5g+L;w(3lJ#-<^My!iOtRLUqAqz7YXqgk-vX%ZvkGW4<%R;aTw&A#!({3_+Ar{T zB9oHXA^9ro_h^4-4K{x|i48OTRWO-s6|q!E!r0Cj#Ls7FYwWU=?5LIfL%0%Ae^St_Z$xSh5xh|M8%&qI0|w_`lwkRNAjh7OZAR_mu&tNyQx`$& zrJvfgW33k*-Yj=`ZoS%T`Keop_;1Exp;enf+cBYwY3&rc0Nk)c@88Bw-z$)uiE%Gu zltrPAD7zT!6PS=!i+>x*+-M=*;DlnP*sl3E>48mJV6!T94@&9&%_^CkP+3n}fush) zKA@OY5>tYiqK-0=A3z0XV%XVk2HR0TxA7p_7-?Q)d6L-QCzC{NMq8QT=EPXA=aGsS zG|<&J$)<91kf`kYtXoKj+0zJNE#{)NSRdGFF90Z>z0^z|SG+uYdvc-_cJ0`>$HtJg zbb_>LEy>(N7CERwfql6)5ax_qL4}l?c4kkgnlhDhfZ
;9Zx_tA7rIJp>X*lnz6 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 T)~e4}fha$9%aN#`%Ow6E%$R+v literal 0 HcmV?d00001 diff --git a/Modules/Rom image maker/info.cpp b/Modules/Rom image maker/info.cpp new file mode 100644 index 0000000..43327ba --- /dev/null +++ b/Modules/Rom image maker/info.cpp @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include "types.h" +#include "info.h" + +string InfoGetFileName (string path) +{ + string t = strrchr(path, '\\'); + + if (t == NULL) return path; + return (t + 1); +} + +uint32 InfoGetFileSize (string path) +{ + FILE* f = fopen (path, "r"); + if (!f) return 0; + + fseek(f, 0, SEEK_END); + uint32 ret = (uint32) ftell(f); + fclose (f); + + return ret; +} + +TimeSystem ConvertTimeToTimeSystem (struct tm t) +{ + TimeSystem sys = {0,0}; + + uint32 year = 1900 + t.tm_year - 1; + uint32 yday = t.tm_yday; + + sys.Time = (t.tm_hour * 3600000) + (uint32)(t.tm_min * 60000) + (uint32)(t.tm_sec * 1000); + sys.Date = (yday) + (uint32)((year/4) * (365*4 + 1)) + (uint32)(year%4 * 365); + + return sys; +} + +TimeSystem InfoGetTime () +{ + time_t now = time(NULL); + struct tm* t = gmtime(&now); + return ConvertTimeToTimeSystem(*t); +} + +TimeSystem InfoGetFileCreated(string file) +{ + struct tm* time; + struct stat attrib; + + stat(file, &attrib); + time = gmtime(&(attrib.st_ctime)); + + if (time == NULL) return InfoGetTime(); + return ConvertTimeToTimeSystem(*time); +} + +TimeSystem InfoGetFileModified(string file) +{ + struct tm* time; + struct stat attrib; + + stat(file, &attrib); + time = gmtime(&(attrib.st_mtime)); + + if (time == NULL) return InfoGetTime(); + return ConvertTimeToTimeSystem(*time); +} diff --git a/Modules/Rom image maker/info.h b/Modules/Rom image maker/info.h new file mode 100644 index 0000000..ba5cba5 --- /dev/null +++ b/Modules/Rom image maker/info.h @@ -0,0 +1,20 @@ +/* + * File: info.h + * Author: Tiberiu + * + * Created on August 31, 2011, 3:15 PM + */ + +#ifndef INFO_H +#define INFO_H + +#include "types.h" + +extern string InfoGetFileName (string path); +extern uint32 InfoGetFileSize (string path); +extern TimeSystem InfoGetTime (); +extern TimeSystem InfoGetFileCreated(string file); +extern TimeSystem InfoGetFileModified(string file); + +#endif /* INFO_H */ + diff --git a/Modules/Rom image maker/initrd maker language.txt b/Modules/Rom image maker/initrd maker language.txt new file mode 100644 index 0000000..83d1f8f --- /dev/null +++ b/Modules/Rom image maker/initrd maker language.txt @@ -0,0 +1,14 @@ +CREATE "filename" ; creates a new ramdisk with the filename +MKDIR "name" ; creates a new directory (in current dir) +CD "\path" ; sets current directory +ADD "filename" ; adds a file to current directory! +SETFLAGS 1A1B01 ; sets flags for next added files, number is in hex using this mask: + * bits description + * 0-2 file type; ignored, autocompleted at writing + * 3-5 owner permissions (rwx); w ignored (read only device) + * 6-8 group permissions (rwx); w ignored + * 9-11 other permissions (rwx); w ignored + * 12 hidden + ; default mask is: B68 (no write, everyone can execute and read) +#asdf ; comment +CLOSE ; writes and closes the ramdisk. You must close before opening another one \ No newline at end of file diff --git a/Modules/Rom image maker/main.cpp b/Modules/Rom image maker/main.cpp new file mode 100644 index 0000000..0e1e7b8 --- /dev/null +++ b/Modules/Rom image maker/main.cpp @@ -0,0 +1,131 @@ +/* + * File: main.cpp + * Author: Tiberiu + * + * Created on August 31, 2011, 2:54 PM + */ + +#include +#include +#include +#include + +#include "types.h" +using namespace std; + +extern void CommandCreate (char** argv, int argc); +extern void CommandSetFlags (char** argv, int argc); +extern void CommandAddFile (char** argv, int argc); +extern void CommandAddDirectory (char** argv, int argc); +extern void CommandChangeDirectory (char** argv, int argc); +extern void CommandClose (); + +void GetParams(char* buffer, char* params[], int &count) +{ + bool inside_quotes = false; + int len = strlen(buffer); + count = 0; + + if (buffer[0] == '#') + { + count = 1; params[0] = ""; return; + } + + if (!isspace(buffer[0])) params[count++] = buffer; + else buffer[0] = 0; + + for (int i = 1; i < len && count < 16; i++) + { + if (buffer[i] == '"') { + inside_quotes = (inside_quotes) ? false : true; + if (inside_quotes && buffer[i-1] == 0) params[count++] = &buffer[i]; + ++i; + } + if (inside_quotes) continue; + + // Comment + if (buffer[i] == '#') { + buffer[i] = 0; + break; + } + + if (!isspace(buffer[i]) && (buffer[i-1]==0)) + params[count++] = &buffer[i]; + + else if (isspace(buffer[i])) buffer[i] = 0; + } + + if (count == 0) { + count = 1; + params[0] = ""; + } +} + +bool LineEmpty (char* s) +{ + for (int i = 0; i < strlen(s); i++) + if (!isspace(s[i])) return false; +} + + +void ExecuteScript (char* input) +{ + char buffer[1024]; + char* argv[16]; int argc; + + // Try to open file + FILE* in = fopen(input, "r"); + if (!in) { perror(input); return ; } + + // Read file line by line + printf("Reading script file %s...\n", input); + for (int line = 0; fgets(buffer, 1024, in); line++) + { + GetParams(buffer, argv, argc); + + try { + if (strcmp(argv[0], "CREATE") == 0) CommandCreate(argv, argc); + else if (strcmp(argv[0], "CLOSE") == 0) CommandClose(); + else if (strcmp(argv[0], "MKDIR") == 0) CommandAddDirectory(argv, argc); + else if (strcmp(argv[0], "CD") == 0) CommandChangeDirectory(argv, argc); + else if (strcmp(argv[0], "ADD") == 0) CommandAddFile(argv, argc); + else if (strcmp(argv[0], "SETFLAGS") == 0) CommandSetFlags(argv, argc); + else if (LineEmpty(argv[0])) continue; + else { + fprintf(stderr, "%i: Invalid command.\n", line); + exit(1); + } + } + + catch (int exc) { + // Exception handler + switch (exc) { + case ExcCannotOpenInput: fprintf(stderr, "%i: Cannot open input file.\n", line); break; + case ExcCannotOpenOutput: fprintf(stderr, "%i: Cannot open output file.\n", line); break; + case ExcInvalidCommand: fprintf(stderr, "%i: Invalid command.\n", line); break; + case ExcInvalidPath: fprintf(stderr, "%i: Invalid path.\n", line); break; + case ExcSyntaxError: fprintf(stderr, "%i: Syntax error, robably missing parameter.\n", line); break; + } + printf("An error occurred, execution has been terminated.\n"); + exit(1); + } + + memset(buffer, 0, 1024 * sizeof(char)); + } + + fclose (in); +} + +int main(int argc, char** argv) { + + if (argc < 2) { + fprintf(stderr, "Missing parameter: script file."); + return 1; + } + + for (int i = 1; i < argc; i++) + ExecuteScript (argv[i]); + + return 0; +} + diff --git a/Modules/Rom image maker/myram.sys b/Modules/Rom image maker/myram.sys new file mode 100644 index 0000000000000000000000000000000000000000..d26f501126367caca9995f1e2c36eb8aeda51215 GIT binary patch literal 13831 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 iC|dsfR;DRlISH5bDy Running $@... Configuration=$(CONF)" + "${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre .validate-impl .depcheck-impl + @#echo "=> Running $@... Configuration=$(CONF)" + "${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf + + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + @#echo "=> Running $@..." + for CONF in ${ALLCONFS}; \ + do \ + "${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf; \ + done + +# all +.all-impl: .all-pre .depcheck-impl + @#echo "=> Running $@..." + for CONF in ${ALLCONFS}; \ + do \ + "${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf; \ + done + +# build tests +.build-tests-impl: .build-impl .build-tests-pre + @#echo "=> Running $@... Configuration=$(CONF)" + "${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-tests-conf + +# run tests +.test-impl: .build-tests-impl .test-pre + @#echo "=> Running $@... Configuration=$(CONF)" + "${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .test-conf + +# dependency checking support +.depcheck-impl: + @echo "# This code depends on make tool being used" >.dep.inc + @if [ -n "${MAKE_VERSION}" ]; then \ + echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ + echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ + echo "include \$${DEPFILES}" >>.dep.inc; \ + echo "endif" >>.dep.inc; \ + else \ + echo ".KEEP_STATE:" >>.dep.inc; \ + echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ + fi + +# configuration validation +.validate-impl: + @if [ ! -f nbproject/Makefile-${CONF}.mk ]; \ + then \ + echo ""; \ + echo "Error: can not find the makefile for configuration '${CONF}' in project ${PROJECTNAME}"; \ + echo "See 'make help' for details."; \ + echo "Current directory: " `pwd`; \ + echo ""; \ + fi + @if [ ! -f nbproject/Makefile-${CONF}.mk ]; \ + then \ + exit 1; \ + fi + + +# help +.help-impl: .help-pre + @echo "This makefile supports the following configurations:" + @echo " ${ALLCONFS}" + @echo "" + @echo "and the following targets:" + @echo " build (default target)" + @echo " clean" + @echo " clobber" + @echo " all" + @echo " help" + @echo "" + @echo "Makefile Usage:" + @echo " make [CONF=] [SUB=no] build" + @echo " make [CONF=] [SUB=no] clean" + @echo " make [SUB=no] clobber" + @echo " make [SUB=no] all" + @echo " make help" + @echo "" + @echo "Target 'build' will build a specific configuration and, unless 'SUB=no'," + @echo " also build subprojects." + @echo "Target 'clean' will clean a specific configuration and, unless 'SUB=no'," + @echo " also clean subprojects." + @echo "Target 'clobber' will remove all built files from all configurations and," + @echo " unless 'SUB=no', also from subprojects." + @echo "Target 'all' will will build all configurations and, unless 'SUB=no'," + @echo " also build subprojects." + @echo "Target 'help' prints this message." + @echo "" + diff --git a/Modules/Rom image maker/nbproject/Makefile-variables.mk b/Modules/Rom image maker/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..c466750 --- /dev/null +++ b/Modules/Rom image maker/nbproject/Makefile-variables.mk @@ -0,0 +1,24 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +CND_BUILDDIR=build +CND_DISTDIR=dist +# Debug configuration +CND_PLATFORM_Debug=MinGW-Windows +CND_ARTIFACT_DIR_Debug=dist/Debug/MinGW-Windows +CND_ARTIFACT_NAME_Debug=ramdiskwriter +CND_ARTIFACT_PATH_Debug=dist/Debug/MinGW-Windows/ramdiskwriter +CND_PACKAGE_DIR_Debug=dist/Debug/MinGW-Windows/package +CND_PACKAGE_NAME_Debug=ramdiskwriter.tar +CND_PACKAGE_PATH_Debug=dist/Debug/MinGW-Windows/package/ramdiskwriter.tar +# Release configuration +CND_PLATFORM_Release=MinGW-Windows +CND_ARTIFACT_DIR_Release=dist/Release/MinGW-Windows +CND_ARTIFACT_NAME_Release=ramdiskwriter +CND_ARTIFACT_PATH_Release=dist/Release/MinGW-Windows/ramdiskwriter +CND_PACKAGE_DIR_Release=dist/Release/MinGW-Windows/package +CND_PACKAGE_NAME_Release=ramdiskwriter.tar +CND_PACKAGE_PATH_Release=dist/Release/MinGW-Windows/package/ramdiskwriter.tar diff --git a/Modules/Rom image maker/nbproject/Package-Debug.bash b/Modules/Rom image maker/nbproject/Package-Debug.bash new file mode 100644 index 0000000..1357ec0 --- /dev/null +++ b/Modules/Rom image maker/nbproject/Package-Debug.bash @@ -0,0 +1,74 @@ +#!/bin/bash -x + +# +# Generated - do not edit! +# + +# Macros +TOP=`pwd` +CND_PLATFORM=MinGW-Windows +CND_CONF=Debug +CND_DISTDIR=dist +NBTMPDIR=build/${CND_CONF}/${CND_PLATFORM}/tmp-packaging +TMPDIRNAME=tmp-packaging +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/ramdiskwriter +OUTPUT_BASENAME=ramdiskwriter +PACKAGE_TOP_DIR=ramdiskwriter/ + +# Functions +function checkReturnCode +{ + rc=$? + if [ $rc != 0 ] + then + exit $rc + fi +} +function makeDirectory +# $1 directory path +# $2 permission (optional) +{ + mkdir -p "$1" + checkReturnCode + if [ "$2" != "" ] + then + chmod $2 "$1" + checkReturnCode + fi +} +function copyFileToTmpDir +# $1 from-file path +# $2 to-file path +# $3 permission +{ + cp "$1" "$2" + checkReturnCode + if [ "$3" != "" ] + then + chmod $3 "$2" + checkReturnCode + fi +} + +# Setup +cd "${TOP}" +mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package +rm -rf ${NBTMPDIR} +mkdir -p ${NBTMPDIR} + +# Copy files and create directories and links +cd "${TOP}" +makeDirectory "${NBTMPDIR}/ramdiskwriter/bin" +copyFileToTmpDir "${OUTPUT_PATH}.exe" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}.exe" 0755 + + +# Generate tar file +cd "${TOP}" +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/ramdiskwriter.tar +cd ${NBTMPDIR} +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/ramdiskwriter.tar * +checkReturnCode + +# Cleanup +cd "${TOP}" +rm -rf ${NBTMPDIR} diff --git a/Modules/Rom image maker/nbproject/Package-Release.bash b/Modules/Rom image maker/nbproject/Package-Release.bash new file mode 100644 index 0000000..090c8fe --- /dev/null +++ b/Modules/Rom image maker/nbproject/Package-Release.bash @@ -0,0 +1,74 @@ +#!/bin/bash -x + +# +# Generated - do not edit! +# + +# Macros +TOP=`pwd` +CND_PLATFORM=MinGW-Windows +CND_CONF=Release +CND_DISTDIR=dist +NBTMPDIR=build/${CND_CONF}/${CND_PLATFORM}/tmp-packaging +TMPDIRNAME=tmp-packaging +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/ramdiskwriter +OUTPUT_BASENAME=ramdiskwriter +PACKAGE_TOP_DIR=ramdiskwriter/ + +# Functions +function checkReturnCode +{ + rc=$? + if [ $rc != 0 ] + then + exit $rc + fi +} +function makeDirectory +# $1 directory path +# $2 permission (optional) +{ + mkdir -p "$1" + checkReturnCode + if [ "$2" != "" ] + then + chmod $2 "$1" + checkReturnCode + fi +} +function copyFileToTmpDir +# $1 from-file path +# $2 to-file path +# $3 permission +{ + cp "$1" "$2" + checkReturnCode + if [ "$3" != "" ] + then + chmod $3 "$2" + checkReturnCode + fi +} + +# Setup +cd "${TOP}" +mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package +rm -rf ${NBTMPDIR} +mkdir -p ${NBTMPDIR} + +# Copy files and create directories and links +cd "${TOP}" +makeDirectory "${NBTMPDIR}/ramdiskwriter/bin" +copyFileToTmpDir "${OUTPUT_PATH}.exe" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}.exe" 0755 + + +# Generate tar file +cd "${TOP}" +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/ramdiskwriter.tar +cd ${NBTMPDIR} +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/ramdiskwriter.tar * +checkReturnCode + +# Cleanup +cd "${TOP}" +rm -rf ${NBTMPDIR} diff --git a/Modules/Rom image maker/nbproject/configurations.xml b/Modules/Rom image maker/nbproject/configurations.xml new file mode 100644 index 0000000..0e154bc --- /dev/null +++ b/Modules/Rom image maker/nbproject/configurations.xml @@ -0,0 +1,70 @@ + + + + + + + + + commands.cpp + info.cpp + main.cpp + + + + + Makefile + + info.h + sample.txt + types.h + + Makefile + + + + localhost + MinGW|MinGW + 3 + + + + + + + localhost + MinGW|MinGW + 3 + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + diff --git a/Modules/Rom image maker/nbproject/private/configurations.xml b/Modules/Rom image maker/nbproject/private/configurations.xml new file mode 100644 index 0000000..99e33ec --- /dev/null +++ b/Modules/Rom image maker/nbproject/private/configurations.xml @@ -0,0 +1,37 @@ + + + Makefile + 0 + + + + GizmoSimple + + + sample.txt + + true + 0 + 0 + 0 + + + + + + + GizmoSimple + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/Modules/Rom image maker/nbproject/private/private.properties b/Modules/Rom image maker/nbproject/private/private.properties new file mode 100644 index 0000000..e69de29 diff --git a/Modules/Rom image maker/nbproject/private/private.xml b/Modules/Rom image maker/nbproject/private/private.xml new file mode 100644 index 0000000..c1f155a --- /dev/null +++ b/Modules/Rom image maker/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Modules/Rom image maker/nbproject/project.properties b/Modules/Rom image maker/nbproject/project.properties new file mode 100644 index 0000000..e69de29 diff --git a/Modules/Rom image maker/nbproject/project.xml b/Modules/Rom image maker/nbproject/project.xml new file mode 100644 index 0000000..74e112c --- /dev/null +++ b/Modules/Rom image maker/nbproject/project.xml @@ -0,0 +1,20 @@ + + + org.netbeans.modules.cnd.makeproject + + + RamdiskWriter + 0 + + cpp + h + UTF-8 + + + + Debug + Release + + + + diff --git a/Modules/Rom image maker/sample.txt b/Modules/Rom image maker/sample.txt new file mode 100644 index 0000000..ad1b754 --- /dev/null +++ b/Modules/Rom image maker/sample.txt @@ -0,0 +1,16 @@ +# This is a sample script +CREATE "myram.sys" + +ADD "info.h" +ADD "types.h" + +# We go inside the sources folder +MKDIR "sources" + CD "sources" + ADD "commands.cpp" + ADD "info.cpp" + SETFLAGS B68 # Change flags mask; B68 is the default mask. + ADD "main.cpp" + CD ".." + +CLOSE diff --git a/Modules/Rom image maker/types.h b/Modules/Rom image maker/types.h new file mode 100644 index 0000000..fd15395 --- /dev/null +++ b/Modules/Rom image maker/types.h @@ -0,0 +1,41 @@ +/* + * File: types.h + * Author: Tiberiu + * + * Created on August 31, 2011, 2:58 PM + */ + +#ifndef TYPES_H +#define TYPES_H + +typedef unsigned int uint32; +typedef unsigned short uint16; +typedef unsigned char uint8; + +typedef signed int int32; +typedef signed short int16; +typedef signed char int8; + +typedef char* string; + +typedef struct { + uint32 Date, Time; +} TimeSystem; + +typedef struct { + char Name[256]; + unsigned Flags, OwnerId, GroupId, Size; + TimeSystem TimeCreated, TimeModified, TimeAccessed; + unsigned Offset; +} __attribute__((packed)) DirectoryEntry; + +enum Exceptions { + ExcSyntaxError, + ExcCannotOpenOutput, + ExcInvalidPath, + ExcCannotOpenInput, + ExcInvalidCommand +}; + +#endif /* TYPES_H */ + diff --git a/Modules/initrd maker language.txt b/Modules/initrd maker language.txt new file mode 100644 index 0000000..83d1f8f --- /dev/null +++ b/Modules/initrd maker language.txt @@ -0,0 +1,14 @@ +CREATE "filename" ; creates a new ramdisk with the filename +MKDIR "name" ; creates a new directory (in current dir) +CD "\path" ; sets current directory +ADD "filename" ; adds a file to current directory! +SETFLAGS 1A1B01 ; sets flags for next added files, number is in hex using this mask: + * bits description + * 0-2 file type; ignored, autocompleted at writing + * 3-5 owner permissions (rwx); w ignored (read only device) + * 6-8 group permissions (rwx); w ignored + * 9-11 other permissions (rwx); w ignored + * 12 hidden + ; default mask is: B68 (no write, everyone can execute and read) +#asdf ; comment +CLOSE ; writes and closes the ramdisk. You must close before opening another one \ No newline at end of file diff --git a/Modules/initrd.lux b/Modules/initrd.lux new file mode 100644 index 0000000000000000000000000000000000000000..d26f501126367caca9995f1e2c36eb8aeda51215 GIT binary patch literal 13831 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 W_lo{EJ_8j;xCzGOzf0yZ$^QWM61~v? delta 1960 zcmZvde@xVM7{{OQmpf!|+`;k7^B})?UqlG>_*HUZL7dA>iw1}-mRR7%#xLOr-E_CS zXr1hq>qD!SZKRvD^+WO2qCr9fVKZB6EhjC_{=k7svh`!lk@SAJ&uzf`ZqL2G@8@|w zpU?C8b>CC_uGO5>l#+q;{^;7hmA<=$J+*qN@2Kupyw6V>^fZ-dW?^x0(YKxWvAmI? z5MAWgA^!2tM;MvD(I~%LH=spcxJ9{dqN+HJgI!az_kY#C{@6WAU-0kPR}^Jb?6bI))8Zq`kf@8(@;*TiU%-N} zuVBNlZ()~U-@$%_U4>nTO~YozK-|{!qCCoQJk{CQRPWL<92p%NIg4HSd9HjXRW`I~ zT0t;6{#QjzTT6tNkd*Q&Mdv=`5tRwm!TyA2)PnNX7EeQqr$cK!s2yxLnVBAuP$Si@xN#qF-WB73@#gf3P)XqP4Irm<#5HJqOz_tr6@B7Nz{8xHh4mQLJn) zI;`RqE;C2Hsg{{dzKC*jX~b^DY=UR3%xsvTtq9*m&P)t8gv3Rg?U4#~$edVajzfZJ z0*RAIyyQgQCM?uB(QVseti{_d@wIJRo)9Asz&xwHDVXRLex+lK0JCr&xWzST03MDmD{Wn=;r*1TwQiujc zbt(ssz&&mgr{Nw>B|0y@Pjy5#X+$5Y!km^IG^O>bN|pF{eTw&Io~(Q@5M5uTr&sB@ zRrDQnau(5w2#`%1i!Vl;7uF%1=+7F7Qxvjjlv&BQrZDsB42absD4I{yF#|s8;KaPWf zKdsL|6-8cPosIjze3WR4iTDkW<1?(YiSDz`A&SKj;kXs#c&^m>Qtx2q5>+!d6V=Oj zdx%~-CLPB)0UZRSen;xF%q_UE(myQySD5JV2GfZm&{l~giUheItJEn{Z)Tzp7c-rx zhT}#rQLRik#>^)=u@oSBTl(K);`p9nVxVuBg+#ZQ7<@s}iY;XA0=bYUStGWebv)5w z8GlR01FXGBIKvJr(EvM=@I7IT23MJDh;FjKfao?8%l;P=_JH{qzCt()DmGqYCgP8l zX(!so)QNU5Gl=#wGl}Y$j}sjNy=oSI*pWx{E)z5OTyjkE4#+c_XN`i5_&{+X8WZ_W zkk3F7YsB|3i-}%jVx+TLd`7a3VgJoa)sH`MD2N3Fu=>Dm_=RH2=Zz7UXT||N6DBje>N<_9E(gUl_T3%d z6zNczcgD^3x7U!^Mh}B;k@zT5XQ}HJTYHpse0Y1K?@mE)JT-pe&4OMp!m|ES)yLVW zHRDWUC_jm)ZO>evYhRm2MLRp1O>#7XQ#{NP^J1~}YIrZPk>Dc3Hx9wSSCvGwBCgY@K|G(GLP_E)o{)n{F!S<>qzt%+T|ggm2s z6{h`cYR3wk z*Kye;*hpxdrk}E9R(0QUmMybv@wNlg*AVhug6#YCiJSlvUHx~En-K9iKz{~FAvMT4 zgyL@NWvfs#%9dT_sGzS{HVkcewoz(_IiURxc>_5Ep_m%QRE>&dg2%VnAk0r7r_uXF zFUPlRA|oiLigUdNXA|5{C0CqnQMT?STTvR^U|y2Oxn5GcI9&14a5H7zLXZZ`yOAW! zo3BJsxC$G2!=<^!IEX?@{C4X&XlRAKBkA<6?vX(*af8?&gB(^y=w}F^d6JFj#G^TX zB(Z#^>_t~DxCD>%ClKQQACGEK3evPFUthizzvLr1C$%oDjP1hMPY$`%Ifj9|&%xeh z>`Q5*8K`r-kG<**TLH$zCjU{XNvoQ|bBHkq#`ge_TI92#sb+UR2gUw?O)ZsAVWqq6 zoW1HOJL%qkM#9|{2&+@)QO5o)D}0C*^R0MGeVF74iAho4ry%N`k^d|?zqZvAe7UmLgC|y#Fiv|+SHh^W9`=}~H-g@< zk>zBqlAwvjI25nYMaw!q^l8%gC}Pq_7`rd=ONnc^XdNG&Ll_^_d8rqq-jrIz!T(HR InkDi717!I#vj6}9 literal 0 HcmV?d00001 diff --git a/build/fat.o b/build/fat.o index d56285f17422a5ac257fa21a10a129c551ebe355..0301dcaad383d0c16b9fc9eb014538c6ed86a749 100644 GIT binary patch literal 547 zcma)3O%K695S>zAH(WVzLLwWIa&T?57jbjf7I7(w?tw(&kNH!60rT3OsDm)c+czI? zXJ)gv`NFd-i^MD{(mNu$nu3#ZpQ=HEvopyQ~i8WXAH66+vj)~Ag3;_2;K zliCD2AQdJFspuHT+k=*gzq!Q{>{K?=Y?t>v+qhk3=!z!(rt5LN`iE}F8uS}6VCdIO zz3e~@XfR|ZDjs73#~3s)a3S@wuS9WLB zN+1cdG1;wwJ`|sP(MJV?J`}Y@(r!(P_>iX}2!i@xumvmH7cH*eH#@hP`l1K!eBU|W zx#!HibLY-JcQ~UcijbxVO>B8WSXxWz_n}X8iFR>(bmT?vcKrN|HB@g)zUuDyl49~! z#h9B_FGMe{_BP?y*6LX;S#b5_^A#nNpP%gzs??OV=%r%UWlpPYR#&6d6|hgm(pB#V zMfrMTvvSwh=KfTo3l|~Pv$2Conrn4}M?eKo_ffY9oA;W{ruVnLYxVI)?OX49{NzhxryHa5w{JjPzG5u_K4aqN z1|GkEv|hE|0mfq|I5NyPT}iV!g#sFV>|P*XxkLqa|Jgy4s=T`oRX~MOxv#WrYr2poSPH&c)2X>Qjrd` z6L$ZDZbH}-#X`Y3iy55jOpWDBxq`#i|JNQvBA2>7n81JL3kCx7PZIcUj2$uvtYX4J zU(cfjue(M4r_4JEj~udZLm)E&C&+yn1rP7bH`tdLV%!(5PwvY@;Bu{?;tJ}8 zKNNe>!aeE7x3z+u0QO-$)+Z0wi=*!dV$x(i=}Qd9b@3Z-q5JmWEz0`g4)o=!TT?W_ zm)kP!{wZq3G=B%edYj;7MdLrxjn#5rq;Xx3V#xo8I?t0d>i!QL1n3V+5lH{gzkJ?f z_5|;OwBzCu5r>OsMoX`_4nv2|mfhU+G-+aAppy@5@%=JBk}n78nKF9(jGnntR@)>CTs{PIIWns!yb%YpDHzS)UU=h^KcK zO=|0FpHvV;$tmZi}^9vc}7{ z{Tg#sp-p5Nk%z>ZQ+idXIptol?zn}!P8mYK=GZ&P`Q7zch08$I$#KO*ov7`r=$R7# zNvJ~cm%Cl@n`?0#J%z?>wDP#s3FAm#_8)K&HC)|MUCaGtGiq*Y90wlPG2v@bVoB{(_KnZ40y!1TKcf%X5Yn??=$5ozorW>_2(~xq0gRNOAa<4L>s61>gA?p62YZdp`GtL;Ug~F0D|_%=%4PBnFX+ jno3sVu-#tEG^4aSQTA1y$N2&lJWs?@0wR{>60y7Aw)bp` diff --git a/build/fat16.o b/build/fat16.o index 4c416c239efafd7411df4c24d96fb46ed205ff54..458c0fd5d62268640d49d056257d8ca1b71d69d9 100644 GIT binary patch literal 549 zcma)3O%K695S^-zy5Y*9PDo@!f`hBji@3RKi@20T_dp`?$NVY3fO+jsS_fg0w{Je) z&dg@-^X0;_EE2QGrYs`5nZhXHE;&>p@@BKC+x1rKo;y+#H6&8;HPU{-tj{SQ#M8Tr zCbjjoPb!FGQsF6zc1JA}e{+*1*r{x!=`Pv5qH){I(Ag&brt5Is`9s%d4f+ijF!XCA zUV5Mg)EP1pl?7uA#~3s)a3S&14t(?3&}g!QYaEC zF1>j0;2+>0;MtQHsUAIf7Ed|!;>DA=e&6nUY3xM@Cf|JD%$qkmyV<#UYss=KF=k0o z4w=ZTCi7WARZdGu?%(MhRQ8nTzN5JNQ{C7LJTI}m!LKw;lYSC-_9xq8GX0v@yjK^K zDV^UpQSbNInO7g4eNR!CeCd6xJXq;Vqh4QhtBu?DuDbL7fyBHv>y#n%YmU8-oZsDyRk#XNogCLq)QQ@@ik>R* z*FqJFzuN7J-`t4f=m|7tqxDCvP8dh}vj2cfsNw34>sszFn^ALH<0SB;jtQTOBImTm z^Q z@`In?(Ek1hu>a@{r=ve@pN$3 zq_(bhNqJF3%0Gr-aL_XGH`iE#o$^MS?DD>68@Is>UDm|kbWN@o|Il?g0iIMJC=S#?mNk55&(|Ma7PsxKn Ve-&|h6U6C>h&r57?@H0)*q@M(y{lWH_Oh4x}Z`J8! zM(6iU)cfTgd-3k^*A#`xr{4R@-TQrM)a%P`wQ>FSd3VXb=r15wVJDdN=!RH3C2P8D z+s`mp71~Ue5xGaKIi;tCnp5r->yBHv<&+`xYmU8-oZsD!Rk#XNogCLp)QQ@@inf&a z4?`7-zuN7J-`tGjXagFv(b|JnCyXO~*?+(p)Npl&buIUo&8WGpaT++TW5UOx$duN2 zo^>VoSvWb;nLXEN!1SAi!1{mH&7+3>h&1+_%%c2ydf|_f$_yg#bQR5<|8tPCof>U!Ii?uz`)?lr@)*rxru2NW6ES*W@T0db_NE6 z$)U{3j58)LWEP)1fmr~|QU{VJnbjF3CVvEy7Lz4e)ERvyI|9jo$(ca1Ve&*4b=D6o x3=9R6_p&InCa^Iu9GLu}cNf$_se#bQRD7k~c$|KEH><}d>T!{ix^H@Gqxfh=b}1?JSrRZOcGGbgJu zE3>+=GcZ_8_GMOPTrjziSshG@Pu{>R0Aw8m@)ah(1d_F#CME_30J&o_+5i9m diff --git a/build/initrd.o b/build/initrd.o index cb06e5a96cebe64da9c3d63c8d7b559396b243fe..7a3cfdd6a108952db3de9b43d09595c8b3f05086 100644 GIT binary patch literal 3000 zcma)8ZERCj7(Q)prOet5sANjjn{Y`+m<7zDj4aA%86%)9w0uMcq?8Mrv}@Dejtyr7 z%7E+5l1VTjCYl(32~qi>24gfpCryYNLeyyD59OBzH26j0SL*ZJo-@WmqHpr{Iq!Sk z^M0L=+viuU>+*O!LXk)K#4SmPw!7*xZ7#HkpqMGnj-Q(UNyUj9f$9o_`sxb34iQ4d zNg6@UI^B`8RJ6|;42@~W?F;9xY6~xn#b4Aan-b;gVW-zHoR|*t*2cG!MvJr7Sa{z4 zvi;Ja*Z$15jDQ_CG&ovfYsU9~*J?FSQMYfDC&F8|Pdd<@Sht$CFLFUub91UC*4Y)i zt-kQ!Urf32#JL4E#KgYrSEPO>kr5V zRsEVAVNudq*)XOZP(^AlX^8ZC5C&C$3w|3Qy50C;DI|B~hFZS3ar7Z*(2Qic(ol^X zIxGd}keWU=;`KnMEr!nSs8@q34a~Iw_40^e2rB|}V-c3vNkebHyf4TpEOR^I%z-vi zu4s0z(K>pi@$f6~^>`-qY3$fVbRJz{7|9z9p`+P`-lth6G#cFTwi`pf^+tjqi{ z-LR#(WAQhItk}Mc99qY;L)Vgb(mLbpU-{~c@}J()!z|W!l5Js)?Wm>kXaf>*+j4DA z9fEc6yHK9!*t&hkHo5PXp~HpYbR|(Jk4TFxkI3jbtJ97J>f!7}&>81$*@>_-&dstD zP0lzs#ZELk<4nM}DQPDnc0%__y>ZR|f!mj_>gS|D8_g=@%~c{` z<(+NK<>$h}+T(7Z<2$&F$Gfy1%?QG4K(5vvz(8IH_x@lmDCZ_^Tv>BZife<@(vx%& zn%%Rdt6XVnFNOELTAt{2n-ANrTxnpJ-p_gf+0-6WPg(ksp#?+H2C>Ffi~6h(t7Ea{ zddupkHZIiLqK`(GGE|s9AkY2{!ZQ-^%nNGTF>FH+C@y!_ORrYz}s#2-)75QIRoap_mCrP zN9p&duQSwiMC%NN%l=rX$9KvT3PXb!!Hck|BG$(+XRI6G5w8#h;O()z&rA)*zC;k? zC)hqnTV(!pNE19EZO{jOLi|YmopZ>0zq>;U(c*B{O6?TUqE)D4pBfd+Ow=-mED_z6 zvQi?tvse_-LXHBhmtwb~>0CBz4#0%QX5Wt8g;dsL4*!!Lf*sqY_LJX`KTwAvO%CP( zXDTId9B<{fKt7pVPdlF11yWWnmM90%la#m!W7_|h9nTj1KLRGvAJ;149Qg@}v?pza z-R%0%{Z)3ntsG+uUCP5QLxm)jUpM5b_2%(ap^o*=0Mm~7&jPC&FcjbTh1kS_B;|T) zOiqQd_zaYA>-wR;CNN`8^)~^e@a$3Rj-Mk`3aq*+y5=l|I`SSRn_$+K7k^p zkk767mcobA!ak6AZf2vSJRcnM4WMiQb?|&C^V=8$cS`v&pd!}&IQTG__nqt6Yek&z zQ38-Md#vs}?Nig{`ylIJei&zoUuw@zn?E#7egU$21L*HKWOdIezYJO3Z_1~qt#`jC zQpfzxPn(wyZZs|Mxv9UwadU8knc77~ER!pm98eMOFQ}o&n%Q)Im}1c9= zE-m)%E|~6$)uz?epD_g+`S#Ce5Nn ztmm_4plHFl*tEMShh0UnF1KfMq2Ds8eG=al3w4#iUVNlZ5b-g6i`Xc{7eri$n?MgQ zA9_!0khn-9|6EbOT;d4OJ4c8sM6AC`#AACBm(+`9YB;XM7|?T%5NnC|3Xvea2o literal 3556 zcma)8ZERcB89u)Eb~WJIF7?108F+BJC89Ga%QmGet0Oxfs3}xUXuBo-aFbhNaO&2+ z4k_!lMAw1dU0I4ywLkj_X;zt7iu-gAG{JJ=Trg@kG$p^K}W5Xp_crb|M**d(qMFU~)6+ix3Q&J25d zjm1A1`sb-!*7$9B!)8RPGRES&hQ5J9Zy@|4v3qklUQayc{tlWBd^EksXzU+yE+;(O zG`+qSk709L?D=7{-5W66-*>+@rMbUxM=@X~;^s^P19ZBE`InEI&1S1x$3esWqqCG4 zIUIz|nWnOH8}wW@OwOb^Y^L0cZkr!s_TOAl?A*fECUn04eFr$PqW7FR16loy+5S=# zgj~npo?XtF+ltlc0*-#6_9L#w{tA{GcX1k+OPD&K zA<^Fgxp^zSo;tvcgz*^xm=!WWQ_iH%X~es$iHByKrQ*op zBZnH;x}>*>(dJ&YZ}q-JN^YI=?Phh;O0RnXdE@Nd(zJJEx?ibYd4dMruRL_KvtY;- z@~otA&AO$ezBlB`Njpo)kp|Cc_VOrl);njOB-BhB;O|!7|L59hh=FE=K*xcL7$^AortoAxM?k5k?-RWl$hDgpW z*vX4R%uI)by)i?{N*H!YnBk}dj_OfR@~9wAAbp!JQ|DgMdkwBx1)E!_8c6s=cJ|^n zOr!gdnA+%^frtGTCYW&k*|ht?Cq*?;H)iB^c3j}a(hz86`+v&3qS>ZD-Huou-2S=? zBg+F>*&tzdiCZYo&bi!%AyQsufD;0_dWD>&w$I-C4uyQ?{$w>}JE>JWGi? z6!GT6l1O;-h9u(Nd_)pSZ^&@pT)brHGFjZsemZ))4ah=odQ$`SuBpX8Yx+01OWssi zKhGt&r^4>3h#vd_yq6ue1HaZj1?+ir~5MhkSMHnq(tX~U} zg3A^3+fc#*7PS!47?uV{MqzmCEE9ERUJx)3*m76|{n zs3F%`g!~i8<>klNEqn6QH49BwPEXqTV8$~et&r_46(HahdpmgA|1Ue{BD^_b}0mpV-nbIIS%8+1G+U{CkA9~QmutlB8jbXL%h%bh1It9 z&x!MG9f7=BweO+}Y)VVhSF=dzx$>(`7aQ^S$n#!t6!y*HgC@^f z)gS74zN+?+-vM4V?n@8)Q|K9V>URTGqkc#+K=R*3e-E8ChxV);>K>CXgID*R{KMc? zqd%X+*7-iRj(pLeZ*_pe9!+D^g5alVc}Olg(MSHD-$kC-cQ(X-qtLylhEV z|3SL@M8$@JhWDPdP7sH!iY@jZuLP<-86Sfe#{8jtGFz&mk`0#bKTs~%7VY;)2?F$6 zHs>`|EZK}l+P4mvN)Km}x25++aLoN>2tU%nRLkpO=T)KD~j z67WAKk3)N%hzooRawHT({UL4<;tnDb`ddWY`&~pl68%J6*dd^X1V2qgoF7tt1Kva; z68;4uuF%UwT!LkwhF`5W0{z=W*ndn!9net+Xcq=*UqF2$k2oDf6zH!Lv94hv9{8gH z76SPxpoYsd74Y9D!mk$K&xjar3$DF}hv6tOCB#37xR}==F|{uW@ns_T{XmX)IKV0q j{%{c*V(~2@4g@$F;Mo9w5#ZkgOk$n1KNukYhRJ^luu_-d diff --git a/build/irq-asm.o b/build/irq-asm.o index 9531395529dd2fda089fe8fb981c37158e668e5a..4e42f372394ae9ca7e34a9a511c10fc03e0c5500 100644 GIT binary patch literal 1168 zcmb7@y>Ami5XI+6%}M0-;>_Dv_Phvi zf}A!z?>-VUItky!kZE}KvW7FsziSYwWg+7$NWyF%M}{AeM}{AghlU@K&ka8&4-7vc z_YFTKcMZ>yTZW&JD~6wwONM!c4LCIcqpa&KS;(PhwxAf`MJ@4o{uj&Vrk_-KVP;#AGCk#Sw3(@CB>=O?BdR(K*{}ugy zn4gqi*Y-ZY)UQnZEpp_JRlw)x#c9i+kUx}p8hH^uOMsDA;dw7K@)~@R03)x%mlVak zfw*GvJH#!E-y`l?{1I{A;ws{S#k+{lEp8(oT6}5i<}JKChkvfb{s3hBoc;g+ delta 467 zcmXYuF)svB6h`lxRjjSHP|I4@EXxu!n@ChN8Y+oIgK7$iP9a7VD#cDF*+fUJ(fJ1w ziPn#}rB>xT+%I|g&Uu;4dvj+z{n{K~XP;Kxbdy!jd0MYN@^o8$=VfQgtZ8Nqt)wOW z^Pj?sj!$IJoIeD0{Vr(UuYwl*BB0$Y-}i!+eEXlaie=x3&4KrWR(v*S z)n|f+-U?c)2iarxWc7PCEZHP&-F{Qe;{+e6c@e>P)Eq(ZT{VXjd|%DI2!5#M#soi7 y^DP8FF*`Lrldy57W&i{))QpDUmuiMaaF}rtyi_x2g5Rqr^;hGi{U%EMo5(M1{7w-7 diff --git a/build/isrs-asm.o b/build/isrs-asm.o index 674648d9e2fa7bda079ea3e74f072620b13665d5..d9fb09391cb2adaa3cf68e1534e276f205f7277a 100644 GIT binary patch literal 2096 zcmb8wOGs2v7zgk(YTDBo?VXio5J5D0@7N0>hDa-l7$T}wI%Bs+m>GvVSFlZ)I|+tx zSrFzTiXh6B3ki{+RVA)kmALAxvUatx|92mrkIz*H&prR&J?9?3xpy89x-a*{Vlfr9 zn5tDqN~ObzE`L0%>Qzm&^uI>hlX`u4RVUEMwn~KO8!*;}nT9lQggL6M3Fp}5s*H6R zoT$V3sMDUi(fNL}>y*02E{yg&fOQ+tqt>=wDg61@(i+;6{5Ow-@(+3e6QOB|o-?NZ zpr?$f1U+d?+v#y*RHgK&G2JHZ8q;mjIp0);zG0@QYJJ}KMvABXxQU|W$ITQE`Ed)y z7C$ypO!yH=<>O>}MByuiU zE*sN>)P2T#$Qk1na@u$=xzl(bxy^V#IbqyNMpu3N>*Evgmv^QUs`|A$TV1UF7+cIt z)6~lR&G@VM^M=;!!w>WrzMv;PXV_E8O1|Q`UN(nxuNaJ>U8fMNp&iyV-0;;_r+%%h z0)ak>=kQKiT3r-V^fIDG)h8ohOkn*Pe+*8NuOPMs^yhCO(_NuP^CgUF0vh=~#*DAP zRpdVAXUJvdH^?K*?~xxde@1@F{2loP^D^=~X8J0cVQz*$G9QE&n7iO5=5F{m^L4le zof^HqyU4U>kRihWp7}x z)Y~a+3ERRc;V$80!pDVA2%i)_C2XxJP*!Nk5-nMyC5yCVm6j~il66|LP)k;7%Svro zsVytDWu>;P)RvXnvQk@CYRgJ(S!qgEnhGlIA1oH}mZ*3`x!}VQ9{=FI7NcLQu>Av^ C<%y*L literal 1920 zcmb7_O-NKx6vyxLWBkaP(af^)quNN(=zH21M6^gLjBpVlEz(h^beI`sW`wClQ9C1s z7SWBOx zjtRpt<>oILb6f^`{M=z8rYxNLUm1I%MPyYM!?5+BnDke1E*Fh-n;*B&;&4el_t{Ps z83wpjaDUjaXEQf@zgVR)XRU?de!F;H4Yx3+*hn=4)?yC!1piK%l%c)c1?5n?s4{92 zRZexHDyU3UCH<1M5n2&dMPGeYO`oKvhTi+CmR|dL1HJHb9X<2&MtbV!P4vjmCKaVw zQ8BtJs-A9%YM>jUHd9elBV|Qxp)pZSbY9d}8W6RO`b0I;QBm8;6SadnMD3(jQ7zOc zs+DR*wGj(5+!~3_M&~Zh$4u!%X|c3i`ZlvXFpr_trNQXK=!2@Z#Pydb?>iGOB#Q+T z&yVK|xk6%u)#Xf(g>%VtFbC_`1s8lRD$LK-HDH00eS+V8&)Ou%v{(~xUgH0-V~#Q7 z+aO}R{tRb)PXzb^XH)^4a_(d2<*Ry`DTDVqc(Re?q!BY1m>S(o(s_DOUyWx2#gn* z7XtKohWVAn_n4O~e$4#Q;ss{h3k3Fi!@Lrp&!3rbmk=2L&Wu|YGJX_r|3a>3#?1_Q zH*>qi-ORYn;kfBf=Ca9j=XfIBIXX4nIg!uh_b2k1I5%^Op)WC=E}Tqc$I{81;nAUF zaWpwqn3&8Cbt!fgdy2ai_b5J~_@LrLiVrJ3qS#$$P&;(BMOS-twMkdIbhS-a`*gKY zS3C8zQ%^hfv{O$z^|Vt@JN2|vPdoLrQ%^hX)=s+vr=ydZ3?GSnVR|GuT=Ln^XU)N% GiNqhILWm^* diff --git a/build/str_ops.o b/build/str_ops.o index fe50c3b102589e2c9129479035f477fd49913ab3..b6c63545b02b97f1843c51fc0e38b70334e98611 100644 GIT binary patch delta 516 zcmXw!ODIHP6vxl^efPU5^SF%0cq|4N(PR{9!sfD2@%ITzPjY$W4)Mj~ynXx|W>M8 z2~fg0nzvG7lID$=QqHG$=(T!a&_=Ysyzh8>xoTuYTO delta 350 zcmcb>JAr3{0@D?yiAvcU|8X-;=3t89G+ zNW_mtjdcwp1H*&Kj4Z;FdsqZmAFwho7))NsqRiUE#K7P_*^pIu@*SXf4+}`uN1%8P zP=ymvTzs+t>lE86plw17j0`G38U_S_3>_ebITj>u4CKECVh|1DTLEdg$%1U^lO5PJ x5?X;gCN2hsNlZP9e{3R;$dJ2g3<~gaiIH5pmYF~Zh_JZp!6On4FK1$IA#C< diff --git a/build/vfs.o b/build/vfs.o index bd1d0a2feb8a5f92b07d38fcac7718d32aae982e..1d3f66d1dbec7c21eb1ce10afeb4fe8f609df39b 100644 GIT binary patch literal 5140 zcmbtXZERcB89u(gX+v?{KwU6k#znnR6Ba_sT-1-CCfKA*1XkMgOXDyc&fq)sZ`hN^W)ux=VtGpVqt0#xBW&%Ni^ zH(6V#cC72?yx-@2&pEHJk3QMn=JWZ48b09{6-tP|-0n)E4%CUIVu{GjMP}lrPR@*O zt_6H}tyC&`c$VUwpwesns?4AlSON~PniATDiMmPB@s*p36u0K)>hinIrW4e%{Zyme zj+l;0-fzdvFu0+`;O2_Dz1yq-8CV7qcoW}soyG0&9?Dy$aS|&pR# zgx(_5pDE}sO}?-Bt4QV6maOHuiE2dF?Wntsu?edtW?$HFKV4*I9e?(P+*GJ@Z*kiW z#)&YC{1G!ccG0RD+3<)}GqadconZfb9cIpKU=p2G_eiJvQ;Yd7A3K zgG7uRS?+seNVDI4V%@ptt8$;0tbgGPjA_@W%H)|Zk;y%_WmcZ2E}_h4b3 zPQc{}N6oVojhdrW95tt0 zYTTt}UFv%Td1mb*7B}=LoH-{o01;1Wor~%g@cubR+&v(@ppj^cH#Eu_$gkmv8@oCb zz1+FbWA{xxu7Jn<3aGdT?@gYr+Atd zqtXQ;FHK(3+@ksZoPR=>%jGGbRi`|HZCR>nWruLuoh)bcuv6iwu-kV`_5){c(GXHt zc!d1~;i9%YS@v|k1Kj0~Qtq>o6)Wg}!pcPbxkBLh3nX=bTg~-glsB@EHY#{;Ko}CD3dvlD_#kPChJtO!!)qP zvAkB<;K(>?>F#DecD+hIWx6T6ZPnNvSboGTy>q$BT^y?j$8}h4Iqt4o^IoUCKZv3? zqxdzzwZH%{3al7o8^1hC*_ zu-iy@eZlyqw)+#XObjHU_YD0ag!1ezg6r)ytUiQt8J>l5Wt(EL^+w&MXSdZG(ZN1O}`E)3Ba_^;?WHf#-ABc1l}MoUIGv%t2?DCInj~*L0mYE!xQS z-(kyGo_yMZ6F&dHeU(TC#2wJNgx`)`n5+62+SYmXIRu?%yk8xYI^}gYX~Pw7LKu+0 z4&77G?U%Z4y?e_3s51+l`b9U6Nu4?99EVOCbG5D}Ej7 z)>-yb1O86vOhRWBbvPQc!vj`gKhVm!*r#ThWPhWTJYV&hvzoM1h(HH z#Af8izX-Ia9{WkHr2RmS2$`Ot{CyQXioQtCdDny9qtXZcsryJ4WAoW4QR%IP-XwTx zFfR3;l}NuFpF;0Wcj|mAf4oPWBSmKfkbIvaz)^YZz}#DxSC`Kh{~T;*Ib z6&4h{8^u^0-k7BSh9CPD#0_B1IP}MJ#kr~-rosesm2v{wGo`pZynJ1JR4NNFng8#P zv^N52m9=Z-7r2a`;V+*eC1(XH!!H)&lRSN1#<7 zrv5KLt6od`P0*@;l0LJ*{_O?yInb(yQvV`o)h|h30C2#1|0De$(5lywz6M(L zHPTf$5UPifz6-SKSER+ko@`^6z{`OA)fYY4_Egpq@nQS|r@C4*nZ$4`lT27iF>t_< z^kf|-NEh4Fy*n}~$SY3Tvh(aW4`utrK8V}!DiC+x5d<1u*T4aXyD4c^nElB?$_AA% zp0tu(797I7BblWpUkyk)?*@*e1H)nBFU6C25{x%JHfpe7Mt(NjcB2 zFDS&*L|mt>688Z${Kq*!8g_>z9w#5ol4q{6q4C=sAr0FcIr*lQesvhD&>p2tPlRbWx&?mZ9B?{D^l8 z@f?ur+(pDXljLKaM~Pwlxg{U#dW{IZUlO7B8_JY9u z8td$p{KJy|IT3z;O@!Z5K>B@`H0-ZQTn-uS8;IcV1!^Ju#g_CBr2HMpzbg5+!#C}o zBEoKuq<)6C+ zo4d6eSC&XwInDNZQiN2A|7fADkoYGE5G@82$Hp!Js$%#fBL9Sfpj9l&4*>xx9p5)Q zb6KZB4UDz>&3o^g_ujmjojHH;q28WQC?s?XiLkgT39)07Z)uazEH;Zx!d*|Snn@8A z;+^*^mCDy?TCMSU=$XkA7<65eBw3_)CnNL>tmi zb+0@y^C@@9^oEi#I*34b9S2NbIyfUPJG7^vz!bU!?%&^85KzkM7^5&aX_oqv!(KdDc?$}zNE+#;{d8yQ+&K(&e(FP{BquR{ zak};LfH${s?K+Vz(^iWgSi5&$g;0{K@H*3Yjg@daD$|CyxXV4)-+rN3!Kvc{ubtgO3X2CvDo0cj1yR`J6sWvb7_8UI4w5t(I zQ{!=s;LECmFAPa9z8!|Ubl@vM$xx&ONR4W9$4S;pr8oQ(bb+OUq&~BdyWERy`2@e# zM)MRlr>*98@bRGxis!_YDDu)_z--N~e$zjw|H z`QkQ9oCf5X#H{OiFnEzo@I?#0Be5D*;z8m5!C1uY7~}VM=5i?C4405yZea~^ZJoz zB3b#xkZ4*x%acKq*wbdesq z(aE&w7~FjRqUz*>#S%?h4)pA^CMKV<#wM&I)5Wm~yI4$Z63~iACyGvXeB2(kM#jc% zt2kS9?7Y>qrHKTzrY${L7=|rp5~C$|19NLrachSK_qoaG3CAkf+1#i-{K2t#X&$y` z#&WjRRO~=H8~lvG&S8&}hj5ySM4Gl(%=xJ0jAE#-2qeo`4`(tRR`bKV_iwY>Qun1= zg@`kGw9wOgMQE-*bXUYQPlbFvZ!orFd}X4RaWraL=<=?o?)!K|SG3+WGSL>}JJI^C zsJR3cPqqO(P4F`WB zjt;1xn=3-_PT-QB2X~Kw4ovf;JWKy4&8}$Nt;s|WhciYr4h@Dy5T$+?e;%AKY~UQLa#*`v;9LYp&XbuA_%#}U{?qtruy4cI$E#y4 z=;y$B4xF(7r^U!^;JgUVUq6Ji49-xk5Q70fma)I;N2H3gc_(`W=oEY$)xCl}o^tHt zjz|q>ovcV5DHcVlFiC;zR_u`tVw*_iCi8iF0wXxq9z8Tt$mVT^zR~tE5RtM#%Cd1k zeNPMMqnxtch4)8PpU{GvW&rDb6Z#xa9)BG+DLD*eTMzi6to?0ApZpKwasSf)y?EH@ zuifv;H*I_#P^fv$xD{WK4FAQrtIas+VI0Uh9vm=nQ`bZruw>e5JfkB;jgo! zn)atQ0bC|OyrB_| z_TzZ;xk&pw4XV-3b5oy%w7;N@K-#~0jr=NPefE+6Ey((uqx?E#eWp=fgsjgp%I6{L zbBppCWPL_az6e>LN0i0PNHLWY2S$qO78S?xxJxHTh_GJr2yD#gEO5JFII(c;> z1>C_h39!fQ30n3~$m^HgJyX7_-!3|oGvkv*8G5gs9j2n13l-gC1v}?V7G~u)XyB%0 z-9z{wZztkIx(7)8cFOn#+DgRtb3YO18uv&DTbtiDk$b{`6NfU!pC)3fe?{3}R`wOj zi1Q|8Z0uiB2LBIA|DKX-u?+MZRd^?m{_mrVJRTz=uS3-1V#_Q2E0i&bv&37mFQ|wA zzY!5PfpdcLy+ruwB_hv$BH|qeGESZ{{J%iNd|y)dZKYoT8jXmfWc({C{k^I1lG4AY z@Matn%qKy-1M^UFpTgrn#&ap7E@dTujflK|rtlv`aszT8{~jXv(@K6$$rjepz}(Xc fd4^Etz99ZU;rj|Lt{3#(3WpS)Q24UKHx&K{iioCQ diff --git a/change.log b/change.log index 730d60d..38afb4a 100644 --- a/change.log +++ b/change.log @@ -1,10 +1,19 @@ +[GOOD] BUILD 0.1.0.590 DATE 9/05/2011 AT 2:40 PM +==================================================== +Mainly changed: FS.Initrd ++ (kind of) refractored VFS, bugfixed ++ Rewrote 'initrd' file system, fixed many problems ++ Working 'cat' and 'dir' console commands ++ Wrote 'initrd' image write application (for windows), however it may be bugged + [GOOD] BUILD 0.1.0.551 DATE 9/03/2011 AT 9:25 AM ==================================================== Mainly changed: HAL.FSs + Updated 'mount' call in floppy driver, now done after controller is initialized + Added 'detect' function for FAT file systems -+ Implemented 'initdr' driver, however still bugged ++ Implemented 'initrd' driver, however still bugged + Improved logger +? TODO: Refractoring VFS [GOOD] BUILD 0.1.0.470 DATE 8/30/2011 AT 6:40 PM ==================================================== diff --git a/filelistC.txt b/filelistC.txt index 407a86b..353b022 100644 --- a/filelistC.txt +++ b/filelistC.txt @@ -85,6 +85,21 @@ Kernel/hal/filesys/initrd/initrd.c Libraries :: Character types Kernel/library/ctype.c +Libraries :: Standard input/output +Kernel/library/stdio.c + +Libraries :: Storage +Kernel/library/storage.c + +Libraries :: Time +Kernel/library/time.c + +Libraries :: Arrays :: Dynamically expanding array +Kernel/library/array/dynamic_arr.c + +Libraries :: Arrays :: Ordered array +Kernel/library/array/ord_arr.c + Libraries :: Memory :: Allocation Kernel/library/memory/memory_alloc.c @@ -97,9 +112,6 @@ Kernel/library/memory/memory_info.c Libraries :: Memory :: Initialization Kernel/library/memory/memory_init.c -Libraries :: Standard input/output -Kernel/library/stdio.c - Libraries :: Standard library :: Convert operations Kernel/library/stdlib/convert_ops.c @@ -109,18 +121,9 @@ Kernel/library/stdlib/mem_ops.c Libraries :: Standard library :: Number operations Kernel/library/stdlib/num_ops.c -Libraries :: Standard library :: Ordered array -Kernel/library/stdlib/ord_arr.c - Libraries :: Standard library :: String operations Kernel/library/stdlib/str_ops.c -Libraries :: Storage -Kernel/library/storage.c - -Libraries :: Time -Kernel/library/time.c - Memory Manager :: Memory heap Kernel/memory/mem-heap.c diff --git a/kernel.bin b/kernel.bin index 11eb52b6a768c179a05d1944bfb5efd57a4df597..56a299762d5475810315cc15524a4309c8740e66 100644 GIT binary patch delta 24634 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 diff --git a/luxos.img b/luxos.img new file mode 100644 index 0000000000000000000000000000000000000000..52e5dedf2317ea2f958b53564d4d43975e4f1c53 GIT binary patch literal 1474560 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

2u9~VkZ|wMeS<#Ub0Gcp$0gpx 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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk m1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72>d@T@V@}v6qX+V literal 0 HcmV?d00001 diff --git a/scripts/build.bat b/scripts/build.bat index bc1dc65..781c088 100644 --- a/scripts/build.bat +++ b/scripts/build.bat @@ -2,5 +2,6 @@ C: chdir C:\Dev\lux +set CYGWIN=nodosfilewarning -C:\cygwin\bin\bash /cygdrive/c/Dev/lux/build.sh \ No newline at end of file +C:\cygwin\bin\bash /cygdrive/c/Dev/lux/build.sh diff --git a/scripts/version.txt b/scripts/version.txt index 0eedeef..9706647 100644 --- a/scripts/version.txt +++ b/scripts/version.txt @@ -1 +1 @@ -551 +590

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