Some notes about the Astrolabe Channel numerical pointer.

William Overington

Copyright 2001 William Overington

Wednesday 5 September 2001

The design of the Astrolabe Channel numerical pointer is proceeding.

Recently, within the discussion thread "Code of practice for mouse units." at the http://forum.mhp.org website, I posted three items concerning the Astrolabe Channel numerical pointer.

Transcripts of those three items are now included here as two of them provide additional information that has not previously appeared in this webspace at http://www.users.globalnet.co.uk/~ngo and I feel that that information should also appear here.

In addition, there are some additional notes added into this webspace on 5 September 2001.

Here are the three transcripts.


I am very interested that end users using the DVB-MHP system for distance education should have mouse facilities available.

The minimum set of input events for a DVB-MHP terminal does not include a mouse unit.

So, I have devised a system that I am calling Astrolabe Channel numerical pointer which hopefully will go some way to providing a mouse style capability to DVB-MHP terminals.

The Astrolabe Channel numerical pointer is a method whereby a user of a DVB-MHP terminal that does not have a mouse unit may simulate the use of a pointer unit using the minimum set of input events.

A Java program running on the DVB-MHP platform may then be programmed to recognize input from the Astrolabe Channel numerical pointer as a substitute source for information that might otherwise be gathered by a mouse.

DVB-MHP terminals that do have a mouse attached may use the Astrolabe Channel numerical pointer in parallel with the mouse if so desired. Indeed, some of the features of the Astrolabe Channel numerical pointer are such that a DVB-MHP terminal with a mouse but without a keyboard may like to use the Astrolabe Channel numerical pointer in conjunction with the mouse unit. For example, the mouse event containing details of whether the shift key was being held down when the mouse event occurred.

The Astrolabe Channel numerical pointer operates within its own universe where all 20 of the buttons in the minimum set of input events has its own meaning specific to the Astrolabe Channel numerical pointer system.

Entry to the Astrolabe Channel numerical pointer universe from a Java program is, whenever possible, by pushing the VK_TELETEXT button. This has been chosen because the VK_TELETEXT button is less likely to be required for use in a DVB-MHP Java program than might be other buttons and so can be available in many programs to enter the Astrolabe Channel numerical pointer universe. In circumstances where the DVB-MHP rules do not allow the VK_TELETEXT button to be used in this manner, some other button may be used to enter the Astrolabe Channel numerical pointer universe. The VK_COLORED_KEY_1 button is the choice that I suggest, that is the button that is often coloured green. However, programmers may choose to enter the Astrolabe Channel numerical pointer universe in whatever manner they wish.

Once in the Astrolabe Channel numerical pointer universe the operating point of the Java program that is running upon a DVB-MHP terminal would essentially stay in the Astrolabe Channel numerical pointer universe until the VK_ENTER button is pushed. A display of the parameters of the Astrolabe Channel numerical pointer event that is being set up is viewable upon the screen of the DVB-MHP terminal while the operating point of the Java program is in the Astrolabe Channel numerical pointer universe. The setXORMode is used to provide an on screen indication as to where the Astrolabe Channel numerical pointer is pointing so that it may be adjusted until the end user is happy with the position and he or she then pushes the VK_ENTER button for the operating point of the Java program to leave the Astrolabe Channel numerical pointer universe.

I have done some tests on a software simulated DVB-MHP system along the lines of the simulations that are in the DVB-MHP section of our family webspace at http://www.users.globalnet.co.uk/~ngo and the results are quite effective. I am hoping to place a document about the Astrolabe Channel numerical pointer into the webspace in due course.

At the present time the research is all in simulation and it really needs to be run on a real DVB-MHP system to prove the concept.

However, results in simulation are very encouraging and I am hopeful that Astrolabe Channel numerical pointer will become a useful facility within Java programs running on DVB-MHP terminals where mouse style input is desired yet where there is no mouse unit attached to the particular DVB-MHP terminal that an end user has available to use.

William Overington

11 August 2001


Readers might like to know that yesterday I added into the DVB-MHP section of our family webspace at http://www.users.globalnet.co.uk/~ngo a document entitled "Introducing the Astrolabe Channel numerical pointer." which contains a somewhat expanded version of the above posting.

It is not yet the detailed specification of the Astrolabe Channel numerical pointer, but does provide further information.

In operation the Astrolabe Channel numerical pointer is straightforward to use. For example, if one wishes to produce for the main program the effect of a mouse button press event that occurs at the location 145 horizontal and 97 down one would push the following buttons.

VK_TELETEXT VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_ENTER

A more elaborate event, namely holding the shift key down and pressing the mouse button at the same location would be produced using the following sequence of button pushes.

VK_TELETEXT VK_1 VK_DOWN VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_ENTER

A similar event, namely holding the control key down and pressing the mouse button at the same location would be produced using the following sequence of button pushes.

VK_TELETEXT VK_2 VK_DOWN VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_ENTER

A somewhat more elaborate event, namely holding the shift key down and holding the control key down and pressing the mouse button at the same location would be produced using the following sequence of button pushes.

VK_TELETEXT VK_1 VK_DOWN VK_2 VK_DOWN VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_ENTER

William Overington

15 August 2001


The Astrolabe Channel numerical pointer universe has a number of software buttons in it which may be set and reset as desired while within the Astrolabe Channel numerical pointer universe and only have any effect in producing a response to go to the main program when the VK_ENTER button is pushed. Some of these software buttons are organized as individual software buttons, some are arranged as a set of radio buttons. An example of the individual software buttons is the software button that decides whether the shift key of a simulated keyboard is being held down. An example of a set of radio buttons is the choice of which type of mouse event is being simulated.

The Astrolabe Channel numerical pointer is designed to produce the same net effect to a computer program as an ordinary mouse unit. In order to provide maximum facilities the Astrolabe Channel numerical pointer also contains a facility to generate any unicode character. This works by simply pushing down a particular software button inside the Astrolabe Channel numerical pointer universe. The numerical value of the character is input by the end user. Pushing the VK_ENTER button causes the character to be produced and could be used as if it had been entered at a keyboard, regardless of whether there is actually any keyboard attached. In this case, no mouse event equivalent is produced.

The generation of a unicode character is by entering the Astrolabe Channel numerical pointer universe and then pushing down software button zero, which takes the end user into an area which is called the unicode courtyard. As the index number of which software button to push is contained in the Astrolabe Channel numerical pointer accumulator and it is set to zero upon entering the Astrolabe Channel numerical pointer universe, entry to the unicode courtyard is simply by pushing VK_TELETEXT and then VK_DOWN.

Once within the unicode courtyard a unicode character may be entered using hexadecimal notation.

The following coding is used for entering hexadecimal numbers.

VK_0 through to VK_9 are used for hexadecimal 0 through to hexadecimal 9.

VK_COLORED_KEY_0 through to VK_COLORED_KEY_3 are used for hexadecimal a through to hexadecimal d.

VK_LEFT is used for hexadecimal e.

VK_RIGHT is used for hexadecimal f.

In the event of a keying error being made, VK_UP followed by VK_DOWN will reinitialize the unicode courtyard.

Once the end user is happy that he or she has entered the correct character code he or she may push the VK_ENTER button and the operating point of the software leaves the Astrolabe Channel numerical pointer universe with the unicode character contained in a global variable of the software.

Thus to enter the unicode character U+20AC EURO SIGN the end user would enter the following sequence of button pushes.

VK_TELETEXT VK_DOWN VK_2 VK_0 VK_COLORED_KEY_0 VK_COLORED_KEY_2 VK_ENTER

In order to enter the unicode character U+221E INFINITY the end user would enter the following sequence of button pushes.

VK_TELETEXT VK_DOWN VK_2 VK_2 VK_1 VK_LEFT VK_ENTER

Astrolabe Channel numerical pointer is now able to simulate both a mouse unit and a keyboard.

William Overington

17 August 2001


New notes added into this webspace on 5 September 2001 follow.

The following software buttons are allocated within the Astrolabe Channel numerical pointer universe. They have the following effects when pushed down.

0 Enter the unicode courtyard.

1 Simulate the shift key of a keyboard being held down.

2 Simulate the control key of a keyboard being held down.

3 Simulate the alt key of a keyboard being held down.

4 Simulate the right button of the mouse being used rather than the left button that is usually used.

9 Enter the special area where the arrow buttons may be used to adjust the position on the screen where the simulated mouse event will be regarded as taking place.

At present, one set of software radio buttons is defined. This consists of software buttons 40 through to 47. Pushing down any member of this set of software buttons pops up the one that is already down. Any attempt to pop up a software button of this set that is already down is ignored. This set of software buttons is quite straightforward to implement in the software. The Astrolabe Channel numerical pointer universe simply has a local integer variable, a Java int, that is initialized to a value of 41 when the Astrolabe Channel numerical pointer universe is entered. If the end user seeks to push down a software button in the range from 40 to 47 then that local variable simply has the number of the software button that is being pushed down placed in it, the previous contents of the local variable being lost. Upon leaving the Astrolabe Channel numerical pointer universe, if a mouse event is being simulated, then the value of the local variable is used in determining the value that the obeycode for the event shall have.

An Astrolabe Channel numerical pointer could run in a program where the obeycode is an integer, a Java int, or could run in a program where the obeycode is a character, a Java char. Specific software implementation versions of the Astrolabe Channel numerical pointer would be needed depending upon whether obeycode is an integer or a character, yet the Astrolabe Channel numerical pointer would work in the same manner for each case as far as the end user of software written using an Astrolabe Channel numerical pointer is concerned. This use of a character as an obeycode is presently a research topic for Astrolabe Channel software authorship, where the characters used for events are designated for the purpose from within the unicode private use area. Early results are promising and provide for a very flexible programming style.

The software buttons in the set of software radio buttons are as follows.

40 Astrolabe Channel numerical pointer is being used to supplement a real mouse unit.

41 Mouse pressed.

42 Mouse released.

43 Mouse clicked.

44 Mouse entered.

45 Mouse exited.

46 Mouse moved.

47 Mouse dragged.

For example, as mentioned previously, if one wishes to produce for the main program the effect of a mouse button press event that occurs at the location 145 horizontal and 97 down one would push the following buttons.

VK_TELETEXT VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_ENTER

If one wishes to produce for the main program the effect of a mouse dragged event at the same location, while holding down the control key of a simulated keyboard and the alt key of a simulated keyboard and using the right button of the mouse for the mouse dragged event, one would use the following.

VK_TELETEXT VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_2 VK_DOWN VK_3 VK_DOWN VK_4 VK_DOWN VK_4 VK_7 VK_DOWN VK_ENTER

That is, one pushes down software buttons 2, 3, 4 and 47. Software button 2 is for the control key, software button 3 is for the alt key, software button 4 is for using the right button of the mouse and software button 47 is for the mouse dragged event.

Suppose that the end user wishes to simulate that mouse event and has entered all of the above sequence of button pushes except for the VK_ENTER button. That is, the end user has entered the following.

VK_TELETEXT VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_2 VK_DOWN VK_3 VK_DOWN VK_4 VK_DOWN VK_4 VK_7 VK_DOWN

The point at which the event will be simulated as taking place is displayed on the screen using XOR mode graphics. Suppose that the end user wishes to move the point at which the event will be simulated as taking place one pixel to the right. The end user may enter the following to complete the generation of the simulated event.

VK_9 VK_DOWN VK_RIGHT VK_ENTER

Had the end user wished to move the point on the screen one pixel to the right and two pixels up, then he or she would have entered the following to complete the generation of the simulated event.

VK_9 VK_DOWN VK_RIGHT VK_UP VK_UP VK_ENTER

Suppose in another example that the end user wishes to simulate the same mouse event as from before and has entered all of the above sequence of button pushes given before except for the VK_ENTER button. That is, the end user has entered the following.

VK_TELETEXT VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_2 VK_DOWN VK_3 VK_DOWN VK_4 VK_DOWN VK_4 VK_7 VK_DOWN

The point at which the event will be simulated as taking place is displayed on the screen using XOR mode graphics.

Suppose that the end user wishes to move the point at which the event will be simulated as taking place one pixel downward. The end user may enter the following to complete the generation of the simulated event.

VK_9 VK_DOWN VK_DOWN VK_ENTER

Please note that the two successive pushes of the VK_DOWN button on a hand held infra-red control device will have different meanings within the Astrolabe Channel numerical pointer universe, the first usage in the above example being to push down software button 9 and the second usage in the above example being to move the point at which the event will be simulated as taking place one pixel down the screen.

Thus for this latest example the end user will have generated the following VK_ events using the hand held infra-red control device.

VK_TELETEXT VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_2 VK_DOWN VK_3 VK_DOWN VK_4 VK_DOWN VK_4 VK_7 VK_DOWN VK_9 VK_DOWN VK_DOWN VK_ENTER

That is, a total of 21 input events, for the purpose of generating one simulated input event. That is a total of 22 input events to which the Java program needs to respond. Each of the 22 events is characterized by the value of the obeycode variable when the event is being processed, whether obeycode is an integer or a character in any particular implementation of an Astrolabe Channel numerical pointer. The method used for a VK_ENTER input event occurring when the operating point of the software is within the Astrolabe Channel numerical pointer universe is that the value of obeycode is changed, so as to represent the simulated event. Software to process events regarded as happening within the Astrolabe Channel numerical pointer universe or of causing entry to the Astrolabe Channel numerical pointer universe are processed before other events are considered. In this way it is possible for one user generated input event generated by a button push on the VK_ENTER button of a hand held infra-red control device to be processed as a sequence of two user generated input events, namely as the command to leave the Astrolabe Channel numerical pointer universe and the event simulated by the Astrolabe Channel numerical pointer.

As mentioned above the 21 input events produced by the end user are as follows.

VK_TELETEXT VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_2 VK_DOWN VK_3 VK_DOWN VK_4 VK_DOWN VK_4 VK_7 VK_DOWN VK_9 VK_DOWN VK_DOWN VK_ENTER

The new method of representing an obeycode with a character uses the following method.

Each VK_ event is expressed as an obeycode in the range U+E800 to U+E87F. Processing starts by using the VK_ code as an index to an array named vk_to_astrolabe in order to translate a VK_ event to an AC_ code or an ACNP_ code. In a system using an Astrolabe Channel numerical pointer, at start up the vk_to_astrolabe array would typically convert each VK_ code to the corresponding AC_ code, though with VK_TELETEXT converting to AC_ENTER_ACNP_UNIVERSE.

Thus VK_0 U+E800 would convert to AC_0 U+E900,

VK_1 U+E801 would convert to AC_1 U+E901,

and so on through to

VK_9 U+E809 converting to AC_1 U+E909,

and so on in that manner through VK_UP U+E80A converting to AC_UP U+E90A,

VK_DOWN U+E80B converting to AC_DOWN U+E90B,

VK_LEFT U+E80C converting to AC_LEFT U+E90C,

VK_RIGHT U+E80D converting to AC_RIGHT U+E90D,

to

VK_ENTER U+E80E converting to AC_ENTER U+E90E

the Astrolabe Channel numerical pointer facility being provided by

VK_TELETEXT U+E80F converting to AC_ENTER_ACNP_UNIVERSE U+E9AF,

(a system that does not use an Astrolabe Channel numerical pointer might well use VK_TELETEXT U+E80F converting to AC_TELETEXT U+E90F as the conversion instead)

then

VK_COLORED_KEY_0 U+E810 converting to AC_COLORED_KEY_0 U+E910

through to

VK_COLORED_KEY_3 U+E813 converting to AC_COLORED_KEY_3 U+E913

with

VK_COLORED_KEY_4 U+E814 converting to AC_COLORED_KEY_4 U+E914

and

VK_COLORED_KEY_5 U+E815 converting to AC_COLORED_KEY_5 U+E915 for completeness.

If a VK_ code was received the value of obeycode is thus changed.

The software then considers whether the obeycode character that it has is the AC_ENTER_ACNP_UNIVERSE code and, if it is the AC_ENTER_ACNP_UNIVERSE code, stores all of the contents of the vk_to_astrolabe array away into temporary storage and replaces the contents of the vk_to_astrolabe array with ACNP_ codes, namely ACNP_0, ACNP_1, and so on to ACNP_9, then ACNP_POP_UP, ACNP_PUSH_DOWN, ACNP_GET, ACNP_STORE, ACNP_LEAVE_ACNP_UNIVERSE, ACNP_NEGATE, ACNP_SET_HORIZONTAL, ACNP_SET_VERTICAL, ACNP_SET_INWARD, ACNP_SET_MEMORY_WRITE_INDEX.

Pushing down software button 9 of the Astrolabe Channel numerical pointer causes the elements of the vk_to_astrolabe array that process VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_TELETEXT, VK_COLORED_KEY_0, VK_COLORED_KEY_1 and VK_COLORED_KEY_2 to be changed to become ACNP_UP, ACNP_DOWN, ACNP_LEFT, ACNP_RIGHT, ACNP_LEAVE_SPECIAL_AREA, ACNP_GET_HORIZONTAL, ACNP_GET_VERTICAL and ACNP_GET_INWARD.

The ACNP_LEAVE_SPECIAL_AREA code is provided for completeness. It may be used if desired in constructing a simulated mouse event using an Astrolabe Channel numerical pointer if it is desired to go back to the main area of the Astrolabe Channel numerical pointer universe before leaving the Astrolabe Channel numerical pointer universe. For example, an end user might prefer to set up the precise location of the point on the screen before pushing software buttons 1, 2, 3 or 4. Another use is for the user to precisely position a point on the screen using the facilities of the special area and then to leave the special area and save the coordinates of the point in the memory of the Astrolabe Channel numerical pointer for use with simulating a mouse event at the same point on the screen at a later time.

