203 lines
5.8 KiB
Markdown
203 lines
5.8 KiB
Markdown
# DVX Shell Applications
|
|
|
|
DXE3 application modules for the DVX Shell. Each app is a `.app` file
|
|
(DXE3 shared object) in a subdirectory under `apps/`. The Program
|
|
Manager scans this directory at startup and displays all discovered
|
|
apps as launchable icons.
|
|
|
|
|
|
## DXE App Contract
|
|
|
|
Every app exports two symbols:
|
|
|
|
* `appDescriptor` (`AppDescriptorT`) -- name, hasMainLoop, multiInstance, stackSize, priority
|
|
* `appMain` (`int appMain(DxeAppContextT *)`) -- entry point
|
|
|
|
Optional: `appShutdown` (`void appShutdown(void)`) -- called during
|
|
graceful shutdown.
|
|
|
|
### Callback-Only Apps (hasMainLoop = false)
|
|
|
|
`appMain()` creates windows, registers callbacks, and returns 0. The
|
|
shell drives everything through event callbacks. No dedicated task or
|
|
stack is allocated. Lifecycle ends when the last window closes.
|
|
|
|
### Main-Loop Apps (hasMainLoop = true)
|
|
|
|
A cooperative task is created for the app. `appMain()` runs its own
|
|
loop calling `tsYield()` to share CPU. Lifecycle ends when `appMain()`
|
|
returns.
|
|
|
|
|
|
## Applications
|
|
|
|
### Program Manager (progman)
|
|
|
|
| | |
|
|
|---|---|
|
|
| File | `apps/progman/progman.app` |
|
|
| Type | Callback-only |
|
|
| Multi-instance | No |
|
|
|
|
The desktop app. Scans `apps/` recursively for `.app` files and
|
|
displays them in a grid. Double-click or Enter launches an app.
|
|
Includes a Help menu with system information dialog and About box.
|
|
|
|
Registers with `shellRegisterDesktopUpdate()` to refresh when apps
|
|
are loaded, crash, or terminate.
|
|
|
|
Widget headers used: `widgetBox.h`, `widgetButton.h`, `widgetLabel.h`,
|
|
`widgetStatusBar.h`, `widgetTextInput.h`.
|
|
|
|
### Notepad (notepad)
|
|
|
|
| | |
|
|
|---|---|
|
|
| File | `apps/notepad/notepad.app` |
|
|
| Type | Callback-only |
|
|
| Multi-instance | Yes |
|
|
|
|
Text editor with File menu (New, Open, Save, Save As) and Edit menu
|
|
(Cut, Copy, Paste, Select All). Uses the TextArea widget for all
|
|
editing. 32KB text buffer limit. Tracks dirty state for save prompts.
|
|
Keyboard accelerators for all menu commands.
|
|
|
|
Widget headers used: `widgetTextInput.h`.
|
|
|
|
### Clock (clock)
|
|
|
|
| | |
|
|
|---|---|
|
|
| File | `apps/clock/clock.app` |
|
|
| Type | Main-loop |
|
|
| Multi-instance | Yes |
|
|
|
|
Digital clock display showing time and date. Demonstrates the main-loop
|
|
app pattern -- polls the system clock every second and invalidates the
|
|
window to trigger a repaint. Uses raw `onPaint` callbacks (no widgets)
|
|
to draw centered text.
|
|
|
|
Widget headers used: none (raw paint callbacks).
|
|
|
|
### DVX Demo (dvxdemo)
|
|
|
|
| | |
|
|
|---|---|
|
|
| File | `apps/dvxdemo/dvxdemo.app` |
|
|
| Type | Callback-only |
|
|
| Multi-instance | No |
|
|
|
|
Comprehensive widget system showcase. Opens multiple windows
|
|
demonstrating 31 of the 32 widget types (all except Timer):
|
|
|
|
* Main window: raw paint callbacks (gradients, patterns, text)
|
|
* Widget demo: form widgets (TextInput, Checkbox, Radio, ListBox)
|
|
* Controls window: TabControl with tabs for advanced widgets
|
|
(Dropdown, ProgressBar, Slider, Spinner, TreeView, ListView,
|
|
ScrollPane, Toolbar, Canvas, Splitter, Image)
|
|
* Terminal window: AnsiTerm widget
|
|
|
|
Widget headers used: 25 of the 26 widget headers (all except widgetTimer.h).
|
|
|
|
Resources: `logo.bmp`, `new.bmp`, `open.bmp`, `sample.bmp`, `save.bmp`.
|
|
|
|
### Control Panel (cpanel)
|
|
|
|
| | |
|
|
|---|---|
|
|
| File | `apps/cpanel/cpanel.app` |
|
|
| Type | Callback-only |
|
|
| Multi-instance | No |
|
|
|
|
System configuration with four tabs:
|
|
|
|
* **Mouse** -- scroll direction, double-click speed, acceleration
|
|
* **Colors** -- all 20 system colors with live preview, theme load/save
|
|
* **Desktop** -- wallpaper image selection and display mode
|
|
* **Video** -- resolution and color depth switching
|
|
|
|
Changes preview live. OK saves to `DVX.INI`, Cancel reverts to the
|
|
state captured when the control panel was opened.
|
|
|
|
Widget headers used: `widgetBox.h`, `widgetButton.h`, `widgetCanvas.h`,
|
|
`widgetDropdown.h`, `widgetLabel.h`, `widgetListBox.h`, `widgetSlider.h`,
|
|
`widgetSpacer.h`, `widgetTabControl.h`.
|
|
|
|
### Image Viewer (imgview)
|
|
|
|
| | |
|
|
|---|---|
|
|
| File | `apps/imgview/imgview.app` |
|
|
| Type | Callback-only |
|
|
| Multi-instance | Yes |
|
|
|
|
Displays BMP, PNG, JPEG, and GIF images. The image is scaled to fit
|
|
the window while preserving aspect ratio. Resize the window to zoom.
|
|
Open files via the File menu or by launching with Run in the Task
|
|
Manager.
|
|
|
|
Widget headers used: none (raw paint callbacks with `dvxLoadImage()`).
|
|
|
|
|
|
### DVX BASIC (dvxbasic)
|
|
|
|
| | |
|
|
|---|---|
|
|
| File | `apps/dvxbasic/dvxbasic.app` |
|
|
| Type | Callback-only |
|
|
| Multi-instance | No |
|
|
|
|
Visual Basic 3 clone with form designer, per-procedure code editor,
|
|
project management, and stack-based bytecode compiler/VM. Supports
|
|
event-driven programming with visual forms, controls, and a full
|
|
BASIC language implementation.
|
|
|
|
See `apps/dvxbasic/README.md` for detailed documentation.
|
|
|
|
Also builds `basrt.lib` -- the BASIC runtime library (VM + values)
|
|
as a separate DXE so compiled BASIC apps can use it independently.
|
|
|
|
|
|
## Build
|
|
|
|
```
|
|
make # builds all 7 app DXE modules
|
|
make clean # removes objects and app files
|
|
```
|
|
|
|
Each app compiles to a single `.o` (or multiple for DVX BASIC),
|
|
then is packaged via `dxe3gen` into a `.app` DXE exporting
|
|
`appDescriptor` and `appMain`.
|
|
|
|
Output goes to `bin/apps/<name>/<name>.app`.
|
|
|
|
|
|
## Files
|
|
|
|
```
|
|
apps/
|
|
Makefile top-level build for all apps
|
|
progman/
|
|
progman.c Program Manager
|
|
notepad/
|
|
notepad.c text editor
|
|
clock/
|
|
clock.c digital clock
|
|
dvxdemo/
|
|
dvxdemo.c widget demo
|
|
logo.bmp DVX logo bitmap
|
|
new.bmp toolbar icon
|
|
open.bmp toolbar icon
|
|
sample.bmp sample image
|
|
save.bmp toolbar icon
|
|
cpanel/
|
|
cpanel.c control panel
|
|
imgview/
|
|
imgview.c image viewer
|
|
dvxbasic/
|
|
compiler/ BASIC compiler (lexer, parser, codegen)
|
|
runtime/ VM and value system
|
|
formrt/ form runtime (BASIC <-> DVX widgets)
|
|
ide/ IDE (editor, designer, project, properties)
|
|
samples/ sample .bas, .frm, .dbp files
|
|
```
|