C64 OS USER'S GUIDE
Chapter 4: The User Interface
C64 OS is an immersive computing environment. Once you boot into C64 OS, you can move from Application to Application, performing different tasks and managing your computer's hardware and resources, without having to shutdown or restart your computer.
As soon as C64 OS has booted, the mouse pointer becomes active. The mouse allows you to select text, drag things to move and arrange them, and click on buttons and other user interface controls to change tabs, resize screen areas, select between options, scroll through content, and start and stop processes. With the mouse you can also choose options from the pull-down menus to command and control the many features in C64 OS Applications.
In addition to mouse input, C64 OS has rich and extensive support for keyboard input. The keyboard can be used to make selections, input text, flip pages, scroll lists, change tabs, copy and paste data to and from the clipboard, and trigger the most frequently used menu options.
This chapter gives you an overview of the common elements of the C64 OS user interface, the menu bar, status bar and toolkit controls. C64 OS is intuitive and easy-to-use, but there are also many power-user features that can make your interaction with your C64 faster and more efficient.
The Menu Bar
The menu bar is a central user interface element of C64 OS.
The menu bar runs along the top edge of the screen and provides snappy, pull-down, hierarchical menus with configurable multi-modifier keyboard shortcuts. Menu options are used to open Utilities, send commands and toggle options in Applications. The menu bar is divided into three main sections. The Utilities menu is on the left, the Application's menus are in the middle, and the time is optionally displayed on the right end.
To activate the menus, press and hold either mouse button while the mouse pointer is over the menu bar. As you pass the mouse over a top-level menu option, its submenu drops down automatically. If you roll onto another a menu option, its submenu drops down and the the previous submenu automatically snaps shut. Multiple levels of nested submenus are supported. Menu options change to a highlighted color while the mouse pointer is over them, to help you know which one will be selected. Release the mouse button to select the highlighted option and close the menus.
Depending on the state of the Application, some menu options appear in a disabled color. Disabled menu options do not highlight when you mouse over them, and they cannot be selected either with the mouse or with their corresponding keyboard shortcut.
Menu options can also display a checkmark to the left of their title. A checkmark indicates that the menu option is active.
To the right of a menu option's title text may appear an optional keyboard shortcut. Keyboard shortcuts are expressed by a series of one or more modifier key symbols followed by a letter, number of symbol key. The modifier keys are SHIFT, CONTROL, and COMMODORE. Either shift key, including the Shift Lock key, can be used to form a modifier combination for the menu shortcuts.
To trigger a keyboard shortcut, the menu option must be enabled. Press and hold the specified modifier keys concurrently and then press the specified letter, number or symbol key. The top-level menu option, under which the triggered menu option is found, highlights briefly to provide feedback that the keyboard shortcut had an effect.
The Utilities Menu
From the leftmost end of the menu bar you can open the Utilities menu.
The Utilities menu works much like the rest of the menu bar. When the menus are open you can roll the mouse pointer between it and the Application's menus, and they open and close the same way. The Utilities menu can also contain submenus and its menu options can have keyboard shortcuts. However, options selected from the Utilities menu do not send commands to the Application the way normal menu options do. Instead, they open the Utility whose name is the title of the menu option.
The Utilities menu is managed by the system. Its contents and organization are customizable, but that content stays the same as you change from one Application to the next. Typically the Utilities found in the Utilities menu are ones that are useful to have access to from within any other Application. For example, it would be useful to have access to the Calculator at any time.
Other Utilities found in the Utilities menu, in the default configuration, include:
|About This App||
Shows information about the current Application.
Such as its version number, author and copyright
year, as well as the Application's icon.
Gives access to a number of other C64 OS Utilities
that are geared around managing system settings and
Shows a list of all installed Utilities. With this
Utility available, it is possible to get access to
every installed Utility from within any Application.
Access to a calculator from within any Application
is handy. Numbers can be copied and pasted between
the Application and the Calculator.
The Clipboard Utility gives you a preview of what
data is currently stored on the clipboard, including
its data type, byte size and date/time stamp.
The contents of the Utilities menu are specified in the file:
See the C64 OS Programmer's Guide, for more information about how to customize a menu definitions file.
The Application's Menus
All of the remaining top-level menu options, following the leftmost option for the Utilities menu, are provided by the current Application.
Each Application contains a menu definitions file within its bundle directory. An Application's menus are constructed automatically when the Application is launched. This means that the contents of the menu bar, for the Application's menus, changes depending on the Application that is currently running.
The Application controls which menu options are enabled or disabled and which ones show the active checkmark, by responding to menu enquiry messages. Each menu option, whether it is selected with the mouse or triggered by its keyboard shortcut, sends a unique action code to the Application via a menu command message.
There are several advantages to the separation of the menu structure and the Application receiving menu enquiry and command messages:
- It opens the future possibility of translating menu definition files to other languages.
- Advanced or beta features may be concealed by removing their entries from the menus.
- Menus may be rearranged and keyboard shortcuts may be reassigned without changing the Application.
- Messages can be sent programmatically, allowing a script or other program to control a C64 OS Application.
For more information about how to customize a menu definitions file and the structure of an Application's bundle directory see the C64 OS Programmer's Guide.
The Date and Time
On the right side of the menu bar is the time. The system date and time is configured during boot up by one of several realtime clock drivers.
The display of the menu bar clock can be customized for 12 or 24 hour mode, and the colon can be configured to blink each second or remain solid. C64 OS can be configured to hide the menu bar clock by default after a fresh boot up. You can toggle the menu bar clock on and off at any time by holding the COMMODORE key and clicking on the right end of the menu bar. Hiding the clock provides more horizontal room for Application menus.
When the clock is displayed it can be double-clicked to open a Utility.
The Time Utility is used to customize settings of the menu bar clock and to assign which Utility is opened when the clock is double-clicked. The options are to open the Time Utility or the Today Utility.
In addition to letting you customize the settings of the clock, the Time Utility also provides a stopwatch and timer.
Today is a simple calendar that shows an overview of one month at a times. Notes can be added to individual dates.
See Chapter 7: Utilities for more information about the Time and Today Utilities.
Special Menu Bar Options
The entire menu bar may be hidden or shown, either programmatically, (for example, an Application may choose to automatically hide the menu bar,) or at any time with the system-wide keyboard shortcut:
This keyboard command can be customized using the C64 OS Configure Tool.
Hiding the menu bar opens up more screen real estate. When the menu bar's visibility is toggled the Application responds by dynamically adapting the user interface to fit the available screen space.
The Status Bar
The second most central user interface element of C64 OS is the status bar.
The status bar runs along the bottom edge of the screen, and always floats above other content. The status bar provides useful information at a glance, including available main memory, last accessed drive status message, selected file count, path to open or selected file and more. The status bar has three modes:
- Drive Status mode
- Open or Selected File mode, and
- Application Custom Message mode.
Not every mode is available in every Application. Click once anywhere on the left side of the status bar to cycle it to the next available mode.
In drive status mode the status bar is divided into two sections. The main section on the left shows the most recent status message from the last accessed drive. The right end shows the currently available main memory.
The status message is mostly in the same format as the drive returns it, except that the device number followed by a colon appears before it. That tells you which device this status message comes from.
IDE64 Technical Note
Most Commodore 64 drives output their status message in the format:
00,message text here,00,00
But IDE64 outputs a longer status in the format:
00,message text here,000,000,000,000
C64 OS only shows the least significant 2 digits of the first two status numbers following the textual message. This captures the most relevant information while keeping the format the same as other C64 drives.
Open or Selected File
C64 OS provides a standard way for Applications to indicate which file is currently open or selected. For example, a text editor can indicate the file it is currently editing, and an image viewer can indicate the file of a picture you are currently viewing.
If an Application presents a directory of files, such as the File Manager, it can indicate which file is selected. This standardized mechanism enables other processes to act or operate on that file. The status bar in open or selected file mode is an example of just that. The status bar shows the name and location of the file that the Application indicates is open or selected.
In this mode, the main left section of the status bar shows the file in the C64 OS standard file reference format. The section on the right end of the status bar shows the currently available main memory.
If the Application does not have any file open or selected, the status bar automatically skips this mode and cycles into the next available mode.
The standard file reference format is as follows:
For more information about C64 OS file references, see Chapter 8: File System → File References.
Application Custom Message
Each Application may optionally support a custom status message. If no custom message is provided by the Application, cycling the status bar skips over this mode.
In this mode the currently available main memory is not displayed, and instead the entire width of the status bar is available for the Application's custom use.
The Application changes its status message at any time. It is used by File Manager and App Launcher to state how many files have been selected, or to show temporary messages. A text editor could use a custom status to show word count, line count, or the current row and column of the cursor.
Applications can use the custom message mode to display all variety of information such as:
- The Application's name
- The number of selected files
- The number of lines or words in a text file
- Some metadata about an open file
Special Status Bar Options
The entire status bar may be hidden or shown, either programmatically, (for example, an Application may choose to automatically hide the status bar,) or at any time with the system-wide keyboard shortcut:
This keyboard command can be customized using the C64 OS Configure Tool.
Hiding the status bar opens up more screen real estate. When the status bar's visibility is toggled the Application responds by dynamically adapting the user interface to fit the available screen space.
The currently available main memory indicator can be configured to show free memory as either kilobytes or 256-byte pages. Showing in kilobytes may be more comfortable for users of modern computers, but it is slightly less accurate than pages. Additionally, the File Manager lists file sizes in disk blocks and a disk block is roughly the same size as a memory page. For these reasons, although kilobytes may feel more comfortable at first, you should consider trying to get used to showing the memory in pages.
When the available main memory is displayed it can be double-clicked to open a Utility. Which Utility gets opened can be customized, but by default C64 OS opens the Memory Utility. Memory shows a visual overview of how main memory is currently allocated, using a color-coded key to indicate several different allocation types.
See Chapter 7: Utilities for more information about the Memory Utility.
Splitscreen and Fullscreen Graphics Mode
C64 OS's main user interface is based on the VIC-II's character mode. A custom character set enables visual elements to be used to build up a graphical user interface. The VIC-II's character mode is incredibly fast, which is why it is used in arcade games to provide fast and smooth fullscreen scrolling.
However, there are times when an Application needs to display bitmapped graphics. One example is to show a picture. Splitting the screen on a C64 requires notoriously tricky and precise timing, but C64 OS's KERNAL and status bar have low-level features which—in conjunction with a graphics library—provide Applications an easy-to-implement splitscreen mode.
Splitscreen mode allows the top portion of the screen to display the C64 OS primary user interface, while the bottom portion of the screen displays bitmap graphics in either HiRes or Multi-Color mode. When graphics data is available, you can simply click and drag the status bar up from the bottom of the screen, and put it on any screen row, all the way up until the status bar meets the menu bar.
The status bar continues to work exactly as before, but in a new position partway up the screen. The bitmap graphics display immediately below the status bar, to the bottom of the screen.
In addition to splitscreen mode, whenever graphics data is available, you may toggle between splitscreen mode and fullscreen graphics mode using a system-wide keyboard shortcut:
This keyboard command can be customized using the C64 OS Configure Tool.
When toggling out of fullscreen graphics mode, the split is restored to exactly where you left it, including the split mode being fully closed.
In order for splitscreen or fullscreen graphics mode to be active, the Application configures special system properties that specify the location and format of the bitmap data. If these properties change to indicate that bitmap data is no longer available, the system automatically switches out of fullscreen graphics mode and snaps the splitscreen shut, moving the status bar back down to the bottom of the screen.
Splitscreen and fullscreen graphics mode cannot be used simultaneously with a C64 OS Utility. Due to memory constraints, Utilities are loaded into the bitmap memory area. When a Utility is opened, C64 OS toggles out of fullscreen bitmap mode and shuts the splitscreen mode automatically.
When the Utility is closed, the Application is sent a message and can reconfigure the bitmap graphics pointers, but the splitscreen is not automatically reopened.
When in splitscreen mode the user interface visible above the split, including the menu bar and status bar, is fully active and can be interacted with as normal. Additionally, bitmap graphical content displayed below the split is not limited to showing a static image. Interactive bitmap content can be displayed below the split, allowing for both mouse and keyboard input.
In the examples above, the menu is shown selecting an optional game controller driver for use in the NESTester Application with splitscreen mode active. And in fullscreen mode, you can click on the port buttons to change which control port is being tested. Pushing buttons on the gamepad controller (or any joystick) highlights the button or buttons being pressed in the bitmap image.
In the examples below, the Chess Application shows that bitmap graphics can offer significant mouse interaction. Whether in splitscreen or in fullscreen graphics mode, you can click on a chess piece, its available valid moves and the pieces it can take are highlighted, and you can drag the piece around the board to drop it in its desired place.
The Status Bar and Splitscreen Mode
Applications can change state at any time. An Application could make bitmap graphics available at one time and unavailable at another time, depending on the sensible behavior for what that Application does. This could leave you uncertain about when splitscreen mode is and is not available.
To help you out, whenever splitscreen mode is available the status bar shows an up arrow icon next to the available memory icon. The up arrow is a reminder that you can grab the status bar and drag it up to reveal what is behind the main user interface.
Note that this extra status icon is only visible when the available memory is visible. It is, therefore, not visible when the status bar is in the Application Custom Message mode.
Applications and Utilities
An operating system is, among other things, a software platform. In C64 OS there are two kinds of programs. There are Applications (with a capital A when referring to a proper C64 OS Application), and there are Utilities (again, with a capital U to distinguish proper C64 OS Utilities from ordinary utilities for other platforms.)
Applications run in fullscreen mode extending from the menu bar to the status bar. They provide a set of menus which are used to control the Application's functions. And they often integrate with the status bar by providing it custom content. There is always one Application running.
Concurrently with the Application, C64 OS may optionally run one Utility. Utilities, typically, run within a movable panel that floats above the Application's user interface. Some Utilities are fully self-serving, providing you with some useful functionality, such as a calculator, a calendar or a stopwatch. Other Utilities are designed to interact more closely with the Application, providing it supplementary services, such as a color picker, a date picker or a word counter.
After booting up you are taken to Homebase, either App Launcher or File Manager, whichever one you were in last. Both are considered Homebase and you can switch between them via an option in the Go menu. From Homebase you can launch an Application. To leave an Application, choose Go Home from its menu options, or use the standard keyboard shortcut:
Although a Utility can be run concurrently with an Application, when you switch Applications any Utility that is open is first closed.
Applications and Utilities automatically save and restore their state. This greatly eases the pain of switching between them. When you open them up again, they bring you right back to where you left off.
Useful Information About Applications
Most Applications are installed in the Applications directory in the system directory.
Some Applications are critical to the functioning of C64 OS and must not be uninstalled. To separate these important service Applications from the others, they are installed in the services directory in the system directory.
Applications are composed of a structured directory bundle. The directory bundle is named for the Application and contains a standardized set of resources, including:
- a main executable
- an initialization executable
- an icon
- a menu definitions file
- an about metadata file
- state and configuration files
- help files, and other resources
To install a new Application, its bundle directory need only be copied to the system's Applications directory. To uninstall an Application, its bundle directory can either be scratched or moved to some other place. Because an Application's resources are all contained within its bundle, nothing is left behind after uninstalling it.
Applications may programmatically open Utilities, and can also pass a message to a Utility to be processed immediately upon opening. This enables Applications to offload many of their common features to Utilities, and allows standard Utilities to be shared by many Applications.
When an Application is loading, the loading screen (above, left) is shown. This shows the Application's icon and the path where the Application is installed.
Useful Information About Utilities
All installed Utilities are found in the Utilities directory in the system directory.
Utilities are much simpler than Applications. A Utility does not have a bundle directory and consists of just a single file.
If a Utility is open when another one is called to be opened, the first saves its state and then closes automatically. There are several ways to open a Utility:
- Select a Utility from the Utilities menu
- Double-click the clock in the menu bar
- Double-click the available memory indicator in the status bar
- An Application can open a Utility
- A Utility can open another Utility
A Utility presents itself in a movable panel. When first opened a Utility takes keyboard focus; key presses and commands are sent to the Utility first. If a keyboard event is not handled the Utility typically passes it along to the Application. In this way, Utility panels behave more like floating tool palettes than like wholly separate mini Applications.
However, if you click on the Application behind a Utility, the Utility loses keyboard focus and stops processing keyboard events. Click anywhere on the Utility to bring it back into focus.
When a Utility is in focus, the title bar is a different color than the background of the rest of the panel. When the Utility loses focus, its title bar becomes the same color as the rest of the panel.
Additionally, controls within the panel that are capable of taking keyboard input are drawn in an out of focus state when the panel is out of focus. In the example above, the Roll button is the default button. It can be triggered by pressing RETURN, but only when the panel is in focus. Therefore, when the panel goes out of focus, the button presents itself as an ordinary button.
Utilities may optionally present as modal. When a modal Utility is open all of the menu options are disabled and mouse and keyboard events are prevented from affecting the Application.
A modal Utility may still be moved so you can see what is below it, and the Application is still active. Animations, timed or network-related events can still change an Application's appearence below a modal Utility.
Standard Behaviors of a Utility
You can drag a Utility by its title bar to position it anywhere on the screen, including partially off the left, right or bottom edges. When the menu bar or status bar are visible, they prevent a Utility's title bar from being dragged behind them.
Click the close button on the left end of the title bar to close a Utility.
Hold the CONTROL key and click anywhere on the title bar to collapse a Utility so that only its title bar is visible. This is called window shade, and is a fast and convenient way to see what is behind a Utility without needing to move or close it.
A Utility panel that is in focus also accepts some standard keyboard shortcuts:
- COMMODORE+W closes the Utility, the equivalent of clicking its close button.
- CONTROL+W toggles window shade, the equivalent of CONTROL-clicking the title bar.
Utilities and Applications send messages to each other. Either side can try to send any message without knowing if the other side supports it. When a message is understood a reply is sent that the message was handled. All other messages get safely ignored and a reply is sent that the message was not handled.
Different Applications may handle the messages from the same Utility in different ways. And vice versa, different Utilities may handle the same messages from an Application in different ways. This system makes Applications and Utilities only loosely tied to each other, and allows for many creative combinations to emerge.
Fast App Switching
The foundations for Fast App Switching were laid already in C64 OS v1.0, however this feature did not become available until 1.05.
Fast App Switching requires a 17xx REU or clone or compatible hardware, such as provided by the Ultimate64, 1541 Ultimate II+, TurboChameleon64, and more. C64 OS automatically detects the presence and the capacity of an REU and reserves the first bank (Bank 0) for operating system workspace.
Fast App Switching has to be enabled using the Configure Tool. In the Expansion Memory section the Configure Tool asks you to choose how many REU banks to dedicate as Fast App Switching slots. You can choose from 1 to 30. The REU is divided into two main contiguous regions. The lower region, following the workspace bank, is used for however many Fast App Switching slots you choose. All remaining banks following that are marked free for Applications to allocate for data usage.
Configure Tool, Fast App Switching slots.
General guidance for REU allocation
If you have a very small REU, such as a 1700 with only 128KB of memory, and half of that is taken by the operating system, you may opt not to use any Fast App Switching slots, leaving the remaining 64KB for use by an Application that may need it.
If you have a small or medium sized REU, such as one with either 256KB or 512KB of memory, you could opt to dedicate 2 banks to Fast App Switching, which would allow you to toggle back and forth between two open Applications very quickly, and would still leave one or more banks available for an Application to use for data.
A large REU, 1MB or 2MB, offers much more flexibility. You can decide how many banks makes sense for Fast App Switching slots, and still have room left over for Application data. A 1MB REU has 15 usable banks. A sensible division might be 6 Fast App Switching slots and 9 banks for data. A 2MB REU has 31 usable banks, giving you significantly more options. A sensible division might be a 50/50 split.
For any REU larger than 2MB, it usually makes sense to allocate the maximum of 30 banks to Fast App Switching slots, as there is still plenty left over for App data. Unless you know that you have an Application that requires large amounts of space for data (such as for digital audio or video).
Using Fast App Switching
Once some banks have been allocated in your REU to be used for Fast App Switching, there is nothing special that you need to do to make use of it. Simply launch Applications from App Launcher as you normally would, or from File Manager, or open document files in File Manager that are assigned to be opened by an Application. C64 OS automatically manages the use of available Fast App Switching banks to preserve (freeze) and restore (thaw) Applications from those banks, such that switching between commonly used Applications becomes very fast.
If you continue to open different Applications and run out of available Fast App Switching slots, the oldest App, the Application that has been least recently accessed will be automatically purged from the REU in order to make room for the new App. If your Application is in an unsaved state, for example, if it has a document open that has not been saved to disk, C64 OS is aware of this and will avoid auto-expunging any Application that would lead to a loss of unsaved data.
Although you can just switch Apps the same way you do without Fast App Switching and still benefit from the switching quickly between the Apps, there is also a new Utility, called Switcher, that helps you to manage Fast App Switching slots and to switch arbitrary between any two open Apps without needing to return to Homebase first.
The Switcher is available from the Utilities menu, so it can be quickly accessed from within any Application. The keyboard shortcut CONTROL+S can also be used to open Switcher.
The currently running Application is always listed at the top of Switcher. The remaining Apps are listed in the order in which they were most recently accessed. Double-click on any Application in the list to switch to that App.
The cursor keys can be used to move the selection up and down the list. Pressing CONTROL+S cycles the selection down the list and then wraps back to the top of the list. Press RETURN to trigger the Switch button, or click the Switch button to switch to the selected App.
With any Application selected, the state of the App is shown along with how much memory it is using in 64KB increments. The first 64KB is in the Fast App Switching slot, and additional 64KB incremenents are from REU data banks the App has allocated. Click the Quit button to immediately expunge the selected App and all of its data from the REU and free up the memory it was using.
If an Application has unsaved data, its state will say unsaved, and the Quit button changes its label to Kill. Clicking the Kill button does the same as the Quit button, but killing an App also loses any of that App's unsaved data.
Fast Reboot is a feature of Fast App Switching. If you have an REU and it is configured with Fast App Switching banks, then you can quit to BASIC and the state of the current App is preserved in the REU just the same as if you switched to some other App.
When you try to boot C64 OS again, the booter detects early that C64 OS is currently stored in the REU and you are returned to where you left off very quickly.
The "READY." button in the Switcher allows you to drop to the READY prompt from within any Application. Fast Reboot returns you directly to the Application from which you dropped to READY.
REU use outside of C64 OS disrupts C64 OS
While at the READY prompt, you can run most standard C64 software, both BASIC and assembly language software. You can also perform file management or other tasks with BASIC commands from the READY prompt.
However, you should avoid using an C64 software that modifies the contents of the REU. That software will not be aware that C64 OS is stored there, and any modifications made to the REU outside of C64 OS will corrupt the C64 OS data stored there.
Usage keyboard shortcuts
When switching to an Application that is already open in a Fast App Switching slot, hold the LEFT-SHIFT key to auto-expunge that open Application and force the Application to reload from disk.
When booting C64 OS, hold CONTROL+COMMODORE+LEFT-SHIFT together to force C64 OS to reboot from scratch. After booting, all Fast App Switching slots will be empty, all previously open Apps will have been quit or killed automatically.
Force a standard reboot
If you quit to BASIC and something disrupted the REU's data, C64 OS may still attempt to do a fast reboot and fail to boot altogether. There are three ways to overcome this problem.
Power Cycle: The easiest thing to do is turn off the C64, and turn the power back on. This will clear the REU and the next boot will be a standard boot up.
CONTROL+COMMODORE+LEFT-SHIFT: A quick way to force C64 OS to boot up from scratch, skipping a problematic fast reboot, is to hold CONTROL+COMMODORE+LEFT-SHIFT together while booting.
REUInit: A third option is to load and run the tool called reuinit from the //os/c64tools/ directory. After running this, C64 OS will not attempt to fast reboot. This option is ideal if you want to change boot mode on the next boot up.
The Toolkit is a suite of user interface elements which can be created, configured and snapped together like lego pieces. C64 OS Applications and Utilities can use them to build powerful and consistent user interfaces with a minimal investment of code and development time.
Toolkit interface elements have their regular behaviors, but they also has tricks and shortcuts which you can learn to speed up your interaction with them. When a standard interface element is used in more than one Application, your knowledge about how to use it in one context helps you understand how to use it in a different context. Applications that use the Toolkit make the experience of using C64 OS more consistent.
The following standard user interface elements are explained and explored:
- Push Buttons
- Cycle Buttons and Periodic Buttons
- Checkboxes and Radio Buttons
- Tables and Columns
- Text Input Fields
One of the most simple controls is a push button. Click on a button, it highlights momentarily to give you feedback that you clicked it, and some action is performed.
A button can also be disabled. A disabled button takes the same color as a disabled menu option. If you click on a disabled button it does not highlight and no action is performed.
Often in a user interface one of the buttons is a default button which is displayed in an alternative color. Push the RETURN key to trigger the default button.
Some buttons have a cyclical-arrows icon before the button title. These are called cycle buttons. When you click on a cycle button its title changes, in addition to performing some other action. If you click a cycle button repeatedly it eventually circles back around to show the same title again.
Hold the COMMODORE key and click on a cycle button to cycle through the options in reverse order. This is very convenient, allowing you to click through options quickly without worrying about going past the one you want. If you go to far, just hold the COMMODORE key and click to step backwards.
Some buttons—either cycle buttons or regular push buttons—are called periodic. If you click and hold on a periodic button the button's action is performed repeatedly. A periodic cycle button repeatedly cycles through its options.
Checkboxes and radio buttons are special kinds of buttons that add active and inactive states, indicated by an icon to the left of the title. The title of a checkbox or radio button is part of the button, (like an ordinary button but without the bounding box,) so you can click the icon or the title to trigger it.
Checkboxes work independently. Click on a checkbox to toggle its state from active to inactive or vice versa. Some other action may also be triggered in addition to the checkbox changing state.
Radio buttons always come in groups of two or more. Only one radio button in a group can be active at a time. Click on a radio button to make it active and automatically deactivate the previously active radio button. Some other action may also be triggered when a radio button is activated.
Checkboxes and radio buttons can be disabled, just like normal buttons. A disabled checkbox or radio button shows in the disabled color and clicking it does not change its state or trigger its action.
Tab views optimize the use of screen real estate and enable more content to be easily accessed.
User interface elements are collected together in a rectangular area of the screen to provide some functionality, but sometimes there isn't enough room to show everything at the same time. To increase how much space is available, areas can be stacked one on top of the other. A series of tabs appear along the top edge of the tab view. Click on a tab to bring its content area to the top of the stack.
There can be from two to ten tabs in one tab view. Each tab has a title and the tabs automatically resize themselves to divide up the space. If a tab is not wide enough to show its full title, the end of that title simply gets clipped.
Clicking a tab highlights it momentarily to give you feedback that you clicked it. However, the Application has the ability to prevent tabs from switching, depending on what's going on in the tab's content.
The currently active tab has a color that indicates that it is selected, and all the other tabs show in another color to indicate that they are unselected.
Tabs are often used to group common controls together and separate them from other unrelated controls. Tab views can be nested inside other tab views, but a well designed Application only does this if it really makes sense.
An unselected tab has a content area that is not visible. A default button that is nested inside an area that is hidden, is not triggerable by pressing the RETURN key. Therefore each tab's content may contain a different default button, and RETURN triggers the one in the selected tab.
While tab views allow areas to be stacked one atop the other, with only one of them visible at a time, split views allow two areas to be positioned beside each other, left-to-right or top-to-bottom, with a dividing bar between them called a splitter bar.
The splitter bar has a grippy icon to indicate that it can be grasped and dragged. The whole bar can be dragged allowing you to devote more screen real estate to one area and less to the other. You can reallocate the space whenever you want.
Any content can be added to the areas on either side of the split, including another split view. Like nested tab views, a well designed Application does not take nesting split views too far, but it can be effective when appropriate.
There are cases when the right edge of the left area of a split (or the bottom edge of the top area of a split) already has a prominent visually dividing element. In this case a splitter bar can be collapsed which saves space and often looks better. When a splitter bar is collapsed it can only be dragged by the grippy icon, which is still visible but is drawn overtop of the corner of the left or top split area.
When there is too much content to fit in an area of the screen, and it is inappropriate or impractical to divide the content into tabs, the area can instead be turned into a scrollable area.
An area on the screen can be configured either to be vertically scrollable, horizontally scrollable, or both.
When an area is vertically scrollable, a scrollbar appears along its right edge. When an area is horizontally scrollable, a scrollbar appears along its bottom edge. The background of a scrollbar's track is diagonally striped and the scroll nub is solid. Two scroll buttons appear together at the bottom of a vertical scrollbar or at the right end of a horizontal scrollbar. If both scrollbars are enabled, this puts all four scroll buttons physically close to each other so you don't need to move the mouse far to select between them.
If the content within is shorter or narrower than the visible area, in other words, if all the content can be seen without needing to scroll, the scrollbar switches to a disabled state. It gets colored the same as other disabled elements, such as disabled buttons or menu options.
When content is longer or wider than the visible area, the scrollbar becomes active. The size of the scroll nub is proportional to the percentage of the content that is visible. If you can see 90% of the content but need to scroll to see the final 10%, then the scroll nub is drawn as 90% of the height of the track in which the nub slides. If you can see only 50% of the content, the nub is drawn as 50% of the height (or width) of the track.
There are several ways to scroll content using a scrollbar.
Click once on one of the scroll buttons to scroll in that direction. The content scrolls a few lines with each click. The scroll buttons are periodic buttons. Click and hold on a scroll button and the content scrolls continuously, a few lines at time.
The scroll buttons have two hidden features. You can slow down the scrolling and cause the content to scroll more precisely—only one line at a time—by holding the SHIFT key while clicking on a scroll button. Alternatively, you can speed things up. Hold the COMMODORE key and click on a scroll button to scroll the content all the way to the end, in that direction, in a single step.
The fastest and most convenient way to scroll through a lot of content is to click and drag the scroll nub. The content scrolls proptionally to how fast you move the scroll bar. If there are 500 of lines of content, and you drag the scroll bar half the distance in just one second, then you scroll the content by 250 lines in only one second.
You can also scroll by clicking on the striped track itself. Click on the track above the scroll nub to scroll up, one page at a time, or on the track below the nub to scroll down one page at a time. The size of a page is equal to the number of visible rows less one. If you can see 20 rows of content, clicking the track scrolls the content 19 lines. The single line of overlap between pages helps your eyes to feel a sense of continuity from page to page.
Lastly, the track is also a periodic button. Click and hold on the track and the content continously scrolls in that direction, a page at a time.
Scrolling with the mouse wheel
Beginning in C64 OS v1.03, the Toolkit and low-level system have support for scrolling with the mouse wheel. PS/2 mice connected to your C64 with a MicroMys mouse adapter (v3 and up) have support for the mouse wheel. USB mice connected with the MouSTer adapter (with the most recent firmware) have support for the MicroMys mouse protocol.
If you are using one of these two adapters with a mouse that has a scroll wheel, use the Configure Tool (See Chapter 10: Appendices → C64 Tools → Configure) to select MicroMys as the pointer input driver.s
Scrolling speed and mouse wheel direction can be configured using the Mouse Utility. See Chapter 7: Utilities → Stand-alone Utilities → Mouse for an explanation of these settings.
With the mouse pointer above any region that can be scrolled with a standard Toolkit scrollbar, roll the mouse wheel to scroll the content. This can even be used to scroll content below an open Utility without the Utility losing focus.
The same keyboard controls that can be used while clicking on the scrollbar work with the mouse wheel too. Hold COMMODORE and roll the mouse wheel to scroll the content all the way to the top or bottom in a single step. While scrolling normally the content moves a few lines at a time. Hold the SHIFT key while rolling the mouse wheel to slow down the scrolling and make it more precise, scrolling single lines at a time. To scroll content horizontally, place the mouse pointer directly over the horizontal scroll bar and roll the wheel.
A common way to present data is in a table. A table in the C64 OS Toolkit consists of a scrollable area that displays rows of data divided into columns of different widths. Tables support over 65,000 rows and upto 255 columns, and are designed to draw and navigate a large number of rows quickly and efficiently.
With proper support from the Application, a table can make single line selections, multi-line selections, and discontiguous range selections. Tables support keyboard input to move the selected row, modify range selections, and scroll the visible area. With appropriate support from the Application, a table can sort and filter its contents.
A table has a set of columns, which are displayed in a header row at the top of the table. The table's rows scroll but the column headers always stay at the top.
Columns have a title, a width and sort direction. Columns can be configured to be resizable, and can have a minium and maximum width set from 2 to 255 characters. When a column is resizable, a grippy icon is presented on the right end. The column can be resized by dragging the grippy left or right. Click on a column header to sort the data by that column's criteria. An arrow icon appears before the grippy icon to indicate the direction that this column is sorted. A sorted column appears in a different color from unsorted columns. Click a sorted column header again to reverse the sort direction.
A text input field allows the user to enter a single line of text, with a maximum length from 1 to 255 characters. In addition to length options, a text field may also be validated so that only certain characters are able to be put into the field.
Text fields receive input typed on the keyboard. There can be more than one text input on the screen but only one of them can be the recipient of keyboard input at a time. The field that receives keyboard input first is said to be in focus, and the other interface elements not in focus are said to be blurred.
C64 OS uses color to indicate which text field is in focus. Above is an example of a text input that is not in focus. Below is an example of a text input that is in focus, with a higher contrast color. The field that is in focus also displays a text input cursor.
The text input control in C64 OS has many features that make editing powerful and convenient. The text content may be longer than the width of the field, and as you type the contents of the field scroll so that the input cursor is always visible. You can use the left and right cursor keys to move the input cursor through the existing text, and you can delete and insert text anywhere within the content.
There are several options for moving the cursor. CURSOR DOWN moves the cursor to the end of the content. CURSOR UP moves the cursor to the start of the content. Additionally, the HOME key moves the cursor to the start of the content, and the CLR key clears the field of all content. You can also click with the mouse to move the input cursor directly to where you clicked.
All text input controls have selections and built-in support for cut, copy and paste from the clipboard, without any extra help from the Application. The direction of the cursor keys is controlled by the right SHIFT key. CURSOR UP is therefore RIGHT-SHIFT+CURSOR DOWN, and CURSOR LEFT is RIGHT-SHIFT+CURSOR RIGHT. The left SHIFT key is used to modify selections.
Hold LEFT-SHIFT and press CURSOR LEFT or RIGHT to modify the selection left or right of the input cursor. Hold LEFT-SHIFT and press CURSOR DOWN to select all text from the position of the input cursor to the end of the field. Hold LEFT-SHIFT and press CURSOR UP to select all text from the position of the input cursor to the start of the field. Press DELETE to delete all selected text, or simply start typing to replace the selected text with new content.
Selections can also be made with the mouse. Hold LEFT-SHIFT and click somewhere in the field to extend the selection from the position of the input cursor to the clicked position. Click and drag down to select all text from the clicked position to the end of the field, or click and drag up to select all text from the clicked position to the start of the field. Double click on a word to select that entire word.
There are also several built-in keyboard commands. Press COMMODORE+A to select all text in the field. Press COMMODORE+X to cut the selected text from the field and put it on the clipboard, COMMODORE+C to copy the selected text from the field to the clipboard. Press COMMODORE+V to paste text from the clipboard to the position of the input cursor or replace any selected text. The clipboard can hold data that is not text, but only textual data from the clipboard can be pasted. Pasted data is also validated the same way data you manually type is validated.
User Interface Themes
Toolkit user interface elements, described above, as well as Utility panels, the menu bar and the status bar, draw themselves according to a system-wide configurable color set.
A set of colors that work well together is called a theme. C64 OS has two built-in themes: Daylight and Midnight.
Daylight is a light colored theme, with a white background. Cyan menu and status bars, light greys, and shades of blue for tabs, buttons and scrollbars.
The File Manager, with the Calculator Utility, in the Daylight theme.
Midnight is a dark theme, with a black background. A higher contrast of buttons on backgrounds, greens, purples, and dark blues. Dark themes are cool and give your C64 a slick edgy look.
The File Manager, with the Calculator Utility, in the Midnight theme.
The Themes Utility
You can change which theme is currently active, at anytime, using the Themes Utility. The Themes Utility can be opened from Settings, found in the Utilities menu.
Below you can see how the Themes Utility looks, presented in each of the two built-in themes. The cycle button in the bottom left allows you to cycle through the themes. When the Themes Utility is closed the system's colors are automatically updated and the selected theme is saved to settings so it remains the selected theme even after a reboot.
Customize Your Theme
In addition to choosing between the built-in themes, you can use the Themes Utility to make your own custom color theme.
Click on the various user interface elements in the mockup to select the element whose color you want to customize. Your selections are saved in a third theme, called, Custom.
Customizable User Interface Elements
- Screen Border
- Screen Background
- Utility Panel Background
- Utility Panel Titlebar
- Menu and Status Bar
- Menu Highlight
- Display Text
- Strong Text
- Emphasis Text
- Selected Text (reversed)
- Default Button
- Scrollbar Foreground
- Scrollbar Background
- Disabled Control
(disabled menu option, button, scrollbar, etc.)
- Text Field
- Text Field In Focus
- Tab Focused
- Tab Blurred
- Column Header Sorted
- Column Header Unsorted
For further information about how to use the Themes Utility, see Chapter 7: Utilities → Themes.
A powerful feature of C64 OS is the ability for an Application and a Utility to exchange data. While an Application and a Utility are open together they can interact with each other by passing messages. However, it is also useful for Utilities to exchange data with each other, or for one Application to exchange data with another Application. To do this the data can be copied to the clipboard as an intermediate temporary holding place.
Applications and Utilities transfer data to the clipboard, and specify its type using C64 OS's standard data type system. The content of the clipboard persists after a Utility is quit and another is opened, while moving between Applications, and even after you leave C64 OS, power cycle your Commodore 64 and come back later.
See Appendix III. Data Types for more information about the C64 OS standard data type system.
An Application or Utility can transfer data from the clipboard at any time, but usually does this in response to your action, such as choosing paste from a menu. The application knows the data type and exact size of the content on the clipboard. Typically an Application rejects the attempt to paste data if its type is unrecognized or unsupported.
C64 OS includes a Clipboard Utility to preview the current contents of the clipboard.
A well behaving C64 OS Application or Utility integrates well with the clipboard, allowing you to copy as many different pieces of information as possible in order to increase the probability of unintended but useful interconnections between Applications and Utilities. Common user interface elements, such as Toolkit input fields, support the clipboard directly and do not require special support from the Application or Utility.
This document is subject to revision updates.
Last modified: Nov 15, 2023