The ACNP_LEAVE_SPECIAL_AREA code would cause the eight elements of the vk_to_astrolabe array to once again contain their previous values.

Returning to the example, the 21 codes from the button pushes are as follows.

VK_TELETEXT VK_1 VK_4 VK_5 VK_COLORED_KEY_0 VK_9 VK_7 VK_COLORED_KEY_1 VK_2 VK_DOWN VK_3 VK_DOWN VK_4 VK_DOWN VK_4 VK_7 VK_DOWN VK_9 VK_DOWN VK_DOWN VK_ENTER

They are processed with meanings as follows.

AC_ENTER_ACNP_UNIVERSE ACNP_1 ACNP_4 ACNP_5 ACNP_SET_HORIZONTAL ACNP_9 ACNP_7 ACNP_SET_VERTICAL ACNP_2 ACNP_PUSH_DOWN ACNP_3 ACNP_PUSH_DOWN ACNP_4 ACNP_PUSH_DOWN ACNP_4 ACNP_7 ACNP_PUSH_DOWN ACNP_9 ACNP_PUSH_DOWN ACNP_DOWN ACNP_LEAVE_ACNP_UNIVERSE

Please note in particular that the sequence VK_DOWN VK_DOWN is, in this example, processed as ACNP_PUSH_DOWN ACNP_DOWN, namely two different codes. This simplifies programming considerably.

The simulated input event that is generated by this example is ACE_MOUSE_DRAGGED U+E887. If software button 40 had been pushed, an ACE_NULL code U+E8FF would have been generated.

The ACNP_LEAVE_ACNP_UNIVERSE also replaces the contents of the vk_to_astrolabe array to what they were when the Astrolabe Channel numerical pointer universe was entered.

In processing an input event, having converted an incoming VK_ code to an AC_ code or an ACNP_ code and checking to see if the code produced is either to enter the Astrolabe Channel numerical pointer universe or to act within the Astrolabe Channel numerical pointer universe, the Java program must continue. It might now have an obeycode that is an AC_ event, not an ACNP_ event, or could be an ACE_ event either ACE_START U+E880 as start up of the program, or indeed could be a VK_ event if the Astrolabe Channel numerical pointer has been used to simulate a VK_ event. For example, the Astrolabe Channel numerical pointer might be used to simulate a VK_COLORED_KEY_4 or VK_COLORED_KEY_5 event.

Thus the software must again process any VK_ character through the vk_to_astrolabe array. Any ACE_ character is processed through the ace_to_astrolabe array.

After that all AC_ codes and any other codes used in the program need to be processed.

There are various sets of AC_ codes such as those suffixed _MEANING_1 and those suffixed _MEANING_2 and those suffixed _MEANING_3. So, as well as AC_7 U+E907 there is also AC_7_MEANING_1 U+E927 and AC_7_MEANING_2 U+E947 and AC_7_MEANING_3 U+E967. The AC_7 code is as if it had _MEANING_0 suffixed to it, though the suffix _MEANING_0 is never used. This simplifies the programming of applications as one may, if one is using this style of programming, have some AC_ codes, as one chooses in any particular application, that alter the contents of either or both of the vk_to_astrolabe and ace_to_astrolabe arrays. There are also special codes such as AC_NULL and AC_MINUS_SIGN and AC_DECIMAL_POINT and so on. Please note that the codes that are used in the software are Java char items, the names written using uppercase letters, numbers and underscores are for reference and inclusion in the comments of Java source codes and in documentation.

AC_START is U+E980, AC_MOUSE_PRESSED is U+E981 and so on with AC_MOUSE_DRAGGED at U+E987.

The ACNP_ codes are in the range U+EA80 through to U+EAFF.

Research on the implications of the use of these codes, as part of the eutocode system, is continuing. One particular interest is the way that they can be used to make the software environment available to application programmers and end users highly flexible. For example, using an Astrolabe Channel numerical pointer in order to generate eutocode graphics codes using the unicode courtyard facility and using those codes in parallel with simulated mouse clicks to draw graphic designs on the screen of a television display.

Readers who like to explore might like to consider the following: in an Astrolabe Channel numerical pointer implemented using ACNP_ codes, what will happen to the contents of the vk_to_astrolabe array of the program upon entering the unicode courtyard?

 

Astrolabe Channel

Copyright 2001 William Overington

This file is accessible as follows.

http://www.users.globalnet.co.uk/~ngo/ast01200.htm