home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 32 Periodic / 32-Periodic.zip / pli195.zip / PLI195.INF (.txt)
OS/2 Help File  |  1995-07-13  |  40KB  |  902 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. CSD's - What and Where are they? ΓòÉΓòÉΓòÉ
  3.  
  4. If you're using PL/I for OS/2, here's some information on how to access 
  5. maintenance.  It is available as Corrective Service Diskettes (CSD's) and can 
  6. be found on-line in several places.  There are separate CSD's for the 
  7. Professional Edition and the Personal Edition. Each CSD incorporates all 
  8. previous CSD's, and can be applied only to the specified version of the 
  9. product.  For example, it cannot be applied to a demo version. Once you've 
  10. created diskettes of the CSD's, they can be installed using the A:\SERVICE 
  11. command.  The README files list the fixes that are in the CSD. CSD #3 is now 
  12. available.  If you intend to use PL/I for OS/2 with OS/2 Warp, you must have 
  13. CSD #3 installed.  You can find it in the following locations: 
  14.  
  15. o Anonymous FTP 
  16.  
  17.   The CSD's are available on software.watson.ibm.com or 129.34.139.5. They are 
  18.   in the /pub/os2/os2fixes directory.  Use the loaddskf utility to make 
  19.   diskettes. The loaddskf utility is also in /pub/os2/os2fixes. The files are 
  20.   named: 
  21.  
  22.    - PLPCS3 - Professional Edition 
  23.    - PLWCS3 - Personal Edition 
  24.  
  25. o CompuServe 
  26.  
  27.   The files are in library 6 and are named: 
  28.  
  29.    - PLIP31.ZIP through PLIP34.ZIP - Professional Edition, Diskettes 1 to 4 
  30.    - PLIW31.ZIP through PLIW34.ZIP - Personal Edition, Diskettes 1 to 4 
  31.  
  32.   To create the diskettes, unzip each file onto an empty, formatted 1.4MB 
  33.   diskette.  Use the OS/2 LABEL command to label each diskette IBMPLICSD1 to 
  34.   IBMPLICSD4. 
  35.  
  36. o IBM TalkLink 
  37.  
  38.   The CSD's are on TalkLink on the OS/2 Bulletin Board System (OS2BBS) in the 
  39.   Software Library. 
  40.  
  41. o Other BBS's 
  42.  
  43.   The owners of many other OS/2 Bulletin Board Systems around the world are 
  44.   notified of the availability of the PL/I for OS/2 CSD's.  They decide whether 
  45.   or not to put them on their system.  Look around and see if you can find 
  46.   them.  If not, it may be worth asking the BBS owner to make them available. 
  47.   If you do find the CSD's on your system, please send a note to 
  48.   teampli@vnet.ibm.com so we can keep an up-to-date list.  We have been told 
  49.   that the latest CSD is available on the EMEA DAP BBS in the LANGUAGES.FIXES 
  50.   file area. 
  51.  
  52. o OS2CSD (for IBM internal customers) 
  53.  
  54.   Use the TOOLCAT OS2CSD command and retrieve the PLIPCSD3 (Professional 
  55.   Edition) or PLIWCSD3 (Personal Edition) package. 
  56.  
  57. Late Breaking News!!  CSD #1 for the PL/I for OS/2 Toolkit is now available as 
  58. well!! 
  59.  
  60.  
  61. ΓòÉΓòÉΓòÉ 2. New PL/I for VSE Redbook ΓòÉΓòÉΓòÉ
  62.  
  63. A new IBM Redbook, titled "31-bit Addressing in PL/I for VSE - Getting 
  64. Started", is now available.  The abstract follows: 
  65.  
  66. "This document is unique in its detailed coverage of 31-bit addressing 
  67. considerations in a system with LE for VSE and PL/I for VSE installed. It 
  68. provides detailed guidance on setting up and running a system to provide 
  69. effective initial exploitation of 31-bit addressing for the PL/I user in a 
  70. VSE/ESA environment.  This document was written for systems programmers and 
  71. administrators of installations that plan to migrate their applications from 
  72. DOS PL/I to PL/I for VSE in order to gain the advantages of 31-bit exploitation 
  73. both in batch and on-line. Some knowledge of CICS/VSE, the PL/I language, and 
  74. 31-bit principles is assumed." 
  75.  
  76. Redbooks are general use technical documents produced by IBM's International 
  77. Technical Support Organization (ITSO).  They are written by experienced IBM 
  78. professionals from around the world.  A list of all recent ITSO Redbooks with 
  79. abstracts of the books is available on the Internet: 
  80.  
  81.   http://www.redbooks.ibm.com/redbooks/itsopub.txt
  82.  
  83. A catalog of all available Redbooks, sorted by product area, is available on: 
  84.  
  85.   http://www.redbooks.ibm.com/redbooks/itsopub.cat
  86.  
  87. These files can also be retrieved by anonymous FTP to almaden.ibm.com.  They 
  88. are in the REDBOOKS directory. 
  89.  
  90. If you would like to order a Redbook in the U.S.A., call 1-800-879-2755 or send 
  91. a FAX to 1-800-284-4721.  To order Redbooks from other countries, you can 
  92. either use the PUBORDER application on HONE, or send a note to 
  93. dkibmbsh@ibmmail.com, or to the internal IBM address, BOOKSHOP at DKIBMVM1. 
  94. The PL/I for VSE book's publication number is: 
  95.  
  96.   GG24-4271-00
  97.  
  98. If you have any questions about Redbooks, you can send a note to 
  99. redbook@vnet.ibm.com. 
  100.  
  101.  
  102. ΓòÉΓòÉΓòÉ 3. PLIFORM -- The PL/I Source Code Formatter ΓòÉΓòÉΓòÉ
  103.  
  104. by Paul Magnussen, Magicon Inc. 
  105.  
  106. Do you have a mass of unreadable legacy code?  Are you fed up with maintaining 
  107. indentation by hand?  Do you wish the code in your installation could be made 
  108. to follow some standard? 
  109.  
  110. If you answered "Yes" to any of the preceding questions, you need PLIFORM, the 
  111. PL/I reformatting utility from Magicon Inc. PLIFORM takes a PL/I source program 
  112. as input, and outputs a new version, reformatted to standards you specify. 
  113.  
  114. The need for proper formatting 
  115. Programmers realize that proper indentation (reflecting the logical structure 
  116. of the program) makes a crucial difference to readability.  However, 
  117. establishing and maintaining this indentation is not a trivial task--many old 
  118. programs don't observe it at all, or do so in a haphazard fashion. 
  119. Reformatting code by hand is not only time-consuming and tedious, it can lead 
  120. to typos which introduce new errors. 
  121.  
  122. What PLIFORM can do 
  123.  
  124. o PLIFORM can make old, unreadable code readable, by formatting it better. 
  125.  
  126. o It can simplify maintenance: even when a program is initially well 
  127.   structured, changes in indentation become necessary as revisions are made. 
  128.  
  129. o It can ensure all code in an installation is formatted to the same standard. 
  130.   Formatting consistency reduces the amount of time required to understand new 
  131.   code. 
  132.  
  133. PLIFORM lets you tune the characteristics of your source to a very fine level 
  134. of detail.  If you use the supplied default parameters, you can reformat your 
  135. first program in just a few minutes.  If you want to finetune the output, half 
  136. an hour with the manual should be more than enough to find all of the features 
  137. you want.  Memorizing all the features would take longer--there are a lot! You 
  138. can format just one part of a program, or you can format different parts in 
  139. different ways.  You can also skip sections. 
  140.  
  141. PLIFORM was written by Paul Magnussen, a 25-year PL/I veteran and former member 
  142. of the IBM PL/I compiler team.  The first version was produced in 1974.  It was 
  143. completely rewritten in 1977, and since then features have gradually been added 
  144. and tested (new features are carefully made optional, so in case of any bugs 
  145. they can easily be turned off). 
  146.  
  147. PLIFORM can turn this: 
  148.  
  149.                                     DO I = 1 TO N;
  150.                 IF OUT_STRING = ''
  151.             THEN RETURN ('');
  152.    OUT_STRING = SUBSTR(OUT_STRING,VERIFY(OUT_STRING,' '));
  153.        /* Remove leading blanks.     */
  154.            J = INDEX(OUT_STRING,' '); IF J > 0
  155.       THEN IF I = N THEN RETURN (SUBSTR(OUT_STRING,1,J - 1));
  156.          ELSE OUT_STRING = SUBSTR(OUT_STRING,J);
  157.                                ELSE IF I = N
  158.          THEN RETURN (OUT_STRING); ELSE RETURN (''); END;
  159. Into this: 
  160.  
  161.    DO I = 1 TO N;
  162.       IF OUT_STRING = ''
  163.       THEN RETURN ('');
  164.       OUT_STRING = SUBSTR(OUT_STRING,VERIFY(OUT_STRING,' '));
  165.                                         /* Remove leading blanks.     */
  166.       J = INDEX(OUT_STRING,' ');
  167.       IF J > 0
  168.       THEN
  169.          IF I = N
  170.          THEN RETURN (SUBSTR(OUT_STRING,1,J - 1));
  171.          ELSE OUT_STRING = SUBSTR(OUT_STRING,J);
  172.       ELSE
  173.          IF I = N
  174.          THEN RETURN (OUT_STRING);
  175.          ELSE RETURN ('');
  176.    END;
  177.  
  178. Availability 
  179. PLIFORM is now available for OS/2.  Mainframe versions can be supplied by 
  180. arrangement.  For more information, contact Magicon at: 
  181.  
  182.  Magicon Inc.
  183.  909 University Avenue, Suite 22
  184.  Los Gatos
  185.  CA 95030-2345
  186.  U.S.A.
  187.  
  188.  Tel. (408) 354-7361
  189.  Internet: MagiconInc@aol.com
  190.  Compuserve: 71601,1404
  191.  
  192.  
  193. ΓòÉΓòÉΓòÉ 4. PL/I in the News! ΓòÉΓòÉΓòÉ
  194.  
  195. o PL/I for OS/2 was recently reviewed in "OS/2 Magazine".  The review is in the 
  196.   April, 1995 issue starting on page 24. 
  197.  
  198. o An article discussing PL/I and VM is in the latest, March 1995, "Enterprise 
  199.   Systems Journal".  It is titled "Swift Energy Co. Refines VM Operating 
  200.   System". 
  201.  
  202.  
  203. ΓòÉΓòÉΓòÉ 5. To 'C' or Not to 'C' ΓòÉΓòÉΓòÉ
  204.  
  205.  
  206. Is Recoding a Legacy PL/I Application to C The Right Thing to Do? 
  207.  
  208. by Richard Perkinson, Liant Software Corporation
  209. dickp@lpi.liant.com
  210.  
  211. This series of articles will address the issues involved in deciding whether to 
  212. recode PL/I applications to C. It will be presented in four parts. This first 
  213. part will address the viability of rehosting PL/I applications to open systems 
  214. as well as the re-engineering option. The next three parts will cover the 
  215. general concerns of recoding from PL/I to C, the specific concerns, and the 
  216. costs involved in recompiling vs. recoding. 
  217.  
  218. Moving to Open Systems 
  219. Moving legacy applications to open systems is of vital concern to many 
  220. Information Systems organizations today. Recent surveys of IBM mainframe sites 
  221. by The Gartner Group and International Data Corporation (IDC) indicate that 
  222. approximately 70% of these IBM mainframe sites will be moving applications to 
  223. open systems over the next few years. 
  224.  
  225. There are three alternatives for moving an application from proprietary to open 
  226. systems: 
  227.  
  228.  1. Recoding, which is to convert the existing logic from one language to 
  229.     another. This article will present the issues involved in recoding PL/I 
  230.     applications to C. 
  231.  
  232.  2. Re-engineering, which is to redesign and rewrite the application in order 
  233.     to take full advantage of the new environment. 
  234.  
  235.  3. Recompiling, which allows the use of the legacy application with minimal 
  236.     modification on the new platform. 
  237.  
  238. Re-engineering is ultimately the right option for certain applications. 
  239. However, it is a long, expensive, and complicated endeavor. It is the premise 
  240. of this series of articles that even for systems that need to be re-engineered, 
  241. recompiling is the right decision for the short term because it gives 
  242. organizations the ability to gradually re-engineer their applications with less 
  243. risk.  Recoding or recompiling are often looked to as quicker, less risky, and 
  244. more cost-effective solutions for those systems which will require little or no 
  245. re-engineering.  This series of articles describes the issues relating to 
  246. recoding versus recompiling. 
  247.  
  248. Staying With PL/I 
  249. If your legacy application is written in PL/I, there are many benefits to 
  250. continuing to use PL/I. PL/I is a language designed by IBM to include the best 
  251. features of  FORTRAN and COBOL in a modern "structured programming" language. 
  252. Conrad Weisert, of Information Disciplines Inc., said the following in a recent 
  253. issue of ACM SIGPLAN Notices: 
  254.  
  255.      "Imagine a general-purpose programming language that offers: 
  256.  
  257.      o better exception handling than Ada 
  258.      o better string handling than Basic 
  259.      o better Input-Output than COBOL 
  260.      o better computation than FORTRAN 
  261.      o better structured flow control than Pascal 
  262.      o better macros than Assembler 
  263.      o better memory management than C 
  264.  
  265.      where "better" means some combination of easier to use, easier to learn, 
  266.      more complete, more reliable, and more fully integrated with the rest of 
  267.      the language. Wouldn't that language be worth looking into as a candidate 
  268.      vehicle for your next big software development effort?  Well, that 
  269.      language exists, and it's not some vendor's proprietary "4th generation" 
  270.      wonder, but an established language supported by ANSI and international 
  271.      standards.  It's PL/I." 
  272.  
  273.  PL/I is a very powerful and a very well designed language. PL/I supports a 
  274.  wide spectrum of data types and storage classes, has extensive support for 
  275.  arrays and record structures, a full arsenal of logic control mechanisms, 
  276.  extensive exception handling, and multiple modes of I/O.  The language prefers 
  277.  regularity of constructs and avoids quirky tricks.  These are some of the 
  278.  reasons PL/I is often preferable over other languages. 
  279.  
  280.  The option of moving PL/I applications to open systems by recompiling is now a 
  281.  viable one due to the availability of PL/I development tools on many open 
  282.  system platforms. Both Liant Software Corporation and IBM Corporation support 
  283.  good PL/I tools on various open system platforms. 
  284.  
  285.  Re-engineering Legacy PL/I Applications 
  286.  Re-engineering, which is to redesign and rewrite an application in order to 
  287.  take full advantage of the new environment, is one of the alternatives to 
  288.  consider in moving a legacy application to open systems. 
  289.  
  290.  If your existing application can no longer be enhanced to meet the needs of 
  291.  the users or to take advantage of newer technologies, you most likely will 
  292.  eventually want to redesign it. An advantage of recompiling as your first 
  293.  transition step is that it gives you the time to carefully plan and design the 
  294.  bigger re-engineering effort.  You save time on the initial transition of your 
  295.  existing logic and gain time for the re-engineering work. 
  296.  
  297.  However, when rewriting your application, you should not too hastily discard 
  298.  your existing PL/I code. If the application is reasonably structured, as many 
  299.  PL/I applications are, it is likely that much of your underlying data 
  300.  processing code can easily be adapted into the new scheme.  One big advantage 
  301.  of keeping some of this existing, proven code, is that many subtle rules of 
  302.  your business operation are hidden in that code.  Things have worked in a 
  303.  certain way for many years, and people have come to depend on that.  Problems 
  304.  could arise if this code and these rules are changed. 
  305.  
  306.  The other option available for migrating legacy PL/I applications to open 
  307.  systems environments is recoding the PL/I applications to another language. 
  308.  This option will be addressed in future editions of The PL/I Connection. The 
  309.  next edition will discuss the general concerns of recoding an application from 
  310.  PL/I to C. 
  311.  
  312.  Next Issue....Recoding From PL/I to C - The General Concerns 
  313.  And Beyond....Recoding From PL/I to C - Specific Concerns 
  314.                  Recompiling vs. Recoding - The Bottom Line 
  315.  
  316.  To receive this paper in its entirety, please call 1-800-818-4PLI ext. 221 or 
  317.  (508) 872-8700 ext. 221, or send email to openpl1@liant.com. 
  318.  
  319.  
  320. ΓòÉΓòÉΓòÉ 6. Peter's Performance Tips ΓòÉΓòÉΓòÉ
  321.  
  322. by Peter Elderon, IBM PL/I Development
  323. elderon@vnet.ibm.com
  324.  
  325. One of the new features introduced in PL/I for OS/2 was the attribute UNSIGNED. 
  326. While this was mainly introduced in order to be able to provide PL/I 
  327. equivalents for C constructs such as unsigned short, the UNSIGNED attribute has 
  328. some performance implications as well. 
  329.  
  330. One place where the UNSIGNED attribute can make a difference is in DO loops 
  331. with a variable BY clause. Consider a loop of the following form: 
  332.  
  333.  
  334.      dcl (i,j,k,m)   fixed bin;
  335.  
  336.      do i = j to k by m;
  337.       /* ..... */
  338.      end;
  339.  
  340. Since m, the variable named in the BY clause, is a SIGNED variable, this loop 
  341. could be running up or down, and the compiler generates extra code accordingly. 
  342. However, if you know that m is always positive, you could add the UNSIGNED 
  343. attribute to the declaration for m, and the compiler would be able to generate 
  344. better and simpler code. 
  345.  
  346. So, this is a continuation on the theme from the last newsletter: the more you 
  347. tell the compiler, the better your code will perform. But we're not done with 
  348. this theme yet: 
  349.  
  350. PL/I for OS/2 also introduced the REM built-in function to PL/I. The REM 
  351. built-in function is the same as the remainder function or operation in many 
  352. languages and is very similar to the PL/I MOD built-in function. In fact, the 
  353. MOD function can be defined in terms of the REM function: 
  354.  
  355.  
  356.      if x >= 0 then
  357.        mod( x, y ) = rem( x, y );
  358.      else
  359.        mod( x, y ) = abs(y) + rem( x, y );
  360.  
  361. The compiler generates code matching the definition above except when the first 
  362. argument to the MOD built-in has the UNSIGNED attribute, in which case the 
  363. compiler will generate the simple code for the REM function. So, again, you get 
  364. better code by telling the compiler all you know. 
  365.  
  366. Finally, as the following example will show, not only can you get better code 
  367. by telling the compiler all you know, you can also get more readable code: 
  368.  
  369. A positive FIXED BIN value can be divided by a power of 2 by performing a 
  370. shift. It can then be tempting to write "isrl(x,3)" or "lower2(x,3)" rather 
  371. than "x/8" when you know that x is nonnegative. 
  372.  
  373. However, it would be better to declare x as UNSIGNED, and the compiler will 
  374. convert "x/8" into a shift for you (even at no optimization). This is better 
  375. because "x/8" is more readily understood when you or someone else looks at this 
  376. code 6 months later. Similarly, if you need to divide an expression such as 
  377. "x+y" (that you know is unsigned) by a power of 2 such as 16, it would be 
  378. better to write that division as "unsigned(x+y)/16" rather than as 
  379. "isrl(x+y,4)". 
  380.  
  381.  
  382. ΓòÉΓòÉΓòÉ 7. Host PL/I Migration Aid ΓòÉΓòÉΓòÉ
  383.  
  384. by Bob Rasch, IBM PL/I Development
  385. totb@stlvm20.vnet.ibm.com
  386.  
  387. Background 
  388. OS PL/I Version 1 has been withdrawn from Marketing, and it is scheduled to be 
  389. withdrawn from Service at the end of 1995. Yet there are thousands of customers 
  390. who have licenses for OS PL/I Version 1. Due to the high level of source code 
  391. compatibility, we expect that most applications can be migrated to PL/I for MVS 
  392. & VM or OS PL/I Version 2 without requiring any source code changes. But what 
  393. can we do to help those customers who have programs that require source code 
  394. changes? 
  395.  
  396. The answer is that we can provide a migration aid to automate the most 
  397. prevalent source code changes - the unsupported 48-character set, also called 
  398. CHARSET(48). Support for CHARSET(48) was dropped in OS PL/I Version 2. Since 
  399. that time, it has become apparent that more customers have 48-character set 
  400. source code than we previously believed. Therefore, soon after OS PL/I Version 
  401. 2 was shipped to the field, I began work on a program to convert unsupported 
  402. CHARSET(48) source code to supported CHARSET(60) source code. 
  403.  
  404. The first version of this migration aid, called CS48BCD, has been shipped as a 
  405. sample program with OS PL/I Version 2. It is also available to customers 
  406. through their account representatives, who can receive the package over the IBM 
  407. network by sending a note to TOTB at STLVM20. 
  408.  
  409. This first version has some limitations that make it less useful that it might 
  410. be. It is a simple scanner that translates CHARSET(48) keywords into 
  411. CHARSET(60) keywords. It is unable to recognize embedded preprocessor 
  412. statements for products like CICS, DB2, and IMS, so it translates anything in 
  413. these statements that looks like a CHARSET(48) keyword. Unfortunately, the PL/I 
  414. 48-character set includes keywords like AND, OR, and NOT, which are also used 
  415. by non-PL/I preprocessors. The first version of the migration aid translates 
  416. these keywords into PL/I CHARSET(60) symbols, which are not recognized by the 
  417. non-PL/I preprocessors. 
  418.  
  419. Enhancements 
  420. To fix the problem of CICS, DB2 and IMS preprocessor statements, I made 
  421. extensive modifications to my migration aid. It now does rudimentary lexical 
  422. analysis, so it has a limited amount of information about the context in which 
  423. a keyword occurs. Therefore, it will not change words that appear to be 
  424. CHARSET(48) keywords if they occur in EXEC statements. 
  425.  
  426. Some OS PL/I Version 1 application programs have character string constants 
  427. that contain the hexadecimal values that are now reserved for graphic shift 
  428. codes. The code points are X'0E' for shift-out, and X'0F' for shift-in. To 
  429. migrate such programs, these character string constants must be changed to 
  430. mixed string constants. I have added support to change character string 
  431. constants containing these code points to mixed string constants. 
  432.  
  433. Some application programs use PL/I preprocessor statements to generate PL/I 
  434. source code. If the program uses CHARSET(48), it may have PL/I source code 
  435. inside preprocessor string constants that must be translated to migrate the 
  436. application. This is rather difficult to do, because it requires processing the 
  437. contents of string constants as if they were PL/I source code. I have added 
  438. support for this feature, to the extent that is feasible. It should only be 
  439. used for source code that requires it, and it may not work for all cases. 
  440.  
  441. Availability 
  442. The new version of the PL/I migration aid is currently in Beta Test. When it is 
  443. ready for distribution, we plan to make it available as a PTF. There will be no 
  444. charge for the PL/I migration aid for any customer who has a license for OS 
  445. PL/I. Further information about the migration aid will be published in this 
  446. newsletter.  You can also call the PL/I Hotline for more information. 
  447.  
  448.  
  449. ΓòÉΓòÉΓòÉ 8. Travel Reports ΓòÉΓòÉΓòÉ
  450.  
  451. DB/2 Expo 
  452. by Fernando Quinones, IBM PL/I Development 
  453.  
  454. The Visual PL/I for OS/2 Toolkit was demoed at Jarvitts Convention Center in 
  455. beautiful mid-town New York City.  The convention was held from December 6, 
  456. 1994 through December 8, 1994, and catered to DB2 and associated development 
  457. tools.  Visual PL/I falls into this category. The response to the Toolkit was 
  458. positive.  May attendees that stopped by were impressed by how easy it is to 
  459. use.  Some who have used the Toolkit in the past said that they were addicted 
  460. and won't go back to doing Presentation Manager Development the old way. 
  461.  
  462.  
  463. ΓòÉΓòÉΓòÉ 9. I know they're around here somewhere... ΓòÉΓòÉΓòÉ
  464.  
  465. (If you feel like you've seen this before, you have!  We're going to republish 
  466. it so that everyone has a chance to get this information). 
  467.  
  468. Have you ever wondered if there was a place where folks hang out and talk about 
  469. PL/I? Well, there are quite a few places on-line where PL/I issues are 
  470. discussed.  Here's how to get to some of them: 
  471.  
  472. Compuserve 
  473.           Enter:  go os2df1 
  474.           Then go to subsection 6: "Rexx and other languages". 
  475.  This bulletin board is used to discuss OS/2 languages, PL/I among them. 
  476.  
  477.  Internet 
  478.  There is a LISTSERV list that you can subscribe to.  To do so, send a note to: 
  479.           LISTSERV@UIUCVMD.BITNET (or LISTSERV@VMD.CSO.UIUC.EDU) 
  480.  containing the line: 
  481.           SUB PL1-L Your Name 
  482.  This list is devoted to discussions of the PL/I language. 
  483.  
  484.  IBM Customer Forum 
  485.  There is an IBM customer forum devoted to PL/I on IBMLink. It is in the 
  486.  OS2BBS1, S390, and AIX stores.  Within S390, PLI is in the VM and MVS 
  487.  environments.  Once you are in one of these environments, you just need to key 
  488.  PLI on the command line and you will immediately be fastpathed directly into 
  489.  the forum. 
  490.  
  491.  IBM PL/I developers monitor all of these.  If you know of any other bulletin 
  492.  boards, we'd love to hear about them! 
  493.  
  494.  
  495. ΓòÉΓòÉΓòÉ 10. If You Liked PLITEST, You'll Love CODE/370 ΓòÉΓòÉΓòÉ
  496.  
  497. by Bob Davis, IBM PL/I Development
  498. davis@stlvm20.vnet.ibm.com
  499.  
  500. IBM will soon begin shipping Language Environment Release 4 and has recently 
  501. shipped CODE/370 Release 2.  This combination allows developers to build and 
  502. maintain PL/I, COBOL, and C  applications from a desktop workstation or the 
  503. host.  In effect CODE/370 can help you offload some of your host development 
  504. from the mainframe to the workstation. 
  505.  
  506. CODE/370 provides integrated tools for developing, porting, and maintaining 
  507. application programs.  It consists of a host-based debugger and optional 
  508. workstation-based tools.  The workstation-based tools operate in an OS/2 
  509. windowed environment, in cooperation with a System/370 or System/390 host. 
  510. This provides the graphical user interface of the workstation along with the 
  511. power and integrity of the host.  CODE/370 gives you all of this and the 
  512. ability to debug under the CICS/ESA environment while maintaining all the 
  513. functions of PLITEST. 
  514.  
  515. There are many programmers out there who still have to develop and debug on the 
  516. host, but would like to take advantage of their workstations. The dual host and 
  517. workstation offering lets programming shops set their own pace when it comes to 
  518. adopting the workstation environment for application development of host 
  519. programs. 
  520.  
  521. CODE/370 consists of two components.  One component is a workstation-based 
  522. programmable editor that offers language sensitive features for PL/I, COBOL, C, 
  523. JCL and REXX source.  The other component is the Debug Tool, which allows the 
  524. programmer to debug a PL/I, COBOL or C application as it is running in the host 
  525. environment.  The Debug Tool user interface is available on both the 
  526. workstation and the host. 
  527.  
  528. One feature enables you to monitor the number of times each program statement 
  529. is executed.  "It shows the hot spots in your program." said Bob Rasch (PL/I 
  530. Development). 
  531.  
  532. CODE/370 helps protect investments and enables growth by providing a common 
  533. tool for editing, compiling, and debugging new and existing applications 
  534. written in PL/I, COBOL/370, and C/370.  These languages use the services of 
  535. Language Environment, a run-time common library that provides a consistent 
  536. run-time environment. CODE/370 also supports the debugging of existing OS PL/I 
  537. and VS COBOL II applications.  This means that CODE/370 can help you migrate 
  538. applications written in OS PL/I and VS COBOL II to the Language Environment. 
  539.  
  540. PL/I support of CODE/370 release 2 is also provided for LE/370 release 3 
  541. through a PTF.  For additional information, contact your marketing 
  542. representative or give us a call on the PL/I Hotline. 
  543.  
  544.  
  545. ΓòÉΓòÉΓòÉ 11. PL/I Hotline ΓòÉΓòÉΓòÉ
  546.  
  547. If you'd like more information on IBM's PL/I products, one source of 
  548. information is the Santa Teresa Laboratory Hotline: 
  549.  
  550.   1-800-IBM-4STL  (1-800-426-4785)
  551.   (Please note that this is USA only).
  552.  
  553.  
  554. ΓòÉΓòÉΓòÉ 12. And it really does compile! ΓòÉΓòÉΓòÉ
  555.  
  556. courtesy of Bob Peyser, Piscataway, New Jersey 
  557.  
  558.   declare aspirin    buffered,
  559.           bankruptcy,
  560.           cartoon    character,
  561.           dewey    decimal,
  562.           five_speed    automatic,
  563.           get_your_nose    fixed,
  564.           hardly_any     static,
  565.           herculean    task,
  566.           inferiority    complex,
  567.           let_me_give_you_some    pointer,
  568.           get_your_wheels    aligned,
  569.           nail    file,
  570.           naughty    bit,
  571.           news    print,
  572.           not_to_be_taken    internal,
  573.           photo    graphic,
  574.           poorly    controlled,
  575.           restricted    area,
  576.           root_beer    float,
  577.           skin    condition,
  578.           turkey    based,
  579.           union    label,
  580.           winery    binary;
  581.  
  582.  
  583. ΓòÉΓòÉΓòÉ 13. VisualGen and PL/I ΓòÉΓòÉΓòÉ
  584.  
  585. by Mitch Johnson, IBM VisualGen Development, mitchj@vnet.ibm.com
  586.   Henry Jicha III, IBM Software Marketing, hjicha_III@vnet.ibm.com
  587.  
  588. VisualGen is at the heart of IBM's enterprise client/server application 
  589. development strategy.  It is an OS/2 based application development solution for 
  590. building robust mission critical client/server and standalone applications that 
  591. run in a wide variety of workstation and host/server environments.  VisualGen 
  592. includes a visual construction capability for developing true event-driven GUI 
  593. components and a powerful 4GL scripting language for server or standalone 
  594. application definition.  It also features a complete interactive test facility 
  595. with logic trace and data probe capability for all application parts including 
  596. client and server together, or standalone. 
  597.  
  598. VisualGen insulates the developer from environmental differences, and provides 
  599. middleware to shield development from complex client/server communications 
  600. protocols.  Generated server and standalone applications execute as compiled, 
  601. optimized 3GL source code that uses runtime libraries like PL/I.  GUI client 
  602. applications have no runtime license cost. 
  603.  
  604. A VisualGen application can call PL/I programs while the application is being 
  605. developed and tested and after it has been generated.  The call format used by 
  606. the VisualGen application is determined by the contents of a linkage table 
  607. entry.  This entry specifies which linkage type (Operating System, CICS, etc.) 
  608. is used and how the parameters are passed (by address or in a shared data 
  609. area). 
  610.  
  611. The following is an example of a linkage table entry which allows a VisualGen 
  612. application to call a PL/I DLL (VGPLI) using standard OS linkage and parameter 
  613. passing. 
  614.  
  615. :calllink applname=VGPLI bitmode=32 dllname=VGPLI linktype=dynamic
  616.            parmform=oslink.
  617.  
  618. The source for VGPLI is below: 
  619.  
  620.  
  621.   /* PL/I procedure called from VisualGen */
  622.  
  623.   vgpli: Proc (ws, int01)
  624.          returns(bin fixed(31,0))
  625.               Options( ReEntrant FromAlien
  626.                        Linkage(system) NoDescriptor );
  627.  
  628.    dcl int01  bin fixed (31,0);
  629.    dcl ret    bin fixed (31,0);
  630.    dcl 1 ws,
  631.           2 text(5)   char(10),
  632.           2 Rc     char(3);
  633.  
  634.    /* program logic   */
  635.  
  636.    ret = 0;
  637.    return(ret);
  638.   End vgpli;
  639.  
  640. For more information please see "Developing VisualGen Client/Server 
  641. Applications", SH23-6563 and  "Designing and Developing VisualGen 
  642. Applications", SH23-6561. 
  643.  
  644. For information on the VisualGen product, call 1-800-426-2279 in the US, or 
  645. 919-254-4760 worldwide, (Fax 919-254-4820). 
  646.  
  647.  
  648. ΓòÉΓòÉΓòÉ 14. Questions and Answers ΓòÉΓòÉΓòÉ
  649.  
  650. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  651. ΓöéQUESTION                                ΓöéANSWER                                  Γöé
  652. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  653. ΓöéMy PL/I code is being passed a pointer. ΓöéIf you are using a later version of the Γöé
  654. ΓöéI need to access storage which precedes Γöécompiler (2.3 or OS/2), you can do      Γöé
  655. Γöéthat pointer by a certain number of     Γöépointer arithmetic.  If you just need toΓöé
  656. Γöébytes.  How can I do that?              Γöésubtract from a pointer you can simply  Γöé
  657. Γöé                                        Γöéuse:                                    Γöé
  658. Γöé                                        Γöé  p = p - 12;                           Γöé
  659. Γöé                                        ΓöéIf you want to use a pointer expression Γöé
  660. Γöé                                        Γöéas a qualifier, you must use the        Γöé
  661. Γöé                                        ΓöéPOINTERADD built in.                    Γöé
  662. Γöé                                        Γöé  pointeradd(p,-12)->b ...              Γöé
  663. Γöé                                        Γöé                                        Γöé
  664. Γöé                                        ΓöéIf you are not using a version of the   Γöé
  665. Γöé                                        Γöécompiler that supports this, you can putΓöé
  666. Γöé                                        Γöéthe pointer into FIXED BIN(31) format.  Γöé
  667. Γöé                                        Γöé  dcl p       ptr;                      Γöé
  668. Γöé                                        Γöé  dcl p2      ptr init(null);           Γöé
  669. Γöé                                        Γöé  dcl wk_bin  fixed bin(31)             Γöé
  670. Γöé                                        Γöé                based(addr(p2));        Γöé
  671. Γöé                                        Γöé  dcl wk_area based(p2);                Γöé
  672. Γöé                                        Γöé  p2 = p;                               Γöé
  673. Γöé                                        Γöé  wk_bin = wk_bin - 12;                 Γöé
  674. Γöé                                        Γöé  /* perform operations in wk_area */   Γöé
  675. Γöé                                        Γöé                                        Γöé
  676. Γöé                                        ΓöéNote that this approach could cause     Γöé
  677. Γöé                                        Γöémigration problems if you decide to moveΓöé
  678. Γöé                                        Γöéto OS/2 PL/I and use the                Γöé
  679. Γöé                                        ΓöéDEFAULT(NONNATIVE) compiler option.     Γöé
  680. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  681. ΓöéHow can I get my PL/I for OS/2 code to  ΓöéHere is some sample code showing        Γöé
  682. Γöécommunicate with a COM port?            Γöécommunication with a modem using COM1.  Γöé
  683. Γöé                                        ΓöéIf you have questions about this, pleaseΓöé
  684. Γöé                                        Γöécontact Paige Vinall,                   Γöé
  685. Γöé                                        Γöévinall@vnet.ibm.com                     Γöé
  686. Γöé                                        Γöé                                        Γöé
  687. Γöé                                        Γöé sample: proc options(main);            Γöé
  688. Γöé                                        Γöé                                        Γöé
  689. Γöé                                        Γöé  %include os2pli;                      Γöé
  690. Γöé                                        Γöé  %incl_dos='Y';                        Γöé
  691. Γöé                                        Γöé  %include os2;                         Γöé
  692. Γöé                                        Γöé                                        Γöé
  693. Γöé                                        Γöé  dcl length     builtin;               Γöé
  694. Γöé                                        Γöé  dcl out_handle HFILE;                 Γöé
  695. Γöé                                        Γöé  dcl data       char(80) varying;      Γöé
  696. Γöé                                        Γöé  dcl prefix     fixed bin(15)          Γöé
  697. Γöé                                        Γöé                 based (addr(data));    Γöé
  698. Γöé                                        Γöé  dcl written    ULONG;                 Γöé
  699. Γöé                                        Γöé  dcl read       ULONG;                 Γöé
  700. Γöé                                        Γöé  dcl rc         APIRET;                Γöé
  701. Γöé                                        Γöé  dcl filename   char(80) varyingz;     Γöé
  702. Γöé                                        Γöé  dcl action     ULONG;                 Γöé
  703. Γöé                                        Γöé                                        Γöé
  704. Γöé                                        Γöé  filename = 'COM1';                    Γöé
  705. Γöé                                        Γöé  /* Use the standard DOS API to        Γöé
  706. Γöé                                        Γöé     communicate with the COM port */   Γöé
  707. Γöé                                        Γöé  rc = dosopen(addr(filename),          Γöé
  708. Γöé                                        Γöé        addr(out_handle),               Γöé
  709. Γöé                                        Γöé        action, 0, file_normal,         Γöé
  710. Γöé                                        Γöé        ior(open_action_open_if_exists),Γöé
  711. Γöé                                        Γöé        ior(open_access_ReadWrite,      Γöé
  712. Γöé                                        Γöé        open_Share_DenyReadWrite),      Γöé
  713. Γöé                                        Γöé        null());                        Γöé
  714. Γöé                                        Γöé                                        Γöé
  715. Γöé                                        Γöé  put skip list(rc, sourceline());      Γöé
  716. Γöé                                        Γöé  /* Send the "AT" attention command    Γöé
  717. Γöé                                        Γöé     to modem, followed by CRLF */      Γöé
  718. Γöé                                        Γöé  data = 'AT' || '0a0d'x;               Γöé
  719. Γöé                                        Γöé  rc= doswrite(out_handle, addr(data)+2,Γöé
  720. Γöé                                        Γöé       length(data), written );         Γöé
  721. Γöé                                        Γöé                                        Γöé
  722. Γöé                                        Γöé  put skip list(rc, sourceline());      Γöé
  723. Γöé                                        Γöé  put skip data(written);               Γöé
  724. Γöé                                        Γöé  /* Read back the modem's response,    Γöé
  725. Γöé                                        Γöé     should be "OK" */                  Γöé
  726. Γöé                                        Γöé  rc = dosread(out_handle, addr(data)+2,Γöé
  727. Γöé                                        Γöé       stg(data)-2, read );             Γöé
  728. Γöé                                        Γöé  put skip list(rc, sourceline());      Γöé
  729. Γöé                                        Γöé  prefix = read;                        Γöé
  730. Γöé                                        Γöé                                        Γöé
  731. Γöé                                        Γöé  put skip data(data);                  Γöé
  732. Γöé                                        Γöé  put skip data(read);                  Γöé
  733. Γöé                                        Γöé                                        Γöé
  734. Γöé                                        Γöéend sample;                             Γöé
  735. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  736. ΓöéCan a PL/I language program be called   ΓöéExternal calls to other PL/I subroutinesΓöé
  737. Γöéfrom PL/I in a CICS and VSE environment?Γöéor assembler routines are permitted, as Γöé
  738. Γöé                                        Γöéwell as standard CICS facilities:       Γöé
  739. Γöé                                        Γöé  EXEC CICS LINK PROGRAM(..)            Γöé
  740. Γöé                                        ΓöéPL/I FETCH is not permitted in the VSE  Γöé
  741. Γöé                                        Γöéenvironment.                            Γöé
  742. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  743. ΓöéDoes PL/I for OS/2 allow the use of     ΓöéYes, you can do this.  Anything         Γöé
  744. Γöédynamic SQL? I need to issue a statementΓöédescribed in the DB2/2 Programming GuideΓöé
  745. Γöélike:                                   Γöéfor the "other" languages can be done   Γöé
  746. Γöé  EXEC SQL PREPARE stmt_lbl             Γöéwith PL/I.  This includes things like   Γöé
  747. Γöé         FROM :variable                 Γöéstatic SQL with host variables and      Γöé
  748. Γöé                                        Γöédynamic SQL with parameter markers.     Γöé
  749. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  750. ΓöéWhat is an easy way to compare the      ΓöéPL/I doesn't allow structures to be     Γöé
  751. Γöécontents of two structures and find out Γöécompared directly.  If you're using PL/IΓöé
  752. Γöéif they are equal?  One is the original,Γöéfor OS/2 you can do either of the       Γöé
  753. Γöéand the other is declared LIKE the      Γöéfollowing:                              Γöé
  754. Γöéoriginal.  I can't use CHAR because theyΓöé if unspec(strct1) = unspec(strct2) thenΓöé
  755. Γöéare MIXED structures, and I don't want  Γöé              OR                        Γöé
  756. Γöéto have to declare anything with fixed  Γöé if compare(addr(strct1),addr(strct2),  Γöé
  757. Γöélength.                                 Γöé    stg(strct1)) = 0 then...            Γöé
  758. Γöé                                        Γöé                                        Γöé
  759. Γöé                                        ΓöéIf you're not using PL/I for OS/2, try  Γöé
  760. Γöé                                        Γöéthe following:                          Γöé
  761. Γöé                                        Γöé dcl chr1 char(stg(strct1))             Γöé
  762. Γöé                                        Γöé           based(addr(strct1));         Γöé
  763. Γöé                                        Γöé dcl chr2 char(stg(strct2))             Γöé
  764. Γöé                                        Γöé           based(addr(strct2));         Γöé
  765. Γöé                                        Γöé if chr1 = chr2 then...                 Γöé
  766. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  767.  
  768.  
  769. ΓòÉΓòÉΓòÉ 15. What Next? ΓòÉΓòÉΓòÉ
  770.  
  771. If you'd like to receive a hard copy version of "The PL/I Connection" 
  772. newsletter, please let us know.  We'd also appreciate any comments or 
  773. suggestions you may have.  You may either mail or Fax your response to one of 
  774. the following: 
  775.  
  776. PL/I Newsletter 
  777. IBM - Santa Teresa Lab. 
  778. 555 Bailey Avenue, J84/D345 
  779. P.O. Box 49023 
  780. San Jose, CA 95161-9023 
  781. U.S.A. 
  782.  
  783. Fax: (408) 463-4820 
  784.  
  785. You can also send a note to: 
  786.  
  787.    teampli@vnet.ibm.com
  788. or  USIB5RLG at IBMMAIL.
  789.  
  790.  
  791. ΓòÉΓòÉΓòÉ 16. The PL/I Connection Response Form ΓòÉΓòÉΓòÉ
  792.  
  793. Yes, I would like to receive a hard copy version of the PL/I Newsletter. 
  794.  
  795. Name: 
  796. _____________________________________________________________________________ 
  797.  
  798. Company: 
  799. __________________________________________________________________________ 
  800.  
  801. Address: 
  802. ___________________________________________________________________________ 
  803.  
  804.    ____________________________________________________________________________ 
  805.  
  806.    ____________________________________________________________________________ 
  807.  
  808.    ____________________________________________________________________________ 
  809.  
  810.    ____________________________________________________________________________ 
  811.  
  812. Phone Number: 
  813. _____________________________________________________________________ 
  814.  
  815. What PL/I Products do you use? 
  816. _______________________________________________________ 
  817.  
  818.    ____________________________________________________________________________ 
  819.  
  820. Comments: 
  821. _________________________________________________________________________ 
  822.  
  823.    ____________________________________________________________________________ 
  824.  
  825.    ____________________________________________________________________________ 
  826.  
  827.    ____________________________________________________________________________ 
  828.  
  829.    ____________________________________________________________________________ 
  830.  
  831.    ____________________________________________________________________________ 
  832.  
  833.    ____________________________________________________________________________ 
  834.  
  835.    ____________________________________________________________________________ 
  836.  
  837.    ____________________________________________________________________________ 
  838.  
  839.    ____________________________________________________________________________ 
  840.  
  841.    ____________________________________________________________________________ 
  842.  
  843.  
  844. ΓòÉΓòÉΓòÉ 17. Notices ΓòÉΓòÉΓòÉ
  845.  
  846. Trademarks 
  847.  
  848.  o IBM, OS/2, CICS/VSE, DB2, Presentation Manager, Language Environment, 
  849.    System/390, CICS/ESA, AIX are registered trademarks of International 
  850.    Business Machines Corporation. 
  851.  
  852.  o VSE/ESA, C/370, CICS, IBMLink, System/370, COBOL/370, DB2/2, VisualGen are 
  853.    trademarks of International Business Machines Corporation. 
  854.  
  855.  o Liant is a trademark of the Liant Software Corporation. 
  856.  
  857.  o All other products and company names are trademarks and/or registered 
  858.    trademarks of their respective holders. 
  859.  
  860.  COPYRIGHT NOTICE 
  861.  
  862.  (c) Copyright IBM Corporation 1995.  All Rights Reserved 
  863.  
  864.  This newsletter may contain other proprietary notices and copyright 
  865.  information related to a particular article. 
  866.  
  867.  Nothing contained herein shall be construed as conferring by implication, 
  868.  estoppel or otherwise any license or right under any patent or trademark or 
  869.  patent  of IBM or of any third party.  Nothing contained in this newsletter 
  870.  shall be construed to imply a commitment to announce or deliver any particular 
  871.  product, or an intent to do so, unless the language used explicitly so states. 
  872.  Except as expressly provided above, nothing contained herein shall be 
  873.  construed as conferring any license or right under any IBM copyright. 
  874.  
  875.  Note that any product, process, or technology in this newsletter may be the 
  876.  subject of other intellectual property rights reserved by IBM, and may not be 
  877.  licensed hereunder. 
  878.  
  879.  This publication is provided "AS IS" WITHOUT ANY WARRANTY OF ANY KIND, EITHER 
  880.  EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  881.  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.  Some 
  882.  jurisdictions do not allow the exclusion of implied warranties, so the above 
  883.  exclusion may not apply to you. 
  884.  
  885.  This publication may include technical inaccuracies or typographical errors. 
  886.  Future editions of this newsletter may make changes or corrections to 
  887.  information in this edition of the newsletter, or to information in any prior 
  888.  edition of this newsletter.  IBM may make improvements and/or changes to the 
  889.  content of this newsletter, to IBM products described or mentioned in this 
  890.  newsletter, or to any material distributed with The PL/I Connection at any 
  891.  time without notice. 
  892.  
  893.  Should any viewer of this newsletter or of any other IBM publication respond 
  894.  with information including feedback data, including questions, comments, 
  895.  suggestions or the like regarding the content of this or of any other IBM 
  896.  document, such information shall be deemed to be non-confidential, and IBM 
  897.  shall have no obligation of any kind with respect to such information, and 
  898.  shall be free to reproduce use, disclose and distribute the information to 
  899.  others without limitation.  Further, IBM shall be free to use any ideas, 
  900.  concepts, know-how or techniques contained in such information for any purpose 
  901.  whatsoever including but not limited to developing, manufacturing and 
  902.  marketing products incorporating such information.