Custom User Interface

1

How to start working with us.

Geolance is a marketplace for remote freelancers who are looking for freelance work from clients around the world.

2

Create an account.

Simply sign up on our website and get started finding the perfect project or posting your own request!

3

Fill in the forms with information about you.

Let us know what type of professional you're looking for, your budget, deadline, and any other requirements you may have!

4

Choose a professional or post your own request.

Browse through our online directory of professionals and find someone who matches your needs perfectly, or post your own request if you don't see anything that fits!

The Custom User Interface (CUI) is a replacement for the traditional desktop for those who prefer to access their applications and data via the command line. The CUI provides an alternative to those users who wish to run their system in text-only mode, or as a server with no local graphics support. It may also be of interest to developers who require console access for debugging and testing purposes.

There are several different implementations of command-line interfaces: Console – Command Prompt – DASH – Windows PowerShell – DOS – Unix/Linux – OS X Terminal. Each implementation has its syntax and conventions, which can make it difficult for new users to gain proficiency in more than one application. To aid users by providing some consistency between the implementations, Command Prompt Here utilizes standards from Unix/Linux to provide a simple way to navigate the file system from the command line.

User Interface Elements

There are several standard user interface elements used in most CUI applications: Input-Output – Error – Wildcard – Parameter – Flag – Argument – Sub-Command – Pipe. When designing a custom console, you must decide how many of these elements will be included and what they will do. There is no one correct answer for all situations, as this depends on the specific requirements of your application. Let's take a tour through some of these important features.

Input can come from either file or typed commands at a prompt. The simplest implementation accepts only filename input, which is compatible with earlier CUI applications.

Do you want to run your computer without a graphical user interface?

The Custom User Interface (CUI) is a replacement for the traditional desktop for those who prefer to access their applications and data via the command line. It may also be of interest to developers who require console access for debugging and testing purposes of overall user experience.

You can now use your CUI with Windows, Mac OS X, or Linux operating systems! And it’s free! Get started today by downloading our software on our website. There are no hidden fees or subscriptions required – just download and install! We hope you enjoy using Geolance as much as we enjoyed creating it. Let us know what you think in the comments below! Click here to try out Geolance right away!

Input-Output

The most basic I/O implementation is to echo typed commands and display output from all executed commands. This requires that the console is in "echo" mode, which configures it to display everything typed at the prompt without requiring an extra command (such as 'dir'). Some Unix implementations offer other modes such as "interactive", where successive characters are echoed only if they do not correspond to a valid command.

Error messages can also be displayed on an ad hoc basis for debugging purposes by displaying only the error number when there is no matching handler for a given command. Due to its simplicity, this is often used even in production systems.

Wildcard

The Wildcard lets you match a pattern against any string. In Unix/Linux, this is implemented with the * character. For example, typing "find <wildcard>/*" will return the Unix equivalent of the Windows dir command. The character can often be used as a replacement for * in most file names to match an arbitrary single character.

Parameter

The Parameter flag lets you pass one or more values after it to a command, then displays them in the output when that command finishes executing. This is useful for commands that do not support standard input redirection since they require some input parameters before execution - such as mount("<device>:<directory>", "</directory>") which takes two parameters directly after its name (the device and the directory respectively). It can also be used as a replacement for the dir command when several directories need to be displayed.

Flag

The Flag flag defines an option that applies to most commands, such as how much information should be included in the output (verbose) and whether or not it should overwrite files with conflicting names during execution (notify).

Argument

The Argument flag lets you pass one or more values after it to a command, but does not display them in the output when that command finishes executing. This is useful for programs where many different combinations of parameters may cause unpredictable behavior - such as "ls <dir>/.." which could easily create a stack overflow if both arguments were shown on the same line. Flags can often be combined, resulting in more complex behavior. For example, to set the "verbose" flag as well as the "overwrite" flag for a command requiring one or more parameters after it, use /vio instead of -vio.

Sub-command

The Sub-Command flag lets you call another command with given arguments and options. This is useful if your application needs to set up a parent/child relationship between commands, allowing them to pass setup information back and forth through a common interface. For example, this could be used by an application that allows one of several networking protocols to be configured from the command line - where each protocol has its own sets of parameters that must be configured before using that protocol. In such cases it would not make sense to allow the configuration of every parameter for every protocol on a single line (since some protocols could have hundreds), so the parent/child model is used instead.

Notice that not all commands support subcommands, but in this example, they would be silently ignored anyway since there are no parameters to pass back at the end. This can also be done indirectly by passing one or more values (such as file names) as command arguments before calling the other command - although this requires parsing those values after returning from that second command, whereas using sub-commands does not require any extra state changes since both commands run concurrently within a single thread.

Parameter field

The Parameter field allows passing values back and forth between commands, but can only pass one or more parameters using fixed data types. It is most useful when the command expects to receive a value of two different types of personalized content (such as an integer followed by a string), but it only ever needs to process one type at a time. For example, consider passing information about all network interfaces for determining which one should be used to perform DNS queries - in that case, the combination of "interface" and "and" would allow the proper interface to be selected for querying, even if some drivers automatically insert additional members into this structure on startup. This flag works best when combined with another type of parameter since it does not have any built-in support for passing multiple values at once (such as file names).

Parameter flags follow the same format as command flags, providing a list of key/value pairs and allowing any combination or none at all. They include:

-indices - limit the number of results returned to those where the index is greater than this value. This may be used in conjunction with "limit" to return only a subset of total matches.

-keys - restrict results to those where the key is equal or greater than the provided value. May be used in conjunction with "limit" to select specific keys from specific data types within each matching record (such as IPv4 addresses instead of IPv6 addresses).

-exact - if combined with other options such as "keys", this option requests that values be returned exactly as specified. This cannot be used in conjunction with "type" since the type of each parameter is already known before processing any sub-commands, so it would not make sense to request an exact value for this one (which should always be dynamically determined just like command flags).

-extra - if combined with other options such as "keys", this option requests that keys other than those provided will be ignored. For example, setting "-exact -extra 123456789" and specifying an index of "1234567890" would result in a partial match where only part of the argument was evaluated and no error would result when calling the command again with a different value for this same argument.

-type - if combined with other options such as "keys", this option specifies a list of data types to be matched based on the key string. If "-type ip4" is specified and one or more keys are passed that only match IPv4 addresses, then that specific key/value pair will be ignored. In cases where multiple matches are using different types, this argument must also include the type for each parameter to avoid an error when calling the command again with a different value for any given key. For example, setting "key1=1&key2=a&key3=-1&-type ip4" would return a successful result while setting "key2=a&key3=-1" would result in an IPC error.

-optional - if combined with other options such as "keys", this option requests that values may be omitted without causing an error to occur when calling the command again with a big difference in value for any given key. For example, setting "-exact -type ip4 -optional" would only require the type of IP address to match (IPv4 or IPv6) instead of requiring all three potential values to match exactly. This option is typically used in conjunction with sub-commands which each specify their own set of options.

Sub-Command field

The Sub Command field specifies one or more sub-commands associated with this parent command that can be called by name instead of needing to directly reference them using the "sub_command" argument.

The Sub Command field follows the same format as either command or parameter flags and supports:

-a  (admin) - allow this sub-command to be called by name (by any user) and no checks will be performed to determine if the caller is authorized to do so. This may only be specified once within each parent command, but can be repeated as necessary for other sub-commands that require it.

-user  (user) - if specifying multiple members, this value must follow a comma-delimited list of usernames who are allowed to issue this sub-command without requiring additional authorization from an administrator. If not specifying the username, this will default to the same username as the caller. In cases where a single-user flag is specified, it will be required that the caller provide additional authentication by specifying either an administrative user or a specific user to send a message to before continuing with any further processing associated with this sub-command.

-group  (group) - if specifying multiple members, this value must follow a comma-delimited list of group names who are allowed to issue this sub-command without requiring additional authorization from an administrator. If not specifying the group name, this will default to the same group name as the caller. In cases where a single-group flag is specified, it will be required that the caller provide additional authentication by specifying either an administrative user or a specific group to send a message to before continuing with any further processing associated with this sub-command.

-level  (level) - if specifying multiple members, this value is used as an unsigned 8-bit integer where the lowest byte corresponds to the user level for this specific user/group combination and it must follow a comma-delimited list of usernames or group names who are allowed to issue this sub-command without requiring additional authorization from an administrator. If not specifying the username or group name, then 65535 will be used by default which indicates that only administrative users can access this command. In cases where a single-user flag is specified, it will be required that the caller provide additional authentication by specifying either an administrative user or a specific user to send a message to before continuing with any further processing associated with this sub-command.

Note that the level value will be checked against the effective credentials of each specified member and if there are multiple members, it will override the values supplied for individual members if they overlap. For example, specifying "user1=jsmith&group2=police&level=10" would require an authentication group combination of either "administrative+jsmith or jsmith+police" before allowing access to this command whereas specifying "user1=jsmith&group2=police&level=15" would require an authentication group combination of either "administrative+jsmith or jsmith+police or police+administrative".

