XSLPsetcbmessage
XSLPsetcbmessage |
Purpose
Set a user callback to be called whenever Xpress NonLinear outputs a line of text
Synopsis
int XPRS_CC XSLPsetcbmessage(XSLPprob Prob, void (XPRS_CC *UserFunc) (XSLPprob myProb, void *myObject, char *msg, int len, int msgtype), void *Object);
Arguments
Prob
|
The current SLP problem.
|
||||||
UserFunc
|
The function to be called whenever Xpress NonLinear outputs a line of text.
UserFunc does not return a value.
|
||||||
myProb
|
The problem passed to the callback function.
|
||||||
myObject
|
The user-defined object passed as
Object to
XSLPsetcbmessage.
|
||||||
msg
|
Character buffer holding the string to be output.
|
||||||
len
|
Length in characters of
msg excluding the null terminator.
|
||||||
msgtype
|
Type of message. The following are system-defined:
A negative value indicates that the Optimizer is about to finish and any buffers should be flushed at this time. User-defined values are also possible for msgtype which can be passed using XSLPprintmsg |
||||||
Object
|
Address of a user-defined object, which can be used for any purpose by the function.
Object is passed to
UserFunc as
myObject.
|
Example
The following example creates a log file into which all messages are placed. System messages are also printed on standard output:
FILE *logfile; logfile = fopen("myLog","w"); XSLPsetcbmessage(Prob, CBMessage, logfile);
A suitable callback function could resemble the following:
void XPRS_CC CBMessage(XSLPprob Prob, void *Obj, char *msg, int len, int msgtype) { FILE *logfile; logfile = (FILE *) Obj; if (msgtype < 0) { fflush(stdout); if (logfile) fflush(logfile); return; } switch (msgtype) { case 1: /* information */ case 3: /* warning */ case 4: /* error */ printf("%s\n",msg); default: /* user */ if (logfile) fprintf(logfile,"%s\n",msg); break; } return; }
Further information
If a user message callback is defined then screen output is automatically disabled.
Output can be directed into a log file by using XSLPsetlogfile.
Related topics