*os_390.txt*    For Vim version 7.0.  Last change: 2005 Mar 29


		  VIM REFERENCE MANUAL	  by Ralf Schandl

					*zOS* *z/OS* *OS390* *os390* *MVS*
This file contains the particulars for the z/OS UNIX version of Vim.

1. Open source on z/OS UNIX		|zOS-open-source|
2. Your feedback is needed		|zOS-feedback|
3. Building VIM for z/OS UNIX		|zOS-building|
4. ASCII/EBCDIC dependent scripts	|zOS-has-ebcdic|
5. XTerm Problems			|zOS-xterm|
6. Motif Problems			|zOS-Motif|
7. Bugs					|zOS-Bugs|
8. Known weaknesses			|zOS-weaknesses|
9. Changes				|zOS-changes|

DISCLAIMER: ~
We are IBM employees, but IBM is not responsible for this port.  This is our
private fun, and is provided in the hopes that it may be useful to others.

Please note that this software has NOT been submitted to any formal IBM
testing and is published AS IS.  Please do not contact IBM for support for this
software, as it is not an official component of any IBM product.  IT IS NOT
SUPPORTED, GUARANTEED, OR RELATED WHATSOEVER TO IBM.

Contributors: ~
The port to z/OS UNIX was done by Ralf Schandl for the Redbook mentioned
below.

Changes, bug-reports, or both by:

	David Moore
	Anthony Giorgio <agiorgio@fastmail.fm>
	and others

This document was written by Ralf Schandl and revised by Anthony Giorgio.

==============================================================================
1. Open source on z/OS UNIX		*OS390-open-source* *zOS-open-source*

If you are interested in other Open Source Software on z/OS UNIX, have a
look at the following Redbook:

    Mike MacIsaac et al
    "Open Source Software for z/OS and OS/390 UNIX"
    IBM Form Number: SG24-5944-01
    ISBN: 0738424633

You can find out more information, order a hard copy, or download a PDF
version of these Redbooks at:

	    http://www.redbooks.ibm.com

==============================================================================
2. Your feedback is needed		*OS390-feedback* *zOS-feedback*

Vim should compile, link, and run right out of the box on a standard IBM z/OS
UNIX mainframe.  I've personally run it on z/OS V1R2 and V1R3 machines without
problems.

Many changes had to be done to the code to port Vim to z/OS UNIX.  As like
most UNIX programs, Vim contained heavy ASCII dependencies.  I might have
missed an ASCII dependency, or it is possible that a new one has been added
with a feature or bug fix.  Most programmers are simply not aware of possible
ASCII/EBCDIC conversion issues.  If you hit a problem that seems related to
this, feel free to contact us at the email addresses above.

One indication of ASCII/EBCDIC conversion problems is screen corruption with
"unprintable" characters.  For example, at one point the errorbell was broken
in Vim.  Any time Vim tried to ring the terminal bell an ASCII character 0x07
would be printed.  This works fine on most terminals, but is broken on an
EBCDIC one.  The correct solution was to define a different value for the bell
character on EBCDIC systems.

Remember, it's only possible to fix a bug if the community knows about it.
Don't rely on someone else to report it!  See the section |bug-reports|.

==============================================================================
3. Building VIM for z/OS UNIX		*OS390-building* *zOS-building*

A word on debugging code first: ~

The normal run of configure adds the flag '-g' to the compiler options,
to include debugging information into the executable.  This information
are normally removed from the executable with the strip command during
installation.  On z/OS UNIX, it is not possible to remove this from
the executable.  The strip command exists on z/OS UNIX and is called
during the installation, but it does nothing.  It is equivalent to the
'touch' command.  This is due to the way debug symbols are stored in the
objects generated by the compiler.

If you want to build Vim without debugging code, export the environment
variable CFLAGS set to an empty string before you call the configure script.
>
	export CFLAGS=""


Building without X11: ~

Note: Use cc to build Vim.  The c89 compiler has stricter syntax checking
and will not compile Vim cleanly.

