⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textfile.c

📁 htp是一个HTML预处理器。页面可以用htp扩展的类HTML的宏编写。这可以简化维护一个一致外观的Web页面集.
💻 C
字号:
/*//// textfile.c//// Text file functions//// Copyright (c) 1995-96 Jim Nelson.  Permission to distribute// granted by the author.  No warranties are made on the fitness of this// source code.//*//*// see the note in msg.c for why this is done*/#define DUMB_TEXTFILE_PROTOTYPE#include "htp.h"BOOL OpenFile(const char *name, const char *filename, const char *openFlags,    TEXTFILE *textFile){    assert(name != NULL);    assert(filename != NULL);    assert(openFlags != NULL);    assert(textFile != NULL);    /* convert the filename to the native machine's format */    /* (MS-DOS to UNIX and vice-versa) */    /* this returns an allocated copy of the string, so it must be freed */    /* when the structure is destroyed */    if((textFile->filename = ConvertDirDelimiter(filename)) == NULL)    {        DEBUG_PRINT(("unable to convert dir delimiter"));        return FALSE;    }    /* create a copy of the printed name */    if((textFile->name = DuplicateString(name)) == NULL)    {        DEBUG_PRINT(("unable to duplicate name"));        FreeMemory(textFile->filename);        textFile->filename = NULL;        return FALSE;    }    /* initialize the rest of the structure */    textFile->lineNumber = 1;    textFile->bytesReadThisLine = 0;    textFile->bytesWrittenThisLine = 0;    textFile->flags = TEXTFILE_FLAG_NONE;    if((textFile->file = fopen(textFile->filename, openFlags)) == NULL)    {        DEBUG_PRINT(("unable to open file %s", filename));        FreeMemory(textFile->filename);        textFile->filename = NULL;        FreeMemory(textFile->name);        textFile->name = NULL;        return FALSE;    }    return TRUE;}   void CreateNullFile(TEXTFILE *textFile){    assert(textFile != NULL);    memset(textFile, 0, sizeof(TEXTFILE));    textFile->flags = TEXTFILE_FLAG_NULL_FILE;}void CloseFile(TEXTFILE *textFile){    assert(textFile != NULL);    if(textFile->flags & TEXTFILE_FLAG_NULL_FILE)    {        return;    }    assert(textFile->filename != NULL);    assert(textFile->name != NULL);    assert(textFile->file != NULL);    FreeMemory(textFile->filename);    FreeMemory(textFile->name);    fclose(textFile->file);    textFile->filename = NULL;    textFile->name = NULL;    textFile->file = NULL;}   void SuppressLinefeeds(TEXTFILE *textFile){    textFile->flags |= TEXTFILE_FLAG_NO_CR;}void AllowLinefeeds(TEXTFILE *textFile){    textFile->flags &= (~TEXTFILE_FLAG_NO_CR);}BOOL GetFileChar(TEXTFILE *textFile, char *ch){    int getCh;    assert(textFile != NULL);    if(textFile->flags & TEXTFILE_FLAG_NULL_FILE)    {        return FALSE;    }    assert(ch != NULL);    assert(textFile->file != NULL);    do    {        if((getCh = fgetc(textFile->file)) == EOF)        {            return FALSE;        }    } while(getCh == '\r');    if((*ch = (char) getCh) != '\n')    {        textFile->bytesReadThisLine++;    }    else    {        textFile->lineNumber++;        textFile->bytesReadThisLine = 0;        textFile->bytesWrittenThisLine = 0;    }    return TRUE;}   BOOL PutFileChar(TEXTFILE *textFile, char ch){    uint bytesWrittenThisLine;    assert(textFile != NULL);    if(textFile->flags & TEXTFILE_FLAG_NULL_FILE)    {        return TRUE;    }    if(ch == '\r')    {        return TRUE;    }    else if(ch == '\n')    {        bytesWrittenThisLine = textFile->bytesWrittenThisLine;        textFile->lineNumber++;        textFile->bytesReadThisLine = 0;        textFile->bytesWrittenThisLine = 0;        /* suppress linefeeds? */        if(textFile->flags & TEXTFILE_FLAG_NO_CR)        {            if(bytesWrittenThisLine != 0)            {                /* emit a SPACE to avoid a run-on word from the C/R being */                /* dropped between words */                fputc(' ', textFile->file);            }            return TRUE;        }    }    else    {        textFile->bytesWrittenThisLine++;    }    assert(textFile->file != NULL);    fputc(ch, textFile->file);    return TRUE;}   BOOL PutFileString(va_alist) va_dcl{    va_list argptr;    char *str;    char *strptr;    TEXTFILE *textFile;    const char *format;    /* allocate room to hold the final string ... allocating 16K to be safe, */    /* although a better method would be more deterministic */    /* (originally allocated 1K, but now allocating 16K due to JavaScript */    /* and VBScript comments ... suggested by Allan Todd) */    if((str = AllocMemory(16 * KBYTE)) == NULL)    {        return FALSE;    }    /* convert formatted arguments into single string */    va_start(argptr);    textFile = va_arg(argptr, TEXTFILE *);    format = va_arg(argptr, const char *);    vsprintf(str, format, argptr);    va_end(argptr);        /* check the arguments */    assert(textFile != NULL);    if(textFile->flags & TEXTFILE_FLAG_NULL_FILE)    {        FreeMemory(str);        return TRUE;    }    assert(format != NULL);    strptr = str;    while(*strptr != NUL)    {        if(PutFileChar(textFile, *strptr++) == FALSE)        {            FreeMemory(str);            return FALSE;        }    }    FreeMemory(str);    return TRUE;}   BOOL GetFileLine(TEXTFILE *textfile, char *buffer, uint size){    char *ptr;    assert(textfile != NULL);    assert(buffer != NULL);    if(feof(textfile->file))    {        return FALSE;    }    ptr = buffer;    /* compare size to 1 rather than 0 to leave room for trailing NUL */    while(size-- > 1)    {        if(GetFileChar(textfile, ptr) == FALSE)        {            break;        }        if(*ptr == '\n')        {            break;        }        ptr++;    }    /* watch for empty string, which should basically count as EOF */    if(buffer == ptr)    {        return FALSE;    }    /* set the EOL to NUL */    *ptr = NUL;    return TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -