From df19ed76316559f2fbf843562f5afb48b2513534 Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Mon, 8 Jan 2018 23:37:31 -0800 Subject: [PATCH] Added VERY old code. Very cringy to look at, but hey, we all had to start somewhere... --- .../Final/Makefile | 336 ++ .../Final/adc.c | 28 + .../Final/adc.h | 19 + .../Final/main.c | 228 ++ .../Labs/Lab 6/Makefile | 335 ++ .../Labs/Lab 6/main.c | 75 + .../Labs/Lab 7/Makefile | 335 ++ .../Labs/Lab 7/main.c | 177 + .../Labs/Lab 8/Makefile | 336 ++ .../Labs/Lab 8/adc.c | 28 + .../Labs/Lab 8/adc.h | 19 + .../Labs/Lab 8/main.c | 189 + .../Assignments/Assignment 1/Assignment 1.pdf | Bin 0 -> 53254 bytes .../Assignments/Assignment 2/Assignment 2.pdf | Bin 0 -> 81418 bytes .../Assignment 3/.~$a.exe.insyncdl | 0 .../Assignments/Assignment 3/CppAssign0.cpp | 66 + .../Assignments/Assignment 3/a.exe | Bin 0 -> 1366003 bytes .../Assignments/Assignment 4/CppAssign1.cpp | 13 + .../Assignments/Assignment 4/a.exe | Bin 0 -> 1365997 bytes .../Assignments/Assignment 4/player.h | 60 + .../Assignments/Assignment 4/rps.h | 61 + .../Final/PC Application/Makefile | 30 + .../Final/PC Application/SimpleSerial.h | 66 + .../Final/PC Application/a.exe | Bin 0 -> 1532469 bytes .../Final/PC Application/conio.h | 53 + .../Final/PC Application/lab5.cpp | 35 + .../Final/Wunderboard Firmware/Makefile | 335 ++ .../Final/Wunderboard Firmware/main.c | 289 ++ .../Labs/Lab 2/Makefile | 335 ++ .../Labs/Lab 2/main.c | 192 + .../Labs/Lab 3/Makefile | 337 ++ .../Labs/Lab 3/diskio.c | 623 +++ .../Labs/Lab 3/diskio.h | 76 + .../Labs/Lab 3/ff.c | 3553 +++++++++++++++++ .../Labs/Lab 3/ff.h | 613 +++ .../Labs/Lab 3/ffconf.h | 179 + .../Labs/Lab 3/integer.h | 37 + .../Labs/Lab 3/main.c | 296 ++ .../Labs/Lab 4/Makefile | 337 ++ .../Labs/Lab 4/diskio.c | 623 +++ .../Labs/Lab 4/diskio.h | 76 + .../Labs/Lab 4/ff.c | 3553 +++++++++++++++++ .../Labs/Lab 4/ff.h | 613 +++ .../Labs/Lab 4/ffconf.h | 179 + .../Labs/Lab 4/integer.h | 37 + .../Labs/Lab 4/main.c | 300 ++ .../Assignment 2/.cproject | 54 + .../Assignment 2/.project | 26 + .../Assignment 2/calc.c | 146 + .../Assignment 2/dynamicArray.c | 291 ++ .../Assignment 2/dynamicArray.h | 41 + .../Assignment 2/makefile | 23 + .../Assignment 2/testDynArray.c | 87 + .../Assignment 5/.cproject | 42 + .../Assignment 5/.fuse_hidden00004383000000f5 | Bin 0 -> 32988 bytes .../Assignment 5/.project | 26 + .../Assignment 5/Makefile | 27 + .../Assignment 5/dynamicArray.c | 572 +++ .../Assignment 5/dynamicArray.h | 52 + .../Assignment 5/dynamicArray.o | Bin 0 -> 26008 bytes .../Assignment 5/main.c | 164 + .../Assignment 5/main.o | Bin 0 -> 11856 bytes .../Assignment 5/main2.c | 74 + .../Assignment 5/main2.o | Bin 0 -> 6544 bytes .../Assignment 5/prog1 | Bin 0 -> 32988 bytes .../Assignment 5/prog2 | Bin 0 -> 31788 bytes .../Assignment 5/program_demo.txt | 223 ++ .../Assignment 5/toDoList.c | 180 + .../Assignment 5/toDoList.h | 17 + .../Assignment 5/toDoList.o | Bin 0 -> 11408 bytes .../Assignment 5/todo.txt | 3 + .../Assignment 5/type.h | 16 + .../Assignments/Assignment 1/ASM_Project.exe | Bin 0 -> 22528 bytes .../Assignments/Assignment 1/Assignment1.sdf | Bin 0 -> 393216 bytes .../Assignments/Assignment 1/Assignment1.sln | 22 + .../Assignment 1/Assignment1.v12.suo | Bin 0 -> 31744 bytes .../Assignment 1/Assignment1.vcxproj | 79 + .../Assignment 1/Assignment1.vcxproj.user | 3 + .../Assignments/Assignment 1/main.asm | 59 + .../Assignment 2/Assignement 2.sdf | Bin 0 -> 393216 bytes .../Assignment 2/Assignement 2.sln | 22 + .../Assignment 2/Assignement 2.v12.suo | Bin 0 -> 19968 bytes .../Assignment 2/Assignement 2.vcxproj | 79 + .../Assignments/Assignment 2/Assignment 2.sln | 22 + .../Assignments/Assignment 2/main.asm | 268 ++ .../Assignments/Assignment 3/ASM_Project.exe | Bin 0 -> 1225216 bytes .../Assignment 3/Assignment1.v12.suo | Bin 0 -> 31744 bytes .../Assignments/Assignment 3/Assignment3.sdf | Bin 0 -> 393216 bytes .../Assignments/Assignment 3/Assignment3.sln | 22 + .../Assignment 3/Assignment3.v12.suo | Bin 0 -> 20992 bytes .../Assignment 3/Assignment3.vcxproj | 79 + .../Assignment 3/Assignment3.vcxproj.user | 3 + .../Assignments/Assignment 3/main.asm | 441 ++ .../Assignments/Assignment 4/ASM_Project.exe | Bin 0 -> 23040 bytes .../Assignment 4/Assignment1.v12.suo | Bin 0 -> 31744 bytes .../Assignment 4/Assignment3.v12.suo | Bin 0 -> 13824 bytes .../Assignments/Assignment 4/Assignment4.sdf | Bin 0 -> 393216 bytes .../Assignments/Assignment 4/Assignment4.sln | 22 + .../Assignment 4/Assignment4.v12.suo | Bin 0 -> 3584 bytes .../Assignment 4/Assignment4.vcxproj | 79 + .../Assignment 4/Assignment4.vcxproj.user | 3 + .../Assignment 4/Assignment4_perrenc.asm | 254 ++ .../Assignments/Assignment 5/5.user | 3 + .../Assignments/Assignment 5/ASM_Project.exe | Bin 0 -> 1225216 bytes .../Assignments/Assignment 5/Assignment5.sdf | Bin 0 -> 393216 bytes .../Assignments/Assignment 5/Assignment5.sln | 22 + .../Assignment 5/Assignment5.v12.suo | Bin 0 -> 33280 bytes .../Assignment 5/Assignment5.v52.suo | Bin 0 -> 19456 bytes .../Assignment 5/Assignment5.vcxproj | 79 + .../Assignment 5/CS271_proj5_perrenc.asm | 441 ++ .../Assignments/Assignment 5/Tasks.docx | Bin 0 -> 5558 bytes .../Assignments/Assignment 6/ASM_Project.exe | Bin 0 -> 27136 bytes .../Assignment 6/Assignment6.opensdf | Bin 0 -> 40 bytes .../Assignments/Assignment 6/Assignment6.sdf | Bin 0 -> 393216 bytes .../Assignments/Assignment 6/Assignment6.sln | 22 + .../Assignments/Assignment 6/Assignment6.user | 3 + .../Assignment 6/Assignment6.v12.suo | Bin 0 -> 33792 bytes .../Assignment 6/Assignment6.v52.suo | Bin 0 -> 19456 bytes .../Assignment 6/Assignment6.vcxproj | 79 + .../Assignment 6/CS271_proj6_perrenc.asm | 632 +++ .../Assignments/Assignment 6/Tasks.docx | Bin 0 -> 5618 bytes .../Final/CS271_perrenc_FinalPaper.pdf | Bin 0 -> 102419 bytes .../Final/Keil ARMv7/Proj.axf | Bin 0 -> 1644 bytes .../Final/Keil ARMv7/Proj.build_log.htm | 25 + .../Final/Keil ARMv7/Proj.htm | 20 + .../Final/Keil ARMv7/Proj.lnp | 5 + .../Final/Keil ARMv7/Proj.map | 89 + .../Final/Keil ARMv7/Proj.uvgui.corwin | 2601 ++++++++++++ .../Final/Keil ARMv7/Proj.uvgui_corwin.bak | 2601 ++++++++++++ .../Final/Keil ARMv7/Proj.uvopt | 193 + .../Final/Keil ARMv7/Proj.uvproj | 412 ++ .../Final/Keil ARMv7/Proj_Target 1.dep | 2 + .../Final/Keil ARMv7/assem.d | 1 + .../Final/Keil ARMv7/assem.lst | 124 + .../Final/Keil ARMv7/assem.o | Bin 0 -> 1692 bytes .../Final/Keil ARMv7/assem.s | 30 + .../Final/Turned In/LoopAndMul.s | 3 + .../Final/Turned In/LoopandMulARMv7.txt | 17 + .../Final/Turned In/LoopandMulx86.txt | 32 + .../Final/Turned In/ParamProcARMv7.txt | 30 + .../Final/Turned In/ParamProcx86.txt | 48 + 141 files changed, 26107 insertions(+) create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Final/Makefile create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Final/adc.c create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Final/adc.h create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Final/main.c create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 6/Makefile create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 6/main.c create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 7/Makefile create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 7/main.c create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/Makefile create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/adc.c create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/adc.h create mode 100644 OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/main.c create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 1/Assignment 1.pdf create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 2/Assignment 2.pdf create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 3/.~$a.exe.insyncdl create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 3/CppAssign0.cpp create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 3/a.exe create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/CppAssign1.cpp create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/a.exe create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/player.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/rps.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/Makefile create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/SimpleSerial.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/a.exe create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/conio.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/lab5.cpp create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Final/Wunderboard Firmware/Makefile create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Final/Wunderboard Firmware/main.c create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 2/Makefile create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 2/main.c create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/Makefile create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/diskio.c create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/diskio.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ff.c create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ff.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ffconf.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/integer.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/main.c create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/Makefile create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/diskio.c create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/diskio.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ff.c create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ff.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ffconf.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/integer.h create mode 100644 OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/main.c create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 2/.cproject create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 2/.project create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 2/calc.c create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 2/dynamicArray.c create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 2/dynamicArray.h create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 2/makefile create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 2/testDynArray.c create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/.cproject create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/.fuse_hidden00004383000000f5 create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/.project create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/Makefile create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.c create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.h create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.o create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/main.c create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/main.o create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/main2.c create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/main2.o create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/prog1 create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/prog2 create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/program_demo.txt create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/toDoList.c create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/toDoList.h create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/toDoList.o create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/todo.txt create mode 100644 OSU Coursework/CS 261 - Data Structures/Assignment 5/type.h create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/ASM_Project.exe create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.sdf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.sln create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.vcxproj create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.vcxproj.user create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/main.asm create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.sdf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.sln create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.vcxproj create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignment 2.sln create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/main.asm create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/ASM_Project.exe create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment1.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.sdf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.sln create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.vcxproj create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.vcxproj.user create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/main.asm create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/ASM_Project.exe create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment1.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment3.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.sdf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.sln create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.vcxproj create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.vcxproj.user create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4_perrenc.asm create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/5.user create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/ASM_Project.exe create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.sdf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.sln create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.v52.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.vcxproj create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/CS271_proj5_perrenc.asm create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Tasks.docx create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/ASM_Project.exe create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.opensdf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.sdf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.sln create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.user create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.v12.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.v52.suo create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.vcxproj create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/CS271_proj6_perrenc.asm create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Tasks.docx create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/CS271_perrenc_FinalPaper.pdf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.axf create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.build_log.htm create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.htm create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.lnp create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.map create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvgui.corwin create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvgui_corwin.bak create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvopt create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvproj create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj_Target 1.dep create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.d create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.lst create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.o create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.s create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopAndMul.s create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopandMulARMv7.txt create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopandMulx86.txt create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/ParamProcARMv7.txt create mode 100644 OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/ParamProcx86.txt diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Final/Makefile b/OSU Coursework/CS 161 - Intro to Programming I/Final/Makefile new file mode 100644 index 0000000..449e1fd --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Final/Makefile @@ -0,0 +1,336 @@ +#---------------------------------------------------------------------------- +# Wunderboard Makefile Template written by Dan Albert +#---------------------------------------------------------------------------- +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name. +TARGET = main + +# List C source files here. +SRC = $(TARGET).c \ + adc.c + +# MCU name, you MUST set this to match the board you are using +# type "make clean" after changing this, so all files will be rebuilt +MCU = at90usb646 + +# Detect platform +UNAME = $(shell uname) + +ifeq ($(UNAME),Linux) +ENV=unix +endif + +ifeq ($(UNAME),Darwin) +ENV=unix +endif + +ifndef ENV +ENV=windows +endif + +ifeq ($(ENV),unix) +PROGRAM = dfu-programmer +PROGRAMFLAGS = $(MCU) +ERASE = erase +FLASH = flash "$(TARGET).hex" +START = start +else +PROGRAM = "C:/Program Files (x86)/Atmel/Flip 3.4.1/bin/batchisp.exe" +PROGRAMFLAGS = -device at90usb646 -hardware USB +ERASE = -operation erase F +FLASH = -operation loadbuffer "$(TARGET).hex" program verify +START = -operation start noreset 0 +endif + +# Processor frequency. +# Normally the first thing your program should do is set the clock prescaler, +# so your program will run at the correct speed. You should also set this +# variable to same clock speed. The _delay_ms() macro uses this, and many +# examples use this variable to calculate timings. Do not add a "UL" here. +F_CPU = 8000000 + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = obj + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + +MATH_LIB = -lm + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + +#============================================================================ + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +# Display compiler version information. +gccversion : + @$(CC) --version + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +## Program +.PHONY: program +program: all + $(PROGRAM) $(PROGRAMFLAGS) $(ERASE) + $(PROGRAM) $(PROGRAMFLAGS) $(FLASH) + $(PROGRAM) $(PROGRAMFLAGS) $(START) + +doxygen: + doxygen + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVEDIR) .dep + $(REMOVEDIR) $(OBJDIR) + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym \ +clean clean_list diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Final/adc.c b/OSU Coursework/CS 161 - Intro to Programming I/Final/adc.c new file mode 100644 index 0000000..8d89140 --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Final/adc.c @@ -0,0 +1,28 @@ +/** +@file adc.c +@brief Wunderboard ADC Helper Functions +@version .01 + +@section intro Code Overview +This is the code for the Wunderboard ADC helper functions. +*/ + +#include "adc.h" + +unsigned char read_adc(uint8_t channel){ + + unsigned char test; + + ADMUX = 0x60 | channel; // Set the channel to the one we want + ADCSRA = 0b11000110; // Start a new sample. + while ((ADCSRA & 0b00010000) == 0 ); // Wait for a Valid Sample + ADCSRA |= 0b00010000; // Tell ADC you have the sample you want. + ADCSRA |= 0b01000000; // Start a new sample. + while ((ADCSRA & 0b00010000) == 0 ); // Wait for a Valid Sample + ADCSRA |= 0b00010000; // Tell ADC you have the sample you want. + + test = ADCH; + ADCSRA = 0x00; // Disable the ADC + + return (test); +} diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Final/adc.h b/OSU Coursework/CS 161 - Intro to Programming I/Final/adc.h new file mode 100644 index 0000000..c3086fd --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Final/adc.h @@ -0,0 +1,19 @@ +/** +@file adc.h +@brief Wunderboard ADC Helper Functions +@version .01 + +@section intro Code Overview +This is the code for the Wunderboard ADC helper functions. +*/ + +#include + +/** +The read_adc() function allows for taking 8 bit measurements from any of the single ended ADC inputs. The function call is blocking. eg. read_adc(5) would read from ADC channel 5. +@param channel This is the channel to be read. +@return This is the return value from the ADC. +*/ + +unsigned char read_adc(uint8_t channel); + diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Final/main.c b/OSU Coursework/CS 161 - Intro to Programming I/Final/main.c new file mode 100644 index 0000000..f73cf4c --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Final/main.c @@ -0,0 +1,228 @@ +/** +@file main.c +@brief Lab 8 Starter Code +@version .01 +@mainpage Lab 8 Starter Code + +@section intro Code Overview + +@section hw Hardware Pin Out +Port A: +A0 - A3 : Push Buttons +A4 - A7 : Slide Switches + +Port B: +B0 - B3 : SPI (SD Card) +B4 : Nothing +B5 : Audio Out +B6 : Red Enable +B7 : Green Enable + +Port C: +C0 - C7 : LED Array (Row) + +Port D: +D0 - D1 : Nothing +D2 : Serial RX +D3 : Serial TX +D4 - D7 : Nothing + +Port E: +E0 - E2 : LED Array (Column) +E3 : USB (UID) +E4 - E5 : Nothing +E6 : Relay +E7 : Nothing + +Port F: +F0 : ADC Channel 0 +F1 : ADC Channel 1 +F2 : ADC Channel 2 +F3 : ADC Channel 3 +F4 : ADC Channel 4 (Audio In) +F5 : ADC Channel 5 (Accel X Axis) +F6 : ADC Channel 6 (Accel Y Axis) +F7 : ADC Channel 7 (Accel Z Axis (if installed)) + + */ + +/** Includes */ +#include +#include +#include "adc.h" +#include +#include + +/** Constants */ +#define F_CPU 1000000U +#define DELAY .02 + +#define YMIN 180.0 +#define STEPSIZE 2.75 + +#define SLOW 50 +#define FAST 25 +#define FASTEST 10 +/** Global Variables */ + +/** Functions */ + +/** The initialize() function initializes all of the Data Direction Registers for the Wunderboard. Before making changes to DDRx registers, ensure that you have read the peripherals section of the Wunderboard user guide.*/ +void initialize (void) { + /** Port A is the switches and buttons. They should always be inputs. ( 0 = Input and 1 = Output )*/ + DDRA=0b00000000; + + /** Port B has the LED Array color control, SD card, and audio-out on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRB=0b11000000; + + /** Port C is for the 'row' of the LED array. They should always be outputs. ( 0 = Input and 1 = Output )*/ + DDRC=0b11111111; + + /** Port D has the Serial on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRD=0b00000000; + + /** Port E has the LED Array Column control out on it. Leave DDRE alone. ( 0 = Input and 1 = Output )*/ + DDRE=0b00000111; + + /** Port F has the accelerometer and audio-in on it. Leave DDRF alone. ( 0 = Input and 1 = Output )*/ + DDRF=0b00000000; +} + +void clearArray(void) +{ + PORTB &= ~((1 << PB6) | (1 << PB7)); // Disable latches + PORTC = 0x00; + PORTB |= (1 << PB6) | (1 << PB7); // Enable latches + PORTB &= ~((1 << PB6) | (1 << PB7)); // Disable latches +} + +int readadcval(void){ + + char adcread = read_adc(5); + + if(adcread <= 181){ + return 0; + }else if((adcread == 182) | (adcread == 183)){ + return 1; + }else if((adcread == 184) | (adcread == 185) | (adcread == 186)){ + return 2; + }else if((adcread >= 187) & (adcread <= 191)){ + return 4; + }else if((adcread == 192) | (adcread == 193) | (adcread == 194)){ + return 6; + }else if((adcread == 195) | (adcread == 196) | (adcread == 197)){ + return 7; + }else if(adcread >= 198){ + return 8; + } + +} + +void printscreen(int loop, int loop3, const int *Red, const int *Green){ + int arrval; + clearArray(); + PORTE = loop3; + arrval = (loop+loop3); + + PORTB = 0b10000000; + PORTC = Green[arrval]; + _delay_ms(DELAY); + + clearArray(); + + PORTB= 0b01000000; + PORTC = Red[arrval]; + _delay_ms(DELAY); + + clearArray(); +} + +/** Main Function */ + +int main (void) { + /** Local Varibles */ + int loop = 0; + int *looppoint = &loop; + int loop2; + int loop3; + int speed = 20; + int adcreturn; + + const int Red[136] = {0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00001000,0b00000000,0b00001000,0b00101000,0b00001000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00001000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000100,0b00000100,0b00010000,0b00010000,0b00010000,0b00010000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00010000,0b00010100,0b00000000,0b00000000,0b00001000,0b00001000,0b00000000,0b00000000,0b00001000,0b00000000,0b00101000,0b00000000,0b00001000,0b00000000,0b00000000,0b00100000,0b00100000,0b00000000,0b00000000,0b00101000,0b00100000,0b00000000,0b00000000,0b00000010,0b00000110,0b00001110,0b00000000,0b00001110,0b00000110,0b00000010,0b0000000,0b00000000,0b00000010,0b00000110,0b00001110,0b00001110,0b00000000,0b00001110,0b00000110,0b00000010,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00001000,0b00001000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000010,0b00000110,0b00001110,0b00011110,0b00011110,0b00000000,0b00000000,0b00000000,0b00000010,0b00000000,0b00000000,0b00001110,0b00111110,0b00011000,0b00111110,0b00001110,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000}; + const int Green[136] = {0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000001,0b00000001,0b01000001,0b11000001,0b01000001,0b00000001,0b00000001,0b00001001,0b00000001,0b00001001,0b00101001,0b00001001,0b00000001,0b00000001,0b00000001,0b00000001,0b10000111,0b11000111,0b01000001,0b00000001,0b00000001,0b00001111,0b00001111,0b00000001,0b00000001,0b00001111,0b00001111,0b00000001,0b00000001,0b00001111,0b00001111,0b00000001,0b00000001,0b00001001,0b00000001,0b00000001,0b01000001,0b11100001,0b11100000,0b01000000,0b00000001,0b00000101,0b00000101,0b00010001,0b00010001,0b00010001,0b00010001,0b00000001,0b00000001,0b00000000,0b00000000,0b00000000,0b00010001,0b00010101,0b00000001,0b00000001,0b01001001,0b11001001,0b11000001,0b10000001,0b00001001,0b00000001,0b00101001,0b00000001,0b00001001,0b00000001,0b00000001,0b00100001,0b00100001,0b00000001,0b00000001,0b00101001,0b00100001,0b00000001,0b00000001,0b00000011,0b00000111,0b00001111,0b00000001,0b00001111,0b00000111,0b01000011,0b11000001,0b01000001,0b00000011,0b00000111,0b00001111,0b00001111,0b00000000,0b00001111,0b00000111,0b00000011,0b00000001,0b00000111,0b00000111,0b00000001,0b00000001,0b00001001,0b00001001,0b00000001,0b00000001,0b00000001,0b00000111,0b00000111,0b00000011,0b00000111,0b00001111,0b00011111,0b00011111,0b00000001,0b01000001,0b11100001,0b11100011,0b01000001,0b00000001,0b00000001,0b00000001,0b00000001,0b00000001,0b00000001,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000}; + + initialize(); + clearArray(); + + while(1){ + + adcreturn = readadcval(); + + if(adcreturn == 4){ + + for(loop2 = 0; loop2 < 50 ; loop2++){ + for(loop3 = 7 ; loop3 > -1 ; loop3--){ + printscreen(loop, loop3, Red, Green); + } + } + + }else if(adcreturn < 4){ + for(loop ; loop >= 0 ; loop--){ + + if(adcreturn == 2){ + speed = SLOW; + }else if(adcreturn == 1){ + speed = FAST; + }else if(adcreturn == 0){ + speed = FASTEST; + } + + for(loop2 = 0 ; loop2 < speed ; loop2++){ + for(loop3 = 7 ; loop3 > -1 ; loop3--){ + + printscreen(loop, loop3, Red, Green); + + if(loop == 0){ + loop = 128; + } + } + } + + adcreturn = readadcval(); + if((adcreturn < 4) != 1){ + break; + } + } + + + + }else if(adcreturn > 4){ + for(loop ; loop <= 128 ; loop++){ + + if(adcreturn == 6){ + speed = SLOW; + }else if(adcreturn == 7){ + speed = FAST; + }else if(adcreturn == 8){ + speed = FASTEST; + } + + for(loop2 = 0 ; loop2 < speed ; loop2++){ + for(loop3 = 7 ; loop3 > -1 ; loop3--){ + + printscreen(loop, loop3, Red, Green); + + if(loop == 128){ + loop = 0; + } + } + } + + adcreturn = readadcval(); + if((adcreturn > 4) != 1){ + break; + } + } + } + } +} \ No newline at end of file diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 6/Makefile b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 6/Makefile new file mode 100644 index 0000000..6c38e27 --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 6/Makefile @@ -0,0 +1,335 @@ +#---------------------------------------------------------------------------- +# Wunderboard Makefile Template written by Dan Albert +#---------------------------------------------------------------------------- +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name. +TARGET = main + +# List C source files here. +SRC = $(TARGET).c \ + +# MCU name, you MUST set this to match the board you are using +# type "make clean" after changing this, so all files will be rebuilt +MCU = at90usb646 + +# Detect platform +UNAME = $(shell uname) + +ifeq ($(UNAME),Linux) +ENV=unix +endif + +ifeq ($(UNAME),Darwin) +ENV=unix +endif + +ifndef ENV +ENV=windows +endif + +ifeq ($(ENV),unix) +PROGRAM = dfu-programmer +PROGRAMFLAGS = $(MCU) +ERASE = erase +FLASH = flash "$(TARGET).hex" +START = start +else +PROGRAM = "C:/Program Files (x86)/Atmel/Flip 3.4.1/bin/batchisp.exe" +PROGRAMFLAGS = -device at90usb646 -hardware USB +ERASE = -operation erase F +FLASH = -operation loadbuffer "$(TARGET).hex" program verify +START = -operation start noreset 0 +endif + +# Processor frequency. +# Normally the first thing your program should do is set the clock prescaler, +# so your program will run at the correct speed. You should also set this +# variable to same clock speed. The _delay_ms() macro uses this, and many +# examples use this variable to calculate timings. Do not add a "UL" here. +F_CPU = 8000000 + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = obj + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + +MATH_LIB = -lm + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + +#============================================================================ + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +# Display compiler version information. +gccversion : + @$(CC) --version + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +## Program +.PHONY: program +program: all + $(PROGRAM) $(PROGRAMFLAGS) $(ERASE) + $(PROGRAM) $(PROGRAMFLAGS) $(FLASH) + $(PROGRAM) $(PROGRAMFLAGS) $(START) + +doxygen: + doxygen + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVEDIR) .dep + $(REMOVEDIR) $(OBJDIR) + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym \ +clean clean_list diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 6/main.c b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 6/main.c new file mode 100644 index 0000000..cb604d9 --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 6/main.c @@ -0,0 +1,75 @@ +/** +@file main.c +@brief Lab 6 Starter Code +@version .01 +@mainpage Lab 6 Starter Code + +@section intro Code Overview +This first lab allows outputs to the LED array and single patteren of lights. You need to revise it so that it outputs lights based on the input from the switches. + +@section hw Hardware Pin Out +PORTA: +Switches A7 - A0 + +PORTB: + + + + */ + +/** Includes */ +#include +#include + +/** Constants */ +#define F_CPU 1000000U + +/** Global Variables */ + +/** Functions */ + +/** The initialize() function initializes all of the Data Direction Registers for the Wunderboard. Before making changes to DDRx registers, ensure that you have read the peripherals section of the Wunderboard user guide.*/ +void initialize (void) { + /** Port A is the switches and buttons. They should always be inputs. ( 0 = Input and 1 = Output )*/ + DDRA=0b00000000; + + /** Port B has the LED Array color control, SD card, and audio-out on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRB=0b11000000; + + /** Port C is for the 'row' of the LED array. They should always be outputs. ( 0 = Input and 1 = Output )*/ + DDRC=0b11111111; + + /** Port D has the Serial on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRD=0b00000000; + + /** Port E has the LED Array Column control out on it. Leave DDRE alone. ( 0 = Input and 1 = Output )*/ + DDRE=0b00000111; + + /** Port F has the accelerometer and audio-in on it. Leave DDRF alone. ( 0 = Input and 1 = Output )*/ + DDRF=0b00000000; +} + +void clearArray(void) +{ + PORTB &= ~((1 << PB6) | (1 << PB7)); // Disable latches + PORTC = 0x00; + PORTB |= (1 << PB6) | (1 << PB7); // Enable latches + PORTB &= ~((1 << PB6) | (1 << PB7)); // Disable latches +} + +/** Main Function */ + +int main (void) { + /** Local Varibles */ + unsigned char temp; + unsigned char switches; + + initialize(); + clearArray(); + + while(1){ + PORTB = 0b10000000; //Sets the green leds on + PORTC = PINA; //Sets led values to the switch values + } + +}//main diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 7/Makefile b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 7/Makefile new file mode 100644 index 0000000..6c38e27 --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 7/Makefile @@ -0,0 +1,335 @@ +#---------------------------------------------------------------------------- +# Wunderboard Makefile Template written by Dan Albert +#---------------------------------------------------------------------------- +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name. +TARGET = main + +# List C source files here. +SRC = $(TARGET).c \ + +# MCU name, you MUST set this to match the board you are using +# type "make clean" after changing this, so all files will be rebuilt +MCU = at90usb646 + +# Detect platform +UNAME = $(shell uname) + +ifeq ($(UNAME),Linux) +ENV=unix +endif + +ifeq ($(UNAME),Darwin) +ENV=unix +endif + +ifndef ENV +ENV=windows +endif + +ifeq ($(ENV),unix) +PROGRAM = dfu-programmer +PROGRAMFLAGS = $(MCU) +ERASE = erase +FLASH = flash "$(TARGET).hex" +START = start +else +PROGRAM = "C:/Program Files (x86)/Atmel/Flip 3.4.1/bin/batchisp.exe" +PROGRAMFLAGS = -device at90usb646 -hardware USB +ERASE = -operation erase F +FLASH = -operation loadbuffer "$(TARGET).hex" program verify +START = -operation start noreset 0 +endif + +# Processor frequency. +# Normally the first thing your program should do is set the clock prescaler, +# so your program will run at the correct speed. You should also set this +# variable to same clock speed. The _delay_ms() macro uses this, and many +# examples use this variable to calculate timings. Do not add a "UL" here. +F_CPU = 8000000 + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = obj + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + +MATH_LIB = -lm + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + +#============================================================================ + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +# Display compiler version information. +gccversion : + @$(CC) --version + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +## Program +.PHONY: program +program: all + $(PROGRAM) $(PROGRAMFLAGS) $(ERASE) + $(PROGRAM) $(PROGRAMFLAGS) $(FLASH) + $(PROGRAM) $(PROGRAMFLAGS) $(START) + +doxygen: + doxygen + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVEDIR) .dep + $(REMOVEDIR) $(OBJDIR) + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym \ +clean clean_list diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 7/main.c b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 7/main.c new file mode 100644 index 0000000..7d7c931 --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 7/main.c @@ -0,0 +1,177 @@ +/** +@file main.c +@brief Lab 6 Starter Code +@version .01 +@mainpage Lab 6 Starter Code + +@section intro Code Overview +This first lab allows outputs to the LED array and single patteren of lights. You need to revise it so that it outputs lights based on the input from the switches. + +@section hw Hardware Pin Out +PORTA: +Switches A7 - A0 + +PORTB: + +*/ + +/** Includes */ +#include +#include + +/** Constants */ +#define F_CPU 1000000U +#define DELAY .01 +/** Global Variables */ + +/** Functions */ + +/** The initialize() function initializes all of the Data Direction Registers for the Wunderboard. Before making changes to DDRx registers, ensure that you have read the peripherals section of the Wunderboard user guide.*/ +void initialize (void) { + /** Port A is the switches and buttons. They should always be inputs. ( 0 = Input and 1 = Output )*/ + DDRA=0b00000000; + + /** Port B has the LED Array color control, SD card, and audio-out on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRB=0b11000000; + + /** Port C is for the 'row' of the LED array. They should always be outputs. ( 0 = Input and 1 = Output )*/ + DDRC=0b11111111; + + /** Port D has the Serial on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRD=0b00000000; + + /** Port E has the LED Array Column control out on it. Leave DDRE alone. ( 0 = Input and 1 = Output )*/ + DDRE=0b00000111; + + /** Port F has the accelerometer and audio-in on it. Leave DDRF alone. ( 0 = Input and 1 = Output )*/ + DDRF=0b00000000; +} + +void clearArray(void) +{ + PORTB &= ~((1 << PB6) | (1 << PB7)); // Disable latches + PORTC = 0x00; + PORTB |= (1 << PB6) | (1 << PB7); // Enable latches + PORTB &= ~((1 << PB6) | (1 << PB7)); // Disable latches +} + +/** Main Function */ + +int main (void) { + /** Local Varibles */ + //char red[8]; + //char green[8]; + char loop; + + initialize(); + clearArray(); + + + while(1){ + + if (PINA == 0b01110000){ + clearArray(); + + PORTB = 0b11000000; + + PORTE = 0b00000011; + PORTC = 0b11011010; + _delay_ms(DELAY); + clearArray(); + + + }else if (PINA == 0b10110000){ + clearArray(); + + PORTB = 0b11000000; + + PORTE = 0b00000011; + PORTC = 0b01010101; + _delay_ms(DELAY); + + clearArray(); + + PORTB = 0b11000000; + PORTE = 0b00000110; + PORTC = 0b10101010; + _delay_ms(DELAY); + clearArray(); + + + }else if (PINA == 0b11010000){ + clearArray(); + + PORTB = 0b10000000; + + PORTE = 0b00000011; + PORTC = 0b01010101; + _delay_ms(DELAY); + + clearArray(); + + PORTB = 0b01000000; + + PORTE = 0b00000110; + PORTC = 0b10101010; + _delay_ms(DELAY); + clearArray(); + + + }else if (PINA == 0b11111000){ + char red[8] = {0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000100, 0b00000010, 0b00000001}; + char green[8] = {0b01111000, 0b10111100, 0b11011110, 0b11101111, 0b11110111, 0b01111011, 0b00111101, 0b00011110}; + char orange[8] = {0b00000111, 0b00000011, 0b00000001, 0b00000000, 0b00000000, 0b10000000, 0b11000000, 0b11100000}; + + clearArray(); + + for ( loop = 0 ; loop < 8 ; loop++ ){ + + PORTB = 0b01000000; + PORTE = loop; + PORTC = red[loop]; + _delay_ms(DELAY); + + clearArray(); + + PORTB = 0b10000000; + PORTC = green[loop]; + _delay_ms(DELAY); + + clearArray(); + + PORTB = 0b11000000; + PORTC = orange[loop]; + _delay_ms(DELAY); + + clearArray(); + + } + + }else if (PINA == 0b11100000){ + char red[8] = {0b11111111, 0b01110111, 0b00100010,0b00000000, 0b00000000, 0b00100010, 0b01110111, 0b11111111}; + char green[8] = {0b00000000, 0b10001000, 0b11011101, 0b11111111, 0b11111111, 0b11011101, 0b10001000, 0b00000000}; + + clearArray(); + + for ( loop = 0 ; loop < 8 ; loop++ ){ + + PORTB = 0b01000000; + PORTE = loop; + PORTC = red[loop]; + _delay_ms(DELAY); + + clearArray(); + + PORTB = 0b10000000; + PORTC = green[loop]; + _delay_ms(DELAY); + + clearArray(); + + } + } + } + + + +}//main diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/Makefile b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/Makefile new file mode 100644 index 0000000..449e1fd --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/Makefile @@ -0,0 +1,336 @@ +#---------------------------------------------------------------------------- +# Wunderboard Makefile Template written by Dan Albert +#---------------------------------------------------------------------------- +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name. +TARGET = main + +# List C source files here. +SRC = $(TARGET).c \ + adc.c + +# MCU name, you MUST set this to match the board you are using +# type "make clean" after changing this, so all files will be rebuilt +MCU = at90usb646 + +# Detect platform +UNAME = $(shell uname) + +ifeq ($(UNAME),Linux) +ENV=unix +endif + +ifeq ($(UNAME),Darwin) +ENV=unix +endif + +ifndef ENV +ENV=windows +endif + +ifeq ($(ENV),unix) +PROGRAM = dfu-programmer +PROGRAMFLAGS = $(MCU) +ERASE = erase +FLASH = flash "$(TARGET).hex" +START = start +else +PROGRAM = "C:/Program Files (x86)/Atmel/Flip 3.4.1/bin/batchisp.exe" +PROGRAMFLAGS = -device at90usb646 -hardware USB +ERASE = -operation erase F +FLASH = -operation loadbuffer "$(TARGET).hex" program verify +START = -operation start noreset 0 +endif + +# Processor frequency. +# Normally the first thing your program should do is set the clock prescaler, +# so your program will run at the correct speed. You should also set this +# variable to same clock speed. The _delay_ms() macro uses this, and many +# examples use this variable to calculate timings. Do not add a "UL" here. +F_CPU = 8000000 + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = obj + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + +MATH_LIB = -lm + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + +#============================================================================ + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +# Display compiler version information. +gccversion : + @$(CC) --version + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +## Program +.PHONY: program +program: all + $(PROGRAM) $(PROGRAMFLAGS) $(ERASE) + $(PROGRAM) $(PROGRAMFLAGS) $(FLASH) + $(PROGRAM) $(PROGRAMFLAGS) $(START) + +doxygen: + doxygen + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVEDIR) .dep + $(REMOVEDIR) $(OBJDIR) + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym \ +clean clean_list diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/adc.c b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/adc.c new file mode 100644 index 0000000..8d89140 --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/adc.c @@ -0,0 +1,28 @@ +/** +@file adc.c +@brief Wunderboard ADC Helper Functions +@version .01 + +@section intro Code Overview +This is the code for the Wunderboard ADC helper functions. +*/ + +#include "adc.h" + +unsigned char read_adc(uint8_t channel){ + + unsigned char test; + + ADMUX = 0x60 | channel; // Set the channel to the one we want + ADCSRA = 0b11000110; // Start a new sample. + while ((ADCSRA & 0b00010000) == 0 ); // Wait for a Valid Sample + ADCSRA |= 0b00010000; // Tell ADC you have the sample you want. + ADCSRA |= 0b01000000; // Start a new sample. + while ((ADCSRA & 0b00010000) == 0 ); // Wait for a Valid Sample + ADCSRA |= 0b00010000; // Tell ADC you have the sample you want. + + test = ADCH; + ADCSRA = 0x00; // Disable the ADC + + return (test); +} diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/adc.h b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/adc.h new file mode 100644 index 0000000..c3086fd --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/adc.h @@ -0,0 +1,19 @@ +/** +@file adc.h +@brief Wunderboard ADC Helper Functions +@version .01 + +@section intro Code Overview +This is the code for the Wunderboard ADC helper functions. +*/ + +#include + +/** +The read_adc() function allows for taking 8 bit measurements from any of the single ended ADC inputs. The function call is blocking. eg. read_adc(5) would read from ADC channel 5. +@param channel This is the channel to be read. +@return This is the return value from the ADC. +*/ + +unsigned char read_adc(uint8_t channel); + diff --git a/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/main.c b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/main.c new file mode 100644 index 0000000..e4d7140 --- /dev/null +++ b/OSU Coursework/CS 161 - Intro to Programming I/Labs/Lab 8/main.c @@ -0,0 +1,189 @@ +/** +@file main.c +@brief Lab 8 Starter Code +@version .01 +@mainpage Lab 8 Starter Code + +@section intro Code Overview + +@section hw Hardware Pin Out +Port A: +A0 - A3 : Push Buttons +A4 - A7 : Slide Switches + +Port B: +B0 - B3 : SPI (SD Card) +B4 : Nothing +B5 : Audio Out +B6 : Red Enable +B7 : Green Enable + +Port C: +C0 - C7 : LED Array (Row) + +Port D: +D0 - D1 : Nothing +D2 : Serial RX +D3 : Serial TX +D4 - D7 : Nothing + +Port E: +E0 - E2 : LED Array (Column) +E3 : USB (UID) +E4 - E5 : Nothing +E6 : Relay +E7 : Nothing + +Port F: +F0 : ADC Channel 0 +F1 : ADC Channel 1 +F2 : ADC Channel 2 +F3 : ADC Channel 3 +F4 : ADC Channel 4 (Audio In) +F5 : ADC Channel 5 (Accel X Axis) +F6 : ADC Channel 6 (Accel Y Axis) +F7 : ADC Channel 7 (Accel Z Axis (if installed)) + + */ + +/** Includes */ +#include +#include +#include "adc.h" +#include +#include + +/** Constants */ +#define F_CPU 1000000U +#define DELAY .02 + +#define YMIN 180.0 +#define STEPSIZE 1.375 +/** Global Variables */ + +/** Functions */ + +/** The initialize() function initializes all of the Data Direction Registers for the Wunderboard. Before making changes to DDRx registers, ensure that you have read the peripherals section of the Wunderboard user guide.*/ +void initialize (void) { + /** Port A is the switches and buttons. They should always be inputs. ( 0 = Input and 1 = Output )*/ + DDRA=0b00000000; + + /** Port B has the LED Array color control, SD card, and audio-out on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRB=0b11000000; + + /** Port C is for the 'row' of the LED array. They should always be outputs. ( 0 = Input and 1 = Output )*/ + DDRC=0b11111111; + + /** Port D has the Serial on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRD=0b00000000; + + /** Port E has the LED Array Column control out on it. Leave DDRE alone. ( 0 = Input and 1 = Output )*/ + DDRE=0b00000111; + + /** Port F has the accelerometer and audio-in on it. Leave DDRF alone. ( 0 = Input and 1 = Output )*/ + DDRF=0b00000000; +} + +void clearArray(void) +{ + PORTB &= ~((1 << PB6) | (1 << PB7)); // Disable latches + PORTC = 0x00; + PORTB |= (1 << PB6) | (1 << PB7); // Enable latches + PORTB &= ~((1 << PB6) | (1 << PB7)); // Disable latches +} + +int readadcval(void){ + int loop4; + int adcreturn; + char adcread = read_adc(5); + + for(loop4 = 0 ; loop4 < 16 ; loop4++){ + if(((YMIN + (loop4*STEPSIZE)) <= adcread) & (adcread < (YMIN + ((loop4 + 1)*STEPSIZE)))){ + adcreturn = 2*loop4; + } + } + return adcreturn; +} + +/** Main Function */ + +int main (void) { + /** Local Varibles */ + int loop = 50; + int loop2; + int loop3; + int speed = 20; + int *speedpoint = &speed; + + const int Red[120] = {0b00000000, 0b00000000, 0b01000000, 0b11000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00000000, 0b00001000, 0b00101000, 0b00001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b10000000, 0b11000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000000, 0b00000000, 0b01000000, 0b11000000, 0b11100000, 0b01000000, 0b00000000, 0b00000100, 0b00000100, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00010000, 0b00010100, 0b00000000, 0b00000000, 0b01001000, 0b11001000, 0b11000000, 0b10000000, 0b00001000, 0b00000000, 0b00101000, 0b00000000, 0b00001000, 0b00000000, 0b00000000, 0b00100000, 0b00100000, 0b00000000, 0b00000000, 0b00101000, 0b00100000, 0b00000000, 0b00000000, 0b00000010, 0b00000110, 0b00001110, 0b00000000, 0b00001110, 0b00000110, 0b01000010, 0b11000000, 0b01000000, 0b00000010, 0b00000110, 0b00001110, 0b00001110, 0b00000000, 0b00001110, 0b00000110, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000110, 0b00001110, 0b00011110, 0b00011110, 0b00000000, 0b01000000, 0b11100000, 0b11100010, 0b01000000, 0b00000000, 0b00001110, 0b00111110, 0b00011000, 0b00111110, 0b00001110}; + const int Green[120] = {0b00000001, 0b00000001, 0b01000001, 0b11000001, 0b01000001, 0b00000001, 0b00000001, 0b00001001, 0b00000001, 0b00001001, 0b00101001, 0b00001001, 0b00000001, 0b00000001, 0b00000001, 0b00000001, 0b10000111, 0b11000111, 0b01000001, 0b00000001, 0b00000001, 0b00001111, 0b00001111, 0b00000001, 0b00000001, 0b00001111, 0b00001111, 0b00000001, 0b00000001, 0b00001111, 0b00001111, 0b00000001, 0b00000001, 0b00001001, 0b00000001, 0b00000001, 0b01000001, 0b11000001, 0b11100000, 0b01000000, 0b00000001, 0b00000101, 0b00000101, 0b00010001, 0b00010001, 0b00010001, 0b00010001, 0b00000001, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00010001, 0b00010101, 0b00000001, 0b00000001, 0b01001001, 0b11001001, 0b11000001, 0b10000001, 0b00001001, 0b00000001, 0b00101001, 0b00000001, 0b00001001, 0b00000001, 0b00000001, 0b00100001, 0b00100001, 0b00000001, 0b00000001, 0b00101001, 0b00100001, 0b00000001, 0b00000001, 0b00000011, 0b00000111, 0b00001111, 0b00000001, 0b00001111, 0b00000111, 0b01000011, 0b11000001, 0b01000001, 0b00000011, 0b00000111, 0b00001111, 0b00001111, 0b00000000, 0b00001111, 0b00000111, 0b00000011, 0b00000001, 0b00000111, 0b00000111, 0b00000001, 0b00000001, 0b00001001, 0b00001001, 0b00000001, 0b00000001, 0b00000001, 0b00000111, 0b00000111, 0b00000011, 0b00000111, 0b00001111, 0b00011111, 0b00011111, 0b00000001, 0b01000001, 0b11100001, 0b11100011, 0b01000001, 0b00000001, 0b00000001, 0b00000001, 0b00000001, 0b00000001, 0b00000001}; + + initialize(); + clearArray(); + + while(1){ + + speedpoint = 25; + + for(loop ; loop >= 0 ; loop--){ + speedpoint = readadcval(); + + if(speedpoint == 0){ + while(speedpoint == 0){ + for(loop2 = 0 ; loop2 < 150 ; loop2++){ + for(loop3 = 7 ; loop3 > -1 ; loop3--){ + + + int arrval; + clearArray(); + PORTE = loop3; + arrval = (loop+loop3); + + PORTB = 0b10000000; + PORTC = Green[arrval]; + _delay_ms(DELAY); + + clearArray(); + + PORTB= 0b01000000; + PORTC = Red[arrval]; + _delay_ms(DELAY); + + clearArray(); + } + } + speedpoint = readadcval(); + } + }else{ + for(loop2 = 0 ; loop2 < speedpoint ; loop2++){ + for(loop3 = 7 ; loop3 > -1 ; loop3--){ + + + int arrval; + clearArray(); + PORTE = loop3; + arrval = (loop+loop3); + + PORTB = 0b10000000; + PORTC = Green[arrval]; + _delay_ms(DELAY); + + clearArray(); + + PORTB= 0b01000000; + PORTC = Red[arrval]; + _delay_ms(DELAY); + + clearArray(); + } + } + } + + if(loop == 0){ + loop = 112; + } + } + } +} + + diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 1/Assignment 1.pdf b/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 1/Assignment 1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a1aa38033b4b06f3519149482b53e6f581285dce GIT binary patch literal 53254 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 2/Assignment 2.pdf b/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 2/Assignment 2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2896bd7c7a2139e5f188c8c6d71674ab4cadf4d0 GIT binary patch literal 81418 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 +#include +using namespace std; + +int main(void){ + + unsigned char exit; + string response; + + enum question{ + first, + second, + third + } currentquestion = first; + + while(exit != 1){ + switch(currentquestion){ + case first: + + cout << "First Question: Which is NOT an internal component of a desktop computer?\n\nA: Ram Module\nB: Power Supply\nC: Hard Drive\nD: Monitor\nPlease enter your selection: "; + cin >> response; + if((response.compare("a") == 0) | (response.compare("A") == 0)){ + cout << "\nIncorrect. Ram modules are an internal component.\nPlease try again..." << endl; + cout << string(2, '\n'); + }else if((response.compare("b") == 0) | (response.compare("B") == 0)){ + cout << "\nIncorrect. Power supplies are an internal component.\nPlease try again..." << endl; + cout << string(2, '\n'); + }else if((response.compare("c") == 0) | (response.compare("C") == 0)){ + cout << "\nIncorrect. Hard drives are an internal component.\nPlease try again..." << endl; + cout << string(2, '\n'); + }else if((response.compare("d") == 0) | (response.compare("D") == 0)){ + cout << "\nCorrect! Monitor's are external components on desktops." << endl; + cout << string(2, '\n'); + currentquestion = second; + }else{ + cout << "You have entered an invalid response, please try again..." << endl; + cout << string(2, '\n'); + } + break; + case second: + cout << "Second Question: Which is a model number for an ivy bridge processor?\nA: i5-3570K\nB: i7-2600K\nC: i3-2120\nD: i5-2400\nPlease enter your selection: "; + cin >> response; + if((response.compare("a") == 0) | (response.compare("A") == 0)){ + cout << "\nCorrect!. This is an ivy bridge processor!" << endl; + cout << string(2, '\n'); + return 0; + }else if((response.compare("b") == 0) | (response.compare("B") == 0)){ + cout << "\nIncorrect. This is a Sandy Bridge processor.\nPlease try again..." << endl; + cout << string(2, '\n'); + }else if((response.compare("c") == 0) | (response.compare("C") == 0)){ + cout << "\nIncorrect. This is a Sandy Bridge processor.\nPlease try again..." << endl; + cout << string(2, '\n'); + }else if((response.compare("d") == 0) | (response.compare("D") == 0)){ + cout << "\nIncorrect. This is a Sandy Bridge processor.\nPlease try again..." << endl; + cout << string(2, '\n'); + }else{ + cout << "\nYou have entered an invalid response, please try again..." << endl; + cout << string(2, '\n'); + } + break; + default: + cerr << "You should never see this. There has been an enum error." << endl; + } + } + return 0; +} \ No newline at end of file diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 3/a.exe b/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 3/a.exe new file mode 100644 index 0000000000000000000000000000000000000000..4654e705d9ca9c54febf963db13ac17a784218ae GIT binary patch literal 1366003 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

Jziymmy8nI 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 z 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

#ADeH|4ZVr#!RVE!5+U`bTa~VlodF)zsSs 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%0D0vPmSR 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

dvQvjZ_iLd0VCqu~lvMM6$YOMGWAc*R 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

!bdXxwnGLW46!F(308;x?*DArhT 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�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 YRfTGpS2y}O +#include +#include +#include "rps.h" +using namespace std; + +int main() +{ + Rps game; + + game.newgame(); + return 0; +} \ No newline at end of file diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/a.exe b/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/a.exe new file mode 100644 index 0000000000000000000000000000000000000000..efc90acbcc5edb7404fdacdd7fef4e0036fb34ab GIT binary patch literal 1365997 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

ym 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 z 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

_#eA89w_4RjyW> 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

*>0a4 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

%MdEz53aiibf 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 F{~uxrt9t+d literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/conio.h b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/conio.h new file mode 100644 index 0000000..8a821cb --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/conio.h @@ -0,0 +1,53 @@ +/* + * conio.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Low level console I/O functions. Pretty please try to use the ANSI + * standard ones if you are writing new code. + * + */ + +#ifndef _CONIO_H_ +#define _CONIO_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP char* __cdecl __MINGW_NOTHROW _cgets (char*); +_CRTIMP int __cdecl __MINGW_NOTHROW _cprintf (const char*, ...); +_CRTIMP int __cdecl __MINGW_NOTHROW _cputs (const char*); +_CRTIMP int __cdecl __MINGW_NOTHROW _cscanf (char*, ...); + +_CRTIMP int __cdecl __MINGW_NOTHROW _getch (void); +_CRTIMP int __cdecl __MINGW_NOTHROW _getche (void); +_CRTIMP int __cdecl __MINGW_NOTHROW _kbhit (void); +_CRTIMP int __cdecl __MINGW_NOTHROW _putch (int); +_CRTIMP int __cdecl __MINGW_NOTHROW _ungetch (int); + + +#ifndef _NO_OLDNAMES + +_CRTIMP int __cdecl __MINGW_NOTHROW getch (void); +_CRTIMP int __cdecl __MINGW_NOTHROW getche (void); +_CRTIMP int __cdecl __MINGW_NOTHROW kbhit (void); +_CRTIMP int __cdecl __MINGW_NOTHROW putch (int); +_CRTIMP int __cdecl __MINGW_NOTHROW ungetch (int); + +#endif /* Not _NO_OLDNAMES */ + + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _CONIO_H_ */ diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/lab5.cpp b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/lab5.cpp new file mode 100644 index 0000000..7143597 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/lab5.cpp @@ -0,0 +1,35 @@ +// g++ serial.c++ -lboost_system -lws2_32 -D _WIN32_WINNT=0x0501 + +#include +#include "SimpleSerial.h" +#include "conio.h" + +using namespace std; +using namespace boost; + +int main(int argc, char* argv[]) +{ + + string inputstr; + cout << "Lab 5 Code Started" << endl; + SimpleSerial wunderboard("COM5", 9600); + + while(1){ + try { + cout << wunderboard.readLine() << endl; + if(kbhit()){ + cin >> inputstr; + wunderboard.writeString(inputstr); + if((inputstr.compare("Exit") == 0) | (inputstr.compare("EXIT") == 0) | (inputstr.compare("exit") == 0)){ + return 0; + } + } + + + } catch(boost::system::system_error& e) + { + cout<<"Error: "</dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +# Display compiler version information. +gccversion : + @$(CC) --version + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +## Program +.PHONY: program +program: all + $(PROGRAM) $(PROGRAMFLAGS) $(ERASE) + $(PROGRAM) $(PROGRAMFLAGS) $(FLASH) + $(PROGRAM) $(PROGRAMFLAGS) $(START) + +doxygen: + doxygen + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVEDIR) .dep + $(REMOVEDIR) $(OBJDIR) + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym \ +clean clean_list diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Final/Wunderboard Firmware/main.c b/OSU Coursework/CS 162 - Intro to Programming II/Final/Wunderboard Firmware/main.c new file mode 100644 index 0000000..ed46a68 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Final/Wunderboard Firmware/main.c @@ -0,0 +1,289 @@ +/** +@file main.` +@brief Lab 3 Starter Code +@version .01 +@mainpage Lab 3 Starter Code + +@section intro Code Overview + +@section hw Hardware Pin Out +Port A: +A0 - A3 : Push Buttons +A4 - A7 : Slide Switches + +Port B: +B0 - B3 : SPI (SD Card) +B4 : Nothing +B5 : Audio Out +B6 : Red Enable +B7 : Green Enable + +Port C: +C0 - C7 : LED Array (Row) + +Port D: +D0 - D1 : Nothing +D2 : Serial RX +D3 : Serial TX +D4 - D7 : Nothing + +Port E: +E0 - E2 : LED Array (Column) +E3 : USB (UID) +E4 - E5 : Nothing +E6 : Relay +E7 : Nothing + +Port F: +F0 : ADC Channel 0 +F1 : ADC Channel 1 +F2 : ADC Channel 2 +F3 : ADC Channel 3 +F4 : ADC Channel 4 (Audio In) +F5 : ADC Channel 5 (Accel X Axis) +F6 : ADC Channel 6 (Accel Y Axis) +F7 : ADC Channel 7 (Accel Z Axis (if installed)) + +*/ + +/** Includes */ +#include +#include +#include + + +/** Constants */ +#define F_CPU 1000000UL +#define DEBUG 1 +#ifdef DEBUG == 1 + #define SENDSPEED 3 //If less than .12, there are problems +#endif + +/** Global Variables */ +volatile unsigned char loop = 0; +volatile unsigned char throwaway = 0; +volatile unsigned char loopdir = 0; +/** Functions */ + +/** Prototypes **/ +unsigned char InitializeUART(void); +unsigned char SendByteUART (unsigned char data); +unsigned char SendStringUART (unsigned char *data); +void initialize(void); +void clearArray(void); +unsigned char initializeTIMER0(void); +unsigned char setTIMER0(unsigned char clock, unsigned char count); +ISR(TIMER0_COMPA_vect); +unsigned char myitoa(unsigned char received, unsigned char *send); + + + +#ifdef DEBUG == 1 + /** This function needs to setup the variables used by the UART to enable the UART and tramsmit at 9600bps. This + function should always return 0. Remember, by defualt the Wunderboard runs at 1mHz for its system clock.*/ + unsigned char InitializeUART (void){ + unsigned char baud = ((F_CPU/(9600*8UL))-1); + + /* Set baud rate */ + UBRR1H = (baud >> 8); + UBRR1L = baud; + /* Set the U2X1 bit */ + UCSR1A = (1 << U2X1); + /* Enable transmitter */ + UCSR1B = ((1 << TXEN1) | (1 << RXEN1)); + /* Set frame format: 8data, 1stop bit */ + UCSR1C = (3 << UCSZ10); + + return 0; + } + + /** This function needs to write a single byte to the UART. It must check that the UART is ready for a new byte + and return a 1 if the byte was not sent. + @param [in] data This is the data byte to be sent. + @return The function returns a 1 or error and 0 on successful completion.*/ + + unsigned char SendByteUART (unsigned char data){ + + /* + ** Checks the buffer empty bit so that data can either be placed in the buffer + ** or else reuturn a 1 + */ + if((UCSR1A & (1 << UDRE1)) == (1 << UDRE1)){ + UDR1 = data; //Places data into the UDR1 8-bit data buffer + }else { + return 1; + } + + return 0; + } + + /** This function needs to writes a string to the UART. It must check that the UART is ready for a new byte and + return a 1 if the string was not sent. + @param [in] data This is a pointer to the data to be sent. + @return The function returns a 1 or error and 0 on successful completion.*/ + + unsigned char SendStringUART (unsigned char *data){ + + for (int loop = 0 ; data[loop] != '\0'; loop++){ + + /* Sends the current byte based on the loop umber to SendByte */ + while(SendByteUART(data[loop])); + } + return 0; + } + + unsigned char GetByteUART(){ + if (UCSR1A & (1 << RXC1)){ + return(UDR1); + } else{ + return(-1); + } + } +#endif + +/** The initialize() function initializes all of the Data Direction Registers for the Wunderboard. Before making changes to DDRx registers, ensure that you have read the peripherals section of the Wunderboard user guide.*/ +void initialize(void){ + /** Port A is the switches and buttons. They should always be inputs. ( 0 = Input and 1 = Output )*/ + DDRA=0b00000000; + + /** Port B has the LED Array color control, SD card, and audio-out on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRB=0b11000111; + + /** Port C is for the 'row' of the LED array. They should always be outputs. ( 0 = Input and 1 = Output )*/ + DDRC=0b11111111; + + /** Port D has the Serial on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRD=0b00001000; + + /** Port E has the LED Array Column control out on it. Leave DDRE alone. ( 0 = Input and 1 = Output )*/ + DDRE=0b00000111; + + /** Port F has the accelerometer and audio-in on it. Leave DDRF alone. ( 0 = Input and 1 = Output )*/ + DDRF=0b00000000; +} + +void clearArray(void){ + PORTC = 0x00; + PORTB |= (1 << PB6) | (1 << PB7); /** Enable latches*/ + PORTB &= ~((1 << PB6) | (1 << PB7)); /** Disable latches*/ +} + +/** This function needs to setup the variables used by TIMER0 Compare Match (CTC) mode with +a base clock frequency of clk/1024. This function should return a 1 if it fails and a 0 if it +does not. Remember, by default the Wunderboard runs at 1mHz for its system clock. +@return This function returns a 1 is unsuccessful, else return 0.*/ +unsigned char initializeTIMER0(void){ + /* Set the CTC mode */ + TCCR0A = (1 << WGM01); + + /* Set the Clock Frequency */ + TCCR0B = ((1 << CS02) | (1 << CS00)); + + /* Set initial count value */ + OCR0A = 0; + + return 0; +} + +/** This function takes two values, clock and count. The value of count should be copied into OCR0A and the value of clock should be used to set CS02:0. The TCNT0 variable should also be reset to 0 so that the new timer rate starts from 0. +@param [in] clock Insert Comment +@param [in] count Insert Comment +@return The function returns a 1 or error and 0 on successful completion.*/ +unsigned char setTIMER0(unsigned char clock, unsigned char count){ + + if(clock > 7){ + return 1; + } + TCCR0B &= 0b11111000; //Zeros out last three bits + TCCR0B |= clock; + OCR0A = count; + TIMSK0 = 2; + TCNT0 = 0; + return 0; +} + +ISR(TIMER0_COMPA_vect){ + if(throwaway == 1){ + volatile unsigned char send[4]; + + myitoa(loop, &send); + SendStringUART(send); + SendStringUART("\n"); + throwaway = 0; + + if(loop == 50){ + loopdir = 1; + }else if(loop == 0){ + loopdir = 0; + } + + if(loopdir == 0){ + loop++; + }else{ + loop--; + } + }else{ + throwaway++; + } +} + +unsigned char myitoa(unsigned char received, unsigned char *send){ + unsigned char tmp; + + if(received > 99){ + + tmp = (received / 100); + send[0] = (tmp+48); + tmp = ((received % 100)/10); + send[1] = (tmp+48); + tmp = ((received % 100) % 10); + send[2] = (tmp+48); + send[3] = '\0'; + return 0; + + }else if(received > 9){ + + tmp = ((received % 100)/10); + send[0] = (tmp+48); + tmp = ((received % 100) % 10); + send[1] = (tmp+48); + send[2] = '\0'; + return 0; + + }else if(received < 10){ + tmp = ((received % 100) % 10); + send[0] = (tmp+48); + send[1] = '\0'; + return 0; + } +} + +/** Main Function */ +int main (void){ + + enum states{ + setup, + running + } state = setup; + + while(1){ + + switch(state){ + case setup: + + initialize(); + initializeTIMER0(); + InitializeUART(); + setTIMER0(5,120); + clearArray(); + sei(); + state = running; + SendStringUART("Initialized...\n"); + break; + + case running: + + break; + } + } +} \ No newline at end of file diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 2/Makefile b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 2/Makefile new file mode 100644 index 0000000..6c38e27 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 2/Makefile @@ -0,0 +1,335 @@ +#---------------------------------------------------------------------------- +# Wunderboard Makefile Template written by Dan Albert +#---------------------------------------------------------------------------- +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name. +TARGET = main + +# List C source files here. +SRC = $(TARGET).c \ + +# MCU name, you MUST set this to match the board you are using +# type "make clean" after changing this, so all files will be rebuilt +MCU = at90usb646 + +# Detect platform +UNAME = $(shell uname) + +ifeq ($(UNAME),Linux) +ENV=unix +endif + +ifeq ($(UNAME),Darwin) +ENV=unix +endif + +ifndef ENV +ENV=windows +endif + +ifeq ($(ENV),unix) +PROGRAM = dfu-programmer +PROGRAMFLAGS = $(MCU) +ERASE = erase +FLASH = flash "$(TARGET).hex" +START = start +else +PROGRAM = "C:/Program Files (x86)/Atmel/Flip 3.4.1/bin/batchisp.exe" +PROGRAMFLAGS = -device at90usb646 -hardware USB +ERASE = -operation erase F +FLASH = -operation loadbuffer "$(TARGET).hex" program verify +START = -operation start noreset 0 +endif + +# Processor frequency. +# Normally the first thing your program should do is set the clock prescaler, +# so your program will run at the correct speed. You should also set this +# variable to same clock speed. The _delay_ms() macro uses this, and many +# examples use this variable to calculate timings. Do not add a "UL" here. +F_CPU = 8000000 + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = obj + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + +MATH_LIB = -lm + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + +#============================================================================ + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +# Display compiler version information. +gccversion : + @$(CC) --version + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +## Program +.PHONY: program +program: all + $(PROGRAM) $(PROGRAMFLAGS) $(ERASE) + $(PROGRAM) $(PROGRAMFLAGS) $(FLASH) + $(PROGRAM) $(PROGRAMFLAGS) $(START) + +doxygen: + doxygen + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVEDIR) .dep + $(REMOVEDIR) $(OBJDIR) + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym \ +clean clean_list diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 2/main.c b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 2/main.c new file mode 100644 index 0000000..b8277a2 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 2/main.c @@ -0,0 +1,192 @@ +/** +@file main.c +@brief Lab 2 Starter Code +@version .01 +@mainpage Lab 2 Starter Code + +@section intro Code Overview + +@section hw Hardware Pin Out +Port A: +A0 - A3 : Push Buttons +A4 - A7 : Slide Switches + +Port B: +B0 - B3 : SPI (SD Card) +B4 : Nothing +B5 : Audio Out +B6 : Red Enable +B7 : Green Enable + +Port C: +C0 - C7 : LED Array (Row) + +Port D: +D0 - D1 : Nothing +D2 : Serial RX +D3 : Serial TX +D4 - D7 : Nothing + +Port E: +E0 - E2 : LED Array (Column) +E3 : USB (UID) +E4 - E5 : Nothing +E6 : Relay +E7 : Nothing + +Port F: +F0 : ADC Channel 0 +F1 : ADC Channel 1 +F2 : ADC Channel 2 +F3 : ADC Channel 3 +F4 : ADC Channel 4 (Audio In) +F5 : ADC Channel 5 (Accel X Axis) +F6 : ADC Channel 6 (Accel Y Axis) +F7 : ADC Channel 7 (Accel Z Axis (if installed)) + +*/ + +/** Includes */ +#include +#include + +/** Constants */ +#define DEBUG //Comment or uncomment this to enable/disable debugging +#define F_CPU 1000000U + +/** Sets the string send speed for debugging when defined */ +#ifdef DEBUG + #define SENDSPEED .2 //If less than .2, there are problems +#endif + +/** Global Variables */ + +/** Functions */ + +/** When DEBUG is defined, this provides the functions needed to debug over serial */ +#ifdef DEBUG + /** This function needs to setup the variables used by the UART to enable the UART and tramsmit at 9600bps. This + function should always return 0. Remember, by defualt the Wunderboard runs at 1mHz for its system clock.*/ + unsigned char InitializeUART (){ + unsigned char baud = ((F_CPU/(9600*8UL))-1); + + /* Set baud rate */ + UBRR1H = (baud >> 8); + UBRR1L = baud; + /* Set the U2X1 bit */ + UCSR1A = (1 << U2X1); + /* Enable transmitter */ + UCSR1B = (1 << TXEN1); + /* Set frame format: 8data, 1stop bit */ + UCSR1C = (3 << UCSZ10); + + return 0; + } + + /** This function needs to write a single byte to the UART. It must check that the UART is ready for a new byte + and return a 1 if the byte was not sent. + @param [in] data This is the data byte to be sent. + @return The function returns a 1 or error and 0 on successful completion.*/ + + unsigned char SendByteUART (unsigned char data){ + + /* + ** Checks the buffer empty bit so that data can either be placed in the buffer + ** or else reuturn a 1 + */ + if((UCSR1A & (1 << UDRE1)) == (1 << UDRE1)){ + UDR1 = data; + _delay_ms(SENDSPEED); //Places data into the UDR1 8-bit data buffer + }else { + return 1; + } + + return 0; + } + + /** This function needs to writes a string to the UART. It must check that the UART is ready for a new byte and + return a 1 if the string was not sent. + @param [in] data This is a pointer to the data to be sent. + @return The function returns a 1 or error and 0 on successful completion.*/ + + unsigned char SendStringUART (unsigned char *data){ + + for (int loop = 0 ; data[loop] != '\0'; loop++){ + unsigned char bytereturn; //Storage for return value of SendByteUART + + /* Sends the current byte based on the loop umber to SendByte */ + bytereturn = SendByteUART(data[loop]); + + /* Stops sending if SendByteUART had an error */ + if(bytereturn == 1){ + return 1; + } + } + return 0; + } +#endif + +/** The initialize() function initializes all of the Data Direction Registers for the Wunderboard. Before making changes to DDRx registers, ensure that you have read the peripherals section of the Wunderboard user guide.*/ +void initialize (void) { + /** Port A is the switches and buttons. They should always be inputs. ( 0 = Input and 1 = Output )*/ + DDRA=0b00000000; + + /** Port B has the LED Array color control, SD card, and audio-out on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRB=0b11000000; + + /** Port C is for the 'row' of the LED array. They should always be outputs. ( 0 = Input and 1 = Output )*/ + DDRC=0b11111111; + + /** Port D has the Serial on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRD=0b00001000; + + /** Port E has the LED Array Column control out on it. Leave DDRE alone. ( 0 = Input and 1 = Output )*/ + DDRE=0b00000111; + + /** Port F has the accelerometer and audio-in on it. Leave DDRF alone. ( 0 = Input and 1 = Output )*/ + DDRF=0b00000000; +} + +/** The clearArray() function turns off all LEDS on the Wunderboard array. It accepts no inputs and returns nothing*/ +void clearArray(void) { + PORTC = 0x00; + PORTB |= (1 << PB6) | (1 << PB7); /** Enable latches*/ + PORTB &= ~((1 << PB6) | (1 << PB7)); /** Disable latches*/ +} + +/** Main Function */ + +int main (void) { + /** Local Varibles */ + + initialize(); + clearArray(); + + /** Initializes the serial interface if debugging is enabled */ + #ifdef DEBUG + InitializeUART(); + #endif + + PORTB = 0b10000000; + + while(1){ + unsigned char pinastatus = PINA; + unsigned char debugstring[50]; + + #ifdef DEBUG + sprintf(debugstring, "Port A is: %d.\n", pinastatus); + SendStringUART(debugstring); + #endif + + + + for (unsigned char loop = 0 ; loop < 8 ; loop++){ + PORTB = 0b10000000; + PORTE = loop; + PORTC = pinastatus; + _delay_ms(.07); + clearArray(); + + } + }//while +}//main \ No newline at end of file diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/Makefile b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/Makefile new file mode 100644 index 0000000..495854c --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/Makefile @@ -0,0 +1,337 @@ +#---------------------------------------------------------------------------- +# Wunderboard Makefile Template written by Dan Albert +#---------------------------------------------------------------------------- +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name. +TARGET = main + +# List C source files here. +SRC = $(TARGET).c \ + ff.c \ + diskio.c \ + +# MCU name, you MUST set this to match the board you are using +# type "make clean" after changing this, so all files will be rebuilt +MCU = at90usb646 + +# Detect platform +UNAME = $(shell uname) + +ifeq ($(UNAME),Linux) +ENV=unix +endif + +ifeq ($(UNAME),Darwin) +ENV=unix +endif + +ifndef ENV +ENV=windows +endif + +ifeq ($(ENV),unix) +PROGRAM = dfu-programmer +PROGRAMFLAGS = $(MCU) +ERASE = erase +FLASH = flash "$(TARGET).hex" +START = start +else +PROGRAM = "batchisp.exe" +PROGRAMFLAGS = -device at90usb646 -hardware USB +ERASE = -operation erase F +FLASH = -operation loadbuffer "$(TARGET).hex" program verify +START = -operation start noreset 0 +endif + +# Processor frequency. +# Normally the first thing your program should do is set the clock prescaler, +# so your program will run at the correct speed. You should also set this +# variable to same clock speed. The _delay_ms() macro uses this, and many +# examples use this variable to calculate timings. Do not add a "UL" here. +F_CPU = 1000000 + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = obj + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + +MATH_LIB = -lm + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + +#============================================================================ + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +# Display compiler version information. +gccversion : + @$(CC) --version + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +## Program +.PHONY: program +program: all + $(PROGRAM) $(PROGRAMFLAGS) $(ERASE) + $(PROGRAM) $(PROGRAMFLAGS) $(FLASH) + $(PROGRAM) $(PROGRAMFLAGS) $(START) + +doxygen: + doxygen + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVEDIR) .dep + $(REMOVEDIR) $(OBJDIR) + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym \ +clean clean_list diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/diskio.c b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/diskio.c new file mode 100644 index 0000000..b2f7202 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/diskio.c @@ -0,0 +1,623 @@ +/*-----------------------------------------------------------------------*/ +/* MMCv3/SDv1/SDv2 (in SPI mode) control module (C)ChaN, 2007 */ +/*-----------------------------------------------------------------------*/ +/* Only rcvr_spi(), xmit_spi(), disk_timerproc() and some macros */ +/* are platform dependent. */ +/*-----------------------------------------------------------------------*/ + + +#include +#include +#include "diskio.h" + + +/* Definitions for MMC/SDC command */ +#define CMD0 (0) /* GO_IDLE_STATE */ +#define CMD1 (1) /* SEND_OP_COND (MMC) */ +#define ACMD41 (0x80+41) /* SEND_OP_COND (SDC) */ +#define CMD8 (8) /* SEND_IF_COND */ +#define CMD9 (9) /* SEND_CSD */ +#define CMD10 (10) /* SEND_CID */ +#define CMD12 (12) /* STOP_TRANSMISSION */ +#define ACMD13 (0x80+13) /* SD_STATUS (SDC) */ +#define CMD16 (16) /* SET_BLOCKLEN */ +#define CMD17 (17) /* READ_SINGLE_BLOCK */ +#define CMD18 (18) /* READ_MULTIPLE_BLOCK */ +#define CMD23 (23) /* SET_BLOCK_COUNT (MMC) */ +#define ACMD23 (0x80+23) /* SET_WR_BLK_ERASE_COUNT (SDC) */ +#define CMD24 (24) /* WRITE_BLOCK */ +#define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */ +#define CMD55 (55) /* APP_CMD */ +#define CMD58 (58) /* READ_OCR */ + + +/* Port Controls (Platform dependent) */ +#define CS_LOW() PORTB &= ~1 /* MMC CS = L */ +#define CS_HIGH() PORTB |= 1 /* MMC CS = H */ + +#define SOCKPORT PINB /* Socket contact port */ +#define SOCKWP 0x20 /* Write protect switch (PB5) */ +#define SOCKINS 0x10 /* Card detect switch (PB4) */ + +#define FCLK_SLOW() SPCR = 0x52 /* Set slow clock (100k-400k) */ +#define FCLK_FAST() SPCR = 0x50 /* Set fast clock (depends on the CSD) */ + + +/*-------------------------------------------------------------------------- + + Module Private Functions + +---------------------------------------------------------------------------*/ + +static volatile +DSTATUS Stat = STA_NOINIT; /* Disk status */ + +static volatile +BYTE Timer1, Timer2; /* 100Hz decrement timer */ + +static +BYTE CardType; /* Card type flags */ + + +/*-----------------------------------------------------------------------*/ +/* Transmit a byte to MMC via SPI (Platform dependent) */ +/*-----------------------------------------------------------------------*/ + +#define xmit_spi(dat) cli(); SPDR=(dat); loop_until_bit_is_set(SPSR,SPIF); sei() + + + +/*-----------------------------------------------------------------------*/ +/* Receive a byte from MMC via SPI (Platform dependent) */ +/*-----------------------------------------------------------------------*/ + +static +BYTE rcvr_spi (void) +{ + cli(); + SPDR = 0xFF; + loop_until_bit_is_set(SPSR, SPIF); + sei(); + return SPDR; +} + +/* Alternative macro to receive data fast */ +#define rcvr_spi_m(dst) SPDR=0xFF; loop_until_bit_is_set(SPSR,SPIF); *(dst)=SPDR + + + +/*-----------------------------------------------------------------------*/ +/* Wait for card ready */ +/*-----------------------------------------------------------------------*/ + +static +int wait_ready (void) /* 1:OK, 0:Timeout */ +{ + Timer2 = 50; /* Wait for ready in timeout of 500ms */ + rcvr_spi(); + do + if (rcvr_spi() == 0xFF) return 1; + while (Timer2); + + return 0; +} + + + +/*-----------------------------------------------------------------------*/ +/* Deselect the card and release SPI bus */ +/*-----------------------------------------------------------------------*/ + +static +void deselect (void) +{ + CS_HIGH(); + rcvr_spi(); +} + + + +/*-----------------------------------------------------------------------*/ +/* Select the card and wait for ready */ +/*-----------------------------------------------------------------------*/ + +static +int select (void) /* 1:Successful, 0:Timeout */ +{ + CS_LOW(); + if (!wait_ready()) { + deselect(); + return 0; + } + return 1; +} + + + +/*-----------------------------------------------------------------------*/ +/* Power Control (Platform dependent) */ +/*-----------------------------------------------------------------------*/ +/* When the target system does not support socket power control, there */ +/* is nothing to do in these functions and chk_power always returns 1. */ + +/* +static +void power_on (void) +{ + PORTE &= ~0x80; // Socket power ON * + for (Timer1 = 3; Timer1; ); // Wait for 30ms * + PORTB = 0b10110101; //Enable drivers * + DDRB = 0b11000111; + SPCR = 0x52; // Enable SPI function in mode 0 * + SPSR = 0x01; // 2x mode * +} + + +static +void power_off (void) +{ + select(); // Wait for card ready * + deselect(); + SPCR = 0; // Disable SPI function * + DDRB = 0b11000000; // Disable drivers * + PORTB = 0b10110000; + PORTE |= 0x80; // Socket power OFF * + Stat |= STA_NOINIT; // Set STA_NOINIT * +} +*/ + +static +int chk_power(void) /* Socket power state: 0=off, 1=on */ +{ + return 1; +} + + + +/*-----------------------------------------------------------------------*/ +/* Receive a data packet from MMC */ +/*-----------------------------------------------------------------------*/ + +static +int rcvr_datablock ( + BYTE *buff, /* Data buffer to store received data */ + UINT btr /* Byte count (must be multiple of 4) */ +) +{ + BYTE token; + + + Timer1 = 20; + do { /* Wait for data packet in timeout of 200ms */ + token = rcvr_spi(); + } while ((token == 0xFF) && Timer1); + if(token != 0xFE) return 0; /* If not valid data token, retutn with error */ + + do { /* Receive the data block into buffer */ + rcvr_spi_m(buff++); + rcvr_spi_m(buff++); + rcvr_spi_m(buff++); + rcvr_spi_m(buff++); + } while (btr -= 4); + rcvr_spi(); /* Discard CRC */ + rcvr_spi(); + + return 1; /* Return with success */ +} + + + +/*-----------------------------------------------------------------------*/ +/* Send a data packet to MMC */ +/*-----------------------------------------------------------------------*/ + +#if _READONLY == 0 +static +int xmit_datablock ( + const BYTE *buff, /* 512 byte data block to be transmitted */ + BYTE token /* Data/Stop token */ +) +{ + BYTE resp, wc; + + + if (!wait_ready()) return 0; + + xmit_spi(token); /* Xmit data token */ + if (token != 0xFD) { /* Is data token */ + wc = 0; + do { /* Xmit the 512 byte data block to MMC */ + xmit_spi(*buff++); + xmit_spi(*buff++); + } while (--wc); + xmit_spi(0xFF); /* CRC (Dummy) */ + xmit_spi(0xFF); + resp = rcvr_spi(); /* Reveive data response */ + if ((resp & 0x1F) != 0x05) /* If not accepted, return with error */ + return 0; + } + + return 1; +} +#endif /* _READONLY */ + + + +/*-----------------------------------------------------------------------*/ +/* Send a command packet to MMC */ +/*-----------------------------------------------------------------------*/ + +static +BYTE send_cmd ( /* Returns R1 resp (bit7==1:Send failed) */ + BYTE cmd, /* Command index */ + DWORD arg /* Argument */ +) +{ + BYTE n, res; + + + if (cmd & 0x80) { /* ACMD is the command sequense of CMD55-CMD */ + cmd &= 0x7F; + res = send_cmd(CMD55, 0); + if (res > 1) return res; + } + + /* Select the card and wait for ready */ + deselect(); + if (!select()) return 0xFF; + + /* Send command packet */ + xmit_spi(0x40 | cmd); /* Start + Command index */ + xmit_spi((BYTE)(arg >> 24)); /* Argument[31..24] */ + xmit_spi((BYTE)(arg >> 16)); /* Argument[23..16] */ + xmit_spi((BYTE)(arg >> 8)); /* Argument[15..8] */ + xmit_spi((BYTE)arg); /* Argument[7..0] */ + n = 0x01; /* Dummy CRC + Stop */ + if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) */ + if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) */ + xmit_spi(n); + + /* Receive command response */ + if (cmd == CMD12) rcvr_spi(); /* Skip a stuff byte when stop reading */ + n = 10; /* Wait for a valid response in timeout of 10 attempts */ + do + res = rcvr_spi(); + while ((res & 0x80) && --n); + + return res; /* Return with the response value */ +} + + + +/*-------------------------------------------------------------------------- + + Public Functions + +---------------------------------------------------------------------------*/ + + +/*-----------------------------------------------------------------------*/ +/* Initialize Disk Drive */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_initialize (BYTE drv) /* Physical drive nmuber (0) */ +{ + BYTE n, cmd, ty, ocr[4]; + + if (drv) return STA_NOINIT; /* Supports only single drive */ + if (Stat & STA_NODISK) return Stat; /* No card in the socket */ + + //power_on(); /* Force socket power on */ + PORTB |= 0b11000000; + FCLK_SLOW(); + for (n = 10; n; n--) rcvr_spi(); /* 80 dummy clocks */ + + ty = 0; + if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */ + Timer1 = 200; /* Initialization timeout of 1000 msec */ + if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */ + for (n = 0; n < 4; n++) ocr[n] = rcvr_spi(); /* Get trailing return value of R7 resp */ + if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */ + while (Timer1 && send_cmd(ACMD41, 1UL << 30)); /* Wait for leaving idle state (ACMD41 with HCS bit) */ + if (Timer1 && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */ + for (n = 0; n < 4; n++) ocr[n] = rcvr_spi(); + ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* SDv2 */ + } + } + } else { /* SDv1 or MMCv3 */ + if (send_cmd(ACMD41, 0) <= 1) { + ty = CT_SD1; cmd = ACMD41; /* SDv1 */ + } else { + ty = CT_MMC; cmd = CMD1; /* MMCv3 */ + } + while (Timer1 && send_cmd(cmd, 0)); /* Wait for leaving idle state */ + if (!Timer1 || send_cmd(CMD16, 512) != 0) /* Set R/W block length to 512 */ + ty = 0; + } + } + + CardType = ty; + deselect(); + + if (ty) { /* Initialization succeded */ + Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */ + FCLK_FAST(); + } else { /* Initialization failed */ + //power_off(); + + } + + return Stat; +} + + + +/*-----------------------------------------------------------------------*/ +/* Get Disk Status */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_status ( + BYTE drv /* Physical drive nmuber (0) */ +) +{ + if (drv) return STA_NOINIT; /* Supports only single drive */ + return Stat; +} + + + +/*-----------------------------------------------------------------------*/ +/* Read Sector(s) */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_read ( + BYTE drv, /* Physical drive nmuber (0) */ + BYTE *buff, /* Pointer to the data buffer to store read data */ + DWORD sector, /* Start sector number (LBA) */ + BYTE count /* Sector count (1..255) */ +) +{ + if (drv || !count) return RES_PARERR; + if (Stat & STA_NOINIT) return RES_NOTRDY; + + if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */ + + if (count == 1) { /* Single block read */ + if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */ + && rcvr_datablock(buff, 512)) + count = 0; + } + else { /* Multiple block read */ + if (send_cmd(CMD18, sector) == 0) { /* READ_MULTIPLE_BLOCK */ + do { + if (!rcvr_datablock(buff, 512)) break; + buff += 512; + } while (--count); + send_cmd(CMD12, 0); /* STOP_TRANSMISSION */ + } + } + deselect(); + + return count ? RES_ERROR : RES_OK; +} + + + +/*-----------------------------------------------------------------------*/ +/* Write Sector(s) */ +/*-----------------------------------------------------------------------*/ + +#if _READONLY == 0 +DRESULT disk_write ( + BYTE drv, /* Physical drive nmuber (0) */ + const BYTE *buff, /* Pointer to the data to be written */ + DWORD sector, /* Start sector number (LBA) */ + BYTE count /* Sector count (1..255) */ +) +{ + if (drv || !count) return RES_PARERR; + if (Stat & STA_NOINIT) return RES_NOTRDY; + if (Stat & STA_PROTECT) return RES_WRPRT; + + if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */ + + if (count == 1) { /* Single block write */ + if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */ + && xmit_datablock(buff, 0xFE)) + count = 0; + } + else { /* Multiple block write */ + if (CardType & CT_SDC) send_cmd(ACMD23, count); + if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */ + do { + if (!xmit_datablock(buff, 0xFC)) break; + buff += 512; + } while (--count); + if (!xmit_datablock(0, 0xFD)) /* STOP_TRAN token */ + count = 1; + } + } + deselect(); + + return count ? RES_ERROR : RES_OK; +} +#endif /* _READONLY == 0 */ + + + +/*-----------------------------------------------------------------------*/ +/* Miscellaneous Functions */ +/*-----------------------------------------------------------------------*/ + +#if _USE_IOCTL != 0 +DRESULT disk_ioctl ( + BYTE drv, /* Physical drive nmuber (0) */ + BYTE ctrl, /* Control code */ + void *buff /* Buffer to send/receive control data */ +) +{ + DRESULT res; + BYTE n, csd[16], *ptr = buff; + WORD csize; + + + if (drv) return RES_PARERR; + + res = RES_ERROR; + + if (ctrl == CTRL_POWER) { + switch (*ptr) { + case 0: /* Sub control code == 0 (POWER_OFF) */ + if (chk_power()) + //power_off(); // Power off */ + res = RES_OK; + break; + case 1: /* Sub control code == 1 (POWER_ON) */ + //power_on(); // Power on */ + res = RES_OK; + break; + case 2: /* Sub control code == 2 (POWER_GET) */ + *(ptr+1) = (BYTE)chk_power(); + res = RES_OK; + break; + default : + res = RES_PARERR; + } + } + else { + if (Stat & STA_NOINIT) return RES_NOTRDY; + + switch (ctrl) { + case CTRL_SYNC : /* Make sure that no pending write process. Do not remove this or written sector might not left updated. */ + if (select()) { + deselect(); + res = RES_OK; + } + break; + + case GET_SECTOR_COUNT : /* Get number of sectors on the disk (DWORD) */ + if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { + if ((csd[0] >> 6) == 1) { /* SDC ver 2.00 */ + csize = csd[9] + ((WORD)csd[8] << 8) + 1; + *(DWORD*)buff = (DWORD)csize << 10; + } else { /* SDC ver 1.XX or MMC*/ + n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2; + csize = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1; + *(DWORD*)buff = (DWORD)csize << (n - 9); + } + res = RES_OK; + } + break; + + case GET_SECTOR_SIZE : /* Get R/W sector size (WORD) */ + *(WORD*)buff = 512; + res = RES_OK; + break; + + case GET_BLOCK_SIZE : /* Get erase block size in unit of sector (DWORD) */ + if (CardType & CT_SD2) { /* SDv2? */ + if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */ + rcvr_spi(); + if (rcvr_datablock(csd, 16)) { /* Read partial block */ + for (n = 64 - 16; n; n--) rcvr_spi(); /* Purge trailing data */ + *(DWORD*)buff = 16UL << (csd[10] >> 4); + res = RES_OK; + } + } + } else { /* SDv1 or MMCv3 */ + if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */ + if (CardType & CT_SD1) { /* SDv1 */ + *(DWORD*)buff = (((csd[10] & 63) << 1) + ((WORD)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6) - 1); + } else { /* MMCv3 */ + *(DWORD*)buff = ((WORD)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224) >> 5) + 1); + } + res = RES_OK; + } + } + break; + + case MMC_GET_TYPE : /* Get card type flags (1 byte) */ + *ptr = CardType; + res = RES_OK; + break; + + case MMC_GET_CSD : /* Receive CSD as a data block (16 bytes) */ + if (send_cmd(CMD9, 0) == 0 /* READ_CSD */ + && rcvr_datablock(ptr, 16)) + res = RES_OK; + break; + + case MMC_GET_CID : /* Receive CID as a data block (16 bytes) */ + if (send_cmd(CMD10, 0) == 0 /* READ_CID */ + && rcvr_datablock(ptr, 16)) + res = RES_OK; + break; + + case MMC_GET_OCR : /* Receive OCR as an R3 resp (4 bytes) */ + if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */ + for (n = 4; n; n--) *ptr++ = rcvr_spi(); + res = RES_OK; + } + break; + + case MMC_GET_SDSTAT : /* Receive SD statsu as a data block (64 bytes) */ + if (send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */ + rcvr_spi(); + if (rcvr_datablock(ptr, 64)) + res = RES_OK; + } + break; + + default: + res = RES_PARERR; + } + + deselect(); + } + + return res; +} +#endif /* _USE_IOCTL != 0 */ + + +/*-----------------------------------------------------------------------*/ +/* Device Timer Interrupt Procedure (Platform dependent) */ +/*-----------------------------------------------------------------------*/ +/* This function must be called in period of 10ms */ + +void disk_timerproc (void) +{ + static BYTE pv; + BYTE n, s; + + + n = Timer1; /* 100Hz decrement timer */ + if (n) Timer1 = --n; + n = Timer2; + if (n) Timer2 = --n; + + n = pv; + pv = SOCKPORT & (SOCKWP | SOCKINS); /* Sample socket switch */ + + if (n == pv) { /* Have contacts stabled? */ + s = Stat; + + if (pv & SOCKWP) /* WP is H (write protected) */ + s |= STA_PROTECT; + else /* WP is L (write enabled) */ + s &= ~STA_PROTECT; + + if (pv & SOCKINS) /* INS = H (Socket empty) */ + s |= (STA_NODISK | STA_NOINIT); + else /* INS = L (Card inserted) */ + s &= ~STA_NODISK; + + Stat = s; + } +} + +DWORD get_fattime () +{ + return 0; +} + diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/diskio.h b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/diskio.h new file mode 100644 index 0000000..a40cb6c --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/diskio.h @@ -0,0 +1,76 @@ +/*----------------------------------------------------------------------- +/ Low level disk interface modlue include file R0.07 (C)ChaN, 2009 +/-----------------------------------------------------------------------*/ + +#ifndef _DISKIO + +#define _READONLY 0 /* 1: Read-only mode */ +#define _USE_IOCTL 1 + +#include "integer.h" + + +/* Status of Disk Functions */ +typedef BYTE DSTATUS; + +/* Results of Disk Functions */ +typedef enum { + RES_OK = 0, /* 0: Successful */ + RES_ERROR, /* 1: R/W Error */ + RES_WRPRT, /* 2: Write Protected */ + RES_NOTRDY, /* 3: Not Ready */ + RES_PARERR /* 4: Invalid Parameter */ +} DRESULT; + + +/*---------------------------------------*/ +/* Prototypes for disk control functions */ + +DSTATUS disk_initialize (BYTE); +DSTATUS disk_status (BYTE); +DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE); +#if _READONLY == 0 +DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE); +#endif +DRESULT disk_ioctl (BYTE, BYTE, void*); + + + +/* Disk Status Bits (DSTATUS) */ + +#define STA_NOINIT 0x01 /* Drive not initialized */ +#define STA_NODISK 0x02 /* No medium in the drive */ +#define STA_PROTECT 0x04 /* Write protected */ + +/* Card type flags (CardType) */ + +#define CT_MMC 0x01 +#define CT_SD1 0x02 +#define CT_SD2 0x04 +#define CT_SDC (CT_SD1|CT_SD2) +#define CT_BLOCK 0x08 + +/* Command code for disk_ioctrl() */ + +/* Generic command */ +#define CTRL_SYNC 0 /* Mandatory for write functions */ +#define GET_SECTOR_COUNT 1 /* Mandatory for only f_mkfs() */ +#define GET_SECTOR_SIZE 2 /* Mandatory for multiple sector size cfg */ +#define GET_BLOCK_SIZE 3 /* Mandatory for only f_mkfs() */ +#define CTRL_POWER 4 +#define CTRL_LOCK 5 +#define CTRL_EJECT 6 +/* MMC/SDC command */ +#define MMC_GET_TYPE 10 +#define MMC_GET_CSD 11 +#define MMC_GET_CID 12 +#define MMC_GET_OCR 13 +#define MMC_GET_SDSTAT 14 +/* ATA/CF command */ +#define ATA_GET_REV 20 +#define ATA_GET_MODEL 21 +#define ATA_GET_SN 22 + + +#define _DISKIO +#endif diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ff.c b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ff.c new file mode 100644 index 0000000..236c86f --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ff.c @@ -0,0 +1,3553 @@ +/*----------------------------------------------------------------------------/ +/ FatFs - FAT file system module R0.08 (C)ChaN, 2010 +/-----------------------------------------------------------------------------/ +/ FatFs module is a generic FAT file system module for small embedded systems. +/ This is a free software that opened for education, research and commercial +/ developments under license policy of following terms. +/ +/ Copyright (C) 2010, ChaN, all right reserved. +/ +/ * The FatFs module is a free software and there is NO WARRANTY. +/ * No restriction on use. You can use, modify and redistribute it for +/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. +/ * Redistributions of source code must retain the above copyright notice. +/ +/-----------------------------------------------------------------------------/ +/ Feb 26,'06 R0.00 Prototype. +/ +/ Apr 29,'06 R0.01 First stable version. +/ +/ Jun 01,'06 R0.02 Added FAT12 support. +/ Removed unbuffered mode. +/ Fixed a problem on small (<32M) partition. +/ Jun 10,'06 R0.02a Added a configuration option (_FS_MINIMUM). +/ +/ Sep 22,'06 R0.03 Added f_rename(). +/ Changed option _FS_MINIMUM to _FS_MINIMIZE. +/ Dec 11,'06 R0.03a Improved cluster scan algorithm to write files fast. +/ Fixed f_mkdir() creates incorrect directory on FAT32. +/ +/ Feb 04,'07 R0.04 Supported multiple drive system. +/ Changed some interfaces for multiple drive system. +/ Changed f_mountdrv() to f_mount(). +/ Added f_mkfs(). +/ Apr 01,'07 R0.04a Supported multiple partitions on a physical drive. +/ Added a capability of extending file size to f_lseek(). +/ Added minimization level 3. +/ Fixed an endian sensitive code in f_mkfs(). +/ May 05,'07 R0.04b Added a configuration option _USE_NTFLAG. +/ Added FSInfo support. +/ Fixed DBCS name can result FR_INVALID_NAME. +/ Fixed short seek (<= csize) collapses the file object. +/ +/ Aug 25,'07 R0.05 Changed arguments of f_read(), f_write() and f_mkfs(). +/ Fixed f_mkfs() on FAT32 creates incorrect FSInfo. +/ Fixed f_mkdir() on FAT32 creates incorrect directory. +/ Feb 03,'08 R0.05a Added f_truncate() and f_utime(). +/ Fixed off by one error at FAT sub-type determination. +/ Fixed btr in f_read() can be mistruncated. +/ Fixed cached sector is not flushed when create and close +/ without write. +/ +/ Apr 01,'08 R0.06 Added fputc(), fputs(), fprintf() and fgets(). +/ Improved performance of f_lseek() on moving to the same +/ or following cluster. +/ +/ Apr 01,'09 R0.07 Merged Tiny-FatFs as a buffer configuration option. +/ Added long file name support. +/ Added multiple code page support. +/ Added re-entrancy for multitask operation. +/ Added auto cluster size selection to f_mkfs(). +/ Added rewind option to f_readdir(). +/ Changed result code of critical errors. +/ Renamed string functions to avoid name collision. +/ Apr 14,'09 R0.07a Separated out OS dependent code on reentrant cfg. +/ Added multiple sector size support. +/ Jun 21,'09 R0.07c Fixed f_unlink() can return FR_OK on error. +/ Fixed wrong cache control in f_lseek(). +/ Added relative path feature. +/ Added f_chdir() and f_chdrive(). +/ Added proper case conversion to extended char. +/ Nov 03,'09 R0.07e Separated out configuration options from ff.h to ffconf.h. +/ Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. +/ Fixed name matching error on the 13 char boundary. +/ Added a configuration option, _LFN_UNICODE. +/ Changed f_readdir() to return the SFN with always upper +/ case on non-LFN cfg. +/ +/ May 15,'10 R0.08 Added a memory configuration option. (_USE_LFN) +/ Added file lock feature. (_FS_SHARE) +/ Added fast seek feature. (_USE_FASTSEEK) +/ Changed some types on the API, XCHAR->TCHAR. +/ Changed fname member in the FILINFO structure on Unicode cfg. +/ String functions support UTF-8 encoding files on Unicode cfg. +/---------------------------------------------------------------------------*/ + +#include "ff.h" /* FatFs configurations and declarations */ +#include "diskio.h" /* Declarations of low level disk I/O functions */ + + +/*-------------------------------------------------------------------------- + + Module Private Definitions + +---------------------------------------------------------------------------*/ + +#if _FATFS != 8085 +#error Wrong include file (ff.h). +#endif + + +/* FAT sub-type boundaries */ +/* Note that the FAT spec by Microsoft says 4085 but Windows works with 4087! */ +#define MIN_FAT16 4086 /* Minimum number of clusters for FAT16 */ +#define MIN_FAT32 65526 /* Minimum number of clusters for FAT32 */ + + +/* Definitions corresponds to multiple sector size */ +#if _MAX_SS == 512 /* Single sector size */ +#define SS(fs) 512U +#elif _MAX_SS == 1024 || _MAX_SS == 2048 || _MAX_SS == 4096 /* Multiple sector size */ +#define SS(fs) ((fs)->ssize) +#else +#error Wrong sector size. +#endif + + +/* Reentrancy related */ +#if _FS_REENTRANT +#if _USE_LFN == 1 +#error Static LFN work area must not be used in re-entrant configuration. +#endif +#define ENTER_FF(fs) { if (!lock_fs(fs)) return FR_TIMEOUT; } +#define LEAVE_FF(fs, res) { unlock_fs(fs, res); return res; } + +#else +#define ENTER_FF(fs) +#define LEAVE_FF(fs, res) return res + +#endif + +#define ABORT(fs, res) { fp->flag |= FA__ERROR; LEAVE_FF(fs, res); } + + +/* Character code support macros */ +#define IsUpper(c) (((c)>='A')&&((c)<='Z')) +#define IsLower(c) (((c)>='a')&&((c)<='z')) +#define IsDigit(c) (((c)>='0')&&((c)<='9')) + +#if _DF1S /* Code page is DBCS */ + +#ifdef _DF2S /* Two 1st byte areas */ +#define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E)) +#else /* One 1st byte area */ +#define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) +#endif + +#ifdef _DS3S /* Three 2nd byte areas */ +#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E)) +#else /* Two 2nd byte areas */ +#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E)) +#endif + +#else /* Code page is SBCS */ + +#define IsDBCS1(c) 0 +#define IsDBCS2(c) 0 + +#endif /* _DF1S */ + + +/* Name status flags */ +#define NS 11 /* Offset of name status byte */ +#define NS_LOSS 0x01 /* Out of 8.3 format */ +#define NS_LFN 0x02 /* Force to create LFN entry */ +#define NS_LAST 0x04 /* Last segment */ +#define NS_BODY 0x08 /* Lower case flag (body) */ +#define NS_EXT 0x10 /* Lower case flag (ext) */ +#define NS_DOT 0x20 /* Dot entry */ + + + +/*------------------------------------------------------------*/ +/* Work area */ + +#if !_DRIVES +#error Number of drives must not be 0. +#endif +static +WORD Fsid; /* File system mount ID */ +static +FATFS *FatFs[_DRIVES]; /* Pointer to the file system objects (logical drives) */ + +#if _FS_RPATH +static +BYTE Drive; /* Current drive */ +#endif + + +#if _USE_LFN == 0 /* No LFN */ +#define DEF_NAMEBUF BYTE sfn[12] +#define INIT_BUF(dobj) (dobj).fn = sfn +#define FREE_BUF() + +#elif _USE_LFN == 1 /* LFN with static LFN working buffer */ +static WCHAR LfnBuf[_MAX_LFN + 1]; +#define DEF_NAMEBUF BYTE sfn[12] +#define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = LfnBuf; } +#define FREE_BUF() + +#elif _USE_LFN == 2 /* LFN with dynamic LFN working buffer on the stack */ +#define DEF_NAMEBUF BYTE sfn[12]; WCHAR lbuf[_MAX_LFN + 1] +#define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = lbuf; } +#define FREE_BUF() + +#elif _USE_LFN == 3 /* LFN with dynamic LFN working buffer on the heap */ +#define DEF_NAMEBUF BYTE sfn[12]; WCHAR *lfn +#define INIT_BUF(dobj) { lfn = ff_memalloc((_MAX_LFN + 1) * 2); \ + if (!lfn) LEAVE_FF((dobj).fs, FR_NOT_ENOUGH_CORE); \ + (dobj).lfn = lfn; (dobj).fn = sfn; } +#define FREE_BUF() ff_memfree(lfn) + +#else +#error Wrong LFN configuration. +#endif + + + + +/*-------------------------------------------------------------------------- + + Module Private Functions + +---------------------------------------------------------------------------*/ + + +/*-----------------------------------------------------------------------*/ +/* String functions */ +/*-----------------------------------------------------------------------*/ + +/* Copy memory to memory */ +static +void mem_cpy (void* dst, const void* src, int cnt) { + BYTE *d = (BYTE*)dst; + const BYTE *s = (const BYTE*)src; + +#if _WORD_ACCESS == 1 + while (cnt >= sizeof(int)) { + *(int*)d = *(int*)s; + d += sizeof(int); s += sizeof(int); + cnt -= sizeof(int); + } +#endif + while (cnt--) + *d++ = *s++; +} + +/* Fill memory */ +static +void mem_set (void* dst, int val, int cnt) { + BYTE *d = (BYTE*)dst; + + while (cnt--) + *d++ = (BYTE)val; +} + +/* Compare memory to memory */ +static +int mem_cmp (const void* dst, const void* src, int cnt) { + const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; + int r = 0; + + while (cnt-- && (r = *d++ - *s++) == 0) ; + return r; +} + +/* Check if chr is contained in the string */ +static +int chk_chr (const char* str, int chr) { + while (*str && *str != chr) str++; + return *str; +} + + + +/*-----------------------------------------------------------------------*/ +/* Request/Release grant to access the volume */ +/*-----------------------------------------------------------------------*/ +#if _FS_REENTRANT + +static +int lock_fs ( + FATFS *fs /* File system object */ +) +{ + return ff_req_grant(fs->sobj); +} + + +static +void unlock_fs ( + FATFS *fs, /* File system object */ + FRESULT res /* Result code to be returned */ +) +{ + if (res != FR_NOT_ENABLED && + res != FR_INVALID_DRIVE && + res != FR_INVALID_OBJECT && + res != FR_TIMEOUT) { + ff_rel_grant(fs->sobj); + } +} +#endif + + + +/*-----------------------------------------------------------------------*/ +/* File shareing control functions */ +/*-----------------------------------------------------------------------*/ +#if _FS_SHARE + +static +FRESULT chk_lock ( /* Check if the file can be accessed */ + DIR* dj, /* Directory object pointing the file to be checked */ + int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ +) +{ + UINT i, be; + + /* Search file semaphore table */ + for (i = be = 0; i < _FS_SHARE; i++) { + if (dj->fs->flsem[i].ctr) { /* Existing entry */ + if (dj->fs->flsem[i].clu == dj->sclust && /* The file is found (identified with its location) */ + dj->fs->flsem[i].idx == dj->index) break; + } else { /* Blank entry */ + be++; + } + } + if (i == _FS_SHARE) /* The file has not been opened */ + return (be || acc != 2) ? FR_OK : FR_TOO_MANY_OPEN_FILES; /* Is there a blank entry for new file? */ + + /* The file has been opened. Reject any open against writing file and all write mode open */ + return (acc || dj->fs->flsem[i].ctr == 0x100) ? FR_LOCKED : FR_OK; +} + + +static +int enq_lock ( /* Check if an entry is available for a new file */ + FATFS* fs /* File system object */ +) +{ + UINT i; + + for (i = 0; i < _FS_SHARE && fs->flsem[i].ctr; i++) ; + return (i == _FS_SHARE) ? 0 : 1; +} + + +static +UINT inc_lock ( /* Increment file open counter and returns its index (0:int error) */ + DIR* dj, /* Directory object pointing the file to register or increment */ + int acc /* Desired access mode (0:Read, !0:Write) */ +) +{ + UINT i; + + + for (i = 0; i < _FS_SHARE; i++) { /* Find the file */ + if (dj->fs->flsem[i].ctr && + dj->fs->flsem[i].clu == dj->sclust && + dj->fs->flsem[i].idx == dj->index) break; + } + + if (i == _FS_SHARE) { /* Not opened. Register it as new. */ + for (i = 0; i < _FS_SHARE && dj->fs->flsem[i].ctr; i++) ; + if (i == _FS_SHARE) return 0; /* No space to register (int err) */ + dj->fs->flsem[i].clu = dj->sclust; + dj->fs->flsem[i].idx = dj->index; + } + + if (acc && dj->fs->flsem[i].ctr) return 0; /* Access violation (int err) */ + + dj->fs->flsem[i].ctr = acc ? 0x100 : dj->fs->flsem[i].ctr + 1; /* Set semaphore value */ + + return i + 1; +} + + +static +FRESULT dec_lock ( /* Decrement file open counter */ + FATFS* fs, /* File system object */ + UINT i /* Semaphore index */ +) +{ + WORD n; + FRESULT res; + + + if (--i < _FS_SHARE) { + n = fs->flsem[i].ctr; + if (n >= 0x100) n = 0; + if (n) n--; + fs->flsem[i].ctr = n; + res = FR_OK; + } else { + res = FR_INT_ERR; + } + return res; +} + +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Change window offset */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT move_window ( + FATFS *fs, /* File system object */ + DWORD sector /* Sector number to make appearance in the fs->win[] */ +) /* Move to zero only writes back dirty window */ +{ + DWORD wsect; + + + wsect = fs->winsect; + if (wsect != sector) { /* Changed current window */ +#if !_FS_READONLY + if (fs->wflag) { /* Write back dirty window if needed */ + if (disk_write(fs->drv, fs->win, wsect, 1) != RES_OK) + return FR_DISK_ERR; + fs->wflag = 0; + if (wsect < (fs->fatbase + fs->fsize)) { /* In FAT area */ + BYTE nf; + for (nf = fs->n_fats; nf > 1; nf--) { /* Reflect the change to all FAT copies */ + wsect += fs->fsize; + disk_write(fs->drv, fs->win, wsect, 1); + } + } + } +#endif + if (sector) { + if (disk_read(fs->drv, fs->win, sector, 1) != RES_OK) + return FR_DISK_ERR; + fs->winsect = sector; + } + } + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Clean-up cached data */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY +static +FRESULT sync ( /* FR_OK: successful, FR_DISK_ERR: failed */ + FATFS *fs /* File system object */ +) +{ + FRESULT res; + + + res = move_window(fs, 0); + if (res == FR_OK) { + /* Update FSInfo sector if needed */ + if (fs->fs_type == FS_FAT32 && fs->fsi_flag) { + fs->winsect = 0; + mem_set(fs->win, 0, 512); + ST_WORD(fs->win+BS_55AA, 0xAA55); + ST_DWORD(fs->win+FSI_LeadSig, 0x41615252); + ST_DWORD(fs->win+FSI_StrucSig, 0x61417272); + ST_DWORD(fs->win+FSI_Free_Count, fs->free_clust); + ST_DWORD(fs->win+FSI_Nxt_Free, fs->last_clust); + disk_write(fs->drv, fs->win, fs->fsi_sector, 1); + fs->fsi_flag = 0; + } + /* Make sure that no pending write process in the physical drive */ + if (disk_ioctl(fs->drv, CTRL_SYNC, (void*)0) != RES_OK) + res = FR_DISK_ERR; + } + + return res; +} +#endif + + + + +/*-----------------------------------------------------------------------*/ +/* FAT access - Read value of a FAT entry */ +/*-----------------------------------------------------------------------*/ + + +DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, Else:Cluster status */ + FATFS *fs, /* File system object */ + DWORD clst /* Cluster# to get the link information */ +) +{ + UINT wc, bc; + BYTE *p; + + + if (clst < 2 || clst >= fs->n_fatent) /* Chack range */ + return 1; + + switch (fs->fs_type) { + case FS_FAT12 : + bc = (UINT)clst; bc += bc / 2; + if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; + wc = fs->win[bc % SS(fs)]; bc++; + if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; + wc |= fs->win[bc % SS(fs)] << 8; + return (clst & 1) ? (wc >> 4) : (wc & 0xFFF); + + case FS_FAT16 : + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2)))) break; + p = &fs->win[clst * 2 % SS(fs)]; + return LD_WORD(p); + + case FS_FAT32 : + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4)))) break; + p = &fs->win[clst * 4 % SS(fs)]; + return LD_DWORD(p) & 0x0FFFFFFF; + } + + return 0xFFFFFFFF; /* An error occurred at the disk I/O layer */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* FAT access - Change value of a FAT entry */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY + +FRESULT put_fat ( + FATFS *fs, /* File system object */ + DWORD clst, /* Cluster# to be changed in range of 2 to fs->n_fatent - 1 */ + DWORD val /* New value to mark the cluster */ +) +{ + UINT bc; + BYTE *p; + FRESULT res; + + + if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ + res = FR_INT_ERR; + + } else { + switch (fs->fs_type) { + case FS_FAT12 : + bc = clst; bc += bc / 2; + res = move_window(fs, fs->fatbase + (bc / SS(fs))); + if (res != FR_OK) break; + p = &fs->win[bc % SS(fs)]; + *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; + bc++; + fs->wflag = 1; + res = move_window(fs, fs->fatbase + (bc / SS(fs))); + if (res != FR_OK) break; + p = &fs->win[bc % SS(fs)]; + *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); + break; + + case FS_FAT16 : + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); + if (res != FR_OK) break; + p = &fs->win[clst * 2 % SS(fs)]; + ST_WORD(p, (WORD)val); + break; + + case FS_FAT32 : + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); + if (res != FR_OK) break; + p = &fs->win[clst * 4 % SS(fs)]; + val |= LD_DWORD(p) & 0xF0000000; + ST_DWORD(p, val); + break; + + default : + res = FR_INT_ERR; + } + fs->wflag = 1; + } + + return res; +} +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* FAT handling - Remove a cluster chain */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY +static +FRESULT remove_chain ( + FATFS *fs, /* File system object */ + DWORD clst /* Cluster# to remove a chain from */ +) +{ + FRESULT res; + DWORD nxt; + + + if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ + res = FR_INT_ERR; + + } else { + res = FR_OK; + while (clst < fs->n_fatent) { /* Not a last link? */ + nxt = get_fat(fs, clst); /* Get cluster status */ + if (nxt == 0) break; /* Empty cluster? */ + if (nxt == 1) { res = FR_INT_ERR; break; } /* Internal error? */ + if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ + res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ + if (res != FR_OK) break; + if (fs->free_clust != 0xFFFFFFFF) { /* Update FSInfo */ + fs->free_clust++; + fs->fsi_flag = 1; + } + clst = nxt; /* Next cluster */ + } + } + + return res; +} +#endif + + + + +/*-----------------------------------------------------------------------*/ +/* FAT handling - Stretch or Create a cluster chain */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY +static +DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */ + FATFS *fs, /* File system object */ + DWORD clst /* Cluster# to stretch. 0 means create a new chain. */ +) +{ + DWORD cs, ncl, scl; + + + if (clst == 0) { /* Create a new chain */ + scl = fs->last_clust; /* Get suggested start point */ + if (!scl || scl >= fs->n_fatent) scl = 1; + } + else { /* Stretch the current chain */ + cs = get_fat(fs, clst); /* Check the cluster status */ + if (cs < 2) return 1; /* It is an invalid cluster */ + if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ + scl = clst; + } + + ncl = scl; /* Start cluster */ + for (;;) { + ncl++; /* Next cluster */ + if (ncl >= fs->n_fatent) { /* Wrap around */ + ncl = 2; + if (ncl > scl) return 0; /* No free cluster */ + } + cs = get_fat(fs, ncl); /* Get the cluster status */ + if (cs == 0) break; /* Found a free cluster */ + if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */ + return cs; + if (ncl == scl) return 0; /* No free cluster */ + } + + if (put_fat(fs, ncl, 0x0FFFFFFF)) /* Mark the new cluster "last link" */ + return 0xFFFFFFFF; + if (clst != 0) { /* Link it to the previous one if needed */ + if (put_fat(fs, clst, ncl)) + return 0xFFFFFFFF; + } + + fs->last_clust = ncl; /* Update FSINFO */ + if (fs->free_clust != 0xFFFFFFFF) { + fs->free_clust--; + fs->fsi_flag = 1; + } + + return ncl; /* Return new cluster number */ +} +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Get sector# from cluster# */ +/*-----------------------------------------------------------------------*/ + + +DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */ + FATFS *fs, /* File system object */ + DWORD clst /* Cluster# to be converted */ +) +{ + clst -= 2; + if (clst >= (fs->n_fatent - 2)) return 0; /* Invalid cluster# */ + return clst * fs->csize + fs->database; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Set directory index */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT dir_sdi ( + DIR *dj, /* Pointer to directory object */ + WORD idx /* Directory index number */ +) +{ + DWORD clst; + WORD ic; + + + dj->index = idx; + clst = dj->sclust; + if (clst == 1 || clst >= dj->fs->n_fatent) /* Check start cluster range */ + return FR_INT_ERR; + if (!clst && dj->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ + clst = dj->fs->dirbase; + + if (clst == 0) { /* Static table */ + dj->clust = clst; + if (idx >= dj->fs->n_rootdir) /* Index is out of range */ + return FR_INT_ERR; + dj->sect = dj->fs->dirbase + idx / (SS(dj->fs) / 32); /* Sector# */ + } + else { /* Dynamic table */ + ic = SS(dj->fs) / 32 * dj->fs->csize; /* Entries per cluster */ + while (idx >= ic) { /* Follow cluster chain */ + clst = get_fat(dj->fs, clst); /* Get next cluster */ + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ + if (clst < 2 || clst >= dj->fs->n_fatent) /* Reached to end of table or int error */ + return FR_INT_ERR; + idx -= ic; + } + dj->clust = clst; + dj->sect = clust2sect(dj->fs, clst) + idx / (SS(dj->fs) / 32); /* Sector# */ + } + + dj->dir = dj->fs->win + (idx % (SS(dj->fs) / 32)) * 32; /* Ptr to the entry in the sector */ + + return FR_OK; /* Seek succeeded */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Move directory index next */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:EOT and could not stretch */ + DIR *dj, /* Pointer to directory object */ + int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ +) +{ + DWORD clst; + WORD i; + + + i = dj->index + 1; + if (!i || !dj->sect) /* Report EOT when index has reached 65535 */ + return FR_NO_FILE; + + if (!(i % (SS(dj->fs) / 32))) { /* Sector changed? */ + dj->sect++; /* Next sector */ + + if (dj->clust == 0) { /* Static table */ + if (i >= dj->fs->n_rootdir) /* Report EOT when end of table */ + return FR_NO_FILE; + } + else { /* Dynamic table */ + if (((i / (SS(dj->fs) / 32)) & (dj->fs->csize - 1)) == 0) { /* Cluster changed? */ + clst = get_fat(dj->fs, dj->clust); /* Get next cluster */ + if (clst <= 1) return FR_INT_ERR; + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; + if (clst >= dj->fs->n_fatent) { /* When it reached end of dynamic table */ +#if !_FS_READONLY + BYTE c; + if (!stretch) return FR_NO_FILE; /* When do not stretch, report EOT */ + clst = create_chain(dj->fs, dj->clust); /* Stretch cluster chain */ + if (clst == 0) return FR_DENIED; /* No free cluster */ + if (clst == 1) return FR_INT_ERR; + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; + /* Clean-up stretched table */ + if (move_window(dj->fs, 0)) return FR_DISK_ERR; /* Flush active window */ + mem_set(dj->fs->win, 0, SS(dj->fs)); /* Clear window buffer */ + dj->fs->winsect = clust2sect(dj->fs, clst); /* Cluster start sector */ + for (c = 0; c < dj->fs->csize; c++) { /* Fill the new cluster with 0 */ + dj->fs->wflag = 1; + if (move_window(dj->fs, 0)) return FR_DISK_ERR; + dj->fs->winsect++; + } + dj->fs->winsect -= c; /* Rewind window address */ +#else + return FR_NO_FILE; /* Report EOT */ +#endif + } + dj->clust = clst; /* Initialize data for new cluster */ + dj->sect = clust2sect(dj->fs, clst); + } + } + } + + dj->index = i; + dj->dir = dj->fs->win + (i % (SS(dj->fs) / 32)) * 32; + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* LFN handling - Test/Pick/Fit an LFN segment from/to directory entry */ +/*-----------------------------------------------------------------------*/ +#if _USE_LFN +static +const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* Offset of LFN chars in the directory entry */ + + +static +int cmp_lfn ( /* 1:Matched, 0:Not matched */ + WCHAR *lfnbuf, /* Pointer to the LFN to be compared */ + BYTE *dir /* Pointer to the directory entry containing a part of LFN */ +) +{ + int i, s; + WCHAR wc, uc; + + + i = ((dir[LDIR_Ord] & 0xBF) - 1) * 13; /* Get offset in the LFN buffer */ + s = 0; wc = 1; + do { + uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ + if (wc) { /* Last char has not been processed */ + wc = ff_wtoupper(uc); /* Convert it to upper case */ + if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */ + return 0; /* Not matched */ + } else { + if (uc != 0xFFFF) return 0; /* Check filler */ + } + } while (++s < 13); /* Repeat until all chars in the entry are checked */ + + if ((dir[LDIR_Ord] & 0x40) && wc && lfnbuf[i]) /* Last segment matched but different length */ + return 0; + + return 1; /* The part of LFN matched */ +} + + + +static +int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */ + WCHAR *lfnbuf, /* Pointer to the Unicode-LFN buffer */ + BYTE *dir /* Pointer to the directory entry */ +) +{ + int i, s; + WCHAR wc, uc; + + + i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */ + + s = 0; wc = 1; + do { + uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ + if (wc) { /* Last char has not been processed */ + if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ + lfnbuf[i++] = wc = uc; /* Store it */ + } else { + if (uc != 0xFFFF) return 0; /* Check filler */ + } + } while (++s < 13); /* Read all character in the entry */ + + if (dir[LDIR_Ord] & 0x40) { /* Put terminator if it is the last LFN part */ + if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ + lfnbuf[i] = 0; + } + + return 1; +} + + +#if !_FS_READONLY +static +void fit_lfn ( + const WCHAR *lfnbuf, /* Pointer to the LFN buffer */ + BYTE *dir, /* Pointer to the directory entry */ + BYTE ord, /* LFN order (1-20) */ + BYTE sum /* SFN sum */ +) +{ + int i, s; + WCHAR wc; + + + dir[LDIR_Chksum] = sum; /* Set check sum */ + dir[LDIR_Attr] = AM_LFN; /* Set attribute. LFN entry */ + dir[LDIR_Type] = 0; + ST_WORD(dir+LDIR_FstClusLO, 0); + + i = (ord - 1) * 13; /* Get offset in the LFN buffer */ + s = wc = 0; + do { + if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective char */ + ST_WORD(dir+LfnOfs[s], wc); /* Put it */ + if (!wc) wc = 0xFFFF; /* Padding chars following last char */ + } while (++s < 13); + if (wc == 0xFFFF || !lfnbuf[i]) ord |= 0x40; /* Bottom LFN part is the start of LFN sequence */ + dir[LDIR_Ord] = ord; /* Set the LFN order */ +} + +#endif +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Create numbered name */ +/*-----------------------------------------------------------------------*/ +#if _USE_LFN +void gen_numname ( + BYTE *dst, /* Pointer to generated SFN */ + const BYTE *src, /* Pointer to source SFN to be modified */ + const WCHAR *lfn, /* Pointer to LFN */ + WORD seq /* Sequence number */ +) +{ + BYTE ns[8], c; + int i, j; + + + mem_cpy(dst, src, 11); + + if (seq > 5) { /* On many collisions, generate a hash number instead of sequential number */ + do seq = (seq >> 1) + (seq << 15) + (WORD)*lfn++; while (*lfn); + } + + /* itoa */ + i = 7; + do { + c = (seq % 16) + '0'; + if (c > '9') c += 7; + ns[i--] = c; + seq /= 16; + } while (seq); + ns[i] = '~'; + + /* Append the number */ + for (j = 0; j < i && dst[j] != ' '; j++) { + if (IsDBCS1(dst[j])) { + if (j == i - 1) break; + j++; + } + } + do { + dst[j++] = (i < 8) ? ns[i++] : ' '; + } while (j < 8); +} +#endif + + + + +/*-----------------------------------------------------------------------*/ +/* Calculate sum of an SFN */ +/*-----------------------------------------------------------------------*/ +#if _USE_LFN +static +BYTE sum_sfn ( + const BYTE *dir /* Ptr to directory entry */ +) +{ + BYTE sum = 0; + int n = 11; + + do sum = (sum >> 1) + (sum << 7) + *dir++; while (--n); + return sum; +} +#endif + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Find an object in the directory */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT dir_find ( + DIR *dj /* Pointer to the directory object linked to the file name */ +) +{ + FRESULT res; + BYTE c, *dir; +#if _USE_LFN + BYTE a, ord, sum; +#endif + + res = dir_sdi(dj, 0); /* Rewind directory object */ + if (res != FR_OK) return res; + +#if _USE_LFN + ord = sum = 0xFF; +#endif + do { + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + dir = dj->dir; /* Ptr to the directory entry of current index */ + c = dir[DIR_Name]; + if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ +#if _USE_LFN /* LFN configuration */ + a = dir[DIR_Attr] & AM_MASK; + if (c == 0xE5 || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ + ord = 0xFF; + } else { + if (a == AM_LFN) { /* An LFN entry is found */ + if (dj->lfn) { + if (c & 0x40) { /* Is it start of LFN sequence? */ + sum = dir[LDIR_Chksum]; + c &= 0xBF; ord = c; /* LFN start order */ + dj->lfn_idx = dj->index; + } + /* Check validity of the LFN entry and compare it with given name */ + ord = (c == ord && sum == dir[LDIR_Chksum] && cmp_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF; + } + } else { /* An SFN entry is found */ + if (!ord && sum == sum_sfn(dir)) break; /* LFN matched? */ + ord = 0xFF; dj->lfn_idx = 0xFFFF; /* Reset LFN sequence */ + if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break; /* SFN matched? */ + } + } +#else /* Non LFN configuration */ + if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dj->fn, 11)) /* Is it a valid entry? */ + break; +#endif + res = dir_next(dj, 0); /* Next entry */ + } while (res == FR_OK); + + return res; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read an object from the directory */ +/*-----------------------------------------------------------------------*/ +#if _FS_MINIMIZE <= 1 +static +FRESULT dir_read ( + DIR *dj /* Pointer to the directory object that pointing the entry to be read */ +) +{ + FRESULT res; + BYTE c, *dir; +#if _USE_LFN + BYTE a, ord = 0xFF, sum = 0xFF; +#endif + + res = FR_NO_FILE; + while (dj->sect) { + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + dir = dj->dir; /* Ptr to the directory entry of current index */ + c = dir[DIR_Name]; + if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ +#if _USE_LFN /* LFN configuration */ + a = dir[DIR_Attr] & AM_MASK; + if (c == 0xE5 || (!_FS_RPATH && c == '.') || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ + ord = 0xFF; + } else { + if (a == AM_LFN) { /* An LFN entry is found */ + if (c & 0x40) { /* Is it start of LFN sequence? */ + sum = dir[LDIR_Chksum]; + c &= 0xBF; ord = c; + dj->lfn_idx = dj->index; + } + /* Check LFN validity and capture it */ + ord = (c == ord && sum == dir[LDIR_Chksum] && pick_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF; + } else { /* An SFN entry is found */ + if (ord || sum != sum_sfn(dir)) /* Is there a valid LFN? */ + dj->lfn_idx = 0xFFFF; /* It has no LFN. */ + break; + } + } +#else /* Non LFN configuration */ + if (c != 0xE5 && (_FS_RPATH || c != '.') && !(dir[DIR_Attr] & AM_VOL)) /* Is it a valid entry? */ + break; +#endif + res = dir_next(dj, 0); /* Next entry */ + if (res != FR_OK) break; + } + + if (res != FR_OK) dj->sect = 0; + + return res; +} +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Register an object to the directory */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY +static +FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */ + DIR *dj /* Target directory with object name to be created */ +) +{ + FRESULT res; + BYTE c, *dir; +#if _USE_LFN /* LFN configuration */ + WORD n, ne, is; + BYTE sn[12], *fn, sum; + WCHAR *lfn; + + + fn = dj->fn; lfn = dj->lfn; + mem_cpy(sn, fn, 12); + + if (_FS_RPATH && (sn[NS] & NS_DOT)) return FR_INVALID_NAME; /* Cannot create dot entry */ + + if (sn[NS] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ + fn[NS] = 0; dj->lfn = 0; /* Find only SFN */ + for (n = 1; n < 100; n++) { + gen_numname(fn, sn, lfn, n); /* Generate a numbered name */ + res = dir_find(dj); /* Check if the name collides with existing SFN */ + if (res != FR_OK) break; + } + if (n == 100) return FR_DENIED; /* Abort if too many collisions */ + if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ + fn[NS] = sn[NS]; dj->lfn = lfn; + } + + if (sn[NS] & NS_LFN) { /* When LFN is to be created, reserve an SFN + LFN entries. */ + for (ne = 0; lfn[ne]; ne++) ; + ne = (ne + 25) / 13; + } else { /* Otherwise reserve only an SFN entry. */ + ne = 1; + } + + /* Reserve contiguous entries */ + res = dir_sdi(dj, 0); + if (res != FR_OK) return res; + n = is = 0; + do { + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + c = *dj->dir; /* Check the entry status */ + if (c == 0xE5 || c == 0) { /* Is it a blank entry? */ + if (n == 0) is = dj->index; /* First index of the contiguous entry */ + if (++n == ne) break; /* A contiguous entry that required count is found */ + } else { + n = 0; /* Not a blank entry. Restart to search */ + } + res = dir_next(dj, 1); /* Next entry with table stretch */ + } while (res == FR_OK); + + if (res == FR_OK && ne > 1) { /* Initialize LFN entry if needed */ + res = dir_sdi(dj, is); + if (res == FR_OK) { + sum = sum_sfn(dj->fn); /* Sum of the SFN tied to the LFN */ + ne--; + do { /* Store LFN entries in bottom first */ + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + fit_lfn(dj->lfn, dj->dir, (BYTE)ne, sum); + dj->fs->wflag = 1; + res = dir_next(dj, 0); /* Next entry */ + } while (res == FR_OK && --ne); + } + } + +#else /* Non LFN configuration */ + res = dir_sdi(dj, 0); + if (res == FR_OK) { + do { /* Find a blank entry for the SFN */ + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + c = *dj->dir; + if (c == 0xE5 || c == 0) break; /* Is it a blank entry? */ + res = dir_next(dj, 1); /* Next entry with table stretch */ + } while (res == FR_OK); + } +#endif + + if (res == FR_OK) { /* Initialize the SFN entry */ + res = move_window(dj->fs, dj->sect); + if (res == FR_OK) { + dir = dj->dir; + mem_set(dir, 0, 32); /* Clean the entry */ + mem_cpy(dir, dj->fn, 11); /* Put SFN */ +#if _USE_LFN + dir[DIR_NTres] = *(dj->fn+NS) & (NS_BODY | NS_EXT); /* Put NT flag */ +#endif + dj->fs->wflag = 1; + } + } + + return res; +} +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Remove an object from the directory */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY && !_FS_MINIMIZE +static +FRESULT dir_remove ( /* FR_OK: Successful, FR_DISK_ERR: A disk error */ + DIR *dj /* Directory object pointing the entry to be removed */ +) +{ + FRESULT res; +#if _USE_LFN /* LFN configuration */ + WORD i; + + i = dj->index; /* SFN index */ + res = dir_sdi(dj, (WORD)((dj->lfn_idx == 0xFFFF) ? i : dj->lfn_idx)); /* Goto the SFN or top of the LFN entries */ + if (res == FR_OK) { + do { + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + *dj->dir = 0xE5; /* Mark the entry "deleted" */ + dj->fs->wflag = 1; + if (dj->index >= i) break; /* When reached SFN, all entries of the object has been deleted. */ + res = dir_next(dj, 0); /* Next entry */ + } while (res == FR_OK); + if (res == FR_NO_FILE) res = FR_INT_ERR; + } + +#else /* Non LFN configuration */ + res = dir_sdi(dj, dj->index); + if (res == FR_OK) { + res = move_window(dj->fs, dj->sect); + if (res == FR_OK) { + *dj->dir = 0xE5; /* Mark the entry "deleted" */ + dj->fs->wflag = 1; + } + } +#endif + + return res; +} +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Pick a segment and create the object name in directory form */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT create_name ( + DIR *dj, /* Pointer to the directory object */ + const TCHAR **path /* Pointer to pointer to the segment in the path string */ +) +{ +#ifdef _EXCVT + static const BYTE excvt[] = _EXCVT; /* Upper conversion table for extended chars */ +#endif + +#if _USE_LFN /* LFN configuration */ + BYTE b, cf; + WCHAR w, *lfn; + int i, ni, si, di; + const TCHAR *p; + + /* Create LFN in Unicode */ + si = di = 0; + p = *path; + lfn = dj->lfn; + for (;;) { + w = p[si++]; /* Get a character */ + if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ + if (di >= _MAX_LFN) /* Reject too long name */ + return FR_INVALID_NAME; +#if !_LFN_UNICODE + w &= 0xFF; + if (IsDBCS1(w)) { /* If it is a DBC 1st byte */ + b = p[si++]; /* Get 2nd byte */ + if (!IsDBCS2(b)) /* Reject invalid code for DBC */ + return FR_INVALID_NAME; + w = (w << 8) + b; + } + w = ff_convert(w, 1); /* Convert OEM to Unicode */ + if (!w) return FR_INVALID_NAME; /* Reject invalid code */ +#endif + if (w < 0x80 && chk_chr("\"*:<>\?|\x7F", w)) /* Reject illegal chars for LFN */ + return FR_INVALID_NAME; + lfn[di++] = w; /* Store the Unicode char */ + } + *path = &p[si]; /* Return pointer to the next segment */ + cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ +#if _FS_RPATH + if ((di == 1 && lfn[di - 1] == '.') || /* Is this a dot entry? */ + (di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) { + lfn[di] = 0; + for (i = 0; i < 11; i++) + dj->fn[i] = (i < di) ? '.' : ' '; + dj->fn[i] = cf | NS_DOT; /* This is a dot entry */ + return FR_OK; + } +#endif + while (di) { /* Strip trailing spaces and dots */ + w = lfn[di - 1]; + if (w != ' ' && w != '.') break; + di--; + } + if (!di) return FR_INVALID_NAME; /* Reject nul string */ + + lfn[di] = 0; /* LFN is created */ + + /* Create SFN in directory form */ + mem_set(dj->fn, ' ', 11); + for (si = 0; lfn[si] == ' ' || lfn[si] == '.'; si++) ; /* Strip leading spaces and dots */ + if (si) cf |= NS_LOSS | NS_LFN; + while (di && lfn[di - 1] != '.') di--; /* Find extension (di<=si: no extension) */ + + b = i = 0; ni = 8; + for (;;) { + w = lfn[si++]; /* Get an LFN char */ + if (!w) break; /* Break on end of the LFN */ + if (w == ' ' || (w == '.' && si != di)) { /* Remove spaces and dots */ + cf |= NS_LOSS | NS_LFN; continue; + } + + if (i >= ni || si == di) { /* Extension or end of SFN */ + if (ni == 11) { /* Long extension */ + cf |= NS_LOSS | NS_LFN; break; + } + if (si != di) cf |= NS_LOSS | NS_LFN; /* Out of 8.3 format */ + if (si > di) break; /* No extension */ + si = di; i = 8; ni = 11; /* Enter extension section */ + b <<= 2; continue; + } + + if (w >= 0x80) { /* Non ASCII char */ +#ifdef _EXCVT + w = ff_convert(w, 0); /* Unicode -> OEM code */ + if (w) w = excvt[w - 0x80]; /* Convert extended char to upper (SBCS) */ +#else + w = ff_convert(ff_wtoupper(w), 0); /* Upper converted Unicode -> OEM code */ +#endif + cf |= NS_LFN; /* Force create LFN entry */ + } + + if (_DF1S && w >= 0x100) { /* Double byte char */ + if (i >= ni - 1) { + cf |= NS_LOSS | NS_LFN; i = ni; continue; + } + dj->fn[i++] = (BYTE)(w >> 8); + } else { /* Single byte char */ + if (!w || chk_chr("+,;=[]", w)) { /* Replace illegal chars for SFN */ + w = '_'; cf |= NS_LOSS | NS_LFN; /* Lossy conversion */ + } else { + if (IsUpper(w)) { /* ASCII large capital */ + b |= 2; + } else { + if (IsLower(w)) { /* ASCII small capital */ + b |= 1; w -= 0x20; + } + } + } + } + dj->fn[i++] = (BYTE)w; + } + + if (dj->fn[0] == 0xE5) dj->fn[0] = 0x05; /* If the first char collides with deleted mark, replace it with 0x05 */ + + if (ni == 8) b <<= 2; + if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */ + cf |= NS_LFN; + if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended char, NT flags are created */ + if ((b & 0x03) == 0x01) cf |= NS_EXT; /* NT flag (Extension has only small capital) */ + if ((b & 0x0C) == 0x04) cf |= NS_BODY; /* NT flag (Filename has only small capital) */ + } + + dj->fn[NS] = cf; /* SFN is created */ + + return FR_OK; + + +#else /* Non-LFN configuration */ + BYTE b, c, d, *sfn; + int ni, si, i; + const char *p; + + /* Create file name in directory form */ + sfn = dj->fn; + mem_set(sfn, ' ', 11); + si = i = b = 0; ni = 8; + p = *path; +#if _FS_RPATH + if (p[si] == '.') { /* Is this a dot entry? */ + for (;;) { + c = (BYTE)p[si++]; + if (c != '.' || si >= 3) break; + sfn[i++] = c; + } + if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME; + *path = &p[si]; /* Return pointer to the next segment */ + sfn[NS] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */ + return FR_OK; + } +#endif + for (;;) { + c = (BYTE)p[si++]; + if (c <= ' ' || c == '/' || c == '\\') break; /* Break on end of segment */ + if (c == '.' || i >= ni) { + if (ni != 8 || c != '.') return FR_INVALID_NAME; + i = 8; ni = 11; + b <<= 2; continue; + } + if (c >= 0x80) { /* Extended char */ +#ifdef _EXCVT + c = excvt[c - 0x80]; /* Convert extend char (SBCS) */ +#else + b |= 3; /* Eliminate NT flag if extended char is exist */ +#if !_DF1S /* ASCII only cfg */ + return FR_INVALID_NAME; +#endif +#endif + } + if (IsDBCS1(c)) { /* DBC 1st byte? */ + d = (BYTE)p[si++]; /* Get 2nd byte */ + if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */ + return FR_INVALID_NAME; + sfn[i++] = c; + sfn[i++] = d; + } else { /* Single byte code */ + if (chk_chr("\"*+,:<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */ + return FR_INVALID_NAME; + if (IsUpper(c)) { /* ASCII large capital? */ + b |= 2; + } else { + if (IsLower(c)) { /* ASCII small capital? */ + b |= 1; c -= 0x20; + } + } + sfn[i++] = c; + } + } + *path = &p[si]; /* Return pointer to the next segment */ + c = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ + + if (!i) return FR_INVALID_NAME; /* Reject nul string */ + if (sfn[0] == 0xE5) sfn[0] = 0x05; /* When first char collides with 0xE5, replace it with 0x05 */ + + if (ni == 8) b <<= 2; + if ((b & 0x03) == 0x01) c |= NS_EXT; /* NT flag (Name extension has only small capital) */ + if ((b & 0x0C) == 0x04) c |= NS_BODY; /* NT flag (Name body has only small capital) */ + + sfn[NS] = c; /* Store NT flag, File name is created */ + + return FR_OK; +#endif +} + + + + +/*-----------------------------------------------------------------------*/ +/* Get file information from directory entry */ +/*-----------------------------------------------------------------------*/ +#if _FS_MINIMIZE <= 1 +static +void get_fileinfo ( /* No return code */ + DIR *dj, /* Pointer to the directory object */ + FILINFO *fno /* Pointer to the file information to be filled */ +) +{ + int i; + BYTE nt, *dir; + TCHAR *p, c; + + + p = fno->fname; + if (dj->sect) { + dir = dj->dir; + nt = dir[DIR_NTres]; /* NT flag */ + for (i = 0; i < 8; i++) { /* Copy name body */ + c = dir[i]; + if (c == ' ') break; + if (c == 0x05) c = (TCHAR)0xE5; + if (_USE_LFN && (nt & NS_BODY) && IsUpper(c)) c += 0x20; +#if _LFN_UNICODE + if (IsDBCS1(c) && i < 7 && IsDBCS2(dir[i + 1])) + c = (c << 8) | dir[++i]; + c = ff_convert(c, 1); + if (!c) c = '?'; +#endif + *p++ = c; + } + if (dir[8] != ' ') { /* Copy name extension */ + *p++ = '.'; + for (i = 8; i < 11; i++) { + c = dir[i]; + if (c == ' ') break; + if (_USE_LFN && (nt & NS_EXT) && IsUpper(c)) c += 0x20; +#if _LFN_UNICODE + if (IsDBCS1(c) && i < 10 && IsDBCS2(dir[i + 1])) + c = (c << 8) | dir[++i]; + c = ff_convert(c, 1); + if (!c) c = '?'; +#endif + *p++ = c; + } + } + fno->fattrib = dir[DIR_Attr]; /* Attribute */ + fno->fsize = LD_DWORD(dir+DIR_FileSize); /* Size */ + fno->fdate = LD_WORD(dir+DIR_WrtDate); /* Date */ + fno->ftime = LD_WORD(dir+DIR_WrtTime); /* Time */ + } + *p = 0; + +#if _USE_LFN + if (fno->lfname) { + TCHAR *tp = fno->lfname; + WCHAR w, *lfn; + + i = 0; + if (dj->sect && dj->lfn_idx != 0xFFFF) {/* Get LFN if available */ + lfn = dj->lfn; + while ((w = *lfn++) != 0) { /* Get an LFN char */ +#if !_LFN_UNICODE + w = ff_convert(w, 0); /* Unicode -> OEM conversion */ + if (!w) { i = 0; break; } /* Could not convert, no LFN */ + if (_DF1S && w >= 0x100) /* Put 1st byte if it is a DBC */ + tp[i++] = (TCHAR)(w >> 8); +#endif + if (i >= fno->lfsize - 1) { i = 0; break; } /* Buffer overrun, no LFN */ + tp[i++] = (TCHAR)w; + } + } + tp[i] = 0; /* Terminator */ + } +#endif +} +#endif /* _FS_MINIMIZE <= 1 */ + + + + +/*-----------------------------------------------------------------------*/ +/* Follow a file path */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ + DIR *dj, /* Directory object to return last directory and found object */ + const TCHAR *path /* Full-path string to find a file or directory */ +) +{ + FRESULT res; + BYTE *dir, ns; + + +#if _FS_RPATH + if (*path == '/' || *path == '\\') { /* There is a heading separator */ + path++; dj->sclust = 0; /* Strip it and start from the root dir */ + } else { /* No heading separator */ + dj->sclust = dj->fs->cdir; /* Start from the current dir */ + } +#else + if (*path == '/' || *path == '\\') /* Strip heading separator if exist */ + path++; + dj->sclust = 0; /* Start from the root dir */ +#endif + + if ((UINT)*path < ' ') { /* Nul path means the start directory itself */ + res = dir_sdi(dj, 0); + dj->dir = 0; + + } else { /* Follow path */ + for (;;) { + res = create_name(dj, &path); /* Get a segment */ + if (res != FR_OK) break; + res = dir_find(dj); /* Find it */ + ns = *(dj->fn+NS); + if (res != FR_OK) { /* Failed to find the object */ + if (res != FR_NO_FILE) break; /* Abort if any hard error occured */ + /* Object not found */ + if (_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exit */ + dj->sclust = 0; dj->dir = 0; /* It is the root dir */ + res = FR_OK; + if (!(ns & NS_LAST)) continue; + } else { /* Could not find the object */ + if (!(ns & NS_LAST)) res = FR_NO_PATH; + } + break; + } + if (ns & NS_LAST) break; /* Last segment match. Function completed. */ + dir = dj->dir; /* There is next segment. Follow the sub directory */ + if (!(dir[DIR_Attr] & AM_DIR)) { /* Cannot follow because it is a file */ + res = FR_NO_PATH; break; + } + dj->sclust = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + } + } + + return res; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Load boot record and check if it is an FAT boot record */ +/*-----------------------------------------------------------------------*/ + +static +BYTE check_fs ( /* 0:The FAT BR, 1:Valid BR but not an FAT, 2:Not a BR, 3:Disk error */ + FATFS *fs, /* File system object */ + DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ +) +{ + if (disk_read(fs->drv, fs->win, sect, 1) != RES_OK) /* Load boot record */ + return 3; + if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check record signature (always placed at offset 510 even if the sector size is >512) */ + return 2; + + if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ + return 0; + if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) + return 0; + + return 1; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Make sure that the file system is valid */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT chk_mounted ( /* FR_OK(0): successful, !=0: any error occurred */ + const TCHAR **path, /* Pointer to pointer to the path name (drive number) */ + FATFS **rfs, /* Pointer to pointer to the found file system object */ + BYTE chk_wp /* !=0: Check media write protection for write access */ +) +{ + BYTE fmt, b, *tbl; + UINT vol; + DSTATUS stat; + DWORD bsect, fasize, tsect, sysect, nclst, szbfat; + WORD nrsv; + const TCHAR *p = *path; + FATFS *fs; + + /* Get logical drive number from the path name */ + vol = p[0] - '0'; /* Is there a drive number? */ + if (vol <= 9 && p[1] == ':') { /* Found a drive number, get and strip it */ + p += 2; *path = p; /* Return pointer to the path name */ + } else { /* No drive number is given */ +#if _FS_RPATH + vol = Drive; /* Use current drive */ +#else + vol = 0; /* Use drive 0 */ +#endif + } + + /* Check if the logical drive is valid or not */ + if (vol >= _DRIVES) /* Is the drive number valid? */ + return FR_INVALID_DRIVE; + *rfs = fs = FatFs[vol]; /* Return pointer to the corresponding file system object */ + if (!fs) return FR_NOT_ENABLED; /* Is the file system object available? */ + + ENTER_FF(fs); /* Lock file system */ + + if (fs->fs_type) { /* If the logical drive has been mounted */ + stat = disk_status(fs->drv); + if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized (has not been changed), */ +#if !_FS_READONLY + if (chk_wp && (stat & STA_PROTECT)) /* Check write protection if needed */ + return FR_WRITE_PROTECTED; +#endif + return FR_OK; /* The file system object is valid */ + } + } + + /* The logical drive must be mounted. Following code attempts to mount the volume (initialize the file system object) */ + + fs->fs_type = 0; /* Clear the file system object */ + fs->drv = (BYTE)LD2PD(vol); /* Bind the logical drive and a physical drive */ + stat = disk_initialize(fs->drv); /* Initialize low level disk I/O layer */ + if (stat & STA_NOINIT) /* Check if the drive is ready */ + return FR_NOT_READY; +#if _MAX_SS != 512 /* Get disk sector size if needed */ + if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > _MAX_SS) + return FR_NO_FILESYSTEM; +#endif +#if !_FS_READONLY + if (chk_wp && (stat & STA_PROTECT)) /* Check disk write protection if needed */ + return FR_WRITE_PROTECTED; +#endif + /* Search FAT partition on the drive (Supports only generic partitionings, FDISK and SFD) */ + fmt = check_fs(fs, bsect = 0); /* Check sector 0 if it is a VBR */ + if (fmt == 1) { /* Not an FAT-VBR, the disk may be partitioned */ + /* Check the partition listed in top of the partition table */ + tbl = &fs->win[MBR_Table + LD2PT(vol) * 16]; /* Partition table */ + if (tbl[4]) { /* Is the partition existing? */ + bsect = LD_DWORD(&tbl[8]); /* Partition offset in LBA */ + fmt = check_fs(fs, bsect); /* Check the partition */ + } + } + if (fmt == 3) return FR_DISK_ERR; + if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ + + /* Following code initializes the file system object */ + + if (LD_WORD(fs->win+BPB_BytsPerSec) != SS(fs)) /* (BPB_BytsPerSec must be equal to the physical sector size) */ + return FR_NO_FILESYSTEM; + + fasize = LD_WORD(fs->win+BPB_FATSz16); /* Number of sectors per FAT */ + if (!fasize) fasize = LD_DWORD(fs->win+BPB_FATSz32); + fs->fsize = fasize; + + fs->n_fats = b = fs->win[BPB_NumFATs]; /* Number of FAT copies */ + if (b != 1 && b != 2) return FR_NO_FILESYSTEM; /* (Must be 1 or 2) */ + fasize *= b; /* Number of sectors for FAT area */ + + fs->csize = b = fs->win[BPB_SecPerClus]; /* Number of sectors per cluster */ + if (!b || (b & (b - 1))) return FR_NO_FILESYSTEM; /* (Must be 1,2,4...128) */ + + fs->n_rootdir = LD_WORD(fs->win+BPB_RootEntCnt); /* Number of root directory entries */ + if (fs->n_rootdir % (SS(fs) / 32)) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be sector aligned) */ + + tsect = LD_WORD(fs->win+BPB_TotSec16); /* Number of sectors on the volume */ + if (!tsect) tsect = LD_DWORD(fs->win+BPB_TotSec32); + + nrsv = LD_WORD(fs->win+BPB_RsvdSecCnt); /* Number of reserved sectors */ + if (!nrsv) return FR_NO_FILESYSTEM; /* (BPB_RsvdSecCnt must not be 0) */ + + /* Determine the FAT sub type */ + sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / 32); /* RSV+FAT+DIR */ + if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ + if (!nclst) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + fmt = FS_FAT12; + if (nclst >= MIN_FAT16) fmt = FS_FAT16; + if (nclst >= MIN_FAT32) fmt = FS_FAT32; + + /* Boundaries and Limits */ + fs->n_fatent = nclst + 2; /* Number of FAT entries */ + fs->database = bsect + sysect; /* Data start sector */ + fs->fatbase = bsect + nrsv; /* FAT start sector */ + if (fmt == FS_FAT32) { + if (fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ + fs->dirbase = LD_DWORD(fs->win+BPB_RootClus); /* Root directory start cluster */ + szbfat = fs->n_fatent * 4; /* (Required FAT size) */ + } else { + if (!fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ + fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ + szbfat = (fmt == FS_FAT16) ? /* (Required FAT size) */ + fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); + } + if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) /* (FAT size must not be less than FAT sectors */ + return FR_NO_FILESYSTEM; + +#if !_FS_READONLY + /* Initialize cluster allocation information */ + fs->free_clust = 0xFFFFFFFF; + fs->last_clust = 0; + + /* Get fsinfo if available */ + if (fmt == FS_FAT32) { + fs->fsi_flag = 0; + fs->fsi_sector = bsect + LD_WORD(fs->win+BPB_FSInfo); + if (disk_read(fs->drv, fs->win, fs->fsi_sector, 1) == RES_OK && + LD_WORD(fs->win+BS_55AA) == 0xAA55 && + LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 && + LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) { + fs->last_clust = LD_DWORD(fs->win+FSI_Nxt_Free); + fs->free_clust = LD_DWORD(fs->win+FSI_Free_Count); + } + } +#endif + fs->fs_type = fmt; /* FAT sub-type */ + fs->id = ++Fsid; /* File system mount ID */ + fs->winsect = 0; /* Invalidate sector cache */ + fs->wflag = 0; +#if _FS_RPATH + fs->cdir = 0; /* Current directory (root dir) */ +#endif +#if _FS_SHARE /* Clear file lock semaphores */ + for (vol = 0; vol < _FS_SHARE; vol++) + fs->flsem[vol].ctr = 0; +#endif + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Check if the file/dir object is valid or not */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */ + FATFS *fs, /* Pointer to the file system object */ + WORD id /* Member id of the target object to be checked */ +) +{ + if (!fs || !fs->fs_type || fs->id != id) + return FR_INVALID_OBJECT; + + ENTER_FF(fs); /* Lock file system */ + + if (disk_status(fs->drv) & STA_NOINIT) + return FR_NOT_READY; + + return FR_OK; +} + + + + +/*-------------------------------------------------------------------------- + + Public Functions + +--------------------------------------------------------------------------*/ + + + +/*-----------------------------------------------------------------------*/ +/* Mount/Unmount a Logical Drive */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_mount ( + BYTE vol, /* Logical drive number to be mounted/unmounted */ + FATFS *fs /* Pointer to new file system object (NULL for unmount)*/ +) +{ + FATFS *rfs; + + + if (vol >= _DRIVES) /* Check if the drive number is valid */ + return FR_INVALID_DRIVE; + rfs = FatFs[vol]; /* Get current fs object */ + + if (rfs) { +#if _FS_REENTRANT /* Discard sync object of the current volume */ + if (!ff_del_syncobj(rfs->sobj)) return FR_INT_ERR; +#endif + rfs->fs_type = 0; /* Clear old fs object */ + } + + if (fs) { + fs->fs_type = 0; /* Clear new fs object */ +#if _FS_REENTRANT /* Create sync object for the new volume */ + if (!ff_cre_syncobj(vol, &fs->sobj)) return FR_INT_ERR; +#endif + } + FatFs[vol] = fs; /* Register new fs object */ + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Open or Create a File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_open ( + FIL *fp, /* Pointer to the blank file object */ + const TCHAR *path, /* Pointer to the file name */ + BYTE mode /* Access mode and file open mode flags */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir; + DEF_NAMEBUF; + + + fp->fs = 0; /* Clear file object */ + +#if !_FS_READONLY + mode &= FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW; + res = chk_mounted(&path, &dj.fs, (BYTE)(mode & ~FA_READ)); +#else + mode &= FA_READ; + res = chk_mounted(&path, &dj.fs, 0); +#endif + INIT_BUF(dj); + if (res == FR_OK) + res = follow_path(&dj, path); /* Follow the file path */ + dir = dj.dir; + +#if !_FS_READONLY /* R/W configuration */ + if (res == FR_OK) { + if (!dir) /* Current dir itself */ + res = FR_INVALID_NAME; +#if _FS_SHARE + else + res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); +#endif + } + /* Create or Open a file */ + if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { + DWORD dw, cl; + + if (res != FR_OK) { /* No file, create new */ + if (res == FR_NO_FILE) /* There is no file to open, create a new entry */ +#if _FS_SHARE + res = enq_lock(dj.fs) ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; +#else + res = dir_register(&dj); +#endif + mode |= FA_CREATE_ALWAYS; + dir = dj.dir; /* New entry */ + } + else { /* Any object is already existing */ + if (mode & FA_CREATE_NEW) { /* Cannot create new */ + res = FR_EXIST; + } else { + if (dir[DIR_Attr] & (AM_RDO | AM_DIR)) /* Cannot overwrite it (R/O or DIR) */ + res = FR_DENIED; + } + } + if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ + dw = get_fattime(); /* Created time */ + ST_DWORD(dir+DIR_CrtTime, dw); + dir[DIR_Attr] = 0; /* Reset attribute */ + ST_DWORD(dir+DIR_FileSize, 0); /* size = 0 */ + cl = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); /* Get start cluster */ + ST_WORD(dir+DIR_FstClusHI, 0); /* cluster = 0 */ + ST_WORD(dir+DIR_FstClusLO, 0); + dj.fs->wflag = 1; + if (cl) { /* Remove the cluster chain if exist */ + dw = dj.fs->winsect; + res = remove_chain(dj.fs, cl); + if (res == FR_OK) { + dj.fs->last_clust = cl - 1; /* Reuse the cluster hole */ + res = move_window(dj.fs, dw); + } + } + } + } + else { /* Open an existing file */ + if (res == FR_OK) { /* Follow succeeded */ + if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */ + res = FR_NO_FILE; + } else { + if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ + res = FR_DENIED; + } + } + } + if (res == FR_OK) { + if (mode & (FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) + mode |= FA__WRITTEN; /* Set file changed flag */ + fp->dir_sect = dj.fs->winsect; /* Pointer to the directory entry */ + fp->dir_ptr = dir; +#if _FS_SHARE + fp->lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); + if (!fp->lockid) res = FR_INT_ERR; +#endif + } + +#else /* R/O configuration */ + if (res == FR_OK) { /* Follow succeeded */ + if (!dir) { /* Current dir itself */ + res = FR_INVALID_NAME; + } else { + if (dir[DIR_Attr] & AM_DIR) /* It is a directory */ + res = FR_NO_FILE; + } + } +#endif + FREE_BUF(); + + if (res == FR_OK) { + fp->flag = mode; /* File access mode */ + fp->org_clust = /* File start cluster */ + ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + fp->fsize = LD_DWORD(dir+DIR_FileSize); /* File size */ + fp->fptr = 0; /* File pointer */ + fp->dsect = 0; +#if _USE_FASTSEEK + fp->cltbl = 0; /* No cluster link map table */ +#endif + fp->fs = dj.fs; fp->id = dj.fs->id; /* Validate file object */ + } + + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_read ( + FIL *fp, /* Pointer to the file object */ + void *buff, /* Pointer to data buffer */ + UINT btr, /* Number of bytes to read */ + UINT *br /* Pointer to number of bytes read */ +) +{ + FRESULT res; + DWORD clst, sect, remain; + UINT rcnt, cc; + BYTE csect, *rbuff = buff; + + + *br = 0; /* Initialize byte counter */ + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res != FR_OK) LEAVE_FF(fp->fs, res); + if (fp->flag & FA__ERROR) /* Check abort flag */ + LEAVE_FF(fp->fs, FR_INT_ERR); + if (!(fp->flag & FA_READ)) /* Check access mode */ + LEAVE_FF(fp->fs, FR_DENIED); + remain = fp->fsize - fp->fptr; + if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ + + for ( ; btr; /* Repeat until all data transferred */ + rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if (!csect) { /* On the cluster boundary? */ + clst = (fp->fptr == 0) ? /* On the top of the file? */ + fp->org_clust : get_fat(fp->fs, fp->curr_clust); + if (clst <= 1) ABORT(fp->fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + fp->curr_clust = clst; /* Update current cluster */ + } + sect = clust2sect(fp->fs, fp->curr_clust); /* Get current sector */ + if (!sect) ABORT(fp->fs, FR_INT_ERR); + sect += csect; + cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ + if (cc) { /* Read maximum contiguous sectors directly */ + if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ + cc = fp->fs->csize - csect; + if (disk_read(fp->fs->drv, rbuff, sect, (BYTE)cc) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); +#if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */ +#if _FS_TINY + if (fp->fs->wflag && fp->fs->winsect - sect < cc) + mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), fp->fs->win, SS(fp->fs)); +#else + if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc) + mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); +#endif +#endif + rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ + continue; + } +#if !_FS_TINY +#if !_FS_READONLY + if (fp->flag & FA__DIRTY) { /* Write sector I/O buffer if needed */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + if (fp->dsect != sect) { /* Fill sector buffer with file data */ + if (disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + } +#endif + fp->dsect = sect; + } + rcnt = SS(fp->fs) - (fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ + if (rcnt > btr) rcnt = btr; +#if _FS_TINY + if (move_window(fp->fs, fp->dsect)) /* Move sector window */ + ABORT(fp->fs, FR_DISK_ERR); + mem_cpy(rbuff, &fp->fs->win[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ +#else + mem_cpy(rbuff, &fp->buf[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ +#endif + } + + LEAVE_FF(fp->fs, FR_OK); +} + + + + +#if !_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Write File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_write ( + FIL *fp, /* Pointer to the file object */ + const void *buff, /* Pointer to the data to be written */ + UINT btw, /* Number of bytes to write */ + UINT *bw /* Pointer to number of bytes written */ +) +{ + FRESULT res; + DWORD clst, sect; + UINT wcnt, cc; + const BYTE *wbuff = buff; + BYTE csect; + + + *bw = 0; /* Initialize byte counter */ + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res != FR_OK) LEAVE_FF(fp->fs, res); + if (fp->flag & FA__ERROR) /* Check abort flag */ + LEAVE_FF(fp->fs, FR_INT_ERR); + if (!(fp->flag & FA_WRITE)) /* Check access mode */ + LEAVE_FF(fp->fs, FR_DENIED); + if (fp->fsize + btw < fp->fsize) btw = 0; /* File size cannot reach 4GB */ + + for ( ; btw; /* Repeat until all data transferred */ + wbuff += wcnt, fp->fptr += wcnt, *bw += wcnt, btw -= wcnt) { + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if (!csect) { /* On the cluster boundary? */ + if (fp->fptr == 0) { /* On the top of the file? */ + clst = fp->org_clust; /* Follow from the origin */ + if (clst == 0) /* When there is no cluster chain, */ + fp->org_clust = clst = create_chain(fp->fs, 0); /* Create a new cluster chain */ + } else { /* Middle or end of the file */ + clst = create_chain(fp->fs, fp->curr_clust); /* Follow or stretch cluster chain */ + } + if (clst == 0) break; /* Could not allocate a new cluster (disk full) */ + if (clst == 1) ABORT(fp->fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + fp->curr_clust = clst; /* Update current cluster */ + } +#if _FS_TINY + if (fp->fs->winsect == fp->dsect && move_window(fp->fs, 0)) /* Write back data buffer prior to following direct transfer */ + ABORT(fp->fs, FR_DISK_ERR); +#else + if (fp->flag & FA__DIRTY) { /* Write back data buffer prior to following direct transfer */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + sect = clust2sect(fp->fs, fp->curr_clust); /* Get current sector */ + if (!sect) ABORT(fp->fs, FR_INT_ERR); + sect += csect; + cc = btw / SS(fp->fs); /* When remaining bytes >= sector size, */ + if (cc) { /* Write maximum contiguous sectors directly */ + if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ + cc = fp->fs->csize - csect; + if (disk_write(fp->fs->drv, wbuff, sect, (BYTE)cc) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); +#if _FS_TINY + if (fp->fs->winsect - sect < cc) { /* Refill sector cache if it gets dirty by the direct write */ + mem_cpy(fp->fs->win, wbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), SS(fp->fs)); + fp->fs->wflag = 0; + } +#else + if (fp->dsect - sect < cc) { /* Refill sector cache if it gets dirty by the direct write */ + mem_cpy(fp->buf, wbuff + ((fp->dsect - sect) * SS(fp->fs)), SS(fp->fs)); + fp->flag &= ~FA__DIRTY; + } +#endif + wcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ + continue; + } +#if _FS_TINY + if (fp->fptr >= fp->fsize) { /* Avoid silly buffer filling at growing edge */ + if (move_window(fp->fs, 0)) ABORT(fp->fs, FR_DISK_ERR); + fp->fs->winsect = sect; + } +#else + if (fp->dsect != sect) { /* Fill sector buffer with file data */ + if (fp->fptr < fp->fsize && + disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + } +#endif + fp->dsect = sect; + } + wcnt = SS(fp->fs) - (fp->fptr % SS(fp->fs)); /* Put partial sector into file I/O buffer */ + if (wcnt > btw) wcnt = btw; +#if _FS_TINY + if (move_window(fp->fs, fp->dsect)) /* Move sector window */ + ABORT(fp->fs, FR_DISK_ERR); + mem_cpy(&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ + fp->fs->wflag = 1; +#else + mem_cpy(&fp->buf[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ + fp->flag |= FA__DIRTY; +#endif + } + + if (fp->fptr > fp->fsize) fp->fsize = fp->fptr; /* Update file size if needed */ + fp->flag |= FA__WRITTEN; /* Set file changed flag */ + + LEAVE_FF(fp->fs, FR_OK); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Synchronize the File Object */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_sync ( + FIL *fp /* Pointer to the file object */ +) +{ + FRESULT res; + DWORD tim; + BYTE *dir; + + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res == FR_OK) { + if (fp->flag & FA__WRITTEN) { /* Has the file been written? */ +#if !_FS_TINY /* Write-back dirty buffer */ + if (fp->flag & FA__DIRTY) { + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + LEAVE_FF(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + /* Update the directory entry */ + res = move_window(fp->fs, fp->dir_sect); + if (res == FR_OK) { + dir = fp->dir_ptr; + dir[DIR_Attr] |= AM_ARC; /* Set archive bit */ + ST_DWORD(dir+DIR_FileSize, fp->fsize); /* Update file size */ + ST_WORD(dir+DIR_FstClusLO, fp->org_clust); /* Update start cluster */ + ST_WORD(dir+DIR_FstClusHI, fp->org_clust >> 16); + tim = get_fattime(); /* Update updated time */ + ST_DWORD(dir+DIR_WrtTime, tim); + fp->flag &= ~FA__WRITTEN; + fp->fs->wflag = 1; + res = sync(fp->fs); + } + } + } + + LEAVE_FF(fp->fs, res); +} + +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Close File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_close ( + FIL *fp /* Pointer to the file object to be closed */ +) +{ + FRESULT res; + +#if _FS_READONLY + FATFS *fs = fp->fs; + res = validate(fs, fp->id); + if (res == FR_OK) fp->fs = 0; /* Discard file object */ + LEAVE_FF(fs, res); + +#else + res = f_sync(fp); /* Flush cached data */ +#if _FS_SHARE + if (res == FR_OK) { /* Decrement open counter */ +#if _FS_REENTRANT + res = validate(fp->fs, fp->id); + if (res == FR_OK) { + res = dec_lock(fp->fs, fp->lockid); + unlock_fs(fp->fs, FR_OK); + } +#else + res = dec_lock(fp->fs, fp->lockid); +#endif + } +#endif + if (res == FR_OK) fp->fs = 0; /* Discard file object */ + return res; +#endif +} + + + + +/*-----------------------------------------------------------------------*/ +/* Change Current Drive/Directory */ +/*-----------------------------------------------------------------------*/ + +#if _FS_RPATH + +FRESULT f_chdrive ( + BYTE drv /* Drive number */ +) +{ + if (drv >= _DRIVES) return FR_INVALID_DRIVE; + + Drive = drv; + + return FR_OK; +} + + + + +FRESULT f_chdir ( + const TCHAR *path /* Pointer to the directory path */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 0); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the path */ + FREE_BUF(); + if (res == FR_OK) { /* Follow completed */ + dir = dj.dir; /* Pointer to the entry */ + if (!dir) { + dj.fs->cdir = dj.sclust; /* Start directory itself */ + } else { + if (dir[DIR_Attr] & AM_DIR) /* Reached to the directory */ + dj.fs->cdir = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + else + res = FR_NO_PATH; /* Reached but a file */ + } + } + if (res == FR_NO_FILE) res = FR_NO_PATH; + } + + LEAVE_FF(dj.fs, res); +} + +#endif + + + +#if _FS_MINIMIZE <= 2 +/*-----------------------------------------------------------------------*/ +/* Seek File R/W Pointer */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_lseek ( + FIL *fp, /* Pointer to the file object */ + DWORD ofs /* File pointer from top of file */ +) +{ + FRESULT res; + + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res != FR_OK) LEAVE_FF(fp->fs, res); + if (fp->flag & FA__ERROR) /* Check abort flag */ + LEAVE_FF(fp->fs, FR_INT_ERR); + +#if _USE_FASTSEEK + if (fp->cltbl) { /* Fast seek */ + DWORD cl, pcl, ncl, tcl, dsc, tlen, *tbl = fp->cltbl; + BYTE csc; + + tlen = *tbl++; + if (ofs == CREATE_LINKMAP) { /* Create link map table */ + cl = fp->org_clust; + if (cl) { + do { + if (tlen < 4) { /* Not enough table items */ + res = FR_NOT_ENOUGH_CORE; break; + } + tcl = cl; ncl = 0; + do { /* Get a fragment and store the top and length */ + pcl = cl; ncl++; + cl = get_fat(fp->fs, cl); + if (cl <= 1) ABORT(fp->fs, FR_INT_ERR); + if (cl == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + } while (cl == pcl + 1); + *tbl++ = ncl; *tbl++ = tcl; + tlen -= 2; + } while (cl < fp->fs->n_fatent); + } + *tbl = 0; /* Terminate table */ + + } else { /* Fast seek */ + if (ofs > fp->fsize) /* Clip offset at the file size */ + ofs = fp->fsize; + fp->fptr = ofs; /* Set file pointer */ + if (ofs) { + dsc = (ofs - 1) / SS(fp->fs); + cl = dsc / fp->fs->csize; + for (;;) { + ncl = *tbl++; + if (!ncl) ABORT(fp->fs, FR_INT_ERR); + if (cl < ncl) break; + cl -= ncl; tbl++; + } + fp->curr_clust = cl + *tbl; + csc = (BYTE)(dsc & (fp->fs->csize - 1)); + dsc = clust2sect(fp->fs, fp->curr_clust); + if (!dsc) ABORT(fp->fs, FR_INT_ERR); + dsc += csc; + if (fp->fptr % SS(fp->fs) && dsc != fp->dsect) { +#if !_FS_TINY +#if !_FS_READONLY + if (fp->flag & FA__DIRTY) { /* Flush dirty buffer if needed */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); +#endif + fp->dsect = dsc; + } + } + } + } else +#endif + + /* Normal Seek */ + { + DWORD clst, bcs, nsect, ifptr; + + if (ofs > fp->fsize /* In read-only mode, clip offset with the file size */ +#if !_FS_READONLY + && !(fp->flag & FA_WRITE) +#endif + ) ofs = fp->fsize; + + ifptr = fp->fptr; + fp->fptr = nsect = 0; + if (ofs) { + bcs = (DWORD)fp->fs->csize * SS(fp->fs); /* Cluster size (byte) */ + if (ifptr > 0 && + (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */ + fp->fptr = (ifptr - 1) & ~(bcs - 1); /* start from the current cluster */ + ofs -= fp->fptr; + clst = fp->curr_clust; + } else { /* When seek to back cluster, */ + clst = fp->org_clust; /* start from the first cluster */ +#if !_FS_READONLY + if (clst == 0) { /* If no cluster chain, create a new chain */ + clst = create_chain(fp->fs, 0); + if (clst == 1) ABORT(fp->fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + fp->org_clust = clst; + } +#endif + fp->curr_clust = clst; + } + if (clst != 0) { + while (ofs > bcs) { /* Cluster following loop */ +#if !_FS_READONLY + if (fp->flag & FA_WRITE) { /* Check if in write mode or not */ + clst = create_chain(fp->fs, clst); /* Force stretch if in write mode */ + if (clst == 0) { /* When disk gets full, clip file size */ + ofs = bcs; break; + } + } else +#endif + clst = get_fat(fp->fs, clst); /* Follow cluster chain if not in write mode */ + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + if (clst <= 1 || clst >= fp->fs->n_fatent) ABORT(fp->fs, FR_INT_ERR); + fp->curr_clust = clst; + fp->fptr += bcs; + ofs -= bcs; + } + fp->fptr += ofs; + if (ofs % SS(fp->fs)) { + nsect = clust2sect(fp->fs, clst); /* Current sector */ + if (!nsect) ABORT(fp->fs, FR_INT_ERR); + nsect += ofs / SS(fp->fs); + } + } + } + if (fp->fptr % SS(fp->fs) && nsect != fp->dsect) { +#if !_FS_TINY +#if !_FS_READONLY + if (fp->flag & FA__DIRTY) { /* Flush dirty buffer if needed */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + if (disk_read(fp->fs->drv, fp->buf, nsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); +#endif + fp->dsect = nsect; + } +#if !_FS_READONLY + if (fp->fptr > fp->fsize) { /* Set changed flag if the file size is extended */ + fp->fsize = fp->fptr; + fp->flag |= FA__WRITTEN; + } +#endif + } + + LEAVE_FF(fp->fs, res); +} + + + +#if _FS_MINIMIZE <= 1 +/*-----------------------------------------------------------------------*/ +/* Create a Directroy Object */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_opendir ( + DIR *dj, /* Pointer to directory object to create */ + const TCHAR *path /* Pointer to the directory path */ +) +{ + FRESULT res; + BYTE *dir; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj->fs, 0); + if (res == FR_OK) { + INIT_BUF(*dj); + res = follow_path(dj, path); /* Follow the path to the directory */ + FREE_BUF(); + if (res == FR_OK) { /* Follow completed */ + dir = dj->dir; + if (dir) { /* It is not the current dir */ + if (dir[DIR_Attr] & AM_DIR) { /* The object is a directory */ + dj->sclust = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + } else { /* The object is not a directory */ + res = FR_NO_PATH; + } + } + if (res == FR_OK) { + dj->id = dj->fs->id; + res = dir_sdi(dj, 0); /* Rewind dir */ + } + } + if (res == FR_NO_FILE) res = FR_NO_PATH; + } + + LEAVE_FF(dj->fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read Directory Entry in Sequense */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_readdir ( + DIR *dj, /* Pointer to the open directory object */ + FILINFO *fno /* Pointer to file information to return */ +) +{ + FRESULT res; + DEF_NAMEBUF; + + + res = validate(dj->fs, dj->id); /* Check validity of the object */ + if (res == FR_OK) { + if (!fno) { + res = dir_sdi(dj, 0); + } else { + INIT_BUF(*dj); + res = dir_read(dj); + if (res == FR_NO_FILE) { + dj->sect = 0; + res = FR_OK; + } + if (res == FR_OK) { /* A valid entry is found */ + get_fileinfo(dj, fno); /* Get the object information */ + res = dir_next(dj, 0); /* Increment index for next */ + if (res == FR_NO_FILE) { + dj->sect = 0; + res = FR_OK; + } + } + FREE_BUF(); + } + } + + LEAVE_FF(dj->fs, res); +} + + + +#if _FS_MINIMIZE == 0 +/*-----------------------------------------------------------------------*/ +/* Get File Status */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_stat ( + const TCHAR *path, /* Pointer to the file path */ + FILINFO *fno /* Pointer to file information to return */ +) +{ + FRESULT res; + DIR dj; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 0); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK) { /* Follow completed */ + if (dj.dir) /* Found an object */ + get_fileinfo(&dj, fno); + else /* It is root dir */ + res = FR_INVALID_NAME; + } + FREE_BUF(); + } + + LEAVE_FF(dj.fs, res); +} + + + +#if !_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Get Number of Free Clusters */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_getfree ( + const TCHAR *path, /* Pointer to the logical drive number (root dir) */ + DWORD *nclst, /* Pointer to the variable to return number of free clusters */ + FATFS **fatfs /* Pointer to pointer to corresponding file system object to return */ +) +{ + FRESULT res; + DWORD n, clst, sect, stat; + UINT i; + BYTE fat, *p; + + + /* Get drive number */ + res = chk_mounted(&path, fatfs, 0); + if (res == FR_OK) { + /* If free_clust is valid, return it without full cluster scan */ + if ((*fatfs)->free_clust <= (*fatfs)->n_fatent - 2) { + *nclst = (*fatfs)->free_clust; + } else { + /* Get number of free clusters */ + fat = (*fatfs)->fs_type; + n = 0; + if (fat == FS_FAT12) { + clst = 2; + do { + stat = get_fat(*fatfs, clst); + if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } + if (stat == 1) { res = FR_INT_ERR; break; } + if (stat == 0) n++; + } while (++clst < (*fatfs)->n_fatent); + } else { + clst = (*fatfs)->n_fatent; + sect = (*fatfs)->fatbase; + i = 0; p = 0; + do { + if (!i) { + res = move_window(*fatfs, sect++); + if (res != FR_OK) break; + p = (*fatfs)->win; + i = SS(*fatfs); + } + if (fat == FS_FAT16) { + if (LD_WORD(p) == 0) n++; + p += 2; i -= 2; + } else { + if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) n++; + p += 4; i -= 4; + } + } while (--clst); + } + (*fatfs)->free_clust = n; + if (fat == FS_FAT32) (*fatfs)->fsi_flag = 1; + *nclst = n; + } + } + LEAVE_FF(*fatfs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Truncate File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_truncate ( + FIL *fp /* Pointer to the file object */ +) +{ + FRESULT res; + DWORD ncl; + + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res == FR_OK) { + if (fp->flag & FA__ERROR) { /* Check abort flag */ + res = FR_INT_ERR; + } else { + if (!(fp->flag & FA_WRITE)) /* Check access mode */ + res = FR_DENIED; + } + } + if (res == FR_OK) { + if (fp->fsize > fp->fptr) { + fp->fsize = fp->fptr; /* Set file size to current R/W point */ + fp->flag |= FA__WRITTEN; + if (fp->fptr == 0) { /* When set file size to zero, remove entire cluster chain */ + res = remove_chain(fp->fs, fp->org_clust); + fp->org_clust = 0; + } else { /* When truncate a part of the file, remove remaining clusters */ + ncl = get_fat(fp->fs, fp->curr_clust); + res = FR_OK; + if (ncl == 0xFFFFFFFF) res = FR_DISK_ERR; + if (ncl == 1) res = FR_INT_ERR; + if (res == FR_OK && ncl < fp->fs->n_fatent) { + res = put_fat(fp->fs, fp->curr_clust, 0x0FFFFFFF); + if (res == FR_OK) res = remove_chain(fp->fs, ncl); + } + } + } + if (res != FR_OK) fp->flag |= FA__ERROR; + } + + LEAVE_FF(fp->fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Delete a File or Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_unlink ( + const TCHAR *path /* Pointer to the file or directory path */ +) +{ + FRESULT res; + DIR dj, sdj; + BYTE *dir; + DWORD dclst; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 1); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; /* Cannot remove dot entry */ +#if _FS_SHARE + if (res == FR_OK) res = chk_lock(&dj, 2); /* Cannot remove open file */ +#endif + if (res == FR_OK) { /* The object is accessible */ + dir = dj.dir; + if (!dir) { + res = FR_INVALID_NAME; /* Cannot remove the start directory */ + } else { + if (dir[DIR_Attr] & AM_RDO) + res = FR_DENIED; /* Cannot remove R/O object */ + } + dclst = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + if (res == FR_OK && (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-dir? */ + if (dclst < 2) { + res = FR_INT_ERR; + } else { + mem_cpy(&sdj, &dj, sizeof(DIR)); /* Check if the sub-dir is empty or not */ + sdj.sclust = dclst; + res = dir_sdi(&sdj, 2); /* Exclude dot entries */ + if (res == FR_OK) { + res = dir_read(&sdj); + if (res == FR_OK /* Not empty dir */ +#if _FS_RPATH + || dclst == sdj.fs->cdir /* Current dir */ +#endif + ) res = FR_DENIED; + if (res == FR_NO_FILE) res = FR_OK; /* Empty */ + } + } + } + if (res == FR_OK) { + res = dir_remove(&dj); /* Remove the directory entry */ + if (res == FR_OK) { + if (dclst) /* Remove the cluster chain if exist */ + res = remove_chain(dj.fs, dclst); + if (res == FR_OK) res = sync(dj.fs); + } + } + } + FREE_BUF(); + } + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Create a Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_mkdir ( + const TCHAR *path /* Pointer to the directory path */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir, n; + DWORD dsc, dcl, pcl, tim = get_fattime(); + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 1); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK) res = FR_EXIST; /* Any object with same name is already existing */ + if (_FS_RPATH && res == FR_NO_FILE && (dj.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; + if (res == FR_NO_FILE) { /* Can create a new directory */ + dcl = create_chain(dj.fs, 0); /* Allocate a cluster for the new directory table */ + res = FR_OK; + if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster */ + if (dcl == 1) res = FR_INT_ERR; + if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; + if (res == FR_OK) /* Flush FAT */ + res = move_window(dj.fs, 0); + if (res == FR_OK) { /* Initialize the new directory table */ + dsc = clust2sect(dj.fs, dcl); + dir = dj.fs->win; + mem_set(dir, 0, SS(dj.fs)); + mem_set(dir+DIR_Name, ' ', 8+3); /* Create "." entry */ + dir[DIR_Name] = '.'; + dir[DIR_Attr] = AM_DIR; + ST_DWORD(dir+DIR_WrtTime, tim); + ST_WORD(dir+DIR_FstClusLO, dcl); + ST_WORD(dir+DIR_FstClusHI, dcl >> 16); + mem_cpy(dir+32, dir, 32); /* Create ".." entry */ + dir[33] = '.'; pcl = dj.sclust; + if (dj.fs->fs_type == FS_FAT32 && pcl == dj.fs->dirbase) + pcl = 0; + ST_WORD(dir+32+DIR_FstClusLO, pcl); + ST_WORD(dir+32+DIR_FstClusHI, pcl >> 16); + for (n = dj.fs->csize; n; n--) { /* Write dot entries and clear following sectors */ + dj.fs->winsect = dsc++; + dj.fs->wflag = 1; + res = move_window(dj.fs, 0); + if (res != FR_OK) break; + mem_set(dir, 0, SS(dj.fs)); + } + } + if (res == FR_OK) res = dir_register(&dj); /* Register the object to the directoy */ + if (res != FR_OK) { + remove_chain(dj.fs, dcl); /* Could not register, remove cluster chain */ + } else { + dir = dj.dir; + dir[DIR_Attr] = AM_DIR; /* Attribute */ + ST_DWORD(dir+DIR_WrtTime, tim); /* Created time */ + ST_WORD(dir+DIR_FstClusLO, dcl); /* Table start cluster */ + ST_WORD(dir+DIR_FstClusHI, dcl >> 16); + dj.fs->wflag = 1; + res = sync(dj.fs); + } + } + FREE_BUF(); + } + + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Change Attribute */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_chmod ( + const TCHAR *path, /* Pointer to the file path */ + BYTE value, /* Attribute bits */ + BYTE mask /* Attribute mask to change */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 1); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + FREE_BUF(); + if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; + if (res == FR_OK) { + dir = dj.dir; + if (!dir) { /* Is it a root directory? */ + res = FR_INVALID_NAME; + } else { /* File or sub directory */ + mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC; /* Valid attribute mask */ + dir[DIR_Attr] = (value & mask) | (dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ + dj.fs->wflag = 1; + res = sync(dj.fs); + } + } + } + + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Change Timestamp */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_utime ( + const TCHAR *path, /* Pointer to the file/directory name */ + const FILINFO *fno /* Pointer to the time stamp to be set */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 1); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + FREE_BUF(); + if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; + if (res == FR_OK) { + dir = dj.dir; + if (!dir) { /* Root directory */ + res = FR_INVALID_NAME; + } else { /* File or sub-directory */ + ST_WORD(dir+DIR_WrtTime, fno->ftime); + ST_WORD(dir+DIR_WrtDate, fno->fdate); + dj.fs->wflag = 1; + res = sync(dj.fs); + } + } + } + + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Rename File/Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_rename ( + const TCHAR *path_old, /* Pointer to the old name */ + const TCHAR *path_new /* Pointer to the new name */ +) +{ + FRESULT res; + DIR djo, djn; + BYTE buf[21], *dir; + DWORD dw; + DEF_NAMEBUF; + + + res = chk_mounted(&path_old, &djo.fs, 1); + if (res == FR_OK) { + djn.fs = djo.fs; + INIT_BUF(djo); + res = follow_path(&djo, path_old); /* Check old object */ + if (_FS_RPATH && res == FR_OK && (djo.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; +#if _FS_SHARE + if (res == FR_OK) res = chk_lock(&djo, 2); +#endif + if (res == FR_OK) { /* Old object is found */ + if (!djo.dir) { /* Is root dir? */ + res = FR_NO_FILE; + } else { + mem_cpy(buf, djo.dir+DIR_Attr, 21); /* Save the object information except for name */ + mem_cpy(&djn, &djo, sizeof(DIR)); /* Check new object */ + res = follow_path(&djn, path_new); + if (res == FR_OK) res = FR_EXIST; /* The new object name is already existing */ + if (res == FR_NO_FILE) { /* Is it a valid path and no name collision? */ +/* Start critical section that any interruption or error can cause cross-link */ + res = dir_register(&djn); /* Register the new entry */ + if (res == FR_OK) { + dir = djn.dir; /* Copy object information except for name */ + mem_cpy(dir+13, buf+2, 19); + dir[DIR_Attr] = buf[0] | AM_ARC; + djo.fs->wflag = 1; + if (djo.sclust != djn.sclust && (dir[DIR_Attr] & AM_DIR)) { /* Update .. entry in the directory if needed */ + dw = clust2sect(djn.fs, (DWORD)LD_WORD(dir+DIR_FstClusHI) | LD_WORD(dir+DIR_FstClusLO)); + if (!dw) { + res = FR_INT_ERR; + } else { + res = move_window(djn.fs, dw); + dir = djn.fs->win+32; /* .. entry */ + if (res == FR_OK && dir[1] == '.') { + dw = (djn.fs->fs_type == FS_FAT32 && djn.sclust == djn.fs->dirbase) ? 0 : djn.sclust; + ST_WORD(dir+DIR_FstClusLO, dw); + ST_WORD(dir+DIR_FstClusHI, dw >> 16); + djn.fs->wflag = 1; + } + } + } + if (res == FR_OK) { + res = dir_remove(&djo); /* Remove old entry */ + if (res == FR_OK) + res = sync(djo.fs); + } + } +/* End critical section */ + } + } + } + FREE_BUF(); + } + LEAVE_FF(djo.fs, res); +} + +#endif /* !_FS_READONLY */ +#endif /* _FS_MINIMIZE == 0 */ +#endif /* _FS_MINIMIZE <= 1 */ +#endif /* _FS_MINIMIZE <= 2 */ + + + +/*-----------------------------------------------------------------------*/ +/* Forward data to the stream directly (available on only tiny cfg) */ +/*-----------------------------------------------------------------------*/ +#if _USE_FORWARD && _FS_TINY + +FRESULT f_forward ( + FIL *fp, /* Pointer to the file object */ + UINT (*func)(const BYTE*,UINT), /* Pointer to the streaming function */ + UINT btr, /* Number of bytes to forward */ + UINT *bf /* Pointer to number of bytes forwarded */ +) +{ + FRESULT res; + DWORD remain, clst, sect; + UINT rcnt; + BYTE csect; + + + *bf = 0; /* Initialize byte counter */ + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res != FR_OK) LEAVE_FF(fp->fs, res); + if (fp->flag & FA__ERROR) /* Check error flag */ + LEAVE_FF(fp->fs, FR_INT_ERR); + if (!(fp->flag & FA_READ)) /* Check access mode */ + LEAVE_FF(fp->fs, FR_DENIED); + + remain = fp->fsize - fp->fptr; + if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ + + for ( ; btr && (*func)(0, 0); /* Repeat until all data transferred or stream becomes busy */ + fp->fptr += rcnt, *bf += rcnt, btr -= rcnt) { + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + if (!csect) { /* On the cluster boundary? */ + clst = (fp->fptr == 0) ? /* On the top of the file? */ + fp->org_clust : get_fat(fp->fs, fp->curr_clust); + if (clst <= 1) ABORT(fp->fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + fp->curr_clust = clst; /* Update current cluster */ + } + } + sect = clust2sect(fp->fs, fp->curr_clust); /* Get current data sector */ + if (!sect) ABORT(fp->fs, FR_INT_ERR); + sect += csect; + if (move_window(fp->fs, sect)) /* Move sector window */ + ABORT(fp->fs, FR_DISK_ERR); + fp->dsect = sect; + rcnt = SS(fp->fs) - (WORD)(fp->fptr % SS(fp->fs)); /* Forward data from sector window */ + if (rcnt > btr) rcnt = btr; + rcnt = (*func)(&fp->fs->win[(WORD)fp->fptr % SS(fp->fs)], rcnt); + if (!rcnt) ABORT(fp->fs, FR_INT_ERR); + } + + LEAVE_FF(fp->fs, FR_OK); +} +#endif /* _USE_FORWARD */ + + + +#if _USE_MKFS && !_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Create File System on the Drive */ +/*-----------------------------------------------------------------------*/ +#define N_ROOTDIR 512 /* Multiple of 32 */ +#define N_FATS 1 /* 1 or 2 */ + + +FRESULT f_mkfs ( + BYTE drv, /* Logical drive number */ + BYTE sfd, /* Partitioning rule 0:FDISK, 1:SFD */ + UINT au /* Allocation unit size [bytes] */ +) +{ + static const WORD vst[] = { 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 0}; + static const WORD cst[] = {32768, 16384, 8192, 4096, 2048, 16384, 8192, 4096, 2048, 1024, 512}; + BYTE fmt, md, *tbl; + DWORD n_clst, vs, n; + UINT as, i; + DWORD b_vol, b_fat, b_dir, b_data; /* Area offset (LBA) */ + DWORD n_vol, n_rsv, n_fat, n_dir; /* Area size */ + FATFS *fs; + DSTATUS stat; + + + /* Check mounted drive and clear work area */ + if (drv >= _DRIVES) return FR_INVALID_DRIVE; + fs = FatFs[drv]; + if (!fs) return FR_NOT_ENABLED; + fs->fs_type = 0; + drv = LD2PD(drv); + + /* Get disk statics */ + stat = disk_initialize(drv); + if (stat & STA_NOINIT) return FR_NOT_READY; + if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; +#if _MAX_SS != 512 /* Get disk sector size */ + if (disk_ioctl(drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > _MAX_SS) + return FR_DISK_ERR; +#endif + if (disk_ioctl(drv, GET_SECTOR_COUNT, &n_vol) != RES_OK || n_vol < 128) + return FR_DISK_ERR; + b_vol = (sfd == 1) ? 0 : 63; /* Volume start sector */ + n_vol -= b_vol; + if (au & (au - 1)) au = 0; /* Check validity of the allocation unit size */ + if (!au) { /* AU auto selection */ + vs = n_vol / (2000 / (SS(fs) / 512)); + for (i = 0; vs < vst[i]; i++) ; + au = cst[i]; + } + if (_MAX_SS != 512 && au < SS(fs)) au = SS(fs); + au /= SS(fs); /* Number of sectors per cluster */ + if (au == 0) au = 1; + if (au > 128) au = 128; + + /* Pre-compute number of clusters and FAT syb-type */ + n_clst = n_vol / au; + fmt = FS_FAT12; + if (n_clst >= MIN_FAT16) fmt = FS_FAT16; + if (n_clst >= MIN_FAT32) fmt = FS_FAT32; + + /* Determine offset and size of FAT structure */ + if (fmt == FS_FAT32) { + n_fat = ((n_clst * 4) + 8 + SS(fs) - 1) / SS(fs); + n_rsv = 32; + n_dir = 0; + } else { + n_fat = (fmt == FS_FAT12) ? (n_clst * 3 + 1) / 2 + 3 : (n_clst * 2) + 4; + n_fat = (n_fat + SS(fs) - 1) / SS(fs); + n_rsv = 1; + n_dir = N_ROOTDIR * 32UL / SS(fs); + } + b_fat = b_vol + n_rsv; /* FAT area start sector */ + b_dir = b_fat + n_fat * N_FATS; /* Directory area start sector */ + b_data = b_dir + n_dir; /* Data area start sector */ + if (n_vol < b_data + au) return FR_MKFS_ABORTED; /* Too small volume */ + + /* Align data start sector to erase block boundary (for flash memory media) */ + if (disk_ioctl(drv, GET_BLOCK_SIZE, &n) != RES_OK) return FR_DISK_ERR; + if (!n || n > 32768) return FR_MKFS_ABORTED; + n = (b_data + n - 1) & ~(n - 1); /* Next nearest boundary from current data start */ + n = (n - b_data) / N_FATS; + if (fmt == FS_FAT32) { /* FAT32: Move FAT start */ + n_rsv += n; + b_fat += n; + } else { /* FAT12/16: Expand FAT size */ + n_fat += n; + } + /* b_dir and b_data are no longer used below */ + + /* Determine number of cluster and final check of validity of the FAT sub-type */ + n_clst = (n_vol - n_rsv - n_fat * N_FATS - n_dir) / au; + if ( (fmt == FS_FAT16 && n_clst < MIN_FAT16) + || (fmt == FS_FAT32 && n_clst < MIN_FAT32)) + return FR_MKFS_ABORTED; + + /* Create partition table if required */ + if (sfd == 1) { + md = 0xF0; + } else { + DWORD n_disk = b_vol + n_vol; + + mem_set(fs->win, 0, SS(fs)); + tbl = fs->win+MBR_Table; + ST_DWORD(tbl, 0x00010180); /* Partition start in CHS */ + if (n_disk < 63UL * 255 * 1024) { /* Partition end in CHS */ + n_disk = n_disk / 63 / 255; + tbl[7] = (BYTE)n_disk; + tbl[6] = (BYTE)((n_disk >> 2) | 63); + } else { + ST_WORD(&tbl[6], 0xFFFF); + } + tbl[5] = 254; + if (fmt != FS_FAT32) /* System ID */ + tbl[4] = (n_vol < 0x10000) ? 0x04 : 0x06; + else + tbl[4] = 0x0c; + ST_DWORD(tbl+8, 63); /* Partition start in LBA */ + ST_DWORD(tbl+12, n_vol); /* Partition size in LBA */ + ST_WORD(tbl+64, 0xAA55); /* Signature */ + if (disk_write(drv, fs->win, 0, 1) != RES_OK) + return FR_DISK_ERR; + md = 0xF8; + } + + /* Create VBR */ + tbl = fs->win; /* Clear buffer */ + mem_set(tbl, 0, SS(fs)); + ST_DWORD(tbl+BS_jmpBoot, 0x90FEEB); /* Boot code (jmp $, nop) */ + as = SS(fs); /* Sector size */ + ST_WORD(tbl+BPB_BytsPerSec, as); + tbl[BPB_SecPerClus] = (BYTE)au; /* Sectors per cluster */ + ST_WORD(tbl+BPB_RsvdSecCnt, n_rsv); /* Reserved sectors */ + tbl[BPB_NumFATs] = N_FATS; /* Number of FATs */ + as = (fmt == FS_FAT32) ? 0 : N_ROOTDIR; /* Number of rootdir entries */ + ST_WORD(tbl+BPB_RootEntCnt, as); + if (n_vol < 0x10000) { /* Number of total sectors */ + ST_WORD(tbl+BPB_TotSec16, n_vol); + } else { + ST_DWORD(tbl+BPB_TotSec32, n_vol); + } + tbl[BPB_Media] = md; /* Media descriptor */ + ST_WORD(tbl+BPB_SecPerTrk, 63); /* Number of sectors per track */ + ST_WORD(tbl+BPB_NumHeads, 255); /* Number of heads */ + ST_DWORD(tbl+BPB_HiddSec, b_vol); /* Hidden sectors */ + n = get_fattime(); /* Use current time as VSN */ + if (fmt == FS_FAT32) { + ST_DWORD(tbl+BS_VolID32, n); /* VSN */ + ST_DWORD(tbl+BPB_FATSz32, n_fat); /* Number of sectors per FAT */ + ST_DWORD(tbl+BPB_RootClus, 2); /* Root directory start cluster (2) */ + ST_WORD(tbl+BPB_FSInfo, 1); /* FSInfo record offset (VBR+1) */ + ST_WORD(tbl+BPB_BkBootSec, 6); /* Backup boot record offset (VBR+6) */ + tbl[BS_DrvNum32] = 0x80; /* Drive number */ + tbl[BS_BootSig32] = 0x29; /* Extended boot signature */ + mem_cpy(tbl+BS_VolLab32, "NO NAME FAT32 ", 19); /* Volume label, FAT signature */ + } else { + ST_DWORD(tbl+BS_VolID, n); /* VSN */ + ST_WORD(tbl+BPB_FATSz16, n_fat); /* Number of sectors per FAT */ + tbl[BS_DrvNum] = 0x80; /* Drive number */ + tbl[BS_BootSig] = 0x29; /* Extended boot signature */ + mem_cpy(tbl+BS_VolLab, "NO NAME FAT ", 19); /* Volume label, FAT signature */ + } + ST_WORD(tbl+BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */ + if (disk_write(drv, tbl, b_vol, 1) != RES_OK) /* Original (VBR) */ + return FR_DISK_ERR; + if (fmt == FS_FAT32) /* Backup (VBR+6) */ + disk_write(drv, tbl, b_vol + 6, 1); + + /* Initialize FAT area */ + for (i = 0; i < N_FATS; i++) { + mem_set(tbl, 0, SS(fs)); /* 1st sector of the FAT */ + n = md; /* Media descriptor byte */ + if (fmt != FS_FAT32) { + n |= (fmt == FS_FAT12) ? 0x00FFFF00 : 0xFFFFFF00; + ST_DWORD(tbl+0, n); /* Reserve cluster #0-1 (FAT12/16) */ + } else { + n |= 0x0FFFFF00; + ST_DWORD(tbl+0, n); /* Reserve cluster #0-1 (FAT32) */ + ST_DWORD(tbl+4, 0x0FFFFFFF); + ST_DWORD(tbl+8, 0x0FFFFFFF); /* Reserve cluster #2 for root dir */ + } + if (disk_write(drv, tbl, b_fat++, 1) != RES_OK) + return FR_DISK_ERR; + mem_set(tbl, 0, SS(fs)); /* Fill following FAT entries with zero */ + for (n = 1; n < n_fat; n++) { /* This loop may take a time on FAT32 volume due to many single sector write */ + if (disk_write(drv, tbl, b_fat++, 1) != RES_OK) + return FR_DISK_ERR; + } + } + + /* Initialize root directory */ + n = (fmt == FS_FAT32) ? as : n_dir; + while (n--) { + if (disk_write(drv, tbl, b_fat++, 1) != RES_OK) + return FR_DISK_ERR; + } + + /* Create FSInfo record if needed */ + if (fmt == FS_FAT32) { + ST_WORD(tbl+BS_55AA, 0xAA55); + ST_DWORD(tbl+FSI_LeadSig, 0x41615252); + ST_DWORD(tbl+FSI_StrucSig, 0x61417272); + ST_DWORD(tbl+FSI_Free_Count, n_clst - 1); + ST_DWORD(tbl+FSI_Nxt_Free, 0xFFFFFFFF); + disk_write(drv, tbl, b_vol + 1, 1); /* Original (VBR+1) */ + disk_write(drv, tbl, b_vol + 7, 1); /* Backup (VBR+7) */ + } + + return (disk_ioctl(drv, CTRL_SYNC, (void*)0) == RES_OK) ? FR_OK : FR_DISK_ERR; +} + +#endif /* _USE_MKFS && !_FS_READONLY */ + + + + +#if _USE_STRFUNC +/*-----------------------------------------------------------------------*/ +/* Get a string from the file */ +/*-----------------------------------------------------------------------*/ +TCHAR* f_gets ( + TCHAR* buff, /* Pointer to the string buffer to read */ + int len, /* Size of string buffer (characters) */ + FIL* fil /* Pointer to the file object */ +) +{ + int n = 0; + TCHAR c, *p = buff; + BYTE s[2]; + UINT rc; + + + while (n < len - 1) { /* Read bytes until buffer gets filled */ + f_read(fil, s, 1, &rc); + if (rc != 1) break; /* Break on EOF or error */ + c = s[0]; +#if _LFN_UNICODE /* Read a character in UTF-8 encoding */ + if (c >= 0x80) { + if (c < 0xC0) continue; /* Skip stray trailer */ + if (c < 0xE0) { /* Two-byte sequense */ + f_read(fil, s, 1, &rc); + if (rc != 1) break; + c = ((c & 0x1F) << 6) | (s[0] & 0x3F); + if (c < 0x80) c = '?'; + } else { + if (c < 0xF0) { /* Three-byte sequense */ + f_read(fil, s, 2, &rc); + if (rc != 2) break; + c = (c << 12) | ((s[0] & 0x3F) << 6) | (s[1] & 0x3F); + if (c < 0x800) c = '?'; + } else { /* Reject four-byte sequense */ + c = '?'; + } + } + } +#endif +#if _USE_STRFUNC >= 2 + if (c == '\r') continue; /* Strip '\r' */ +#endif + *p++ = c; + n++; + if (c == '\n') break; /* Break on EOL */ + } + *p = 0; + return n ? buff : 0; /* When no data read (eof or error), return with error. */ +} + + + +#if !_FS_READONLY +#include +/*-----------------------------------------------------------------------*/ +/* Put a character to the file */ +/*-----------------------------------------------------------------------*/ +int f_putc ( + TCHAR c, /* A character to be output */ + FIL* fil /* Pointer to the file object */ +) +{ + UINT bw, btw; + BYTE s[3]; + + +#if _USE_STRFUNC >= 2 + if (c == '\n') f_putc ('\r', fil); /* LF -> CRLF conversion */ +#endif + +#if _LFN_UNICODE /* Write the character in UTF-8 encoding */ + if (c < 0x80) { /* 7-bit */ + s[0] = (BYTE)c; + btw = 1; + } else { + if (c < 0x800) { /* 11-bit */ + s[0] = (BYTE)(0xC0 | (c >> 6)); + s[1] = (BYTE)(0x80 | (c & 0x3F)); + btw = 2; + } else { /* 16-bit */ + s[0] = (BYTE)(0xE0 | (c >> 12)); + s[1] = (BYTE)(0x80 | ((c >> 6) & 0x3F)); + s[2] = (BYTE)(0x80 | (c & 0x3F)); + btw = 3; + } + } +#else /* Write the character without conversion */ + s[0] = (BYTE)c; + btw = 1; +#endif + f_write(fil, s, btw, &bw); /* Write the char to the file */ + return (bw == btw) ? 1 : EOF; /* Return the result */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Put a string to the file */ +/*-----------------------------------------------------------------------*/ +int f_puts ( + const TCHAR* str, /* Pointer to the string to be output */ + FIL* fil /* Pointer to the file object */ +) +{ + int n; + + + for (n = 0; *str; str++, n++) { + if (f_putc(*str, fil) == EOF) return EOF; + } + return n; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Put a formatted string to the file */ +/*-----------------------------------------------------------------------*/ +int f_printf ( + FIL* fil, /* Pointer to the file object */ + const TCHAR* str, /* Pointer to the format string */ + ... /* Optional arguments... */ +) +{ + va_list arp; + BYTE f, r; + UINT i, w; + ULONG val; + TCHAR c, d, s[16]; + int res, cc; + + + va_start(arp, str); + + for (cc = res = 0; cc != EOF; res += cc) { + c = *str++; + if (c == 0) break; /* End of string */ + if (c != '%') { /* Non escape character */ + cc = f_putc(c, fil); + if (cc != EOF) cc = 1; + continue; + } + w = f = 0; + c = *str++; + if (c == '0') { /* Flag: '0' padding */ + f = 1; c = *str++; + } + while (IsDigit(c)) { /* Precision */ + w = w * 10 + c - '0'; + c = *str++; + } + if (c == 'l' || c == 'L') { /* Prefix: Size is long int */ + f |= 2; c = *str++; + } + if (!c) break; + d = c; + if (IsLower(d)) d -= 0x20; + switch (d) { /* Type is... */ + case 'S' : /* String */ + cc = f_puts(va_arg(arp, TCHAR*), fil); continue; + case 'C' : /* Character */ + cc = f_putc((TCHAR)va_arg(arp, int), fil); continue; + case 'B' : /* Binary */ + r = 2; break; + case 'O' : /* Octal */ + r = 8; break; + case 'D' : /* Signed decimal */ + case 'U' : /* Unsigned decimal */ + r = 10; break; + case 'X' : /* Hexdecimal */ + r = 16; break; + default: /* Unknown */ + cc = f_putc(c, fil); continue; + } + + /* Get an argument */ + val = (f & 2) ? va_arg(arp, long) : ((d == 'D') ? (long)va_arg(arp, int) : va_arg(arp, unsigned int)); + if (d == 'D' && (val & 0x80000000)) { + val = 0 - val; + f |= 4; + } + /* Put it in numeral string */ + i = 0; + do { + d = (TCHAR)(val % r); val /= r; + if (d > 9) { + d += 7; + if (c == 'x') d += 0x20; + } + s[i++] = d + '0'; + } while (val && i < sizeof(s) / sizeof(s[0])); + if (f & 4) s[i++] = '-'; + cc = 0; + while (i < w-- && cc != EOF) { + cc = f_putc((TCHAR)((f & 1) ? '0' : ' '), fil); + res++; + } + do { + cc = f_putc(s[--i], fil); + res++; + } while (i && cc != EOF); + if (cc != EOF) cc = 0; + } + + va_end(arp); + return (cc == EOF) ? cc : res; +} + +#endif /* !_FS_READONLY */ +#endif /* _USE_STRFUNC */ diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ff.h b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ff.h new file mode 100644 index 0000000..d739704 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ff.h @@ -0,0 +1,613 @@ +/*---------------------------------------------------------------------------/ +/ FatFs - FAT file system module include file R0.08 (C)ChaN, 2010 +/----------------------------------------------------------------------------/ +/ FatFs module is a generic FAT file system module for small embedded systems. +/ This is a free software that opened for education, research and commercial +/ developments under license policy of following trems. +/ +/ Copyright (C) 2010, ChaN, all right reserved. +/ +/ * The FatFs module is a free software and there is NO WARRANTY. +/ * No restriction on use. You can use, modify and redistribute it for +/ personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. +/ * Redistributions of source code must retain the above copyright notice. +/ +/----------------------------------------------------------------------------*/ + +#ifndef _FATFS +#define _FATFS 8085 /* Revision ID */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "integer.h" /* Basic integer types */ +#include "ffconf.h" /* FatFs configuration options */ + +#if _FATFS != _FFCONF +#error Wrong configuration file (ffconf.h). +#endif + + +/* DBCS code ranges and SBCS extend char conversion table */ + +#if _CODE_PAGE == 932 /* Japanese Shift-JIS */ +#define _DF1S 0x81 /* DBC 1st byte range 1 start */ +#define _DF1E 0x9F /* DBC 1st byte range 1 end */ +#define _DF2S 0xE0 /* DBC 1st byte range 2 start */ +#define _DF2E 0xFC /* DBC 1st byte range 2 end */ +#define _DS1S 0x40 /* DBC 2nd byte range 1 start */ +#define _DS1E 0x7E /* DBC 2nd byte range 1 end */ +#define _DS2S 0x80 /* DBC 2nd byte range 2 start */ +#define _DS2E 0xFC /* DBC 2nd byte range 2 end */ + +#elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ +#define _DF1S 0x81 +#define _DF1E 0xFE +#define _DS1S 0x40 +#define _DS1E 0x7E +#define _DS2S 0x80 +#define _DS2E 0xFE + +#elif _CODE_PAGE == 949 /* Korean */ +#define _DF1S 0x81 +#define _DF1E 0xFE +#define _DS1S 0x41 +#define _DS1E 0x5A +#define _DS2S 0x61 +#define _DS2E 0x7A +#define _DS3S 0x81 +#define _DS3E 0xFE + +#elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ +#define _DF1S 0x81 +#define _DF1E 0xFE +#define _DS1S 0x40 +#define _DS1E 0x7E +#define _DS2S 0xA1 +#define _DS2E 0xFE + +#elif _CODE_PAGE == 437 /* U.S. (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F,0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 720 /* Arabic (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x45,0x41,0x84,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x49,0x49,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 737 /* Greek (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \ + 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xE7,0xE8,0xF1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 775 /* Baltic (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F,0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0x9F, \ + 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF} + +#elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F,0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \ + 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \ + 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 857 /* Turkish (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x98,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \ + 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0x59,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 862 /* Hebrew (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 866 /* Russian (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x90,0x91,0x92,0x93,0x9d,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} + +#elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ + 0xA0,0xA2,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF} + +#elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xAd,0x9B,0x8C,0x9D,0xAE,0x9F, \ + 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} + +#elif _CODE_PAGE == 1253 /* Greek (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xA2,0xB8,0xB9,0xBA, \ + 0xE0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xFB,0xBC,0xFD,0xBF,0xFF} + +#elif _CODE_PAGE == 1254 /* Turkish (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x9E,0x9F, \ + 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} + +#elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 1256 /* Arabic (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x8C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x41,0xE1,0x41,0xE3,0xE4,0xE5,0xE6,0x43,0x45,0x45,0x45,0x45,0xEC,0xED,0x49,0x49,0xF0,0xF1,0xF2,0xF3,0x4F,0xF5,0xF6,0xF7,0xF8,0x55,0xFA,0x55,0x55,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 1257 /* Baltic (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} + +#elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0xAC,0x9D,0x9E,0x9F, \ + 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xEC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xFE,0x9F} + +#elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */ +#define _DF1S 0 + +#else +#error Unknown code page + +#endif + + + +/* Definitions corresponds to volume management */ + +#if _MULTI_PARTITION /* Multiple partition configuration */ +#define LD2PD(drv) (Drives[drv].pd) /* Get physical drive# */ +#define LD2PT(drv) (Drives[drv].pt) /* Get partition# */ +typedef struct { + BYTE pd; /* Physical drive# */ + BYTE pt; /* Partition # (0-3) */ +} PARTITION; +extern const PARTITION Drives[]; /* Logical drive# to physical location conversion table */ + +#else /* Single partition configuration */ +#define LD2PD(drv) (drv) /* Physical drive# is equal to the logical drive# */ +#define LD2PT(drv) 0 /* Always mounts the 1st partition */ + +#endif + + + +/* Type of path name strings on FatFs API */ + +#if _LFN_UNICODE /* Unicode string */ +#if !_USE_LFN +#error _LFN_UNICODE must be 0 in non-LFN cfg. +#endif +#ifndef _INC_TCHAR +typedef WCHAR TCHAR; +#define _T(x) L ## x +#define _TEXT(x) L ## x +#endif + +#else /* ANSI/OEM string */ +#ifndef _INC_TCHAR +typedef char TCHAR; +#define _T(x) x +#define _TEXT(x) x +#endif + +#endif + + + +/* Definitions corresponds to file shareing feature */ + +#if _FS_SHARE +#if _FS_READONLY +#error _FS_SHARE must be 0 on R/O cfg. +#endif +typedef struct { + DWORD clu; /* File ID 1, directory */ + WORD idx; /* File ID 2, index in the directory */ + WORD ctr; /* File open counter, 0:none, 0x01..0xFF:read open count, 0x100:in write open */ +} FILESEM; +#endif + + + +/* File system object structure (FATFS) */ + +typedef struct { + BYTE fs_type; /* FAT sub-type (0:Not mounted) */ + BYTE drv; /* Physical drive number */ + BYTE csize; /* Sectors per cluster (1,2,4...128) */ + BYTE n_fats; /* Number of FAT copies (1,2) */ + BYTE wflag; /* win[] dirty flag (1:must be written back) */ + BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */ + WORD id; /* File system mount ID */ + WORD n_rootdir; /* Number of root directory entries (FAT12/16) */ +#if _MAX_SS != 512 + WORD ssize; /* Bytes per sector (512,1024,2048,4096) */ +#endif +#if _FS_REENTRANT + _SYNC_t sobj; /* Identifier of sync object */ +#endif +#if !_FS_READONLY + DWORD last_clust; /* Last allocated cluster */ + DWORD free_clust; /* Number of free clusters */ + DWORD fsi_sector; /* fsinfo sector (FAT32) */ +#endif +#if _FS_RPATH + DWORD cdir; /* Current directory start cluster (0:root) */ +#endif + DWORD n_fatent; /* Number of FAT entries (= number of clusters + 2) */ + DWORD fsize; /* Sectors per FAT */ + DWORD fatbase; /* FAT start sector */ + DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */ + DWORD database; /* Data start sector */ + DWORD winsect; /* Current sector appearing in the win[] */ + BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and Data on tiny cfg) */ +#if _FS_SHARE + FILESEM flsem[_FS_SHARE]; /* File lock semaphores */ +#endif +} FATFS; + + + +/* File object structure (FIL) */ + +typedef struct { + FATFS* fs; /* Pointer to the owner file system object */ + WORD id; /* Owner file system mount ID */ + BYTE flag; /* File status flags */ + BYTE pad1; + DWORD fptr; /* File read/write pointer */ + DWORD fsize; /* File size */ + DWORD org_clust; /* File start cluster (0 when fsize==0) */ + DWORD curr_clust; /* Current cluster */ + DWORD dsect; /* Current data sector */ +#if !_FS_READONLY + DWORD dir_sect; /* Sector containing the directory entry */ + BYTE* dir_ptr; /* Ponter to the directory entry in the window */ +#endif +#if _USE_FASTSEEK + DWORD* cltbl; /* Pointer to the cluster link map table */ +#endif +#if _FS_SHARE + UINT lockid; /* File lock ID */ +#endif +#if !_FS_TINY + BYTE buf[_MAX_SS]; /* File data read/write buffer */ +#endif +} FIL; + + + +/* Directory object structure (DIR) */ + +typedef struct { + FATFS* fs; /* Pointer to the owner file system object */ + WORD id; /* Owner file system mount ID */ + WORD index; /* Current read/write index number */ + DWORD sclust; /* Table start cluster (0:Root dir) */ + DWORD clust; /* Current cluster */ + DWORD sect; /* Current sector */ + BYTE* dir; /* Pointer to the current SFN entry in the win[] */ + BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ +#if _USE_LFN + WCHAR* lfn; /* Pointer to the LFN working buffer */ + WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */ +#endif +} DIR; + + + +/* File status structure (FILINFO) */ + +typedef struct { + DWORD fsize; /* File size */ + WORD fdate; /* Last modified date */ + WORD ftime; /* Last modified time */ + BYTE fattrib; /* Attribute */ + TCHAR fname[13]; /* Short file name (8.3 format) */ +#if _USE_LFN + TCHAR* lfname; /* Pointer to the LFN buffer */ + int lfsize; /* Size of LFN buffer [chrs] */ +#endif +} FILINFO; + + + +/* File function return code (FRESULT) */ + +typedef enum { + FR_OK = 0, /* (0) Succeeded */ + FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */ + FR_INT_ERR, /* (2) Assertion failed */ + FR_NOT_READY, /* (3) The physical drive cannot work */ + FR_NO_FILE, /* (4) Could not find the file */ + FR_NO_PATH, /* (5) Could not find the path */ + FR_INVALID_NAME, /* (6) The path name format is invalid */ + FR_DENIED, /* (7) Acces denied due to prohibited access or directory full */ + FR_EXIST, /* (8) Acces denied due to prohibited access */ + FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ + FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ + FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ + FR_NOT_ENABLED, /* (12) The volume has no work area */ + FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume on the physical drive */ + FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */ + FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */ + FR_LOCKED, /* (16) The operation is rejected according to the file shareing policy */ + FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ + FR_TOO_MANY_OPEN_FILES /* (18) Number of open files > _FS_SHARE */ +} FRESULT; + + + +/*--------------------------------------------------------------*/ +/* FatFs module application interface */ + +FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */ +FRESULT f_open (FIL*, const TCHAR*, BYTE); /* Open or create a file */ +FRESULT f_read (FIL*, void*, UINT, UINT*); /* Read data from a file */ +FRESULT f_lseek (FIL*, DWORD); /* Move file pointer of a file object */ +FRESULT f_close (FIL*); /* Close an open file object */ +FRESULT f_opendir (DIR*, const TCHAR*); /* Open an existing directory */ +FRESULT f_readdir (DIR*, FILINFO*); /* Read a directory item */ +FRESULT f_stat (const TCHAR*, FILINFO*); /* Get file status */ +#if !_FS_READONLY +FRESULT f_write (FIL*, const void*, UINT, UINT*); /* Write data to a file */ +FRESULT f_getfree (const TCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */ +FRESULT f_truncate (FIL*); /* Truncate file */ +FRESULT f_sync (FIL*); /* Flush cached data of a writing file */ +FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */ +FRESULT f_mkdir (const TCHAR*); /* Create a new directory */ +FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */ +FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change timestamp of the file/dir */ +FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */ +#endif +#if _USE_FORWARD +FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */ +#endif +#if _USE_MKFS +FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */ +#endif +#if _FS_RPATH +FRESULT f_chdir (const TCHAR*); /* Change current directory */ +FRESULT f_chdrive (BYTE); /* Change current drive */ +#endif +#if _USE_STRFUNC +int f_putc (TCHAR, FIL*); /* Put a character to the file */ +int f_puts (const TCHAR*, FIL*); /* Put a string to the file */ +int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */ +TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */ +#define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) +#define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0) +#ifndef EOF +#define EOF (-1) +#endif +#endif + + + +/*--------------------------------------------------------------*/ +/* Additional user defined functions */ + +/* RTC function */ +#if !_FS_READONLY +DWORD get_fattime (void); +#endif + +/* Unicode support functions */ +#if _USE_LFN /* Unicode - OEM code conversion */ +WCHAR ff_convert (WCHAR, UINT); /* OEM-Unicode bidirectional conversion */ +WCHAR ff_wtoupper (WCHAR); /* Unicode upper-case conversion */ +#if _USE_LFN == 3 /* Memory functions */ +void* ff_memalloc (UINT); /* Allocate memory block */ +void ff_memfree (void*); /* Free memory block */ +#endif +#endif + +/* Sync functions */ +#if _FS_REENTRANT +int ff_cre_syncobj (BYTE, _SYNC_t*);/* Create a sync object */ +int ff_del_syncobj (_SYNC_t); /* Delete a sync object */ +int ff_req_grant (_SYNC_t); /* Lock sync object */ +void ff_rel_grant (_SYNC_t); /* Unlock sync object */ +#endif + + + + +/*--------------------------------------------------------------*/ +/* Flags and offset address */ + + +/* File access control and file status flags (FIL.flag) */ + +#define FA_READ 0x01 +#define FA_OPEN_EXISTING 0x00 +#define FA__ERROR 0x80 + +#if !_FS_READONLY +#define FA_WRITE 0x02 +#define FA_CREATE_NEW 0x04 +#define FA_CREATE_ALWAYS 0x08 +#define FA_OPEN_ALWAYS 0x10 +#define FA__WRITTEN 0x20 +#define FA__DIRTY 0x40 +#endif + + +/* FAT sub type (FATFS.fs_type) */ + +#define FS_FAT12 1 +#define FS_FAT16 2 +#define FS_FAT32 3 + + +/* File attribute bits for directory entry */ + +#define AM_RDO 0x01 /* Read only */ +#define AM_HID 0x02 /* Hidden */ +#define AM_SYS 0x04 /* System */ +#define AM_VOL 0x08 /* Volume label */ +#define AM_LFN 0x0F /* LFN entry */ +#define AM_DIR 0x10 /* Directory */ +#define AM_ARC 0x20 /* Archive */ +#define AM_MASK 0x3F /* Mask of defined bits */ + + +/* Fast seek function */ +#define CREATE_LINKMAP 0xFFFFFFFF + + +/* FatFs refers the members in the FAT structures with byte offset instead of +/ structure member because there are incompatibility of the packing option +/ between various compilers. */ + +#define BS_jmpBoot 0 +#define BS_OEMName 3 +#define BPB_BytsPerSec 11 +#define BPB_SecPerClus 13 +#define BPB_RsvdSecCnt 14 +#define BPB_NumFATs 16 +#define BPB_RootEntCnt 17 +#define BPB_TotSec16 19 +#define BPB_Media 21 +#define BPB_FATSz16 22 +#define BPB_SecPerTrk 24 +#define BPB_NumHeads 26 +#define BPB_HiddSec 28 +#define BPB_TotSec32 32 +#define BS_55AA 510 + +#define BS_DrvNum 36 +#define BS_BootSig 38 +#define BS_VolID 39 +#define BS_VolLab 43 +#define BS_FilSysType 54 + +#define BPB_FATSz32 36 +#define BPB_ExtFlags 40 +#define BPB_FSVer 42 +#define BPB_RootClus 44 +#define BPB_FSInfo 48 +#define BPB_BkBootSec 50 +#define BS_DrvNum32 64 +#define BS_BootSig32 66 +#define BS_VolID32 67 +#define BS_VolLab32 71 +#define BS_FilSysType32 82 + +#define FSI_LeadSig 0 +#define FSI_StrucSig 484 +#define FSI_Free_Count 488 +#define FSI_Nxt_Free 492 + +#define MBR_Table 446 + +#define DIR_Name 0 +#define DIR_Attr 11 +#define DIR_NTres 12 +#define DIR_CrtTime 14 +#define DIR_CrtDate 16 +#define DIR_FstClusHI 20 +#define DIR_WrtTime 22 +#define DIR_WrtDate 24 +#define DIR_FstClusLO 26 +#define DIR_FileSize 28 +#define LDIR_Ord 0 +#define LDIR_Attr 11 +#define LDIR_Type 12 +#define LDIR_Chksum 13 +#define LDIR_FstClusLO 26 + + + +/*--------------------------------*/ +/* Multi-byte word access macros */ + +#if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */ +#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) +#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) +#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) +#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) +#else /* Use byte-by-byte access to the FAT structure */ +#define LD_WORD(ptr) (WORD)(((WORD)*(BYTE*)((ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) +#define LD_DWORD(ptr) (DWORD)(((DWORD)*(BYTE*)((ptr)+3)<<24)|((DWORD)*(BYTE*)((ptr)+2)<<16)|((WORD)*(BYTE*)((ptr)+1)<<8)|*(BYTE*)(ptr)) +#define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8) +#define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8); *(BYTE*)((ptr)+2)=(BYTE)((DWORD)(val)>>16); *(BYTE*)((ptr)+3)=(BYTE)((DWORD)(val)>>24) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _FATFS */ diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ffconf.h b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ffconf.h new file mode 100644 index 0000000..ca26e10 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/ffconf.h @@ -0,0 +1,179 @@ +/*---------------------------------------------------------------------------/ +/ FatFs - FAT file system module configuration file R0.08 (C)ChaN, 2010 +/----------------------------------------------------------------------------/ +/ +/ CAUTION! Do not forget to make clean the project after any changes to +/ the configuration options. +/ +/----------------------------------------------------------------------------*/ +#ifndef _FFCONF +#define _FFCONF 8085 /* Revision ID */ + + +/*---------------------------------------------------------------------------/ +/ Function and Buffer Configurations +/----------------------------------------------------------------------------*/ + +#define _FS_TINY 1 /* 0 or 1 */ +/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system +/ object instead of the sector buffer in the individual file object for file +/ data transfer. This reduces memory consumption 512 bytes each file object. */ + + +#define _FS_READONLY 0 /* 0 or 1 */ +/* Setting _FS_READONLY to 1 defines read only configuration. This removes +/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename, +/ f_truncate and useless f_getfree. */ + + +#define _FS_MINIMIZE 0 /* 0, 1, 2 or 3 */ +/* The _FS_MINIMIZE option defines minimization level to remove some functions. +/ +/ 0: Full function. +/ 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename +/ are removed. +/ 2: f_opendir and f_readdir are removed in addition to level 1. +/ 3: f_lseek is removed in addition to level 2. */ + + +#define _USE_STRFUNC 0 /* 0, 1 or 2 */ +/* To enable string functions, set _USE_STRFUNC to 1 or 2. */ + + +#define _USE_MKFS 1 /* 0 or 1 */ +/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */ + + +#define _USE_FORWARD 0 /* 0 or 1 */ +/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */ + + +#define _USE_FASTSEEK 0 /* 0 or 1 */ +/* To enable f_fastseek function, set _USE_FASTSEEK to 1. */ + + + +/*---------------------------------------------------------------------------/ +/ Locale and Namespace Configurations +/----------------------------------------------------------------------------*/ + +#define _CODE_PAGE 1 +/* The _CODE_PAGE specifies the OEM code page to be used on the target system. +/ Incorrect setting of the code page can cause a file open failure. +/ +/ 932 - Japanese Shift-JIS (DBCS, OEM, Windows) +/ 936 - Simplified Chinese GBK (DBCS, OEM, Windows) +/ 949 - Korean (DBCS, OEM, Windows) +/ 950 - Traditional Chinese Big5 (DBCS, OEM, Windows) +/ 1250 - Central Europe (Windows) +/ 1251 - Cyrillic (Windows) +/ 1252 - Latin 1 (Windows) +/ 1253 - Greek (Windows) +/ 1254 - Turkish (Windows) +/ 1255 - Hebrew (Windows) +/ 1256 - Arabic (Windows) +/ 1257 - Baltic (Windows) +/ 1258 - Vietnam (OEM, Windows) +/ 437 - U.S. (OEM) +/ 720 - Arabic (OEM) +/ 737 - Greek (OEM) +/ 775 - Baltic (OEM) +/ 850 - Multilingual Latin 1 (OEM) +/ 858 - Multilingual Latin 1 + Euro (OEM) +/ 852 - Latin 2 (OEM) +/ 855 - Cyrillic (OEM) +/ 866 - Russian (OEM) +/ 857 - Turkish (OEM) +/ 862 - Hebrew (OEM) +/ 874 - Thai (OEM, Windows) +/ 1 - ASCII only (Valid for non LFN cfg.) +*/ + + +#define _USE_LFN 0 /* 0 to 3 */ +#define _MAX_LFN 128 /* Maximum LFN length to handle (12 to 255) */ +/* The _USE_LFN option switches the LFN support. +/ +/ 0: Disable LFN. _MAX_LFN and _LFN_UNICODE have no effect. +/ 1: Enable LFN with static working buffer on the bss. NOT REENTRANT. +/ 2: Enable LFN with dynamic working buffer on the STACK. +/ 3: Enable LFN with dynamic working buffer on the HEAP. +/ +/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When enable LFN, +/ Unicode handling functions ff_convert() and ff_wtoupper() must be added +/ to the project. When enable to use heap, memory control functions +/ ff_memalloc() and ff_memfree() must be added to the project. */ + + +#define _LFN_UNICODE 0 /* 0 or 1 */ +/* To switch the character code set on FatFs API to Unicode, +/ enable LFN feature and set _LFN_UNICODE to 1. +*/ + + +#define _FS_RPATH 1 /* 0 or 1 */ +/* When _FS_RPATH is set to 1, relative path feature is enabled and f_chdir, +/ f_chdrive function are available. +/ Note that output of the f_readdir fnction is affected by this option. */ + + + +/*---------------------------------------------------------------------------/ +/ Physical Drive Configurations +/----------------------------------------------------------------------------*/ + +#define _DRIVES 2 +/* Number of volumes (logical drives) to be used. */ + + +#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */ +/* Maximum sector size to be handled. +/ Always set 512 for memory card and hard disk but a larger value may be +/ required for floppy disk (512/1024) and optical disk (512/2048). +/ When _MAX_SS is larger than 512, GET_SECTOR_SIZE command must be implememted +/ to the disk_ioctl function. */ + + +#define _MULTI_PARTITION 0 /* 0 or 1 */ +/* When _MULTI_PARTITION is set to 0, each volume is bound to the same physical +/ drive number and can mount only first primaly partition. When it is set to 1, +/ each volume is tied to the partitions listed in Drives[]. */ + + + +/*---------------------------------------------------------------------------/ +/ System Configurations +/----------------------------------------------------------------------------*/ + +#define _WORD_ACCESS 1 /* 0 or 1 */ +/* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS +/ option defines which access method is used to the word data on the FAT volume. +/ +/ 0: Byte-by-byte access. +/ 1: Word access. Do not choose this unless following condition is met. +/ +/ When the byte order on the memory is big-endian or address miss-aligned word +/ access results incorrect behavior, the _WORD_ACCESS must be set to 0. +/ If it is not the case, the value can also be set to 1 to improve the +/ performance and code size. */ + + +#define _FS_REENTRANT 0 /* 0 or 1 */ +#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */ +#define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */ +/* The _FS_REENTRANT option switches the reentrancy of the FatFs module. +/ +/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect. +/ 1: Enable reentrancy. Also user provided synchronization handlers, +/ ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj +/ function must be added to the project. */ + + +#define _FS_SHARE 0 /* 0 or >=1 */ +/* To enable file shareing feature, set _FS_SHARE to >= 1 and also user + provided memory handlers, ff_memalloc and ff_memfree function must be + added to the project. The value defines number of files can be opened + per volume. */ + + +#endif /* _FFCONF */ diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/integer.h b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/integer.h new file mode 100644 index 0000000..16ad408 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/integer.h @@ -0,0 +1,37 @@ +/*-------------------------------------------*/ +/* Integer type definitions for FatFs module */ +/*-------------------------------------------*/ + +#ifndef _INTEGER +#define _INTEGER + +#ifdef _WIN32 /* FatFs development platform */ + +#include +#include + +#else /* Embedded platform */ + +/* These types must be 16-bit, 32-bit or larger integer */ +typedef int INT; +typedef unsigned int UINT; + +/* These types must be 8-bit integer */ +typedef char CHAR; +typedef unsigned char UCHAR; +typedef unsigned char BYTE; + +/* These types must be 16-bit integer */ +typedef short SHORT; +typedef unsigned short USHORT; +typedef unsigned short WORD; +typedef unsigned short WCHAR; + +/* These types must be 32-bit integer */ +typedef long LONG; +typedef unsigned long ULONG; +typedef unsigned long DWORD; + +#endif + +#endif diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/main.c b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/main.c new file mode 100644 index 0000000..683621b --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 3/main.c @@ -0,0 +1,296 @@ +/** +@file main.c +@brief Lab 3 Starter Code +@version .01 +@mainpage Lab 3 Starter Code + +@section intro Code Overview + +@section hw Hardware Pin Out +Port A: +A0 - A3 : Push Buttons +A4 - A7 : Slide Switches + +Port B: +B0 - B3 : SPI (SD Card) +B4 : Nothing +B5 : Audio Out +B6 : Red Enable +B7 : Green Enable + +Port C: +C0 - C7 : LED Array (Row) + +Port D: +D0 - D1 : Nothing +D2 : Serial RX +D3 : Serial TX +D4 - D7 : Nothing + +Port E: +E0 - E2 : LED Array (Column) +E3 : USB (UID) +E4 - E5 : Nothing +E6 : Relay +E7 : Nothing + +Port F: +F0 : ADC Channel 0 +F1 : ADC Channel 1 +F2 : ADC Channel 2 +F3 : ADC Channel 3 +F4 : ADC Channel 4 (Audio In) +F5 : ADC Channel 5 (Accel X Axis) +F6 : ADC Channel 6 (Accel Y Axis) +F7 : ADC Channel 7 (Accel Z Axis (if installed)) + +*/ + +/** Includes */ +#include +#include + + +/** Constants */ +#define F_CPU 1000000UL +#define DEBUG 1 +#ifdef DEBUG == 1 + #define SENDSPEED 3 //If less than .12, there are problems +#endif + +/** Global Variables */ + +/** Functions */ + +#ifdef DEBUG == 1 + /** This function needs to setup the variables used by the UART to enable the UART and tramsmit at 9600bps. This + function should always return 0. Remember, by defualt the Wunderboard runs at 1mHz for its system clock.*/ + unsigned char InitializeUART (){ + unsigned char baud = ((F_CPU/(9600*8UL))-1); + + /* Set baud rate */ + UBRR1H = (baud >> 8); + UBRR1L = baud; + /* Set the U2X1 bit */ + UCSR1A = (1 << U2X1); + /* Enable transmitter */ + UCSR1B = (1 << TXEN1 | 1 << RXEN1); + /* Set frame format: 8data, 1stop bit */ + UCSR1C = (3 << UCSZ10); + + return 0; + } + + /** This function needs to write a single byte to the UART. It must check that the UART is ready for a new byte + and return a 1 if the byte was not sent. + @param [in] data This is the data byte to be sent. + @return The function returns a 1 or error and 0 on successful completion.*/ + + unsigned char SendByteUART (unsigned char data){ + + /* + ** Checks the buffer empty bit so that data can either be placed in the buffer + ** or else reuturn a 1 + */ + if((UCSR1A & (1 << UDRE1)) == (1 << UDRE1)){ + UDR1 = data; + _delay_ms(SENDSPEED); //Places data into the UDR1 8-bit data buffer + }else { + return 1; + } + + return 0; + } + + /** This function needs to writes a string to the UART. It must check that the UART is ready for a new byte and + return a 1 if the string was not sent. + @param [in] data This is a pointer to the data to be sent. + @return The function returns a 1 or error and 0 on successful completion.*/ + + unsigned char SendStringUART (unsigned char *data){ + + for (int loop = 0 ; data[loop] != '\0'; loop++){ + unsigned char bytereturn; //Storage for return value of SendByteUART + + /* Sends the current byte based on the loop umber to SendByte */ + bytereturn = SendByteUART(data[loop]); + + /* Stops sending if SendByteUART had an error */ + if(bytereturn == 1){ + return 1; + } + } + return 0; + } + + unsigned char GetByteUART(){ + if (UCSR1A & (1 << RXC1)){ + return(UDR1); + } else{ + return(-1); + } + } +#endif + +/** The clearArray() function turns off all LEDS on the Wunderboard array. It accepts no inputs and returns nothing*/ +void clearArray(void){ + PORTC = 0x00; + PORTB |= (1 << PB6) | (1 << PB7); /** Enable latches*/ + PORTB &= ~((1 << PB6) | (1 << PB7)); /** Disable latches*/ +} + +/** The initialize() function initializes all of the Data Direction Registers for the Wunderboard. Before making changes to DDRx registers, ensure that you have read the peripherals section of the Wunderboard user guide.*/ +void initialize(void){ + /** Port A is the switches and buttons. They should always be inputs. ( 0 = Input and 1 = Output )*/ + DDRA=0b00000000; + + /** Port B has the LED Array color control, SD card, and audio-out on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRB=0b11000111; + + /** Port C is for the 'row' of the LED array. They should always be outputs. ( 0 = Input and 1 = Output )*/ + DDRC=0b11111111; + + /** Port D has the Serial on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRD=0b00000000; + + /** Port E has the LED Array Column control out on it. Leave DDRE alone. ( 0 = Input and 1 = Output )*/ + DDRE=0b00000111; + + /** Port F has the accelerometer and audio-in on it. Leave DDRF alone. ( 0 = Input and 1 = Output )*/ + DDRF=0b00000000; +} + +unsigned char read_adc(uint8_t channel){ + + unsigned char test; + + ADMUX = 0x60 | channel; // Set the channel to the one we want + ADCSRA = 0b11000110; // Start a new sample. + while ((ADCSRA & 0b00010000) == 0 ); // Wait for a Valid Sample + ADCSRA |= 0b00010000; // Tell ADC you have the sample you want. + ADCSRA |= 0b01000000; // Start a new sample. + while ((ADCSRA & 0b00010000) == 0 ); // Wait for a Valid Sample + ADCSRA |= 0b00010000; // Tell ADC you have the sample you want. + + test = ADCH; + ADCSRA = 0x00; // Disable the ADC + + return (test); +} + + +/** This function needs to setup the variables used by TIMER0 Compare Match (CTC) mode with +a base clock frequency of clk/1024. This function should return a 1 if it fails and a 0 if it +does not. Remember, by default the Wunderboard runs at 1mHz for its system clock. +@return This function returns a 1 is unsuccessful, else return 0.*/ +unsigned char initializeTIMER0(void){ + /* Set the CTC mode */ + TCCR0A = (1 << WGM01); + + /* Set the Clock Frequency */ + TCCR0B = ((1 << CS02) | (1 << CS00)); + + /* Set initial count value */ + OCR0A = 0; +} + +/** This function checks if TIMER0 has elapsed. +@return This function should return a 1 if the timer has elapsed, else return 0*/ +unsigned char checkTIMER0(void){ + if((TIFR0 & (1 << OCF0A)) == (1 << OCF0A)){ + TIFR0 |= (1 << OCF0A); + return 1; + }else { + return 0; + } +} + +/** This function takes two values, clock and count. The value of count should be copied into OCR0A and the value of clock should be used to set CS02:0. The TCNT0 variable should also be reset to 0 so that the new timer rate starts from 0. +@param [in] clock Insert Comment +@param [in] count Insert Comment +@return The function returns a 1 or error and 0 on successful completion.*/ +unsigned char setTIMER0(unsigned char clock, unsigned char count){ + + if(clock > 7){ + return 1; + } + TCCR0B &= 0b11111000; //Zeros out last three bits + TCCR0B |= clock; + OCR0A = count; + TCNT0 = 0; + return 0; +} + +/** Main Function */ +int main (void){ + + enum states { + setup, + idle, + running + } state = setup; + + unsigned char numelapsed = 0; + unsigned char debug; + unsigned char received; + unsigned char send[150]; + unsigned char adcreturn1; + unsigned char adcreturn2; + + while(1){ + + switch(state){ + case setup: + + initialize(); + initializeTIMER0(); + InitializeUART(); + clearArray(); + setTIMER0(5, 121); + PORTB = 0b11000000; + state = idle; + sprintf(send, "Initialized...\n"); + SendStringUART(send); + break; + + case idle: + if(debug != 1){ + sprintf(send, "Idling...\n"); + SendStringUART(send); + debug = 1; + } + received = GetByteUART(); + + if (received == 's'){ + state = running; + debug = 0; + break; + } + + break; + + case running: + + received = GetByteUART(); + adcreturn1 = read_adc(5); + adcreturn2 = read_adc(6); + + if (received == 's'){ + state = idle; + } + + if (checkTIMER0() == 1){ + if(numelapsed == 3){ + PORTC = ~PORTC; + numelapsed = 0; + sprintf(send, "X value: %d\tY value: %d\n", adcreturn1, adcreturn2); + SendStringUART(send); + + }else { + numelapsed++; + } + } + break; + } + } +} \ No newline at end of file diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/Makefile b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/Makefile new file mode 100644 index 0000000..495854c --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/Makefile @@ -0,0 +1,337 @@ +#---------------------------------------------------------------------------- +# Wunderboard Makefile Template written by Dan Albert +#---------------------------------------------------------------------------- +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# Target file name. +TARGET = main + +# List C source files here. +SRC = $(TARGET).c \ + ff.c \ + diskio.c \ + +# MCU name, you MUST set this to match the board you are using +# type "make clean" after changing this, so all files will be rebuilt +MCU = at90usb646 + +# Detect platform +UNAME = $(shell uname) + +ifeq ($(UNAME),Linux) +ENV=unix +endif + +ifeq ($(UNAME),Darwin) +ENV=unix +endif + +ifndef ENV +ENV=windows +endif + +ifeq ($(ENV),unix) +PROGRAM = dfu-programmer +PROGRAMFLAGS = $(MCU) +ERASE = erase +FLASH = flash "$(TARGET).hex" +START = start +else +PROGRAM = "batchisp.exe" +PROGRAMFLAGS = -device at90usb646 -hardware USB +ERASE = -operation erase F +FLASH = -operation loadbuffer "$(TARGET).hex" program verify +START = -operation start noreset 0 +endif + +# Processor frequency. +# Normally the first thing your program should do is set the clock prescaler, +# so your program will run at the correct speed. You should also set this +# variable to same clock speed. The _delay_ms() macro uses this, and many +# examples use this variable to calculate timings. Do not add a "UL" here. +F_CPU = 1000000 + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = obj + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + +MATH_LIB = -lm + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + +#============================================================================ + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +# Display compiler version information. +gccversion : + @$(CC) --version + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +## Program +.PHONY: program +program: all + $(PROGRAM) $(PROGRAMFLAGS) $(ERASE) + $(PROGRAM) $(PROGRAMFLAGS) $(FLASH) + $(PROGRAM) $(PROGRAMFLAGS) $(START) + +doxygen: + doxygen + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVEDIR) .dep + $(REMOVEDIR) $(OBJDIR) + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym \ +clean clean_list diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/diskio.c b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/diskio.c new file mode 100644 index 0000000..b2f7202 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/diskio.c @@ -0,0 +1,623 @@ +/*-----------------------------------------------------------------------*/ +/* MMCv3/SDv1/SDv2 (in SPI mode) control module (C)ChaN, 2007 */ +/*-----------------------------------------------------------------------*/ +/* Only rcvr_spi(), xmit_spi(), disk_timerproc() and some macros */ +/* are platform dependent. */ +/*-----------------------------------------------------------------------*/ + + +#include +#include +#include "diskio.h" + + +/* Definitions for MMC/SDC command */ +#define CMD0 (0) /* GO_IDLE_STATE */ +#define CMD1 (1) /* SEND_OP_COND (MMC) */ +#define ACMD41 (0x80+41) /* SEND_OP_COND (SDC) */ +#define CMD8 (8) /* SEND_IF_COND */ +#define CMD9 (9) /* SEND_CSD */ +#define CMD10 (10) /* SEND_CID */ +#define CMD12 (12) /* STOP_TRANSMISSION */ +#define ACMD13 (0x80+13) /* SD_STATUS (SDC) */ +#define CMD16 (16) /* SET_BLOCKLEN */ +#define CMD17 (17) /* READ_SINGLE_BLOCK */ +#define CMD18 (18) /* READ_MULTIPLE_BLOCK */ +#define CMD23 (23) /* SET_BLOCK_COUNT (MMC) */ +#define ACMD23 (0x80+23) /* SET_WR_BLK_ERASE_COUNT (SDC) */ +#define CMD24 (24) /* WRITE_BLOCK */ +#define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */ +#define CMD55 (55) /* APP_CMD */ +#define CMD58 (58) /* READ_OCR */ + + +/* Port Controls (Platform dependent) */ +#define CS_LOW() PORTB &= ~1 /* MMC CS = L */ +#define CS_HIGH() PORTB |= 1 /* MMC CS = H */ + +#define SOCKPORT PINB /* Socket contact port */ +#define SOCKWP 0x20 /* Write protect switch (PB5) */ +#define SOCKINS 0x10 /* Card detect switch (PB4) */ + +#define FCLK_SLOW() SPCR = 0x52 /* Set slow clock (100k-400k) */ +#define FCLK_FAST() SPCR = 0x50 /* Set fast clock (depends on the CSD) */ + + +/*-------------------------------------------------------------------------- + + Module Private Functions + +---------------------------------------------------------------------------*/ + +static volatile +DSTATUS Stat = STA_NOINIT; /* Disk status */ + +static volatile +BYTE Timer1, Timer2; /* 100Hz decrement timer */ + +static +BYTE CardType; /* Card type flags */ + + +/*-----------------------------------------------------------------------*/ +/* Transmit a byte to MMC via SPI (Platform dependent) */ +/*-----------------------------------------------------------------------*/ + +#define xmit_spi(dat) cli(); SPDR=(dat); loop_until_bit_is_set(SPSR,SPIF); sei() + + + +/*-----------------------------------------------------------------------*/ +/* Receive a byte from MMC via SPI (Platform dependent) */ +/*-----------------------------------------------------------------------*/ + +static +BYTE rcvr_spi (void) +{ + cli(); + SPDR = 0xFF; + loop_until_bit_is_set(SPSR, SPIF); + sei(); + return SPDR; +} + +/* Alternative macro to receive data fast */ +#define rcvr_spi_m(dst) SPDR=0xFF; loop_until_bit_is_set(SPSR,SPIF); *(dst)=SPDR + + + +/*-----------------------------------------------------------------------*/ +/* Wait for card ready */ +/*-----------------------------------------------------------------------*/ + +static +int wait_ready (void) /* 1:OK, 0:Timeout */ +{ + Timer2 = 50; /* Wait for ready in timeout of 500ms */ + rcvr_spi(); + do + if (rcvr_spi() == 0xFF) return 1; + while (Timer2); + + return 0; +} + + + +/*-----------------------------------------------------------------------*/ +/* Deselect the card and release SPI bus */ +/*-----------------------------------------------------------------------*/ + +static +void deselect (void) +{ + CS_HIGH(); + rcvr_spi(); +} + + + +/*-----------------------------------------------------------------------*/ +/* Select the card and wait for ready */ +/*-----------------------------------------------------------------------*/ + +static +int select (void) /* 1:Successful, 0:Timeout */ +{ + CS_LOW(); + if (!wait_ready()) { + deselect(); + return 0; + } + return 1; +} + + + +/*-----------------------------------------------------------------------*/ +/* Power Control (Platform dependent) */ +/*-----------------------------------------------------------------------*/ +/* When the target system does not support socket power control, there */ +/* is nothing to do in these functions and chk_power always returns 1. */ + +/* +static +void power_on (void) +{ + PORTE &= ~0x80; // Socket power ON * + for (Timer1 = 3; Timer1; ); // Wait for 30ms * + PORTB = 0b10110101; //Enable drivers * + DDRB = 0b11000111; + SPCR = 0x52; // Enable SPI function in mode 0 * + SPSR = 0x01; // 2x mode * +} + + +static +void power_off (void) +{ + select(); // Wait for card ready * + deselect(); + SPCR = 0; // Disable SPI function * + DDRB = 0b11000000; // Disable drivers * + PORTB = 0b10110000; + PORTE |= 0x80; // Socket power OFF * + Stat |= STA_NOINIT; // Set STA_NOINIT * +} +*/ + +static +int chk_power(void) /* Socket power state: 0=off, 1=on */ +{ + return 1; +} + + + +/*-----------------------------------------------------------------------*/ +/* Receive a data packet from MMC */ +/*-----------------------------------------------------------------------*/ + +static +int rcvr_datablock ( + BYTE *buff, /* Data buffer to store received data */ + UINT btr /* Byte count (must be multiple of 4) */ +) +{ + BYTE token; + + + Timer1 = 20; + do { /* Wait for data packet in timeout of 200ms */ + token = rcvr_spi(); + } while ((token == 0xFF) && Timer1); + if(token != 0xFE) return 0; /* If not valid data token, retutn with error */ + + do { /* Receive the data block into buffer */ + rcvr_spi_m(buff++); + rcvr_spi_m(buff++); + rcvr_spi_m(buff++); + rcvr_spi_m(buff++); + } while (btr -= 4); + rcvr_spi(); /* Discard CRC */ + rcvr_spi(); + + return 1; /* Return with success */ +} + + + +/*-----------------------------------------------------------------------*/ +/* Send a data packet to MMC */ +/*-----------------------------------------------------------------------*/ + +#if _READONLY == 0 +static +int xmit_datablock ( + const BYTE *buff, /* 512 byte data block to be transmitted */ + BYTE token /* Data/Stop token */ +) +{ + BYTE resp, wc; + + + if (!wait_ready()) return 0; + + xmit_spi(token); /* Xmit data token */ + if (token != 0xFD) { /* Is data token */ + wc = 0; + do { /* Xmit the 512 byte data block to MMC */ + xmit_spi(*buff++); + xmit_spi(*buff++); + } while (--wc); + xmit_spi(0xFF); /* CRC (Dummy) */ + xmit_spi(0xFF); + resp = rcvr_spi(); /* Reveive data response */ + if ((resp & 0x1F) != 0x05) /* If not accepted, return with error */ + return 0; + } + + return 1; +} +#endif /* _READONLY */ + + + +/*-----------------------------------------------------------------------*/ +/* Send a command packet to MMC */ +/*-----------------------------------------------------------------------*/ + +static +BYTE send_cmd ( /* Returns R1 resp (bit7==1:Send failed) */ + BYTE cmd, /* Command index */ + DWORD arg /* Argument */ +) +{ + BYTE n, res; + + + if (cmd & 0x80) { /* ACMD is the command sequense of CMD55-CMD */ + cmd &= 0x7F; + res = send_cmd(CMD55, 0); + if (res > 1) return res; + } + + /* Select the card and wait for ready */ + deselect(); + if (!select()) return 0xFF; + + /* Send command packet */ + xmit_spi(0x40 | cmd); /* Start + Command index */ + xmit_spi((BYTE)(arg >> 24)); /* Argument[31..24] */ + xmit_spi((BYTE)(arg >> 16)); /* Argument[23..16] */ + xmit_spi((BYTE)(arg >> 8)); /* Argument[15..8] */ + xmit_spi((BYTE)arg); /* Argument[7..0] */ + n = 0x01; /* Dummy CRC + Stop */ + if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) */ + if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) */ + xmit_spi(n); + + /* Receive command response */ + if (cmd == CMD12) rcvr_spi(); /* Skip a stuff byte when stop reading */ + n = 10; /* Wait for a valid response in timeout of 10 attempts */ + do + res = rcvr_spi(); + while ((res & 0x80) && --n); + + return res; /* Return with the response value */ +} + + + +/*-------------------------------------------------------------------------- + + Public Functions + +---------------------------------------------------------------------------*/ + + +/*-----------------------------------------------------------------------*/ +/* Initialize Disk Drive */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_initialize (BYTE drv) /* Physical drive nmuber (0) */ +{ + BYTE n, cmd, ty, ocr[4]; + + if (drv) return STA_NOINIT; /* Supports only single drive */ + if (Stat & STA_NODISK) return Stat; /* No card in the socket */ + + //power_on(); /* Force socket power on */ + PORTB |= 0b11000000; + FCLK_SLOW(); + for (n = 10; n; n--) rcvr_spi(); /* 80 dummy clocks */ + + ty = 0; + if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */ + Timer1 = 200; /* Initialization timeout of 1000 msec */ + if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */ + for (n = 0; n < 4; n++) ocr[n] = rcvr_spi(); /* Get trailing return value of R7 resp */ + if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */ + while (Timer1 && send_cmd(ACMD41, 1UL << 30)); /* Wait for leaving idle state (ACMD41 with HCS bit) */ + if (Timer1 && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */ + for (n = 0; n < 4; n++) ocr[n] = rcvr_spi(); + ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* SDv2 */ + } + } + } else { /* SDv1 or MMCv3 */ + if (send_cmd(ACMD41, 0) <= 1) { + ty = CT_SD1; cmd = ACMD41; /* SDv1 */ + } else { + ty = CT_MMC; cmd = CMD1; /* MMCv3 */ + } + while (Timer1 && send_cmd(cmd, 0)); /* Wait for leaving idle state */ + if (!Timer1 || send_cmd(CMD16, 512) != 0) /* Set R/W block length to 512 */ + ty = 0; + } + } + + CardType = ty; + deselect(); + + if (ty) { /* Initialization succeded */ + Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */ + FCLK_FAST(); + } else { /* Initialization failed */ + //power_off(); + + } + + return Stat; +} + + + +/*-----------------------------------------------------------------------*/ +/* Get Disk Status */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_status ( + BYTE drv /* Physical drive nmuber (0) */ +) +{ + if (drv) return STA_NOINIT; /* Supports only single drive */ + return Stat; +} + + + +/*-----------------------------------------------------------------------*/ +/* Read Sector(s) */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_read ( + BYTE drv, /* Physical drive nmuber (0) */ + BYTE *buff, /* Pointer to the data buffer to store read data */ + DWORD sector, /* Start sector number (LBA) */ + BYTE count /* Sector count (1..255) */ +) +{ + if (drv || !count) return RES_PARERR; + if (Stat & STA_NOINIT) return RES_NOTRDY; + + if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */ + + if (count == 1) { /* Single block read */ + if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */ + && rcvr_datablock(buff, 512)) + count = 0; + } + else { /* Multiple block read */ + if (send_cmd(CMD18, sector) == 0) { /* READ_MULTIPLE_BLOCK */ + do { + if (!rcvr_datablock(buff, 512)) break; + buff += 512; + } while (--count); + send_cmd(CMD12, 0); /* STOP_TRANSMISSION */ + } + } + deselect(); + + return count ? RES_ERROR : RES_OK; +} + + + +/*-----------------------------------------------------------------------*/ +/* Write Sector(s) */ +/*-----------------------------------------------------------------------*/ + +#if _READONLY == 0 +DRESULT disk_write ( + BYTE drv, /* Physical drive nmuber (0) */ + const BYTE *buff, /* Pointer to the data to be written */ + DWORD sector, /* Start sector number (LBA) */ + BYTE count /* Sector count (1..255) */ +) +{ + if (drv || !count) return RES_PARERR; + if (Stat & STA_NOINIT) return RES_NOTRDY; + if (Stat & STA_PROTECT) return RES_WRPRT; + + if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */ + + if (count == 1) { /* Single block write */ + if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */ + && xmit_datablock(buff, 0xFE)) + count = 0; + } + else { /* Multiple block write */ + if (CardType & CT_SDC) send_cmd(ACMD23, count); + if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */ + do { + if (!xmit_datablock(buff, 0xFC)) break; + buff += 512; + } while (--count); + if (!xmit_datablock(0, 0xFD)) /* STOP_TRAN token */ + count = 1; + } + } + deselect(); + + return count ? RES_ERROR : RES_OK; +} +#endif /* _READONLY == 0 */ + + + +/*-----------------------------------------------------------------------*/ +/* Miscellaneous Functions */ +/*-----------------------------------------------------------------------*/ + +#if _USE_IOCTL != 0 +DRESULT disk_ioctl ( + BYTE drv, /* Physical drive nmuber (0) */ + BYTE ctrl, /* Control code */ + void *buff /* Buffer to send/receive control data */ +) +{ + DRESULT res; + BYTE n, csd[16], *ptr = buff; + WORD csize; + + + if (drv) return RES_PARERR; + + res = RES_ERROR; + + if (ctrl == CTRL_POWER) { + switch (*ptr) { + case 0: /* Sub control code == 0 (POWER_OFF) */ + if (chk_power()) + //power_off(); // Power off */ + res = RES_OK; + break; + case 1: /* Sub control code == 1 (POWER_ON) */ + //power_on(); // Power on */ + res = RES_OK; + break; + case 2: /* Sub control code == 2 (POWER_GET) */ + *(ptr+1) = (BYTE)chk_power(); + res = RES_OK; + break; + default : + res = RES_PARERR; + } + } + else { + if (Stat & STA_NOINIT) return RES_NOTRDY; + + switch (ctrl) { + case CTRL_SYNC : /* Make sure that no pending write process. Do not remove this or written sector might not left updated. */ + if (select()) { + deselect(); + res = RES_OK; + } + break; + + case GET_SECTOR_COUNT : /* Get number of sectors on the disk (DWORD) */ + if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { + if ((csd[0] >> 6) == 1) { /* SDC ver 2.00 */ + csize = csd[9] + ((WORD)csd[8] << 8) + 1; + *(DWORD*)buff = (DWORD)csize << 10; + } else { /* SDC ver 1.XX or MMC*/ + n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2; + csize = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1; + *(DWORD*)buff = (DWORD)csize << (n - 9); + } + res = RES_OK; + } + break; + + case GET_SECTOR_SIZE : /* Get R/W sector size (WORD) */ + *(WORD*)buff = 512; + res = RES_OK; + break; + + case GET_BLOCK_SIZE : /* Get erase block size in unit of sector (DWORD) */ + if (CardType & CT_SD2) { /* SDv2? */ + if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */ + rcvr_spi(); + if (rcvr_datablock(csd, 16)) { /* Read partial block */ + for (n = 64 - 16; n; n--) rcvr_spi(); /* Purge trailing data */ + *(DWORD*)buff = 16UL << (csd[10] >> 4); + res = RES_OK; + } + } + } else { /* SDv1 or MMCv3 */ + if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */ + if (CardType & CT_SD1) { /* SDv1 */ + *(DWORD*)buff = (((csd[10] & 63) << 1) + ((WORD)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6) - 1); + } else { /* MMCv3 */ + *(DWORD*)buff = ((WORD)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224) >> 5) + 1); + } + res = RES_OK; + } + } + break; + + case MMC_GET_TYPE : /* Get card type flags (1 byte) */ + *ptr = CardType; + res = RES_OK; + break; + + case MMC_GET_CSD : /* Receive CSD as a data block (16 bytes) */ + if (send_cmd(CMD9, 0) == 0 /* READ_CSD */ + && rcvr_datablock(ptr, 16)) + res = RES_OK; + break; + + case MMC_GET_CID : /* Receive CID as a data block (16 bytes) */ + if (send_cmd(CMD10, 0) == 0 /* READ_CID */ + && rcvr_datablock(ptr, 16)) + res = RES_OK; + break; + + case MMC_GET_OCR : /* Receive OCR as an R3 resp (4 bytes) */ + if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */ + for (n = 4; n; n--) *ptr++ = rcvr_spi(); + res = RES_OK; + } + break; + + case MMC_GET_SDSTAT : /* Receive SD statsu as a data block (64 bytes) */ + if (send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */ + rcvr_spi(); + if (rcvr_datablock(ptr, 64)) + res = RES_OK; + } + break; + + default: + res = RES_PARERR; + } + + deselect(); + } + + return res; +} +#endif /* _USE_IOCTL != 0 */ + + +/*-----------------------------------------------------------------------*/ +/* Device Timer Interrupt Procedure (Platform dependent) */ +/*-----------------------------------------------------------------------*/ +/* This function must be called in period of 10ms */ + +void disk_timerproc (void) +{ + static BYTE pv; + BYTE n, s; + + + n = Timer1; /* 100Hz decrement timer */ + if (n) Timer1 = --n; + n = Timer2; + if (n) Timer2 = --n; + + n = pv; + pv = SOCKPORT & (SOCKWP | SOCKINS); /* Sample socket switch */ + + if (n == pv) { /* Have contacts stabled? */ + s = Stat; + + if (pv & SOCKWP) /* WP is H (write protected) */ + s |= STA_PROTECT; + else /* WP is L (write enabled) */ + s &= ~STA_PROTECT; + + if (pv & SOCKINS) /* INS = H (Socket empty) */ + s |= (STA_NODISK | STA_NOINIT); + else /* INS = L (Card inserted) */ + s &= ~STA_NODISK; + + Stat = s; + } +} + +DWORD get_fattime () +{ + return 0; +} + diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/diskio.h b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/diskio.h new file mode 100644 index 0000000..a40cb6c --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/diskio.h @@ -0,0 +1,76 @@ +/*----------------------------------------------------------------------- +/ Low level disk interface modlue include file R0.07 (C)ChaN, 2009 +/-----------------------------------------------------------------------*/ + +#ifndef _DISKIO + +#define _READONLY 0 /* 1: Read-only mode */ +#define _USE_IOCTL 1 + +#include "integer.h" + + +/* Status of Disk Functions */ +typedef BYTE DSTATUS; + +/* Results of Disk Functions */ +typedef enum { + RES_OK = 0, /* 0: Successful */ + RES_ERROR, /* 1: R/W Error */ + RES_WRPRT, /* 2: Write Protected */ + RES_NOTRDY, /* 3: Not Ready */ + RES_PARERR /* 4: Invalid Parameter */ +} DRESULT; + + +/*---------------------------------------*/ +/* Prototypes for disk control functions */ + +DSTATUS disk_initialize (BYTE); +DSTATUS disk_status (BYTE); +DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE); +#if _READONLY == 0 +DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE); +#endif +DRESULT disk_ioctl (BYTE, BYTE, void*); + + + +/* Disk Status Bits (DSTATUS) */ + +#define STA_NOINIT 0x01 /* Drive not initialized */ +#define STA_NODISK 0x02 /* No medium in the drive */ +#define STA_PROTECT 0x04 /* Write protected */ + +/* Card type flags (CardType) */ + +#define CT_MMC 0x01 +#define CT_SD1 0x02 +#define CT_SD2 0x04 +#define CT_SDC (CT_SD1|CT_SD2) +#define CT_BLOCK 0x08 + +/* Command code for disk_ioctrl() */ + +/* Generic command */ +#define CTRL_SYNC 0 /* Mandatory for write functions */ +#define GET_SECTOR_COUNT 1 /* Mandatory for only f_mkfs() */ +#define GET_SECTOR_SIZE 2 /* Mandatory for multiple sector size cfg */ +#define GET_BLOCK_SIZE 3 /* Mandatory for only f_mkfs() */ +#define CTRL_POWER 4 +#define CTRL_LOCK 5 +#define CTRL_EJECT 6 +/* MMC/SDC command */ +#define MMC_GET_TYPE 10 +#define MMC_GET_CSD 11 +#define MMC_GET_CID 12 +#define MMC_GET_OCR 13 +#define MMC_GET_SDSTAT 14 +/* ATA/CF command */ +#define ATA_GET_REV 20 +#define ATA_GET_MODEL 21 +#define ATA_GET_SN 22 + + +#define _DISKIO +#endif diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ff.c b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ff.c new file mode 100644 index 0000000..236c86f --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ff.c @@ -0,0 +1,3553 @@ +/*----------------------------------------------------------------------------/ +/ FatFs - FAT file system module R0.08 (C)ChaN, 2010 +/-----------------------------------------------------------------------------/ +/ FatFs module is a generic FAT file system module for small embedded systems. +/ This is a free software that opened for education, research and commercial +/ developments under license policy of following terms. +/ +/ Copyright (C) 2010, ChaN, all right reserved. +/ +/ * The FatFs module is a free software and there is NO WARRANTY. +/ * No restriction on use. You can use, modify and redistribute it for +/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. +/ * Redistributions of source code must retain the above copyright notice. +/ +/-----------------------------------------------------------------------------/ +/ Feb 26,'06 R0.00 Prototype. +/ +/ Apr 29,'06 R0.01 First stable version. +/ +/ Jun 01,'06 R0.02 Added FAT12 support. +/ Removed unbuffered mode. +/ Fixed a problem on small (<32M) partition. +/ Jun 10,'06 R0.02a Added a configuration option (_FS_MINIMUM). +/ +/ Sep 22,'06 R0.03 Added f_rename(). +/ Changed option _FS_MINIMUM to _FS_MINIMIZE. +/ Dec 11,'06 R0.03a Improved cluster scan algorithm to write files fast. +/ Fixed f_mkdir() creates incorrect directory on FAT32. +/ +/ Feb 04,'07 R0.04 Supported multiple drive system. +/ Changed some interfaces for multiple drive system. +/ Changed f_mountdrv() to f_mount(). +/ Added f_mkfs(). +/ Apr 01,'07 R0.04a Supported multiple partitions on a physical drive. +/ Added a capability of extending file size to f_lseek(). +/ Added minimization level 3. +/ Fixed an endian sensitive code in f_mkfs(). +/ May 05,'07 R0.04b Added a configuration option _USE_NTFLAG. +/ Added FSInfo support. +/ Fixed DBCS name can result FR_INVALID_NAME. +/ Fixed short seek (<= csize) collapses the file object. +/ +/ Aug 25,'07 R0.05 Changed arguments of f_read(), f_write() and f_mkfs(). +/ Fixed f_mkfs() on FAT32 creates incorrect FSInfo. +/ Fixed f_mkdir() on FAT32 creates incorrect directory. +/ Feb 03,'08 R0.05a Added f_truncate() and f_utime(). +/ Fixed off by one error at FAT sub-type determination. +/ Fixed btr in f_read() can be mistruncated. +/ Fixed cached sector is not flushed when create and close +/ without write. +/ +/ Apr 01,'08 R0.06 Added fputc(), fputs(), fprintf() and fgets(). +/ Improved performance of f_lseek() on moving to the same +/ or following cluster. +/ +/ Apr 01,'09 R0.07 Merged Tiny-FatFs as a buffer configuration option. +/ Added long file name support. +/ Added multiple code page support. +/ Added re-entrancy for multitask operation. +/ Added auto cluster size selection to f_mkfs(). +/ Added rewind option to f_readdir(). +/ Changed result code of critical errors. +/ Renamed string functions to avoid name collision. +/ Apr 14,'09 R0.07a Separated out OS dependent code on reentrant cfg. +/ Added multiple sector size support. +/ Jun 21,'09 R0.07c Fixed f_unlink() can return FR_OK on error. +/ Fixed wrong cache control in f_lseek(). +/ Added relative path feature. +/ Added f_chdir() and f_chdrive(). +/ Added proper case conversion to extended char. +/ Nov 03,'09 R0.07e Separated out configuration options from ff.h to ffconf.h. +/ Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. +/ Fixed name matching error on the 13 char boundary. +/ Added a configuration option, _LFN_UNICODE. +/ Changed f_readdir() to return the SFN with always upper +/ case on non-LFN cfg. +/ +/ May 15,'10 R0.08 Added a memory configuration option. (_USE_LFN) +/ Added file lock feature. (_FS_SHARE) +/ Added fast seek feature. (_USE_FASTSEEK) +/ Changed some types on the API, XCHAR->TCHAR. +/ Changed fname member in the FILINFO structure on Unicode cfg. +/ String functions support UTF-8 encoding files on Unicode cfg. +/---------------------------------------------------------------------------*/ + +#include "ff.h" /* FatFs configurations and declarations */ +#include "diskio.h" /* Declarations of low level disk I/O functions */ + + +/*-------------------------------------------------------------------------- + + Module Private Definitions + +---------------------------------------------------------------------------*/ + +#if _FATFS != 8085 +#error Wrong include file (ff.h). +#endif + + +/* FAT sub-type boundaries */ +/* Note that the FAT spec by Microsoft says 4085 but Windows works with 4087! */ +#define MIN_FAT16 4086 /* Minimum number of clusters for FAT16 */ +#define MIN_FAT32 65526 /* Minimum number of clusters for FAT32 */ + + +/* Definitions corresponds to multiple sector size */ +#if _MAX_SS == 512 /* Single sector size */ +#define SS(fs) 512U +#elif _MAX_SS == 1024 || _MAX_SS == 2048 || _MAX_SS == 4096 /* Multiple sector size */ +#define SS(fs) ((fs)->ssize) +#else +#error Wrong sector size. +#endif + + +/* Reentrancy related */ +#if _FS_REENTRANT +#if _USE_LFN == 1 +#error Static LFN work area must not be used in re-entrant configuration. +#endif +#define ENTER_FF(fs) { if (!lock_fs(fs)) return FR_TIMEOUT; } +#define LEAVE_FF(fs, res) { unlock_fs(fs, res); return res; } + +#else +#define ENTER_FF(fs) +#define LEAVE_FF(fs, res) return res + +#endif + +#define ABORT(fs, res) { fp->flag |= FA__ERROR; LEAVE_FF(fs, res); } + + +/* Character code support macros */ +#define IsUpper(c) (((c)>='A')&&((c)<='Z')) +#define IsLower(c) (((c)>='a')&&((c)<='z')) +#define IsDigit(c) (((c)>='0')&&((c)<='9')) + +#if _DF1S /* Code page is DBCS */ + +#ifdef _DF2S /* Two 1st byte areas */ +#define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E)) +#else /* One 1st byte area */ +#define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) +#endif + +#ifdef _DS3S /* Three 2nd byte areas */ +#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E)) +#else /* Two 2nd byte areas */ +#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E)) +#endif + +#else /* Code page is SBCS */ + +#define IsDBCS1(c) 0 +#define IsDBCS2(c) 0 + +#endif /* _DF1S */ + + +/* Name status flags */ +#define NS 11 /* Offset of name status byte */ +#define NS_LOSS 0x01 /* Out of 8.3 format */ +#define NS_LFN 0x02 /* Force to create LFN entry */ +#define NS_LAST 0x04 /* Last segment */ +#define NS_BODY 0x08 /* Lower case flag (body) */ +#define NS_EXT 0x10 /* Lower case flag (ext) */ +#define NS_DOT 0x20 /* Dot entry */ + + + +/*------------------------------------------------------------*/ +/* Work area */ + +#if !_DRIVES +#error Number of drives must not be 0. +#endif +static +WORD Fsid; /* File system mount ID */ +static +FATFS *FatFs[_DRIVES]; /* Pointer to the file system objects (logical drives) */ + +#if _FS_RPATH +static +BYTE Drive; /* Current drive */ +#endif + + +#if _USE_LFN == 0 /* No LFN */ +#define DEF_NAMEBUF BYTE sfn[12] +#define INIT_BUF(dobj) (dobj).fn = sfn +#define FREE_BUF() + +#elif _USE_LFN == 1 /* LFN with static LFN working buffer */ +static WCHAR LfnBuf[_MAX_LFN + 1]; +#define DEF_NAMEBUF BYTE sfn[12] +#define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = LfnBuf; } +#define FREE_BUF() + +#elif _USE_LFN == 2 /* LFN with dynamic LFN working buffer on the stack */ +#define DEF_NAMEBUF BYTE sfn[12]; WCHAR lbuf[_MAX_LFN + 1] +#define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = lbuf; } +#define FREE_BUF() + +#elif _USE_LFN == 3 /* LFN with dynamic LFN working buffer on the heap */ +#define DEF_NAMEBUF BYTE sfn[12]; WCHAR *lfn +#define INIT_BUF(dobj) { lfn = ff_memalloc((_MAX_LFN + 1) * 2); \ + if (!lfn) LEAVE_FF((dobj).fs, FR_NOT_ENOUGH_CORE); \ + (dobj).lfn = lfn; (dobj).fn = sfn; } +#define FREE_BUF() ff_memfree(lfn) + +#else +#error Wrong LFN configuration. +#endif + + + + +/*-------------------------------------------------------------------------- + + Module Private Functions + +---------------------------------------------------------------------------*/ + + +/*-----------------------------------------------------------------------*/ +/* String functions */ +/*-----------------------------------------------------------------------*/ + +/* Copy memory to memory */ +static +void mem_cpy (void* dst, const void* src, int cnt) { + BYTE *d = (BYTE*)dst; + const BYTE *s = (const BYTE*)src; + +#if _WORD_ACCESS == 1 + while (cnt >= sizeof(int)) { + *(int*)d = *(int*)s; + d += sizeof(int); s += sizeof(int); + cnt -= sizeof(int); + } +#endif + while (cnt--) + *d++ = *s++; +} + +/* Fill memory */ +static +void mem_set (void* dst, int val, int cnt) { + BYTE *d = (BYTE*)dst; + + while (cnt--) + *d++ = (BYTE)val; +} + +/* Compare memory to memory */ +static +int mem_cmp (const void* dst, const void* src, int cnt) { + const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; + int r = 0; + + while (cnt-- && (r = *d++ - *s++) == 0) ; + return r; +} + +/* Check if chr is contained in the string */ +static +int chk_chr (const char* str, int chr) { + while (*str && *str != chr) str++; + return *str; +} + + + +/*-----------------------------------------------------------------------*/ +/* Request/Release grant to access the volume */ +/*-----------------------------------------------------------------------*/ +#if _FS_REENTRANT + +static +int lock_fs ( + FATFS *fs /* File system object */ +) +{ + return ff_req_grant(fs->sobj); +} + + +static +void unlock_fs ( + FATFS *fs, /* File system object */ + FRESULT res /* Result code to be returned */ +) +{ + if (res != FR_NOT_ENABLED && + res != FR_INVALID_DRIVE && + res != FR_INVALID_OBJECT && + res != FR_TIMEOUT) { + ff_rel_grant(fs->sobj); + } +} +#endif + + + +/*-----------------------------------------------------------------------*/ +/* File shareing control functions */ +/*-----------------------------------------------------------------------*/ +#if _FS_SHARE + +static +FRESULT chk_lock ( /* Check if the file can be accessed */ + DIR* dj, /* Directory object pointing the file to be checked */ + int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ +) +{ + UINT i, be; + + /* Search file semaphore table */ + for (i = be = 0; i < _FS_SHARE; i++) { + if (dj->fs->flsem[i].ctr) { /* Existing entry */ + if (dj->fs->flsem[i].clu == dj->sclust && /* The file is found (identified with its location) */ + dj->fs->flsem[i].idx == dj->index) break; + } else { /* Blank entry */ + be++; + } + } + if (i == _FS_SHARE) /* The file has not been opened */ + return (be || acc != 2) ? FR_OK : FR_TOO_MANY_OPEN_FILES; /* Is there a blank entry for new file? */ + + /* The file has been opened. Reject any open against writing file and all write mode open */ + return (acc || dj->fs->flsem[i].ctr == 0x100) ? FR_LOCKED : FR_OK; +} + + +static +int enq_lock ( /* Check if an entry is available for a new file */ + FATFS* fs /* File system object */ +) +{ + UINT i; + + for (i = 0; i < _FS_SHARE && fs->flsem[i].ctr; i++) ; + return (i == _FS_SHARE) ? 0 : 1; +} + + +static +UINT inc_lock ( /* Increment file open counter and returns its index (0:int error) */ + DIR* dj, /* Directory object pointing the file to register or increment */ + int acc /* Desired access mode (0:Read, !0:Write) */ +) +{ + UINT i; + + + for (i = 0; i < _FS_SHARE; i++) { /* Find the file */ + if (dj->fs->flsem[i].ctr && + dj->fs->flsem[i].clu == dj->sclust && + dj->fs->flsem[i].idx == dj->index) break; + } + + if (i == _FS_SHARE) { /* Not opened. Register it as new. */ + for (i = 0; i < _FS_SHARE && dj->fs->flsem[i].ctr; i++) ; + if (i == _FS_SHARE) return 0; /* No space to register (int err) */ + dj->fs->flsem[i].clu = dj->sclust; + dj->fs->flsem[i].idx = dj->index; + } + + if (acc && dj->fs->flsem[i].ctr) return 0; /* Access violation (int err) */ + + dj->fs->flsem[i].ctr = acc ? 0x100 : dj->fs->flsem[i].ctr + 1; /* Set semaphore value */ + + return i + 1; +} + + +static +FRESULT dec_lock ( /* Decrement file open counter */ + FATFS* fs, /* File system object */ + UINT i /* Semaphore index */ +) +{ + WORD n; + FRESULT res; + + + if (--i < _FS_SHARE) { + n = fs->flsem[i].ctr; + if (n >= 0x100) n = 0; + if (n) n--; + fs->flsem[i].ctr = n; + res = FR_OK; + } else { + res = FR_INT_ERR; + } + return res; +} + +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Change window offset */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT move_window ( + FATFS *fs, /* File system object */ + DWORD sector /* Sector number to make appearance in the fs->win[] */ +) /* Move to zero only writes back dirty window */ +{ + DWORD wsect; + + + wsect = fs->winsect; + if (wsect != sector) { /* Changed current window */ +#if !_FS_READONLY + if (fs->wflag) { /* Write back dirty window if needed */ + if (disk_write(fs->drv, fs->win, wsect, 1) != RES_OK) + return FR_DISK_ERR; + fs->wflag = 0; + if (wsect < (fs->fatbase + fs->fsize)) { /* In FAT area */ + BYTE nf; + for (nf = fs->n_fats; nf > 1; nf--) { /* Reflect the change to all FAT copies */ + wsect += fs->fsize; + disk_write(fs->drv, fs->win, wsect, 1); + } + } + } +#endif + if (sector) { + if (disk_read(fs->drv, fs->win, sector, 1) != RES_OK) + return FR_DISK_ERR; + fs->winsect = sector; + } + } + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Clean-up cached data */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY +static +FRESULT sync ( /* FR_OK: successful, FR_DISK_ERR: failed */ + FATFS *fs /* File system object */ +) +{ + FRESULT res; + + + res = move_window(fs, 0); + if (res == FR_OK) { + /* Update FSInfo sector if needed */ + if (fs->fs_type == FS_FAT32 && fs->fsi_flag) { + fs->winsect = 0; + mem_set(fs->win, 0, 512); + ST_WORD(fs->win+BS_55AA, 0xAA55); + ST_DWORD(fs->win+FSI_LeadSig, 0x41615252); + ST_DWORD(fs->win+FSI_StrucSig, 0x61417272); + ST_DWORD(fs->win+FSI_Free_Count, fs->free_clust); + ST_DWORD(fs->win+FSI_Nxt_Free, fs->last_clust); + disk_write(fs->drv, fs->win, fs->fsi_sector, 1); + fs->fsi_flag = 0; + } + /* Make sure that no pending write process in the physical drive */ + if (disk_ioctl(fs->drv, CTRL_SYNC, (void*)0) != RES_OK) + res = FR_DISK_ERR; + } + + return res; +} +#endif + + + + +/*-----------------------------------------------------------------------*/ +/* FAT access - Read value of a FAT entry */ +/*-----------------------------------------------------------------------*/ + + +DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, Else:Cluster status */ + FATFS *fs, /* File system object */ + DWORD clst /* Cluster# to get the link information */ +) +{ + UINT wc, bc; + BYTE *p; + + + if (clst < 2 || clst >= fs->n_fatent) /* Chack range */ + return 1; + + switch (fs->fs_type) { + case FS_FAT12 : + bc = (UINT)clst; bc += bc / 2; + if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; + wc = fs->win[bc % SS(fs)]; bc++; + if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; + wc |= fs->win[bc % SS(fs)] << 8; + return (clst & 1) ? (wc >> 4) : (wc & 0xFFF); + + case FS_FAT16 : + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2)))) break; + p = &fs->win[clst * 2 % SS(fs)]; + return LD_WORD(p); + + case FS_FAT32 : + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4)))) break; + p = &fs->win[clst * 4 % SS(fs)]; + return LD_DWORD(p) & 0x0FFFFFFF; + } + + return 0xFFFFFFFF; /* An error occurred at the disk I/O layer */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* FAT access - Change value of a FAT entry */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY + +FRESULT put_fat ( + FATFS *fs, /* File system object */ + DWORD clst, /* Cluster# to be changed in range of 2 to fs->n_fatent - 1 */ + DWORD val /* New value to mark the cluster */ +) +{ + UINT bc; + BYTE *p; + FRESULT res; + + + if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ + res = FR_INT_ERR; + + } else { + switch (fs->fs_type) { + case FS_FAT12 : + bc = clst; bc += bc / 2; + res = move_window(fs, fs->fatbase + (bc / SS(fs))); + if (res != FR_OK) break; + p = &fs->win[bc % SS(fs)]; + *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; + bc++; + fs->wflag = 1; + res = move_window(fs, fs->fatbase + (bc / SS(fs))); + if (res != FR_OK) break; + p = &fs->win[bc % SS(fs)]; + *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); + break; + + case FS_FAT16 : + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); + if (res != FR_OK) break; + p = &fs->win[clst * 2 % SS(fs)]; + ST_WORD(p, (WORD)val); + break; + + case FS_FAT32 : + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); + if (res != FR_OK) break; + p = &fs->win[clst * 4 % SS(fs)]; + val |= LD_DWORD(p) & 0xF0000000; + ST_DWORD(p, val); + break; + + default : + res = FR_INT_ERR; + } + fs->wflag = 1; + } + + return res; +} +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* FAT handling - Remove a cluster chain */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY +static +FRESULT remove_chain ( + FATFS *fs, /* File system object */ + DWORD clst /* Cluster# to remove a chain from */ +) +{ + FRESULT res; + DWORD nxt; + + + if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ + res = FR_INT_ERR; + + } else { + res = FR_OK; + while (clst < fs->n_fatent) { /* Not a last link? */ + nxt = get_fat(fs, clst); /* Get cluster status */ + if (nxt == 0) break; /* Empty cluster? */ + if (nxt == 1) { res = FR_INT_ERR; break; } /* Internal error? */ + if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ + res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ + if (res != FR_OK) break; + if (fs->free_clust != 0xFFFFFFFF) { /* Update FSInfo */ + fs->free_clust++; + fs->fsi_flag = 1; + } + clst = nxt; /* Next cluster */ + } + } + + return res; +} +#endif + + + + +/*-----------------------------------------------------------------------*/ +/* FAT handling - Stretch or Create a cluster chain */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY +static +DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */ + FATFS *fs, /* File system object */ + DWORD clst /* Cluster# to stretch. 0 means create a new chain. */ +) +{ + DWORD cs, ncl, scl; + + + if (clst == 0) { /* Create a new chain */ + scl = fs->last_clust; /* Get suggested start point */ + if (!scl || scl >= fs->n_fatent) scl = 1; + } + else { /* Stretch the current chain */ + cs = get_fat(fs, clst); /* Check the cluster status */ + if (cs < 2) return 1; /* It is an invalid cluster */ + if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ + scl = clst; + } + + ncl = scl; /* Start cluster */ + for (;;) { + ncl++; /* Next cluster */ + if (ncl >= fs->n_fatent) { /* Wrap around */ + ncl = 2; + if (ncl > scl) return 0; /* No free cluster */ + } + cs = get_fat(fs, ncl); /* Get the cluster status */ + if (cs == 0) break; /* Found a free cluster */ + if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */ + return cs; + if (ncl == scl) return 0; /* No free cluster */ + } + + if (put_fat(fs, ncl, 0x0FFFFFFF)) /* Mark the new cluster "last link" */ + return 0xFFFFFFFF; + if (clst != 0) { /* Link it to the previous one if needed */ + if (put_fat(fs, clst, ncl)) + return 0xFFFFFFFF; + } + + fs->last_clust = ncl; /* Update FSINFO */ + if (fs->free_clust != 0xFFFFFFFF) { + fs->free_clust--; + fs->fsi_flag = 1; + } + + return ncl; /* Return new cluster number */ +} +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Get sector# from cluster# */ +/*-----------------------------------------------------------------------*/ + + +DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */ + FATFS *fs, /* File system object */ + DWORD clst /* Cluster# to be converted */ +) +{ + clst -= 2; + if (clst >= (fs->n_fatent - 2)) return 0; /* Invalid cluster# */ + return clst * fs->csize + fs->database; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Set directory index */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT dir_sdi ( + DIR *dj, /* Pointer to directory object */ + WORD idx /* Directory index number */ +) +{ + DWORD clst; + WORD ic; + + + dj->index = idx; + clst = dj->sclust; + if (clst == 1 || clst >= dj->fs->n_fatent) /* Check start cluster range */ + return FR_INT_ERR; + if (!clst && dj->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ + clst = dj->fs->dirbase; + + if (clst == 0) { /* Static table */ + dj->clust = clst; + if (idx >= dj->fs->n_rootdir) /* Index is out of range */ + return FR_INT_ERR; + dj->sect = dj->fs->dirbase + idx / (SS(dj->fs) / 32); /* Sector# */ + } + else { /* Dynamic table */ + ic = SS(dj->fs) / 32 * dj->fs->csize; /* Entries per cluster */ + while (idx >= ic) { /* Follow cluster chain */ + clst = get_fat(dj->fs, clst); /* Get next cluster */ + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ + if (clst < 2 || clst >= dj->fs->n_fatent) /* Reached to end of table or int error */ + return FR_INT_ERR; + idx -= ic; + } + dj->clust = clst; + dj->sect = clust2sect(dj->fs, clst) + idx / (SS(dj->fs) / 32); /* Sector# */ + } + + dj->dir = dj->fs->win + (idx % (SS(dj->fs) / 32)) * 32; /* Ptr to the entry in the sector */ + + return FR_OK; /* Seek succeeded */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Move directory index next */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:EOT and could not stretch */ + DIR *dj, /* Pointer to directory object */ + int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ +) +{ + DWORD clst; + WORD i; + + + i = dj->index + 1; + if (!i || !dj->sect) /* Report EOT when index has reached 65535 */ + return FR_NO_FILE; + + if (!(i % (SS(dj->fs) / 32))) { /* Sector changed? */ + dj->sect++; /* Next sector */ + + if (dj->clust == 0) { /* Static table */ + if (i >= dj->fs->n_rootdir) /* Report EOT when end of table */ + return FR_NO_FILE; + } + else { /* Dynamic table */ + if (((i / (SS(dj->fs) / 32)) & (dj->fs->csize - 1)) == 0) { /* Cluster changed? */ + clst = get_fat(dj->fs, dj->clust); /* Get next cluster */ + if (clst <= 1) return FR_INT_ERR; + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; + if (clst >= dj->fs->n_fatent) { /* When it reached end of dynamic table */ +#if !_FS_READONLY + BYTE c; + if (!stretch) return FR_NO_FILE; /* When do not stretch, report EOT */ + clst = create_chain(dj->fs, dj->clust); /* Stretch cluster chain */ + if (clst == 0) return FR_DENIED; /* No free cluster */ + if (clst == 1) return FR_INT_ERR; + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; + /* Clean-up stretched table */ + if (move_window(dj->fs, 0)) return FR_DISK_ERR; /* Flush active window */ + mem_set(dj->fs->win, 0, SS(dj->fs)); /* Clear window buffer */ + dj->fs->winsect = clust2sect(dj->fs, clst); /* Cluster start sector */ + for (c = 0; c < dj->fs->csize; c++) { /* Fill the new cluster with 0 */ + dj->fs->wflag = 1; + if (move_window(dj->fs, 0)) return FR_DISK_ERR; + dj->fs->winsect++; + } + dj->fs->winsect -= c; /* Rewind window address */ +#else + return FR_NO_FILE; /* Report EOT */ +#endif + } + dj->clust = clst; /* Initialize data for new cluster */ + dj->sect = clust2sect(dj->fs, clst); + } + } + } + + dj->index = i; + dj->dir = dj->fs->win + (i % (SS(dj->fs) / 32)) * 32; + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* LFN handling - Test/Pick/Fit an LFN segment from/to directory entry */ +/*-----------------------------------------------------------------------*/ +#if _USE_LFN +static +const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* Offset of LFN chars in the directory entry */ + + +static +int cmp_lfn ( /* 1:Matched, 0:Not matched */ + WCHAR *lfnbuf, /* Pointer to the LFN to be compared */ + BYTE *dir /* Pointer to the directory entry containing a part of LFN */ +) +{ + int i, s; + WCHAR wc, uc; + + + i = ((dir[LDIR_Ord] & 0xBF) - 1) * 13; /* Get offset in the LFN buffer */ + s = 0; wc = 1; + do { + uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ + if (wc) { /* Last char has not been processed */ + wc = ff_wtoupper(uc); /* Convert it to upper case */ + if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */ + return 0; /* Not matched */ + } else { + if (uc != 0xFFFF) return 0; /* Check filler */ + } + } while (++s < 13); /* Repeat until all chars in the entry are checked */ + + if ((dir[LDIR_Ord] & 0x40) && wc && lfnbuf[i]) /* Last segment matched but different length */ + return 0; + + return 1; /* The part of LFN matched */ +} + + + +static +int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */ + WCHAR *lfnbuf, /* Pointer to the Unicode-LFN buffer */ + BYTE *dir /* Pointer to the directory entry */ +) +{ + int i, s; + WCHAR wc, uc; + + + i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */ + + s = 0; wc = 1; + do { + uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ + if (wc) { /* Last char has not been processed */ + if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ + lfnbuf[i++] = wc = uc; /* Store it */ + } else { + if (uc != 0xFFFF) return 0; /* Check filler */ + } + } while (++s < 13); /* Read all character in the entry */ + + if (dir[LDIR_Ord] & 0x40) { /* Put terminator if it is the last LFN part */ + if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ + lfnbuf[i] = 0; + } + + return 1; +} + + +#if !_FS_READONLY +static +void fit_lfn ( + const WCHAR *lfnbuf, /* Pointer to the LFN buffer */ + BYTE *dir, /* Pointer to the directory entry */ + BYTE ord, /* LFN order (1-20) */ + BYTE sum /* SFN sum */ +) +{ + int i, s; + WCHAR wc; + + + dir[LDIR_Chksum] = sum; /* Set check sum */ + dir[LDIR_Attr] = AM_LFN; /* Set attribute. LFN entry */ + dir[LDIR_Type] = 0; + ST_WORD(dir+LDIR_FstClusLO, 0); + + i = (ord - 1) * 13; /* Get offset in the LFN buffer */ + s = wc = 0; + do { + if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective char */ + ST_WORD(dir+LfnOfs[s], wc); /* Put it */ + if (!wc) wc = 0xFFFF; /* Padding chars following last char */ + } while (++s < 13); + if (wc == 0xFFFF || !lfnbuf[i]) ord |= 0x40; /* Bottom LFN part is the start of LFN sequence */ + dir[LDIR_Ord] = ord; /* Set the LFN order */ +} + +#endif +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Create numbered name */ +/*-----------------------------------------------------------------------*/ +#if _USE_LFN +void gen_numname ( + BYTE *dst, /* Pointer to generated SFN */ + const BYTE *src, /* Pointer to source SFN to be modified */ + const WCHAR *lfn, /* Pointer to LFN */ + WORD seq /* Sequence number */ +) +{ + BYTE ns[8], c; + int i, j; + + + mem_cpy(dst, src, 11); + + if (seq > 5) { /* On many collisions, generate a hash number instead of sequential number */ + do seq = (seq >> 1) + (seq << 15) + (WORD)*lfn++; while (*lfn); + } + + /* itoa */ + i = 7; + do { + c = (seq % 16) + '0'; + if (c > '9') c += 7; + ns[i--] = c; + seq /= 16; + } while (seq); + ns[i] = '~'; + + /* Append the number */ + for (j = 0; j < i && dst[j] != ' '; j++) { + if (IsDBCS1(dst[j])) { + if (j == i - 1) break; + j++; + } + } + do { + dst[j++] = (i < 8) ? ns[i++] : ' '; + } while (j < 8); +} +#endif + + + + +/*-----------------------------------------------------------------------*/ +/* Calculate sum of an SFN */ +/*-----------------------------------------------------------------------*/ +#if _USE_LFN +static +BYTE sum_sfn ( + const BYTE *dir /* Ptr to directory entry */ +) +{ + BYTE sum = 0; + int n = 11; + + do sum = (sum >> 1) + (sum << 7) + *dir++; while (--n); + return sum; +} +#endif + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Find an object in the directory */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT dir_find ( + DIR *dj /* Pointer to the directory object linked to the file name */ +) +{ + FRESULT res; + BYTE c, *dir; +#if _USE_LFN + BYTE a, ord, sum; +#endif + + res = dir_sdi(dj, 0); /* Rewind directory object */ + if (res != FR_OK) return res; + +#if _USE_LFN + ord = sum = 0xFF; +#endif + do { + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + dir = dj->dir; /* Ptr to the directory entry of current index */ + c = dir[DIR_Name]; + if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ +#if _USE_LFN /* LFN configuration */ + a = dir[DIR_Attr] & AM_MASK; + if (c == 0xE5 || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ + ord = 0xFF; + } else { + if (a == AM_LFN) { /* An LFN entry is found */ + if (dj->lfn) { + if (c & 0x40) { /* Is it start of LFN sequence? */ + sum = dir[LDIR_Chksum]; + c &= 0xBF; ord = c; /* LFN start order */ + dj->lfn_idx = dj->index; + } + /* Check validity of the LFN entry and compare it with given name */ + ord = (c == ord && sum == dir[LDIR_Chksum] && cmp_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF; + } + } else { /* An SFN entry is found */ + if (!ord && sum == sum_sfn(dir)) break; /* LFN matched? */ + ord = 0xFF; dj->lfn_idx = 0xFFFF; /* Reset LFN sequence */ + if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break; /* SFN matched? */ + } + } +#else /* Non LFN configuration */ + if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dj->fn, 11)) /* Is it a valid entry? */ + break; +#endif + res = dir_next(dj, 0); /* Next entry */ + } while (res == FR_OK); + + return res; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read an object from the directory */ +/*-----------------------------------------------------------------------*/ +#if _FS_MINIMIZE <= 1 +static +FRESULT dir_read ( + DIR *dj /* Pointer to the directory object that pointing the entry to be read */ +) +{ + FRESULT res; + BYTE c, *dir; +#if _USE_LFN + BYTE a, ord = 0xFF, sum = 0xFF; +#endif + + res = FR_NO_FILE; + while (dj->sect) { + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + dir = dj->dir; /* Ptr to the directory entry of current index */ + c = dir[DIR_Name]; + if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ +#if _USE_LFN /* LFN configuration */ + a = dir[DIR_Attr] & AM_MASK; + if (c == 0xE5 || (!_FS_RPATH && c == '.') || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ + ord = 0xFF; + } else { + if (a == AM_LFN) { /* An LFN entry is found */ + if (c & 0x40) { /* Is it start of LFN sequence? */ + sum = dir[LDIR_Chksum]; + c &= 0xBF; ord = c; + dj->lfn_idx = dj->index; + } + /* Check LFN validity and capture it */ + ord = (c == ord && sum == dir[LDIR_Chksum] && pick_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF; + } else { /* An SFN entry is found */ + if (ord || sum != sum_sfn(dir)) /* Is there a valid LFN? */ + dj->lfn_idx = 0xFFFF; /* It has no LFN. */ + break; + } + } +#else /* Non LFN configuration */ + if (c != 0xE5 && (_FS_RPATH || c != '.') && !(dir[DIR_Attr] & AM_VOL)) /* Is it a valid entry? */ + break; +#endif + res = dir_next(dj, 0); /* Next entry */ + if (res != FR_OK) break; + } + + if (res != FR_OK) dj->sect = 0; + + return res; +} +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Register an object to the directory */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY +static +FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */ + DIR *dj /* Target directory with object name to be created */ +) +{ + FRESULT res; + BYTE c, *dir; +#if _USE_LFN /* LFN configuration */ + WORD n, ne, is; + BYTE sn[12], *fn, sum; + WCHAR *lfn; + + + fn = dj->fn; lfn = dj->lfn; + mem_cpy(sn, fn, 12); + + if (_FS_RPATH && (sn[NS] & NS_DOT)) return FR_INVALID_NAME; /* Cannot create dot entry */ + + if (sn[NS] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ + fn[NS] = 0; dj->lfn = 0; /* Find only SFN */ + for (n = 1; n < 100; n++) { + gen_numname(fn, sn, lfn, n); /* Generate a numbered name */ + res = dir_find(dj); /* Check if the name collides with existing SFN */ + if (res != FR_OK) break; + } + if (n == 100) return FR_DENIED; /* Abort if too many collisions */ + if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ + fn[NS] = sn[NS]; dj->lfn = lfn; + } + + if (sn[NS] & NS_LFN) { /* When LFN is to be created, reserve an SFN + LFN entries. */ + for (ne = 0; lfn[ne]; ne++) ; + ne = (ne + 25) / 13; + } else { /* Otherwise reserve only an SFN entry. */ + ne = 1; + } + + /* Reserve contiguous entries */ + res = dir_sdi(dj, 0); + if (res != FR_OK) return res; + n = is = 0; + do { + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + c = *dj->dir; /* Check the entry status */ + if (c == 0xE5 || c == 0) { /* Is it a blank entry? */ + if (n == 0) is = dj->index; /* First index of the contiguous entry */ + if (++n == ne) break; /* A contiguous entry that required count is found */ + } else { + n = 0; /* Not a blank entry. Restart to search */ + } + res = dir_next(dj, 1); /* Next entry with table stretch */ + } while (res == FR_OK); + + if (res == FR_OK && ne > 1) { /* Initialize LFN entry if needed */ + res = dir_sdi(dj, is); + if (res == FR_OK) { + sum = sum_sfn(dj->fn); /* Sum of the SFN tied to the LFN */ + ne--; + do { /* Store LFN entries in bottom first */ + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + fit_lfn(dj->lfn, dj->dir, (BYTE)ne, sum); + dj->fs->wflag = 1; + res = dir_next(dj, 0); /* Next entry */ + } while (res == FR_OK && --ne); + } + } + +#else /* Non LFN configuration */ + res = dir_sdi(dj, 0); + if (res == FR_OK) { + do { /* Find a blank entry for the SFN */ + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + c = *dj->dir; + if (c == 0xE5 || c == 0) break; /* Is it a blank entry? */ + res = dir_next(dj, 1); /* Next entry with table stretch */ + } while (res == FR_OK); + } +#endif + + if (res == FR_OK) { /* Initialize the SFN entry */ + res = move_window(dj->fs, dj->sect); + if (res == FR_OK) { + dir = dj->dir; + mem_set(dir, 0, 32); /* Clean the entry */ + mem_cpy(dir, dj->fn, 11); /* Put SFN */ +#if _USE_LFN + dir[DIR_NTres] = *(dj->fn+NS) & (NS_BODY | NS_EXT); /* Put NT flag */ +#endif + dj->fs->wflag = 1; + } + } + + return res; +} +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Remove an object from the directory */ +/*-----------------------------------------------------------------------*/ +#if !_FS_READONLY && !_FS_MINIMIZE +static +FRESULT dir_remove ( /* FR_OK: Successful, FR_DISK_ERR: A disk error */ + DIR *dj /* Directory object pointing the entry to be removed */ +) +{ + FRESULT res; +#if _USE_LFN /* LFN configuration */ + WORD i; + + i = dj->index; /* SFN index */ + res = dir_sdi(dj, (WORD)((dj->lfn_idx == 0xFFFF) ? i : dj->lfn_idx)); /* Goto the SFN or top of the LFN entries */ + if (res == FR_OK) { + do { + res = move_window(dj->fs, dj->sect); + if (res != FR_OK) break; + *dj->dir = 0xE5; /* Mark the entry "deleted" */ + dj->fs->wflag = 1; + if (dj->index >= i) break; /* When reached SFN, all entries of the object has been deleted. */ + res = dir_next(dj, 0); /* Next entry */ + } while (res == FR_OK); + if (res == FR_NO_FILE) res = FR_INT_ERR; + } + +#else /* Non LFN configuration */ + res = dir_sdi(dj, dj->index); + if (res == FR_OK) { + res = move_window(dj->fs, dj->sect); + if (res == FR_OK) { + *dj->dir = 0xE5; /* Mark the entry "deleted" */ + dj->fs->wflag = 1; + } + } +#endif + + return res; +} +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Pick a segment and create the object name in directory form */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT create_name ( + DIR *dj, /* Pointer to the directory object */ + const TCHAR **path /* Pointer to pointer to the segment in the path string */ +) +{ +#ifdef _EXCVT + static const BYTE excvt[] = _EXCVT; /* Upper conversion table for extended chars */ +#endif + +#if _USE_LFN /* LFN configuration */ + BYTE b, cf; + WCHAR w, *lfn; + int i, ni, si, di; + const TCHAR *p; + + /* Create LFN in Unicode */ + si = di = 0; + p = *path; + lfn = dj->lfn; + for (;;) { + w = p[si++]; /* Get a character */ + if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ + if (di >= _MAX_LFN) /* Reject too long name */ + return FR_INVALID_NAME; +#if !_LFN_UNICODE + w &= 0xFF; + if (IsDBCS1(w)) { /* If it is a DBC 1st byte */ + b = p[si++]; /* Get 2nd byte */ + if (!IsDBCS2(b)) /* Reject invalid code for DBC */ + return FR_INVALID_NAME; + w = (w << 8) + b; + } + w = ff_convert(w, 1); /* Convert OEM to Unicode */ + if (!w) return FR_INVALID_NAME; /* Reject invalid code */ +#endif + if (w < 0x80 && chk_chr("\"*:<>\?|\x7F", w)) /* Reject illegal chars for LFN */ + return FR_INVALID_NAME; + lfn[di++] = w; /* Store the Unicode char */ + } + *path = &p[si]; /* Return pointer to the next segment */ + cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ +#if _FS_RPATH + if ((di == 1 && lfn[di - 1] == '.') || /* Is this a dot entry? */ + (di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) { + lfn[di] = 0; + for (i = 0; i < 11; i++) + dj->fn[i] = (i < di) ? '.' : ' '; + dj->fn[i] = cf | NS_DOT; /* This is a dot entry */ + return FR_OK; + } +#endif + while (di) { /* Strip trailing spaces and dots */ + w = lfn[di - 1]; + if (w != ' ' && w != '.') break; + di--; + } + if (!di) return FR_INVALID_NAME; /* Reject nul string */ + + lfn[di] = 0; /* LFN is created */ + + /* Create SFN in directory form */ + mem_set(dj->fn, ' ', 11); + for (si = 0; lfn[si] == ' ' || lfn[si] == '.'; si++) ; /* Strip leading spaces and dots */ + if (si) cf |= NS_LOSS | NS_LFN; + while (di && lfn[di - 1] != '.') di--; /* Find extension (di<=si: no extension) */ + + b = i = 0; ni = 8; + for (;;) { + w = lfn[si++]; /* Get an LFN char */ + if (!w) break; /* Break on end of the LFN */ + if (w == ' ' || (w == '.' && si != di)) { /* Remove spaces and dots */ + cf |= NS_LOSS | NS_LFN; continue; + } + + if (i >= ni || si == di) { /* Extension or end of SFN */ + if (ni == 11) { /* Long extension */ + cf |= NS_LOSS | NS_LFN; break; + } + if (si != di) cf |= NS_LOSS | NS_LFN; /* Out of 8.3 format */ + if (si > di) break; /* No extension */ + si = di; i = 8; ni = 11; /* Enter extension section */ + b <<= 2; continue; + } + + if (w >= 0x80) { /* Non ASCII char */ +#ifdef _EXCVT + w = ff_convert(w, 0); /* Unicode -> OEM code */ + if (w) w = excvt[w - 0x80]; /* Convert extended char to upper (SBCS) */ +#else + w = ff_convert(ff_wtoupper(w), 0); /* Upper converted Unicode -> OEM code */ +#endif + cf |= NS_LFN; /* Force create LFN entry */ + } + + if (_DF1S && w >= 0x100) { /* Double byte char */ + if (i >= ni - 1) { + cf |= NS_LOSS | NS_LFN; i = ni; continue; + } + dj->fn[i++] = (BYTE)(w >> 8); + } else { /* Single byte char */ + if (!w || chk_chr("+,;=[]", w)) { /* Replace illegal chars for SFN */ + w = '_'; cf |= NS_LOSS | NS_LFN; /* Lossy conversion */ + } else { + if (IsUpper(w)) { /* ASCII large capital */ + b |= 2; + } else { + if (IsLower(w)) { /* ASCII small capital */ + b |= 1; w -= 0x20; + } + } + } + } + dj->fn[i++] = (BYTE)w; + } + + if (dj->fn[0] == 0xE5) dj->fn[0] = 0x05; /* If the first char collides with deleted mark, replace it with 0x05 */ + + if (ni == 8) b <<= 2; + if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */ + cf |= NS_LFN; + if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended char, NT flags are created */ + if ((b & 0x03) == 0x01) cf |= NS_EXT; /* NT flag (Extension has only small capital) */ + if ((b & 0x0C) == 0x04) cf |= NS_BODY; /* NT flag (Filename has only small capital) */ + } + + dj->fn[NS] = cf; /* SFN is created */ + + return FR_OK; + + +#else /* Non-LFN configuration */ + BYTE b, c, d, *sfn; + int ni, si, i; + const char *p; + + /* Create file name in directory form */ + sfn = dj->fn; + mem_set(sfn, ' ', 11); + si = i = b = 0; ni = 8; + p = *path; +#if _FS_RPATH + if (p[si] == '.') { /* Is this a dot entry? */ + for (;;) { + c = (BYTE)p[si++]; + if (c != '.' || si >= 3) break; + sfn[i++] = c; + } + if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME; + *path = &p[si]; /* Return pointer to the next segment */ + sfn[NS] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */ + return FR_OK; + } +#endif + for (;;) { + c = (BYTE)p[si++]; + if (c <= ' ' || c == '/' || c == '\\') break; /* Break on end of segment */ + if (c == '.' || i >= ni) { + if (ni != 8 || c != '.') return FR_INVALID_NAME; + i = 8; ni = 11; + b <<= 2; continue; + } + if (c >= 0x80) { /* Extended char */ +#ifdef _EXCVT + c = excvt[c - 0x80]; /* Convert extend char (SBCS) */ +#else + b |= 3; /* Eliminate NT flag if extended char is exist */ +#if !_DF1S /* ASCII only cfg */ + return FR_INVALID_NAME; +#endif +#endif + } + if (IsDBCS1(c)) { /* DBC 1st byte? */ + d = (BYTE)p[si++]; /* Get 2nd byte */ + if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */ + return FR_INVALID_NAME; + sfn[i++] = c; + sfn[i++] = d; + } else { /* Single byte code */ + if (chk_chr("\"*+,:<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */ + return FR_INVALID_NAME; + if (IsUpper(c)) { /* ASCII large capital? */ + b |= 2; + } else { + if (IsLower(c)) { /* ASCII small capital? */ + b |= 1; c -= 0x20; + } + } + sfn[i++] = c; + } + } + *path = &p[si]; /* Return pointer to the next segment */ + c = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ + + if (!i) return FR_INVALID_NAME; /* Reject nul string */ + if (sfn[0] == 0xE5) sfn[0] = 0x05; /* When first char collides with 0xE5, replace it with 0x05 */ + + if (ni == 8) b <<= 2; + if ((b & 0x03) == 0x01) c |= NS_EXT; /* NT flag (Name extension has only small capital) */ + if ((b & 0x0C) == 0x04) c |= NS_BODY; /* NT flag (Name body has only small capital) */ + + sfn[NS] = c; /* Store NT flag, File name is created */ + + return FR_OK; +#endif +} + + + + +/*-----------------------------------------------------------------------*/ +/* Get file information from directory entry */ +/*-----------------------------------------------------------------------*/ +#if _FS_MINIMIZE <= 1 +static +void get_fileinfo ( /* No return code */ + DIR *dj, /* Pointer to the directory object */ + FILINFO *fno /* Pointer to the file information to be filled */ +) +{ + int i; + BYTE nt, *dir; + TCHAR *p, c; + + + p = fno->fname; + if (dj->sect) { + dir = dj->dir; + nt = dir[DIR_NTres]; /* NT flag */ + for (i = 0; i < 8; i++) { /* Copy name body */ + c = dir[i]; + if (c == ' ') break; + if (c == 0x05) c = (TCHAR)0xE5; + if (_USE_LFN && (nt & NS_BODY) && IsUpper(c)) c += 0x20; +#if _LFN_UNICODE + if (IsDBCS1(c) && i < 7 && IsDBCS2(dir[i + 1])) + c = (c << 8) | dir[++i]; + c = ff_convert(c, 1); + if (!c) c = '?'; +#endif + *p++ = c; + } + if (dir[8] != ' ') { /* Copy name extension */ + *p++ = '.'; + for (i = 8; i < 11; i++) { + c = dir[i]; + if (c == ' ') break; + if (_USE_LFN && (nt & NS_EXT) && IsUpper(c)) c += 0x20; +#if _LFN_UNICODE + if (IsDBCS1(c) && i < 10 && IsDBCS2(dir[i + 1])) + c = (c << 8) | dir[++i]; + c = ff_convert(c, 1); + if (!c) c = '?'; +#endif + *p++ = c; + } + } + fno->fattrib = dir[DIR_Attr]; /* Attribute */ + fno->fsize = LD_DWORD(dir+DIR_FileSize); /* Size */ + fno->fdate = LD_WORD(dir+DIR_WrtDate); /* Date */ + fno->ftime = LD_WORD(dir+DIR_WrtTime); /* Time */ + } + *p = 0; + +#if _USE_LFN + if (fno->lfname) { + TCHAR *tp = fno->lfname; + WCHAR w, *lfn; + + i = 0; + if (dj->sect && dj->lfn_idx != 0xFFFF) {/* Get LFN if available */ + lfn = dj->lfn; + while ((w = *lfn++) != 0) { /* Get an LFN char */ +#if !_LFN_UNICODE + w = ff_convert(w, 0); /* Unicode -> OEM conversion */ + if (!w) { i = 0; break; } /* Could not convert, no LFN */ + if (_DF1S && w >= 0x100) /* Put 1st byte if it is a DBC */ + tp[i++] = (TCHAR)(w >> 8); +#endif + if (i >= fno->lfsize - 1) { i = 0; break; } /* Buffer overrun, no LFN */ + tp[i++] = (TCHAR)w; + } + } + tp[i] = 0; /* Terminator */ + } +#endif +} +#endif /* _FS_MINIMIZE <= 1 */ + + + + +/*-----------------------------------------------------------------------*/ +/* Follow a file path */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ + DIR *dj, /* Directory object to return last directory and found object */ + const TCHAR *path /* Full-path string to find a file or directory */ +) +{ + FRESULT res; + BYTE *dir, ns; + + +#if _FS_RPATH + if (*path == '/' || *path == '\\') { /* There is a heading separator */ + path++; dj->sclust = 0; /* Strip it and start from the root dir */ + } else { /* No heading separator */ + dj->sclust = dj->fs->cdir; /* Start from the current dir */ + } +#else + if (*path == '/' || *path == '\\') /* Strip heading separator if exist */ + path++; + dj->sclust = 0; /* Start from the root dir */ +#endif + + if ((UINT)*path < ' ') { /* Nul path means the start directory itself */ + res = dir_sdi(dj, 0); + dj->dir = 0; + + } else { /* Follow path */ + for (;;) { + res = create_name(dj, &path); /* Get a segment */ + if (res != FR_OK) break; + res = dir_find(dj); /* Find it */ + ns = *(dj->fn+NS); + if (res != FR_OK) { /* Failed to find the object */ + if (res != FR_NO_FILE) break; /* Abort if any hard error occured */ + /* Object not found */ + if (_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exit */ + dj->sclust = 0; dj->dir = 0; /* It is the root dir */ + res = FR_OK; + if (!(ns & NS_LAST)) continue; + } else { /* Could not find the object */ + if (!(ns & NS_LAST)) res = FR_NO_PATH; + } + break; + } + if (ns & NS_LAST) break; /* Last segment match. Function completed. */ + dir = dj->dir; /* There is next segment. Follow the sub directory */ + if (!(dir[DIR_Attr] & AM_DIR)) { /* Cannot follow because it is a file */ + res = FR_NO_PATH; break; + } + dj->sclust = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + } + } + + return res; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Load boot record and check if it is an FAT boot record */ +/*-----------------------------------------------------------------------*/ + +static +BYTE check_fs ( /* 0:The FAT BR, 1:Valid BR but not an FAT, 2:Not a BR, 3:Disk error */ + FATFS *fs, /* File system object */ + DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ +) +{ + if (disk_read(fs->drv, fs->win, sect, 1) != RES_OK) /* Load boot record */ + return 3; + if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check record signature (always placed at offset 510 even if the sector size is >512) */ + return 2; + + if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ + return 0; + if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) + return 0; + + return 1; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Make sure that the file system is valid */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT chk_mounted ( /* FR_OK(0): successful, !=0: any error occurred */ + const TCHAR **path, /* Pointer to pointer to the path name (drive number) */ + FATFS **rfs, /* Pointer to pointer to the found file system object */ + BYTE chk_wp /* !=0: Check media write protection for write access */ +) +{ + BYTE fmt, b, *tbl; + UINT vol; + DSTATUS stat; + DWORD bsect, fasize, tsect, sysect, nclst, szbfat; + WORD nrsv; + const TCHAR *p = *path; + FATFS *fs; + + /* Get logical drive number from the path name */ + vol = p[0] - '0'; /* Is there a drive number? */ + if (vol <= 9 && p[1] == ':') { /* Found a drive number, get and strip it */ + p += 2; *path = p; /* Return pointer to the path name */ + } else { /* No drive number is given */ +#if _FS_RPATH + vol = Drive; /* Use current drive */ +#else + vol = 0; /* Use drive 0 */ +#endif + } + + /* Check if the logical drive is valid or not */ + if (vol >= _DRIVES) /* Is the drive number valid? */ + return FR_INVALID_DRIVE; + *rfs = fs = FatFs[vol]; /* Return pointer to the corresponding file system object */ + if (!fs) return FR_NOT_ENABLED; /* Is the file system object available? */ + + ENTER_FF(fs); /* Lock file system */ + + if (fs->fs_type) { /* If the logical drive has been mounted */ + stat = disk_status(fs->drv); + if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized (has not been changed), */ +#if !_FS_READONLY + if (chk_wp && (stat & STA_PROTECT)) /* Check write protection if needed */ + return FR_WRITE_PROTECTED; +#endif + return FR_OK; /* The file system object is valid */ + } + } + + /* The logical drive must be mounted. Following code attempts to mount the volume (initialize the file system object) */ + + fs->fs_type = 0; /* Clear the file system object */ + fs->drv = (BYTE)LD2PD(vol); /* Bind the logical drive and a physical drive */ + stat = disk_initialize(fs->drv); /* Initialize low level disk I/O layer */ + if (stat & STA_NOINIT) /* Check if the drive is ready */ + return FR_NOT_READY; +#if _MAX_SS != 512 /* Get disk sector size if needed */ + if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > _MAX_SS) + return FR_NO_FILESYSTEM; +#endif +#if !_FS_READONLY + if (chk_wp && (stat & STA_PROTECT)) /* Check disk write protection if needed */ + return FR_WRITE_PROTECTED; +#endif + /* Search FAT partition on the drive (Supports only generic partitionings, FDISK and SFD) */ + fmt = check_fs(fs, bsect = 0); /* Check sector 0 if it is a VBR */ + if (fmt == 1) { /* Not an FAT-VBR, the disk may be partitioned */ + /* Check the partition listed in top of the partition table */ + tbl = &fs->win[MBR_Table + LD2PT(vol) * 16]; /* Partition table */ + if (tbl[4]) { /* Is the partition existing? */ + bsect = LD_DWORD(&tbl[8]); /* Partition offset in LBA */ + fmt = check_fs(fs, bsect); /* Check the partition */ + } + } + if (fmt == 3) return FR_DISK_ERR; + if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ + + /* Following code initializes the file system object */ + + if (LD_WORD(fs->win+BPB_BytsPerSec) != SS(fs)) /* (BPB_BytsPerSec must be equal to the physical sector size) */ + return FR_NO_FILESYSTEM; + + fasize = LD_WORD(fs->win+BPB_FATSz16); /* Number of sectors per FAT */ + if (!fasize) fasize = LD_DWORD(fs->win+BPB_FATSz32); + fs->fsize = fasize; + + fs->n_fats = b = fs->win[BPB_NumFATs]; /* Number of FAT copies */ + if (b != 1 && b != 2) return FR_NO_FILESYSTEM; /* (Must be 1 or 2) */ + fasize *= b; /* Number of sectors for FAT area */ + + fs->csize = b = fs->win[BPB_SecPerClus]; /* Number of sectors per cluster */ + if (!b || (b & (b - 1))) return FR_NO_FILESYSTEM; /* (Must be 1,2,4...128) */ + + fs->n_rootdir = LD_WORD(fs->win+BPB_RootEntCnt); /* Number of root directory entries */ + if (fs->n_rootdir % (SS(fs) / 32)) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be sector aligned) */ + + tsect = LD_WORD(fs->win+BPB_TotSec16); /* Number of sectors on the volume */ + if (!tsect) tsect = LD_DWORD(fs->win+BPB_TotSec32); + + nrsv = LD_WORD(fs->win+BPB_RsvdSecCnt); /* Number of reserved sectors */ + if (!nrsv) return FR_NO_FILESYSTEM; /* (BPB_RsvdSecCnt must not be 0) */ + + /* Determine the FAT sub type */ + sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / 32); /* RSV+FAT+DIR */ + if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ + if (!nclst) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + fmt = FS_FAT12; + if (nclst >= MIN_FAT16) fmt = FS_FAT16; + if (nclst >= MIN_FAT32) fmt = FS_FAT32; + + /* Boundaries and Limits */ + fs->n_fatent = nclst + 2; /* Number of FAT entries */ + fs->database = bsect + sysect; /* Data start sector */ + fs->fatbase = bsect + nrsv; /* FAT start sector */ + if (fmt == FS_FAT32) { + if (fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ + fs->dirbase = LD_DWORD(fs->win+BPB_RootClus); /* Root directory start cluster */ + szbfat = fs->n_fatent * 4; /* (Required FAT size) */ + } else { + if (!fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ + fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ + szbfat = (fmt == FS_FAT16) ? /* (Required FAT size) */ + fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); + } + if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) /* (FAT size must not be less than FAT sectors */ + return FR_NO_FILESYSTEM; + +#if !_FS_READONLY + /* Initialize cluster allocation information */ + fs->free_clust = 0xFFFFFFFF; + fs->last_clust = 0; + + /* Get fsinfo if available */ + if (fmt == FS_FAT32) { + fs->fsi_flag = 0; + fs->fsi_sector = bsect + LD_WORD(fs->win+BPB_FSInfo); + if (disk_read(fs->drv, fs->win, fs->fsi_sector, 1) == RES_OK && + LD_WORD(fs->win+BS_55AA) == 0xAA55 && + LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 && + LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) { + fs->last_clust = LD_DWORD(fs->win+FSI_Nxt_Free); + fs->free_clust = LD_DWORD(fs->win+FSI_Free_Count); + } + } +#endif + fs->fs_type = fmt; /* FAT sub-type */ + fs->id = ++Fsid; /* File system mount ID */ + fs->winsect = 0; /* Invalidate sector cache */ + fs->wflag = 0; +#if _FS_RPATH + fs->cdir = 0; /* Current directory (root dir) */ +#endif +#if _FS_SHARE /* Clear file lock semaphores */ + for (vol = 0; vol < _FS_SHARE; vol++) + fs->flsem[vol].ctr = 0; +#endif + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Check if the file/dir object is valid or not */ +/*-----------------------------------------------------------------------*/ + +static +FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */ + FATFS *fs, /* Pointer to the file system object */ + WORD id /* Member id of the target object to be checked */ +) +{ + if (!fs || !fs->fs_type || fs->id != id) + return FR_INVALID_OBJECT; + + ENTER_FF(fs); /* Lock file system */ + + if (disk_status(fs->drv) & STA_NOINIT) + return FR_NOT_READY; + + return FR_OK; +} + + + + +/*-------------------------------------------------------------------------- + + Public Functions + +--------------------------------------------------------------------------*/ + + + +/*-----------------------------------------------------------------------*/ +/* Mount/Unmount a Logical Drive */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_mount ( + BYTE vol, /* Logical drive number to be mounted/unmounted */ + FATFS *fs /* Pointer to new file system object (NULL for unmount)*/ +) +{ + FATFS *rfs; + + + if (vol >= _DRIVES) /* Check if the drive number is valid */ + return FR_INVALID_DRIVE; + rfs = FatFs[vol]; /* Get current fs object */ + + if (rfs) { +#if _FS_REENTRANT /* Discard sync object of the current volume */ + if (!ff_del_syncobj(rfs->sobj)) return FR_INT_ERR; +#endif + rfs->fs_type = 0; /* Clear old fs object */ + } + + if (fs) { + fs->fs_type = 0; /* Clear new fs object */ +#if _FS_REENTRANT /* Create sync object for the new volume */ + if (!ff_cre_syncobj(vol, &fs->sobj)) return FR_INT_ERR; +#endif + } + FatFs[vol] = fs; /* Register new fs object */ + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Open or Create a File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_open ( + FIL *fp, /* Pointer to the blank file object */ + const TCHAR *path, /* Pointer to the file name */ + BYTE mode /* Access mode and file open mode flags */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir; + DEF_NAMEBUF; + + + fp->fs = 0; /* Clear file object */ + +#if !_FS_READONLY + mode &= FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW; + res = chk_mounted(&path, &dj.fs, (BYTE)(mode & ~FA_READ)); +#else + mode &= FA_READ; + res = chk_mounted(&path, &dj.fs, 0); +#endif + INIT_BUF(dj); + if (res == FR_OK) + res = follow_path(&dj, path); /* Follow the file path */ + dir = dj.dir; + +#if !_FS_READONLY /* R/W configuration */ + if (res == FR_OK) { + if (!dir) /* Current dir itself */ + res = FR_INVALID_NAME; +#if _FS_SHARE + else + res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); +#endif + } + /* Create or Open a file */ + if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { + DWORD dw, cl; + + if (res != FR_OK) { /* No file, create new */ + if (res == FR_NO_FILE) /* There is no file to open, create a new entry */ +#if _FS_SHARE + res = enq_lock(dj.fs) ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; +#else + res = dir_register(&dj); +#endif + mode |= FA_CREATE_ALWAYS; + dir = dj.dir; /* New entry */ + } + else { /* Any object is already existing */ + if (mode & FA_CREATE_NEW) { /* Cannot create new */ + res = FR_EXIST; + } else { + if (dir[DIR_Attr] & (AM_RDO | AM_DIR)) /* Cannot overwrite it (R/O or DIR) */ + res = FR_DENIED; + } + } + if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ + dw = get_fattime(); /* Created time */ + ST_DWORD(dir+DIR_CrtTime, dw); + dir[DIR_Attr] = 0; /* Reset attribute */ + ST_DWORD(dir+DIR_FileSize, 0); /* size = 0 */ + cl = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); /* Get start cluster */ + ST_WORD(dir+DIR_FstClusHI, 0); /* cluster = 0 */ + ST_WORD(dir+DIR_FstClusLO, 0); + dj.fs->wflag = 1; + if (cl) { /* Remove the cluster chain if exist */ + dw = dj.fs->winsect; + res = remove_chain(dj.fs, cl); + if (res == FR_OK) { + dj.fs->last_clust = cl - 1; /* Reuse the cluster hole */ + res = move_window(dj.fs, dw); + } + } + } + } + else { /* Open an existing file */ + if (res == FR_OK) { /* Follow succeeded */ + if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */ + res = FR_NO_FILE; + } else { + if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ + res = FR_DENIED; + } + } + } + if (res == FR_OK) { + if (mode & (FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) + mode |= FA__WRITTEN; /* Set file changed flag */ + fp->dir_sect = dj.fs->winsect; /* Pointer to the directory entry */ + fp->dir_ptr = dir; +#if _FS_SHARE + fp->lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); + if (!fp->lockid) res = FR_INT_ERR; +#endif + } + +#else /* R/O configuration */ + if (res == FR_OK) { /* Follow succeeded */ + if (!dir) { /* Current dir itself */ + res = FR_INVALID_NAME; + } else { + if (dir[DIR_Attr] & AM_DIR) /* It is a directory */ + res = FR_NO_FILE; + } + } +#endif + FREE_BUF(); + + if (res == FR_OK) { + fp->flag = mode; /* File access mode */ + fp->org_clust = /* File start cluster */ + ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + fp->fsize = LD_DWORD(dir+DIR_FileSize); /* File size */ + fp->fptr = 0; /* File pointer */ + fp->dsect = 0; +#if _USE_FASTSEEK + fp->cltbl = 0; /* No cluster link map table */ +#endif + fp->fs = dj.fs; fp->id = dj.fs->id; /* Validate file object */ + } + + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_read ( + FIL *fp, /* Pointer to the file object */ + void *buff, /* Pointer to data buffer */ + UINT btr, /* Number of bytes to read */ + UINT *br /* Pointer to number of bytes read */ +) +{ + FRESULT res; + DWORD clst, sect, remain; + UINT rcnt, cc; + BYTE csect, *rbuff = buff; + + + *br = 0; /* Initialize byte counter */ + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res != FR_OK) LEAVE_FF(fp->fs, res); + if (fp->flag & FA__ERROR) /* Check abort flag */ + LEAVE_FF(fp->fs, FR_INT_ERR); + if (!(fp->flag & FA_READ)) /* Check access mode */ + LEAVE_FF(fp->fs, FR_DENIED); + remain = fp->fsize - fp->fptr; + if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ + + for ( ; btr; /* Repeat until all data transferred */ + rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if (!csect) { /* On the cluster boundary? */ + clst = (fp->fptr == 0) ? /* On the top of the file? */ + fp->org_clust : get_fat(fp->fs, fp->curr_clust); + if (clst <= 1) ABORT(fp->fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + fp->curr_clust = clst; /* Update current cluster */ + } + sect = clust2sect(fp->fs, fp->curr_clust); /* Get current sector */ + if (!sect) ABORT(fp->fs, FR_INT_ERR); + sect += csect; + cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ + if (cc) { /* Read maximum contiguous sectors directly */ + if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ + cc = fp->fs->csize - csect; + if (disk_read(fp->fs->drv, rbuff, sect, (BYTE)cc) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); +#if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */ +#if _FS_TINY + if (fp->fs->wflag && fp->fs->winsect - sect < cc) + mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), fp->fs->win, SS(fp->fs)); +#else + if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc) + mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); +#endif +#endif + rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ + continue; + } +#if !_FS_TINY +#if !_FS_READONLY + if (fp->flag & FA__DIRTY) { /* Write sector I/O buffer if needed */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + if (fp->dsect != sect) { /* Fill sector buffer with file data */ + if (disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + } +#endif + fp->dsect = sect; + } + rcnt = SS(fp->fs) - (fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ + if (rcnt > btr) rcnt = btr; +#if _FS_TINY + if (move_window(fp->fs, fp->dsect)) /* Move sector window */ + ABORT(fp->fs, FR_DISK_ERR); + mem_cpy(rbuff, &fp->fs->win[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ +#else + mem_cpy(rbuff, &fp->buf[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ +#endif + } + + LEAVE_FF(fp->fs, FR_OK); +} + + + + +#if !_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Write File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_write ( + FIL *fp, /* Pointer to the file object */ + const void *buff, /* Pointer to the data to be written */ + UINT btw, /* Number of bytes to write */ + UINT *bw /* Pointer to number of bytes written */ +) +{ + FRESULT res; + DWORD clst, sect; + UINT wcnt, cc; + const BYTE *wbuff = buff; + BYTE csect; + + + *bw = 0; /* Initialize byte counter */ + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res != FR_OK) LEAVE_FF(fp->fs, res); + if (fp->flag & FA__ERROR) /* Check abort flag */ + LEAVE_FF(fp->fs, FR_INT_ERR); + if (!(fp->flag & FA_WRITE)) /* Check access mode */ + LEAVE_FF(fp->fs, FR_DENIED); + if (fp->fsize + btw < fp->fsize) btw = 0; /* File size cannot reach 4GB */ + + for ( ; btw; /* Repeat until all data transferred */ + wbuff += wcnt, fp->fptr += wcnt, *bw += wcnt, btw -= wcnt) { + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if (!csect) { /* On the cluster boundary? */ + if (fp->fptr == 0) { /* On the top of the file? */ + clst = fp->org_clust; /* Follow from the origin */ + if (clst == 0) /* When there is no cluster chain, */ + fp->org_clust = clst = create_chain(fp->fs, 0); /* Create a new cluster chain */ + } else { /* Middle or end of the file */ + clst = create_chain(fp->fs, fp->curr_clust); /* Follow or stretch cluster chain */ + } + if (clst == 0) break; /* Could not allocate a new cluster (disk full) */ + if (clst == 1) ABORT(fp->fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + fp->curr_clust = clst; /* Update current cluster */ + } +#if _FS_TINY + if (fp->fs->winsect == fp->dsect && move_window(fp->fs, 0)) /* Write back data buffer prior to following direct transfer */ + ABORT(fp->fs, FR_DISK_ERR); +#else + if (fp->flag & FA__DIRTY) { /* Write back data buffer prior to following direct transfer */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + sect = clust2sect(fp->fs, fp->curr_clust); /* Get current sector */ + if (!sect) ABORT(fp->fs, FR_INT_ERR); + sect += csect; + cc = btw / SS(fp->fs); /* When remaining bytes >= sector size, */ + if (cc) { /* Write maximum contiguous sectors directly */ + if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ + cc = fp->fs->csize - csect; + if (disk_write(fp->fs->drv, wbuff, sect, (BYTE)cc) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); +#if _FS_TINY + if (fp->fs->winsect - sect < cc) { /* Refill sector cache if it gets dirty by the direct write */ + mem_cpy(fp->fs->win, wbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), SS(fp->fs)); + fp->fs->wflag = 0; + } +#else + if (fp->dsect - sect < cc) { /* Refill sector cache if it gets dirty by the direct write */ + mem_cpy(fp->buf, wbuff + ((fp->dsect - sect) * SS(fp->fs)), SS(fp->fs)); + fp->flag &= ~FA__DIRTY; + } +#endif + wcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ + continue; + } +#if _FS_TINY + if (fp->fptr >= fp->fsize) { /* Avoid silly buffer filling at growing edge */ + if (move_window(fp->fs, 0)) ABORT(fp->fs, FR_DISK_ERR); + fp->fs->winsect = sect; + } +#else + if (fp->dsect != sect) { /* Fill sector buffer with file data */ + if (fp->fptr < fp->fsize && + disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + } +#endif + fp->dsect = sect; + } + wcnt = SS(fp->fs) - (fp->fptr % SS(fp->fs)); /* Put partial sector into file I/O buffer */ + if (wcnt > btw) wcnt = btw; +#if _FS_TINY + if (move_window(fp->fs, fp->dsect)) /* Move sector window */ + ABORT(fp->fs, FR_DISK_ERR); + mem_cpy(&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ + fp->fs->wflag = 1; +#else + mem_cpy(&fp->buf[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ + fp->flag |= FA__DIRTY; +#endif + } + + if (fp->fptr > fp->fsize) fp->fsize = fp->fptr; /* Update file size if needed */ + fp->flag |= FA__WRITTEN; /* Set file changed flag */ + + LEAVE_FF(fp->fs, FR_OK); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Synchronize the File Object */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_sync ( + FIL *fp /* Pointer to the file object */ +) +{ + FRESULT res; + DWORD tim; + BYTE *dir; + + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res == FR_OK) { + if (fp->flag & FA__WRITTEN) { /* Has the file been written? */ +#if !_FS_TINY /* Write-back dirty buffer */ + if (fp->flag & FA__DIRTY) { + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + LEAVE_FF(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + /* Update the directory entry */ + res = move_window(fp->fs, fp->dir_sect); + if (res == FR_OK) { + dir = fp->dir_ptr; + dir[DIR_Attr] |= AM_ARC; /* Set archive bit */ + ST_DWORD(dir+DIR_FileSize, fp->fsize); /* Update file size */ + ST_WORD(dir+DIR_FstClusLO, fp->org_clust); /* Update start cluster */ + ST_WORD(dir+DIR_FstClusHI, fp->org_clust >> 16); + tim = get_fattime(); /* Update updated time */ + ST_DWORD(dir+DIR_WrtTime, tim); + fp->flag &= ~FA__WRITTEN; + fp->fs->wflag = 1; + res = sync(fp->fs); + } + } + } + + LEAVE_FF(fp->fs, res); +} + +#endif /* !_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Close File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_close ( + FIL *fp /* Pointer to the file object to be closed */ +) +{ + FRESULT res; + +#if _FS_READONLY + FATFS *fs = fp->fs; + res = validate(fs, fp->id); + if (res == FR_OK) fp->fs = 0; /* Discard file object */ + LEAVE_FF(fs, res); + +#else + res = f_sync(fp); /* Flush cached data */ +#if _FS_SHARE + if (res == FR_OK) { /* Decrement open counter */ +#if _FS_REENTRANT + res = validate(fp->fs, fp->id); + if (res == FR_OK) { + res = dec_lock(fp->fs, fp->lockid); + unlock_fs(fp->fs, FR_OK); + } +#else + res = dec_lock(fp->fs, fp->lockid); +#endif + } +#endif + if (res == FR_OK) fp->fs = 0; /* Discard file object */ + return res; +#endif +} + + + + +/*-----------------------------------------------------------------------*/ +/* Change Current Drive/Directory */ +/*-----------------------------------------------------------------------*/ + +#if _FS_RPATH + +FRESULT f_chdrive ( + BYTE drv /* Drive number */ +) +{ + if (drv >= _DRIVES) return FR_INVALID_DRIVE; + + Drive = drv; + + return FR_OK; +} + + + + +FRESULT f_chdir ( + const TCHAR *path /* Pointer to the directory path */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 0); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the path */ + FREE_BUF(); + if (res == FR_OK) { /* Follow completed */ + dir = dj.dir; /* Pointer to the entry */ + if (!dir) { + dj.fs->cdir = dj.sclust; /* Start directory itself */ + } else { + if (dir[DIR_Attr] & AM_DIR) /* Reached to the directory */ + dj.fs->cdir = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + else + res = FR_NO_PATH; /* Reached but a file */ + } + } + if (res == FR_NO_FILE) res = FR_NO_PATH; + } + + LEAVE_FF(dj.fs, res); +} + +#endif + + + +#if _FS_MINIMIZE <= 2 +/*-----------------------------------------------------------------------*/ +/* Seek File R/W Pointer */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_lseek ( + FIL *fp, /* Pointer to the file object */ + DWORD ofs /* File pointer from top of file */ +) +{ + FRESULT res; + + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res != FR_OK) LEAVE_FF(fp->fs, res); + if (fp->flag & FA__ERROR) /* Check abort flag */ + LEAVE_FF(fp->fs, FR_INT_ERR); + +#if _USE_FASTSEEK + if (fp->cltbl) { /* Fast seek */ + DWORD cl, pcl, ncl, tcl, dsc, tlen, *tbl = fp->cltbl; + BYTE csc; + + tlen = *tbl++; + if (ofs == CREATE_LINKMAP) { /* Create link map table */ + cl = fp->org_clust; + if (cl) { + do { + if (tlen < 4) { /* Not enough table items */ + res = FR_NOT_ENOUGH_CORE; break; + } + tcl = cl; ncl = 0; + do { /* Get a fragment and store the top and length */ + pcl = cl; ncl++; + cl = get_fat(fp->fs, cl); + if (cl <= 1) ABORT(fp->fs, FR_INT_ERR); + if (cl == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + } while (cl == pcl + 1); + *tbl++ = ncl; *tbl++ = tcl; + tlen -= 2; + } while (cl < fp->fs->n_fatent); + } + *tbl = 0; /* Terminate table */ + + } else { /* Fast seek */ + if (ofs > fp->fsize) /* Clip offset at the file size */ + ofs = fp->fsize; + fp->fptr = ofs; /* Set file pointer */ + if (ofs) { + dsc = (ofs - 1) / SS(fp->fs); + cl = dsc / fp->fs->csize; + for (;;) { + ncl = *tbl++; + if (!ncl) ABORT(fp->fs, FR_INT_ERR); + if (cl < ncl) break; + cl -= ncl; tbl++; + } + fp->curr_clust = cl + *tbl; + csc = (BYTE)(dsc & (fp->fs->csize - 1)); + dsc = clust2sect(fp->fs, fp->curr_clust); + if (!dsc) ABORT(fp->fs, FR_INT_ERR); + dsc += csc; + if (fp->fptr % SS(fp->fs) && dsc != fp->dsect) { +#if !_FS_TINY +#if !_FS_READONLY + if (fp->flag & FA__DIRTY) { /* Flush dirty buffer if needed */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); +#endif + fp->dsect = dsc; + } + } + } + } else +#endif + + /* Normal Seek */ + { + DWORD clst, bcs, nsect, ifptr; + + if (ofs > fp->fsize /* In read-only mode, clip offset with the file size */ +#if !_FS_READONLY + && !(fp->flag & FA_WRITE) +#endif + ) ofs = fp->fsize; + + ifptr = fp->fptr; + fp->fptr = nsect = 0; + if (ofs) { + bcs = (DWORD)fp->fs->csize * SS(fp->fs); /* Cluster size (byte) */ + if (ifptr > 0 && + (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */ + fp->fptr = (ifptr - 1) & ~(bcs - 1); /* start from the current cluster */ + ofs -= fp->fptr; + clst = fp->curr_clust; + } else { /* When seek to back cluster, */ + clst = fp->org_clust; /* start from the first cluster */ +#if !_FS_READONLY + if (clst == 0) { /* If no cluster chain, create a new chain */ + clst = create_chain(fp->fs, 0); + if (clst == 1) ABORT(fp->fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + fp->org_clust = clst; + } +#endif + fp->curr_clust = clst; + } + if (clst != 0) { + while (ofs > bcs) { /* Cluster following loop */ +#if !_FS_READONLY + if (fp->flag & FA_WRITE) { /* Check if in write mode or not */ + clst = create_chain(fp->fs, clst); /* Force stretch if in write mode */ + if (clst == 0) { /* When disk gets full, clip file size */ + ofs = bcs; break; + } + } else +#endif + clst = get_fat(fp->fs, clst); /* Follow cluster chain if not in write mode */ + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + if (clst <= 1 || clst >= fp->fs->n_fatent) ABORT(fp->fs, FR_INT_ERR); + fp->curr_clust = clst; + fp->fptr += bcs; + ofs -= bcs; + } + fp->fptr += ofs; + if (ofs % SS(fp->fs)) { + nsect = clust2sect(fp->fs, clst); /* Current sector */ + if (!nsect) ABORT(fp->fs, FR_INT_ERR); + nsect += ofs / SS(fp->fs); + } + } + } + if (fp->fptr % SS(fp->fs) && nsect != fp->dsect) { +#if !_FS_TINY +#if !_FS_READONLY + if (fp->flag & FA__DIRTY) { /* Flush dirty buffer if needed */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + fp->flag &= ~FA__DIRTY; + } +#endif + if (disk_read(fp->fs->drv, fp->buf, nsect, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); +#endif + fp->dsect = nsect; + } +#if !_FS_READONLY + if (fp->fptr > fp->fsize) { /* Set changed flag if the file size is extended */ + fp->fsize = fp->fptr; + fp->flag |= FA__WRITTEN; + } +#endif + } + + LEAVE_FF(fp->fs, res); +} + + + +#if _FS_MINIMIZE <= 1 +/*-----------------------------------------------------------------------*/ +/* Create a Directroy Object */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_opendir ( + DIR *dj, /* Pointer to directory object to create */ + const TCHAR *path /* Pointer to the directory path */ +) +{ + FRESULT res; + BYTE *dir; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj->fs, 0); + if (res == FR_OK) { + INIT_BUF(*dj); + res = follow_path(dj, path); /* Follow the path to the directory */ + FREE_BUF(); + if (res == FR_OK) { /* Follow completed */ + dir = dj->dir; + if (dir) { /* It is not the current dir */ + if (dir[DIR_Attr] & AM_DIR) { /* The object is a directory */ + dj->sclust = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + } else { /* The object is not a directory */ + res = FR_NO_PATH; + } + } + if (res == FR_OK) { + dj->id = dj->fs->id; + res = dir_sdi(dj, 0); /* Rewind dir */ + } + } + if (res == FR_NO_FILE) res = FR_NO_PATH; + } + + LEAVE_FF(dj->fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read Directory Entry in Sequense */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_readdir ( + DIR *dj, /* Pointer to the open directory object */ + FILINFO *fno /* Pointer to file information to return */ +) +{ + FRESULT res; + DEF_NAMEBUF; + + + res = validate(dj->fs, dj->id); /* Check validity of the object */ + if (res == FR_OK) { + if (!fno) { + res = dir_sdi(dj, 0); + } else { + INIT_BUF(*dj); + res = dir_read(dj); + if (res == FR_NO_FILE) { + dj->sect = 0; + res = FR_OK; + } + if (res == FR_OK) { /* A valid entry is found */ + get_fileinfo(dj, fno); /* Get the object information */ + res = dir_next(dj, 0); /* Increment index for next */ + if (res == FR_NO_FILE) { + dj->sect = 0; + res = FR_OK; + } + } + FREE_BUF(); + } + } + + LEAVE_FF(dj->fs, res); +} + + + +#if _FS_MINIMIZE == 0 +/*-----------------------------------------------------------------------*/ +/* Get File Status */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_stat ( + const TCHAR *path, /* Pointer to the file path */ + FILINFO *fno /* Pointer to file information to return */ +) +{ + FRESULT res; + DIR dj; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 0); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK) { /* Follow completed */ + if (dj.dir) /* Found an object */ + get_fileinfo(&dj, fno); + else /* It is root dir */ + res = FR_INVALID_NAME; + } + FREE_BUF(); + } + + LEAVE_FF(dj.fs, res); +} + + + +#if !_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Get Number of Free Clusters */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_getfree ( + const TCHAR *path, /* Pointer to the logical drive number (root dir) */ + DWORD *nclst, /* Pointer to the variable to return number of free clusters */ + FATFS **fatfs /* Pointer to pointer to corresponding file system object to return */ +) +{ + FRESULT res; + DWORD n, clst, sect, stat; + UINT i; + BYTE fat, *p; + + + /* Get drive number */ + res = chk_mounted(&path, fatfs, 0); + if (res == FR_OK) { + /* If free_clust is valid, return it without full cluster scan */ + if ((*fatfs)->free_clust <= (*fatfs)->n_fatent - 2) { + *nclst = (*fatfs)->free_clust; + } else { + /* Get number of free clusters */ + fat = (*fatfs)->fs_type; + n = 0; + if (fat == FS_FAT12) { + clst = 2; + do { + stat = get_fat(*fatfs, clst); + if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } + if (stat == 1) { res = FR_INT_ERR; break; } + if (stat == 0) n++; + } while (++clst < (*fatfs)->n_fatent); + } else { + clst = (*fatfs)->n_fatent; + sect = (*fatfs)->fatbase; + i = 0; p = 0; + do { + if (!i) { + res = move_window(*fatfs, sect++); + if (res != FR_OK) break; + p = (*fatfs)->win; + i = SS(*fatfs); + } + if (fat == FS_FAT16) { + if (LD_WORD(p) == 0) n++; + p += 2; i -= 2; + } else { + if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) n++; + p += 4; i -= 4; + } + } while (--clst); + } + (*fatfs)->free_clust = n; + if (fat == FS_FAT32) (*fatfs)->fsi_flag = 1; + *nclst = n; + } + } + LEAVE_FF(*fatfs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Truncate File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_truncate ( + FIL *fp /* Pointer to the file object */ +) +{ + FRESULT res; + DWORD ncl; + + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res == FR_OK) { + if (fp->flag & FA__ERROR) { /* Check abort flag */ + res = FR_INT_ERR; + } else { + if (!(fp->flag & FA_WRITE)) /* Check access mode */ + res = FR_DENIED; + } + } + if (res == FR_OK) { + if (fp->fsize > fp->fptr) { + fp->fsize = fp->fptr; /* Set file size to current R/W point */ + fp->flag |= FA__WRITTEN; + if (fp->fptr == 0) { /* When set file size to zero, remove entire cluster chain */ + res = remove_chain(fp->fs, fp->org_clust); + fp->org_clust = 0; + } else { /* When truncate a part of the file, remove remaining clusters */ + ncl = get_fat(fp->fs, fp->curr_clust); + res = FR_OK; + if (ncl == 0xFFFFFFFF) res = FR_DISK_ERR; + if (ncl == 1) res = FR_INT_ERR; + if (res == FR_OK && ncl < fp->fs->n_fatent) { + res = put_fat(fp->fs, fp->curr_clust, 0x0FFFFFFF); + if (res == FR_OK) res = remove_chain(fp->fs, ncl); + } + } + } + if (res != FR_OK) fp->flag |= FA__ERROR; + } + + LEAVE_FF(fp->fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Delete a File or Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_unlink ( + const TCHAR *path /* Pointer to the file or directory path */ +) +{ + FRESULT res; + DIR dj, sdj; + BYTE *dir; + DWORD dclst; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 1); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; /* Cannot remove dot entry */ +#if _FS_SHARE + if (res == FR_OK) res = chk_lock(&dj, 2); /* Cannot remove open file */ +#endif + if (res == FR_OK) { /* The object is accessible */ + dir = dj.dir; + if (!dir) { + res = FR_INVALID_NAME; /* Cannot remove the start directory */ + } else { + if (dir[DIR_Attr] & AM_RDO) + res = FR_DENIED; /* Cannot remove R/O object */ + } + dclst = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO); + if (res == FR_OK && (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-dir? */ + if (dclst < 2) { + res = FR_INT_ERR; + } else { + mem_cpy(&sdj, &dj, sizeof(DIR)); /* Check if the sub-dir is empty or not */ + sdj.sclust = dclst; + res = dir_sdi(&sdj, 2); /* Exclude dot entries */ + if (res == FR_OK) { + res = dir_read(&sdj); + if (res == FR_OK /* Not empty dir */ +#if _FS_RPATH + || dclst == sdj.fs->cdir /* Current dir */ +#endif + ) res = FR_DENIED; + if (res == FR_NO_FILE) res = FR_OK; /* Empty */ + } + } + } + if (res == FR_OK) { + res = dir_remove(&dj); /* Remove the directory entry */ + if (res == FR_OK) { + if (dclst) /* Remove the cluster chain if exist */ + res = remove_chain(dj.fs, dclst); + if (res == FR_OK) res = sync(dj.fs); + } + } + } + FREE_BUF(); + } + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Create a Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_mkdir ( + const TCHAR *path /* Pointer to the directory path */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir, n; + DWORD dsc, dcl, pcl, tim = get_fattime(); + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 1); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK) res = FR_EXIST; /* Any object with same name is already existing */ + if (_FS_RPATH && res == FR_NO_FILE && (dj.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; + if (res == FR_NO_FILE) { /* Can create a new directory */ + dcl = create_chain(dj.fs, 0); /* Allocate a cluster for the new directory table */ + res = FR_OK; + if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster */ + if (dcl == 1) res = FR_INT_ERR; + if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; + if (res == FR_OK) /* Flush FAT */ + res = move_window(dj.fs, 0); + if (res == FR_OK) { /* Initialize the new directory table */ + dsc = clust2sect(dj.fs, dcl); + dir = dj.fs->win; + mem_set(dir, 0, SS(dj.fs)); + mem_set(dir+DIR_Name, ' ', 8+3); /* Create "." entry */ + dir[DIR_Name] = '.'; + dir[DIR_Attr] = AM_DIR; + ST_DWORD(dir+DIR_WrtTime, tim); + ST_WORD(dir+DIR_FstClusLO, dcl); + ST_WORD(dir+DIR_FstClusHI, dcl >> 16); + mem_cpy(dir+32, dir, 32); /* Create ".." entry */ + dir[33] = '.'; pcl = dj.sclust; + if (dj.fs->fs_type == FS_FAT32 && pcl == dj.fs->dirbase) + pcl = 0; + ST_WORD(dir+32+DIR_FstClusLO, pcl); + ST_WORD(dir+32+DIR_FstClusHI, pcl >> 16); + for (n = dj.fs->csize; n; n--) { /* Write dot entries and clear following sectors */ + dj.fs->winsect = dsc++; + dj.fs->wflag = 1; + res = move_window(dj.fs, 0); + if (res != FR_OK) break; + mem_set(dir, 0, SS(dj.fs)); + } + } + if (res == FR_OK) res = dir_register(&dj); /* Register the object to the directoy */ + if (res != FR_OK) { + remove_chain(dj.fs, dcl); /* Could not register, remove cluster chain */ + } else { + dir = dj.dir; + dir[DIR_Attr] = AM_DIR; /* Attribute */ + ST_DWORD(dir+DIR_WrtTime, tim); /* Created time */ + ST_WORD(dir+DIR_FstClusLO, dcl); /* Table start cluster */ + ST_WORD(dir+DIR_FstClusHI, dcl >> 16); + dj.fs->wflag = 1; + res = sync(dj.fs); + } + } + FREE_BUF(); + } + + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Change Attribute */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_chmod ( + const TCHAR *path, /* Pointer to the file path */ + BYTE value, /* Attribute bits */ + BYTE mask /* Attribute mask to change */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 1); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + FREE_BUF(); + if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; + if (res == FR_OK) { + dir = dj.dir; + if (!dir) { /* Is it a root directory? */ + res = FR_INVALID_NAME; + } else { /* File or sub directory */ + mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC; /* Valid attribute mask */ + dir[DIR_Attr] = (value & mask) | (dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ + dj.fs->wflag = 1; + res = sync(dj.fs); + } + } + } + + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Change Timestamp */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_utime ( + const TCHAR *path, /* Pointer to the file/directory name */ + const FILINFO *fno /* Pointer to the time stamp to be set */ +) +{ + FRESULT res; + DIR dj; + BYTE *dir; + DEF_NAMEBUF; + + + res = chk_mounted(&path, &dj.fs, 1); + if (res == FR_OK) { + INIT_BUF(dj); + res = follow_path(&dj, path); /* Follow the file path */ + FREE_BUF(); + if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; + if (res == FR_OK) { + dir = dj.dir; + if (!dir) { /* Root directory */ + res = FR_INVALID_NAME; + } else { /* File or sub-directory */ + ST_WORD(dir+DIR_WrtTime, fno->ftime); + ST_WORD(dir+DIR_WrtDate, fno->fdate); + dj.fs->wflag = 1; + res = sync(dj.fs); + } + } + } + + LEAVE_FF(dj.fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Rename File/Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_rename ( + const TCHAR *path_old, /* Pointer to the old name */ + const TCHAR *path_new /* Pointer to the new name */ +) +{ + FRESULT res; + DIR djo, djn; + BYTE buf[21], *dir; + DWORD dw; + DEF_NAMEBUF; + + + res = chk_mounted(&path_old, &djo.fs, 1); + if (res == FR_OK) { + djn.fs = djo.fs; + INIT_BUF(djo); + res = follow_path(&djo, path_old); /* Check old object */ + if (_FS_RPATH && res == FR_OK && (djo.fn[NS] & NS_DOT)) + res = FR_INVALID_NAME; +#if _FS_SHARE + if (res == FR_OK) res = chk_lock(&djo, 2); +#endif + if (res == FR_OK) { /* Old object is found */ + if (!djo.dir) { /* Is root dir? */ + res = FR_NO_FILE; + } else { + mem_cpy(buf, djo.dir+DIR_Attr, 21); /* Save the object information except for name */ + mem_cpy(&djn, &djo, sizeof(DIR)); /* Check new object */ + res = follow_path(&djn, path_new); + if (res == FR_OK) res = FR_EXIST; /* The new object name is already existing */ + if (res == FR_NO_FILE) { /* Is it a valid path and no name collision? */ +/* Start critical section that any interruption or error can cause cross-link */ + res = dir_register(&djn); /* Register the new entry */ + if (res == FR_OK) { + dir = djn.dir; /* Copy object information except for name */ + mem_cpy(dir+13, buf+2, 19); + dir[DIR_Attr] = buf[0] | AM_ARC; + djo.fs->wflag = 1; + if (djo.sclust != djn.sclust && (dir[DIR_Attr] & AM_DIR)) { /* Update .. entry in the directory if needed */ + dw = clust2sect(djn.fs, (DWORD)LD_WORD(dir+DIR_FstClusHI) | LD_WORD(dir+DIR_FstClusLO)); + if (!dw) { + res = FR_INT_ERR; + } else { + res = move_window(djn.fs, dw); + dir = djn.fs->win+32; /* .. entry */ + if (res == FR_OK && dir[1] == '.') { + dw = (djn.fs->fs_type == FS_FAT32 && djn.sclust == djn.fs->dirbase) ? 0 : djn.sclust; + ST_WORD(dir+DIR_FstClusLO, dw); + ST_WORD(dir+DIR_FstClusHI, dw >> 16); + djn.fs->wflag = 1; + } + } + } + if (res == FR_OK) { + res = dir_remove(&djo); /* Remove old entry */ + if (res == FR_OK) + res = sync(djo.fs); + } + } +/* End critical section */ + } + } + } + FREE_BUF(); + } + LEAVE_FF(djo.fs, res); +} + +#endif /* !_FS_READONLY */ +#endif /* _FS_MINIMIZE == 0 */ +#endif /* _FS_MINIMIZE <= 1 */ +#endif /* _FS_MINIMIZE <= 2 */ + + + +/*-----------------------------------------------------------------------*/ +/* Forward data to the stream directly (available on only tiny cfg) */ +/*-----------------------------------------------------------------------*/ +#if _USE_FORWARD && _FS_TINY + +FRESULT f_forward ( + FIL *fp, /* Pointer to the file object */ + UINT (*func)(const BYTE*,UINT), /* Pointer to the streaming function */ + UINT btr, /* Number of bytes to forward */ + UINT *bf /* Pointer to number of bytes forwarded */ +) +{ + FRESULT res; + DWORD remain, clst, sect; + UINT rcnt; + BYTE csect; + + + *bf = 0; /* Initialize byte counter */ + + res = validate(fp->fs, fp->id); /* Check validity of the object */ + if (res != FR_OK) LEAVE_FF(fp->fs, res); + if (fp->flag & FA__ERROR) /* Check error flag */ + LEAVE_FF(fp->fs, FR_INT_ERR); + if (!(fp->flag & FA_READ)) /* Check access mode */ + LEAVE_FF(fp->fs, FR_DENIED); + + remain = fp->fsize - fp->fptr; + if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ + + for ( ; btr && (*func)(0, 0); /* Repeat until all data transferred or stream becomes busy */ + fp->fptr += rcnt, *bf += rcnt, btr -= rcnt) { + csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ + if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ + if (!csect) { /* On the cluster boundary? */ + clst = (fp->fptr == 0) ? /* On the top of the file? */ + fp->org_clust : get_fat(fp->fs, fp->curr_clust); + if (clst <= 1) ABORT(fp->fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + fp->curr_clust = clst; /* Update current cluster */ + } + } + sect = clust2sect(fp->fs, fp->curr_clust); /* Get current data sector */ + if (!sect) ABORT(fp->fs, FR_INT_ERR); + sect += csect; + if (move_window(fp->fs, sect)) /* Move sector window */ + ABORT(fp->fs, FR_DISK_ERR); + fp->dsect = sect; + rcnt = SS(fp->fs) - (WORD)(fp->fptr % SS(fp->fs)); /* Forward data from sector window */ + if (rcnt > btr) rcnt = btr; + rcnt = (*func)(&fp->fs->win[(WORD)fp->fptr % SS(fp->fs)], rcnt); + if (!rcnt) ABORT(fp->fs, FR_INT_ERR); + } + + LEAVE_FF(fp->fs, FR_OK); +} +#endif /* _USE_FORWARD */ + + + +#if _USE_MKFS && !_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Create File System on the Drive */ +/*-----------------------------------------------------------------------*/ +#define N_ROOTDIR 512 /* Multiple of 32 */ +#define N_FATS 1 /* 1 or 2 */ + + +FRESULT f_mkfs ( + BYTE drv, /* Logical drive number */ + BYTE sfd, /* Partitioning rule 0:FDISK, 1:SFD */ + UINT au /* Allocation unit size [bytes] */ +) +{ + static const WORD vst[] = { 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 0}; + static const WORD cst[] = {32768, 16384, 8192, 4096, 2048, 16384, 8192, 4096, 2048, 1024, 512}; + BYTE fmt, md, *tbl; + DWORD n_clst, vs, n; + UINT as, i; + DWORD b_vol, b_fat, b_dir, b_data; /* Area offset (LBA) */ + DWORD n_vol, n_rsv, n_fat, n_dir; /* Area size */ + FATFS *fs; + DSTATUS stat; + + + /* Check mounted drive and clear work area */ + if (drv >= _DRIVES) return FR_INVALID_DRIVE; + fs = FatFs[drv]; + if (!fs) return FR_NOT_ENABLED; + fs->fs_type = 0; + drv = LD2PD(drv); + + /* Get disk statics */ + stat = disk_initialize(drv); + if (stat & STA_NOINIT) return FR_NOT_READY; + if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; +#if _MAX_SS != 512 /* Get disk sector size */ + if (disk_ioctl(drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > _MAX_SS) + return FR_DISK_ERR; +#endif + if (disk_ioctl(drv, GET_SECTOR_COUNT, &n_vol) != RES_OK || n_vol < 128) + return FR_DISK_ERR; + b_vol = (sfd == 1) ? 0 : 63; /* Volume start sector */ + n_vol -= b_vol; + if (au & (au - 1)) au = 0; /* Check validity of the allocation unit size */ + if (!au) { /* AU auto selection */ + vs = n_vol / (2000 / (SS(fs) / 512)); + for (i = 0; vs < vst[i]; i++) ; + au = cst[i]; + } + if (_MAX_SS != 512 && au < SS(fs)) au = SS(fs); + au /= SS(fs); /* Number of sectors per cluster */ + if (au == 0) au = 1; + if (au > 128) au = 128; + + /* Pre-compute number of clusters and FAT syb-type */ + n_clst = n_vol / au; + fmt = FS_FAT12; + if (n_clst >= MIN_FAT16) fmt = FS_FAT16; + if (n_clst >= MIN_FAT32) fmt = FS_FAT32; + + /* Determine offset and size of FAT structure */ + if (fmt == FS_FAT32) { + n_fat = ((n_clst * 4) + 8 + SS(fs) - 1) / SS(fs); + n_rsv = 32; + n_dir = 0; + } else { + n_fat = (fmt == FS_FAT12) ? (n_clst * 3 + 1) / 2 + 3 : (n_clst * 2) + 4; + n_fat = (n_fat + SS(fs) - 1) / SS(fs); + n_rsv = 1; + n_dir = N_ROOTDIR * 32UL / SS(fs); + } + b_fat = b_vol + n_rsv; /* FAT area start sector */ + b_dir = b_fat + n_fat * N_FATS; /* Directory area start sector */ + b_data = b_dir + n_dir; /* Data area start sector */ + if (n_vol < b_data + au) return FR_MKFS_ABORTED; /* Too small volume */ + + /* Align data start sector to erase block boundary (for flash memory media) */ + if (disk_ioctl(drv, GET_BLOCK_SIZE, &n) != RES_OK) return FR_DISK_ERR; + if (!n || n > 32768) return FR_MKFS_ABORTED; + n = (b_data + n - 1) & ~(n - 1); /* Next nearest boundary from current data start */ + n = (n - b_data) / N_FATS; + if (fmt == FS_FAT32) { /* FAT32: Move FAT start */ + n_rsv += n; + b_fat += n; + } else { /* FAT12/16: Expand FAT size */ + n_fat += n; + } + /* b_dir and b_data are no longer used below */ + + /* Determine number of cluster and final check of validity of the FAT sub-type */ + n_clst = (n_vol - n_rsv - n_fat * N_FATS - n_dir) / au; + if ( (fmt == FS_FAT16 && n_clst < MIN_FAT16) + || (fmt == FS_FAT32 && n_clst < MIN_FAT32)) + return FR_MKFS_ABORTED; + + /* Create partition table if required */ + if (sfd == 1) { + md = 0xF0; + } else { + DWORD n_disk = b_vol + n_vol; + + mem_set(fs->win, 0, SS(fs)); + tbl = fs->win+MBR_Table; + ST_DWORD(tbl, 0x00010180); /* Partition start in CHS */ + if (n_disk < 63UL * 255 * 1024) { /* Partition end in CHS */ + n_disk = n_disk / 63 / 255; + tbl[7] = (BYTE)n_disk; + tbl[6] = (BYTE)((n_disk >> 2) | 63); + } else { + ST_WORD(&tbl[6], 0xFFFF); + } + tbl[5] = 254; + if (fmt != FS_FAT32) /* System ID */ + tbl[4] = (n_vol < 0x10000) ? 0x04 : 0x06; + else + tbl[4] = 0x0c; + ST_DWORD(tbl+8, 63); /* Partition start in LBA */ + ST_DWORD(tbl+12, n_vol); /* Partition size in LBA */ + ST_WORD(tbl+64, 0xAA55); /* Signature */ + if (disk_write(drv, fs->win, 0, 1) != RES_OK) + return FR_DISK_ERR; + md = 0xF8; + } + + /* Create VBR */ + tbl = fs->win; /* Clear buffer */ + mem_set(tbl, 0, SS(fs)); + ST_DWORD(tbl+BS_jmpBoot, 0x90FEEB); /* Boot code (jmp $, nop) */ + as = SS(fs); /* Sector size */ + ST_WORD(tbl+BPB_BytsPerSec, as); + tbl[BPB_SecPerClus] = (BYTE)au; /* Sectors per cluster */ + ST_WORD(tbl+BPB_RsvdSecCnt, n_rsv); /* Reserved sectors */ + tbl[BPB_NumFATs] = N_FATS; /* Number of FATs */ + as = (fmt == FS_FAT32) ? 0 : N_ROOTDIR; /* Number of rootdir entries */ + ST_WORD(tbl+BPB_RootEntCnt, as); + if (n_vol < 0x10000) { /* Number of total sectors */ + ST_WORD(tbl+BPB_TotSec16, n_vol); + } else { + ST_DWORD(tbl+BPB_TotSec32, n_vol); + } + tbl[BPB_Media] = md; /* Media descriptor */ + ST_WORD(tbl+BPB_SecPerTrk, 63); /* Number of sectors per track */ + ST_WORD(tbl+BPB_NumHeads, 255); /* Number of heads */ + ST_DWORD(tbl+BPB_HiddSec, b_vol); /* Hidden sectors */ + n = get_fattime(); /* Use current time as VSN */ + if (fmt == FS_FAT32) { + ST_DWORD(tbl+BS_VolID32, n); /* VSN */ + ST_DWORD(tbl+BPB_FATSz32, n_fat); /* Number of sectors per FAT */ + ST_DWORD(tbl+BPB_RootClus, 2); /* Root directory start cluster (2) */ + ST_WORD(tbl+BPB_FSInfo, 1); /* FSInfo record offset (VBR+1) */ + ST_WORD(tbl+BPB_BkBootSec, 6); /* Backup boot record offset (VBR+6) */ + tbl[BS_DrvNum32] = 0x80; /* Drive number */ + tbl[BS_BootSig32] = 0x29; /* Extended boot signature */ + mem_cpy(tbl+BS_VolLab32, "NO NAME FAT32 ", 19); /* Volume label, FAT signature */ + } else { + ST_DWORD(tbl+BS_VolID, n); /* VSN */ + ST_WORD(tbl+BPB_FATSz16, n_fat); /* Number of sectors per FAT */ + tbl[BS_DrvNum] = 0x80; /* Drive number */ + tbl[BS_BootSig] = 0x29; /* Extended boot signature */ + mem_cpy(tbl+BS_VolLab, "NO NAME FAT ", 19); /* Volume label, FAT signature */ + } + ST_WORD(tbl+BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */ + if (disk_write(drv, tbl, b_vol, 1) != RES_OK) /* Original (VBR) */ + return FR_DISK_ERR; + if (fmt == FS_FAT32) /* Backup (VBR+6) */ + disk_write(drv, tbl, b_vol + 6, 1); + + /* Initialize FAT area */ + for (i = 0; i < N_FATS; i++) { + mem_set(tbl, 0, SS(fs)); /* 1st sector of the FAT */ + n = md; /* Media descriptor byte */ + if (fmt != FS_FAT32) { + n |= (fmt == FS_FAT12) ? 0x00FFFF00 : 0xFFFFFF00; + ST_DWORD(tbl+0, n); /* Reserve cluster #0-1 (FAT12/16) */ + } else { + n |= 0x0FFFFF00; + ST_DWORD(tbl+0, n); /* Reserve cluster #0-1 (FAT32) */ + ST_DWORD(tbl+4, 0x0FFFFFFF); + ST_DWORD(tbl+8, 0x0FFFFFFF); /* Reserve cluster #2 for root dir */ + } + if (disk_write(drv, tbl, b_fat++, 1) != RES_OK) + return FR_DISK_ERR; + mem_set(tbl, 0, SS(fs)); /* Fill following FAT entries with zero */ + for (n = 1; n < n_fat; n++) { /* This loop may take a time on FAT32 volume due to many single sector write */ + if (disk_write(drv, tbl, b_fat++, 1) != RES_OK) + return FR_DISK_ERR; + } + } + + /* Initialize root directory */ + n = (fmt == FS_FAT32) ? as : n_dir; + while (n--) { + if (disk_write(drv, tbl, b_fat++, 1) != RES_OK) + return FR_DISK_ERR; + } + + /* Create FSInfo record if needed */ + if (fmt == FS_FAT32) { + ST_WORD(tbl+BS_55AA, 0xAA55); + ST_DWORD(tbl+FSI_LeadSig, 0x41615252); + ST_DWORD(tbl+FSI_StrucSig, 0x61417272); + ST_DWORD(tbl+FSI_Free_Count, n_clst - 1); + ST_DWORD(tbl+FSI_Nxt_Free, 0xFFFFFFFF); + disk_write(drv, tbl, b_vol + 1, 1); /* Original (VBR+1) */ + disk_write(drv, tbl, b_vol + 7, 1); /* Backup (VBR+7) */ + } + + return (disk_ioctl(drv, CTRL_SYNC, (void*)0) == RES_OK) ? FR_OK : FR_DISK_ERR; +} + +#endif /* _USE_MKFS && !_FS_READONLY */ + + + + +#if _USE_STRFUNC +/*-----------------------------------------------------------------------*/ +/* Get a string from the file */ +/*-----------------------------------------------------------------------*/ +TCHAR* f_gets ( + TCHAR* buff, /* Pointer to the string buffer to read */ + int len, /* Size of string buffer (characters) */ + FIL* fil /* Pointer to the file object */ +) +{ + int n = 0; + TCHAR c, *p = buff; + BYTE s[2]; + UINT rc; + + + while (n < len - 1) { /* Read bytes until buffer gets filled */ + f_read(fil, s, 1, &rc); + if (rc != 1) break; /* Break on EOF or error */ + c = s[0]; +#if _LFN_UNICODE /* Read a character in UTF-8 encoding */ + if (c >= 0x80) { + if (c < 0xC0) continue; /* Skip stray trailer */ + if (c < 0xE0) { /* Two-byte sequense */ + f_read(fil, s, 1, &rc); + if (rc != 1) break; + c = ((c & 0x1F) << 6) | (s[0] & 0x3F); + if (c < 0x80) c = '?'; + } else { + if (c < 0xF0) { /* Three-byte sequense */ + f_read(fil, s, 2, &rc); + if (rc != 2) break; + c = (c << 12) | ((s[0] & 0x3F) << 6) | (s[1] & 0x3F); + if (c < 0x800) c = '?'; + } else { /* Reject four-byte sequense */ + c = '?'; + } + } + } +#endif +#if _USE_STRFUNC >= 2 + if (c == '\r') continue; /* Strip '\r' */ +#endif + *p++ = c; + n++; + if (c == '\n') break; /* Break on EOL */ + } + *p = 0; + return n ? buff : 0; /* When no data read (eof or error), return with error. */ +} + + + +#if !_FS_READONLY +#include +/*-----------------------------------------------------------------------*/ +/* Put a character to the file */ +/*-----------------------------------------------------------------------*/ +int f_putc ( + TCHAR c, /* A character to be output */ + FIL* fil /* Pointer to the file object */ +) +{ + UINT bw, btw; + BYTE s[3]; + + +#if _USE_STRFUNC >= 2 + if (c == '\n') f_putc ('\r', fil); /* LF -> CRLF conversion */ +#endif + +#if _LFN_UNICODE /* Write the character in UTF-8 encoding */ + if (c < 0x80) { /* 7-bit */ + s[0] = (BYTE)c; + btw = 1; + } else { + if (c < 0x800) { /* 11-bit */ + s[0] = (BYTE)(0xC0 | (c >> 6)); + s[1] = (BYTE)(0x80 | (c & 0x3F)); + btw = 2; + } else { /* 16-bit */ + s[0] = (BYTE)(0xE0 | (c >> 12)); + s[1] = (BYTE)(0x80 | ((c >> 6) & 0x3F)); + s[2] = (BYTE)(0x80 | (c & 0x3F)); + btw = 3; + } + } +#else /* Write the character without conversion */ + s[0] = (BYTE)c; + btw = 1; +#endif + f_write(fil, s, btw, &bw); /* Write the char to the file */ + return (bw == btw) ? 1 : EOF; /* Return the result */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Put a string to the file */ +/*-----------------------------------------------------------------------*/ +int f_puts ( + const TCHAR* str, /* Pointer to the string to be output */ + FIL* fil /* Pointer to the file object */ +) +{ + int n; + + + for (n = 0; *str; str++, n++) { + if (f_putc(*str, fil) == EOF) return EOF; + } + return n; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Put a formatted string to the file */ +/*-----------------------------------------------------------------------*/ +int f_printf ( + FIL* fil, /* Pointer to the file object */ + const TCHAR* str, /* Pointer to the format string */ + ... /* Optional arguments... */ +) +{ + va_list arp; + BYTE f, r; + UINT i, w; + ULONG val; + TCHAR c, d, s[16]; + int res, cc; + + + va_start(arp, str); + + for (cc = res = 0; cc != EOF; res += cc) { + c = *str++; + if (c == 0) break; /* End of string */ + if (c != '%') { /* Non escape character */ + cc = f_putc(c, fil); + if (cc != EOF) cc = 1; + continue; + } + w = f = 0; + c = *str++; + if (c == '0') { /* Flag: '0' padding */ + f = 1; c = *str++; + } + while (IsDigit(c)) { /* Precision */ + w = w * 10 + c - '0'; + c = *str++; + } + if (c == 'l' || c == 'L') { /* Prefix: Size is long int */ + f |= 2; c = *str++; + } + if (!c) break; + d = c; + if (IsLower(d)) d -= 0x20; + switch (d) { /* Type is... */ + case 'S' : /* String */ + cc = f_puts(va_arg(arp, TCHAR*), fil); continue; + case 'C' : /* Character */ + cc = f_putc((TCHAR)va_arg(arp, int), fil); continue; + case 'B' : /* Binary */ + r = 2; break; + case 'O' : /* Octal */ + r = 8; break; + case 'D' : /* Signed decimal */ + case 'U' : /* Unsigned decimal */ + r = 10; break; + case 'X' : /* Hexdecimal */ + r = 16; break; + default: /* Unknown */ + cc = f_putc(c, fil); continue; + } + + /* Get an argument */ + val = (f & 2) ? va_arg(arp, long) : ((d == 'D') ? (long)va_arg(arp, int) : va_arg(arp, unsigned int)); + if (d == 'D' && (val & 0x80000000)) { + val = 0 - val; + f |= 4; + } + /* Put it in numeral string */ + i = 0; + do { + d = (TCHAR)(val % r); val /= r; + if (d > 9) { + d += 7; + if (c == 'x') d += 0x20; + } + s[i++] = d + '0'; + } while (val && i < sizeof(s) / sizeof(s[0])); + if (f & 4) s[i++] = '-'; + cc = 0; + while (i < w-- && cc != EOF) { + cc = f_putc((TCHAR)((f & 1) ? '0' : ' '), fil); + res++; + } + do { + cc = f_putc(s[--i], fil); + res++; + } while (i && cc != EOF); + if (cc != EOF) cc = 0; + } + + va_end(arp); + return (cc == EOF) ? cc : res; +} + +#endif /* !_FS_READONLY */ +#endif /* _USE_STRFUNC */ diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ff.h b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ff.h new file mode 100644 index 0000000..d739704 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ff.h @@ -0,0 +1,613 @@ +/*---------------------------------------------------------------------------/ +/ FatFs - FAT file system module include file R0.08 (C)ChaN, 2010 +/----------------------------------------------------------------------------/ +/ FatFs module is a generic FAT file system module for small embedded systems. +/ This is a free software that opened for education, research and commercial +/ developments under license policy of following trems. +/ +/ Copyright (C) 2010, ChaN, all right reserved. +/ +/ * The FatFs module is a free software and there is NO WARRANTY. +/ * No restriction on use. You can use, modify and redistribute it for +/ personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. +/ * Redistributions of source code must retain the above copyright notice. +/ +/----------------------------------------------------------------------------*/ + +#ifndef _FATFS +#define _FATFS 8085 /* Revision ID */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "integer.h" /* Basic integer types */ +#include "ffconf.h" /* FatFs configuration options */ + +#if _FATFS != _FFCONF +#error Wrong configuration file (ffconf.h). +#endif + + +/* DBCS code ranges and SBCS extend char conversion table */ + +#if _CODE_PAGE == 932 /* Japanese Shift-JIS */ +#define _DF1S 0x81 /* DBC 1st byte range 1 start */ +#define _DF1E 0x9F /* DBC 1st byte range 1 end */ +#define _DF2S 0xE0 /* DBC 1st byte range 2 start */ +#define _DF2E 0xFC /* DBC 1st byte range 2 end */ +#define _DS1S 0x40 /* DBC 2nd byte range 1 start */ +#define _DS1E 0x7E /* DBC 2nd byte range 1 end */ +#define _DS2S 0x80 /* DBC 2nd byte range 2 start */ +#define _DS2E 0xFC /* DBC 2nd byte range 2 end */ + +#elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ +#define _DF1S 0x81 +#define _DF1E 0xFE +#define _DS1S 0x40 +#define _DS1E 0x7E +#define _DS2S 0x80 +#define _DS2E 0xFE + +#elif _CODE_PAGE == 949 /* Korean */ +#define _DF1S 0x81 +#define _DF1E 0xFE +#define _DS1S 0x41 +#define _DS1E 0x5A +#define _DS2S 0x61 +#define _DS2E 0x7A +#define _DS3S 0x81 +#define _DS3E 0xFE + +#elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ +#define _DF1S 0x81 +#define _DF1E 0xFE +#define _DS1S 0x40 +#define _DS1E 0x7E +#define _DS2S 0xA1 +#define _DS2E 0xFE + +#elif _CODE_PAGE == 437 /* U.S. (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F,0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 720 /* Arabic (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x45,0x41,0x84,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x49,0x49,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 737 /* Greek (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \ + 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xE7,0xE8,0xF1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 775 /* Baltic (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F,0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0x9F, \ + 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF} + +#elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F,0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \ + 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \ + 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 857 /* Turkish (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x98,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \ + 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0x59,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 862 /* Hebrew (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 866 /* Russian (OEM) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x90,0x91,0x92,0x93,0x9d,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} + +#elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ + 0xA0,0xA2,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF} + +#elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xAd,0x9B,0x8C,0x9D,0xAE,0x9F, \ + 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} + +#elif _CODE_PAGE == 1253 /* Greek (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xA2,0xB8,0xB9,0xBA, \ + 0xE0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xFB,0xBC,0xFD,0xBF,0xFF} + +#elif _CODE_PAGE == 1254 /* Turkish (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x9E,0x9F, \ + 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} + +#elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 1256 /* Arabic (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x8C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x41,0xE1,0x41,0xE3,0xE4,0xE5,0xE6,0x43,0x45,0x45,0x45,0x45,0xEC,0xED,0x49,0x49,0xF0,0xF1,0xF2,0xF3,0x4F,0xF5,0xF6,0xF7,0xF8,0x55,0xFA,0x55,0x55,0xFD,0xFE,0xFF} + +#elif _CODE_PAGE == 1257 /* Baltic (Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} + +#elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ +#define _DF1S 0 +#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0xAC,0x9D,0x9E,0x9F, \ + 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xEC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xFE,0x9F} + +#elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */ +#define _DF1S 0 + +#else +#error Unknown code page + +#endif + + + +/* Definitions corresponds to volume management */ + +#if _MULTI_PARTITION /* Multiple partition configuration */ +#define LD2PD(drv) (Drives[drv].pd) /* Get physical drive# */ +#define LD2PT(drv) (Drives[drv].pt) /* Get partition# */ +typedef struct { + BYTE pd; /* Physical drive# */ + BYTE pt; /* Partition # (0-3) */ +} PARTITION; +extern const PARTITION Drives[]; /* Logical drive# to physical location conversion table */ + +#else /* Single partition configuration */ +#define LD2PD(drv) (drv) /* Physical drive# is equal to the logical drive# */ +#define LD2PT(drv) 0 /* Always mounts the 1st partition */ + +#endif + + + +/* Type of path name strings on FatFs API */ + +#if _LFN_UNICODE /* Unicode string */ +#if !_USE_LFN +#error _LFN_UNICODE must be 0 in non-LFN cfg. +#endif +#ifndef _INC_TCHAR +typedef WCHAR TCHAR; +#define _T(x) L ## x +#define _TEXT(x) L ## x +#endif + +#else /* ANSI/OEM string */ +#ifndef _INC_TCHAR +typedef char TCHAR; +#define _T(x) x +#define _TEXT(x) x +#endif + +#endif + + + +/* Definitions corresponds to file shareing feature */ + +#if _FS_SHARE +#if _FS_READONLY +#error _FS_SHARE must be 0 on R/O cfg. +#endif +typedef struct { + DWORD clu; /* File ID 1, directory */ + WORD idx; /* File ID 2, index in the directory */ + WORD ctr; /* File open counter, 0:none, 0x01..0xFF:read open count, 0x100:in write open */ +} FILESEM; +#endif + + + +/* File system object structure (FATFS) */ + +typedef struct { + BYTE fs_type; /* FAT sub-type (0:Not mounted) */ + BYTE drv; /* Physical drive number */ + BYTE csize; /* Sectors per cluster (1,2,4...128) */ + BYTE n_fats; /* Number of FAT copies (1,2) */ + BYTE wflag; /* win[] dirty flag (1:must be written back) */ + BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */ + WORD id; /* File system mount ID */ + WORD n_rootdir; /* Number of root directory entries (FAT12/16) */ +#if _MAX_SS != 512 + WORD ssize; /* Bytes per sector (512,1024,2048,4096) */ +#endif +#if _FS_REENTRANT + _SYNC_t sobj; /* Identifier of sync object */ +#endif +#if !_FS_READONLY + DWORD last_clust; /* Last allocated cluster */ + DWORD free_clust; /* Number of free clusters */ + DWORD fsi_sector; /* fsinfo sector (FAT32) */ +#endif +#if _FS_RPATH + DWORD cdir; /* Current directory start cluster (0:root) */ +#endif + DWORD n_fatent; /* Number of FAT entries (= number of clusters + 2) */ + DWORD fsize; /* Sectors per FAT */ + DWORD fatbase; /* FAT start sector */ + DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */ + DWORD database; /* Data start sector */ + DWORD winsect; /* Current sector appearing in the win[] */ + BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and Data on tiny cfg) */ +#if _FS_SHARE + FILESEM flsem[_FS_SHARE]; /* File lock semaphores */ +#endif +} FATFS; + + + +/* File object structure (FIL) */ + +typedef struct { + FATFS* fs; /* Pointer to the owner file system object */ + WORD id; /* Owner file system mount ID */ + BYTE flag; /* File status flags */ + BYTE pad1; + DWORD fptr; /* File read/write pointer */ + DWORD fsize; /* File size */ + DWORD org_clust; /* File start cluster (0 when fsize==0) */ + DWORD curr_clust; /* Current cluster */ + DWORD dsect; /* Current data sector */ +#if !_FS_READONLY + DWORD dir_sect; /* Sector containing the directory entry */ + BYTE* dir_ptr; /* Ponter to the directory entry in the window */ +#endif +#if _USE_FASTSEEK + DWORD* cltbl; /* Pointer to the cluster link map table */ +#endif +#if _FS_SHARE + UINT lockid; /* File lock ID */ +#endif +#if !_FS_TINY + BYTE buf[_MAX_SS]; /* File data read/write buffer */ +#endif +} FIL; + + + +/* Directory object structure (DIR) */ + +typedef struct { + FATFS* fs; /* Pointer to the owner file system object */ + WORD id; /* Owner file system mount ID */ + WORD index; /* Current read/write index number */ + DWORD sclust; /* Table start cluster (0:Root dir) */ + DWORD clust; /* Current cluster */ + DWORD sect; /* Current sector */ + BYTE* dir; /* Pointer to the current SFN entry in the win[] */ + BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ +#if _USE_LFN + WCHAR* lfn; /* Pointer to the LFN working buffer */ + WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */ +#endif +} DIR; + + + +/* File status structure (FILINFO) */ + +typedef struct { + DWORD fsize; /* File size */ + WORD fdate; /* Last modified date */ + WORD ftime; /* Last modified time */ + BYTE fattrib; /* Attribute */ + TCHAR fname[13]; /* Short file name (8.3 format) */ +#if _USE_LFN + TCHAR* lfname; /* Pointer to the LFN buffer */ + int lfsize; /* Size of LFN buffer [chrs] */ +#endif +} FILINFO; + + + +/* File function return code (FRESULT) */ + +typedef enum { + FR_OK = 0, /* (0) Succeeded */ + FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */ + FR_INT_ERR, /* (2) Assertion failed */ + FR_NOT_READY, /* (3) The physical drive cannot work */ + FR_NO_FILE, /* (4) Could not find the file */ + FR_NO_PATH, /* (5) Could not find the path */ + FR_INVALID_NAME, /* (6) The path name format is invalid */ + FR_DENIED, /* (7) Acces denied due to prohibited access or directory full */ + FR_EXIST, /* (8) Acces denied due to prohibited access */ + FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ + FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ + FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ + FR_NOT_ENABLED, /* (12) The volume has no work area */ + FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume on the physical drive */ + FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */ + FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */ + FR_LOCKED, /* (16) The operation is rejected according to the file shareing policy */ + FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ + FR_TOO_MANY_OPEN_FILES /* (18) Number of open files > _FS_SHARE */ +} FRESULT; + + + +/*--------------------------------------------------------------*/ +/* FatFs module application interface */ + +FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */ +FRESULT f_open (FIL*, const TCHAR*, BYTE); /* Open or create a file */ +FRESULT f_read (FIL*, void*, UINT, UINT*); /* Read data from a file */ +FRESULT f_lseek (FIL*, DWORD); /* Move file pointer of a file object */ +FRESULT f_close (FIL*); /* Close an open file object */ +FRESULT f_opendir (DIR*, const TCHAR*); /* Open an existing directory */ +FRESULT f_readdir (DIR*, FILINFO*); /* Read a directory item */ +FRESULT f_stat (const TCHAR*, FILINFO*); /* Get file status */ +#if !_FS_READONLY +FRESULT f_write (FIL*, const void*, UINT, UINT*); /* Write data to a file */ +FRESULT f_getfree (const TCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */ +FRESULT f_truncate (FIL*); /* Truncate file */ +FRESULT f_sync (FIL*); /* Flush cached data of a writing file */ +FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */ +FRESULT f_mkdir (const TCHAR*); /* Create a new directory */ +FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */ +FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change timestamp of the file/dir */ +FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */ +#endif +#if _USE_FORWARD +FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */ +#endif +#if _USE_MKFS +FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */ +#endif +#if _FS_RPATH +FRESULT f_chdir (const TCHAR*); /* Change current directory */ +FRESULT f_chdrive (BYTE); /* Change current drive */ +#endif +#if _USE_STRFUNC +int f_putc (TCHAR, FIL*); /* Put a character to the file */ +int f_puts (const TCHAR*, FIL*); /* Put a string to the file */ +int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */ +TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */ +#define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) +#define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0) +#ifndef EOF +#define EOF (-1) +#endif +#endif + + + +/*--------------------------------------------------------------*/ +/* Additional user defined functions */ + +/* RTC function */ +#if !_FS_READONLY +DWORD get_fattime (void); +#endif + +/* Unicode support functions */ +#if _USE_LFN /* Unicode - OEM code conversion */ +WCHAR ff_convert (WCHAR, UINT); /* OEM-Unicode bidirectional conversion */ +WCHAR ff_wtoupper (WCHAR); /* Unicode upper-case conversion */ +#if _USE_LFN == 3 /* Memory functions */ +void* ff_memalloc (UINT); /* Allocate memory block */ +void ff_memfree (void*); /* Free memory block */ +#endif +#endif + +/* Sync functions */ +#if _FS_REENTRANT +int ff_cre_syncobj (BYTE, _SYNC_t*);/* Create a sync object */ +int ff_del_syncobj (_SYNC_t); /* Delete a sync object */ +int ff_req_grant (_SYNC_t); /* Lock sync object */ +void ff_rel_grant (_SYNC_t); /* Unlock sync object */ +#endif + + + + +/*--------------------------------------------------------------*/ +/* Flags and offset address */ + + +/* File access control and file status flags (FIL.flag) */ + +#define FA_READ 0x01 +#define FA_OPEN_EXISTING 0x00 +#define FA__ERROR 0x80 + +#if !_FS_READONLY +#define FA_WRITE 0x02 +#define FA_CREATE_NEW 0x04 +#define FA_CREATE_ALWAYS 0x08 +#define FA_OPEN_ALWAYS 0x10 +#define FA__WRITTEN 0x20 +#define FA__DIRTY 0x40 +#endif + + +/* FAT sub type (FATFS.fs_type) */ + +#define FS_FAT12 1 +#define FS_FAT16 2 +#define FS_FAT32 3 + + +/* File attribute bits for directory entry */ + +#define AM_RDO 0x01 /* Read only */ +#define AM_HID 0x02 /* Hidden */ +#define AM_SYS 0x04 /* System */ +#define AM_VOL 0x08 /* Volume label */ +#define AM_LFN 0x0F /* LFN entry */ +#define AM_DIR 0x10 /* Directory */ +#define AM_ARC 0x20 /* Archive */ +#define AM_MASK 0x3F /* Mask of defined bits */ + + +/* Fast seek function */ +#define CREATE_LINKMAP 0xFFFFFFFF + + +/* FatFs refers the members in the FAT structures with byte offset instead of +/ structure member because there are incompatibility of the packing option +/ between various compilers. */ + +#define BS_jmpBoot 0 +#define BS_OEMName 3 +#define BPB_BytsPerSec 11 +#define BPB_SecPerClus 13 +#define BPB_RsvdSecCnt 14 +#define BPB_NumFATs 16 +#define BPB_RootEntCnt 17 +#define BPB_TotSec16 19 +#define BPB_Media 21 +#define BPB_FATSz16 22 +#define BPB_SecPerTrk 24 +#define BPB_NumHeads 26 +#define BPB_HiddSec 28 +#define BPB_TotSec32 32 +#define BS_55AA 510 + +#define BS_DrvNum 36 +#define BS_BootSig 38 +#define BS_VolID 39 +#define BS_VolLab 43 +#define BS_FilSysType 54 + +#define BPB_FATSz32 36 +#define BPB_ExtFlags 40 +#define BPB_FSVer 42 +#define BPB_RootClus 44 +#define BPB_FSInfo 48 +#define BPB_BkBootSec 50 +#define BS_DrvNum32 64 +#define BS_BootSig32 66 +#define BS_VolID32 67 +#define BS_VolLab32 71 +#define BS_FilSysType32 82 + +#define FSI_LeadSig 0 +#define FSI_StrucSig 484 +#define FSI_Free_Count 488 +#define FSI_Nxt_Free 492 + +#define MBR_Table 446 + +#define DIR_Name 0 +#define DIR_Attr 11 +#define DIR_NTres 12 +#define DIR_CrtTime 14 +#define DIR_CrtDate 16 +#define DIR_FstClusHI 20 +#define DIR_WrtTime 22 +#define DIR_WrtDate 24 +#define DIR_FstClusLO 26 +#define DIR_FileSize 28 +#define LDIR_Ord 0 +#define LDIR_Attr 11 +#define LDIR_Type 12 +#define LDIR_Chksum 13 +#define LDIR_FstClusLO 26 + + + +/*--------------------------------*/ +/* Multi-byte word access macros */ + +#if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */ +#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) +#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) +#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) +#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) +#else /* Use byte-by-byte access to the FAT structure */ +#define LD_WORD(ptr) (WORD)(((WORD)*(BYTE*)((ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) +#define LD_DWORD(ptr) (DWORD)(((DWORD)*(BYTE*)((ptr)+3)<<24)|((DWORD)*(BYTE*)((ptr)+2)<<16)|((WORD)*(BYTE*)((ptr)+1)<<8)|*(BYTE*)(ptr)) +#define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8) +#define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8); *(BYTE*)((ptr)+2)=(BYTE)((DWORD)(val)>>16); *(BYTE*)((ptr)+3)=(BYTE)((DWORD)(val)>>24) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _FATFS */ diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ffconf.h b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ffconf.h new file mode 100644 index 0000000..ca26e10 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/ffconf.h @@ -0,0 +1,179 @@ +/*---------------------------------------------------------------------------/ +/ FatFs - FAT file system module configuration file R0.08 (C)ChaN, 2010 +/----------------------------------------------------------------------------/ +/ +/ CAUTION! Do not forget to make clean the project after any changes to +/ the configuration options. +/ +/----------------------------------------------------------------------------*/ +#ifndef _FFCONF +#define _FFCONF 8085 /* Revision ID */ + + +/*---------------------------------------------------------------------------/ +/ Function and Buffer Configurations +/----------------------------------------------------------------------------*/ + +#define _FS_TINY 1 /* 0 or 1 */ +/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system +/ object instead of the sector buffer in the individual file object for file +/ data transfer. This reduces memory consumption 512 bytes each file object. */ + + +#define _FS_READONLY 0 /* 0 or 1 */ +/* Setting _FS_READONLY to 1 defines read only configuration. This removes +/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename, +/ f_truncate and useless f_getfree. */ + + +#define _FS_MINIMIZE 0 /* 0, 1, 2 or 3 */ +/* The _FS_MINIMIZE option defines minimization level to remove some functions. +/ +/ 0: Full function. +/ 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename +/ are removed. +/ 2: f_opendir and f_readdir are removed in addition to level 1. +/ 3: f_lseek is removed in addition to level 2. */ + + +#define _USE_STRFUNC 0 /* 0, 1 or 2 */ +/* To enable string functions, set _USE_STRFUNC to 1 or 2. */ + + +#define _USE_MKFS 1 /* 0 or 1 */ +/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */ + + +#define _USE_FORWARD 0 /* 0 or 1 */ +/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */ + + +#define _USE_FASTSEEK 0 /* 0 or 1 */ +/* To enable f_fastseek function, set _USE_FASTSEEK to 1. */ + + + +/*---------------------------------------------------------------------------/ +/ Locale and Namespace Configurations +/----------------------------------------------------------------------------*/ + +#define _CODE_PAGE 1 +/* The _CODE_PAGE specifies the OEM code page to be used on the target system. +/ Incorrect setting of the code page can cause a file open failure. +/ +/ 932 - Japanese Shift-JIS (DBCS, OEM, Windows) +/ 936 - Simplified Chinese GBK (DBCS, OEM, Windows) +/ 949 - Korean (DBCS, OEM, Windows) +/ 950 - Traditional Chinese Big5 (DBCS, OEM, Windows) +/ 1250 - Central Europe (Windows) +/ 1251 - Cyrillic (Windows) +/ 1252 - Latin 1 (Windows) +/ 1253 - Greek (Windows) +/ 1254 - Turkish (Windows) +/ 1255 - Hebrew (Windows) +/ 1256 - Arabic (Windows) +/ 1257 - Baltic (Windows) +/ 1258 - Vietnam (OEM, Windows) +/ 437 - U.S. (OEM) +/ 720 - Arabic (OEM) +/ 737 - Greek (OEM) +/ 775 - Baltic (OEM) +/ 850 - Multilingual Latin 1 (OEM) +/ 858 - Multilingual Latin 1 + Euro (OEM) +/ 852 - Latin 2 (OEM) +/ 855 - Cyrillic (OEM) +/ 866 - Russian (OEM) +/ 857 - Turkish (OEM) +/ 862 - Hebrew (OEM) +/ 874 - Thai (OEM, Windows) +/ 1 - ASCII only (Valid for non LFN cfg.) +*/ + + +#define _USE_LFN 0 /* 0 to 3 */ +#define _MAX_LFN 128 /* Maximum LFN length to handle (12 to 255) */ +/* The _USE_LFN option switches the LFN support. +/ +/ 0: Disable LFN. _MAX_LFN and _LFN_UNICODE have no effect. +/ 1: Enable LFN with static working buffer on the bss. NOT REENTRANT. +/ 2: Enable LFN with dynamic working buffer on the STACK. +/ 3: Enable LFN with dynamic working buffer on the HEAP. +/ +/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When enable LFN, +/ Unicode handling functions ff_convert() and ff_wtoupper() must be added +/ to the project. When enable to use heap, memory control functions +/ ff_memalloc() and ff_memfree() must be added to the project. */ + + +#define _LFN_UNICODE 0 /* 0 or 1 */ +/* To switch the character code set on FatFs API to Unicode, +/ enable LFN feature and set _LFN_UNICODE to 1. +*/ + + +#define _FS_RPATH 1 /* 0 or 1 */ +/* When _FS_RPATH is set to 1, relative path feature is enabled and f_chdir, +/ f_chdrive function are available. +/ Note that output of the f_readdir fnction is affected by this option. */ + + + +/*---------------------------------------------------------------------------/ +/ Physical Drive Configurations +/----------------------------------------------------------------------------*/ + +#define _DRIVES 2 +/* Number of volumes (logical drives) to be used. */ + + +#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */ +/* Maximum sector size to be handled. +/ Always set 512 for memory card and hard disk but a larger value may be +/ required for floppy disk (512/1024) and optical disk (512/2048). +/ When _MAX_SS is larger than 512, GET_SECTOR_SIZE command must be implememted +/ to the disk_ioctl function. */ + + +#define _MULTI_PARTITION 0 /* 0 or 1 */ +/* When _MULTI_PARTITION is set to 0, each volume is bound to the same physical +/ drive number and can mount only first primaly partition. When it is set to 1, +/ each volume is tied to the partitions listed in Drives[]. */ + + + +/*---------------------------------------------------------------------------/ +/ System Configurations +/----------------------------------------------------------------------------*/ + +#define _WORD_ACCESS 1 /* 0 or 1 */ +/* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS +/ option defines which access method is used to the word data on the FAT volume. +/ +/ 0: Byte-by-byte access. +/ 1: Word access. Do not choose this unless following condition is met. +/ +/ When the byte order on the memory is big-endian or address miss-aligned word +/ access results incorrect behavior, the _WORD_ACCESS must be set to 0. +/ If it is not the case, the value can also be set to 1 to improve the +/ performance and code size. */ + + +#define _FS_REENTRANT 0 /* 0 or 1 */ +#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */ +#define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */ +/* The _FS_REENTRANT option switches the reentrancy of the FatFs module. +/ +/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect. +/ 1: Enable reentrancy. Also user provided synchronization handlers, +/ ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj +/ function must be added to the project. */ + + +#define _FS_SHARE 0 /* 0 or >=1 */ +/* To enable file shareing feature, set _FS_SHARE to >= 1 and also user + provided memory handlers, ff_memalloc and ff_memfree function must be + added to the project. The value defines number of files can be opened + per volume. */ + + +#endif /* _FFCONF */ diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/integer.h b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/integer.h new file mode 100644 index 0000000..16ad408 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/integer.h @@ -0,0 +1,37 @@ +/*-------------------------------------------*/ +/* Integer type definitions for FatFs module */ +/*-------------------------------------------*/ + +#ifndef _INTEGER +#define _INTEGER + +#ifdef _WIN32 /* FatFs development platform */ + +#include +#include + +#else /* Embedded platform */ + +/* These types must be 16-bit, 32-bit or larger integer */ +typedef int INT; +typedef unsigned int UINT; + +/* These types must be 8-bit integer */ +typedef char CHAR; +typedef unsigned char UCHAR; +typedef unsigned char BYTE; + +/* These types must be 16-bit integer */ +typedef short SHORT; +typedef unsigned short USHORT; +typedef unsigned short WORD; +typedef unsigned short WCHAR; + +/* These types must be 32-bit integer */ +typedef long LONG; +typedef unsigned long ULONG; +typedef unsigned long DWORD; + +#endif + +#endif diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/main.c b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/main.c new file mode 100644 index 0000000..1e55354 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Labs/Lab 4/main.c @@ -0,0 +1,300 @@ +/** +@file main.c +@brief Lab 3 Starter Code +@version .01 +@mainpage Lab 3 Starter Code + +@section intro Code Overview + +@section hw Hardware Pin Out +Port A: +A0 - A3 : Push Buttons +A4 - A7 : Slide Switches + +Port B: +B0 - B3 : SPI (SD Card) +B4 : Nothing +B5 : Audio Out +B6 : Red Enable +B7 : Green Enable + +Port C: +C0 - C7 : LED Array (Row) + +Port D: +D0 - D1 : Nothing +D2 : Serial RX +D3 : Serial TX +D4 - D7 : Nothing + +Port E: +E0 - E2 : LED Array (Column) +E3 : USB (UID) +E4 - E5 : Nothing +E6 : Relay +E7 : Nothing + +Port F: +F0 : ADC Channel 0 +F1 : ADC Channel 1 +F2 : ADC Channel 2 +F3 : ADC Channel 3 +F4 : ADC Channel 4 (Audio In) +F5 : ADC Channel 5 (Accel X Axis) +F6 : ADC Channel 6 (Accel Y Axis) +F7 : ADC Channel 7 (Accel Z Axis (if installed)) + +*/ + +/** Includes */ +#include +#include +#include + + +/** Constants */ +#define F_CPU 1000000UL +#define DEBUG 1 +#ifdef DEBUG == 1 + #define SENDSPEED 3 //If less than .12, there are problems +#endif + +/** Global Variables */ + +volatile unsigned char numelapsed = 0; + +/** Functions */ + +#ifdef DEBUG == 1 + /** This function needs to setup the variables used by the UART to enable the UART and tramsmit at 9600bps. This + function should always return 0. Remember, by defualt the Wunderboard runs at 1mHz for its system clock.*/ + unsigned char InitializeUART (){ + unsigned char baud = ((F_CPU/(9600*8UL))-1); + + /* Set baud rate */ + UBRR1H = (baud >> 8); + UBRR1L = baud; + /* Set the U2X1 bit */ + UCSR1A = (1 << U2X1); + /* Enable transmitter */ + UCSR1B = (1 << TXEN1 | 1 << RXEN1); + /* Set frame format: 8data, 1stop bit */ + UCSR1C = (3 << UCSZ10); + + return 0; + } + + /** This function needs to write a single byte to the UART. It must check that the UART is ready for a new byte + and return a 1 if the byte was not sent. + @param [in] data This is the data byte to be sent. + @return The function returns a 1 or error and 0 on successful completion.*/ + + unsigned char SendByteUART (unsigned char data){ + + /* + ** Checks the buffer empty bit so that data can either be placed in the buffer + ** or else reuturn a 1 + */ + if((UCSR1A & (1 << UDRE1)) == (1 << UDRE1)){ + UDR1 = data; //Places data into the UDR1 8-bit data buffer + }else { + return 1; + } + + return 0; + } + + /** This function needs to writes a string to the UART. It must check that the UART is ready for a new byte and + return a 1 if the string was not sent. + @param [in] data This is a pointer to the data to be sent. + @return The function returns a 1 or error and 0 on successful completion.*/ + + unsigned char SendStringUART (unsigned char *data){ + + for (int loop = 0 ; data[loop] != '\0'; loop++){ + unsigned char bytereturn; //Storage for return value of SendByteUART + + /* Sends the current byte based on the loop umber to SendByte */ + while(SendByteUART(data[loop])); + + /* Stops sending if SendByteUART had an error */ + if(bytereturn == 1){ + return 1; + } + } + return 0; + } + + unsigned char GetByteUART(){ + if (UCSR1A & (1 << RXC1)){ + return(UDR1); + } else{ + return(-1); + } + } +#endif + +/** The clearArray() function turns off all LEDS on the Wunderboard array. It accepts no inputs and returns nothing*/ +void clearArray(void){ + PORTC = 0x00; + PORTB |= (1 << PB6) | (1 << PB7); /** Enable latches*/ + PORTB &= ~((1 << PB6) | (1 << PB7)); /** Disable latches*/ +} + +/** The initialize() function initializes all of the Data Direction Registers for the Wunderboard. Before making changes to DDRx registers, ensure that you have read the peripherals section of the Wunderboard user guide.*/ +void initialize(void){ + /** Port A is the switches and buttons. They should always be inputs. ( 0 = Input and 1 = Output )*/ + DDRA=0b00000000; + + /** Port B has the LED Array color control, SD card, and audio-out on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRB=0b11000111; + + /** Port C is for the 'row' of the LED array. They should always be outputs. ( 0 = Input and 1 = Output )*/ + DDRC=0b11111111; + + /** Port D has the Serial on it. Leave DDRB alone. ( 0 = Input and 1 = Output )*/ + DDRD=0b00000000; + + /** Port E has the LED Array Column control out on it. Leave DDRE alone. ( 0 = Input and 1 = Output )*/ + DDRE=0b00000111; + + /** Port F has the accelerometer and audio-in on it. Leave DDRF alone. ( 0 = Input and 1 = Output )*/ + DDRF=0b00000000; +} + +unsigned char read_adc(uint8_t channel){ + + unsigned char test; + + ADMUX = 0x60 | channel; // Set the channel to the one we want + ADCSRA = 0b11000110; // Start a new sample. + while ((ADCSRA & 0b00010000) == 0 ); // Wait for a Valid Sample + ADCSRA |= 0b00010000; // Tell ADC you have the sample you want. + ADCSRA |= 0b01000000; // Start a new sample. + while ((ADCSRA & 0b00010000) == 0 ); // Wait for a Valid Sample + ADCSRA |= 0b00010000; // Tell ADC you have the sample you want. + + test = ADCH; + ADCSRA = 0x00; // Disable the ADC + + return (test); +} + + +/** This function needs to setup the variables used by TIMER0 Compare Match (CTC) mode with +a base clock frequency of clk/1024. This function should return a 1 if it fails and a 0 if it +does not. Remember, by default the Wunderboard runs at 1mHz for its system clock. +@return This function returns a 1 is unsuccessful, else return 0.*/ +unsigned char initializeTIMER0(void){ + /* Set the CTC mode */ + TCCR0A = (1 << WGM01); + + /* Set the Clock Frequency */ + TCCR0B = ((1 << CS02) | (1 << CS00)); + + /* Set initial count value */ + OCR0A = 0; +} + +/** This function takes two values, clock and count. The value of count should be copied into OCR0A and the value of clock should be used to set CS02:0. The TCNT0 variable should also be reset to 0 so that the new timer rate starts from 0. +@param [in] clock Insert Comment +@param [in] count Insert Comment +@return The function returns a 1 or error and 0 on successful completion.*/ +unsigned char setTIMER0(unsigned char clock, unsigned char count){ + + if(clock > 7){ + return 1; + } + TCCR0B &= 0b11111000; //Zeros out last three bits + TCCR0B |= clock; + OCR0A = count; + TIMSK0 = 2; + TCNT0 = 0; + return 0; +} + +ISR(TIMER0_COMPA_vect){ + unsigned char adcreturn1; + unsigned char adcreturn2; + unsigned char send[50]; + + + adcreturn1 = read_adc(5); + adcreturn2 = read_adc(6); + + if(numelapsed == 3){ + + PORTC = ~PORTC; + + numelapsed = 0; + + SendStringUART("X Value: "); + itoa(adcreturn1, send, 2); + SendStringUART(send); + SendStringUART("\tY Value: "); + itoa(adcreturn2, send, 2); + SendStringUART(send); + SendStringUART("\n"); + + }else { + numelapsed++; + } +} + +/** Main Function */ +int main (void){ + + enum states{ + setup, + idle, + running + } state = setup; + + unsigned char debug; + unsigned char received; + + while(1){ + + switch(state){ + case setup: + + initialize(); + initializeTIMER0(); + InitializeUART(); + clearArray(); + setTIMER0(5,120); + PORTB = 0b11000000; + state = idle; + SendStringUART("Initialized...\n"); + break; + + case idle: + cli(); + + if(debug != 1){ + SendStringUART("Idling...\n"); + debug = 1; + } + received = GetByteUART(); + + if (received == 's'){ + state = running; + debug = 0; + break; + } + + break; + + case running: + sei(); + + received = GetByteUART(); + + if (received == 's'){ + state = idle; + } + + break; + } + } +} \ No newline at end of file diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 2/.cproject b/OSU Coursework/CS 261 - Data Structures/Assignment 2/.cproject new file mode 100644 index 0000000..12222bf --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 2/.cproject @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 2/.project b/OSU Coursework/CS 261 - Data Structures/Assignment 2/.project new file mode 100644 index 0000000..6520da1 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 2/.project @@ -0,0 +1,26 @@ + + + Assignment 2 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 2/calc.c b/OSU Coursework/CS 261 - Data Structures/Assignment 2/calc.c new file mode 100644 index 0000000..d4e0d87 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 2/calc.c @@ -0,0 +1,146 @@ +#include +#include +#include +#include "dynamicArray.h" + + +/* param: s the string + param: num a pointer to double + returns: true (1) if s is a number else 0 or false. + postcondition: if it is a number, num will hold + the value of the number +*/ +int isNumber(char *s, double *num) +{ + char *end; + double returnNum; + + if(strcmp(s, "0") == 0) + { + *num = 0; + return 1; + } + else + { + returnNum = strtod(s, &end); + /* If there's anythin in end, it's bad */ + if((returnNum != 0.0) && (strcmp(end, "") == 0)) + { + *num = returnNum; + return 1; + } + } + return 0; //if got here, it was not a number +} + +/* param: stack the stack being manipulated + pre: the stack contains at least two elements + post: the top two elements are popped and + their sum is pushed back onto the stack. +*/ +void add (struct DynArr *stack) +{ + /* FIXME: You will write this function */ +} + +/* param: stack the stack being manipulated + pre: the stack contains at least two elements + post: the top two elements are popped and + their difference is pushed back onto the stack. +*/ +void subtract(struct DynArr *stack) +{ + /* FIXME: You will write this function */ +} + +/* param: stack the stack being manipulated + pre: the stack contains at least two elements + post: the top two elements are popped and + their quotient is pushed back onto the stack. +*/ +void divide(struct DynArr *stack) +{ + /* FIXME: You will write this function */ +} + +double calculate(int numInputTokens, char **inputString) +{ + int i; + double result = 0.0; + char *s; + struct DynArr *stack; + + //set up the stack + stack = createDynArr(20); + + // start at 1 to skip the name of the calculator calc + for(i=1;i < numInputTokens;i++) + { + s = inputString[i]; + + // Hint: General algorithm: + // (1) Check if the string s is in the list of operators. + // (1a) If it is, perform corresponding operations. + // (1b) Otherwise, check if s is a number. + // (1b - I) If s is not a number, produce an error. + // (1b - II) If s is a number, push it onto the stack + + if(strcmp(s, "+") == 0) + add(stack); + else if(strcmp(s,"-") == 0) + subtract(stack); + else if(strcmp(s, "/") == 0) + divide(stack); + else if(strcmp(s, "x") == 0) + /* FIXME: replace printf with your own function */ + printf("Multiplying\n"); + else if(strcmp(s, "^") == 0) + /* FIXME: replace printf with your own function */ + printf("Power\n"); + else if(strcmp(s, "^2") == 0) + /* FIXME: replace printf with your own function */ + printf("Squaring\n"); + else if(strcmp(s, "^3") == 0) + /* FIXME: replace printf with your own function */ + printf("Cubing\n"); + else if(strcmp(s, "abs") == 0) + /* FIXME: replace printf with your own function */ + printf("Absolute value\n"); + else if(strcmp(s, "sqrt") == 0) + /* FIXME: replace printf with your own function */ + printf("Square root\n"); + else if(strcmp(s, "exp") == 0) + /* FIXME: replace printf with your own function */ + printf("Exponential\n"); + else if(strcmp(s, "ln") == 0) + /* FIXME: replace printf with your own function */ + printf("Natural Log\n"); + else if(strcmp(s, "log") == 0) + /* FIXME: replace printf with your own function */ + printf("Log\n"); + else + { + // FIXME: You need to develop the code here (when s is not an operator) + // Remember to deal with special values ("pi" and "e") + + } + } //end for + + /* FIXME: You will write this part of the function (2 steps below) + * (1) Check if everything looks OK and produce an error if needed. + * (2) Store the final value in result and print it out. + */ + + return result; +} + +int main(int argc , char** argv) +{ + // assume each argument is contained in the argv array + // argc-1 determines the number of operands + operators + if (argc == 1) + return 0; + + calculate(argc,argv); + return 0; +} diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 2/dynamicArray.c b/OSU Coursework/CS 261 - Data Structures/Assignment 2/dynamicArray.c new file mode 100644 index 0000000..8d42d81 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 2/dynamicArray.c @@ -0,0 +1,291 @@ +/* dynamicArray.c: Dynamic Array implementation. */ +#include +#include +#include "dynamicArray.h" + +struct DynArr +{ + TYPE *data; /* pointer to the data array */ + int size; /* Number of elements in the array */ + int capacity; /* capacity ofthe array */ +}; + + +/* ************************************************************************ + Dynamic Array Functions +************************************************************************ */ + +/* Initialize (including allocation of data array) dynamic array. + + param: v pointer to the dynamic array + param: cap capacity of the dynamic array + pre: v is not null + post: internal data array can hold cap elements + post: v->data is not null +*/ +void initDynArr(DynArr *v, int capacity) +{ + assert(capacity > 0); + assert(v!= 0); + v->data = (TYPE *) malloc(sizeof(TYPE) * capacity); + assert(v->data != 0); + v->size = 0; + v->capacity = capacity; +} + +/* Allocate and initialize dynamic array. + + param: cap desired capacity for the dyn array + pre: none + post: none + ret: a non-null pointer to a dynArr of cap capacity + and 0 elements in it. +*/ +DynArr* createDynArr(int cap) +{ + assert(cap > 0); + DynArr *r = (DynArr *)malloc(sizeof( DynArr)); + assert(r != 0); + initDynArr(r,cap); + return r; +} + +/* Deallocate data array in dynamic array. + + param: v pointer to the dynamic array + pre: none + post: d.data points to null + post: size and capacity are 0 + post: the memory used by v->data is freed +*/ +void freeDynArr(DynArr *v) +{ + if(v->data != 0) + { + free(v->data); /* free the space on the heap */ + v->data = 0; /* make it point to null */ + } + v->size = 0; + v->capacity = 0; +} + +/* Deallocate data array and the dynamic array ure. + + param: v pointer to the dynamic array + pre: none + post: the memory used by v->data is freed + post: the memory used by d is freed +*/ +void deleteDynArr(DynArr *v) +{ + freeDynArr(v); + free(v); +} + +/* Resizes the underlying array to be the size cap + + param: v pointer to the dynamic array + param: cap the new desired capacity + pre: v is not null + post: v has capacity newCap +*/ +void _dynArrSetCapacity(DynArr *v, int newCap) +{ + /* FIXME: You will write this function */ + +} + +/* Get the size of the dynamic array + + param: v pointer to the dynamic array + pre: v is not null + post: none + ret: the size of the dynamic array +*/ +int sizeDynArr(DynArr *v) +{ + return v->size; +} + +/* Adds an element to the end of the dynamic array + + param: v pointer to the dynamic array + param: val the value to add to the end of the dynamic array + pre: the dynArry is not null + post: size increases by 1 + post: if reached capacity, capacity is doubled + post: val is in the last utilized position in the array +*/ +void addDynArr(DynArr *v, TYPE val) +{ + /* FIXME: You will write this function */ + +} + +/* Get an element from the dynamic array from a specified position + + param: v pointer to the dynamic array + param: pos integer index to get the element from + pre: v is not null + pre: v is not empty + pre: pos < size of the dyn array and >= 0 + post: no changes to the dyn Array + ret: value stored at index pos +*/ + +TYPE getDynArr(DynArr *v, int pos) +{ + /* FIXME: You will write this function */ + + /* FIXME: you must change this return value */ + return 1; +} + +/* Put an item into the dynamic array at the specified location, + overwriting the element that was there + + param: v pointer to the dynamic array + param: pos the index to put the value into + param: val the value to insert + pre: v is not null + pre: v is not empty + pre: pos >= 0 and pos < size of the array + post: index pos contains new value, val +*/ +void putDynArr(DynArr *v, int pos, TYPE val) +{ + /* FIXME: You will write this function */ +} + +/* Swap two specified elements in the dynamic array + + param: v pointer to the dynamic array + param: i,j the elements to be swapped + pre: v is not null + pre: v is not empty + pre: i, j >= 0 and i,j < size of the dynamic array + post: index i now holds the value at j and index j now holds the value at i +*/ +void swapDynArr(DynArr *v, int i, int j) +{ + /* FIXME: You will write this function */ +} + +/* Remove the element at the specified location from the array, + shifts other elements back one to fill the gap + + param: v pointer to the dynamic array + param: idx location of element to remove + pre: v is not null + pre: v is not empty + pre: idx < size and idx >= 0 + post: the element at idx is removed + post: the elements past idx are moved back one +*/ +void removeAtDynArr(DynArr *v, int idx) +{ + /* FIXME: You will write this function */ +} + + + +/* ************************************************************************ + Stack Interface Functions +************************************************************************ */ + +/* Returns boolean (encoded in an int) demonstrating whether or not the + dynamic array stack has an item on it. + + param: v pointer to the dynamic array + pre: the dynArr is not null + post: none + ret: 1 if empty, otherwise 0 +*/ +int isEmptyDynArr(DynArr *v) +{ + /* FIXME: You will write this function */ + + /* FIXME: You will change this return value*/ + return 1; +} + +/* Push an element onto the top of the stack + + param: v pointer to the dynamic array + param: val the value to push onto the stack + pre: v is not null + post: size increases by 1 + if reached capacity, capacity is doubled + val is on the top of the stack +*/ +void pushDynArr(DynArr *v, TYPE val) +{ + /* FIXME: You will write this function */ +} + +/* Returns the element at the top of the stack + + param: v pointer to the dynamic array + pre: v is not null + pre: v is not empty + post: no changes to the stack +*/ +TYPE topDynArr(DynArr *v) +{ + /* FIXME: You will write this function */ + + /* FIXME: You will change this return value*/ + return 1; +} + +/* Removes the element on top of the stack + + param: v pointer to the dynamic array + pre: v is not null + pre: v is not empty + post: size is decremented by 1 + the top has been removed +*/ +void popDynArr(DynArr *v) +{ + /* FIXME: You will write this function */ +} + +/* ************************************************************************ + Bag Interface Functions +************************************************************************ */ + +/* Returns boolean (encoded as an int) demonstrating whether or not + the specified value is in the collection + true = 1 + false = 0 + + param: v pointer to the dynamic array + param: val the value to look for in the bag + pre: v is not null + pre: v is not empty + post: no changes to the bag +*/ +int containsDynArr(DynArr *v, TYPE val) +{ + /* FIXME: You will write this function */ + + /* FIXME: You will change this return value */ + return 1; + +} + +/* Removes the first occurrence of the specified value from the collection + if it occurs + + param: v pointer to the dynamic array + param: val the value to remove from the array + pre: v is not null + pre: v is not empty + post: val has been removed + post: size of the bag is reduced by 1 +*/ +void removeDynArr(DynArr *v, TYPE val) +{ + /* FIXME: You will write this function */ +} diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 2/dynamicArray.h b/OSU Coursework/CS 261 - Data Structures/Assignment 2/dynamicArray.h new file mode 100644 index 0000000..816006f --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 2/dynamicArray.h @@ -0,0 +1,41 @@ +/* dynamicArray.h : Dynamic Array implementation. */ +#include + +#ifndef DYNAMIC_ARRAY_INCLUDED +#define DYNAMIC_ARRAY_INCLUDED 1 + + +# ifndef TYPE +# define TYPE double +# define TYPE_SIZE sizeof(double) +# endif + +# ifndef EQ +# define EQ(A, B) (fabs(A - B) < 10e-7) +# endif + +typedef struct DynArr DynArr; + +/* Dynamic Array Functions */ +DynArr *createDynArr(int cap); +void deleteDynArr(DynArr *v); + +int sizeDynArr(DynArr *v); + +void addDynArr(DynArr *v, TYPE val); +TYPE getDynArr(DynArr *v, int pos); +void putDynArr(DynArr *v, int pos, TYPE val); +void swapDynArr(DynArr *v, int i, int j); +void removeAtDynArr(DynArr *v, int idx); + +/* Stack interface. */ +int isEmptyDynArr(DynArr *v); +void pushDynArr(DynArr *v, TYPE val); +TYPE topDynArr(DynArr *v); +void popDynArr(DynArr *v); + +/* Bag Interface */ +int containsDynArr(DynArr *v, TYPE val); +void removeDynArr(DynArr *v, TYPE val); + +#endif diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 2/makefile b/OSU Coursework/CS 261 - Data Structures/Assignment 2/makefile new file mode 100644 index 0000000..b6a6cc5 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 2/makefile @@ -0,0 +1,23 @@ +all: calc testda + +calc: dynamicArray.o calc.o + gcc -g -Wall -std=c99 -o calc dynamicArray.o calc.o -lm + +testda: dynamicArray.o testDynArray.o + gcc -g -Wall -std=c99 -o testda dynamicArray.o testDynArray.o + +calc.o: calc.c dynamicArray.h + gcc -g -Wall -std=c99 -c calc.c + +testDynArray.o: testDynArray.c dynamicArray.h + gcc -g -Wall -std=c99 -c testDynArray.c + +dynamicArray.o: dynamicArray.c dynamicArray.h + gcc -g -Wall -std=c99 -c dynamicArray.c + +clean: + rm dynamicArray.o + rm calc.o + rm testDynArray.o + rm calc + rm testda diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 2/testDynArray.c b/OSU Coursework/CS 261 - Data Structures/Assignment 2/testDynArray.c new file mode 100644 index 0000000..d0907e7 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 2/testDynArray.c @@ -0,0 +1,87 @@ +/* testDynArray.c + * This file is used for testing the dynamicArray.c file. + * This test suite is by no means complete or thorough. + * More testing is needed on your own. + */ +#include +#include +#include "dynamicArray.h" + + +void assertTrue(int predicate, char *message) +{ + printf("%s: ", message); + if (predicate) + printf("PASSED\n"); + else + printf("FAILED\n"); +} + + +// this main function contains some +int main(int argc, char* argv[]){ + + DynArr *dyn; + dyn = createDynArr(2); + + printf("\n\nTesting addDynArr...\n"); + addDynArr(dyn, 3); + addDynArr(dyn, 4); + addDynArr(dyn, 10); + addDynArr(dyn, 5); + addDynArr(dyn, 6); + + printf("The array's content: [3,4,10,5,6]\n"); + assertTrue(EQ(getDynArr(dyn, 0), 3), "Test 1st element == 3"); + assertTrue(EQ(getDynArr(dyn, 1), 4), "Test 2nd element == 4"); + assertTrue(EQ(getDynArr(dyn, 2), 10), "Test 3rd element == 10"); + assertTrue(EQ(getDynArr(dyn, 3), 5), "Test 4th element == 5"); + assertTrue(EQ(getDynArr(dyn, 4), 6), "Test 5th element == 6"); + assertTrue(sizeDynArr(dyn) == 5, "Test size = 5"); + + printf("\n\nTesting putDynArr...\nCalling putDynArr(dyn, 2, 7)\n"); + putDynArr(dyn, 2, 7); + printf("The array's content: [3,4,7,5,6]\n"); + assertTrue(EQ(getDynArr(dyn, 2), 7), "Test 3rd element == 7"); + assertTrue(sizeDynArr(dyn) == 5, "Test size = 5"); + + printf("\n\nTesting swapDynArr...\nCalling swapDynArr(dyn, 2, 4)\n"); + swapDynArr(dyn, 2, 4); + printf("The array's content: [3,4,6,5,7]\n"); + assertTrue(EQ(getDynArr(dyn, 2), 6), "Test 3rd element == 6"); + assertTrue(EQ(getDynArr(dyn, 4), 7), "Test 5th element == 7"); + + printf("\n\nTesting removeAtDynArr...\nCalling removeAtDynArr(dyn, 1)\n"); + removeAtDynArr(dyn, 1); + printf("The array's content: [3,6,5,7]\n"); + assertTrue(EQ(getDynArr(dyn, 0), 3), "Test 1st element == 3"); + assertTrue(EQ(getDynArr(dyn, 3), 7), "Test 4th element == 7"); + assertTrue(sizeDynArr(dyn) == 4, "Test size = 4"); + + printf("\n\nTesting stack interface...\n"); + printf("The stack's content: [3,6,5,7] <- top\n"); + assertTrue(!isEmptyDynArr(dyn), "Testing isEmptyDynArr"); + assertTrue(EQ(topDynArr(dyn), 7), "Test topDynArr == 7"); + + popDynArr(dyn); + printf("Poping...\nThe stack's content: [3,6,5] <- top\n"); + assertTrue(EQ(topDynArr(dyn), 5), "Test topDynArr == 5"); + + pushDynArr(dyn, 9); + printf("Pushing 9...\nThe stack's content: [3,6,5,9] <- top\n"); + assertTrue(EQ(topDynArr(dyn), 9), "Test topDynArr == 9"); + + printf("\n\nTesting bag interface...\n"); + printf("The bag's content: [3,6,5,9]\n"); + assertTrue(containsDynArr(dyn, 3), "Test containing 3"); + assertTrue(containsDynArr(dyn, 6), "Test containing 6"); + assertTrue(containsDynArr(dyn, 5), "Test containing 5"); + assertTrue(containsDynArr(dyn, 9), "Test containing 9"); + assertTrue(!containsDynArr(dyn, 7), "Test not containing 7"); + + removeDynArr(dyn, 3); + printf("Removing 3...\nThe stack's content: [6,5,9]\n"); + assertTrue(!containsDynArr(dyn, 3), "Test not containing 3"); + + return 0; +} \ No newline at end of file diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/.cproject b/OSU Coursework/CS 261 - Data Structures/Assignment 5/.cproject new file mode 100644 index 0000000..8bb1489 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 5/.cproject @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/.fuse_hidden00004383000000f5 b/OSU Coursework/CS 261 - Data Structures/Assignment 5/.fuse_hidden00004383000000f5 new file mode 100644 index 0000000000000000000000000000000000000000..cfa1bc0e51ffa55b24eaf79010ade0ff328f29ab GIT binary patch literal 32988 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 CcZ=`< literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/.project b/OSU Coursework/CS 261 - Data Structures/Assignment 5/.project new file mode 100644 index 0000000..4e73944 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 5/.project @@ -0,0 +1,26 @@ + + + assign5 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/Makefile b/OSU Coursework/CS 261 - Data Structures/Assignment 5/Makefile new file mode 100644 index 0000000..3ecb6b2 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 5/Makefile @@ -0,0 +1,27 @@ +all: prog1 prog2 + +prog1: dynamicArray.o main.o toDoList.o + gcc -g -Wall -std=c99 -o prog1 dynamicArray.o toDoList.o main.o + +prog2: dynamicArray.o main2.o toDoList.o + gcc -g -Wall -std=c99 -o prog2 dynamicArray.o toDoList.o main2.o + +main.o: main.c dynamicArray.h type.h toDoList.h + gcc -g -Wall -std=c99 -c main.c + +main2.o: main2.c dynamicArray.h type.h toDoList.h + gcc -g -Wall -std=c99 -c main2.c + +dynamicArray.o: dynamicArray.c dynamicArray.h + gcc -g -Wall -std=c99 -c dynamicArray.c + +toDoList.o: toDoList.c toDoList.h + gcc -g -Wall -std=c99 -c toDoList.c + +clean: + rm dynamicArray.o + rm toDoList.o + rm main.o + rm main2.o + rm prog1 + rm prog2 diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.c b/OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.c new file mode 100644 index 0000000..5eebd7a --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.c @@ -0,0 +1,572 @@ +/* dynArr.c: Dynamic Array implementation. */ +#include +#include +#include +#include "dynamicArray.h" + +struct DynArr +{ + TYPE *data; /* pointer to the data array */ + int size; /* Number of elements in the array */ + int capacity; /* capacity ofthe array */ +}; + +struct bag +{ + struct DynArr *dynArr; +}; + + +/* ************************************************************************ + Dynamic Array Functions +************************************************************************ */ + +/* Initialize (including allocation of data array) dynamic array. + + param: v pointer to the dynamic array + param: cap capacity of the dynamic array + pre: v is not null + post: internal data array can hold capacity elements + post: v->data is not null +*/ +void _initDynArr(DynArr *v, int capacity) +{ + assert(capacity > 0); + assert(v!= 0); + v->data = malloc(sizeof(TYPE) * capacity); + assert(v->data != 0); + v->size = 0; + v->capacity = capacity; + +} + +/* Allocate and initialize dynamic array. + + param: cap desired capacity for the dyn array + pre: none + post: none + ret: a non-null pointer to a dynArr of cap capacity + and 0 elements in it. +*/ +DynArr* createDynArr(int cap) +{ + DynArr *r; + assert(cap > 0); + r = malloc(sizeof( DynArr)); + assert(r != 0); + _initDynArr(r,cap); + return r; +} + +/* Deallocate data array in dynamic array. + + param: v pointer to the dynamic array + pre: v is not null + post: d.data points to null + post: size and capacity are 0 + post: the memory used by v->data is freed +*/ +void freeDynArr(DynArr *v) +{ + assert(v!=0); + + if(v->data != 0) + { + free(v->data); /* free the space on the heap */ + v->data = 0; /* make it point to null */ + } + v->size = 0; + v->capacity = 0; +} + +/* Deallocate data array and the dynamic array ure. + + param: v pointer to the dynamic array + pre: v is not null + post: the memory used by v->data is freed + post: the memory used by d is freed +*/ +void deleteDynArr(DynArr *v) +{ + assert (v!= 0); + freeDynArr(v); + free(v); +} + +/* Resizes the underlying array to be the size cap + + param: v pointer to the dynamic array + param: cap the new desired capacity + pre: v is not null + post: v has capacity newCap +*/ +void _dynArrSetCapacity(DynArr *v, int newCap) +{ + int i; + TYPE *oldData; + int oldSize = v->size; + oldData = v->data; + + printf("========Resizing========\n"); + /* Create a new dyn array with larger underlying array */ + _initDynArr(v, newCap); + + for(i = 0; i < oldSize; i++){ + v->data[i] = oldData[i]; + } + + v->size = oldSize; + /* Remember, init did not free the original data */ + free(oldData); + +#ifdef ALTERNATIVE + int i; + + /* Create a new underlying array*/ + TYPE *newData = (TYPE*)malloc(sizeof(TYPE)*newCap); + assert(newData != 0); + + /* copy elements to it */ + + for(i = 0; i < v->size; i++) + { + newData[i] = v->data[i]; + } + + /* Delete the oldunderlying array*/ + free(v->data); + /* update capacity and size and data*/ + v->data = newData; + v->capacity = newCap;struct Task { + char description[TASK_DESC_SIZE]; /* description of the task */ + int priority; /* task priority */ + }; +#endif +} + +/* Get the size of the dynamic array + + param: v pointer to the dynamic array + pre: v is not null + post: none + ret: the size of the dynamic array +*/ +int sizeDynArr(DynArr *v) +{ + assert(v!=0); + return v->size; +} + +/* Adds an element to the end of the dynamic array + + param: v pointer to the dynamic array + param: val the value to add to the end of the dynamic array + pre: the dynArry is not null + post: size increases by 1 + post: if reached capacity, capacity is doubled + post: val is in the last utilized position in the array +*/ +void addDynArr(DynArr *v, TYPE val) +{ + + assert(v!=0); + + /* Check to see if a resize is necessary */ + if(v->size >= v->capacity) + _dynArrSetCapacity(v, 2 * v->capacity); + + v->data[v->size] = val; + v->size++; + +} + +/* Get an element from the dynamic array from a specified position + + param: v pointer to the dynamic array + param: pos integer index to get the element from + pre: v is not null + pre: v is not empty + pre: pos < size of the dyn array and >= 0 + post: no changes to the dyn Array + ret: value stored at index pos +*/ +TYPE getDynArr(DynArr *v, int pos) +{ + assert(v!=0); + assert(pos < v->size); + assert(pos >= 0); + + return v->data[pos]; +} + +/* Put an item into the dynamic array at the specified location, + overwriting the element that was there + + param: v pointer to the dynamic array + param: pos the index to put the value into + param: val the value to insert + pre: v is not null + pre: v is not empty + pre: pos >= 0 and pos < size of the array + post: index pos contains new value, val +*/ +void putDynArr(DynArr *v, int pos, TYPE val) +{ + assert(v!=0); + assert(pos < v->size); + assert(pos >= 0); + v->data[pos] = val; +} + +/* Swap two specified elements in the dynamic array + + param: v pointer to the dynamic array + param: i,j the elements to be swapped + pre: v is not null + pre: v is not empty + pre: i, j >= 0 and i,j < size of the dynamic array + post: index i now holds the value at j and index j now holds the value at i +*/ +void swapDynArr(DynArr *v, int i, int j) +{ + TYPE temp; + assert(v!=0); + assert(i < v->size); + assert(j < v->size); + assert(i >= 0); + assert(j >= 0); + + temp = v->data[i]; + v->data[i] = v->data[j]; + v->data[j] = temp; + +} + +/* Remove the element at the specified location from the array, + shifts other elements back one to fill the gap + + param: v pointer to the dynamic array + param: idx location of element to remove + pre: v is not null + pre: v is not empty + pre: idx < size and idx >= 0 + post: the element at idx is removed + post: the elements past idx are moved back one +*/ +void removeAtDynArr(DynArr *v, int idx){ + int i; + assert(v!= 0); + assert(idx < v->size); + assert(idx >= 0); + + //Move all elements up + + for(i = idx; i < v->size-1; i++){ + v->data[i] = v->data[i+1]; + } + + v->size--; + +} + + + +/* ************************************************************************ + Stack Interface Functions +************************************************************************ */ + +/* Returns boolean (encoded in an int) demonstrating whether or not the + dynamic array stack has an item on it. + + param: v pointer to the dynamic array + pre: v is not null + post: none + ret: >0 if empty, otherwise 0 +*/ +int isEmptyDynArr(DynArr *v) +{ + assert(v!= 0); + return !(v->size); + /* alternatively: + + if(v->size == 0) + return 1; + else return 0; + + */ + + + +} + +/* Push an element onto the top of the stack + + param: v pointer to the dynamic array + param: val the value to push onto the stack + pre: v is not null + post: size increases by 1 + if reached capacity, capacity is doubled + val is on the top of the stack +*/ +void pushDynArr(DynArr *v, TYPE val) +{ + assert(v!=0); + addDynArr(v, val); +} + +/* Returns the element at the top of the stack + + param: v pointer to the dynamic array + pre: v is not null + pre: v is not empty + post: no changes to the stack +*/ +TYPE topDynArr(DynArr *v) +{ + assert(v!=0); + assert(!isEmptyDynArr(v)); + return v->data[v->size-1]; +} + +/* Removes the element on top of the stack + + param: v pointer to the dynamic array + pre: v is not null + pre: v is not empty + post: size is decremented by 1 + the top has been removed +*/ +void popDynArr(DynArr *v) +{ + assert(v!=0); + assert(! isEmptyDynArr(v)); + v->size--; +} + +/* ************************************************************************ + Bag Interface Functions +************************************************************************ */ + +/* Returns boolean (encoded as an int) demonstrating whether or not + the specified value is in the collection + true = 1 + false = 0 + + param: v pointer to the dynamic array + param: val the value to look for in the bag + pre: v is not null + pre: v is not empty + post: no changes to the bag +*/ +int containsDynArr(DynArr *v, TYPE val) +{ + int i = 0; + + assert(v!=0); + assert(!isEmptyDynArr(v)); + + for(i = 0; i < sizeDynArr(v); i++) + if(compare(v->data[i], val) == 0) + return 1; + return 0; + +} + +/* Removes the first occurrence of the specified value from the collection + if it occurs + + param: v pointer to the dynamic array + param: val the value to remove from the array + pre: v is not null + pre: v is not empty + post: val has been removed + post: size of the bag is reduced by 1 +*/ +void removeDynArr(DynArr *v, TYPE val) +{ + int i = 0; + assert(v!=0); + assert(!isEmptyDynArr(v)); + assert(containsDynArr(v,val)); /* Design decision: Error if they try to remove something not in there! */ + + for(i = 0; i < sizeDynArr(v); i++) + if(compare(v->data[i], val) == 0) + { + removeAtDynArr(v,i); + break; + } +} + +/* Copy elements from a dynamic array to another dynamic array + + param: source pointer to the source dynamic array + param: destination pointer to the destination dynamic array + pre: s is not null and s is not empty + post: destination is initialized + post: the elements from source are copied to destination +*/ +void copyDynArr(DynArr *source, DynArr *destination) +{ + int i; + assert(source->size > 0); + _initDynArr(destination, source->capacity); + /* copy elements to destination array */ + for(i = 0; i < source->size; i++) + destination->data[i] = source->data[i]; + + destination->size = source->size; +} + + +/* ************************************************************************ + Heap-based Priority Queue Implementation +************************************************************************ */ + +/* internal function prototypes */ +int _smallerIndexHeap(DynArr *heap, int i, int j); +void _adjustHeap(DynArr *heap, int max, int pos); + +/* Get the index of the smaller node between two nodes in a heap + + param: heap pointer to the heap + param: i index of one node + param: j index of other node + pre: i < size and j < size + ret: the index of the smaller node +*/ +int _smallerIndexHeap(DynArr *heap, int i, int j) +{ + /* FIXME */ + /* DONE */ + assert(i < heap->size); + assert(j < heap->size); + if(((struct Task*)heap->data[i])->priority > ((struct Task*)heap->data[j])->priority){ + return j; + }else{ + return i; + } +} + +/* Get the first node, which has the min priority, from the heap + + param: heap pointer to the heap + pre: heap is not empty + ret: value of first node +*/ +TYPE getMinHeap(DynArr *heap) +{ + /* FIXME */ + /* DONE */ + assert(heap != 0); + return heap->data[0]; +} + +/* Add a node to the heap + + param: heap pointer to the heap + param: node node to be added to the heap + pre: heap is not null + post: node is added to the heap +*/ +void addHeap(DynArr *heap, TYPE val) +{ + /* FIXME */ + /* DONE */ + int pos; + int parent; + assert(heap != 0); + addDynArr(heap, val); + pos = sizeDynArr(heap)-1; + while(pos != 0){ + parent = (pos -1)/2; + if(((struct Task*)heap->data[pos])->priority < ((struct Task*)heap->data[parent])->priority){ + swapDynArr(heap, pos, parent); + pos = parent; + }else{ + return; + } + } +} + +/* Adjust heap to maintain heap property + + param: heap pointer to the heap + param: max index to adjust up to (but not included) + param: pos position index where the adjustment starts + pre: max <= size + post: heap property is maintained for nodes from index pos to index max-1 (ie. up to, but not including max) +*/ +void _adjustHeap(DynArr *heap, int max, int pos) +{ + /* FIXME */ + /* DONE */ + int leftChild = 2*pos + 1; + int rightChild = 2*pos + 2; + + if(rightChild < max){ + int smallestindex = _smallerIndexHeap(heap, leftChild, rightChild); + if(((struct Task*)heap->data[pos])->priority > ((struct Task*)heap->data[smallestindex])->priority){ + swapDynArr(heap, pos, smallestindex); + _adjustHeap(heap, max, smallestindex); + } + }else if(leftChild < max){ + if(((struct Task*)heap->data[pos])->priority > ((struct Task*)heap->data[leftChild])->priority){ + swapDynArr(heap, pos, leftChild); + _adjustHeap(heap, max, leftChild); + } + } +} + +/* Remove the first node, which has the min priority, from the heap + + param: heap pointer to the heap + pre: heap is not empty + post: the first node is removed from the heap +*/ +void removeMinHeap(DynArr *heap) +{ + /* FIXME */ + /* DONE */ + int last = sizeDynArr(heap)-1; + //assert(last !=0); + putDynArr(heap, 0, getDynArr(heap, last)); + removeAtDynArr(heap, last); + _adjustHeap(heap, last, 0); +} + +/* builds a heap from an arbitrary dynArray + + param: v dynamicArray + pre: v is not empty + post: v is a proper heap +*/ + +void _buildHeap(DynArr *heap) +{ + /* FIXME */ + /* DONE */ + int max = sizeDynArr(heap); + for(int i = max/2 -1 ; i >=0 ; i--){ + _adjustHeap(heap, max, i); + } +} +/* + In-place sort of the heap + + param: heap pointer to the heap + pre: heap is not empty + post: the dynArr is in reverse sorted order +*/ + +void sortHeap(DynArr *heap) +{ + /* FIXME */ + /* DONE */ + _buildHeap(heap); + for(int i = sizeDynArr(heap)-1 ; i > 0 ; i--){ + swapDynArr(heap, 0, i); + _adjustHeap(heap, i, 0); + } + +} + diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.h b/OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.h new file mode 100644 index 0000000..5728a64 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.h @@ -0,0 +1,52 @@ +/* dynArr.h : Dynamic Array implementation. */ +#ifndef DYNAMIC_ARRAY_INCLUDED +#define DYNAMIC_ARRAY_INCLUDED 1 +#include "type.h" + +# ifndef TYPE +# define TYPE void* +# endif + +/* function used to compare two TYPE values to each other, define this in your compare.c file */ +int compare(TYPE left, TYPE right); +/* function used to print TYPE values, define this in your compare.c file */ +void print_type(TYPE curval); + +typedef struct DynArr DynArr; +struct bag; + +/* Dynamic Array Functions */ +DynArr *createDynArr(int cap); +void deleteDynArr(DynArr *v); + +int sizeDynArr(DynArr *v); + +void addDynArr(DynArr *v, TYPE val); +TYPE getDynArr(DynArr *v, int pos); +void putDynArr(DynArr *v, int pos, TYPE val); +void swapDynArr(DynArr *v, int i, int j); +void removeAtDynArr(DynArr *v, int idx); + +/* Stack interface. */ +int isEmptyDynArr(DynArr *v); +void pushDynArr(DynArr *v, TYPE val); +TYPE topDynArr(DynArr *v); +void popDynArr(DynArr *v); + +/* Bag Interface */ +int containsDynArr(DynArr *v, TYPE val); +void removeDynArr(DynArr *v, TYPE val); + + +/* Heap-based Priority Queue Interface */ +TYPE getMinHeap(DynArr *heap); +void addHeap(DynArr *heap, TYPE node); +void removeMinHeap(DynArr *heap); +void sortHeap(DynArr *heap); + + +/* Utility function*/ +void copyDynArr(DynArr *source, DynArr *destination); + + +#endif diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.o b/OSU Coursework/CS 261 - Data Structures/Assignment 5/dynamicArray.o new file mode 100644 index 0000000000000000000000000000000000000000..1a6d7a365541933a1c7a2ea18809d62f74110d14 GIT binary patch literal 26008 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 X?)51g>w}T!bXM~puG5slab5f`bJDRT literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/main.c b/OSU Coursework/CS 261 - Data Structures/Assignment 5/main.c new file mode 100644 index 0000000..5c8e0fb --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 5/main.c @@ -0,0 +1,164 @@ +#include +#include +#include +#include +#include "toDoList.h" + +int main (int argc, const char * argv[]) +{ + Task* newTask; + Task* firstTask; + char desc[TASK_DESC_SIZE], filename[50], *nlptr; + int priority; + char cmd = ' '; + FILE *filePointer; + DynArr* mainList = createDynArr(10); + + printf("\n\n** TO-DO LIST APPLICATION **\n\n"); + + do + { + printf("Press:\n" + "'l' to load to-do list from a file\n" + "'s' to save to-do list to a file\n" + "'a' to add a new task\n" + "'g' to get the first task\n" + "'r' to remove the first task\n" + "'p' to print the list\n" + "'e' to exit the program\n" + ); + /* get input command (from the keyboard) */ + cmd = getchar(); + /* clear the trailing newline character */ + while (getchar() != '\n'); + + switch (cmd) + { + case 'a': /* add new task */ + printf("Please enter the task description: "); + /* get task description from user input (from keyboard) */ + if (fgets(desc, sizeof(desc), stdin) != NULL) + { + /* remove trailing newline character */ + nlptr = strchr(desc, '\n'); + if (nlptr) + *nlptr = '\0'; + } + /* get task priority from user input (from keyboard) */ + do { + printf("Please enter the task priority (0-999): "); + scanf("%d", &priority); + } while(!(priority >= 0 && priority <= 999)); + + /* clear the trailing newline character */ + while (getchar() != '\n'); + + /* create task and add the task to the heap */ + newTask = createTask(priority, desc); + addHeap(mainList, newTask); + printf("The task '%s' has been added to your to-do list.\n\n", desc); + break; + + case 'g': /* get the first task */ + if (sizeDynArr(mainList) > 0) + { + firstTask = (Task*)getMinHeap(mainList); + printf("Your first task is: %s\n\n", firstTask->description); + } + else + printf("Your to-do list is empty!\n\n"); + + break; + + case 'r': /* remove the first task */ + if (sizeDynArr(mainList) > 0) + { + firstTask = (Task*)getMinHeap(mainList); + removeMinHeap(mainList); + printf("Your first task '%s' has been removed from the list.\n\n", firstTask->description); + /* need to free up memory occupied by this task */ + free(firstTask); + } + else + printf("Your to-do list is empty!\n\n"); + + break; + + case 'p': /* print the list */ + if (sizeDynArr(mainList) > 0) + { + printList(mainList); + } + else + printf("Your to-do list is empty!\n\n"); + + break; + + + case 's': /* save the list to file */ + if (sizeDynArr(mainList) > 0) + { + /* get filename from user input (from keyboard) */ + printf("Please enter the filename: "); + if (fgets(filename, sizeof(filename), stdin) != NULL) + { + /* remove trailing newline character */ + nlptr = strchr(filename, '\n'); + if (nlptr) + *nlptr = '\0'; + } + /* open the file */ + filePointer = fopen(filename, "w"); + if (filePointer == NULL) { + fprintf(stderr, "Cannot open %s\n", filename); + break; + } + /* save the list to the file */ + saveList(mainList, filePointer); + /* close the file */ + fclose(filePointer); + printf("The list has been saved into the file successfully.\n\n"); + } + else + printf("Your to-do list is empty!\n\n"); + + break; + + case 'l': /* load the list from the file */ + printf("Please enter the filename: "); + /* get filename from user input (from keyboard) */ + if (fgets(filename, sizeof(filename), stdin) != NULL) + { + /* remove trailing newline character */ + nlptr = strchr(filename, '\n'); + if (nlptr) + *nlptr = '\0'; + } + /* open the file */ + filePointer = fopen(filename, "r"); + if (filePointer == NULL) { + fprintf(stderr, "Cannot open %s\n", filename); + break; + } + /* load the list from the file */ + loadList(mainList, filePointer); + /* close the file */ + fclose(filePointer); + printf("The list has been loaded from file successfully.\n\n"); + break; + + case 'e': /* exit the program */ + printf("Bye!\n\n"); + break; + + default: + printf("What is your command anyway?\n\n" ); + break; + } + } + while(cmd != 'e'); + /* delete the list */ + deleteList(mainList); + + return 0; +} diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/main.o b/OSU Coursework/CS 261 - Data Structures/Assignment 5/main.o new file mode 100644 index 0000000000000000000000000000000000000000..67c1c87449f814aa1b7529bede460cba2d5e306d GIT binary patch literal 11856 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/main2.c b/OSU Coursework/CS 261 - Data Structures/Assignment 5/main2.c new file mode 100644 index 0000000..b8ff87b --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 5/main2.c @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include "dynamicArray.h" +#include "toDoList.h" + +/* NOTE: Switch between TESTSORT and TESTHEAP to test either the heap sort algoritm or the heap operations*/ +#define TESTHEAP + +int main(int argc, const char * argv[]) +{ + Task *task1, *task2, *task3, *task4, *task5, *task6, *task7, *task8, *task9, *task10; + DynArr *mainList; + int i; + mainList = createDynArr(10); + + /* create tasks */ + task1 = createTask(9, "task 1"); + task2 = createTask(3, "task 2"); + task3 = createTask(2, "task 3"); + task4 = createTask(4, "task 4"); + task5 = createTask(5, "task 5"); + task6 = createTask(7, "task 6"); + task7 = createTask(8, "task 7"); + task8 = createTask(6, "task 8"); + task9 = createTask(1, "task 9"); + task10 = createTask(0, "task 10"); + + /* add tasks to the dynamic array */ + addHeap(mainList, task1); + addHeap(mainList, task2); + addHeap(mainList, task3); + addHeap(mainList, task4); + addHeap(mainList, task5); + addHeap(mainList, task6); + addHeap(mainList, task7); + addHeap(mainList, task8); + addHeap(mainList, task9); + addHeap(mainList, task10); + +#ifdef TESTHEAP + for(i = 0; i < sizeDynArr(mainList);i++) + printf("DynArr[%d] = %d\n", i, ((Task*)getDynArr(mainList,i))->priority); + + + while(!isEmptyDynArr(mainList)) + { + Task* v; + v = getMinHeap(mainList); + printf("Val = %s___%d\n", v->description, v->priority); + removeMinHeap(mainList); + } +#endif + +#ifdef TESTSORT + + printf("Before Sort Called \n"); + for(i = 0; i < sizeDynArr(mainList);i++) + printf("DynArr[%d] = %d\n", i, ((Task*)getDynArr(mainList,i))->priority); + + + /* sort tasks */ + sortHeap(mainList); + printf("After Sort Called \n"); + + /* print sorted tasks from the dynamic array */ + for(i = 0; i < sizeDynArr(mainList);i++) + printf("DynArr[%d] = %d\n", i, ((Task*)getDynArr(mainList,i))->priority); + + return 0; + +#endif +} diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/main2.o b/OSU Coursework/CS 261 - Data Structures/Assignment 5/main2.o new file mode 100644 index 0000000000000000000000000000000000000000..5959d2b154b199f8e29b7e9f5c16f1718934777e GIT binary patch literal 6544 zcmb`Le{38_6~||HFU~nJD*A8G-(r;0_3dkHue(V zp1E5)zKYg{(jS)lM+~B>kP(scPlTwFN`N9E5lcn10f8z|t5&F@s;FcU{zwH9Q7M%7 zX5Kr`&EEclnA7dd`^Wn^LO@#RdTDv=LTR~puC(+&iq@kDn%maYSBk6Hn``;yu~p34=*05bMaWn#t}gxh3Q8{HLw4`U;;N~ikDl5DCvIyPA>1;toLn``=iuS1J9u@6X z(Xfj4spwu66$ZtTX7E70{*|4TuVwGg?yPJPUv#H2)fgWiNAm-iWL#N7B;~5^w6tY5 zKI|l}C1G2*euQl+D?t!f5I|gk!bxoMgAfWxt5r@)63HegHcg{iyZa&_l!F}F~?Fh ztbF(cnV93OTz?`hb9>*H<_imL=DBwBLc4jX-Mp-u_R5In$zCb7S&y_?C)%u&%1ZxJ zHt6g^pD(OFIXWxPEo972_RR^afNi%|ri4f&8z4v|arhF+-^iZzTRYPODJQ)>-EVER zGB6SLZ6cLA2nYs%k}%teKA@umFm1a8MqLAzlTM}frw*hnFgN!KCymDFz&@CVq-Bi` zAn(2v)OnbWE!$cGn4SSJ?&}evCube%Q3Y@B86ChTjC4K!*&Zy~yQx*e2AAnQZDt>s zNmU`{W>OXw*80zBTbxk~8#_(;z%rcPs}?`(fw>H)hgA>0WrscL_Al5>?j^hH_;r5;kYN9L$jrm1f{p{W5G?x2XsWBQ*%7BxS9? zmCQ#zg$T(f3&Kv=EBLVQ>W9ecI@XokR``4JJv4siY)>AuZD`O;-LKXCuqi5Dqg?lA zLcbP>##F5yW^oTU{Kq_O9vvmJ)$(!NZ-ipH7EEU41GQg(LrWpFW`l-58F-a!dCIK| zw?0`0XB!}24Z{3`{p=*tj9httoe+!y=QasEKK{&!0?MfE}93@nWyc; zyZPSE^~P}i=7pM*R;pjHnD!7v%-|Ct>A$H+8H0js>@ z_>FuVy$Eq#8$X;QbNr40Gks#Yw`rjMfQA-K?Fq;;8Okrpn}iT2(a?gaoq{}*p}db4 z)Sy-tlcu%|%$!ry4So`z5UWV8A9(Xb`u|N}rcW$#i0VI&h89fi8OZBY|4FK!*D0=F zc!fsle-;?}?v#M^3`A>l9DXte#j|2@wqKp+PsY91*!HONAq7kRy7WsrG;^+^UTmzn8Ga zPTujo)QRtk;kg)&>%WtqLopoB<4*dq7>?&(Cw=R-igznfu6u6isUMeQ$h)6gsgyi- zMofAkWy0+;2v5mdBoWAa$Pc8f?p14Z9$S8+Se*%*B!hNfpx2JvQ`oK#KT_cqnX7*G z>8oxxaolD&o2)MwdigsO*a70E{)nOHmGp3oo_}QGI|19n?RI1IUnkCbz7vKq`o|6Z z4ziz#(VsQ+car^s82x!e&*SxCjQ;0_p3mjA82wd4kLwk~A5|phSD&xHYJ4lCc^>~A z!!vXc;ymj59Wi`w3?Gf*Uyb3l82;@T{{0w!QRDFQx7FV(#Ce?@rT$;l^mrHG@p((* zxCWX3P2<}%-bL>t_J4x>XNY5@`@dP^pV0j5);PXPxn8<<$djA*99DsM7YtZ0{$KNB zG$7y_z`&f>2k$55^GYV@wJuL$YJ$wUmGZIM$oYJ}gE;!ZFNZ-&u>W_-9ya)w$;Nv& z2G;Yvpr~+*|B&qC2A?MTQG;_oU4uVD_LRXtMRv{LzbE@!2EU)|rw#r&vcGF^eiNTF zIGJM2;OytO2Iq76jTrv6!SiIVQ_S;7rnqi!p5Gh9abA)vhS)|25O}^Ol_~lS&gWXz z;Qt_f-rye)KWK2i8a!n1F0%PN;r6J1D}^|1==oo*ronF_`x%4ZLN=c>?Eg06=MDXz ysQoV)d=K&85yuGk(O<}Z-QZc;eENRpG`h;*0|NU|7W}0`36p1uqg!$<$$tT;*-p3s literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/prog1 b/OSU Coursework/CS 261 - Data Structures/Assignment 5/prog1 new file mode 100644 index 0000000000000000000000000000000000000000..3e4ae946a59a1912b288d91b0589ab3f93efc831 GIT binary patch literal 32988 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/prog2 b/OSU Coursework/CS 261 - Data Structures/Assignment 5/prog2 new file mode 100644 index 0000000000000000000000000000000000000000..27c4494731cd1454946acbfbafe4297f62f8b8ac GIT binary patch literal 31788 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 vIb~ +#include +#include +#include +#include "toDoList.h" + + +/* Create a task from the description and the priority + + param: priority priority of the task + param: desc pointer to the description string + pre: none + post: none + ret: a task with description and priority +*/ +Task* createTask (int priority, char *desc) +{ + /* FIXME */ + /* DONE */ + struct Task *temp = malloc(sizeof(struct Task)); + strcpy(temp->description, desc); + temp->priority = priority; + return temp; +} + +/* Save the list to a file + + param: heap pointer to the list + param: filePtr pointer to the file to which the list is saved + pre: The list is not empty + post: The list is saved to the file in tab-delimited format. + Each line in the file stores a task, starting with the + task priority, followed by a tab character (\t), and + the task description. + + The tasks are not necessarily stored in the file in + priority order. + +*/ +void saveList(DynArr *heap, FILE *filePtr) +{ + int i; + Task* task; + assert(sizeDynArr(heap) > 0); + for(i = 0; i < sizeDynArr(heap); i++) + { + task = getDynArr(heap, i); + fprintf(filePtr, "%d\t%s\n", task->priority, task->description); + } +} + +/* Load the list from a file + + param: heap pointer to the list + param: filePtr pointer to the file + pre: none + post: The tasks are retrieved from the file and are added to the list. + Refer to the saveList() function for the format of tasks in the file +*/ +void loadList(DynArr *heap, FILE *filePtr) +{ + Task* task; + char line[100]; /* Assume lines < 100 */ + char desc[TASK_DESC_SIZE], *nlptr; + int priority; + + /* Read the priority first, then the description. + * fgets() is used to read string with spaces + */ +#ifdef NOTDEF + while (fscanf(filePtr, "%d\t", &priority) != EOF) + { + /* fgets() stops reading at \n character */ + fgets(desc, sizeof(desc), filePtr); + /* remove trailing newline character */ + nlptr = strchr(desc, '\n'); + if (nlptr) + *nlptr = '\0'; + + task = createTask(priority, desc); + addHeap(heap, task); + } +#endif + + while(fgets(line, sizeof(line), filePtr) != 0) + { + sscanf(line, "%d\t%[^\n]", &priority, desc); + task = createTask(priority, desc); + addHeap(heap, task); + } /* should use feof to make sure it found eof and not error*/ + +} + +/* Print the list + + param: heap pointer to the list + pre: the list is not empty + post: The tasks from the list are printed out in priority order. + The tasks are not removed from the list. +*/ +void printList(DynArr *heap) +{ + /* FIXME: Write this */ + /* DONE: May need adjustment */ + Task *temp; + + for(int i = 0 ; i < sizeDynArr(heap) ; i++){ + temp = (Task*)getDynArr(heap, i); + printf("Priority: %d\tDescription: %s\n", temp->priority, temp->description); + } +} + +/* Delete the list + + param: heap pointer to the list + post: The tasks from the list are removed and their occupied memories are freed + +*/ +void deleteList(DynArr *heap) +{ + + Task* task; + while(sizeDynArr(heap) > 0) + { + /* get the task */ + task = getMinHeap(heap); + /* remove the task */ + removeMinHeap(heap); + /* free the task */ + free(task); + } + /* free the heap */ + deleteDynArr(heap); +} + +/* Compare two tasks by priority + + param: left first task + param: right second task + pre: none + post: none + ret: -1 if priority of left < priority of right + 1 if priority of left > priority of right + 0 if priority of left = priority of right +*/ +/*Define this function, type casting the value of void * to the desired type. + The current definition of TYPE in dynamicArray.h is void*, which means that left and + right are void pointers. To compare left and right, you should first cast + left and right to the corresponding pointer type (struct Task*), and then + compare the values pointed by the casted pointers. + + DO NOT compare the addresses pointed by left and right, i.e. "if (left < right)", + which is really wrong. + */ +int compare(TYPE left, TYPE right) +{ + /*FIXME: write this*/ + /* DONE */ + struct Task *temp1 = (struct Task*)left; + struct Task *temp2 = (struct Task*)right; + + if(temp1->priority < temp2->priority){ + return -1; + }else if(temp1->priority > temp2->priority){ + return 1; + }else{ + return 0; + } +} + +/*Define this function, type casting the value of void * to the desired type*/ +void print_type(TYPE curval) +{ + /*FIXME: write this*/ + /* DONE */ + Task* data1; + data1 = (Task*)curval; + printf("Priority: %d\tDescription: %s\n", data1->priority, data1->description); +} + diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/toDoList.h b/OSU Coursework/CS 261 - Data Structures/Assignment 5/toDoList.h new file mode 100644 index 0000000..10d1ef2 --- /dev/null +++ b/OSU Coursework/CS 261 - Data Structures/Assignment 5/toDoList.h @@ -0,0 +1,17 @@ +#ifndef __TODOLIST_H +#define __TODOLIST_H + +#include "dynamicArray.h" +#include "type.h" + +Task* createTask (int priority, char *desc); + +void saveList(DynArr *heap, FILE *filePtr); + +void loadList(DynArr *heap, FILE *filePtr); + +void printList(DynArr *heap); + +void deleteList(DynArr *heap); + +#endif diff --git a/OSU Coursework/CS 261 - Data Structures/Assignment 5/toDoList.o b/OSU Coursework/CS 261 - Data Structures/Assignment 5/toDoList.o new file mode 100644 index 0000000000000000000000000000000000000000..89a13e2b92980496238bf5946f73955c65dc9739 GIT binary patch literal 11408 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.sdf b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.sdf new file mode 100644 index 0000000000000000000000000000000000000000..1050693cfadeecbd4209ccc4af6b0989eae5d482 GIT binary patch literal 393216 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⁢bb3iDU24)gDIhxw+yF#o?l3GsV- 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.sln b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.sln new file mode 100644 index 0000000..8fb02a9 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ASM_Project", "Assignment1.vcxproj", "{4164AA65-1EF9-4E69-899B-D1BED776070B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.ActiveCfg = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.Build.0 = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.ActiveCfg = Release|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.v12.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..9a4fc8611992436d0c98df858db5fcba2a655e4e GIT binary patch literal 31744 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 a@1A<<=RX-<7v((AHfRjYa~|qtBL4>{z)%|i literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.vcxproj b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.vcxproj new file mode 100644 index 0000000..ec0f08e --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.vcxproj @@ -0,0 +1,79 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + {4164AA65-1EF9-4E69-899B-D1BED776070B} + ASM_Project + + + + Application + v120 + + + Application + v120 + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + + + + c:\Irvine + + + user32.lib;irvine32.lib;%(AdditionalDependencies) + c:\Irvine;%(AdditionalLibraryDirectories) + true + Console + false + + + false + + + + + false + + + c:\Irvine;%(AdditionalLibraryDirectories) + Console + false + user32.lib;irvine32.lib;%(AdditionalDependencies) + + + c:\Irvine + + + + + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.vcxproj.user b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/Assignment1.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/main.asm b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/main.asm new file mode 100644 index 0000000..9267cfc --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 1/main.asm @@ -0,0 +1,59 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TITLE Assignment 1 (main.asm) +;Author: Corwin Perren +;Date: 1/19/2014 +;Description: +; This program will request two numbers from the user, perform common +; mathematical calculations on them, and print the results +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +INCLUDE Irvine32.inc +.data +ProgramTitle BYTE "CS 271 - Assignment 1",0dh,0ah,0 +CreatorName BYTE "Creator: Corwin Peren",0dh,0ah,0 + +Prompt1 BYTE "Please enter the first number: ",0 +Prompt2 BYTE "Please enter the second number: ",0 + +SumMessage BYTE "Sum: ",0 +DifMessage BYTE "Difference: ",0 +ProdMessage BYTE "Product: ",0 +QuotMessage BYTE "Quotient: ",0 +RemainMessage BYTE "Remainder: ",0 + +TermMessage BYTE "Computations Complete...",0dh,0ah,0 + +FirstNumber DWORD ? +SecondNumber DWORD ? + +FinalSum DWORD ? +FinalDif DWORD ? +FinalProd DWORD ? +FinalQuot DWORD ? +FinalRemain DWORD ? + + +.code + +NineToFive PROC uses EAX + mov eax, 9 + call WriteInt + mov eax, 8 + call WriteInt + mov eax, 7 + call WriteInt + mov eax, 6 + call WriteInt + mov eax, 5 + call WriteInt + + ret +NineToFive ENDP + +main PROC + + call NineToFive + exit +main ENDP + +END main \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.sdf b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.sdf new file mode 100644 index 0000000000000000000000000000000000000000..72ad6c0846f8bcfec2f6a3763c8102c930c8037c GIT binary patch literal 393216 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.sln b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.sln new file mode 100644 index 0000000..6e3145c --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ASM_Project", "Assignement 2.vcxproj", "{4164AA65-1EF9-4E69-899B-D1BED776070B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.ActiveCfg = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.Build.0 = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.ActiveCfg = Release|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.v12.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignement 2.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..e12e504bbe82a6c3c29c8090eaf230d006d86f65 GIT binary patch literal 19968 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 + + + + Debug + Win32 + + + Release + Win32 + + + + + + + {4164AA65-1EF9-4E69-899B-D1BED776070B} + ASM_Project + + + + Application + v120 + + + Application + v120 + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + + + + c:\Irvine + + + user32.lib;irvine32.lib;%(AdditionalDependencies) + c:\Irvine;%(AdditionalLibraryDirectories) + true + Console + false + + + false + + + + + false + + + c:\Irvine;%(AdditionalLibraryDirectories) + Console + false + user32.lib;irvine32.lib;%(AdditionalDependencies) + + + c:\Irvine + + + + + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignment 2.sln b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignment 2.sln new file mode 100644 index 0000000..469d991 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/Assignment 2.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ASM_Project", "Project 2.vcxproj", "{4164AA65-1EF9-4E69-899B-D1BED776070B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.ActiveCfg = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.Build.0 = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.ActiveCfg = Release|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/main.asm b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/main.asm new file mode 100644 index 0000000..1f99ba6 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 2/main.asm @@ -0,0 +1,268 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TITLE Assignment 2 (main.asm) +;Author: Corwin Perren +;Date: 1/28/2014 +;Description: +; This program will calculate and display the nth iteration of the fibonacci +; sequence for n values between 1 and 46 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +INCLUDE Irvine32.inc +.data +ProgramTitle BYTE "CS 271 - Assignment 2",0 +ProgrammersName BYTE "Programmed By: Corwin Perren",0 + +NamePrompt BYTE "By what name may I call you?",0 +NamePrompt2 BYTE "Your name: ", 0 + +NameResponse BYTE "Welcome, ", 0 +NameResponse2 BYTE ".", 0 + +FibPrompt BYTE "How many values of the fibonacci sequence would you like to calculate?", 0 +FibPrompt2 BYTE "Enter a value from 1 to 46: ", 0 +FibPromptIncorrect BYTE "Value was not between 1 and 46. Please try again.", 0 + +TabString BYTE 9, 0 +ExtraTab DWORD 1346269 + +TryAgainMessage BYTE "Would you like to run the program again?", 0 +TryAgainMessage2 BYTE "Answer (y/n): ", 0 + +IncorrectTryMessage BYTE "Please enter y or n....", 0 + +TermMessage BYTE "Goodbye, ", 0 +TermMessage2 BYTE ".", 0 + +FibMax DWORD 46 +FibMin DWORD 1 + +UserName BYTE 25 dup(0) +KeyAnswer BYTE 2 dup(0) +NumFib DWORD ? + +FibVal DWORD 1 +FibVal2 DWORD 1 + +CurCol DWORD 0 +ColMax DWORD 5 + +Yep BYTE "y", 0 +Nope BYTE "n", 0 + +.code +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Simple procedure for printing a tab to the screen +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +InsertTab PROC + mov edx,OFFSET TabString ;Moves the tab character into the buffer + call WriteString ;Writes the tab to the screen + ret ;Returns out of the procedure +InsertTab ENDP + +main PROC + call Clrscr ;Clears the screen + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Write title and programmers name to screen + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov edx,OFFSET ProgramTitle ;Gets title ready to print + call WriteString ;Prints title + call Crlf ;Prints a new line + + mov edx,OFFSET ProgrammersName ;Gets programmers name ready to print + call WriteString ;Prints programmers name + call Crlf ;Prints newline + call Crlf ;Prints newline + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Prompt user for their name + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov edx,OFFSET NamePrompt ;Gets username prompt ready + call WriteString ;Prints username prompt + call Crlf ;Prints newline + + mov edx,OFFSET NamePrompt2 ;Gets second half of username prompt ready + call WriteString ;Prints username prompt part 2 + mov edx,OFFSET UserName ;Moves offset for username storage var into edx + mov ecx,SIZEOF UserName ;Sets max number of characters to read in + call ReadString ;Reads in username string from user + call Crlf ;Prints newline + call Crlf ;Prints newline + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Write user welcome message, with their name + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +DoAgain: + call Clrscr ;Clears the screen to clean up output + mov edx,OFFSET NameResponse ;Gets the welcome message part 1 ready to print + call WriteString ;Prints welcome message part 1 + mov edx,OFFSET UserName ;Gets username ready to print + call WriteString ;Prints username + mov edx,OFFSET NameResponse2 ;Gets welcome message part 2 redy to print + call WriteString ;Prints welcome message part 2 + call Crlf ;Prints a new line + call Crlf ;Prints a new line + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Prompt user for number of fibonacci to calculate + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov edx,OFFSET FibPrompt ;Gets prompt for fibonacci number ready + call WriteString ;Prints fib prompt + call Crlf ;Prints a new line + + jmp EnterNumber ;Jumps to enter number label to begin input + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;This prompt shows when the number enterred is not within 1 to 46 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +IncorrectInput: + call Crlf ;Prints a new line + mov edx,OFFSET FibPromptIncorrect ;Gets incorrect range prompt ready to print + call WriteString ;Prints incorrect range prompt + call Crlf ;Prints a new line + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Main prompt and read-in of fibonacci value from user + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +EnterNumber: + mov edx,OFFSET FibPrompt2 ;Get main number entry prompt ready to print + call WriteString ;Prints main input prompt + call ReadInt ;Reads in int from user + + cmp eax, FibMin ;Checks if input is less than 1 + jl IncorrectInput ;Jumps to incorrect input if true + + cmp eax, FibMax ;Checks if input is greater than 46 + jg IncorrectInput ;Jumps to incorrect input if true + + mov NumFib, eax ;Copies number to variable if in correct range + call Crlf ;Prints a new line + + mov FibVal, 1 ;Reset fib start vals + mov FibVal2, 1 ;Reset fib start vals + mov CurCol, 0 ;Reset current column position + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;This section prints the first fibonacci sequence value + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov eax, FibVal ;Gets first value of fibonacci sequence ready to print (1) + call WriteInt ;Writes value to screen + cmp NumFib, 1 ;Checks if only this one value should be displayed + je FibDone ;If true, jump to end of program + inc CurCol ;Increment column index + call InsertTab ;Prints tab for column alignment + call InsertTab ;Prints tab for column alignment + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;This section prints the second fibonacci sequence value + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + Call WriteInt ;Prints the second value of the fibonacci sequence (also 1) + cmp NumFib, 2 ;Checks if only these two should be displayed + je FibDone ;If true, jump to end of program + + inc CurCol ;Otherwise, increment column index + call InsertTab ;Prints tab for column alignment + call InsertTab ;Prints tab for column alignment + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Setup of registers for the impending loop + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov ecx, NumFib ;Sets loop ecx value + sub ecx, 2 ;Subtracts two because of the first two have already been printed + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Main fibonacci calculation and print loop + ;PSEUDO + ;newval = FibVal2 + Fibval + ;print newval + ;FibVal = FibVal2 + ;FibVal2 = newval; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CalcFib: + mov eax, FibVal2 ;Moves most recent fibonacci value into one reg + add eax, FibVal ;Adds second to last to most recent + call WriteInt ;Prints this fibonacci value to screen + + push FibVal2 ;Moves old most recent to temp spot for move + pop FibVal ;Replaces second to last old val + mov FibVal2, eax ;Moves new most recent val to FibVal2 + + call InsertTab ;Prints tab for column alignment + cmp eax, ExtraTab ;Check if output val requires extra tab on output + jl OneExtra ;Jump to extra tab output label if necessary + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Return jump point for extra tab printing to make output alignment nice + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +MidCalcFib: + inc CurCol ;Increment column index + mov edx, CurCol ;Place index in reg for compare + cmp edx, ColMax ;Compare current col index with max + jne CalcFibLoop ;Jump to rest of loop if newline not needed + + call Crlf ;Prints newline when needed + mov CurCol, 0 ;Resets current column index + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Jump location used for avoiding printing a newline from above + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CalcFibLoop: + loop CalcFib ;Loops fib calc sequence until ecx counter 0 + jmp TryAgain ;Jumps to program end if loop done + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Jump location used for printing on screen tabs + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +OneExtra: + call InsertTab ;Calls procedure to input tab when necessary + jmp MidCalcFib ;Jumps back to where it was called + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;This section deals with jumping if the user wants to calculate more values + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +IncorrectTry: + call Crlf ;Prints a new line + mov edx,OFFSET IncorrectTryMessage ;Gets ready to print the incorrect try message + call Writestring ;Prints the incorrect try message + +TryAgain: + call Crlf ;Prints a new line + call Crlf ;Prints a new line + mov edx,OFFSET TryAgainMessage ;Gets ready to print the try again message + call WriteString ;Prints the try again message + call Crlf ;Prints a new line + + mov edx,OFFSET TryAgainMessage2 ;Gets ready to print the try again message part 2 + call WriteString ;Prints the try again message 2 + mov edx,OFFSET KeyAnswer ;Assigns edx to offset of keyanswer for keyboard input + mov ecx,SIZEOF KeyAnswer ;Sets number of characters to read in + call ReadString ;Reads in keyboard input + + INVOKE Str_compare,OFFSET KeyAnswer,OFFSET Yep ;Uses a multi-input irvine procedure to do a string comparison + je DoAgain ;Jump to DoAgain if the user answered 'y' + + INVOKE Str_compare,OFFSET KeyAnswer,OFFSET Nope ;Uses a multi-input irvine procedure to do a string comparison + je FibDone ;Jumps to end if user answered 'n' + + jmp IncorrectTry ;Jumps to an incorrect input section if user enterred wrong values + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Section to show the termination message + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +FibDone: + call Crlf ;Prints a new line + call Crlf ;Prints a new line + mov edx,OFFSET TermMessage ;Gets termination message part 1 ready to print + call WriteString ;Prints termination message + + mov edx,OFFSET UserName ;Gets username ready to print + call WriteString ;Prints username + + mov edx,OFFSET TermMessage2 ;Gets termination message part 2 ready to print + call WriteString ;Prints termination messag part 2 + + call Crlf ;Prints a new line + exit ;Ends main program +main ENDP +END main \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/ASM_Project.exe b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/ASM_Project.exe new file mode 100644 index 0000000000000000000000000000000000000000..26a93f84f55c56c7c8ce888df31c1ce78c9a4c18 GIT binary patch literal 1225216 zcmeI(3zS`DeJJofGnpjhi5NxNss{@OmL>!NA0fenWCo(dOlHC>BIYD>CNp6&6VD?d zwJbviy(Cj^t9`6xi}#Ays<*B#mbHqLTOJu4z}j1Adn>K=3c>2ZVJQVlLQFgN|LrqL zCiv*OtM%UY`a6sL?eG14`?vT0_RcxO+Ks=SwPaZ~Ew+h?EW11Q>9Zmae{%466wiC@ z$h_?Hr~KKOcQ;+}XJ>Bc?W+`aln1w#i`xrZiUR|K)xzddpC*u@EymtBbD|${w~sg^=GfT(=oZf zGT(RhZRt&If80zv+Oq75rq*olv!{0*tMho)(loniPL?f=oSmoT*=L*@yR>zre|(oRv&SAeEnAi%kH>zpT}n>QY@^0o-lywb70Wc)&wZCYIJE>??Kb})`LKlW7TlGvtvRs_i6 zMz!qkOL6?0qOd#mmrkh^(G^*C-{QVT#S2;^Bj%XH{eJAHd{(6X%9Zk#$jeQ_Ca?F| zAFem0ndnbJ;H&BL)c&{xpL*b|2;QAy3sY?I!U*=J7fVeoAxYUad&5y)mrNl)3WTgw(oXKTvQ$H%<2oHQqOSP zcYE$!e@|z2^YRpCaY^r-^Gi$WM$W`VSLR_V z?Oh*ZO!j+T^!pm5-vdg8FoiNop~c~A6K|H0fW+c>(ZqyEv3Q)5zvj_RT089;;t6 zJIm_#PE1UUR8#K5k=yfN+mS5W`<|miKbTgXG4zAx>d%j_9G+f(c~tEj`R!Eg6RG2t z=MFwKetpmI^q%`4npwYaUbIY+H$hqM;=kR^?t+TT1n#lZY%6vZ7>5apq_0Gx6KT4V3%roz= zFQ3dDNts{CGY{0yNtyLe|8w5){i)=xykx9CZ?gJBDf4&p%m?c)p3)fY&r{}y^2{&S zzm+oYNE42E{B)G+J7d9v+>tuEo8c_00dmfu1{G5u_0t>$&svh)rCS z(vyo$Ej1n8wC#oZ%81>$Bd(}z|5(2$#nXB-)|ytyrsC+bCFPmR-nMI6&u3zh*);p> zwbuP-L@(R2uFh>)y_EOTwZ8MJtMj6tPeo_tMem5B_g=s8+IJscvs#X=S$jI`x4-V# zihMM+9)5P{#jG|Xe{&qaWZ(4s)Sgmp9&c?w_z&ZY^8EdA=Vkj|x#!4|@)>)MylvNl zp@Z}HUU~G;ljXU?R~~ISP@djC{`leX>3QWB)5w#6htmiTwjFJX_KksN<#nF=jnv_Z zv1Y|sjTzjuY*B4?w1|aeVom$_^kr|THMg&c73_O)&(>DFbUJI&bXMonIech*_{zgO zX0#mG(Gt^H9wY3j%^bSv=tQk~{LGP8htGKH$XjDqzkX({ylqD&Chq#cw5GYaE0)2f#2(4u!n-PY0n^7`z~6pICR<7ijs@MHDAi@C+p8Q08n!v{9Ldvx*w z+i_s++*99-SoQl+eSPQ1o;c56ig(7W{<(O}4L?-xkE7do zZ8~3%M)UQZ9rZQQ+tA^xHnToIVlR$Qzay0#9!;Wo`{8FBJ?zMPNGGv*{F*7I`T4u- z!PcIbd;08O7m+A$-`RZDH{ZDAYoFK_>ATa*<)O1vojX%7{|l`tyD4wge(;eyQszl# z_T=e57iTu6Kff{k{02U}{=^-8daNVqwx75tUFG$+72^3Bw?Uq$MxtkE`3GWvY*+Vf zZAUw{HTB*Qsmby;NBN<2A%yBJzZKK`;VQ2^QKh;w`bw>vYM(#UI+!BSr26TeJ1P=k?rthX#CVK6en47xmnf({z^Wv2uKY}c7(k#1u(?sp?a2agKNR_QW#g|p zG}0jYG@R#hX=coS2&;M~BxQy=&I9e^`52BR%x}=8KP1t{FZu zzG3)C%S}hujm^lP7L#2xM;FI0o8@_;_dp!+wx-+Ko8ReR#ZIXE>k z$6KPeVt)6Wv{t`A?*E~un|qGEgnswcX<6>fmxDb^v+A@^jkEQmShY!q5kFSpPS6w|3x9oy&9e!wKqtVglKKb73 zuRT`f>fxJaHpX~+jB#0v@!rX2U&s1Xc6I%0ah=7TUw!%TLzlN4-Zx`u+nidtm#8*`|@P5UN+>TB+CKNIcMPKXKo`HWs{3q_U%NIoufgxV2Mq@(K9i zU&ykLMT-*+zIS+H;!815cJGrh?V$%}=Z~DpMfM~0H8H}iGuC}%jtQ*<*%i|DJJQCwG;<1tr=ESHs#;C(L9ewmWWB=)y7&cp% zPa)ohv+VfL|071aH7{-q|Lu5fc=Yi%++UqD{7|FWk~lYUK|lJ$Wh1GVmaoiUpBMX$ z;%`jxb1z=|^sX5rm!|luFJAl1vG~g_Ui*B+H>CX5k=MqqeqD4n^kP$O*2s-1xi*sZ z3!jbq?t9aQ#-|-@9&aB1m9)~uy>x1J+beEKmEzxuaji$C;{|ca_5Rl=ny8&RQJa%) z{B1G2hY!rjrkwhhzc4Y;S#OR9*|D3UqjT~;*n37gi*bv5JUU4a{e6*fM@o!#bk8?T9lU}d~uek~S(eUIFCVA{R|XU%WqjN^se~Cx~%@^@%>-#RVnu6h}B!8dhd>u{6b2;5WkA{el#UNmFoRzihV4_UP!Uu zNU?=?Mr?12otI+26|vE~vZMEAn^t6BT5;+8Y|V53ZSYDNIHJazYudHYkot8Iyw*G71iAk=H zNsfPew0^_aV-lM`6O%YKCUJM_vOW+MdiSQhZ^xIo^;bL@!SzvE-M@B_ zkau?U-p!v}m*u6Qa4hThQdazCkzndy_}iFAeiB|CRqHEamc1KN?1~gi&Fi{QXKD}q}D|_}H>*?w7l`oylAN@<+48Lah^u4b<-o)7Ae#R5&7r3VC*$L+2p~EfJ^`TSUR=*&s^j@3*55yPo^?!Ig zE~f|UpA5|U3#q6-6@4ld{dFq(Z2huS^!4LKznY5nr=kznccqc;J6`m@RP^yEda4rV zD*nKu9*94s+y38Ow-aY)kHpU?XHUz+nRz%T4^Pd*1$p?YJp6?`Eac%?d3a79zA+D% zP0e`fhpmDL}A;_VAw_YV)X z-Ktu-TpFkrHk8WSuUpksc+*?XzpkS^xUICMTDfjzrP8-`V0)BbaNX+C=GxZlR(7p@ z?_}}f9o?IG6Cgl<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 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 X;|CYbmz{UaEfOc63Mm3V^8)`HduS{! literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment1.v12.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment1.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..333fea39c7d850fc75fe33898b3136bda3ad4c9e GIT binary patch literal 31744 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.sdf b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.sdf new file mode 100644 index 0000000000000000000000000000000000000000..fe1a9b09b00a0b94f5cf410d5a909fc2394bd36c GIT binary patch literal 393216 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.sln b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.sln new file mode 100644 index 0000000..0555468 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ASM_Project", "Assignment3.vcxproj", "{4164AA65-1EF9-4E69-899B-D1BED776070B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.ActiveCfg = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.Build.0 = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.ActiveCfg = Release|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.v12.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..2df46a7de43fdcae52021421d64f2fdae6a14e7e GIT binary patch literal 20992 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.vcxproj b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.vcxproj new file mode 100644 index 0000000..ec0f08e --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.vcxproj @@ -0,0 +1,79 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + {4164AA65-1EF9-4E69-899B-D1BED776070B} + ASM_Project + + + + Application + v120 + + + Application + v120 + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + + + + c:\Irvine + + + user32.lib;irvine32.lib;%(AdditionalDependencies) + c:\Irvine;%(AdditionalLibraryDirectories) + true + Console + false + + + false + + + + + false + + + c:\Irvine;%(AdditionalLibraryDirectories) + Console + false + user32.lib;irvine32.lib;%(AdditionalDependencies) + + + c:\Irvine + + + + + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.vcxproj.user b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/Assignment3.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/main.asm b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/main.asm new file mode 100644 index 0000000..7bdcd8f --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 3/main.asm @@ -0,0 +1,441 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TITLE Assignment 5 (main.asm) +;Author: Corwin Perren +;Date: 3/3/2014 +;Description: +; This program runs all three programs from assignment 5 from a menu screen +; These programs include an array reverser, frequency table generator, and +; prime number generator +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +INCLUDE Irvine32.inc + +.data + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Variables to change for testing program capabilities +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SieveArray BYTE 1000000 dup(?) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Globally relevant vars +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ProgramTitle BYTE "CS 271 - Assignment 5",0 +ProgrammerName BYTE "Written by: Corwin Perren",0 + +SelectInstructions BYTE "Please enter 1-4 to run desired program.", 0 + +MenuItem1 BYTE "1: Reverse Array In Place (Chapter 4, Exercise 5)",0 +MenuItem2 BYTE "2: Frequency Table (Chapter 9, Exercise 6)",0 +MenuItem3 BYTE "3: Sieve of Eratosthenes (Chapter 9, Exercise 7)",0 +MenuItem4 BYTE "4: Exit",0 + +Selection BYTE "Selection: ",0 + +IncorrectNumberEntry BYTE "You did not enter 1-4. Press enter to try again.", 0 +ReturnToSelect BYTE "Program Complete. Press enter to return to selection screen.", 0 + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Vars for Prog 1 +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ArrayToReverse BYTE 1,2,3,4,5,6,7,8,9,10, 11, 12, 13, 14 +PressEnter BYTE "Press enter to reverse the currently reversed array. Enter 1 to quit.", 0 +OriginalArray BYTE "Original Array:", 0 +ReversedArray BYTE "Reversed Array:", 0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Vars for Prog 2 +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +StringEntry BYTE "Please enter a string to create a frequency table for.", 0 +StringThing BYTE "Your string: ", 0 + +StringArray BYTE 256 dup(?) +FrequencyTable DWORD 256 dup(?) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Vars for Prog 3 +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +EnterPrimes1 BYTE "Press enter to calculate primes up to ", 0 +EnterPrimes2 BYTE ".", 0 + + +.code +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for writing string with newline +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Write_String_NL PROC uses EDX, + StringPtr:Ptr BYTE ;Varible to store string offset pointer + + mov edx, StringPtr ;Moves the string to the proper register + call WriteString ;Prints the string + call Crlf ;Prints a new line + + ret ;Return from procedure +Write_String_NL ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for writing string without newline + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Write_String PROC uses EDX, + StringPtr:Ptr BYTE ;Variable to store string offset pointer + + mov edx, StringPtr ;Moves the string to the proper registers + call WriteString ;Prints the string + + ret +Write_String ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for printing program title and programmer name + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintTitle PROC + INVOKE Write_String_NL, OFFSET ProgramTitle ;Prints the program title + INVOKE Write_String_NL, OFFSET ProgrammerName ;prints the programmer's name + call Crlf ;Prints a new line + INVOKE Write_String_NL, OFFSET SelectInstructions ;Prints the selection screen instructions + call Crlf ;Prints a new line + INVOKE Write_String_NL, OFFSET MenuItem1 ;Prints menu item 1 + INVOKE Write_String_NL, OFFSET MenuItem2 ;Prints menu item 2 + INVOKE Write_String_NL, OFFSET MenuItem3 ;Prints menu item 3 + INVOKE Write_String_NL, OFFSET MenuItem4 ;Prints menu item 4 + INVOKE Write_String, OFFSET Selection ;Print selction prompt + ret +PrintTitle ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to fill array with zeros using stosb + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +FillWithZeros PROC + mov al, 0 ;Set al with value we want to fill array with + cld ;Clear Direction Flag + mov edi, OFFSET SieveArray ;Point edi to array + mov ecx, LENGTHOF SieveArray ;Set counter so instruction knows when to end + dec ecx ;Subtract one because it's starting at zero instead of one + rep stosb ;Repeats the fill operation until the array is full + ret ;Returns from function +FillWithZeros ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to mark multiples of primes with ones + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +MarkMultiples PROC + + mov esi, OFFSET SieveArray ;Move into esi to get easy access + mov BYTE PTR [esi], 1 ;Mark zero as non-prime + mov BYTE PTR [esi+1], 1 ;Mark one as non-prime + mov eax, 2 ;Set cursor position + mov ebx, 2 ;Multiplication value + jmp Inner + +Outer: + pop eax ;Pop eax if we got here so the stack gets aligned and we know where we are +LookForOne: + inc eax ;Go up by one + cmp BYTE PTR [esi+eax], 1 ;Check to see if the new value at that position of the array has been marked + je LookForOne ;If so, increment again to find an unmarked one + + cmp eax, LENGTHOF SieveArray ;Once an unmarked is found, make sure it's not outside our array size + jg MultEnd ;If it's out of array bounds, we're done so exit + mov ebx, 2 ;Otherwise, get ready to mark multiples of current prime starting with two times the prime +Inner: + push eax ;Save our original prime we're using + mul ebx ;Multiply prime by scaler + cmp eax, LENGTHOF SieveArray ;Make sure new value is not out of array size + jg Outer ;If it is, we're done with this prime + + mov BYTE PTR [esi+eax], 1 ;Otherwise, mark the multiple with a one + inc ebx ;Increase our scaler + pop eax ;Restore the prime we're on + + jmp Inner ;Re-do for next scaler + +MultEnd: + ret ;Return from procedure +MarkMultiples ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to print out unmarked values in array, which are primes + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintPrimes PROC + mov esi, OFFSET SieveArray ;Load array into esi to get ready to print + mov eax, 0 ;Set our cursor to zero +LookForZeros: + inc eax ;Move cursor forward one + cmp eax, LENGTHOF SieveArray ;Check if cursor is out of array bounds + jg PrintExit ;If so, exit because we are done + + cmp BYTE PTR [esi+eax], 1 ;If we're in bounds, check if the position is marked + je LookForZeros ;If so, don't print and look at the next position + call WriteDec ;If unmarked, print the prime number sotred here + call Crlf ;Print a new line to make things look nice + jmp LookForZeros ;Continue for the next array position + +PrintExit: + ret ;Return from procedure +PrintPrimes ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to run program 3 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program3 PROC + call ClrScr ;Clears the screen + INVOKE Write_String, OFFSET EnterPrimes1 ;Prints prompt part one + mov eax, LENGTHOF SieveArray ;Moves number of primes to calculate to print + call WriteDec ;Prints number of primes to calculate + INVOKE Write_String_NL, OFFSET EnterPrimes2 ;Prints end of prompt line + call ReadInt ;Waits for any key + call FillWithZeros ;Fills the sieve array with zeros using stosb method + call MarkMultiples ;Marks positions that are multiples of primes + call PrintPrimes ;Prints remaining prime numbers + ret ;Returns from procedure +Program3 ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to determine the character frequency of a string + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Get_Frequencies PROC InputString:PTR BYTE, OutputTable:PTR DWORD + mov esi, InputString ;Moves string to parse into esi + mov edi, OutputTable ;Moves output table into edi + +FreqLoop: + mov eax, 0 ;Zeros eax to make things work right + mov al, BYTE PTR [esi] ;Moves ascii decimal value into eax + mov ecx, eax ;Saves current decimal value + mov ebx, 4 ;Multiply eax by four because it's stored in DWORD and not BYTE array + mul ebx ;Actual multiplication + add DWORD PTR [edi+eax], 1 ;Increments frequency table position by one for this character + + cmp ecx, 0 ;Checks if we've hit the NUL character + je FreqDone ;Exit if it's found because we're done + + inc esi ;Otherwise, move to the next string array position + jmp FreqLoop ;Do above again for next character + +FreqDone: + ret ;Return from procedure +Get_Frequencies ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to read in string from user + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GetNewString PROC StringPtr:PTR BYTE + mov edx, StringPtr ;Move string array into edx for read in + mov ecx, 256 ;Read in a max of 256 characters + call ReadString ;Read in string from user + + ret ;Exit from procedure +GetNewString ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to print out the frequency table + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintFreqTable PROC TablePtr:PTR DWORD + mov esi, TablePtr ;Move frequency table into esi + mov ecx, 256 ;Set number of elements + mov ebx, 4 ;Set size of storage elements + call DumpMem ;Dump memory for the array + ret +PrintFreqTable ENDP + +ZeroProg2 PROC + mov eax, 0 ;Set al with value we want to fill array with + cld ;Clear Direction Flag + mov edi, OFFSET StringArray ;Point edi to array + mov ecx, 256 ;Set counter so instruction knows when to end + dec ecx ;Subtract one because it's starting at zero instead of one + rep stosb ;Repeats the fill operation until the array is full + + mov eax, 0 ;Set al with value we want to fill array with + cld ;Clear Direction Flag + mov edi, OFFSET FrequencyTable ;Point edi to array + mov ecx, 1024 ;Set counter so instruction knows when to end + dec ecx ;Subtract one because it's starting at zero instead of one + rep stosb ;Repeats the fill operation until the array is full + + ret ;Returns from function +ZeroProg2 ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to run program 2 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program2 PROC + call ClrScr ;Clear the screen + call ZeroProg2 ;Zeros string and freq table array + INVOKE Write_String_NL, OFFSET StringEntry ;Prompts the user to enter a string + INVOKE Write_String, OFFSET StringThing ;Line prompt for above + INVOKE GetNewString, OFFSET StringArray ;Reads in user string + INVOKE Get_Frequencies, OFFSET StringArray, OFFSET FrequencyTable ;Runs frequency procedure on input string + INVOKE PrintFreqTable, OFFSET FrequencyTable ;Prints out the new frequency table + ret ;Returns from procedure +Program2 ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to run program 1 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program1 PROC + call ClrScr ;Clears the screen + INVOKE Write_String_NL, OFFSET OriginalArray ;Prints header for original array + + mov eax, TYPE ArrayToReverse ;Moves the array type into eax + + cmp eax, 1 ;Checks if it's a BYTE array + je ITSBYTE ;Jumps to BYTE section if so + + cmp eax, 2 ;Checks if WORD array + je ITSWORD ;Jumps to WORD section if so + + cmp eax, 4 ;Check if DWORD array + je ITSDWORD ;Jumps to DWORD section if so + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Run for BYTE Array + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ITSBYTE: + mov esi, OFFSET ArrayToReverse ;Moves array into esi + mov ecx, LENGTHOF ArrayToReverse ;Moves number of elements in array into ecx + mov ebx, TYPE ArrayToReverse ;Moves type of array into ebx + call DumpMem ;Shows original array + + mov esi, OFFSET ArrayToReverse ;Re-moves array into esi + mov edi, OFFSET ArrayToReverse + SIZEOF ArrayToReverse - TYPE ArrayToReverse ;Moves the pointer to the last value of the array into edi + mov eax, LENGTHOF ArrayToReverse ;Moves number of elements in array into eax + mov edx, 0 ;Sets remainder to zero by default + mov ebx, 2 ;Moves two into ebx + div ebx ;Divides number of elements by two + mov ecx, eax ;Puts that number into our loop counter + +ReverseBYTE: + mov bl, [esi] ;Move data at beginning cursor to tmp storage + mov dl, [edi] ;Move data at end cursor to tmp storage + mov [esi], dl ;Move end data to beginning + mov [edi], bl ;Move beginning data to end + + add esi, TYPE ArrayToReverse ;Move beginning cursor forward + sub edi, TYPE ArrayToReverse ;Move ending cursor back + loop ReverseBYTE ;Loop until count expired + + jmp Prog1Ret ;Jump to procedure end when done + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Run for WORD Array + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ITSWORD: + mov esi, OFFSET ArrayToReverse ;Moves array into esi + mov ecx, LENGTHOF ArrayToReverse ;Moves number of elements in array into ecx + mov ebx, TYPE ArrayToReverse ;Moves type of array into ebx + call DumpMem ;Shows original array + + mov esi, OFFSET ArrayToReverse ;Re-moves array into esi + mov edi, OFFSET ArrayToReverse + SIZEOF ArrayToReverse - TYPE ArrayToReverse ;Moves the pointer to the last value of the array into edi + mov eax, LENGTHOF ArrayToReverse ;Moves number of elements in array into eax + mov edx, 0 ;Sets remainder to zero by default + mov ebx, 2 ;Moves two into ebx + div ebx ;Divides number of elements by two + mov ecx, eax ;Puts that number into our loop counter + +ReverseWORD: + mov bx, [esi] ;Move data at beginning cursor to tmp storage + mov dx, [edi] ;Move data at end cursor to tmp storage + mov [esi], dx ;Move end data to beginning + mov [edi], bx ;Move beginning data to end + + add esi, TYPE ArrayToReverse ;Move beginning cursor forward + sub edi, TYPE ArrayToReverse ;Move ending cursor back + loop ReverseWORD ;Loop until count expired + + jmp Prog1Ret + + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Run for DWORD Array + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ITSDWORD: + mov esi, OFFSET ArrayToReverse ;Moves array into esi + mov ecx, LENGTHOF ArrayToReverse ;Moves number of elements in array into ecx + mov ebx, TYPE ArrayToReverse ;Moves type of array into ebx + call DumpMem ;Shows original array + + mov esi, OFFSET ArrayToReverse ;Re-moves array into esi + mov edi, OFFSET ArrayToReverse + SIZEOF ArrayToReverse - TYPE ArrayToReverse ;Moves the pointer to the last value of the array into edi + mov eax, LENGTHOF ArrayToReverse ;Moves number of elements in array into eax + mov edx, 0 ;Sets remainder to zero by default + mov ebx, 2 ;Moves two into ebx + div ebx ;Divides number of elements by two + mov ecx, eax ;Puts that number into our loop counter + +ReverseDWORD: + mov ebx, [esi] ;Move data at beginning cursor to tmp storage + mov edx, [edi] ;Move data at end cursor to tmp storage + mov [esi], edx ;Move end data to beginning + mov [edi], ebx ;Move beginning data to end + + add esi, TYPE ArrayToReverse ;Move beginning cursor forward + sub edi, TYPE ArrayToReverse ;Move ending cursor back + loop ReverseWORD ;Loop until count expired + + + +Prog1Ret: + call Crlf ;Print a new line + call Crlf ;Print a second new line + INVOKE Write_String_NL, OFFSET ReversedArray ;Print header to say this is the reversed array + mov esi, OFFSET ArrayToReverse ;Move array into esi + mov ecx, LENGTHOF ArrayToReverse ;Set number of elements + mov ebx, TYPE ArrayToReverse ;Set size of elements + call DumpMem ;Display array + + ret ;Return from procedure +Program1 ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Main Procedure + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +main PROC +MainTitle: + call ClrScr ;Clear screen + call PrintTitle ;Print the title screen + call ReadInt ;Read in user selection + + cmp eax, 1 ;Check if user selected entry item 1 + je Prog1Jmp ;If so, jump to that program + + cmp eax, 2 ;Check if user selected entry item 2 + je Prog2Jmp ;If so, jump to that program + + cmp eax, 3 ;Check if user selected entry item 3 + je Prog3Jmp ;If so, jump to that program + + cmp eax, 4 ;Check if user selected exit + je MainExit ;If so, jump to end of program + + call ClrScr ;Clear screeen + INVOKE Write_String_NL, OFFSET IncorrectNumberEntry ;Scold user for not entering one to four + call ReadInt ;Wait for enter key + jmp MainTitle ;Jump back to main screen + +Prog1Jmp: + call Program1 ;Call array reverse program + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +Prog2Jmp: + call Program2 ;Call String frequency program + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +Prog3Jmp: + call Program3 ;Call prime generator program + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +MainExit: + exit +main ENDP + +END main \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/ASM_Project.exe b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/ASM_Project.exe new file mode 100644 index 0000000000000000000000000000000000000000..7b922a20b698a2be1aec5798b105533433c47c36 GIT binary patch literal 23040 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 a=6Pd-gSvU%Xxz}acsg{79)WLk1pX62a!A<# literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment1.v12.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment1.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..333fea39c7d850fc75fe33898b3136bda3ad4c9e GIT binary patch literal 31744 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment3.v12.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment3.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..47775165ea6c0c60fabcc3f636104c4ff7e55134 GIT binary patch literal 13824 zcmeHNNo-q182(-8MxoGB3Y1bz7bp}PJ4wBy3wTLdP|_5VCJ0%A)Nzbk$FA%oZPipN zTmZ4C;=+MNAi)J8DkOxs6p0E6!6k(Y+XX5i4jkwaBxv})d2f>ES1->_XjAZ5|C@R9 zX6FCrpMRSfpPgLs)7u}e`B`jfr(7i$rk2VgOTEidmK#KF!aM6OOifMk6U!(z(-p*l zMxsEluPM2t(Jw;YreEbuM@vLeeUt~ldfyoZl%$9FEHlifII~3!zgvg zks70veqJpLrty>QrC-ax?LsxgSEW7~l%gDzF3BJtm3?@oK$EU7n(ZoO8)boOEj}&; zIK>}D+a>0J1HhY;A0Agw6y%3k#?hqoc=1Wki7f^sQE0pKUz>+8TDL0h#3 z$gc+c%>m5BdE5fvD`{M9mi71R@V*>CeB|K@0GIMcz^wqbqdmA8W#)^`ob}B#|2S|d z_5bXS6Epfx!9ltl`X2+{rv5ATPuosy2dMw_`P5tLKW+Lo0O~TKn*Ogc+s!{IZ&Fl= z1O4zPeegbc$;y5_k4UfbKI8B`Nt9}(_3%HGl?4FesMVg|9|Ta|m>z>q%fbo_0^32; z_w~pjc;XDG$=SS}(Z~9v|0Q1Sv#j4Lm3QJp#{Afa(jnld&o83P7$60_oO>KFE`IUJ zmP$j(y}-W=U+GVs&Yyau2PBUDG6tV-c>MwJU=-M&LVc;H*F8#eH}KzvD*9ii_;;W! zb(P7EKMFpiK*K?BB@ccuCagxsX5hER2*#+@pY8bky4l2zpYb1g?^FWr0)EO8-HFrr zhtXEYUv~VRYR*H@f;?8GplC5kEt?TP@#<8zk*(5$_j6Pjq{{e@LNln5S)*ZvC-5u# z%=wUp3e8HYtI1zCcs~NH+y_`=(@HXMpE-ZVfKKsKoBB+O?DH=#e^yFLrXp>?PhWl& zz$yNF(N?d&jz1`OhrnyjoVK7Ba!*aHWdXJQSyu;s`qV$TSwz~K?V`^u?k*%EG3!Jox)oig3{Ab+12H=$c+QE(@Os-1BNHM7&mJm{|Ya0 zGnH>uT1(q|z?^>%bo>BzerZU6eU1AiRNAr38~rc$T0Dz!il4Uf8FQ={X3rgPQTj2@ z6n3F@D$IrzGA;jV@($;3<^Mj&Gqr9IdtB~wOQpV&)tMm%^RJu#_292{9zpx7=kApM zR{Xoc^&vI)9BfV&+~`yiNp3JAsg-6s|0p=m$cyqvkH@o!E^|Gq>7Aylk@?g1`pp5# z>mSddsF$@PLFj+o{MUOMl29sdeZV^gu8&TiM-^ZhtJwh9zq;{T*S{b7=C)B`vc^${ z^Dh@&$?X8A^2a@1!5qCu*}g2KFsC4G@qBUA=yqoFi!$iHiY0j_4c9=U=b>6Sa;%OfqJbHG*Fw zq%0B`KQWGGnf_GQGw1$a?{Vz=e}32Je=O4vaX&zx#66jg4Y)_)IVt6o?e0MC2HXi) z57+?M2-pO;3vf4pYjh8Q?FsjpWiRsk0X_ijNDH79&<5BF2mpcrdQaVV8_L@)?+;kY zx()OHTY7AgtJ`?mD0U4lVqN>OHa@J4S3RqZPFwI6c0uiukX_0aq+$0{7$XiX%wYe` zvIj5#o4g0Do`8+u{@6IPNWgw_pT?-2@v9p<3wq8Gw2Yyp8`2R3B?+62Eutm@?Ph$N zMo*rsvwthwX+`N0WeLlV%J`#P;yDPoncQ~MD)*vH`?kQPaZi`$RC)9 zwAX~k&>nKBPv z$@7R`xx_EgtJX8eQedp>%<~p;L1r1}>%{YX#`=s!7|+#{wA|Fw$KJLa&e_!2$9MA1 zJ@pAdOhvLr{KGR9{%6B&In{MzS91hAlK^%$33wjfveC;F0mHB`(YNtoEYq zxv^}Px846s4{YB57<+tUAKkqFY2N=_+WVhs_iwy=*7u~9yi+6hPcaPkxjEp>X@&9s zv*!PQ>i_=_@3OAc|Nm5yE2s6BJN}#RhwriTr^Amtw|nJR-~V~~$t`DjeOhu~%=p47 LugkTYZT$NWUoOi_ literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.sdf b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.sdf new file mode 100644 index 0000000000000000000000000000000000000000..640cdfb0b330febaaf55004e0ad78bfe2c7690e1 GIT binary patch literal 393216 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 b2;|+@>ULcl9<%e4`pL@gpRYnhM-B-9SqNk# literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.vcxproj b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.vcxproj new file mode 100644 index 0000000..c770474 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.vcxproj @@ -0,0 +1,79 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + {4164AA65-1EF9-4E69-899B-D1BED776070B} + ASM_Project + + + + Application + v120 + + + Application + v120 + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + + + + c:\Irvine + + + user32.lib;irvine32.lib;%(AdditionalDependencies) + c:\Irvine;%(AdditionalLibraryDirectories) + true + Console + false + + + false + + + + + false + + + c:\Irvine;%(AdditionalLibraryDirectories) + Console + false + user32.lib;irvine32.lib;%(AdditionalDependencies) + + + c:\Irvine + + + + + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.vcxproj.user b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4_perrenc.asm b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4_perrenc.asm new file mode 100644 index 0000000..66461f7 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 4/Assignment4_perrenc.asm @@ -0,0 +1,254 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TITLE Assignment 3 (main.asm) +;Author: Corwin Perren +;Date: 2/05/2014 +;Description: +; This program greets a user by name, takes in ten integers, sums +; non-negative ones, and computers the average of that sum before saying +; goodbye to the user +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +INCLUDE Irvine32.inc + +.data +ProgramTitle BYTE "CS 271 - Assignment 3",0 +ProgrammerName BYTE "Written by: Corwin Perren",0 + +NamePrompt BYTE "By what name may I call you?",0 +NamePrompt2 BYTE "Your name: ", 0 + +NameResponse BYTE "Welcome, ", 0 +NameResponse2 BYTE ".", 0 + +EnterNumPrompt BYTE "Please enter ten numbers between 0 and 100.", 0 +TooGreat BYTE "The number you entered was too large, please try again.", 0 +IncorrectInputMessage BYTE "You did not enter a valid number.", 0 + +ListingPrint BYTE "Number ", 0 +ListingPrint2 BYTE ":", 0 + +NoPosMessage BYTE "No Positive Integers Entered...", 0 +NumPosMessage BYTE "Number of Positive Integers: ", 0 +SumMessage BYTE "Sum of Positive Integers: ", 0 +AvgMessage BYTE "Average of Positive Integers: ", 0 + +TermMessage BYTE "Goodbye, ", 0 +TermMessage2 BYTE ".", 0 + +TESTMessage BYTE "Equal to Zero", 0 + +NumEntries DWORD 10 +MaxEntryVal DWORD 100 + +StorArray DWORD 10 dup(0) +UserName BYTE 25 dup(0) + +NumPos DWORD 0 +FinalSum DWORD 0 +FinalAvg DWORD 0 + + +.code + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for writing string with newline + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Write_String_NL PROC uses EDX, + StringPtr:Ptr BYTE ;Varible to store string offset pointer + + mov edx, StringPtr ;Moves the string to the proper register + call WriteString ;Prints the string + call Crlf ;Prints a new line + + ret +Write_String_NL ENDP + + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for writing string without newline + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Write_String PROC uses EDX, + StringPtr:Ptr BYTE ;Variable to store string offset pointer + + mov edx, StringPtr ;Moves the string to the proper registers + call WriteString ;Prints the string + + ret +Write_String ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for printing program title and programmer name + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintTitle PROC + INVOKE Write_String_NL, OFFSET ProgramTitle ;Prints the program title + INVOKE Write_String_NL, OFFSET ProgrammerName ;prints the programmer's name' + call Crlf ;Prints a new line + ret +PrintTitle ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for getting user's name and greeting them + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +MeetAndGreet PROC + INVOKE Write_String_NL, OFFSET NamePrompt ;Gets username prompt ready + + INVOKE Write_String, OFFSET NamePrompt2 ;Gets second half of username prompt ready + + mov edx,OFFSET UserName ;Moves offset for username storage var into edx + mov ecx,SIZEOF UserName ;Sets max number of characters to read in + call ReadString ;Reads in username string from user + + call Clrscr ;Clears the screen to clean up output + INVOKE Write_String, OFFSET NameResponse ;Prints the first part of the welcome message + INVOKE Write_String, OFFSET UserName ;Prints the user's name + INVOKE Write_String_NL, OFFSET NameResponse2 ;Prints teh second half of the welcome message + call Crlf ;Prints a new line + + ret +MeetAndGreet ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for printing what the user may enter + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintEnterNumPrompt PROC + INVOKE Write_String_NL, OFFSET EnterNumPrompt ;Gets welcome message part 2 redy to print + ret +PrintEnterNumPrompt ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for retreiving integer inputs from user + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GetNumbers PROC + + mov ecx, NumEntries ;Sets loop count variable + mov esi, OFFSET StorArray ;Puts storage array into esi reg + jmp EnterNum ;Jump to beginning of number entry + +IncorrectInput: + INVOKE Write_String_NL, OFFSET IncorrectInputMessage ;Displays incorrect input message + jmp EnterNum ;Jumps to beginning of number entry +GreaterThanMax: + INVOKE Write_String_NL, OFFSET TooGreat ;Displays number to great message +EnterNum: + INVOKE Write_String, OFFSET ListingPrint ;Prints number entry listing + + mov eax, NumEntries ;Moves total entries to eax + inc eax ;Increments by one to start at 1 rather than 0 + sub eax, ecx ;Subracts current loop var to determine count val + call WriteInt ;Writes for number entry listing + + INVOKE Write_String, OFFSET ListingPrint2 ;Finishes priting number entry listing + + call ReadInt ;Reads in int from user + jo IncorrectInput ;Re-do previous if incorrect input + cmp eax, MaxEntryVal ;Check if number too great + jg GreaterThanMax ;Jump if number too great + + mov [esi], eax ;Move number if valid into array + add esi, 4 ;Increment array pointer + + loop EnterNum ;Loop unti ecx equals 0 + ret +GetNumbers ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for determining number of positive integers, summing them, and + ;calculating their average + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CalcStuff PROC + mov ecx, NumEntries ;Puts loop counter in + mov esi, OFFSET StorArray ;Gets array ready to loop through + mov eax, 0 ;Makes sum register zero + +ArrayLoop: + mov edx, [esi] ;Read out one array value + add esi, 4 ;Increment array pointer + cmp edx, 0 ;Check if negative + jl ArrayLoopEnd ;Jump to ignore if negative + + add eax, edx ;If non-negative, add to sum reg + inc NumPos ;Increment number of positive found + + +ArrayLoopEnd: + loop ArrayLoop ;Loop until array empty + + cmp NumPos, 0 ;Check if any positive found + jne MoreThanZero ;Jump if there are positive integers + + Invoke Write_String_NL, OFFSET NoPosMessage ;Write no positive intergers message + jmp QuickEnd ;End program because no positive integers + +MoreThanZero: + mov FinalSum, eax ;Move positive integers sum to variable + mov edx, 0 ;Zero upper of numerator + mov ebx, NumPos ;Put value in lower of numerator + div ebx ;Divide sum by number of positive integers + mov FinalAvg, eax ;Take result which is average and store in varible + + call Crlf ;Print a new line + ret +CalcStuff ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Prints the number of positive integers + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintNumPos PROC + Invoke Write_String, OFFSET NumPosMessage ;Print string for number of positive integers + mov eax, NumPos ;Move varaible into printing register + call WriteInt ;Print number of positive integers + call Crlf ;Print a new line + ret +PrintNumPos ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Prints the sum of the positive integers + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintSumOf PROC + Invoke Write_String, OFFSET SumMessage ;Print the message for the sum + mov eax, FinalSum ;Move sum into printing register + call WriteInt ;Print sum + call Crlf ;Print new line + ret +PrintSumOf ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Prints the average of the positive integers + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintAverageOf PROC + Invoke Write_String, OFFSET AvgMessage ;Print message for the average + mov eax, FinalAvg ;Move average into printing register + call WriteInt ;Print the average + call Crlf ;Print a new line + ret +PrintAverageOf ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for printing the termination message + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintTerm PROC + Invoke Write_String, OFFSET TermMessage ;Print the first part of the termination message + Invoke Write_String, OFFSET UserName ;Print the user's name + Invoke Write_String_NL, OFFSET TermMessage2 ;Print the second part of the termination message + ret +PrintTerm ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Main Procedure + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +main PROC + call PrintTitle ;Prints title + call MeetAndGreet ;Greets user by name + call PrintEnterNumPrompt ;Print prompt for program use + call GetNumbers ;Retrieves user integer entries + call CalcStuff ;Performs math on numbers entered + call PrintNumPos ;Prints number of positive integers + call PrintSumOf ;Prints sum of positive integers + call PrintAverageOf ;Prints average of positive integers +QuickEnd:: + call PrintTerm ;Prints termination message + + exit +main ENDP + +END main \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/5.user b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/5.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/5.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/ASM_Project.exe b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/ASM_Project.exe new file mode 100644 index 0000000000000000000000000000000000000000..26a93f84f55c56c7c8ce888df31c1ce78c9a4c18 GIT binary patch literal 1225216 zcmeI(3zS`DeJJofGnpjhi5NxNss{@OmL>!NA0fenWCo(dOlHC>BIYD>CNp6&6VD?d zwJbviy(Cj^t9`6xi}#Ays<*B#mbHqLTOJu4z}j1Adn>K=3c>2ZVJQVlLQFgN|LrqL zCiv*OtM%UY`a6sL?eG14`?vT0_RcxO+Ks=SwPaZ~Ew+h?EW11Q>9Zmae{%466wiC@ z$h_?Hr~KKOcQ;+}XJ>Bc?W+`aln1w#i`xrZiUR|K)xzddpC*u@EymtBbD|${w~sg^=GfT(=oZf zGT(RhZRt&If80zv+Oq75rq*olv!{0*tMho)(loniPL?f=oSmoT*=L*@yR>zre|(oRv&SAeEnAi%kH>zpT}n>QY@^0o-lywb70Wc)&wZCYIJE>??Kb})`LKlW7TlGvtvRs_i6 zMz!qkOL6?0qOd#mmrkh^(G^*C-{QVT#S2;^Bj%XH{eJAHd{(6X%9Zk#$jeQ_Ca?F| zAFem0ndnbJ;H&BL)c&{xpL*b|2;QAy3sY?I!U*=J7fVeoAxYUad&5y)mrNl)3WTgw(oXKTvQ$H%<2oHQqOSP zcYE$!e@|z2^YRpCaY^r-^Gi$WM$W`VSLR_V z?Oh*ZO!j+T^!pm5-vdg8FoiNop~c~A6K|H0fW+c>(ZqyEv3Q)5zvj_RT089;;t6 zJIm_#PE1UUR8#K5k=yfN+mS5W`<|miKbTgXG4zAx>d%j_9G+f(c~tEj`R!Eg6RG2t z=MFwKetpmI^q%`4npwYaUbIY+H$hqM;=kR^?t+TT1n#lZY%6vZ7>5apq_0Gx6KT4V3%roz= zFQ3dDNts{CGY{0yNtyLe|8w5){i)=xykx9CZ?gJBDf4&p%m?c)p3)fY&r{}y^2{&S zzm+oYNE42E{B)G+J7d9v+>tuEo8c_00dmfu1{G5u_0t>$&svh)rCS z(vyo$Ej1n8wC#oZ%81>$Bd(}z|5(2$#nXB-)|ytyrsC+bCFPmR-nMI6&u3zh*);p> zwbuP-L@(R2uFh>)y_EOTwZ8MJtMj6tPeo_tMem5B_g=s8+IJscvs#X=S$jI`x4-V# zihMM+9)5P{#jG|Xe{&qaWZ(4s)Sgmp9&c?w_z&ZY^8EdA=Vkj|x#!4|@)>)MylvNl zp@Z}HUU~G;ljXU?R~~ISP@djC{`leX>3QWB)5w#6htmiTwjFJX_KksN<#nF=jnv_Z zv1Y|sjTzjuY*B4?w1|aeVom$_^kr|THMg&c73_O)&(>DFbUJI&bXMonIech*_{zgO zX0#mG(Gt^H9wY3j%^bSv=tQk~{LGP8htGKH$XjDqzkX({ylqD&Chq#cw5GYaE0)2f#2(4u!n-PY0n^7`z~6pICR<7ijs@MHDAi@C+p8Q08n!v{9Ldvx*w z+i_s++*99-SoQl+eSPQ1o;c56ig(7W{<(O}4L?-xkE7do zZ8~3%M)UQZ9rZQQ+tA^xHnToIVlR$Qzay0#9!;Wo`{8FBJ?zMPNGGv*{F*7I`T4u- z!PcIbd;08O7m+A$-`RZDH{ZDAYoFK_>ATa*<)O1vojX%7{|l`tyD4wge(;eyQszl# z_T=e57iTu6Kff{k{02U}{=^-8daNVqwx75tUFG$+72^3Bw?Uq$MxtkE`3GWvY*+Vf zZAUw{HTB*Qsmby;NBN<2A%yBJzZKK`;VQ2^QKh;w`bw>vYM(#UI+!BSr26TeJ1P=k?rthX#CVK6en47xmnf({z^Wv2uKY}c7(k#1u(?sp?a2agKNR_QW#g|p zG}0jYG@R#hX=coS2&;M~BxQy=&I9e^`52BR%x}=8KP1t{FZu zzG3)C%S}hujm^lP7L#2xM;FI0o8@_;_dp!+wx-+Ko8ReR#ZIXE>k z$6KPeVt)6Wv{t`A?*E~un|qGEgnswcX<6>fmxDb^v+A@^jkEQmShY!q5kFSpPS6w|3x9oy&9e!wKqtVglKKb73 zuRT`f>fxJaHpX~+jB#0v@!rX2U&s1Xc6I%0ah=7TUw!%TLzlN4-Zx`u+nidtm#8*`|@P5UN+>TB+CKNIcMPKXKo`HWs{3q_U%NIoufgxV2Mq@(K9i zU&ykLMT-*+zIS+H;!815cJGrh?V$%}=Z~DpMfM~0H8H}iGuC}%jtQ*<*%i|DJJQCwG;<1tr=ESHs#;C(L9ewmWWB=)y7&cp% zPa)ohv+VfL|071aH7{-q|Lu5fc=Yi%++UqD{7|FWk~lYUK|lJ$Wh1GVmaoiUpBMX$ z;%`jxb1z=|^sX5rm!|luFJAl1vG~g_Ui*B+H>CX5k=MqqeqD4n^kP$O*2s-1xi*sZ z3!jbq?t9aQ#-|-@9&aB1m9)~uy>x1J+beEKmEzxuaji$C;{|ca_5Rl=ny8&RQJa%) z{B1G2hY!rjrkwhhzc4Y;S#OR9*|D3UqjT~;*n37gi*bv5JUU4a{e6*fM@o!#bk8?T9lU}d~uek~S(eUIFCVA{R|XU%WqjN^se~Cx~%@^@%>-#RVnu6h}B!8dhd>u{6b2;5WkA{el#UNmFoRzihV4_UP!Uu zNU?=?Mr?12otI+26|vE~vZMEAn^t6BT5;+8Y|V53ZSYDNIHJazYudHYkot8Iyw*G71iAk=H zNsfPew0^_aV-lM`6O%YKCUJM_vOW+MdiSQhZ^xIo^;bL@!SzvE-M@B_ zkau?U-p!v}m*u6Qa4hThQdazCkzndy_}iFAeiB|CRqHEamc1KN?1~gi&Fi{QXKD}q}D|_}H>*?w7l`oylAN@<+48Lah^u4b<-o)7Ae#R5&7r3VC*$L+2p~EfJ^`TSUR=*&s^j@3*55yPo^?!Ig zE~f|UpA5|U3#q6-6@4ld{dFq(Z2huS^!4LKznY5nr=kznccqc;J6`m@RP^yEda4rV zD*nKu9*94s+y38Ow-aY)kHpU?XHUz+nRz%T4^Pd*1$p?YJp6?`Eac%?d3a79zA+D% zP0e`fhpmDL}A;_VAw_YV)X z-Ktu-TpFkrHk8WSuUpksc+*?XzpkS^xUICMTDfjzrP8-`V0)BbaNX+C=GxZlR(7p@ z?_}}f9o?IG6Cgl<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 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 X;|CYbmz{UaEfOc63Mm3V^8)`HduS{! literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.sdf b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.sdf new file mode 100644 index 0000000000000000000000000000000000000000..dfc8860dae051b3183b16bd9ef64c0c184371e16 GIT binary patch literal 393216 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.v52.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Assignment5.v52.suo new file mode 100644 index 0000000000000000000000000000000000000000..e35f81ae048c01220e8701c343f9871304a8feb6 GIT binary patch literal 19456 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%0D!rE8H+9Ra>{V(c!5Aobba^pS3x^w + + + + Debug + Win32 + + + Release + Win32 + + + + + + + {4164AA65-1EF9-4E69-899B-D1BED776070B} + ASM_Project + + + + Application + v120 + + + Application + v120 + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + + + + c:\Irvine + + + user32.lib;irvine32.lib;%(AdditionalDependencies) + c:\Irvine;%(AdditionalLibraryDirectories) + true + Console + false + + + false + + + + + false + + + c:\Irvine;%(AdditionalLibraryDirectories) + Console + false + user32.lib;irvine32.lib;%(AdditionalDependencies) + + + c:\Irvine + + + + + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/CS271_proj5_perrenc.asm b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/CS271_proj5_perrenc.asm new file mode 100644 index 0000000..fc2a63a --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/CS271_proj5_perrenc.asm @@ -0,0 +1,441 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TITLE Assignment 5 (main.asm) +;Author: Corwin Perren +;Date: 3/3/2014 +;Description: +; This program runs all three programs from assignment 5 from a menu screen +; These programs include an array reverser, frequency table generator, and +; prime number generator +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +INCLUDE Irvine32.inc + +.data + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Variables to change for testing program capabilities +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +SieveArray BYTE 5000 dup(?) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Globally relevant vars +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ProgramTitle BYTE "CS 271 - Assignment 5",0 +ProgrammerName BYTE "Written by: Corwin Perren",0 + +SelectInstructions BYTE "Please enter 1-4 to run desired program.", 0 + +MenuItem1 BYTE "1: Reverse Array In Place (Chapter 4, Exercise 5)",0 +MenuItem2 BYTE "2: Frequency Table (Chapter 9, Exercise 6)",0 +MenuItem3 BYTE "3: Sieve of Eratosthenes (Chapter 9, Exercise 7)",0 +MenuItem4 BYTE "4: Exit",0 + +Selection BYTE "Selection: ",0 + +IncorrectNumberEntry BYTE "You did not enter 1-4. Press enter to try again.", 0 +ReturnToSelect BYTE "Program Complete. Press enter to return to selection screen.", 0 + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Vars for Prog 1 +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ArrayToReverse BYTE 1,2,3,4,5,6,7,8,9,10, 11, 12, 13, 14 +PressEnter BYTE "Press enter to reverse the currently reversed array. Enter 1 to quit.", 0 +OriginalArray BYTE "Original Array:", 0 +ReversedArray BYTE "Reversed Array:", 0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Vars for Prog 2 +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +StringEntry BYTE "Please enter a string to create a frequency table for.", 0 +StringThing BYTE "Your string: ", 0 + +StringArray BYTE 256 dup(?) +FrequencyTable DWORD 256 dup(?) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Vars for Prog 3 +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +EnterPrimes1 BYTE "Press enter to calculate primes up to ", 0 +EnterPrimes2 BYTE ".", 0 + + +.code +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for writing string with newline +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Write_String_NL PROC uses EDX, + StringPtr:Ptr BYTE ;Varible to store string offset pointer + + mov edx, StringPtr ;Moves the string to the proper register + call WriteString ;Prints the string + call Crlf ;Prints a new line + + ret ;Return from procedure +Write_String_NL ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for writing string without newline + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Write_String PROC uses EDX, + StringPtr:Ptr BYTE ;Variable to store string offset pointer + + mov edx, StringPtr ;Moves the string to the proper registers + call WriteString ;Prints the string + + ret +Write_String ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for printing program title and programmer name + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintTitle PROC + INVOKE Write_String_NL, OFFSET ProgramTitle ;Prints the program title + INVOKE Write_String_NL, OFFSET ProgrammerName ;prints the programmer's name + call Crlf ;Prints a new line + INVOKE Write_String_NL, OFFSET SelectInstructions ;Prints the selection screen instructions + call Crlf ;Prints a new line + INVOKE Write_String_NL, OFFSET MenuItem1 ;Prints menu item 1 + INVOKE Write_String_NL, OFFSET MenuItem2 ;Prints menu item 2 + INVOKE Write_String_NL, OFFSET MenuItem3 ;Prints menu item 3 + INVOKE Write_String_NL, OFFSET MenuItem4 ;Prints menu item 4 + INVOKE Write_String, OFFSET Selection ;Print selction prompt + ret +PrintTitle ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to fill array with zeros using stosb + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +FillWithZeros PROC + mov al, 0 ;Set al with value we want to fill array with + cld ;Clear Direction Flag + mov edi, OFFSET SieveArray ;Point edi to array + mov ecx, LENGTHOF SieveArray ;Set counter so instruction knows when to end + dec ecx ;Subtract one because it's starting at zero instead of one + rep stosb ;Repeats the fill operation until the array is full + ret ;Returns from function +FillWithZeros ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to mark multiples of primes with ones + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +MarkMultiples PROC + + mov esi, OFFSET SieveArray ;Move into esi to get easy access + mov BYTE PTR [esi], 1 ;Mark zero as non-prime + mov BYTE PTR [esi+1], 1 ;Mark one as non-prime + mov eax, 2 ;Set cursor position + mov ebx, 2 ;Multiplication value + jmp Inner + +Outer: + pop eax ;Pop eax if we got here so the stack gets aligned and we know where we are +LookForOne: + inc eax ;Go up by one + cmp BYTE PTR [esi+eax], 1 ;Check to see if the new value at that position of the array has been marked + je LookForOne ;If so, increment again to find an unmarked one + + cmp eax, LENGTHOF SieveArray ;Once an unmarked is found, make sure it's not outside our array size + jg MultEnd ;If it's out of array bounds, we're done so exit + mov ebx, 2 ;Otherwise, get ready to mark multiples of current prime starting with two times the prime +Inner: + push eax ;Save our original prime we're using + mul ebx ;Multiply prime by scaler + cmp eax, LENGTHOF SieveArray ;Make sure new value is not out of array size + jg Outer ;If it is, we're done with this prime + + mov BYTE PTR [esi+eax], 1 ;Otherwise, mark the multiple with a one + inc ebx ;Increase our scaler + pop eax ;Restore the prime we're on + + jmp Inner ;Re-do for next scaler + +MultEnd: + ret ;Return from procedure +MarkMultiples ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to print out unmarked values in array, which are primes + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintPrimes PROC + mov esi, OFFSET SieveArray ;Load array into esi to get ready to print + mov eax, 0 ;Set our cursor to zero +LookForZeros: + inc eax ;Move cursor forward one + cmp eax, LENGTHOF SieveArray ;Check if cursor is out of array bounds + jg PrintExit ;If so, exit because we are done + + cmp BYTE PTR [esi+eax], 1 ;If we're in bounds, check if the position is marked + je LookForZeros ;If so, don't print and look at the next position + call WriteDec ;If unmarked, print the prime number sotred here + call Crlf ;Print a new line to make things look nice + jmp LookForZeros ;Continue for the next array position + +PrintExit: + ret ;Return from procedure +PrintPrimes ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to run program 3 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program3 PROC + call ClrScr ;Clears the screen + INVOKE Write_String, OFFSET EnterPrimes1 ;Prints prompt part one + mov eax, LENGTHOF SieveArray ;Moves number of primes to calculate to print + call WriteDec ;Prints number of primes to calculate + INVOKE Write_String_NL, OFFSET EnterPrimes2 ;Prints end of prompt line + call ReadInt ;Waits for any key + call FillWithZeros ;Fills the sieve array with zeros using stosb method + call MarkMultiples ;Marks positions that are multiples of primes + call PrintPrimes ;Prints remaining prime numbers + ret ;Returns from procedure +Program3 ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to determine the character frequency of a string + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Get_Frequencies PROC InputString:PTR BYTE, OutputTable:PTR DWORD + mov esi, InputString ;Moves string to parse into esi + mov edi, OutputTable ;Moves output table into edi + +FreqLoop: + mov eax, 0 ;Zeros eax to make things work right + mov al, BYTE PTR [esi] ;Moves ascii decimal value into eax + mov ecx, eax ;Saves current decimal value + mov ebx, 4 ;Multiply eax by four because it's stored in DWORD and not BYTE array + mul ebx ;Actual multiplication + add DWORD PTR [edi+eax], 1 ;Increments frequency table position by one for this character + + cmp ecx, 0 ;Checks if we've hit the NUL character + je FreqDone ;Exit if it's found because we're done + + inc esi ;Otherwise, move to the next string array position + jmp FreqLoop ;Do above again for next character + +FreqDone: + ret ;Return from procedure +Get_Frequencies ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to read in string from user + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GetNewString PROC StringPtr:PTR BYTE + mov edx, StringPtr ;Move string array into edx for read in + mov ecx, 256 ;Read in a max of 256 characters + call ReadString ;Read in string from user + + ret ;Exit from procedure +GetNewString ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to print out the frequency table + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintFreqTable PROC TablePtr:PTR DWORD + mov esi, TablePtr ;Move frequency table into esi + mov ecx, 256 ;Set number of elements + mov ebx, 4 ;Set size of storage elements + call DumpMem ;Dump memory for the array + ret +PrintFreqTable ENDP + +ZeroProg2 PROC + mov eax, 0 ;Set al with value we want to fill array with + cld ;Clear Direction Flag + mov edi, OFFSET StringArray ;Point edi to array + mov ecx, 256 ;Set counter so instruction knows when to end + dec ecx ;Subtract one because it's starting at zero instead of one + rep stosb ;Repeats the fill operation until the array is full + + mov eax, 0 ;Set al with value we want to fill array with + cld ;Clear Direction Flag + mov edi, OFFSET FrequencyTable ;Point edi to array + mov ecx, 1024 ;Set counter so instruction knows when to end + dec ecx ;Subtract one because it's starting at zero instead of one + rep stosb ;Repeats the fill operation until the array is full + + ret ;Returns from function +ZeroProg2 ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to run program 2 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program2 PROC + call ClrScr ;Clear the screen + call ZeroProg2 ;Zeros string and freq table array + INVOKE Write_String_NL, OFFSET StringEntry ;Prompts the user to enter a string + INVOKE Write_String, OFFSET StringThing ;Line prompt for above + INVOKE GetNewString, OFFSET StringArray ;Reads in user string + INVOKE Get_Frequencies, OFFSET StringArray, OFFSET FrequencyTable ;Runs frequency procedure on input string + INVOKE PrintFreqTable, OFFSET FrequencyTable ;Prints out the new frequency table + ret ;Returns from procedure +Program2 ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure to run program 1 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program1 PROC + call ClrScr ;Clears the screen + INVOKE Write_String_NL, OFFSET OriginalArray ;Prints header for original array + + mov eax, TYPE ArrayToReverse ;Moves the array type into eax + + cmp eax, 1 ;Checks if it's a BYTE array + je ITSBYTE ;Jumps to BYTE section if so + + cmp eax, 2 ;Checks if WORD array + je ITSWORD ;Jumps to WORD section if so + + cmp eax, 4 ;Check if DWORD array + je ITSDWORD ;Jumps to DWORD section if so + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Run for BYTE Array + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ITSBYTE: + mov esi, OFFSET ArrayToReverse ;Moves array into esi + mov ecx, LENGTHOF ArrayToReverse ;Moves number of elements in array into ecx + mov ebx, TYPE ArrayToReverse ;Moves type of array into ebx + call DumpMem ;Shows original array + + mov esi, OFFSET ArrayToReverse ;Re-moves array into esi + mov edi, OFFSET ArrayToReverse + SIZEOF ArrayToReverse - TYPE ArrayToReverse ;Moves the pointer to the last value of the array into edi + mov eax, LENGTHOF ArrayToReverse ;Moves number of elements in array into eax + mov edx, 0 ;Sets remainder to zero by default + mov ebx, 2 ;Moves two into ebx + div ebx ;Divides number of elements by two + mov ecx, eax ;Puts that number into our loop counter + +ReverseBYTE: + mov bl, [esi] ;Move data at beginning cursor to tmp storage + mov dl, [edi] ;Move data at end cursor to tmp storage + mov [esi], dl ;Move end data to beginning + mov [edi], bl ;Move beginning data to end + + add esi, TYPE ArrayToReverse ;Move beginning cursor forward + sub edi, TYPE ArrayToReverse ;Move ending cursor back + loop ReverseBYTE ;Loop until count expired + + jmp Prog1Ret ;Jump to procedure end when done + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Run for WORD Array + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ITSWORD: + mov esi, OFFSET ArrayToReverse ;Moves array into esi + mov ecx, LENGTHOF ArrayToReverse ;Moves number of elements in array into ecx + mov ebx, TYPE ArrayToReverse ;Moves type of array into ebx + call DumpMem ;Shows original array + + mov esi, OFFSET ArrayToReverse ;Re-moves array into esi + mov edi, OFFSET ArrayToReverse + SIZEOF ArrayToReverse - TYPE ArrayToReverse ;Moves the pointer to the last value of the array into edi + mov eax, LENGTHOF ArrayToReverse ;Moves number of elements in array into eax + mov edx, 0 ;Sets remainder to zero by default + mov ebx, 2 ;Moves two into ebx + div ebx ;Divides number of elements by two + mov ecx, eax ;Puts that number into our loop counter + +ReverseWORD: + mov bx, [esi] ;Move data at beginning cursor to tmp storage + mov dx, [edi] ;Move data at end cursor to tmp storage + mov [esi], dx ;Move end data to beginning + mov [edi], bx ;Move beginning data to end + + add esi, TYPE ArrayToReverse ;Move beginning cursor forward + sub edi, TYPE ArrayToReverse ;Move ending cursor back + loop ReverseWORD ;Loop until count expired + + jmp Prog1Ret + + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Run for DWORD Array + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ITSDWORD: + mov esi, OFFSET ArrayToReverse ;Moves array into esi + mov ecx, LENGTHOF ArrayToReverse ;Moves number of elements in array into ecx + mov ebx, TYPE ArrayToReverse ;Moves type of array into ebx + call DumpMem ;Shows original array + + mov esi, OFFSET ArrayToReverse ;Re-moves array into esi + mov edi, OFFSET ArrayToReverse + SIZEOF ArrayToReverse - TYPE ArrayToReverse ;Moves the pointer to the last value of the array into edi + mov eax, LENGTHOF ArrayToReverse ;Moves number of elements in array into eax + mov edx, 0 ;Sets remainder to zero by default + mov ebx, 2 ;Moves two into ebx + div ebx ;Divides number of elements by two + mov ecx, eax ;Puts that number into our loop counter + +ReverseDWORD: + mov ebx, [esi] ;Move data at beginning cursor to tmp storage + mov edx, [edi] ;Move data at end cursor to tmp storage + mov [esi], edx ;Move end data to beginning + mov [edi], ebx ;Move beginning data to end + + add esi, TYPE ArrayToReverse ;Move beginning cursor forward + sub edi, TYPE ArrayToReverse ;Move ending cursor back + loop ReverseWORD ;Loop until count expired + + + +Prog1Ret: + call Crlf ;Print a new line + call Crlf ;Print a second new line + INVOKE Write_String_NL, OFFSET ReversedArray ;Print header to say this is the reversed array + mov esi, OFFSET ArrayToReverse ;Move array into esi + mov ecx, LENGTHOF ArrayToReverse ;Set number of elements + mov ebx, TYPE ArrayToReverse ;Set size of elements + call DumpMem ;Display array + + ret ;Return from procedure +Program1 ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Main Procedure + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +main PROC +MainTitle: + call ClrScr ;Clear screen + call PrintTitle ;Print the title screen + call ReadInt ;Read in user selection + + cmp eax, 1 ;Check if user selected entry item 1 + je Prog1Jmp ;If so, jump to that program + + cmp eax, 2 ;Check if user selected entry item 2 + je Prog2Jmp ;If so, jump to that program + + cmp eax, 3 ;Check if user selected entry item 3 + je Prog3Jmp ;If so, jump to that program + + cmp eax, 4 ;Check if user selected exit + je MainExit ;If so, jump to end of program + + call ClrScr ;Clear screeen + INVOKE Write_String_NL, OFFSET IncorrectNumberEntry ;Scold user for not entering one to four + call ReadInt ;Wait for enter key + jmp MainTitle ;Jump back to main screen + +Prog1Jmp: + call Program1 ;Call array reverse program + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +Prog2Jmp: + call Program2 ;Call String frequency program + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +Prog3Jmp: + call Program3 ;Call prime generator program + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +MainExit: + exit +main ENDP + +END main \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Tasks.docx b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 5/Tasks.docx new file mode 100644 index 0000000000000000000000000000000000000000..806b62cf5c013467aa50521170f74a6050010983 GIT binary patch literal 5558 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 Cc6MC= literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/ASM_Project.exe b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/ASM_Project.exe new file mode 100644 index 0000000000000000000000000000000000000000..9f6f522f239d237c467d706c9b23ddcec7b5fb5a GIT binary patch literal 27136 zcmeHPdwf*Iy`SC9CLs?JAc*v8Jv;+KLJ|m%kU&DR3qb4$#5^Fn3 z%=*u2M*<(5v8y(j(}&llpdB9HT6-sN+k@>j-kR;jHq!0z)MQ|6mPXG`zCEO{gLaDP zG|`$E#-@QXT%{(&qouNp@N5;S2h>zMhJob=Mi|1u5*hb8Rny5=j3QuZe4`K_5Z8 z#jtx50jLKBW>Cj&{fp4kENXt$dVqu2OM?cvch?Y4%OT%NW~;`8uGFq%00Cv2mGxlx zx`s6Z!!mn+18d6lSjLKc%S_7qq^(Avb(!~7;++J~Q?E>kW=wfI5D0kp6ZH_N)&qt% z#x~vC?!F!-MYykPrGN3~c*2!_5H)*0A+hJluTg;YuG82^iYUUO#c~C9cux1<_+@v+jv!)|M+)cN@)35i+{On}%IN9Y`nGv~Al@^^efRX&_=Ud%qx?y~w7gPFWGf*g_E7iFg(Jc9F-Y zn1e)J6^JJ}aj%jUBt{YOT~6Gmj3A=2<7;lX4{>&KPQB7QD1IvupW(y<%C%lugGR0K&8oZ`(VsXaZV z=BrXMBt>wF*F;iJ_LN$zO6f_8;1uryl5+HvDpsX*Bt>wFcL_=5b15bHt3W^*iR#&f zzGcd5qZq5#GS9`$;l|9ta)k0jB)&f?Q;@s;cXRQ?x zQb6_A+7*BT>4XP2otH?}w`}E?iVUc>8X2|n3&l<_?Kky$+9fp>UuKFkGILU8nDr%W zGRvYHW&IvItgK{(=9NtOCAU&I*L?Q^&bp6SLph6f{H05Z7TwdiXX!fjtZK7zcx1

3gCuuFbbpx1~4-R<}*6OmH{HZJOWS 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 z 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 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.sln b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.sln new file mode 100644 index 0000000..6669396 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ASM_Project", "Assignment6.vcxproj", "{4164AA65-1EF9-4E69-899B-D1BED776070B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.ActiveCfg = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Debug|Win32.Build.0 = Debug|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.ActiveCfg = Release|Win32 + {4164AA65-1EF9-4E69-899B-D1BED776070B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.user b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.v12.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..3785692702b0a02e4a42f9667b99e85b71fe7292 GIT binary patch literal 33792 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 R<@1VqdlksUZl?PB{~zE>$Y=ln literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.v52.suo b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Assignment6.v52.suo new file mode 100644 index 0000000000000000000000000000000000000000..e35f81ae048c01220e8701c343f9871304a8feb6 GIT binary patch literal 19456 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%0D!rE8H+9Ra>{V(c!5Aobba^pS3x^w + + + + Debug + Win32 + + + Release + Win32 + + + + + + + {4164AA65-1EF9-4E69-899B-D1BED776070B} + ASM_Project + + + + Application + v120 + + + Application + v120 + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + + + + c:\Irvine + + + user32.lib;irvine32.lib;%(AdditionalDependencies) + c:\Irvine;%(AdditionalLibraryDirectories) + true + Console + false + + + false + + + + + false + + + c:\Irvine;%(AdditionalLibraryDirectories) + Console + false + user32.lib;irvine32.lib;%(AdditionalDependencies) + + + c:\Irvine + + + + + + + \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/CS271_proj6_perrenc.asm b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/CS271_proj6_perrenc.asm new file mode 100644 index 0000000..81eb7f3 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/CS271_proj6_perrenc.asm @@ -0,0 +1,632 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TITLE Assignment 6 (main.asm) +;Author: Corwin Perren +;Date: 3/13/2014 +;Description: +; This program runs all five programs from assignment 6 from a menu screen +; These programs include a letter matrix generator, array row sum calculator, +; a floating point comparator, circle area computer, and quadratic formula +; calculator +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +INCLUDE Irvine32.inc + +.data + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Program Variables +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Global Relevant Variables +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ProgramTitle BYTE "CS 271 - Assignment 6",0 +ProgrammerName BYTE "Written by: Corwin Perren",0 + +SelectInstructions BYTE "Please enter 1-6 to run desired program.", 0 + +MenuItem1 BYTE "1: Letter Matrix Generator (Chapter 9, Exercise 10)",0 +MenuItem2 BYTE "2: Two Dimensional Array Row Summer (Chapter 9, Exercise 12)",0 +MenuItem3 BYTE "3: Floating Point Comparator (Chapter 12, Exercise 1)",0 +MenuItem4 BYTE "4: Area of Circle Calculator (Chapter 12, Exercise 5)",0 +MenuItem5 BYTE "5: Quadratic Formula Calculator (Chapter 12, Exercise 6)",0 +MenuItem6 BYTE "6: Exit",0 + +Selection BYTE "Selection: ",0 + +IncorrectNumberEntry BYTE "You did not enter 1-7. Press enter to try again.", 0 +ReturnToSelect BYTE "Program Complete. Press enter to return to selection screen.", 0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Letter Matrix Generator Variables +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +NumVowels DWORD 6 +VowelArray BYTE "AEIOUY" +NumConsonants DWORD 20 +ConsonantArray BYTE "BCDFGHJKLMNPQRSTVWXZ" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Two Dimensional Array Row Summer Variables +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CurrentArrayContents BYTE "Array Contents:",0 + +TableRow1 BYTE "1 2 3 4 5",0 ;For printing to display only +TableRow2 BYTE "6 7 8 9 10",0 ;For printing to display only +TableRow3 BYTE "11 12 13 14 15",0 ;For printing to display only +TableRow4 BYTE "16 17 18 19 20",0 ;For printing to display only +TableRow5 BYTE "21 22 23 24 25",0 ;For printing to display only + + +SummerPleaseEnterIndex BYTE "Enter a row to sum between 1 and 5.",0 +SummerIndexPrompt BYTE "Row: ",0 + +TableArrayIndex DWORD ? + +TableArrayBYTE BYTE 1,2,3,4,5 ;Row 1 +TableArrayRowSizeBYTE = ($-TableArrayBYTE) ;Size of single row + BYTE 6,7,8,9,10 ;Row 2 + BYTE 11,12,13,14,15 ;Row 3 + BYTE 16,17,18,19,20 ;Row 4 + BYTE 21,22,23,24,25 ;Row 5 + +TableArrayWORD WORD 1,2,3,4,5 ;Row 1 +TableArrayRowSizeWORD = ($-TableArrayWORD) ;Size of single row + WORD 6,7,8,9,10 ;Row 2 + WORD 11,12,13,14,15 ;Row 3 + WORD 16,17,18,19,20 ;Row 4 + WORD 21,22,23,24,25 ;Row 5 + +TableArrayDWORD DWORD 1,2,3,4,5 ;Row 1 +TableArrayRowSizeDWORD = ($-TableArrayDWORD) ;Size of single row + DWORD 6,7,8,9,10 ;Row 2 + DWORD 11,12,13,14,15 ;Row 3 + DWORD 16,17,18,19,20 ;Row 4 + DWORD 21,22,23,24,25 ;Row 5 + + +SummerBYTE BYTE "Sum using BYTE array: ",0 +SummerWORD BYTE "Sum using WORD array: ",0 +SummerDWORD BYTE"Sum using DWORD array: ",0 + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Floating Point Comparator Variables +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +EnterTwoFloat BYTE "Please enter two floating point numbers to compare.",0 +Float1Prompt BYTE "First Number : ", 0 +Float2Prompt BYTE "Second Number: ", 0 + +FirstLargerThanFloat BYTE "The first value you entered was larger than the second.", 0 +SecondLargerThanFloat BYTE "The second value you entered was larger than the first.", 0 +EqualFloat BYTE "The numbers you entered were equal",0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Area of Circle Calculator Variables +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +EnterRadius BYTE "Enter the radius of a circle to calculate it's area.",0 +RadiusPrompt BYTE "Radius: ",0 + +CircleAreaCalculated BYTE "The area for this circle is: ",0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Quadratic Formula Calculator Variables +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PleaseEnterCoeff BYTE "Please enter coefficients a, b, and c for a quadratic forumula in the form", 10, 13, "ax",253," + bx + c = 0 to calculate it's real roots.",0 +RootsNonRealMsg BYTE "These coefficients result in non-real roots. Exiting.",0 + +Root1Msg BYTE "Root1: ",0 +Root2Msg BYTE "Root2: ",0 + +CoeffA BYTE "a: ",0 +CoeffB BYTE "b: ",0 +CoeffC BYTE "c: ",0 + +Stores2 DWORD 2 +Stores4 DWORD 4 + +FloatA REAL10 ? +FloatB REAL10 ? +FloatC REAL10 ? + +AfterRootTaken REAL10 ? +Root1 REAL10 ? +Root2 REAL10 ? + +.code +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Globally Useful Procedures +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for writing string with newline +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Write_String_NL PROC uses EDX, + StringPtr:Ptr BYTE ;Varible to store string offset pointer + + mov edx, StringPtr ;Moves the string to the proper register + call WriteString ;Prints the string + call Crlf ;Prints a new line + + ret ;Return from procedure +Write_String_NL ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for writing string without newline + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Write_String PROC uses EDX, + StringPtr:Ptr BYTE ;Variable to store string offset pointer + + mov edx, StringPtr ;Moves the string to the proper registers + call WriteString ;Prints the string + + ret +Write_String ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for printing program title and programmer name + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintTitle PROC + INVOKE Write_String_NL, OFFSET ProgramTitle ;Prints the program title + INVOKE Write_String_NL, OFFSET ProgrammerName ;prints the programmer's name + call Crlf ;Prints a new line + INVOKE Write_String_NL, OFFSET SelectInstructions ;Prints the selection screen instructions + call Crlf ;Prints a new line + INVOKE Write_String_NL, OFFSET MenuItem1 ;Prints menu item 1 + INVOKE Write_String_NL, OFFSET MenuItem2 ;Prints menu item 2 + INVOKE Write_String_NL, OFFSET MenuItem3 ;Prints menu item 3 + INVOKE Write_String_NL, OFFSET MenuItem4 ;Prints menu item 4 + INVOKE Write_String_NL, OFFSET MenuItem5 ;Prints menu item 2 + INVOKE Write_String_NL, OFFSET MenuItem6 ;Prints menu item 3 + INVOKE Write_String, OFFSET Selection ;Print selction prompt + ret +PrintTitle ENDP + +ClearFPU PROC + FFREE ST(0) + FFREE ST(1) + FFREE ST(2) + FFREE ST(3) + FFREE ST(4) + FFREE ST(5) + FFREE ST(6) + FFREE ST(7) + ret +ClearFPU ENDP +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Letter Matrix Generator Procedures +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure returns a random consonant + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GetRandomConsonant PROC uses EBX + mov EAX, NumConsonants ;Set up range for random generator + mov EBX, offset ConsonantArray ;Move ConsonantArray into ebp for dereferencing + call RandomRange ;Get random number within range + add EBX, EAX ;Point to element in ebp + mov AL, [EBX] ;Store pointed to value in AL + ret ;Return from procedure +GetRandomConsonant ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure returns a random vowel + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GetRandomVowel PROC uses EBX + mov EAX, NumVowels ;Set up range for random generator + mov EBX, offset VowelArray ;Move VowelArray into ebp for dereferencing + call RandomRange ;Get random number within range + add EBX, EAX ;Point to element in ebp + mov AL, [EBX] ;Store pointed to value in AL + ret ;Return from procedure +GetRandomVowel ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure prints the matrixes in proper rows with random chars + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +PrintMatrix PROC uses EAX ECX EDX + mov ECX, 4 ;Move column count into ECX +PrintLineLoop: + mov EDX, 4 ;Move row count into EDX + call CrLf ;Print new line +PrintShortLoop: + mov EAX, 2 ;Put in range for RandomRange of 2 (0-1) + call RandomRange ;Get random 0 to 1 + cmp EAX, 0 ;Check if zero + jnz GetConsonant ;If one, print consonant + call GetRandomVowel ;Get Vowel from generator + jmp WriteCharToMatrix ;Go print the character +GetConsonant: + call GetRandomConsonant ;Get consonant from generator +WriteCharToMatrix: + call WriteChar ;Print current character + dec EDX ;Move forward one column + jnz PrintShortLoop ;Repeat column print until at column end + dec ECX ;Move down one row + jnz PrintLineLoop ;Print out column on new row + call CrLf ;Print a new line + ret ;Return from procedure +PrintMatrix ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure for running program1 functions + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program1 PROC + call ClrScr + call Randomize ;Seeds the random number generator + mov ECX, 5 ;Set loop counter to 5 to display matrix five times +Program1Loop: + call PrintMatrix ;Call procedure to print out one matrix + loop Program1Loop ;Continue printing until 5 arrays are one screen + ret ;Return from Program1 procedure +Program1 ENDP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Two Dimensional Array Row Summer Procedures +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure calculates the sum for a row using stack passed parameters + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Calc_Row_Sum PROC + + mov ebp, esp ;Get access to the stack + mov ebx, [ebp+4] ;Save users selected row index + dec ebx ;Remove one to make math simpler + + mov edx, [ebp+8] ;Save table type + + mov ecx, [ebp+12] ;Setup counter with row length + mov esi, [ebp+16] ;Move array into array reg + + + cmp edx, 1 ;Check if it's a BYTE + je RowSumBYTE ;Jump if BYTE + + cmp edx, 2 ;Check if it's a WORD + je RowSumWORD ;Jump if WORD + + cmp edx, 4 ;Check if DWORD + je RowSumDWORD ;Jump if DWORD + +RowSumBYTE: + mov eax, ecx ;Move row length into eax + mul ebx ;Mutiply by row index + add esi, eax ;Add this offset to esi + mov eax, 0 ;Zero accumulator +RowSumBYTELoop: + add al, [esi] ;Add value to al + inc esi ;Move to the next value in the array + loop RowSumBYTELoop ;Loop until row finished + jmp CalcRowSumEnd ;Jump when finished + +RowSumWORD: + push edx ;Save EDX to stack + mov eax, ecx ;Set up multiplication of 2 + mul ebx ;Multiply user index by two (Now if WORD format) + add esi, eax ;Move cursor to index location using offset + pop edx ;Return EDX to reg + + mov ebx, edx ;Store TYPE in EBX + mov edx, 0 ;Zero upper half for multiplication + mov eax, ecx ;Set lower half to row size + div ebx ;Divide by TYPE + mov ecx, eax ;Set this number in the loop count reg + + mov eax, 0 ;Zero accumulator +RowSumWORDLoop: + add ax, [esi] ;Add value to ax + add esi, 2 ;Move to the next value in the array + loop RowSumWORDLoop ;Loop until row finished + jmp CalcRowSumEnd ;Jump when finished + +RowSumDWORD: + push edx ;Save EDX to stack + mov eax, ecx ;Set up multiplication of 4 + mul ebx ;Multiply user index by four (Now in DWORD format) + add esi, eax ;Move cursor to index location using offset + pop edx ;Return EDX to reg + + mov ebx, edx ;Store TYPE in EBX + mov edx, 0 ;Zero upper half for multiplication + mov eax, ecx ;Set lower half to row size + div ebx ;Divide by TYPE + mov ecx, eax ;Set this number in the loop count reg + + mov eax, 0 ;Zero accumulator +RowSumDWORDLoop: + add eax, [esi] ;Add value to ax + add esi, 4 ;Move to the next value in the array + loop RowSumDWORDLoop ;Loop until row finished + +CalcRowSumEnd: + ret ;Return from procedure +Calc_Row_Sum ENDP + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Program2 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program2 PROC + call ClrScr ;Clears the screen + INVOKE Write_String_NL, OFFSET CurrentArrayContents ;Prints out array contents header + INVOKE Write_String_NL, OFFSET TableRow1 ;Prints table row 1 + INVOKE Write_String_NL, OFFSET TableRow2 ;Prints table row 2 + INVOKE Write_String_NL, OFFSET TableRow3 ;Prints table row 3 + INVOKE Write_String_NL, OFFSET TableRow4 ;Prints table row 4 + INVOKE Write_String_NL, OFFSET TableRow5 ;Prints table row 5 + + INVOKE Write_String_NL, OFFSET SummerPleaseEnterIndex ;Asks user to enter index value + INVOKE Write_String, OFFSET SummerIndexPrompt ;Row prompt for niceity + call ReadInt ;Read in Index from user + mov TableArrayIndex, EAX ;Moves user selection into variable + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Using BYTES + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + push OFFSET TableArrayBYTE ;Pushes the offset for the table array (32-bit) + + mov eax, 0 ;Clears the eax register + mov eax, TableArrayRowSizeBYTE ;Moves the table array row size into eax + push eax ;Pushes that number onto the stack (32-bit) + + mov eax, 0 ;Clears the eax register + mov eax, TYPE TableArrayBYTE ;Moves the type of table array into eax + push eax ;Pushes the type of the array onto the stack (32-bit) + + push TableArrayIndex ;Pushes the index selected by the user onto the stack (32-bit) + call Calc_Row_Sum ;Calculates sum for row and prints it + INVOKE Write_String, OFFSET SummerBYTE ;Prints out what array was used to sum + call WriteInt ;Writes to display + call Crlf ;Prints a new line + add esp, 16 ;Cleanup the stack (4 times 32-bit) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Using WORDS + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + push OFFSET TableArrayWORD ;Pushes the offset for the table array (32-bit) + + mov eax, 0 ;Clears the eax register + mov eax, TableArrayRowSizeWORD ;Moves the table array row size into eax + push eax ;Pushes that number onto the stack (32-bit) + + mov eax, 0 ;Clears the eax register + mov eax, TYPE TableArrayWORD ;Moves the type of table array into eax + push eax ;Pushes the type of the array onto the stack (32-bit) + + push TableArrayIndex ;Pushes the index selected by the user onto the stack (32-bit) + call Calc_Row_Sum ;Calculates sum for row and prints it + INVOKE Write_String, OFFSET SummerWORD ;Prints out what array was used to sum + call WriteInt ;Writes sum to display + call Crlf ;Prints a new line + add esp, 16 ;Cleanup the stack (4 times 32-bit) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Using DWORDS + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + push OFFSET TableArrayDWORD ;Pushes the offset for the table array (32-bit) + + mov eax, 0 ;Clears the eax register + mov eax, TableArrayRowSizeDWORD ;Moves the table array row size into eax + push eax ;Pushes that number onto the stack (32-bit) + + mov eax, 0 ;Clears the eax register + mov eax, TYPE TableArrayDWORD ;Moves the type of table array into eax + push eax ;Pushes the type of the array onto the stack (32-bit) + + push TableArrayIndex ;Pushes the index selected by the user onto the stack (32-bit) + call Calc_Row_Sum ;Calculates sum for row and prints it + INVOKE Write_String, OFFSET SummerDWORD ;Prints out what array was used to sum + call WriteInt ;Writes sum to the screen + + add esp, 16 ;Cleanup the stack (4 times 32-bit) + ret ;Return from Program2 procedure +Program2 ENDP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Floating Point Comparator Procedures +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure runs program 3 functions + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program3 PROC + call ClrScr + INVOKE Write_String_NL, OFFSET EnterTwoFloat ;Prompt to enter two floating point numbers + INVOKE Write_String, OFFSET Float1Prompt ;Prompt for first val + call ReadFloat ;Read in value + INVOKE Write_String, OFFSET Float2Prompt ;Prompt for second val + call ReadFloat ;Read in value + call CRLF ;Print newline + FCOMI ST(0), ST(1) ;Compare second value entered to first + ja SecondWasGreater ;If the second is above the first, it's greater so jump + INVOKE Write_String_NL, OFFSET FirstLargerThanFloat ;Otherwise, the first was greater and we print a message saying so + jmp Prog3Ending ;Then we jump to program end + +SecondWasGreater: + INVOKE Write_String_NL, OFFSET SecondLargerThanFloat ;In the case the second is greater than the first, we will print that instead + +Prog3Ending: + ret ;Return from Program3 procedure +Program3 ENDP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Area of Circle Calculator Procedures +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure runs program 4 functions + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program4 PROC + call ClrScr ;Clear the screen + INVOKE Write_String_NL, OFFSET EnterRadius ;Prompt the user to enter the radius + INVOKE Write_String, OFFSET RadiusPrompt ;Provide nice header + FLDPI ;Load pi onto floating point unit stack + call ReadFloat ;Read in float from user + fld ST(0) ;Load a second radius onto floating point stack + FMULP ;Mulitply and pop + FMULP ;Multiply and pop + INVOKE Write_String, OFFSET CircleAreaCalculated ;Print header for final value + call WriteFloat ;Write calculated value to screen + FFREE ST(0) ;Free FPU stack + ret ;Return from Program4 procedure +Program4 ENDP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Quadratic Formula Calculator Procedures +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure reads in float coefficients from user + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +GetCoefficients PROC + INVOKE Write_String_NL, OFFSET PleaseEnterCoeff ;Asks user to enter coefficients + call Crlf ;Prints a new line + + INVOKE Write_String, OFFSET CoeffA ;Asks for a + call ReadFloat ;Reads in a + + INVOKE Write_String, OFFSET CoeffB ;Asks for b + call ReadFloat ;Reads in b + + INVOKE Write_String, OFFSET CoeffC ;Asks for c + call ReadFloat ;Reads in c + + FSTP FloatC ;Store coeff c in var + FSTP FloatB ;Store coeff b in var + FSTP FloatA ;Store coeff a in var + ret ;Return from procedure +GetCoefficients ENDP + + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Procedure runs program5 functions + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Program5 PROC + call ClrScr ;Clear the screen + call GetCoefficients ;Reading in coefficients from user + + FLD FLoatB ;Load b + FMUL ST(0), ST(0) ;Square b + FLD FloatA ;Load a + FLD FloatC ;Load c + FIMUL Stores4 ;Multiply c by 4 + FMULP ST(1), ST(0) ;End result is 4*a*c + FSUBP ST(1), ST(0) ;End result is b^2-4ac + FLDZ ;Load zero onto stack for comparison + FCOMIP ST(0), ST(1) ;Check if roots are going to be real or not + ja NonRealRoots ;Jump to message if roots are non-real and exit + FSQRT ;Take square root as it's real + FSTP AfterRootTaken ;Store for use later on other root + + FLD FloatB ;Load b + FCHS ;Negate b + FLD AfterRootTaken ;Load rooted val + FSUB ;Subtract rooted val from negated b (-b - sqrt(b^2-4ac)) + FLD FloatA ;Load a + FIMUL Stores2 ;Multiply a by 2 + FDIV ;Divide numerator by denominator + FSTP Root1 ;Store first root value + + FLD FloatB ;Load b + FCHS ;Negate b + FLD AfterRootTaken ;Load rooted val + FADD ;Add rooted val from negated b (-b - sqrt(b^2-4ac)) + FLD FloatA ;Load a + FIMUL Stores2 ;Multiply a by 2 + FDIV ;Divide numerator by denominator + FSTP Root2 ;Store second root value + + call Crlf + + INVOKE Write_String, OFFSET Root1Msg ;Print Root1 Header + FLD Root1 ;Load root1 into register + call WriteFloat ;Print root1 + FFREE ST(0) ;Free FPU register + call Crlf ;Print new line + + INVOKE Write_String, OFFSET Root2Msg ;Print root2 header + FLD Root2 ;Load root2 into register + call WriteFloat ;Print root2 + FFREE ST(0) ;Free FPU register + call Crlf ;Print a new line + + jmp Program5Ending ;Jump to program end + + +NonRealRoots: + FFREE ST(0) ;Free up register so it can be used again + INVOKE Write_String_NL, OFFSET RootsNonRealMsg ;Print message saying there are no real roots + +Program5Ending: + ret ;Return from Program5 procedure +Program5 ENDP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Program Main Function +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Main Procedure + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +main PROC + FINIT ;Initialize floating point unit +MainTitle: + call ClrScr ;Clear screen + call PrintTitle ;Print the title screen + call ReadInt ;Read in user selection + + cmp eax, 1 ;Check if user selected entry item 1 + je Prog1Jmp ;If so, jump to that program + + cmp eax, 2 ;Check if user selected entry item 2 + je Prog2Jmp ;If so, jump to that program + + cmp eax, 3 ;Check if user selected entry item 3 + je Prog3Jmp ;If so, jump to that program + + cmp eax, 4 ;Check if user selected entry item 4 + je Prog4Jmp ;If so, jump to that program + + cmp eax, 5 ;Check if user selected entry item 5 + je Prog5Jmp ;If so, jump to that program + + cmp eax, 6 ;Check if user selected exit + je MainExit ;If so, jump to end of program + + + call ClrScr ;Clear screeen + INVOKE Write_String_NL, OFFSET IncorrectNumberEntry ;Scold user for not entering one to six + call ReadInt ;Wait for enter key + jmp MainTitle ;Jump back to main screen + +Prog1Jmp: + call Program1 ;Call program1 + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +Prog2Jmp: + call Program2 ;Call program2 + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +Prog3Jmp: + call ClearFPU ;Empties FPU Registers to keep things from crashing + call Program3 ;Call program3 + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +Prog4Jmp: + call ClearFPU ;Empties FPU Registers to keep things from crashing + call Program4 ;Call program4 + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +Prog5Jmp: + call ClearFPU ;Empties FPU Registers to keep things from crashing + call Program5 ;Call program5 + call Crlf ;Print new line + INVOKE Write_String_NL, OFFSET ReturnToSelect ;Print hit enter to return to screen + call ReadInt ;Wait for enter + jmp MainTitle ;Jump to main screen +MainExit: + exit +main ENDP + +END main \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Tasks.docx b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Assignments/Assignment 6/Tasks.docx new file mode 100644 index 0000000000000000000000000000000000000000..4eeee498aeb274343e086cb0f48df5686aeba85d GIT binary patch literal 5618 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 Ig`cSZ0sYpMod5s; literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/CS271_perrenc_FinalPaper.pdf b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/CS271_perrenc_FinalPaper.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eeee5d1a88448d039bb785821bd4ceb961620208 GIT binary patch literal 102419 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 Il0rfHABal);s5{u literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.axf b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.axf new file mode 100644 index 0000000000000000000000000000000000000000..572d5ac83d29fa33678cd33b264c6c29562aa317 GIT binary patch literal 1644 zcmah}&2Jl35TA{m)s-^8AvFtQ$Ai`2N>kV1OX{@YCBUogwy)VhaepqjJ z-Gl>hLE_K~4jeet%AGUE{t@{DI6#FZBskE&p#0u`M5aRONHg=BkDd44%zOK_-rkfX zi3*ydTU1z2%S69|=ZNN4NrwLxEzoP!J^%h$o6e@K>e=)|`D|LI#c8<;mKUe^_Ainr z)5`hdXXW1(r&l___a@VF9Zcr$mHOn)JoJ_N=EOZ7COx8 z@bHM+e#62dSzb1@b!(fsp19H0-u~@|W!%?Za%(%LVOmBo^b&`m%!o6G z9l8N)UhnnveYGu{dRLVj*AdH`l`Y^!F~+Cw_4amC`9R1|463CY?b(9?XXC;W-72t$ z;#9-TVtW7`^Hc|64DT>&5ZuRk0Iv9zk)hN5C8xG literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.build_log.htm b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.build_log.htm new file mode 100644 index 0000000..b36afee --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.build_log.htm @@ -0,0 +1,25 @@ + + +

+

µVision Build Log

+

Project:

+D:\Google Drive\_School\Current Term\CS 271\Final Paper\Code\Program1\ARMv7\Proj.uvproj +Project File Date: 03/18/2014 + +

Output:

+Rebuild target 'Target 1' +assembling assem.s... +linking... +Program Size: Code=96 RO-data=0 RW-data=0 ZI-data=0 +".\Proj.axf" - 0 Error(s), 0 Warning(s). +
+ + +.\Proj.axf" - 2 Error(s), 0 Warning(s). +Target not created +(s). +Target not created +g(s). +Target not created +" - 3 Error(s), 0 Warning(s). +Target not created diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.htm b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.htm new file mode 100644 index 0000000..bf8112e --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.htm @@ -0,0 +1,20 @@ + + +Static Call Graph - [.\Proj.axf] +
+

Static Call Graph for image .\Proj.axf


+

#<CALLGRAPH># ARM Linker, 5.03 [Build 76]: Last Updated: Tue Mar 18 03:46:41 2014 +

+

Maximum Stack Usage = 0 bytes

+Call chain for Maximum Stack Depth:

+ +

+

+Global Symbols +

+

+Local Symbols +

+

+Undefined Global Symbols +


diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.lnp b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.lnp new file mode 100644 index 0000000..5941464 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.lnp @@ -0,0 +1,5 @@ +--cpu ARM7TDMI +".\assem.o" +--ro-base 0x00000000 --entry 0x00000000 --rw-base 0x00000000 --strict --summary_stderr --info summarysizes --map --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers +--list ".\Proj.map" -o .\Proj.axf \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.map b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.map new file mode 100644 index 0000000..4cfb908 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.map @@ -0,0 +1,89 @@ +ARM Linker, 5.03 [Build 76] [MDK-ARM Lite] + +============================================================================== + +Section Cross References + + + +============================================================================== + +Image Symbol Table + + Local Symbols + + Symbol Name Value Ov Type Size Object(Section) + + ConstrainProg 0x00000000 Section 96 assem.o(ConstrainProg) + assem.s 0x00000000 Number 0 assem.o ABSOLUTE + + Global Symbols + + Symbol Name Value Ov Type Size Object(Section) + + BuildAttributes$$THM_ISAv1$ARM_ISAv4$S$PE$A:L22$X:L11$S22$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$STANDARDLIB$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE + + + +============================================================================== + +Memory Map of the image + + Image Entry point : 0x00000000 + + Load Region LR_1 (Base: 0x00000000, Size: 0x00000060, Max: 0xffffffff, ABSOLUTE) + + Execution Region ER_RO (Base: 0x00000000, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + **** No section assigned to this execution region **** + + + Execution Region ER_RW (Base: 0x00000000, Size: 0x00000060, Max: 0xffffffff, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x00000000 0x00000060 Code RW 1 * ConstrainProg assem.o + + + Execution Region ER_ZI (Base: 0x00000060, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + **** No section assigned to this execution region **** + + +============================================================================== + +Image component sizes + + + Code (inc. data) RO Data RW Data ZI Data Debug Object Name + + 96 16 0 0 0 248 assem.o + + ---------------------------------------------------------------------- + 96 16 0 0 0 248 Object Totals + 0 0 0 0 0 0 (incl. Generated) + 0 0 0 0 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + 0 0 0 0 0 0 Library Totals + 0 0 0 0 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + +============================================================================== + + + Code (inc. data) RO Data RW Data ZI Data Debug + + 96 16 0 0 0 248 Grand Totals + 96 16 0 0 0 248 ELF Image Totals + 96 16 0 0 0 0 ROM Totals + +============================================================================== + + Total RO Size (Code + RO Data) 96 ( 0.09kB) + Total RW Size (RW Data + ZI Data) 0 ( 0.00kB) + Total ROM Size (Code + RO Data + RW Data) 96 ( 0.09kB) + +============================================================================== + diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvgui.corwin b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvgui.corwin new file mode 100644 index 0000000..bc52162 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvgui.corwin @@ -0,0 +1,2601 @@ + + + + -4.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 38003 + Registers + 115 255 + + + 346 + Code Coverage + 1350 160 + + + 204 + Performance Analyzer + 1510 226 226 100 + + + + + + 1506 + Symbols + + 133 133 133 + + + 1936 + Watch 1 + + 133 133 133 + + + 1937 + Watch 2 + + 133 133 133 + + + 1935 + Call Stack + Locals + + 133 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 + + + + + + 0 + 0 + 0 + + + + + + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 321 + 312 + 2232 + 1350 + + + + 0 + + 280 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000001000000000000000100000053443A5C476F6F676C652044726976655C5F5363686F6F6C5C43757272656E74205465726D5C4353203237315C46696E616C2050617065725C436F64655C50726F6772616D315C41524D76375C617373656D2E730000000007617373656D2E7300000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000C0020000AF010000B008000061040000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 800100004F0000007007000015010000 + + + 16 + C0020000AF010000B008000075020000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000001903000070070000CB030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000F102000070070000CB030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D000000D201000085030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000CB03000070070000DE030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2619 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF80010000150100007007000019010000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000C0020000AF010000B008000075020000800100004F00000070070000150100000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0500004F000000E005000001030000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C00000180004000000000000020070000AF010000B008000061040000E00500004F00000070070000010300000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF7C0100004F0000008001000001030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000040010000AF010000BC02000061040000000000004F0000007C010000010300000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000ED02000070070000F102000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB090000018000800000000000004001000051040000B00800002B05000000000000F102000070070000CB03000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000F1020000BC030000CB03000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000010300007007000005030000010000000100001004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B401000077940000018000800000010000004001000065040000B00800002B050000000000000503000070070000CB0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2002 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020000001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 643 + 00200000010000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E0000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 2560 + 1440 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 800100004F0000007007000015010000 + + + 16 + C0020000AF010000B008000075020000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000F1020000B8030000CB030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 80010000630000007007000015010000 + + + 16 + 560000006D0000000E04000033010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D000000D201000085030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000CB03000070070000DE030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2618 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFF80010000150100007007000019010000010000000100001004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000001000000C0020000AF010000B008000075020000800100004F00000070070000150100000000000040280056060000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0500004F000000E005000001030000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C00000180004000000000000020070000AF010000B008000061040000E00500004F00000070070000010300000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF7C0100004F00000080010000ED020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000040010000AF010000BC0200004D040000000000004F0000007C010000ED0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000ED02000070070000F102000001000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000001000000FC04000051040000B00800002B050000BC030000F102000070070000CB03000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFFB8030000F1020000BC030000CB03000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000010300007007000005030000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B401000077940000018000800000000000004001000065040000B00800002B050000000000000503000070070000CB0300000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2002 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020001001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 622 + 00200000000000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E0000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000002000100320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000020000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 2560 + 1440 + + + + + + + + 1 + 0 + + 100 + 0 + + .\assem.s + 0 + 1 + 1 + 1 + + 0 + + + + +
diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvgui_corwin.bak b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvgui_corwin.bak new file mode 100644 index 0000000..cff2267 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvgui_corwin.bak @@ -0,0 +1,2601 @@ + + + + -4.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 38003 + Registers + 115 255 + + + 346 + Code Coverage + 1350 160 + + + 204 + Performance Analyzer + 1510 226 226 100 + + + + + + 1506 + Symbols + + 133 133 133 + + + 1936 + Watch 1 + + 133 133 133 + + + 1937 + Watch 2 + + 133 133 133 + + + 1935 + Call Stack + Locals + + 133 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 + + + + + + 0 + 0 + 0 + + + + + + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 78 + 78 + 1998 + 1107 + + + + 0 + + 293 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000001000000000000000100000060433A5C55736572735C636F7277696E5C476F6F676C652044726976655C5F5363686F6F6C5C43757272656E74205465726D5C4353203237315C46696E616C2050617065725C436F64655C50726F6772616D315C41524D76375C617373656D2E730000000007617373656D2E7300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000D6010000BC000000C60700006E030000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 800100004F0000007007000015010000 + + + 16 + D6010000BC000000C607000082010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000001903000070070000CB030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000F102000070070000CB030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000E8020000 + + + 16 + 560000006D000000D201000085030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D000000D201000085030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000CB03000070070000DE030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2619 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF80010000150100007007000019010000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000D6010000BC000000C607000082010000800100004F00000070070000150100000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0500004F000000E005000001030000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C00000180004000000000000036060000BC000000C60700006E030000E00500004F00000070070000010300000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF7C0100004F0000008001000001030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000056000000BC000000D20100006E030000000000004F0000007C010000010300000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000ED02000070070000F102000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000560000005E030000C60700003804000000000000F102000070070000CB03000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000F1020000BC030000CB03000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000010300007007000005030000010000000100001004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B401000077940000018000800000010000005600000072030000C607000038040000000000000503000070070000CB0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2002 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020000001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 643 + 00200000010000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E0000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 2560 + 1440 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 800100004F0000007007000015010000 + + + 16 + D6010000BC000000C607000082010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000F1020000B8030000CB030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 80010000630000007007000015010000 + + + 16 + 560000006D0000000E04000033010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 83010000660000006D070000FC000000 + + + 16 + 560000006D0000000E04000033010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3050000660000006D070000E8020000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006600000079010000D4020000 + + + 16 + 560000006D000000D201000085030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D0000000E04000033010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000001C0300006D070000B2030000 + + + 16 + 560000006D000000D201000085030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BF030000080300006D070000B2030000 + + + 16 + 560000006D000000E6010000FD010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000CB03000070070000DE030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2618 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFF80010000150100007007000019010000010000000100001004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000001000000D6010000BC000000C607000082010000800100004F00000070070000150100000000000040280056060000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0500004F000000E005000001030000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C00000180004000000000000036060000BC000000C60700006E030000E00500004F00000070070000010300000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF7C0100004F00000080010000ED020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000056000000BC000000D20100005A030000000000004F0000007C010000ED0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000ED02000070070000F102000001000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000001000000120400005E030000C607000038040000BC030000F102000070070000CB03000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFFB8030000F1020000BC030000CB03000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000010300007007000005030000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B401000077940000018000800000000000005600000072030000C607000038040000000000000503000070070000CB0300000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2002 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020001001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 622 + 00200000000000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E0000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000002000100320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000020000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 2560 + 1440 + + + + + + + + 1 + 0 + + 100 + 0 + + .\assem.s + 10 + 1 + 2 + 1 + + 0 + + + + +
diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvopt b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvopt new file mode 100644 index 0000000..afce8d9 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvopt @@ -0,0 +1,193 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + Target 1 + 0x4 + ARM-ADS + + 60000000 + + 0 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + SARM.DLL + + DARMP.DLL + + SARM.DLL + + TARMP.DLL + + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + DLGDARM + (134=-1,-1,-1,-1,0)(135=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(108=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(113=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)(136=-1,-1,-1,-1,0)(117=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(114=-1,-1,-1,-1,0)(115=-1,-1,-1,-1,0)(116=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T5F + + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source Group 1 + 1 + 0 + 0 + 0 + + 1 + 1 + 2 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + .\assem.s + assem.s + 0 + 0 + + + +
diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvproj b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvproj new file mode 100644 index 0000000..8b37adb --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj.uvproj @@ -0,0 +1,412 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x4 + ARM-ADS + + + ARM7 (Little Endian) + ARM + CLOCK(60000000) CPUTYPE(ARM7TDMI) + + + + 3654 + + + + + + + + + + + + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ + Proj + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARM.DLL + + DARMP.DLL + + SARM.DLL + + TARMP.DLL + + + + + 1 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + 0 + + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + ARM7TDMI + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + Source Group 1 + + + assem.s + 2 + .\assem.s + + + + + + + +
diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj_Target 1.dep b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj_Target 1.dep new file mode 100644 index 0000000..86c9bff --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/Proj_Target 1.dep @@ -0,0 +1,2 @@ +Dependencies for Project 'Proj', Target 'Target 1': (DO NOT MODIFY !) +F (.\assem.s)(0x53282410)(--cpu ARM7TDMI --pd "__EVAL SETA 1" -g --apcs=interwork -I C:\Keil\ARM\RV31\INC -I C:\Keil\ARM\CMSIS\Include --list .\assem.lst --xref -o .\assem.o --depend .\assem.d) diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.d b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.d new file mode 100644 index 0000000..5a48a32 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.d @@ -0,0 +1 @@ +.\assem.o: assem.s diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.lst b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.lst new file mode 100644 index 0000000..8a9065e --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.lst @@ -0,0 +1,124 @@ + + + +ARM Macro Assembler Page 1 + + + 1 00000000 AREA ConstrainProg, CODE, READWRITE + 2 00000000 ENTRY + 3 00000000 Start + 4 00000000 E28FD054 ADR sp, Base ;Point to the base + of the stack + 5 00000004 E59F004C LDR r0, LowerVal ;Load the lower va + lue into r0 + 6 00000008 E59F1044 LDR r1, UpperVal ;Load the upper va + lue in r1 + 7 0000000C E59F203C LDR r2, ParamToConstrain ;Load the + value to constrain + into r2 + 8 00000010 E50D0004 STR r0,[sp,#-4] ;Load r0 onto the s + tack pointer + 9 00000014 E50D1004 STR r1,[sp,#-4] ;Load r1 onto the s + tack pointer + 10 00000018 E50D2004 STR r2,[sp,#-4] ;Load r2 onto the s + tack pointer + 11 0000001C EB000001 BL Constrain ;Call constrain pro + cedure + 12 00000020 E59D2000 LDR r2, [sp] ;Load constrained v + alue back into r2 + 13 00000024 ;r2 should now contain 2000 + 14 00000024 E28DD008 ADD sp, sp, #8 ;Fix the stack poin + ter + 15 00000028 Constrain + 16 00000028 E50DE004 STR LR, [sp, #-4] + 17 0000002C E59D500C LDR r5, [sp, #12] + 18 00000030 E59D4008 LDR r4, [sp, #8] + 19 00000034 E59D3004 LDR r3, [sp, #4] + 20 00000038 E1530004 CMP r3, r4 + 21 0000003C 359D3008 LDRLO r3, [sp, #8] + 22 00000040 E1530005 CMP r3, r5 + 23 00000044 859D300C LDRHI r3, [sp, #12] + 24 00000048 E58D3004 STR r3, [sp, #4] + 25 0000004C E49DF004 LDR PC, [sp], #4 + 26 00000050 00000898 + ParamToConstrain + DCD 2200 ;Value to constrain + + 27 00000054 000007D0 + UpperVal + DCD 2000 ;Value to constrain + + 28 00000058 000003E8 + LowerVal + DCD 1000 ;Value to constrain + + 29 0000005C AAAAAAAA + Base DCD 0xAAAAAAAA + 30 00000060 END +Command Line: --debug --xref --apcs=interwork --depend=.\assem.d -o.\assem.o -I +C:\Keil\ARM\RV31\INC -IC:\Keil\ARM\CMSIS\Include --predefine="__EVAL SETA 1" -- +list=.\assem.lst assem.s + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +Base 0000005C + +Symbol: Base + Definitions + At line 29 in file assem.s + Uses + At line 4 in file assem.s +Comment: Base used once +Constrain 00000028 + +Symbol: Constrain + Definitions + At line 15 in file assem.s + Uses + At line 11 in file assem.s +Comment: Constrain used once +ConstrainProg 00000000 + +Symbol: ConstrainProg + Definitions + At line 1 in file assem.s + Uses + None +Comment: ConstrainProg unused +LowerVal 00000058 + +Symbol: LowerVal + Definitions + At line 28 in file assem.s + Uses + At line 5 in file assem.s +Comment: LowerVal used once +ParamToConstrain 00000050 + +Symbol: ParamToConstrain + Definitions + At line 26 in file assem.s + Uses + At line 7 in file assem.s +Comment: ParamToConstrain used once +Start 00000000 + +Symbol: Start + Definitions + At line 3 in file assem.s + Uses + None +Comment: Start unused +UpperVal 00000054 + +Symbol: UpperVal + Definitions + At line 27 in file assem.s + Uses + At line 6 in file assem.s +Comment: UpperVal used once +7 symbols +338 symbols in table diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.o b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.o new file mode 100644 index 0000000000000000000000000000000000000000..9c9bdf356d5fb7b2c55c2b00a0a6a013827c6dbe GIT binary patch literal 1692 zcma)6|BKvI5TESkt}EWkRs^Ai@+fI5co%lB*KRp_U@jZIaC>&SY)_#nd)dpoYiPbK zNp@8PMMOlfRHTAGbUA=*Qm?3~iGPf+OarOq(VF@ZI*YN9~JbcoHMnm>vy5EZod;nM?NK;*qcy$U>)3x zBHz}>aZJOM^l2Q}xB^Ntx?GWQ*PCc$@mU{` zfpk`?)-Kh~*Un0>N)1d@QK8BK8vlX5o72hg^x3y_m_>bvxL4|C-6p83@{Gdx4adAz zuGr#OhR=i<_Boc|T#f~M`b= zCW^xROiP=rDVEYR6m7k`x~jat-fguM3nkMqjFw`)r`)y-Ywx=9iPhiMw>tv15pH#r zTUJlg4aL~hZYYMfX--x_kHRF49WP`Z2E_%%DI4-11Es}*mIP#Fg;$RJ!ZjEDj%8Z586Nm! zmtw?GOkH~Dg>>WMU|{TNU1Ax1jkGSJ&G(YD%;hI3Dd$VOga__WXXt@+9>oRB*zR|B zOjxYcaFSlDye?gkSzFKm5{@&xf@1}0au3fab%vm#L3PTefO-%G0bU+-$sLl90`559 z&3|vQ8dE=SypMkabJz4nC}FKiSKSFU=@IP+y+#6Ur8$P1F$ zs|LW%1c?CL=Yr7U&SefOUCzWJ!2q^c&^eliGB1Ng5K+nuj|#6l`6Velin_51;VdF= zK4u27>BqTbC|1^hl(ynGe_n=0>4veyPyN7EA_cqH3d7QrYr$oVUw8593hk-2C>wCN lP%hy~{#2v;2wn#MeExy}LkXYxnB}goX3^!@?=n|(c@FCu6@>r* literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.s b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.s new file mode 100644 index 0000000..b61fe68 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Keil ARMv7/assem.s @@ -0,0 +1,30 @@ + AREA ConstrainProg, CODE, READWRITE + ENTRY +Start + ADR sp, Base ;Point to the base of the stack + LDR r0, LowerVal ;Load the lower value into r0 + LDR r1, UpperVal ;Load the upper value in r1 + LDR r2, ParamToConstrain ;Load the value to constrain into r2 + STR r0,[sp,#-4] ;Load r0 onto the stack pointer + STR r1,[sp,#-4] ;Load r1 onto the stack pointer + STR r2,[sp,#-4] ;Load r2 onto the stack pointer + BL Constrain ;Call constrain procedure + LDR r2, [sp] ;Load constrained value back into r2 + ;r2 should now contain 2000 + ADD sp, sp, #8 ;Fix the stack pointer +Constrain + STR LR, [sp, #-4] ;Store return address + LDR r5, [sp, #12] ;Retrieve lower + LDR r4, [sp, #8] ;Retrieve upper + LDR r3, [sp, #4] ;Retrieve val to constrain + CMP r3, r4 ;Check if higher than max + LDRHI r3, [sp, #8] ;If so, load max + CMP r3, r5 ;Check if lower than min + LDRLO r3, [sp, #12] ;If so, load min + STR r3, [sp, #4] ;Overwrite constrained val + LDR PC, [sp], #4 ;Return from procedure +ParamToConstrain DCD 2200 ;Value to constrain +UpperVal DCD 2000 ;Value to constrain +LowerVal DCD 1000 ;Value to constrain +Base DCD 0xAAAAAAAA + END \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopAndMul.s b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopAndMul.s new file mode 100644 index 0000000..a7d04c7 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopAndMul.s @@ -0,0 +1,3 @@ + AREA Pointers, CODE, READONLY + ENTRY +Start ADR r0, List \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopandMulARMv7.txt b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopandMulARMv7.txt new file mode 100644 index 0000000..2b32d90 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopandMulARMv7.txt @@ -0,0 +1,17 @@ + AREA Pointers, CODE, READONLY + ENTRY +Start + ADR r0, Array ;Point to address of array + MOV r1, #5 ;Set up a loop counter for array + MOV r2, #1 ;Set first val to one so math works +MultLoop + LDR r3,[r0] ;Put current array value into r3 + MUL r2,r3,r2 ;Multiply array val by stored product + ADD r0,r0,#4 ;Move forward by one array element + SUBS r1,r1,#1 ;Decrease loop counter + BNE MultLoop ;repeat until all elements added + + ;Final value in r2 (0x78 == 120 == 5!) + +Array DCD 1,2,3,4,5 ;Array to hold values + END \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopandMulx86.txt b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopandMulx86.txt new file mode 100644 index 0000000..4a793c4 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/LoopandMulx86.txt @@ -0,0 +1,32 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TITLE LoopArrayMultiply (main.asm) +;Author: Corwin Perren +;Date: 3/13/2014 +;Description: +; This program runs through an array and multiplies each value until all +; array elements have been iterated through +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +INCLUDE Irvine32.inc + +.data + Array DWORD 1,2,3,4,5 ;Array with five values + +.code + +main PROC + cld ;Set direction forward + mov esi, OFFSET Array ;Point esi to offset for array + mov ecx, LENGTHOF Array ;Set loop counter to length of array + mov ebx, 1 ;Set storage reg to 1 so initial multiplication works +MultLoop: + lodsd ;Load current array value into eax + mul ebx ;Multiply eax by ebx + mov ebx, eax ;Store result in ebx + loop MultLoop ;Loop until array empty + mov eax, ebx ;Move final value into eax for printing + call WriteDec ;Print to screen + call Crlf ;Print line + exit ;Exit program +main ENDP +END main \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/ParamProcARMv7.txt b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/ParamProcARMv7.txt new file mode 100644 index 0000000..b61fe68 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/ParamProcARMv7.txt @@ -0,0 +1,30 @@ + AREA ConstrainProg, CODE, READWRITE + ENTRY +Start + ADR sp, Base ;Point to the base of the stack + LDR r0, LowerVal ;Load the lower value into r0 + LDR r1, UpperVal ;Load the upper value in r1 + LDR r2, ParamToConstrain ;Load the value to constrain into r2 + STR r0,[sp,#-4] ;Load r0 onto the stack pointer + STR r1,[sp,#-4] ;Load r1 onto the stack pointer + STR r2,[sp,#-4] ;Load r2 onto the stack pointer + BL Constrain ;Call constrain procedure + LDR r2, [sp] ;Load constrained value back into r2 + ;r2 should now contain 2000 + ADD sp, sp, #8 ;Fix the stack pointer +Constrain + STR LR, [sp, #-4] ;Store return address + LDR r5, [sp, #12] ;Retrieve lower + LDR r4, [sp, #8] ;Retrieve upper + LDR r3, [sp, #4] ;Retrieve val to constrain + CMP r3, r4 ;Check if higher than max + LDRHI r3, [sp, #8] ;If so, load max + CMP r3, r5 ;Check if lower than min + LDRLO r3, [sp, #12] ;If so, load min + STR r3, [sp, #4] ;Overwrite constrained val + LDR PC, [sp], #4 ;Return from procedure +ParamToConstrain DCD 2200 ;Value to constrain +UpperVal DCD 2000 ;Value to constrain +LowerVal DCD 1000 ;Value to constrain +Base DCD 0xAAAAAAAA + END \ No newline at end of file diff --git a/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/ParamProcx86.txt b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/ParamProcx86.txt new file mode 100644 index 0000000..e956f09 --- /dev/null +++ b/OSU Coursework/CS 271 - Computer Architecture and Assembly Language/Final/Turned In/ParamProcx86.txt @@ -0,0 +1,48 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +TITLE Constrain (main.asm) +;Author: Corwin Perren +;Date: 3/13/2014 +;Description: +; This program runs passes an argument via stack to a constain function +; based off of hobby R/C pulse times (1000-2000 microseconds) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +INCLUDE Irvine32.inc + +.data + ParamToConstrain DWORD 2500 ;;;;Value to constrain + UpperVal DWORD 2000 ;;;;Upper limit for constraint + LowerVal DWORD 1000 ;;;;Lower limit for constraint +.code + +Constrain PROC + mov ebp, esp ;;;;Move stack pointer into ebp + mov eax, [ebp+4] ;;;;Move the param to constrain into eax + cmp eax, [ebp+8] ;;;;Compare param to constrain to upper val + jg IsGreater ;;;;If it's greater, jump to isgreater + cmp eax, [ebp+12] ;;;;If it's not greater check if it's lower than lower val + jg NoChange ;;;;If it's not lower, jump to end of procedure + mov eax, [ebp+12] ;;;;If lower, move lower constrain value into eax + mov [ebp+4], eax ;;;;Replace value to constrain with eax + jmp NoChange ;;;;Just to end of procedure +IsGreater: + mov eax, [ebp+8] ;;;;If greater, move upper val into eax + mov [ebp+4], eax ;;;;Replace value to constrain with eax +NoChange: + ret ;;;;Return from procedure +Constrain ENDP + +main PROC + +MultLoop: + push LowerVal ;;;;Push lower constraint to the stack + push UpperVal ;;;;Push upper constraint to the stack + push ParamToConstrain ;;;;Push value onto the stack + call Constrain ;;;;Constrain this value + pop eax ;;;;Pop constrained value off the stack + add esp, 8 ;;;;Clean up stack + call WriteDec ;;;;Write value to screen + call Crlf ;;;;Prints a new line + exit ;;;;Exits the program +main ENDP +END main \ No newline at end of file

h>`fW>wt}-YE@_PAd)pdt3biD~BM=~sii#6~crEf=uu6|IO#AWtM`yAkG zVd%OAN`>@mf|}v$!qBx<2aJUrm(8_he`Br@Vd$C$CCA}T6x~%K3|&`4X_ohHbk|eD(6t^)-ESP_ z8ORW`Ilgh^cF80|*AOVRaveZ-O%{f(c~Ek?vl@4*v0fC0uCGix9qF2{y7t(K3|+@U zX_j~BCaJC&!qD{yl*o^!8sYf(Zh(>zQ!wHw`=K3s{n>42GHmB)C{3GLRoyj97`j$M zX_QyB<~Ya^@E`py3|&2T!H7v!^;qMCp=$w@X1V^O$7&RYuAiYqaPx^@pZz+c?=i*H zr>9z<;li+;OQFFAQB5 z8Kp~d*W<#_^(B<%os+w|>_LXEQ=sI?JMuUMO}IyqHLMqguJ(JHGd;%AT_c5|>v1Rz zpK~65jDhmcOBn0my~xn@7?ei&3mwNH!)-apvN~jj$e_nrMYL$F5toJ)~> z&Sj{-`?C@JycX?v_kx;szJubge#FfEz3Hd%vv}qV*52MiJKh4}h8OU_Jq}(7|->-7d7o z!Q_Jpy_-DeOThGUFiXG`3X_YH_`}K>@Ew?04(7l<7eRPgXq_+-l{pGb*89v^XR5&z38VMxNiZ`V%my%v9n8)Lpw13vD3}f(FlRlV z^S}%cMz7BUU}_x9$6y*A%h1`m@wwvLc2Z}gIOSqUZ164HVC8V)AKN_KVLB)eY{44$rnbi;Z0y>38VLG z6__=`=s9=8r^ z%7oGT{w0`24rcEo&Gla9qqlP^nA~PE`W(9gOr?W)4$NX<^jMq0Y<4hx@=%}en2)~p zjsjC9%rJFLm=9*9gZTtZ_h#Zcp*mq| zROTcw*?2$3Yo|nIYQfADM&B=91+&J%v_Bcg+^rZ(Z|4Xw7mBoJ&U&n3Fjd0n?K}f!sW5sz zd!3GagwbPN3nq7K=F>~f`8zPtBn-a?<`%qP8UM!7i6y0@&rSFW7_=J-oirSMKh@mz zig!!>^2MIxf0ux1JSEP=#Cj-Ux?;*lP?`fwyEE{LEWq@E5)CM)K?wzv3!qd7lzX8x z1eE_6Wh}o{$%OyPDEL^MIc|9G!uWSk@L1Bm2pN_oy7q(;!iNNtxef+XFfP$`lBJA; z5)QOH!%}X7QW41cAxn7~N+iI1Vky5vsSCu~>CBc&ZzvT3=IDU(cfU_P644{E5j3Nd z6`Lmm_Z)Xdbe5?{CLTXByA0Xk;u2CGD9L#d?vt;efLUWxHTEO>$#=q_P8CiQLOc`G~ zY24@*--g={u_Bkn*Ope+-V!hkS0t`K=Ud9PP$~k z^LMTiyu)NcM~n<=nVQliP*MJpWipIa%rIX=wrA#vV7!VM<_IwMNSi%nh3qL2HXrzT zHrny3YT7Y(L)o+Uaxh+<4f8D+JD(@Pc$IHGpSQqxm2W+knRN@dk+TBK7yqtKlQ?JH zW|?(HeRNFAtiMOB>Zi^9b*&%q_Zo#&;<-3unhBi_rIxOkavhY=i;2ubma-a3{qjWS zYbbSrmbV+-Qt1JuAix|ArT&$~c4inR5dA4A4XYBFcP!;+C=~%_rxL95ftC-nl#`%j z2=jOD7pBk?5#1XvGdIjpCb(2^-&rC1jy>N^J9nTRZ%j=))6s~11Ze`}jdJVEUZos& z!?eDCr5ExpuWA$C+Kxaw-rO+l==)bG7;m<;9&08TZ??4F&V43UYy=IX_x(%LPHaZC z&h)_EGmh#s54lwv< zJbcs>XTf#r%uEl*pFIjn872w37+1y^=CnlR1uJ^?gDvwp^HuIW=xOZ9E6`5pAKrJ* zddh837LH16c_oyFj)}~N#2PHd(TjErE4z0R4ysd!Z<^QV=w!Jc4b*0uO9Q`3gomg8R&c0IG| zrlzdL|G`fcavxkS`{1~V-j^T;zmnCQaW_6^zCGBqW9E;)j(hVm6uMLx%wA4pkcr!) zV8REW4T$(F75Lw;kI~GQau)6oz)&V*jtA4wj%&DiJ?#f%K359Ez3F)<)oFB@%G<6j z!qCi+m(~`Vg#6|gQ+m>NX~jsX9~mUw?GMtOYdpDFmyFQ zsg+UghyMC|9IN`HFm&x(j^meOEJg`K*UeBW92u?=hOTYKV{Y{1Sm+t{}K22u|^3)*Y!|BCvj$)tDydxz^L=V6v&((EUlUc%;ynd*zz+* zk7|-}e2Rgno3_56j_f~#9h;L-}oP_y&5ScKZwc9xf zOf}wa@Y*rg>--}=+bIT9aeV8{-+8uUx@gWWmdV-04MwuIYmxJkjyzK9*VSJIv);jU zn2c2m0lg!>-p;XL20EA#V9FfKd0^%^nCrka2&2EJuoBE>Vf36kR^t7*?UVQGI4}jm z=&_2y%oIkCbv~HI4rUIRCI{01rb7mEF2tB~hK6Jn-2$e>!3>y!_ilvI?}N<;(=1Gp z8Y>DWe+T9hRhddKi-ghZQwL_PFnYhf2b0r@v2-TyT#SVqrCA;{r}~4Q)e6=z143v zM$q1dBSWtj;8O0!iO3!ngq%L(Y;=nimgRH=5=FmGpp!ySw*oEwb;17&)FVr;JMV4 zMzc#>+fu~xs$rOcK+Tn`;I>KXW0-gGq@7RpbXKhOcFZWxl~HcQZ~pnSiO5ktSVp;I z+Jw;~6aPGq!9qod70HNSV^l`@?;fvm$;b4)gOZVVv?|+)Gdy@7n&}h!eysGpw5)jK zl&a!MQzn?X&P&rX5UU}*^}d_7t^w0b=5IYuFwy5rhNc>3X0|hOU|S*?w$7N@vP3Et z!EeC{%!-{M6*D1jx}asW)reJlu=l+^tsURL2UBrKocY@;wm)+AGBnlL6TPsf&}m@2 z3|nVR#WqXD%J7?Bu_;oq(cZmJEsk;bBUbfk$yd=2!8FG1%?QV%WL#*jIV7&4xlrl@ z%5b9;lKH#$(@PND>zAovPZT+LltIBlPlECKWtfFf?6GJDIoa|IMTmKoFN&RjRP;J4uX=3X#6VNAzYjI10tYFzoa%4u9SLX!|HYcFrz zNVUVD-B9R3Fxg~c%0?&!NAWmlq%B4{%UsDZL;zmg0MV^&D^Cf0%2f2Ph0IqpqXd(QWld`#croax0WUI4Jn81}Gx~%4<+Q2`C>x*&I+dLaE)&+Z((+V%r+T!dD*oE$;&5 zrOt^;4=8)WoMdv55?eW;jexAmp%LOb_JRCa`NYe4A% z<*R^l2$VT!+0SPfl&|+oY^My$;W(A`Gdvf{bi7pZm5ZVL5>RGC`3P?m`b<5Pv_m|_ zTb&x9Y>ThyHjH*Woz_1Tnr1pDTc47Vl_TT7nKrcjw9lx?=4;_Y+4zTDLuV#=4V83? z_dTUyhuELfHpYZ)IUZ;4%5`-O<{vJoC2U+Jw|nJmYV1X0TCOWe_WS`0(M_-D7vdrKSXPF#alhhb7tc_+)d^o8Xj9daa6)Yo;UG-dv2Jq2yWcJ%#pU${VRUAbC<+?#*D`+Ee6T`l<5gK& zRSDS7`7Qhwyh6n>HS^R}LqBJ`UnVEB9+q|CJTw&#CdGMpr1T5(uy{;G-yFYBrk!r+ zm$@%4w(LGO_ohQoPmT_qH#3x-8yPZI3gt27_ro$g76et3oKx#})5bIT?!NEYfR zGoSH)GG}ufjMYbD;yLGmX)R}t*M*V~4tkYk=1yTh7#=-_s(Sf^)qD*6HW>4&)T_Kv zK7(Rv;442u*)0+ucY}m>#LJ(d_~|p;F2YWoS88F?{;D<;F2xF8NHE zFm>F7lHMg#4@ex=bC98zPwQiP5ty4|IfID>x*E!wfO0#OF9OOVP#TW#M$mJuf>O?$ zW9_Vm()Y+j<`*c#k4{uN&TJR@@VG>!3zV%e$-Gw+rlG!24vi~btfQec1(egFym3-u zI}@OcKRHpE0i^@li|tLZ3~zw)@~}ka9w=L#lBm20<+FhDDU@p5ndWEsBb1o|CG85d z98h+I@_In&3gy#)auAg70?MgSehDZOprqj5ct85pP?z><#6-;fc&ZDB&{_l~bS`E{eUU9FEuRm`n+qy?2}Q zp5Vqa*mB6;o`RQwEjAwY8ndy=;tHQ8inW*;JDg+A*)U4_$fGuB(5~Z@El_G; zl~|jr!PLiRf;a0vgz|Yn*$AZ?bZksxu3w?d3MlQbY8N`WC~=NuLCFMTO69fO9m>pr z>mVrIM$pB1=;dSTb1%#ovV@KEP+C?#alm<44PPwhRz6K|BBFcsF|o#g_VP>!7c%qE z%sy`(_Q!rJ2*nRyt-Pj4P}$0NHbGY`$| z^XB1DFdgtOxS4rqW}kT`H3eUIqReMA4;SHiZyxR(Y#{!dnTG@R<2)RQc1$(>jq@-A zSE%Bjc*1#1Zyfjz3>@`Fpw2}cwZ=B&qjqN*1#W=%j!FV&=_a{Cwv-gkjoW0v(u#rlO&CK3|F}=OnJI#c& zHZyxC9KhN8j=IvC*=y#bYZZ;k?8Wk>Y-aX;jYhoLTaDh^1u(Psd3e3qtELk&v$wJ* zXKxLn8rt7Ddv}xBJ7(nBrT+8g5yxu|%4V|g{$f!JCVuVouNbdCFm5&u$C%vFQn za4_csB#&QlPy}scwCRRJE$ba=bOrOqqh(EdAV$LJwkeP=M zW6-^Mc(#>~Vaz-{8Xsr#R?(j7z?*qk2G%tXYyXRRI3CG(^Kcznv{N#3Y;$kUF`T%z zU^rgKI>u`kjMs`$#+`h;JjRUI=ZF>D{_64irJCdQKE?|Nz80GquRX9!dE<4mT^#Uc zye1va@fyDE%o_gIr5ua(SgA1_EjBY271$}fv3RV-v)->}zgUQeUY$GRkzF5C!`-p?cr`S1 zaN~SlD)sSS=k^}sUxhZWbG`b6F;|0a@Hg{1_nlY`!NkNa*b6dCyuH9v4u;Y{pd15b zWk5L{%AnFjR|S*{0?Nfu76+6%C`XM+bUh5^+kmnR%9eog5tJ!o6J5VU*%VOro{jfU z(Vuqs=k;QLC`Xkgx=w;}b3hpfMP^H^8dHoiF40vBrR!OV$^t08&Q4SwfYPZvQF$6l zT_B&;P|Vo+8NLtY%Zfx-Gn8)Uc#3xn>i935?F3wVK)EcyHMnJg@%7p>tX(;mo(O-qq3GZI{ue;Yn*(IQChH|JV_MSU7BNW2nBw@2x(e#98 zy@&SMml?U>#@D&Mx_Yx9H6<5-Ij#pcvv)s<>4M!FdrEdc92vcGCtzmp?utykz55F@ zY}RI0+Q)}*rG0Ym#7`m6o?%hkVklTufVLm3To`3EVWRtR&_PZ3S5G z4DDQFv$o|>>SQ&}M8Eb7FdVPWm0ko~TaKS=WrH)RL5W{+U4-9EVW5mNP77&xTn zD+djOC7|Rk!}9^9AJV20e-9|!rs!*}=;pjP5G%LQioVc_-n~uH*ICg^tmtd3==E0g zoHj)_@8<`4dQg!SeWexsHY@soHbrl=q8D1xS6I>K_|fCaUO_XNfZ6aT?;oAuK7spCt>kFLP| zt^yXvC9m(v&(;0<^b$WG{8i&_+FOo)ix1>E?Lhn%oFMGichawOCr_xDG;TuWn1r6; z2vm#r3u1Fs@0W?SM1L) zESuE)U-ZjkOuzOPKOg+n{fhn<{n}Ofh3{&qoEV&zNUS?%UFH;1mDXqG0bu;If?}^B z-z9U^Ysd8c3bfo}g|z0XSw(}Jb-ocCsu;|3zi3x4LTYR^#sQ|qX6ExOsZS1m3pU32 z+#^_@imHThH%$&g-|HOp848BilW@;ltUl!>;*$D!imA`NXj!k1v=i%>$-v+Km-M5zwfR$w+a)SsS;>5)8lKBkqd%V4tC5dqaOeSp z|5|MSOEqRPdhFA<=3GCxnc1>Ys$s?;7?86iFR>bdJJoRi52`V7R47!Fq#9iPJjV3v zF2qU;B*RtW|JrxcsOeYsL0tV>?^l8JYgFaLsR_3N!CxGc@Lti>)<>EB@)*;vtKj^9 z+pnVkqF+VQFSDwTpLlM-zpR)$bQ>B$_xr@m^4q)0r5r!g#;5 zHNh}vgPB9d?3J;Gx=f2#!yut)U`C3<+3U4zs__!i+d4+_zrVT~o%?aGY(R(>drJJ3 z!j)2u@uSd*7W<`FjqrJ1zgnwC4SHHcCR7}6=(h6{t8p!uMaZHZ{(0;0y-5sp04ga@P zwPMV~N#jQ*p1~UW1N0*Qg5*{G+Av^a$EH|_pP}q|VcZo{w!Wra=(K>61!cfRiA)ZZ zrvu7yP;#mhnKPhloRO$Zh4RG3iOSVbj;cviZiDi1K)D~v?8_3FWl;9JJW+WI%A$a> z0m@4=6PYbg4xHsF{wE;3ikVS<5hr%L#wx)7>``w0+;0g?v3VF=AYx7N+%LPEH&0Vj z>Oh^rF!IyPgw6fAf8}A;nfJ8(jWgj%nF+B|wvw?e&iy)Gi*w^^<2_aKDV}uhiN~SY zS#ieOclLzq!0TBb6Lo(mrw5e7p)3t3$3j`tJ>D-lNAjYZs?NZhM1_7A@Q787;<4)- z>A$J!3Pw+>e!OXi6a9w#XYVuaW0md*3KBYZg`C8 z`!N{4qx?X4^jG(NXb;Y)C|VEp%LF!kFBr(an{fzE2loAK>3hleag&4RQKp?!Fv{zn zYQ67m zsfJpNP%V0q`Ha`o){bAdfN8=-bu%X3{&f$O^#SE^D37rnaJY5|jn()YvzV&r@7beh7CX}B7%05u)8xmvnf%0ZRIRr}j^NGx{ z#iWsl$>RW%z02oVbJ_{b1sFF_hO<_ z3uTX&sBlJkqhn^&o~U@XNk}$(A2hR|#eNaLzAAN2iK3n0##Mb`k9glx%-Uja=s+ks zi2Gm%Oa^^b-}*pa$r-CoyIaxIT=rCr6bju3<`Xiq8hb8Njd!f{Sd9`q0>!Lc9(o=Vi_WBYgm6LO}Tj zO1&tYEnX~BAN+B^7OUuAU7vMQA2a359^!AT&puM0v89z|r7bV*gtnj;>94e2ANI>* zOuvfTx4gUNFYni2j(h7znH=dCIyGTr;KL}z`NfmV#^D{4Mz3G3t*hJOO_|%`jDHsA zxlB*bz?8!-mazTRJj=!2|F`{G zBK>N81k(=U8dX+OJZ{3cmajqfLBG=1Bp<>4V0y$Ee*`_3>8Uw0H7l~e{Z%8#6}y2) ztCZmRJ|miSEaOOyvZ+RkQI5ZhH!Ri*GcHz!^8SUanerZV`Zg`!37v`Nv4fg+y!Y&K zH{-W}(hpzZPv!p?=Onp!HPc1ioV6_d)L1x`o{DY{W_@JioVW@ z{v;OZcs1gcFKW}cXIOnVcN+%koNJB=0i|D#)%TJ%MK|B)5NP?JDl7U1tM6Z0eJ^iQ z^i5XuN-O$$EBd=u^vX6xH#fHg`(ABDZ?>Z2t6AuZkNfmCMX$A@XJ8=@SEBeMZMUPm~8?5L#R`hvR^i6Gwo@Yg0W<}4nqA#$bZ)sEX z?pE}LR`kwR^s}t!X>Xd>P5m1SnH9Z*wZ~<) zDf%!g`Wmb6c~)%WZ+MbEdQueADZKAnlq`mZbdnQxhk zEAh3iSDT^_wW6=Eq7Sg5FS4TNwki4mEBX>EdUq@OEGzoJHbt+pqHngMms!!fT6fWuU-3RUec!Mv#jXmorGZDr(4m7S(PtuQ}kX|^hH+Rv#jWqR^Kbz z6n&8u9e=i~Mc?OH(eJeSKD|xRms-)yx7P&K6}`razNk&n7g*7=t#O}YMW1br`{Fi5Z?K|AtmySt^tD#>rEQA7&Wc`SMPF$} z?_!b6CnWA#1L>U)jV_cE*U>)X`#C06tSR`i8d^kr7` zjctlvV?|H1qE}kc53{0gYE$%uR`l*x^to2_xmNToZHm6uie6|%UtvYx*`KTN*KuiY zwdLwT*ot0f&G`%~`l;4YrbC;e&$FUuS$&^nML*A~d}f=XXIatbS$*$dML)sndsdsG z7g^EQS<&;Y=qmU`21VqDQRg&-l^fcY6QhAl?sPe;yV~WoRhg>+coIFr4%| zXFLX1Dw2HD?Em!+CEi_=l_Y0=hSz@=n4jTIc&9kN$K|l{s8h?$x*tGe;`f-z9ReB? z{|s+;1VHgopG@FaguHzhQ{qwm8m2*vKo$0@k z^I7{0Z_DxepYGO}4vGJ07@CI^etBOax3~zR`j85ie7F-4_TEr_ZY_O?2S&pZLP`|v?+SM6+O?2 zzSxR>f^{}n*rw=EPiaxVV z(T7>lH&~T7_u>Wj_iL@n*S0D8bSrv>)%R*E`WUP4bK4Yst`)tP6@8u+eJg9u*R?5n zffaqdRrz67^b4)ZFKkovc~E`Uorfk~T%Jw4$e5 z(W|WJ1FTus(5C3Ktmt7YdaV_`!HT}3P0?$u=-F2EIac&FR`kX;MPFz|A819#hrL>? zHhrvdU)!eWbyoCTEBXQ}`p#DLrZz>-x1u*$`+I>Ey~5hxH?%2w)QY~zie6$xZ?vK} z|9`x_4YXxRSsr}(7Q~5+>mvbmJ~Nt*OjZbv{oQl>{a{$yU#s$ z-+Rx@x#t|tIropCwq`UKM>8uSGWwym3UQ2xD42jCG;z=o(V&blQPdWR5XEFnT!y7% z_@1iTRrS8LtM;zir}3@@)90=Czux+L>)m@dlK$?J^s^<;zpo^HTJrqo8%cjdN&1Z? z>3BrdiMoGZiut)uG|Bc{DoKA%N%{jN>EBY4eqAH!Mya%2^~ykIQt9^+ZS!Oqv?T@d-eSo=M&;t|aU zT=4ZIK%UrC{4i1C?|8T=s^Yf$AH|( z?79Vz%P-M<1l1lOSBuzCRR0{1hfY(RM*-O|9?LQe>MWBlR<%}q1~@PLr%LkwCEf!w z5pOI}713J5{{x)Mcu>yz=Oqv0dFmHa$SVPPkVVucAeR}=5g@!T{v{w=n13wicLSnM zc3S$Qfaod|XoxrG9c=DzZ~d0=x5jxKI9G3@d~W=HL<@_A6+j+hvf6-%KO6I1K-5l8 zbN*+5oWK+MO2cfTUR$VcT{X@Jf%Bm8q2T!RAAt0G=45}W-gzz{BhwcG=N3RNuWQZ% z@@;_Vdss#F5Fm3*=U)&I{Mm8wYk=I$q<;>O%deuG|MvfzU3! z4ak*mqSF66AQ$hTkmtM^I55GElz#w--q$IQy;wkAN~taaqAT+i&H#{$w^E$%2IO5V zdfy7jl^0N)-vQ)N=AZuw$VZErUvZxML2$;qA62x#?70>od>*?6kogY9X#*mLrH#Wr zAU6VL$LRqepJf_;m!N`J>x~})WiNWG5mj+wS&Ujqmx0QuCrlKy-^be2y+)&Y48IO3OrYy$E= zGmB>Jex8rcEI!OQPk}RCrPALC$eD{2^2>l+WE%cHAa7u{f9+-Tmzfj9S}EpU^&F74 z^bByG&Sw6*0lCED=S_gT0~>nljSm5G=5`ACvLC^>QJD092#Ct$Xj$I?$QisS$nv=t zkgI1XWCF+~Hmkn@5S_VIKKw~Qwu}$q+PU8Z4*nRHcfxbO4+)-#}%(36Rf1eXGw~0eJ+=rS-;p z1QmmP9*`$qL~*YFF?fv4z5fW1D;G3QhJ%FI1gP2-txp>`53mup2goJ#mzDl4f{z)4 z!mDoqMEu!#<9&c!y^B))p@5k6OJHC37WmLaoq#L?@(Am%eL$vc41Oyh&tmh&_W?3u zRKEa7-*C>hCwYE9-Wd5fosoVAI2V|o{~I9U&sy=9fSkdr_N?tUy%iA-91s@cbXP!F zM13nDFJu~iKOkF}*(}uu0lCU%txp1?YH4&|{1G6J+)AZC?cY6P?k%i${vIHg*bH!w zfS6tu_IxKGXI@76d_DBWJ0s z9|51YEow+6ae8x?8P0ov^B9|>J_^X?TQn8anEPu$p2E8cC-BB3IJoetdjIpBdbU)@*gpV{zVT6g@e)9EeoR4L1IXJ9AHjJWkn7kC@PL3Y zoF4_`VY519eKiKvTlBT`KLn1dBhrxn0mx&wQA?ls?=e5Kv9kck^PWl9(-#ABg7x72 zfV`3U`KJMSGn*xz1mvojC4^l!{v^gS+ebYgkk6S27ZKG))V=FPRKphlr~gt7$@T|$ zeNA`nM%EYq6gZb&qj7|+V?b^;qbbWe^lUFaIe-3*+-#K;~}0gN%Zg0&)gBb3vh~z7dc& zu#-y;$S&jj9e})>L4F006KqHH2Y_5Py$s~J{|U&&yQ%Ge|LvG1Sj^u72-h$J2?d<2jOS+sl{kSlCg@U)+X^qZ+Z&j;kyES_Ho$ir-A+Xdva zY|Z^wfc!c0^A7^@AX`D+4#;I=Mb?=Pd(cu<8=fdU|8C%HJx)rtf_I0)gp9jdIktMvb2FMv^*LMK&dIQNio5S%Gxj!cTO~83I8!7JxM98wydlitY zOBC{DKZ9steQ_foZ)7w73LtYvy3p_tkjGv``FuAZZ!@#8z3Rg93VHaUBRyb zGB|{|t~VHfKKjo$77sg1_k3xw+>8B0eNowj+8qASc*P@7n;m zosIV&1LP{3Gv6<$ScHE8kT)~W-|=(!N*9Zb9RXn)P5=?7NMX15-`w28fV`pjr64~C z$mP4WSF>?vfGyJ88`&uM6mYIGOaB6p6U@&q_z#!?)-)d>>ux~wEwIRIVK1>eo>R5W zCklP;7dU35h;?wiy)}24jg({HJjN{jen3XdiuVBW5X1QxAWt!GTm@v2LH-PoS6`qy zU-uv3jq?=pTtJ=%SvFc;0LaVOoUjSVB_{p50NG%3!p{Mso+8nk0C|ATejf&eulSz>|XRFl+kdHE|Hvxhz35k|>0P=aZkNOZGPXY(b3vYbsFJS&*e7+8lt8Hr6 zEr48NYj+nA{dA1rH8(c~r# zlJ_I?&%E)qfZWa?F9PKA%!liMtg7=VSxzTp=!*D-y* z1&}us@1hi*#n;{e`7G1$M*%qlD$D1cfShHc;I{zzD5LsQK(5?Msh;sDW*dg{Re;=J zb_Ln?;kY-==Wb?kcn@&yWwXQ>5S|(MHb9F#7g3MB z7dV&L4*%nTJPNjU{rW>dj+me4ehHlUDh$YFcDsEKARl2p_|1U4i&^m@Kt9c6eGHHb z%&VUQVXTw?zD zMLS|+n5_?=1mx+4O2~S~W6+1~)$au40p_0_ zK+Z6#ZwKUEY^Hr9Aai$9yM7Xoo0#;U2jrt4r|0)y0c4e}dRGB?jNv>9$fesT=j(q3 za}-9YA=7^L2nc!s6$R0>XOv?SQGMHA=Go}}uYg>>i)#3H zKMd*2Kj#5?H{-kq$OhYMT>@m6dE;$>TxPO94#*8G#y$tgCF6|@dBA*dFn1Hv`Kx{v zwzD5$MArd=ZeVY$fUd@-oW@wHe)EzyCfqw|on5uDpU;@h(90doP7fb8{aAR*0YmxXogA{RVK(uwMQwAZJ-5eA%yq5B{#h|CFUS0CGJWasLPq{T!LXxdo87 ztWit<2_TnPzyAOr7ujt5UO?u)fl_@+;IMt&v;Q-4_-vMVJ|IsqonHdTWwug30En(h zRvKOgAUCl{_*Fo}odPzg3Go2p-&Vy`idM6;47OC`K2jqFsMfgp5{*M3= zJ5Q_O$=}4h%B&axGT){+-vP+Ow^7KC0CEXuM!{8a{v|+8u(|FNfatF|D4ah8WS8~w zGd~6hqk1_Y?|u=L^-X|WWcnNeGRJ)QuK~Hr=DH66a%qF|`3xY}Em6o{1M+4wV~d+> zk^4F^rR&#MK90Tdt(0m3ka^~@3xM3t?E060Twi0#>8~*IL_)g%AK2ELpK0uyioZkw_S+#@s#@I1)}1O$IV7p2dK0r@23{7FDo+0Nnr0P-M{_54p@C1N_?3dk8YQoae0i>%)- z3o7QZj{x#+HU|FykS7`BF9EsAa$kS<35*>U8%uz^k&XA40P=3ur>_F!3>$;57kpT> z{3k%fM@g*@KL*G}wts&1e?hb`yPglogKL!P4nSUJW>Mks43J$$_3eOslzILkKrX$I z^7&OjbalGwuRj1p_*wi?kS_o-Vtck5ej7c=)|~}F-pzV217wcr{NsQ;>jIVj3j*gN zh5UwqFpqu3?*Ib3tjAsmhOiGR|}j^P<{GNi$;$s#gN?Ad|iY$Qu}B1jwrmMBYSTpZPY%`I~`r z`3%+PCjfbX;k*-&#|-QUf4-pOo zJBxlDAmY!?>K6gIiH*T;2IRz&<}9%P4IrOp{`na|F0--o3xFIkoIeu~P{Xt$qW;eB zW36P7@H{}Svh`wDKv;i$FCg>GiXQ^x1e@#L1IQC>U49&pD{PMXEFeeB(x+d=Eb&d$ z(ys*Mc4qr+fZWT*;I{xG{;XZ!1BlqSsJ;+w?*-&tZ03I)kjrd8_EmoX&P>DC0CJf@ z_5jiE+Y$2S=KdKV&td-gK0w47%}W1SK(1pt|1Kb(WcvIsKyG3^_{>ki^9CaJv|>~~ zhsEj(fOETvRdwru#T0*b1~?C#4Hms!!I?qEfSfS%yc|1--m^^BcLL{TX6Yka!=U;c zi;dp{q$SSk_ zdjT1--uVGQu9z7TBId3D^5yg&oio@1mrm^T0RKKnG00C&i@3E>sU@^1juKZpMMUJD{Qa+NkGJ(-4*=be*zppZ11!IS!9vW z2jo%a!v_I*9>aMnAX`ksp9N&Y%;7@nV}RVidhmAvc_X9xV?Z8b`=6(M4!!d#>cg)A zWS2$wEduBH6z3ZOnVNAbq<=FYFJrO#J%C_EAl~?KK%Qj#jSm2#-)AL!G&lD#K=@NF zp8|xBizflOco)^@tN#>xn~&4I@e2WY3$y*@fY|)Ati3#tB8&Ax{Cg8PXUsk-%eME1 zTe+N#g?38A32=@K&cDE~lld;vtR1YGC%5v={T-Bbc2EyG(LZ~G?VT~lc2O$S&&PNO z4L5zg0mXb(Z*Ug}Sp&d&?Pb|Z&);&_T6XK&9qZ?iz5wjyx1G<-4CXck{#EB+t6T0gT)4PQh2St!7zoC_b;J9#Ot2yXV~U zM!$2Mk8f+O9S9`$TRzK6kd}7#^T~uG8kj*ob$&Ei8RUmM=%fO-3|eeu*g*+=K<*dRJf z!+Z@^aY|Lz^z6c_NQdE($}Zw_D?8})_w($qH{H!PJCl6(zKuI~H|`U@JG(I7-OaoA zlgOBi^6o}!xj)(JWV_&kJ`@4Eac6sadU`y{)vtrTByX*ZI%D)2!QN;sWv?6@_TZD- zh6C|4Ud^ZKHL~04ZW7gtV%VdV>m_g3)jvS&ks1)}j%YO^yfMD%4Y2Xf0;J6r$@;r6D!Ot_Zo^ zN?R418dIhILROtpt%X8jEuvyswzEB5I>dvPJI3)60MQ%(LIPMkgpu^O!(mbA&e}Qs zDM?-oqjT-fdUx%%g<>hNzjV+S2zmih2;!H6u&{Ri&bC+~?=dVTz(H%dXa#_y-Olup zzZ?Xn&+V>0hs>hl7v%sD;ZXc?5V%E>Ny#EfNe#CE&W&1hxK^?VAf}J9h%SAkXUbq{ ze;Hg@z}8pYfy$H;jnb?P_DPT~K_EET(gj{{Kp*0>5-YDh)LWCq?0i02SkCSeZzRa@ z;O-9Aez8rN>|*nYjmO%3C$Vx*PcF;g#1bX8hggBnE?}2~r#tqr%js-kThp72I@9j% z+D5N;Qtr)0yCf!_juxRTMvr3OI&Ful&k_w8Vch~Ntl%ZzILU8Z*_Igv0O5YR`4U8hUTEIpy z+_yjIPS=Qz4vP=`Rg5T;B(p@cxVzB3WU9w50-_pu8l1g%q9 z8;6Y1G5n3KE2z%d=x?oL*~Vp?GaMKfhFFMDJU^AV;c9VD1jL_ZlQArQU0w~v#UK-c&V&}`Z; z>BzZIu*>&GI0|5p;~X~}cXo2@*vyhIr;2{wxxW~!DozUkL2E6DaRWS@p~re;w(xiE*+0UE)QM zBrEZoB1ydfbi}$~N}~BVBrceeEQpDzEQ10mddr8-ffQYGceG(JiY(bU$P7l27uN3U zI=B=>QCnqH3ZkeBYp-ZeY#fLmw7Er_)eqXdu!dvlvPithL$( zB-2_v!qjdeC(aIXVz-a#pMrnfozChBONyTqWp%G}go;s$MnMd< z+ZlDbNGaJp-6{bYRG|!3iLsgO%};|O6qZYpWo3R-q~6h**`UdPo5uFUv=#p}O<=yz z!PZXi?9>m_Ok4H8N#oM?7`Z#EyZ&iVgzg%sgIxbMNO1OMr)w8f{mUST?jRWCr$Ip& z75h6oC@I8)DCYZO-qV;8Y6r$MH%)6lYBf~tJyJc$epTHE|JP3P#kScmlo_4%!kZ7Ril@C6{}mk zIU)Cm;75#J3sxapbSzU#SU>9q5;zp(<6G*T`<&QGF-V7Wk{4L0F5$3++=1C@+TTR^ z0vHv2h0l^m8j7+%HNhWV(Og)V|M)ziYHE=ZgE9iPd*whCfyFefheU#pB@%=I)?$R);d zLbrccNdFFoo<0sDFzFsFZh8Qzm;jRZ2RBql2CgM6Yh{Q6Hh$& zk&HV6%{6)uXOtN@@v)2w5HVTX$%jCwoE4q#6f=ZYkORHwGOt!9D8LmYRwE-t5uw3L z2KScq5-=|^yOAIQstL@@$SH_IGTC~Icu#4z+e3W{@{$`){tPQ}2*IdYVuSo#H5-aR z*vJHPDVeMG82&axES5Kso(45;iY79zoa>}=urWw3Zuf%ZrqPgV;in*6-4k~1H{`*_ z61mu}3379{sLHZ515dNdqWY#%MqI(I2GeCMZzjk2Hn}R)YKc2b+u{M{@)o;$d5)~egnlGNVUOjzI;f+ITa1GQKJAZWM;F;iw++=|Fw6hYlI z6wWU$GVH8nlT3t-PK>y`kn15>`WF#4I%{&v@}H#X^au|pt8<<{4lxixZJnCzj(daq zv*{39N1KZa!IwKDywX$c+tua!!VpzutwjTjCx(n~poZ=>*q1a;95rZ?0d+F3e{aS{Xdq zK9zyfvb@x7M3*kKnMgyGE>IfSUQM*oP-%h41>Ux>zR_J9FR*=xs zLJ1-9P9<`|BeK*)Nx`|)u7=uez9ve#upX5hlCHpH@4BK1F%{pMMSL@2BA(}bVpYNF zhqy4#XipdBQR;k%LIP88g2M2fVq|}DWrU3p;oHXGClQ>cX$pf1HAG-;bfJcvf5bpa zR3m`_QN!duS=!Ns`Us*z8ZmGV-WB6cR`e|CVi_Z$DVteTf>w5GmaIuZJ&OXu9j3S` zS%HFj76mX}+rp(}1q$j}6o3t6o2#A(eA@NE{u*&6{Lh92smfmMk674L)tM|ah!?F5=*claV1!VqO>_Nn|w0Zu{bM4Gm z5Ggl?SRhu^yw#L8AY4s~_0rW&jd(z4o+n*HE2(lBe{*V2HVlY zt+;lYgJsnY9xJVO#d|8IDY-JaxGYrDdbycZL-XcR?K5wlrF?ltPQ~yPt32}w60xPC zY*lAmCs1%it+C6^Egj};+)82IDuP27{qh!>qoswvuGmsJFQ-S=$q7`Msw%^55w9ab zCAL(VZi#oXZhJ|@g6=kyYHuBmr9xY$ofq4>+-0q+DaCbLdD*PPn3u^qjr11Z<;n_S zOLVe~(}5OcuMV`f^tCKFu)?BGe7)s)ey1o<<(eS3=uCR;31A*eOu;Er4O6ba!Bm&J z=ta>f17qGc<(RBN%;^3WECEGfrb`fllUh;g1F@JC^`b5(S`zAz*fLP3!PI^_a8~T; zw$bWN+9rxHiV9CxH(SO@31EyW-=shv42VU!Cdc#wO&MlM2~&^Bx#)^Z7vBpP`+Hti&w|4Eu~fw)&n=+xTjFB*HSl4T z40MrvI`KNEfJz)GpivpAtPscX>EkIh3Ml2l3}_a>EUV{1^yyfx{|TsAMhs}^M=UE? z#`EY$YmJ&aIhVs&^O4T=vm&Wo{(RjF3rYM7L|eJy^Np_x#ly*4YQpibitBO{N06y0;RL3VgoE`?vplZk0nP`;{k$_q+7n(H z!bOzJKpc&A4S|?r+v0KNY!k{!xWpPC$lcEeGpk;YGWU41hZZRz(v*i36G&uB2DWaY5jj*}&P45k<6LjO0g)hz6>!P#7AttTlu86#9B-|FBdS@wKv`1M z7Tc*haJYPtZ`QftjU=tbCj=foN;foXXU3almlAFs)ZTL zlWtD7PG9cMu1#rHGPEQk6|Bg zY>@Bz9c_xr9*vaeo_?iz1ERM(LX85B+u_3ApyU*jk<;Pp4N7$1TPaE z!G{akI!tYY$yRS%=v>g2n+Xef0cwKK4nPr<=AB0BpM+|8k`JciV{y{L+us#Ahk1~3 zd09eMure}hO(9BWA=M%10{VPQ)5 zV6zAs7p9RBFL=JdTQm-DmsSK-CSzrz_u{ z;szj}Zuk2Abv?$DTPqzD=9a%KkP%VeitZIq89-d;m7K*v7W>igf zq{7Li)|7CUGpLDa;o>$e&&>eOqaaVy!g(H9o<{+m$3dQ^h4VbNJdXoBw}L!P z3+K6Qd2Uml=!GrYgzr7r4kE73gW^mJAp}pk7_08f13WkGJP2|nZJaL}thVBZZ7yxG zeHo!pM&J-R%;KPT4fv!g6-WdmD^(oQP}%cDyFd(10${u0kly zV@N+^`A-ReN;VBuvU!ljM!InNL?vii<*-;iqI$z2OcZO9G;+F+5@<+LMd@Tuf+$Ur zDyoz#N|0HiZ6>^&Y)aOl%py@0o70NwS&5!1!la$zLOP{Hk5LMrJd3%6D>{m1P}AwOP@QG}s_0;rb!J90s^ug{rH2~X=P;U8EjKkfgJLeL8CA0x z(&jo@9y2QA=0=;VN)FS=NT^X7ZF&No=HK=CY9nW)s(l1x}oe z#S7XQt+yH9blaV@Zz_Z4qOIV_T?|Pe$^4~wyHCRI*-Ne+AE^SiGAU+DzYVe`5g zW=0>S1);dWBwmP1*f+y?y69i*=S*X;{bf_hVYF|_K6j@Yj5XHCH{HNiH~i!z@Sd3P5ewHH#N z=+{A__eLo0bz1Eu4_A1}+{ifa@~w#%!E>d-@zfoJ11m?lE)12I0vP0+Kqvl-qFQgG zuRB;$n^T$ebJ_$<);;7Zb-Yuu*Hw(6e2LQbhQ~ z7Fjj0q+mezfwo|327Y#PD5{+rFrphs+~hal5ZGi!`8BW+jiasEtfnxj+t5bw@@#tJ z=*k=8C_24AE-Gpobe-m)Yh2QYyxwb<-#eOOLeqn&+0HkMTwNfNZnhZCzGH!BVro+0 zLAz3)6;iLL*ihDIg&CPNu74mNZg$h?K5521gdJe2W#~Qrkl3~0SbJ7T*RtZQkj||3 ztdPz!_N8$hv6tMWlKzY21NrWmBvxwp97#Zmp4g_xu+nA93oQ5u@lx+>ooRMtZx4%~bitfmGg6HJh2l zsTI{w7~1Akw75R#P36Aa+aNaHz6MgZ%~_H1YSYkKnj8{(CtjSyQ1@^ zr%lJA7ga%CO#nEfwaq6lpR?>tx1NMdwIgK?D5bDk+o_?}bbsKQ!BR&b6TQ*Q(n8p< zt?L>-G1XuruONow%yDP5tMj1H2Lgk^XBgEeZdMW|Q1s8FSDLO$M#}HFxs#eR+*)$D zEoOLQ6NXzW6L*Tf;YJnp%debT{3PYs#gAtf`+7Cpcq=|<=eR-Krzm^<(`bahg{r|h zJ|I=k`}Jm2&OLrF;j+Q(Eco;j#Mdirgt_H0bgjb6I~e>b^PNtN*3MKI=$DFUFxo{( zYZ?+pMr2%+2mi^geExwiI!C3Kar1BG*+zxs^VJH6~PKS`)ZWb<*tB zKNE+n4yN^f->R(FWnWW4umfM1(_A*1iq|Jfbos49wM=LbUbbfdc#NpEx{uA${?0Dp zU>@|AJj%=qGfEOD+=?Madu0(DcKXB3PJfbZWA`TX&G+{4Zn^9LAHBTi93tnAv#+@I zma|!QE^D>sgvBFb&`(u2Rt(#~4VfX$lACHG)dJaw^(1tNF*f3Br_z-HXphyxY zqVRdOe7pl&jx)qveuVW-uU|1%n@vPCvRzK^CNI(s`_->dg|R-B>d*s9Rgk5trBBGj zQx*KxRwbz`JOYBz8e)G6`!6{nSoqoCD-wy;h6n=d-1W#FM_TS|YtcsL{v?;rN}O#i zTOi)eyq%BP_ROkNwR=LvJ>X``(%yKNAG%cQhG;O6gv1FcL zVV41ED+s;Fpp+H8t(Pk%m5iV8%u%Z1AygFt<+L1q+fC{T*bv3 z`?ov2{{GnY7rm!kDNu?tvpCu-`IFb#gh6hM}KE9owVjX4!)>2%O zW`E=n1at%sE~kyf4{!5C2S?yNEY_2g*o5}(&-=$X*^^yd>Vl%rXBDf8MG>Dmw(+i) zmSS~-`M!0;w)$5M+is>UvINN4(xBK8PUm_Dr+Uu!@S+ju@G=tvjYJ2hVyZU6!c($A zS*V(PEmq|mYtXDbcP2F`)|Yfb#BAxoppnZkD(64L$ZA98sfanQU@$mjFWVsBjq#O7 znghF>{KO;9aDlhbRqY|o;vh;t>?dh_tc`D=J3;k51nAcyh-n8q*TP4TqJ=)h*Xt{H zxP`;Hc|K2=OE1Pah^b@hoVeq)KK5DHJ=i!X(gM-Q3G4@?^rS`;iJHKAWxR#MBhvUq z{Xwm%gusZYC0Y_`&@ny{gv{GIc1if35GpnkyxV-v4H3tSU&Wn)va*>574-2+;5y>2 zY(_yXa{C8aqLNsO^d7Umz#2$HrKv z{3p?393msGcKk8IW@Dh5MZ7AZ2M4?4h4M9XTs4aXRRWJ3rl?ZMB3>1F{~R?NIycp| zU4LrYi=W&J##U3jC{SRd(jMrK&@s^@w_Acbly1Vi+908afjMXfRDm(&wN0;DH zqyjmCec&kKV_tO>@!^w`g;)veO(g`z0v2mNDWTIuY4J@Vju&5Xl!(%xf<9h}nqx$i zA~igWGWFf44;OKruCWsY1dk%VF0MX`_$c(@B2xe2;F6+$=qTdTrur!2qhLFGUm75S z$XHW5{+P7-qe!jn5{r0MLgxteWPj8ssAiF%O5hxkqDm!;cvbvI5nn%49YuWj!J|k8 za=hNf;llGQqWw}C+290aigN%45r563U}03LpVG`JByLVH=te~CFseFjBm_-8n|PI+ z14z{PacGRNdKc?sNSuc?wh>V4U`3(7K~obr8abYQ%%Q~>q8>UUwBBj@&~m5_V@U)F zV$3Ndu5%2!5mDPa{zHq;VHJlKFS_^862y$xxZ=2xFkWl9#4A*N;)oi()hz7wkh;>> zw_3g<9l8I~YWuj9tG^hD&(bC& zrK&F`#j99}gij1U&5C0t^FTe7Iug=Cwt5|%=ReRAUK6m$)RGE5@nH?h~tF=KE%HtL0U<0{Y|^$)_}>t8+?>SN(($u`K!&uUZzHbVU5J=+mZt zSqxJh^0le9o70v>pIp5xBHxkPS^D0U(bcM4vn={_#MUr%j8`m+O(LRtSrnN7`XIk} zj^|*n^p+4cCT(4642^sQA_mbErt)_s_%&(zvILo|im(*Rn0P;jd3{s*s~=)rstaLb ztQPNA;IE>&X0OpOoyuQS6bJg*jJODs_@m2F z`hC&D!!sA?mxhpBnL9m@rlJbiq}9w|Cpe^Z+u+H$R^=%z%%*P*Z23q&^Pviy*efGV z%i40*&ZfhWt4eDHwf{XlmNk}-M{Rbx_lp;aV8k!w2Y4WF?R-1ynGdEKiFo(&UD=L! z)bVhL`s%fw{`8~8SdkSYc-@D1=ZD}sS+iVSH4wpf$;T^)lbjG>*|0S;hBY4`t`B__ zYSHqrGXC)jigk`pq{l;Ev}!l`NW#9-&pZ>C$oF)DqMeENdg8s7 z0xSS+yfSXPJH%s-WV)k>r|{T(s0nY*2sPooErF(`DIS{a1{zP{NuNN|LT?agS>EiS zhV3}edP+PLV6)`Rw$5l2Xj&0v<(sI^@>9xZAH&Vds2Q(lMHxi6wKb1NKReUyUfvHm zUSwhNDuh<6vvuG8q?*b8Xq1ofSaHZZEBmNU6D6yD7c5Wi?~M*8f!3AD?(lFl3^kut z&AnjQtqKHTW`KWde$wq>;_7YpLb0?o?%}0C0s2$JZm4OopKpiSR-th|9(4L4w!8AJ zD|(|rgKcTMcZByv`JH)cD-W4*dUH7Jclx8<4rq&^UqAV)2MR^?E#B`t&O4|q-JWC! z%XQxkL(f|?d?CAlulI@f-pOe{%+hxnsAs7sy)fTqs@C(JOvAjMUEYQmx?<5azt!EFUKOeGL;{|wM1gj9!`!DEaxaqC z9P10k&BH8!LJc!#1p;g>V&9-Vg%{6aRyNgLMoqa8%buVZhR5L=HU}F$Jj$rY<^??K zS5P0S^Begst~ms<_F566@&&1#O^m2ccPg(=*ALfZSE%iqI7!IJ$SRPGP(o;7cHd`U z&|H5W-NIT1)>=>^H;)IMy&MV&OYiJDrk1dZFe$->>4I8WRB9$0SfdPqmGQ-UNJG42 z#=vw4uA~c=bS}JrYi%zWlWS2XzqH-y=5)#yG_CoM1UB3K7asZ!3yu5q8crM3<7=3G6l_(7A3WtMyTN$I776g_2})|#JoHv2i=H2XTSO|jeZ0^@LP zp(hsnQbV_BAWUf&FYSywqg@i65X#y+{lWfTxPAF(tGDBBT^WOscvnW4!BQQ)-j0L} zz`ILw=V-v>%dKaH{O({ncD7iIel#xa99cWw-_sRcLX+_{SnV=Y&ZnC0B@3VDHqwV? z7tsjGW{qUHwF`|NRfCQl6k8p<*+@5tU|CXSpJwOh-Sl~~(#1U8lss7le2Gn-FgEaM z;}qGHE?MY`_y*r_dwZ?)0X=x`lzgoF6?j?P9$svjq*MyuW=f0m6uyeKjsLFq#6#$_ zYFo!JS0-^>lM)R*O$n35F71m~LM4hcM9Jb# zk3=$0KI4%#HW^{E*j4>%E0c_jo6IO(rBL75FJUH(Bu`es%xL&3WN0Sz$)y(e$PBCdxDP6MA<)aDS>OEN7NSzl5U9wPeaaEpueXda{CVd(ZnUy%Y z>Q3;b|0-1r64-OTS2Z79x@xAYQa7`@t3a3BRc3)t8GeSSQk>5#uyM36!tu^@BQ0U2 zSYLcuvFXF05G%g6Ts7i-*3!IIX^IFEREqIgS1Be)P$|Z%9LdDRS;IadLxtZz#6f4qFH4wPD zzc)%3sHu_#E{WY$sysu~OdM9v#KltzRAk8_Pm2Xx9Ob*kyLV!{kr5_~U776TZQIGN zC1lAWmxQIMRvMya;u`FPq{M;PXsUF9i=!r?QxK(#TgscrGgL-kbm)wlgpMXk7AN|D zq(Ub-ZZuu8(B;W=IGLm__m(PIpr~b^bhh)X$+#>LHy5wFDQWwxb=Snn;<5J7*FMHg z?uIB`T&syVO_VII({3Qn5NUB3p5imfyiU)1U0YL7Cq~h=W2V)MPOXw!rgA@fa~QSB z1s_#fav`3BvDdr)`1nL57plpONZ$#0yR~#K$9m(k!OgSiNnD% zacOiL)1*1ND?G>X5@8;uQz3` zAjP4QAlWvVD@YO}%Y-YF3qEs9nn1{kUe^tku`8NX=LwSJX`*y-CQXne&rlhGvHK5` zCrIf#LzFD8$PgUXBo}-=?~oeN(LGt8T=0oCROte1lM6n1nkZeINfRW7j+@Ph4jp}l zObQ)MWbBI-S0ooi=me7sUWclrgrrLrx?G!F@QJik$pTCHffVPKh?|So-PB0DCQcS_ z@&qYj4NUDDbH1sipSnWJDr_O@_aaNiFP*FY9M3JOo&Bg+1kI79qn|jG6#Ju#e5eHVq z*o1>E#A-rK${8E>y)8|QVBm}WCQRZ zBt@~81Fgqx)O$7#QJ34K`%Ud-)A&&ptaYM&H<`^TjnXkwx6kpjO&_+XvZ;K_A;#@q z=gFrp>)h_MT|LlQN9mO*ZyuUZ`fndtzH~Gd!)HZua$z!|QCIg#L7g;@BZN$1f-g~A1h^i1x zZc=WIs7>09=^pJplPjUZW2uXrnDAcx7Rxu)E}Q&TBkjuxrzTbyE;ISUrh%I1fcpzo z*3!riHc3NdqZ2)e8ecEeC2DGQ^6sUgc0@kPraK}ZuY?_ukDTs^Vz#3`9%i!=S?AEm z+eXODJ0hP6DLWz`ebSD|#~@)x~bktg%Ot*SN`L5gy-;B@ka!hZ{t;{OdEz{zP?u*4+-{jQ^ z@HysMDc_j)%*sdZ!Xi2#XhWokSW|pk_LQrM2vcSi5o?OiW%{ZjLd`1jSQUJxCa6$F z9;<@S43_q8=nBST7G=mKpn5Gy%~a$wi1C<38FL}g&?|<17A4?X_R5q74xub&QH8zn ztD#RAk62}Vp-*~Qy<@7zF||BqQO5Ligjalu82VY1V6JVb2;(t}GImBlKE9zcjK_@1 zs4+B?E{4S{s@S{X#%`f3VpZ|Yla^28sg|;sMHTbTn3_TCGecdS&af?x7493jvkTYH zrq@{R70xQjYZ!Q47b!eQtNXk??N5A1j&=txmB-gu@NQ4_4%eZ2iR*gtGX9kex#!LG z_F~pv$}Wg+u41aVcFe4LD;T`}-T?2ohc2z|ZfBg~t>?Wdv|cMIi7(5DZwwG6Jvv@f zj#km}WZmO!sCdZy7^UJh;$@XXC&wrk-O1O4nN`npNetg84_;G_TG6`GuO~$1OYoPo z-VjIormHEEA{&~8ty#Uhi8go_^$hbZ@+(G>hC2hwVir}zXA|{X7i#8DU$1ELSQR{R zncA~;EE0Ow$11*OeblsDB6_xt#Vl^sUDHqvO>W)UZa7fPYb4iaWl*bu&!6PA^cQM1 z2r!_D_y(gSDs#tD)-^(WYW~d$iOsQH3$J|0;e3e0W*70Pw3u&i6*TxtGoE2JwY*F9};&t#p^Zh@-b`VE+3<7YN8D?+Y-?YxbyDr`#EhyEaTpm4-E4=5tM{#{C+eIEj9soBF@3Mq`HrhPC>-@M!d*DW>&q-hBHAYk3ZRQB1I=J zuZH&dcxn5@emu6wQ&&Ho9CgOilMAPVPd|Hx*V^)=sJv3tr{;syK6Sb1Q_D%juILqe zTyFR5E8o>W?Fr-VHfH_eTz%nSJ{zDI;+!RLK^j%Kv&gRLoQBULD>ojU>J~-i(Lah# zD`#ztC$oO&nM^LcMn8mR*%}lVWVysi7VL{yj&Z(Unmr-y&6%&EroH%rr)CsI;SprMkKM+XZwp^* zC3u@5zO&t1-ceuB)-NL^0E5=zG`|VbssK)gdpSYmFoKLCZu!n`{mSkh0T8q$`HpR)n)yjkbfQAe zygmJkAS_Muet*aE&_5}P_+Z`+`SM)RMN1`knW*%QJx*J0CM+kAOXvlVpo_^Mb`TV%CXsMa=ZlYliD?c0b{Z#E z!1;-76cdv2LHA&@aFYwuobb8HL;svgt|0X$$$Sr7$Zbez1>-#C+l5xiJzu=gM;_)H z5i{}VN9SUbUc73nyBF{c^rh_luCf|xr_#+Jw9`;%$Ap9QRg%UV4J`#-b4xcGS_(QQ zG&L&P)77kMitZbY^KNg_8xCer$>lVoVoO3V`5McH@l-I-YG83~ z&EwPG_)yHa)19tQMb$;`{DtDpYoSI$F4nfIBKLB zl2lQp40F77RoUq{rIqkYqZ!q5vhB^)av063mYZvzK{1!rjH;E>_Nn1i^kF$|pU%ilw$I=u=K^3xFF9%Z zbjwO<`>2VsoZ4T=Om2TB4%#1)`9HA;6_*52VikU(5N55sPngMC!XZ%+p?z^}5p6BK z+K3`z*2)`>nXDxo8dzIgq(mt$yhATrqKKHa^3G)@YYB%2))rSgQHl#|>Ge+(5wlj_ z0?lMC;n2X^l%2k?mR?AuTPyFSX0n!WXkcw|{S~FSu$EqtMG>*Sl{aNGSxY!Hu(r66 zi&9)zOE2xBh?uqV?rtV)35N#O7FUE(iVJJ$HDVMIvsT_F&SWj&(7@W_(lSbMVJ*Gb zj3Q#z%KOcktR);8SX*49Mky|=rB|&{M9f-s;X0GKltlx3^~G+K?!sVk`D>odZi`1R z%&&F!OMGoB;^K$Vr&3&C5--F`6jjhC_Xqvn{dxcRnN(iOQf{y>BcP+gpg45FyGrD%96fFV4=~P;s!mPIBO->msMe ziaR0CeGF%$E>Ij;=|O5!XAgAw@PH$YPKbE4z-bjh?zgu7KyLMGd=jf)L zuK~wWzIb+?HfLPwg$5?OncCU))5%uC$*l>tb<)&?qKwmd0fkdyO)8za05Jm~4akA) z*g*=JIhG(rPK^T@DXCNDSb`J@Dh_0%qzsv33DVNU$Vf?*ahVjU6Aomgq==Yf38~0K za3CWkHNqTAkm69!fsB-t0COxsiW4#iGE!3E%drG0j+-3FNNN2pM-#N- zU0v2>sPI>MG#PDTWk6>KD!v-%B-Zan<6aP!j)N(lR8Nmnm7CT%kwBD(Jzx5<>Y$^_ zm1gCls*YymQh(@5wGQFJpY`P~Z&cLOsy%e2YguvVN@wO4+FS#hy@#%-fM;82c`#EK zGgPU_tgRSz?&&RE2UENDl z({-Q~3C(nHkILyf&^m!;I=E-l%=mtH>~|Z#|0;86=Ak>C0Q{m;BLJZN@l*nd?yhZ|YiHO2oJXVlzw`MBNO&TAO;tTw;SCsg z)M!O`O`ca!@0;jsb<8o95bWy^5mJ%m(Qjt6Mn|bz-%-Ah;?M0Qid}Kh=*TOC6SUXK5^n<+F&$P@@uH1 zc{4&~KBx`uY@c{JVan$pfg?BhdmJ3+IHWZxZ1 zq^*+ca~S5oD7iJXWZTS^9OTy8*F#)VnBjX9-Tm=6A9V8!PqYlX_h%Og>C*;9b4X37F&n@ zkSWJj0FlPlp+96iy!?nHw)~2d*a{%n(D5UbV#|+aW2>q?=>L|Dt%Ba2LtDihYTzxg zDe4V+(_W|FdtIJkInW<6;WKILR9CMvJ_@sUDx^OLarQ7dJ@X4P-9d6L7wuhwd3{SG;m^IBb27Km0EP17j zqxOvY_QuFyMwO|EW#-&%eWbK+ofbD`a&_!t!rvK=d-;SOo{g{qe^K<|R;K5t7*s44 z)6V#~3RRrk!BvcqDm3Y;E$m0+>J)*Ac`6^HZ*AhC<{!pqn7AfMe!qvJ(oRknK^=3UU?boVi^lz({-^5kF0qW7LkRo z0;{yRRp9bnSjY;y4py*Y8?7KGJ)4Q$RshLvxdI3#YO$&YP)bo-foh{RjAWv=2Bp{w z1hj(UYO^2a;)zx`;cFhf+UvM{c=qP?-;t*T0)Au(I9R1THBeT~cDV7Ybf{y3<`47ZykgLoHG! zk+E7NG6=YM?W#@C}-QABDXkyPL(+C++#Av7Nkukt_;03(Y&1FoJ>@hq$ZI5k=q4M{9 zrr%hndsroZq~8OLtz~>UsE6;ScKUs_;a%If6CJY9!}k=$Ka{yn&nT&qcASs;*e4rW ze74gtaNYq%a>o+drUOp_599%yCUVi0rchJ}@?I$wkC*xdRZ%1g!t<2V&He2) z@eP}JVU(&ups!BAkmAijet~sVi2_egc87<1ox!nAGsbl_BdZYU>kCHfH?o$jLZsJ0 zM-!Y`2H35n`IVAYi1eyE+U#`i-|qDKYwkOn^%$xpOBA_m)J+RlN>(A#=h)NM%9Ma* zWQihSC3gMj%hawkR22e!U19{LdQ}M&&+gleP|U1&dVjE$kGK27Lv!*;CaVzXvoS(s zEm?&~U+CbNcURWMOVn_iE2AjMSRZw&0^&5Yl~1PQ;c*iUeB_BLU}IZ+S~6;ZmFQ-# zbK&l|xjHrc$Q@No*hzF_H#Vs;L@T{XhN_A|VSYN55f~>A*^|36Y!y*zf^h2%rulf# z>1SBmw{u-Ba&0)JDn_GdCcUZ|rK+_c2Ip{akdLR?bSS=TEIpPu>n>EWNmL1s^WP=& zJ*ME=s1QlO#;hr-+B|KmMY6t8BAi5HYf+twhuhdi z-@ZPECAm5(8_NstS-MM^?(!_Wk+eO+^cnwWqa(a}gKjO!)(upZy* z!%8y04=YLFL%YHE_@a_nhejhh>cfcajFyEISyZSyX>%RA)%MtHm3Vw@N3s(NVU6gt zQ0k4UF-#28zOF;(;TJ*WL|+62%HJ@6bw*K+`v@u(vWAL$IG}0>dMAnqX?hl?-4siv zd+EaNU^PqZs$?21Ovs6uaJ6Ac_*w|{MvAaTbXsVv2aCJz6m%_u>KD_?g{UTEMr2BG zXnCnLS{U_7ub<-p>0R?z#0FU$QrgqSZTxq=hkrTS#)M5(6uU$fSBE&<$s|+Cww+QX z3Y10+x3|mZhM8Rx$u&`7^p`m4Om&(d#ZP5gDm-S(LvusX_{l=Zx)vow;3o?~g^B0b zq~kwIZh%FyDkx}~Rh0mXWL0E^PWY@9>6ZGFRum&yp)#W~As(rop@*^<<#|}2cT1a3CsU`}{|GXC)v1nj##1c}iO8gR1%_nXN zX~v_0U;INPrH>MpkV>mOOGrJwv6#%2l~kc6B#y|4v(sxOp);YUQyGD=_Bj$8kQtGY z+Ez^d31L*hrI|uA2e#74&n8tRvm7LN#L!S-5$AKdg2bYyiXiJpj0ku6h@q)oJ!asL zZfn)r5u-@N(hP?s%u<*2F6!& z#Zo8wBvgx)Flhzq!4ehm6lBHg;2};FUsZ<{uSXS^M1{->6feC2NqE&))m)2DlUl%(d+UEPt;X&`KATm{=H%u;r9kudWvMM$-;PLko7bg zpRe*UWKLB_3<=6Q%n4*zZ1IZklomyC^p-t_qwcasbTmAogpsO)XnZXsSwme1a4??@ z@J1bRt)DEE5SgkdZ^)D_tH<|-OeL8=WGYE$$n;`ErjnzsGV^puJ)Q1NT4Z6gDxW!Y zc&4Cpx9WMQLWtwl2nrNsg~p+&xe^tc5v(fu$FTC0Z~21IEN8T5B2>^$ZbGK}GgOM@ z)6>WcROke0v@jYCRg*s%l-dn-=u|{8TT};id9A3&*FvbnQ-n35(?Y59Dh7oflxSA36^X{qp-5l{0?(fG+i66Y}fIH28DRZe`cr0QNI(l{@R2KIXS6dfC-O2i#a z6rY+)nwfYs@JnT8J4%_Ddzu(V^q?1wZ!8vB%^0fERZS9+5f>@VNus7x8G*6(IT9O? z8Ih6NR-`u)##aTGW(v(5*s*Dnr~q;hQh;3o@-T0*Mj z23RDk5}5yah*zr;V3Dj!+!9i)ONd9ZGNI`|%`yJbnyQRv390k~PZpB7vXUyagv1f0 z+T={=c2cesN2rXzSo;XA=)?wOMr5S66_bBL7*%j-rjS1i7pmsy==$i3*unKVG^au~#W=(iug{)Au3_a+R{4Od({rN1+HIi6lgdSuNwG#F9{d z6{+tCA5P!&B&eW5&KOwO)U(eEag#X`TH(dMm$~`}tc`8+0FelWGI^)Ayp*ko&yPUO8Gr z@AF;?y-&WcV!cKUFB@8^tLx4i@R8@}CUo+&OFN%#sw-w3x{Igear0Ge;dBF*)RX1n z=?1mYuT8ePi4CDWXsqxMedHpSu-S-lV#;nKhF@?W zRS;Ls?^UC&ny_NjRTHL-x@umbODzBVQ_U-J)KxPJ-9-h$zmi$ysH>!`8+Db$p;1Fd zT_bus>MF_8M_mNFq^YoyUvSjv1+!u+=pA%1biOecLl-&ZVpv6vxENNk11^SF?0Add zT#7-|u^q^xfd>}m&Eu`~50{~9FkyliO7DKdHI<5M~A zE6h;E@^nq}B=39zLs3P-qC)J9$vdAy3)GXz$vZE{s+ShHtE~>V3Zs2*9B9HO^wdA? z#kg)rPu}_bG(+;v$8MHU*#jREZ?a}gYP7MKoaYOXZ%17vdHSe}VAm{p=bP|@qb_1^;vIA`biOecLl-&ZVpv6vxENNk z11^SF?0AddUJ~p9+46{0yqI(217uyeu0o!`CKupljGvM(;LfKZ;0=| zh^}BCbJZ{F3zPOdG`F>1b>X&`om^N9k%v1|eN{?K->yg!eF0k+wzrB8*m%enMOTEI z>w3_XccNAcvuA@W2N^8ws z8Z{qPFpY_|Dgl<>6L3|8RiS3+YU0h{dE!b1T@{9oyeb?MepN^`25ay{kcoq%{TQov z0w_mg72k@GtRmBKS%t%cQ@zcN&LUa&sFRKM$9ZD;#GIZUkMgWH*dD5AHt&?fyQpnjG5RdP%&-U|3q^iC>rL=wcA5RpM#ap-ah4>` z_Wqzd?F|P3q*j(~4YU1Gw=LXrM8}o)T zE+3r0y4#s{cfq-xf%HCUA4AJuD?YBC(PvGpoqXUkI*$uX2yjG?9|D+7oMBj%JYrh7 zI$pQj=W#_Wi!op5I$j7~ImXF87v6v0=o#FU+ zanRY*`=vV_k`^|O(|oUj0t@9L=jZW{gQ0!ofQ_FJkuKAPQ(O6VXTLwystgBPJu#QA z*?pwLt~H;(cE5Mf>F0y#S`QQ3w6#=ds)=>Ty3!b_q@353Te%V#HsW1P3B#>CJkkWZo=+zGo7s9m6R}F5>B8M^*avz+hFKZg-w9Y%&2~*b zhs`G+(kdT@c3Op6>q%;rutRDI*6k$LCF~Guvj{|vEj^HLC9WaR)_QC=65#Z1}1B3PFXQVU!JiIsWUJ59l@=1NCH7jX|ic|J8Ri(bY!=Y+0E$dlKK_) zQI>tgw|$Xju}z9Y<5z}@ff{_;bM}xtx8=q6?b#Om zs9KTI_H;SR3f|>C-oYBq@Y{LUZ<^k^#F?hC<2r&&aVzQu|RG~?zp?L zt>tZl->GUdQ;x$xXW0oU%4Iqj4Vmi%x(tfyS$fk%r;Gg~_>rHdAFwjjp*R1V$|eH)HKi^t7=wXiB`IL&RQkz3+ka+*u+1Zar?pEBM33pdSeb$Pq(oVTkP?M^c=bUMzR zT73v5&-##<1zrR;Nfm1Y4IbV-J{GixeC>{(d?;=|YMf#>xY`>|L~&NWvfb(Raj@6p zSWTFvX4TDRGk!PL+7gaBU3(g2_=gzV)waZt>g-|bo4!gsv|XeFN;qx|ml2#mEFo}B zu}RE#P}ycTiSBY@oAunxNUTpdD-rRj@HZwNg`gxg=mBH#v`7U81Ti75A2 zg@7`09s5$3Rd6ri#xQ4HR>Pd(Qs%3J{k>x7Ru0=*yh^5S*A&{8n7Vk3smucH6|XU@r%0WtT)Zao#}8a8(PQ$jkD>vgAt43ZA7bZE@sv|8;+4vv7>nPnlWT*7DW(3 z_zENsNBKaWro|2BGHSq3ydr0C{9KK}4KZH@bM<{KQ!YdK(PqkGr915R;f+GQ-Ofam z4|Y+_thK7ZFpS#Mg;S_rL~TL$V48I{@tkd^JC$3r^=`MfMsisZh-{xxjc-;_tWXOm zDD2AGNk;)Dz8Z;(4&qX=P2-06WF{6&<))m<2BGR$jjW-1Xu5u6l?-ag!edZ6Cu)$W ztQCV>PHeb#>+XthC+b!pFlGFBRMZOQPt-Qg;JR5jFl8GuDp`|0#S+g-B^q)lTa(U+ zT60=%OlRwz*?2IE8ng1)lW|=+fX?4$T zVgpWmSBJ$F53^+Ihta4JHCPd*;P4t@ipGjE1;{a`2%a`%Lr&CK)RaZN4cj~xW#8`p zs}*eL>if``;@BLSMb%kOeNCLZgHg$txWOSS4WA`5c(n1X|3b}NHxHK8Pi)h*5Lhj4 zy0Yy~f0EM@`x+e6TQ0K}m`%s~RlFRON>)4L;r^&M*db>es=8oBP$;X=nHuND&a`)s zXOrH}z_N`+j}d_s2&(?0MY!m7BE-SHyFVUhljFV3VZYjjGIAYz$EOv?a0j!BF-Eye zp+$N>gdQWpb!Wf;Ey6{w6H#_(g@7`09ec;86}%lx!x*WA6|$!3S){b6RU`5FB#3Kg zm7rKL!IM0?pOr?65erOHXdbV8XT@m$~5FblxcZ33Dm`*X2PQB(b!ru3kO$`hAxpK z7gtfuvL3<|qKH4eLfz_5WF{9DWqSS=8R8~+tk$()MJ!b5xtV-D6APkBVH%F= z%uCUEbh<1lFU`h^s^&X;&@c$L6DCbFp+wG1EQl&IN0A-!*MwDBwdP${Qf)R?Ml~Fb zNS;O>vv8*{n26ia@CAh*FT`|SoCSt^qs}-lSmN5lfAi4_;%erYVvwA{_5}r^Q`{2| z_p*cYcW(4Hx;^Yv4Ytkhc_YEUXzE#nmv;`FxBz0W-2 z;YedBh84P`v;hq64DGz`AyXGj8%lgt`~TnEyDhhoBkRKbF#C2pOr31sO}Cpp+q>O8 z`Yo^C5pz>PQ6-sfisT|G)0(IMzf2TRiDLm^iCz)YYgw#Bo{&f+5|K=Y=@n8p$yF1p2CFr>eJAnMH$koKrN~i&Z@G&`w5E!WoIfVG! z%?rf&op`W=$P3aS=Pv9J@=5jq9|v*>@oT6g>-3EcIEWSk=ApF!4O)MUU>TV3tNLrw zuL3CL770h(uj;RZEGAqVaKzjWp@(ORyG3q0Ks@Oi2Z#^19Uwm7S33a*{VKs3r%B^8 zYzhX%a24>Yz?JP+gRq0hU0)e-D2&{N9Y8KUW*n`A8bIiJ%Q#XOatN{KD-)hjDp>U@Ogl@PR z2Nh@C6S1pzcshcRT#X3T2cR-UCWONxYp6Vg86pFrCvr3+PqU1Oeh1+smvLaY<1C~d zTozI(d6aUd;Hs;Kc@%KNJgSb&Lz*qP?o1ln7_DK!HIU%3I-f0uz;QT6VWuBG^~_lQ z1YtonrgJ2Xrr74e|875F^ITu+!N0L7^Z}7G{@de}>L+tn_9V27rcWbWcl-8a#Ef`H zbe(V>)m`HHmJU&Qn%o~^l{kFOR3P$(SS1d_Om7(Fn9k9JhL|yZSJCv zuMb9TSU1C>TrK{vsKg`$trF%bHYjgQkF3RQaB9`)gj?R0B&Ur z95`a2A*4tlFqo-WMI;~w5J{;5SX`kh&nt*tJO+c1r4~(Z3CCbCjKDoq;t>IJI$plj z8+0#E=#*m7lL1^y{iVfP_H)1qdP_Yba}q+Q>@79JodR$?%WXiF%^qw`cUtex9Y>}W_|id{Q89f{pQBsvmiJB}F* z=}T$Xj!#BnHxP@AgxQWeMnn2i+O;R%k=PAPvLj)(C)Cl9zLa*ae^;f?M)r?{*09`7 zi{-j-r^QMPf{}@HUsud`!B45C{S4(bbrWztRZ1iW?~dr?uZL45tRrpGe3lbasp|@2 zl)sj#yny8XK`Itl!CUAD;;Bh@5Dij_4(p_oT~c5_Hq9&if%TL{7pl6~Mnr4Uj@z`NOVx=(GO z6uQZ~4j(E--EP}&3+(LQC3#J>ND(4BxXru&lIGk6OQFP#QH?X3`(ztK%pX(2A-k66 zE^MQ|JD>v2M%|%AnT+zzBwoXT>TGqbp_CIGO-$;FlZshHa11dg6Y9=G+y0Fh_Ee(Q5gkQb zIvk+FUam={&eguS2~R4?jv+D+pXYYAJyq|P6EtG#7^vKBiV3dP&qQJ%G8kDZBfAKM zj#_AajP=Wrbs#jhPz+SfVju>p#-*c{k;LsHDq$MOYEYQSD5wN$vYMrgYedaz{yEk} z#2>PW6;ohr$Zt+|EBq}^&&q09je{9232~8IraKI1c%m3YNECz?sh=#^7;-)nwph^1 z%IXy_hq(1UhU79)Lfm{ajcw_K@kv2^pQANme2!J)>@xD%@d`eaJ<|Q}qO!{*M8qm1 z75;IgN`XkRf^fE6DUcylQnC;pS2R)VhTW*@BllN9RetJy ztNUxD0eM!v^&y+6-y@C4Yla%B-%TT!wm^x0W);{8!$pw3%P0lp!$go>q~AQSJ{uI4 zjH0iF9BCU-xd>kSGu4xnk8fnd8t%w{>kL@oGYRoDEFyuMU(CB3FNWV2 zqI@kfxxjqbepk5$ke?GAk8&3bjh; z3E;ze0#J^g09K=?XtRi(s_)ikXmdQ=Lg&>;{hp~tW%|$YLmk5M(Vnl&5pes;EJqqu zW;v>uGTkFC89EwlB1Cs#eTiI%7^Ag;d4@ovp%#MI;`9|%iz%(hatq2<RFOKfhBp#&l#>FN0t>i+5aO$34C$1>s{7Un)8R=o0L3IGp{<40bO3b%IF4Q~ zkTQ^mK_jT;8fOT195#ZyGJYT8V-&P0mdgi17R$$?jj$YwGzUy@ut|heb-*&DpOFx! z**;ePYTYNteSN%Tbx?$Dcm5wzVj4a|q;?J+VrCq?Nv6l|PsQ}Hcw_i zGLOyd?#?`!hPn0{j}uLro7WAUjJ*CG|G2s2{4JKlxzL)xpR{jMmv%ypygw9M&0@9Z zW14fBguR~MylXz0XQ5x1$`}GscA3kaH}}i+tP|-36Z# zzru4>_%@ZQp7Rq83#IG&)`o$4qqu?!iM#ni^2h8QZ3=1Jnt2QYJPHnrY`P8e5A(=aBq@I?>-|?i@biPD{ zZfC5I!(bQz-FLYsw>F#Z<-_7ehFk&HNKzdscK}0@k>&Jz|DSz*Ja82>97hOE}bp*J6eHquoXtmgMSJqPWynz zA<%4?iL*S8z|K;?i>YRsjMK88`twyhm7bEW6uLHgn(*V7IP!VQ6SH+hrMR`amOIs$ zj6OV1yUl8JwVWF9Z>QMsXERcM2<;JszoI98O>O10w05C_a-%MzHG*)~Q2^@M??13- zi)fD^e2KR0iWx84vw=byH+5Hdf*&^B_2w$S@V{4d}(HcQGuVC zk05-Bw(YWJ<+FMjtrH7pmzaB5;cm@#=@Dz!5^dU5vR+oWQ7TWC2xnI;ds*QEh0I=- z;IZXhOB88Wc&*-Rn@}C4?r8XjkGGV$Q%RM<^>&|E`7y+$%NdIUIE$yp-PQg*48$+N6qPwEb^wj_^!o%?_xW(5$zrrhvKWLG|5U_O8b`OvoOu zRmY_3f*(*;p`P+6f?uc%;>pWr)Y2VAXsTssE;r2{+Y{P6mjEUosNzzuX@iF#(YF}K zsC#5|Ttw7}OPkm0-G1B79&exSo5jA}&i3nVa8r`cEZ_}17^ps-QQ26NM+&rQ4qH&g zre};5oDgz0NO58aA>jobftWPR$~cHLTfO;}Uo)f02Cb<3-y3%)>y0?25d@2A%}z#? z8&w?d2u$O&)gL&I#bd+T3AaYZ@dG25%m^aI^kr{mkJk@@$9>9?yZvDHj$gJPqGVpM zAMCB?a#h9pH?YlIj@<1Bv(x*s{SYPdg8gv(!vnFNu-+cf+rs625kqfp0gs7y1Z}$p zWOi>})_|g9Mi4315BBEIc>Q2MYtyC3%F$B^cQvzFDQBx6aO~C;MtgZevMN)n?2BJc-L({?~YE zq#NX6x)NUat`0RccH6hL!3+re>~@>hh|X^IVM8$j0D6kiDGxi+l; z-ZNZw>S~GMWf){7XLD3l26?V5W+N(rot$Z`0a;MfkE@rNnu7C%l!ka703nUM>D{hD z#NOBDItwn2&+nr!T^kPgs-3xDzejVdf!De`o0(&us1VqwlaG9TL|}uWYF)9w0-oOS z_D{fOkE{}IQ#rQGwZKM}8>pHqAXwAA3wWmb`uNL)n#?SYcOXaf?) z&>c5N&;bx&!A4y(-#>3!*WWoVClqrI&iE_5y1)x-WvGh5v? zJ6y?|-7eed*H@d_cK>QJu?`(xa=*cLFAs~mb~T+VsIxN#Wl?$8G!Lt%X8!&A$1_aa z?RQ-FTRouDL542G-z|2V*?#^7<$)KkP{ew--)z^LR~HvO#hV?jR^3nmZOn^L2=1{9 zH=SN%6NYx0e!rRV4%*pkJneUwZSTxZUbCM)yjtwGvsdTuI?i@`i1W00HL$E`zclw- z3{R{YXhSS8>GPQmOrDF!*|OQJVPd$K`6{#B{>%Dl2LVoCpqLGk@$at_ zm-E#85rVE&U>sL@BpAXKUd)6bD|0qcROQ)?5UT3@MgrM5oC(_t(UPC}?FQ+)5yk32 z4RcGVx%EBJJ{Ti~5QPCl7~^qV5N`s!06W5%66^#X!X8>i2Jt%U_AHnX!9dQ#$3;i2 zkoxE{hSSLzeANAHxoi39D}P?Lfa$Ci!jWuPu1K?3J-D7M5MStd5tGhrzxdWRyT!w* zpdDuXMQJ;lPv=kDZL@oRyj?Fdsqulc?fPkxCm76w=f_gPbh}c)s9m{W)G8%dYO&!P zSri&%LeTN`PH1Ee%$uR15nd<}H~G-8&=7QWt|fu2VxA4j5poCtxXM&$i2vFNJHS;W zN(ez7nac@TWNpqWq?BVbE+PJcNy-rM>LBnX6dlKj_{Stt;XSge`~-$19jWMdC3u4K zUca#-ai_s+niWEC@W@8s5$PW50jh7Ge#Zl9^96$a|G1&PTk!|6!R8sudBA=hg1wsU zcrLu2f5q;f4B5cAmzEfWP-_u9lx3lUJWk37&Ji!w_}m4+_(?j+SPa`WK15 z;KiR5;78&O^mA>FxX}g${3zWN@T0U-)*!@B_1Y)YmG#KHj>haS>A82*wJlcC>5#Xbl;l3&-5$Y?M znhUAl`tE7e&I6J^gMo*(u)WB{!CTjkqL4w%E(C^{Bt9H**w90vhJ;SV7#3V+KJ;BQ z$r@36s7HhS6P)Kl9T~Er&_Ow}h0wY*kWSL?yE|qc!WyDpnRyDSrWTbqE?{GoxWvpM zkM#Nz2g(`ADBuJXacSVh6!#~m=y;P8X!Y^rGU683iTe@v_fAX^Rh3Rm5k;y_OwkWM zUfSnSEmA3DwU>+f@$#T1>c=ZkMg4d=E*&pQCq9q(?2)iX{PRfIBYtWm>=Bj1PMkH9Mm^flRHuEt8x*Hk(I% z#4(3adS90t<;nGi`FqaQ0$o8xp|l+iL*H&&R8HErcX@=UC2nBszhsi)0!gaD05QL_ zf`cPyzQG|9h71jqAY_Po?cQ{VziM2b1hDg3WWfnnSI}{ymRcGiMIL(zgnU_Wq0HkG ze%RX5&aJydiR+g@8`6N%X8Ga6xG7cOiknh7vdQc8$zSf7a6bQ#PfddgQ2jFM99CqO6@^d54FF>9Hq>(vFH0 zecN5l!u*$i_9pG9s?mltAkQ8LosT%X97>2f?Zbhf1r!YeCDcXn)q!A(P%I|NaAt9_ zSom8CJHcUvpp=*4>V`qWue*UR5hbbKS`NJHQ>RvXaC;gnAETfhYVcZD#^B?#tq&U1TF_GTVn>Lkx(sZlQr8KYJ6cbyAL) zb~jvX02&g`8V#K$DBz!uxIEWV{DKQF>VI~B*$v*6oXopO+@%prgp?F0HV`y#D4ky? z@6E%vZdjZTmgsQ@Va#dzI6XnIt4)t)-p}Uk9+y|m*+1_EduuA9ais%NF7%mQ0dyJ< z%&CKaac(pjLgka5^`r={C+KhkK5w96wiMOT4{U<3`g1vfq>lWC=8gJKzkjCtmisGJ zhQ%^wrG9xSOj#vMeGEe>@!9AN0yZZ;14 znRc<6dgM#%0+Shm<<1(5g#KBTqSw~lUas|-=DCUbOek!uat&cE3Nc*E9wK*DP{{<< z=_D)5$oqeaoK>jkc=?zVNp32U5A8jCLNWRuAbI2r$Ow{~+TZ^}C3nwN)th^XrA1Ek zjG*tbH;~8ib0v}o@{e_uJU#DH_D1mOB_HiXttYuDkN!V&j73hzm0Np>p+ye-y)4nl ziLsX@8aV{_vPAt;zSTLZqux(-C(E(8pd_Y>83qScU?Z%W3){l28&BRjg-<_>uy5wI z0qRIEUOL{qmK!eggK_f%&n>HrXa4G~dVehY(JI%Qjzh7J=`9ro zkFr%$6n0^S@9L?i(FBW<8EvKz6fAXNVNG?}Lv_Xv{DwxboOJh0w6!gp0M8-emID|d z;erp5@T+wv2>8H5=)JPu3G5zh4sxqx&;W7^HiaBRsHA&i;5j7R{)&j8Nx0xcB>Wyr z5b%MA(0g5$!0y53Ah)_~0J#M#k@rVK4#|EUgi9iIyQbsTL+Zj=NX^ZULu}8KK1}G4 zF=`yo@ZP|O19CWiHF-^aG=vtL=Ip^?8ZAw)Imm&HA(tiW1Nh`;iNc(-RqS;qat~D9 zzQdA$Fo@!n><_9wFyR^m>L024D+Sw6H-L(k+&|zQC_WP0ksb!L$tU3@3w=tX%n${0 zN1?FTuEpdFMDZyL6iO8YN0uj0C5nJR<(Q;Eq07mZT_yl5X2Niilvxp1tL_*K7PFOz zJZWg#pxUyTiAoHZk;E#tu*w>#_m8Q5eqdq%~(THcCVtH%~$NR z&07Gf=Z`ii%yTPPBe~D5&=?mt<)%{fLKurZ>jjn$Z7z5Y3AecN z00|d-hy<;+?Rw`40zPmGJw{OQHJ1p17eqJ-kX`=?)rc`8Mv?TJ6+7!r(VpwcqcVHkSgeB znG8T-FR`bNF!KnMn7Bgk#CAXeUBvvTi+gkfK*Q)LL>ok>fdsnxr9w~bI2=AR<+%YN zdi5fVaR_Go3b~d6L_Z4@wQJ>GwZ~v^897R=mAMB`seuw&wp!x=LLR>?RQ39Q6jXw> z{=iEiOMRywg+j36*QBY=`iz1~vKCs5h*2C~(~yb;lG@a$pmP)o!OGEA)c5`y53=7#c! zUbu!+oB~&}>GNiE!IUER-N z0lQMDX(gH>SV?vrR2X`J4)GsrAe_0dM&wunckefa+=U%LE}w#kqm@tt2;B#%;z(V{ zA;jly79fGzgB?VknHj?1n)vU)X+w*2pz{V?f^P?Mh->??tOQ;ga1gC^CL)E_0yJp- zF@p6|!msMDNxur9lwTzrnkIc&d6QZ0p!wS#?eZs0fer%j3ad+hY)+d zGJ)EI9Ymh#S6Rm{>=1ItTPFB+Acqj!?lOVb1{_3dxyuw<3(%m&c#Fq;(!UNsWg-;r zG=b1{t8q}S`A1SG@tNUfx4rY~Zp;F89FnEjv zru`BUDexExT6gQLg3B+}Bk$v2>nliwo2d_`8HTZJ7hO-Mf#T@gRdF|u+UQ)M7&^Hc z4j_`BqbS6SwILMZa}0&`m~8-u_1z$e*ohb=K~v@LgGhSs9!6q?Oc73mKL{dmC&th& zJ-C(ea^P^FhL9qKz+k3g#gTv*KqRFKU~z@2JQN^$@fZw3mRdBuB^-mnFaq~biAMz2 z@&c?MTi@zw|K$mtQmo~v#KH}8JqMhixAvzJ3kBa!D3+RGPoO_BW1oQ9 zFD)0<#MOdTM^7Sbt>iZt*_N;H-N?2QgR7AWG)`n&iNP?UXWw!>I(sF<+Jha%j)wH5 z*tMh6k=PAHq9b9pZV3rOxC8gqdtX`Mo1z8kSIy}JsVP(f0DAp3s3eVpxg z(`%e9*T$X+JxG8HBV`ltp;H9-Raln5Z`X}kSBzAX6e(8L?6KKAHcA-eW7E3wfK%w{ zp+Ihs>;nfXh42mc?Q^(rWpdWM z1L17}Jpc1SplPj+!a5OQC z-i{bU%p!tgh&h>1ca}a{a-^trL`M;q4hK{`6LYM!anL6B@^wu}+JoG;hAcDe{j zVZNEhwnl`(N{)O#r8Q&xlvR!FGVXDb zgr)<$S{lbCp{HHj+|TByPJgq%4{yYkcTpQ$vYj2^OK4R_?fb*4?l=Ghs=c)FK{ z$S>wqjTgi33xQC%aDibxD2-~zQ}yueC&W2lE|ngtgdCXJf?PwexRK z0GEm#+K!r&K7s55VP&ReO7E~iZQ0- zO(l;GrY1**B)DKp!ufp3uZA&NzJ{)+aSS(`e`&#|geX~D9o8#dY zIkyWY_IzcIfZJDQInt;y%TdLY=^mxY(9vKMA-W6eOXNbt7_AM= zGXxq9wGg}(r>~$|Old`yTTr$lM?mc!}8iqx64yhVh}=z6-80t>VOA;ee7 z7}6<$RrjqEro)qF0E$UWLR$-~=>X~ka2&l}AY~vAgGNxxHO>(3IBW!YW&A$G$0%r1 zESC?2ES8T&8(}#VX%3j+V3P=`>VRcPKO-Sdvwf`o)v`v8`}%mx>YxbQ?)*Qb#58<_ zNbMXt#LPH&lT44_pNi>Y@y3`I^V6XAqOd)3WFDK@-CgsrT|aFWs|U=r*LY_LPYk_o z=mh5V@A${fCFgIk9L|N-1gI{0rKd&RzCRRO&0@9Z$o}+AvUW6jx9o zad%iq{+PX^O(Bh2Gmk-lC$eFY%^r{QVL$uB;c>danE6Zth6W1(d|2`b)+xb|9+aW>7AJ!#(e5lYt6vTex=SOy2i!9Rv0-C{wW^kqkX{R5NI~| zG1c1LM1Btvrz}r-NL4*TSxQuj%QJX+*ktXU!Y_Y#o_71T*u9mr1pe*R0{(1_=7-Q8 zLHH}Y5KCjP+o;C={Q@)3?QGZj(%Q8F$`xHkYXsrEo_+j*JzGS31mR1xeRM^fLSiQt z&n_AAvW7cK^)t_Kmp{;Oi)f#?XYJZGFWa+$k~S|((5@r&(zHhCIUGs(qiMh67~*{2 zs3mI7ymGVC$De9v(Q3LQ2wmd(jxB#zM(f1F*~M*M)?7y^7+0cAyU@_f3TM|Js?P3C zUiYK%!^c}%E2_~r7}oX!^2ZRDhC3DqbVBHdiC;#16!C52wq958Bm3051;^TY5$V&5 zZoF2tp%rP`c3icY{xeF|>WTJ%+BD62tM1V1h1`Pb8NKY8<8hdfJzlGhN!JBG;2Lo~ z&&8QE11LqMD{^JT+1DtY1E-*4 z?b^XM0taI#!lVm}3N#?SI!a=+i0G)|Qc71Fd@5T+t#Zxxi$8bLTOv$g+$JzGS31mR1xeeB~JWwb^R&g==e<dCv z8*=vKagGR9bU_CrCJnPP4kFD~9}JXVKBGP-B{}I7oOBtbM&S^8DFRQkxRlv}53K;~G% z%NkIW%nKTjeJY_`Rk8lHPat#~7Uk%vfV`U7tZhN7A8;6V)VHi_Xv!WMN7#NJ?sURt z(i}xtVK~;d+hOeP%qH}*Vwrfp+B~9y*c){tJ5>8*Px%NITw8`rc>nqFU%&kPv1xWs zx6OywB#K{ELcHyvEZI?epeoHAkTzJ|dtlw0322fWQRDLyKBRn-5=eOjJ=i69z-U-#;qPfBgtj6th<`-clBNduAhrhSe@X(sj2)Lgo; z3NndeO!yEeVKY4Kq_&5T(p)bYw*-5W@1N_mKt>yGjRD4qP0ctx)c>AYB^{_^LgxV82ImtTop9 zC!3jLAH)#Ycr^1h7>H*258axb3zsGXMb-LE!4p}*k+sJKwq8Q`BTK^ETW^kpp^~#M zJ$*6Q&~tG_>Q~urfmqK1B#lJ??E#U%Xaf?)(2X`n&@>2zP~l+@Vi(97E`?g+z)(sE z*mt=ZPyt+@A*)sGLzN|Y^|V?p{%)7guc$U+qRR6{^QqmO(U#B-2DWTh5Bo38Y<1V{ zaCvohyKJXlU!j)m{?+6vfcah1JglCY`SxQaUW7>E^5Q`0~>Gb-5jifhJ%@nuL_h+y1Xx(A9 zy)#!ooBizJ)nd1uy}EeUalG3@fTzu?q3F5&(%f%xCC8_ZnYiw%dPMKkcB}9aK$MQFGeSQ7rH@hbA8uc*roX)j4fm;igyjpkIEYRr`?N z2*aRCAG%$sKB!%}KB!f(K6Im`K4cJ@r3kOVkOpd}BNmuWG2!H>de_LcH5stIfwctR z7)UjGi$=QEz6&Q-1%w;bOyB^x6t->i7`}*0xk#}a8>))>7UH4!@YjhuI_l^1IIi*- zDugQ>vxguna}!Zi<;$87s_KkP0@*m63EKwBPmFzN^) z3Im2P#v`L3-UN67c1(38*anZn^QY~$**!nru9q3q zbYxS?rEXWsCAAyo($l-HLX;s9>5uCibcKsDnh;Z|CaL9sZ)8zukO@Jjb04A6m6$t2 zLnFMDA#U=aq16y{b(SK5tYV%G$q{l00l3PHUx@$O2|K`5BuWTD9{J*H$RcaAJt3tW zn-K}|7fkPkh}TBZAza5MuM#+`6FfdnI(*PQyn;YxLKB?#dW;oYI}Kjb3=(?7#%cr? z=TyPLe7||d3LU}zS2xsmVXtO8o(r!JUk@Ivzw*YDD?Z8q7{B3W2X*e844+32xPbjg zumpfiS|cE#=ZE+)V^_C9;X<&1@BtEF4Oo$U|uH1Cgs7&c};|IUK7qt z%Cjx6i&HJH<9P*GrPJ}4baRZKz%qC5IoKR0#-#z8pX*%+9F#FJ+t>^k2ymjp;HW|e1LSW!Y;=^%>4LuZq zNa$4LVZkNRl@jhEza%PF|WKPQS}&)cRNn3Ra{3pF-2TN zJ2A!klT$>|xD(6h$00B60Z^va60+LMMg4erP!sjz6{wn~!X6prBVp$YknOb>U=5&S^s2}wS#2iNH`B-k0C)XS1?>ScsbgvQh7k4M>ct#KA6iYEJynmO&V%D z%`6t_%>lKVX38Yf$th1JB=n(e|Av!3J$1^aR1~GP+=cN;l|5echL1&AJHv9qp<#OL z0iU#^B1PXm)A3Ax*em<(DcW~S_`hnjAq~i*!9nLEjuwX!qE7oze1|Txk%WNAq6E}M z@yY&R3uw`I7=jFE78i>}x4Yn-47!=&Aks96;xc%hz?LSY_|T2E;CZo2&9AYgz-dND zeK;cY2i-vWMpe|hC;jLxyTpyEq>vmTYkc?H^&>wLIK6hXiy$w+ZFG?Mf<+DA2My{p zbaFdJJ_s8bcp=yj1LF8vXfVmo-sEf@ej}#cO&S}3)>6*84n`m-;Gd7U0@uQo9ByzU zjsNHMvS{$G%$*J7xE!H&QFVq|a`gCwBB$OkB$?>KN|4SGuh|P9cLcj! zt3CRnz0?W9hvJv#2igz62k!_;b7k#|?h+Mb$r0&* z9~{+qcy}}|>@KjbkoXf<;+_tCYPBYcc<_y{HhdWAWzw;NnNABoa3h#YsbCcUxSjB0 z-t2UTM73E=g#WL5J98{nOo01?PDQBb^0?C=m65F%WR|_J=nTqACTzzflL@|W4D9^X zRe$y*FMEIR^pcNu|HYHsJg+l2CH|Ntm2)1PvJLB+xAUaGKtgJSC-5Z3eu-Vai$Ws+ zttc{)=5JoFbLrG3)5!5>J~1~E$(Uq*d@-6#iRaToqjtRB@?+;(nX=y@ds%@Zxr}m+ zxz7z5k7HST%)6A+i&>rHNpyyyoPaBk$<3TtAn(dXy+|>gMG`E>>&)a=POLLOZ&JNg zR`rmQGiJvj-mhydZFWcBa0DuRps$*^uoi1I>pgDd&LiVf9BnEQGFeLG2Z9iFV5dzV z1;o+9Zy)Zb->@6?38$X$@vQlP3f}l{kE7L}e!uSC$MqWB)ii1c8{s%gckb$vPiEn4 z3QDnWTPi9&Z`6sb=_fvbioHR8i{5SV4lV9l1Xk;3t4R>}4WVD+!J9HG2vmh-M| zwBdzWVbr21JSo(~))SQT!kgFG?|L{25{XI4B!uN1gi*b+L@lCs(9+(LWjr`1o z7h@pH^&y2peGX%|1PhDZbnlbzzNmw-*Aeb_^Vy2qD=?oys=CWStMz`mk3dnu`NQI_ zT}|g6hW;D;C(h?y`<%W*^VMv-T_2_gAA$I)$j@;iTlHw)6KZlsIp*1N@gMl9{qqLH zSG*}g&yKhjDL&KlCI07q`+ZLjP6R%xqp~RgE(Mza(8g(ot7SV86AS}OL&F79P1Hgt zVU#JQ;Iu^!!z6I^wi!g@8fXv*SF$<-BrEUiFANzp)gWkZlQ`QS(pC>(j5Y`-Y!j9{ z1k#(YfpopjV&&PeW$JU3Pn<8QJnI~fsn8QJ?EJ_?yTK5Ez*8VRgNtVN0Ge~rRoq(M z-+uMJ&>8&j7rMY0X<>fvZ4it}8*~S{^Z9xX%{$J-fGF!6_^dGanhq$a?>V7HzMY^1 z3?bp+OVXQ<2~me(9Bu=+w9qMB-Auu{Gc$U*aj2OaGvNK=;b{wZiuZ=-4a;sGy~G=F zus@TQ`!I)tw8{<7r_;+Fwms(4Z|a4jvx}m}SG(J%$4%e*GTQp!lE&o(oAmjlsIf!( z{7ki8yn#5&#R@k~=8H}fiz_@Bu*T(+MYjOh?t-eICBwPWS@$y7htJLD*Uj|is<}oQ zkSN^j!;P_)gEHe7@Y)i#5N|G;o6F|&q?syQn%NLLr5J%*E6@=lqKEmefUs#REdiNg-uM zW20ki2pJt4fdYM5Gc?$%CoWB9KSOuLenPAb=^2dKe*K8aBJtwf#kuk?LoDza6MD67 zz2o~zlg6G~67B8B>ZV^QbETV~zcz0(Cm+01YM=y1`?%RZH`{iDDR8}=J+yu50_(^G z8yDDgo^{LBEI{4qX|z}BX}}!BJ!l?kRg@)RtU;bsAssnG7iB5M zfaam*#pZ4Mu%Oq1X!Il*v7qw^kY*O`3aP7M^a3^yIo}ui($4>$;=X{6p%X^yz~>R+ zib1$nIRCqQw{rS5k6Nr@9$Dgbxp-XcL2g)e7IYo~oT5kBp~dbiz1&Whj)$rEO$@0a ziMK z|4brAh>~ultnJ}zCItzcD?n z47AT;g107zA|Pk~GBFWx*`h&o*|XK`rrRn{&7};KB`hGb3{=BqA-$A~`xKuB(4bAG z0t`5*GY`@rPO)*`=L#~w49X-20%s1KL7HOVYMZOr9?~FAa?!&Ns z;SACwzZ!awTMd|p_G&H_oaCSf%|m@L@AZ&GtO4`TzL{G#k;E)u^N?TSP+VRX%|PZM zzS!ZENw+3QvaA8~(7t_~ea9>0d8j3DCi?koGn+5=&pDjG6~G34YM`J-WINktER+nO zL7PM(h!@}Sn&#jDWGI6$r2vC(5XhiQ3Vt?28grOI1!hpDi1!$Wp|TKO zqD&?V!wfHu4WL1r6y1Oic8`HHh*P3n+|H2q9%fg=8Kg;WHS{2}8qlCk@v0wT&I)fV z;3D+202>VNHF^dvLXY4(YeB9lX!tB52o2IPI}Sp=#PL8#X{2x{N?x&p|6Ce3T%~VwbP}cRFciPgv~a=q21Lk09MR*93R7 zd+Ld-X^zi)gc|0N<=b!T6^*=C>yWFF$nEvr3OFE)4) ziOinuC@AP+0>eEk@RzA5NBJG{Z0%3ZN&C(HV!PWn>wDT!!=ipzh)BCUb-9f*J0{$$ zo@BX{1>?nKHmCCfZ8D`h<6gw=v9eAKHmf3;+l4m8k})>%n`U%ipiz~4S>0z7%O8Vp z#2Cb7+@f(9Z<{G+06}hNMw=c-I-^@7lr#P5B+xvogTw7IrM>FMXlW-$n^u#~?P8yD z(U=W4&* z9EOZ;QAa2z+IC5yO(8LuZGqwlx{v^`hzm$4_!=S^;hE4Ejn`h5)cO!7Xn&@4R`Ue~ zAGSE6d7XLmEZWdWS3nl0@9N0*4YSDdr7!Q$@KD}5+{zG4ju+h)H-L70IvdYgXIujc zH>)7I!-4GzlBSslW1q13JNC?TeVu zL4VrHjVALH2s?{0HxxZ4nr6v`_BkSDg6XdMdgv_ZZJq-9cG>omeHa0rnhwckY_DGR zpjo;z@WV`N%w_6e$JZ@pa|}+y=W*W+i#+eDdq_cN5rEC);WmI8?ah9(jMwskCb%LJ zRWQOMhNz7Gdv{8qs$DtJI+CVUIYAb%yS$w*qiLlHCRZ-+&puqE92Q=Pyd;HY#NK|3 zJVKLVLSBnJLXhZpCDK)aNKTVHQsB^OH{`hA`%UsloqfnV{lR_tHec`xta%JiUWDN) ztXT|m2FD!I$Yvfs2!p3n_|5+8_5FH#zpU%3Ds;um6@l%G+qrJU^!@e8qy=piTfQqFdV_=VW!u{1Pgmov?1 z%UJF=eNqv>Va3_=$!r6Un03)ckkL&_rQvq@?!(*o%aSPD>7YaMc`3qLrk8Bgh3YHB z`$A0DCNqq=Ws4D`WCZK$dbR(Jbw|pYrqkO`zyEpDgbIME61>x!U(`%EKGq1sm;@5L zA2}Sq4{)1QtL`3aV*5WL43@vW6E7_VM+D1*#8MuH8lp5LSnBj^!alo7L_*5yTNC&n_uhl z#47Eo^A`$c{V7~LXm+TEHD|l2Xah{5Dj#ZJ~=c?l9qPS!|ayWUUqy_%3xFl!dxAwt!w0%^SR+&>7o{I_*x6#$-vem6C%Vjqhst%WpXsE(lE+SRH zEgPEav*kkL+=UbOr2GV+xkgELcbPJ1R*U4R$Z(SsS6%(Gd=jAsDFUL7nAB@hj7Xal z8B+i(n@D*JQ41`eN>>joU%|3`S2mfxFjsaHQ*$f3g;h!`zm=?zC0nJsvoC%nTO^I9 zFKdVx^nOYzg znPihd$&PGtRwa(YR?5qkD3LDla*dGUM((tqRESgNB3mp`T*3(!a>)5}RZgoS!Q2`L z#XaC6Af8J^4Ye=mOSgHM@OFiOa@p3;Z)+Yez#wj9OI4>ZsEu=~pk_VgB%3FvB;DS=V{HkL-@d>3Ea?xk@7;d3 z=nuCK-AFFtAbl{xHo{?coEySLoP=)s79j}S_$}0?e|xtAL4Omstg(Mbwn%!~ezfn& zW|POFN?&@-Zqr{<&E*n1i2*;HvMHUrDQwnX7|mr37nK};n_|np=9x>wzqpyLYkfzH zrtSO@saqYNzv(ZK=2M4Ck0uNp-h7to7%g$hlHc6*D=+}lCSM(zH5I*8^kU%{=&#-h z`^>*$Ca&K}E6qpHUy7@u4{33_zvReC;L@6)oIH<6H@55>a#H4WQ~xSje%ruBv22#B zE{m10mX}|%?xJO*xARjYU&N~AqTt$6ZZA1tAg zoFWDMcRj~|`9vo?LoFt+(d22h`?9#_W^Wm(9sJAn67~2d(S7^>h!=Rkq{|9Anby zfL~wJ5m0?uO?f2!BEP$^Sxfg=p~a0U8~A43nZ^u41_6kRBA#W>Ncywnz?-Xsd}cM&f`W8;n8+ zM@tmiA2LBu>WDJEaEm14&Ja<T?>_itBEkDI5}98P|EMhDybXP6uP3FEAD6%tyE zeCy|a;9EbF_i{-dibx)$v*~f;=MYK!%nq~fw7yANRM8!>iSzEVrMWn%w1`1cot&|6 zy&@;CA5qiq8I{gaM#x#Zzt2~*@fNTjEw=%ZN$Y)Un7_g)p|n9NF=@K55ox-wacL5I zQXI$h)O{t)!Z15k4q2ez!gO4Y877+N=s3|_8{_~;SZX7KR%!wZfuyjgjvE}1F$$`8 zj%hxm3B}-$3`3d_Rz%KbKifVxkL}}ayWPF&JQX&Cn)&zdv)jeD$;b28`!Cz|0R?R5 zPutz%Tg%f^(|(_~oBd+FvLa%clRA6tHra0Rx)6IbWO)Ah@n66E{IO~NY$hKsXvXU% zC;QXn^*zcPH;+%4LxN2wXS@AuznJ$RV13p+JW-{g+5Eqs7TcCc{`*e{@zn!WGL~(> zO)u7~IYCPlx9jcR{%PCdy4tQ43xON49FB?2c4OUcE>^RiM{P-r_BzXy%y;q!zOY#S z??$#RY$;HiiF6$H+#ZU+**)EHMlsa{r^k2b;Kdr%|J&JPs1Tktw`9ZjE4lZXWN^%I zKRH+Y^z5MSo-l@7T!CB4#dAkfkF88YkkLw(y~&xU=P=W_sWE(5 zRXa!gLW)KGDrKa8?bz1;G@KZ-HXyxZ>L&xL`$%g*{;h$q>_U0?`^9pJ1=P(R7SsLp zxtVr#8;3wNDzJ*x;x&xmQVnu7E^nXiKg{vtWRA-B&3-#u?02B0CZxh9k`z)KrKC!l z^aJUyn>#aPs5?xCN&Qpu)PI5|WTbh=SDJbKsQ#&23FRJ!^&bS$sB%4BtdkDt@2*$! z3_Xpgn5{_fl(UsYB>Oc_Owsvy4SEYHfG<{;v9&xRjzMNN66>@aPpvNQn;h>AjU4mW z2kWn!%*nz+kjJ%X^4X&KIh&@nQI$uPXJWat(fj3E1Vs}Fb(JJfuFCzbXDRSaPY-UR zT)(0gS3+|=wM+%@94HYKDZp)QrcQ~`nLee$OpN0q5n=kq^pd!$F^cWbLG?1E6jSL9Odk3fsO<`r`B*s z?WREm zbpU_A*I?nNv)*{w`Ekd)$8t-;0;8IA3JklzHdLSFri*qAB$mA7T}2+8p9Q~b?`KcT zeWSDB7Cz``zj$mpd)Lfo^Dpg(!xRf$)WpNj|3O-cs?`Z;0uAO~1L`!jJGflV_ALT* zi1!Dc7gsO)(VlttF1G_kdoBp-S3Bz8>GhmCj7?m^fk7J^)prU(IoJ+3U?H}UB+4*@ zy02YX9K4FlAaIz~7^s6+@!RPVCB*ukf zS*E}BP8Jklw>k9K55NvSV%V{vlfo_qwMm2pFz_x%*rTeW6BZ>(XFwk0Bk!J9vq$8> z=6HTsyAk`xE@^o?yHh~o@BQ?9whTQl`_z zV!_VL1A)*MNTL#<7JndHIAQ>XD;)p&8Wcv!8s?Nsl}>$Gs6%Jot8ZCF-oH=tUU zJXBednI5mMyW02LW(|2-?FZTYMnIZ79CpJN7+===N&iJbjrjv}19q)CxZ9`25`nYA zk00mXn*V;9Ef@C-?C=rP><;f|(o@Qd{S$5A(Qg|(rbcls9&KX~u4voPKoEZ-3wq!3 z54fP;en+VPh^H42>Cd(gPmhpJz#?x-!8?&txDZFvU-*C6X?(TVZD+4u_djruhOkfJ z;D~L$?|=!)klNtoQAUK9Cg9XUKKx|z-YrazQI+V7ifvt~uBAC%hX8z>6TRX)yE56iZZ8fOhF*vIu< zj|qP?OSp#qm)UkZd*)tJJiO^Y-P2(p^o;oWuK!9gfNC;f4JvBrQR0@suFi{+DfIL=`*VYBpq$mSNwv_ zX1m_J;t7DqoQ9%d`Y@j_7q{5=_S@2Dgka5niEany|CpS~pD4`je%dd$?E``Ez~4MI z_w8)|1b#Ud#*g>JJlSM}e%WAexoK%zoc=y+7Z^;~i(hY_)l7x{Z4kSizrAXE!VfRC36W4%Ae-o3P1HRIn1+ZFoGTq*x@Gv&EGi5 zM9lAc@;$&DjWs}L%f$56MGr!*MT1z#=SF^~#TL@yNP*X=`TX%l_uNmLUHf#m{@*P6 z|EA7zBZ3chQemhJ8246^fIJN;MlU#kO+=6|;Pe}1~&L%aN)?W4VGzRi|T7!Rb0 z<_=F1-Q)8^LxTiQ5@F!LeuBTY-*E;4T{OR+!9lEXYZR{N>CoKcA2iy?7h(ws$vgVk zh`QOlUoW2?;brxY%oMjn@uWSuDOe`WK+WVQ3@=3jA22M*^#K3V21{X(?ZNOPb1#0P zqYESliLrZiesT2%=)A@~8^5jLF7G-pvaX&+Z_rLwzgG0`L ze(L|k=MUG;pC4BD>;5M+a3DUymp);sakFXXn5*W$;!I@^4~(DM2MqZeoL8a2)A9Wq zm5N!-m+KwO__xk&_Mg#=@O)~Qzd%0g_s>vx|9iX(e{FA{9{vwzkG{37oc?#I(f-#@ z?GBTp`*#EP_o?NRHT|bwaj<0HtG)m53yc8?3Y<-Obw~W5^P$b|-?Q7>ZHv6Q`U3Bu z|B0z`g|(ah)BbC@SQ%`XCt!IvV*~dFdjtmkSN9~d`J0T+{K1EE%wHJ7U|2VNz~LHr z19H?qHDsEv&d<-zuMD)BkqkKO7Q?#TQXGI>lZuN>cuaV4FJRkXP@kVMI_D?yAL^y- zz=u0ltMdU2?mAO*zQ8+2zOcY*;OR-tX{#WN)-1NwH)xkkNy?)>?6=R+Z%?bhr~Y)+ zFkdcg2D&gmE~1XJ&iL37l5|gqckUMF{Lj0^H~#1SU5l$I+6QxtM@O@i^SoOhR$tl~ z{GIxn{=MUqSL~M8_v)TW@4T@+4`;hwKQ`;zuk9RG>AQH?3*L(-$e$>6(aaYJqr2-W z>KEdv|Aqb{M}p8v|Hy$Uq8RXnkB^J*;K2W;x|1d()fGxBBH}=Rsn}Ei+5q|%)FA>M z1BLy&Y}DDk8cY|H*MONXX9$FlYVP1Lm2Qbqj5!+LIIFP3|CxX3exvDGeeHhMs?+)Q z^%fJy`58h{gm-@(eavKCD?%WUfP0U2iZ@*3nieswg+iu07`TbAwpAALj`!#;N z-z;9gI(v6^K~4C_B_cBYD+2xlLP3g-I^)Gfuni_if!{CJCh zACM=+2dwCD{2a01Bi4F|9}xDQO+XBPG7uVsK+a&RJK5#}27oY>a^u+hz+E(E^40k} z6-Mh1NDI?xbpv>yAFzOAz9f+QTl{kDizUY5%)`!df@6GE=nCjK**Mx1!R~I$l{BfiIdAGQ~*Z;mfGZgN6 z3Q*|WfNw24bb@R7AKiS{x52t}vDUxC+~GPq)~T{1b&CFbwu0AP>Ax_$d_hK}gT+5# z$oemYf9juKkd|3s?XpJL&+AY~2++F)#d8<~sx?hiNJL}wblZ)jhJKY6Suas^Bo|S? zefs&2X*2!v*M|0}n*aO$lm5eTgS0B_!Yz1-?H--}idTxSt}ZXnO{R2kdk;L$zG4JZ zp5Pgw+#~G>(;}T2_&42^#J*tD-*3_Tetf+HJW@8-Y^R>D=X-Lc|Ni^|?G$l&*57;z zp`7!*4+6Q_UmoUIU*q4rc4rBdM&LmkEV){&64fqV>Q=RS3X87yn37rW*y}CaF>{I2 z2dlLX=6#;kk$W%!nwuRjV|TP%W)5ZDxst@ zU>6vs&6K7e@-qvpJ}Ni?Xwa@QdnRuk5iWs3P{vEu9tU|5^81` zJ)9a+*78p6Rbv=&<9A&?-qK|VE3@$D&2Ff#!TlBd>TKD*fjv+(W|%*UH0$^5{)w_h zCMN`4?Jm^gZMqB2x*OqLTx;1BteLxt22Ix9#!t=Xc>BU3zBqJx5LAK;IC(VimbT+Lm(V&Hr26weJx< zd|v;7$z$=$^S=GZ`5EJQ4~}vU_r=fecXnyUA(=>U90qO2+~!0j9nY0cg%kOijUvO zQzCPts9gJ2?nawe@9=m=dV}9-Wmw@UXt?5Z0Qy$xV0H`7JHw_0$-vbbSSmO|Y(ccN z4ByxRkGv6w!xoy}>~ zFguq#o;%fv9X6C!+utGH!O?kkw$b4$eBOM`hieGgub=<*srmTf=5yC&auDhnB7~AJ zaA0(^&24&{qZr{GolNL*P%0yfr9UMDV1Ha|k7?0t)%m)fwR1EhwpdaBZ1>mO_55d* zf+7`vY-iuv;C!TPZLvaHcmd*OGs~W--aM?=cZdKxH8QK+wWQcA<@Li3+e_Va0f$Hr zW2#PajE6`l?JU)#%tEtV)9(uw40$y(nHno5W#{{4H5{R+_iAtQ^B2mXe7K{T-~-~( z1=R7Mh{n3%&!%98KiG~=`tLt|Ztjs3YIO&xTxYO9oEQbCaI}Mj(%!LEbN-V?0e)fe zD?=y9(cdrUIY&jR7nDiCitiw2;_4_(^UuSwAL1Wux2OUDRn(*>%Y&j1Y0A17%7#2* z#G`5{Jl0BWHDkX(t^5=E_=+r_A2TSD&3XAQ7K2obl{z->7^)=lI4kI8#)8bG{f5w1_Ft1pe zW9iJz$l|pgajHxIW(E;=^*XTrpbzfR7}cDF7wbcflHvo)LG;wjIwBqAbM%X~$c6)u z{?TK$YOL+pd16XuiqPfYe2ir@mZ&P$kjkY&VrdiSO*yy9ktc$=`*lae2D@aXV;cwtc~$aX-Kv2+SgG=_|h++g{g;nk<{n9Cbfp{92eWr z{T+7ZDfGbMXQV-KSY-CF>t=pid#HnfsXM4ZcI{@qVsW$Giel#f;qDza+HN>a|1VDc zs{l&M|91CfeV{;0b%^X*Vh+0y-?8_zN5APq>c(h8xrT4pv`0XXoNXU>S(dF#kaZ}c zE=(Ud{?3ii&Bu%|nr`*dI}xjC{)~c)XAAAwXyh7|_+fZAP8#?H z1!!DvX7`K?#GTsd;%MIE-K_m0V}GY|Gl;q|d2q^Ft-wh9fFJ8^Jvw8foWs5k#gPx5 zQCfm~PON`E=oC43nfki>^_TZIh}7?BaXmy^MO_Lnv{PAT_+uZ4LCM4LS z5~}1ULIF+8>}Y6q{sSF<({0O&aL4zc>Z3g!mU(N_kB~OzTNRa_yUXSSj%*@Fh0P%B zRd?lIs5e=Oa8cM(eA*%c{mv#%^UiBpk<+3JR|xd7bS{>qUAo7*{$bL}j232(RVy|A z^k08|{(yan>znC+{ra!w)AZxN-m46P-l;&!{-Vp+^9XZSXMS$Uic}OcW~wbSYN^r5 z1qW8xq}aC)IFHBb=*?F2txh}YF&pu+?6_k6#6C5yoNj|cMv7IEac{hbJKpz8u%G`i z!9fDm{}@D^T|x$!V;3c~<;+NeZ;#>NPOLL8aLf{Sx^8BO>IN4NZPjuv5)W6!pqP zkF!Wc4plBvDP1O)s2?njXpRcR>MSePJxC$57$EtUNb(IDxbK_&`Fx=^n-Ro!nF%$! z1Qv3iX^%xmV9H5GR*mHRogDBx$^jo_64(kh>}>?%(pCLi{$NCNjeg6;NC;qup>U$_vyWVv-B10J9d(6n~mYNs?U6l~t zA6~9;$@tLD{(gmha&PMsKhnu?=d=@qq1&l_?poT>91A($N;}#aLE_G(ZUR_5sJ!*iahcHd(Z^#Ym^Na9@-AWIW+Yy-v8sZ@{ zXAc%y;?sv{SSc6b$^qF+3M?#nUFo@6_-NX1!`$7_!iZI>LIx{75z8#nNRAy*=g1yA zqdU^nVPuHT%n-7}^nj%%UjNt7}CaYk(c5{yyiqWHqsqLr%NH-8k{vkKl?q1Pb#q)OuunJkj}@Fpou%B zVw;>SQFlo)!w4PrIb5)9?my~{G@2E?;Rx(!*wMx9qJ~q?kc^cBY%0rY(hs|Dw8uqf zv%tGLS-`2xZaK(nWHsc;iPmHQVSwWJ$3h38q0z;CBZ1cmx5>b=n&afH+AE}Cm9b&y z#y}Wj90bXc$x6duRf_{!4fp4B)SiH2MX+k-i&l&BQ-9!xMyNimP`HC`=0Z6~#fmw0 zM?C4+)^fkwJz)=(u2cNfgrn>JP?Soo&ZoB3~gj}$Obw!0IK9gTPM}k=4 zrr~qeWn#PYO7wvn?~vl0smwMxkqHh%;@D=#LA(bzw&`Y+K8SPz7_4+v|MyAXcYN>y zOHL&=c_*C@es{ZGFK5fmmziM>BU)w4Ex%iEMx)EAQCSf__s$0>lu}6H?pdHvA96of z9x!XiICKottQ^%*1}?UX*^oRS_XUo5vNHOy&S za87OY8ZDmMx>d>(l;a%lV43woK!;JW5z=#fVSE~XtDbcG*aM0`>&{ObzX;4GFr~sA z8oKAgn77cfKA1*JbM92qeXa`tYRhQmE2IVqIgc;i*;B46bM?ckaIM|7i97pZoz+Xv zP8rSZ;$h#e^znRa&OArHQz-^s(D=yS(1ZI9U92f}EYjs_hy-%PfHyAw98;^ItBkfX z#OJw6R$^kW=x(b}rv(B6_+hym6v;2Ld1E@=VGt?6RlB}7C*GjD>P{kE6L-=N>ABB4 z(Z-W)`0R)iH`>eiqhdD9<+gr1yJCC4-?x2|#M`B&A<4!>bL{bXJ~k~UJ5K!{nPT;t zh(@;}4ja?^XY3!>YPiw*3-txK@CJ^0Ih^9(Aa2IxQ-Ng!nK}pSX zg+GK;iopyry&Ug`J~8HIe*mkGgvxaw;Xht5ebGkUv4M_Zjygu=qglN$6RfguFwD4L zWO!7~@y`2U&9Bog{ZQ8@yg41D9bIY~N#-S0E)DA|b@o{w1!f-Q0HuRHEeg9V`_T6t z$L_}IlTDuM+7VhLHfr>QI_2SJm((2T=5_r1CC`|VIDiGPcMcWWkQEzKVZQX@$2;Y( zF9O3jupdMh#c^k9&OFWFn6Pz2mu{5{x<) zbkkjsOl~PSVJ)x<*Y7Z2mOOmia#E?rG?+s8~gG zD-Qsq9JW_%57=H3zC~1q8raJu@8$+&5t-HKh#h~kS1Hb-F=Pft0F+`f4z06)vIbR1 z#z0ZNsau_b<@n-2Y?KZythmFDj+rq?j3L}l7UV^0XWzF`8^HiN8PXitlbA?U`))tW!v-tGTx9@T9| z+K|@Xz7GJ{s)j0=sey`8vS|^C9r4>T=c^VGrpV-6tfOkFVB z6W{T)H2a!w=nKWtaEinmGHRAP2|8zGr%h4$t4r_eEEUf(@cUMvUAoO#IigJ`Q779O zOzq)x;zYBj)ap;eyjzO(%Sz0`h$4(Vz?N`yv0qi&(|)j^q8iH-o#^d>a(~5!;YN=n zt!*q_L`K~#`_P1wDxsX?uhf{4({@_6N#LHY6{=l|NR9XlFK1!CmJ8y&!FhMiv{R&D zD)Ybu8G+@_a0t%lhjuXN6_opn(jb@Nn zbyU>&FwU5}T?8!JRfc>l!GdUKX}l{ZN}+eLAg!rbPCXIX%&3S$+NzpgXqZ{KaBhxu z8N^Y${(NsHbuET=+HbG^eDQ=GRJJ5Y~39l#KkZLh|Dp$?M8`xQZ z*DxOEEpA3|Q6@7@>eZha(6Km8rCap!*39fsR(_cRGsw37qacU9WRDYVvw^a@KWiKg2ja(K)z*l`R`0yL5A~ zSQ^1ON?H&vD%-i}4-v8tb+&&#gs#M3-nM6WIG@O=Z06;jOUrVx4`)hw5BqU)Mj->l zRL2WCHbQ^oc9B?Ql29iSP*tqmt67E25DJM*C^(s>PcL*C7UY`M86l-KlaIL&g9+)FTh74kdAW%r%H zjOp%G`&4RZM9wv{BHRVB?wVXLsv>vq#FDg|tKHv=&7n)0liGBjciISv2d$YDVYemm z|2?(aXReFj{qP=Tj=NLv<^;J3*Yq67jvx@J_vQ|!O(b14r?c`Sr5vP2-l;Ps2zj_0 z#Y$FP51Qk85H1tC*Mk_nxN^;ZQ``ef<$rhgN!8*t%jaVtlNp57(&d8ae5FpG!Cw1d zs2}yt$VLmwooKe`Bt4Z*?ugmLsdo=z6P<@bH(IPHJ!C6pD0s;Ph1-i^_~;EWNG(}$ z{c@w@(c4!ovj>(Hu4B*}ch~azdkw}~$?;qUf@U`3j1j~vkbCKlyL{*-#1B7z7I76i zKhC2$>&+pAyH~1wOa7h#nT|f=r-uqFzG2?q`Uc-cx7 zEr!;B!P94M+yswlN9e)rbY3fHa~ukMh;g;yP@Wa!VFq4FL%9?2tfO@oSV$qf_$LO0UT(-b0$zBE@T%(lB zMr&|$K;Io>W5srhVU<(Vb5g%u$Gsf#*t1(MNYCxMJOc$%{n-#2r|tsH%r0aYA=}Zp zKstW5Le-1dZcFkY0m~(>ZQEyMWa&H=30cWXcCb_}rMs?VGG0!FKblkf;S|1j6q*-) kYH)ZcS+9lJzo%zBT3Ekkp3DAO=X_wS&NWpTsKGz~|2llKSO5S3 literal 0 HcmV?d00001 diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/player.h b/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/player.h new file mode 100644 index 0000000..d137823 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/player.h @@ -0,0 +1,60 @@ +#include +#include +#include +using namespace std; + + +class Player{ +public: + friend class Rps; + + Player(){ + srand ( time(NULL) ); + wins(0); + losses(0); + } + + Player + + string guess(){ + int number; + + number = ((int)(rand() * 10))%3; + if (number == 0){ + return "Rock"; + } + else if (number == 1){ + return "Paper"; + } + else if (number == 2){ + return "Scissors"; + } + else { + return "Dynamite"; + } + } + + string userguess(){ + +/*Extra Challenge 1: + Get User input for one of the guesses*/ + + } + + string wunderguess(){ + try{ + SimpleSerial wunderboard("COM3", 9600); + string mystr = wunderboard.readLine(); + cout << "Wunderboard says: " << mystr << endl; + }catch(boost::system::system_error& e){ + cout << "Error. << e.what() << endl; + } + +/*Extra Challenge 2: + Add the Players name to the object and it constructor. Add a function to get the name/change it*/ + +private: + int wins; + int losses; + +}; diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/rps.h b/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/rps.h new file mode 100644 index 0000000..8074208 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Assignments/Assignment 4/rps.h @@ -0,0 +1,61 @@ +#include +#include +#include +#include "player.h" +using namespace std; + +class Rps{ + +public: + void newgame(){ + /*Extra Challenge 5: + Make this program a 3 player game*/ + + Player player1; + Player player2; + + string player1guess; + string player2guess; + + /*Extra Challenge 3 + Make this program Rock, Paper, Scissors, Lizard, Spock*/ + + /*Extra Challenge 4 + Make this program best 2 out of 3*/ + + cout << "Welcome to RPS (Rock, Paper, Scissors) v1.0" << endl; + cout << "Preparing to run the guess() method on both player objects" << endl; + + /*Extra Challenge 1 + Get User input for one of the guesses*/ + + player1guess = player1.guess(); + player2guess = player2.guess(); + + while (player1guess.compare(player2guess) == 0){ + player1guess = player1.guess(); + player2guess = player2.guess(); + } + + if ((player1guess.compare("Rock") == 0) && (player2guess.compare("Scissors") == 0) ) + cout << "Player 1 smashes the heck out of player 2 with a rock! Die scissors die!" << endl; + if ((player1guess.compare("Scissors") == 0) && (player2guess.compare("Rock") == 0) ) + cout << "Player 2 smashes the heck out of player 1 with a rock! Die scissors die!" << endl; + if ((player1guess.compare("Paper") == 0) && (player2guess.compare("Rock") == 0) ) + cout << "Player 1 smothers player 2 with paper! Die rock die!" << endl; + if ((player1guess.compare("Rock") == 0) && (player2guess.compare("Paper") == 0) ) + cout << "Player 2 smothers player 1 with paper! Die rock die!" << endl; + if ((player1guess.compare("Scissors") == 0) && (player2guess.compare("Paper") == 0) ) + cout << "Player 1 slices and dices player 2 with scissors! Die paper die!" << endl; + if ((player1guess.compare("Paper") == 0) && (player2guess.compare("Scissors") == 0) ) + cout << "Player 2 slices and dices player 1 with scissors! Die paper die!" << endl; + + /*Extra Challenge 6 + Actually declare a winner*/ + } + + /*Extra Challenge 7 + Keep track of number of wins and number of losses for each object of this class*/ +}; + + diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/Makefile b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/Makefile new file mode 100644 index 0000000..5afa166 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/Makefile @@ -0,0 +1,30 @@ +# Detect platform +UNAME = $(shell uname) + +ifeq ($(UNAME),Linux) +ENV=unix +endif + +ifeq ($(UNAME),Darwin) +ENV=unix +endif + +ifndef ENV +ENV=windows +endif + +ifeq ($(ENV),unix) +CC = g++ +BOOSTFLAGS = -lboost_system +else +CC = g++ +BOOSTFLAGS = -lboost_system -lws2_32 -D _WIN32_WINNT=0x0501 +endif + +all: + $(CC) lab5.cpp -Wall $(BOOSTFLAGS) + +clean: + rm -f *.exe + rm -f *.o + \ No newline at end of file diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/SimpleSerial.h b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/SimpleSerial.h new file mode 100644 index 0000000..57dda50 --- /dev/null +++ b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/SimpleSerial.h @@ -0,0 +1,66 @@ +#include + +/** This code requires 'boost' to be successfully installed and when compiled will require the boost libaries to be included. +The original code source as of this writting was found here: + +http://www.webalice.it/fede.tft/serial_port/serial_port.html + +*/ + +class SimpleSerial +{ +public: + /** + * Constructor. + * \param port device name, example "/dev/ttyUSB0" or "COM4" + * \param baud_rate communication speed, example 9600 or 115200 + * \throws boost::system::system_error if cannot open the + * serial device + */ + SimpleSerial(std::string port, unsigned int baud_rate) + : io(), serial(io,port) + { + serial.set_option(boost::asio::serial_port_base::baud_rate(baud_rate)); + } + + /** + * Write a string to the serial device. + * \param s string to write + * \throws boost::system::system_error on failure + */ + void writeString(std::string s) + { + boost::asio::write(serial,boost::asio::buffer(s.c_str(),s.size())); + } + + /** + * Blocks until a line is received from the serial device. A line is denoted by a final '\n' character + * Eventual '\n' or '\r\n' characters at the end of the string are removed. + * \return a string containing the received line + * \throws boost::system::system_error on failure + */ + std::string readLine() + { + //Reading data char by char, code is optimized for simplicity, not speed + using namespace boost; + char c; + std::string result; + for(;;) + { + asio::read(serial,asio::buffer(&c,1)); + switch(c) + { + case '\r': + break; + case '\n': + return result; + default: + result+=c; + } + } + } + +private: + boost::asio::io_service io; + boost::asio::serial_port serial; +}; \ No newline at end of file diff --git a/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/a.exe b/OSU Coursework/CS 162 - Intro to Programming II/Final/PC Application/a.exe new file mode 100644 index 0000000000000000000000000000000000000000..3ccf7f08ab8d523520fd40067c7711ddafe65b2d GIT binary patch literal 1532469 zcmce)BrAoM48|BRP{`PyZ7Gb_x$nj z(dp_sr%s(Zb?VfqQ`MEJ*KZW!1wpXm|42j->hYw1UiSMx|M&pzJtWjycq93v3+rvA zA6;0n__pPlOPAe!>#`f~%)I%=yY9MM%Dm~8%w_UjnYZ1QSvajc^Uk{$-7=zAuN1dM zx~xbLN^LITo)gW}gr`%5#0i3MNJz4!+TsQXyAlOqREi)t1tG653b^q9A>eanthUgt;*lKV|5HfAh~LcpFCC z#_MG=ge-;LK)mE!e6NtxFrr{a1(9H~S_(L-WqnJT)<1?PEn)R$QXXW>@UHq-dLwgr zLkgP-O{((ef5jsl`d6+T%iFS1nj{1oq>ON(+d-Ll+KJz= z-A%8N7Uh@|>6AWRL0|DB^g$n2E(p2{JsK=@XRC#7*B0SWF)JsOO{Q{odH_b{0e1o~ z3r~k$Z3@DcM*u~I6ScvkZk{YWYe!iC?OK6LwY&9sQ52q+LwP0V=9N+2DCFs*@uT%; z6kNIw94SZI^+mG)8A=eM>)1j}5wR`A78RX_=BZ733Q*JxxBkj8L6`+mq-lljObw;R z{Sm!UJ!D)E4^i2QMvQ|%8>B174W^vHapagcj@wLm1IIl~kMePw80d3=3_pHyPZ?|R zAYtM`LP^C#fAR{zV}pwG>i0Bl+{g$xw*5L0wM*#6 zJx#$1+;$)hLOJA5#T=m=a|DZCBZ>Kjg8a-+)igIi*Fq;5 z=u^A|((NculvaR}Y1^}au#{emsKOJoNW@l{%3+sm`@1Xme6Zn^cAYM zZ6W0hh~Y1#*GW-?ZHwu(4P%29$Ea6UIc#EJ16otN%1O?q7+8xJ&f3MFCQ!={_xB3= zo~}qlpMjb6SvT=mLa8iD{nQVsY@~qs3t>J5Or#+nVH<1D8_7(O!U>~*#d4|yoA7KN zm7Yf_52cn-%1fyZu<>jmQuRwQ35i<;e}jAhOE(L)ZA>6jN7$&o!~v*pBT{K=CYMZhvYwk{mKx`Je zhit0>3Cmo)3U>7*ju$1~0pduv41zeWJrjvUE3vamH_tQzV;07tZcV_DR9*eCRWef8y3t**QwcVOsLuVJdOn} zvbC~b0 zdPTn*s{`@DHZ-8NtB~dRSjKe#3lidk@1kO*YpLi@1aCp|vXOZ^ zK($?erL?~ce25!fVRb9WkzC@2H4whiwL%Qs1H_H7n&LsCegJTIO&=gd!>G1vFyrt! zqW9nq{ML4jVmYmF=qoph8}4J&FF~I4cY1#c^lQ5=U~TD*Dq=N!o`M=^dCO`rm$3d- zx}4G!@xhruRJ!_AZj{E08#=(X(j_vu=zkv|al>Otl-GNs7zlwvjOJkot{yV7Xr_0! zXE}=1_liQ4UFmb-bysez?fMM-ivC|1)dBde?fL~xmj={!L6-!ncWu{6Jmpzjp0S#4 zCVFVHRnse$y->PFi~dU)F&kt1LeW19uS(aY7XQ>AN>`@nzmas*H?EBLY#YR+wuQ*r z8#e%A(W~vcnn~AATyA)U>Csr0^EkMId>^R6v$ks-^5nnAxa%a@?uqG1FCxhFLFtN@ z28tU#V@%jk-v0o~ix0k-+Cz%-(5`w^W%d0hn6_%W79~R(eZ>t5)6E<4CI-fXZmdpP z!_~WDr5;78%8eLGq`LZ%o5)m({(F(DS7VMe?q={<=}oAw9tO{u0b9=oBvbW$V%5(> z32Qv`7yV@Y#0T~QU+Eeo`fC7Gx(0K73WV@x+|rGoAo`Q=X4SXy0;MZa^bZBIN|yuu z9jGJx5Ae>)$J(z$4eDuD;^X}Q5cqhX%Cv0}x<}lQ1Toikl~PV%BIv|Q|B=RBYfRss zpwdkKwOtcfc`ucJfW~fZ*F=_cElU?LTBm>?qs992?HH};fYo+=O0x4iAp&v3n~+s) z*ISemcpFe-E3#wbyc{! ztL(OC^;Gh|VkL+7ESW*DPz)yagk>fIwmk+riJ=tZ)K4}3JqFv~6XqbAyJN8JJz->u z>R*Y$p6Us6B?7iJ22*;%{zOuHCkDHKECQut*kHPx& zgpHzd@5NxJF-&7^&!TcoG1!5guxcvzW(@W&U{Sqr-oW*u5i-`F`X}__Eu^B*pXPI@ zLeN@3HySlPz@J#)jbKv03E;|&h9Bu@@mDSQw^V#0hwtxEeuD*10Ymyl9DWx5Yqb2` z7W^>LkK^#qd(fX|!R;6d`r%(#{T-mMbloNT`+}&_b+;I}u3Hq6s~%FYx}+X8#q7JC zk&+JSkAaN&h0^5`{XTM~yZVTMf!!2DKiR)}+I`?1y9`LRT@TV=_WuodwOxOtbl_X$ z$2upCCWm3MGUHj9v`aA|Wz}{K!cz>q-V^@-br@zStB&41VQYvMc(7n6FqUh(vWSNN zXUL|u>q|Cx&tS_%R8MRMFYmfe1W8qvu`qCFT(5Fj!=*t2N zUPk?W;sk>iA|0*cY771}!CN_ea}W3s3tms~zjOG@J>Ze+Igcku-~NNck8=LV%hA8K z;Ay;Fl*iY%I{D^}pbk#TXcacl#7O!PVv4f%oK;k&sz-ygaYv7e@3)|BWSs{Q^kbx= zWfxn}xlk{?>o}m(k%~emThKoe(_ayk7W+|XwgsI@B7K*jQ+f!rw*@^!^=<)lqw!gf ziho8Jk0y-)7<&3zfYBc*NJoi(V!`jE;x}>ljXlc0YQYy1YZEzqUJvFrSn!9a{6!qD z_9%b11wTgR<2d|KkMh$j_zfhO!|jZ}89hWZ(t>|T@SPmq&;u@7@Lfdz84j=SLI3AD zy#14*iuzg(ACGjb{TBQn(Z7kqTYAuc)q;PCaive>@Q;y>mfv8(`;byx#Ni1&)Z%Un zegZa0kK^#8NJq<0v*0a6|M1VO{kwY5A8Em-Qs?jF@CiM-U$o#ysQfb=-qxf1&$D^^ zM^XFMa(Gsc_I(nCQ~8@Lc#rb0T5yBvpUC0lnqYYzXo4IqyCFGq8@MqY+C#X@SYhdi zo{WO#SC)Tdtv95kdRl2TZRGI~HaaKp0vAC#zZ;pCqMejWBXiaFh=fsD3X;V95zwOr zX_Ovw`H#<{)=Nb1ck!0}sEKlk-sMD(%CbPt#>mjLMU#b%c)HkAD@hw$lD^7$$6n`z z_%fGTl4i!`wyG^nv(^2<8If5^XHhxUZL?%gIbltzbQM^xs7$VoPn@SCXY%*frNwm~9PwSEz+LQRzB2bW?C5A;0C#LYWBv&7Af(qH_o z@-v<((vzNI`RYJK9&6@mcM4h&w!qS*eoDt6X`s?EP#zR663zoL(}l$Olt@B?mOsjS z_WXa!A3zGHu2v3W_)f#)7&Ps zj)EUP#Cip7lM}y)nKauG!K-jPC>$8s_+UX{JGlC#zDEQmiiD#c6{cl1*`3iMY|D*vQ>oO;phrQ{8l z(*v!m9h%oM88OYD(b*0Jw(OeM-UP;HD|;g4>V6gJ6R%*mZNcfi*O)KPQkxOV85Nx8 z9?00wa8u|>zZvt;L!Y2!U#ji;PSm698a4NZrrEiXS>>8b+>zotbC=vJIN4VDu1!!K z;*QC-+}7YdE$T^MS8{dQ9jz(Bij)@35xmEy=7>A4v6+X}meXy4h*;DzS8ZWx*Ice& z0wW!0P@Aw9CwL%^V6jtw1huIJcG?dlaWO^mERfPXcOl}qJ7NwB7C80gK=P6XYvoSg zm<96DiE6oXZWAO#1$=oG5~*pHS1oX=ZTg$QMm5bfW~3ks@2|o(vW+`(k_8M0RHcSTM)sI-u z)gF5Qd$x2-noa2_7T2jrM%;m{%1OehLU)E;yT+l-w4*=~ zJW}=ZpeMy#p>_;wS32TX-|8E`K)%Vh+O|NR=UW{&6QQxY;&WTgE5#i}La?O8cP6F^M6~m#~e`GNj9Onx45GfUEG2h zPW{PD5qAv0+fKX{=bv3xYdDErG(&CEuCeRqLlB|VMHauJ|C=PJ%m|P%w!-n&lr*$4 z%zlw4Ks->yOiIF1Wg~{}g+#E;Yu=!&bZ1ga??-S@+eF1Q$?Xn%NofVug&H$4QX(h~ zmTm8=9Ay(}1{*Ri5X#a91eYCE&c=!BrVtqr(5mbz9-!_Pe&NigBKDCa&sPZ7Q~U zNW%IKXgM`P8E=xPd|oJ%RFab}*>?d(UFY0mmx_tj1ZA}&Q65VsBN0T&BKJlQYsG9gD&c)*H8Lz6nCj36 zg3VBWV4(W`sNS5@5&(N4mSgAH~qeccV`t^zj^h zEYd3D+wdbw7@Q76tsjJLl7Bx1IW!HWX`3=oqkb!p+2Ip9P^7)idbtsT8K5$?VIrQ3 z8dU}|t^`(SHLqtM+&{yQrE4f1?K0*djvI1Q>RL)&&f7YSc;_Qws$D1VH&jeGUqKl{ zQz(^5*w;~N0Hu~t%1NnJl!~L&CQ5ZsP0v&6CrUL?>IkJ;DD@?!jv$4$z6r*nbvkqk zaD_SvXDi_dw;=U0rTS9p8A=VK)FVi7TLKcf)V5;O&4-zpsoduf(?%{?3_Hc>25c*XDsgp(UGK;{>g~mr^p}Q0#aH^fRS$`STLYYh8 zxv(4qtlUpEktJc}j3s#G`aOY0O^ID|8Hun`8b(@~!=T78##DxKG*dc{vk`=qrEavl zu?c$kDLog1232Chk>QFu35IOrMwlWZ?3F8dIacU@X#fg>6q;5FPJbeW0jI15oLz)Y zK{h%v=3%LAIs&J}z+aGSaX0l`?lwV9jdcWOCa_y#YH1Hyl6|Xido`x%WOFef$U`gz z({6Jb>+(rt7UHWCjJ`w-IO^xjLcy|>!gKfp1hXu|Mn+9zMoR_A*3Ov^Pb5#1Ylyph z6esa!lF=;@IHq)k@hN5oZK55=Ms)bbapL_o=oE7g88E7wgbACbmD&p-slNl6xUO=t-(ot{2J?s^~uoSnYQ5 zPJV-gs*+Gw0SJZW@OpnjIwmk}JN1tCI$`VYV*ur|3^A~UDquc%e!Cdhgf~Tx<4(B| z;FW8#qeuNg6vpn=3RJ1Ps0vbRvcnPp#!qlJwRiiPdU z_$%d0wQE6?8l%e~te&yNtzx(sD^ZKmF;Ys;{gGv#LG?=k2>dAL7_`$04zoxg5d@@o z!QeEzz6?4P8istJe@CIJp+F_J?y=Y!47SwcWaAd0nFNt6NIYX$44g!NG14IM3`jsk z_aK<4O>iiAS4s)Sc9dgQ^KyAGRzXUQ!-l!ZYxm{R>_$AH;B6>K#H&GEE27mB4tHYP z{mDiYp6P%s9fDD#qDPbk*_>w)1C&Nws+@{Y#n>4JritSn+(Y%is_PF&K zpanw1spm-&|3nN*D`I9vD}l42&%`hY&F2iY0cc(kWr>RSW5wZpN42RBjhde2za|4x z1THTZ1II`NytQKBYyN^3ivgVa5{$W!GIOl{AO;>I;6w=PDhTUAdb!Q6)xd$aYfISy zj8&FQ1dQ->5{lXYB&5-pE3Gy!qN<58nhI*7I^Twq7?S}B`A7t9`f6%aamdf!h?>5H zWPpTnuf2QR52PZQTn;S=R58M&P@_N?X4x+imr*eout3IdtU>nNQ_7f&#lU+gOa9_A zmvYu7uBE*<*?8u)9){zHIxEv|ev4AQh-%t4|j_T0g#VAzH z+QoH`qK=6B&B9wJ2_YHC#vEjXmQdQtii37FNTmaXSh@D8?b= ziaVy;jroN5UqD337a0Ah_HP6#W6sEr($0PJ7Qh}4awx3sIN1hayTl<|7n#oYRHFz1+0r!es26i zeBWb7$g5B2ZO)&AT6Pfmp+=r@`X^Y46XuPf-Bf)-=qS%VglureS=4ufW8*JWDjw@V zG_#R|Es4AcaLCCa|4ERU4pR(?JmX=OVV{UnTaXN`0vYr2ZgG;(Jz1!CYk;_`j`)b4r!m9Pkw6@Nnz#HQ%+O2;MQ zx_ZE{qJ5lHcMg8g=$r7M@X7*1M?Ik>l>2jZ)LoA(ZJL7}F;|YF(f|qKGHOO;=n{G? z2rZ`)?}V!8u{E@Y9jx-8bI$>;+s=$5m3W$Zk z7-M=p4=zu2f`Jo?SVuWApM{IL@AMK|mM~|Rf&fG10a~Kc=ukUh@4({oC}1!%(s2m~ z*`uIlG}L$uKjcj@b7Hweojn%Z7)WqgL1-C`6(moGF)LYKncSN#-2uG;%{85D;f}Y@ zu?%9hX05C`36G-_R0PzhvgVls zSjJcIzj%grm9YbUxUwr7Ql)dWJW2wgV!%;IAOlN--C!@1cx}@Q!H`*u36%VP%q@AB z$hWbN5j2|DzGt5UnD_GW6OG@Np@KjJ3Smw10%%}xz8p19?LUC+sT5X$z{(aw{4o^bxRz1UyPSt+n!_39p;a@h${fl^UZxnB4S$}UnW|IRfGhcs`XvMYn>C>!|{tai~b&BlVZ!&a4`bR^1d zc90z!-mdoo-M|6)GQ>j>)MpZe^|+r1vtDb5RycDH=n`@uQ>VEn8aZXr-87}fDahp* zckI{~3`}9W8D~3{|M{{`Ego?!7JzvGHWgZbDRSTv72^O-7^;Kc0vg$PIQWCM24HX1 zcy+l0U$`Jd2^~cPoY<(z(v~2=C1KfBU=LO#*v6JS*cwHmzFGk$(m~ybM;ttS@;NQu zrXvY^W4i-Kgb|XZG0Wnbv#_f6<(G?ri&0r{f(_wjamNH3zNLT>i&LjKc_6Z?Hv-Hl zEDkxS%4JsOw&w0Z&LlHYeIM%EYK1G4?|2`_V{I*FKaMJ{`w&gwnS1j0ifiA&D+0vg zjyTk?YoccX0>tv$6UI)-6qPLmE66~IU9+z@9-_A?jz%M1`NkG#6}O&|2Kx8N2;VyE z`YJyZ_&ROk!#l;Tt?K?Aj=LubV-n>#+FfaZAEk@6S?OwX% zR2SRTG6!Pb7)lOpwNpb|61CNKt;%6ro&$ya>`68TZ= zd2wyB!uf2spj1lAZ7|+I1;H{3dDoTLd}kJ5ugQ1jdMObbSVK)aeiN03ILOxukY6uX zVU`DWZma$$oZ~QWMg60p0kqQ~y{hD0EQ`zycL`D=62l5|5N&^VG-~nX-6cD`mG9;W zoSfCA0a27#*~X zTZRm^kyUEV5deBnDI|uodF22Hmpa&%M3KCXwj{_Zsw=XUU76@K(s;I8<+0jV>g((+ zt_#8ehZL-}~>(c!Pl{=yFj(H=>rAc^eO)u96kk_?l;Gjxb;BWfG2jHi=*uXns|3-1Js7nL1?cFZ7se=?YFkDx*itU0y`g3i{JzKW zur?eD7!8eC&bl(2uXDLPoQ49!+{H$m=#K-+Htb9Yp{X=mx9iV+1CH!&bFuPC#Mik< z9vCZf2`hr_v-Ka5SlacA$x~>+HsJa2)H=LUn$j^*5&^i?BK|z^lt@GxguD}n*bs+B zm_Vg#9JEK>ge_Rr2%+Bu<7vun*H6>pki0YKyd?ES%i8tbh+e9EL(j~Q@$(Tdw~+-8 z%_G*EfcQNs;bI5fMr1sM45c_Hp0-c5Sr~xV$b~R8ai*JXkv5{Sm=Xr&9xyKl_6ksh z6Ha||jhtZ~MAm$ovA^JofT7&37l0ym6nA-;D;~AyXMBoJ@sEIn4jUf6s*AVd&oQ&P4$>O>Q^iJHmC*lr1hn6Wn+^DwQ z(VAAf^Vi$4zk4|`KyC*j9$vexAP1ZEIPwoIz{msL6lhV%4Y5QAYooCUQsO2OLcI|kw-I#6InbNBp;HKY;W^O4Zs_F%z33e1CEd_hNcWnFb+jXnPzM859fiSW z&>pBY50}~et)f34f)AF&`8pRvMfg_*Yp(Wn-YEKy0Ci28ud`V6<7+{|*I6M3Qh{yW z;Oo3a^q&OS*I6n0KWB+WV&ErW8LjLMpNII6SToSqc^ksTEblHc@F8Kmz=%l_U{#|3 z8uqqa47^6LzXKCY{{UqVjYB#%I*@ty!R{Ve2V^#R;>*8Y(HYgCk4q+ciZC){(^!NT zYCpzCsOWd3+#p5rF|Gy@+XM(bPS&YSpAvQajQq<&7Hl++oc`5ZZ zr79@(8Ko9e>I0-e>-hsQoec}*A(L;GgXxa@W|e`~N;q7SgU(z;z5+*Wv~{DGArP%% zeG2|4Xe0U`Mp42!0355)5`rM)9C?-#8k{LmN-=Nu)x<53MWrF08<}S@u9=f?3?-q= z%~BT1vjYfX;8zSu%hmV?S?=R}NrbU@01!Af^a!m)d(e~{&=e9_%$!lRW`7)j=wl7o z4AwjH_of+L4RI%sj=XgHJM5rQku(|(?v*%^F%qP2WCIO{DO$}^I4~3piS~M%zT!*9 zc%t+ToENi!>cWACPuT{~1uSxWG2#Xkk98%p#WNhi@I*8l19q2NZNajDvw_GohW%tY zk;bN(n0pFj`k?l2v71AZVTUG#Bp3Lw0UNZGQ)2R2bIr z=;_~V9qLY;CkXykxCi0)|Da!VV)~dAc?j_~W};1|(+|J3u_j*-7FeuyvEA&qGD%zM zPM>7jp^@qNr{x#v6pR(lupC7va}?QRm|Wc(3nzZi%gBKu1SjJd#-Qqvn2A5&mcI#8 zssoI%AUb`tq?I9(pA(M&c|(#~oMZfm@fMu?j_-_3TxUaCTTSbbe%e6n&&HVvIP@YX zYO@`-SvhqsUuS`o>gy~N18)M;tYm)E719-JkeMq6o~BG7T`BeTbs`c^!C15RJNOmM ze(%6~Bj)f9>4=%YWEJyOe%a5Ip-J>p9F`nL`a~=&z~KeD^sQ zhg1|6yi_k%e2X3C=onoIF4|QwqA&BZ;hKw4_Qhz~d6I$I-PE@Pm3R zwyiM*iI&PxCkj+ijOsN6VKMde%vz3$$WOkPEhU%9rQB13CilnA7#m}=e?ub79GPpR z1Z?w|=L38dqPyyu=uD4{3~g^|2>U{o{DtI>$rV7J(P(2|;2Gf>{iU{*8dsNr%hjtH}80U{e7W zo$nUH8pEr=t}Xmq{e$O$NcOow9tsL|sEIiPbP_E?=^TlV06`l&NuAh6^AJ^Rm3p0K z0>~n_!zPVilMKt7VGIV4qQ3rTPymO)xZ7cjh2W!R?@TC%GkX1})F9&+V7WiyJcGL~ z(Q_wG`Yn~u%l$F0*akqJO}Rd;uaeKQdu1ko$VMG?=(w0x33W z(&ui0A0bst6pf)Pd3`_ZLw%SU&V+K2VcZA(Kx4-Mm83%3oaAS{r@!+YEz7ZVCD#KO zWJt{G38&>YhNC~mF!(Jh`>ecmycD)F^@lpCVZ68Hi;;0J1)O6&jf@3gg)vH>r$Ort z&LgVFZalGhCUgZ=4z<_^BTRMEmLvGnhwyrEFO0s17jDz5DDj?ohi^O_HQK(bE4F!V z#KFmGF+j#6w1BsS(rk>qK%?nBa7YHZ2r(B(77jtKuM@(D-rXk8#yILB+36^0!X)1& zk7sI`hw25Y74kGfS8?)cD>9CU{y=ZY$F3)3oC%HM8HR(LlT&0L__<;hn5G#y6Uu}( za$f@rl027uzL!U0$fxLz#9Ru3=6F!{GbLv;|HyywJZ!+i2uOnGQA1%9^#lmM&nA0R z(j7Emq0MXr3K3SSfV3uwfg?0b%X5Mg({QMivc&*>iOmCubre5@QK$zJf{31S=63%L z9Inaoz}0>Rin6Acr$7um3=E?Tubyk9`#h7eSwtE1Ex6}q(SL?Y^hT9e$6Y@&N0sB zVuK55%QbESVki|PaE3mChIXUz5uhOPB0(r7)6LrJ9I}BR2wL`l&>nY>{ulkUTn*GmedR9@dKOiW;_l`sBbQ!?;-kjxx2msUf%>j*oaJ^ zp>jNwMg=hH>GM=3shKcOq5kI-C10#=0)o@<#NA3`yyq_Hp?n_d$s**!bC3^!4M2Jm zq~IJ#BQ*n3^zMa&++kajz_zk+XuECzEiU%~x!BjaKwa(>1GJ+TTugR|jZqwxL#i&3 zqO&gnlpDeE?2@`!2!WMLuqX>8(bwt5)iZ#ZiLZ?`<6avf?q~-eQ$HrH!qrg1Sio>@ z7WFAV#wpElsK*>SDgWnHsde`8Xc?XOZpWSv4mk|_O}`uEfNDDnG?dTB9%crej-b{5 z7^1}Nje}D^Kk%ct;d+?&n7Bi9DV^~NesD?HA;ND{_v^c`QAG;~$pd#a4@cB(@)bC> zLOX`RvZFX|TXmA{V3Lof6*~aJEQL8SNPz!Lf;g&ivO8&c`efW=RNWh&dUTGIQfW?gml zW`*RxF@?}iFh#*wuo~U(BT^x=7n!dM&}jDIakr7hO+wLw-stc;L4C-Fp``{Xtm9d* zKCli?InlSmcD*zM{mahc=boY&hn>d9tr!1=tv<|$`E><7Pvc)!SCH(v2Fq6oD>6?Z z=Im3x6)BjI)z2G`4rx3)L}`vU6WG2a79e{f>eu+X;)#u@EgX0RzcjYhCmv_-&*2xZ zLOAf6mBKd|L3^qi*o^m}Jy{LBfW#dQPBr)j65&9-g%=LIZKafkzRIEYaG=3@*Z(q{ zhS0EGL3@w}^fod@r;j7v<-}<|eLbMVcHt}xHt?M4J5QsO8h9DM(%@yu%Gr4F{_lYw z3=qTmz1UKPr$UZ^?;R2t;!{whB6^45f(14;KrNAf2);uFl%_Zy`|IE>)Hj@oL{710 z+f+D%v;l@V`t@<9t)MQR9ef{D^-n~-j+^~ZmgVx*r``NT-RB!SLb?R^$8;e0$0VjN z`~VCc4;6z&()G=-AZ2h~FAd_ow*SN{TnOk9-FP3eG}daz$@rY~(y?+q5FK<30F2U2iDkZ*@4SgA234F+}*kg008Xcrh2 znu~S|>dX(>%%DzfQICgk}vuqovP*oY1gU2L+rR#HC%a zMGS7>(F)yV*nOO%N$z>jchO7_C&Fw-at|03C&RJ5UNAcq*tG(SKbVJc?mja#pvX(x zLYY(%o^I<&AtQPx-(1jZ;3;7{A(OmH1mv;LIt*SK#&|yv%odogh=uq}09&+uKs=b+ zFd6*OnaV_SKC4tt#13GISr8jb=#Q~eh2x$@YX8q95ps#=MC=Av-cZE5SLCM$0 zhU}Y^OX-<(<6vT#7BL95MC0tV|61Xu8yQ^)undHi>Id_hu5X8{h52DngL3FBE(s)w zVEuZ&~qs6G0cd8#pn>Gge= zDW%jh`aU4hX(XTc48=`-RhJSEcnh@NYoQ3pV8p!9LIRwCxoFsdZ<{t^>pY9!>go%XarA~G1*Co+!4H=Qc9;wx)k3eNaN^pu)?|rIrzAL4~|)+-#exDV*$dZw0U)!Q zUv_Hf7}*RcYPvSKVskMrxQWPvu_;KmKw`@B1SnIGkDHE2+7pzX0#o=4m_AhL74%^* zkwdP+DCdN&&z=p86oX2vTYQ(&6b!cEaiZs4C=vxdA6tlU;k z!W^MF#$vjWhajYyisRO5f1->t9yldEnHk#sn;?r+df%z;Mk_y#HmQzk!?c0Vv0(}= zn@usBj3vZNi1}~=HJ!T1!!Y-NxHWIb8kA5Cukv2fg=hC2RnH`!^zW%Ts-DLu<=j29)z3I; z&bx%_z3{YpV&C^lV^VULzqLkJ&J3w`Do4GruOCPD9Zf!|&gZ8+PkC?lBAU9=wM3Bc z)#=724gb?IDR$YR>+DXcOzl(-FZDsuFRB)Cf@Qd`)5TA8nwdU)Z8^Z#Sw=rOvIK{G zX@%+3md-Jgw59V9dOD?cc*?L<(-g0K`>U23EU=qPC{sBkdYsh-xEB@YNcHG~3 zZ=9BlX*N?$u}-%%C$ylG?9B?n$>WASXGH&>oaw9$P&-fCn6LG7H_O7RXx_+3PN1!o>KFgGK&L3SZGT)5AU zR~#NERKz0JNl4&S%TkhX(IIi`CYn68sh?t6(TYCQ`$6N>qEEG=L#o2+xQ204WjW|fh;LDT{O|Hn+~|i=8UYi22QqZtba)lKjpa3S(R{gNo>2UTS=^5A%qj1KC( zdH@JHtUQfhl8o_p{90Jw!^PwhH2xDHF1 zdeFAp7*A6x@1h5hNiusiTEP)xP851jU&;u@nsG#5kBn{(8AnI3OG>nk=y$|uSbfZ! z%HsA`bwhwcybO$@9yAA8AUgvc(T7GsN6u9iQU-P@jfMXyV#rn_;r2!wxr5~%w6z#? z&lnaxF2LBGdWa3AH7Pss6>}3)Jg?F*r0SSi#>gGi15|M8hg`_&gvI7)tDYqQ5X*~r zeT2XiSbVkUU{r}uw;7{QoxUW<`etm=?&arcGe6YW7}6#$Y&3?%PcF^>SX`Tg?vAah zw&j31>vSsSpJN_%-^rK4#S~u@!o_9u&}Nn52&A8OeS^gnna9%k^app)vhh^-FG%3_wn5qX^~TXV-ze{@3VDCWpxv~Ji6@m-S_KaIl(uk zNg5BJ7|4g70b!RIU`HYDi?26_cr-C^AI~?^2dXs40xpR$0+{r@JBX1)G1lvf((9OHG4M3Yw;}6cmWsos5dC!vNC$aqS;~&-w1%Y;kVj$OZdv3s^pFNK7hEnD zzYgdSMq!j2i^Fh%7hJ@6qcE>lJP+{%tk^TSp@-*{p}c1wz8Iee24^P2>rGb?zBs+t zX82Ym-x8dVED!RnN?DA3r3uNZ@;1l?C-e$VO(nP2x5^P;HNcl=$F&EL2sSyu_ur7h ztbwW9trwie2%?Wy*#w5HEd4s3m8EW?E&~Od?8LO^RW}jyI4ex$Qe)*P6BN>OBh3me zI}w_>Pd<+!9mVD+cJ1Bx$~C=N!HPhz*}~+WPhcK=1#PUR)VbDgqH<<0U*`-tm0qdm zy|ispCTH>q7Y05XBL~~HR>j%sCek9)iP)^1Vf8K5L*(nGM{pU&7Tgn)qK0WZ`(2>o zvKSn!&2Z!RwH=|QR0Maxc1E2-wJAFto(R@>hmt&T(y(fTfF-Ay?uo}ITXxxHCe>44 zn*HlZk<8wDz6vL{0bv957sAB8?bJ3QXvZ-|Cc+=-gT0mREL#}!I5p1K8IcCE8+dW9 zlMWabl4$76>Z~&2B7nG;SlFS(F$Uv^!P_BW)Zt`$imGT*h%OF&pZDMisr#_|%{Ot|^tEUX1$ngc610KNq^y84Be1nHVF~&^AZVi$DM7y& z75G-h!#(YTP)jdgJ@et@@6{`CCsC`^4+|7A|8pr-+`671>i(0@!JhY#>v=u8eje&k zcjh)=HNgHf1qq#&={cxvcu`4w!D0k}qp>X(gDtN;RtjyVwW_w+y^xaVf4q7Py6(5m z6|6z@9!m73xb7h9hasYJK14~LvHum|SKs67OcDL7DS4T%Gg0*aicYP@UUfWapd(m= zZC^S$OQ)m)B_L|>17f{I|6D4BLu09;pX`mV6MG7m5XMCI);m~}Ecz#~w1}g*1i6yE z;c`>j?x?=R*V$L})A>Ge?Pvz+C;AVuM4A{l06q;mnSyi4xa$}Raa{uAeSqliVps!l z;DoUHFsy0Sd2sHR-|OqVl-P2M%I7TqBJqCOA~G&wZzIHY^BI+4_>&}*eI0w-DEhyI zgsOXE$6vgkMvQTSNo=#|H&7V?{zD8DQ+1~p;9=1}i4{GLNeBtkp_nIL;`-)+ym!E{f&%=Aza4?KHHY0-C#T`hTqQqNsY^Gg&caAMs6K@%RZTLRQ253nL+DAWoRs|Gfm0Hcv~t*>(k>hnrVtFif&D8XD0LjMC|micgt&#k`B z&2+jaQw-#?Obit|=o^RCXUf^#V&Htr?d`Ek=XvlIYA*?d_K69q}f%s~hd9C_E za+6sS%&?gSYSX@N&2jiO&C&SnGIP}ra+}QI`Mbp@o6HOGc%sQX50A}FWD zJk?|-;PFtCxb*-o@fjw*ivh6G6>koM(Hn4WB`vvDzTw5?HSy8_@!g%auqo;%*HSaC zu0Ewg%EfBOSaJy0mcW%pp>MRpH$1hw$hvWhhwIjuon$vJHPs%YiGEuqelW^%u>X^D z@_GFW?DN7HT=zUs5JB*xM+h9BWX{qC`rb|>l7e&r5rXd9Ri|6`qE_DyHhW07=^xhe zHtJnJA>weMmc$sS!wcp%x)vuJWvDn9I1+8_=;p#Jmk4H#Rn_0DQWgKU)GH`uK1d~O zs{Qq1CG1en_7wvYFzxu>A+J%8l53|d#M5Uc)!w`i`D7VYVFvA_CW~y%-b+{mJGyh(@i=@Y7%SDQSrQSt0 z^?oX+tZcR?%E{q^Qlemrq_E^BB%@l0m&ZBz_n|5V3Q3(VqrtsVbO99nQSg=nA1oKP zTj@wpcjDr_29fDDti2m|mu)+b%8ac~!9y%;gkEOj6ZLcrXCWn6N?g1MG7e-pQGjg@ zK`_+F$Y-RF7=klEMVf&=Z$mB(NvqCm=#H@xKZue~>83{8N(i4(FqZ0!QfooDAMD}V zM~Ae7eeP1bizyL~5#yUc>yp6QV~0?N3tXRv<9FJWg|GlvzYcqU>}(e{v+27#>|e)$ zky+qrH|L2q{KjAhV4yb5jy9#CO?0c5Lp`CqA4lxac!?bso$Q0-lH+XIuDltY-zTJZzZ7#xguhFM3q{UVGeKfdt0#X15Q` zLmw@~gT^x*h4P|`QuUC2gqz+wmABd5KXKB{+U8w;AmXdM^%e2+BzTl@I1s*hmk*h0 zh2k=?-=r`*3@^B^+ya8Ms6{9psdS_&)q*)l(h?WR>%sP7I@#@a(`pyNc(ma_?JmY8 zolI@Af|xVPYLEQ_3~j1C_+}Qxg%Hwg56*PxdO?ZfMh6=5yLZ4yu{)${5oE?O+H?eUucmcZj>jABG?jP~ZwaMC_|=nCvL( zi18s$=6S&YwN)QSe&(CM5RwGdXyUY}`@f>RFM_4LFzg1~wW4F%%yw=5FPhw;t@;(W ziK-tq#a`K;GQu*5WJ#SuvV1}Z0f-S_X1%i*46Fap<1pWGj*Fa#D*`srsTH}@i7s5% z5`2iT^yLsb*u=qPFVBI2e1sg!Rc~Ox5r_EGVqlNrdlq{u|8LlPlh})O^+y3~g#_7Oyx{DG?~Sqt@m)u({Z4!lXv6=x_-MZf6BKU4 zfpYgc*Un)_i8rG5*t}@hzYy(uT?C(8_rb`|CL1O=YlY)a_(HtMNjku`qwSGaWTh!* z6Qr~l{s?k38h2p*Bh>C9;?|MTjcl(ECp6qxHDtmpkHy8Bqp?p5tx3mD3`y@cbP#+1 zc~Io@FkNdw0f<4-`M6>QcD4xrCsSvCzD8l+hRiCT1)?qxP1El|d8H#F^;Hv@vByp} zzKu3+MM?aPH)Aq^*~y1Ys_g@-Hdx^dV+3CKR@*G>$?HS#ii5zGi?|1G)3ND@v7MoR zikDe{;5cd)uIS_^DJ&z*=xzrBS}{Xrgg-;Ca>58#us<*qj>njx6M1ax;|bHiY%ci? zWJc(ruL2d^3;-Lbu>DicHv*Kz`bH3)4z~HeEaXYP!Ej{aPdl=swU?4rqH1Wj6b05W z*o+y{w}jaTZ)|I?oYAI<2lvqC?r9hQmcnm{jq*y^-`249)X>om2V>E)coyvgpvF!Z z;NT0k(D<}NHv^yB-U8k{>nef&rS-%wYrT_k$aM$p)T;mhQ`i&saJKNB%82~s4%tPl z<{>Y)VR{4;$Ccd@aFPU8ar7D3fwtnf%N-`2>Cxi>VbXv^>1!j}K4v#h>&aAEBSZti zTp4J%x3^Ukm()(d4LSK!9ITw2fC_UOpklE$N2b`>eZ6DCyuDP- zlZu5Cj=(h`CDC21YS*(mGW6l#lSa`%l3>mKUIEoS+fI-RfJS?qtRXO{{izZFM4q@19#RTc&F=|or!{qo4tx0#?xeLaJw8XBm5MKq>M|Wb%2})olmDVz-?7b zLh=RrcyJX?ATXH$b3k-dOheUh%2_$-2dhFUA7E;Wp2Y~vlCri?OQIS;Vp`20<>eCX zlrvl>a;7tGu$cVAG2j=g?4e@d^5u$@8%6#aEyb9w$&3;{XCP1opMe~DPaDi6Mfjwq zVI6-k4z{BSU&H8sCLRvVmWKw5FC^Y*Km=Dan{hFtkBg2I^oHdqnrBYZ`sIIKH9zR- zn}0S~oGDJ~2-?~AQ$!YpVbEcVBnXsZt8|*-JvDFG{$RyM3ZgsTp@E9<<6pNBKd^?( z3}g}qWSSE6aj5ZHt?+fS>Z$0aA5+jxc#Vc1%QcL4(591X>$=psqP6nui$iD6l8ND>|-zrFP2M`CV0sYWwMv z<{+HkNM$1k!HScRQ3reOM!F@p)p(ie>8QfB1Zt=86kf!4+Lcp7{kDw93O&Ji$m^{Z!#I&mK&i>55ZgvUT}bTl}leLqqzga4eoU;RPtfW$vTg-xdyxt;kxRQG1^qxtPsV*U?u zYH&dWA8+C`B}_Z~QXFlFwsd;gIQo<9SQR^$^~Z4}q?KfR(1<4kRGY&Zkum2w(vANI z=SODoSq*B-HU+fn9r@Qev}KM#2lDT6h{a8?&@A?kKM+7)zTpa@;Jjp;xh%NCHg=`E za24)(*@1zT4jE^th=xLtn*B){Zjn}ClS74z0>zTAgPtc5ZgD=yFl^@*Aza`QKIV)J z%?6}2EeQ)cS~h$UoOixWO&UATUAS_6bgLL5t*;J_nYJ-hcOa{x%C zt3RN426LzJEzwo5kJkoH-TR%HrB!UlnJ5RtDR-bZ3-NBD!hAs=@Mk=MJ}nSgvoBg9 zEY<&?&7kbNnJ>mSgA|+x*&Y$gr%;N}|K0GNs+HcnH-cfvS(Gtprt z=|A1YT_7jBavp!R)CH7Y=bXa9=W*-|P7xdkbw6Tgk06GI<-Swhtv8WR%}?R%*1yIJ zn#xY$B-1IJWPS<<52_CjI)$?mHL_DUC)i;jmwG}h?6RHtH>YsuZwNs0Xiz4$GU#}- zZ-pZsN1W4AgAPe20Y zZF0QVOlBZDhfE2jDMjyu|Bef2((3xrHedq&gsyoJZ2+d>xJ?~>G=k6i4z1Dm!x1+V zY2)xoZ-LpW@T+2QNAhr7lib4o=p{2Rnar%LaH(HbHvSx6`#mv<;Qx&%4hfB-8{e9P zq(diEY%6x?^k?<(cjJjs!1GjW4xFfL#HD(T4oF?6^Ip)~3^s)FEd?Ibnh)I*i+5UF zVAy0qxkl-CLZg74gTFJ4MZ%A~S4L4wL6@qgYa)6PN!&56UwsbtyBs@@IO&1Sy7qry zfc`WqpO^6$Knk%m@Q{y#KW|Jk|9I+gOwjt44nFh$%LF|NI(&|M#ZJ}1HMi#ak{;9! z-AUBAD}8yCBJ-yqO8p96*9_^KXzdNaXL4gsd6Z%e{`xv|aPH=$Gs(vZFw!&RY5%Kt zM(u*!BKk7a7fv8jWa=?|o~1T+J4IsvFSF``Q^XuH{8Ln0~H}E#Ae7e>zPhZ zc4Gp3csf5F!h7%z`>^-&f0J&7H}D-)bsSSD*erJ0LprfyYyqCQmF(CFo&KH}nJTT= zrS7b(J=~F0S=)(VMVh!3_P26qQb*(A_~e#Kwb*6$Aw`3hVNOkx?7nMVcJ*g*>k{nJ z6ynd-qSJ#@91tyP{(`9L`dkVrypM%@e6<*KzDNAB!}j|QPliTi2M{r&t?;pl%W=|P zix19=w_|N61}OLlg!Je(GOkx-e`SOYvFs$Xt}S&{HvSY}dz7`VU8ldO1qm_9ki|79 z7;Z`BuSlMnS3a<>(@{m)k+2I#S#Qpg7JbENQ8w-g@yZ=}#je8r^j1J?aL zq>!kra0uqrziVlBtfeOiUDqW%{`*E{OZ`bVGz4|A-huU-x6y&WW@7Kr(m7~pcVBZ$ zUWztm)p=bn*d$k70Uo$PI1c*02oATl+|~F~s$BCz98UkPaGICFOnnSx$ASlcT8Hl$ zAu4B|K3S;5Ye$mtG>Y1qm9U-NiqL{nW$4^C{ZU>BagjZ0JI;m<5%Sw%UGbU7iJ_4s zL1;Xjn%rV0uyg>sMA(a;1xi8Bn`D`2IWTZB85w9zp6DM7P}oZg0tWi^Rtw}2{of&! zVu6e=kS4BsLrLgEUJ4r$XChq4WB8r|m*a6jDp}r@?mT=Rmy%y?$6D<+kR(fxu)!;w zDsb6lS{`ORr+J0?2Ojham8Yq(Vj=R_m|o)c;9ETZ{jfN=wR@Wr@&JA|W3U3-3$rQ6 znThSi-B9ez#*R3xG~fsq2AJ8cJwy1?r8rPU%1mBV;h$(Rk%1AIu114LRJ0{6srlgie7|!06luUG$A4EnxDr`)Hj- zcVaBl?y?7+J5Y_ASed3(gt!EHYlROx)XzW>?&2RE_|_+j7z@sf02l3km^`x#P>HpB zF9@LBYnt)Q3>Jx=#^7{ociIgfW#c1ElyTdB-utsA zp(XA5qea|f@*l#Xh%^*oXfwGg}b0O0GfZ$y$l{>&5# z>w^f4xLH2z+Oq!f@D(T}uBDr7C&7Kirm6Z{{u0^-uA&*`17c^ntMYU+rjD`NTqpjL zL%AJ)DaW3&SJxy3mm)gyan4A)%ekzN?Pp4gYY(9ioF;sPurq(}vQLfsiO3yJGHG;q z899;YcC)sRzTZ7*~>U*;Q(VPRV=t-$FStXQ8OF+eJ`#gb-TD1Ei>q zKJ~(~M4G7N3DP(f`*T<`6d)$Xc4>HMk{dq#573DJkGA)LkFq!u_;-^HY(n5&aK)fe zVqIGzQ4@NM1+7ye&1(i_D}e8*X!^1%LjJecix$2o_Xe(XP$Xx<{4)@ z&H2k?s2ldV>UTmg&YD%~PNL-@ZU4;0kG8;)pcbW+ZR2hwqO-P2vEi1WIf)YD4EqL& zwLoy5R0*}^(2sJ9sVh`sFvAYYTd77+){m&tItVsr>2=60YT(=pO3uZnMt2Pj2NlUA zo{^LVgHXw;TufUHrdnN7_|5-%|H?dVlBBKKV#!|24L8w6PJtlsgs_Mr)k>k4JGkb~ zVoa1{lM{l8TZ0%p_9f2sARJf9k6T5Xd!r-Zg__G^=Ov~Fxs?d72Xy+*zZ0{UWFDxZ z-J%SH7o1NH!ce$-bRHs=jPv-EU}~EZPm8*mWzxJs0W_63;dpo<^&OH6PZ)b$0z(~= zpw77tq#e0RQRC(Y$Bv#qn3*K!?O6(dH@~cLciig4grL3qSBe$3Itjl1Q7U4u`=zQ6 z#~^C_^NW&=czz0ESlVxs{A`pW>|&A!q*qlPaxNGA4@D=50eK+ml8sZ638-aGz8aaB z8MWhMW545Pq04&Op-Vf?au!7Bk1}CUvWTeP$r=evVPAu#J?)x;`vra9F!v0a@YvV& zd$D=E6#&<3oYV;47$9}E20C#zWlfvp1y4k|Kms_BYj*f>~O zvwHr}stv%p4p{Z$YBt9{cF(zE%1>`Kbn(>PCY)yj^1#5k}62sh8d=0 zRY95Ppy}l`FGQ=_HgKGmt0aHaUfs#=mm}&3XkNX0cGWA^GrpwI5?`$CY2vt|v5+-mqTKv+vyOlfjZ%O7HzWBO#H4gYqJgvHT?<8KeV zHh#pna15>=Uz80tGDI_tUE29$1G*W>5U_HtN#i1;g5V-M9TYCz9||_rV6zPiW-dn8fRWu9e`g@a|9uN@ z=0Ho2#%I)=rJYxW=K#MJ6e{FlOvmnkgjWzzDG${q;!5|tITTRa*CN4{?7A7EAKGuX9kqON{S)G!4vM`l z3s1;X>R3z4FeND!lcqu6%qVnosNF@*en3cqOZXy$fB35cGCC+MFF)i(7Ix@?71TmD z8kQ4^G2tRIsre+KtRoAMVhQ<DDur)atgV zE--oW`7dJatobj3KanhPXT8J{5g%vG`6+RK|`vD4V$y{NS}wRux?#e zq|61l5)e%kRfME74XPEOnkJ|wBr@j&Vv?j55__EQ(lDB+10iZHM~IwD1xwFGd{u;P z5UZPb>OsfhQq1$LXXxL|`6F9@S&9HmR6E0Dh>)EGjKertfE)bIm1>+TlRX!V7V1D{ zEkdEuc@IsQ6s0=zD4u$p2KB74p3cYLP|=(&CW5K=i6-T2uXV5JsW=y`@I)ia>OvPIZ=|smUqbl+&vGBR z$UoI{6mMef{XQ+qVyYNwgv#0}@WVQx9ENokkwDgUqN4;Q@4|u0^Or?D?wzLu&M9#B zmk9O2V5w{>bL@fc6kwT*jnXNGRS^KyVy&@Y4Z3*liw;`Z{b3XOjoceSj<~uCSM&*WQe0b6!eA^nPd0x1YX+dQ z?)UzAXU~qUht_!U%!Y%@Gdqrs`c zxamTMXV1k~h3Q^J5=RvCbQreU7aeRp&lDC%2}@Mx6ZPqKdnluewpUFH&4wvN0}-{N zK~x0h(1_Mqgh7&36N>GljL`2aWekh22@8X$QywMUpLA$lSdN5@NJA53w%m@`z_*4KQw^-M(8MJnQJ^Q5Y}i}=(PoygVUT%-39 zh?ctR(&ebj3A5$2d;k;ap2?p6am8x$=?kg?oz@gASpJ&*Q~<@je+626-sA2irVtBg(Yt=ye&1;-izTm?2Beyu6c7Fe~Egz`qcZ zY@Kj^Z?ds+$%T{eNkq1!n|Z2iZkExQkOlto$7LBEY`wTYg- zebDr+vCgr#^~44)o#X3c29B>#8kSR=J>_qDJGl+ps%l^7%dZUAY>FNBu66_Q#k;;2 zD>^i>z|Z#g{K^TExk&KVuj+Q4(UG2-PMWpTzDb&OqT)*oD{#~`l0Q0F)Ng<-qqz@3d}GCrg(W|*SZPb z%4PYuL;~Iyi1o$JhZPQJ-v1WnjVW=wE`8_@x{kHERr$^|qQHFNe*05*a5~-9MB+}O zWnboGs&R>hK8y3=&$v)FvP;B>^XXI?hojX<0s5z3j2YZ{Ct@!0j!3zfGQl+a=Om`T zGskA0jXn06sX@F!M`ttjw7>bPY0it7MN}Q)xHZFZGP29Sm%gur1!mjdG0msTcC-ZD z5^I%@4m}ZnM$Qje6JXzH%}cS}iswa*cA6#fo3CagzC%Q|GD^azwdmru4UCOt^rhyZ zHS3#wwdE^3L{VU%l8oCh)k3BWlGpn`lh-ie~$$`qmtft&c4O=%z43CQI{B zJRlVwp5SXo4C{E2NiE`-sLK63AEcQPPW#e*b)AxH8R69Of%__-E~ZLuDU)^?1PX~5 zEfIqr4@WbdJV{0a`%udzY+{*^%R{arM5Rzhom$QnOYTd{&sr&;aO&W*R&`!uzv)~J zwCj47+eqEwmK||(_lzvR zqqc`-E9YGU+2sO7#O*7xR$o}k7}#ik027pm_=Ow|JYvB&2rgLn%=!o6yXC(F;TTDBfB$0A(caIQR%+*rOX&65{sdT^*n}4 zwk>dp^j#vB#&NCtSv8xihO{jD&RZgjka+>b7)IpBmqZ7(_1#r`_^tRGp2Is6x9xJL zhg$4$_$Eu>WMPaL!~AM9K4KC~RF6R*I%BrejO}z_l1(^GI_In%!tvX2g7}8Lzp&R{ z+!OmZMijWU1TP0hS`F?et;XKA3)uwnMmCKT-u_M|wS9xX`D@_)Z<@`*4w1f-w}bP--R`g)u#f8x{lI2B^=q=?s7`Js$Mroc z)SdbhX|kxe=iosA++ zCX|W6AIn)MgU!;7LaO+B-0%D7Fhc}0W{-Ba_fECm;<+ zQF`2Q)#KLU#!#k@qwH?y7f?f80v13183b$kJCU5Px7>1Q4Yrl?12_S7&!

Cu*mU=CeduTKsaK~`F$9t^U&}LWT7Q&+O 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