If you build VIM without X11 support, compiling and building is
straightforward.  Don't forget to export _CC_CCMODE=1 before calling
configure and make.
>
    $ export _CC_CCMODE=1
    $./configure --with-features=big --without-x --enable-gui=no
    $ make
    $ make test
<
	Test notes:
	Test 11 will fail if you do not have gzip installed.
	Test 42 will fail, as VIM on z/OS UNIX doesn't support the multibyte
	feature.  (David Moore: "Doesn't work _yet_!  :-)  I'll see what I
	can do.")
>

    $ make install


Building with X11: ~

There are two ways for building Vim with X11 support.  You can link it
statically with the X11 libraries or can bind it with the X11 DLLs.  The
statically linked version results in a huge executable (~13MB), while the
dynamically linked executable is much smaller (~4.5MB).

Here is what you do, if you want Motif:

  a) Static link >
	$ configure --with-features=big --enable-gui=motif
	$ make
<
     VIM is now linked statically with the X11 libraries.

  b) Dynamic link:
     Make VIM as described for the static link.  Then change the contents of
     the 'auto/link.sed' file by appending: >
	s%-lXm  *%/usr/lib/Xm.x %g
	s%-lX11  *%/usr/lib/X11.x %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.

==============================================================================
4. ASCII/EBCDIC dependent scripts	*OS390-has-ebcdic* *zOS-has-ebcdic*

For the internal script language the feature "ebcdic" was added.  With this
you can fix ASCII dependent scripts like this:
>
    if has("ebcdic")
	let space = 64
    else
	let space = 32
    endif
<
==============================================================================
5. XTerm problems			*OS390-xterm* *zOS-xterm*

Note: This problem was resolved in version 6.1b. ~

I saw one problem with XTerm on z/OS UNIX.  The terminal code for moving the
cursor to the left is wrong in the termlib database.  Perhaps not wrong, but
it didn't work with VIM syntax highlighting and command line cursor movement.

If the highlighting is messed up while you type, but is okay after you refreshed
the screen with <C-L> or if you can't move to the left with the cursor key on
the command line, try adding >
	:set t_le=^H
<
to your .vimrc.  Note: '^H' is one character, hit <C-V><C-H> to get it.

==============================================================================
6. Motif Problems			*OS390-Motif* *zOS-Motif*

It seems that in porting the Motif library to z/OS, a translation from EBCDIC
to ASCII for the accelerator characters of the pull-down menus was forgotten.
Even after I tried to hand convert the menus, the accelerator keys continued
to only work for the opening of menus (like <Alt-F> to open the file menu).
They still do not work for the menu items themselves (like <Alt-F>O to open
the file browser).

There is no solution for this as of yet.

==============================================================================
7. Bugs					*OS390-bugs* *zOS-Bugs*

- Vim will consistently hang when a large amount of text is selected in
  visual block mode.  This may be due to a memory corruption issue.  Note that
  this occurs in both the terminal and gui versions.

==============================================================================
8. Known weaknesses			*OS390-weaknesses* *zOS-weaknesses*

- No binary search in tag files.
  The program /bin/sort sorts by ASCII value by default.  This program is
  normally used by ctags to sort the tags.  There might be a version of
  ctags out there, that does it right, but we can't be sure.  So this seems to
  be a permanent restriction.

- Multibyte support (utf-8) doesn't work, it's disabled at compile time.
  (|multibyte|)

- The cscope interface (|cscope|) doesn't work for the version of cscope
  that we use on our mainframe.  We have a copy of version 15.0b12, and it
  causes Vim to hang when using the "cscope add" command.  I'm guessing that
  the binary format of the cscope database isn't quite what Vim is expecting.
  I've tried to port the current version of cscope (15.3) to z/OS, without
  much success.  If anyone is interested in trying, drop me a line if you
  make any progress.

- No glib/gtk support.  I have not been able to successfully compile glib on
  z/OS UNIX.  This means you'll have to live without the pretty gtk toolbar.

Never tested:
    - Perl interface		(|perl|)
    - Hangul input		(|hangul|)
    - Encryption support	(|encryption|)
    - Langmap			(|'langmap'|)
    - Python support		(|Python|)
    - Right-to-left mode	(|'rightleft'|)
    - SNiFF+ interface		(|sniff|)
    - TCL interface		(|tcl|)
    ...

If you try any of these features and they work, drop us a note!

==============================================================================
9. Changes				*OS390-changes*	*zOS-changes*

This is a small reference of the changes made to the z/OS port of Vim.  It is
not an exhaustive summary of all the modifications made to the code base.

6.1b (beta):
  Changed KS_LE in term.c to be "\b" instead of "\010"  This fixed the
  screen corruption problems in gVim reported by Anthony Giorgio.

  Anthony Giorgio updated this document:
	- Changed OS/390 to z/OS where appropriate.  IBM decided to rename
		all of its servers and operating systems.  z/OS and OS/390
		are the same product, but the version numbering system was
		reset for the name change (e.g. OS/390 V2R11 == z/OS V1R1).
	- Added information about second edition of the Open Source Redbook.
	- Moved Redbook information to a separate section.
	- Various tweaks and changes.
	- Updated testing section.

6.0au:
  Changed configure.in
  Changed documentation.
  Anthony Giorgio fixed the errorbell.

  David Moore found some problems, which were fixed by Bram and/or David for
  6.0au.

6.0q (alpha):
  Minor changes for nrformats=alpha (see |'nrformats'|).
  Problem with hard-coded keycode for the English pound sign.  Added a define in
  ascii.h
  Disabled multibyte for EBCDIC in feature.h

6.0f (alpha):
  First compile of Vim 6 on z/OS UNIX.  Some minor changes were needed.

  Finally found the reason why make from the top level didn't work (I must have
  been blind before!).  The Makefile contained a list of targets in one target
  line.  On all other UNIX's the macro $@ evaluates to the first target in this
  list, only on z/OS UNIX it evaluates to the last one :-(.

5.6-390d:
  Cleaned up some hacks.

5.6-390c:
  I grepped through the source and examined every spot with a character
  involved in a operation (+-).  I hope I now found all EBCDIC/ASCII
  stuff, but ....

  Fixed:
    - fixed warning message in do_fixdel()
    - fixed translation from Ctrl-Char to symbolic name (like ^h to CTRL-H)
	    for :help
    - fixed yank/delete/... into register
    - fixed :register command
    - fixed viminfo register storing
    - fixed quick-access table in findoptions()
    - fixed 'g^H' select mode
    - fixed tgetstr() 'get terminal capability string', ESC and
	    Ctrl chars where wrong.  (Not used on OS/390 UNIX)


  ctags:
    - added trigraphs support (used in prolog of system header files)
	    (get.c)
    - fixed sorting order with LC_COLLATE=S390 to force EBCDIC sorting.
	    (sort.c)

5.6-390b:
  Changed:
    - configure.in:
	- added test for OS/390 UNIX
	- added special compiler and linker options if building with X11
    - configure:
	- after created via autoconf hand-edited it to make the test for
	  ICEConnectionNumber work.  This is a autoconf problem.  OS/390 UNIX
	  needs -lX11 for this.
    - Makefile
	- Don't include the lib directories ('-L...') into the variable
	  ALL_LIBS.  Use own variable ALL_LIB_DIRS instead.  A fully POSIX
	  compliant compiler must not accept objects/libraries and options
	  mixed.  Now we can call the linker like this:

	    $(CC) $(LDFLAGS) $(ALL_LIB_DIRS) $(OBJ) $(ALL_LIBS)

  Fixed:
    - Double quote couldn't be entered
      Missed ASCII dependencies while setting up terminal
      In ASCII 127 is the delete char, in EBCDIC codepage 1047 the value 127
      is the double quote.
    - fixed ':fixdel'

5.6-390a:
  first alpha release for OS/390 UNIX.

  Addition:
    - For the internal script language I added the feature "ebcdic".
      This can be queried with the has()-function of the internal
      script language.

------------------------------------------------------------------------------
 vim:tw=78:fo=tcq2:ts=8:ft=help:norl:
