/usr/share/doc/lp-solve-doc/put_msgfunc.htm is in lp-solve-doc 5.5.0.13-7build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
	<HEAD>
		<TITLE>put_msgfunc</TITLE>
		<style TYPE="text/css"> BODY { font-family:verdana,arial,helvetica; margin:0; }
	</style>
	</HEAD>
	<BODY>
		<TABLE class="clsContainer" style="TABLE-LAYOUT: fixed" cellSpacing="0" cellPadding="15"
			width="100%" border="0">
			<TR>
				<TD vAlign="top">
					<h1>put_msgfunc</h1>
					<p>Sets a message routine.</p>
					<p><b>void put_msgfunc(lprec </b>*<i>lp</i><b>, lphandleint_func </b><i>newmsg</i><b>, void </b>*<i>msghandle</i><b>, int </b><i>mask</i><b>);</b></p>
					<p class="label"><b>Return Value</b></p>
					<p><b>put_msgfunc</b> has no return value.<br>
					</p>
					<p class="label"><b>Parameters</b></p>
					<p class="dt"><i>lp</i></p>
					<p class="indent">Pointer to previously created lp model. See return value of <A href="make_lp.htm">
							make_lp</A>, <A HREF="copy_lp.htm">copy_lp</A>, <A href="read_lp.htm">read_lp, read_LP</A>, <A href="read_mps.htm">read_mps, read_freemps, read_MPS, read_freeMPS</A>, <A HREF="read_XLI.htm">read_XLI</A></p>
					<p class="dt"><i>newmsg</i></p>
					<p class="indent">The message routine.<br>
						<br>
						typedef void (__WINAPI lphandleint_func)(lprec *lp, void *userhandle, int message);<br>
						<br>
						Note the __WINAPI attribute. This is important under Windows. It ensures __stdcall calling
						convention which is required.
					</p>
					<p class="dt"><i>msghandle</i></p>
					<p class="indent">A parameter that will be provided to the message routine.</p>
					<p class="dt"><i>mask</i></p>
					<p class="indent">Any combination of the following values:</p>
						<TABLE id="Table3" cellSpacing="1" cellPadding="1" width="100%" border="1">
							<TR>
								<TD>MSG_PRESOLVE (1)</TD>
								<TD>Presolve done.</TD>
							</TR>
							<TR>
								<TD>MSG_LPFEASIBLE (8)</TD>
								<TD>Feasible solution found.</TD>
							</TR>
							<TR>
								<TD>MSG_LPOPTIMAL (16)</TD>
								<TD>Real optimal solution found. Only fired when there are integer variables
								    at the start of B&B</TD>
							</TR>
							<TR>
								<TD>MSG_MILPEQUAL (32)</TD>
								<TD>Equal MILP solution found. Only fired when there are integer variables
								    during B&B</TD>
							</TR>
							<TR>
								<TD>
									MSG_MILPFEASIBLE (128)</TD>
								<TD>First MILPsolution found. Only fired when there are integer variables
								    during B&B</TD>
							</TR>
							<TR>
								<TD>MSG_MILPBETTER (512)</TD>
								<TD>Better MILPsolution found. Only fired when there are integer variables
								    during B&B</TD>
							</TR>
						</TABLE>
					<p class="label"><b>Remarks</b></p>
					<p>The <b>put_msgfunc</b> function sets a message routine. This routine is called
						when a situation specified in <i>mask</i> occurs. Note that this routine is
						called while solving the model. This can be useful to follow the solving progress.
					</p>
					<p class="label"><b>Example</b></p>
					<pre><code>#include <stdio.h>
#include <stdlib.h>
#include "lp_lib.h"
void __WINAPI msgfunction(lprec *lp, void *userhandle, int msg)
{
 switch(msg) {
 case MSG_LPFEASIBLE:
  printf("Feasible solution found\n");
  break;
 case MSG_MILPFEASIBLE:
  printf("Integer feasible solution found\n");
  break;
 case MSG_MILPBETTER:
  printf("Better integer feasible solution found\n");
  break;
 }
}
int main(void)
{
  lprec *lp;
  /* Create a new LP model */
  lp = make_lp(0, 0);
  if(lp == NULL) {
    fprintf(stderr, "Unable to create new LP model\n");
    return(1);
  }
  put_msgfunc(lp, msgfunction, NULL, MSG_LPFEASIBLE | MSG_MILPFEASIBLE | MSG_MILPBETTER);
  delete_lp(lp);
  return(0);
}
</code></pre>
					<p>
						<A HREF="lp_solveAPIreference.htm">lp_solve API reference</A></p>
					<p>
						<b>See Also</b> <A HREF="make_lp.htm">make_lp</A>, <A HREF="copy_lp.htm">copy_lp</A>, <A HREF="copy_lp.htm">copy_lp</A>, <A href="read_lp.htm">read_lp,
							read_LP</A>, <A HREF="read_mps.htm">
							read_mps, read_freemps, read_MPS, read_freeMPS</A>, <A HREF="read_XLI.htm">read_XLI</A>, <A HREF="put_abortfunc.htm">put_abortfunc</A></p>
				</TD>
			</TR>
		</TABLE>
	</BODY>
</html>
 |