APAR Identifier ...... II10133 Last Changed ........ 02/02/12 INFO APAR FOR AFPTOOLBOX FOR MVS. PRODUCT NUMBER 5655A2501 FMIDS H23A100 AND J23A101. UPGRADE: AFPTOOLBOX Symptom ...... IN INCORROUT Status ........... INTRAN Severity ................... 4 Date Closed ......... Component .......... INFOPALIB Duplicate of ........ Reported Release ......... 001 Fixed Release ............ Component Name PA LIB INFO ITE Special Notice Current Target Date .. Flags SCP ................... Platform ............ Status Detail: Not Available PE PTF List: PTF List: Parent APAR: Child APAR list: ERROR DESCRIPTION: INFO APAR FOR AFPTOOLBOX FOR MVS 5655A2501 5655A25 FMIDS H23A101 FOR CODE AND J23A101 FOR SOFTCOPY PUBS. UPGRADE: AFPTOOLBOX Section - A Additional details on running FLIP Section - B Cobol IVP PRELINK step error Section - C ITALIC fonts with COBOL Section - D IVP fails with AFPDEFINEFONT call Section - E Do not included 3800 fonts in the flip index Section - F GOCA support and invalid x'84' triplet. Section - G WSLLOGO page seq invalid format VB. Section - H Incorrect AOCL DD statement Section - I Dynamic COBOL call to the AFP TOOLBOX in OS/390 Section - J Abend806 rc04 running cobol IVP. Section - K Input Codepage '!' vs '}' conversion. Section - L No blanks occur in the output Section - M Performance issues pq34752/uq40475 Section - N Sample for use with Unix System Services Section - O Using the HFS file system info Section - P Underscore function information ************************************************************* SECTION A The MVS program directory describes how to run FLIP (ATXFLMVS) on p 29. The first ordered list item talks about the FONTLIBO DD statement being required for concatenated font librarie. This bullet should be a paragraph instead, outside of the list, because FONTLIBO is ALWAYS required when FLIP is run, even if it is the same data set as the font library itself. On p 30, the instructions need to be modified (step 3) to state that FONTLIBO is always required. The data set attributes for the file containing the ATXINDEX (the FONTLIBO DD statement) need to match the attributes of the font library. Finally in the ATXFLIP JCL member, return code 36 rc36 should be updated to state that this RC may also be received if the FONTLIBO DD statement is missing or the data set cannot be written to. ************************************************************** Section B Msgedc4001 edc4001 ERROR READING SYSIN RC12 may occur on the AFPTOOLBOX for MVS COBOL IVP ATXCBSAM on the PRELINK step. The problem is with the dataset: SYSIN DD DSN=CBC.V3R2M0.SCLB3SID(IOSTREAM),DISP=SHR This data set is not required and can be commented out. The wrong dataset level was being used which caused the error. Comment out the dataset. ************************************************************** SECTION C If using ITALIC fonts with COBOL the defintion is incorrect. Need to change the ATXCBVAR definition from: 01 ITALIC PIC 9(8) COMP-4 VALUE IS 128. To 01 ITALIC PIC 9(8) COMP-4 VALUE IS 32768. ************************************************************* Section D The cobol IVP may fail with AFPDEFINEFONT call return code -14. Or CBLWriteString return code 15 RC15. The toolbox was rejecting T1V10500 that had been marked public by APSRMARK. Install apar PQ07142 / uq08195. ************************************************************* Section E The AFPTOOLBOX for MVS program directory on page 29 Section 7.1.1 Font Library Index Consideration has an error concerning what font libraries can be used as input for the FLIP index. The second bullet: The concatenation used in the PSF/MVS start up procedure when the output is printed must be the same as the font library concatenation used as input to the FLIP program. This needs to be changed. Libraries that contain 3800 font like the SYS1.FONTLIB are not to be used as input into the FLIP program. Using the 3800 font may result in message: Assertion failed: index ... edc6006e the raise() function was issued for signal SIGABRT. MSGEDC6006E ************************************************************* Section - F GOCA support will be provided by apar pq11950/uq14455. This apar will also fix an error at print time about an invalid x'84' triplet. ************************************************************* Section - G Sample page segment WSLLOGO installed into data set SATXAFP and used by the IVP for C and C++ was shipped with record format VB. To print with MVSPSF psegs must be installed in a VBM data set. To print the sample copy the WSLLOGO member to a VBM data set. *********************************************************** Section - H Incorrect AOCL DD statement in Figure 12 APPENDIX C of the TOOLBOX USER GUIDE section titled COBOL SAMPLE. The line //AOCL DD DSN=ATX.SATXLOAD,DISP=SHR ** Should not be there ** See the JCL on page 33 of the program directory. The INCLUDE AOCL(ATXCOBOL) 9 lines down is also incorrect. It should read INCLUDE SDECK(ATXCOBOL). See the JCL on page 33 of the program directory. *********************************************************** Section - I PQ19382/UQ22925 Making Dynamic COBOL calls to the AFP Toolbox in OS/390 Some changes were made in the OS/390 Language Environment support that affect the way AFP Toolbox calls can be made dynamically. Typically, in MVS, to make a dynamic call the following code is used: COBOL program "A" calls program "B" dynamically: 77 PROGRAMB PIC X(8) VALUE "B". CALL PROGRAMB. If COBOL program "B" calls AFP TOOLBOX (PERFORM AFPBDOC) then this type of dynamic call will not work. The way you must call in an OS/390 environment is different because you now need to call "B" as a DLL program rather than with the conventional dynamic link syntax. If you are experiencing problems ( ABEND0C1 ) trying to make dynamic calls, make the following changes to your Toolbox environment: 1. Assure that PTF UQ22925 is applied. 2. Modify program "A" to make what appears to be a static call to "B". Based on the above example, change the call from CALL PROGRAMB to CALL "B". 3. Compile "B" as a DLL by adding the "DLL" and "EXPORTALL" compile options. This will create a sidedeck that will be linked into program "A". The sidedeck is created during the PRELINK step and is written to the DD SYSDEFSD. Refer to the Language Environment Programmer's Guide for more information on the DLL compile option. 4. Modify the JCL for A to include the sidedeck for B in the prelink step: //SYSIN2 DD * INCLUDE SDECK(B) NAME A(R) 5. Ensure the JCL for B includes both the ATXCOBOL opject and the ATXTBOX sidedeck in the prelink, as in the sample COBOL JCL ATXCBSAM. //SYSIN2 DD * INCLUDE SDECK(ATXTBOX) INCLUDE CBLDECK(ATXCOBOL) NAME B(R) *********************************************************** Section - J Installing AFPTOOLBOX and running the cobol ivp. Abend806 rc04 msgcee3501s module xxxx not found for entry point SUNSEEDS. Must use the NODYNAM cobol compile option. Do not use DYNAM. NODYNAM resolves the modules at linkedit time. Additional information can be found in the COBOL MVS & VM V1R2M2 Programming Guide -------------------------------------------- Abbreviations are: DYN / NODYN : Use DYNAM to cause separately compiled programs invoked through the CALL literal statement to be loaded dynamically at run time. DYNAM causes dynamic loads (for CALL) and deletes (for CANCEL) of separately compiled programs at object time. Any CALL identifier statements that cannot be resolved in your program are also handled as dynamic calls. DYNAM conforms to the COBOL 85 Standard. Note: Do not use DYNAM with CICS. If your COBOL program calls SOM API functions specify nodynam. ************************************************************ Section - K The customer is expecting a '|' or a '!' but is getting the "}". This is a common problem with the TOOLBOX. The TOOLBOX assumes by default that all input on MVS is encoded in codepage T1V10500 (this is documented in the User's Guide S544-5292-02). Codepage T1V10500 has a square bracket at location x'5A'. Unfortunately, old "green card" EBCDIC has an explanation point at x'5A', so if you type in a '!' from the keyboard it appears as input x'5A' that is translated to a '}' at print time. The solution is to use another input codepage, for example T1V10037, using the AFPSetTextCodepage function. For best performance, they should also change the output codepage (from the AFPDefineFontByAttr call). **************************************************************** Section - L Problem: No blanks appear in the printed output. The problem is in our Cobol processing. These two variables are initialized in ATXCBVAR to 0. This is incorrect. They should be initialized to -1 instead (which is what the DEFAULT-xx values are). Since 0 is not the same as -1, if they never specify anything for AFP-EXTRA-VARSPACE, the Toolbox is assuming they want the default from the COBOL variable, in this case 0. That's why the SVI of 0 is being built. The following two lines need to add before the first AFPWRITE command (right before the AFPDFNAM). MOVE DEFAULT-WS TO AFP-EXTRA-VARSPACE. MOVE DEFAULT-ICS TO AFP-EXTRA-ICSPACE. ATXCBVAR will be fixed by apar pq30318. ************************************************************** Section - M 3/21/2000 Apar pq34752 fixes 5 problems. 1. Fonts for paragraphs text must be set by AFPPutText. Invalid use of AFPSetFont inside paragraphs was not correctly identified as an error. 2. Paragraphs are positioned before AFPBgnPgraph. Invalid use of AFPSetPos inside the paragraph was not being correctly identified as an error. ** NOTE ** AFPSetFont, AFPSetPos, and the COBOL performs CBLSFONT and CBLSPOS are no longer allowed withing a paragraph. If they are used, a return code of 14 is set. rc14 rc0014. --------- 3. Text justification could be incorrect inside paragraphs if font changes were made within a single output line. 4. Toolbox was not correctly identifying the use of an undefined font on AFPPutText as an error. 5. Codepage handling was impacting storage performance. Apply apar pq34752 / uq40475 on put F002 **************************************************************** Section - N 10/02/2000 Samples for seting up Toolbox under USS 'Unix System Services' To run a sample program called PERFC: 1. compile & linkedit the job under TSO as normal but put output from link editor into HFS (e.g. /var/u/userid/PERFC) 2. sign onto USS and execute these commands: _BPX_SHAREAS=MUST export _BPX_SHAREAS note: the next line adds the C & C++ & toolbox libs. STEPLIB=CEE.SCEERUN:CBC.SCBCCMP:TOOLBOX.SATXLOAD 3. issue following rexx command to allocate DD names (trace shows RC=0 for both) note: your system library names may be different /* rexx */ trace i call bpxwdyn("ALLOC DD(TBXFNTDD) DA(xxx.TBOX.FONTS) SHR REUSE") call bpxwdyn("ALLOC DD(FNTLIBDD) DA(FONTS.FONTLIBB) SHR REUSE") 4. run the toolbox executable from unix command line ./PERFC **************************************************************** Section - O 4/12/2001 Here is the problem. Since the Toolbox on MVS assumes the filename is a DD name (as clearly documented under the BgnDoc function call), we issue an fopen call that looks like so: fopen(mvsp,"wb,recfm=*,type=record"); Notice that it has type=record because we want each SF in its own record. However it may be possible to do this after all. In the OS/390 V2R8.0 C/C++ Programming Guide Document Number: SC09-2362-04, Chapter 12, on the fopen on the fopen command discussion: type= The only valid value for this parameter under HFS is type=record. If you specify this, your file follows the HFS record I/O rules: 1.One record is defined to be the data up to the next new-line character. 2.When an fread() is done the data will be copied into the user buffer as if an fgets (buf, size_item*num_items, stream) were issued. Data is read into the user buffer up to the number of bytes specified on the fread(), or until a new-line character or EOF is found. The new-line character is not included. 3.When an fwrite() is done the data will be written from the user buffer with a new-line character added by the RTL code. Data is written up to the number of bytes specified on the fwrite(); the new-line is added by the RTL and is not included in the return value from fwrite(). 4.If you have specified an lrecl and type=record, fldata() of this stream will return the lrecl you specified, in the __maxreclen field of the __fileData return structure of stdio.h. If you specified type=record but no lrecl, the __maxreclen field will contain 1024. * But, as the description above notes for HFS files, there maybe a problem that is causing the x'15 to be processed as a record delimiter. According to the description of fopen for HFS, it's supposed to write a byte stream and the x'15 should only come into play if they specify "type=record" But MORE bad news: when trying this We do get a stream of output AFP but it still breaks the file into records when it sees the x'15 SF length on the NOP. This is an issue for the S/390 HFS support group. I will update this info apar when additional details are available. **************************************************************** Section - P Toolbox underscore function added by apars pq48095, pq49402 pq44451, pq52859. Note: Do not start underscoring between the two strings. Requesting "Begin Underscore" between the two Put Text calls will result in a blank being added regardless of the setting of the "add blank" parameter. **************************************************************** Continued in Info Apar II13169. LOCAL FIX: