| 24 |
/* MAKAI start */ |
/* MAKAI start */ |
| 25 |
#include <unistd.h> |
#include <unistd.h> |
| 26 |
#include <libgen.h> |
#include <libgen.h> |
| 27 |
|
#include <limits.h> |
| 28 |
/* MAKAI end */ |
/* MAKAI end */ |
| 29 |
|
|
| 30 |
#if defined(WIN32) |
#if defined(WIN32) |
| 68 |
int umeLen; |
int umeLen; |
| 69 |
|
|
| 70 |
FILE *tfp; |
FILE *tfp; |
| 71 |
|
|
| 72 |
|
unsigned int seed; |
| 73 |
|
int verbose; |
| 74 |
/* MAKAI end */ |
/* MAKAI end */ |
| 75 |
|
|
| 76 |
/* CRYPT64 記述子 */ |
/* CRYPT64 記述子 */ |
| 110 |
comment( str ) |
comment( str ) |
| 111 |
char *str; |
char *str; |
| 112 |
{ |
{ |
|
/* |
|
|
[0] 全数 |
|
|
[1] 二構 |
|
|
[2] 飛石 |
|
|
[3] 回文 |
|
|
[4] 山彦 |
|
|
[5] 双連 |
|
|
[6] 最長 |
|
|
[7] 最短 |
|
|
[8] ぼる |
|
|
[a] 増大 |
|
|
[b] 減少 |
|
|
[c] 拡飛 |
|
|
[d] 飛連 |
|
|
[e] 八雲 |
|
|
[f] 浪漫 |
|
|
[g] 怒連 |
|
|
*/ |
|
| 113 |
if ( strlen( str ) >= 4 ) { |
if ( strlen( str ) >= 4 ) { |
| 114 |
if ( str[1] == '[' && str[3] == ']' ) { |
if ( str[1] == '[' && str[3] == ']' ) { |
| 115 |
switch ( str[2] ) { |
switch ( str[2] ) { |
| 116 |
case '0': |
case '0': special |= ST_ALLN; break; |
| 117 |
special |= ST_ALLN; |
case '1': special |= ST_NIKO; break; |
| 118 |
printf( "全数\n" ); |
case '8': special |= ST_BUOO; break; |
|
break; |
|
|
case '1': |
|
|
special |= ST_NIKO; |
|
|
printf( "二構\n" ); |
|
|
break; |
|
|
case '8': |
|
|
special |= ST_BUOO; |
|
|
printf( "ぶお\n" ); |
|
|
break; |
|
| 119 |
} |
} |
| 120 |
} |
} |
| 121 |
} |
} |
| 1346 |
break; |
break; |
| 1347 |
} |
} |
| 1348 |
} |
} |
| 1349 |
printf( "%s [-t num|-m mask] [\"str\"]\n", myName ); |
printf( "%s [-t num|-m mask] [-s num] [-v] [\"str\"]\n", myName ); |
| 1350 |
printf( " -t num : 検索スレッド数 ( %d ≦ num ≦ %d )\n", |
printf( " -t num : 検索スレッド数 ( %d ≦ num ≦ %d )\n", |
| 1351 |
MIN_THREAD, MAX_THREAD ); |
MIN_THREAD, MAX_THREAD ); |
| 1352 |
printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n", |
printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n", |
| 1353 |
MAX_THREAD ); |
MAX_THREAD ); |
| 1354 |
printf( " 【-t と -m は排他】\n" ); |
printf( " 【-t と -m は排他】\n" ); |
| 1355 |
|
printf( " -s num : 乱数の種 ( 1 ≦ num ≦ %u )\n", UINT_MAX ); |
| 1356 |
|
printf( " -v : 冗長メッセージ\n" ); |
| 1357 |
printf( " str : 先頭に埋め込む文字列 ( %d ≦ str のバイト数 ≦ %d )\n", |
printf( " str : 先頭に埋め込む文字列 ( %d ≦ str のバイト数 ≦ %d )\n", |
| 1358 |
MIN_UME, MAX_UME ); |
MIN_UME, MAX_UME ); |
| 1359 |
} |
} |
| 1467 |
|
|
| 1468 |
nThread = 0; |
nThread = 0; |
| 1469 |
pmask = 0; |
pmask = 0; |
| 1470 |
while ( (optChar = getopt(argc, argv, "t:m:h")) != EOF ) { |
seed = 0; |
| 1471 |
|
verbose = 0; |
| 1472 |
|
while ( (optChar = getopt(argc, argv, "t:m:s:vh")) != EOF ) { |
| 1473 |
switch ( optChar ) { |
switch ( optChar ) { |
| 1474 |
case 't': |
case 't': |
| 1475 |
pmask = 0; |
pmask = 0; |
| 1505 |
exit( 1 ); |
exit( 1 ); |
| 1506 |
} |
} |
| 1507 |
break; |
break; |
| 1508 |
|
case 's': |
| 1509 |
|
if ( optarg[0] == '-' ) { |
| 1510 |
|
usage( argv[0] ); |
| 1511 |
|
exit( 1 ); |
| 1512 |
|
} |
| 1513 |
|
seed = (unsigned int)atoi( optarg ); |
| 1514 |
|
if ( seed < 1 || seed > UINT_MAX ) { |
| 1515 |
|
usage( argv[0] ); |
| 1516 |
|
exit( 1 ); |
| 1517 |
|
} |
| 1518 |
|
break; |
| 1519 |
|
case 'v': |
| 1520 |
|
verbose = 1; |
| 1521 |
|
break; |
| 1522 |
case 'h': |
case 'h': |
| 1523 |
usage( argv[0] ); |
usage( argv[0] ); |
| 1524 |
exit( 0 ); |
exit( 0 ); |
| 1543 |
usage( argv[0] ); |
usage( argv[0] ); |
| 1544 |
exit( 1 ); |
exit( 1 ); |
| 1545 |
} |
} |
| 1546 |
|
|
| 1547 |
|
if ( verbose ) { |
| 1548 |
|
printf( "乱数の種 = %u\n", seed ); |
| 1549 |
|
} |
| 1550 |
} |
} |
| 1551 |
/* MAKAI end */ |
/* MAKAI end */ |
| 1552 |
|
|
| 1561 |
/* タゲ読み込み */ |
/* タゲ読み込み */ |
| 1562 |
root_expr = expr_parse("target.txt"); |
root_expr = expr_parse("target.txt"); |
| 1563 |
|
|
| 1564 |
|
/* MAKAI start */ |
| 1565 |
|
/* here */ |
| 1566 |
|
if ( verbose ) { |
| 1567 |
|
printf( "特殊検索オプション : " ); |
| 1568 |
|
if ( special & ST_ALLN ) { |
| 1569 |
|
printf( "全数 " ); |
| 1570 |
|
} |
| 1571 |
|
if ( special & ST_NIKO ) { |
| 1572 |
|
printf( "二構 " ); |
| 1573 |
|
} |
| 1574 |
|
if ( special & ST_BUOO ) { |
| 1575 |
|
printf( "ぶお " ); |
| 1576 |
|
} |
| 1577 |
|
if ( special ) { |
| 1578 |
|
printf( "オン!\n" ); |
| 1579 |
|
} else { |
| 1580 |
|
printf( "オールオフ!\n" ); |
| 1581 |
|
} |
| 1582 |
|
} |
| 1583 |
|
/* MAKAI end */ |
| 1584 |
|
|
| 1585 |
/* コードを生成・展開 |
/* コードを生成・展開 |
| 1586 |
起動予定スレッド数に応じて |
起動予定スレッド数に応じて |
| 1587 |
生成するコードを変える */ |
生成するコードを変える */ |
| 1602 |
pmask >>= 1; |
pmask >>= 1; |
| 1603 |
} |
} |
| 1604 |
printf( "を使用します。\n" ); |
printf( "を使用します。\n" ); |
| 1605 |
|
/* だがしかし、Win32 のコードしかここにはない。w */ |
| 1606 |
#ifdef WIN32 |
#ifdef WIN32 |
| 1607 |
SetProcessAffinityMask( GetCurrentProcess(), proc_mask ); |
SetProcessAffinityMask( GetCurrentProcess(), proc_mask ); |
| 1608 |
#endif /* WIN32 */ |
#endif /* WIN32 */ |
| 1649 |
|
|
| 1650 |
/* キーの初期化 */ |
/* キーの初期化 */ |
| 1651 |
/* MAKAI start */ |
/* MAKAI start */ |
| 1652 |
srand(time(NULL)); |
if ( seed == 0 ) { |
| 1653 |
|
srand( time( NULL ) ); |
| 1654 |
|
} else { |
| 1655 |
|
srand( seed ); |
| 1656 |
|
} |
| 1657 |
/* MAKAI end */ |
/* MAKAI end */ |
| 1658 |
key_init(key); |
key_init(key); |
| 1659 |
set_salt(code, crypt64_descs[0], key); |
set_salt(code, crypt64_descs[0], key); |