Пример #1
0
Opnd
get_dst(Operation operation, int pos)
{
    if (operation.is_phi_handle())
	return get_dst(*operation.get_phi_handle());
    else
	return get_dst(*operation.get_instr_handle(), pos);
}
Пример #2
0
static void
nv04_surface_copy_cpu(struct gl_context *ctx,
                      struct nouveau_surface *dst,
                      struct nouveau_surface *src,
                      int dx, int dy, int sx, int sy,
                      int w, int h)
{
    int x, y;
    get_offset_t get_dst = (dst->layout == SWIZZLED ?
                            get_swizzled_offset : get_linear_offset);
    get_offset_t get_src = (src->layout == SWIZZLED ?
                            get_swizzled_offset : get_linear_offset);
    void *dp, *sp;

    nouveau_bo_map(dst->bo, NOUVEAU_BO_WR, context_client(ctx));
    nouveau_bo_map(src->bo, NOUVEAU_BO_RD, context_client(ctx));

    dp = dst->bo->map + dst->offset;
    sp = src->bo->map + src->offset;

    for (y = 0; y < h; y++) {
        for (x = 0; x < w; x++) {
            memcpy(dp + get_dst(dst, dx + x, dy + y),
                   sp + get_src(src, sx + x, sy + y), dst->cpp);
        }
    }
}
Пример #3
0
bool AdminNetLinkAdd::commit(AdminState* admin) throw (admin_error)
{
	AdminNetLinkBase::commit(admin);

	AdminState::WriteLockRecord net_rec = get_net_write();
	NetStatePtr net = boost::dynamic_pointer_cast<NetState>(net_rec.first);

	NetVertex v_src;
	if (!net->get_node(get_src(), v_src, *net_rec.second))
		return false;

	NetVertex v_dst;
	if (!net->get_node(get_dst(), v_dst, *net_rec.second))
		return false;

	NetEdge e;
	if (!net->add_edge(v_src, v_dst, e, *net_rec.second))
		return false;

	net->set_name(e, get_link(), *net_rec.second);
	return true;
}
Пример #4
0
int main()
{
#ifndef __EMSCRIPTEN__
	_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
#endif

	printf ("{ \"workload\": %u, \"results\": [\n", N);
	assert(N%4 == 0); // Don't care about the tail for now.
	float *src = get_src();//(float*)aligned_alloc(16, N*sizeof(float));
	for(int i = 0; i < N; ++i)
		src[i] = (float)rand() / RAND_MAX;
	float *src2 = get_src2();//(float*)aligned_alloc(16, N*sizeof(float));
	for(int i = 0; i < N; ++i)
		src2[i] = (float)rand() / RAND_MAX;
	float *dst = get_dst();//(float*)aligned_alloc(16, N*sizeof(float));

	float scalarTime;
	SETCHART("load");
	START();
		for(int i = 0; i < N; ++i)
			dst[i] = src[i];
	ENDSCALAR(checksum_dst(dst), "scalar");

	LS_TEST("_mm_load_ps", _mm_load_ps, 0, _mm_store_ps, 0);
	LS_TEST("_mm_load_ps1", _mm_load_ps1, 1, _mm_store_ps, 0);
	LS_TEST("_mm_load_ss", _mm_load_ss, 1, _mm_store_ps, 0);
	LS_TEST("_mm_load1_ps", _mm_load1_ps, 1, _mm_store_ps, 0);
	// _mm_loadh_pi
	// _mm_loadl_pi
	LS_TEST("_mm_loadr_ps", _mm_loadr_ps, 0, _mm_store_ps, 0);
	LS_TEST("_mm_loadu_ps", _mm_loadu_ps, 1, _mm_store_ps, 0);

	SETCHART("set");
	SS_TEST("_mm_set_ps", _mm_set_ps(src[i+2], src[i+1], src[i+5], src[i+0]));
	SS_TEST("_mm_set_ps1", _mm_set_ps1(src[i]));
	SS_TEST("_mm_set_ss", _mm_set_ss(src[i]));
	SS_TEST("_mm_set1_ps", _mm_set1_ps(src[i]));
	SS_TEST("_mm_setr_ps", _mm_set_ps(src[i+2], src[i+1], src[i+5], src[i+0]));
	SS_TEST("_mm_setzero_ps", _mm_setzero_ps());

	SETCHART("move");
	SS_TEST("_mm_move_ss", _mm_move_ss(_mm_load_ps(src+i), _mm_load_ps(src2+i)));
	SS_TEST("_mm_movehl_ps", _mm_movehl_ps(_mm_load_ps(src+i), _mm_load_ps(src2+i)));
	SS_TEST("_mm_movelh_ps", _mm_movelh_ps(_mm_load_ps(src+i), _mm_load_ps(src2+i)));

	SETCHART("store");
	LS_TEST("_mm_store_ps", _mm_load_ps, 0, _mm_store_ps, 0);
	LS_TEST("_mm_store_ps1", _mm_load_ps, 0, _mm_store_ps1, 0);
	LS_TEST("_mm_store_ss", _mm_load_ps, 0, _mm_store_ss, 1);
	LS64_TEST("_mm_storeh_pi", _mm_load_ps, 0, _mm_storeh_pi, 1);
	LS64_TEST("_mm_storel_pi", _mm_load_ps, 0, _mm_storel_pi, 1);
	LS_TEST("_mm_storer_ps", _mm_load_ps, 0, _mm_storer_ps, 0);
	LS_TEST("_mm_storeu_ps", _mm_load_ps, 0, _mm_storeu_ps, 1);
	LS_TEST("_mm_stream_ps", _mm_load_ps, 0, _mm_stream_ps, 0);

	SETCHART("arithmetic");
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] += src2[0]; dst[1] += src2[1]; dst[2] += src2[2]; dst[3] += src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar add");
	BINARYOP_TEST("_mm_add_ps", _mm_add_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_add_ss", _mm_add_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] /= src2[0]; dst[1] /= src2[1]; dst[2] /= src2[2]; dst[3] /= src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar div");
	BINARYOP_TEST("_mm_div_ps", _mm_div_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_div_ss", _mm_div_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] *= src2[0]; dst[1] *= src2[1]; dst[2] *= src2[2]; dst[3] *= src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar mul");
	BINARYOP_TEST("_mm_mul_ps", _mm_mul_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_mul_ss", _mm_mul_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] -= src2[0]; dst[1] -= src2[1]; dst[2] -= src2[2]; dst[3] -= src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar sub");
	BINARYOP_TEST("_mm_sub_ps", _mm_sub_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_sub_ss", _mm_sub_ss, _mm_load_ps(src), _mm_load_ps(src2));

	SETCHART("roots");
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = 1.f / dst[0]; dst[1] = 1.f / dst[1]; dst[2] = 1.f / dst[2]; dst[3] = 1.f / dst[3]; } ENDSCALAR(checksum_dst(dst), "scalar rcp");
	UNARYOP_TEST("_mm_rcp_ps", _mm_rcp_ps, _mm_load_ps(src));
	UNARYOP_TEST("_mm_rcp_ss", _mm_rcp_ss, _mm_load_ps(src));

	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = 1.f / sqrtf(dst[0]); dst[1] = 1.f / sqrtf(dst[1]); dst[2] = 1.f / sqrtf(dst[2]); dst[3] = 1.f / sqrtf(dst[3]); } ENDSCALAR(checksum_dst(dst), "scalar rsqrt");
	UNARYOP_TEST("_mm_rsqrt_ps", _mm_rsqrt_ps, _mm_load_ps(src));
	UNARYOP_TEST("_mm_rsqrt_ss", _mm_rsqrt_ss, _mm_load_ps(src));

	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = sqrtf(dst[0]); dst[1] = sqrtf(dst[1]); dst[2] = sqrtf(dst[2]); dst[3] = sqrtf(dst[3]); } ENDSCALAR(checksum_dst(dst), "scalar sqrt");
	UNARYOP_TEST("_mm_sqrt_ps", _mm_sqrt_ps, _mm_load_ps(src));
	UNARYOP_TEST("_mm_sqrt_ss", _mm_sqrt_ss, _mm_load_ps(src));

	SETCHART("logical");
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = ucastf(fcastu(dst[0]) & fcastu(src2[0])); dst[1] = ucastf(fcastu(dst[1]) & fcastu(src2[1])); dst[2] = ucastf(fcastu(dst[2]) & fcastu(src2[2])); dst[3] = ucastf(fcastu(dst[3]) & fcastu(src2[3])); } ENDSCALAR(checksum_dst(dst), "scalar and");
	BINARYOP_TEST("_mm_and_ps", _mm_and_ps, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = ucastf((~fcastu(dst[0])) & fcastu(src2[0])); dst[1] = ucastf((~fcastu(dst[1])) & fcastu(src2[1])); dst[2] = ucastf((~fcastu(dst[2])) & fcastu(src2[2])); dst[3] = ucastf((~fcastu(dst[3])) & fcastu(src2[3])); } ENDSCALAR(checksum_dst(dst), "scalar andnot");
	BINARYOP_TEST("_mm_andnot_ps", _mm_andnot_ps, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = ucastf(fcastu(dst[0]) | fcastu(src2[0])); dst[1] = ucastf(fcastu(dst[1]) | fcastu(src2[1])); dst[2] = ucastf(fcastu(dst[2]) | fcastu(src2[2])); dst[3] = ucastf(fcastu(dst[3]) | fcastu(src2[3])); } ENDSCALAR(checksum_dst(dst), "scalar or");
	BINARYOP_TEST("_mm_or_ps", _mm_or_ps, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = ucastf(fcastu(dst[0]) ^ fcastu(src2[0])); dst[1] = ucastf(fcastu(dst[1]) ^ fcastu(src2[1])); dst[2] = ucastf(fcastu(dst[2]) ^ fcastu(src2[2])); dst[3] = ucastf(fcastu(dst[3]) ^ fcastu(src2[3])); } ENDSCALAR(checksum_dst(dst), "scalar xor");
	BINARYOP_TEST("_mm_xor_ps", _mm_xor_ps, _mm_load_ps(src), _mm_load_ps(src2));

	SETCHART("cmp");
