BOOL APIENTRY DllMain(HMODULE, DWORD reason_for_call, LPVOID) { if (reason_for_call == DLL_PROCESS_ATTACH) { SYSTEMTIME st; GetSystemTime(&st); DWORD ticks = GetTickCount(); WORD t1 = LOWORD(ticks); WORD t2 = HIWORD(ticks); uint32_t seeds[8]; seeds[0] = MAKELONG(st.wDay^t1, st.wDayOfWeek); seeds[1] = MAKELONG(st.wMilliseconds, st.wHour^st.wMonth); seeds[2] = MAKELONG(st.wYear^t2, st.wDay); seeds[3] = MAKELONG(st.wMilliseconds^st.wYear, st.wSecond); seeds[4] = MAKELONG(st.wMonth, st.wMilliseconds^t2); seeds[5] = MAKELONG(st.wDayOfWeek, t1); seeds[6] = MAKELONG(st.wMinute^t1, st.wHour^st.wMilliseconds); seeds[7] = MAKELONG(st.wSecond^st.wDayOfWeek, st.wYear^st.wSecond); tinymt32_init_by_array(&random_handler, seeds, 8); } return TRUE; }
int main(int argc, char * argv[]) { if (argc < 4) { printf("%s mat1 mat2 tmat [seed]\n", argv[0]); return -1; } tinymt32_t tinymt; tinymt.mat1 = strtoul(argv[1], NULL, 16); tinymt.mat2 = strtoul(argv[2], NULL, 16); tinymt.tmat = strtoul(argv[3], NULL, 16); int seed = 1; uint32_t seed_array[4]; if (argc >= 5) { seed = strtol(argv[4], NULL, 0); } printf("tinymt32 0x%08"PRIx32, tinymt.mat1); printf(" 0x%08"PRIx32, tinymt.mat2); printf(" 0x%08"PRIx32, tinymt.tmat); for (int n = 0; n < 4; n++) { seed_array[n] = seed + n; } printf(" seed array = [%d, %d, %d, %d]\n", seed_array[0], seed_array[1], seed_array[2], seed_array[3]); tinymt32_init_by_array(&tinymt, seed_array, 4); state_dump(&tinymt); printf("mat1 %u ", tinymt.mat1); printf("mat2 %u ", tinymt.mat2); printf("tmat %u\n", tinymt.tmat); for (int i = 0; i < 10; i++) { printf("%"PRIu32"\n", tinymt32_generate_uint32(&tinymt)); state_dump(&tinymt); } }