ADMB Documentation  -a65f1c97
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
model33.cpp
Go to the documentation of this file.
1 /*
2  * $Id$
3  *
4  * Author: David Fournier
5  * Copyright (c) 2008-2012 Regents of the University of California
6  */
7 #include <admodel.h>
8 
10 {
18  {
21  }
22 
24  {
27  }
28 
30  {
33  }
34 }
35 
36 void parse_dll_options(char *pname, const int& _nopt, char *sp_options,
37  char *** pargv)
38 {
39  int& nopt=(int&) _nopt;
40  nopt=1;
41  char ** a=*pargv;
42  char * p=NULL;
43  if (strlen(sp_options))
44  {
45  size_t string_size = (strlen(sp_options)+5)*sizeof(char);
46  //int string_size= (strlen(sp_options)+1)*sizeof(char);
47  p = (char *) malloc(string_size);
48  char * ptmp=NULL;
49  strcpy(p,sp_options);
50  ptmp = strtok(p," ");
51  if (ptmp) nopt++;
52  //ssbul_l(ptmp);
53  do
54  {
55  ptmp = strtok(NULL, " ");
56  if (ptmp) nopt++;
57  }
58  while(ptmp);
59 
60  //a=(char **)malloc((nopt+5)*sizeof(char *));
61  //for (int k=0;k<=nopt;k++) a[k]=NULL;
62  nopt=1;
63  strcpy(p,sp_options);
64  ptmp = strtok(p," ");
65  if (ptmp)
66  {
67  //a[nopt]=(char *)malloc((strlen(ptmp)+5)*sizeof(char));
68  strcpy(a[nopt++],ptmp);
69  }
70 
71  do
72  {
73  ptmp = strtok(NULL, " ");
74  if (ptmp)
75  {
76  //a[nopt]=(char *)malloc((strlen(ptmp)+5)*sizeof(char));
77  strcpy(a[nopt++],ptmp);
78  }
79  }
80  while(ptmp);
81 
82  if (p)
83  {
84  free(p);
85  p=NULL;
86  }
87  }
88 /*
89  else
90  {
91  //a=(char **)malloc((nopt+5)*sizeof(char *));
92  //a[nopt]=NULL;
93  }
94 */
95  //a[0]=(char *)malloc((strlen(pname)+10)*sizeof(char));
96  strcpy(a[0],pname);
97 #ifdef _WIN32
98  strcat(a[0],".exe");
99 #endif
100  //return a;
101 }
102 
103 char** no_dll_options(char *pname, const int& _nopt)
104 {
105  int& nopt=(int&) _nopt;
106  nopt=1;
107  unsigned int nopt2 = 2;
108  char** a = (char**)malloc(nopt2 * sizeof(char*));
109  if (a)
110  {
111  a[nopt] = NULL;
112  a[0] = (char*)malloc((strlen(pname)+5)*sizeof(char));
113  if (a[0])
114  {
115  strcpy(a[0],pname);
116 #ifdef _WIN32
117  strcat(a[0],".exe");
118 #endif
119  }
120  }
121  return a;
122 }
123 
124 void cleanup_argv(int nopt,char *** pa)
125 {
126  if (pa)
127  {
128  char **a=*pa;
129  if (a)
130  {
131  for (int i=0;i<=nopt;i++)
132  {
133  if (a[i])
134  {
135  free(a[i]);
136  }
137  }
138  free(a);
139  a=NULL;
140  }
141  }
142 }
143 
144 #if defined(_WIN32)
145  #include <windows.h>
146 #endif
147 
148  #if !defined(_MSC_VER)
149 void get_sp_printf(void)
150 {
151 /*
152  HINSTANCE h=LoadLibrary("sqpe.dll");
153  if(h)
154  ad_printf= (fptr) GetProcAddress(h,"S_newio_printf");
155 */
156 }
157  #endif
158 
159 void do_dll_housekeeping(int argc,char ** argv)
160 {
161 #if !defined(_MSC_VER)
162  int on = option_match(argc,argv,"-sp");
163  if (on > -1)
164  {
165  #if defined(_WIN32)
166  get_sp_printf();
167  #endif
169  }
170  else if ( (on=option_match(argc,argv,"-spexit"))>-1)
171  {
173  }
174  else
175  {
176  ad_exit=exit;
177  }
178 #else
179  ad_exit=exit;
180 
181 #endif
182 }
183 
184 /*
185 void ssbul_l(char * ptmp){;}
186 char ** parse_dll_options(char * pname, const int& _nopt,char * sp_options)
187 {
188  int& nopt=(int&) _nopt;
189  nopt=1;
190  char ** a;
191 
192  a=(char**)malloc(61);
193  for (int i=0;i<60;i++)
194  {
195  a[i]=(char*)malloc(101*sizeof(char*));
196  }
197 
198  char * p=NULL;
199  if (strlen(sp_options))
200  {
201  int string_size= (strlen(sp_options)+5)*sizeof(char);
202  //int string_size= (strlen(sp_options)+1)*sizeof(char);
203  p = (char *) malloc(string_size);
204  char * ptmp=NULL;
205  strcpy(p,sp_options);
206  ptmp = strtok(p," ");
207  if (ptmp) nopt++;
208  ssbul_l(ptmp);
209  do
210  {
211  ptmp=strtok('\0'," ");
212  if (ptmp) nopt++;
213  }
214  while(ptmp);
215 
216  //a=(char **)malloc((nopt+5)*sizeof(char *));
217  //for (int k=0;k<=nopt;k++) a[k]=NULL;
218  nopt=1;
219  strcpy(p,sp_options);
220  ptmp = strtok(p," ");
221  if (ptmp)
222  {
223  //a[nopt]=(char *)malloc((strlen(ptmp)+5)*sizeof(char));
224  strncpy(a[nopt++],ptmp,99);
225  }
226  do
227  {
228  ptmp=strtok('\0'," ");
229  if (ptmp)
230  {
231  //a[nopt]=(char *)malloc((strlen(ptmp)+5)*sizeof(char));
232  strncpy(a[nopt++],ptmp,99);
233  }
234  if (nopt>59)
235  {
236  cerr << "too many command line options in parse command line options" << endl;
237  ad_exit(1);
238  }
239  }
240  while(ptmp);
241  delete p;
242  p=NULL;
243  }
244  else
245  {
246  //a=(char **)malloc((nopt+5)*sizeof(char *));
247  //a[nopt]=NULL;
248  }
249  //a[0]=(char *)malloc((strlen(pname)+10)*sizeof(char));
250  strncpy(a[0],pname,99);
251  strncat(a[0],".exe",99-strlen(a[0]));
252  return a;
253 }
254 */
255 /*
256 class string_parser
257 {
258  char * str;
259  char * nt;
260  char * ct;
261  string_parser(char * s,int n);
262 };
263 
264 string_parser::string_parser(char * s,int n)
265 {
266  if (strlen(s)>n)
267  {
268  cerr "string too long in string_parser" << endl;
269  ad_exit(1);
270  }
271 
272  str=new char[strlen(s+20];
273  strcpy(str,s);
274 
275  ct=str;
276 
277  while (ct==' ')
278  {
279  ct++;
280  }
281 
282  nt=ct;
283 
284  int ii=0;
285  while (nt != ' ' && nt != '\0')
286  {
287  nt++;
288  ii++;
289  }
290  nlen=ii;
291 
292  while (nt==' ')
293  {
294  nt++;
295  }
296 }
297 
298 char * string_parser::get_next_option(int & n)
299 {
300  n=nlen;
301  char * rs=ct;
302 
303  if (nlen!=0)
304  {
305  ct=nt;
306  int ii=0;
307  while (nt != ' ' && nt != '\0')
308  {
309  nt++;
310  ii++;
311  }
312  nlen=ii;
313 
314  while (nt==' ')
315  {
316  nt++;
317  }
318  }
319  return rs;
320 }
321 
322 char** parse_dll_options(char *pname, const int& _nopt, char *sp_options)
323 {
324  int& nopt=(int&) _nopt;
325  nopt=1;
326  char ** a;
327 
328  a=(char**)malloc(61);
329  for (int i=0;i<60;i++)
330  {
331  a[i]=(char*)malloc(101*sizeof(char*));
332  }
333  do
334  {
335  s=get_next_option(sp,n);
336  if(n==0) break;
337  strncpy(a[ii++],sp,100);
338  }
339  while(1);
340 
341 
342 
343  strncpy(a[0],pname,99);
344  strncat(a[0],".exe",99-strlen(a[0]));
345  strncpy(a[1],"-maxfn",99);
346  nopt=2;
347  return a;
348 }
349 */
351 {
352  char * str;
353  char * nt;
354  char * ct;
355  size_t nlen;
356 public:
357  string_parser(char* s, const size_t n);
358  ~string_parser();
359 
360  char* get_next_option(size_t& n);
361 };
362 
363 string_parser::string_parser(char * s, const size_t n)
364 {
365  if (strlen(s) > n)
366  {
367  cerr << "string too long in string_parser" << endl;
368  ad_exit(1);
369  }
370 
371  str=new char[strlen(s)+20];
372  strcpy(str,s);
373 
374  ct=str;
375 
376  while (*ct==' ')
377  {
378  ct++;
379  }
380 
381  nt=ct;
382 
383  size_t ii=0;
384  while (*nt != ' ' && *nt != '\0')
385  {
386  nt++;
387  ii++;
388  }
389  nlen=ii;
390 
391  while (*nt==' ')
392  {
393  nt++;
394  }
395 }
400 {
401  if (str != NULL)
402  {
403  delete [] str;
404  str = NULL;
405  }
406  nt = NULL;
407  ct = NULL;
408  nlen = 0;
409 }
410 
412 {
413  n=nlen;
414 
415  char * rt=ct;
416  if (nlen!=0)
417  {
418  ct=nt;
419  size_t ii=0;
420  while (*nt != ' ' && *nt != '\0')
421  {
422  nt++;
423  ii++;
424  }
425  nlen=ii;
426 
427  while (*nt==' ')
428  {
429  nt++;
430  }
431  }
432  return rt;
433 }
434 
435 typedef char * chararray;
436 
437 void davesnobullshitstrncpy(char * a,const char * b, const size_t n)
438 {
439  strncpy(a,b,n);
440  a[n]=0;
441 }
442 
443 char** parse_dll_options(char *pname, const int& _argc, char *s)
444 {
445  const int maxargs=200;
446  char** a = (char**)malloc(sizeof(char*)*(maxargs+2));
447  if (a)
448  {
449  int& argc=(int&)(_argc);
450  for (int i=0;i<=maxargs;i++)
451  {
452  a[i]=0;
453  }
454  string_parser sp(s,1000);
455 
456  size_t n=0;
457  int ii=1;
458  do
459  {
460  char * ss=sp.get_next_option(n);
461  if (n>0)
462  {
463  if (ii>maxargs)
464  {
465  cerr << "maximum number of command line arguments exceeded"
466  << endl;
467  }
468  a[ii]=(char*)malloc(sizeof(char)*(n+2));
469  davesnobullshitstrncpy(a[ii],ss,n);
470  cout << a[ii] << endl;
471  ii++;
472  }
473  } while (n > 0);
474  a[0]=(char*)malloc(sizeof(char)*(strlen(pname)+6));
475  if (a[0])
476  {
477  strcpy(a[0],pname);
478 #ifdef _WIN32
479  strcat(a[0],".exe");
480 #endif
481  argc=ii;
482  }
483  }
484  return a;
485 }
char ** no_dll_options(char *pname, const int &argc)
Definition: model33.cpp:103
char * chararray
Definition: model33.cpp:435
size_t nlen
Definition: model33.cpp:355
static int sd_phase
Definition: admodel.h:844
void get_sp_printf(void)
Definition: model33.cpp:149
static uistream * global_bparfile
Definition: fvar.hpp:8859
char ** parse_dll_options(char *pname, const int &argc, char *dll_options)
Definition: model33.cpp:443
exitptr ad_exit
Definition: gradstrc.cpp:53
void do_dll_housekeeping(int argc, char **argv)
Definition: model33.cpp:159
prnstream & endl(prnstream &)
Description not yet available.
void cleanup_argv(int nopt, char ***pa)
Definition: model33.cpp:124
void davesnobullshitstrncpy(char *a, const char *b, const size_t n)
Definition: model33.cpp:437
char * str
Definition: model33.cpp:352
static int num_initial_params
Definition: admodel.h:836
static cifstream * global_datafile
Definition: fvar.hpp:8856
int option_match(int argc, char *argv[], const char *string)
Checks if the program has been invoked with a particular command line argument (&quot;string&quot;).
Definition: optmatch.cpp:25
static int mceval_phase
Definition: admodel.h:847
static cifstream * global_parfile
Definition: fvar.hpp:8857
static int mc_phase
Definition: admodel.h:846
string_parser(char *s, const size_t n)
Definition: model33.cpp:363
char * get_next_option(size_t &n)
Definition: model33.cpp:411
void spdll_exit(int)
Definition: gradstrc.cpp:55
~string_parser()
Destructor.
Definition: model33.cpp:399
static int num_stddev_params
Definition: admodel.h:2219
void ad_make_code_reentrant(void)
Definition: model33.cpp:9
static int num_likeprof_params
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: admodel.h:2259