#ifndef __EMSCRIPTEN__ // TODO: Disabled due to https://github.com/kripken/emscripten/issues/2841
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] == src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] == src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] == src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] == src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp==");
	BINARYOP_TEST("_mm_cmpeq_ps", _mm_cmpeq_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_cmpeq_ss", _mm_cmpeq_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] >= src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] >= src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] >= src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] >= src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp>=");
	BINARYOP_TEST("_mm_cmpge_ps", _mm_cmpge_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_cmpge_ss", _mm_cmpge_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] > src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] > src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] > src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] > src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp>");
	BINARYOP_TEST("_mm_cmpgt_ps", _mm_cmpgt_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_cmpgt_ss", _mm_cmpgt_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] <= src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] <= src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] <= src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] <= src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp<=");
	BINARYOP_TEST("_mm_cmple_ps", _mm_cmple_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_cmple_ss", _mm_cmple_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] < src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] < src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] < src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] < src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp<");
	BINARYOP_TEST("_mm_cmplt_ps", _mm_cmplt_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_cmplt_ss", _mm_cmplt_ss, _mm_load_ps(src), _mm_load_ps(src2));
#endif

	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (!Isnan(dst[0]) && !Isnan(src2[0])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (!Isnan(dst[1]) && !Isnan(src2[1])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (!Isnan(dst[2]) && !Isnan(src2[2])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (!Isnan(dst[3]) && !Isnan(src2[3])) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmpord");
	BINARYOP_TEST("_mm_cmpord_ps", _mm_cmpord_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_cmpord_ss", _mm_cmpord_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (Isnan(dst[0]) || Isnan(src2[0])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (Isnan(dst[1]) || Isnan(src2[1])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (Isnan(dst[2]) || Isnan(src2[2])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (Isnan(dst[3]) || Isnan(src2[3])) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmpunord");
	BINARYOP_TEST("_mm_cmpunord_ps", _mm_cmpunord_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_cmpunord_ss", _mm_cmpunord_ss, _mm_load_ps(src), _mm_load_ps(src2));

	SETCHART("max");
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = Max(dst[0], src2[0]); dst[1] = Max(dst[1], src2[1]); dst[2] = Max(dst[2], src2[2]); dst[3] = Max(dst[3], src2[3]); } ENDSCALAR(checksum_dst(dst), "scalar max");
	BINARYOP_TEST("_mm_max_ps", _mm_max_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_max_ss", _mm_max_ss, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = Min(dst[0], src2[0]); dst[1] = Min(dst[1], src2[1]); dst[2] = Min(dst[2], src2[2]); dst[3] = Min(dst[3], src2[3]); } ENDSCALAR(checksum_dst(dst), "scalar min");
	BINARYOP_TEST("_mm_min_ps", _mm_min_ps, _mm_load_ps(src), _mm_load_ps(src2));
	BINARYOP_TEST("_mm_min_ss", _mm_min_ss, _mm_load_ps(src), _mm_load_ps(src2));

	SETCHART("shuffle");
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[3] = dst[1]; dst[2] = dst[0]; dst[1] = src2[3]; dst[0] = src2[2]; } ENDSCALAR(checksum_dst(dst), "scalar shuffle");
//	BINARYOP_TEST("_mm_shuffle_ps", _mm_shuffle_ps, _mm_load_ps(src), _mm_load_ps(src2));
	START();
		__m128 o0 = _mm_load_ps(src);
		__m128 o1 = _mm_load_ps(src2);
		for(int i = 0; i < N; i += 4)
			o0 = _mm_shuffle_ps(o0, o1, _MM_SHUFFLE(1, 0, 3, 2));
		_mm_store_ps(dst, o0);
	END(checksum_dst(dst), "_mm_shuffle_ps");

	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = dst[2]; dst[1] = src2[2]; dst[2] = dst[3]; dst[3] = src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar unpackhi_ps");
	BINARYOP_TEST("_mm_unpackhi_ps", _mm_unpackhi_ps, _mm_load_ps(src), _mm_load_ps(src2));
	START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[2] = dst[1]; dst[1] = dst[0]; dst[0] = src2[0]; dst[3] = src2[1]; } ENDSCALAR(checksum_dst(dst), "scalar unpacklo_ps");
	BINARYOP_TEST("_mm_unpacklo_ps", _mm_unpacklo_ps, _mm_load_ps(src), _mm_load_ps(src2));
	printf("]}\n");
/*
	printf("Finished!\n");
	printf("Total time spent in scalar intrinsics: %f msecs.\n", (double)scalarTotalTicks * 1000.0 / ticks_per_sec());
	printf("Total time spent in SSE1 intrinsics: %f msecs.\n", (double)simdTotalTicks * 1000.0 / ticks_per_sec());
	if (scalarTotalTicks > simdTotalTicks)
		printf("SSE1 was %.3fx faster than scalar!\n", (double)scalarTotalTicks / simdTotalTicks);
	else
		printf("SSE1 was %.3fx slower than scalar!\n", (double)simdTotalTicks / scalarTotalTicks);
*/
#ifdef __EMSCRIPTEN__
	fprintf(stderr,"User Agent: %s\n", emscripten_run_script_string("navigator.userAgent"));
	printf("/*Test finished! Now please close Firefox to continue with benchmark_sse1.py.*/\n");
#endif
	exit(0);
}
Пример #5
0
int	T_device(void)
{
	char *cmp_regexp;	/* ptr to compiled reg expression    */
	char input[32];		/* input string                      */
	char ret[3];		/* return array for regex()          */
	char *work;		/* work int */
	char workstr[128];	/* work string                       */
	char page_str[15];

	enum t_dev_status dev_status;	/* return from get_dst               */
	extern char *__loc1;	/* beginning of reg exp match        */

	extern int COLS;	/* number of cols in CURSES screen   */
	extern int LINES;	/* number of lines in CURSES screen  */
	extern WINDOW *stdscr;	/* standard screen window            */

	extern union shm_pointers shm_addr; /* shared memory union pointers */

	int col = 0;		/* first column displayed on screen  */
	int i = 0;		/* loop counter                      */
	int k;               /* loop counter                      */
	int rc;              /* return value.                     */
	int dev_len;         /* loop counter                      */
	int dev_no=-1;       /* loop counter                      */
	int max_strt_ent = 0;	/* max starting entry                */
	int num_disp = 0;		/* number of THE entries to show     */
	int num_entries = 0;	/* local number of shm HE entries    */
	int row = 0;		/* first row displayed on screen     */
	int strt_ent = 1;	/* first entry on screen             */
	int update_screen = 0;	/* update screen flag                */
	int workint = 0;

	struct ahd_entry *p_td_table = NULL; /* points to begin td seq tbl    */
	struct ahd_entry *p_into_table;	/* points into td sequence table     */

	struct htxshm_HE *p_htxshm_HE;	/* pointer to a htxshm_HE struct     */
	union shm_pointers shm_addr_wk;	/* work ptr into shm                 */

	shm_addr_wk.hdr_addr = shm_addr.hdr_addr; /* copy addr to work space */
	(shm_addr_wk.hdr_addr)++;	/* skip over header                   */

	/*
	 * display screen outline
	 */
	clear();
	refresh();
	display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn", 1, &row, &col, NUM_COLS, NUM_ROWS, 'n');

	/*
	 * loop until operator says to quit
	 */

	for (;;) {
		if ((shm_addr.hdr_addr)->max_entries == 0) {	/* no HE programs?        */
			PRTMSG(MSGLINE, 0, ("There are no Hardware Exerciser programs currently defined."));
			getch();
			fflush(stdin);
			CLRLIN(MSGLINE, 0);
			if (p_td_table != NULL)  {
				free((char *) p_td_table);	/* release memory for td order tbl */
			}
			return (-1);
		}

		else {	/* some HE's defined.                */
			if ((shm_addr.hdr_addr)->max_entries != num_entries) {	/* # HE change? */
				num_entries = init_ahd_tbl(&p_td_table);

				if (num_entries <= 0)  {
					return (num_entries);
				}

				/* problem in init fcn - bye!      */
				else {	/* init fcn ran ok.                */
					if (num_entries <= 13) {	/* 13 or fewer entries? */
						max_strt_ent = 1;
					}

					else {	/* more than 13 entries */
						max_strt_ent = num_entries;
					}	/* endif */
				}	/* endif */
			}	/* endif */
		}		/* endif */

		/*
		 * build screen data for the current strt_ent
		 */
		p_into_table = p_td_table + strt_ent - 1;
		num_disp = num_entries - strt_ent + 1;
		if (num_disp > 13)  {
			num_disp = 13;
		}

		for (i = 1; i <= 13; i++) {
			if (i <= num_disp) {	/* something there? */
				p_htxshm_HE = shm_addr_wk.HE_addr + p_into_table->shm_pos;

				/*
				 * build output characters & attributes for
				 * entry
				 */
				/*
				 * screen entry number
				 */
#ifdef	__HTX_LINUX__
				wcolorout(stdscr, WHITE_BLUE | NORMAL);
#else
				wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE);
#endif
				wmove(stdscr, (i + 6), 3);
				wprintw(stdscr, "%2d", i);

				/*
				 * Device Status
				 */
				work = get_dst(p_htxshm_HE, p_into_table->shm_pos, &dev_status);
				workint = htx_strlen(work);	/* length of status string */
				htx_strncpy(workstr, "        ", 8 - workint);	/* spaces */
				workstr[8 - workint] = '\0';

				/* set display attributes based on status */
				if (dev_status == DST_CP || dev_status == DST_ST || dev_status == DST_RN)  {
#ifdef	__HTX_LINUX__
					wcolorout(stdscr, WHITE_BLUE | NORMAL);
#else
					wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE);
#endif
				}

				if (dev_status == DST_UK || dev_status == DST_SG || dev_status == DST_TM)  {
#ifdef	__HTX_LINUX__
					wcolorout(stdscr, WHITE_BLUE | STANDOUT);
#else
					wcolorout(stdscr, STANDOUT | F_WHITE | B_BLUE);
#endif
				}

				if (dev_status == DST_DD)  {
#ifdef	__HTX_LINUX__
					wcolorout(stdscr, RED_BLACK | STANDOUT);
#else
					wcolorout(stdscr, STANDOUT | F_RED | B_BLACK);
#endif
				}

				if (dev_status == DST_ER || dev_status == DST_HG)  {
#ifdef	__HTX_LINUX__
					wcolorout(stdscr, RED_BLACK | NORMAL);
#else
					wcolorout(stdscr, NORMAL | F_RED | B_BLACK);
#endif
				}

				/* display status */
				mvwaddstr(stdscr, (i + 6), 6, work);

				/* pad field with spaces */

#ifdef	__HTX_LINUX__
				wcolorout(stdscr, WHITE_BLUE | NORMAL);
#else
				wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE);
#endif
				mvwaddstr(stdscr, (i + 6), 6 + workint, workstr);

				/*
				 * Slot, Port, /dev/id, Adapt Desc, and Device
				 * Desc
				 */
				wmove(stdscr, i + 6, 15);
#ifdef	__HTX_LINUX__
				wcolorout(stdscr, WHITE_BLUE | NORMAL);
#else
				wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE);
#endif

				sprintf(workstr, " %.4d ", p_htxshm_HE->slot);
				mvwaddstr(stdscr, (i + 6), 15, workstr);

				sprintf(workstr, " %.4d ", p_htxshm_HE->port);
				mvwaddstr(stdscr, (i + 6), 22, workstr);

				/* set color for device id based on status */
				if (dev_status == DST_CP || dev_status == DST_ST || dev_status == DST_RN || (dev_no+1) == i )  {
#ifdef	__HTX_LINUX__
					wcolorout(stdscr, WHITE_BLUE | STANDOUT);
#else
					wcolorout(stdscr, STANDOUT | F_WHITE | B_BLUE);
#endif
				}

				else  {
#ifdef	__HTX_LINUX__
					wcolorout(stdscr, WHITE_BLUE | NORMAL);
#else
					wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE);
#endif
				}

				sprintf(workstr, " %-7s ", p_htxshm_HE->sdev_id);
				mvwaddstr(stdscr, (i + 6), 29, workstr);
#ifdef	__HTX_LINUX__
				wcolorout(stdscr, WHITE_BLUE | NORMAL);
#else
				wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE);
