In order for this site to work correctly, and for us to improve the site, we need to store a small file (called a cookie) on your computer.
By continuing to use this website, you agree to our cookies and privacy policy.
  
Home page Home page Home page Home page
Pixel
Pixel Header R1 C1 Pixel
Pixel Header R2 C1 Pixel
Pixel Header R3 C1 Pixel
Pixel

Catalyst

One of the nice things about catalyst is that there are so many unexplored areas of it. Everybody uses the standard calls but it's sometimes interesting to ponder why certain facilities were included but others omitted, for example why have an Execute and a Perform, but not their PC equivalents?

Anyway, in this short article I'll assume that you don't need to be told the basics (P, W, E, B, X, V codes et al. If you are not familiar with Catalyst and its usage then let me know and if needs be I'll expand on it in a later edition.) but that you may not be familiar with some of the more obscure codes and specifically with some of the more obscure code modifiers.

First things first - it is possible to "Stack" catalyst calls by separating them with semicolons -


0001            DECLARE SUBROUTINE CATALYST
0002            CATALYST("X;P","SSELECT VOC;POPUPS*VOC")

This has the effect of taking the first catalyst action specified, then the second then the third until all of the stacked code/command sets are exhausted.

Modifiers

It is also possible to modify catalyst calls by adding another code after the main code concatenated directly onto it. These modifiers permit us to do some quite sexy things.

=     How many subroutines have you written to make a catalyst call to a
      popup and then take the value returned and put it in a DATA statement
      (this avoids the user choosing a value from the popup and then having
      to press return again to enter the data)? Well, this can be avoided by
      the use of the "=" modifier. Simply add an equals sign to the end of
      your code, and whatever would have come back in @ANS now comes back in
      DATA -
             DECLARE SUBROUTINE CATALYST
             CATALYST("P=","POPUPS*VOC")

:     A similar modifier is  ":", which returns @ANS into  @DATA (same as =
      but without the carriage return).

R     Saves the screen image and restores it when the catalyst call has been
      completed

P     Saves @PLAYBACK (See Readers' Clinic)

M     Adds @RM to the end of @ANS. (@RM can be used in conjunction with
      browse lists)

C     Clear the screen before proceeding.

Codes

S/L  Some confusion arises among beginners to AREV between the use of the S
     and L codes. Quite simply, there is no difference. Both perform the
     same function, that of calling a subroutine with an optional branch
     label. The existence of both codes is a hangover from original system
     development when S was not going to allow a passed parameter and L was.

O    Opens the filename contained in WC_IS% to WC_SRC_FILE%. It can thus be
     used as the post prompt on the key field of a collector window if the
     collector window is to prompt for a file and then allow amendments of
     the records in that file. This code does not take a command.

@    Adds the capture record nominated into @CAPTURE

H    The help code has so many permutations that it is worth its own
     article. One of the most useful codes though is HFT. The calling
     syntax is

          CATALYST("HFT","Main.rec,Browse.rec")

     This command looks into the SYS.HELP file for a record with the same
     key as Main.rec. It then displays this help record but if the user
     presses F2, the system looks for the second record specified as
     Browse.rec and treats this as a browse list, displaying a popup of
     additional help topics. To test this try the following

          CATALYST("HFT","ENTRY.EDIT,PAINT.TOPICS" )
(Volume 1, Issue 1, Pages 4,9)
Pixel
Pixel Footer R1 C1 Pixel
Pixel
Pixel
Pixel