• C

Anything similar to Perl's qq or "here document" available for CGIs written in C?

I am new to writing CGIs in C, and wonder if there is anything available similar to Perl's qq or "here document" so that I don't have to printf every single line separately and escape all of the double quotes - especially when I have a block of html to output.  I could make every block of html a file and read it in, but that gets messy and I would much rather have a single CGI program.  Is there any nice way to do this in C?  If not, any suggestions for something better than the printf method I described are much appreciated.

#!/bin/perl

print qq{
<html>
<font color="red"><b>Isn't there some way to do this in C?</b></font>
</html>
};

print <<endofmultilinetext
<html>
<font color="yellow"><b>Or this?</b></font>
</html>
endofmultilinetext

LVL 3
nickswanjanAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Kent OlsenDBACommented:

Sorry.  C is still in the dark ages here.

If the contents of the html are static the "copy a file" method really isn't too bad.  Within your program you can just:

  system ("cp HtmlFilePath");

It's pretty easy and straight-forward.

Kent
Kent OlsenDBACommented:

Then again, a very small C program will convert your source to C source strings.


#include <stdlib.h>
#include <stdio.h>


char Buffer[1000];

main ()
{
  char *bp;

  while (fgets (Buffer, 1000, stdin) != EOF)
  {
    fputs (stdout, "  \"");
    for (bp = Buffer; *bp; bp++)
    {
      switch (*bp)
      {
        case '\n':
          break;   /*  disregard new line chars  */

        case '\\':  /*  Escape problematic characters  */
        case '\'':
        case '\"':
          fputc ('\'', stdout);
        default:
          fputc (*bp, stdout);
    }
    fputs (stdout, "\"\n");
  }
}

File A:

<html>
<font color="red"><b>Isn't there some way to do this in C?</b></font>
</html>

convert < A > B

  "<html>"
  "<font color=\"red\"><b>Isn't there some way to do this in C?</b></font>"
  "</html>"


Suitable for including in a C source file.

Kent

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
nickswanjanAuthor Commented:
Not as clean as I would like, but the file conversion looks like a decent workaround - I can even make it put in the printf syntax as well.  What is the maximum line length though?  Sometimes individual html lines can get pretty long (I will qq several pages).  Although I suppose I could chop all lines at 75 characters or so using the same translation method...
Kent OlsenDBACommented:


C doesn't impose line length limits in the C source file or in its I/O.  The only limit that you might encounter is string length.  16-bit systems usually limit strings to 65K.

The file conversion approach can actually be made quite attractive.  Generate each page into its own file as the string returned by the convert program.  Then your source could look like this:

char *HtmlMainPage  =
#include <Htmlmainpage.c>
;

char *HtmlLoginPage =
#include <Htmlloginpage.c>
;



Good Luck!
Kent
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.