59 if(s==NULL || strlen(s)<2 || s[0]!=
'-')
return 1;
64 cptr++;
if(strlen(cptr)<1)
return 1;
65 if(strcasecmp(cptr,
"help")==0) {*print_usage=1;
return 0;}
66 if(strcasecmp(cptr,
"helphtml")==0) {*print_usage=2;
return 0;}
67 if(strcasecmp(cptr,
"version")==0) {*print_version=1;
return 0;}
68 if(strcasecmp(cptr,
"build")==0) {*print_version=1;
return 0;}
69 if(strcasecmp(cptr,
"debug")==0) {*verbose_level+=1;
return 0;}
70 if(strcasecmp(cptr,
"verbose")==0) {*verbose_level+=1;
return 0;}
71 if(strncasecmp(cptr,
"debug=", 6)==0) {
72 if(!isdigit(cptr[6]))
return 1;
73 n=atoi(cptr+6); *verbose_level+=n;
return 0;
75 if(strncasecmp(cptr,
"verbose=", 8)==0) {
76 if(!isdigit(cptr[8]))
return 1;
77 n=atoi(cptr+8); *verbose_level+=n;
return 0;
79 if(strcasecmp(cptr,
"quiet")==0) {*verbose_level=0;
return 0;}
80 if(strcasecmp(cptr,
"silent")==0) {*verbose_level=-1;
return 0;}
84 if(strcmp(cptr,
"h")==0) {*print_usage=1;
return 0;}
85 if(strcasecmp(cptr,
"v")==0) {*print_version=1;
return 0;}
86 if(strcmp(cptr,
"d")==0) {*verbose_level+=1;
return 0;}
87 if(strncmp(cptr,
"d", 1)==0 && strlen(cptr)>1) {
88 if(!isdigit(cptr[1]))
return 1;
89 n=atoi(cptr+1); *verbose_level+=n;
return 0;
91 if(strcmp(cptr,
"q")==0) {*verbose_level=0;
return 0;}
92 if(strcmp(cptr,
"s")==0) {*verbose_level=-1;
return 0;}
116 if(prname==NULL || n<1)
return;
120 if(strlen(program)>0) tmp=strdup(program);
else tmp=strdup(
"unknown");
123 n-=strlen(tmp);
if(n>0) strcpy(prname, tmp);
else {free(tmp);
return;}
130 sprintf(v,
"%d.%d.%d", tpcclib_VERSION_MAJOR, tpcclib_VERSION_MINOR, tpcclib_VERSION_PATCH);
133 n-=strlen(v);
if(n>0) {strcat(prname,
" "); strcat(prname, v);}
140 n-=strlen(tpcclib_COPYRIGHT);
141 if(n>0) {strcat(prname,
" "); strcat(prname, tpcclib_COPYRIGHT);}
167 char *cptr, *bprogram;
170 if(strlen(program)>0) bprogram=strdup(program);
171 else bprogram=strdup(
"unknown");
173 fprintf(fp,
"\n %s - tpcclib %d.%d.%d %s\n \n", bprogram,
174 tpcclib_VERSION_MAJOR, tpcclib_VERSION_MINOR, tpcclib_VERSION_PATCH,
177 i=0;
while(text[i]!=0) {
180 if(strstr(text[i],
"stdoptions")) {
182 while(tpcstdoptions[j]!=0) fprintf(fp,
" %s\n", tpcstdoptions[j++]);
186 cptr=strstr(text[i],
" @P ");
187 if(cptr==NULL) {fprintf(fp,
" %s\n", text[i++]);
continue;}
189 char *s; s=strdup(text[i]);
190 s[strlen(text[i])-strlen(cptr)]=(char)0;
191 fprintf(fp,
" %s %s %s\n", s, bprogram, cptr+4);
196 i=0;
while(tpclicense[i]!=0) fprintf(fp,
" %s\n", tpclicense[i++]);
221 unsigned int len, i, j;
222 char *bprogram, *fname, *cptr, *line;
225 if(program==NULL || text==NULL ||
strnlen(program, 1)<1)
return 1;
228 bprogram=strdup(program);
232 fname=calloc(strlen(path)+1+strlen(bprogram)+5,
sizeof(
char));
233 if(fname==NULL) {free(bprogram);
return 1;}
234 strcpy(fname, path); len=strlen(fname);
235 if(len>0 && (fname[len-1]==
'/' || fname[len-1]==
'\\')) fname[len-1]=(char)0;
236 len=strlen(fname);
if(len>0) strcat(fname,
"/");
237 strcat(fname, bprogram); strcat(fname,
".html");
245 len=fprintf(fp,
"<!DOCTYPE html>\n");
246 if(len<10) {free(bprogram); free(fname);
return 2;}
247 fprintf(fp,
"<html lang=\"en-GB\">\n");
248 fprintf(fp,
"<head>\n");
249 fprintf(fp,
" <meta charset=\"utf-8\">\n");
250 fprintf(fp,
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n");
251 fprintf(fp,
" <title>%s</title>\n", bprogram);
252 fprintf(fp,
" <style type=\"text/css\">\n");
253 fprintf(fp,
" body {\n");
254 fprintf(fp,
" margin-left: 2em;\n");
255 fprintf(fp,
" font-family: monospace;\n");
256 fprintf(fp,
" font-size: 1em;\n");
258 fprintf(fp,
" h1 {\n");
259 fprintf(fp,
" font-size: 1.3em;\n");
260 fprintf(fp,
" margin-top: 1em;\n");
261 fprintf(fp,
" margin-bottom: 1em;\n");
263 fprintf(fp,
" footer {\n");
264 fprintf(fp,
" border:1px solid gray;\n");
265 fprintf(fp,
" font-size: 0.8em;\n");
267 fprintf(fp,
" footer p {margin-left: 1em;}\n");
268 fprintf(fp,
" </style>\n");
269 fprintf(fp,
"</head>\n\n");
272 fprintf(fp,
"<body>\n");
276 fprintf(fp,
"<h1>%s - tpcclib %d.%d.%d ", bprogram, tpcclib_VERSION_MAJOR,
277 tpcclib_VERSION_MINOR, tpcclib_VERSION_PATCH);
278 line=tpcclib_COPYRIGHT; len=strlen(line);
279 for(j=0; j<len; j++) {
280 if(strncasecmp(line+j,
"(C)", 3)==0) {fputs(
"©", fp); j+=2;
continue;}
283 fputs(
"</h1>\n\n", fp);
286 fprintf(fp,
"<pre>\n");
287 i=0;
while(text[i]!=0) {
291 if(strstr(line,
"stdoptions")) {
293 while(tpcstdoptions[j]!=0) fprintf(fp,
"%s\n", tpcstdoptions[j++]);
298 if(strstr(line,
"See also: ")!=NULL) {
300 j=0;
while(line[j]!=
'\0') {
302 j++;
if(line[j-1]==
':')
break;
305 char *tline;
unsigned int n=0;
306 tline=strdup(line+j); cptr=strtok(tline,
", :;\t\n\r");
308 if(n>0) fputc(
',', fp);
309 fprintf(fp,
" <a href=\"./%s.html\">%s</a>", cptr, cptr);
310 cptr=strtok(NULL,
", :;\t\n\r");
320 len=strlen(line); j=0;
324 if(strncasecmp(line+j,
"https://", 7)==0) {
326 cptr=line+j; len=strcspn(cptr,
" ),;");
327 fputs(
"<a href=\"", fp);
328 for(li=0; li<len; li++) fputc(line[j+li], fp);
330 for(li=0; li<len; li++) fputc(line[j+li], fp);
336 if(strncmp(line+j,
" @P ", 4)==0) {
337 fprintf(fp,
" %s ", bprogram);
341 if(strncasecmp(line+j,
"(C)", 3)==0) {
347 if(line[j]==
'<') {fputs(
"<", fp); j++;
continue;}
348 if(line[j]==
'>') {fputs(
">", fp); j++;
continue;}
349 if(line[j]==
'&') {fputs(
"&", fp); j++;
continue;}
352 fputc(line[j], fp); j++;
358 fprintf(fp,
"</pre>\n");
361 fprintf(fp,
"\n<footer>\n");
363 i=0;
while(tpclicense4html[i]!=0) fprintf(fp,
"%s<br>\n", tpclicense4html[i++]);
364 fprintf(fp,
"</p>\n");
365 fprintf(fp,
"</footer>\n");
368 fprintf(fp,
"</body>\n");
369 fprintf(fp,
"</html>\n");
372 free(bprogram); free(fname);