                          [The qDecoder Project]
  ------------------------------------------------------------------------

qDecoder Changes

``FIX'', ``NEW'', ``REP'' and ``REM'' are stand on ``Fixed or Modified'',
``New'', ``Replaced'' and ``Removed''.

  Release 8.0
    NEW) qDecoderSetUploadBase() - Initialize qDecoder() for progressive
    uploading.
    FIX) qDecoder() - Now qDecoder() supports progressive uploading and direct
    file saving into disk.
    NEW) qSedArgAddDirect() - For huge size(over 1024 - 1) value.

  Release 7.1.1
    FIX) qSedArgAdd() - Adjust miss typed variable length. (1024*64 => 1024)

  Release 7.1
    NEW) qGetTimeStr() - Generate date string formatted as 'YYYYMMDDhhmmss'.
    NEW) qJavaScript() - Print out some JavaScript code.
    NEW) qAwkStr() - Scanning pattern from string.
    FIX) qAwkOpen() - Compatibility increment
    FIX) qAwkNext() - Expand array size to 1024(before 256)
    FIX) qCountRead() - Compatibility increment
    FIX) qCountSave() - Compatibility increment
    FIX) qCountUpdate() - Compatibility increment
    FIX) qDecoder() - Now qdecoder uses more smaller memory
    FIX) qCheckFile() - Utility increment
    New socket functions(unix only). Please refer the reference for more
    details.
    NEW) qSocketOpen()
    NEW) qSocketClose()
    NEW) qSocketWaitReadable()
    NEW) qSocketRead()
    NEW) qSocketGets()
    NEW) qSocketWrite()
    NEW) qSocketPuts()
    NEW) qSocketPrintf()
    NEW) qSocketSendFile()
    NEW) qSocketSaveIntoFile()
    NEW) qSocketSetNonblock()
    NEW) qSocketConv2file()
  Release 7.0.1
    NEW) qDecoder() - Added another argument, "variable_name.contenttype", when
    file is uploaded.
    NEW) qCookieValue() - Return only cookie data.
    NEW) qValueType() - Return the type of query.
    NEW) qfopen(), qfclose() - Open file stream with file lock.
    FIX) qPrintf(), qPuts() - Added new modes.
    FIX) qSession() - Changed return type.
  Release 7.0
    NEW) qSession...() - Session related functions
    NEW) qMD5Str(), qMD5File() - Calculate a message-digest
    fingerprint(checksum).
    NEW) qUniqueID() - Always returns unique 32 bytes string.
    NEW) qCookieRemove() - Remove cookie from client(browser).
    NEW) qfValueFirst(), qfValueNext() - Used for patching the arguments having
    an identical variable name inregular sequence.
    NEW) qsValueFirst(), qsValueNext() - Used for patching the arguments having
    an identical variable name inregular sequence.
    NEW) qGetContentFlag() - qCheck execution of qContentType().
    NEW) qFreeAll() - Deallocates the all allocated memories by qDecoder.
    FIX) qDecoder() - qcDecoder() is merged
    FIX) qSedStr(), qSedFile() - Changed parameters
    FIX) qCatFile() - Support formatted arguments, Support Win32 environment
    FIX) qCheckFile() - Support formatted parameters
    FIX) qURLencode - Does not encode '@', '.', '/', '\', '-', '_', ':'
    character
    FIX) qRedirect - Regular code improvement
    FIX) qPrint(), qArgPrint, qsPrint, qfPrint - Changed return type
    FIX) qPuts() - Regular code improvement
    REP) qcDecoder() - Merged by qDecoder()
    REP) qAddCookie() - Merged by qValueAdd()
    REP) qSetCookie() - Renamed to qCookieSet()
    REP) qReadCounter(), qUpdateCounter(), qSaveCounter() - Renamed to
    qCountRead(), qCountSave(), qCountUpdate()
  Release 6.0.5
    FIX) qAddCookie() - Solves the problems in which qAddCookie() does not
    operate when there is no existing cookie (when _cookie_first_entry is NULL).

  Release 6.0.4
    NEW) qAddCookie() - Forcibly adds the cookie value to the cookie linked
    list.
    NEW) qResetContentFlag() - Initializes the system for ContentType() to be
    forcibly displayed in dublicate.
    FIX) qURLencode() - Adjusts the system so that "@./-?&=#\:_" will not be
    encoded.
    FIX) qPrintf(), qPuts() - Modifies the token character into "
    `(){}[]<>\"',\r\n" so that the character strings after '&' will not be
    linked at the automatic link function.
    FIX) qSetCookie(), qGetGMTime() - Solves the cookie settings-related
    problems occurring from the fact that, in connection with qGetGMTime() at
    Solaris machines, Time Zone is displayed not in GMT but in Local Time Zone
    such as KST while time is normally displayed in GMT.
    FIX) qReadFile(), qFileSize() - Supports Win32.
  Release 6.0.3
    NEW) qValueReplace() - Transposes the tokens or specific character strings
    of query strings into given character strings.
    NEW) qStrReplace() - Transposes the tokens or specific character strings of
    strings into given character strings.
    NEW) qReset() - Initializes qDecoder. (Deallocates memory and initializes
    internal variables)
    FIX) qAwkClose() - Modifies the system to have return values.
  Release 6.0.2
    NEW) Adds the static library creation project files for Microsoft Visual C++
    use.
    FIX) Converts those internally used functions (starting with '_') into
    "static".
  Release 6.0.1
    NEW) Applies Autoconf.
  Release 6.0
    REP) qCgienv() - Replacement function of qCGIenv().
    FIX) qDecoder() - Adds the security code for overflow attacks when
    multipart/form-data is interpreted.
    FIX) qSaveStr() - Removes permission setup arguments for the compatibility
    with WIN32.
    FIX) Changes the name of structure Entry into Q_Entry.
    FIX) Changes the name of structure Cgienv into Q_CGIenv.
    FIX) Adjusts the installation path into /usr/local/lib, /usr/local/include
    in case of "make install".
    FIX) qDownload(), qDownloadMime() - Modifies the system for return values to
    have the number of transmitted bytes.
    FIX) qPrintf() - Modifies the system so that the length of combined
    character strings can be supported up to 10K.
    NEW) Supports the shared library (libqDecoder.so).
    NEW) qCGIenv() - Extended edition of qCgienv() of old versions.
  Release 5.0.8
    FIX) qSetCookie() - Corrects the sequence of arguments according to the
    standard specification.
    FIX) qURLdecode() - Changes the function prototype from void to char* so
    that the decoded string pointer can be returned.
    FIX) qDownload() - Modifies the system so that the entire file size can be
    identified when downloading at clients.
    NEW) qDownloadMime() - Transmits files to clients according to MIME.
    NEW) qFileSize() - Notifies the file size by the unit of byte.
  Release 5.0.7
    REP) qStrBig() - Replacement function qStrupr().
    NEW) qArgMake(), qArgPrint(), qArgMatch(), qArgEmprint(), qArgFree() - A
    group of functions that analyzes search queries, identifies the number of
    query hits inside strings, and displays the results making the matching
    parts in bold characters.
    NEW) qValueDefault() - Same as qValue(). But hands over the basic string
    value when there is no corresponding query name.
    NEW) qValueNotEmpty() - Same as qValue(). But displays error messages in
    case of NULL or blank character strings ("").
    NEW) qStrincmp() - Plays the role of the strncmp() function plus the
    stricmp() function. Compares the first n bytes of character strings without
    distinguishing uppercase/lowercase letters.
  Release 5.0.6
    FIX) qitocomma() - Solves the problems in which negative numbers are
    displayed as '-,123,456'.
    FIX) qURLencode() - Modifies the system so that a space ' ' can be encoded
    not into '+' but into '%20'.
    FIX) qUpdateCounter() - Modifies the problem of returning the 'existing
    value' into figures of 'existing value + update'.
    FIX) qDownload() - Changes the function type from void to int so that it can
    have return values when there is no file.
    FIX) qError(), qErrorContact() - Corrects the problems in which
    [Administrator: ...] is inserted before and after those messages set up as
    qErrorContact() (for original messages to be displayed without the
    insertion).
  Release 5.0.5
    REP) qStrStr() - Replacement function qStristr()
    REP) qSed() - Replacement function qSedFile()
    NEW) qStricmp() - Functionally the same as the strcmp() function. But does
    not distinguish uppercase/lowercase letters.
    NEW) qSedStr() - Performs source input by strings.
  Release 5.0.4
    REP) qFileCat() - Replacement function qCatFile().
    FIX) qUpdateCounter() - Modifies interfaces (so that the update
    increase/decrease can be numerically controlled).
    FIX) qDecoder() - Processes the arguments handed over to the environment
    variable of QUERY-STRING in the multipart/form-data method.
    NEW) qReadFile() - Reads files and stores them in memory.
    NEW) qSaveStr() - Stores the contents of strings in files.
  Release 5.0.3
    FIX) qPrintf(), qPuts() - Adds '&' to tokens again.
    NEW) qfGetLine() - Returns allocated memory pointers by reading a line of
    files regardless of the length.
  Release 5.0.2
    FIX) qSed() - Makes a modification so that NULL pointers can be inserted as
    the arg argumentation. Solves the problems in which the segmentation fault
    errors occur in case the first argument of arg is NULL (when the SSI
    function is to be used without conversion).
    FIX) qPrintf(), qPuts() - Removes the '&' character from tokens.
  Release 5.0.1
    FIX) qValue(), qiValue(), qfValue(), qfiValue(), qsValue(), qsiValue(),
    qcValue(), qciValue() - Uses vsprintf() instead of the vsnprintf() function
    due to the compatibility problem.
    NEW) qSed() - Displays specified symbols in files after changing them into
    defined character strings.
  Release 5.0
    REP) qSendFile() - Replacement function qFileCat().
    FIX) qValue(), qiValue(), qfValue(), qfiValue(), qsValue(), qsiValue(),
    qcValue(), qciValue() - Performs patch works so that arguments can be
    transmitted by formats.
    FIX) qPuts() - Removes '&' from the token list.
    NEW) qValueFirst() - Acquires the variable value for the first argument
    among the arguments transmitted in an identical variable name.
    NEW) qValueNext() - Acquires the next variable value.
    NEW) qRedirect() - The page-jump function using the location: header of
    HTTP.
    NEW) qFileCat() - Displays all the corresponding files in stdout.
  Release 4.3.1
    FIX) Modifies install/deinstall method of Makefile.
  Release 4.3
    FIX) qDecoder() - Performs patch works so that the queries handed over to
    SSI can be received.
    NEW) qAwkOpen()
    NEW) qAwkNext()
    NEW) qAwkClose()
    NEW) *qGetFirstEntry()
    NEW) *qitocomma()
  Release 4.2
    FIX) qDecoder() - Patches related to Macintosh IE.
    FIX) qGgienv() - Patches related to Apache 1.3.
    FIX) qGetGMTime() - Performance improvement.
    NEW) *qCGIname()
    NEW) qDownload()
    NEW) *qGetEnv()
    NEW) *qStrBig()
    NEW) *qStrStr()
  Release 4.0.1
    FIX) qfDecoder() - emoves the length restriction of one line in files.
    FIX) qDecoder() - Modifies the internal algorithm of the multipart/form-data
    format.
  Release 4.0
    FIX) qDecoder() - Supports file uploading.
    FIX) qfDecoder() - Processes those lines starting with # as explanatory
    notes.
    FIX) qURLencode() - Makes a modification for '@' and '.' not to be encoded.
    FIX) _decode_query() - Changes the function name into qURLdecode().
    FIX) qCheckEmail() - Allows '.' in ID.
    FIX) qPrintf(), qPuts() - Modes 10 through 16 are newly supported.
  Release 3.5
    FIX) _get_query() - Adds the confirmation that the environment variable is
    not set up.
    FIX) qCgienv() - Optimizes using environment variables that are used in
    Netscape and Explore in common.
    FIX) qSetCookie() - Changes the expiration-date designation from char* to
    the int type.
    FIX) qError() - Adds logging functions.
    FIX) qURLencode() - Makes a modification for numbers and English alphabets
    not to be encoded.
    NEW) qErrLog()
  Release 3.4.2
    FIX) qDecoder(), qfDecoder(), qcDecoder() - Modifies Linked List algorithm.
    FIX) qPuts() - Solves the problems in which warnings are given when
    compilation is performed at certain systems.
  Release 3.4.1
    FIX) qPrintf(), qPuts() - Removes the space displayed at the end of
    character strings.
  Release 3.4
    FIX) qCheckEmail() - Makes a modification for emails including '-' or '_' to
    be possible.
    FIX) qPrintf(), qPuts() - Corrects the problems in which < and > of
    character-string contents are displayed as '<' and '>' (displays them as &lt
    and &gt). Only those character strings such as 'mailto:guest@hongik.ac.kr'
    were automatically linked, but the automatic link of such types as
    'guest@hongik.ac.kr' can be performed.
    NEW) qSetCookie()
    NEW) *qURLencode()
    NEW) qGetGMTime()
  Release 3.3.1
    FIX) qDecoder() - Corrects the problem in which the '&' character of the
    query value is recognized as a separator.
  Release 3.3
    NEW) qcDecoder()
    NEW) *qcValue()
    NEW) qcPrint()
    NEW) qcFree()
  Release 3.2.2
    NEW) qUpdateCounter()
    NEW) qPuts()
    NEW) qCheckURL()
  Release 3.2
    NEW) qReadCounter()
    NEW) qSaveCounter()
    NEW) qStr09AZaz()
  Release 3.1
    NEW) qPrintf()
    NEW) qCheckEmail()
    NEW) qError()
  Release 3.0
    NEW) *qfDecoder()
    NEW) *qfValue()
    NEW) qfPrint()
    NEW) qError()
    NEW) *qRemoveSpace()
  Release 2.2
    NEW) qDecoder()
    NEW) *qValue()
    NEW) qPrint()
    NEW) qFree()
    NEW) qContentType()
    NEW) qCgienv()
    NEW) *qGetTime()
    NEW) qCheckFile()
    NEW) qSendFile()

  ------------------------------------------------------------------------
                          [The qDecoder Project]
