fileutil.c

来自「好记星的控件,包括button,list,对文件操作」· C语言 代码 · 共 1,674 行 · 第 1/5 页

C
1,674 行
字号
/*** victor for UNICODE
        * Convert to upper letter *
        if ( (*disk_fnam >= 'a') && (*disk_fnam <= 'z') )
            c1 = (UINT8) ('A' + *disk_fnam - 'a');
        else
            c1 = *disk_fnam;

        * Convert to upper letter *
        if ( (*in_fnam >= 'a') && (*in_fnam <= 'z') )
            c2 = (UINT8) ('A' + *in_fnam - 'a');
        else
            c2 = *in_fnam;

        if (c1 != c2 )
            if (c2 != '?')  * ? is wild card * */
        /* Convert to upper letter */
        if ( (*disk_fnam >= 'a') && (*disk_fnam <= 'z') )
            c1 = (UINT16) ('A' + *disk_fnam - 'a');
        else if (*disk_fnam > 0x7f)
        {
            c1 = (UINT16)*disk_fnam<<8;
            disk_fnam++;
            c1 += *disk_fnam;
        }
        else
            c1 = (UINT16)*disk_fnam;

        /* Convert to upper letter */
        if ( (*in_fnam >= 'a') && (*in_fnam <= 'z') )
            c2 = (UINT16) ('A' + *in_fnam - 'a');
        else if (*in_fnam > 0x7f)
        {
            c2 = (UINT16)*in_fnam<<8;
            in_fnam++;
            c2 += *in_fnam;
        }
        else
            c2 = (UINT16)*in_fnam;

        if (c1 != c2 )
            if (c2 != (UINT16)'?')  /* ? is wild card */
/****/
                return(NO);
        disk_fnam++;
        in_fnam++;
    }
}


/************************************************************************
* FUNCTION                                                              
*                                                                       
*       pc_strcat                                                       
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       strcat                                                          
*                                                                       
* AUTHOR                                                                
*                                                                       
*       Kyoichiro Toda
*                                                                       
* INPUTS                                                                
*                                                                       
*       to                          To data buffer                      
*       from                        From data buffer                    
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       None.                                                           
*                                                                       
*************************************************************************/
VOID pc_strcat(UINT8 *to, UINT8 *from)
{

    while (*to)  to++;
    while (*from) *to++ = *from++;
    *to = '\0';
}


/************************************************************************
* FUNCTION                                                              
*                                                                       
*       pc_usewdcard                                                    
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       Check the use wild card.                                        
*                                                                       
* AUTHOR                                                                
*                                                                       
*       Kyoichiro Toda
*                                                                       
* INPUTS                                                                
*                                                                       
*       code                                name                        
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       YES                                 Use the wild card.          
*       NO                                  Not use the wild card.      
*                                                                       
*************************************************************************/
INT pc_use_wdcard(UINT8 *code)
{

    while (*code)
    {
        if ( (*code == '*') || (*code == '?') )
            return(YES);
/*** victor for UNICODE */
        if ( *code > 0x7f )
            code++;
/****/

        code++;
    }
    return(NO);
}


/************************************************************************
* FUNCTION                                                              
*                                                                       
*       pc_use_upperbar                                                 
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       Check the use upperbar name.                                    
*       ' '(space), '.'(period), '=', '[', ']', ';', ':', '+', ','      
*                                                                       
* AUTHOR                                                                
*                                                                       
*       Kyoichiro Toda
*                                                                       
* INPUTS                                                                
*                                                                       
*       code                        File name or File extension         
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       YES                                 Use the upperbar name.      
*       NO                                  Not use the upperbar name.  
*                                                                       
*************************************************************************/
INT pc_use_upperbar(UINT8 *code)
{
UINT16      n, j;
UINT16      period = 0;


    n = j = 0;

    while (*code)
    {
        switch (*code)
        {
        case ' ':
        case '=':
        case '[':
        case ']':
        case ';':
        case '+':
        case ',':
            return(YES);

        case '.':
        {
            /* filename.... or extension..... */
            if (*(code+1) == '\0')
            {
                period = j = 0;
            }
            else
            {
                period++;
            }
            break;
        }
        default:
            break;
        }

        /* Check the number of extension */
        if (period)
        {
            if (j++ > 3)
                return(YES);
        }
        /* Check the number of filename */
        else
        {
            n++;
            if (n > 8)
                return(YES);
        }
/*** victor for UNICODE */
        if( *code > 0x7f)
            return(YES);
/****/
        code++;
    }

    /* Another differentiate filename and extension ? */
    if (period > 1)
        return(YES);

    return(NO);
}


/************************************************************************
* FUNCTION                                                              
*                                                                       
*       pc_checkpath                                                    
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       Check the path name or Volume lable.                            
*                                                                       
* AUTHOR                                                                
*                                                                       
*       Kyoichiro Toda
*                                                                       
* INPUTS                                                                
*                                                                       
*       code                                Path name or Volume lable.  
*       vol                                 YES : Volume lable          
*                                           NO  : Path name             
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       YES                                 Success.                    
*       NO                                  Path name error.            
*                                                                       
*************************************************************************/
INT pc_checkpath(UINT8 *code, INT vol)
{
UINT16      n = 0;


    if (!code)
        return(YES);

    while (code[n])
    {
/*** victor for UNICODE
        if ( (code[n] < 0x20) || (code[n] > 0x7E) )*/
        if ( code[n] < 0x20 )
/****/
            return(NO);

        if (!vol)
        {
            if (code[n] == ':')
            {
                if ( (n != 1) || (code[n+1] != BACKSLASH) )
                    return(NO);
            }

            if (code[n] == BACKSLASH)
            {
                if (code[n+1] == BACKSLASH)
                    return(NO);
            }
        }
        else
        {
            switch (code[n])
            {
            case '.':
            case ':':
            case '=':
            case '[':
            case '\\':
            case ']':
                return(NO);

            default:
                break;
            }
        }

        switch (code[n])
        {
        case '"':
        case '*':
        case ',':
        case '/':
        case ';':
        case '<':
        case '>':
        case '?':
        case '|':
            return(NO);

        default:
            break;
        }

/*** victor for UNICODE */
        if ( code[n] > 0x7f )
            n++;
/****/
        n++;
    }

    return(YES);
}


/************************************************************************
* FUNCTION                                                              
*                                                                       
*       _swap16                                                         
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       Convert a 16 bit intel item to a portable 16 bit.               
*                                                                       
* AUTHOR                                                                
*                                                                       
*       Takahiro Takahashi
*                                                                       
* INPUTS                                                                
*                                                                       
*       *to                                 After Convert data.         
*       *from                               Before Convert data.        
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       None.                                                           
*                                        

⌨️ 快捷键说明

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