#include <stdio.h>
#include "lp.h"

#define d 2  
void main()
{
  double halves[10][d+1];
  double n_vec[d+1], d_vec[d+1], opt[d+1];
  int m /* d */ ;
  double work[300];
  int istart;
  int next[10], prev[10], max_size;
  int i;
  int status;

  /* ??? */
  halves[0][0] = 0;
  halves[0][1] = 0;
  halves[0][2] = 1;

  /* x1 > 0 */
  halves[1][0] = 1;
  halves[1][1] = 0;
  halves[1][2] = 0;

  /* x1 < 3 */
  halves[2][0] = -1;
  halves[2][1] = 0;
  halves[2][2] = 3;

  /* x2 > 0 */
  halves[3][0] = 0;
  halves[3][1] = 1;
  halves[3][2] = 0;

  /* x2 < 4 */
  halves[4][0] = 0;
  halves[4][1] = -1;
  halves[4][2] = 4;

  /* x1 + x2 < 5 */
  halves[5][0] = -1;
  halves[5][1] = -1;
  halves[5][2] = 5;

  m = 6;
  istart = 0;
  max_size = 10;

  for (i = 0; i < 10; i++) {
    next[i] = i + 1;
    prev[i] = i - 1;
  }

  for (i = 0; i < d; i++) d_vec[i] = 0;
  d_vec[d] = 1;

  n_vec[0] = -1;
  n_vec[1] = -2;
  n_vec[d] = 0;

  printf("calling linProg...\n");
  status = linprog(halves,istart,m,n_vec,d_vec,d,opt,work,next,prev,max_size);

  printf("status = %d\n", status);
  switch(status) {
  case INFEASIBLE:
    (void)printf("no feasible solution\n");
    break;
  case MINIMUM:
    (void)printf("minimum attained at\n");
    break;
  case UNBOUNDED:
    (void)printf("region is unbounded: last vertex is\n");
    break;
  case AMBIGUOUS:
    (void)printf("region is bounded by plane orthogonal\n");
    (void)printf("to minimization vector: one vertex is\n");
    break;
  default:
    (void)printf("unknown case returned from linprog\n");
  }

  for (i = 0; i < d + 1; i++) printf("%d %f\n", i, opt[i]/opt[d]);
}

