标签: openvms

当用作大小初始值设定项时,OpenVMS Pascal常量不是常量

我认为演示问题的最简单方法是举个例子.代码:

PROGRAM CONSTANTSTRING(OUTPUT);

CONST
    C_MaxLength = 30;

VAR
    small_string : VARYING[5] OF CHAR VALUE 'alpha';

PROCEDURE LocalProc(
    localstring : VARYING[C_MaxLength] of CHAR
);
BEGIN
    writeln('localstring length: ', localstring.LENGTH);
    writeln('localstring size: ', SIZE(localstring.BODY));
    writeln('C_MaxLength: ', C_MaxLength);
END;

BEGIN
    writeln('small_string length: ', small_string.LENGTH);
    writeln('small_string size: ', SIZE(small_string.BODY));
    writeln('C_MaxLength: ', C_MaxLength);

    LocalProc(small_string);
END.
Run Code Online (Sandbox Code Playgroud)

编译:

>pascal /version
HP Pascal I64 V6.1-116 on OpenVMS I64 V8.4
>pascal constantstringinit
>link constantstringinit
>run constantstringinit
Run Code Online (Sandbox Code Playgroud)

并输出:

small_string length:          5
small_string size:          5
C_MaxLength:         30
localstring length:          5
localstring …
Run Code Online (Sandbox Code Playgroud)

pascal openvms

3
推荐指数
1
解决办法
64
查看次数

更新jar中的.class文件会引发异常

我正在尝试移植维基媒体插件以在OpenVMS上运行并需要更改类.我正在尝试使用jar更新jar中的.class文件jar uf jar-file .class-file,但是当我这样做时,我得到以下内容:

java.util.zip.ZipException: duplicate entry: META-INF/LICENSE.txt
        at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:175)
        at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:90)
        at sun.tools.jar.Main.update(Main.java:507)
        at sun.tools.jar.Main.run(Main.java:184)
Run Code Online (Sandbox Code Playgroud)

事实证明,jar中有2个LICENSE.txt文件,我似乎无法摆脱它们.

关于如何将新的.class文件放入jar或如何摆脱重复文件的任何想法?

java jar wikimedia openvms

2
推荐指数
1
解决办法
4979
查看次数

如何在openvms中运行一个简单的c程序?

如何编译和链接openVMS中的示例c程序?任何人都可以解释一下这个过程以及OpenVMS中的调试过程如何?

compilation openvms

2
推荐指数
1
解决办法
1730
查看次数

LIS,OBJ和EXE文件之间有什么关系?

我正在使用不同的编译器CC.它不像GCC那样有效.

当我使用GCC时,我可以执行"gcc -o exe_filename source_filename",输出将是一个exe文件.

当我使用CC时,我需要2个步骤.首先我编译源文件(假设它涉及.c和.h文件)并创建.lis文件和.obj文件.然后我做了一个创建.exe文件的链接命令.

LIS,OBJ和EXE文件之间有什么关系?我问这个是因为我想知道如果我想在另一台机器上使用exe而不包含不必要的文件,我需要哪些文件.如果LIS和OBJ仅用于编译,我不需要在另一台机器上.

c openvms

2
推荐指数
1
解决办法
3525
查看次数

如何在openvms中读取命令行参数来运行ac程序?

我构建了一个简单的程序,尝试打印命令行参数.

代码如下,我构建了一个可执行文件(TEST.EXE).

