organize help

This commit is contained in:
nakst 2021-12-26 11:57:33 +00:00
parent 8867d8686a
commit 81e70f29e5
8 changed files with 199 additions and 185 deletions

149
README.md
View File

@ -58,151 +58,4 @@ Desktop
## Building ## Building
**Warning: This software is still in development. Expect bugs.** See `help/Building.md` for a description of how to build and test the system.
### Linux
Download this project's source.
git clone --depth=1 https://gitlab.com/nakst/essence.git/
Start the build system.
./start.sh
Follow the on-screen instructions to build a cross compiler.
Once complete, you can test the operating system in an emulator.
* If you have Qemu and KVM installed, run `k` in the build system. **Recommended!**
* If you have Qemu installed, run `t2` in the build system.
* If you have VirtualBox installed, make a 128MB drive called `vbox.vdi` in the `bin` folder, attach it to a virtual machine called "Essence" (choose "Windows 7 64-bit" as the OS), and run `v` in the build system.
Run `build-port` in the build system to view a list of optional ports that can be built.
## Configuration
From within the build system, run the command `config` to open the configuration editor. Click an option to change its value, and then click the `Save` button. You changes are saved locally, and will not be uploaded by Git. Not all configurations are likely to work; if you don't know what you're doing, it's probably best to stick with the defaults.
### Keyboard layout
To set the default keyboard layout for use in the emulator to match your current one, run:
setxkbmap -query | grep layout | awk '{OFS=""; print "General.keyboard_layout=", $2}' >> bin/config.ini
## Generating the API header
If you want your project to target Essence, you need to generate the API header for your programming language of choice.
g++ -o bin/build_core util/build_core.c
bin/build_core headers <language> <path-to-output-file>
Currently supported languages are 'c' (also works for C++), 'zig' and 'odin'.
There is currently no documentation for the API; for examples of how to use the API, consult the standard applications in the `apps/` folder of the source tree. Minimal sample applications are placed in the `apps/samples` folder. By placing your application's `.ini` file in the `apps/` folder, it will be automatically built by the build system.
## TODO
**This list is incomplete!**
- Applications
- PDF viewer
- Media player
- Automator
- Web browser
- Desktop environment
- Alt-tab
- Saving application state on shut down
- Task list popup
- Add more settings, and organize them
- Print screen key
- Storing images in the clipboard
- Combined search and Lua REPL
- Clipboard viewer
- Improved color eyedropper
- File Manager
- Deleting files
- Improving thumbnail storage
- Property store
- Searching
- Search indexing
- Tagging; metadata
- Tracking source of files
- Localizing system folder names
- Previewing other file types
- Filtering
- Multi-rename
- Compressed archives
- Creating new files
- Automation
- Grouping
- GUI
- Drag and drop
- Keyboard navigation in menus
- Date/time entry
- Tokens in textbox
- Right-to-left layout
- Accessibility hooks (e.g. for a screen reader)
- Choice boxes
- Resizable scrollbars
- Asynchronously painted element
- Reorder lists
- Dialogs as separate windows
- File dialogs
- Textbox auto-complete
- Media display
- Progress bars
- Dockable UI
- Charts
- Gauges
- Password editor
- Scrollbar animations
- Scaling at the paint level (as well as layout)
- Simpler control of line clipping in `EsTextDisplay`
- Fast scroll
- Keeping items anchored when resizing
- Instance reference counting
- Text rendering
- Variable font support
- Fix custom font renderer
- Unicode bidirectional text algorithm
- Unicode vertical text layout algorithm
- OpenType features
- Grapheme splitter (for textbox)
- Fallback fonts for unsupported languages
- Consistent font size specification
- API
- Date/time
- 2D graphics
- Tweening
- Media decoding
- Debugging other processes
- `io_uring`-like file access
- String sorting; normalization; case conversion
- Shared code
- Better heap allocator
- Faster rendering routines
- Color spaces
- Theming
- Dark theme
- High contrast theme
- Bitmapped font
- Kernel
- Networking protocol implementation
- Networking hardware drivers
- Rewrite audio layer
- Asynchronous IO
- Better IPC messaging
- Double fault handler
- `x86_32` support
- ARM support
- Graphics card drivers
- Support for USB 3.0 devices
- OHCI/UHCI/EHCI drivers
- USB hub support
- Built-in debugger
- Decrease startup time
- Decrease memory usage
- Shared memory permissions
- Proper worker threads
- Read-write file systems: FAT, ext4, NTFS
- Documentation!

53
help/Building.md Normal file
View File

@ -0,0 +1,53 @@
# Building Essence
**Warning: This software is still in development. Expect bugs.**
## Linux
These instructions expect you to be running an updated modern Linux distribution. See below for additional information about specific distributions.
Download this project's source.
git clone --depth=1 https://gitlab.com/nakst/essence.git/
Start the build system.
./start.sh
Follow the on-screen instructions to build a cross compiler.
Once complete, you can test the operating system in an emulator.
* If you have Qemu and KVM installed, run `k` in the build system. **Recommended!**
* If you have Qemu installed, run `t2` in the build system.
* If you have VirtualBox installed, make a 128MB drive called `vbox.vdi` in the `bin` folder, attach it to a virtual machine called "Essence" (choose "Windows 7 64-bit" as the OS), and run `v` in the build system.
Run `build-port` in the build system to view a list of optional ports that can be built.
### Arch Linux
You can install all the needed dependencies with `sudo pacman -S base-devel curl nasm gmp mpfr mpc ctags qemu`. Run `./start k` to build and run the system in Qemu.
### Fedora Linux
You can install all the needed dependencies with `dnf install nasm gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel`. Run `./start k` to build the system. Then run `qemu-kvm bin/drive` to launch the built image in Qemu.
## Configuration
From within the build system, run the command `config` to open the configuration editor. Click an option to change its value, and then click the `Save` button. You changes are saved locally, and will not be uploaded by Git. Not all configurations are likely to work; if you don't know what you're doing, it's probably best to stick with the defaults.
### Keyboard layout
To set the default keyboard layout for use in the emulator to match your current one, run:
setxkbmap -query | grep layout | awk '{OFS=""; print "General.keyboard_layout=", $2}' >> bin/config.ini
## Generating the API header
If you want your project to target Essence, you need to generate the API header for your programming language of choice.
gcc -o bin/build_core util/build_core.c
bin/build_core headers <language> <path-to-output-file>
Currently supported languages are 'c' (also works for C++), 'zig' and 'odin'.
Documentation for the API is still a work in progress. For examples of how to use the API, consult the standard applications in the `apps/` folder of the source tree. Minimal sample applications are placed in the `apps/samples` folder. By placing your application's `.ini` file in the `apps/` folder, it will be automatically built by the build system.

View File

@ -42,7 +42,7 @@ Variable names are usually descriptive, but sometimes shortened names are used f
EsMessage m = {}; EsMessage m = {};
m.type = OS_MESSAGE_MEASURE; m.type = OS_MESSAGE_MEASURE;
EsMessagePost(&m); EsMessagePost(&m);
Operators are padded with spaces on either side. Operators are padded with spaces on either side.
@ -53,23 +53,8 @@ A space should be placed between a cast and its expression.
int x = (float) y; int x = (float) y;
Although the operating system is written in C++, most C++ features are avoided. Although the operating system is written in C++, most C++ features are avoided.
However, the kernel uses a lot of member functions. However, the kernel uses a lot of member functions; this is being phased out.
struct Window {
void Update(bool fromUser);
void SetCursorStyle(OSCursorStyle style);
void NeedWMTimer(int hz);
void Destroy();
bool Move(OSRectangle &newBounds);
void ClearImage();
Mutex mutex; // Mutex for drawing to the window. Also needed when moving the window.
Surface *surface;
OSPoint position;
size_t width, height;
...
}
Default arguments often provided as functions grow over time. Default arguments often provided as functions grow over time.
There is no limit on function size. However, you should avoid regularly exceeding 120 columns. There is no limit on function size. However, you should avoid regularly exceeding 120 columns.
@ -111,18 +96,18 @@ The following subroutines may be of interest:
Synchronisation: Synchronisation:
void Mutex::Acquire(); void KMutexAcquire();
void Mutex::Release(); void KMutexRelease();
void Mutex::AssertLocked(); void KMutexAssertLocked();
void Spinlock::Acquire(); // Disables interrupts. void KSpinlockAcquire(); // Disables interrupts.
void Spinlock::Release(); void KSpinlockRelease();
void Spinlock::AssertLocked(); void KSpinlockAssertLocked();
bool Event::Set(); bool KEventSet();
void Event::Reset(); void KEventReset();
bool Event::Pool(); bool KEventPool();
bool Event::Wait(uintptr_t timeoutMs); // Return false on timeout. bool KEventWait(uintptr_t timeoutMs); // Return false on timeout.
// event.autoReset determines whether the event will automatically reset after Poll() or Wait() return. // event.autoReset determines whether the event will automatically reset after Poll() or Wait() return.
Linked lists: Linked lists:
@ -143,13 +128,3 @@ Linked lists:
LinkedList<T> *list; // The list the item is in. LinkedList<T> *list; // The list the item is in.
T *thisItem; // A pointer to the item itself. T *thisItem; // A pointer to the item itself.
} }
## Contributors
Put your name here!
- nakst
- Brett R. Toomey
- vtlmks
- Aleksander Birkeland

25
help/Credits.md Normal file
View File

@ -0,0 +1,25 @@
# Credits
Thank you to all the people who have contributed to Essence!
## Contributors
Put your name here!
- nakst
- Brett R. Toomey
- vtlmks
- Aleksander Birkeland
## Included projects
Licenses for included projects may be found in the following files:
- `util/nanosvg.h`
- `util/hsluv.h`
- `shared/stb_image.h`, `shared/stb_sprintf.h`, `shared/stb_ds.h` and `util/stb_truetype.h`
- `res/Fonts/Hack License.txt`, `res/Fonts/Inter License.txt`
- `res/Icons/elementary Icons License.txt`
- `res/Sample Images/Licenses.txt`
- `res/Keyboard Layouts/License.txt`
- Ported applications have their licenses in their respective folders in `ports/`.

View File

@ -1,3 +1,5 @@
# Source map
This file contains a list and description of the files and folders in the source tree. This file contains a list and description of the files and folders in the source tree.
- `apps/` Builtin applications. Each application has an `.ini` file that is automatically detected by the build system. - `apps/` Builtin applications. Each application has an `.ini` file that is automatically detected by the build system.

106
help/TODO.md Normal file
View File

@ -0,0 +1,106 @@
# TODO
**This list is incomplete!**
- Applications
- PDF viewer
- Media player
- Automator
- Web browser
- Desktop environment
- Alt-tab
- Saving application state on shut down
- Task list popup
- Add more settings, and organize them
- Print screen key
- Storing images in the clipboard
- Combined search and Lua REPL
- Clipboard viewer
- Improved color eyedropper
- File Manager
- Deleting files
- Improving thumbnail storage
- Property store
- Searching
- Search indexing
- Tagging; metadata
- Tracking source of files
- Localizing system folder names
- Previewing other file types
- Filtering
- Multi-rename
- Compressed archives
- Creating new files
- Automation
- Grouping
- GUI
- Drag and drop
- Keyboard navigation in menus
- Date/time entry
- Tokens in textbox
- Right-to-left layout
- Accessibility hooks (e.g. for a screen reader)
- Choice boxes
- Resizable scrollbars
- Asynchronously painted element
- Reorder lists
- Dialogs as separate windows
- File dialogs
- Textbox auto-complete
- Media display
- Progress bars
- Dockable UI
- Charts
- Gauges
- Password editor
- Scrollbar animations
- Scaling at the paint level (as well as layout)
- Simpler control of line clipping in `EsTextDisplay`
- Fast scroll
- Keeping items anchored when resizing
- Instance reference counting
- Text rendering
- Variable font support
- Fix custom font renderer
- Unicode bidirectional text algorithm
- Unicode vertical text layout algorithm
- OpenType features
- Grapheme splitter (for textbox)
- Fallback fonts for unsupported languages
- Consistent font size specification
- API
- Date/time
- 2D graphics
- Tweening
- Media decoding
- Debugging other processes
- `io_uring`-like file access
- String sorting; normalization; case conversion
- Shared code
- Better heap allocator
- Faster rendering routines
- Color spaces
- Theming
- Dark theme
- High contrast theme
- Bitmapped font
- Kernel
- Networking protocol implementation
- Networking hardware drivers
- Rewrite audio layer
- Asynchronous IO
- Better IPC messaging
- Double fault handler
- `x86_32` support
- ARM support
- Graphics card drivers
- Support for USB 3.0 devices
- OHCI/UHCI/EHCI drivers
- USB hub support
- Built-in debugger
- Decrease startup time
- Decrease memory usage
- Shared memory permissions
- Proper worker threads
- Read-write file systems: FAT, ext4, NTFS
- Write documentation