qDecoder On-line Reference

   * ϰ ġ  
        o Ű ϱ
        o  Ǯ
        o 
        o ġ
        o 
        o ׽Ʈ
        o Microsoft Visual C++ ȯ濡 

   * ȭ  Լ
        o qContentType()
        o qPrintf()
        o qPuts()
        o qError()
        o qErrorLog()
        o qErrorContact()
        o qRedirect()

   *   Լ
        o qDecoder()
        o qValue()
        o qiValue()
        o qValueDefault()
        o qValueNotEmpty()
        o qValueReplace()
        o qValueFirst()
        o qValueNext()
        o qGetFirstEntry()
        o qPrint()
        o qFree()

   * Ű(cookie)  Լ
        o qSetCookie()
        o qcDecoder()
        o qcValue()
        o qciValue()
        o qcPrint()
        o qcFree()

   * ڿ  Լ
        o qURLencode()
        o qURLdecode()
        o qRemoveSpace()
        o qStr09AZaz()
        o qStrupr()
        o qStristr()
        o qStricmp()
        o qitocomma()
        o qStrReplace()

   * ˻  Լ
        o qArgMake()
        o qArgMatch()
        o qArgEmprint()
        o qArgPrint()
        o qArgFree()

   *   Լ
        o qCheckFile()
        o qCatFile()
        o qReadFile()
        o qSaveStr()
        o qfGetLine()
        o qFileSize()

   * ȭ   ٷ Լ
        o qfDecoder()
        o qfValue()
        o qfiValue()
        o qfPrint()
        o qfFree()
        o qsDecoder()
        o qsValue()
        o qsiValue()
        o qsPrint()
        o qsFree()
        o qReadCounter()
        o qSaveCounter()
        o qUpdateCounter()
        o qAwkOpen()
        o qAwkNext()
        o qAwkClose()
        o qSedFile()
        o qSedStr()

   * ð  Լ
        o qGetTime()
        o qGetGMTime()

   *  ˻ Լ
        o qCheckEmail()
        o qCheckURL()

   * Ÿ Լ
        o qGetEnv()
        o qCGIenv()
        o qCGIname()
        o qDownload()
        o qDownloadMime()
        o qReset()

  ------------------------------------------------------------------------

ϰ ġ  

Ű ϱ

qDecoder ֽŹ http://www.qDecoder.org
ftp://ftp.qDecoder.org/pub/qDecoder/   ִ.

 Ǯ

qDecoder ⺻ н󿡼 tar  compress  ȴ.
 Ǯ ؼ    .

     $ uncompress qDecoder-VERSION.tar.Z
     $ tar xvf qDecoder-VERSION.tar

GNU Tar ġ ýۿ   ѹ    ִ.

     $ tar xvfZ qDecoder-VERSION.tar.Z

qDecoder-VERSION  شϴ 丮 Ǹ   ·
Ű Ǯ.

     $ cd qDecoder-VERSION
     $ ls -asCF
     total 289
       1 ./                    3 Makefile.in           1 examples/
       1 ../                  48 README                6 install-sh*
       1 AUTHORS             128 README.pdf            2 qDecoder.jpg
       8 CHANGES              55 configure*            1 rfc/
      26 COPYING               3 configure.in          1 src/
       2 DISCLAIMER            1 contrib/              1 win32/

     AUTHORS -  
     CHANGES -   
     COPYING - ۱  
     DISCLAIMER - ۱  
     README -  
     README.pdf - ¿ PDF  README 
     configure - ý ȯ  ũƮ
     configure.in - Autoconf  ũ 
     contrib/... - Ǵ  α׷ ġϴ 丮
     examples/... -  ҽ 
     install-sh - Autoconf Ǵ ġ ũƮ
     qDecoder.jpg - ΰ ׸
     rfc/... - RFC   
     src/... - qDecoder  ҽ
     win32/... - Microsoft Visual C++  ̺귯  Ʈ 



qDecoder κ GNU Ʈ Free/Open Source Ʈ
äϴ Autoconf (6.0.1 ̻)Ͽ پ ̱  
ӵ Ͽ.   Ϲ ¼ҽ װͰ 
configure make ϴµ, configure ش ý Ϸ ȯ
ʿ Լ, ɵ 밡   ýۿ  ȿ
   ֵ Makefile ϴ Ȱ Ѵ.

     $ cd qDecoder-VERSION

     $ ./configure
     creating cache ./config.cache
     checking for gcc... gcc
     checking whether the C compiler (gcc  ) works... yes
     checking whether the C compiler (gcc  ) is a cross-compiler... no
     ...()...
     creating Makefile
     creating src/Makefile
     creating examples/Makefile
     creating contrib/qValue-1.0.1/Makefile
     creating contrib/qcValue-1.0/Makefile

     $ ls -asCF (Makefile Ǿ   ִ)
     total 221
       1 ./                   44 README                1 contrib/
       1 ../                  60 README.pdf            1 examples/
       1 AUTHORS               2 config.cache          6 install-sh*
      26 COPYING               2 config.log            2 qDecoder.jpg
       2 DISCLAIMER            6 config.status*        1 rfc/
       3 Makefile             55 configure*            1 src/
       3 Makefile.in           3 configure.in

     $ make
     ===> src
     gcc -g -O2 -DSTDC_HEADERS=1 -DHAVE_CTYPE_H=1 -DHAVE_TIME_H=1 -DHAVE_SYS_STAT_H=1
      -DHAVE_SYS_TYPES_H=1 -DHAVE_STRFTIME=1 -DHAVE_VPRINTF=1 -DHAVE_STRDUP=1 -DHAVE_
     STRSTR=1 -I. -c -o qDecoder.o qDecoder.c
     ...()...
     /bin/rm -f libqDecoder.so
     ln -s libqDecoder.so.1 libqDecoder.so
     <=== src
     ===> examples
     gcc -g -O2 -DSTDC_HEADERS=1 -DHAVE_CTYPE_H=1 -DHAVE_TIME_H=1 -DHAVE_SYS_STAT_H=1
      -DHAVE_SYS_TYPES_H=1 -DHAVE_STRFTIME=1 -DHAVE_VPRINTF=1 -DHAVE_STRDUP=1 -DHAVE_
     STRSTR=1 -I. -I../src -c -o fetch.o fetch.c
     ...()...
     gcc -g -O2 -DSTDC_HEADERS=1 -DHAVE_CTYPE_H=1 -DHAVE_TIME_H=1 -DHAVE_SYS_STAT_H=1
      -DHAVE_SYS_TYPES_H=1 -DHAVE_STRFTIME=1 -DHAVE_VPRINTF=1 -DHAVE_STRDUP=1 -DHAVE_
     STRSTR=1 -I. -I../src -o arglist.cgi arglist.o ../src/libqDecoder.a
     <=== examples
     ...()...