int main(int argc, char *argv[])
{
    int i;
    printf("%s\n",argv[0]);
    for (i = 1;  i < argc;  i++)
       printf("argument %d: %s\n", i, argv[i]);
    exit (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

我尝试运行TEST.EXE并打印参数但失败.

命令的结果RUN TEST.EXE test1 test2:

%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能打印"test1"和"test2"?

c vms openvms

2
推荐指数
1
解决办法
757
查看次数

如何在VMS上列出历史命令?

如何在VMS上列出历史命令?

在linx上,我们可以使用"历史".

我在VMS上找不到相应的命令.

任何帮助将不胜感激.

谢谢

history vms openvms

1
推荐指数
1
解决办法
2094
查看次数

在C中生成随机数组

我正在使用OpenVMS在C中开发,我已经完成了一个代码,该代码放入1001(0-1000)个元素数组,1000(0-999)个0到50之间的随机数.这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main(){
    int vet[1000], fre[50];
    int i;

    srand(time(NULL));

    for(i=0;i<1000;i++){
        vet[i]=(rand()%51);
    }

    for(i=0;i<1000;i++){
        printf("%d\n", vet[i]);
    }

    for(i=0;i<1000;i++){
        fre[vet[i]]=fre[vet[i]]+1;
    }

    for(i=0;i<51;i++){
        printf("The number %d  was generated %d times\n", i, fre[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我显示每个数字生成的次数时,我看到数字50的数字很大,有时比其他数字多一倍,有人可以帮助我吗?

已解决的代码我现在必须使用srand()

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main(){
        int vet[1000], fre[51] = {0};
        int i;

        srand(time(NULL));

        for(i=0;i<1000;i++){
                vet[i]=(rand()%51);
        }

for(i=0;i<1000;i++){
printf("%d\n", vet[i]);
}

        for(i=0;i<1000;i++){
                        fre[vet[i]]=fre[vet[i]]+1;
        }

        for(i=0;i<51;i++){
                printf("The number %d  was generated %d times\n", i, fre[i]);
        }
}
[EOB]
Run Code Online (Sandbox Code Playgroud)

谢谢你们

c openvms

1
推荐指数
1
解决办法
9057
查看次数

如何将结果存储到HP OpenVMS DCL中的变量?

我想将程序的输出保存到变量.

我使用以下方法,但失败了.

$ PIPE RUN TEST | DEFINE/JOB VALUE @SYS$PIPE $ x = f$logical("VALUE")

我收到一个错误:%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters \WORLD\

参考: 如何将程序的输出分配给VMS上的DCL com脚本中的变量?

dcl openvms

1
推荐指数
1
解决办法
790
查看次数

stdint.h和C99

我读了C99标准,它stdint.h是C标准库的一部分.

我是否正确阅读,如果我测试符合C99,请使用:

defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
Run Code Online (Sandbox Code Playgroud)

这意味着stdint.h应该可用吗?

一个C99很好的例子:我可以考虑一个假装符合要求但不提供stdint.h与自己的合规声明不一致的环境,因此有错误吗?

编辑:对于好奇的系统,有问题的系统是带有HP C编译器的OpenVMS(不是gcc,在openVMS上提供stdint.h).因此,根据到目前为止收到的答案和评论,我必须将此实现(假装为C99)视为错误.有关详情,请访问:https://groups.google.com/forum/#!topic/comp.os.vms/Bnh3tIOc7bo%5B101-125%5D

c c99 standard-library openvms stdint

1
推荐指数
1
解决办法
717
查看次数

在OpenVMS上开发大会?

有人可以解释我如何在OpenVMS上进行汇编开发,我已经在OpenVMS上用C开发了,我刚开始在Windows和Linux中进行汇编.如何编译,链接和运行.asm程序?

assembly linker compilation vms openvms

0
推荐指数
1
解决办法
612
查看次数

二进制搜索练习

我正在用C做练习,但我不知道为什么第一个结果我总是-1(这是不可能的).我只有在交换后才能对数组进行纵坐标.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

main(){
        int vet[100], cont[100];
        int i, c, f=100;
        int swap;
        int r=0;
        int search;

        srand(time(NULL));

        for(i=0;i<100;i++){
                vet[i]=rand()%100+1;
        }

        while(r==0){
                r=1;
                for(i=0;i<100;i++){
                        if(vet[i]>vet[i+1]){
                                swap=vet[i+1];
                                vet[i+1]=vet[i];
                                vet[i]=swap;
                                r=0;
                        }
                }
        }

        for(i=0;i<100;i++){
                printf("%d) %d\n", i+1, vet[i]);
        }

        i=0;
        r=0;
        printf("Inserisci numero da ricercare (1-10000) -> ");
        scanf("%d", &search);
        if(search>10000 || search<0){
                printf("Hai inserito un valore non valido\n");
        }
        else{
                c=(i+f)/2;
                while(vet[c]!=search && i<f){
                        if(vet[c]<search){
                                i=c+1;
                                c=(i+f)/2;
                        }
                        else if(vet[c]>search){
                                f=c-1;
                                c=(i+f)/2;
                        }

                        if(vet[c]==search){
                                cont[r]=c+1;
                                r++; …
Run Code Online (Sandbox Code Playgroud)

c openvms

0
推荐指数
1
解决办法
164
查看次数

字符串,获取和做

我正在进行C练习,但是我遇到问题并且我想要重复cicle(do while),事实上如果我输入1,程序再次从顶部开始,但它不会停止在gets(testo);.我尝试了很多方法来解决没有解决方案的bug,任何人都可以帮助我吗?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

main(){
        int cch, cw, i, j, w, ord, f; //counter and index
        char testo[80];
        char alfa[50][25];
        char swap[25];

        do{     
                cch=0;
                cw=0;
                j=0;
                w=0;
                f=0;

                for(i=0;i<80;i++){
                        testo[i]='\0';
                }
                printf("Write the text:\n");
                gets(testo);

                //initialization 2d array
                for(i=0;i<50;i++){
                        for(j=0;j<25;j++){
                                alfa[i][j]='\0';
                        }
                }

                j=0;
                //Count word and characters
                if(testo[0]!='\0'){
                        cw=1;   
                        for(i=0;testo[i]!='\0';i++){
                                cch++;
                                if(testo[i]==' '){
                                        cw++;
                                        j++;
                                }
                        }
                }

                if(cch==j){
                        printf("You haven't written any word\n\n");
                }
                else{
                        //Don't count double space
                        for(i=0;i<cch;i++){
                                if(testo[i]==' ' …
Run Code Online (Sandbox Code Playgroud)

c string gets openvms

0
推荐指数
1
解决办法
595
查看次数

通过监控OpenVMS确定应用程序可执行工件范围

我们有一个基于OpenVMS的传统COBOL应用程序 - 我们对配置没有一个清晰的认识.在这种情况下,通过"配置",我说的是:

  1. 哪个可执行文件构成应用程序;
  2. 哪些原始源文件对应于哪些可执行文件.

上面的1是一个未知的东西似乎很奇怪,但随着时间的推移,可执行文件已经"来去匆匆"(并且许多仍然被使用).其中的可执行文件构成的应用程序,因为它存在的知识,今天,因为知识,其中的可执行文件,不再需要在时间已丢失不得而知.实际上,团队忠实地编译所有源代码文件并部署生成的可执行文件,尽管显然有不再使用的程序.

不言而喻,没有正式的配置管理过程,并且源代码没有保存在版本控制系统中.由于应用程序在OpenVMS上运行,因此相应基于Files-11的文件系统保留了旧版本的文件(包括源文件),这一直是不将应用程序源放入版本控制系统的借口(尽管使用的原因) VCS的扩展远远超出了以前版本的记录.

当然,有许多方法可以确定配置,但我想从第一个"小步骤"开始,即:确定构成应用程序的可执行文件集.此时我应该提到应用程序的可执行组件不仅限于OpenVMS映像,还包括DCL命令文件.我想要:

  1. 记录驻留在某个目录或目录集中的所有图像调用;
  2. 记录驻留在某个目录或目录集中的所有命令文件调用.

如果我们在延长的时间段(例如两个月)内对我们的生产系统进行此日志记录,我们可以很好地了解应用程序包含的内容.与用户咨询一起,我们将能够确认是否需要未被调用的可执行文件.

我想我已经知道如何做1以上,虽然我不确定具体,即使用SET/AUDIT.第二部分,在这个阶段,我不知道该怎么做.

因此,这项工作的主要标准是,为了获得上述信息,现有系统的影响很小.由于配置周围的问号(以及完全缺乏自动化测试),改变任何事情都是一项令人头疼的事情.

使用操作系统级服务SET/AUDIT可以让人们在不需要更改源代码和/或重新编译任何内容的情况下了解正在运行的内容.所以,我的问题是多方:

  1. 这是在OpenVMS上执行此操作的最佳方式吗?
  2. 限制SET/AUDIT为仅监视特定目录中的图像需要做什么?
  3. 如何在不更改.COM源文件的情况下记录命令文件调用?
  4. 由于记录此类信息,我应该在性能下降方面有什么期望?

vms dcl openvms

0
推荐指数
1
解决办法
184
查看次数

标签 统计

openvms ×13

c ×6

vms ×4

compilation ×2

dcl ×2

assembly ×1

c99 ×1

gets ×1

history ×1

jar ×1

java ×1

linker ×1

pascal ×1

standard-library ×1

stdint ×1

string ×1

wikimedia ×1