#endif
				sprintf(workstr, " %-11s ", p_htxshm_HE->adapt_desc);
				mvwaddstr(stdscr, (i + 6), 39, workstr);
				sprintf(workstr, " %-18s ", p_htxshm_HE->device_desc);
				mvwaddstr(stdscr, (i + 6), 53, workstr);
			}

			else {	/* no HE entry for this area of screen */
#ifdef	__HTX_LINUX__
				wcolorout(stdscr, WHITE_BLUE | NORMAL);
#else
				wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE);
#endif
				mvwaddstr(stdscr, (i + 6), 3, "  ");	/* scn entry num */
				mvwaddstr(stdscr, (i + 6), 6, "        ");	/* COE Flag  */
				mvwaddstr(stdscr, (i + 6), 15, "      ");	/* slot fld */
				mvwaddstr(stdscr, (i + 6), 22, "      ");	/* port fld */
				mvwaddstr(stdscr, (i + 6), 29, "         ");	/* sdev_id */
				mvwaddstr(stdscr, (i + 6), 39, "             ");
				/* adapt_desc field */

				mvwaddstr(stdscr, (i + 6), 53, "                    ");			/* device_desc field */

			}	/* endif */

			p_into_table++;
		}		/* endfor */

#ifdef	__HTX_LINUX__
		wcolorout(stdscr, NORMAL);
