这是什么语言:PROC,VERIFY,DECLARE,SCREEN,CMS,

时间:2013-02-21 17:51:41

标签: programming-languages mainframe

我必须从旧的遗留代码中找到一些逻辑。我的经理说是COBOL,我不确定。我试图在cobol教程上找到一些没有任何运气的关键字。

以下是一些代码段:

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;

4 个答案:

答案 0 :(得分:24)

编辑:

这一直困扰着我。推理它不是EXEC而不是Rexx,但显然在CMS中运行,这离开了E​​XEC 2.

但是,我现在相信这是NOMAD本身。很难确认,但在这里,http://www.tallant.com/portfolio/webpages/web/nomad/nomad2.html是一些代码的例子。

是否从EXEC 2开始运行,我不知道。它可能只是以类似的方式运行,或者只是支持“shelling out”到CMS或CP,以执行“系统功能”。

所以,可能不是......

是EXEC2。

VM / CMS有两种“旧”命令语言,最老的,最有限的是EXEC。 Rexx是“新的”命令语言。

如果您认为这很糟糕,请想象EXEC是什么样的。 EXEC和EXEC2与CLIST有相似之处,但我不知道他们是否有一个共同的祖先。

所以,现在正是这种“shell脚本语言”与IBM的VM操作系统有关,这是最初的“虚拟机”,它包括运行“单用户操作”的多个副本的能力系统“称为CMS(会话监控系统,我相信),它只在VM上运行,而且是”CMS FILEDEF“进入的地方(它正在向CMS”外壳“),以及VM可以作为单个或多个实例运行,完整的IBM操作系统,如DOS / VSE,MVS,VM(再次,它可以运行其他“访客”操作系统)和现在z / OS,z / VSE,我不知道,但可能Linux操作系统。

编辑。这是非常糟糕的做法,它包含“/ ”“ /”评论。如果文件的第一行开始和结束,那么内容假定为Rexx。 VM支持所有三种“语言”,但根据程序的启动方式运行不同的解释器。

从内存中,EXEC以*(注释)开头,EXEC2不需要,而Rexx带有/ *到* /,在CMS上可以跨越多行。

答案 1 :(得分:3)

这是CLIST。通常在IBM Mainframes上找到。

修改

第二次拍摄时,这不是CLIST。它看起来像是CLIST的近亲(其中较旧的IBM系统有一些变体)。我最好的猜测是,这是一种在CMS下运行的相当旧的EXEC。

该行:

CMS FILEDEF QAA2 DISK QAA2 NOMAD A6 (LRECL 100;

看起来像是逃避CMS进行文件分配,这让我想起了CMS。

有人建议可能是SAS。 IBM系统上的SAS也可以有一个CLISTish外观,但我不认为它是SAS(很久以前只与SAS一起工作过几次,所以我也要对此进行纠正)。

我不太确定这也是EXEC2。我挖出来了 VM SP EXEC 2 Reference Manual。 示例中的某些内容似乎并未“转换”为EXEC2:例如,手册中未描述PROC,DECLARE,LENGTHB,CALL和CAT。我用了 CMS回到了80年代并且实际上不得不写类似的东西,但那是很久以前我真的不记得了 的语法。

我可以说的是,这些东西看起来像是1980年代中后期IBM系统上发现的脚本语言的衍生物。

当然不是COBOL或REXX。

答案 2 :(得分:-1)

我不确定这一点,但它看起来可能是REXX。看看:

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

答案 3 :(得分:-1)

这是一个CLIST代码。

早些时候,有很多CLIST代码,现在REXX已经占据了自己的位置。但仍然在许多大型机系统中使用CLIST。