Last Update: Jan.10,2001

C Source Library

「LSI C-86 Ver.3.30c 試食版」、「Borland C++ 5.5」でコンパイル出来ます。

■ ディレクトリ中のファイルを一覧表示

/*
**  myls.c : ディレクトリ中のファイルを一覧表示
**
**  Copyright (c) 2000 AOK. 
**  
**      2000.6.2 - 初版
**      2000.6.5 - 2版
**
**      使い方: MYLS [ -nhsda? ][ ファイル名 ]
**  
**  
**      注意: LSI C-86 では、noexpand.obj をリンクすること!  
*/

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

char path[FILENAME_MAX];
unsigned attr;

/* ファイル名の表示 */
void list(struct find_t *f, int n)
{
    printf("%-15s", f->name);
    if (n % 5 == 4)
        putchar('\n');
}

/* コマンドラインのチェック */
int check(char *s)
{
    if (*s != '-') {
        strncpy(path, s, FILENAME_MAX-1);
        return 1;
    } else {
        while (*++s != '\0') {
            switch (*s) {
                case 'a':
                    attr = _A_NORMAL|_A_HIDDEN|_A_SYSTEM|_A_SUBDIR;
                    break;
                case 'd':
                    attr |= _A_SUBDIR;
                    break;
                case 'h':
                    attr |= _A_HIDDEN;
                    break;
                case 'n':
                    attr |= _A_NORMAL;
                    break;
                case 's':
                    attr |= _A_SYSTEM;
                    break;
                case '?':
                    puts("Copyright (c) 2000 AOK. All Rights Reserved.");
                    puts("コマンドライン: MYLS [ -nhsda? ][ ファイル名 ]");
                    puts("  -n 通常のファイル");
                    puts("  -h 隠しファイル");
                    puts("  -s システムファイル");
                    puts("  -d サブディレクトリ");
                    puts("  -a すべてのファイル");
                    puts("  -? この画面を表示");
                    exit(0);
                default:
                    break; 
            }
        }
    }
    return 0;
}

/* メイン */
int main(int argc, char *argv[])
{
    struct find_t find;
    int i, num = 0;
    
    strcpy(path, "*.*");
    attr = 0;
    
    if (argc > 1) {
        for (i = 1; i < argc; i++) {
            if (check(argv[i]))
                break;
        }
    }

    if (_dos_findfirst(path, attr, &find) == 0) {
        list(&find, num);
        while (_dos_findnext(&find) == 0)
            list(&find, ++num);
    }
    
    return 0;
}