Ʈ) ֶ󸮽  ``make'' ⺻ PATH Ǿ   찡 
ִµ ̶ make ġϴ `/usr/ccs/bin/''丮 PATH ߰ 
õ.

Ʈ) Ͽ   ̺귯 Ʈ  ʱ 
¸ ϰ Ѵٸ ``make clean'' Էϱ ٶ. ̶ ``make
clean'' ǻ configure   Makefile  ʴµ, ʱ
ǰ   ȯ  Ѵٸ ``make distclean'' ϸ
ȴ.

ġ

̺귯 ġϱ ؼ ``make install''  Ѵ. ``make
install'' ýۿ ̺귯 ġϿ ָ,  ̺귯 ġ
ġ configure --prefix, --libdir, --includedir ɼǿ  ȴ.
ġǴ ġ ɼǰ   , ƹ ھ configure
Ͽ 쿣 /usr/local/lib, /usr/local/include  ġġ
ȴ.

     ${prefix}          ===> /usr/local        (⺻)
     ${libdir}          ===> ${prefix}/lib     (⺻)
     ${includedir}      ===> ${prefix}/include (⺻)

     libqDecoder.a      ===> ${libdir}/libqDecoder.a
     libqDecoder.so.[n] ===> ${libdir}/libqDecoder.so.[n]
     libqDecoder.so     ===> ${libdir}/libqDecoder.so
     qDecoder.h         ===> ${includedir}/include/qDecoder.h

     ex) $ ./configure --prefix=/usr
     ex) $ ./configure --libdir=/home/nobreak/mylib --includedir=/home/nobreak/myinclude

Ʈ) libqDecoder.so  ̺귯 libqDecoder.so.[n] Ű
ɺ ũ̴. ⼭ n 1 ϴ   ȣȯ Ῡ
쿡 Ѵ.  6.0.1   libqDecoder.so.1 ε qDecoder
ü  7.0, 8.0 Ѵ ص  ȣȯ ȴٸ,
̺귯  libqDecoder.so.1   ̴.

     $ cd qDecoder-VERSION

     $ make install
     ln -s libqDecoder.so.1 libqDecoder.so
     /usr/bin/install -c -m 444 qDecoder.h /usr/local/include/qDecoder.h
     /usr/bin/install -c -m 444 libqDecoder.a /usr/local/lib/libqDecoder.a
     /usr/bin/install -c -m 444 libqDecoder.so.1 /usr/local/lib/libqDecoder.so.1
     /bin/rm -f /usr/local/lib/libqDecoder.so
     ln -s /usr/local/lib/libqDecoder.so.1 /usr/local/lib/libqDecoder.so

Ʈ) ý  ġϱ ؼ root  ʿϴ.



ġ qDecoder ``make deinstall''  ϰ ŵȴ.

     $ make deinstall
     /bin/rm -f /usr/local/include/qDecoder.h
     /bin/rm -f /usr/local/lib/libqDecoder.a
     /bin/rm -f /usr/local/lib/libqDecoder.so.1
     /bin/rm -f /usr/local/lib/libqDecoder.so

׽Ʈ

examples 丮 ̸ ۵  ҽ  ִ, ҽ Ű
Ͻ ڵ  Ǳ  ش 丮 examples.html
  ٷ ׽Ʈ   ִ. ҽڵ Makefile  캸
 α׷  qDecoder ؾ ϴ 캸 ٶ.

  ̺귯(libqDecoder.a) ũǾµ, 
̺귯(libqDecoder.so) ũϸ α׷  Ʈ
ȿ Ѵ. examples/Makefile  ``QLIB = ../src/libqDecoder.a''
``QLIB = ../src/libqDecoder.so''  examples 丮 ``make
clean all''    غ. (Makefile  examples
丮   Ͽ     ִ. ``make clean
all QLIB=../src/libqDecoder.so'')

     $ make clean all QLIB=../src/libqDecoder.a ( ̺귯 ũ)
     $ ls -al *.cgi
     -rwxr-xr-x  1 root  power  61876   6  2 22:32 arglist.cgi
     -rwxr-xr-x  1 root  power  61210   6  2 22:32 fetch.cgi
     -rwxr-xr-x  1 root  power  61331   6  2 22:32 multivalue.cgi
     -rwxr-xr-x  1 root  power  61551   6  2 22:32 streamedit.cgi
     -rwsr-sr-x  1 root  power  61639   6  2 22:32 upload.cgi

     $ make clean all QLIB=../src/libqDecoder.so ( ̺귯 ũ)
     $ ls -al *.cgi
     -rwxr-xr-x  1 root  power  12682   6  2 22:33 arglist.cgi
     -rwxr-xr-x  1 root  power  11560   6  2 22:33 fetch.cgi
     -rwxr-xr-x  1 root  power  11852   6  2 22:33 multivalue.cgi
     -rwxr-xr-x  1 root  power  12052   6  2 22:33 streamedit.cgi
     -rwsr-sr-x  1 root  power  12393   6  2 22:33 upload.cgi

Microsoft Visual C++ ȯ濡 

qDecoder ǻ н Ű¡   ǰ κ 
н ȯ Ͽ ۼǾ , NT ȯ濡  ϵ
ߵȴ. Ű(6.0.2) ʹ   κ Windows ڰ
ϴ Microsoft Visual C++ ȯ濡  ̺귯 ٷ  
ֵ ̸  Ʈ  Ͽ Ѵ. ٸ Ϸ
ȯ濡  ƶ    ̴.

  1. Ű ϱ: Ű ϱ⸦ Ѵ.
  2.  Ǯ:   α׷(: WinZip)  Ű Ư
     丮 Ǯ ´.
  3. :
       1. ``File -> Open Workspace'' ޴  win32/qDecoder.dsw 
          .
       2. ``Build -> Build qDecoder.lib'' ޴  ̺귯 Ѵ.

               ----Configuration: qDecoder - Win32 Release----
               Compiling...
               qDecoder.c
               Creating library...

               qDecoder.lib - 0 error(s), 0 warning(s)

  4. ġ: src/qDecoder.h  ϰ  win32/Release/qDecoder.lib
     Ư 丮 Ȥ Visual C++ ⺻ , ̺귯 丮
      Ѵ. (⺻ 丮  θ  ̺귯 
      θ  ʿ䰡 )
     ) C:\Program Files\Microsoft Visual Studio\VC98\Lib\qDecoder.lib
     ) C:\Program Files\Microsoft Visual Studio\VC98\Include\qDecoder.h
  5. :
       1. ҽ Ͽ #include <qDecoder.h> Ȥ #include
          "...PATH...\qDecoder.h" Ѵ.
       2. ''Project -> Setting -> Link -> Object/library modules'
          qDecoder.lib ߰Ѵ. (⺻ ̺귯 丮 ġ
           쿣  )
  6. ׽Ʈ:
       1. ``File -> New -> Win32 Console Application'' 
       2. ``FileView -> Source Files -> Add Files to Folder'' 
          examples/fetch.c 
       3. ``Project -> Setting -> Link -> Object/library modules''
          qDecoder.lib ߰
       4. ``Build -> Build PRJ_NAME.exe''    
       5.  (IIS) CGI   丮 PRJ_NAME.exe 
             Ȯ.
          http://localhost/...PATH.../PRJ_NAME.exe?query=OK
          [Pic: Win32 Test Step 1] [Pic: Win32 Test Step 2]

          [Pic: Win32 Test Step 3] [Pic: Win32 Test Step 4]

          [Pic: Win32 Test Step 5]

  ------------------------------------------------------------------------

ȭ  Լ

qContentType()

Syntax: void qContentType(char *mimetype);
Function: MimeType Ѵ.
Return:
Note:  ȣǾ  ѹ ȴ.
Example:

     qContentType("text/html");  // HTML ½
     qContentType("image/gif");  // GIF ̹ ½

  ------------------------------------------------------------------------

qPrintf()

Syntax: int qPrintf(int mode, char *format, ...);
Function: printf()   HTML TAG  ¿ ڵ Link
Ѵ.
Return:   bytes ,  EOF
Note: յ Ʈ ִ ũⰡ 10K(1024 * 10 - 1)  ȵȴ.
Example:

     Mode 0 : printf() ϴ, HTML  Ѵ.
     Mode 1 : HTML TAG ü Ѵ. LinkǴ κ .
     Mode 2 : Mode 1 + ڵ link Ŵ.
     Mode 3 : Mode 2 + link Ŭ ȭ(target=_top) Ѵ.
     Mode 4 : HTML TAG Ѵ. µ .
     Mode 5 : Mode 4 + ڵ Link Ŵ.
     Mode 6 : Mode 5 + link Ŭ ȭ(target=_top) Ѵ.
     Mode 10  :Mode 0 + Convert
     Mode 11 : Print HTML TAG + Convert
     Mode 12 : Mode 11 + Auto Link
     Mode 13 : Mode 12 + Auto Link to _top frame
     Mode 14 : Waste HTML TAG + Convert
     Mode 15 : Mode 14 + Auto Link
     Mode 16 : Mode 15 + Auto Link to _top frame

     Convert : " "   -> " "
               "  "  -> " &nbsp;"
               "   " -> " &nbsp;&nbsp;"
               "\r"  -> 
               "\n"  -> "<br>\n"

     10 ̻ Mode  <pre> ±׸ ġ ʰ, ӵ  ȭ鿡 ְ  
     ϸ ȿ̴.   쿣 ȭ ȭ  ڵ ٹٲ ȴ.

     qPrintf(i, "Mode %d: <font>\"http://www.hongik.com\"</font>\n", i);

     Mode 0: <font>"http://www.hongik.com"</font>
     Mode 1: &lt;font&gt;&quot;http://www.hongik.com&quot;&lt;/font&gt;
     Mode 2: &lt;font&gt;&quot;<a href="http://www.hongik.com" target="">http://www.hongik.com</a>&quot;&lt;/font&gt;
     Mode 3: &lt;font&gt;&quot;<a href="http://www.hongik.com" target="_top">http://www.hongik.com</a>&quot;&lt;/font&gt;
     Mode 4: &quot;http://www.hongik.com&quot;
     Mode 5: &quot;<a href="http://www.hongik.com" target="">http://www.hongik.com</a>&quot;
     Mode 6: &quot;<a href="http://www.hongik.com" target="_top">http://www.hongik.com</a>&quot;
     Mode 10: <font>"http://www.hongik.com"</font><br>
     Mode 11: &lt;font&gt;&quot;http://www.hongik.com&quot;&lt;/font&gt;<br>
     Mode 12: &lt;font&gt;&quot;<a href="http://www.hongik.com" target="">http://www.hongik.com</a>&quot;&lt;/font&gt;<br>
     Mode 13: &lt;font&gt;&quot;<a href="http://www.hongik.com" target="_top">http://www.hongik.com</a>&quot;&lt;/font&gt;<br>
     Mode 14: &quot;http://www.hongik.com&quot;<br>
     Mode 15: &quot;<a href="http://www.hongik.com" target="">http://www.hongik.com</a>&quot;<br>
     Mode 16: &quot;<a href="http://www.hongik.com" target="_top">http://www.hongik.com</a>&quot;<br>

     qPrintf(i, "Mode %d: ' ', '  ', '   ', '    '\n", i);

     Mode 0: ' ', '  ', '   ', '    '
     Mode 1: ' ', '  ', '   ', '    '
     Mode 2: ' ', '  ', '   ', '    '
     Mode 3: ' ', '  ', '   ', '    '
     Mode 4: ' ', '  ', '   ', '    '
     Mode 5: ' ', '  ', '   ', '    '
     Mode 6: ' ', '  ', '   ', '    '
     Mode 10: ' ', ' &nbsp;', ' &nbsp;&nbsp;', ' &nbsp;&nbsp;&nbsp;'<br>
     Mode 11: ' ', ' &nbsp;', ' &nbsp;&nbsp;', ' &nbsp;&nbsp;&nbsp;'<br>
     Mode 12: ' ', ' &nbsp;', ' &nbsp;&nbsp;', ' &nbsp;&nbsp;&nbsp;'<br>
     Mode 13: ' ', ' &nbsp;', ' &nbsp;&nbsp;', ' &nbsp;&nbsp;&nbsp;'<br>
     Mode 14: ' ', ' &nbsp;', ' &nbsp;&nbsp;', ' &nbsp;&nbsp;&nbsp;'<br>
     Mode 15: ' ', ' &nbsp;', ' &nbsp;&nbsp;', ' &nbsp;&nbsp;&nbsp;'<br>
     Mode 16: ' ', ' &nbsp;', ' &nbsp;&nbsp;', ' &nbsp;&nbsp;&nbsp;'<br>

  ------------------------------------------------------------------------

qPuts()

Syntax: void qPuts(int mode, char *buf);
Function: ˿    ȵȴٴ  ϸ qPrintf()
ϳ ־  buf ü ϱ ,  ڿ(ex: str =
"ڿ")̳ ٽ Ǿ ϴ  qPuts()   Ѵ.
qPuts() ϴ  qPrintf()   Ʈ  
 strdup() Լ  ʱ⿡    ̴.
Note: ڷ  ڿ ȴ.  qPuts(mode, "ڿ");
̷  ڿ   Ų. ̶ Ʒ ó
ڸ  Ѵ.
Example:

     char buf[100];
     strcpy(buf, "http://www.hongik.com mailto:nobreak@hongik.com");
     qPuts(2, buf);

     char *buf;
     buf = strdup("http://www.hongik.com mailto:nobreak@hongik.com");
     qPuts(2, buf);
     free(buf);

  ------------------------------------------------------------------------

qError()

Syntax: void qError(char *format, ...);
Function:  Message Ѵ. printf() Լ  .
Note: յ  ޽ ִ ũ 1024-1 byte  ʾƾ Ѵ.
Example:

     qError("޽");
     qError("%s ", buf);

  ------------------------------------------------------------------------

qErrorLog()

Syntax: void qErrorLog(char *filename);
Function: qError() Լ θ ޵Ǵ  ޽ ϵǴ
α Ѵ.
Note: α׸ Ҷ   ȣϴ° ƴ϶,
qErrorLog("logs/error.log") Ͱ α׷ ʱ⿡ ȣϸ  
qError() ȣɶ, 'logs/error.log' Ͽ αװ ڵ  ȴ.
Example:

     qErrorLog("αϸ");        // enable log
     qErrorLog(NULL);                // disable log (default)

  ------------------------------------------------------------------------

qErrorContact()

Syntax: void qErrorContact(char *msg);
Function:  ޽  qError() ȣ ׻ پ µȴ.
Ϲ ó   ϱ  Ѵ.
Return:
Note:
Example:

     qErrorContact("- Author");
     qErrorContact(NULL);            // disable (default)

  ------------------------------------------------------------------------

qRedirect()

Syntax: void qRedirect(char *url);
Function: HTTP Location:   Ư  Ѵ.
Note: qRedirect HTTP  ϹǷ qConteneType()  
Ͽ ȵǰ, ش μ Ʈ ƿϴ  ̾
Ѵ.
Example:

     qRedirect("http://www.hongik.com/");

  ------------------------------------------------------------------------

  Լ

qDecoder()

Syntax: int qDecoder(void);
Function: ڵ Query String ؼϿ linked-list 
Return:  ޹  ,  -1
Example:

          int num;
          num = qDecoder();

       ڵ  Ѵ.

        * application/x-www-form-urlencoded (%xx ڵǴ Ϲ)
        * multipart/form-data (File Uploading )

     Example 1: application/x-www-form-urlencoded
     󿡼  ڷκ Է  ַ Ѵ. 
      URL Encoding  Ϲ [HTML]  ޵ɰ ũ
     Ʈ []  ǰ, [C]  Ѵ.

          [HTML]
          <form method="post" action="input.cgi">
            ڹȣ <input type="text" name="userID"><br>
            <input type="submit">
          </form>

          []
          name  = "userID"
          value = "ڰ Է ڿ"

          [C]
          #include <stdio.h>
          #include "qDecoder.h"
          void main(void) {
            char *id;
            qContentType("text/html");
            id = qValue("userID");
            printf("%s", id);
          }

     Example 2: multipart/form-data

      ε  Ҷ ַ ȴ.    [HTML]
      ǰ, PC 'a.gif' 128byte  ε Ұ,
      []  Ǹ [C]  Ҽ ִ.

          [HTML]
          <form method="post" action="upload.cgi" enctype="multipart/form-data">
            ڹȣ <input type="text" name="userID"><br>
            ε <input type="file" name="binary"><br>
            <input type="submit">
          </form>

          []
          name  = "userID"
          value = "ڰ Է ڿ"

          name  = "binary"
          value = "a.gif 2 ڷ"
          name  = "binary.length"
          value = "128"
          name  = "binary.filename"
          value = "a.gif"

          [C]
          #include <stdio.h>
          #include <stdlib.h>
          #include "qDecoder.h"

          void main(void) {
            FILE *fp;
            char *userID;
            char *filedata, *filename;
            int  filelength, i;

            qContentType("text/plain");

            userID = qValue("userID");

            filedata   = qValue("binary");
            filelength = qiValue("binary.length");
            filename   = qValue("binary.filename");

            fp = fopen(filename, "wb");
            for(i = filelength; i > 0; i--) fprintf(fp, "%c", *(filedata++));
            fclose(fp);

            printf("%s : %s(%s bytes) saved.", userID, filename, filelength);
          }

     HTML󿡼 type=text ϰ  ϴ. type=file ϰ쿡
     '.length' '.name'  ڵ Եȴ.
     '.length' ڷ Ʈ Ǹ, '.name'
     ڰ  ϸ ȴ.  ϸ 
     ް, Է type=text  ޾ óϸ , 
     ̺귯 ڰ  PC ¡ ϸ ü
     ˷ش. ϸ \  ȣ  Ǿ .
     ("C:\Data\a.gif"ϰ "a.gif" ȴ) Ͱ īʹ
     type=file ϰ  3 Ʈ  ̰ 1 ڷῡ
      ó̹Ƿ 1 óѴ.  Ǵ Ʈ
     qPrint()  ȰϿ ȮҼ ִ.

  ------------------------------------------------------------------------

qValue()

Syntax: char *qValue(char *format, ...);
Function: Linked-list  (ڿ) ã ͸ Ѱ.
qDecoder()  ȣ ʾҴٸ  qDecoder ȣ.
Return:  ϸ  ,   NULL
Note: qValue() qDecoder()    ε ͸
Ѵ.  qValue ޹ ͸ free() Ͽ ȵȴ. Ҵ
޸  qFree() Լ (Ϲ α׷ ) Ͽ
Ѵ.
Example:

     char *test;
     test = qValue("");

     char *test;
     int i = 1;
     test = qValue("COUNT.%d", i);

  ------------------------------------------------------------------------

qiValue()

Syntax: int qiValue(char *format, ...);
Function: qValue() , ( ڿ)  ȯϿ .
Return:  ( ڿ)  .   ʰų
ȯ Ұɽ 0
Example:

     int test;
     test = qiValue("");

     int test, i = 1;
     test = qValue("COUNT.%d", i);

  ------------------------------------------------------------------------

qValueDefault()

Syntax: char *qValueDefault(char *defstr, char *format, ...);
Function:   ⺻ ڸ ϱ  ϴ qValue() 
Լ̴.
Return: qValue()  NULL defstr ͸ .
Example:

     value = qValueDefault("", "COUNTRY");

  ------------------------------------------------------------------------

qValueNotEmpty()

Syntax: char *qValueNotEmpty(char *errmsg, char *format, ...);
Function:  ų  ڿ("") ͵  qError()Լ 
 ޼ Ѵ.
Return: NULL  ó   ϰ qValue() .
Example:

     value = qValueNotEmpty(" Է ּ", "COUNTRY");

  ------------------------------------------------------------------------

qValueReplace()

Syntax: char *qValueReplace(char *mode, char *name, char *tokstr, char
*word);
Function: Linked-list ڿ  ڿ  ū ġȯ Ѵ.
Return: ġȯ ڿ .
Example:

     qValueReplace() ⺻ qStrReplace() Wrapping Լ̴.
      ҽ ڿ  (name  linked-list
     value) Ѵٴ ̸,  ȯ linked-list ü 
        ִ.

      qValueReplace()   qStrReplace() ⺻
     ϴ.

     'name' ڴ ҽ ڿ  linked-list ̸ ش
     value ġȯ  ҽ ڿ Ѵ.

     'mode' ڴ "sr"  ΰ и ڷ  ڿ̴.

     ù° ڴ ġȯ ϸ 't' 's' ġ  ִ.
     't' [t]oken ǹϸ tokstr ڿ  ڸ ū ҽ
     ڿ (־ name  linked-list value ڿ)
     Ͽ, Ī Ǵ ڸ word ڿ ġȯѴ. 's'
     [s]tring ǹϿ tokstr Ʈ ü ϳ ū Ͽ
     ҽ Ʈ Ÿ tokstr Ī ڿ word ڿ
     ġȯѴ.

     ι° ڴ ġȯ ڿ   ¸ Ÿ 'n'
     'r'   ִ. 'n' [n]ew Ÿ ġȯ  ڿ
     ο ޸  Ͽ ش ͸ ϰ Ѵ. 
     ҽ Ʈ linked-list ü ° ǰ ش ޸𸮴
      鿡 free() Ǿ Ѵ. 'r' [r]eplace ǹϸ
     ġȯ  linked-list ü   ǹѴ. ̰
      ޸ Ҵ  ̷ .

      'mode' ڴ   4   츦
     ´.

            Mode "tn" : [t]oken ġȯ & ο    
            Mode "tr" : [t]oken ġȯ & linked-list ü 
            Mode "sn" : [s]tring ġȯ & ο    
            Mode "sr" : [s]tring ġȯ & linked-list ü 

          Example)
            char *retstr, *mode;
            mode = qValue("mode");
            qContentType("text/plain");

            printf("before %s : srcstr = %s\n", mode, qValue("srcstr"));
            retstr = qValueReplace(mode, "srcstr", "hello", "[?]");
            printf("after  %s : srcstr = %s\n", mode, qValue("srcstr"));
            printf("            retstr = %s\n\n", retstr);
            if(mode[1] == 'n') free(retstr);
            return 0;

          Result 'tn')
            before tn : srcstr = hello world
            after  tn : srcstr = hello world
                        retstr = [?][?][?][?][?] w[?]r[?]d

          Result 'tr')
            before tr : srcstr = hello world
            after  tr : srcstr = [?][?][?][?][?] w[?]r[?]d
                        retstr = [?][?][?][?][?] w[?]r[?]d

          Result 'sn')
            before sn : srcstr = hello world
            after  sn : srcstr = hello world
                        retstr = [?] world

          Result 'sr')
            before sr : srcstr = hello world
            after  sr : srcstr = [?] world
                        retstr = [?] world

  ------------------------------------------------------------------------

qValueFirst()

Syntax: char *qValueFirst(char *format, ...);
Function:    ڵ  ġ  .
Return:     ڵ鿡  ù°  ͸
,   NULL.
Example:

     qValueFirst("checklist");

  ------------------------------------------------------------------------

qValueNext()

Syntax: char *qValueNext(void);
Function: qValueFirst() ã  Ѵ.
Return:   , ̻    NULL.
Example:

     char *list;
     for(list = qValueFirst("checklist"); list; list = qValueNext()) {
       printf("checklist = %s<br>\n", list);
     }

  ------------------------------------------------------------------------

qGetFirstEntry()

Syntax: Q_Entry *qGetFirstEntry(void);
Function: Linked-list ù° Q_Entry ͸ Ѵ. qDecoder() 
Ǵ linked-list  ϰ Ҷ Ʈ ͸ 
Ѵ.
Example:

     Q_Entry *first;
     first = qGetFirstEntry();

  ------------------------------------------------------------------------

qPrint()

Syntax: void qPrint(void);
Function: α׷  ޵ ڸ  Ѵ.
Example:

     qPrint();

  ------------------------------------------------------------------------

qFree()

Syntax: void qFree(void);
Function: qDecoder()  Ҵ Memory Ѵ.
Example:

     qFree();

  ------------------------------------------------------------------------

Ű(cookie)  Լ

qSetCookie()

Syntax: void qSetCookie(char *name, char *value, int exp_days, char *path,
char *domain, char *secure);
Function: name=value  شϴ Ű .
Note: qContentType() ȣǱ  Ͽ Ѵ.
Example:

     char *name = "NAME", *value = "Kim";

     // NAME=Kim ̶   ΰ  丮 30ϰ Ѵ.
     qSetCookie(name, value, 30, NULL, NULL, NULL);

     // NAME=Kim ̶  "ANYTHING.qdecoder.org" "/" 丮 
     //     Ѵ.
     qSetCookie(name, value, 0, "/", ".qdecoder.org", NULL);

  ------------------------------------------------------------------------

qcDecoder()

Syntax: int qcDecoder(void);
Function: Ű ؼϿ linked-list 
Return:  ޹  ,  -1
Note:
Example:

     int num;
     num = qcDecoder();

  ------------------------------------------------------------------------

qcValue()

Syntax: char *qcValue(char *format, ...);
Function: Linked-list  (ڿ) ã ͸ Ѱ.
Return:  ϸ  ,   NULL.
Note: qcDecoder()  ȣ ȵǾ, ڵ .
Example:

     char *value;
     value = qcValue("");

  ------------------------------------------------------------------------

qciValue()

Syntax: int qciValue(char *format, ...);
Function: Linked-list  ( ڿ) ã  ȯ
Ѱ.
Return:  ( ڿ)  .   ʰų
ȯ Ұɽ 0.
Note: qcDecoder()  ȣ ȵǾ ڵ 
Example:

     int value;
     value = qciValue("");

  ------------------------------------------------------------------------

qcPrint()

Syntax: void qcPrint(void);
Function: α׷  Ű  Ѵ.
Example:

     qcPrint();

  ------------------------------------------------------------------------

qcFree()

Syntax: void qcFree(void);
Function: qcDecoder()  Ҵ Memory Ѵ.
Example:

     qcFree();

  ------------------------------------------------------------------------

ڿ  Լ

qURLencode()

Syntax: char *qURLencode(char *str);
Function: ڿ URL Encoding Ѵ.
Return: URL Encoding ڿ ޸ ҴǾ ͵ȴ. (free)
ڰ Ͽ Ѵ.
Example:

     char *encstr;
     encstr = qURLencode("ȳϼ?");

  ------------------------------------------------------------------------

qURLdecode()

Syntax: char *qURLdecode(char *str);
Function: %xx URL Encoding ڿ صѴ.
Return: ڿ 
Note: ص ڿ ޸ Ҵ ʰ str ü  .
Example:

     char *encstr;
     qURLdecode(encstr);

  ------------------------------------------------------------------------

qRemoveSpace()

Syntax: char *qRemoveSpace(char *str);
Function: ڿ յ  CR, LF Ѵ.
Return:  ڿ , н NULL.
Note: qRemoveSpace("ڿ"); ̷   ų ִ.
̶ Ʒ ó ڸ  Ѵ.
Example:

     char teststr[100];
     strcpy(teststr, "  Hello, world    \r\n  ");
     qRemoveSpace(teststr); //  teststr "Hello, world" .

  ------------------------------------------------------------------------

qStr09AZaz()

Syntax: int qStr09AZaz(char *str);
Function: ڿ '0' - '9', 'A' - 'Z', 'a' - 'z' ̷ ǺѴ.

Return: ǿ ϸ 1,  0
Example:

     if(qStr09AZaz("abc1234") == 1) printf("True");

  ------------------------------------------------------------------------

qStrupr()

Syntax: char *qStrupr(char *str);
Function: ڷ ־ ڿ  빮ڷ ȯѴ.
Return: ش ڿ 
Example:

     char *str;
     str = strdup("Hello World");
     qStrupr(str);

  ------------------------------------------------------------------------

qStristr()

Syntax: char *qStristr(char *big, char *small);
Function: strstr() Լ , ҹڸ  ʰ Ѵ.
Return: strstr() 
Example:

     printf("%s", qStristr("Hello World", "WORLD"));

  ------------------------------------------------------------------------

qStricmp()

Syntax: int qStricmp(char *s1, char *s2);
Function: strcmp() Լ , ҹڸ  ʴ´.
Return: strcmp() 
Example:

     if(!qStricmp("Hello", "HELLO")) printf("Equal");
     else printf("Differ");

  ------------------------------------------------------------------------

qitocomma()

Syntax: char *qitocomma(int value);
Function: ڸ ޸ ڿ ȯѴ.
Return: ڷ ȯ Ʈ .
Note:  Ʈ ʹ ڰ Ź free()ϴ ŷο ֱ 
޸𸮸 ҴϿ ȯġ ʰ Լ ο static Ǿ ִ. 
qitocomma() Ź  Ʈ ͸ ȯϰ Ǹ Լ  
    Ͽ Ѵ.
Example:

     1) (O) ٸ  ,   
        printf("Price = %s", qitocomma(1234567));
        Price = 1,234,567

     2) (O) ٸ  ,   
        char a[14+1], b[14+1];
        strcpy(a, qitocomma(1234));
        strcpy(b, qitocomma(5678));
        printf("Price = %s + %s\n", a, b);
        Price = 1,234 + 5,678

     3) (X) ߸ 뿹
        printf("%s %s\n", qitocomma(1234), qitocomma(5678));
        Price = 1,234 + 1,234

  ------------------------------------------------------------------------

qStrReplace()

Syntax: char *qStrReplace(char *mode, char *srcstr, char *tokstr, char
*word);
Function: ڿ  ڿ  ū ġȯ Ѵ.
Return: ġȯ Ʈ .
Example:

     'mode' ڴ "sr"  ΰ и ڷ  ڿ̴.

     ù° ڴ ġȯ ϸ 't' 's' ġ  ִ.
     't' [t]oken ǹϸ tokstr ڿ  ڸ ū ҽ
     ڿ srcstr Ͽ, Ī Ǵ ڸ word ڿ
     ġȯѴ. 's' [s]tring ǹϿ tokstr Ʈ ü ϳ
     ū Ͽ ҽ Ʈ Ÿ tokstr Ī ڿ word
     ڿ ġȯѴ.

     ι° ڴ ġȯ ڿ   ¸ Ÿ 'n'
     'r'   ִ. 'n' [n]ew Ÿ ġȯ  ڿ
     ο ޸  Ͽ ش ͸ ϰ Ѵ. 
     ҽ Ʈ ü ° ǰ ش ޸𸮴 
     鿡 free() Ǿ Ѵ. 'r' [r]eplace ǹϸ ġȯ
      srcstr   ǹѴ. ̶ srcstr 
     ִٰ ϹǷ(  ޸ Ҵ  )
     [r]eplace 带 ϰ     Ͽ Ѵ.

      'mode' ڴ   4   츦
     ´.

            Mode "tn" : [t]oken ġȯ & ο    
            Mode "tr" : [t]oken ġȯ & linked-list ü 
            Mode "sn" : [s]tring ġȯ & ο    
            Mode "sr" : [s]tring ġȯ & linked-list ü 

          Example)
            int  i;
            char srcstr[256], *retstr;
            char mode[4][2+1] = {"tn", "tr", "sn", "sr"};

            for(i = 0; i < 4; i++) {
              strcpy(srcstr, "Welcome to the qDecoder project.");
              printf("before %s : srcstr = %s\n", mode[i], srcstr);

              retstr = qStrReplace(mode[i], srcstr, "the", "_");
              printf("after  %s : srcstr = %s\n", mode[i], srcstr);
              printf("            retstr = %s\n\n", retstr);
              if(mode[i][1] == 'n') free(retstr);
            }

          Result)
            before tn : srcstr = Welcome to the qDecoder project.
            after  tn : srcstr = Welcome to the qDecoder project.
                        retstr = W_lcom_ _o ___ qD_cod_r proj_c_.

            before tr : srcstr = Welcome to the qDecoder project.
            after  tr : srcstr = W_lcom_ _o ___ qD_cod_r proj_c_.
                        retstr = W_lcom_ _o ___ qD_cod_r proj_c_.

            before sn : srcstr = Welcome to the qDecoder project.
            after  sn : srcstr = Welcome to the qDecoder project.
                        retstr = Welcome to _ qDecoder project.

            before sr : srcstr = Welcome to the qDecoder project.
            after  sr : srcstr = Welcome to _ qDecoder project.
                        retstr = Welcome to _ qDecoder project.

  ------------------------------------------------------------------------

˻  Լ

qArgMake()

˻  Լ  ڿ ̽ ūǥ(")  
Ʈ ָ,  ڿ Ī ׽Ʈ ¿ õ Լ
Ѵ.

     ---- Example ----
     Query Input: I am a "pretty girl"
     -----------------
           |  |
           V  V
     ---- qArgMake() ----
     qlist[0] = I
     qlist[1] = am
     qlist[2] = a
     qlist[3] = pretty girl
     qlist[4] = NULL
     Return: 4 (4 Tokens)
     --------------------
           |  |
           V  V
     ---- qArgPrint() ----
     'I' (1 bytes)
     'am' (2 bytes)
     'a' (1 bytes)
     'pretty girl' (11 bytes)
     ---------------------
           |  |
           V  V
     ---- qArgMatch() ----
     Target String: Hi, I'm a pretty boy. Are you pretty girl?
                     =  =   =             =       ===========
                     0  0   2             2             3
     Return: 3 (3 matches: qlist[0], qlist[2], qlist[3])
     ---------------------
           |  |
           V  V
     ---- qArgEmprint() ----
     Target String..: Hi, I'm a pretty boy. Are you pretty girl?
     Result.........: Hi, I'm a pretty boy. Are you pretty girl?
                       =  =   =             =       ===========
                       1  2   3             4             5
     Return: 5 (5 matches)
     -----------------------

Syntax: int qArgMake(char *str, char **qlist);
Function:  ū иѴ. ڴ ⺻ ̽  ̸
 յ  ū  ߺ ̽ õȴ.
Return: е ū 
Note:  ūǥ(") ѷ ڿ  ü ϳ ū
Ѵ.
Example:

     char *query="I am a \"pretty girl\".", *qlist[MAX_TOKENS];
     int queries;
     queries = qArgMake(query, qlist);

  ------------------------------------------------------------------------

qArgMatch()

Syntax: int qArgMatch(char *str, char **qlist);
Function: ҹڸ  ʰ ū Ī ׽Ʈ Ѵ.
Return: Ư ڿ ߰ߵǴ ū  ϸ,  ū
ؼ ߺǾ ĪǾ 1ȸ Ѵ. ߺ Ī Ͽ ڿ
 Ī īƮ ؼ qArgEmprint() Ͱ ϶.  
qArgMake()  ū   Ͽ ˻ Ȯ ϴµ
  ִ.
Example:

     int matches;
     matches = qArgMatch("Hi, I'm a pretty boy. Are you pretty girl?", qlist);

  ------------------------------------------------------------------------

qArgEmprint()

Syntax: int qArgEmprint(int mode, char *str, char **qlist);
Function: ڿ ū ĪǴ κ (bold)óϿ Ѵ.
ҹڸ  ʴ´.
Return: ڿ ߰ߵ ū  ϸ, qArgMatch()ʹ ٸ
ߺ Ī Ͽ  Ī īƮ Ѵ.
Note: mode qPrintf() ϸ, Ϲ  1 ַ  
ְڴ.
Example:

     qArgEmprint(1, "Hi, I'm a pretty boy. Are you pretty girl?", qlist);

  ------------------------------------------------------------------------

qArgPrint()

Syntax: void qArgPrint(char **qlist);
Function: α׷  ؼ ū  Ѵ.
Example:

     qArgPrint(qlist);

  ------------------------------------------------------------------------

qArgFree()

Syntax: void qArgFree(char **qlist);
Function: ޸ Ҵ qlist Ѵ.
Example:

     qArgFree(qlist);

  ------------------------------------------------------------------------

  Լ

qCheckFile()

Syntax: int qCheckFile(char *filename);
Function: ȭ 翩θ ľѴ.
Return: ȭ  ϸ 1, ȭ  0.
Note: Permission   Ұ ȭϵ ȭ ٰ ǴѴ.
Example:

     if(qCheckFile("test.dat") == 0) qError("File not found");

  ------------------------------------------------------------------------

qCatFile()

Syntax: int qCatFile(char *filename);
Function: ȭ  Ѵ.
Return:  µ ڼ,  -1
Note:
Example:

     qContentType("image/gif");
     qCatFile("mypic.gif");

     qContentType("text/html");
     qCatFile("myhtml.html");

  ------------------------------------------------------------------------

qReadFile()

Syntax: char *qReadFile(char *filename, int &size);
Function:  о ޸𸮿   ȯ
Return:  Ʈ ,  NULL.
Note: qReadFile   ũ⺸ 1Ʈ ũ ޸ Ҵ Ͽ Ʈ
Ṯ '\0' Ѵ. ̴ ؽƮ  о ٷ ϵ ̴.
spsize Ͽ о ĳ  ȴ. ĳ  ʿġ
ʴٸ spsize ׸ NULL ڸ Ѵ.
Example:

     char *sp, *sp2;
     int spsize;
     sp  = qReadFile("filename", &spsize);
     sp2 = qReadFile("filename2", NULL);
     ...
     free(sp), free(sp2);

  ------------------------------------------------------------------------

qSaveStr()

Syntax: int qSaveStr(char *sp, int spsize, char *filename, char *mode);
Function: Ʈ  Ͽ Ѵ.
Return:   ĳ ( ũ),  -1, ۹̼  
-2
Note: mode ڴ fopen ÿ Ǵ mode  . qSaveStr ش
mode   ̴.  ۹̼ ȣ umask() 
 ´.
Example:

     char *sp = "To subscribe qDecoder mailing list\nSend mail to majordomo@hongik.com";
     int len;
     umask(0);
     len = qSaveStr(sp, strlen(sp), "Howto-mailing.txt", "wt", 0644);

  ------------------------------------------------------------------------

qfGetLine()

Syntax: char *qfGetLine(FILE *fp);
Function: ȭϿ    д´.
Return: Ҵ ޸ ,   NULL.
Note: ͵ Ʈ  ޸  ڰ Ͽ Ѵ.
Example:

     line = qfGetLine(fp);

  ------------------------------------------------------------------------

qFileSize()

Syntax: long qFileSize(char *filename);
Function:  뷮 byte  
Return:   뷮,   -1
Example:

     long size;
     size = qFileSize("/home/nobreak/sample.pdf");

  ------------------------------------------------------------------------

ȭ   ٷ Լ

qfDecoder()

     ## Ʒ   ȭ о linked-list Ѵ.
     ---- test.conf ----
     # this is comment.
     name  = Kim
     phone = 123-4567
     addr  = ѱ
     -------------------

Syntax: Q_Entry *qfDecoder(char *filename);
Function: ȭ о linked-list Ѵ. (ȭ  )
Return: Linked-list ù° ڵ ,  NULL.
Note: (#) ۵Ǵ  ּ ó ؼ ʴ´.
Example:

     Q_Entry *firstRecord;
     firstRecord = qfDecoder("test.conf");

  ------------------------------------------------------------------------

qfValue()

Syntax: char *qfValue(Q_Entry *first, char *name);
Function:   ´.
Return:   , н NULL.
Example:

     char *value;
     value = qfValue(FirstRecord, "name");

  ------------------------------------------------------------------------

qfiValue()

Syntax: int qfiValue(char *format, ...);
Function:   ȯ Ѱش.
Return:  ( ڿ)  .   ʰų,
ش   ȯ Ұ ϸ 0
Example:

     int counter;
     counter = qfiValue(FirstRecord, "counter");

  ------------------------------------------------------------------------

qfPrint()

Syntax: void qfPrint(Q_Entry *first);
Function: α׷  ؼ ڸ  Ѵ.
Example:

     qfPrint(FirstRecord);

  ------------------------------------------------------------------------

qfFree()

Syntax: void qfFree(Q_Entry *first);
Function: Ҵ Memory ȯѴ.
Example:

     qfFree(FirstRecord);

   ڿ о linked-list Ѵ.

     ---- test.conf ----
     # this is comment.
     name  = Seung-young Kim
     age   = 26
     addr  = ѱ
     -------------------

  ------------------------------------------------------------------------

qsDecoder()

Syntax: Q_Entry *qsDecoder(char *str);
Function: ڿ о linked-list Ѵ. (ȭ  )
Return: Linked-list ù° ڵ ,  NULL.
Note:
Example:

     Q_Entry *FirstRecord;
     char *str="name=Seung-young Kim\nage=26\naddr=ѱ";
     FirstRecord = qsDecoder(str);

  ------------------------------------------------------------------------

qsValue()

Syntax: char *qsValue(Q_Entry *first, char *name);
Function:   ´.
Return:   , н NULL.
Note:
Example:

     char *name;
     name = qsValue(FirstRecord, "name");

  ------------------------------------------------------------------------

qsiValue()

Syntax: int qsiValue(char *format, ...);
Function:   ȯ Ѱش.
Return:  ( ڿ)  .   ʰų,
ش   ȯ Ұ ϸ 0.
Note:
Example:

     int age;
     age = qsiValue(FirstRecord, "age");

  ------------------------------------------------------------------------

qsPrint()

Syntax: void qsPrint(Q_Entry *first);
Function: α׷  ؼ ڸ  Ѵ.
Example:

     qsPrint(FirstRecord);

  ------------------------------------------------------------------------

qsFree()

Syntax: void qsFree(Q_Entry *first);
Function: Ҵ Memory ȯѴ.
Return:
Note:
Example:

     qsFree(FirstRecord);

  ------------------------------------------------------------------------

qReadCounter()

   ī ȭ ٷ.

     ---- number.dat ----
     74
     --------------------

Syntax: int qReadCounter(char *filename);
Function: ȭϸ ī ȭ д´.
Return:  īͰ,  0
Example:

     int count;
     count = qReadCounter("number.dat");

  ------------------------------------------------------------------------

qSaveCounter()

Syntax: int qSaveCounter(char *filename, int number);
Function:  ȭϸ ī  ()Ѵ.
Return:  1,  0
Example:

     qSaveCounter("number.dat", 75);

  ------------------------------------------------------------------------

qUpdateCounter()

Syntax: int qUpdateCounter(char *filename, int number);
Function:  ȭϸ ī  numberŭ Ų.
Return:   īͰ + number,  0
Example:

     int count;
     count = qUpdateCounter("number.dat", -3);

  ------------------------------------------------------------------------

qAwkOpen()

     ## UNIX ý AWK ɰ   Ѵ.
     ---- ex) /etc/passwd ----
     shpark:x:1008:1000:Sang-hyun Park:/home/shpark:/bin/csh
     teamwork:x:1011:1000:Seung-young Kim:/home/teamwork:/bin/csh
     kikuchi:x:1015:2000:KIKUCHI:/home/kikuchi:/bin/csh
     ---------------------

Syntax: int qAwkOpen(char *filename, char separator);
Function:  , ڸ Ѵ.
Return:  1,     0
Example:

     qAwkOpen("/etc/passwd", ':');

  ------------------------------------------------------------------------

qAwkNext()

Syntax: int qAwkNext(char array[][256]);
Function:  о 鿩, ڷ ־ 迭 Ѵ.
Return:  ʵ ,   -1
Note: ̴  ,  ʵ 256 Ʈ Ѿ ȵȴ.
Example:

     char array[7][256];
     qAwkOpen("/etc/passwd", ':');
     for( ; qAwkNext(array) > 0; ) printf("ID=%s, Name=%s", array[0], array[5]);
     qAwkClose();

  ------------------------------------------------------------------------

qAwkClose()

Syntax: int qAwkClose(void);
Return:  1, ִ   0.
Function: µ  ݴ´.
Example:

     qAwkClose();

  ------------------------------------------------------------------------

qSedFile()

     ## UNIX ý SED ɰ   Ѵ.
     ---- ex) streamedit.html.in ----
     Hi "${NAME}" <${EMAIL}>.
     <p>You got a really cool hobby.
     <br>I'm sure that your hobby, ${HOBBY},
     can make your life more compatible.
     ---------------------

Syntax: int qSedFile(char *filename, FILE *fpout, char **arg);
Function: Ͽ  ȣ ǵ ڿ üϿ ϸ, Ϻ
SSI  Ѵ.
Return:  1,     0
Note:  Լ Unix ý Sed SSI   ϵ Ȯ
̴.
Example:

     qSedFile Ȱϸ, α׷ HTML ڵ带  
     ʰ CGI α׷   ִ. UI õ  ð
        ְ, ΰ  и۾ ϸ, Ű
     ǰ   鿡 ս Ŀ ¡  
     ִµ ȿ뼺   ִ.

     filename Է()̰, fpout  Ʈ ǹѴ.
      Ϸ  ϰ  Ұ쿣  "wt" , ش
      ͸ ǳ׾ ָ ǰ, ȭ ϰ Ѵٸ, ׳
     stdout  ϸ ȴ.

          Ѵ.

     "++ڿ++üڿ+"

          ex) char *arg[3 + 1] = { "s/${NAME}/Seung-young Kim/",
                                   "s%${EMAIL}%nobreak@hongik.com%",
                                   "s:${HOBBY}:Playing with Ji-su Hwang:",
                                   NULL };

       's'  Ǹ, ̴ ü(replacement) ǹѴ.
     ڴ 1Ʈ Ư ڿ ڰ  ϸ ȴ.
      ڷδ '/' '%'  , ڿ ش
     ĳͰ  쿣 '#', 'A'  ڿ ϱ ٶ.
      ڿ Ǵ  , ü ġʴ
     ü  Ư  ٸ, ${STING} 
     ũƮ    ϶.

      streamedit.html.in      
     Ͽ   .

          ex) qSedFile("streamedit.html.in", stdout, arg);

          Hi "Seung-young Kim" <nobreak@hongik.com>.
          <p>You got a really cool hobby.
          <br>I'm sure that your hobby, Playing with Ji-su Hwang,
          can make your life more compatible.

     SSI  ؼѴ. ( <!--#include file="FILEPATH"--> 
     )      , ش  Ͽ
     µǸ, ԵǴ  ؼ ü SSI  ״
     ȿϴ. (Cascading)

          <!--#include file="streamedit.html.in"-->

     ) include Ǵ  CGI Ǵ ġ  
     ǥ ϰų, ý  ǥѴ.

     ڿ ü ʰ, SSI ɸ   쿣 
      arg ڷ NULL  Ѵ.

          ex) qSedFile("streamedit.html.in", stdout, NULL);

  ------------------------------------------------------------------------

qSedStr()

Syntax: int qSedStr(char *srcstr, FILE *fpout, char **arg);
Function: qSedFile()   ϳ, Է ڿ ޴´.
Return: qSedFile() 
Example:

     qSedStr("Hi my name is ${NAME}.", stdout, arg);

  ------------------------------------------------------------------------

ð  Լ

qGetTime()

Syntax: struct tm *qGetTime(void);
Function: ð ü tm Ѵ.
Return: ü tm 
Note:
Example:

     struct tm *mytime;
     mytime = qGetTime();

  ------------------------------------------------------------------------

qGetGMTime()

Syntax: time_t qGetGMTime(char *gmt, time_t plus_sec);
Function: 'ð+plus_sec' Ű ϴ GMT ڿ ð
ȯѴ.
Return: 1970/1/1(00:00:00)   + plus_sec
Note:
Example:

     time_t plus_sec;
     char gmt[0xff];
     plus_sec = (time_t)300; /* 5 */
     qGetGMTime(gmt, plus_sec);
     printf("%s", gmt); // "Fri, 22-Aug-1997 15:11:30 GMT"

  ------------------------------------------------------------------------

 ˻ Լ

qCheckEmail()

Syntax: int qCheckEmail(char *email);
Function: E-mail ּ  ǺѴ.
Return:   1,  ߻ϸ 0.
Note:
Example:

     qCheckEmail("nobreak@hongik.com");

  ------------------------------------------------------------------------

qCheckURL()

Syntax: int qCheckURL(char *url);
Function: URL ּ  ǺѴ.
Return:   1, Ģ   0
Example:

     qCheckURL("http://www.hongik.com");

  ------------------------------------------------------------------------

Ÿ Լ

qGetEnv()

Syntax: char *qGetEnv(char *envname, char *nullstr);
Function: getenv()Լ ϰ ϳ, NULL   Ʈ
Ѵ.
Example:

     char *name;
     name = qGetEnv("SCRIPT_NAME", "/cgi-bin/CrazyWWWBoard.cgi");
     name = qGetEnv("SCRIPT_NAME", NULL);

  ------------------------------------------------------------------------

qCGIenv()

Syntax: void qCGIenv(Q_CGIenv *env);
Function: CGI ȯ溯 ð ü Ѵ.
Example:

     Q_CGIenv myenv;
     qCGIenv(&myenv);

     typedef struct Q_CGIenv Q_CGIenv;
     struct Q_CGIenv{
       char *auth_type;
       char *content_length;
       char *content_type;
       char *document_root;
       char *gateway_interface;
       char *http_accept;
       char *http_accept_encoding;
       char *http_accept_language;
       char *http_connection;
       char *http_cookie;
       char *http_host;
       char *http_referer;
       char *http_user_agent;
       char *query_string;
       char *remote_addr;
       char *remote_host;
       char *remote_port;
       char *remote_user;
       char *request_method;
       char *request_uri;
       char *script_filename;
       char *script_name;
       char *server_admin;
       char *server_name;
       char *server_port;
       char *server_protocol;
       char *server_software;
       char *server_signature;
       char *unique_id;

       /* Miscellaneous Informations Supported by qDecoder */
       int  year, mon, day, hour, min, sec;
     };

  ------------------------------------------------------------------------

qCGIname()

Syntax: char *qCGIname(void);
Function: ȯ溯 SCRIPT_NAME α׷ ؼϿ Ѵ.
Return:
Note:
Example:

     char *cginame;
     cginame = qCGIname();

  ------------------------------------------------------------------------

qDownload()

Syntax: int qDownload(char *filename);
Function: Ŭ̾Ʈ  ϴµ,    
ٿε ڰ Ÿ Ѵ.
Return:   Ʈ,   -1
Note:  Լ Ǹ  qDownloadMime()  Լ̴.
Example:

     qDownload("/home/nobreak/myprg.exe");

  ------------------------------------------------------------------------

qDownloadMime()

Syntax: int qDownloadMime(char *filename, char *mime);
Function: Ŭ̾Ʈ ӿ Ͽ  Ѵ.
Return:   Ʈ,   -1
Note:  Լ ش    ũϿ   
,   Ǿ߸ ٿε   ֵ ó ϰų,
     Ư α׷ ؼ ٿ  ְ
ϴµ ϴ. mime 'application/octet-stream' 쿡 qDownload()
ϴ.  Ʈ ɶ  μ ǰ ǹǷ, 󿡵
ũ ɸ  ִ ε ٿε īƮ  ó 
 qRedirect() Ȱϴ  .
Example:

     qDownload("/home/nobreak/myprg.gif", "image/gif");

  ------------------------------------------------------------------------

qReset()

Syntax: void qReset(void);
Function: qDecoder ʱȭ Ѵ.
Note: Daemon  ݺ α׷ ۼϰų qDecoder Ӱ ʱȭ
ϰ    Լ   ִ. qReset() linked-list Ͽ
ü Ҵ ޸𸮸  ȯϰ    ʱ ·
ȯŰ ۾ Ѵ.
Example:

     qReset();
