[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference clt::mms

Title:MMS general interest file
Notice:Current version: V3.1-03 (see Note 3.2)
Moderator:EDSDS6::TOWNSEND
Created:Mon Feb 03 1986
Last Modified:Wed May 14 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:1385
Total number of notes:4654

1375.0. "Generate gets ACCVIO on Alpha" by CSC32::EHA (Flip) Tue Feb 18 1997 13:27

    Hello,
    
    I have a customer that submitted some code that caused MMS to ACCVIO
    when using the generate qualifier.  I have tried to narrow this down
    some by cutting out chuncks of code, but I have not found the correct
    chuncks to cut out.
    
    I have reproduced it on an Alpha VMS 6.2 with MMS 3.1-03.  When
    entering the following command:
    
    $ MMS/GEN GEN.C
    
    I get the following error:
    
MMS-S-GENBEGIN MMS description file generation started
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual address=20727470, PC=20727470, PS=0000001B

  Improperly handled condition, image exit forced.
    Signal arguments:   Number = 00000005
                        Name   = 0000000C
                                 00010000
                                 20727470
                                 20727470
                                 0000001B

    Register dump:
    R0  = 0000000000000000  R1  = 0000000000000005  R2  = 00000000225C272C
    R3  = 0000000000000000  R4  = 0000000000019616  R5  = 0000000000000001
    R6  = 000000000001B3B4  R7  = 0000000000000000  R8  = 00099125000000B8
    R9  = 00000000000000B8  R10 = 000991DD00000000  R11 = 00099125000004BD
    R12 = 0000000000000000  R13 = 000000007F064990  R14 = 00000000000A6DC0
    R15 = 0000000000EE8391  R16 = 00000000001582FC  R17 = 0000000000000000
    R18 = 44240000000B0001  R19 = 44240000000B0001  R20 = 0000000000000006
    R21 = 000000000000003F  R22 = 0000002443584156  R23 = 0000000000011268
    R24 = 000000007F0649C0  R25 = 0000000000000002  R26 = 2931202B20727470
    R27 = FFFFFFFFFFFFFF40  R28 = 2722000000B80000  R29 = 000000007EE4E2A0
    SP  = 000000007EE4E2A0  PC  = 2931202B20727470  PS  = 200000000000001B
    
    The following is the source code that causes the problem, I called it
    GEN.C, but the name of the file does not seem to matter:
    
/*
 *  extract_eq_param returns the value in a KEYWORD=VALUE[,] string which is
 *  embedded within another string.  It then removes the KEYWORD=VALUE string.
 *
 *  begin_ptr points to the comma in front of the KEYWORD if the keyword is
 *  embedded.  It points to the KEYWORD if the keyword is at the beginning
 *  of the string.
 */
int extract_eq_param(begin_ptr,out_ptr)
char *out_ptr, *begin_ptr;
{
    register char *param_ptr, *end_ptr, *temp_ptr;
    /*  Terminate if necessary.  */
    end_ptr = begin_ptr;
    /*
     *  If a quoted string follows the equal sign, move beyond it.
     *  The quoted string may itself have quotes escaped in it.
     */
    end_ptr = strchr(begin_ptr,'=') + 1;
    /*
     *  If the very next character is a quote, find a matching quote (if any)
     */
    while(end_ptr && *end_ptr && (*end_ptr == '\"')) {
        /*  Point at the open quote.  */
        temp_ptr = end_ptr;
        /* Quote preceded by backslash does not count */
        while((temp_ptr = strchr((temp_ptr + 1),'\"')) &&
                (*(temp_ptr - 1) == '\\')) strcpy(temp_ptr - 1, temp_ptr);
        /* Matching quote found.  Point to the very next character. */
        if(temp_ptr) end_ptr = temp_ptr + 1;
        else if (*end_ptr) end_ptr = end_ptr + 1;
        }
    end_ptr--;
    /*
     *  Look for a comma which is not 'escaped' by a backslash.
     *  Quit when one is found or when we reach the end of the string.
     */
    while((end_ptr = strchr(end_ptr + 1,',')) && (*(end_ptr - 1) == '\\'))
        /*  Close up, removing the backslash.  Ignore this comma  */
        strcpy(end_ptr - 1,end_ptr);
    if(end_ptr) *end_ptr = '\0';
    if(param_ptr = strchr(begin_ptr,'=')) {
        param_ptr++;
        strcpy(out_ptr,param_ptr);
        /*
         *  "Close up" or reterminate the input string.  If end_ptr is
         *  NULL, this is the last KEYWORD=VALUE in the -J string.
         */
        if(end_ptr)
            if(*begin_ptr == ',')
                /* Preserve the comma between KEYWORD=VALUE entries */
                strcpy(begin_ptr+1,end_ptr+1);
            else strcpy(begin_ptr,end_ptr+1);
        else *begin_ptr = '\0';
        }  /*  End if(!(param_ptr = strchr(begin_ptr,'='))) */
}
    
    Thank you!
    Al
T.RTitleUserPersonal
Name
DateLines
1375.1work in MMS 3.2EDSDS6::WANGJames - DECset EngineeringTue Feb 18 1997 15:0910
Hi Al,

Thanks for the example.

We have done a lot of works for using MMS/GENERATION in the next release of 
MMS. I have reproduced the problem with MMS 3.1-03, but the problem would not occur 
with MMS 3.2 which filed test on February 24. See Note 1374 for information.

-James