From 7a28226a9c530061e476e59c15ce6df725432960 Mon Sep 17 00:00:00 2001 From: hikarupsp Date: Mon, 25 Feb 2013 17:41:14 +0900 Subject: [PATCH] =?utf8?q?c2wiki:=E8=A4=87=E6=95=B0=E3=83=95=E3=82=A1?= =?utf8?q?=E3=82=A4=E3=83=AB=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=80=82=20chnlib:?= =?utf8?q?const=20char=20*CHNLIB=5FEnvironment=5FGetFilenameFromPath(const?= =?utf8?q?=20char=20path[])=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92=E4=BF=AE?= =?utf8?q?=E6=AD=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- CHNOSProject/c2wiki/c2wiki/main.c | 107 ++++++++++++++++++++++---------------- CHNOSProject/chn/chnlib.h | 1 + CHNOSProject/chn/chnlib03.c | 25 ++++++++- 3 files changed, 85 insertions(+), 48 deletions(-) diff --git a/CHNOSProject/c2wiki/c2wiki/main.c b/CHNOSProject/c2wiki/c2wiki/main.c index f4cba72..8de3544 100644 --- a/CHNOSProject/c2wiki/c2wiki/main.c +++ b/CHNOSProject/c2wiki/c2wiki/main.c @@ -7,15 +7,20 @@ // #include +#include #include "chnlib.h" int main(int argc, const char * argv[]) { - FILE *fp; + FILE *fp, *outfile; CHNLIB_String *line; CHNLIB_UIPArray *root, *wordlist; + int files; int i, i_max; int level, recording; + time_t now; + struct tm *pnow; + char s[1024]; CHNLIB_Environment_SetCurrentWorkingDirectory(argv[0]); @@ -24,63 +29,73 @@ int main(int argc, const char * argv[]) return 0; } - fp = fopen(argv[1], "rb"); - if(fp == NULL){ - printf("fopen error. Abort.\n"); - return 1; - } - + //解析用リストの初期化 wordlist = CHNLIB_UIPArray_Initialize(); CHNLIB_UIPArray_AppendLast(&wordlist, 1, CHNLIB_String_Initialize("{")); CHNLIB_UIPArray_AppendLast(&wordlist, 2, CHNLIB_String_Initialize("}")); CHNLIB_UIPArray_AppendLast(&wordlist, 3, CHNLIB_String_Initialize("//")); - root = CHNLIB_UIPArray_Initialize(); - for(;;){ - line = CHNLIB_ReadLine(fp); - if(line == NULL){ - break; - } - CHNLIB_UIPArray_GetSeparatedStringByUIPArray(&root, wordlist, line); - } + outfile = fopen("out.txt", "wb"); - fclose(fp); + now = time(NULL); + pnow = localtime(&now); + strftime(s, sizeof(s), "-%G/%m/%d %T 現在\n", pnow); + fputs(s, outfile); - i_max = CHNLIB_UIPArray_GetNumberOfDatas(root); - fp = fopen("out.txt", "wb"); - - recording = False; - level = 0; - for(i = 0; i < i_max; i++){ - switch(CHNLIB_UIPArray_GetData32ByIndex(root, i)){ - case 1: //"{" - if(level == 0){ - fprintf(fp, "***%s\n", CHNLIB_String_GetReferencePointerOfCString(CHNLIB_UIPArray_GetPointerByIndex(root, i - 1))); - recording = True; - } else if(recording){ - recording = False; - fprintf(fp, "\n"); - } - level++; - break; - case 2: //"}" - if(recording){ - recording = False; - fprintf(fp, "\n"); + for(files = 1; files < argc; files++){ + fp = fopen(argv[files], "rb"); + if(fp != NULL){ + //ファイルの読み込み + fprintf(outfile, "**%s\n", CHNLIB_Environment_GetFilenameFromPath(argv[files])); + root = CHNLIB_UIPArray_Initialize(); + for(;;){ + line = CHNLIB_ReadLine(fp); + if(line == NULL){ + break; } - level--; - break; - case 3: //"//" - if(recording){ - i++; - fprintf(fp, "%s\n", CHNLIB_String_GetReferencePointerOfCString(CHNLIB_UIPArray_GetPointerByIndex(root, i))); + CHNLIB_UIPArray_GetSeparatedStringByUIPArray(&root, wordlist, line); + } + fclose(fp); + + i_max = CHNLIB_UIPArray_GetNumberOfDatas(root); + recording = False; + level = 0; + for(i = 0; i < i_max; i++){ + switch(CHNLIB_UIPArray_GetData32ByIndex(root, i)){ + case 1: //"{" + if(level == 0){ + fprintf(outfile, "***%s\n", CHNLIB_String_GetReferencePointerOfCString(CHNLIB_UIPArray_GetPointerByIndex(root, i - 1))); + recording = True; + } else if(recording){ + recording = False; + fprintf(outfile, "\n"); + } + level++; + break; + case 2: //"}" + if(recording){ + recording = False; + fprintf(outfile, "\n"); + } + level--; + break; + case 3: //"//" + if(recording){ + i++; + fprintf(outfile, "%s\n", CHNLIB_String_GetReferencePointerOfCString(CHNLIB_UIPArray_GetPointerByIndex(root, i))); + } + break; } - break; + } + + CHNLIB_UIPArray_FreeSelectedAll(&root); + } else{ + printf("Can't open file [%s].\n", argv[files]); } } - fflush(fp); - fclose(fp); + fclose(outfile); + return 0; } diff --git a/CHNOSProject/chn/chnlib.h b/CHNOSProject/chn/chnlib.h index 27fdf28..3bca6ed 100755 --- a/CHNOSProject/chn/chnlib.h +++ b/CHNOSProject/chn/chnlib.h @@ -117,6 +117,7 @@ CHNLIB_String *CHNLIB_ReadLine(FILE *fp); //@chnlib03.c void CHNLIB_Environment_SetCurrentWorkingDirectory(const char apppath[]); +const char *CHNLIB_Environment_GetFilenameFromPath(const char path[]); //@chnlib05.c int CHNLIB_UTF8_GetCharacterType(char c); diff --git a/CHNOSProject/chn/chnlib03.c b/CHNOSProject/chn/chnlib03.c index 3eb6b5c..1884a6e 100644 --- a/CHNOSProject/chn/chnlib03.c +++ b/CHNOSProject/chn/chnlib03.c @@ -17,6 +17,7 @@ #include //+---int chdir(const char *path); カレントディレクトリの変更 //+---char *getcwd(char *buf, size_t size); 現在のカレントディレクトリを取得 +#define CHNLIB_PATH_SEPARATOR '/' #endif @@ -25,6 +26,7 @@ #define getcwd(a,b) _getcwd(a,b) //+---int _chdir(const char *dirname); //+---char *_getcwd(char *buffer, int maxlen); +#define CHNLIB_PATH_SEPARATOR '\' #endif @@ -34,10 +36,10 @@ void CHNLIB_Environment_SetCurrentWorkingDirectory(const char apppath[]) { + //カレントディレクトリを実行ファイルのディレクトリに変更 char path[FILENAME_MAX]; int i, last; - - //カレントディレクトリを実行ファイルのディレクトリに変更 + snprintf(path, sizeof(path), "%s", apppath); last = 0; for(i = 0; i < FILENAME_MAX; i++){ @@ -56,3 +58,22 @@ void CHNLIB_Environment_SetCurrentWorkingDirectory(const char apppath[]) return; } + +const char *CHNLIB_Environment_GetFilenameFromPath(const char path[]) +{ + //path文字列から、ファイル名を指し示す文字列の先頭部分のポインタを返す。 + int i, p; + + if(path == NULL){ + return NULL; + } + + p = 0; + for(i = 0; path[i] != '\0'; i++){ + if(path[i] == CHNLIB_PATH_SEPARATOR){ + p = i + 1; + } + } + + return &path[p]; +} -- 2.11.0