| 1 | #if CICPP |
|---|
| 2 | int RECSTRU :: mainfile(int cmd, char *filnamp, int parm0, int parm1, char *buffer, int buffersize) |
|---|
| 3 | #else /* CICPP */ |
|---|
| 4 | |
|---|
| 5 | int mainfile(int cmd, char *filnamp, int parm0, int parm1, char *buffer, int buffersize); |
|---|
| 6 | |
|---|
| 7 | int |
|---|
| 8 | mainfile(int cmd, |
|---|
| 9 | char *filnamp, /* HEAD|GET /docpath HTTP/1.0\n\n */ |
|---|
| 10 | int parm0, |
|---|
| 11 | int parm1, |
|---|
| 12 | char *buffer, /* results */ |
|---|
| 13 | int buffersize /* max size */ |
|---|
| 14 | ) |
|---|
| 15 | #endif /* CICPP */ |
|---|
| 16 | { |
|---|
| 17 | int hlen=0; |
|---|
| 18 | char *q=buffer; |
|---|
| 19 | LONGX nread; |
|---|
| 20 | |
|---|
| 21 | if (cmd >= 1) fprintf(stdout, "<message>%s</message><crstrip>%d</crstrip><lfstrip>%d</lfstrip>\n",filnamp,parm0,parm1); |
|---|
| 22 | |
|---|
| 23 | if (filnamp) { |
|---|
| 24 | int fd; |
|---|
| 25 | dbxopt_fatal=0; fd=dbxopen(NULL/*gidbnp*/,filnamp,""); |
|---|
| 26 | if (fd <= 0) hlen=(-1); /*fatal("fldupdat/procx/Gload/open");*/ |
|---|
| 27 | else { |
|---|
| 28 | nread=CIREAD(fd,buffer,buffersize-1); |
|---|
| 29 | CLOSE(fd); |
|---|
| 30 | if (nread > 0L) { |
|---|
| 31 | q+=nread; hlen+=nread; |
|---|
| 32 | } |
|---|
| 33 | if (parm0) if (nread > 0L) { |
|---|
| 34 | LONGX left=nread; |
|---|
| 35 | int found=0; |
|---|
| 36 | char *x,*y; |
|---|
| 37 | for (x=y=buffer; left; left--, x++) |
|---|
| 38 | if (*x=='\r') { found=1; hlen--; q--; } |
|---|
| 39 | else { if (found) *y= *x; y++; } |
|---|
| 40 | } |
|---|
| 41 | if (parm1) if (nread > 0L) { |
|---|
| 42 | LONGX left=nread; |
|---|
| 43 | int found=0; |
|---|
| 44 | char *x,*y; |
|---|
| 45 | for (x=y=buffer; left; left--, x++) |
|---|
| 46 | if (*x=='\n') { found=1; hlen--; q--; } |
|---|
| 47 | else { if (found) *y= *x; y++; } |
|---|
| 48 | } |
|---|
| 49 | } |
|---|
| 50 | } |
|---|
| 51 | else { |
|---|
| 52 | LONGX left=buffersize-1; |
|---|
| 53 | #if USEFGETS /* fgets looses last char if LF is missing in last line */ |
|---|
| 54 | int nread=(left>INT_MAX)?INT_MAX:left; |
|---|
| 55 | char *linep; |
|---|
| 56 | while ((linep=fgets(q,nread,stdin)) != NULL) { |
|---|
| 57 | int nread=strlen(linep); |
|---|
| 58 | if (parm1) if (nread) if (linep[nread-1]=='\n') nread--; |
|---|
| 59 | q+=nread; hlen+=nread; left-=nread; |
|---|
| 60 | } |
|---|
| 61 | #else /* getchar() */ |
|---|
| 62 | int c; |
|---|
| 63 | int nread; |
|---|
| 64 | while (left && (c=getchar()) != EOF) { |
|---|
| 65 | nread=1; |
|---|
| 66 | if (parm1) if ((char)c=='\n') nread=0; |
|---|
| 67 | if (nread) { *q++=(unsigned char)c; hlen++; left--; } |
|---|
| 68 | } |
|---|
| 69 | #endif |
|---|
| 70 | } |
|---|
| 71 | |
|---|
| 72 | *q='\0'; |
|---|
| 73 | |
|---|
| 74 | if (cmd == 3) fprintf (stderr, "File: got data(%d): '%s'\n", (int)hlen, buffer); |
|---|
| 75 | if (cmd == 2) fprintf (stderr, "File: got data(%d) \n", (int)hlen); |
|---|
| 76 | |
|---|
| 77 | if (cmd >= 1) fprintf(stdout, "<content>%s</content>\n",buffer); |
|---|
| 78 | |
|---|
| 79 | return hlen; |
|---|
| 80 | |
|---|
| 81 | } |
|---|