ref: fb7dd4b3a868cb8987049c95bb32e6425a73c8b9
dir: /appl/examples/minitel/README/
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