[Info-vax] Any Way to Pass Character String Arguments from C to Basic?

Craig Dedo Craig.Dedo at gmail.com
Mon Oct 21 15:19:40 EDT 2019


On Monday, October 21, 2019 at 1:25:52 PM UTC-5, John Reagan wrote:
> On Monday, October 21, 2019 at 9:18:10 AM UTC-7, Robert A. Brooks wrote:
> > On 10/21/2019 11:31 AM, Craig Dedo wrote:
> >  
> > 
> > > Everything compiles and links correctly; no errors or warnings at all.
> > > When I run the program everything works fine until I try to assign character string data back into character string arguments> that are associated with character strings in the C program.
> > > * Assignment of character string arguments from the C program to variables in the Basic subroutine works fine.
> > > * Assignment of integer results from the Basic subroutine to the integer arguments in the C program works fine.
> > 
> > > * BUT when I try to assign character string values to a character string argument in the C program, I get a fatal error:
> > > %STR-F-FATINTERR, fatal internal error
> >  To be clear, you get this error not when you are calling the BASIC subroutine, but when you attempt to do the string assignment in the C source
> > prior to calling the BASIC subroutine?
> >  
> > Let's see the C actual source.
> > 
> > I don't see this support call in our internal bug tracking system yet.
> >  
> > -- 
> > 
> >                       -- Rob
> 
> Like Rob, I want to see the C code that is building the descriptor and that you are building a CLASS_D, not a CLASS_S.  Plus the descriptor needs to be writeable since the BASIC code (via the STR$ routines) will want to update it.
> 
> And who says descriptors make things easier?

As you asked, here are the three descriptor definitions.

struct dsc$descriptor_d Customer_Location_Code_ldsc = { sizeof (Customer_Location_Code_lsz) - 1, DSC$K_DTYPE_T, DSC$K_CLASS_D,  Customer_Location_Code_lsz };

struct dsc$descriptor_d Oldest_Invoice_Number_ldsc = { sizeof (Oldest_Invoice_Number_lsz) - 1, DSC$K_DTYPE_T, DSC$K_CLASS_D, Oldest_Invoice_Number_lsz };

struct dsc$descriptor_d Part_Number_ldsc = { sizeof (Part_Number_lsz) - 1, DSC$K_DTYPE_T, DSC$K_CLASS_D, Part_Number_lsz };

Sincerely, 
Craig T. Dedo. OpenVMS Software Development Consultant 
Navistar, Inc. 
2701 Navistar Drive 
Lisle, IL   60532 



More information about the Info-vax mailing list