Question

I have to find some logic from an old legacy code. My manager says is COBOL, I'm not sure about it. I have tried to find some keywords on cobol tutorials without any luck.

Here are some code snippets:

PROC(&QPROG);
VERIFY OFF PROC;DECLARE &MSG1 AS A75;
/* DON'T CALL SCREEN IF IT'S FROM  */
IF &QPROG NE 'YUITG' THEN DO;
   CALL QAAF;
   SCREEN QUERY LOADED QAAF OTW DO;
      PRINT 'SCREEN WILL NOT LOAD';
      EXIT;
  END;
END;
ON ERROR DO;PRINT &&RC;EXIT; END;

IF LENGTHB(&P_WHAT) = 4 THEN DO; &P_WHATT = SUBSTR(&P_WHAT,1,1) CAT
   ', ' CAT SUBSTR(&P_WHAT,2,1) CAT ', ' CAT SUBSTR(&P_WHAT,3,1) CAT
   ' & ' CAT SUBSTR(&P_WHAT,4,1);
END;
DECLARE &KEYWORDD_A(0) AS A1;
DECLARE &KEYWORDD_F(0) AS 99L;
&KEYWORDD_A=
(SUBSTR(&KEYWORDD,1,1),SUBSTR(&KEYWORDD,2,1),SUBSTR(&KEYWORDD,3,1),
SUBSTR(&KEYWORDD,4,1),SUBSTR(&KEYWORDD,5,1),SUBSTR(&KEYWORDD,6,1),
SUBSTR(&KEYWORDD,37,1),SUBSTR(&KEYWORDD,38,1),SUBSTR(&KEYWORDD,39,1),
SUBSTR(&KEYWORDD,40,1));
&KEYWORDD_F = FINDEX(&KEYWORDD_A = ' ',ALL);

IF &PROG EQ &NAV THEN DO;
   &ALLPROG = 'YES';
   &PROG = 'PR2';
END;
-TOP_PROG
CMS FILEDEF QAA2 DISK QAA2 NOMAD A6 (LRECL 100;
WRITE '/* REPORT */' ON QAA2;
WRITE '&GRP        = ''' CATB &GRP CATB ''';' ON QAA2;
WRITE '&MGTRPT     = ''' CATB &QPROG CATB ''';' ON QAA2;
IF &AMPRFROM NE &NAV THEN DO;
   WRITE '&AMPRFROM = ''' CATB DISPLAY(&AMPRFROM) CATB ''';' ON QAA2;
END;

CLOSE QAA2;
Was it helpful?

Solution

EDIT:

This has been bugging me. Reasoning that it was not EXEC and not Rexx, but was clearly running in CMS, that left EXEC 2.

However, I now believe it is NOMAD itself. Difficult to confirm, but here, http://www.tallant.com/portfolio/webpages/web/nomad/nomad2.html, are examples of some of the code.

Whether it runs from/alongside EXEC 2, I don't know. It may just operate in a similar manner, or just have support for "shelling out" to CMS or CP as necessary to perform "system functions".

So, it is probably not...

It is EXEC2.

There are two "old" command languages with VM/CMS, the oldest, and most limited, is EXEC. Rexx was the "new" command language.

If you think that this is bad, imagine what EXEC is like. EXEC and EXEC2 have similarities to CLIST, but I don't know if they have a joint ancestor.

So, it is what is these days "a shell-scripting language" to do with IBM's VM operating system, which is the original "Virtual Machine" and which includes the ability to run multiple copies of a "single-user operating system" called CMS (Conversational Monitor System, I believe) which only runs on VM and which is where the "CMS FILEDEF" comes in (it is "shelling out" to CMS), as well VM can run, as single or multiple instances, full-blown IBM operating systems such as DOS/VSE, MVS, VM (again, which can then run other "Guest" operating systems) and these days z/OS, z/VSE and, I don't know, but probably Linux.

Edit. It is very bad practice that it includes the "/" "/" comment. If the first line of a file starts and ends like that, then the contents are assumed the be Rexx. VM supports all three "languages" but runs different interpreters depending on how the program starts.

From memory, EXEC starts with an * (comment), EXEC2 does not need that, and Rexx with the /* to */, which on CMS can span more than one line.

OTHER TIPS

This is CLIST. Commonly found on IBM Mainframes.

EDIT

On second take, this isn't CLIST. It looks like a close cousin of CLIST though (of which older IBM systems had a few variants). My best guess is that this a rather old EXEC of some sort running under CMS.

The line:

CMS FILEDEF QAA2 DISK QAA2 NOMAD A6 (LRECL 100;

looks like an escape to CMS for file allocation so that makes me think of CMS.

Someone suggested that it could be SAS. SAS on IBM systems can have a CLISTish look to them too but I don't think it is SAS (only worked with SAS a few times a very long time ago so I stand to be corrected on this too).

I'm not so sure this is EXEC2 either. I dug up the VM SP EXEC 2 Reference Manual. Some of the things in the example don't seem to "translate" into EXEC2: PROC, DECLARE, LENGTHB, CALL and CAT for example are not described in the manual. I used CMS back in the 80's for a while and actually had to write stuff similar to this, but that was a long time ago and I really don't remember much of the syntax.

About all I can say is that this stuff looks like a derivitave of the scripting languages found on IBM systems of the mid to late 1980's.

It certainly is not COBOL or REXX.

I'm not sure about this but it looks like it may be REXX. Take a look:

http://en.wikipedia.org/wiki/Rexx

This is a CLIST code.

Earlier, there use to be lot of CLIST code and now REXX has taken its own place. But still CLIST is being used in many Mainframe systems.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top