Mercurial > mercurial > hgweb_xdwtools.cgi
comparison xdwsort.cpp @ 8:61ce4754737e
bug fix.
| author | pyon@macmini |
|---|---|
| date | Tue, 03 Apr 2018 00:11:01 +0900 |
| parents | edfa39292d78 |
| children |
comparison
equal
deleted
inserted
replaced
| 7:8de5b1bd9506 | 8:61ce4754737e |
|---|---|
| 1 /* Makefile | 1 /* Makefile |
| 2 debug: xdwsort.c | 2 debug: xdwsort.cpp |
| 3 #rm -rf tempXXXX | 3 #rm -rf tempXXXX |
| 4 #cls | 4 #cls |
| 5 gcc -g -O0 -I. xdwsort.c xdwapi.lib | 5 gcc -g -O0 -I. xdwsort.cpp xdwapi.lib |
| 6 #date | 6 #date |
| 7 #./a.exe target.xdw | 7 #./a.exe target.xdw |
| 8 #date | 8 #date |
| 9 | 9 |
| 10 release: xdwsort.c | 10 release: xdwsort.cpp |
| 11 gcc -I. xdwsort.c xdwapi.lib -static -o xdwsort.exe | 11 gcc -I. xdwsort.cpp xdwapi.lib -static -o xdwsort.exe |
| 12 strip xdwsort.exe | 12 strip xdwsort.exe |
| 13 | 13 |
| 14 clean: | 14 clean: |
| 15 rm -rf tempXXXX | 15 rm -rf tempXXXX |
| 16 */ | 16 */ |
| 17 | 17 |
| 18 #include <stdbool.h> | |
| 18 #include <stdio.h> | 19 #include <stdio.h> |
| 19 #include <string.h> | 20 #include <string.h> |
| 20 #include <stdlib.h> | 21 #include <stdlib.h> |
| 21 #include <time.h> | 22 #include <time.h> |
| 22 #include <glob.h> | 23 #include <glob.h> |
| 55 fprintf( stderr, "エラーが発生しました。" ); | 56 fprintf( stderr, "エラーが発生しました。" ); |
| 56 break; | 57 break; |
| 57 } | 58 } |
| 58 } | 59 } |
| 59 | 60 |
| 60 void print_now( char *msg ) { | 61 void print_now( const char *msg ) { |
| 61 time_t now = time( NULL ); | 62 time_t now = time( NULL ); |
| 62 struct tm *ts = localtime( &now ); | 63 struct tm *ts = localtime( &now ); |
| 63 | 64 |
| 64 char buf[80]; | 65 char buf[80]; |
| 65 strftime( buf, sizeof( buf ), "%H:%M:%S %Z", ts ); | 66 strftime( buf, sizeof( buf ), "%H:%M:%S %Z", ts ); |
| 70 | 71 |
| 71 /* オプションの解析 */ | 72 /* オプションの解析 */ |
| 72 char prog[128]; | 73 char prog[128]; |
| 73 strcpy( prog, argv[0] ); | 74 strcpy( prog, argv[0] ); |
| 74 | 75 |
| 75 int pnow = 0; | 76 bool pnow = false; |
| 77 bool debug = false; | |
| 76 char c; | 78 char c; |
| 77 while ( --argc > 0 && ( *++argv )[0] == '-' ) { | 79 while ( --argc > 0 && ( *++argv )[0] == '-' ) { |
| 78 while ( c = *++argv[0] ) { | 80 while ( c = *++argv[0] ) { |
| 79 switch ( c ) { | 81 switch ( c ) { |
| 80 case 'v': | 82 case 'v': |
| 81 pnow = 1; | 83 pnow = true; |
| 82 print_now( "start." ); | 84 print_now( "start." ); |
| 83 break; | 85 break; |
| 84 case 'l': /* now writing... */ | 86 case 'l': /* now writing... */ |
| 87 break; | |
| 88 case 'd': | |
| 89 pnow = true; | |
| 90 debug = true; | |
| 91 print_now( "debug-mode start." ); | |
| 85 break; | 92 break; |
| 86 default: | 93 default: |
| 87 fprintf( stderr, "error: illegal option '%c'.\n", c ); | 94 fprintf( stderr, "error: illegal option '%c'.\n", c ); |
| 88 exit( 1 ); | 95 exit( 1 ); |
| 89 } | 96 } |
| 91 } | 98 } |
| 92 | 99 |
| 93 if ( argc < 1 ) { | 100 if ( argc < 1 ) { |
| 94 fprintf( stderr, "%s infile\n", prog ); | 101 fprintf( stderr, "%s infile\n", prog ); |
| 95 fprintf( stderr, "%s -v infile\n", prog ); | 102 fprintf( stderr, "%s -v infile\n", prog ); |
| 103 fprintf( stderr, "%s -d infile\n", prog ); | |
| 96 exit( 1 ); | 104 exit( 1 ); |
| 97 } | 105 } |
| 98 | 106 |
| 99 /* ソートリストの取り込み */ | 107 /* ソートリストの取り込み */ |
| 100 if ( pnow ) print_now( "reading sort-list." ); | 108 if ( pnow ) print_now( "reading sort-list." ); |
| 107 fprintf( stderr, "can't allocate memory\n" ); | 115 fprintf( stderr, "can't allocate memory\n" ); |
| 108 exit( 1 ); | 116 exit( 1 ); |
| 109 } | 117 } |
| 110 | 118 |
| 111 if ( ( fp = fopen( "sort.list", "r" ) ) == NULL ) { | 119 if ( ( fp = fopen( "sort.list", "r" ) ) == NULL ) { |
| 112 fprintf( stderr, "%s: can't open file [sort.list]\n", argv[0] ); | 120 fprintf( stderr, "%s: can't open file [sort.list]\n", prog ); |
| 113 exit ( 1 ); | 121 exit ( 1 ); |
| 114 } | 122 } |
| 115 | 123 |
| 116 char *p; | 124 char *p; |
| 117 int slN = 0; | 125 int slN = 0; |
| 221 sprintf( buf, "tempXXXX/%04d.xdw", p + 1 ); | 229 sprintf( buf, "tempXXXX/%04d.xdw", p + 1 ); |
| 222 _fullpath( in_path, buf, _MAX_PATH ); | 230 _fullpath( in_path, buf, _MAX_PATH ); |
| 223 strncpy( &blk_path[ m * _MAX_PATH ], in_path, _MAX_PATH ); | 231 strncpy( &blk_path[ m * _MAX_PATH ], in_path, _MAX_PATH ); |
| 224 blk_path_addr[m] = &blk_path[ m * _MAX_PATH ]; | 232 blk_path_addr[m] = &blk_path[ m * _MAX_PATH ]; |
| 225 } | 233 } |
| 226 if ( last_page % BLOCKSZ != 0 ) { | 234 |
| 227 sprintf( buf, "tempXXXX/b%04d.xdw", ++bn ); | 235 sprintf( buf, "tempXXXX/b%04d.xdw", ++bn ); |
| 228 _fullpath( in_path, buf, _MAX_PATH ); | 236 _fullpath( in_path, buf, _MAX_PATH ); |
| 229 api_result = XDW_MergeXdwFiles( blk_path_addr, last_page % BLOCKSZ, in_path, NULL ); | 237 int mod = last_page % BLOCKSZ; |
| 230 if ( api_result < 0 ) { | 238 if ( mod == 0 ) mod = BLOCKSZ; |
| 231 print_error( api_result ); | 239 api_result = XDW_MergeXdwFiles( blk_path_addr, mod, in_path, NULL ); |
| 232 exit( 1 ); | 240 if ( api_result < 0 ) { |
| 233 } | 241 print_error( api_result ); |
| 242 exit( 1 ); | |
| 234 } | 243 } |
| 235 | 244 |
| 236 // ブロックをまとめる | 245 // ブロックをまとめる |
| 237 for ( int b = 0; b < bn; b++ ) { | 246 for ( int b = 0; b < bn; b++ ) { |
| 238 sprintf( buf, "tempXXXX/b%04d.xdw", b + 1 ); | 247 sprintf( buf, "tempXXXX/b%04d.xdw", b + 1 ); |
| 289 print_error( api_result ); | 298 print_error( api_result ); |
| 290 exit( 1 ); | 299 exit( 1 ); |
| 291 } | 300 } |
| 292 | 301 |
| 293 /* 後処理 */ | 302 /* 後処理 */ |
| 294 if ( pnow ) print_now( "cleaning." ); | 303 if ( !debug ) { |
| 295 glob_t globbuf; | 304 if ( pnow ) print_now( "cleaning." ); |
| 296 glob( "tempXXXX/*.*", 0, NULL, &globbuf ); | 305 glob_t globbuf; |
| 297 for ( int i = 0; i < globbuf.gl_pathc; i++ ) { | 306 glob( "tempXXXX/*.*", 0, NULL, &globbuf ); |
| 298 _fullpath( in_path, globbuf.gl_pathv[i], _MAX_PATH ); | 307 for ( int i = 0; i < globbuf.gl_pathc; i++ ) { |
| 299 remove( in_path ); | 308 _fullpath( in_path, globbuf.gl_pathv[i], _MAX_PATH ); |
| 300 } | 309 remove( in_path ); |
| 301 globfree( &globbuf ); | 310 } |
| 302 rmdir( "tempXXXX" ); | 311 globfree( &globbuf ); |
| 312 rmdir( "tempXXXX" ); | |
| 313 } | |
| 303 | 314 |
| 304 if ( pnow ) print_now( "done." ); | 315 if ( pnow ) print_now( "done." ); |
| 305 return 0; | 316 return 0; |
| 306 } | 317 } |
| 307 | 318 |
