home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / rexx / library2 / rexref / rexref.inf (.txt) < prev   
OS/2 Help File  |  1990-09-25  |  171KB  |  5,134 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Alpha Version Intro ΓòÉΓòÉΓòÉ
  3.  
  4.  
  5. Next 
  6.  
  7. This is a work-in-progress -- parts are missing or incomplete.  Your feedback 
  8. on any and all parts of this online document is welcome. 
  9.  
  10. Brian Buck 76666,60 
  11.  
  12.  
  13. Next 
  14.  
  15.  
  16. ΓòÉΓòÉΓòÉ 2. Introduction ΓòÉΓòÉΓòÉ
  17.  
  18.  
  19. Next  Prev 
  20.  
  21. This is a reference for quick online lookups of REXX syntax; it is NOT a 
  22. substitute for the real REXX reference manuals. Neither is it a tutorial; 
  23. unless you have some programming experience, you probably could not learn REXX 
  24. from this reference alone.  It is assumed that you may know some REXX, but are 
  25. still learning and need to look things up frequently, or are an experienced 
  26. user who nonetheless hasn't yet memorized every function in the entire 
  27. language, or the variants for every environment and implementation. 
  28.  
  29. You can lookup REXX topics for OS/2, MVS, and VM environments;  for OS/2, the 
  30. IBM OS/2 EE REXX (REXXSAA) and the Mansfield Software Group's Personal REXX are 
  31. covered. 
  32.  
  33. Why an Online REXX Reference? 
  34.  
  35. Why? - I needed one; so did the people in my company.  Unfortunately, IBM did 
  36. not see fit to provide either a written or online one with OS/2 EE 1.2.  I also 
  37. got tired of needing a different REXX manual for every environment and 
  38. implementation, plus the SAA one --- important, but useless by itself.  That's 
  39. why this reference covers all the SAA environments that have REXX 
  40. implementations. (Yes, I know, there is now REXX for OS/400, but I don't have 
  41. those manuals; volunteers, anyone?  Send me the details and I'll update this 
  42. reference). 
  43.  
  44. The reference employs the OS/2 help manager (a.k.a. the IPF, Information 
  45. Presentation Facility, or Boca-help) because I needed to learn how to use it, 
  46. for creating both stand-alone references and in-context help documents.  The 
  47. other two alternatives, Microsoft QuickHelp and IBM BookManager/2 Read, have 
  48. the distinct disadvantage that their viewing software is not available on every 
  49. OS/2 system -- and online books are no good if you can't read them. 
  50.  
  51. This started out as a short list of syntax diagrams with no explanatory text, 
  52. but it just looked too incomplete compared to the other online IPF books, and 
  53. it just kept growing ... 
  54.  
  55.      Warning:  Author mounting soapbox!
  56.  
  57.       Also, I wanted to encourage the widespread use of REXX as a macro 
  58.      language for editors, communications packages, spreadsheets, etc.  A 
  59.      universal macro and procedures language is needed; it is crazy to have to 
  60.      learn a new language for every new package you buy.  Maybe REXX isn't the 
  61.      best possible choice, but it's here now and available in most 
  62.      environments, and is a pretty good language for this specialized purpose. 
  63.      (BASIC was my first language years ago, learned from its creators, Kemeny 
  64.      and Kurtz;  however, I think REXX is far  more appropriate as a universal 
  65.      command and macro language. Let's hope that the major players in OS/2, IBM 
  66.      and Microsoft, can reach some accord on this issue, or else OS/2 will end 
  67.      up like Unix, where standards are considered such a good idea that 
  68.      everybody has his/her own <g>.) 
  69.  
  70.      Demand REXX interfaces from your vendors -- vote with your dollars; 
  71.      include them in your products if you author software yourself.  It is 
  72.      encouraging to see companies like Lotus coming out in favor of REXX (as 
  73.      reported in PC Week from the SLAC REXX symposium). 
  74.  
  75.  This reference is released into the public domain; use it any way you like. I 
  76.  would appreciate hearing of any errors or omissions that you find;  I will 
  77.  attempt to keep this reference up-to-date, and welcome the assistance of any 
  78.  and all who wish to contribute to the effort.  Send no money to anyone for 
  79.  this: it is free.  If you want to express any gratitude, give to your favorite 
  80.  charity. This is my way of thanking all those who have placed their sample 
  81.  OS/2 source codes into the public domain -- it would have been so difficult to 
  82.  learn about OS/2 without their generously shared examples. That is why the IPF 
  83.  source for this reference is also available;  it demonstrates some techniques 
  84.  that can be used in creating a standalone online reference. 
  85.  
  86.  Now, to satisfy the lawyers: no warranties, guarantees, etc. are implied, no 
  87.  liability is assumed.  You break it and you own both halves. I am not 
  88.  affiliated in any way with any vendor of a REXX implementation or a related 
  89.  product.  Any opinions expressed herein are my own, not that of my employer or 
  90.  any vendor.  This reference is only available where you find it (bulletin 
  91.  boards);  I cannot respond to individual requests for it, although I will 
  92.  respond to comments and suggestions. 
  93.  
  94.  Brian Buck          23SEP90 
  95.  Internet            76666.60@Compuserve.COM 
  96.  Compuserve          76666,60 
  97.  BIX                 bbuck 
  98.  IBMLink             NABSD0O at HONE83 
  99.  IBM NSD BBS (Atlanta) Brian Buck 
  100.  Phone               (312) 923-3328 
  101.  Fax                 (312) 923-1251 
  102.  
  103.  Trademarks 
  104.  
  105.  The following trademarks apply to all online information: 
  106.  
  107.   BookManager/2 is a trademark of International Business Machines Corporation. 
  108.  
  109.   IBM is a registered trademark of International Business Machines 
  110.    Corporation. 
  111.  
  112.   Microsoft is a trademark of the Microsoft Corporation. 
  113.  
  114.   Operating System/2 is a trademark of International Business Machines 
  115.    Corporation. 
  116.  
  117.   OS/2 is a trademark of International Business Machines Corporation. 
  118.  
  119.   Personal REXX is a trademark of Mansfield Software Group 
  120.  
  121.   Personal System/2 and PS/2 are registered trademarks of International 
  122.    Business Machines Corporation. 
  123.  
  124.   Presentation Manager is a trademark of International Business Machines 
  125.    Corporation. 
  126.  
  127.   Quickhelp is a trademark of the Microsoft Corporation. 
  128.  
  129.   REXX/2 is a trademark of Command Technology Corp. 
  130.  
  131.   SAA is a trademark of International Business Machines Corporation. 
  132.  
  133.   Systems Application Architecture is a trademark of International Business 
  134.    Machines Corporation. 
  135.  
  136.  
  137.  Next  Prev 
  138.  
  139.  
  140. ΓòÉΓòÉΓòÉ 2.1. Other References ΓòÉΓòÉΓòÉ
  141.  
  142.  
  143. Next  Prev 
  144.  
  145. The following references were consulted during the preparation of this 
  146. reference: 
  147.  
  148.     Order# / ISBN          Manual, Book, or Article 
  149.  S01F-0284                 OS/2 Procedures Language 2/REXX Reference (OS/2 EE 
  150.                            1.2), IBM 
  151.  P/N 2010                  Personal REXX OS/2 Addendum Version 2.0, Mansfield 
  152.                            Software Group 
  153.  P/N 2008                  Personal REXX User's Guide Version 2.0, Mansfield 
  154.                            Software Group 
  155.  SC24-5239-3               VM/SP System Product Interpreter Reference (VM/SP 
  156.                            Release 6), IBM 
  157.  SC28-1883-1               TSO/E Version 2 REXX Reference (TSO/E 2.1.1), IBM 
  158.  SC26-4358-2               SAA CPI Procedures Language Reference, IBM 
  159.  0-13-780735-X             The Rexx Language: a Practical Approach to 
  160.                            Programming by M. F. Cowlishaw, IBM UK Scientific 
  161.                            Centre; 1985, Prentice-Hall, Inc., Englewood Cliffs, 
  162.                            New Jersey 07632 
  163.      0-13-780651-5         The Rexx Language: a Practical Approach to 
  164.                            Programming 2nd edition, by M. F. Cowlishaw, IBM UK 
  165.                            Scientific Centre; 1990, Prentice-Hall, Inc., 
  166.                            Englewood Cliffs, New Jersey 07632 (I haven't 
  167.                            actually seen the second edition, yet;  no bookstore 
  168.                            in Chicago has it or can order it.) 
  169.  
  170.  Additional and introductory information can be found in: 
  171.  
  172.     Order# / ISBN          Manual, Book, or Article 
  173.  S01F-0283                 OS/2 Procedures Language 2/REXX User's Guide, IBM 
  174.  SC24-5549                 SAA CPI Procedures Language Level 2 Reference, IBM 
  175.                            (IBM Announcement 290-363 on 26Jun90 introduced 
  176.                            Level 2 REXX -- the REXX 4.00 described in the 
  177.                            second edition of Mike Cowlishaw's book; the manual 
  178.                            will be available in the third quarter of 1990). 
  179.                            "Rexx in Charge: You're not really multitasking in 
  180.                            OS/2 unless you're using REXX" by Charles Daney, in 
  181.                            BYTE August 1990, pp.245-253 
  182.  SC28-1882                 TSO/E Version 2 REXX User's Guide, IBM 
  183.  SC24-5357                 VM/IS Writing Simple Programs with REXX, IBM 
  184.  SC24-5238                 VM/SP Product Interpreter User's Guide, IBM 
  185.  GH19-8118                 CMS REXX Compiler General Information, IBM 
  186.  SH19-8120                 CMS REXX Compiler User's Guide and Reference, IBM 
  187.  SH19-8146                 CMS REXX Compiler User's Guide Reference 
  188.                            Supplemental, IBM 
  189.  GG22-9361                 System Product Interpreter REXX Examples and 
  190.                            Techniques, (VM) IBM 
  191.  G321-5228                 The Design of the REXX Language, IBM Systems Journal 
  192.                            article reprint from Vol. 23 No. 4, 1984 
  193.  G321-5359                 REXX on TSO/E, IBM Systems Journal article reprint 
  194.                            from Vol. 28 No. 2, 1989 
  195.  
  196.      59731-1               Modern Programming Using REXX, by Robert O'Hara and 
  197.                            David Gomberg, Prentice-Hall., Englewood Cliffs, New 
  198.                            Jersey 07632 
  199.  
  200.      59732-9               Modern Programming Using REXX, Revised, by Robert 
  201.                            O'Hara and David Gomberg, Prentice-Hall., Englewood 
  202.                            Cliffs, New Jersey 07632 
  203.  
  204.      SHARE74               Procedures Language (REXX) Structure in SAA, by 
  205.                            Stephen G. Price and Linda Suskind Green, IBM Corp., 
  206.                            Endicott, New York; Session A631 in SHARE 74 
  207.                            Proceedings, Anaheim, California, March 4-9, 1990 
  208.                            SHARE Inc., 111 E. Wacker Drive, Chicago, IL 60601; 
  209.                            (312) 822-0932. 
  210.  
  211.      SHARE74               REXX 4.00, by Mike Cowlishaw, IBM UK Laboratories 
  212.                            Systems Technology, Winchester, UK; Session A633 in 
  213.                            SHARE 74 Proceedings, Anaheim, California, March 
  214.                            4-9, 1990 SHARE Inc., 111 E. Wacker Drive, Chicago, 
  215.                            IL 60601; (312) 822-0932. 
  216.  
  217.      SHARE74               Object-Oriented REXX, by Simon C. Nash, IBM UK 
  218.                            Laboratories Systems Technology, Winchester, UK; 
  219.                            Session A634 in SHARE 74 Proceedings, Anaheim, 
  220.                            California, March 4-9, 1990 SHARE Inc., 111 E. 
  221.                            Wacker Drive, Chicago, IL 60601; (312) 822-0932. 
  222.  
  223.      SHARE74               REXX Programming Standards , Hints and Tips, by Eric 
  224.                            Marc Lowbenberg, Bell Canada, Montreal, Quebec, 
  225.                            Canada; Session A644 in SHARE 74 Proceedings, 
  226.                            Anaheim, California, March 4-9, 1990 SHARE Inc., 111 
  227.                            E. Wacker Drive, Chicago, IL 60601; (312) 822-0932. 
  228.  
  229.      SHARE74               REXX in the Age of Presentation Manager, by Charles 
  230.                            Daney, Quercus Systems, 19567 Dorchester Drive, 
  231.                            Saratoga, CA 95070; Session A644 in SHARE 74 
  232.                            Proceedings, Anaheim, California, March 4-9, 1990 
  233.                            SHARE Inc., 111 E. Wacker Drive, Chicago, IL 60601; 
  234.                            (312) 822-0932. 
  235.  
  236.  
  237.  Next  Prev 
  238.  
  239.  
  240. ΓòÉΓòÉΓòÉ 3. Usage Instructions ΓòÉΓòÉΓòÉ
  241.  
  242.  
  243. Next  Prev How to Use the Contents 
  244.  
  245. (The following instructions are taken from the OS/2 online Command Reference.) 
  246.  
  247. When the Contents window first appears, some topics have a plus (+) sign beside 
  248. them. The plus sign indicates that additional topics are available. 
  249.  
  250. To expand the Contents if you are using a mouse, click on the plus sign.  If 
  251. you are using the keyboard, use the Up or Down Arrow key to highlight the 
  252. topic, and press the plus (+) key. For example, Keyword Instructions has a plus 
  253. sign beside it. To see the complete list of REXX keyword instructions, click on 
  254. the plus sign or highlight that topic and press the plus (+) key. 
  255.  
  256. To view a topic, double-click on the topic (or press the Up or Down Arrow key 
  257. to highlight the topic, and then press the Enter key). 
  258.  
  259. How to Obtain Additional Information 
  260.  
  261. After you select a topic, the information for that topic appears in a window. 
  262. You will notice that certain words in the text may be specially highlighted 
  263. (The default color for this special highlighting is green). These words are 
  264. links to additional information. If you are using a mouse, double-click on the 
  265. highlighted word.  If you are using a keyboard, press the Tab key to move to 
  266. the highlighted word, and then press the Enter key.  Additional information 
  267. will appear in a pop-up window. 
  268.  
  269. How to Use Action Bar Choices 
  270.  
  271. A number of choices are available for managing information presented in the 
  272. REXX Quick Reference. If you want to see more information about these choices, 
  273. click on the name of the choice (or press the Tab key to move to the choice and 
  274. press Enter). 
  275.  
  276.  Bookmark 
  277.          Allows you to set a placeholder so you can retrieve information of 
  278.          interest to you. (This choice is available from the Services 
  279.          pull-down). 
  280.  
  281.  Search 
  282.          Allows you to find occurrences of a word or phrase in the current 
  283.          topic, selected topics, or all topics. (This choice is available from 
  284.          the Services pull-down). 
  285.  
  286.  Print 
  287.          Allows you to print one or more topics. (This choice is available from 
  288.          the Services pull-down). 
  289.  
  290.  Copy 
  291.          Allows you to copy a topic you are viewing to a file you can edit. 
  292.          (This choice is available from the Services pull-down). 
  293.  
  294.  Options 
  295.          Allows you to change the way your Contents is displayed. 
  296.  
  297.  
  298.  Next  Prev 
  299.  
  300.  
  301. ΓòÉΓòÉΓòÉ 4. How to Read These Syntax Diagrams ΓòÉΓòÉΓòÉ
  302.  
  303.  
  304. Next  Prev 
  305.  
  306. The first thing you see above a syntax diagram is a list of icons that 
  307. represent the applicable environments for each item. 
  308.  
  309.                  indicates that IBM OS/2 EE Procedures Language/2 REXX 
  310.                  does/doesn't have this item. 
  311.                  indicates that Mansfield's Personal REXX for OS/2 does/doesn't 
  312.                  contain this item. 
  313.                  indicates that the IBM mainframe VM implementation of REXX 
  314.                  does/doesn't contain this item. 
  315.                  indicates that the item is/isn't valid in TSO/E REXX. 
  316.                  indicates that the item is/isn't valid in any IBM mainframe 
  317.                  MVS environment. 
  318.                  indicates that this item is/isn't in the SAA Procedures 
  319.                  Language Specification. 
  320.                  indicates that this item is/isn't in M.F.Cowlishaw's original 
  321.                  REXX book. 
  322.  
  323.  If a particular option or parameter is not supported in every environment, 
  324.  then you will see "X'ed" icons for the unsupported environments.  Language 
  325.  elements that are unique to one particular environment are also shown with a 
  326.  yellow background, as if you had run a highlighting pen over them. 
  327.  
  328.  The symbols are not buttons or hypertext links;  they just are visual clues to 
  329.  the set of environments which implements each item. 
  330.  
  331.  Syntax Diagram 
  332.  
  333.  The syntax diagram shows you how to specify a command so that the REXX 
  334.  interpreter can correctly understand what you typed. These diagrams are 
  335.  sometimes called railroad track diagrams. In general, you can just follow the 
  336.  lines and arrows, and any path you trace will be syntactically valid. The 
  337.  symbol ΓöÇΓöÇ identifies the start of a syntax diagram; ΓöÇΓöÇ pinpoints the end. 
  338.  When a diagram must be continued because it doesn't fit on a single line, the 
  339.  continued line ends in ΓöÇΓöÇ and the continuation begins with ΓöÇΓöÇ . The 
  340.  horizontal line is the main path.  Required parameters are displayed on the 
  341.  main path; optional parameters are displayed below it. 
  342.  
  343.  Parameters are classified as keywords or variables. Keywords are displayed in 
  344.  uppercase letters and must be typed exactly as shown. 
  345.  
  346.  Variables appear in lowercase letters and represent names or values you 
  347.  supply.  A filename is a variable.  Note that a parameter can be a combination 
  348.  of a keyword and a variable. Include all punctuation shown in the diagram, 
  349.  such as colons, semicolons, commas, quotation marks, and equal signs. 
  350.  
  351.  The words in the diagram that appear in a different color are hypertext links 
  352.  to footnotes or other parts of the online reference.  You can tab to them and 
  353.  press Enter to view the related information.  Alternatively, you can double 
  354.  click with the mouse selection button (by default, the left mouse button) to 
  355.  view the same information. 
  356.  
  357.  Specify a Sequence More Than Once:  An arrow that returns to a previous point 
  358.  means the sequence of items included by the arrow can be specified more than 
  359.  once. 
  360.  
  361.    ΓöÇΓöÇΓöÇΓöÇPROCEDUREΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  362.                     Γöé          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  363.                     Γöé                 Γöé Γöé
  364.                     ΓööΓöÇΓöÇEXPOSEΓöÇΓöÇΓö┤ΓöÇnameΓöÇΓöÇΓö┤ΓöÇΓöÿ
  365.  
  366.  Choose One Item from a Stack:  A stack of parameters with no return arrow 
  367.  means that you cannot choose more than one from the stack. 
  368.  
  369.    ΓöÇΓöÇNUMERICΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇDIGITSΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇ
  370.                  Γöé         ΓööΓöÇexpressionΓöÇΓöÿ          Γöé
  371.                  Γö£ΓöÇΓöÇFORMΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöñ
  372.                  Γöé        Γö£ΓöÇSCIENTIFICΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  373.                  Γöé        Γö£ΓöÇENGINEERINGΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  374.                  Γöé        ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇexpressionΓöÇΓöÿ Γöé
  375.                  Γöé          ΓööΓöÇVALUEΓöÇΓöÿ              Γöé
  376.                  ΓööΓöÇΓöÇFUZZΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  377.                           ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ
  378.  
  379.  
  380.  Next  Prev 
  381.  
  382.  
  383. ΓòÉΓòÉΓòÉ 5. Basic Concepts ΓòÉΓòÉΓòÉ
  384.  
  385.  
  386. Next  Prev 
  387.  
  388. REXX is a programming language that is appropriate for writing command 
  389. procedures and for developing macros for products such as editors, 
  390. communications packages, and data bases. Personal computing tasks are 
  391. conveniently and quickly done in REXX. 
  392.  
  393. REXX was developed at IBM in the early eighties for use on the VM mainframe 
  394. operating system.  Mike Cowlishaw of IBM UK created the REXX language as a 
  395. successor for the existing VM command languages, EXEC and EXEC2.  This is how 
  396. REXX got its name: the Reestructured Extended Executor language. 
  397.  
  398. You will be seeing more and more use of REXX as time goes on;  it has been 
  399. designated as the SAA (Systems Application Architecture) standard procedures 
  400. language.  IBM Implementations exist for VM, MVS, OS/2, OS/400, and I think 
  401. AIX. Mansfield Software Group has implementations for OS/2 and DOS.  A variant 
  402. called AREXX is widespread in the AMIGA world. A company called Ix has spent 
  403. the last two years developing multitasking REXX interpreters, written in C, for 
  404. the VM, MVS, PCDOS, UNIX, and OS/2 environments. 
  405.  
  406. In the OS/2 environment, REXX can be used anywhere that the BAT batch language 
  407. could be used - and more.  REXX can be used as the macro language for several 
  408. common editors.  REXX is used as the scripting language for several shareware 
  409. and commercial communications products.  REXX can be used with the OS/2 EE 
  410. Database Manager and Query Manager to perform various SQL operations. 
  411.  
  412. You can use REXX as the command and/or macro language with your own products 
  413. and applications.  There is an API that allows any program to interact with 
  414. REXX execs (procedures);  this makes it easy to enhance your application's 
  415. functionality. 
  416.  
  417. You can extend REXX's capabilities with function packages of your own devising; 
  418. these functions you provide, which can be written in any language, are invoked 
  419. just like the builtin REXX functions.  Unfortunately, the SAA specification for 
  420. REXX does not extend to include a standard for function packages or the 
  421. registration and APIs for host command environments. It would be fruitful for 
  422. an SAA or possibly an ANSI standard to address these areas. 
  423.  
  424. The IBM version of REXX for OS/2 is part of OS/2 EE (Extended Edition). There 
  425. has been a lot of demand for it to become part of OS/2 SE as well, but given 
  426. Microsoft's predisposition towards BASIC, it may never happen. (BASIC happened 
  427. to be my first language, too ... but REXX is better suited to usage as a 
  428. procedure and macro language.  Of course, if I sold BASIC compilers, I suppose 
  429. my opinion would be different, too <grin>).  In a briefing to IBM Technical 
  430. Coordinators IBM indicated that OS/2 1.2 SE will contain IBM REXX.  It would be 
  431. nice now if they could get it to run  as quickly and efficiently as the 
  432. Mansfield implementation, which consistently beats IBM's in my own ad hoc 
  433. benchmarks by 20% to 80 %. 
  434.  
  435. There is a REXX implementation available for owners of the current OS/2 SE (or 
  436. EE, for that matter, since it benchmarks faster than the IBM REXX). It is 
  437. called Personal REXX, and is manufactured by Mansfield_Software_Group Mansfield 
  438. has had great success with Personal REXX under both DOS and OS/2. 
  439.  
  440. The point is that REXX is automatically available on about two-thirds of all 
  441. OS/2 machines (because it comes with EE, and EE sales constitute about that 
  442. proportion), and is easily and inexpensively available on the rest.  Once 
  443. vendors discover that a REXX capability makes their products more marketable 
  444. (because customers need not learn yet another unique language) you'll begin to 
  445. see it everywhere. 
  446.  
  447. REXX is fundamentally an interpreted language.  Some implementations offer a 
  448. partial or complete compilation process as well.  There is a REXX compiler for 
  449. VM from IBM. The Personal REXX implementation stores a partially translated 
  450. version with the original source.  As demand for a compilation feature grows, 
  451. we are likely to see ports of the IBM compiler to OS/2 and MVS.  Sources have 
  452. indicated that work is proceeding on an MVS REXX compiler in Vienna, Austria. 
  453.  
  454.  
  455. Next  Prev 
  456.  
  457.  
  458. ΓòÉΓòÉΓòÉ 5.1. Syntax           - tokens, continuations ΓòÉΓòÉΓòÉ
  459.  
  460.  
  461. Next  Prev 
  462.  
  463. REXX programs are built from clauses;  the structure of a clause is shown 
  464. below: 
  465.  
  466.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  467.                          Γöé
  468. ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇtokenΓöÇΓö┤ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
  469.      ΓööΓöÇΓöÇblanksΓöÇΓöÇΓöÿ             ΓööΓöÇΓöÇblanksΓöÇΓöÇΓöÿ  ΓööΓöÇend of lineΓöÇΓöÿ
  470. It is important to note that the semicolon is optional for the last clause on 
  471. the line;  in some implementations there is actually a performance penalty by 
  472. including the semicolon in this situation. 
  473.  
  474. Tokens 
  475.  
  476.  Comments 
  477.                 The C and PL/I style of /* and */ is used. The comments may 
  478.                 span multiple lines, but may not be nested.  CLIST writers 
  479.                 should note that comments are not terminated by the end of 
  480.                 line. 
  481.  
  482.  Character string literals 
  483.                 Either single (') or double (") quotes can be used to delimit 
  484.                 the beginning and end of a string literal.  Use the same 
  485.                 delimiter for the end as for the beginning.  If the delimiter 
  486.                 must occur within the literal, then double it.  The literal 
  487.                 should be contained within one line, and can contain any 
  488.                 character. On OS/2, the linefeed character ('0A'x) cannot be 
  489.                 contained within the literal.  On CMS and TSO/E, the literal 
  490.                 can span lines;  however, this is not a good practice. 
  491.  
  492.                 Examples: 
  493.  
  494.                                 'This is a string literal.'
  495.                                 "So is this."
  496.                                 "Delimiters of one kind won't cause problems inside the other."
  497.                                 'Delimiters of same kind should''ve been doubled.'
  498.  
  499.  Hexadecimal string literals 
  500.                 Either single (') or double (") quotes can be used to delimit 
  501.                 the hexadecimal string literal.  Use the same delimiter for the 
  502.                 end as for the beginning.  Follow the ending delimiter with any 
  503.                 case of the letter X. The literal can contain any sequence take 
  504.                 from the digits 0-9, or any case of the letters A-F. Odd 
  505.                 numbers of hex digits can be used, in which case a leading "0" 
  506.                 is assumed. A nice feature is that blanks can be used within 
  507.                 the literals at byte boundaries (but not at the beginning or 
  508.                 end) to enhance readability. 
  509.  
  510.                 Examples: 
  511.  
  512.                                 '0123456789abcdef'x
  513.                                 "13 10"X
  514.                                 "e3c8c9e2 c9e2 C5C2C3C4C9C3"x
  515.                                 '4159434949'X
  516.  
  517.                                 CAUTION:
  518.                 Don't use "X" as a variable name -- it can cause you unexpected 
  519.                 difficulties, as in:  Say "X="x   which gives an error "invalid 
  520.                 hexadecimal string." 
  521.  
  522.                 Note:   Be careful when using hexadecimal literals; 
  523.                         dependencies on particular character sets (ASCII or 
  524.                         EBCDIC) or particular codepages (850, 437, etc.) can 
  525.                         greatly impair portability. 
  526.  
  527.  Binary string literals (IBM OS/2 EE, SAA Level 2, and REXX 4.00 only) 
  528.                 Either single (') or double (") quotes can be used to delimit 
  529.                 the binary string literal.  Use the same delimiter for the end 
  530.                 as for the beginning.  Follow the ending delimiter with any 
  531.                 case of the letter B. The literal can contain any sequence 
  532.                 taken from the digits 0 or 1. If the number of binary digits is 
  533.                 not a multiple of four (4), enough leading "0s" are added to 
  534.                 make it so. A nice feature is that blanks can be used within 
  535.                 the literals at byte or nibble (half-byte) boundaries (but not 
  536.                 at the beginning or end) to enhance readability. 
  537.  
  538.                 Warning:  The implementation first examines the "B" following 
  539.                 the literal's ending delimiter to determine that this is a 
  540.                 binary string literal; as a result, any ordinary character 
  541.                 string literal followed immediately by a token consisting only 
  542.                 of the letter "B" is treated as an invalid binary string 
  543.                 literal. 
  544.  
  545.                 Examples: 
  546.  
  547.                                 '1'B       /* same as "0001"b */
  548.                                 "0010101111010100"b
  549.                                 "0010 1011 1101 0100"b /* same as above */
  550.  
  551.  Numbers 
  552.                 Integers, decimals, and exponential notation are used.  Here is 
  553.                 the formal definition: 
  554.  
  555.                                 ΓöÇΓö¼ΓöÇΓö¼Γö¼ΓöÇΓöÇΓöÇΓöÇΓö¼Γö¼dΓöÇΓöÇΓö¼Γö¼ΓöÇΓö¼Γö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ  where b=blanks
  556.                                    ΓööbΓöÿΓöösΓö¼ΓöÇΓö¼ΓöÿΓö£d.dΓöñΓööbΓöÿΓööEΓö¼ΓöÇΓö¼dΓöÿ           s=sign
  557.                                         ΓööbΓöÿ Γö£.dΓöÇΓöñ     ΓöösΓöÿ             d=digits
  558.                                             Γööd.ΓöÇΓöÿ                     E=E or e
  559.                 The number of digits that can be used is determined by the 
  560.                 NUMERIC DIGITS instruction;  the default is 9, but there is no 
  561.                 limit to the number of digits that may be specified, other than 
  562.                 total storage. Larger numbers of digits will, of course, lead 
  563.                 to increased execution times. 
  564.  
  565.                 Note:   For some implementations, using a NUMERIC DIGITS 
  566.                         specification less than nine may slow execution. 
  567.  
  568.  Operators 
  569.                 The single character operators are:  +  -  \  /  %  *  |  &  = 
  570.                 ╨║  >  <. The multiple character operators are:  >=  ╨║<  \<  <= 
  571.                 ╨║>  \>  ╨║=  \=  <>  ><  //  &&  ||  **  >>  <<  ==  >>=  ╨║<< 
  572.                 \<<  <<=  ╨║>>  \>>  ╨║==  \==. The (\) and (╨║) characters are 
  573.                 interchangeable (both mean "not"). Occurrences of one or more 
  574.                 blanks in expressions but not adjacent to operators (e.g. 
  575.                 between symbols and/or parenthesized sub-expressions) are also 
  576.                 an operator (concatenate with one blank between). Since the (\) 
  577.                 is universally available on modern terminal and personal 
  578.                 computer keyboards and on both mainframe and personal printers, 
  579.                 while the (╨║) is usually available only on IBM terminal 
  580.                 keyboards, usage of the (\) is preferable. Blanks and comments 
  581.                 can be embedded within the multiple character operators, but 
  582.                 for goodness sake, don't code them that way!  (Just because 
  583.                 it's legal doesn't make it right. ) 
  584.  
  585.  Special characters 
  586.                 The characters ( ) : , ; and the individual characters that 
  587.                 compose the operators act as special characters:  they delimit 
  588.                 tokens, and "suck up" all blanks they are adjacent to. 
  589.  
  590.  Symbols 
  591.                 Symbols can be numbers, REXX keywords, or names used for 
  592.                 variables, labels, functions, etc.  Names can't begin with 
  593.                 digits or a period. All implementations allow names to include: 
  594.                 a-z A_Z 0-9 underscore(_) exclamation(!) and question(?).  The 
  595.                 period can also be used, but it has a special meaning concerned 
  596.                 with compound symbols. Symbols are not case sensitive, i.e., 
  597.                 lower-case letters in symbols are translated to upper-case. The 
  598.                 VM, MVS , and TSO environments also support the characters @#$╨½ 
  599.                 in symbols.  Avoid them for the sake of portability. 
  600.  
  601.  Continued clauses 
  602.  
  603.  End a line with a comma (,) to continue a clause.  Blank or comment tokens may 
  604.  follow this comma.  Clauses cannot be continued within string literals. 
  605.  
  606.  Example 
  607.  
  608.   Say "first",
  609.          "second"
  610.  displays 
  611.  
  612.   first second
  613.  
  614.  Example 
  615.  
  616.   Say "ABC",
  617.       ||"DEF"
  618.  displays 
  619.  
  620.   ABCDEF
  621.  
  622.  
  623.  Next  Prev 
  624.  
  625.  
  626. ΓòÉΓòÉΓòÉ 5.2. Expressions - terms & operators ΓòÉΓòÉΓòÉ
  627.  
  628.  
  629. Next  Prev 
  630.  
  631. REXX expressions are sequences of terms, operators, and parentheses (round 
  632. brackets, for those of you in the UK). 
  633.  
  634. Terms are: 
  635.  
  636.   Literals, which include character strings, hexadecimal strings, binary 
  637.    strings, and numbers. 
  638.   Variables,which are simple or compound symbols. 
  639.   Function References, which are the invocation of builtin, internal, or 
  640.    external functions.  They look like this: 
  641.  
  642.       ΓöÇΓö¼ΓöÇsymbol(ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇ
  643.          ΓööΓöÇstring(ΓöÇΓöÿ Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  644.                      Γöé                 Γöé Γöé
  645.                      ΓööΓöÇΓö┤ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÿ
  646.                          ΓööΓöÇexpressionΓöÇΓöÿ
  647.    The parameters in a function call are passed by value.  Everything in REXX 
  648.    is a string.  Strings that contain numbers can be manipulated with 
  649.    arithmetic operators, but fundamentally we are still dealing with strings. 
  650.  
  651.  Operators 
  652.  
  653.   Concatenation 
  654.  
  655.     ||                  concatenate (with no blank in between) 
  656.     (juxtaposition)      concatenate (with no blank in between) 
  657.     (blanks)            concatenate with just one blank between 
  658.  
  659.                         Examples: 
  660.  
  661.                                                 myvar1 = "the"
  662.                                                 myvar2 = " time"
  663.                                                 say "Now"     "is "myvar||myvar2" for all good men ..."
  664.                                                          ΓööΓöÇΓö¼ΓöÇΓöÿ    ΓööΓöñ    Γö£Γöÿ     ΓööΓöñ
  665.                                                                   Γöé           ΓööΓöÇΓöÇΓöÇΓöÉ
  666.                                                         (blanks)   Γöé   (||)         
  667.                                                                                  (juxtaposition)
  668.                                                                  (juxtaposition)
  669.                         displays: 
  670.  
  671.                                                 "Now is the time for all good men ..."
  672.  
  673.   Arithmetic 
  674.  
  675.     +             add 
  676.     -             subtract 
  677.     *             multiply 
  678.     /             divide 
  679.     %             return an integer quotient from the division 
  680.     //            return the integer remainder from the division.  This is not 
  681.                   the modulus operation, because negative remainders are 
  682.                   returned when the dividend is negative. 
  683.     **            power (only integral exponents) 
  684.     prefix -      negation (like 0 - term ) 
  685.     prefix +      (like 0 + term ) 
  686.  
  687.   Comparison 
  688.  
  689.    REXX has two sets of comparison operators: the forgiving and the strict. 
  690.    The strict ones do an exact character comparison with no padding. The 
  691.    forgiving ones will do numeric comparisons if both operands are numeric; if 
  692.    not, then leading and trailing blanks are ignored, and the shorter string is 
  693.    padded with blanks on the right.  Comparisons are case sensitive.  Since 
  694.    REXX is a multi-environment language, you should be careful about character 
  695.    set dependencies, e.g., with respect to ASCII vs. EBCDIC. 
  696.  
  697.     - Forgiving 
  698.  
  699.        =                                 equal 
  700.        >                                 greater than 
  701.        <                                 less than 
  702.        >=  or  \<  or  ╨║<                greater than or equal to (same as not 
  703.                                          less than) 
  704.        <=  or  \>  or  ╨║>                less than or equal to (same as not 
  705.                                          greater than) 
  706.        \=  or  ╨║=  or  <>  or  ><        not equal 
  707.  
  708.     - Strict 
  709.  
  710.        ==                                equal (C programmers, be careful here) 
  711.        >>                                greater than 
  712.        <<                                less than 
  713.        >>=  or  \<<  or ╨║<<              greater than or equal to (same as not 
  714.                                          less than) 
  715.        <<=  or  \>>  or ╨║>>              less than or equal to (same as not 
  716.                                          greater than) 
  717.        \==  or ╨║==                       not equal 
  718.  
  719.   Logical 
  720.  
  721.    Character strings with a value of zero ("0") have a logical value of false. 
  722.    Character strings with a value of one ("1") have a logical value of true. 
  723.    Any other value for a character string can not be used where a logical value 
  724.    is required. 
  725.  
  726.    C and CLIST programmers should be especially careful with the logical 
  727.    operators -- there can be a high astonishment factor if you let your typing 
  728.    habits take over when entering the logical operators. 
  729.  
  730.     &               AND returns 1 if both operands are true, else 0 
  731.     |               OR returns 1 if either operand is true, else 0 (inclusive 
  732.                     OR) 
  733.     &&              XOR returns 1 if exactly one operand is true, else 0 
  734.                     (exclusive OR) 
  735.     prefix \ 
  736.     prefix ╨║        NOT inverts operand; if 1 then 0, else 1 
  737.  
  738.                     The OR character may appear as a split vertical bar ( ) or 
  739.                     solid vertical bar ( | ) on the keycap of your keyboard. 
  740.                     OS/2 uses the one that maps to ASCII 124 ("7C"x). 
  741.  
  742.  Evaluation of Expressions 
  743.  
  744.  Terms are evaluated when they are needed, in a left to right order.  The 
  745.  expression is evaluated according to the usual precedence of the operators in 
  746.  the expression: 
  747.  
  748.   1. prefix operators (minus, plus, not) 
  749.   2. exponentiation (power) 
  750.   3. multiplication (multiply, divide, quotient, remainder) 
  751.   4. addition (add, subtract) 
  752.   5. concatenation 
  753.   6. comparison 
  754.   7. logical AND 
  755.   8. logical OR, XOR 
  756.  
  757.  As you would expect, the use of parentheses can effectively change the order 
  758.  of evaluation.  The only thing really different here is that the prefix 
  759.  operators bind more tightly than exponentiation, e.g., -2**4 yields 16, not 
  760.  -16. 
  761.  
  762.  
  763.  Next  Prev 
  764.  
  765.  
  766. ΓòÉΓòÉΓòÉ 5.3. Clauses        - parts of instructions ΓòÉΓòÉΓòÉ
  767.  
  768.  
  769. Next  Prev 
  770.  
  771. REXX has five types of clauses: 
  772.  
  773.  1. Assignment statements 
  774.            A single clause of the form symbol = expression 
  775.  2. Keyword instructions 
  776.            A series of related clauses that begin with a keyword symbol.  E.g., 
  777.            the IF instruction consists of the IF keyword, the IF's condition, 
  778.            the THEN keyword and its clause(s), and the optional ELSE keyword 
  779.            and its clause(s). 
  780.  3. Commands 
  781.            A single clause consisting of just an expression.  The evaluated 
  782.            expression is passed to an "environment" program, which could be the 
  783.            operating system, a communications program, a data base manager, 
  784.            etc. 
  785.  4. Labels 
  786.            A symbol followed by a colon defines a label.  Labels are used to 
  787.            identify function or subroutine definitions.  There is no GOTO in 
  788.            REXX. 
  789.  5. Null clauses 
  790.            A clause with only blanks or comments;  it is ignored.  This is NOT 
  791.            like a null instruction;  you can't just add a semicolon to mean a 
  792.            null operation.  There is a NOP instruction for that purpose (like 
  793.            the "CONTINUE" or "NEXT SENTENCE" in COBOL. 
  794.  
  795.  
  796.  Next  Prev 
  797.  
  798.  
  799. ΓòÉΓòÉΓòÉ 5.4. Variables      - & values ΓòÉΓòÉΓòÉ
  800.  
  801.  
  802. Next  Prev 
  803.  
  804. Variables are symbols that don't begin with a digit or a period. A variable has 
  805. a value that is a character string; it can hold any characters and be of 
  806. unbounded length.  These character strings can be numbers, and if so, you can 
  807. do arithmetic on them.  Variables do not have to be declared before use, or 
  808. declared at all -- in fact, they cannot be declared. The name of a variable is 
  809. not case sensitive, i.e., the names MyVar, myvar, and MYVAR all refer to the 
  810. same variable MYVAR (C programmers take note). 
  811.  
  812. There are two kinds of variables in REXX: simple and compound.  A simple 
  813. variable is just like an ordinary variable you see in other programming 
  814. languages -- it holds a single value.  A compound variable is kind of like an 
  815. array, kind of like a structure, kind of like a hash table, and quite unlike 
  816. variables you may have seen in most other programming languages. 
  817.  
  818. Compound variables are symbols composed of what looks like a simple variable 
  819. name, followed by a period, and then a sequence of other periods and/or valid 
  820. symbol characters. 
  821.  
  822. OneD_Array.12
  823. TwoD_Array.I.J
  824. SymbolTable.Symbol
  825.  
  826. The first part of the compound variable name (up to and including the first 
  827. period) is called the stem.  Compound variables are often referred to as stem 
  828. variables.  The general form of a compound variable is: 
  829.  
  830.               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  831.                                    Γöé
  832. ΓöÇΓöÇΓöÇstempartΓöÇΓö┤ΓöÇ . ΓöÇΓöÇΓöÇsimplesymbolΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  833. When a compound variable is used, the stempart name is converted to all upper 
  834. case, and the value of each simplesymbol is substituted into the name;  the 
  835. resulting derived name is then used like an ordinary variable name.  You can 
  836. see how it would be easy to use compound variables like multi-dimensional 
  837. arrays, where the sequence of simple symbols after the stempart have numeric 
  838. values. However, you can extend the idea because the simple symbols in the name 
  839. can take on any value!  You can use this powerful concept to create and 
  840. manipulate stacks, queues, deques, heaps, trees, lists, etc. -- properly 
  841. encapsulated, any type of data structure can be created using compound 
  842. variables. 
  843.  
  844. The following code fragment, part of a word counting and cross-reference 
  845. program, demonstrates a common use of compound variables -- as an array of 
  846. structures, with an content-addressable index into the array: 
  847.  
  848. /* assume user functions exist    */
  849. /* called morewords()             */
  850. /* and nextword()                 */
  851.  
  852. /* no words in list, yet          */
  853. WordListNr = 0
  854.  
  855. /* This initializes ALL variables */
  856. /*     beginning with this stem:  */
  857. WordIndex. = ""
  858.  
  859. do while morewords()
  860.   thisword = nextword()
  861.   /* Lookup index for word */
  862.   thisindex = WordIndex.thisword
  863.   if thisindex = "" then do
  864.     /* First occurrence of this word */
  865.     /* Save info in WordList.. array */
  866.     /*     of structures             */
  867.     WordListNr = WordListNr + 1
  868.     WordList.WORDVALUE.WordListNr = thisword
  869.     WordList.WORDCOUNT.WordListNr = 1
  870.     WordIndex.thisword = WordListNr
  871.     end
  872.   else do
  873.     WordList.WORDCOUNT.thisindex = WordList.WORDCOUNT.thisindex + 1
  874.     end
  875.   end /* while morewords() */
  876.  
  877. Uninitialized Variables 
  878.  
  879. Variables that are used before they have been given values are uninitialized; 
  880. the value of an uninitialized simple variable is its own name in upper case. 
  881. Contrast this to other programming languages in which an uninitialized value is 
  882. zero or the null string, or undefined.  E.g., if variable NoInitValue has not 
  883. been initialized, its value is "NOINITVALUE" (like WORDCOUNT and WORDVALUE in 
  884. the example above). 
  885.  
  886. Similarly, the value of an uninitialized compound variable is the value of its 
  887. derived name, in upper case.  E.g., the uninitialized value of FileType.this 
  888. when this = "exe" is "FILETYPE.EXE". 
  889.  
  890.  
  891. Next  Prev 
  892.  
  893.  
  894. ΓòÉΓòÉΓòÉ 5.5. Commands   - & environments ΓòÉΓòÉΓòÉ
  895.  
  896.  
  897. Next  Prev 
  898.  
  899. The whole reason for REXX is to issue commands  --  commands to the operating 
  900. system, commands to an editor, commands to a communications package, etc. 
  901. Depending on where your REXX exec runs, it will have access to one or more host 
  902. system environments which receive and proccess the commands from your REXX 
  903. exec.  Any program can use a REXX API to register itself as an environment that 
  904. will then be available to REXX execs. 
  905.  
  906. When your REXX exec begins execution, one of these environments is chosen as 
  907. the default environment.  When your exec contains a clause like: 
  908.  
  909. expression
  910.  
  911. it is a command.  The value of the expression is evaluated, and the resulting 
  912. character string is passed to the current host environment. You can send 
  913. commands to more than one environment in the same REXX exec.  See the ADDRESS 
  914. keyword instruction and the ADDRESS( ) builtin function for details. 
  915.  
  916. The default environment in OS/2 is CMD  --  which processes the commands in the 
  917. same way as the OS/2 command processor. Here is an OS/2 example: 
  918.  
  919.  /* assume variable drive = 'C'             */
  920.  /* assume variable directory = 'OS2'       */
  921. 'dir' drive':\'directory'\*'
  922.  /* The command sent to the environment is: */
  923.  /* dir C:\OS2\*                            */
  924.  
  925. It is very important to enclose the parts of your command that are not to be 
  926. evaluated in quotes.  If you do not, REXX thinks you want variable 
  927. substitution, which may not give you the desired results. For example, if the 
  928. command above had been coded as: 
  929.  
  930. dir drive':\'directory'\*'
  931.  
  932. then you would get different results depending on whether a variable called dir 
  933. existed.  If it did not exist, its uninitialized value would be used ("DIR"). 
  934. This would be OK, but if the variable existed and had a value of "erase" then 
  935. the command issued to the environment would be the ERASE command rather than 
  936. the DIR command! 
  937.  
  938. You may see examples of REXX code that are not rigorous about quoting command 
  939. strings;  don't follow their style -- these are sleeping bugs that someday will 
  940. wake up and bite you when a change is made elsewhere in the REXX exec, e.g., to 
  941. begin using dir as a variable name. 
  942.  
  943.  
  944. Next  Prev 
  945.  
  946.  
  947. ΓòÉΓòÉΓòÉ 6. Keyword Instructions ΓòÉΓòÉΓòÉ
  948.  
  949.  
  950. Next  Prev 
  951.  
  952. Keyword instructions provide the structure on which the rest of a REXX program 
  953. hangs;  the commands and builtin functions flesh out this skeleton. 
  954.  
  955. In the sections that follow, the REXX keyword instructions are described. 
  956.  
  957. For a description of the icons displayed and the syntax diagrams, see How to 
  958. Read These Syntax Diagrams. 
  959.  
  960.  
  961. Next  Prev 
  962.  
  963.  
  964. ΓòÉΓòÉΓòÉ 6.1. Address   - change cmd destination ΓòÉΓòÉΓòÉ
  965.  
  966.  
  967. Next  Prev 
  968.  
  969. The ADDRESS instruction will change the destination of commands, either 
  970. temporarily or permanently. 
  971.  
  972.  ΓöÇΓöÇADDRESSΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇ
  973.               Γö£ΓöÇenvironmentΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöñ
  974.               Γöé             ΓööΓöÇexpressionΓöÇΓöÿ Γöé
  975.               ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇexpression1ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  976.                ΓööΓöÇVALUEΓöÇΓöÿ
  977.  
  978.  Related Functions:      ADDRESS( ) 
  979.  
  980.  Use the ADDRESS instruction to issue commands to a host or command 
  981.  environment, e.g., OS/2 commands, CMS or TSO commands, ISPEXEC or ISREDIT 
  982.  services.  Many products, such as editors and communications packages, 
  983.  "register" their command environments for use in REXX procedures.  You can 
  984.  write and register your own environments for use with your programs. 
  985.  
  986.  Your REXX exec begins executing with one of the environments considered to be 
  987.  the default. You can change the environment temporarily to issue one command 
  988.  to a different environment, when more than one command environment is 
  989.  available, or you can change the environment permanently (until the next 
  990.  ADDRESS instruction). Commands that are being issued to the default 
  991.  environment need not be preceded by the ADDRESS keyword. 
  992.  
  993.  ADDRESS environments: 
  994.  
  995.   OS/2 EE 
  996.  
  997.     CMD           Used for OS/2 commands, just like in a windowed or full 
  998.                   screen OS/2 command session 
  999.     DSQCIX        Used to send commands to the OS/2 EE Query Manager. 
  1000.     ISPCIR        Used to issue OS/2 Dialog Manager services. 
  1001.     LPEX          Used in LPEX edit macros to issue commands to the editor. 
  1002.                   (LPEX, the Live Parsing Editor, is an IBM PM editor 
  1003.                   commercially available only in Europe). 
  1004.     SQLDBS        Used to send commands to the OS/2 EE Database Manager. 
  1005.     ?????         Used to send commands to the OfficeVision/2 Composite 
  1006.                   Correspondence Editor. 
  1007.  
  1008.   Personal REXX for OS/2 
  1009.  
  1010.     CMD           Used for OS/2 commands, just like in a windowed or full 
  1011.                   screen OS/2 command session 
  1012.     KEDIT         Used in KEDIT edit macros to issue commands to the editor. 
  1013.                   (KEDIT is an editor from the Mansfield Software Group that is 
  1014.                   similar to VM's XEDIT). 
  1015.     ????          Used in REXXTERM sessions to issue commands to the 
  1016.                   communications program.  (REXXTERM is a product of 
  1017.                   Quercus_Systems). 
  1018.  
  1019.   VM 
  1020.  
  1021.     CMS           Used for CMS commands, just as in the normal interactive 
  1022.                   mode. 
  1023.     COMMAND       Used in "system" EXECs to pass commands directly to CMS via 
  1024.                   SVC 202, bypassing EXEC or CP cmd search, and without 
  1025.                   parmlist translation. 
  1026.     XEDIT         Used in XEDIT sessions to issue commands to the editor. 
  1027.     ISPEXEC       Used in ISPF sessions to issue ISPF or ISPF/PDF services. 
  1028.     ISREDIT       Used in ISPF/PDF Edit macros. 
  1029.     ?????         Used to issue commands to the SQL/DS relational data base. 
  1030.                   (Requires IBM product "?????"). 
  1031.  
  1032.   MVS 
  1033.  
  1034.     TSO           Used for TSO/E commands, just as in the normal interactive 
  1035.                   mode. 
  1036.     MVS           Used in any MVS address space to issue a subset of TSO/E REXX 
  1037.                   commands. 
  1038.     LINK          Used in any MVS address space to link to any MVS or user 
  1039.                   module at the same task level. 
  1040.     ATTACH        Used in any MVS address space to attach any MVS or user 
  1041.                   module at a daughter task (TCB) level. 
  1042.     ISPEXEC       Used in ISPF sessions to issue ISPF or ISPF/PDF services. 
  1043.     ISREDIT       Used in ISPF/PDF Edit macros. 
  1044.     NETVIEW       Used in NetView Network Management Clists 
  1045.  
  1046.  Examples: 
  1047.  
  1048.   ADDRESS CMD 'TYPE C:\CONFIG.SYS'
  1049.  
  1050.  In this example, the default environment is TSO: 
  1051.  
  1052.   /* command goes to environment TSO */
  1053.   "listdsi" dataset_name_variable
  1054.  
  1055.   /* command goes to environment ISPEXEC */
  1056.   address ispexec "LIBDEF ISPPLIB DATASET ID("dataset_name_variable") COND"
  1057.  
  1058.   /* command goes to environment TSO     */
  1059.   "alloc f(applwork) unit(vio) sp(1) tracks'
  1060.  
  1061.   /* commands go to environment TSO     */
  1062.   address ISREDIT
  1063.   "change 'DOS' 'OS/2' all"
  1064.   "save"
  1065.  
  1066.  
  1067.  Next  Prev 
  1068.  
  1069.  
  1070. ΓòÉΓòÉΓòÉ 6.2. Arg           - parse parameters ΓòÉΓòÉΓòÉ
  1071.  
  1072.  
  1073. Next  Prev 
  1074.  
  1075. The ARG instruction parses incoming parameters. 
  1076.  
  1077.  ΓöÇΓöÇARGΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇ
  1078.               ΓööΓöÇΓöÇtemplateΓöÇΓöÇΓöÿ
  1079.  
  1080. Short form of PARSE UPPER ARG . Used to upper-case and receive parameters in an 
  1081. exec. 
  1082.  
  1083.  Related Instructions:   CALL, PROCEDURE 
  1084.  Related Functions:      ARG( ) 
  1085.  
  1086.  Example: 
  1087.  
  1088.   /* Suppose that the REXX exec has been
  1089.    *     invoked with the parameter:
  1090.    *
  1091.    * "This string is in MiXeD CaSe."
  1092.    */
  1093.  
  1094.   arg first second TheRest
  1095.  
  1096.   /* Contents of variables
  1097.    *     after the ARG instruction:
  1098.    *
  1099.    * first   :  "THIS"
  1100.    * second  :  "STRING"
  1101.    * TheRest :  "IS IN MIXED CASE."
  1102.    */
  1103.  
  1104.  
  1105.  Next  Prev 
  1106.  
  1107.  
  1108. ΓòÉΓòÉΓòÉ 6.3. Call          - invoke a routine ΓòÉΓòÉΓòÉ
  1109.  
  1110.  
  1111. Next  Prev 
  1112.  
  1113. The CALL instruction invokes an internal routine (contained in the same 
  1114. exec/program), or a builtin REXX function, or an external routine (located 
  1115. elsewhere -- details differ by operating system).  CALL also is used for 
  1116. enabling and disabling condition traps for error recovery. 
  1117.  
  1118.  ΓöÇΓöÇCALLΓöÇΓöÇΓö¼ΓöÇΓöÇnameΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇ
  1119.            Γöé            Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ       Γöé
  1120.            Γöé            Γöé                    Γöé       Γöé
  1121.            Γöé            ΓööΓöÇΓöÇΓö┤ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1122.            Γöé                 ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ         Γöé
  1123.            Γöé                                          Γöé
  1124.            Γö£ΓöÇΓöÇOFFΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇERRORΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1125.            Γöé            Γö£ΓöÇΓöÇFAILUREΓöÇΓöÇΓöñ                 Γöé
  1126.            Γöé            Γö£ΓöÇΓöÇHALTΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                 Γöé
  1127.            Γöé            ΓööΓöÇΓöÇNOREADYΓöÇΓöÇΓöÿ                 Γöé
  1128.            Γöé                                          Γöé
  1129.            ΓööΓöÇΓöÇONΓöÇΓöÇΓö¼ΓöÇΓöÇERRORΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  1130.                   Γö£ΓöÇΓöÇFAILUREΓöÇΓöÇΓöñ ΓööΓöÇΓöÇNAMEΓöÇΓöÇtrapnameΓöÇΓöÇΓöÿ
  1131.                   Γö£ΓöÇΓöÇHALTΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1132.                   ΓööΓöÇΓöÇNOREADYΓöÇΓöÇΓöÿ
  1133.  
  1134. Related: ARG, PROCEDURE, SIGNAL, ARG( ) CONDITION( ) 
  1135.  
  1136. A routine can alternatively be invoked as a function reference, if it is 
  1137. defined as returning a result;  the function reference can be used any where 
  1138. that an expression can: 
  1139.  
  1140.  ΓöÇΓöÇname(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇ;ΓöÇ
  1141.            Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ       Γöé
  1142.            Γöé                    Γöé       Γöé
  1143.            ΓööΓöÇΓöÇΓö┤ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1144.                 ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ
  1145.  
  1146. Note:   The name and the left parenthesis in the above MUST be adjacent (no 
  1147.         intervening blank) or else REXX will see this not as a function 
  1148.         reference but a blank operator between two string expressions. 
  1149.  
  1150.  When a routine returns a result, but has been invoked with the CALL syntax, 
  1151.  the returned result is still accessible to the caller in the special variable 
  1152.  RESULT.  If the called routine did NOT return a result, then the RESULT 
  1153.  variable is dropped, i.e., becomes uninitialized (its value = "RESULT"). 
  1154.  
  1155.  Recursive calls are supported;  in fact, in OS/2, you cannot invoke a REXX 
  1156.  program from a REXX program via the command environment -- you must use the 
  1157.  CALL instruction.  It is possible to invoke builtin functions in this way, but 
  1158.  strange terminations of the REXX exec usually happen. 
  1159.  
  1160.  There is some overloading on CALL in REXX: as you can see above in the syntax 
  1161.  diagram, CALL is used both for invoking routines and for setting error 
  1162.  recovery options.  When a condition has been enabled, as in: 
  1163.  
  1164.   call on error name MyError
  1165.  
  1166.  then should the ERROR condition be raised, the routine MyError will be called. 
  1167.  It could take some action and return, or exit (terminate the entire REXX 
  1168.  program). 
  1169.  
  1170.  Parameters: 
  1171.  
  1172.  name          A symbol or string literal that names the routine to be called. 
  1173.                The search order for finding the routine is: 
  1174.  
  1175.                1. internal routine 
  1176.  
  1177.                2. external routine 
  1178.  
  1179.                3. builtin function 
  1180.  
  1181.                When a string literal is used, internal routines are not 
  1182.                invoked, only external or builtin routines are called.  The 
  1183.                string literal should be in upper case because builtin routines 
  1184.                and external routines in most environments must be in upper 
  1185.                case. 
  1186.  
  1187.  ON            Enables the named condition. 
  1188.  
  1189.  
  1190.  OFF           Disables the named condition. 
  1191.  
  1192.  
  1193.  ERROR         The ERROR condition is raised if an environment command 
  1194.                indicates an error upon its return to REXX, or if it indicates a 
  1195.                failure and the FAILURE condition is not enabled. 
  1196.  
  1197.  
  1198.  FAILURE       The FAILURE condition is raised if an environment command 
  1199.                indicates a failure upon its return to REXX. 
  1200.  
  1201.  
  1202.  HALT          The HALT condition is raised if an external attempt is made to 
  1203.                halt the REXX program. In OS/2, this is not implemented for REXX 
  1204.                programs invoked from the command session. 
  1205.  
  1206.  
  1207.  NOREADY       The NOREADY condition is only valid in OS/2 EE;  this condition 
  1208.                is raised if there is an error during an I/O operation. 
  1209.  
  1210.  
  1211.  trapname      The name of a routine to be called when the associated condition 
  1212.                is raised. 
  1213.  
  1214.  Example: 
  1215.  
  1216.    ...
  1217.   call fcn dataset, member
  1218.   valuefromfcn = RESULT
  1219.    ...
  1220.   fcn: procedure
  1221.   arg dsn, mbr
  1222.    ...
  1223.   return somevalue
  1224.  
  1225.  
  1226.  Next  Prev 
  1227.  
  1228.  
  1229. ΓòÉΓòÉΓòÉ 6.4. Do            - repeat instructions ΓòÉΓòÉΓòÉ
  1230.  
  1231.  
  1232. Next  Prev 
  1233.  
  1234. The DO instruction (and it's paired END keyword) bracket a block of 
  1235. instructions that can be executed repetitively. 
  1236.  
  1237.  ΓöÇDOΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ;ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ENDΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼;ΓöÇ
  1238.        ΓöörepetitorΓöÿ ΓööconditionalΓöÿ   ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé    ΓööΓöÇsymbolΓöÿ
  1239.                                    Γöé              ΓöéΓöé
  1240.                                    ΓööΓö┤ΓöÇinstructionsΓöÇΓö┤Γöÿ
  1241.  
  1242.      repetitor:
  1243.  
  1244.         ΓöÇΓöÇΓö¼ΓöÇname=expriΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇ
  1245.             Γöé            ΓööTOΓöÇexprtΓöÿ ΓööBYΓöÇexprbΓöÿ ΓööFORΓöÇexprfΓöÿ Γöé
  1246.             Γö£ΓöÇΓöÇFOREVERΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1247.             ΓööΓöÇΓöÇexprrΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1248.  
  1249.      conditional:
  1250.  
  1251.         ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇWHILEΓöÇexprwΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ
  1252.                ΓööΓöÇUNTILΓöÇexpruΓöÇΓöÇΓöÿ
  1253.  
  1254. For C programmers, this is like while (condition) { ... } and for 
  1255. (initial;condition;repetitor) { ... } all rolled into one instruction. 
  1256.  
  1257. Used to control the looping of instructions.  Note that REXX, unlike other 
  1258. languages, does NOT allow the use of both the WHILE and UNTIL keywords in the 
  1259. same DO statement. 
  1260.  
  1261. The DO must have a matching END keyword. 
  1262.  
  1263. Example:
  1264.  
  1265.     do i = 1 to CellNr by 2 until Cell.i = 'empty'
  1266.         end
  1267.  
  1268. Control Flow in a DO Loop 
  1269.  
  1270.  
  1271. Next  Prev 
  1272.  
  1273.  
  1274. ΓòÉΓòÉΓòÉ 6.5. Drop         - unassign a variable ΓòÉΓòÉΓòÉ
  1275.  
  1276.  
  1277. Next  Prev 
  1278.  
  1279. The DROP instruction unassigns variables;  restores them to their original 
  1280. uninitialized state. 
  1281.  
  1282.               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1283.                              Γöé
  1284.  ΓöÇΓöÇΓöÇΓöÇDROPΓöÇΓöÇΓöÇΓö┤Γö¼ΓöÇΓöÇΓöÇΓöÇnameΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γö┤ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1285.                ΓööΓöÇ(name-expr)ΓöÇΓöÿ
  1286.  
  1287. It's OK to specify the names of variables that are uninitialized already. 
  1288.  
  1289. PREXX doesn't support the use of a name-expr in parentheses. 
  1290.  
  1291. CAUTION:
  1292. In some environments, excessive use of DROP can slow the execution. 
  1293.  
  1294. Example 
  1295.  
  1296. a = "This is a"
  1297. b = "variable B here"
  1298. c = "a C variable"
  1299. d = "a b"
  1300. e.1 = "E sub 1"
  1301. drop (d) c e.
  1302. say "a   = " a
  1303. say "b   = " b
  1304. say "c   = " c
  1305. say "d   = " d
  1306. say "e.1 = " e.1
  1307.  
  1308. Output 
  1309.  
  1310. a   = A    /* uninitialized value */
  1311. b   = B    /* uninitialized value */
  1312. c   = C    /* uninitialized value */
  1313. d   = a b
  1314. e.1 = E.1  /* uninitialized value */
  1315.  
  1316. The variables in a list are dropped in order, left to right. 
  1317.  
  1318. Example 
  1319.  
  1320. a = "This is a"
  1321. b = "variable B here"
  1322. c = "a C variable"
  1323. d = "a b"
  1324. e.1 = "E sub 1"
  1325. drop d (d) c e.
  1326. say "a   = " a
  1327. say "b   = " b
  1328. say "c   = " c
  1329. say "d   = " d
  1330. say "e.1 = " e.1
  1331.  
  1332. Output 
  1333.  
  1334. a   = This is a
  1335. b   = variable B here
  1336. c   = C               /* uninitialized value */
  1337. d   = D               /* uninitialized value */
  1338. e.1 = E.1             /* uninitialized value */
  1339.  
  1340.  
  1341. Next  Prev 
  1342.  
  1343.  
  1344. ΓòÉΓòÉΓòÉ 6.6. Exit          - leave a program ΓòÉΓòÉΓòÉ
  1345.  
  1346.  
  1347. Next  Prev 
  1348.  
  1349. The EXIT instruction leaves a REXX program;  an optional expression is returned 
  1350. in the caller's REXX variable named RESULT. 
  1351.  
  1352.  ΓöÇΓöÇΓöÇΓöÇEXITΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1353.               ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ
  1354.  
  1355.  Related Instruction:    RETURN 
  1356.  A REXX program that is intended to be invoked as an external function must 
  1357.  return a result.  EXIT in an internal routine terminates the whole program. 
  1358.  
  1359.  Note:   On VM, the optional expression is returned to caller upon termination 
  1360.          (not in RESULT). 
  1361.  
  1362.  
  1363.  Next  Prev 
  1364.  
  1365.  
  1366. ΓòÉΓòÉΓòÉ 6.7. If               - maybe process instrs ΓòÉΓòÉΓòÉ
  1367.  
  1368.  
  1369. Next  Prev 
  1370.  
  1371. Use to control execution sequencing;  can be nested to accommodate complex 
  1372. conditional logic. 
  1373.  
  1374.  ΓöÇIFΓöÇexpressionΓöÇΓö¼ΓöÇΓö¼THENΓöÇΓö¼ΓöÇΓö¼instructionΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
  1375.                   Γöö;Γöÿ     Γöö;Γöÿ            ΓööΓöÇELSEΓöÇΓö¼ΓöÇΓö¼instructionΓöÿ
  1376.                                                 Γöö;Γöÿ
  1377.  
  1378. Note:   if you need a "null" instruction, you must use the NOP instruction. 
  1379.         Simply coding a blank line, or adjacent semicolons (;;) does NOT work 
  1380.         as in PL/I. 
  1381.  
  1382.  Most of the semicolons in the syntax for IF are optional; this is a syntactic 
  1383.  sugaring that makes writing REXX programs easier for those who also work in 
  1384.  other languages.  Imagine what would happen if the semicolon after the THEN 
  1385.  were required! 
  1386.  
  1387.  A result of this convenience is that a variable named THEN cannot be used in 
  1388.  the expression of an IF instruction.  This doesn't constitute a hardship, as 
  1389.  any programmer who names variables this way should be shot, anyway. 
  1390.  
  1391.  
  1392.  Next  Prev 
  1393.  
  1394.  
  1395. ΓòÉΓòÉΓòÉ 6.8. Interpret   - build, do instrs at runtime ΓòÉΓòÉΓòÉ
  1396.  
  1397.  
  1398. Next  Prev 
  1399.  
  1400. The INTERPRET is used to dynamically interpret sequences of REXX instructions, 
  1401. and to perform multiple levels of symbolic substitution. 
  1402.  
  1403.  ΓöÇΓöÇΓöÇΓöÇINTERPRETΓöÇΓöÇΓöÇΓöÇexpressionΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1404.  
  1405. This can be tricky, but is powerful when necessary.  Overuse of INTERPRET makes 
  1406. programs HARD to read, and thus hard to maintain.  Real world examples could 
  1407. include usage to invoke subroutines whose names are not known until run time. 
  1408. Could be used in this way to crudely implement some aspects of object oriented 
  1409. methods. 
  1410.  
  1411. The REXX instruction or instructions in the expression of an INTERPRET 
  1412. instruction must be syntactically complete, i.e., no unpaired DO loops, etc. 
  1413. Labels can be coded in these instructions, but are ignored, so don't use them. 
  1414.  
  1415. Programmers used to other languages, especially TSO CLISTs, tend to use 
  1416. INTERPRET as a substitute for REXX compound variables.  This is not as 
  1417. efficient, and stylistically is at variance with the mainstream of REXX 
  1418. programming. 
  1419.  
  1420. Example 
  1421.  
  1422. things_to_do = "do 5; say 'Hi there ...'; end"
  1423. INTERPRET things_to_do
  1424.  
  1425. Output 
  1426.  
  1427. Hi there ...
  1428. Hi there ...
  1429. Hi there ...
  1430. Hi there ...
  1431. Hi there ...
  1432.  
  1433.  
  1434. Next  Prev 
  1435.  
  1436.  
  1437. ΓòÉΓòÉΓòÉ 6.9. Iterate      - goto top of DO loop ΓòÉΓòÉΓòÉ
  1438.  
  1439.  
  1440. Next  Prev 
  1441.  
  1442. The ITERATE instruction is used in DO loops;  it is like transferring to the 
  1443. bottom of current loop, then cycling. 
  1444.  
  1445.  ΓöÇΓöÇΓöÇΓöÇITERATEΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1446.                ΓööΓöÇnameΓöÇΓöÿ
  1447.  
  1448.  Related Instructions:   DO,LEAVE, 
  1449.  
  1450.  Used to control flow in DO loops;  a special purpose substitute for GOTO. 
  1451.  
  1452.  Example 
  1453.  
  1454.   /* copy a file, omitting blank lines */
  1455.   arg infile outfile
  1456.   call lineout outfile,,1     /* position to start of file */
  1457.   do while lines(infile) \= 0
  1458.     line = linein(infile)
  1459.     if line = "" then iterate
  1460.     call lineout outfile, line
  1461.     end
  1462.  
  1463.  
  1464.  Next  Prev 
  1465.  
  1466.  
  1467. ΓòÉΓòÉΓòÉ 6.10. Leave       - leave a DO loop ΓòÉΓòÉΓòÉ
  1468.  
  1469.  
  1470. Next  Prev 
  1471.  
  1472. The LEAVE instruction leaves the innermost DO loop, or the named DO loop. 
  1473.  
  1474.  ΓöÇΓöÇΓöÇΓöÇLEAVEΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1475.                 ΓööΓöÇnameΓöÇΓöÿ
  1476.  
  1477.  Related Instruction:    DO,ITERATE,EXIT,RETURN 
  1478.  
  1479.  Use to control flow in DO loops;  a special purpose substitute for GOTO. 
  1480.  
  1481.  Example 
  1482.  
  1483.   /* compute the next "perfect" number  */
  1484.   /* (number = sum of its divisors,     */
  1485.   /* excluding itself, but including 1) */
  1486.   arg startnum
  1487.   if startnum // 1 \= 0 then do
  1488.       say "Starting number must be an integer."
  1489.       exit 1
  1490.       end
  1491.   if startnum <= 0 then do
  1492.       say "Starting number must be positive."
  1493.       exit 1
  1494.       end
  1495.   currnum = startnum + 1
  1496.   do while 1
  1497.       sum = 0
  1498.       do i = 1 to currnum - 1
  1499.           if currnum // i = 0 then
  1500.               sum = sum + i
  1501.           end
  1502.       if sum = currnum then leave
  1503.       say currnum sum
  1504.       currnum = currnum + 1
  1505.       end
  1506.   say "The next perfect number, starting after" startnum", is" currnum"."
  1507.   exit 0
  1508.  
  1509.  
  1510.  Next  Prev 
  1511.  
  1512.  
  1513. ΓòÉΓòÉΓòÉ 6.11. Nop          - dummy for THEN or ELSE ΓòÉΓòÉΓòÉ
  1514.  
  1515.  
  1516. Next  Prev 
  1517.  
  1518. Does nothing - a placeholder, like "CONTINUE" or "NEXT SENTENCE" in COBOL. 
  1519.  
  1520.  ΓöÇΓöÇΓöÇΓöÇNOPΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1521.  
  1522. Example 
  1523.  
  1524. Say "Enter a positive integer"
  1525. pull I
  1526. if I > 0 then nop
  1527. else do
  1528.   say 'Number must be positive.'
  1529.   exit
  1530.   end
  1531. if I // 1 = 0 then nop
  1532. else do
  1533.   say 'Number must be an integer.'
  1534.   exit
  1535.   end
  1536. do forever
  1537.     /* always stops;
  1538.      * can you PROVE it does?
  1539.      */
  1540.     say I
  1541.     if I=1 then leave
  1542.     if I//2 = 0 then do
  1543.         I = I/2
  1544.         iterate
  1545.         end
  1546.     I = (3*I + 1)/2
  1547.     end
  1548.  
  1549.  
  1550. Next  Prev 
  1551.  
  1552.  
  1553. ΓòÉΓòÉΓòÉ 6.12. Numeric   - change math rules ΓòÉΓòÉΓòÉ
  1554.  
  1555.  
  1556. Next  Prev 
  1557.  
  1558. The NUMERIC instruction changes the way in which arithmetic is done: precision 
  1559. of numbers, format of display, and accuracy of comparison. 
  1560.  
  1561.  ΓöÇΓöÇNUMERICΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇDIGITSΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇ
  1562.                Γöé         ΓööΓöÇexpressionΓöÇΓöÿ          Γöé
  1563.                Γö£ΓöÇΓöÇFORMΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöñ
  1564.                Γöé        Γö£ΓöÇSCIENTIFICΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  1565.                Γöé        Γö£ΓöÇENGINEERINGΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  1566.                Γöé        ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇexpressionΓöÇΓöÿ Γöé
  1567.                Γöé          ΓööΓöÇVALUEΓöÇΓöÿ              Γöé
  1568.                ΓööΓöÇΓöÇFUZZΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1569.                         ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ
  1570.  
  1571.  Related Builtin Function: NUMERIC( ) 
  1572.  
  1573.  Default DIGITS is 9;  max DIGITS is implementation dependent, but usually 
  1574.  bigger than you have any reasonable excuse to use (e.g., 9999 digits!). 
  1575.  
  1576.  Use to control precision of arithmetic results; to specify display format of 
  1577.  floating point numbers; to indicate how close floating point numbers have to 
  1578.  be before they are considered equal in comparisons (the "fuzz"). 
  1579.  
  1580.  Note:   a high value for digits adversely affects performance; 
  1581.          non-intuitively, a value less than nine in 32-bit environments also 
  1582.          hurts performance (e.g., in MVS). 
  1583.  
  1584.  Note:   On VM, the FORM keyword is only valid with options SCIENTIFIC and 
  1585.          ENGINEERING for releases before VM/SP Release 6. 
  1586.  
  1587.  
  1588.  Next  Prev 
  1589.  
  1590.  
  1591. ΓòÉΓòÉΓòÉ 6.13. Options    - spcl, eg DBCS options ΓòÉΓòÉΓòÉ
  1592.  
  1593.  
  1594. Next  Prev 
  1595.  
  1596. The OPTIONS instruction is for notifying the REXX language processor about the 
  1597. user's choice for particular implementation options. 
  1598.  
  1599.  ΓöÇΓöÇΓöÇΓöÇOPTIONSΓöÇΓöÇΓöÇΓöÇΓöÇexpressionΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  1600.  
  1601. The SAA REXX processors use this instruction in support of DBCS. (DBCS is 
  1602. Double Byte Character Set, for use with natural languages like Japanese or 
  1603. Chinese with enormous numbers of unique glyphs.) 
  1604.  
  1605.  ETMODE                  enables use of DBCS strings 
  1606.  NOETMODE                disables use of DBCS strings 
  1607.  EXMODE                  preserves logical DBCS character integrity 
  1608.  NOEXMODE                byte basis; DBCS integrity not guaranteed 
  1609.  
  1610.  
  1611.  Next  Prev 
  1612.  
  1613.  
  1614. ΓòÉΓòÉΓòÉ 6.14. Parse       - break string into pieces ΓòÉΓòÉΓòÉ
  1615.  
  1616.  
  1617. Next  Prev 
  1618.  
  1619. The PARSE instruction extracts data into one or more variables from arguments, 
  1620. variables, and other sources. 
  1621.  
  1622.  ΓöÇΓöÇPARSEΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇARGΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ;ΓöÇ
  1623.            ΓööΓöÇUPPERΓöÇΓöÿ Γö£ΓöÇΓöÇEXTERNALΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ ΓööΓöÇtemplateΓöÇΓöÿ
  1624.                      Γö£ΓöÇΓöÇNUMERICΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1625.                      Γö£ΓöÇΓöÇLINEINΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1626.                      Γö£ΓöÇΓöÇPULLΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1627.                      Γö£ΓöÇΓöÇSOURCEΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1628.                      Γö£ΓöÇΓöÇVALUEΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇWITHΓöÇΓöñ
  1629.                      Γöé        ΓööΓöÇexpressionΓöÇΓöÿ      Γöé
  1630.                      Γö£ΓöÇΓöÇVARΓöÇΓöÇnameΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1631.                      ΓööΓöÇΓöÇVERSIONΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1632.  
  1633. Note:   EXTERNAL and NUMERIC are MVS and VM only; LINEIN is OS/2 only. 
  1634.  
  1635.  PARSE is a powerful text pattern matching/extraction instruction used to parse 
  1636.  words/parameters/keywords in arguments, from terminal input, from variables; 
  1637.  a variety of matching and positional templates are available. 
  1638.  
  1639.  You can use PARSE SOURCE and PARSE VERSION to write multi-environment REXX 
  1640.  procedures that execute on all systems, under all implementations. 
  1641.  
  1642.  PARSE VERSION 
  1643.  
  1644.  The VERSION string consists of five tokens in three groups: 
  1645.  
  1646.   1. A word naming the implementation of the language.  It must begin with the 
  1647.      four characters "REXX," and the rest can be any characters valid in a 
  1648.      symbol. 
  1649.  
  1650.     REXXSAA                         OS/2 EE 
  1651.     REXX/Personal                   Mansfield Software Group's Personal REXX 
  1652.     REXX370                         MVS, TSO/E, VM interpreter 
  1653.     REXXC370                        VM CMS REXX compiler 
  1654.  
  1655.   2. The language level of the REXX implementation: 
  1656.  
  1657.     4.00    OS/2 EE, the new (2nd edition) Cowlishaw book 
  1658.     3.46    CMS Release 6 with and SPE 
  1659.             TSO/E Version 2 Release 1 with an APAR, TSO/E V2R1.1 
  1660.             CMS Compiler 
  1661.     3.45    CMS Release 6 
  1662.             TSO/E V2R1 
  1663.     3.40    CMS Releases 4, 5 and 5.5 
  1664.     3.20    CMS Release 3 (original) 
  1665.     2.00    Mansfield Software Group (obviously, Mansfield doesn't use the same 
  1666.             language level numbers as the IBM implementations). 
  1667.  
  1668.   3. The date of the implementation, in three tokens: 
  1669.  
  1670.     06 Feb 1990     OS/2 EE 
  1671.     11 Aug 1989     Mansfield Software Group's Personal REXX 
  1672.  
  1673.  PARSE SOURCE 
  1674.  
  1675.  The SOURCE consists of a list of tokens that describe the origin of the 
  1676.  procedure being executed. The first token is CMS or TSO or OS/2; Second is 
  1677.  COMMAND, or SUBROUTINE or FUNCTION;  the rest differ according to the 
  1678.  environment and the implementation: 
  1679.  
  1680.  OS/2 EE           fully qualified file name of procedure 
  1681.  
  1682.  Personal REXX     fully qualified file name of procedure 
  1683.                    name of exec as invoked 
  1684.                    default address env (DOS) 
  1685.  
  1686.  CMS Compiler      file name or syn 
  1687.                    file type; * if running as MODULE 
  1688.                    file mode; * if running as MODULE 
  1689.                    name invoked as or syn or ? 
  1690.                    default address env 
  1691.  
  1692.  CMS Interpreter   file name 
  1693.                    file type or * 
  1694.                    file mode or * 
  1695.                    name invoked as or syn or ? 
  1696.                    default address env 
  1697.  
  1698.  TSO               name of exec in upper case or ? 
  1699.                    name of DDNAME fo exec or ? 
  1700.                    name of data set for exec, or ? 
  1701.                    name of exec as invoked, or ? 
  1702.                    default address env 
  1703.                    name of address space 
  1704.                    8 character user-specified token 
  1705.  
  1706.  Example (pull off one word at a time) 
  1707.  
  1708.   do until bigstring = ""
  1709.       PARSE VARIABLE bigstring oneword bigstring
  1710.       say oneword
  1711.       end
  1712.  
  1713.  Example (multiple parallel assignment) 
  1714.  
  1715.   PARSE VALUE '1 10 100' WITH one ten hundred
  1716.   /* assigns '1'   to variable "one"     */
  1717.   /* assigns '10'  to variable "ten"     */
  1718.   /* assigns '100' to variable "hundred" */
  1719.  
  1720.  Example (assignment of one value to multiple variables) 
  1721.  
  1722.   xyz = "same value"
  1723.   PARSE VAR xyz 1 copy1 1 copy2 1 copy3
  1724.   /* assigns "same value" to variable "copy1" */
  1725.   /* assigns "same value" to variable "copy2" */
  1726.   /* assigns "same value" to variable "copy3" */
  1727.  
  1728.  Note:   If you are coding in a TSO/E environment and need to replace a CLIST 
  1729.          that used "PROC" statement parameter parsing, you will find that there 
  1730.          is no convenient way to do this in REXX.  Until someone writes a 
  1731.          public domain external function to do this in a general way, or until 
  1732.          IBM decides to remedy this obvious hole in TSO/E REXX functionality, 
  1733.          the easiest way to accomplish this is to retain a shell of the 
  1734.          original CLIST, that contains the original CLIST PROC statement (to 
  1735.          perform the parsing and prompting).  The only other statement in the 
  1736.          CLIST would be an invocation of the REXX exec, passing the parsed 
  1737.          parameters in a manner convenient to the exec. 
  1738.  
  1739.  
  1740.  Next  Prev 
  1741.  
  1742.  
  1743. ΓòÉΓòÉΓòÉ 6.15. Procedure- def internal routine ΓòÉΓòÉΓòÉ
  1744.  
  1745.  
  1746. Next  Prev 
  1747.  
  1748. The PROCEDURE instruction defines a scoping level for variables, i.e., 
  1749. variables used within the routine are local to the routine, and hiding all 
  1750. variables in the calling routine from query or update by this routine. 
  1751.  
  1752.  ΓöÇΓöÇΓöÇΓöÇPROCEDUREΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇ
  1753.                   Γöé          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  1754.                   Γöé                 Γöé Γöé
  1755.                   ΓööΓöÇΓöÇEXPOSEΓöÇΓöÇΓö┤ΓöÇnameΓöÇΓöÇΓö┤ΓöÇΓöÿ
  1756.  
  1757. PROCEDURE begins an internal procedure or function;  EXPOSE gives access to 
  1758. selected variables in the containing procedure 
  1759.  
  1760. You use this to control the scoping of variables in procedures and functions; 
  1761. internal procedures should ususally be specified with this instruction, and the 
  1762. EXPOSE operand should be used judiciously.  Although internal routines do not 
  1763. have to begin with the PROCEDURE instruction, seldom is it warranted to omit 
  1764. it. 
  1765.  
  1766. A variety of tricks and useful techniques are based on the fact that one level 
  1767. of substitution can be performed in the EXPOSE clause prior to establishing the 
  1768. exposed variable names.  Another trick is to use a stem in the EXPOSE 
  1769. statement. 
  1770.  
  1771. Example 
  1772.  
  1773. GlobalVariables = "MyVariable HisVariable CompoundVariables."
  1774. ...
  1775. TestObjectVariables = "TestMode TestName TestConditions. TestNr"
  1776. call TestProcedure
  1777. ...
  1778. TestProcedure: expose (GlobalVariables) (TestObjectVariables)
  1779.  
  1780. In the example above, the values of GlobalVariables and TestObjectVariables are 
  1781. substituted prior to determining which variables are to be exposed.  Thus, all 
  1782. of the following variables are exposed in the procedure TestProcedure: 
  1783. MyVariable, HisVariable, all compund forms of CompoundVariables., TestMode, 
  1784. TestName, all compound forms of TestConditions., and TestNr. 
  1785.  
  1786.  
  1787. Next  Prev 
  1788.  
  1789.  
  1790. ΓòÉΓòÉΓòÉ 6.16. Pull          - string <= queue/terminal/user ΓòÉΓòÉΓòÉ
  1791.  
  1792.  
  1793. Next  Prev 
  1794.  
  1795. The PULL instructions is used to obtain line mode input from the currently 
  1796. active REXX queue;  usually the command line or the terminal. 
  1797.  
  1798.  ΓöÇΓöÇPULLΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇ
  1799.               ΓööΓöÇΓöÇtemplateΓöÇΓöÇΓöÿ
  1800.  
  1801.  Related Instruction:    PARSE, PUSH, 
  1802.  
  1803.  This is short for PARSE UPPER PULL. 
  1804.  
  1805.  Example 
  1806.  
  1807.   say "Please enter your name:"
  1808.   pull input
  1809.   say "Howdy," input"!"
  1810.  
  1811.  
  1812.  Next  Prev 
  1813.  
  1814.  
  1815. ΓòÉΓòÉΓòÉ 6.17. Push        - (LIFO) string => queue ΓòÉΓòÉΓòÉ
  1816.  
  1817.  
  1818. Next  Prev 
  1819.  
  1820. The PUSH instruction places an expression on top of the REXX queue. 
  1821.  
  1822.  ΓöÇΓöÇPUSHΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇ
  1823.               ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ
  1824.  
  1825.  Related Instructions:   PARSE, PULL, QUEUE 
  1826.  Related Builtin Function: QUEUED( ) 
  1827.  
  1828.  The expression goes on top of the queue in LIFO (Last in, first out) order. 
  1829.  You can use to push a value on data stack for later use by a subroutine or I/O 
  1830.  routines. 
  1831.  
  1832.  Example 
  1833.  
  1834.   push "Simon Nash"
  1835.   push "Linda Green"
  1836.   push "Herr VandeWater"
  1837.   do while queued() \= 0
  1838.       call NameRoutine
  1839.       end
  1840.   exit
  1841.   NameRoutine: procedure
  1842.   pull input
  1843.   say "Howdy," input"!"
  1844.   return
  1845.  
  1846.  Output 
  1847.  
  1848.   Howdy, HERR VANDEWATER!
  1849.   Howdy, LINDA GREEN!
  1850.   Howdy, SIMON NASH!
  1851.  
  1852.  
  1853.  Next  Prev 
  1854.  
  1855.  
  1856. ΓòÉΓòÉΓòÉ 6.18. Queue      - (FIFO) string => queue ΓòÉΓòÉΓòÉ
  1857.  
  1858.  
  1859. Next  Prev 
  1860.  
  1861. The QUEUE instruction places an expression on the bottom of the REXX queue. 
  1862.  
  1863.  ΓöÇΓöÇQUEUEΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇ
  1864.               ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ
  1865.  
  1866.  Related Instructions:   PARSE, PULL, PUSH 
  1867.  Related Builtin Function: QUEUED( ) 
  1868.  
  1869.  Places "expression" on the bottom of the REXX queue in FIFO (First in, first 
  1870.  out) order. You can use QUEUE to queue a value on the queue for later use; 
  1871.  more natural than PUSH when adding several items to an empty queue. 
  1872.  
  1873.  Note:   REXX queues are NOT the same as OS/2 queues. 
  1874.  
  1875.  Example 
  1876.  
  1877.   queue "Poughkeepsie"
  1878.   queue "Vienna"
  1879.   call ItineraryRoutine
  1880.   exit
  1881.   ItineraryRoutine: procedure
  1882.   pull from
  1883.   pull to
  1884.   say "Goodbye," from", hello" to"!"
  1885.   return
  1886.  
  1887.  Output 
  1888.  
  1889.   Goodbye POUGHKEEPSIE, hello VIENNA!
  1890.  
  1891.  
  1892.  Next  Prev 
  1893.  
  1894.  
  1895. ΓòÉΓòÉΓòÉ 6.19. Return      - exit routine to caller ΓòÉΓòÉΓòÉ
  1896.  
  1897.  
  1898. Next  Prev 
  1899.  
  1900. Leaves an internal routine or function;  "expression" is returned in variable 
  1901. RESULT. 
  1902.  
  1903.  ΓöÇΓöÇRETURNΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇ
  1904.               ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ
  1905.  
  1906.  Related Instruction:    EXIT 
  1907.  
  1908.  You can use this to return a value from a function;  use of the "expression" 
  1909.  is required when a routine is invoked as a function as opposed to a 
  1910.  subroutine; it is a good (or at least, safe ...) programming practice in REXX 
  1911.  to always return a value. 
  1912.  
  1913.  Example 
  1914.  
  1915.   /* compute the "Nth" Fibonacci number */
  1916.   do i=1 to 12
  1917.       say i Fibonacci(i)
  1918.       end
  1919.   exit
  1920.   Fibonacci: procedure
  1921.   arg N
  1922.   if N <= 2 then do
  1923.       return 1
  1924.       end
  1925.   return (Fibonacci(N-1) + Fibonacci(N-2))
  1926.  
  1927.  Output 
  1928.  
  1929.   1 1
  1930.   2 1
  1931.   3 2
  1932.   4 3
  1933.   5 5
  1934.   6 8
  1935.   7 13
  1936.   8 21
  1937.   9 34
  1938.   10 55
  1939.   11 89
  1940.   12 144
  1941.  
  1942.  
  1943.  Next  Prev 
  1944.  
  1945.  
  1946. ΓòÉΓòÉΓòÉ 6.20. Say           - put text on screen ΓòÉΓòÉΓòÉ
  1947.  
  1948.  
  1949. Next  Prev 
  1950.  
  1951. Use SAY to display a line of output. 
  1952.  
  1953.  ΓöÇΓöÇSAYΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇ
  1954.               ΓööΓöÇΓöÇexpressionΓöÇΓöÇΓöÿ
  1955. places "expression" on output device (terminal for foreground TSO or CMS; 
  1956. DDNAME SYSTSPRT for background TSO; command session or redirection or piping 
  1957. for OS/2. 
  1958.  
  1959. There is no REXX analog of the CLIST WRITENR statement or 'C' printf with no 
  1960. "\n"; one could easily be provided as an external function if desired. 
  1961.  
  1962.  
  1963. Next  Prev 
  1964.  
  1965.  
  1966. ΓòÉΓòÉΓòÉ 6.21. Select      - case statement ΓòÉΓòÉΓòÉ
  1967.  
  1968.  
  1969. Next  Prev 
  1970.  
  1971. Use SELECT to choose amongst several options. 
  1972.  
  1973.              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1974.                                                         Γöé
  1975.  ΓöÇΓöÇSELECT;ΓöÇΓö┤ΓöÇWHENΓöÇΓöÇexpressionΓöÇΓö¼ΓöÇΓö¼ΓöÇTHENΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇinstructionΓö┤ΓöÇΓöÇ
  1976.                                 Γöö;Γöÿ      Γöö;Γöÿ
  1977.  
  1978.           ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇEND;ΓöÇΓöÇΓöÇΓöÇ
  1979.               ΓööΓöÇOTHERWISEΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  1980.                           Γöö;Γöÿ Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  1981.                               Γöé               Γöé  Γöé
  1982.                               ΓööΓöÇΓöÇΓö┤ΓöÇinstructionΓöÇΓö┤ΓöÇΓöÇΓöÿ
  1983. SELECT is more convenient and readable in most cases than extended nested-IF 
  1984. logic.  This is like a PL/I SELECT or EASEL switch;  it is NOT like a C switch 
  1985. -- no drop-through of cases is allowed.  PL/I programmers, be careful - this is 
  1986. very close, but not identical to your language;  don't let your habits lead you 
  1987. astray here. 
  1988.  
  1989. Example:
  1990.  
  1991. Select
  1992. When environment  = 'TSO' & REXX_manuals = "not available" then
  1993.     say "For now, you'd better write a CLIST."
  1994. When environment  = 'CMD' & REXX_manuals = "not available" then
  1995.     say "For now, you'd better write a .BAT style command list."
  1996. When REXX_manuals = "not available" then
  1997.     say "Better write a program."
  1998. Otherwise
  1999.     say 'A REXX exec should do the trick.'
  2000. End /* Select */
  2001.  
  2002.  
  2003. Next  Prev 
  2004.  
  2005.  
  2006. ΓòÉΓòÉΓòÉ 6.22. Signal       - special purpose GOTO ΓòÉΓòÉΓòÉ
  2007.  
  2008.  
  2009. Next  Prev 
  2010.  
  2011. SIGNAL raises certain CONDITIONs to perform various error recovery functions. 
  2012.  
  2013.  ΓöÇΓöÇSIGNALΓöÇΓöÇΓöÇΓö¼ΓöÇlabelnameΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇ
  2014.               Γö£ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇexpressionΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2015.               Γöé ΓööΓöÇVALUEΓöÇΓöÿ                           Γöé
  2016.               Γö£ΓöÇΓöÇΓöÇOFFΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇERRORΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2017.               Γöé           Γö£ΓöÇΓöÇFAILUREΓöÇΓöÇΓöÇΓöÇΓöñ           Γöé
  2018.               Γöé           Γö£ΓöÇΓöÇHALTΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ           Γöé
  2019.               Γöé           Γö£ΓöÇΓöÇNOVALUEΓöÇΓöÇΓöÇΓöÇΓöñ           Γöé
  2020.               Γöé           Γö£ΓöÇΓöÇSYNTAXΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ           Γöé
  2021.               Γöé           ΓööΓöÇΓöÇNOTREADYΓöÇΓöÇΓöÇΓöÿ           Γöé
  2022.               Γöé                                     Γöé
  2023.               ΓööΓöÇΓöÇONΓöÇΓöÇΓö¼ΓöÇERRORΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  2024.                      Γö£ΓöÇFAILUREΓöÇΓöñ ΓööΓöÇNAMEΓöÇtrapnameΓöÇΓöÇΓöÿ
  2025.                      Γö£ΓöÇHALTΓöÇΓöÇΓöÇΓöÇΓöñ
  2026.                      Γö£ΓöÇNOVALUEΓöÇΓöñ
  2027.                      Γö£ΓöÇSYNTAXΓöÇΓöÇΓöñ
  2028.                      ΓööΓöÇNOTREADYΓöÿ
  2029.  
  2030. Note:   NOTREADY is for OS/2 only.  FAILURE is not available on VM.
  2031.  
  2032.  A special purpose instruction for dealing with CONDITIONs and condition traps; 
  2033.  NOT a substitue for a GOTO statement, and NOT a general purpose error handling 
  2034.  solution. 
  2035.  
  2036.  Use to perform special-case, out-of-line processing, usually of a 
  2037.  "windup-processing" or "fatal error" nature; any other use of SIGNAL impairs 
  2038.  readability and maintenance, and should be avoided  --  it probably WON'T do 
  2039.  what you think it does, or at least the next person to maintain your code 
  2040.  probably won't understand it. 
  2041.  
  2042.  Consider using the "CALL ON condition NAME trapname" instead. 
  2043.  
  2044.  
  2045.  Next  Prev 
  2046.  
  2047.  
  2048. ΓòÉΓòÉΓòÉ 6.23. Trace        - monitor/debug execution ΓòÉΓòÉΓòÉ
  2049.  
  2050.  
  2051. Next  Prev 
  2052.  
  2053. TRACE supports the interactive debugging of REXX command procedures. 
  2054.  
  2055.  ΓöÇΓöÇTRACEΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇ
  2056.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇnumberΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2057.             Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                            Γöé
  2058.             Γöé            Γöé                            Γöé
  2059.             ΓööΓöÇΓö┤ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  2060.                 Γö£ΓöÇΓöÇΓöÇ?ΓöÇΓöÇΓöÇΓöñ   Γö£ΓöÇΓöÇΓöÇAllΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2061.                 Γö£ΓöÇΓöÇΓöÇ)ΓöÇΓöÇΓöÇΓöñ   Γö£ΓöÇΓöÇΓöÇCommandsΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2062.                 ΓööΓöÇΓöÇΓöÇ!ΓöÇΓöÇΓöÇΓöÿ   Γö£ΓöÇΓöÇΓöÇErrorΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2063.                             Γö£ΓöÇΓöÇΓöÇFailureΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2064.                             Γö£ΓöÇΓöÇΓöÇIntermediatesΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2065.                             Γö£ΓöÇΓöÇΓöÇLabelsΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2066.                             Γö£ΓöÇΓöÇΓöÇNormalΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2067.                             Γö£ΓöÇΓöÇΓöÇNegativeΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2068.                             Γö£ΓöÇΓöÇΓöÇOffΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2069.                             Γö£ΓöÇΓöÇΓöÇResultsΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2070.                             ΓööΓöÇΓöÇΓöÇScanΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2071.  Or, alternatively: 
  2072.  
  2073.  ΓöÇΓöÇTRACEΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2074.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇstringΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2075.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇsymbolΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2076.             ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇexpressionΓöÇΓöÇΓöÇΓöÿ
  2077.                 ΓööΓöÇVALUEΓöÇΓöÿ
  2078. "Scan" is for MVS and VM only. ")" is for MVS only. "Failure" is not available 
  2079. on VM; "!" and "number" are for VM only; "Negative" may be used in place of 
  2080. "Normal" on VM only. 
  2081.  
  2082. You can use TRACE to perform a wide variety of tracing on REXX execs. 
  2083.  
  2084.  
  2085. Next  Prev 
  2086.  
  2087.  
  2088. ΓòÉΓòÉΓòÉ 6.24. Upper       - make string all caps ΓòÉΓòÉΓòÉ
  2089.  
  2090.  
  2091. Next  Prev 
  2092.  
  2093. UPPER translates text to uppercase. 
  2094.  
  2095.                ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2096.                           Γöé
  2097.  ΓöÇΓöÇΓöÇΓöÇUPPERΓöÇΓöÇΓöÇΓö┤ΓöÇvariableΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ;ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2098.  
  2099. Note:   MVS and VM only. 
  2100.  
  2101.  Use on variables or values prior to comparisons to implement case-insensitive 
  2102.  checking.  For greater portability, use the PARSE UPPER keyword instruction or 
  2103.  the TRANSLATE() builtin function. 
  2104.  
  2105.  
  2106.  Next  Prev 
  2107.  
  2108.  
  2109. ΓòÉΓòÉΓòÉ 7. REXX Builtin Functions ΓòÉΓòÉΓòÉ
  2110.  
  2111.  
  2112. Next  Prev 
  2113.  
  2114. This section details the syntax of the REXX builtin functions, and certain 
  2115. external functions that are supplied in particular environments. 
  2116.  
  2117. This part will talk about the general syntax of functions, and about function 
  2118. argument resolution, search order, error recovery, and will distinguish builtin 
  2119. vs external vs internal functions. 
  2120.  
  2121.  
  2122. Next  Prev 
  2123.  
  2124.  
  2125. ΓòÉΓòÉΓòÉ 7.1. Abbrev         - match abbr string to full ΓòÉΓòÉΓòÉ
  2126.  
  2127.  
  2128. Next  Prev 
  2129.  
  2130. Use ABBREV for matching several variants of command names, parameter names, 
  2131. etc. 
  2132.  
  2133.  ΓöÇΓöÇABBREV(information,infoΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2134.                              ΓööΓöÇ,lengthΓöÇΓöÇΓöÿ
  2135.  
  2136. Returns 1 if "info" value is a prefix of "information" value, and is at least 
  2137. "length" characters long, else 0.  A null string (for info) is considered to 
  2138. match anything.  Be careful about uppercase/lowercase -- the ABBREV functions 
  2139. is case sensitive. 
  2140.  
  2141. EXAMPLE 
  2142.  
  2143. abbrev("BROWSE","BROWSER")  returns  0
  2144. abbrev("BROWSE","BROWSE")   returns  1
  2145. abbrev("BROWSE","BROWS")    returns  1
  2146. abbrev("BROWSE","BROW")     returns  1
  2147. abbrev("BROWSE","BRO")      returns  1
  2148. abbrev("BROWSE","BR")       returns  1
  2149. abbrev("BROWSE","B")        returns  1
  2150. abbrev("BROWSE","")         returns  1
  2151. abbrev("BROWSE","browse")   returns  0
  2152.  
  2153.  
  2154. Next  Prev 
  2155.  
  2156.  
  2157. ΓòÉΓòÉΓòÉ 7.2. Abs              - absolute value ΓòÉΓòÉΓòÉ
  2158.  
  2159.  
  2160. Next  Prev 
  2161.  
  2162. ABS returns the absolute value of a number. 
  2163.  
  2164.  ΓöÇΓöÇABS(number)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2165.  
  2166. The parameter to ABS must be a valid number. 
  2167.  
  2168. EXAMPLES. 
  2169.  
  2170. abs(1)   returns  1
  2171. abs(0)   returns  0
  2172. abs(-1)  returns  1
  2173. abs(.01) returns  .01
  2174. abs("")  gives an error like:
  2175.     12 +++     Say 'abs("a") returns' abs('a');
  2176.     REX0040: Error 40 running D:\Commands\TestREXX.cmd, line 12:
  2177.              Incorrect call to routine
  2178.  
  2179.  
  2180. Next  Prev 
  2181.  
  2182.  
  2183. ΓòÉΓòÉΓòÉ 7.3. Address       - return environment name ΓòÉΓòÉΓòÉ
  2184.  
  2185.  
  2186. Next  Prev 
  2187.  
  2188. ADDRESS returns the name of the current environment for "host" commands, e.g., 
  2189. CMD, CMS, MVS, TSO, ISREDIT, etc. 
  2190.  
  2191.  ΓöÇΓöÇADDRESS()ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2192.  
  2193. This function is used only to query the current environment, not to set it. 
  2194.  
  2195.  
  2196. Next  Prev 
  2197.  
  2198.  
  2199. ΓòÉΓòÉΓòÉ 7.4. Arg               - return argument, info ΓòÉΓòÉΓòÉ
  2200.  
  2201.  
  2202. Next  Prev 
  2203.  
  2204. ARG returns the number of arguments, or the value of a specific argument. 
  2205.  
  2206.  ΓöÇΓöÇARG(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2207.           ΓööΓöÇnΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ
  2208.                ΓööΓöÇ,optionΓöÇΓöÇΓöÇΓöÿ
  2209.  
  2210. ARG is used in receiving parameters passed to a main or subroutine REXX 
  2211. program.  It is important to remember that REXX considers discrete arguments to 
  2212. have been separated by commas in the invocation. 
  2213.  
  2214. If "n" is omitted, ARG returns the number of arguments passed.
  2215. If no option is specified, ARG returns the "nth" argument string.
  2216. If option "E" (Exists) is specified, returns 1 if "nth"
  2217.   argument exists; else 0.
  2218. If option "O" (Omitted) is specified, returns 1 if "nth"
  2219.   argument was omitted, that is, does not exist; else 0.
  2220.  
  2221. Example
  2222.  
  2223. ...
  2224. call ArgTester "parm1",, "This is 3"
  2225. ...
  2226. ArgTester: procedure
  2227. /* arg()      returns  3            */
  2228. /* arg(1)     returns  <<parm1>>    */
  2229. /* arg(2)     returns  <<>>         */
  2230. /* arg(3)     returns  <<This is 3>>*/
  2231. /* arg(4)     returns  <<>>         */
  2232. /* arg(1,'E') returns  1            */
  2233. /* arg(2,'E') returns  0            */
  2234. /* arg(3,'E') returns  1            */
  2235. /* arg(4,'E') returns  0            */
  2236. /* arg(1,'O') returns  0            */
  2237. /* arg(2,'O') returns  1            */
  2238. /* arg(3,'O') returns  0            */
  2239. /* arg(4,'O') returns  1            */
  2240. return ""
  2241.  
  2242.  
  2243. Next  Prev 
  2244.  
  2245.  
  2246. ΓòÉΓòÉΓòÉ 7.5. Beep            - sound a tone ΓòÉΓòÉΓòÉ
  2247.  
  2248.  
  2249. Next  Prev 
  2250.  
  2251. BEEP drives the speaker;  this is basically just DosBeep. 
  2252.  
  2253.  ΓöÇΓöÇBEEP(frequency,duration)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2254.  
  2255. Note:   OS/2 only. 
  2256.  
  2257.  Frequency is in Hertz in range [37..32767]. Duration is in milliseconds in 
  2258.  range [1..60000]. On most machines, you can't really have a duration less than 
  2259.  32 ms. 
  2260.  
  2261.  Note:   Remember that in OS/2 the speaker is a serially reusable resource, for 
  2262.          which there is no explicit synchronization provided.  In other words, 
  2263.          except for VERY brief passages, NEVER issue "beeps" from a process 
  2264.          that doesn't have the input focus.  No application "owns" the speaker. 
  2265.  
  2266.  Musical Note Frequencies 
  2267.  
  2268.  The western tempered scale musical notes, based on a concert pitch of A=440 
  2269.  Hz, and rounded to the nearest integral Hz, are shown below: 
  2270.  
  2271.   C6 is middle C on the piano;  A6 is the "concert a."
  2272.  
  2273.   D3           37
  2274.   D3sharp      39
  2275.   E3flat       39
  2276.   E3           41
  2277.   F3           44
  2278.   F3sharp      46
  2279.   G3flat       46
  2280.   G3           49
  2281.   G3sharp      52
  2282.   A3flat       52
  2283.   A3           55
  2284.   A3sharp      58
  2285.   B3flat       58
  2286.   B3           62
  2287.  
  2288.   C4           65
  2289.   C4sharp      69
  2290.   D4flat       69
  2291.   D4           73
  2292.   D4sharp      78
  2293.   E4flat       78
  2294.   E4           82
  2295.   F4           87
  2296.   F4sharp      92
  2297.   G4flat       92
  2298.   G4           98
  2299.   G4sharp     104
  2300.   A4flat      104
  2301.   A4          110
  2302.   A4sharp     117
  2303.   B4flat      117
  2304.   B4          123
  2305.  
  2306.   C5          131
  2307.   C5sharp     139
  2308.   D5flat      139
  2309.   D5          147
  2310.   D5sharp     156
  2311.   E5flat      156
  2312.   E5          165
  2313.   F5          175
  2314.   F5sharp     185
  2315.   G5flat      185
  2316.   G5          196
  2317.   G5sharp     208
  2318.   A5flat      208
  2319.   A5          220
  2320.   A5sharp     233
  2321.   B5flat      233
  2322.   B5          247
  2323.  
  2324.   C6          262
  2325.   C6sharp     277
  2326.   D6flat      277
  2327.   D6          294
  2328.   D6sharp     311
  2329.   E6flat      311
  2330.   E6          330
  2331.   F6          349
  2332.   F6sharp     370
  2333.   G6flat      370
  2334.   G6          392
  2335.   G6sharp     415
  2336.   A6flat      415
  2337.   A6          440
  2338.   A6sharp     466
  2339.   B6flat      466
  2340.   B6          494
  2341.  
  2342.   C7          523
  2343.   C7sharp     554
  2344.   D7flat      554
  2345.   D7          587
  2346.   D7sharp     622
  2347.   E7flat      622
  2348.   E7          659
  2349.   F7          698
  2350.   F7sharp     740
  2351.   G7flat      740
  2352.   G7          784
  2353.   G7sharp     831
  2354.   A7flat      831
  2355.   A7          880
  2356.   A7sharp     932
  2357.   B7flat      932
  2358.   B7          988
  2359.  
  2360.   C8         1047
  2361.   C8sharp    1109
  2362.   D8flat     1109
  2363.   D8         1175
  2364.   D8sharp    1245
  2365.   E8flat     1245
  2366.   E8         1319
  2367.   F8         1397
  2368.   F8sharp    1480
  2369.   G8flat     1480
  2370.   G8         1568
  2371.   G8sharp    1661
  2372.   A8flat     1661
  2373.   A8         1760
  2374.   A8sharp    1865
  2375.   B8flat     1865
  2376.   B8         1976
  2377.  
  2378.   C9         2093
  2379.   C9sharp    2217
  2380.   D9flat     2217
  2381.   D9         2349
  2382.   D9sharp    2489
  2383.   E9flat     2489
  2384.   E9         2637
  2385.   F9         2794
  2386.   F9sharp    2960
  2387.   G9flat     2960
  2388.   G9         3136
  2389.   G9sharp    3332
  2390.   A9flat     3332
  2391.   A9         3520
  2392.   A9sharp    3729
  2393.   B9flat     3729
  2394.   B9         3951
  2395.  
  2396.   C10        4186
  2397.   C10sharp   4435
  2398.   D10flat    4435
  2399.   D10        4699
  2400.   D10sharp   4978
  2401.   E10flat    4978
  2402.   E10        5274
  2403.   F10        5588
  2404.   F10sharp   5920
  2405.   G10flat    5920
  2406.   G10        6272
  2407.   G10sharp   6645
  2408.   A10flat    6645
  2409.   A10        7040
  2410.   A10sharp   7459
  2411.   B10flat    7459
  2412.   B10        7902
  2413.  
  2414.   C11        8372
  2415.   C11sharp   8870
  2416.   D11flat    8870
  2417.   D11        9397
  2418.   D11sharp   9956
  2419.   E11flat    9956
  2420.   E11       10548
  2421.   F11       11175
  2422.   F11sharp  11840
  2423.   G11flat   11840
  2424.   G11       12544
  2425.   G11sharp  13290
  2426.   A11flat   13290
  2427.   A11       14080
  2428.   A11sharp  14917
  2429.   B11flat   14917
  2430.   B11       15804
  2431.  
  2432.   C12       16744
  2433.   C12sharp  17740
  2434.   D12flat   17740
  2435.   D12       18795
  2436.   D12sharp  19912
  2437.   E12flat   19912
  2438.   E12       21096
  2439.   F12       22351
  2440.   F12sharp  23680
  2441.   G12flat   23680
  2442.   G12       25088
  2443.   G12sharp  26580
  2444.   A12flat   26580
  2445.   A12       28160
  2446.   A12sharp  29834
  2447.   B12flat   29834
  2448.   B12       31609
  2449.  
  2450.   Typical tempo: quarter note = 120,
  2451.   so quarter note duration = 500 milliseconds.
  2452.  
  2453.   FULL        2000
  2454.   HALF        1000
  2455.   QUARTER      500
  2456.   EIGHTH       250
  2457.   SIXTEENTH    125
  2458.   THIRTYSECOND  62
  2459.   SIXTYFOURTH   31
  2460.  
  2461.  
  2462.  Next  Prev 
  2463.  
  2464.  
  2465. ΓòÉΓòÉΓòÉ 7.6. BitAND         - logical bit AND operation ΓòÉΓòÉΓòÉ
  2466.  
  2467.  
  2468. Next  Prev 
  2469.  
  2470. BITAND does a logical AND of two strings on a bit-by-bit basis. 
  2471.  
  2472.  ΓöÇΓöÇBITAND(string1ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  2473.                     ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  2474.                         ΓööΓöÇstring2Γöÿ ΓööΓöÇ,padΓöÇΓöÿ
  2475.  
  2476. Returns a string that is the result of ANDing the two input strings together, 
  2477. bit by bit. 
  2478.  
  2479. If a pad is specified, is extends the shorter of the two strings on the right. 
  2480. If no pad is specified, it defaults to '1111 1111'B. 
  2481.  
  2482. There are really two different kinds of operation that are encoded in BITAND. 
  2483. The first is simply doing an AND between two strings. The second, which you 
  2484. obtain by omitting string2, and supplying a pad is one in which the pad is 
  2485. ANDed with each character of the string1. 
  2486.  
  2487. Logical AND bit-by-bit operation: 
  2488.  
  2489.      0   1
  2490.    ΓöîΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÉ
  2491.  0 Γöé 0 Γöé 0 Γöé
  2492.    Γö£ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöñ
  2493.  1 Γöé 0 Γöé 1 Γöé
  2494.    ΓööΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  2495.  
  2496. Examples 
  2497.  
  2498. BITAND('C1 C2 C3'x, '12 34 56'x)    returns '00 00 42'x
  2499. BITAND('F7 F8 F9'x, '20'x, '2F'x)   returns '20 28 29'x
  2500. BITAND('F0 F1 F2'x,, '0F'x)         returns '00 01 02'x
  2501.  
  2502.  
  2503. Next  Prev 
  2504.  
  2505.  
  2506. ΓòÉΓòÉΓòÉ 7.7. BitOR           - logical bit OR operation ΓòÉΓòÉΓòÉ
  2507.  
  2508.  
  2509. Next  Prev 
  2510.  
  2511. BITOR does a logical OR of two strings on a bit-by-bit basis. 
  2512.  
  2513.  ΓöÇΓöÇBITOR(string1ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2514.                    ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  2515.                        ΓööΓöÇstring2Γöÿ ΓööΓöÇ,padΓöÇΓöÿ
  2516.  
  2517. Returns a string that is the result of ORing the two input strings together, 
  2518. bit by bit. 
  2519.  
  2520. If a pad is specified, is extends the shorter of the two strings on the right. 
  2521. If no pad is specified, it defaults to '0000 0000'B. 
  2522.  
  2523. There are really two different kinds of operation that are encoded in BITOR. 
  2524. The first is simply doing an OR between two strings. The second, which you 
  2525. obtain by omitting string2, and supplying a pad is one in which the pad is ORed 
  2526. with each character of the string1. 
  2527.  
  2528. Logical OR bit-by-bit operation: 
  2529.  
  2530.      0   1
  2531.    ΓöîΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÉ
  2532.  0 Γöé 0 Γöé 1 Γöé
  2533.    Γö£ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöñ
  2534.  1 Γöé 1 Γöé 1 Γöé
  2535.    ΓööΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  2536.  
  2537. Examples 
  2538.  
  2539. BITOR('C1 C2 C3'x, '12 34 56'x)    returns 'D3 F6 D7'x
  2540. BITOR('87 88 89'x, '20'x, '2F'x)   returns 'A7 AF AF'x
  2541. BITOR('41 42 43'x,, '20'x)         returns '61 62 63'x
  2542.  
  2543.  
  2544. Next  Prev 
  2545.  
  2546.  
  2547. ΓòÉΓòÉΓòÉ 7.8. BitXOR         - logical exclusive OR operation ΓòÉΓòÉΓòÉ
  2548.  
  2549.  
  2550. Next  Prev 
  2551.  
  2552. BITXOR does a logical XOR (exclusive OR) of two strings on a bit-by-bit basis. 
  2553.  
  2554.  ΓöÇΓöÇBITXOR(string1ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇ
  2555.                     ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  2556.                         ΓööΓöÇstring2Γöÿ ΓööΓöÇ,padΓöÇΓöÿ
  2557.  
  2558. Returns a string that is the result of XORing the two input strings together, 
  2559. bit by bit. 
  2560.  
  2561. If a pad is specified, is extends the shorter of the two strings on the right. 
  2562. If no pad is specified, it defaults to '1111 1111'B. 
  2563.  
  2564. There are really two different kinds of operation that are encoded in BITXOR. 
  2565. The first is simply doing an XOR between two strings. The second, which you 
  2566. obtain by omitting string2, and supplying a pad is one in which the pad is 
  2567. XORed with each character of the string1. 
  2568.  
  2569. Logical XOR bit-by-bit operation: 
  2570.  
  2571.      0   1
  2572.    ΓöîΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÉ
  2573.  0 Γöé 0 Γöé 1 Γöé
  2574.    Γö£ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöñ
  2575.  1 Γöé 1 Γöé 0 Γöé
  2576.    ΓööΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  2577.  
  2578. Examples 
  2579.  
  2580. BITXOR('C1 C2 C3'x, '12 34 56'x)    returns 'D3 F6 95'x
  2581. BITXOR('F7 F8 F9'x, '20'x, '2F'x)   returns 'D7 D7 D6'x
  2582. BITXOR('F0 F1 F2'x,, '0F'x)         returns 'FF FE FD'x
  2583.  
  2584.  
  2585. Next  Prev 
  2586.  
  2587.  
  2588. ΓòÉΓòÉΓòÉ 7.9. B2X              - bit to hex conversion ΓòÉΓòÉΓòÉ
  2589.  
  2590.  
  2591. Next  Prev 
  2592.  
  2593. B2X converts a character string containing ones and zeros into a character 
  2594. string containing hexadecimal characters. 
  2595.  
  2596.  ΓöÇΓöÇB2X(string)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2597.  
  2598. Note:   not in MVS or VM. 
  2599.  
  2600.  Converts binary (bit) to hexadecimal.  The binary string can contain zeros, 
  2601.  ones, and blanks.  The converted string only uses the upper case letters to 
  2602.  represent the hexadecimal digits A-F.  There will be no blanks in the 
  2603.  converted string. 
  2604.  
  2605.   B2X('11110001')                       is  'F1'
  2606.   B2X('101')                            is  '5'
  2607.   B2X('1000 0010 1001 0001 1000 0010')  is  '829182'
  2608.  
  2609.  
  2610.  Next  Prev 
  2611.  
  2612.  
  2613. ΓòÉΓòÉΓòÉ 7.10. Center          - center text in string ΓòÉΓòÉΓòÉ
  2614.  
  2615.  
  2616. Next  Prev 
  2617.  
  2618. CENTER returns a string that is length characters long, and has string centered 
  2619. in it. 
  2620.  
  2621.      ΓöîΓöÇCENTER(ΓöÇΓöÉ
  2622.  ΓöÇΓöÇΓöñ         Γö£ΓöÇΓöÇstringΓöÇΓöÇ,lengthΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2623.      ΓööΓöÇCENTRE(ΓöÇΓöÿ                  ΓööΓöÇ,padΓöÇΓöÇΓöÿ
  2624.  
  2625. When the string is shorter than the length,  pad characters are added at both 
  2626. ends to center the string and bring it to the required length.  CENTER operates 
  2627. as though the characters were added one at a time, first on the right, then on 
  2628. the left, another on the right, and so on. 
  2629.  
  2630. When the string is longer than the length, then characters are removed from 
  2631. both ends of the string until the string has been reduced to the required 
  2632. length. CENTER operates as though the characters were removed one at a time, 
  2633. first on the right, then on the left, another on the right, and so on. 
  2634.  
  2635. Examples 
  2636.  
  2637. CENTER("ABC",8,'+')      is  '++ABC+++'
  2638. CENTER('Catastrophe',5)  is  'astro'
  2639. CENTER('stints',0)         is  ''
  2640. CENTER('stints',1)         is  'i'
  2641. CENTER('stints',2)         is  'in'
  2642. CENTER('stints',3)         is  'tin'
  2643. CENTER('stints',4)         is  'tint'
  2644. CENTER('stints',5)         is  'stint'
  2645. CENTER('stints',6)         is  'stints'
  2646. CENTER('stints',7)         is  'stints '
  2647. CENTER('stints',8)         is  ' stints '
  2648.  
  2649. /* What's the longest word you can think of   */
  2650. /* such that for all I from 1 to the          */
  2651. /* length( yourword ), every instance of      */
  2652. /* CENTER( yourword, I ) is an actual word in */
  2653. /* the dictionary?  (like "stints" above)     */
  2654.  
  2655. Note:   the British spelling (CENTRE) is due to the origins of REXX with IBMer 
  2656.         Mike Cowlishaw from England. 
  2657.  
  2658.  
  2659.  Next  Prev 
  2660.  
  2661.  
  2662. ΓòÉΓòÉΓòÉ 7.11. CharIn          - read a char from file ΓòÉΓòÉΓòÉ
  2663.  
  2664.  
  2665. Next  Prev 
  2666.  
  2667. CHARIN returns up to length characters from the character input stream name. 
  2668.  
  2669.  ΓöÇΓöÇCHARIN(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇ
  2670.              ΓööΓöÇnameΓöÇΓöÿ ΓööΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  2671.                            ΓööΓöÇstartΓöÇΓöÇΓöÿ ΓööΓöÇ,lengthΓöÇΓöÿ
  2672.  
  2673. Note:   OS/2 has the only implementation;  the new SAA REXX Level 2 
  2674.         specification includes this function. 
  2675.  
  2676.  The stream name defaults to STDIN:, which is the default input stream.  The 
  2677.  default length is 1. 
  2678.  
  2679.  There are two types of streams: transient and persistent. Transient streams 
  2680.  are associated with devices, like the console, a printer, and STDIN:. 
  2681.  Persistent streams have an existence after a close of the stream;  files are 
  2682.  persistent streams, for example.  A current position is maintained for 
  2683.  persistent streams.  The default start for persistent streams is the current 
  2684.  position, but any position that lies within the bounds of the character stream 
  2685.  can be specified (1 to the length of the stream). 
  2686.  
  2687.  A length of zero positions the stream, but returns the null string (no 
  2688.  characters are read). 
  2689.  
  2690.  Be careful using CHARIN() to read from the keyboard;  your REXX program will 
  2691.  not regain control until the Enter key has been pressed.  It does NOT get 
  2692.  control immediately after each press of a character. 
  2693.  
  2694.  
  2695.  Next  Prev 
  2696.  
  2697.  
  2698. ΓòÉΓòÉΓòÉ 7.12. CharOut        - write a char to file ΓòÉΓòÉΓòÉ
  2699.  
  2700.  
  2701. Next  Prev 
  2702.  
  2703. CHAROUT writes lenght characters to the name stream. 
  2704.  
  2705.  ΓöÇΓöÇCHAROUT(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇ
  2706.               ΓööΓöÇnameΓöÇΓöÿ ΓööΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  2707.                             ΓööΓöÇstartΓöÇΓöÇΓöÿ ΓööΓöÇ,lengthΓöÇΓöÿ
  2708.  
  2709. Note:   OS/2 EE has the only implementation.  It is included in the new SAA 
  2710.         REXX Level 2 specification. 
  2711.  
  2712.  CHAROUT returns a count of any characters remaining after attempting to write 
  2713.  to the the name stream.  Any value other than 0 indicates some type of error 
  2714.  ocurred, and the NOTREADY condition has been raised. 
  2715.  
  2716.  The stream name defaults to STDOUT:, which is the default output stream.  The 
  2717.  default length is 1. 
  2718.  
  2719.  There are two types of streams: transient and persistent. Transient streams 
  2720.  are associated with devices, like the console, a printer, and STDOUT:. 
  2721.  Persistent streams have an existence after a close of the stream; files are 
  2722.  persistent streams, for example.  A current position is maintained for 
  2723.  persistent streams.  The default start for persistent streams is the current 
  2724.  position, but any position that lies within the bounds of the character stream 
  2725.  can be specified (1 to the length of the stream). 
  2726.  
  2727.  A length of zero positions the stream, but returns zero and no characters are 
  2728.  written. 
  2729.  
  2730.  Warning:  The default initial position for output persistent streams is at the 
  2731.  end of the stream.  Repeated CHAROUT() operations append to the end of the 
  2732.  stream.  If you wish to overwrite a stream, you must explicitly set the 
  2733.  position of the stream to one (e.g., call CHAROUT stream,,1). 
  2734.  
  2735.  
  2736.  Next  Prev 
  2737.  
  2738.  
  2739. ΓòÉΓòÉΓòÉ 7.13. Chars            - return nr chars left in file ΓòÉΓòÉΓòÉ
  2740.  
  2741.  
  2742. Next  Prev 
  2743.  
  2744. CHARS either returns a 1 or a 0 depending on whether characters exist in the 
  2745. input stream name, or returns the actual number of characters remaining in the 
  2746. input stream. 
  2747.  
  2748.  ΓöÇΓöÇCHARS(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇ
  2749.             ΓööΓöÇnameΓöÇΓöÿ
  2750.  
  2751. Note:   OS/2 EE has the only implementation.  The new SAA REXX Level 2 
  2752.         specification includes it. 
  2753.  
  2754.  For transient streams, where it is impossible to determine the number of 
  2755.  characters that remain, 0 means no more data, and 1 means there is more data. 
  2756.  
  2757.  Example 
  2758.  
  2759.   /* Sample program to convert a file with */
  2760.   /* only line ending LINEFEED characters  */
  2761.   /* to one with both Carriage Return and  */
  2762.   /* LINEFEED characters (e.g., Unix to    */
  2763.   /* DOS file conversion)                  */
  2764.   LF = '0A'x  /* linefeed character        */
  2765.   CR = '0D'x  /* carriage return character */
  2766.   arg instream outstream
  2767.   lastchar = ""
  2768.   /* Position outstream to beginning.      */
  2769.   call charout outstream,,1
  2770.   do while chars(instream) \= 0
  2771.       thischar = charin(instream)
  2772.       if thischar = LF,
  2773.           & lastchar \= CR then do
  2774.           call charout outstream, CR||LF
  2775.           end
  2776.       else do
  2777.           call charout outstream, thischar
  2778.           end
  2779.       lastchar = thischar
  2780.       end
  2781.  
  2782.  
  2783.  Next  Prev 
  2784.  
  2785.  
  2786. ΓòÉΓòÉΓòÉ 7.14. CMSFlag       - return VM CMS settings ΓòÉΓòÉΓòÉ
  2787.  
  2788.  
  2789. Next  Prev 
  2790.  
  2791. CMSFLAG returns information about the CMS environment in VM. 
  2792.  
  2793.  ΓöÇΓöÇCMSFLAG(flag)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2794.  
  2795. Note:   VM only. 
  2796.  
  2797.  Returns 1 or 0 depending on flag.  Use the CMS SET command to set flags ON or 
  2798.  OFF, except as specfied: 
  2799.  
  2800.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2801.   Γöé  Flag    Γöé      Definition                        Γöé
  2802.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2803.   Γöé ABBREV   Γöé returns 1 if truncations will be       Γöé
  2804.   Γöé          Γöé  accepted; else 0                      Γöé
  2805.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2806.   Γöé AUTOREAD Γöé returns 1 if console read will be      Γöé
  2807.   Γöé          Γöé  issued immediately after command      Γöé
  2808.   Γöé          Γöé  execution; else 0                     Γöé
  2809.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2810.   Γöé CMSTYPE  Γöé returns 1 if console output will be    Γöé
  2811.   Γöé          Γöé  displayed within the exec; else 0     Γöé
  2812.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2813.   Γöé DOS      Γöé returns 1 if your virtual machine is   Γöé
  2814.   Γöé          Γöé  in the DOS environment; else 0        Γöé
  2815.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2816.   Γöé EXECTRAC Γöé returns 1 if EXEC tracing is turned on;Γöé
  2817.   Γöé          Γöé  else 0                                Γöé
  2818.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2819.   Γöé IMPCP    Γöé returns 1 if commands not recognized byΓöé
  2820.   Γöé          Γöé  CMS will be passed to CP; else 0      Γöé
  2821.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2822.   Γöé IMPEX    Γöé returns 1 if EXECs may be invoked by   Γöé
  2823.   Γöé          Γöé  filename; else 0                      Γöé
  2824.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2825.   Γöé PROTECT  Γöé returns 1 if the CMS nucleus is        Γöé
  2826.   Γöé          Γöé  storage-protected; else 0             Γöé
  2827.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2828.   Γöé RELPAGE  Γöé returns 1 if pages are to be released  Γöé
  2829.   Γöé          Γöé  following completion of certain       Γöé
  2830.   Γöé          Γöé  commands; else 0                      Γöé
  2831.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2832.   Γöé SUBSET   Γöé returns 1 if you are in the CMS subset;Γöé
  2833.   Γöé          Γöé  else 0 - set by issuing SUBSET, reset Γöé
  2834.   Γöé          Γöé  using RETURN                          Γöé
  2835.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2836.  
  2837.  
  2838.  Next  Prev 
  2839.  
  2840.  
  2841. ΓòÉΓòÉΓòÉ 7.15. Compare       - return pos of mismatch ΓòÉΓòÉΓòÉ
  2842.  
  2843.  
  2844. Next  Prev 
  2845.  
  2846. COMPARE returns 0 if the two strings are equal, else the position of the 
  2847. leftmost mismatch. 
  2848.  
  2849.  ΓöÇΓöÇCOMPARE(string1,string2ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2850.                              ΓööΓöÇ,padΓöÇΓöÇΓöÿ
  2851.  
  2852. The shorter of string1 and string2 is padded on the right with the pad 
  2853. character before performing the comparison. The default pad character is the 
  2854. blank. 
  2855.  
  2856. Examples 
  2857.  
  2858. COMPARE('close','cigar')          returns  2
  2859. COMPARE('microsoft','micro')      returns  6
  2860. COMPARE('C','C  ')                returns  0
  2861. COMPARE('apples','oranges')       returns  1
  2862.  
  2863.  
  2864. Next  Prev 
  2865.  
  2866.  
  2867. ΓòÉΓòÉΓòÉ 7.16. Condition      - return trapped condition info ΓòÉΓòÉΓòÉ
  2868.  
  2869.  
  2870. Next  Prev 
  2871.  
  2872. CONDITION returns information about a trapped condition, or the null string if 
  2873. no condition is currently trapped. 
  2874.  
  2875.  ΓöÇΓöÇCONDITION(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2876.                 ΓööΓöÇoptionΓöÇΓöÿ
  2877.  
  2878. The chart below summarizes the different options that are available: 
  2879.  
  2880. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2881. Γöé option         Γöé returns                          Γöé
  2882. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2883. Γöé Condition name Γöé name of trapped condition        Γöé
  2884. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2885. Γöé Description    Γöé descriptive string assoc'd w/trapΓöé
  2886. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2887. Γöé Instruction    Γöé CALL or SIGNAL (how raised)      Γöé
  2888. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2889. Γöé Status         Γöé ON, OFF, or DELAY                Γöé
  2890. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2891.  
  2892. Only the first, capitalized letter of option need be
  2893. specified.  CONDITION information is local to each subroutine level;
  2894. the information is saved prior to calling a subroutine, and restored
  2895. upon return.  (PL/I programmers take note;  conditions cannot
  2896. percolate upward to different levels).
  2897.  
  2898. Note:   Not available on VM. 
  2899.  
  2900.  
  2901.  Next  Prev 
  2902.  
  2903.  
  2904. ΓòÉΓòÉΓòÉ 7.17. Copies          - return N copies of string ΓòÉΓòÉΓòÉ
  2905.  
  2906.  
  2907. Next  Prev 
  2908.  
  2909. COPIES returns n copies of the string, all strung together. 
  2910.  
  2911.  ΓöÇΓöÇCOPIES(string,n)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2912.  
  2913. The number n cannot be less than zero. 
  2914.  
  2915. Examples 
  2916.  
  2917. COPIES("Tu",2)    returns  "TuTu"
  2918. COPIES("nada",0)  returns  ""
  2919.  
  2920.  
  2921. Next  Prev 
  2922.  
  2923.  
  2924. ΓòÉΓòÉΓòÉ 7.18. C2D               - char to decimal conversion ΓòÉΓòÉΓòÉ
  2925.  
  2926.  
  2927. Next  Prev 
  2928.  
  2929. C2D converts the binary representation of a string to a decimal number. 
  2930.  
  2931.  ΓöÇΓöÇC2D(stringΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2932.                 ΓööΓöÇ,nΓöÇΓöÇΓöÿ
  2933.  
  2934. When n is not specified, an unsigned whole number is always returned.  When n 
  2935. is specified, it represents the length of the binary number to be converted, in 
  2936. bytes.  These numbers are assumed to represent signed two's complement numbers, 
  2937. and thus may return negative numbers.  If the string is shorter than the length 
  2938. n it is extended on the left by binary zeroes; it is not sign extended. An 
  2939. error condition is raised when the result requires more precision than the 
  2940. current setting of NUMERIC DIGITS. 
  2941.  
  2942. Note:   Because this function involves the binary representation of strings, it 
  2943.         is heavily dependent on the character set and code page being used. 
  2944.         Portable REXX programs should not make assumptions about this. 
  2945.  
  2946.  Examples 
  2947.  
  2948.   C2D('A')        is  193         /* EBCDIC   */
  2949.   C2D('A',1)      is  -63         /* EBCDIC   */
  2950.   C2D('A',2)      is  193         /* EBCDIC   */
  2951.   C2D('A')        is  65          /* ASCII    */
  2952.   C2D('A',1)      is  65          /* ASCII    */
  2953.   C2D('A',2)      is  65          /* ASCII    */
  2954.   C2D('2350'x)    is  9040        /* portable */
  2955.  
  2956.  
  2957.  Next  Prev 
  2958.  
  2959.  
  2960. ΓòÉΓòÉΓòÉ 7.19. C2X               - char to hex conversion ΓòÉΓòÉΓòÉ
  2961.  
  2962.  
  2963. Next  Prev 
  2964.  
  2965. C2X converts the binary representation of a string to a decimal number. 
  2966.  
  2967.  ΓöÇΓöÇC2X(string)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2968.  
  2969. Converts character to hexadecimal, like you would see in a dump of a file. 
  2970.  
  2971. Examples 
  2972.  
  2973. C2X('Aa.')      is  'C1814B'    /* EBCDIC */
  2974. C2X('Aa.')      is  '41612E'    /* ASCII  */
  2975. C2X('2350'x)    is  '2350'
  2976.  
  2977.  
  2978. Next  Prev 
  2979.  
  2980.  
  2981. ΓòÉΓòÉΓòÉ 7.20. Datatype        - return NUM, CHAR, (more) ΓòÉΓòÉΓòÉ
  2982.  
  2983.  
  2984. Next  Prev 
  2985.  
  2986. DATATYPE classifies character strings as belonging to various lexical 
  2987. categories. 
  2988.  
  2989.  ΓöÇΓöÇDATATYPE(stringΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  2990.                      ΓööΓöÇΓöÇ,typeΓöÇΓöÇΓöÿ
  2991.  
  2992. If type is omitted, DATATYPE returns NUM when the string represents a valid 
  2993. REXX number (including decimals or floating point).  It returns CHAR otherwise. 
  2994.  
  2995. When the type is specified, DATATYPE returns a 1 when the string is in the 
  2996. typed category, and 0 when it is not. For reasons that are beyond me, the null 
  2997. string is considered to be only a hexadecimal string, i.e., DATATYPE on the 
  2998. null string will return 0 for every type except X, in which case it will return 
  2999. a 1. 
  3000.  
  3001. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3002. Γöé  Type         Γöé      Definition                        Γöé
  3003. Γö£ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓö╝ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓöñ
  3004. Γöé  Alphanumeric Γöé returns 1 if string has only chars in  Γöé
  3005. Γöé               Γöé        ranges a-z, A-Z, 0-9            Γöé
  3006. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3007. Γöé  Bits         Γöé returns 1 if string has only chars in  Γöé
  3008. Γöé               Γöé  ranges 0-1                            Γöé
  3009. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3010. Γöé  C            Γöé returns 1 if string is a mixed SBCS/   Γöé OS/2
  3011. Γöé               Γöé  DBCS string                           Γöé
  3012. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3013. Γöé  DBCS         Γöé returns 1 if string is a pure DBCS     Γöé OS/2
  3014. Γöé               Γöé  string                                Γöé
  3015. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3016. Γöé  Lowercase    Γöé returns 1 if string has only chars in  Γöé
  3017. Γöé               Γöé range a-z                              Γöé
  3018. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3019. Γöé  Mixed case   Γöé returns 1 if string has only chars in  Γöé
  3020. Γöé               Γöé ranges a-z and A-Z                     Γöé
  3021. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3022. Γöé  Number       Γöé returns 1 if string is a valid REXX    Γöé
  3023. Γöé               Γöé number <remember, it could be floating Γöé
  3024. Γöé               Γöé point>                                 Γöé
  3025. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3026. Γöé  Symbol       Γöé returns 1 if string is a valid REXX    Γöé
  3027. Γöé               Γöé  symbol                                Γöé
  3028. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3029. Γöé  Uppercase    Γöé returns 1 if string has only chars in  Γöé
  3030. Γöé               Γöé  range A-Z                             Γöé
  3031. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3032. Γöé  Whole number Γöé returns 1 if string is a REXX whole    Γöé
  3033. Γöé               Γöé  number <according to current setting  Γöé
  3034. Γöé               Γöé of NUMERIC DIGITS>                     Γöé
  3035. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3036. Γöé heXadecimal   Γöé returns 1 if string has only chars in  Γöé
  3037. Γöé               Γöé ranges a-f, A-F, 0-9, and blank        Γöé
  3038. Γöé               Γöé <blanks can appear between pairs of    Γöé
  3039. Γöé               Γöé hexadecimal characters for readability>Γöé
  3040. Γöé               Γöé also returns 1 for the null string     Γöé
  3041. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3042.  
  3043. Only the underscored, capitalized letter in the types above is required by 
  3044. DATATYPE. 
  3045.  
  3046. Examples 
  3047.  
  3048. DATATYPE('654  ')                    'NUM'
  3049. DATATYPE('')                         'CHAR'
  3050. DATATYPE('12-1')                     'CHAR'
  3051. DATATYPE('abc','A')                     1
  3052. DATATYPE('abc','N')                     0
  3053. DATATYPE('a285839985a3  83968485','X')  1
  3054. DATATYPE('?X','S')                      1
  3055.  
  3056. More examples, in a tabular form: 
  3057.  
  3058. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓòÑΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3059. Γöé          Γòæ         type               Γöé
  3060. Γöé string   ΓòƒΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöñ
  3061. Γöé          Γòæ(none)ΓöéAΓöéBΓöéCΓöéDΓöéLΓöéMΓöéNΓöéSΓöéUΓöéWΓöéXΓöé
  3062. Γò₧ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¼ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓò¬ΓòÉΓòí
  3063. Γöé'123.45'  Γòæ NUM  Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé1Γöé1Γöé0Γöé0Γöé0Γöé
  3064. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3065. Γöé'-4e9'    Γòæ NUM  Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé1Γöé0Γöé0Γöé0Γöé0Γöé
  3066. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3067. Γöé'5e6'     Γòæ NUM  Γöé1Γöé0Γöé0Γöé0Γöé0Γöé0Γöé1Γöé1Γöé0Γöé1Γöé1Γöé
  3068. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3069. Γöé'+1.'     Γòæ NUM  Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé1Γöé0Γöé0Γöé1Γöé0Γöé
  3070. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3071. Γöé'1'       Γòæ NUM  Γöé1Γöé1Γöé0Γöé0Γöé0Γöé0Γöé1Γöé1Γöé0Γöé1Γöé1Γöé
  3072. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3073. Γöé'10101010'Γòæ NUM  Γöé1Γöé1Γöé0Γöé0Γöé0Γöé0Γöé1Γöé1Γöé0Γöé0Γöé1Γöé
  3074. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3075. Γöé''        Γòæ CHAR Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé0Γöé
  3076. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3077. Γöé'Ab'      Γòæ CHAR Γöé1Γöé0Γöé0Γöé0Γöé0Γöé1Γöé0Γöé1Γöé0Γöé0Γöé1Γöé
  3078. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3079. Γöé'MS'      Γòæ CHAR Γöé1Γöé0Γöé0Γöé0Γöé0Γöé1Γöé0Γöé1Γöé1Γöé0Γöé0Γöé
  3080. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3081. Γöé'xy'      Γòæ CHAR Γöé1Γöé0Γöé1Γöé1Γöé1Γöé1Γöé0Γöé1Γöé0Γöé0Γöé0Γöé
  3082. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓö╝ΓöÇΓöñ
  3083. Γöé'.
  3084.  
  3085.  
  3086. Next
  3087.  Prev
  3088.  
  3089.  
  3090. ΓòÉΓòÉΓòÉ 7.21. Date              - return date, many formats ΓòÉΓòÉΓòÉ
  3091.  
  3092.  
  3093. Next    Prev 
  3094.  
  3095. DATE  returns  a  variety  of  formats  for  the  current  date . 
  3096.  
  3097.  ΓöÇΓöÇDATE(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3098.            ΓööΓöÇΓöÇoptionΓöÇΓöÇΓöÿ
  3099.  
  3100. The default option is "Normal."  All calls in the same statement return the 
  3101. same value (thank goodness). 
  3102.  
  3103. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3104. Γöé Option Γöé Example                                             Γöé
  3105. Γò₧ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¬ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòñΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòí
  3106. ΓöéBasedateΓöé726236     Γöédays since Jan 1, 0001; date(b)//7       Γöéno VM
  3107. Γöé        Γöé           Γöégives 0-6, where 0 is Monday, 6 is SundayΓöé(R.4)
  3108. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3109. ΓöéCentury Γöé32642      Γöédays since Jan 1 1900 (in next century,  ΓöéMVS
  3110. Γöé        Γöé           Γöé  will be days since Jan 1 2000)         ΓöéVM
  3111. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3112. ΓöéDays    Γöé135        Γöédays so far in year, including today     Γöé
  3113. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3114. ΓöéEuropeanΓöé15/05/89   Γöédd/mm/yy                                 Γöé
  3115. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3116. ΓöéJulian  Γöé89135      Γöéyyddd                                    ΓöéMVS,VM
  3117. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3118. ΓöéLanguageΓöé?????????? Γöédate in an implementation&language       Γöé
  3119. Γöé        Γöé           Γöé  dependent format; assume NOTHING of itsΓöéOS/2
  3120. Γöé        Γöé           Γöé  internal structure -- use it as a wholeΓöé
  3121. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3122. ΓöéMonth   ΓöéMay        Γöémonth of year, spelled out in English    Γöé
  3123. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3124. ΓöéNormal  Γöé15 May 1989Γöépreferred because there is no confusion  Γöéno VM
  3125. Γöé        Γöé           Γöébetween European and USA conventions     Γöé
  3126. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3127. ΓöéOrdered Γöé89/05/15   Γöéyy/mm/dd                                 Γöé
  3128. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3129. ΓöéSorted  Γöé890515     Γöéyymmdd                                   Γöé
  3130. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3131. ΓöéUsa     Γöé05/15/89   Γöémm/dd/yy                                 Γöé
  3132. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3133. ΓöéWeekday ΓöéMonday     Γöéday of week, English, mixed case         Γöé
  3134. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3135.  
  3136. Examples 
  3137.  
  3138. DATE()     returns  23 Sep 1990
  3139. DATE('B')  returns  726732
  3140. DATE('D')  returns  266
  3141. DATE('E')  returns  23/09/90
  3142. /* Remember, you cannot rely on the */
  3143. /* format of the 'L' option date.   */
  3144. DATE('L')  returns  23 September 1990 /* OS/2   */
  3145. DATE('L')  returns  90266             /* MVS,VM */
  3146. DATE('M')  returns  September
  3147. DATE('N')  returns  23 Sep 1990
  3148. DATE('O')  returns  90/09/23
  3149. DATE('S')  returns  19900923
  3150. DATE('U')  returns  09/23/90
  3151. DATE('W')  returns  Sunday
  3152.  
  3153.  
  3154. Next  Prev 
  3155.  
  3156.  
  3157. ΓòÉΓòÉΓòÉ 7.22. DBCS            - Double Byte CharSet functions ΓòÉΓòÉΓòÉ
  3158.  
  3159.  
  3160. Next  Prev 
  3161.  
  3162. There are some special DBCS functions; see the reference manuals. DBCS stands 
  3163. for Double Byte Character Set.  DBCS is used for languages which are 
  3164. ideographic, like Japanese, Korean, and Chinese, et. al. 
  3165.  
  3166. DBADJUST DBBRACKET DBCENTER DBLEFT      DBRIGHT    DBRLEFT
  3167. DBRRIGHT DBTODBCS  DBTOSBCS DBUNBRACKET DBVALIDATE DBWIDTH
  3168.  
  3169.  
  3170. Next  Prev 
  3171.  
  3172.  
  3173. ΓòÉΓòÉΓòÉ 7.23. DelStr            - return string w/o/substring ΓòÉΓòÉΓòÉ
  3174.  
  3175.  
  3176. Next  Prev 
  3177.  
  3178. DELSTR removes length characters from a string starting at position n. 
  3179.  
  3180.  ΓöÇΓöÇDELSTR(string,nΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3181.                      ΓööΓöÇΓöÇ,lengthΓöÇΓöÇΓöÿ
  3182.  
  3183. The length defaults to the remainder of the string. 
  3184.  
  3185. Examples 
  3186.  
  3187. DELSTR('carpet',4)        is    'car'
  3188. DELSTR('carpet',4,1)      is    'caret'
  3189. DELSTR('carpet',4,2)      is    'cart'
  3190. DELSTR('carpet',1,3)      is    'pet'
  3191.  
  3192.  
  3193. Next  Prev 
  3194.  
  3195.  
  3196. ΓòÉΓòÉΓòÉ 7.24. DelWord        - return string w/o/subwords ΓòÉΓòÉΓòÉ
  3197.  
  3198.  
  3199. Next  Prev 
  3200.  
  3201. DELWORD removes length number of blank-delimited words from a string starting 
  3202. with the nth word. 
  3203.  
  3204.  ΓöÇΓöÇDELWORD(string,nΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3205.                       ΓööΓöÇΓöÇ,lengthΓöÇΓöÇΓöÿ
  3206.  
  3207. The length defaults to the remainder of the string. 
  3208.  
  3209. Examples 
  3210.  
  3211. DELWORD('response is not valid',3,1)      'response is valid'
  3212. DELWORD('response is not valid',2)        'response'
  3213.  
  3214.  
  3215. Next  Prev 
  3216.  
  3217.  
  3218. ΓòÉΓòÉΓòÉ 7.25. Diag               - issue VM CP DIAGNOSE instruction ΓòÉΓòÉΓòÉ
  3219.  
  3220.  
  3221. Next  Prev 
  3222.  
  3223. DIAG communicates with the CP via a dummy DIAGNOSE instruction. 
  3224.  
  3225.  ΓöÇΓöÇDIAG(nΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3226.              ΓööΓöÇ?ΓöÇΓöÿ  ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  3227.                     Γöé         ΓöéΓöé
  3228.                     ΓööΓö┤ΓöÇ,numberΓöÇΓö┤Γöÿ
  3229.  
  3230. Note:   VM only. 
  3231.  
  3232.  See manual for details. 
  3233.  
  3234.  
  3235.  Next  Prev 
  3236.  
  3237.  
  3238. ΓòÉΓòÉΓòÉ 7.26. DiagRC          - return char version VM CP DIAGNOSE ΓòÉΓòÉΓòÉ
  3239.  
  3240.  
  3241. Next  Prev 
  3242.  
  3243. DIAGRC is like DIAG, except data returned is prefixed by return and condition 
  3244. codes. 
  3245.  
  3246.  ΓöÇΓöÇDIAGRC(nΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3247.                ΓööΓöÇ?ΓöÇΓöÿ  ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  3248.                       Γöé         ΓöéΓöé
  3249.                       ΓööΓö┤ΓöÇ,numberΓöÇΓö┤Γöÿ
  3250.  
  3251. Note:   VM only. 
  3252.  
  3253.  See manual for details. 
  3254.  
  3255.  
  3256.  Next  Prev 
  3257.  
  3258.  
  3259. ΓòÉΓòÉΓòÉ 7.27. Digits             - return NUMERIC DIGITS ΓòÉΓòÉΓòÉ
  3260.  
  3261.  
  3262. Next  Prev 
  3263.  
  3264. DIGITS returns the current NUMERIC DIGITS setting. 
  3265.  
  3266.  ΓöÇΓöÇDIGITS()ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3267. DIGITS returns the maximum number of digits that can used for numbers in REXX 
  3268. programs, based on the current setting of NUMERIC DIGITS.  The default NUMERIC 
  3269. DIGITS specification is 9. 
  3270.  
  3271. Note:   Not available on VM. 
  3272.  
  3273.  
  3274.  Next  Prev 
  3275.  
  3276.  
  3277. ΓòÉΓòÉΓòÉ 7.28. Directory        - change, return curr directory ΓòÉΓòÉΓòÉ
  3278.  
  3279.  
  3280. Next  Prev 
  3281.  
  3282. DIRECTORY returns and/or changes the current directory. 
  3283.  
  3284.  ΓöÇΓöÇDIRECTORY(ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3285.                  ΓööΓöÇnewdirectoryΓöÇΓöÇΓöÿ
  3286.  
  3287. Note:   OS/2 only. 
  3288.  
  3289.  DIRECTORY returns the current directory, FIRST changing it to the newdirectory 
  3290.  if it has been specified. It includes a drive letter;  newdirectory can 
  3291.  optionally contain a drive letter, in which case the drive is also changed, 
  3292.  not just the directory. 
  3293.  
  3294.   CAUTION:
  3295.  This function is somewhat unusual compared to other similarly structured REXX 
  3296.  functions in that the value returned is the new value, not the old value. 
  3297.  
  3298.  
  3299.  Next  Prev 
  3300.  
  3301.  
  3302. ΓòÉΓòÉΓòÉ 7.29. D2C                - decimal to char conversion ΓòÉΓòÉΓòÉ
  3303.  
  3304.  
  3305. Next  Prev 
  3306.  
  3307. D2C converts a number to the character string whose binary representation is 
  3308. the number. 
  3309.  
  3310.  ΓöÇΓöÇD2C(wholenumberΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3311.                      ΓööΓöÇ,nΓöÇΓöÇΓöÿ
  3312.  
  3313. If the number n (the length of the final result) is omitted, then the input 
  3314. wholenumber must not be negative.  The result returned is the minimum number of 
  3315. characters whose binary representation is the number. 
  3316.  
  3317. When n is specified, it indicates what the length of the final result should 
  3318. be.  If n is longer than it needs to be to express the number in binary, then 
  3319. the result is sign extended on the left (negative numbers being represented in 
  3320. two's complement notation).  If n is shorter than it needs to be to fully 
  3321. express the number in binary, then the result is simply truncated from the 
  3322. left. 
  3323.  
  3324. Examples 
  3325.  
  3326. D2C(193)            'C1'x  /* 'A'  in EBCDIC */
  3327. D2C(65)             '41'x  /* 'A'  in ASCII  */
  3328. D2C(-1)             /* illegal */
  3329. D2C(-1,2)           'FFFF'x
  3330. D2C(-1,4)           'FFFFFFFF'x
  3331. D2C(10000012,4)     '0098968C'x
  3332. D2C(9040)           '2350'x
  3333. D2C(9040,1)         '50'x
  3334. D2C(9040,2)         '2350'x
  3335. D2C(9040,3)         '002350'x
  3336. D2C(9040,4)         '00002350'x
  3337.  
  3338.  
  3339. Next  Prev 
  3340.  
  3341.  
  3342. ΓòÉΓòÉΓòÉ 7.30. D2X                - decimal to hex conversion ΓòÉΓòÉΓòÉ
  3343.  
  3344.  
  3345. Next  Prev 
  3346.  
  3347. D2X converts a number to hexadecimal. 
  3348.  
  3349.  ΓöÇΓöÇD2X(wholenumberΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3350.                      ΓööΓöÇ,nΓöÇΓöÇΓöÿ
  3351.  
  3352. If n (the length in characters of the result) is omitted, then the wholenumber 
  3353. must not be negative, and the result is as long as it needs to be without using 
  3354. leading zeros. 
  3355.  
  3356. When n is specified and longer than it needs to be, then the result is 
  3357. sign-extended on the left (two's complement notation). When n is specified and 
  3358. shorter than it needs to be, the result is truncated on the left. 
  3359.  
  3360. Examples 
  3361.  
  3362. D2X(193)           'C1'
  3363. D2X(193,1)         '1'
  3364. D2X(193,2)         'C1'
  3365. D2X(193,3)         '0C1'
  3366. D2X(193,4)         '00C1'
  3367. D2X(-1)            /* illegal */
  3368. D2X(-1,1)          'F'
  3369. D2X(-1,2)          'FF'
  3370. D2X(-1,3)          'FFF'
  3371. D2X(-1,4)          'FFFF'
  3372.  
  3373. C2X(D2C(number,n))  is  D2X(number,2*n)
  3374.  
  3375.  
  3376. Next  Prev 
  3377.  
  3378.  
  3379. ΓòÉΓòÉΓòÉ 7.31. EndLocal         - restore environment ΓòÉΓòÉΓòÉ
  3380.  
  3381.  
  3382. Next  Prev 
  3383.  
  3384. ENDLOCAL undoes the effect of the last SETLOCAL. 
  3385.  
  3386.  ΓöÇΓöÇENDLOCAL( )ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3387.  
  3388. ENDLOCAL returns 1 for a succesful restore of the drive, directory, and 
  3389. environment variables.  It returns 0 if there was no previous SETLOCAL, or for 
  3390. any other failure. 
  3391.  
  3392. Note:   SETLOCAL and ENDLOCAL can be nested in REXX programs; this is not 
  3393.         possible in regular batch procedures. 
  3394.  
  3395.  If a REXX program that issues SETLOCAL ends without calling ENDLOCAL, an 
  3396.  implicit ENDLOCAL is performed at termination. 
  3397.  
  3398.  Example 
  3399.  
  3400.   call setlocal
  3401.   oldpath = value('path',,'OS2ENVIRONMENT')
  3402.   call value 'path',,
  3403.       newpathpart';'oldpath,,
  3404.       'OS2ENVIRONMENT'
  3405.   ...
  3406.   /* do some things with new path */
  3407.   call endlocal
  3408.  
  3409.  
  3410.  Next  Prev 
  3411.  
  3412.  
  3413. ΓòÉΓòÉΓòÉ 7.32. ErrorText        - return REXX errmsg text ΓòÉΓòÉΓòÉ
  3414.  
  3415.  
  3416. Next  Prev 
  3417.  
  3418. ERRORTEXT returns the error message text for REXX error message n. 
  3419.  
  3420.  ΓöÇΓöÇERRORTEXT(n)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3421.  
  3422. Most implementations use identical text and meaning for all REXX error codes 
  3423. less than 50.  The SAA specification only lists error messages from 1 to 50. 
  3424.  
  3425. OS/2 EE Error Messages 
  3426.  
  3427.    1: File Table full (No message in Personal REXX) 
  3428.    2: Interpret expression > 64000 characters (No message in Personal REXX) 
  3429.    3: Program is unreadable (No message in Personal REXX) 
  3430.    4: Program interrupted 
  3431.    5: Machine resources exhausted 
  3432.    6: Unmatched "/*" or quote 
  3433.    7: WHEN or OTHERWISE expected 
  3434.    8: Unexpected THEN or ELSE 
  3435.    9: Unexpected WHEN or OTHERWISE 
  3436.   10: Unexpected or unmatched END 
  3437.   11: Control stack full 
  3438.   12: Clause too long 
  3439.   12: Clause longer than 1000 characters (Personal REXX) 
  3440.   13: Invalid character in program 
  3441.   14: Incomplete DO/SELECT/IF 
  3442.   15: Invalid hexadecimal or binary string 
  3443.     : Invalid hexadecimal constant (Personal REXX) 
  3444.   16: Label not found 
  3445.   17: Unexpected PROCEDURE 
  3446.   18: THEN expected 
  3447.   19: String or symbol expected 
  3448.   20: Symbol expected 
  3449.   21: Invalid data on end of clause 
  3450.   22: Invalid character string 
  3451.   23: Invalid data string (No message in Personal REXX) 
  3452.   24: Invalid TRACE request 
  3453.   25: Invalid sub-keyword found 
  3454.   26: Invalid whole number 
  3455.   27: Invalid DO syntax 
  3456.   28: Invalid LEAVE or ITERATE 
  3457.   29: Environment name too long 
  3458.     : Environment not found (Personal REXX) 
  3459.   30: Name or string too long 
  3460.     : Name or string longer than 250 characters (Personal REXX) 
  3461.   31: Name starts with number or "." 
  3462.   32: Invalid use of stem (Personal REXX, TSO/E) 
  3463.   33: Invalid expression result 
  3464.   34: Logical value not 0 or 1 
  3465.   35: Invalid expression 
  3466.   36: Unmatched "(" in expression 
  3467.   37: Unexpected "," or ")" 
  3468.   38: Invalid template or pattern 
  3469.   39: Evaluation stack overflow 
  3470.   40: Incorrect call to routine 
  3471.   41: Bad arithmetic conversion 
  3472.   42: Arithmetic overflow/underflow 
  3473.   43: Routine not found 
  3474.   44: Function did not return data 
  3475.   45: No data specified on function RETURN 
  3476.   46: Invalid variable reference (No message in Personal REXX) 
  3477.   47: (No message in OS/2 EE, Personal REXX) 
  3478.   48: Failure in system service 
  3479.   49: Interpretation error 
  3480.   50: Error in called routine (Personal REXX) 
  3481.   51: Line is longer than 250 characters (Personal REXX) 
  3482.   52: Not compiled - cannot execute (Personal REXX) 
  3483.   53: INTERPRET not supported (Personal REXX) 
  3484.  115: The RXSUBCOM parameters are incorrect (No message in Personal REXX) 
  3485.  116: The RXSUBCOM parameter REGISTER is incorrect (No message in Personal 
  3486.  REXX) 
  3487.  117: The RXSUBCOM parameter DROP is incorrect (No message in Personal REXX) 
  3488.  118: The RXSUBCOM parameter LOAD is incorrect (No message in Personal REXX) 
  3489.  119: Invalid file name (No message in Personal REXX) 
  3490.  
  3491.  
  3492.  Next  Prev 
  3493.  
  3494.  
  3495. ΓòÉΓòÉΓòÉ 7.33. Externals       - return nr elements in CMS terminal buffer ΓòÉΓòÉΓòÉ
  3496.  
  3497.  
  3498. Next  Prev 
  3499.  
  3500. EXTERNALS returns the number of elements in the terminal input buffer 
  3501. (type-ahead). 
  3502.  
  3503.  ΓöÇΓöÇEXTERNALS( )ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3504.  
  3505.  
  3506. Next  Prev 
  3507.  
  3508.  
  3509. ΓòÉΓòÉΓòÉ 7.34. FileSpec         - parse OS/2 filespec ΓòÉΓòÉΓòÉ
  3510.  
  3511.  
  3512. Next  Prev 
  3513.  
  3514. FILESPEC can return the drive, the directory, or the filename of a given file 
  3515. specification. 
  3516.  
  3517.  ΓöÇΓöÇFILESPEC(option,filespec)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3518.  
  3519. This is only guaranteed to work on file specifications that are valid. The 
  3520. options are: 
  3521.  
  3522.   Drive 
  3523.   Path 
  3524.   Name 
  3525.  
  3526.  Only the first character of each option need be specified. 
  3527.  
  3528.  The drive is identified as anything up to and including the first colon (:) in 
  3529.  the filespec.  The path is identified as anything from the first character 
  3530.  after the colon (or the absolute first character, if no colon is present) in 
  3531.  the filespec up to and including the last slash (/) or backslash (\).  The 
  3532.  name is identified as anything after the last slash or backslash or colon 
  3533.  through the end of the filespec.  Since this is entirely driven by delimiters, 
  3534.  no considerations of IFS or HPFS long names or special characters, or even of 
  3535.  valid characters, enter into the processing. 
  3536.  
  3537.  Examples 
  3538.  
  3539.   filespec("d","C:CONFIG.SYS")          is  "C:"
  3540.   filespec("p","C:CONFIG.SYS")          is  ""
  3541.   filespec("n","C:CONFIG.SYS")          is  "CONFIG.SYS"
  3542.  
  3543.   filespec("d","C:\CONFIG.SYS")          is  "C:"
  3544.   filespec("p","C:\CONFIG.SYS")          is  "\"
  3545.   filespec("n","C:\CONFIG.SYS")          is  "CONFIG.SYS"
  3546.  
  3547.   filespec("D","C:/os2\cmd.Exe")         is  "C:"
  3548.   filespec("P","C:/os2\cmd.Exe")         is  "/os2\"
  3549.   filespec("N","C:/os2\cmd.Exe")         is  "cmd.exe"
  3550.  
  3551.   filespec("D","abc\def")                is  ""
  3552.   filespec("P","abc\def")                is  "abc\def"
  3553.   filespec("N","abc\def")                is  ""
  3554.  
  3555.   filespec("D","abc\def:g:a.b/c")        is  "abc\def:"
  3556.   filespec("P","abc\def:g:a.b/c")        is  "abc\def:g:a.b/"
  3557.   filespec("N","abc\def:g:a.b/c")        is  "c"
  3558.  
  3559.  
  3560.  Next  Prev 
  3561.  
  3562.  
  3563. ΓòÉΓòÉΓòÉ 7.35. Find                - VM name for WORDPOS ΓòÉΓòÉΓòÉ
  3564.  
  3565.  
  3566. Next  Prev 
  3567.  
  3568. FIND is the same as WORDPOS(phrase, string). 
  3569.  
  3570.  ΓöÇΓöÇFIND(string,phrase)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3571.  
  3572. Same as WORDPOS(phrase,string); use FIND on VM - WORDPOS not implemented in 
  3573. older versions. 
  3574.  
  3575.  
  3576. Next  Prev 
  3577.  
  3578.  
  3579. ΓòÉΓòÉΓòÉ 7.36. Form               - return NUMERIC FORM ΓòÉΓòÉΓòÉ
  3580.  
  3581.  
  3582. Next  Prev 
  3583.  
  3584. FORM returns the current setting of NUMERIC FORM (SCIENTIFIC or ENGINEERING). 
  3585.  
  3586.  ΓöÇΓöÇFORM()ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3587.  
  3588. Note:   Not available on VM.
  3589.  
  3590.  
  3591.  Next  Prev 
  3592.  
  3593.  
  3594. ΓòÉΓòÉΓòÉ 7.37. Format            - return rounded, formatted nr ΓòÉΓòÉΓòÉ
  3595.  
  3596.  
  3597. Next  Prev 
  3598.  
  3599. FORMAT prepares a number for display, rounding and formatting. 
  3600.  
  3601.  ΓöÇΓöÇFORMAT(numberΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇ
  3602.                    ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  3603.                        ΓööbeforeΓöÿ Γöö,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  3604.                                    ΓööafterΓöÿ ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  3605.                                                ΓööexppΓöÿ ΓööexptΓöÿ
  3606.  
  3607. The before and after specify how many positions to use before and after the 
  3608. decimal point, respectively.  These default to using as many positions as are 
  3609. needed. 
  3610.  
  3611. The expp specifies exponent precision, or number of places in the exponent; 
  3612. the default is to use as many as are necessary. The expt specifies the exponent 
  3613. trigger, 
  3614.  
  3615. Examples 
  3616.  
  3617. FORMAT('3',4)            '   3'
  3618. FORMAT('2.7128',2,0)     ' 3'
  3619. FORMAT('2.7128',2,3)     ' 2.713'
  3620. FORMAT('-2.7128',2,5)     '-2.71280'
  3621. FORMAT('3.14159262',0,4) '.1416'
  3622.  
  3623. Note:   VM (R.4) does not implement expp and expt.
  3624.  
  3625.  
  3626.  Next  Prev 
  3627.  
  3628.  
  3629. ΓòÉΓòÉΓòÉ 7.38. Fuzz               - return NUMERIC FUZZ ΓòÉΓòÉΓòÉ
  3630.  
  3631.  
  3632. Next  Prev 
  3633.  
  3634.  ΓöÇΓöÇFUZZ()ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3635.  Returns current setting of NUMERIC FUZZ Not available on VM. 
  3636.  
  3637.  
  3638. Next  Prev 
  3639.  
  3640.  
  3641. ΓòÉΓòÉΓòÉ 7.39. Index              - same as POS function ΓòÉΓòÉΓòÉ
  3642.  
  3643.  
  3644. Next  Prev 
  3645.  
  3646.  ΓöÇΓöÇINDEX(haystack,needleΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3647.                             ΓööΓöÇ,startΓöÇΓöÇΓöÿ
  3648.  returns position of leftmost "needle" string in "haystack" string, starting 
  3649. from position "start" in "haystack," or returns 0 if "needle" is not found 
  3650. INDEX('abracadabra','dab')      7 INDEX('abracadabra','dba')      0 
  3651. INDEX('abracadabra','ab')      1 INDEX('abracadabra','ab',2)     8 
  3652. INDEX('abracadabra','ab',9)     0 
  3653.  
  3654.  
  3655. Next  Prev 
  3656.  
  3657.  
  3658. ΓòÉΓòÉΓòÉ 7.40. Insert              - insert new string into old ΓòÉΓòÉΓòÉ
  3659.  
  3660.  
  3661. Next  Prev 
  3662.  
  3663.  ΓöÇΓöÇINSERT(new,targetΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3664.                        ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  3665.                            ΓööΓöÇnΓöÇΓöÿ ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  3666.                                      ΓöölengthΓöÿ Γöö,padΓöÿ
  3667.  inserts "length" characters of "new" string into the "target" string, padding 
  3668. with the "pad" string, after position "n" in the "target" string;  "n" defaults 
  3669. to 0, i.e., insert before the beginning of "target."  INSERT('abcd','efg') 
  3670. 'abcdefg' INSERT('abcd','efg',3)        'efgabcd' INSERT(' ','efg',2) 
  3671. 'ef g' INSERT('second','first',9,8,'*')   'first***second**' 
  3672.  
  3673.  
  3674. Next  Prev 
  3675.  
  3676.  
  3677. ΓòÉΓòÉΓòÉ 7.41. Justify             - return justified text ΓòÉΓòÉΓòÉ
  3678.  
  3679.  
  3680. Next  Prev 
  3681.  
  3682.  ΓöÇΓöÇJUSTIFY(string,lengthΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3683.                             ΓööΓöÇ,padΓöÇΓöÇΓöÿ
  3684.  Takes the words (blank-delimited) in "string," and spreads them out evenly to 
  3685. a length of "length" by inserting blanks between words.  If "length" is less 
  3686. than the length of "string," truncate letters on the right.  JUSTIFY('This is 
  3687. balanced.',21)   'This  is  balanced.' 
  3688.  
  3689.  
  3690. Next  Prev 
  3691.  
  3692.  
  3693. ΓòÉΓòÉΓòÉ 7.42. LastPos          - return pos of last needle in haystack ΓòÉΓòÉΓòÉ
  3694.  
  3695.  
  3696. Next  Prev 
  3697.  
  3698.  ΓöÇΓöÇLASTPOS(needle,haystackΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3699.                               ΓööΓöÇ,startΓöÇΓöÇΓöÿ
  3700.  returns the position of the rightmost occurrence of the "needle" string in the 
  3701. "haystack" string, or returns 0 if not found;  "start" is the rightmost 
  3702. character which the is to be scanned in the right to left direction. 
  3703. LASTPOS('abra','abracadabra')    8 
  3704.  
  3705.  
  3706. Next  Prev 
  3707.  
  3708.  
  3709. ΓòÉΓòÉΓòÉ 7.43. Left                 - return leftmost chars, padded ΓòÉΓòÉΓòÉ
  3710.  
  3711.  
  3712. Next  Prev 
  3713.  
  3714.  ΓöÇΓöÇLEFT(string,lengthΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3715.                          ΓööΓöÇ,padΓöÇΓöÇΓöÿ
  3716.  returns the leftmost "length" characters of "string," padded, if necessary, 
  3717. with "pad."  LEFT('abracadabra',2)        'ab'  cols=LEFT('a',4)LEFT('b',4)'c' 
  3718. say cols               'a  b  c' 
  3719.  
  3720.  
  3721. Next  Prev 
  3722.  
  3723.  
  3724. ΓòÉΓòÉΓòÉ 7.44. Length            - return string length ΓòÉΓòÉΓòÉ
  3725.  
  3726.  
  3727. Next  Prev 
  3728.  
  3729.  ΓöÇΓöÇLENGTH(string)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3730.  returns the length of "string."  LENGTH('ab c')            4 LENGTH('ab c  ') 
  3731. 6 LENGTH('')              0 
  3732.  
  3733.  
  3734. Next  Prev 
  3735.  
  3736.  
  3737. ΓòÉΓòÉΓòÉ 7.45. LineIn             - read a line from file ΓòÉΓòÉΓòÉ
  3738.  
  3739.  
  3740. Next  Prev 
  3741.  
  3742.  ΓöÇΓöÇLINEIN(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇ
  3743.              ΓööΓöÇnameΓöÇΓöÿ ΓööΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  3744.                            ΓööΓöÇstartΓöÇΓöÇΓöÿ ΓööΓöÇ,countΓöÇΓöÿ
  3745.  
  3746. Note:   OS/2 only; ?probably to be included in the next SAA spec. 
  3747.  
  3748.  Returns a line from the input stream "name."  The "count" defaults to 1. 
  3749.  Count is 0 or 1. 
  3750.  
  3751.  
  3752.  Next  Prev 
  3753.  
  3754.  
  3755. ΓòÉΓòÉΓòÉ 7.46. LineOut           - write a line to file ΓòÉΓòÉΓòÉ
  3756.  
  3757.  
  3758. Next  Prev 
  3759.  
  3760.  ΓöÇΓöÇLINEOUT(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇ
  3761.               ΓööΓöÇnameΓöÇΓöÿ ΓööΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  3762.                             ΓööΓöÇstringΓöÇΓöÿ ΓööΓöÇ,lineΓöÇΓöÿ
  3763.  
  3764. Note:   OS/2 only; probably to be included in the next SAA spec. 
  3765.  
  3766.  Returns count of lines remaining after attempting to write to the the "name" 
  3767.  stream.  Any value other than 0 indicates some type of error ocurred.  1 is 
  3768.  only value other than 0.  If name is omitted, the default output stream 
  3769.  (STDOUT:) is used.  The default positioning for output streams is at the end 
  3770.  of the file. E.g., use:  call lineout(myfile,,1) to open file, if not already 
  3771.  open, and position to the beginning of the file. 
  3772.  
  3773.  
  3774.  Next  Prev 
  3775.  
  3776.  
  3777. ΓòÉΓòÉΓòÉ 7.47. Lines              - return nr lines left in file ΓòÉΓòÉΓòÉ
  3778.  
  3779.  
  3780. Next  Prev 
  3781.  
  3782.  ΓöÇΓöÇLINES(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇ
  3783.             ΓööΓöÇnameΓöÇΓöÿ
  3784.  
  3785. Note:   OS/2 only; probably to be included in the next SAA spec. 
  3786.  
  3787.  Returns 1 if any data is remaining in the input stream between the current 
  3788.  positions and the end.  "name" defaults to "STDIN:".  The following is a 
  3789.  common construct to copy a file:  call lineout outfile,,1 /* open, position to 
  3790.  end */ do while lines(myfile)   call linein myfile, thisline   call lineout 
  3791.  myfile, thisline   end 
  3792.  
  3793.  
  3794.  Next  Prev 
  3795.  
  3796.  
  3797. ΓòÉΓòÉΓòÉ 7.48. LineSize         - return current terminal linesize ΓòÉΓòÉΓòÉ
  3798.  
  3799.  
  3800. Next  Prev 
  3801.  
  3802.  ΓöÇΓöÇLINESIZE()ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3803.  returns the terminal line width - 1; in background TSO, always returns 132. 
  3804.  
  3805.  
  3806. Next  Prev 
  3807.  
  3808.  
  3809. ΓòÉΓòÉΓòÉ 7.49. Max                - return largest in arg list ΓòÉΓòÉΓòÉ
  3810.  
  3811.  
  3812. Next  Prev 
  3813.  
  3814.  ΓöÇΓöÇMAX(numberΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3815.                 ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  3816.                 Γöé         ΓöéΓöé
  3817.                 ΓööΓö┤ΓöÇ,numberΓöÇΓö┤Γöÿ
  3818.  returns the largest number in the list; up to 20 can be specified;  for more, 
  3819. can nest MAX() calls; can not be used with non-numeric arguments.  (On VM, up 
  3820. to 10 numbers can be specified). 
  3821.  
  3822.  
  3823. Next  Prev 
  3824.  
  3825.  
  3826. ΓòÉΓòÉΓòÉ 7.50. Min                 - return smallest in arg list ΓòÉΓòÉΓòÉ
  3827.  
  3828.  
  3829. Next  Prev 
  3830.  
  3831.  ΓöÇΓöÇMIN(numberΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3832.                 ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  3833.                 Γöé         ΓöéΓöé
  3834.                 ΓööΓö┤ΓöÇ,numberΓöÇΓö┤Γöÿ
  3835.  returns the smallest number in the list; up to 20 can be specified;  for more, 
  3836. can nest MIN() calls; can not be used with non-numeric arguments.  (On VM, up 
  3837. to 10 numbers can be specified). 
  3838.  
  3839.  
  3840. Next  Prev 
  3841.  
  3842.  
  3843. ΓòÉΓòÉΓòÉ 7.51. Numeric          - return smallest in arg list ΓòÉΓòÉΓòÉ
  3844.  
  3845.  
  3846. Next  Prev 
  3847.  
  3848.  ΓöÇΓöÇNUMERIC(numberΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3849.                 ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  3850.                 Γöé         ΓöéΓöé
  3851.                 ΓööΓö┤ΓöÇ,numberΓöÇΓö┤Γöÿ
  3852.  xxxxxxxxxxxxxxxxxxxxxxxxxxxxin the list; up to 20 can be specified;  for more, 
  3853. can nest MIN() calls; can not be used with non-numeric arguments.  (On VM, up 
  3854. to 10 numbers can be specified). 
  3855.  
  3856.  
  3857. Next  Prev 
  3858.  
  3859.  
  3860. ΓòÉΓòÉΓòÉ 7.52. Overlay           - overlay part of old with new ΓòÉΓòÉΓòÉ
  3861.  
  3862.  
  3863. Next  Prev 
  3864.  
  3865.  ΓöÇΓöÇOVERLAY(new,targetΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3866.                         ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  3867.                             ΓööΓöÇnΓöÇΓöÿ ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  3868.                                       ΓöölengthΓöÿ Γöö,padΓöÿ
  3869.  overlays "length" characters in "target" starting at position "n" with 
  3870. characters from string "new," padded if necessary with "pad;"  the "length" 
  3871. defaults to the length of "new."  OVERLAY('  ','invalid')      '  valid' 
  3872. OVERLAY('1',OVERLAY('2','Version 1 Release 4',9),19)                  'Version 
  3873. 2 Release 1' 
  3874.  
  3875.  
  3876. Next  Prev 
  3877.  
  3878.  
  3879. ΓòÉΓòÉΓòÉ 7.53. Pos                - return pos of needle in haystack ΓòÉΓòÉΓòÉ
  3880.  
  3881.  
  3882. Next  Prev 
  3883.  
  3884.  ΓöÇΓöÇPOS(needle,haystackΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3885.                           ΓööΓöÇ,startΓöÇΓöÇΓöÿ
  3886.  returns the leftmost position of the "needle" string in the "haystack" string, 
  3887. starting at the "start" position;  returns 0 if the "needle" string is not 
  3888. found.  POS('/','09/23/52')        3 POS('/','09/23/52',4)       5 
  3889. POS('6','09/23/52',4)       0 
  3890.  
  3891.  
  3892. Next  Prev 
  3893.  
  3894.  
  3895. ΓòÉΓòÉΓòÉ 7.54. Queued          - return nr lines in queue ΓòÉΓòÉΓòÉ
  3896.  
  3897.  
  3898. Next  Prev 
  3899.  
  3900.  ΓöÇΓöÇQUEUED()ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3901.  returns the number of lines in the data stack (see the TSO/E REXX User's Guide 
  3902. for a complete discussion of all the things you can do with the data stack; 
  3903. the data stack should not be confused with the old TSO command stack.  Also 
  3904. available on VM: returns the number of lines in the program stack. 
  3905.  
  3906.  
  3907. Next  Prev 
  3908.  
  3909.  
  3910. ΓòÉΓòÉΓòÉ 7.55. Random         - return random whole nr in range ΓòÉΓòÉΓòÉ
  3911.  
  3912.  
  3913. Next  Prev 
  3914.  
  3915.  ΓöÇΓöÇRANDOM(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3916.              Γö£ΓöÇmaxΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3917.              Γö£ΓöÇmin,ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  3918.              ΓööΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇmaxΓöÇΓöÿ ΓööΓöÇ,seedΓöÇΓöÿ
  3919.  returns a pseudo-random whole number in the range MAX(0,"min") to "max;" 
  3920. "min" defaults to 0, and "max" defaults to 999;  the "seed" can be used to 
  3921. obtain repeatable results for testing;  useful for simulation and modeling 
  3922. applications. 
  3923.  
  3924.  
  3925. Next  Prev 
  3926.  
  3927.  
  3928. ΓòÉΓòÉΓòÉ 7.56. Reverse         - return 'string' -> 'gnirts' ΓòÉΓòÉΓòÉ
  3929.  
  3930.  
  3931. Next  Prev 
  3932.  
  3933.  ΓöÇΓöÇREVERSE(string)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3934.  reverses the order of characters in a string; can be used with functions that 
  3935. work left to right to create versions that work right to left.  REVERSE('stop') 
  3936. 'pots' REVERSE('oprah')         'harpo' REVERSE('radar')         'radar' 
  3937.  
  3938.  
  3939. Next  Prev 
  3940.  
  3941.  
  3942. ΓòÉΓòÉΓòÉ 7.57. Right              - return rightmost chars, padded ΓòÉΓòÉΓòÉ
  3943.  
  3944.  
  3945. Next  Prev 
  3946.  
  3947.  ΓöÇΓöÇRIGHT(string,lengthΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3948.                           ΓööΓöÇ,padΓöÇΓöÇΓöÿ
  3949.  returns the rightmost "length" characters of "string," padded, if necessary, 
  3950. with "pad."  RIGHT('example',5)          'ample' 
  3951. cols=RIGHT('a',4)RIGHT('b',4)'c' say cols               '  a  bc' 
  3952.  
  3953.  
  3954. Next  Prev 
  3955.  
  3956.  
  3957. ΓòÉΓòÉΓòÉ 7.58. Sign               - return 1, 0, -1 ΓòÉΓòÉΓòÉ
  3958.  
  3959.  
  3960. Next  Prev 
  3961.  
  3962.  ΓöÇΓöÇSIGN(number)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3963.  returns -1 if negative, +1 if positive, 0 if zero. 
  3964.  
  3965.  
  3966. Next  Prev 
  3967.  
  3968.  
  3969. ΓòÉΓòÉΓòÉ 7.59. SourceLine    - return line I of this REXX pgm ΓòÉΓòÉΓòÉ
  3970.  
  3971.  
  3972. Next  Prev 
  3973.  
  3974.  ΓöÇΓöÇSOURCELINE(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3975.                  ΓööΓöÇΓöÇnΓöÇΓöÇΓöÿ
  3976.  returns the "nth" line of the REXX exec currently executing;  returns the 
  3977. number of source lines if "n" is omitted;  useful in error reporting procedures 
  3978. in production REXX execs. 
  3979.  
  3980.  
  3981. Next  Prev 
  3982.  
  3983.  
  3984. ΓòÉΓòÉΓòÉ 7.60. Space            - return with N padchars between words ΓòÉΓòÉΓòÉ
  3985.  
  3986.  
  3987. Next  Prev 
  3988.  
  3989.  ΓöÇΓöÇSPACE(stringΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3990.                   ΓööΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  3991.                        ΓööΓöÇnΓöÇΓöÿ ΓööΓöÇΓöÇ,padΓöÇΓöÇΓöÿ
  3992.  reformats the words in "string" by placing exactly "n" copies of "pad" between 
  3993. each word.  SPACE('a b cd',3)       'a  b  cd' SPACE('a b cd',0)       'abcd' 
  3994. SPACE('This  is  an   example')                    'This is an example' 
  3995.  
  3996.  
  3997. Next  Prev 
  3998.  
  3999.  
  4000. ΓòÉΓòÉΓòÉ 7.61. Storage         - return, modify machine storage ΓòÉΓòÉΓòÉ
  4001.  
  4002.  
  4003. Next  Prev 
  4004.  
  4005.  ΓöÇΓöÇSTORAGE(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇ
  4006.               ΓööΓöÇaddressΓöÇΓöÿ ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  4007.                               ΓööΓöÇlengthΓöÇΓöÿ ΓööΓöÇ,dataΓöÇΓöÿ
  4008.  VM only. If no arguments are specified, returns the current virtual machine 
  4009. size.  Otherwise, returns "length" bytes from your virtual machine's memory 
  4010. starting at "address".  If "data" is specified, storage starting at "address" 
  4011. is over-written for "length", but not past the end of your virtual machine. 
  4012. Consult manual before using this option. 
  4013.  
  4014.  
  4015. Next  Prev 
  4016.  
  4017.  
  4018. ΓòÉΓòÉΓòÉ 7.62. Strip              - return w/leading and/or trailing removed ΓòÉΓòÉΓòÉ
  4019.  
  4020.  
  4021. Next  Prev 
  4022.  
  4023.  ΓöÇΓöÇSTRIP(stringΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇ
  4024.                   ΓööΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  4025.                        ΓööΓöÇoptionΓöÇΓöÿ ΓööΓöÇΓöÇ,charΓöÇΓöÿ
  4026.  removes the leading and/or trailing "char" from the "string;"  the options are 
  4027. "Leading(L)," "Trailing(T)," or "Both(B)."  STRIP('0000981.3',L,0)     '981.3' 
  4028. STRIP('  how  are  you?  ') 'how  are  you?'  a useful combination is: 
  4029. SPACE(STRIP('  how  are  you?  '))                'how are you?' 
  4030.  
  4031.  
  4032. Next  Prev 
  4033.  
  4034.  
  4035. ΓòÉΓòÉΓòÉ 7.63. Substr          - return part of string ΓòÉΓòÉΓòÉ
  4036.  
  4037.  
  4038. Next  Prev 
  4039.  
  4040.  ΓöÇΓöÇSUBSTR(string,nΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇ
  4041.                      ΓööΓöÇ,ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  4042.                           ΓööΓöÇlengthΓöÇΓöÿ ΓööΓöÇ,padΓöÇΓöÿ
  4043.  returns "length" characters from "string" starting at position "n" and 
  4044. padding, if necessary, with "pad."  The "length" defaults to the rest of the 
  4045. "string;"  the "pad" defaults to a blank.  SUBSTR('basic',2,3)      'asi' 
  4046. SUBSTR('basic',2)       'asic' SUBSTR('DTSS CO',6,5,'.')   'CO...' 
  4047.  
  4048.  
  4049. Next  Prev 
  4050.  
  4051.  
  4052. ΓòÉΓòÉΓòÉ 7.64. Subword       - return some words from string ΓòÉΓòÉΓòÉ
  4053.  
  4054.  
  4055. Next  Prev 
  4056.  
  4057.  ΓöÇΓöÇSUBWORD(string,nΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4058.                       ΓööΓöÇ,lengthΓöÇΓöÇΓöÿ
  4059.  returns "length" number of blank-delimited words from "string," starting at 
  4060. word "n;"  "length" defaults to the rest of the "string."  SUBWORD('A quick 
  4061. brown ',2)    'quick brown' SUBWORD('A quick brown ',2,1)   'quick' SUBWORD('A 
  4062. quick brown ',4,1)   '' 
  4063.  
  4064.  
  4065. Next  Prev 
  4066.  
  4067.  
  4068. ΓòÉΓòÉΓòÉ 7.65. Symbol         - return VAR, LIT, BAD ΓòÉΓòÉΓòÉ
  4069.  
  4070.  
  4071. Next  Prev 
  4072.  
  4073.  ΓöÇΓöÇSYMBOL(name)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4074.  returns the class of the symbol represented by "name;"  returns "BAD" if the 
  4075. name is not a valid REXX symbol (variable name or constant);  returns "LIT" if 
  4076. it is a constant, OR a variable that has never been assigned a value;  returns 
  4077. "VAR" if the symbol represents the name of a variable that has been assigned a 
  4078. value. 
  4079.  
  4080.  
  4081. Next  Prev 
  4082.  
  4083.  
  4084. ΓòÉΓòÉΓòÉ 7.66. Time             - return time, many formats ΓòÉΓòÉΓòÉ
  4085.  
  4086.  
  4087. Next  Prev 
  4088.  
  4089.  ΓöÇΓöÇTIME(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4090.            ΓööΓöÇoptionΓöÇΓöÿ
  4091.  
  4092.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4093.     Γöé   Option   Γöé Example                                      Γöé
  4094.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4095.     Γöé  _Civil    Γöé '7:15pm'                                     Γöéno VM
  4096.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4097.     Γöé  _Elapsed  Γöé 123456789.123456                             Γöé
  4098.     Γöé            Γöé time since elapsed-time clock started/reset  Γöé
  4099.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4100.     Γöé  _Hours    Γöé '19'                                         Γöé
  4101.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4102.     Γöé  _Long     Γöé '19:15:31.123456                             Γöé
  4103.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4104.     Γöé  _Minutes  Γöé 1155   /* 15 + 60*19         */              Γöé
  4105.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4106.     Γöé  _Normal   Γöé '19:15:31'                                   Γöéno VM
  4107.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4108.     Γöé  _Reset    Γöé 123456789.123456                             Γöé
  4109.     Γöé            Γöé time since elapsed-time clock started/reset  Γöé
  4110.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4111.     Γöé  _Seconds  Γöé 69331  /* 31 + 60*(15+60*19) */              Γöé
  4112.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4113.  
  4114.  
  4115. Next  Prev 
  4116.  
  4117.  
  4118. ΓòÉΓòÉΓòÉ 7.67. Trace           - return, set TRACE options ΓòÉΓòÉΓòÉ
  4119.  
  4120.  
  4121. Next  Prev 
  4122.  
  4123.  ΓöÇΓöÇTRACE(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4124.             ΓööΓöÇoptionΓöÇΓöÿ
  4125.  returns the current TRACE actions; can also set TRACE options.  Example: 
  4126. save_trace = trace('?R')  /* saves, sets ...*/  ...           /* trace some 
  4127. code */ TRACE VALUE save_trace   /* reset trace   */ 
  4128.  
  4129.  
  4130. Next  Prev 
  4131.  
  4132.  
  4133. ΓòÉΓòÉΓòÉ 7.68. Translate      - return string translated char for char ΓòÉΓòÉΓòÉ
  4134.  
  4135.  
  4136. Next  Prev 
  4137.  
  4138.  ΓöÇΓöÇTRANSLATE(stringΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇ
  4139.                       ΓööΓöÇ,Γö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  4140.                          ΓööΓöÇtableoΓöÇΓöÿ ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ
  4141.                                         ΓöötableiΓöÿ Γöö,padΓöÿ
  4142.  translates characters in "string" according to the correspondence between the 
  4143. characters in "tableo" and "tablei;"  the shorter of "tablei" or "tableo" is 
  4144. padded to equal length with "pad" for purposes of character translation; 
  4145. default for "tablei" is a list of all 256 hexadecimal characters from '00'x to 
  4146. 'FF'x; if neither table is specified, then a translation from lower case to 
  4147. upper case is done.  TRANSLATE('AbCdEfGhI')      'ABCDEFGHI' 
  4148. TRANSLATE('301-41-8397',,'-')  '301 41 8397' TRANSLATE('12 34 56 
  4149. 78','C4A49497','12345678')                 'C4 A4 94 97' 
  4150.  
  4151.  
  4152. Next  Prev 
  4153.  
  4154.  
  4155. ΓòÉΓòÉΓòÉ 7.69. Trunc            - return integer part of nr ΓòÉΓòÉΓòÉ
  4156.  
  4157.  
  4158. Next  Prev 
  4159.  
  4160.  ΓöÇΓöÇTRUNC(numberΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4161.                   ΓööΓöÇ,nΓöÇΓöÇΓöÿ
  4162.  truncates the "number" to "n" decimal places; "n" defaults to zero. 
  4163. TRUNC(123.456)          123 TRUNC(123.456,2)         123.45 TRUNC(123.4,2) 
  4164. 123.40 
  4165.  
  4166.  
  4167. Next  Prev 
  4168.  
  4169.  
  4170. ΓòÉΓòÉΓòÉ 7.70. Userid          - return system's id for user ΓòÉΓòÉΓòÉ
  4171.  
  4172.  
  4173. Next  Prev 
  4174.  
  4175.  ΓöÇΓöÇUSERID()ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4176.  returns to TSO/E userid in the TSO foreground or background environment; 
  4177. returns the system defined user identifier in VM; an environment specific 
  4178. replaceable routine is invoked in other environments.  USERID() 
  4179. '@64BB' 
  4180.  
  4181.  
  4182. Next  Prev 
  4183.  
  4184.  
  4185. ΓòÉΓòÉΓòÉ 7.71. Value            - return value of name expression ΓòÉΓòÉΓòÉ
  4186.  
  4187.  
  4188. Next  Prev 
  4189.  
  4190.  ΓöÇΓöÇVALUE(name)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4191.  returns the value of the symbol named by "name;" this is like the CLIST 
  4192. &SYSNSUB(2,&&NAME) function; in general, you should use compound stem variables 
  4193. to implement arrays rather than multiple levels of symbolic substitution. 
  4194.  
  4195.  
  4196. Next  Prev 
  4197.  
  4198.  
  4199. ΓòÉΓòÉΓòÉ 7.72. Verify            - return 0 or pos of non-verified char ΓòÉΓòÉΓòÉ
  4200.  
  4201.  
  4202. Next  Prev 
  4203.  
  4204.  ΓöÇΓöÇVERIFY(string,referenceΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇ
  4205.                              ΓööΓöÇ,ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÿ
  4206.                                  ΓööΓöÇoptionΓöÇΓöÿ ΓööΓöÇ,startΓöÇΓöÿ
  4207.  verifies that the substring of "string" starting at "start" contains only the 
  4208. characters listed in the "reference" string;"  the "option" can be "Match(M)" 
  4209. or "Nomatch(N);"  "M" says to return the position of the leftmost character in 
  4210. "string" that is found in the set of characters in the "reference" string; "N" 
  4211. says to return the position of the leftmost character in "string" that is NOT 
  4212. found in the set of characters in the "reference" string; zero is returned when 
  4213. all characters match (N) or don't match (M).  Note: VM only implements "Match" 
  4214. VERIFY('123','0123456789')     0 VERIFY('123','0123456789','N')   0 
  4215. VERIFY('123','0123456789','M')   1 VERIFY('A23','0123456789','N')   1 
  4216. VERIFY('A23','0123456789','M')   2 
  4217.  
  4218.  
  4219. Next  Prev 
  4220.  
  4221.  
  4222. ΓòÉΓòÉΓòÉ 7.73. Word            - return word N from string ΓòÉΓòÉΓòÉ
  4223.  
  4224.  
  4225. Next  Prev 
  4226.  
  4227.  ΓöÇΓöÇWORD(string,n)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4228.      returns the "nth" blank-delimited word from "string;"     same as 
  4229. SUBWORD(). 
  4230.  
  4231.  
  4232. Next  Prev 
  4233.  
  4234.  
  4235. ΓòÉΓòÉΓòÉ 7.74. WordIndex   - return char pos of word N in string ΓòÉΓòÉΓòÉ
  4236.  
  4237.  
  4238. Next  Prev 
  4239.  
  4240.  ΓöÇΓöÇWORDINDEX(string,n)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4241.  returns the character position of the first character in the "nth" word of the 
  4242. "string."  WORDINDEX('Four score and',1)      1 WORDINDEX('Four score and',2) 
  4243. 6 WORDINDEX('Four score and',3)     12 WORDINDEX('Four score and',4)      0 
  4244.  
  4245.  
  4246. Next  Prev 
  4247.  
  4248.  
  4249. ΓòÉΓòÉΓòÉ 7.75. WordLength - return char lth of word N in string ΓòÉΓòÉΓòÉ
  4250.  
  4251.  
  4252. Next  Prev 
  4253.  
  4254.  ΓöÇΓöÇWORDLENGTH(string,n)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4255.  returns the length of the "nth" word in the "string."  WORDLENGTH('Four score 
  4256. and',1)     4 WORDLENGTH('Four score and',2)     5 WORDLENGTH('Four score 
  4257. and',3)     3 WORDLENGTH('Four score and',4)     0 
  4258.  
  4259.  
  4260. Next  Prev 
  4261.  
  4262.  
  4263. ΓòÉΓòÉΓòÉ 7.76. WordPos      - return wordnr of needleword in haystackstring ΓòÉΓòÉΓòÉ
  4264.  
  4265.  
  4266. Next  Prev 
  4267.  
  4268.  ΓöÇΓöÇWORDPOS(phrase,stringΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4269.                            ΓööΓöÇ,startΓöÇΓöÿ
  4270.  finds the leftmost match of the "phrase" in the "string," starting at word 
  4271. number "start;"  if a match is found, returns the relative number of the first 
  4272. matching word in "string;"  if not found, returns zero.  Note: Not available on 
  4273. VM; see FIND.  WORDLENGTH('Four','Four score and')     1 
  4274. WORDLENGTH('score','Four score and')    2 WORDLENGTH('and','Four score and') 
  4275. 3 WORDLENGTH('score and','Four score and')  3 WORDLENGTH('seven','Four score 
  4276. and')    0 
  4277.  
  4278.  
  4279. Next  Prev 
  4280.  
  4281.  
  4282. ΓòÉΓòÉΓòÉ 7.77. Words          - return nr of words in string ΓòÉΓòÉΓòÉ
  4283.  
  4284.  
  4285. Next  Prev 
  4286.  
  4287.  ΓöÇΓöÇWORDS(string)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4288.  returns the number of words in the "string."  WORDS('Four score and') 
  4289. 3 WORDS('Four-score-and')           1 WORDS('    ')              0 WORDS('') 
  4290.  
  4291.  
  4292. Next  Prev 
  4293.  
  4294.  
  4295. ΓòÉΓòÉΓòÉ 7.78. XRange        - return all one-byte codes incl in range ΓòÉΓòÉΓòÉ
  4296.  
  4297.  
  4298. Next  Prev 
  4299.  
  4300.  ΓöÇΓöÇXRANGE(ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4301.              ΓööΓöÇstartΓöÇΓöÿ ΓööΓöÇ,endΓöÇΓöÇΓöÿ
  4302.  returns a string of all the hexadecimal values from "start" through "end," 
  4303. inclusive;  "start" defaults to '00'x;  "end" defaults to 'FF'x. Do not make 
  4304. the mistake of using XRANGE("A","Z") to check for only upper case letters; 
  4305. this range includes more hex values than just the letters, and several of these 
  4306. characters are enterable at a keyboard.  Example:  Use:  upper_case = 
  4307. "ABCDEFGHIJKLMNOPQRSTUVWXYZ" IF verify(test_string,upper_case)=0 THEN ...  Do 
  4308. NOT use:  upper_case = XRANGE('A','Z') IF verify(test_string,upper_case)=0 THEN 
  4309. ...  The former example is character set independent;  the latter example will 
  4310. only work exactly correctly with ASCII  --  it includes too many characters 
  4311. with EBCDIC. 
  4312.  
  4313.  
  4314. Next  Prev 
  4315.  
  4316.  
  4317. ΓòÉΓòÉΓòÉ 7.79. X2C              - convert hex to character ΓòÉΓòÉΓòÉ
  4318.  
  4319.  
  4320. Next  Prev 
  4321.  
  4322.  ΓöÇΓöÇX2C(hexstring)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4323.      converts hexadecimal to character.      X2C('d5a6a64089a240a38885') 
  4324. 'Now is the'     X2C('F1F2F3')           '123' 
  4325.  
  4326.  
  4327. Next  Prev 
  4328.  
  4329.  
  4330. ΓòÉΓòÉΓòÉ 7.80. X2D              - convert hex to decimal ΓòÉΓòÉΓòÉ
  4331.  
  4332.  
  4333. Next  Prev 
  4334.  
  4335.  ΓöÇΓöÇX2D(hexstringΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  4336.                    ΓööΓöÇ,nΓöÇΓöÿ
  4337.  converts hexadecimal to decimal;  if "n" is specified, it represents the 
  4338. number of hexadecimal digits to use in the conversion;  extra ones are 
  4339. truncated from the LEFT;  if padding is needed, hexadecimal zeroes are added on 
  4340. the LEFT;  also, when "n" is specified, if the leftmost bit is on, the number 
  4341. is considered to be a negative number in two's complement.  X2D('C1') 
  4342. 193 X2D('001')             1 X2D('2374')           9076 X2D('FF') 
  4343. 255 X2D('FF',0)             0 X2D('FF',2)            -1 X2D('FF',4) 
  4344. 255 
  4345.  
  4346.  
  4347. Next  Prev 
  4348.  
  4349.  
  4350. ΓòÉΓòÉΓòÉ 8. Functional Groupings ΓòÉΓòÉΓòÉ
  4351.  
  4352.  
  4353. Next  Prev 
  4354.  
  4355. The sections that follow constitute functional groupings of the REXX builtin 
  4356. functions and keyword instructions.  This functional view may prove more useful 
  4357. for lookups when you know what you want to do, but not the name of the REXX 
  4358. language part that does it. 
  4359.  
  4360.  
  4361. Next  Prev 
  4362.  
  4363.  
  4364. ΓòÉΓòÉΓòÉ 8.1. Command Environment ΓòÉΓòÉΓòÉ
  4365.  
  4366.  
  4367. Next  Prev kwaddres bfaddres 
  4368.  
  4369.  
  4370. Next  Prev 
  4371.  
  4372.  
  4373. ΓòÉΓòÉΓòÉ 8.2. Programs - calling, defining, arguments ΓòÉΓòÉΓòÉ
  4374.  
  4375.  
  4376. Next  Prev kwcall kwproced kwarg bfarg kwparse kwexit kwreturn 
  4377.  
  4378.  
  4379. Next  Prev 
  4380.  
  4381.  
  4382. ΓòÉΓòÉΓòÉ 8.3. Execution control - sequencing, conditionals, iteration ΓòÉΓòÉΓòÉ
  4383.  
  4384.  
  4385. Next  Prev kwdo kwiterate kwleave kwif kwselect kwnop kwsignal kwcall on 
  4386.  
  4387.  
  4388. Next  Prev 
  4389.  
  4390.  
  4391. ΓòÉΓòÉΓòÉ 8.4. Input, Output ΓòÉΓòÉΓòÉ
  4392.  
  4393.  
  4394. Next  Prev cmexecio kwpull kwpush kwqueue bfqueued kwsay bflinesize bfcharin 
  4395. bfcharout bfchars bflinein bflineout bflines 
  4396.  
  4397.  
  4398. Next  Prev 
  4399.  
  4400.  
  4401. ΓòÉΓòÉΓòÉ 8.5. Variables, interpretation, environment ΓòÉΓòÉΓòÉ
  4402.  
  4403.  
  4404. Next  Prev kwdrop bfsymbol kwinterpret bfvalue kwnumeric kwoptions bfdbcs 
  4405. kwparse version, source bfdate bftime bfuserid bfdirectory bfsetlocal 
  4406. bfendlocal bffilespec bfexternals bfbeep bfcmsflag bfstorage 
  4407.  
  4408.  
  4409. Next  Prev 
  4410.  
  4411.  
  4412. ΓòÉΓòÉΓòÉ 8.6. Diagnostics, Tracing, Error Recovery ΓòÉΓòÉΓòÉ
  4413.  
  4414.  
  4415. Next  Prev kwsignal kwcall on bfcondit bferrortext kwtrace bftrace bfdiag 
  4416. dfdiagrc bfsourceline 
  4417.  
  4418.  
  4419. Next  Prev 
  4420.  
  4421.  
  4422. ΓòÉΓòÉΓòÉ 8.7. Strings as Numbers ΓòÉΓòÉΓòÉ
  4423.  
  4424.  
  4425. Next  Prev bfabs bfsign bftrunc bfdatatype bfd2x bfx2d bfd2c bfc2d kwnumeric 
  4426. bfform bffuzz bfdigits bfformat bfmax bfmin bfrandom 
  4427.  
  4428.  
  4429. Next  Prev 
  4430.  
  4431.  
  4432. ΓòÉΓòÉΓòÉ 8.8. Strings as bits ΓòÉΓòÉΓòÉ
  4433.  
  4434.  
  4435. Next  Prev bfbitand bfbitor bfbitxor bfb2x bfx2b 
  4436.  
  4437.  
  4438. Next  Prev 
  4439.  
  4440.  
  4441. ΓòÉΓòÉΓòÉ 8.9. Strings as hexadecimal ΓòÉΓòÉΓòÉ
  4442.  
  4443.  
  4444. Next  Prev bfc2x bfx2c bfd2x bfx2d bfxrange 
  4445.  
  4446.  
  4447. Next  Prev 
  4448.  
  4449.  
  4450. ΓòÉΓòÉΓòÉ 8.10. Strings as lists of words ΓòÉΓòÉΓòÉ
  4451.  
  4452.  
  4453. Next  Prev bfdelword bfspace kwparse bfsubword bfword bfwordpos bfwordindex 
  4454. bfwordlength bfwords 
  4455.  
  4456.  
  4457. Next  Prev 
  4458.  
  4459.  
  4460. ΓòÉΓòÉΓòÉ 8.11. Changing Strings; making new strings ΓòÉΓòÉΓòÉ
  4461.  
  4462.  
  4463. Next  Prev kwupper bftranslate kwparse bfinsert bfdelstr bfoverlay bfleft 
  4464. bfright bfcenter bfjustify bfspace bfstrip bfcopies bfreverse 
  4465.  
  4466.  
  4467. Next  Prev 
  4468.  
  4469.  
  4470. ΓòÉΓòÉΓòÉ 8.12. Searching, Matching, extracting Strings ΓòÉΓòÉΓòÉ
  4471.  
  4472.  
  4473. Next  Prev bfabbrev bfcompare bffind bfindex bfpos bflastpos bfsubstr kwparse 
  4474. bfverify 
  4475.  
  4476.  
  4477. Next  Prev 
  4478.  
  4479.  
  4480. ΓòÉΓòÉΓòÉ 8.13. About Strings ΓòÉΓòÉΓòÉ
  4481.  
  4482.  
  4483. Next  Prev bflength 
  4484.  
  4485.  
  4486. Next  Prev 
  4487.  
  4488.  
  4489. ΓòÉΓòÉΓòÉ 9. Parsing ΓòÉΓòÉΓòÉ
  4490.  
  4491.  
  4492. Next  Prev 
  4493.  
  4494.  
  4495. Next  Prev 
  4496.  
  4497.  
  4498. ΓòÉΓòÉΓòÉ 10. Arithmetic ΓòÉΓòÉΓòÉ
  4499.  
  4500.  
  4501. Next  Prev 
  4502.  
  4503.  
  4504. Next  Prev 
  4505.  
  4506.  
  4507. ΓòÉΓòÉΓòÉ 11. Input and Output ΓòÉΓòÉΓòÉ
  4508.  
  4509.  
  4510. Next  Prev 
  4511.  
  4512.  
  4513. Next  Prev 
  4514.  
  4515.  
  4516. ΓòÉΓòÉΓòÉ 12. Debugging ΓòÉΓòÉΓòÉ
  4517.  
  4518.  
  4519. Next  Prev 
  4520.  
  4521.  
  4522. Next  Prev 
  4523.  
  4524.  
  4525. ΓòÉΓòÉΓòÉ 13. Conditions and Traps ΓòÉΓòÉΓòÉ
  4526.  
  4527.  
  4528. Next  Prev 
  4529.  
  4530.  
  4531. Next  Prev 
  4532.  
  4533.  
  4534. ΓòÉΓòÉΓòÉ 14. Reserved Words ΓòÉΓòÉΓòÉ
  4535.  
  4536.  
  4537. Next  Prev 
  4538.  
  4539.  
  4540. Next  Prev 
  4541.  
  4542.  
  4543. ΓòÉΓòÉΓòÉ 15. Efficiency Considerations ΓòÉΓòÉΓòÉ
  4544.  
  4545.  
  4546. Next  Prev 
  4547.  
  4548.  
  4549. Next  Prev 
  4550.  
  4551.  
  4552. ΓòÉΓòÉΓòÉ 16. Hints, Tips, and Tricks ΓòÉΓòÉΓòÉ
  4553.  
  4554.  
  4555. Next  Prev 
  4556.  
  4557.  
  4558. Next  Prev 
  4559.  
  4560.  
  4561. ΓòÉΓòÉΓòÉ 17. Programming APIs ΓòÉΓòÉΓòÉ
  4562.  
  4563.  
  4564. Next  Prev 
  4565.  
  4566.  
  4567. Next  Prev 
  4568.  
  4569.  
  4570. ΓòÉΓòÉΓòÉ 18. DBCS Support ΓòÉΓòÉΓòÉ
  4571.  
  4572.  
  4573. Next  Prev 
  4574.  
  4575.  
  4576. Next  Prev 
  4577.  
  4578.  
  4579. ΓòÉΓòÉΓòÉ 19. Language Limits ΓòÉΓòÉΓòÉ
  4580.  
  4581.  
  4582.  Prev 
  4583.  
  4584.  
  4585. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4586.  
  4587. Quercus Systems 
  4588.  
  4589.     Quercus Systems
  4590.     PO Box 2157
  4591.     Saratoga, CA 95070
  4592.     (408) 257-3697
  4593.  
  4594.  
  4595. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4596.  
  4597. Name expression 
  4598.  
  4599. An variable whose value is a list of variable names. This is a form of 
  4600. indirection. 
  4601.  
  4602.  
  4603. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4604.  
  4605.  environment 
  4606.            a literal string or a single symbol denoting the "host" command 
  4607.            environment or particular program to which a command will be 
  4608.            directed. 
  4609.  
  4610.  In all operating systems it is possible for users and programs to define new 
  4611.  "environments." The most commonly used ones are shown below: 
  4612.  
  4613.    TSO MVS LINK ATTACH ISPEXEC ISREDIT
  4614.    CMS COMMAND ISPEXEC ISREDIT
  4615.    CMD ISPCIR
  4616.  
  4617.  
  4618. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4619.  
  4620. REXX expressions are sequences of terms, operators, and parentheses (round 
  4621. brackets, for those of you in the UK). 
  4622.  
  4623. Terms are: 
  4624.  
  4625.   Literals, which include character strings, hexadecimal strings, binary 
  4626.    strings, and numbers. 
  4627.   Variables,which are simple or compound symbols. 
  4628.   Function References, which are the invocation of builtin, internal, or 
  4629.    external functions.  They look like this: 
  4630.  
  4631.       ΓöÇΓö¼ΓöÇsymbol(ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇ
  4632.          ΓööΓöÇstring(ΓöÇΓöÿ Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  4633.                      Γöé                 Γöé Γöé
  4634.                      ΓööΓöÇΓö┤ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÿ
  4635.                          ΓööΓöÇexpressionΓöÇΓöÿ
  4636.    The parameters in a function call are passed by value.  Everything in REXX 
  4637.    is a string.  Strings that contain numbers can be manipulated with 
  4638.    arithmetic operators, but fundamentally we are still dealing with strings. 
  4639.  
  4640.  Operators 
  4641.  
  4642.   Concatenation 
  4643.  
  4644.     ||                  concatenate (with no blank in between) 
  4645.     (juxtaposition)      concatenate (with no blank in between) 
  4646.     (blanks)            concatenate with just one blank between 
  4647.  
  4648.                         Examples: 
  4649.  
  4650.                                                 myvar1 = "the"
  4651.                                                 myvar2 = " time"
  4652.                                                 say "Now"     "is "myvar||myvar2" for all good men ..."
  4653.                                                          ΓööΓöÇΓö¼ΓöÇΓöÿ    ΓööΓöñ    Γö£Γöÿ     ΓööΓöñ
  4654.                                                                   Γöé           ΓööΓöÇΓöÇΓöÇΓöÉ
  4655.                                                         (blanks)   Γöé   (||)         
  4656.                                                                                  (juxtaposition)
  4657.                                                                  (juxtaposition)
  4658.                         displays: 
  4659.  
  4660.                                                 "Now is the time for all good men ..."
  4661.  
  4662.   Arithmetic 
  4663.  
  4664.     +             add 
  4665.     -             subtract 
  4666.     *             multiply 
  4667.     /             divide 
  4668.     %             return an integer quotient from the division 
  4669.     //            return the integer remainder from the division.  This is not 
  4670.                   the modulus operation, because negative remainders are 
  4671.                   returned when the dividend is negative. 
  4672.     **            power (only integral exponents) 
  4673.     prefix -      negation (like 0 - term ) 
  4674.     prefix +      (like 0 + term ) 
  4675.  
  4676.   Comparison 
  4677.  
  4678.    REXX has two sets of comparison operators: the forgiving and the strict. 
  4679.    The strict ones do an exact character comparison with no padding. The 
  4680.    forgiving ones will do numeric comparisons if both operands are numeric; if 
  4681.    not, then leading and trailing blanks are ignored, and the shorter string is 
  4682.    padded with blanks on the right.  Comparisons are case sensitive.  Since 
  4683.    REXX is a multi-environment language, you should be careful about character 
  4684.    set dependencies, e.g., with respect to ASCII vs. EBCDIC. 
  4685.  
  4686.     - Forgiving 
  4687.  
  4688.        =                                 equal 
  4689.        >                                 greater than 
  4690.        <                                 less than 
  4691.        >=  or  \<  or  ╨║<                greater than or equal to (same as not 
  4692.                                          less than) 
  4693.        <=  or  \>  or  ╨║>                less than or equal to (same as not 
  4694.                                          greater than) 
  4695.        \=  or  ╨║=  or  <>  or  ><        not equal 
  4696.  
  4697.     - Strict 
  4698.  
  4699.        ==                                equal (C programmers, be careful here) 
  4700.        >>                                greater than 
  4701.        <<                                less than 
  4702.        >>=  or  \<<  or ╨║<<              greater than or equal to (same as not 
  4703.                                          less than) 
  4704.        <<=  or  \>>  or ╨║>>              less than or equal to (same as not 
  4705.                                          greater than) 
  4706.        \==  or ╨║==                       not equal 
  4707.  
  4708.   Logical 
  4709.  
  4710.    Character strings with a value of zero ("0") have a logical value of false. 
  4711.    Character strings with a value of one ("1") have a logical value of true. 
  4712.    Any other value for a character string can not be used where a logical value 
  4713.    is required. 
  4714.  
  4715.    C and CLIST programmers should be especially careful with the logical 
  4716.    operators -- there can be a high astonishment factor if you let your typing 
  4717.    habits take  over when entering the logical operators. 
  4718.  
  4719.     &               AND returns 1 if both operands are true, else 0 
  4720.     |               OR returns 1 if either operand is true, else 0 (inclusive 
  4721.                     OR) 
  4722.     &&              XOR returns 1 if exactly one operand is true, else 0 
  4723.                     (exclusive OR) 
  4724.     prefix \ 
  4725.     prefix ╨║        NOT inverts operand; if 1 then 0, else 1 
  4726.  
  4727.                     The OR character may appear as a split vertical bar ( ) or 
  4728.                     solid vertical bar ( | ) on the keycap of your keyboard. 
  4729.                     OS/2 uses the one that maps to ASCII 124 ("7C"x). 
  4730.  
  4731.  Evaluation of Expressions 
  4732.  
  4733.  Terms are evaluated when they are needed, in a left to right order.  The 
  4734.  expression is evaluated according to the usual precedence of the operators in 
  4735.  the expression: 
  4736.  
  4737.   1. prefix operators (minus, plus, not) 
  4738.   2. exponentiation (power) 
  4739.   3. multiplication (multiply, divide, quotient, remainder) 
  4740.   4. addition (add, subtract) 
  4741.   5. concatenation 
  4742.   6. comparison 
  4743.   7. logical AND 
  4744.   8. logical OR, XOR 
  4745.  
  4746.  As you would expect, the use of parentheses can effectively change the order 
  4747.  of evaluation.  The only thing really different here is that the prefix 
  4748.  operators bind more tightly than exponentiation, e.g., -2**4 yields 16, not 
  4749.  -16. 
  4750.  
  4751.  
  4752. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4753.  
  4754. REXX expressions are sequences of terms, operators, and parentheses (round 
  4755. brackets, for those of you in the UK). 
  4756.  
  4757. Terms are: 
  4758.  
  4759.   Literals, which include character strings, hexadecimal strings, binary 
  4760.    strings, and numbers. 
  4761.   Variables,which are simple or compound symbols. 
  4762.   Function References, which are the invocation of builtin, internal, or 
  4763.    external functions.  They look like this: 
  4764.  
  4765.       ΓöÇΓö¼ΓöÇsymbol(ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ)ΓöÇΓöÇ
  4766.          ΓööΓöÇstring(ΓöÇΓöÿ Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ,ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  4767.                      Γöé                 Γöé Γöé
  4768.                      ΓööΓöÇΓö┤ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÿ
  4769.                          ΓööΓöÇexpressionΓöÇΓöÿ
  4770.    The parameters in a function call are passed by value.  Everything in REXX 
  4771.    is a string.  Strings that contain numbers can be manipulated with 
  4772.    arithmetic operators, but fundamentally we are still dealing with strings. 
  4773.  
  4774.  Operators 
  4775.  
  4776.   Concatenation 
  4777.  
  4778.     ||                  concatenate (with no blank in between) 
  4779.     (juxtaposition)      concatenate (with no blank in between) 
  4780.     (blanks)            concatenate with just one blank between 
  4781.  
  4782.                         Examples: 
  4783.  
  4784.                                                 myvar1 = "the"
  4785.                                                 myvar2 = " time"
  4786.                                                 say "Now"     "is "myvar||myvar2" for all good men ..."
  4787.                                                          ΓööΓöÇΓö¼ΓöÇΓöÿ    ΓööΓöñ    Γö£Γöÿ     ΓööΓöñ
  4788.                                                                   Γöé           ΓööΓöÇΓöÇΓöÇΓöÉ
  4789.                                                         (blanks)   Γöé   (||)         
  4790.                                                                                  (juxtaposition)
  4791.                                                                  (juxtaposition)
  4792.                         displays: 
  4793.  
  4794.                                                 "Now is the time for all good men ..."
  4795.  
  4796.   Arithmetic 
  4797.  
  4798.     +             add 
  4799.     -             subtract 
  4800.     *             multiply 
  4801.     /             divide 
  4802.     %             return an integer quotient from the division 
  4803.     //            return the integer remainder from the division.  This is not 
  4804.                   the modulus operation, because negative remainders are 
  4805.                   returned when the dividend is negative. 
  4806.     **            power (only integral exponents) 
  4807.     prefix -      negation (like 0 - term ) 
  4808.     prefix +      (like 0 + term ) 
  4809.  
  4810.   Comparison 
  4811.  
  4812.    REXX has two sets of comparison operators: the forgiving and the strict. 
  4813.    The strict ones do an exact character comparison with no padding. The 
  4814.    forgiving ones will do numeric comparisons if both operands are numeric; if 
  4815.    not, then leading and trailing blanks are ignored, and the shorter string is 
  4816.    padded with blanks on the right.  Comparisons are case sensitive.  Since 
  4817.    REXX is a multi-environment language, you should be careful about character 
  4818.    set dependencies, e.g., with respect to ASCII vs. EBCDIC. 
  4819.  
  4820.     - Forgiving 
  4821.  
  4822.        =                                 equal 
  4823.        >                                 greater than 
  4824.        <                                 less than 
  4825.        >=  or  \<  or  ╨║<                greater than or equal to (same as not 
  4826.                                          less than) 
  4827.        <=  or  \>  or  ╨║>                less than or equal to (same as not 
  4828.                                          greater than) 
  4829.        \=  or  ╨║=  or  <>  or  ><        not equal 
  4830.  
  4831.     - Strict 
  4832.  
  4833.        ==                                equal (C programmers, be careful here) 
  4834.        >>                                greater than 
  4835.        <<                                less than 
  4836.        >>=  or  \<<  or ╨║<<              greater than or equal to (same as not 
  4837.                                          less than) 
  4838.        <<=  or  \>>  or ╨║>>              less than or equal to (same as not 
  4839.                                          greater than) 
  4840.        \==  or ╨║==                       not equal 
  4841.  
  4842.   Logical 
  4843.  
  4844.    Character strings with a value of zero ("0") have a logical value of false. 
  4845.    Character strings with a value of one ("1") have a logical value of true. 
  4846.    Any other value for a character string can not be used where a logical value 
  4847.    is required. 
  4848.  
  4849.    C and CLIST programmers should be especially careful with the logical 
  4850.    operators -- there can be a high astonishment factor if you let your typing 
  4851.    habits take  over when entering the logical operators. 
  4852.  
  4853.     &               AND returns 1 if both operands are true, else 0 
  4854.     |               OR returns 1 if either operand is true, else 0 (inclusive 
  4855.                     OR) 
  4856.     &&              XOR returns 1 if exactly one operand is true, else 0 
  4857.                     (exclusive OR) 
  4858.     prefix \ 
  4859.     prefix ╨║        NOT inverts operand; if 1 then 0, else 1 
  4860.  
  4861.                     The OR character may appear as a split vertical bar ( ) or 
  4862.                     solid vertical bar ( | ) on the keycap of your keyboard. 
  4863.                     OS/2 uses the one that maps to ASCII 124 ("7C"x). 
  4864.  
  4865.  Evaluation of Expressions 
  4866.  
  4867.  Terms are evaluated when they are needed, in a left to right order.  The 
  4868.  expression is evaluated according to the usual precedence of the operators in 
  4869.  the expression: 
  4870.  
  4871.   1. prefix operators (minus, plus, not) 
  4872.   2. exponentiation (power) 
  4873.   3. multiplication (multiply, divide, quotient, remainder) 
  4874.   4. addition (add, subtract) 
  4875.   5. concatenation 
  4876.   6. comparison 
  4877.   7. logical AND 
  4878.   8. logical OR, XOR 
  4879.  
  4880.  As you would expect, the use of parentheses can effectively change the order 
  4881.  of evaluation.  The only thing really different here is that the prefix 
  4882.  operators bind more tightly than exponentiation, e.g., -2**4 yields 16, not 
  4883.  -16. 
  4884.  
  4885.  
  4886. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4887.  
  4888.  template 
  4889.            a list of symbols that are separated by blanks and/or patterns. 
  4890.  
  4891.  More formally: 
  4892.  
  4893.       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4894.                                   Γöé
  4895.   ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö┤ΓöÇΓöÇ
  4896.          Γö£ΓöÇΓöÇvariableΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4897.          Γö£ΓöÇΓöÇ(variable)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4898.          Γö£ΓöÇΓöÇliteralstringΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4899.          Γö£ΓöÇΓöÇ . ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4900.          ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇwholenumberΓöÇΓöÇΓöÿ
  4901.             Γö£ΓöÇ + ΓöÇΓöñ
  4902.             ΓööΓöÇ - ΓöÇΓöÿ
  4903.  
  4904.  variable            name of a variable to receive part of the parsed string 
  4905.  (variable)          name of a variable whose value is used to match in the 
  4906.                      parsed string 
  4907.  literalstring       a character, hexadecimal, or binary (OS/2 EE only) string 
  4908.                      literal used to match in the parsed string 
  4909.  . (period)          a placeholder;  just like matching to a dummy variable 
  4910.  wholenumber         move match position in parsed string to specified column 
  4911.  + wholenumber       move match position in parsed string ahead by specified 
  4912.                      number of columns 
  4913.  - wholenumber       move match position in parsed string back by specified 
  4914.                      number of columns 
  4915.  
  4916.  
  4917. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4918.  
  4919.  name 
  4920.            a symbol or literal string that identifies a routine.  This must be 
  4921.            a valid symbol. 
  4922.  
  4923.  
  4924. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4925.  
  4926.  trapname 
  4927.            a symbol or literal string that identifies a routine to be called 
  4928.            when the associated condition is trapped. 
  4929.  
  4930.  
  4931. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4932.  
  4933.  non-negative numeric expression 
  4934.            an expression that evaluates to a non-negative (>=0) numeric value. 
  4935.  
  4936.  
  4937. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4938.  
  4939.  non-negative numeric expression 
  4940.            an expression that evaluates to a non-negative (>=0) numeric value. 
  4941.  
  4942.  
  4943. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4944.  
  4945.  numeric expression 
  4946.            an expression that evaluates to a numeric value. 
  4947.  
  4948.  
  4949. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4950.  
  4951.  numeric expression 
  4952.            an expression that evaluates to a numeric value. 
  4953.  
  4954.  
  4955. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4956.  
  4957.  non-negative numeric expression 
  4958.            an expression that evaluates to a non-negative (>=0) numeric value. 
  4959.  
  4960.  
  4961. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4962.  
  4963.  boolean expression 
  4964.            an expression that evaluates to 1 (meaning true) or 0 (meaning 
  4965.            false). Unlike C, all non-zero numbers are not considered to be 
  4966.            equivalent to "true." 
  4967.  
  4968.  
  4969. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4970.  
  4971.  boolean expression 
  4972.            an expression that evaluates to 1 (meaning true) or 0 (meaning 
  4973.            false). Unlike C, all non-zero numbers are not considered to be 
  4974.            equivalent to "true." 
  4975.  
  4976.  
  4977. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  4978.  
  4979. BookMark 
  4980.  
  4981. When you place a bookmark on a topic, it is added to a list of bookmarks you 
  4982. have previously set.  You can view the list, and you can remove one or all 
  4983. bookmarks from the list.  If you have not set any bookmarks, the list is empty. 
  4984.  
  4985. To set a bookmark, do the following: 
  4986.  
  4987.   1. Select a topic from the Contents. 
  4988.  
  4989.   2. When that topic appears, choose the Bookmark option from the Services 
  4990.      pull-down. 
  4991.  
  4992.   3. If you want to change the name used for the bookmark, type the new name in 
  4993.      the field. 
  4994.  
  4995.   4. Click on the Place radio button (or press the Up or Down Arrow key to 
  4996.      select it) 
  4997.  
  4998.   5. Click on OK (or select it and press Enter). The bookmark is then added to 
  4999.      the bookmark list. 
  5000.  
  5001.  
  5002. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5003.  
  5004. Search 
  5005.  
  5006. You can specify a word or phrase to be searched.  You can also limit the search 
  5007. to a set of topics by first marking the topics on the Contents list. 
  5008.  
  5009. To search for a word or phrase in all topics, do the following: 
  5010.  
  5011.   1. Choose the Search option from the Services pull-down. 
  5012.  
  5013.   2. Type the word or words to be searched. 
  5014.  
  5015.   3. Click on All sections (or press the Up or Down Arrow keys to select it) 
  5016.  
  5017.   4. Click on Search (or select it and press Enter) to begin the search. 
  5018.  
  5019.   5. The list of topics where the word or phrase appears is displayed. If only 
  5020.      one topic contains the word or phrase, a window containing that topic 
  5021.      appears. 
  5022.  
  5023.  
  5024. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5025.  
  5026. Print 
  5027.  
  5028. You can print one or more topics.  You can also print a set of topics by first 
  5029. marking the topics on the Contents list. 
  5030.  
  5031. To print the document Contents list, do the following: 
  5032.  
  5033.   1. Choose Print from the Services pull-down. 
  5034.  
  5035.   2. Click on Contents (or press the Up or Down Arrow key to select it) 
  5036.  
  5037.   3. Click on Print (or select it and press Enter). 
  5038.  
  5039.   4. The Contents list is printed on your printer. 
  5040.  
  5041.  
  5042. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5043.  
  5044. Copy 
  5045.  
  5046. You can copy a topic you are viewing into a temporary file named TEXT.TMP.  You 
  5047. can later edit that file by using the editor of your choice. 
  5048.  
  5049. To copy a topic, do the following: 
  5050.  
  5051.   1. Expand the Contents list and select a topic. 
  5052.  
  5053.   2. When the topic appears, choose Copy to file from the Services pull-down. 
  5054.  
  5055.   3. The system puts the text pertaining to that topic in the temporary 
  5056.      TEXT.TMP file. 
  5057.  "p.For information on one of the other choices in the Services pull-down, 
  5058.  highlight the choice and press the F1 key. 
  5059.  
  5060.  
  5061. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5062.  
  5063. Options 
  5064.  
  5065. You can control the appearance of the Contents list. 
  5066.  
  5067. To expand the Contents and show all levels for all topics, choose Expand all 
  5068. from the Options pull-down. You can also press the Ctrl and * keys together. 
  5069.  
  5070. For information on one of the other choices in the Options pull-down, highlight 
  5071. the choice and press the F1 key. 
  5072.  
  5073.  
  5074. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5075.  
  5076. Symbol 
  5077.  
  5078. A symbol can be a number, REXX keyword, or a name used for variables, labels, 
  5079. functions, etc.  Names can't begin with digits or a period. All implementations 
  5080. allow names to include: a-z A_Z 0-9 underscore(_) exclamation(!) and 
  5081. question(?).  The period can also be used, but it has a special meaning 
  5082. concerned with compound symbols. Symbols are not case sensitive, i.e., 
  5083. lower-case letters in symbols are translated to upper-case. The VM, MVS, and 
  5084. TSO environments also support the characters @#$╨½ in symbols.  Avoid them for 
  5085. the sake of portability. 
  5086.  
  5087.  
  5088. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5089.  
  5090. Mansfield Software Group 
  5091.  
  5092.     Mansfield Software Group
  5093.     PO Box 532
  5094.     Storrs, CT  06268
  5095.     (203) 429-8402
  5096.     Compuserve:  GO PCVENA
  5097.              (Section 2)
  5098.     BIX:       mansfield
  5099.  
  5100.  
  5101. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5102.  
  5103. Instruction 
  5104.  
  5105. **Not written yet** 
  5106.  
  5107.  
  5108. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5109.  
  5110. Length 
  5111.  
  5112. **Not written yet** 
  5113.  
  5114.  
  5115. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5116.  
  5117. Number 
  5118.  
  5119. **Not written yet** 
  5120.  
  5121.  
  5122. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5123.  
  5124. String 
  5125.  
  5126. **Not written yet** 
  5127.  
  5128.  
  5129. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  5130.  
  5131. Variable 
  5132.  
  5133. **Not written yet**