home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / VDE263.ZIP / VINST263.DOC < prev   
Text File  |  1990-02-10  |  24KB  |  393 lines

  1.                                  VINST263.DOC
  2.                                  ------------
  3.                            [Supplement to VDE.DOC]
  4.  
  5.                     Instuctions for VINSTALL 2.63 (01/88)
  6.                 Installation Utility for Video Display Editor
  7.  
  8.                                (c)1988 E. Meyer
  9.  
  10.  
  11.      As distributed, VDE is set up for a basic Generic Terminal, and VDE-M is 
  12. set up for an Osborne Executive.  If you use another computer/terminal, you 
  13. will probably need to re-"install" VDE(M) before using it.  VDE can now be 
  14. installed for ANY terminal; if improperly installed, the display may be a 
  15. mess, but there are no other side effects.  VDE-M requires a computer with 
  16. memory-mapped video; if improperly installed, it may crash.
  17.      Most users should be able to install VDE simply by going to the Terminal 
  18. Installation and choosing the <L>ist option to select from a menu of terminals 
  19. already built into VINSTALL.  The list is not exhaustive, but it includes most 
  20. basic types: for example, the "LearSiegler ADM3" data should do well enough on 
  21. Qume, Wyse, Freedom and many other terminals, as well as many computers, that 
  22. emulate an ADM3 terminal.  Check your manual to see whether your machine 
  23. emulates one on the menu, or comes close.  Once you have VDE basically 
  24. working, you may want to go through the detailed <E>dit procedure to fine tune 
  25. things; the better the installation, the faster the display will work.
  26.      NOTE: the installation of arrow keys affects VDE's command behavior.  If 
  27. the keys ^J,^K,^L are in use as arrow keys, as in many of the CP/M defaults, 
  28. they will not function as Wordstar synonyms.
  29.      Installing VDE for your computer should not be difficult.  If you find 
  30. that it was, please consider dropping me a note with the details of what was 
  31. required, so that future versions of VINSTALL can be improved.
  32.  
  33.      Terminal installation, while necessary, is only one part of VINSTALL.  
  34. There are also a number of User Options affecting the operation of VDE that 
  35. you can select or modify to suit your taste, and a default set of Macro Keys.
  36.      The default printer installation is a basic Teletype (no special codes 
  37. enabled); VDE assumes only that the printer responds normally to Backspace (if 
  38. ^PH is used), Linefeed, and Formfeed.  You will probably want to redo this, so 
  39. you will have access to your printer's special features.
  40.      
  41.  
  42. =============================  RUNNING VINSTALL  =============================
  43.  
  44. VINSTALL SYNTAX:    A>vinstall {d:}vdename{.com} {instfil}     "{}"=optional
  45.  
  46.      Typically, you can use VINSTxx to modify VDExx.COM (of course, feel free 
  47. to rename these files more conveniently) simply by typing:
  48.                     A>VINSTxx VDExx
  49. and selecting the values you want to change.  If you have to do a manual 
  50. installation of VDE for your computer, you may want to create an "installation 
  51. file" which you can use (and give to others) to supplement the built-in 
  52. terminal list of VINSTALL.  This is done by specifying another filename:
  53.                     A>VINSTxx VDExx TERMNAME
  54. VINSTALL will load and use (or create) the file TERMNAME.VDE (or .VDM), and 
  55. update it as well as VDE.COM when you exit.  The installation file is very 
  56. small, containing just terminal parameters (no user options, etc).
  57.      It is also possible to create "key files" of VDE macro key definitions.  
  58. These work just the same way, except they must have a filetype of ".VDK", and 
  59. this must be specified on the command line, eg:
  60.                     A>VINSTxx VDExx MYKEYS.VDK
  61.      There are also "printer files" of type ".VDP", which store your printer 
  62. installation data, and work the same way:
  63.                     A>VINSTxx VDExx OKIDATA.VDP
  64. (No, you can't specify more than one supplemental file at once.)  The version 
  65. numbers of VDE(M), VINSTALL, and any ".VDx" files must "agree" or you will get 
  66. an error.  The match need not be exact, as there may be a new release of VDE 
  67. without modifying the installation areas.
  68.      VINSTALL's Key (".VDK") files are compatible with MSDOS versions of VDE 
  69. as well (except that the MSDOS version allows up to 1K for definitions).
  70.  
  71.      VINSTALL is largely self-documenting, and steps you through each item 
  72. individually.  If this is your first time running the program, take advantage 
  73. of its "Help" option before you start in, for some basic instructions.  You 
  74. may also find a good ASCII chart helpful.  VINSTALL uses several different 
  75. types of data entry:
  76.      TEXT - Just type in the character(s).
  77.      LOGICAL - Yes/No.  Just type "Y" or "N".
  78.      DECIMAL - Enter a number from 0 to 255.
  79.      HEX - Enter a two-digit hex byte value 00-FF.  (Don't omit lead zeros.)
  80.      BYTE STRINGS - fixed length: enter the required number of hex bytes.
  81.                     variable: enter the (hex) count for the number of bytes, 
  82.               followed by the bytes themselves.  Example:  (02)1B3D.  The max- 
  83.               imum length is given in square brackets [#].  This format is 
  84.               referred to below as "(#),bytes".
  85. VINSTALL can't check for illegal values; be careful what you enter!
  86.  
  87.      What follows is a more detailed explanation of installation items, in 
  88. about the same order as in the VINSTALL procedure.  Most people will be using 
  89. VDE; you can try to use VDE-M instead if you have memory mapped video with:  
  90. (1) a high bit that can be used to highlight and provide a cursor; (2) an 
  91. absolute address at or above 3000h.  Memory mapped video provides much faster 
  92. screen display if your hardware supports it.
  93.  
  94. USER OPTIONS
  95.        Create BAKup files (Y/N) - Should a backup file be made when you edit 
  96.     an existing file?  Choose "Y" to play safe, "N" to save disk space.
  97.        Default file mode (W/A/N) -  Which of the three file modes "W","A","N" 
  98.     described in VDE.DOC do you want as the default?  (Originally "A".)
  99.        Default insert on (Y/N) - Do you want the INSERT toggle to start out ON 
  100.     when first entering VDE?  (Originally No.)
  101.        Default ruler on (Y/N) - Do you want the Ruler line (^OT) to start out 
  102.     ON when first entering VDE?  (Originally No.)
  103.        Default HCR display on (Y/N) - Do you want Hard CR display (^OD) to 
  104.     start out ON when entering a Document file ("W/A" mode)?  Originally Yes. 
  105.     (The default is always OFF in "N" mode.)
  106.        Enable hyphenation (Y/N) - Do you want hyphenation (^OH) to start out 
  107.     ON when first entering VDE?  Originally Yes.
  108.        Left and Right margin columns (1-255) - Default margin settings for 
  109.     "W/A" modes.  Set both to 1 to entirely disable wordwrap and reformatting.
  110.        Page length (0-255) - Set the number of text lines to print on a page.  
  111.     (Does not include another 3 lines for a header, if used.)  Setting to 0 
  112.     disables pagination entirely.
  113.        Scroll overlap (0-255) - This is the number of lines overlap between 
  114.     screens when scrolling with ^R/^C.  The smaller, the larger the scroll.  
  115.     Keep this smaller than your screen size!
  116.        Show system files (Y/N) - Do you want files with the SYStem attribute 
  117.     to show in the VDE directory display?
  118.        Fixed drives (A-P) -  This lets you specify that up to two CP/M logical 
  119.     drives are nonremovable media (hard or RAM disk), so VDE won't reset them 
  120.     before writing to them, speeding up some systems.  Enter two drives from 
  121.     "A" to "P"; to leave either blank, enter "@".  (The default is "@@", or 
  122.     none; if you have a RAM drive C:, enter "C@".)  Caution: naming a floppy 
  123.     drive here can cause serious BDOS errors on CP/M 2 systems.
  124.        Ring bell on error (Y/N) - Do you want your terminal bell to ring when 
  125.     a VDE error message displays?
  126.        Alternate video in header (Y/N) - Do you want the header, messages, etc 
  127.     to appear in a contrasting video mode (if installed)?
  128.        Block mark character (00-1F) - Usually ^B (02), but if you need to 
  129.     imbed that code in your files for any reason (eg, ZCPR3) you can change 
  130.     this to some other (otherwise unused) ASCII hex code, such as 00 (^@).
  131.        Wildcard character - Normally "_", this is the character that will be 
  132.     used as a wildcard in FIND strings.  Change if you wish.
  133.        Clock speed in MHz (01-FF) - Set this hex value to reflect your CPU 
  134.     clock speed; most Z80 computers are 4.0 MHz (use 40 here).
  135.        Horizontal scroll delay (01-FF) - This value affects the delay between 
  136.     scrolling the current line and the rest of the screen, when working beyond 
  137.     the right screen edge.  The average value is 80; adjust up or down as you 
  138.     like.  (VDE-M is so fast that a value of 01 is recommended.)
  139.        Hard Tab display spacing  -  This determines how any actual Tabs (^I) 
  140.     in your text will display.  Usually 8, this can be made 2, 4, 16, or any 
  141.     other power of two.  Other values will produce erratic results.
  142.        Variable tab stops -  Enter a list of up to 8 variable tab stop 
  143.     columns, in ascending order.  (Column 1 is the leftmost.)  Fill unused 
  144.     values with zero.  Originally 5,15,35,55.
  145.  
  146. TERMINAL INSTALLATION (Both versions)
  147.        Terminal ID - Identify the terminal you are installing. (16 characters)
  148.        Viewable screen columns (40-255) - Enter the width of your screen in 
  149.     columns.  The normal value is 80 for a standard screen.
  150.        Screen lines (4-255) - Enter the number of lines on your screen.  
  151.     Normally 24 for a standard screen.  Must be at least 4.
  152.        DELete character (00-7F) - VDE always accepts DEL (7F) as a delete key. 
  153.     If your keyboard can't generate this you can install an alternate value 
  154.     here (example: 1F enables ^_ on an Osborne 1).  Also, if you prefer to 
  155.     have a destructive (deleting) Backspace, you can install ^H (08) here.  
  156.     Otherwise you can leave this at the default value, FF for "not used".
  157.        Arrows up, down, right, left (00-7F) - VDE always accepts Wordstar 
  158.     arrows ^E,^X,^D,^S, as well as ^H (backspace) and ANSI ESC sequences.  If 
  159.     your terminal has arrow keys that generate different values, you can 
  160.     install them as alternates here.  Omit high (parity) bits; VDE strips 
  161.     these.  Use "FF" for "not used".  The default is CP/M ^K,^J,^L, entered as 
  162.     0B0A0CFF.  (Don't install ^H here.)  These keys will not function as 
  163.     Wordstar synonyms unless you remove these assignments.
  164.        Terminal init, uninit - Enter the codes you want sent to initialize 
  165.     your screen on entry into VDE, and to uninitialize on exit, in the form 
  166.     (# of bytes),bytes.  Example: ^Z is (01)1A.  Minimally, both sets of codes 
  167.     should clear the screen.
  168.  
  169. TERMINAL INSTALLATION (Generic VDE only)
  170.        Autowrap at line end (Y/N) -  Usually Yes, as most terminals wrap down 
  171.     to the next line when a character is printed at the right edge of the 
  172.     screen.  If yours discards characters instead, set this to No.
  173.        Clear to end of line - Enter the codes to clear to the end of the line, 
  174.     as (#),bytes.  Example: ESC-T is (02)1B54.  If your terminal can't do this 
  175.     then zero it out (00).
  176.        Alternate video on/off - Enter the codes (#),bytes to turn your 
  177.     favorite video attribute (eg inverse, dim) on and off.  This will be used 
  178.     for control codes and (optionally) the header and messages.  If your 
  179.     terminal has no attributes, zero these out (00).
  180.        Use high bit for alt. video (Y/N) - If, instead, your terminal needs 
  181.     the high bit set on characters to put them in alternate video, zero the 
  182.     above strings out and say Yes here; otherwise, No.
  183.        Console filter (7D-FF) - This is the highest ASCII code that will be 
  184.     sent to the screen.  Normally 7F; if your terminal can't display codes 7F 
  185.     or 7E (DEL and tilde), lower this to 7E or 7D.  Characters filtered out 
  186.     will display as a "?".
  187.        Cursor positioning mode (S/R/A/N) - This tells VDE how your terminal 
  188.     can be made to put the cursor at any given row/column on the screen:
  189.               "S"tandard = leadin byte(s), row byte, column byte (default)
  190.               "R"eversed = leadin byte(s), column byte, row byte
  191.               "A"NSI std = ANSI standard sequences "ESC[rr;ccH"
  192.               "N"one     = no absolute cursor addressing supported
  193.        Cursor positioning sequence - This is the actual sequence used to 
  194.     address the cursor.  IF YOU CHOSE "A" mode above, you can skip this 
  195.     entirely.  IF YOU CHOSE "S" or "R", then enter the 4-byte sequence for 
  196.     addressing the cursor to the top left:  two lead bytes, then two 
  197.     row/column offsets.  Most terminals use ESC,=,20h+row,20h+col, or 
  198.     1B3D2020.  If you have only one lead byte, enter 00 for the second.  IF 
  199.     YOU CHOSE "N", then you must enter two 2-byte sequences instead: first one 
  200.     to home the cursor, then one to move it right.  If either is only one 
  201.     byte, enter 00 for the second.  Typical values are home=1Eh, right=0Ch, 
  202.     which would make 1E000C00.
  203.        Delay after cursor positioning (00-FF) - Normally 00.  Some slow 
  204.     terminals require a delay here to accomplish cursor movement; adjust this 
  205.     value upwards as necessary.
  206.        Insert, Delete line - Sequences that will cause the current cursor line 
  207.     to be deleted, or a new line inserted there.  Most terminals can do this.  
  208.     Example: on an ADM3-style terminal, ESC-E or (02)1B45 inserts a line 
  209.     before the current one, while ESC-R or (02)1B52 deletes a line.  For a few 
  210.     terminals, you have to specify which line is to be inserted/deleted; in 
  211.     this case, enter the sequences for line 1 (the second screen line).  If 
  212.     your terminal can't do this at all, zero these out (00).
  213.        Ins/del specific to line 1 - Usually No; set to Yes only if the ins/del 
  214.     sequences you installed above are for line 1 only, rather than general.
  215.  
  216. TERMINAL INSTALLATION (Memory-mapped VDE-M only)
  217.        Unused columns of RAM (0-255) - Enter the number of unused bytes in 
  218.     video RAM between the end of one visible line and the start of the next.  
  219.     Example: many computers have 128 bytes of RAM per line, but only show 80 
  220.     of them.  So there would be 48 unused columns.
  221.        Cursor on/off - Enter the codes (#),bytes to turn the regular CP/M 
  222.     cursor on and off, so it won't appear on the VDE screen.  If you can't do 
  223.     this zero them out (00), and the cursor will remain visible at the upper 
  224.     corner of the screen.
  225.        Video RAM start (3000-FFFF) - Enter the starting address of your video 
  226.     memory, as four hex digits.
  227.        Video in/out code - If your video RAM is in the ordinary bank of 
  228.     memory (eg, at F000), just enter "C9" here (that's a RET instruction).  
  229.     Otherwise, you will need the machine-language code to switch video memory 
  230.     in and out.  There are 16 bytes available for each routine, and you must 
  231.     preserve all the CPU registers (including A), and end with a RET.  You 
  232.     should find the assembler code to do this in your terminal manual; to 
  233.     convert it to hex, either look up the hex values in a Z80 reference book, 
  234.     or use DDT or ASM/MAC to write and assemble the code to hex form.  You may 
  235.     find it easier to install this code with an assembler overlay than with 
  236.     VINSTALL.  The addresses are 0190h (VidIN) and 01A0h (VidOUT).
  237.  
  238. PRINTER INSTALLATION
  239.        Printer ID - Identify the printer you are installing.  (16 characters)
  240.        Send LF after CR (Y/N) - Normally Yes.  But with some printers, which 
  241.     manufacture their own LF on receiving a CR, you will want No here.
  242.        Printer initialization - Enter a string of code (#),bytes to send to 
  243.     the printer before each print job, to set margins, print modes etc.
  244.        Printer uninit - Enter another string (#),bytes to send to the printer 
  245.     after each print job, to restore printer to desired state on exit.
  246.        Toggles and switches - These are the ^P-codes that will be used to call 
  247.     up predefined sequences.  There are four toggles, then four switches, all 
  248.     entered as hex ASCII values.  The defaults (^D,^S,^Y,^T; ^Q,^W,^E,^R) are 
  249.     chosen for WordStar compatibility, but can be changed if you want.  (Avoid 
  250.     ^H,^I,^J,^L,^M,^Z, and your Block character, which are used for other 
  251.     purposes.)
  252.        Codes for toggles (on/off) - Enter the actual hex codes (#),bytes to 
  253.     send to fhe printer on encountering each of the four toggle codes defined 
  254.     above, first to turn a feature on, then off.
  255.        Codes for switches - Enter the actual hex codes (#),bytes to send to 
  256.     the printer on encountering each of the four switches defined above.
  257.  
  258. MACRO KEYS
  259.          The default macro definitions are those attached to the commands ESC- 
  260.     0..9 when VDE is first entered.  By changing them you can configure VDE to 
  261.     suit your own specialized writing requirements.  (Any Keys defined with 
  262.     ESC-K while running VDE override the defaults.)
  263.          VINSTALL gives you a display much like this:
  264.       MACRO KEYS:  (01C6 bytes free)  <---- note free bytes (up to 01F4 = 500)
  265.       <0><>
  266.       <1><>                           <---- "<>" flag means empty
  267.       <2><>
  268.       <3>^[;^C                        <---- normal macro key
  269.       <4><>
  270.       <5><N>World Wide Widgets Inc.   <---- "<N>" flag means no-rpt key
  271.       <6><>
  272.       <7><Q>^QR^[B^QC^[T^[C           <---- "<Q>" flag means quiet key
  273.       <8><>
  274.       <9><>
  275.     This is pretty straightforward; you just select the number of the Key you 
  276.     wish to redefine, then type in the new definition, much as you would in 
  277.     VDE.  All the same rules apply (but VINSTALL will accept longer keys, up 
  278.     to 128 bytes).  If the new definition is too long to fit it will be 
  279.     rejected.
  280.  
  281. FURTHER USER PATCHING
  282.        Entry to VDE is via a JP instruction at 0100h.  The current value is JP 
  283.     0480h.  Thus, to add a user entry routine, you can instead JP to your own 
  284.     code in the User Patch area, and finish it with JP 0480h.  Exit from VDE 
  285.     is via a JP instruction at 0103h, normally JP 0000h.  To add a user exit 
  286.     routine, you can instead JP to code in the Patch area, and finish it with 
  287.     a warm boot (RST 0).
  288.        The address of the User Patch area will be given to you by VINSTALL.  
  289.     This small region in VDE can be used to install any extra patch code you 
  290.     need.  (Example:  if your video in/out routines won't fit into 16 bytes, 
  291.     you can jump to the User Patch area and put more code there.)  This is the 
  292.     ONLY such area available, as VDE uses all available memory after its own 
  293.     code for editing text.  Note: if you find the User Patch area too small, 
  294.     you can also use up to 32 extra bytes before it.  This is the Print Switch 
  295.     code area; you must then avoid using the four Switch codes.
  296.        VINSTALL also tells you the addresses of the command tables in VDE/M. 
  297.     You may find this useful if you need to go in and change a VDE command key 
  298.     that conflicts with your computer's firmware.  There are four command 
  299.     tables: basic, ESC/^K, ^O, and ^Q.  Each is a list of 3-byte entries, with 
  300.     a one byte keycode, then a two byte address.  (Examples: you will find the 
  301.     ^T command in the basic table; the ^OX command appears in the ^O table, as 
  302.     ^X.)  Find the problem keycode, and use DDT or another utility to change 
  303.     it.  (You will also see the "keycodes" 00 and 80-84h in the tables; these 
  304.     are used internally for arrow keys and other functions.)
  305.  
  306. RESTORE DEFAULTS
  307.        This option is provided in the event that someone has so mucked up your 
  308.     copy of VDE that you can't sort out what's wrong.  This should return VDE 
  309.     to nearly the state it was distributed in: all User Options restored to 
  310.     their defaults, Terminal Installation set to Generic (or Osborne Exec), 
  311.     printer set to a basic Teletype, no Macro Keys, no User Patch code.
  312.  
  313.  
  314. ==========================  GOING BEYOND VINSTALL  ===========================
  315.  
  316.      If your computer requires special additional code, and you know how to 
  317. use an assembler, you may want to make an overlay to add this code to VDE.  
  318. (You may also find this the easiest way to install other data, such as the 
  319. VidIN/OUT routines for the VDM Terminal Installation.)  Write the overlay 
  320. file, generate a HEX file with your assembler, then merge it with VDE.COM 
  321. using MLOAD or a similar utility.  (Be sure the code fits!)
  322.      Example: the following overlay adds special code for the NEC Starlet to 
  323. the User Patch area, where it is immediately executed when VDE is called up.  
  324. The Starlet has different terminal emulations and key definitions; most of 
  325. this code just ensures that it's in Soroc mode (which is what VINSTALL sets 
  326. VDE up for), and sets the cursor and DEL key definitions properly.
  327.      There is another problem: the VDE case toggle command (^^) has to be 
  328. changed, as it will conflict with one of the Soroc arrow keys.  (On some other 
  329. computers, you can't generate ^^ from the keyboard at all.)  Note how the 
  330. overlay finds the address of the main command menu (all the menu addresses are 
  331. stored at 010B-0112h in VDE.COM; alternatively, you can get VINSTALL to tell 
  332. you what they are), adds the appropriate offset (determine this yourself), and 
  333. then changes the command key to something else.  Note the flags "*--->" for 
  334. data that may change with versions of VDE.
  335.        ;NEC8401 Patch for VDE 2.63 (Z80 mnemonics)
  336.        org  0100h             ;At beginning of VDE.COM,
  337.               jp   entry      ; jump to User Patch area
  338. *--->  org  0248h             ;At User Patch area,
  339.        entry: ld   c,08h      ; set screen mode:
  340.               ld   e,81h      ;  Soroc, wrap on, fnkeys off, etc
  341.               rst  10h        ;   call special BIOS
  342.               ld   c,4Eh      ; set cursor keys:
  343.               ld   e,3        ;  to mapped codes
  344.               rst  10h        ;   call special BIOS
  345.               ld   c,4Dh      ; set definable key:
  346.               ld   de,data    ;  using data below
  347.               rst  10h        ;   call special BIOS
  348. *--->         ld   hl,(010Bh) ; get address of main command menu
  349. *--->         ld   de,7*3     ;  offset of ^^ (this may change)
  350.               add  hl,de      ;   point to offending ^^ code
  351.               ld   (hl),0Ch   ;    change it to ^L instead
  352. *--->         jp   0480h      ;Jump to VDE Start point
  353.        data:  db  4,7Fh,0,0   ;Data to set "DEL" key as DEL (7F)
  354.               end
  355.  
  356.      Here's another example: the Bondwell 14 will run VDE-M, but can't turn 
  357. off its own cursor with an ESC sequence.  After selecting the BW14 terminal 
  358. installation from VINSTALL, you need to add small Z80 routines to turn off the 
  359. cursor on entry, and restore it on exit.
  360.        ;BONDWELL 14 patch for VDE-M 2.63 (Z80 mnemonics)
  361.        org  0100h           ;At beginning of VDE.COM,
  362.               jp   entry    ; (0100h) jump to entry routine in Patch area
  363.               jp   exit     ; (0103h) jump to exit routine in Patch area
  364. *--->  org  0248h           ;At User Patch area,
  365.        entry: ld   a,0Ah    ;entry routine to turn cursor off
  366.               out  10h,a
  367.               ld   a,20h
  368.               out  11h,a
  369.               ld   a,0Bh
  370.               out  10h,a
  371.               xor  a,a
  372.               out  11h,a   ;Done...
  373. *--->         jp   0480h   ;Jump to VDE start point
  374.        ;
  375.        exit:  ld   a,0Ah   ;exit routine to turn cursor on
  376.               out  10h,a
  377.               ld   a,40h
  378.               out  11h,a
  379.               ld   a,0Bh
  380.               out  10h,a
  381.               ld   a,8
  382.               out  11h,a   ;Done...
  383.               rst  0       ;Reboot CP/M
  384.               end
  385.  
  386. You can also add code like this to VDE.COM using the "a" command to enter 
  387. assembler mnemonics in a debugging utility like DDT or (Z)SID.
  388.  
  389.  
  390.   Eric Meyer, 427 N. Washington, Bloomington IN 47401  ---  CIS [74415,1305]
  391.  
  392. ==============================================================================
  393.