Exemple #1
0
static void
set_arrays (const shaderparam_t *vert, const shaderparam_t *norm,
		    const shaderparam_t *st, aliasvrt_t *pose)
{
	byte       *pose_offs = (byte *) pose;

	if (developer->int_val & SYS_GLSL) {
		GLint size;

		qfeglGetBufferParameteriv (GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);
		if (size <= (intptr_t)pose_offs) {
			Sys_Printf ("Invalid pose");
			pose = 0;
		}
	}

	qfeglVertexAttribPointer (vert->location, 3, GL_UNSIGNED_SHORT,
							 0, sizeof (aliasvrt_t),
							 pose_offs + field_offset (aliasvrt_t, vertex));
	qfeglVertexAttribPointer (norm->location, 3, GL_SHORT,
							 1, sizeof (aliasvrt_t),
							 pose_offs + field_offset (aliasvrt_t, normal));
	qfeglVertexAttribPointer (st->location, 2, GL_SHORT,
							 0, sizeof (aliasvrt_t),
							 pose_offs + field_offset (aliasvrt_t, st));
}
Exemple #2
0
tex_t *
sw32_SCR_CaptureBGR (void)
{
	int         count, x, y;
	tex_t      *tex;
	const byte *src;
	byte       *dst;

	count = vid.width * vid.height;
	tex = malloc (field_offset (tex_t, data[count * 3]));
	SYS_CHECKMEM (tex);
	tex->width = vid.width;
	tex->height = vid.height;
	tex->format = tex_rgb;
	tex->palette = 0;
	sw32_D_EnableBackBufferAccess ();
	src = vid.buffer;
	for (y = 0; y < tex->height; y++) {
		dst = tex->data + (tex->height - 1 - y) * tex->width * 3;
		for (x = 0; x < tex->width; x++) {
			*dst++ = vid.basepal[*src * 3 + 2]; // blue
			*dst++ = vid.basepal[*src * 3 + 1]; // green
			*dst++ = vid.basepal[*src * 3 + 0];	// red
			src++;
		}
	}
	sw32_D_DisableBackBufferAccess ();
	return tex;
}
Exemple #3
0
int prepare_response(Socket_t *sock, uint8_t *frame, uint8_t *data, int length)
{
    IPV4TX_header_t *txhdr = (IPV4TX_header_t *)frame;
    char *ptr = (char *)data;
    int len = length;
    
    printf("Response: ");
    while (--len >= 0 && *ptr != '\r')
        putchar(*ptr++);
    putchar('\n');

    txhdr->apiid = ID_IPV4TX;
    txhdr->frameid = ++txframeid;
    memcpy(&txhdr->dstaddr, &sock->id.srcaddr, 4);
    memcpy(&txhdr->dstport, &sock->id.srcport, 2);
    memcpy(&txhdr->srcport, &sock->id.dstport, 2);
    txhdr->protocol = sock->protocol;
    //txhdr->options = 0x00; // don't terminate after send
    txhdr->options = 0x01; // terminate after send
    memcpy(txhdr->data, data, length);
    length += field_offset(IPV4TX_header_t, data);

#ifdef FRAME_TX_DEBUG
    printf("[TX %02x]", txframeid);
    show_frame(frame, length);
#endif
    
    return length;
}
Exemple #4
0
static void send_at_command(int id, char *fmt, ...)
{
    uint8_t frame[32];
    ATCommand_t *atcmd = (ATCommand_t *)frame;
    va_list ap;
    int len;

    atcmd->apiid = ID_ATCOMMAND;
    atcmd->frameid = id;

    va_start(ap, fmt);
    len = field_offset(ATCommand_t, command) + vsprintf((char *)atcmd->command, fmt, ap);
    va_end(ap);

#ifdef AT_DEBUG
    printf("AT frame:");
    show_frame(frame, len);
    printf("AT '%s'", atcmd->command);
#endif

    XbeeFrame_sendframe(mailbox, frame, len);
    
#ifdef AT_DEBUG
    printf(" -- sent\n");
#endif
}
Exemple #5
0
tex_t *
glsl_SCR_CaptureBGR (void)
{
	byte       *r, *b;
	int         count, i;
	tex_t      *tex;

	count = vid.width * vid.height;
	tex = malloc (field_offset (tex_t, data[count * 3]));
	SYS_CHECKMEM (tex);
	tex->width = vid.width;
	tex->height = vid.height;
	tex->format = tex_rgb;
	tex->palette = 0;
	qfeglReadPixels (0, 0, vid.width, vid.height, GL_RGB,
					GL_UNSIGNED_BYTE, tex->data);
	for (i = 0, r = tex->data, b = tex->data + 2; i < count;
		 i++, r += 3, b += 3) {
		byte        t = *b;
		*b = *r;
		*r = t;
	}
	return tex;
}
Exemple #6
0
size_t jl_field_offset(jl_struct_type_t *t, jl_sym_t *fld)
{
    return field_offset(t, fld, 0);
}
Exemple #7
0
static void handle_ipv4_frame(IPV4RX_header_t *frame, int length)
{
    Socket_t *sock = sockets;
#ifdef MULTI_SOCKETS
    Socket_t *free = NULL;
#endif
    int len, cnt, i;
    uint8_t *ptr;
    
#ifdef SOCKET_DEBUG
    printf("ip %d.%d.%d.%d, dst %d, src %d, protocol %d\n", 
            frame->srcaddr[0],
            frame->srcaddr[1],
            frame->srcaddr[2],
            frame->srcaddr[3],
            (frame->dstport[0] << 8) | frame->dstport[1],
            (frame->srcport[0] << 8) | frame->srcport[1],
            frame->protocol);
#endif
    
    /* find a socket for this connection */
    for (i = 0; i < MAX_SOCKETS; ++i) {
        if (sock->flags & SF_BUSY) {
            if (memcmp(&sock->id, &frame->srcaddr, sizeof(sock->id)) == 0)
                break;
        }
#ifdef MULTI_SOCKETS
        else if (!free)
            free = sock;
#endif
        ++sock;
    }
    
    /* check for needing to open a new socket */
    if (i >= MAX_SOCKETS) {
#ifdef MULTI_SOCKETS
        if (!(sock = free)) {
            printf("No free sockets\n");
            return; // no sockets available, ignore frame
        }
#else
        sock = &sockets[0];
#endif
        sock->flags |= SF_BUSY;
        memcpy(&sock->id, frame->srcaddr, sizeof(sock->id));
        sock->protocol = frame->protocol;
        sock->state = SS_REQUEST;
        sock->handler = NULL;
        sock->length = 0;
        sock->i = 0;
    }
#ifdef SOCKET_DEBUG
    printf("Using socket %d\n", sock - sockets);
#endif
    
    /* setup the frame parsing variables */
    ptr = frame->data;
    len = length - field_offset(IPV4RX_header_t, data);
    
    /* process the data in this frame */
    while (len > 0) {
        switch (sock->state) {
        case SS_REQUEST:
        case SS_HEADER:
            while (len > 0 && *ptr != '\r' && *ptr != '\n') {
                if (sock->i < MAX_CONTENT)
                    sock->content[sock->i++] = *ptr;
                ++ptr;
                --len;
            }
            if (len > 0) {
                int term = *ptr;
                sock->content[sock->i] = '\0';
                ++ptr;
                --len;
                if (sock->i == 0) {
                    if (sock->state == SS_REQUEST) {
                        printf("Missing request line\n");
                    }
                    else {
#ifdef STATE_MACHINE_DEBUG
                        printf("Found content\n");
#endif
                        if (term == '\r')
                            sock->state = SS_CONTENT_NL;
                        else {
                            if (sock->handler) {
                                sock->frame_ptr = ptr;
                                sock->frame_len = len;
                                (*sock->handler)(sock, HP_CONTENT_START);
                            }
                            sock->state = SS_CONTENT;
                        }
                    }
                }
                else {
#ifdef STATE_MACHINE_DEBUG
                    printf("Found %s: %s\n", sock->state == SS_REQUEST ? "request" : "header", sock->content);
#endif
                    switch (sock->state) {
                    case SS_REQUEST:
                        parse_request(sock);
                        break;
                    case SS_HEADER:
                        parse_header(sock);
                        break;
                    }
                    sock->state = (term == '\r' ? SS_SKIP_NL : SS_HEADER);
                }
                sock->i = 0;
            }
            break;
        case SS_SKIP_NL:
        case SS_CONTENT_NL:
            if (*ptr == '\n') {
                ++ptr;
                --len;
            }
            if (sock->state == SS_CONTENT_NL && sock->handler) {
                sock->frame_ptr = ptr;
                sock->frame_len = len;
                (*sock->handler)(sock, HP_CONTENT_START);
            }
            sock->state = (sock->state == SS_SKIP_NL ? SS_HEADER : SS_CONTENT);
            break;
        case SS_CONTENT:
            cnt = sock->length - sock->i;
#ifdef STATE_MACHINE_DEBUG
            printf("length %d, remaining: %d\n", sock->length, cnt);
#endif
            if (len < cnt)
                cnt = len;
            memcpy(&sock->content[sock->i], ptr, cnt);
            sock->i += cnt;
            ptr += cnt;
            len -= cnt;
            if (len > 0 && sock->i >= sock->length)
                handle_content(sock);
            break;
        }
    }
    
    if (sock->i >= sock->length)
        handle_content(sock);
}
Exemple #8
0
int
main(int argc, char *argv[])
{
#ifndef GEN_HASKELL
    printf("/* This file is created automatically.  Do not edit by hand.*/\n\n");

    printf("#define STD_HDR_SIZE   %" FMT_SizeT "\n", (size_t)sizeofW(StgHeader) - sizeofW(StgProfHeader));
    /* grrr.. PROFILING is on so we need to subtract sizeofW(StgProfHeader) */
    printf("#define PROF_HDR_SIZE  %" FMT_SizeT "\n", (size_t)sizeofW(StgProfHeader));

    printf("#define BLOCK_SIZE   %u\n", BLOCK_SIZE);
    printf("#define MBLOCK_SIZE   %u\n", MBLOCK_SIZE);
    printf("#define BLOCKS_PER_MBLOCK  %" FMT_SizeT "\n", (lnat)BLOCKS_PER_MBLOCK);
    // could be derived, but better to save doing the calculation twice

    printf("\n\n");
#endif

    field_offset(StgRegTable, rR1);
    field_offset(StgRegTable, rR2);
    field_offset(StgRegTable, rR3);
    field_offset(StgRegTable, rR4);
    field_offset(StgRegTable, rR5);
    field_offset(StgRegTable, rR6);
    field_offset(StgRegTable, rR7);
    field_offset(StgRegTable, rR8);
    field_offset(StgRegTable, rR9);
    field_offset(StgRegTable, rR10);
    field_offset(StgRegTable, rF1);
    field_offset(StgRegTable, rF2);
    field_offset(StgRegTable, rF3);
    field_offset(StgRegTable, rF4);
    field_offset(StgRegTable, rD1);
    field_offset(StgRegTable, rD2);
    field_offset(StgRegTable, rL1);
    field_offset(StgRegTable, rSp);
    field_offset(StgRegTable, rSpLim);
    field_offset(StgRegTable, rHp);
    field_offset(StgRegTable, rHpLim);
    field_offset(StgRegTable, rCCCS);
    field_offset(StgRegTable, rCurrentTSO);
    field_offset(StgRegTable, rCurrentNursery);
    field_offset(StgRegTable, rHpAlloc);
    struct_field(StgRegTable, rRet);
    struct_field(StgRegTable, rNursery);

    def_offset("stgEagerBlackholeInfo", FUN_OFFSET(stgEagerBlackholeInfo));
    def_offset("stgGCEnter1", FUN_OFFSET(stgGCEnter1));
    def_offset("stgGCFun", FUN_OFFSET(stgGCFun));

    field_offset(Capability, r);
    field_offset(Capability, lock);
    struct_field(Capability, no);
    struct_field(Capability, mut_lists);
    struct_field(Capability, context_switch);
    struct_field(Capability, interrupt);
    struct_field(Capability, sparks);

    struct_field(bdescr, start);
    struct_field(bdescr, free);
    struct_field(bdescr, blocks);
    struct_field(bdescr, gen_no);
    struct_field(bdescr, link);

    struct_size(generation);
    struct_field(generation, n_new_large_words);

    struct_size(CostCentreStack);
    struct_field(CostCentreStack, ccsID);
    struct_field(CostCentreStack, mem_alloc);
    struct_field(CostCentreStack, scc_count);
    struct_field(CostCentreStack, prevStack);

    struct_field(CostCentre, ccID);
    struct_field(CostCentre, link);

    struct_field(StgHeader, info);
    struct_field_("StgHeader_ccs",  StgHeader, prof.ccs);
    struct_field_("StgHeader_ldvw", StgHeader, prof.hp.ldvw);

    struct_size(StgSMPThunkHeader);

    closure_payload(StgClosure,payload);

    struct_field(StgEntCounter, allocs);
    struct_field(StgEntCounter, registeredp);
    struct_field(StgEntCounter, link);
    struct_field(StgEntCounter, entry_count);

    closure_size(StgUpdateFrame);
    closure_size(StgCatchFrame);
    closure_size(StgStopFrame);

    closure_size(StgMutArrPtrs);
    closure_field(StgMutArrPtrs, ptrs);
    closure_field(StgMutArrPtrs, size);

    closure_size(StgArrWords);
    closure_field(StgArrWords, bytes);
    closure_payload(StgArrWords, payload);

    closure_field(StgTSO, _link);
    closure_field(StgTSO, global_link);
    closure_field(StgTSO, what_next);
    closure_field(StgTSO, why_blocked);
    closure_field(StgTSO, block_info);
    closure_field(StgTSO, blocked_exceptions);
    closure_field(StgTSO, id);
    closure_field(StgTSO, cap);
    closure_field(StgTSO, saved_errno);
    closure_field(StgTSO, trec);
    closure_field(StgTSO, flags);
    closure_field(StgTSO, dirty);
    closure_field(StgTSO, bq);
    closure_field_("StgTSO_cccs", StgTSO, prof.cccs);
    closure_field(StgTSO, stackobj);

    closure_field(StgStack, sp);
    closure_field_offset(StgStack, stack);
    closure_field(StgStack, stack_size);
    closure_field(StgStack, dirty);

    struct_size(StgTSOProfInfo);

    opt_struct_size(StgTSOProfInfo,PROFILING);

    closure_field(StgUpdateFrame, updatee);

    closure_field(StgCatchFrame, handler);
    closure_field(StgCatchFrame, exceptions_blocked);

    closure_size(StgPAP);
    closure_field(StgPAP, n_args);
    closure_field_gcptr(StgPAP, fun);
    closure_field(StgPAP, arity);
    closure_payload(StgPAP, payload);

    thunk_size(StgAP);
    closure_field(StgAP, n_args);
    closure_field_gcptr(StgAP, fun);
    closure_payload(StgAP, payload);

    thunk_size(StgAP_STACK);
    closure_field(StgAP_STACK, size);
    closure_field_gcptr(StgAP_STACK, fun);
    closure_payload(StgAP_STACK, payload);

    thunk_size(StgSelector);

    closure_field_gcptr(StgInd, indirectee);

    closure_size(StgMutVar);
    closure_field(StgMutVar, var);

    closure_size(StgAtomicallyFrame);
    closure_field(StgAtomicallyFrame, code);
    closure_field(StgAtomicallyFrame, next_invariant_to_check);
    closure_field(StgAtomicallyFrame, result);

    closure_field(StgInvariantCheckQueue, invariant);
    closure_field(StgInvariantCheckQueue, my_execution);
    closure_field(StgInvariantCheckQueue, next_queue_entry);

    closure_field(StgAtomicInvariant, code);

    closure_field(StgTRecHeader, enclosing_trec);

    closure_size(StgCatchSTMFrame);
    closure_field(StgCatchSTMFrame, handler);
    closure_field(StgCatchSTMFrame, code);

    closure_size(StgCatchRetryFrame);
    closure_field(StgCatchRetryFrame, running_alt_code);
    closure_field(StgCatchRetryFrame, first_code);
    closure_field(StgCatchRetryFrame, alt_code);

    closure_field(StgTVarWatchQueue, closure);
    closure_field(StgTVarWatchQueue, next_queue_entry);
    closure_field(StgTVarWatchQueue, prev_queue_entry);

    closure_field(StgTVar, current_value);

    closure_size(StgWeak);
    closure_field(StgWeak,link);
    closure_field(StgWeak,key);
    closure_field(StgWeak,value);
    closure_field(StgWeak,finalizer);
    closure_field(StgWeak,cfinalizer);

    closure_size(StgDeadWeak);
    closure_field(StgDeadWeak,link);

    closure_size(StgMVar);
    closure_field(StgMVar,head);
    closure_field(StgMVar,tail);
    closure_field(StgMVar,value);

    closure_size(StgMVarTSOQueue);
    closure_field(StgMVarTSOQueue, link);
    closure_field(StgMVarTSOQueue, tso);

    closure_size(StgBCO);
    closure_field(StgBCO, instrs);
    closure_field(StgBCO, literals);
    closure_field(StgBCO, ptrs);
    closure_field(StgBCO, arity);
    closure_field(StgBCO, size);
    closure_payload(StgBCO, bitmap);

    closure_size(StgStableName);
    closure_field(StgStableName,sn);

    closure_size(StgBlockingQueue);
    closure_field(StgBlockingQueue, bh);
    closure_field(StgBlockingQueue, owner);
    closure_field(StgBlockingQueue, queue);
    closure_field(StgBlockingQueue, link);

    closure_size(MessageBlackHole);
    closure_field(MessageBlackHole, link);
    closure_field(MessageBlackHole, tso);
    closure_field(MessageBlackHole, bh);

    struct_field_("RtsFlags_ProfFlags_showCCSOnException",
		  RTS_FLAGS, ProfFlags.showCCSOnException);
    struct_field_("RtsFlags_DebugFlags_apply",
		  RTS_FLAGS, DebugFlags.apply);
    struct_field_("RtsFlags_DebugFlags_sanity",
		  RTS_FLAGS, DebugFlags.sanity);
    struct_field_("RtsFlags_DebugFlags_weak",
		  RTS_FLAGS, DebugFlags.weak);
    struct_field_("RtsFlags_GcFlags_initialStkSize",
		  RTS_FLAGS, GcFlags.initialStkSize);
    struct_field_("RtsFlags_MiscFlags_tickInterval",
		  RTS_FLAGS, MiscFlags.tickInterval);

    struct_size(StgFunInfoExtraFwd);
    struct_field(StgFunInfoExtraFwd, slow_apply);
    struct_field(StgFunInfoExtraFwd, fun_type);
    struct_field(StgFunInfoExtraFwd, arity);
    struct_field_("StgFunInfoExtraFwd_bitmap", StgFunInfoExtraFwd, b.bitmap);

    struct_size(StgFunInfoExtraRev);
    struct_field(StgFunInfoExtraRev, slow_apply_offset);
    struct_field(StgFunInfoExtraRev, fun_type);
    struct_field(StgFunInfoExtraRev, arity);
    struct_field_("StgFunInfoExtraRev_bitmap", StgFunInfoExtraRev, b.bitmap);

    struct_field(StgLargeBitmap, size);
    field_offset(StgLargeBitmap, bitmap);

    struct_size(snEntry);
    struct_field(snEntry,sn_obj);
    struct_field(snEntry,addr);

#ifdef mingw32_HOST_OS
    struct_size(StgAsyncIOResult);
    struct_field(StgAsyncIOResult, reqID);
    struct_field(StgAsyncIOResult, len);
    struct_field(StgAsyncIOResult, errCode);
#endif

    return 0;
}
Exemple #9
0
static void
SV_Punish (int mode)
{
	int         i;
	double      mins = 0.5;
	qboolean    all = false, done = false;
	client_t    *cl = 0;
	dstring_t  *text = dstring_new();
	const char *cmd = 0;
	const char *cmd_do = 0;
	//FIXME const char *cmd_undo = 0;
	int         field_offs = 0;

	switch (mode) {
		case 0:
			cmd = "cuff";
			cmd_do = "cuffed";
			//FIXME cmd_undo = "un-cuffed";
			field_offs = field_offset (client_t, cuff_time);
			break;
		case 1:
			cmd = "mute";
			cmd_do = "muted";
			//FIXME cmd_undo = "can speak";
			field_offs = field_offset (client_t, lockedtill);
			break;
	}

	if (Cmd_Argc () != 2 && Cmd_Argc () != 3) {
		SV_Printf ("usage: %s <name/userid/ALL> [minutes]\n"
				   "       (default = 0.5, 0 = cancel cuff).\n", cmd);
		return;
	}

	if (strequal (Cmd_Argv (1), "ALL")) {
		all = true;
	} else {
		cl = SV_Match_User (Cmd_Argv (1));
	}
	if (!all && !cl)
		return;
	if (Cmd_Argc () == 3) {
		mins = atof (Cmd_Argv (2));
		if (mins < 0.0 || mins > MAXPENALTY)
			mins = MAXPENALTY;
	}
	if (cl) {
		*(double *)((char *)cl + field_offs) = realtime + mins * 60.0;
		if (mins) {
			dsprintf (text, "You are %s for %.1f minutes\n\n"
					 "reconnecting won't help...\n", cmd_do, mins);
			MSG_ReliableWrite_Begin (&cl->backbuf, svc_centerprint,
									 2 + strlen (text->str));
			MSG_ReliableWrite_String (&cl->backbuf, text->str);
		}
	}
	if (all) {
		for (i = 0, cl = svs.clients; i < MAX_CLIENTS; i++, cl++) {
			if (cl->state < cs_zombie)
				continue;
			*(double *)((char *)cl + field_offs) = realtime + mins * 60.0;
			done = true;
			if (mins) {
				dsprintf (text, "You are %s for %.1f minutes\n\n"
						 "reconnecting won't help...\n", cmd_do, mins);
				MSG_ReliableWrite_Begin (&cl->backbuf, svc_centerprint,
										 2 + strlen (text->str));
				MSG_ReliableWrite_String (&cl->backbuf, text->str);
			}
		}
	}
	if (done) {
		if (mins)
			SV_BroadcastPrintf (PRINT_HIGH, "%s %s for %.1f minutes.\n",
								all? "All Users" : cl->name, cmd_do, mins);
		else
			SV_BroadcastPrintf (PRINT_HIGH, "%s %s.\n",
								all? "All Users" : cl->name, cmd_do);
	}
	dstring_delete (text);
}