Pascal Compiler vs CMS Callable Routines
Posted: Fri Aug 18, 2023 7:56 pm
Our build utilities are written in Pascal and make use of the CMS callable routines. When we execute a cms$set_library() followed by a cms$fetch(), we encounter an access violation when we exit the routine that made those two calls. The interesting part is the file in question is actually fetched out of the library. Its just the exit from the procedure is a little rough.
The CMS library was restored to the x86 system using a backup save set with /verify. The library in question has also been verified on the x86 system with a $cms/verify as well.
This code does work on IA64 HPE Pascal I64 V6.1-123 on OpenVMS I64 V8.4, using CMS V4.7-00. I have no ability to test it on a VSI IA64 system.
On the x86 system, we are using the following: Pascal x86-64 X6.3-138 (50X6f) on OpenVMS x86-64 V9.2-1 & VSI X86VMS CMS V4.8-9.
I have stripped the code down to as simple as I can make it. One routine with a cms$set_library() and cms$fetch() call. The cms library is hardcoded as cmsrootdev:[source.build] and the file is called build.vot. I would assume any cms library and file will cause the error.
Rod
The CMS library was restored to the x86 system using a backup save set with /verify. The library in question has also been verified on the x86 system with a $cms/verify as well.
This code does work on IA64 HPE Pascal I64 V6.1-123 on OpenVMS I64 V8.4, using CMS V4.7-00. I have no ability to test it on a VSI IA64 system.
On the x86 system, we are using the following: Pascal x86-64 X6.3-138 (50X6f) on OpenVMS x86-64 V9.2-1 & VSI X86VMS CMS V4.8-9.
I have stripped the code down to as simple as I can make it. One routine with a cms$set_library() and cms$fetch() call. The cms library is hardcoded as cmsrootdev:[source.build] and the file is called build.vot. I would assume any cms library and file will cause the error.
Rod
Code: Select all
program build (input, output);
type
varying_string = varying [132] of char;
cms_ldb_type = array [1..50] of integer;
[asynchronous, external]
function cms$set_library ( %ref lib_db : cms_ldb_type;
%descr libdir : varying [n] of char
): integer; external;
[asynchronous, external]
function cms$fetch( %ref ldb : cms_ldb_type;
%descr element : varying [i] of char;
%descr remark : varying [j] of char;
%descr generation : varying [k] of char;
%descr merge_gen : varying [l] of char;
%ref reserve : integer := %immed 0;
%ref nohistory : integer := %immed 0;
%ref nonotes : integer := %immed 0;
%ref concurrent : integer := %immed 0;
%descr output_file : varying [m] of char
) : integer; external;
type
user_enviroment_def = record
cms_class : varying_string;
cms_library : varying_string;
end;
var
user_envir : user_enviroment_def;
procedure get_file ;
const
file_name = 'BUILD.VOT';
var
vms_status : integer;
cms_ldb : cms_ldb_type;
begin
vms_status := cms$set_library(cms_ldb,
user_envir.cms_library );
if odd( vms_status) then
cms$fetch( cms_ldb,
file_name,
%immed 0, (* no remark *)
user_envir.cms_class,
%immed 0, (* no merge generation *)
%immed 0, (* no reservation *)
%immed 0, (* no history *)
%immed 0, (* no notes *)
%immed 0, (* no concurrent *)
file_name );
if not odd(vms_status) then
writeln( vms_status:1 );
end;
begin
user_envir.cms_class := '';
user_envir.cms_library := 'CMSROOTDEV:[SOURCE.CMS]';
get_file;
end.