■ ディレクトリ中のファイルを一覧表示
/*
** 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;
}