MVS implementation of NCS

The following list indicates the NCS components that are available in MVS™ or z/OS® UNIX.

  • Network Interface Definition Language (NIDL) compiler 1.0
  • Network Computing Kernel (NCK) 1.1
The IBM® MVS implementation of NCS differs from the Apollo Computer, Inc. implementation of NCS. The following list summarizes the differences between the two implementations:
  • The IBM MVS implementation of NCS contains support for the Non-Replicated Global Location Broker daemon (nrglbd). It does not contain support for the Global Location Broker daemon (glbd), which can be replicated on multiple hosts in the network.
  • The IBM MVS implementation of NCS does not contain support for the Data Replication Manager Administrative Tool (drm_admin). This tool works only with the replicated version of the Global Location Broker, which is not supported in MVS NCS.
  • The IBM MVS implementation of NCS does not support multitasking. It does not support forking or creating a task either. It does not support Apollo’s Concurrent Programming Support (CPS).
  • The IBM MVS implementation of NCS supports AF_INET only.
  • In NCS, the receiving machine (client or server) translates EBCDIC characters to ASCII and ASCII characters to EBCDIC. The IBM MVS implementation of NCS translates correctly, but the Apollo NCS Version 1.0 code has the following problems:
    • The EBCDIC Null character 0x00 is incorrectly translated to the ASCII character 0x02. It should be translated to the ASCII character 0x00.
    • The EBCDIC Delete character 0x07 is incorrectly translated to the ASCII character 0x10.
    • The EBCDIC Line Feed character 0x25 is incorrectly translated to the ASCII character 0x3f.
    These are the three significant errors in the EBCDIC to ASCII translation table that is part of NCS Version 1.0. EBCDIC to ASCII translation works correctly only if you do not use the previous characters or if the EBCDIC to ASCII translation table has already been fixed in the NCS program on the receiving side.
  • NCS Version 1.0 does not correctly translate between IBM floating point and IEEE floating point. This includes both the translation from IEEE to IBM floating point and IBM to IEEE floating point. As with EBCDIC to ASCII translations, the receiver of the data performs the floating point conversion. Servers and clients can both act as receivers of data. Therefore, NCS programs on both sides need to contain correct support of IBM floating point if you pass floating point data to or from a system that uses IBM floating point.
  • Apollo NCS Version 1.0 supports two enum data types: the short enum, which NCS assumes occupies 2 bytes in storage; and the regular enum, which occupies 4 bytes. The IBM C/370 compiler dynamically determines the size required for an enum variable as 1 byte, 2 bytes, or 4 bytes.

    The NCS short enum data type works correctly on MVS, but the NCS regular enum data type does not. If for some reason you cannot use the short enum data type on MVS and must use the regular enum data type, then you must force the C/370 compiler to allocate 4 bytes for all enum variables.

    If your Interface Definition Language (IDL) contains enum typedefs as input to the NIDL compiler, for example
      typedef enum {low, medium, high} word;
      typedef enum {red, green, blue} colors;
    then you must modify the header data set that gets generated by the NIDL compiler. If the header data set is to be used on MVS with the C/370 compiler, you must force the compiler to use fullword enumeration types:
    /* you should add the following define to the header data set */
    #define INT_MAX (0x7fffffff)
     
    /* you need to modify the declares for the enum data type to     */
    /* force the compiler to use 4 bytes (word) for regular enum.    */
    enum word {low, medium, high, word_expand_to_fullword = INT_MAX};
    enum colors {red, green, blue, colors_expand_to_fullword = INT_MAX};
    If you do not force the compiler to use fullword enumeration types, the compiler assigns either 1 byte or 2 bytes to your enum variables and the enum variables are not transmitted correctly using NCS.
Note: MVS NCS does not support C language pragma statements.