#else
		wcolorout(stdscr, NORMAL);
#endif

		for (update_screen = FALSE; (update_screen == FALSE);) {

			/*
			 * Read input from keyboard...
			 */
			htx_strncpy(input, "", DIM(input));	/* clear input */
			get_string(stdscr, TD_IN_ROW, TD_IN_COL, input, (size_t) DIM(input), (char *) NULL, (tbool) TRUE);

			switch (input[0]) {
			case 'f':
			case 'F':
				dev_no = -1;
				if (strt_ent < max_strt_ent) {
					strt_ent += 13;

					if (strt_ent > max_strt_ent)  {
						strt_ent = max_strt_ent;
					}

					update_screen = TRUE;
				}

				else {
					beep();
				}	/* endif */
				break;

			case 'b':
			case 'B':
				dev_no = -1;
				if (strt_ent > 1) {
					strt_ent -= 13;

					if (strt_ent < 1)  {
						strt_ent = 1;
					}

					update_screen = TRUE;
				}

				else {
					beep();
				}	/* endif */
				break;

			case 'q':
			case 'Q':
				if (p_td_table != NULL)  {
					free((char *) p_td_table);	/* rel mem for td table */
				}
				return (0);

			case 'd':
			case 'D':
				dev_no = -1;
				clear();
				refresh();
				display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn", 1, &row, &col, NUM_COLS, NUM_ROWS, 'n');
				update_screen = TRUE;
				break;

			case '/':
				rc = search_win(16, 50, 2, 2, "ddsrch_scn", 1, page_str);
				dev_len = strlen(page_str);

				if ( rc == -1 ) {
					(void) clear();
					wrefresh(stdscr);
					/* (void) refresh(); */
					(void) display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn",
						1, &row, &col, NUM_COLS, NUM_ROWS, 'n');
					PRTMSG(MSGLINE, 0, ("No String entered."));
					update_screen = TRUE;
					dev_no = -1;
					break;
				}

				if ( rc == 0 ) {
					(void) clear();
					wrefresh(stdscr);
					(void) display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn",
						1, &row, &col, NUM_COLS, NUM_ROWS, 'n');
					update_screen = TRUE;
					dev_no = -1;
					break;
				}

				for ( k=0; k<num_entries; k++) {
					struct ahd_entry    *p_into_table_temp;
					struct htxshm_HE    *p_htxshm_HE_temp;

					p_into_table_temp = p_td_table + k;
					p_htxshm_HE_temp = shm_addr_wk.HE_addr + p_into_table_temp->shm_pos;

					if ( strncmp(p_htxshm_HE_temp->sdev_id, page_str, dev_len) == 0 ) {
						break;
					}
				}

				if ( k >= num_entries ) {
					(void) clear();
					wrefresh(stdscr);
					(void) refresh();
					(void) display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn",
						1, &row, &col, NUM_COLS, NUM_ROWS, 'n');
					PRTMSG(MSGLINE, 0, ("Device not found."));
					update_screen = TRUE;
					dev_no = -1;
					break;
				}

				dev_no = k%13;

				/* Points to the 1st entry of 13-entry-page
				 * in which this device will be displayed.
				 */
				strt_ent = (((k/13) * 13) + 1);
				if (strt_ent > max_strt_ent) strt_ent = max_strt_ent;
				if (strt_ent <= 0) strt_ent = 1;

				(void) clear();
				(void) refresh();
				(void) display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn",
						1, &row, &col, NUM_COLS, NUM_ROWS, 'n');
				update_screen = TRUE;
				break;

			default:
				dev_no = -1;
				cmp_regexp = regcmp(input, (char *) 0);	/* compile exp */
				if (cmp_regexp != NULL) {	/* regular expression OK? */
					for (i = 1; i <= num_disp; i++) {
						sprintf(workstr, "%-d", i);
						work = regex(cmp_regexp, workstr);
						if (work != NULL) {
							htx_strncpy(ret, " ", (size_t) sizeof(ret));	/* clear return (ret) array */
							htx_strncpy(ret, __loc1, (size_t) (work - __loc1));

							if (htx_strcmp(workstr, ret) == 0) {	/* matched reg exp? */
								update_screen = TRUE;
								p_into_table = p_td_table + (strt_ent - 1) + (i - 1);
								p_htxshm_HE = shm_addr_wk.HE_addr + p_into_table->shm_pos;

								if(p_htxshm_HE->PID != 0) {
#ifdef	__HTX_LINUX__
									wcolorout(stdscr, WHITE_BLUE | STANDOUT);
#else
									wcolorout(stdscr, STANDOUT | F_WHITE | B_BLUE);
#endif
									mvwaddstr(stdscr, (i + 6), 6, "SIGNALED");
									terminate_exerciser(p_htxshm_HE, p_into_table->shm_pos);
								} /* endif */

								else {
									sprintf(workstr, "The exerciser for %s, %s is already deceased.", p_htxshm_HE->sdev_id, p_htxshm_HE->HE_name);
									PRTMSG(MSGLINE, 0, (workstr));
								}	/* else */
							}	/* endif */
						}	/* endif */
					}	/* endfor */

					if (update_screen != TRUE) {	/* no match? */
						beep();
					}	/* endif */
				}

				else {	/* invalid entry_number */
					beep();
				}	/* endif */
				break;

			}	/* endswitch */
		}		/* endfor */
	}			/* endfor */
}				/* T_device */
Пример #6
0
int parse_config(const char *file_name)
{
    pid_t pid = getpid();                                                                                                                                                                             
    snprintf(sysconfig.error_path_, MAX_FIO_PATH, "/var/log/error_nfio_%d.log", pid); 
    snprintf(sysconfig.trace_path_, MAX_FIO_PATH, "/var/log/trace_nfio_%d.log", pid);                                                                                                                          
    FILE *fp;
    if ((fp = fopen(file_name, "r")) == NULL)
    {
        printf("fopen() failed\n");
        return -1;
    }

    char line_buf[1024] = {0};
    char key[64] = {0};
    char value[1024] = {0};
    char *p = NULL;
    int pos = 0, md = FM_STR;
    struct fetch_method *pfm;

    while(1)
    {
        if (fgets(line_buf, sizeof(line_buf), fp) == NULL)
            break;
        p = line_buf;
        while(isspace(*p))
            p++;
        if (*p == '\0' || *p == '#')
            continue;

        GetArg(key, sizeof(key), &p);

        for (pfm = g_fms; pfm->key_name; pfm++)
        {
            if (!strcasecmp(key, pfm->key_name))
            {
                md = pfm->fm;
                break;
            }
        }

        if (!pfm->key_name)
        {
            OD("%s doesn't been implemented!", key);
            continue;
        }

        if (pfm->flag&FML_STRUCT)
        {
            if (1 == g_struct)
            {
                OD("<error> Already in a struct");
                goto config_error;
            }
            else
                g_struct = 1;
        }

        switch (md)
        {
            case FM_STR:
                get_str((char*)pfm->dst, value, sizeof(value), p);
                break;
            case FM_INT:
                get_int((int*)pfm->dst, value, sizeof(value), p);
                break;
            case FM_IPMAC:
                {
                    struct IPMAC *ptr;
                    if (NULL != (ptr=get_ipmac(fp)))
                    {
                        g_struct = 0;
                        g_ip_macs[pos++] = ptr;
                        g_mac_num++;
                    }
                }
                break;
            case FM_DST:
                {
                    struct IPDST ipdst;
                    if (NULL != get_dst(fp, &ipdst))
                    {
                        if (sysconfig.dst_count + 1 > FIO_MAX_DST_TEST)
                        {
                            OD("<error> too many dst tags");
                            goto config_error;
                        }
                        strcpy(sysconfig.dst_ip[sysconfig.dst_count].name, ipdst.ip);
                        strcpy(sysconfig.dst_mac[sysconfig.dst_count].name, ipdst.mac);
                        sysconfig.dst_count++;
                        g_struct = 0;
                    }
                    else
                    {
                        OD("<error> get dst tags");
                        goto config_error;
                    }
                }
                break;
            default:
                break;
        }
    }

    fclose(fp);
	return CheckValid();

config_error:
    fclose(fp);
	 return -1;
}