Note: If a command is defined as requiring an administrative user and that option is set for any sub-command within that parent command, then it must be required at all levels even if other users or groups are specified. This will ensure proper enforcement of the access controls.

Command Line Flags

These arguments follow similar rules as those defined above for sub-commands with regards to valid characters allowed and whether they can only be specified once within each parent command or not, but these options require additional processing by the parser after checking for duplicates.

Single-User Commands -a  (admin) - Allows this flag to be called by name (by any user) without requiring additional authorization from an administrator. This may only be specified once within the command line.

Administrative Commands -k  (kick) - Will ignore all other flags and sub-commands and attempt to kick any user matching the specified username/group combination regardless of who is attempting to use this flag or what additional authentication they have provided. If specifying a group, it will be assumed that if one member exists in that group, then any others are also allowed access. This may only be specified once within the command line.

Multi-User Commands -f  (friends) - Allows these specifications to be called by name (by any user) without requiring additional authorization from an administrator even though some users or groups may require that additional authentication take place before proceeding with this sub-command. Any number of friends may be specified, but only the last one will be used for authorization. This may only be specified once within the command line.

Administrative Commands -L  (level) - If specifying multiple members, this value is used as an unsigned 8-bit integer where the lowest byte corresponds to the user level for this specific user/group combination and it must follow a comma-delimited list of usernames or group names who are allowed to issue this sub-command without requiring additional authorization from an administrator. If not specifying the username or group name, then 65535 will be used by default which indicates that only administrative users can access this command. In cases where a single-user flag is specified, it will be required that the caller provide additional authentication by specifying either an administrative user or a specific user to send a message to before continuing with any further processing associated with this sub-command. This is done for backward compatibility reasons and should not be used unless necessary because it will override any other flags or settings within the command line regarding access control. This is ignored if "level" is also specified somewhere else in the command line. It may only be specified once per command line, but can appear anywhere after the command name itself.

Administrative Commands --level  (integer) - If an unsigned 8-bit integer was specified within another flag, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It may only appear once per command line.

Administrative Commands --user  (username) - If the username/group combination is not allowed to use this sub-command without requiring additional authentication, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It must follow a comma-delimited list of usernames or group names who are allowed to issue this sub-command without requiring additional authorization from an administrator. This is ignored if "level" is also specified somewhere else in the command line. It may only be specified once per command line, but can appear anywhere after the command name itself.

Administrative Commands --from  (username) - If specifying another user to send a message to, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It must follow a comma-delimited list of usernames or group names who are allowed to issue this sub-command without requiring additional authorization from an administrator. This is ignored if "level" is also specified somewhere else in the command line. It may only be specified once per command line, but can appear anywhere after the command name itself.

Multi-User Commands --message  (msgid) - If specifying a specific message ID for that user/group combination, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It must follow a comma-delimited list of message IDs for message notifications to be sent with. This is ignored if "level" is also specified somewhere else in the command line. It may only be specified once per command line, but can appear anywhere after the command name itself.

Multi-User Commands client_id - If specifying another user to send a message to, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It must follow a comma-delimited list of usernames or group names who are allowed to issue this sub-command without requiring additional authorization from an administrator. This is ignored if "level" is also specified somewhere else in the command line. It may only be specified once per command line, but can appear anywhere after the command name itself.

Multi-User Commands --level  (integer) - If an unsigned 8-bit integer was specified within another flag, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It may only appear once per command line.

Multi-User Commands --from  (username) - If specifying another user to send a message to, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It must follow a comma-delimited list of usernames or group names who are allowed to issue this sub-command without requiring additional authorization from an administrator. This is ignored if "level" is also specified somewhere else in the command line. It may only be specified once per command line, but can appear anywhere after the command name itself.

Multi-User Commands --user  (username) - If the username/group combination is not allowed to use this sub-command without requiring additional authentication, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It must follow a comma-delimited list of usernames or group names who are allowed to issue this sub-command without requiring additional authorization from an administrator. This is ignored if "level" is also specified somewhere else in the command line. It may only be specified once per command line, but can appear anywhere after the command name itself.

Multi-User Commands --level  (integer) - If an unsigned 8-bit integer was specified within another flag, then this overrides it completely regardless of where this option is present in the overall structure of the command line. It may only appear once per command line.

Geolance is an on-demand staffing platform

We're a new kind of staffing platform that simplifies the process for professionals to find work. No more tedious job boards, we've done all the hard work for you.


Geolance is a search engine that combines the power of machine learning with human input to make finding information easier.

© Copyright 2022 Geolance. All rights reserved.