README_os_390.txt for version 7.0aa of Vim: Vi IMproved.

Welcome to the OS/390 Unix port of VIM.

ATTENTION: THIS IS AN _ALPHA_ VERSION!!!
I expect you to know how to handle alpha software!

This port was done by Ralf Schandl <schandl@de.ibm.com>.
This port is not maintained or supported by IBM!!


For the list of changes see runtime/doc/os_390.txt.


Compiling:
----------

Note: After the file configure was created via autoconf, it had been
      handedited, to make the test for ICEConnectionNumber work.
      DO NOT run autoconf again!

Without X11:

If you build VIM without X11 support, compiling and building is nearly
straightforward. The only restriction is, that you can't call make from the
VIM toplevel directory. Change to the src directory first and call make from
there. Here is a what to do:

    # Don't use c89!
    # Make additional symbols visible.
    # Allow intermixing of compiler options and files.

    $ export CC=cc
    $ export CFLAGS=-D_ALL_SOURCE
    $ export _CC_CCMODE=1
    $./configure --enable-max-features --without-x --enable-gui=no
    $ cd src
    $ make
    $ make test

      Note: Test 28 will be reported as failed. This is because diff can't
	    compare files containing '\0' characters. Test 11 will fail if you
	    don't have gzip.

    $ make install


With X11:

There are two ways for building VIM with X11 support. The first way is simple
and results in a big executable (~13 Mb), the second needs a few additional
steps and results in a much smaller executable (~4.5 Mb). This examples assume
you want Motif.

  The easy way:
    $ export CC=cc
    $ export CFLAGS="-D_ALL_SOURCE -W c,dll"
    $ export LDFLAGS="-W l,dll"
    $ export _CC_CCMODE=1
    $ ./configure --enable-max-features --enable-gui=motif
    $ cd src
    $ make

    With this VIM is linked statically with the X11 libraries.

  The smarter way:
    Make VIM as described above. Then create a file named 'link.sed' with the
    following contense:

	s/-lXext  *//g
	s/-lXmu  *//g
	s/-lXm	*/\/usr\/lib\/Xm.x /g
	s/-lX11  */\/usr\/lib\/X11.x /g
	s/-lXt	*//g
	s/-lSM	*/\/usr\/lib\/SM.x /g
	s/-lICE  */\/usr\/lib\/ICE.x /g

    Then do:
    $ rm vim
    $ make

    Now Vim is linked with the X11-DLLs.

    See the Makefile and the file link.sh on how link.sed is used.


Hint:
-----
Use the online help! (See weaknesses below.)

Example:
Enter ':help syntax' and then press <TAB> several times, you will switch
through all help items containing 'syntax'. Press <ENTER> on the one you are
interested at. Or press <Ctrl-D> and you will get a list of all items printed
that contain 'syntax'.

The helpfiles contains cross-references. Links are between '|'. Position the
cursor on them and press <Ctrl-]> to follow this link. Use <Ctrl-T> to jump
back.

Known weaknesses:
-----------------

- You can't call make from the toplevel directory, you have to do a 'cd src'
  first.  If you do it, make will call configure again. I don't know why and
  didn't investigate it, there were more important things to do. If you can
  make it work drop me a note.

- The documentation was not updated for this alpha release. It contains lot of
  ASCII dependencies, especially in examples.

- Digraphs are dependent on code page 1047. Digraphs are used to enter
  characters that normally cannot be entered by an ordinary keyboard.
  See ":help digraphs".

- Using 'ga' to show the code of the character under the cursor shows the
  correct dec/hex/oct values, but the other informations might be missing or
  wrong.

- The sed syntax file doesn't work, it is ASCII dependent.

Bugs:
-----
If you find a bug please inform me (schandl@de.ibm.com), don't disturb Bram
Moolenaar. It's most likely a bug I introduced during porting or some ASCII
dependency I didn't notice.

Feedback:
---------
Feedback welcome! Just drop me a note.
