summaryrefslogtreecommitdiff
path: root/appl/examples/minitel/README
diff options
context:
space:
mode:
Diffstat (limited to 'appl/examples/minitel/README')
-rw-r--r--appl/examples/minitel/README209
1 files changed, 209 insertions, 0 deletions
diff --git a/appl/examples/minitel/README b/appl/examples/minitel/README
new file mode 100644
index 00000000..82f3202e
--- /dev/null
+++ b/appl/examples/minitel/README
@@ -0,0 +1,209 @@
+Minitel Emulation for Inferno
+
+This directory contains the source of `miniterm', a minitel emulator
+for Inferno. Miniterm is written in Limbo. The main components are:
+
+ miniterm.m - common constants
+ miniterm.b - terminal emulator, messaging and Minitel `protocol`
+ event.[mb] - inter-module message format
+ keyb.b - Minitel keyboard module
+ modem.b - Minitel modem module
+ screen.b - Minitel screen module
+ socket.b - Minitel socket module
+ arg.m - basic command line argument handling
+ mdisplay.[mb] - Videotex display module
+ swkeyb.[mb] - Minitel aware software keyboard
+
+ fonts.tgz which expands into:
+
+ fonts/minitel - external and subfont directory (`bind -b' into /fonts)
+ fonts/minitel/f40x25 - 40 column external font
+ fonts/minitel/14x17
+ fonts/minitel/14x17xoe
+ fonts/minitel/14x17arrow
+ fonts/minitel/f40x25g1 - 40 column semigraphic external font
+ fonts/minitel/vid14x17
+ fonts/minitel/f40x25h - 40 column double height external font
+ fonts/minitel/14x34
+ fonts/minitel/14x34xoe
+ fonts/minitel/14x34arrow
+ fonts/minitel/f40x25w - 40 column double width external font
+ fonts/minitel/28x17
+ fonts/minitel/28x17xoe
+ fonts/minitel/28x17arrow
+ fonts/minitel/f40x25s - 40 column double size external font
+ fonts/minitel/28x34xoe
+ fonts/minitel/28x34arrow
+ fonts/minitel/f80x25 - 80 column external font
+ fonts/minitel/8x12
+ fonts/minitel/8x12xoe
+ fonts/minitel/8x12arrow
+
+The fonts subdirectory should be bound into /fonts:
+ bind -b fonts /fonts
+or the directory fonts/minitel copied to /fonts/minitel before invoking the emulator.
+The names of the external fonts are
+known to the Videotex display module. Similarly, the files:
+ /dev/modem
+ /dev/modemctl
+are known to the modem module, but you can ignore them if
+(as is almost certain) you are using the Internet-minitel gateway
+and you haven't got appropriate modem hardware anyway.
+
+To build
+ mkdir /usr/inferno/dis/wm/minitel
+ mk install
+
+The code models the structure outlined in the Minitel 1B specification
+provided by France Telecom. However, much more interpretation was
+required to display the majority of screens currently seen on Minitel.
+Additional information (although sketchy) was found on the Internet by
+searching for Minitel or Videotex and also by examination of the codes
+sent by minitel servers and experimenting with replies. There must be
+some more up to date information somewhere!
+
+We don't support downloadable fonts, but correctly filter them out.
+
+The file miniterm.b contains the code for the minitel `terminal' with
+which the other modules communicate. The keyboard, modem, socket,
+screen and terminal are run as separate threads which communicate by
+calling:
+ send(e: ref Event)
+The clue to the intermodule communication is in Terminal.run which
+does something like:
+ for(;;) {
+ ev =<- t.in =>
+ eva := protocol(ev);
+ while(len eva > 0) {
+ post(eva[0]);
+ eva = eva[1:];
+ }
+ # then deliver any `posted' messages (without blocking)
+ }
+An Event `ev' may typically be an Edata type (say from the modem) or
+an Eproto type for internal interpretation. In the call:
+ eva := protocol(ev)
+The function protocol() dissects Edata messages to produce an inline
+sequence of Edata and Eproto messages. The function post() queues
+messages for delivery to the appropriate modules. For example, data
+from the modem might be destined for the screen and the socket module.
+Messages are queued until they can be delivered. That way the line:
+ ev =<- t.in
+is executed in a timely way and the other modules can be written to
+make blocking writes (via send()) and to service reads when they are
+ready.
+
+In many places in the code lines appear with comments like:
+ if(p.skip < 1 || p.skip > 127) # 5.0
+These refer to sections of the Minitel specification which explain the
+code.
+
+The mdisplay code provides a Videotex display using Inferno
+primitives. The screen, keyboard and modem modules interpret data as
+described in the equivalent section of the Minitel specification. The
+socket module has not been implemented but currently performs a `null'
+function and could easily be added if required.
+
+
+- Namespace
+We always expect the fonts to appear in /fonts and the softmodem
+to appear as /dev/modem and /dev/modemctl.
+
+- Invocation
+If invoked with no argument, miniterm uses the France Telecom
+internet gateway by default (tcp!193.252.252.250!513).
+If the argument starts with `modem' then
+a direct connection through /dev/modem will be established.
+
+An argument beginning with anything other than `modem' will
+be assumed to be an address suitable for dial(). For example:
+
+ wm/minitel/miniterm tcp!193.252.252.250!513
+
+will connect to the current France Telecom internet server.
+
+For direct connections a modem `init' string and an optional
+phone number can follow the modem prefix, as in:
+
+ wm/minitel/miniterm modem!F3!3615
+
+or
+
+ wm/minitel/miniterm modem!F3!01133836431414
+
+The `F3' is the code which instructs the softmodem to enable V.23
+and needs to be passed when connecting to the FT servers.
+To use pulse dialing instead of tone dialing the phone number
+can be prefixed with a 'P' as in:
+
+ wm/minitel/miniterm modem!F3!P3614
+
+If the parameter specifies a network connection or a direct connection
+with a phone number the software will attempt to connect immediately.
+If Cx/Fin is used to disconnect and then re-connect it will use the
+same IP address for a network connection or prompt for a new
+phone number in the case of a direct connection. When prompting
+for a new number the top row of the screen is used to allow the user
+to edit the last used number. Simple editing is available, and the minitel
+keys do the obvious things.
+
+
+
+** Notes on the 15th December 1998 Release **
+
+- Software keyboard
+A version of the software keyboard which understands some of
+the minitel keyboard mappings is included. For example, hitting 'A' results
+in a capital 'A' on the screen in spite of the Videotex case mapping.
+
+- Minitel function keys
+The minitel keys are displayed on the right hand side of the screen
+in 40 column mode on a network connection
+and can be swapped to the left hand side by hitting the <- key.
+In direct dial mode and 80 column network mode the keys are
+displayed at the bottom of the screen.
+In network mode they are re-displayed as appropriate on 40 to 80
+column mode changes.
+
+
+Known Omission
+-------------
+- Error Correction (direct dial only)
+There is no screen button to enable error correction in the release.
+If a server asks for error correction it will be enabled. It looks as though
+we need to include a key to enable it. Without it direct dial screens are
+occasionally corrupted.
+
+- Software Keyboard Handling
+We need to add some code to update the software keyboard and
+bring it to the foreground on a mode change.
+
+- Full 80 column support
+I am aware of some screens which don't look correct in 80 column
+mode (and others that do). See `EMAIL' then choose USENET and
+press SUITE a few times. I believe it behaves as specified but as we
+have seen with the 40 column Videotex mode the specification
+is not sufficient to display most of the minitel screens correctly.
+80 column support needs just a little more work.
+It may be, too, that the 80 column font could be made much more
+readable by utilising a few more pixels on the screen now that we
+are able to cover the toolbar.
+
+- Full toolbar integration
+Experimentation will show whether there needs to be more
+integration with the toolbar.
+
+Known Bugs
+----------
+- Softmodem disconnection
+Often, the modem does not hangup correctly.
+
+- Choose `USA' from a network connection
+USA (from a network connection) gives an `iC' in bottom left hand
+corner of screen. Possibly a server issue. Doesn't occur when
+connecting directly. The server is really sending this sequence.
+Both the FT emulator and their explorer plug-in suffer from it too.
+
+
+John Bates
+Vita Nuova Limited