9

我必须从旧的遗留代码中找到一些逻辑。我的经理说是 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

4 回答 4

24

编辑:

这一直困扰着我。推理它不是 EXEC 也不是 Rexx,而是显然在 CMS 中运行,因此留下了 EXEC 2。

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

我不知道它是否从/与 EXEC 2 一起运行。它可能只是以类似的方式运行,或者只是在执行“系统功能”所需时支持向 CMS 或 CP 进行“脱壳”。

所以,应该不是...

它是EXEC2。

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

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

因此,这就是如今与 IBM 的 VM 操作系统相关的“一种 shell 脚本语言”,它是原始的“虚拟机”,它包括运行称为“单用户操作系统”的多个副本的能力CMS(对话监控系统,我相信)仅在 VM 上运行,并且是“CMS FILEDEF”进入的地方(它“向 CMS 发送”),VM 也可以作为单个或多个实例运行,完全- IBM 操作系统如 DOS/VSE、MVS、VM(同样可以运行其他“来宾”操作系统)和如今的 z/OS、z/VSE 以及,我不知道,但可能是 Linux。

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

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

于 2013-02-22T00:43:02.497 回答
3

这是CLIST。常见于 IBM 大型机。

编辑

在第二次拍摄时,这不是 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 参考手册。示例中的某些内容似乎没有“翻译”成 EXEC2:例如 PROC、DECLARE、LENGTHB、CALL 和 CAT 没有在手册中描述。我在 80 年代使用 CMS 有一段时间,实际上不得不写类似的东西,但那是很久以前的事了,我真的不记得很多语法了。

我只能说,这些东西看起来像是 1980 年代中后期 IBM 系统上的脚本语言的衍生版本。

它当然不是 COBOL 或 REXX。

于 2013-02-21T19:08:29.083 回答
-1

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

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

于 2013-02-21T18:02:02.447 回答
-1

这是一个 CLIST 代码。

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

于 2013-02-22T16:54:44.077 回答