<aname="l11"></a>Simplicity is a goal to </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/Strategy.DD.html#l1"><spanclass=cF4>keep the line count down</span></a><spanclass=cF0>, so it's easy to tinker with. As it turns-out, simplicity makes it faster in
<aname="l14"></a>graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a </span><spanclass=cF4>
<aname="l15"></a></span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/HelloWorld.DD.html#l1"><spanclass=cF4>Hello World</span></a><spanclass=cF0> application in one line of code and can put graphics on the screen with a three line program!
<aname="l20"></a>ZealOS. See the </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/Charter.DD.html#l1"><spanclass=cF4>ZealOS Charter</span></a><spanclass=cF0>.
<aname="l22"></a>Conventional thinking is "failure is not an option" for general purpose operating systems. Since this OS is used in addition
<aname="l23"></a>to Windows or Linux, however, failure is an option -- just use Windows or Linux if you can't do something. We cherry-pick
<aname="l24"></a>what it will and won't do, to make it maximally beautiful. The following applications more or less form a basis that spans
<aname="l25"></a>the range of use that ZealOS is intended for:
<aname="l61"></a>Two things to know about ZealOS are that <u>tasks</u> have </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/Memory/MAllocFree.CC.html#l391"><spanclass=cF4>MAlloc</span></a><spanclass=cF0>/</span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/Memory/MAllocFree.CC.html#l387"><spanclass=cF4>Free</span></a><spanclass=cF0> heap memory, not applications, and tasks have compiler symbol
<aname="l64"></a>With </span><spanclass=cF2>ZealOS</span><spanclass=cF0>, the command line feeds right into the </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/CosmiC.DD.html#l1"><spanclass=cF4>CosmiC</span></a><spanclass=cF0> compiler, line by line, and it places code into memory it </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/Memory/MAllocFree.CC.html#l391"><spanclass=cF4>MAlloc</span></a><spanclass=cF0>()s.
<aname="l65"></a>The compiler is paused at the command line, waiting for input. Naturally, you </span><spanclass=cF2>#include</span><spanclass=cF0> a program to load it into memory and,
<aname="l68"></a>During the boot process, many files get </span><ahref="https://zeal-operating-system.github.io/ZealOS/StartOS.CC.html#l1"><spanclass=cF4>compiled</span></a><spanclass=cF0> before you have access to the command line. (Don't worry, booting takes
<aname="l69"></a>only two seconds.) All the header declarations for the operating system are compiled and are available for use in your
<aname="l70"></a>programs without needing to </span><spanclass=cF2>#include </span><spanclass=cF0>them. Everything is truly compiled to native </span><ahref="http://en.wikipedia.org/wiki/Amd64#AMD64"><spanclass=cF2>x86_64</span></a><spanclass=cF0> machine code, nothing is </span><spanclass=cF2>interpreted</span><spanclass=cF0>
<aname="l71"></a>and there is no </span><spanclass=cF2>byte code</span><spanclass=cF0>.
<aname="l73"></a>Statements at the global scope -- outside the scope of functions -- execute immediately. There is no </span><spanclass=cF2>main()</span><spanclass=cF0> function. In
<aname="l74"></a>stead, you give meaningful names to what would be </span><spanclass=cF2>main()</span><spanclass=cF0> functions and you invoke them by calling them with a statement in the
<aname="l75"></a>global scope, usually at the bottom of your file.
<aname="l76"></a>
<aname="l77"></a>Terry Davis started with </span><spanclass=cF2>C</span><spanclass=cF0> syntax, but didn't like the command line for a directory listing looking like this:
<aname="l89"></a>The syntax change created an ambiguity when specifying function addresses, like for calling </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/QuickSort.CC.html#l99"><spanclass=cF4>QuickSort</span></a><spanclass=cF0>(). To resolve it, I
<aname="l90"></a>made a '</span><spanclass=cF2>&</span><spanclass=cF0>' required in front of function names when specifying an address of a function, which is better anyway.
<aname="l92"></a>Once Terry was no longer using standard C/C++ syntax, he decided to change everything he didn't like and call it </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/CosmiC.DD.html#l1"><spanclass=cF4>HolyC</span></a><spanclass=cF0>. Here
<aname="l93"></a>are the new </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/CosmiC.DD.html#l209"><spanclass=cF4>operator precedence</span></a><spanclass=cF0> rules. It's Biblical! See </span><ahref="http://www.biblegateway.com/verse/en/Luke+5:37"><spanclass=cF4>Luke 5:37</span></a><spanclass=cF0>.
<aname="l95"></a>There are no object files in ZealOS and, normally, you don't make executable files either, but you can. That's known as </span><spanclass=cF4>
<aname="l96"></a></span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/Glossary.DD.html#l179"><spanclass=cF4>Ahead-of-Time</span></a><spanclass=cF0> compilation. Instead, you </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/Glossary.DD.html#l188"><spanclass=cF4>Just in Time</span></a><spanclass=cF0> compile.
<aname="l99"></a>swap-out. (Swapping tasks takes half a microsecond and does not involve disk activity or memory maps.) See </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/Sched.CC.html#l1"><spanclass=cF4>Scheduler</span></a><spanclass=cF0>. Pollin
<aname="l103"></a>The </span><spanclass=cF2>FAT32</span><spanclass=cF0> filesystem is supported to makes exchanging files with a dual booted other operating system easy and there is the
<aname="l104"></a>simple, 64-bit ZealOS </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/RedSea.DD.html#l1"><spanclass=cF4>RedSea</span></a><spanclass=cF0> filesystem. The </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/RedSea.DD.html#l1"><spanclass=cF4>RedSea</span></a><spanclass=cF0> has allocation bitmap for clus and all files are stored contiguously. Yo
<aname="l108"></a>-- </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/BlkDev/DiskCFile.CC.html#l151"><spanclass=cF4>FBlkRead</span></a><spanclass=cF0>() and </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/BlkDev/DiskCFile.CC.html#l214"><spanclass=cF4>FBlkWrite</span></a><spanclass=cF0>().
<aname="l110"></a>There is no </span><spanclass=cF2>PATH</span><spanclass=cF0>, but parent directories are searched when a file is not found. This feature is especially useful for default
<aname="l117"></a>possible. See </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/MultiCore.DD.html#l1"><spanclass=cF4>ZealOS MultiCore</span></a><spanclass=cF0>.
<aname="l119"></a>There is no distinction between the terms </span><spanclass=cF2>task</span><spanclass=cF0>, </span><spanclass=cF2>process</span><spanclass=cF0> or </span><spanclass=cF2>thread</span><spanclass=cF0>. All have a task record, </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l4006"><spanclass=cF4>CTask</span></a><spanclass=cF0>, pointed to by the </span><spanclass=cF2>FS</span><spanclass=cF0>
<aname="l120"></a>segment reg and are accessed with </span><spanclass=cF4>Fs-></span><spanclass=cF0> while </span><spanclass=cF4>Gs-></span><spanclass=cF0> points to a </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l4125"><spanclass=cF4>CCPU</span></a><spanclass=cF0> for the current CPU core. Each task can have just one
<aname="l121"></a>window, but a task can have children with windows. (The segment regs are just used as extra regs -- there is nothing
<aname="l122"></a>segmented about ZealOS' memory.) It is approximately the case that </span><spanclass=cF2>ZealOS</span><spanclass=cF0> is multi-threading, single-processing.
<aname="l124"></a>In </span><spanclass=cF2>ZealOS</span><spanclass=cF0>, </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/Glossary.DD.html#l154"><spanclass=cF4>System Task</span></a><spanclass=cF0> refers to the father of all tasks. He's never supposed to die. Since tasks inherit the symbols of
<aname="l125"></a>parents, system-wide stuff is associated with </span><spanclass=cF2>System</span><spanclass=cF0>. His heap is like kernel memory in other operating systems. Since </span><spanclass=cF2>Syste
<aname="l126"></a>m</span><spanclass=cF0> is immortal, it's safe to alloc objects, not tied to any mortal task, from </span><spanclass=cF2>System</span><spanclass=cF0>'s heap. He stays in a server mode, taking
<aname="l127"></a>requests, so you can ask him to </span><spanclass=cF2>#include</span><spanclass=cF0> something, placing that code system-wide. A funny story is that originally Terry
<aname="l128"></a>Davis called it the </span><spanclass=cF2>root</span><spanclass=cF0> task and even had a </span><spanclass=cF2>/Root</span><spanclass=cF0> directory :-) </span><spanclass=cF2>System</span><spanclass=cF0> executes </span><ahref="https://zeal-operating-system.github.io/ZealOS/StartOS.CC.html#l1"><spanclass=cF4>::/StartOS.CC</span></a><spanclass=cF0> at boot time.
<aname="l130"></a>For easy back-ups, place everything you author in your </span><spanclass=cF2>/Home</span><spanclass=cF0> directory and subdirectories. Then, use </span><ahref="https://zeal-operating-system.github.io/ZealOS/System/BlkDev/ZDiskA.CC.html#l148"><spanclass=cF4>CopyTree</span></a><spanclass=cF0>(). That
<aname="l131"></a>should make upgrading easy, too. Customizable start-up scripts go in your </span><spanclass=cF2>/Home</span><spanclass=cF0> directory. The default start-up scripts are
<aname="l132"></a>in the root directory. Copy the start-up files you wish to customize into </span><spanclass=cF2>/Home</span><spanclass=cF0> and modify them. See </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/GuideLines.DD.html#l29"><spanclass=cF4>Home Files</span></a><spanclass=cF0>. You can
<aname="l133"></a>make your own distro that includes everything and is a bootable live CD with </span><ahref="https://zeal-operating-system.github.io/ZealOS/Misc/DoDistro.CC.html#l1"><spanclass=cF4>::/Misc/DoDistro.CC</span></a><spanclass=cF0>.
<aname="l135"></a>Typically, your usage pattern through the day will be repeatedly left or right clicking on filenames in a cmd line </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/BlkDev/DiskDirB.CC.html#l120"><spanclass=cF4>Dir</span></a><spanclass=cF0>()
<aname="l136"></a>listing. You left-click files to edit them and right-click to </span><spanclass=cF2>#include</span><spanclass=cF0> them. To begin a project, type </span><ahref="https://zeal-operating-system.github.io/ZealOS/System/DolDoc/DocEd.CC.html#l228"><spanclass=cF4>Ed</span></a><spanclass=cF0>("filename");,
<aname="l137"></a>supplying a filename. You can also run programs with </span><spanclass=cF2><F5></span><spanclass=cF0> when in the editor. </span><spanclass=cF2><ESC></span><spanclass=cF0> to save and exit the file. You'll
<aname="l138"></a>need to do a new </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/BlkDev/DiskDirB.CC.html#l120"><spanclass=cF4>Dir</span></a><spanclass=cF0>() cmd, periodically, so make a macro on your PersonalMenu. Access your PersonalMenu by pressing </span><spanclass=cF2><CTRL-m></span><spanclass=cF0>,
<aname="l139"></a>cursoring until you are on top of it and pressing </span><spanclass=cF2><SPACE></span><spanclass=cF0>.
<aname="l140"></a>
<aname="l141"></a></span><spanclass=cF2><CTRL-t></span><spanclass=cF0> toggles plain text mode, showing format commands, a little like viewing html code.
<aname="l142"></a></span><spanclass=cF2><CTRL-l></span><spanclass=cF0> inserts a text widgets.
<aname="l143"></a></span><spanclass=cF2><CTRL-r></span><spanclass=cF0> inserts or edit a graphic sprite resource at cursor location.
<aname="l144"></a></span><spanclass=cF2><CTRL-d></span><spanclass=cF0> brings-up the file manager. It's pretty crappy. Terry found he didn't need it very often, believe it or not.
<aname="l152"></a>The </span><spanclass=cF2>ALT</span><spanclass=cF0> keys are defined in </span><ahref="https://zeal-operating-system.github.io/ZealOS/Home/HomeKeyPlugIns.CC.html#l1"><spanclass=cF4>~/HomeKeyPlugIns.CC</span></a><spanclass=cF0>. You can customize them.
<aname="l158"></a></span><ahref="https://zeal-operating-system.github.io/ZealOS/System/Utils/Find.CC.html#l166"><spanclass=cF4>Find</span></a><spanclass=cF0>() is your best friend. There's a wrapper function called </span><ahref="https://zeal-operating-system.github.io/ZealOS/Home/HomeWrappers.CC.html#l8"><spanclass=cF4>F</span></a><spanclass=cF0>() in your </span><spanclass=cF2>~/HomeWrappers.CC</span><spanclass=cF0> file. Feel free to make wrapper
<aname="l159"></a>functions for functions you use often and customize the args. By the way, </span><ahref="https://zeal-operating-system.github.io/ZealOS/System/Utils/Find.CC.html#l166"><spanclass=cF4>Find</span></a><spanclass=cF0>() or </span><ahref="https://zeal-operating-system.github.io/ZealOS/Home/HomeWrappers.CC.html#l13"><spanclass=cF4>R</span></a><spanclass=cF0>() can be used to replace strings
<aname="l160"></a>across multiple files. You can access </span><ahref="https://zeal-operating-system.github.io/ZealOS/System/Utils/Find.CC.html#l166"><spanclass=cF4>Find</span></a><spanclass=cF0>() using </span><spanclass=cF2><CTRL-SHIFT-f></span><spanclass=cF0>.
<aname="l162"></a>As you browse code, use the </span><spanclass=cF2>AutoComplete</span><spanclass=cF0> window to look-up functions, etc. </span><spanclass=cF2><CTRL-SHIFT-F1></span><spanclass=cF0> (or whatever number) to follow a
<aname="l163"></a>sym to it's source. You can browse deeper and deeper. You go back with </span><spanclass=cF2><SHIFT-ESC></span><spanclass=cF0>.
<aname="l165"></a>Use the </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/HelpIndex.DD.html#l1"><spanclass=cF4>Help & Index</span></a><spanclass=cF0> or </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/DemoIndex.DD.html#l1"><spanclass=cF4>Demo Index</span></a><spanclass=cF0> to find-out what exists. Press </span><spanclass=cF2><F1></span><spanclass=cF0> for help or use the links on your menu (</span><spanclass=cF2><CTRL-m></span><spanclass=cF0>). Al
<aname="l166"></a>so, look in the </span><spanclass=cF2>/Demo</span><spanclass=cF0> or </span><spanclass=cF2>/Apps</span><spanclass=cF0> directories for inspiration.
<aname="l168"></a>Software is distributed as </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/RedSea.DD.html#l1"><spanclass=cF4>RedSea</span></a><spanclass=cF0> ISO files. Burn a CD/DVD, or set your CD/DVD in </span><spanclass=cF2>QEMU</span><spanclass=cF0>, </span><spanclass=cF2>VMware</span><spanclass=cF0> or </span><spanclass=cF2>VirtualBox</span><spanclass=cF0> to the ISO file.
<aname="l169"></a> Then, access the </span><spanclass=cF2>'T'</span><spanclass=cF0> drive. Or, </span><ahref="https://zeal-operating-system.github.io/ZealOS/System/BlkDev/Mount.CC.html#l301"><spanclass=cF4>Mount</span></a><spanclass=cF0>() the ISO.C file and access the </span><spanclass=cF2>'M'</span><spanclass=cF0> drive in ZealOS. It must be a contiguous ISO.C
<aname="l173"></a>whole </span><spanclass=cF2>'C'</span><spanclass=cF0> drive can be copied quickly to </span><spanclass=cF2>'D'</span><spanclass=cF0>. Also, the </span><ahref="https://zeal-operating-system.github.io/ZealOS/System/BlkDev/FileMgr.CC.html#l678"><spanclass=cF4>FileMgr</span></a><spanclass=cF0>() </span><spanclass=cF2><CTRL-d></span><spanclass=cF0> starts too slowly when there are lots of hard
<aname="l176"></a>3rd party libraries are banned, since they circumvent the 100,000 line of code limit in the </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/Charter.DD.html#l1"><spanclass=cF4>ZealOS Charter</span></a><spanclass=cF0>. All applications