static void dlseterror_from_exception(volatile _INTRPT_Hndlr_Parms_T * excp) { int i; Qmh_Rtvm_RTVM0300_t * imp; char * cp; _INTRPT_Hndlr_Parms_T * p; dlts_t * q; char rtvmbuf[30000]; Qus_EC_t errinfo; p = (_INTRPT_Hndlr_Parms_T *) excp; errinfo.Bytes_Provided = 0; /* Exception on error. */ QMHRTVM(rtvmbuf, sizeof rtvmbuf, "RTVM0300", p->Msg_Id, "QCPFMSG QSYS ", p->Ex_Data, p->Msg_Data_Len, "*YES ", "*NO ", &errinfo); imp = offset_by(Qmh_Rtvm_RTVM0300_t, rtvmbuf, 0); if (!(dlflags & MULTIBUF)) q = &static_buf; else if (!(q = (dlts_t *) pthread_getspecific(dlkey))) q = &static_buf; if (i = imp->Length_Message_Returned) cp = offset_by(char, imp, imp->Offset_Message_Returned); else if (i = imp->Length_Help_Returned)
bool localMsg(char * msgId , XMLCh* const toFill , const unsigned int maxChars , char* repTexts , int size) { typedef _Packed struct { Qmh_Rtvm_RTVM0100_t mdata; /* Basic Message Data */ char mtext[1024]; /* Kind of arbitrary, enough? */ } MyMessage_t; /* Information about the message that we're going to retrieve */ char msgformat[9] = "RTVM0100"; char msgfile[21] = "QXMLMSG *LIBL "; char *msgsubstdta = repTexts; // ?? int msgsubstlen = 0; if(repTexts) msgsubstlen = size; //strlen(repTexts); // ?? char msgsubst[11] = "*YES "; char msgfmtctl[11] = "*NO "; Qus_EC_t errorcode; MyMessage_t message; /* message we'll retrieve */ memset(&errorcode, 0, sizeof(errorcode)); /* Clear the error area */ errorcode.Bytes_Provided = sizeof(errorcode);/* Init the error code */ memset(&message, 0, sizeof(message.mdata)); /* Clear the message area */ message.mtext[0]='\0'; /* Null Text String */ int len = sizeof(message); for(int i = 0; i < 1024; i++) message.mtext[i] = '\0'; QMHRTVM( &message, len, msgformat, msgId, msgfile, msgsubstdta, msgsubstlen, msgsubst, msgfmtctl, &errorcode); /*, "*MSGID ", 1200, 1200); */ /* The error message should now be stored in message.mtext */ /* with the CCSID 1200 */ // char msgString[100]; // char* catMessage = catgets( fCatalogHandle, msgSet, (int)msgToLoad, msgString); XMLString::transcode(message.mtext, toFill, maxChars); return true; }