예제 #1
0
static uae_u32 REGPARAM2 dev_abortio (TrapContext *context)
{
	uae_u32 request = m68k_areg (regs, 1);
	struct devstruct *dev = getdevstruct (get_long (request + 24));

	if (!dev) {
		put_byte (request + 31, 32);
		return get_byte (request + 31);
	}
	abort_async (dev, request);
	return 0;
}
예제 #2
0
static PyObject *
l_set(void *ptr, PyObject *value, Py_ssize_t size)
{
	long val;
	long x;
	if (get_long(value, &val) < 0)
		return NULL;
	memcpy(&x, ptr, sizeof(x));
	x = SET(x, val, size);
	memcpy(ptr, &x, sizeof(x));
	_RET(value);
}
예제 #3
0
파일: sana2.cpp 프로젝트: sunfirefox/WinUAE
static uae_u32 packetfilter (TrapContext *ctx, uaecptr hook, uaecptr ios2, uaecptr data)
{
	uae_u32 a2, v;

	a2 = m68k_areg (regs, 2);
	m68k_areg (regs, 0) = hook;
	m68k_areg (regs, 2) = ios2;
	m68k_areg (regs, 1) = data;
	v = CallFunc (ctx, get_long (hook + 8));
	m68k_areg (regs, 2) = a2;
	return v;
}
예제 #4
0
void
make_RTStruct(ea_t adr, size_t namelen)
{
  /* form struct */
  do_unknown_range(adr, RT_len, true);
  doDwrd(adr,4);
  doDwrd(adr+4,4);
  doDwrd(adr+8,4);
  doDwrd(adr+12,4);
  doDwrd(adr+16,4);
//  doDwrd(adr+20,4);
  /* add dref to class name */
  ea_t ptr = get_long(adr);
  make_ascii_string(ptr, namelen, ASCSTR_C);
  add_dref(adr, ptr, dr_O);
  op_offset(adr, OPND_MASK, REF_OFF32, ptr);
  rp_set_comment(adr+4, "Size", false);
  /* add cref to constructor */
  ptr = get_long(adr+12);
  if ( ptr )
  {
    add_cref(adr+12, ptr, fl_CN);
    op_offset(adr+12, OPND_MASK, REF_OFF32, ptr);
  }
  /* add dref to base class struct */
  ptr = get_long(adr+16);
  if ( ptr )
  {
    add_dref(adr+16,ptr,dr_O);
    op_offset(adr+16, OPND_MASK, REF_OFF32, ptr);
  }
  /* add dref to next class */
/*  ptr = get_long(adr+20);
  if ( ptr )
  {
    add_dref(adr+20,ptr,dr_O);
    op_offset(adr+20, OPND_MASK, REF_OFF32, ptr);
  }
*/
}
예제 #5
0
void make_vtbl_entry(ea_t ea)
{
  ea_t ref;
  do_unknown_range(ea, sizeof(ea), false);
#ifdef __EA64__
  doQwrd(ea, sizeof(ea));
  ref = get_long(ea);
#else
  doDwrd(ea, sizeof(ea));
  ref = get_qword(ea);
#endif /* __EA64__ */
  do_dref(ea, ref);
}
예제 #6
0
gboolean
gsq_source_process (GsqQuerier *querier, guint16 qport,
		const gchar *data, gssize size)
{
	Private *priv = gsq_querier_get_pdata (querier);
	if (!priv) {
		priv = g_slice_new0 (Private);
		priv->packets = g_array_new (FALSE, TRUE, sizeof (Packet));
		gsq_querier_set_pdata (querier, priv);
	}
	
	/* check if this packet belongs to the querier */
	if (qport != gsq_querier_get_qport (querier)) {
		guint16 port = gsq_querier_get_gport (querier);
		if (!(port == qport || (port == 0 && qport == 27015)))
			return FALSE;
	}
	
	gchar *p = (gchar *) data;
	gint format = get_long (&p);
	
	if (format == -1) {
		if (!source_process2 (querier, p, size))
			return FALSE;
	} else if (format == -2) {
		gint reqid, maxpackets, numpacket;
		gboolean compressed;
		guint16 length;
		
		reqid = get_long (&p);
		compressed = reqid >> 31;
		
		if (*((gint32 *) (p + 1)) == -1) {
			/* GoldSource way */
			guint8 c = gsq_get_uint8 (&p);
			maxpackets = c & 0x0F;
			numpacket = c >> 4;
			length = size - (p - data);
		} else {
예제 #7
0
void main(void) {
   long data;
   
   report_line_number = 0;
   filter_clear();
   
   while( TRUE ) {
      fprintf(PC, "  Enter data point: ");
      data = get_long();
      data = filter_data(data);      
      report_data_line(data);
   }
}
예제 #8
0
int slave_read(){
    int i;
    verbose(L_SLVE,"%s:",slv_name);
    while((i=get_long(in))>=0){
        switch(i){
            case    ACT_NOP:break;
            case     ACT_ON:w_init();break;
            case    ACT_OFF:w_close();break;
            case  ACT_SLEEP:w_delayMicroseconds(get_long(in));break;
            case  ACT_WRITE:w_gpio_write(get_long(in),get_long(in));break;
            case   ACT_FSEL:w_gpio_fsel(get_long(in),get_long(in));break;
            case ACT_SETPUD:w_gpio_set_pud(get_long(in),get_long(in));break;
        }
    }
}
예제 #9
0
파일: bit2rbf.c 프로젝트: optixx/crunchy
int load_main(const char *outfile_name)
{
	FILE *o;
	int i, c, len;
	if ((len = get_short()) < 0) exit(1);
	for (i=0; i<len; i++) {
		if ((c = getchar()) == EOF) exit(1);
	}
	find_key(0x00);
	find_key(0x01);
	find_key(0x61);
	print_string("design: ");
	find_key(0x62);
	print_string("part:   ");
	find_key(0x63);
	print_string("date:   ");
	find_key(0x64);
	print_string("time:   ");
	find_key(0x65);
	len = get_long();
	printf("length: %d\n", len);
	if (outfile_name == NULL) {
		for (i=0; i<len/4; i++) {
			printf(" 0x%.8x\n", get_long());
		}
	} else if ((o=fopen(outfile_name,"w"))!=NULL) {
		for (i=0; i<len; i++) {
			fputc(getchar(),o);
		}
		if (fclose(o)) {
			perror("fclose");
			unlink(outfile_name);
		} else {
			printf("wrote:  %s\n",outfile_name);
		}
	}
	return 0;
}
예제 #10
0
파일: expansion.c 프로젝트: engur/PUAE
/* Ugly hack for >2M chip RAM in single pool
 * We can't add it any later or early boot menu
 * stops working because it sets kicktag at the end
 * of chip ram...
 */
static void addextrachip (uae_u32 sysbase)
{
	if (currprefs.chipmem_size <= 0x00200000)
		return;
	if (sysbase & 0x80000001)
		return;
	if (!valid_address (sysbase, 1000))
		return;
	uae_u32 ml = get_long (sysbase + 322);
	if (!valid_address (ml, 32))
		return;
	uae_u32 next;
	while ((next = get_long (ml))) {
		if (!valid_address (ml, 32))
			return;
		uae_u32 upper = get_long (ml + 24);
		uae_u32 lower = get_long (ml + 20);
		if (lower & ~0xffff) {
			ml = next;
			continue;
		}
		uae_u16 attr = get_word (ml + 14);
		if ((attr & 0x8002) != 2) {
			ml = next;
			continue;
		}
		if (upper >= currprefs.chipmem_size)
			return;
		uae_u32 added = currprefs.chipmem_size - upper;
		uae_u32 first = get_long (ml + 16);
		put_long (ml + 24, currprefs.chipmem_size); // mh_Upper
		put_long (ml + 28, get_long (ml + 28) + added); // mh_Free
		uae_u32 next;
		while (first) {
			next = first;
			first = get_long (next);
		}
		uae_u32 bytes = get_long (next + 4);
		if (next + bytes == 0x00200000) {
			put_long (next + 4, currprefs.chipmem_size - next);
		} else {
			put_long (0x00200000 + 0, 0);
			put_long (0x00200000 + 4, added);
			put_long (next, 0x00200000);
		}
		return;
	}
}
예제 #11
0
static int
get_ulong(PyObject *v, unsigned long *p)
{
	if (PyLong_Check(v)) {
		unsigned long x = PyLong_AsUnsignedLong(v);
		if (x == (unsigned long)(-1) && PyErr_Occurred())
			return -1;
		*p = x;
		return 0;
	}
	else {
		return get_long(v, (long *)p);
	}
}
예제 #12
0
/* Horror function - tries to recognize CRuntimeClass */
size_t
check_for_RTStruct(ea_t adr)
{
  if ( !is_defined_area(adr, RT_len) )
   return 0;
  size_t namesize = rp_is_class_name(get_long(adr)); /* check for name */
  ulong schema = get_long(adr + 8);
  if ( schema != 0xffff && schema)	/* all schemas must be 0xffff or 0
   See afx.h for IMPLEMENT_SERIAL, IMPLEMENT_DYNAMIC & IMPLEMENT_DYNCREATE macros */
   return 0;
  if ( is_contain_ptr(adr + 16) )
   return namesize; /* Yes - possible we really have CRuntimeClass :-) */
  if ( 0 != get_long(adr + 16) )
   return 0; /* bad addr ? */
#if 0 
  /* This code is very strange - CRunTimeClass has size only 20 bytes... */
  if ( is_contain_ptr(adr + 20) )
   return namesize;
  if (0 != get_long(adr + 20) )
   return 0;
#endif
  return namesize;
}
예제 #13
0
static int
lp_int(char *p, PyObject *v, const formatdef *f)
{
	long x;
	int i;
	if (get_long(v, &x) < 0)
		return -1;
	i = f->size;
	do {
		*p++ = (char)x;
		x >>= 8;
	} while (--i > 0);
	return 0;
}
예제 #14
0
/* try to find this class or one of parent class in our pdb pool */
pdb_class *try_to_find_this_or_parent(ea_t ea, char **name, bool *free_name, bool *named)
{
  // 1st - lets check if have some fuzzy name as first entry to VTBL
  if ( !p_pool || !name )
   return NULL;
  *named = false;
  pdb_class *res = try_find_by_name(ea, name, free_name);
  if ( res )
  {
    set_vtbl_name(*name, ea);
    return res;
  }
  return try_to_find_from_rt(get_long(ea), name, free_name);
}
예제 #15
0
static PyObject *
l_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
    long val;
    long field;
    if (get_long(value, &val) < 0)
        return NULL;
    memcpy(&field, ptr, sizeof(field));
    field = SWAP_LONG(field);
    field = (long)SET(field, val, size);
    field = SWAP_LONG(field);
    memcpy(ptr, &field, sizeof(field));
    _RET(value);
}
예제 #16
0
static PyObject *
i_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
    long val;
    int field;
    if (get_long(value, &val) < 0)
        return NULL;
    memcpy(&field, ptr, sizeof(field));
    field = SWAP_INT(field);
    field = SET(field, (int)val, size);
    field = SWAP_INT(field);
    memcpy(ptr, &field, sizeof(field));
    _RET(value);
}
예제 #17
0
static int
np_byte(char *p, PyObject *v, const formatdef *f)
{
	long x;
	if (get_long(v, &x) < 0)
		return -1;
	if (x < -128 || x > 127){
		PyErr_SetString(StructError,
				"byte format requires -128<=number<=127");
		return -1;
	}
	*p = (char)x;
	return 0;
}
예제 #18
0
파일: cfield.c 프로젝트: nanwu/pyston
static PyObject *
h_set_sw(void *ptr, PyObject *value, Py_ssize_t size)
{
    long val;
    short field;
    if (get_long(value, &val) < 0)
        return NULL;
    memcpy(&field, ptr, sizeof(field));
    field = SWAP_2(field);
    field = SET(short, field, val, size);
    field = SWAP_2(field);
    memcpy(ptr, &field, sizeof(field));
    _RET(value);
}
예제 #19
0
static int
np_ubyte(char *p, PyObject *v, const formatdef *f)
{
	long x;
	if (get_long(v, &x) < 0)
		return -1;
	if (x < 0 || x > 255){
		PyErr_SetString(StructError,
				"ubyte format requires 0<=number<=255");
		return -1;
	}
	*p = (char)x;
	return 0;
}
예제 #20
0
static int
np_int(char *p, PyObject *v, const formatdef *f)
{
	long x;
	int y;
	if (get_long(v, &x) < 0)
		return -1;
#if (SIZEOF_LONG > SIZEOF_INT)
	if ((x < ((long)INT_MIN)) || (x > ((long)INT_MAX)))
		RANGE_ERROR(x, f, 0, -1);
#endif
	y = (int)x;
	memcpy(p, (char *)&y, sizeof y);
	return 0;
}
예제 #21
0
static void uae4all_reset(void)
{
    int i;
#if !defined(USE_CYCLONE_CORE) && !defined(USE_FAME_CORE_ARM2)
    m68k_set_context(&micontexto);
#endif
    m68k_reset();
    for(i=1; i<8; i++)
#if defined(DEBUG_INTERRUPTS)
        M68KCONTEXT.interrupts[i]=0xFF;
#else
        M68KCONTEXT.interrupts[i]=0x18+i;
#endif
    M68KCONTEXT.interrupts[0]=0;
    m68k_irq_update(0);
    mispcflags=0;
    _68k_areg(7) = get_long (0x00f80000);
    _68k_setpc(get_long (0x00f80004));
    //_68k_sreg = 0x2700; // already done by m68k_reset()
    mispcflags=0;
#ifdef DEBUG_FRAMERATE
    uae4all_update_time();
#endif
}
예제 #22
0
파일: emu.cpp 프로젝트: nealey/vera
//----------------------------------------------------------------------
ea_t find_first_insn_in_packet(ea_t ea)
{
  if ( !is_spec_ea(ea) )
  {
    while ( (ea & 0x1F) != 0 )
    {
      ea_t ea2 = prev_not_tail(ea);
      if ( ea2 == BADADDR
        || !isCode(get_flags_novalue(ea2))
        || (get_long(ea2) & BIT0) == 0 ) break;
      ea = ea2;
    }
  }
  return ea;
}
예제 #23
0
파일: uaeserial.c 프로젝트: Yamakuzure/PUAE
static uint32_t REGPARAM2 dev_close (TrapContext *context)
{
	uint32_t request = m68k_areg (regs, 1);
	struct devstruct *dev;

	dev = getdevstruct (get_long (request + 24));
	if (!dev)
		return 0;
	if (log_uaeserial)
		write_log (_T("%s:%d close, req=%x\n"), getdevname(), dev->unit, request);
	dev_close_3 (dev);
	put_long (request + 24, 0);
	put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) - 1);
	return 0;
}
예제 #24
0
파일: ppc.cpp 프로젝트: nekoniaow/WinUAE
bool UAECALL uae_ppc_io_mem_read(uint32_t addr, uint32_t *data, int size)
{
	uint32_t v;
	bool locked = false;

	while (ppc_thread_running && ppc_cpu_lock_state < 0 && ppc_state);

	if (addr >= 0xdff000 && addr < 0xe00000) {
		int reg = addr & 0x1fe;
		// shortcuts for common registers
		switch (reg) {
			case 0x01c: // INTENAR
			*data = intena;
			return true;
			case 0x01e: // INTREQR
			*data = intreq;
			return true;
		}
	}

	locked = spinlock_pre(addr);
	switch (size)
	{
	case 4:
		v = get_long(addr);
		break;
	case 2:
		v = get_word(addr);
		break;
	case 1:
		v = get_byte(addr);
		break;
	}
	*data = v;
	spinlock_post(locked);

#if PPC_ACCESS_LOG > 0 && PPC_ACCESS_LOG < 2
	if (!valid_address(addr, size)) {
		if (addr >= PPC_DEBUG_ADDR_FROM && addr < PPC_DEBUG_ADDR_TO && addr != 0xdff006)
			write_log(_T("PPC io read %08x=%08x %d\n"), addr, v, size);
	}
#endif
#if PPC_ACCESS_LOG >= 2
	if (addr < 0xb00000 || addr > 0xc00000)
		write_log(_T("PPC read %08x=%08x %d\n"), addr, v, size);
#endif
	return true;
}
예제 #25
0
/***********************************************************************
 *
 * Function:    unpack_Address
 *
 * Summary:     Fill in the address structure based on the raw record 
 *		data
 *
 * Parameters:  Address_t*, pi_buffer_t *buf
 *
 * Returns:     -1 on error, 0 on success
 *
 ***********************************************************************/
int
unpack_Address(Address_t *addr, const pi_buffer_t *buf, addressType type)
{
	unsigned long	contents,
			v;
	size_t		ofs;

	if (type != address_v1)
		/* Don't support anything else yet */
		return -1;

	if (buf == NULL || buf->data == NULL || buf->used < 9)
		return -1;

	/* get_byte(buffer); gapfill */
	addr->showPhone     = hi(get_byte(buf->data + 1));
	addr->phoneLabel[4] = lo(get_byte(buf->data + 1));
	addr->phoneLabel[3] = hi(get_byte(buf->data + 2));
	addr->phoneLabel[2] = lo(get_byte(buf->data + 2));
	addr->phoneLabel[1] = hi(get_byte(buf->data + 3));
	addr->phoneLabel[0] = lo(get_byte(buf->data + 3));

	contents = get_long(buf->data + 4);

	/* get_byte(buf->data+8) offset */

	ofs = 9;

	/* if(flag & 0x1) { 
	   addr->lastname = strdup((buf->data + ofs);
	   ofs += strlen((buf->data + ofs)) + 1;
	   } else {
	   addr->lastname = 0;
	   } */

	for (v = 0; v < 19; v++) {
		if (contents & (1 << v)) {
			if ((buf->used - ofs) < 1)
				return 0;
			addr->entry[v] = strdup((char *) (buf->data + ofs));
                  	ofs += strlen(addr->entry[v]) + 1;
		} else {
			addr->entry[v] = 0;
		}
	}

	return 0;
}
예제 #26
0
파일: value_repr.c 프로젝트: BIC-MNI/minc
/* ARGSUSED */
static double guess_numeric_type(Acr_VR_Entry *vr_entry, 
                                 Acr_byte_order byte_order,
                                 char *data, long data_length)
{
   switch (data_length) {
   case ACR_SIZEOF_SHORT:
      return get_short(vr_entry, byte_order, data, data_length);
      break;
   case ACR_SIZEOF_LONG:
      return get_long(vr_entry, byte_order, data, data_length);
      break;
   default:
      return string_to_numeric(vr_entry, byte_order, data, data_length);
   }

}
static void handle_enumeration_response(DNSServiceRef sdr, ipc_msg_hdr *hdr, char *data)
    {
    DNSServiceFlags flags;
    uint32_t interfaceIndex;
    DNSServiceErrorType err;
    char domain[kDNSServiceMaxDomainName];
    int str_error = 0;
	(void)hdr;//Unused

    flags = get_flags(&data);
    interfaceIndex = get_long(&data);
    err = get_error_code(&data);
    if (get_string(&data, domain, kDNSServiceMaxDomainName) < 0) str_error = 1;
	if (!err && str_error) err = kDNSServiceErr_Unknown;
    ((DNSServiceDomainEnumReply)sdr->app_callback)(sdr, flags, interfaceIndex, err, domain, sdr->app_context);
    }
예제 #28
0
static int
np_ushort(char *p, PyObject *v, const formatdef *f)
{
	long x;
	unsigned short y;
	if (get_long(v, &x) < 0)
		return -1;
	if (x < 0 || x > USHRT_MAX){
		PyErr_SetString(StructError,
				"short format requires 0<=number<=" STRINGIFY(USHRT_MAX));
		return -1;
	}
	y = (unsigned short)x;
	memcpy(p, (char *)&y, sizeof y);
	return 0;
}
예제 #29
0
static void
get_player_list (GsqQuerier *querier, gchar *p)
{
	gint8 i, count = gsq_get_uint8 (&p);
	gchar time[16];
	
	for (i = 0; i < count; i++) {
		gsq_get_uint8 (&p);
		gchar *nickname = gsq_get_cstring (&p);			// Nickname
		gint kills = get_long (&p);						// Kills
		format_time (time, 16, get_float (&p));			// Time
		gsq_querier_add_player (querier, nickname, kills, time);
	}
	
	gsq_querier_emit_player_update (querier);
}
예제 #30
0
void
output_rt_tree(FILE *fp, struct RP_class *root, int margin)
{
  if ( NULL == root )
   return;
  rt_put_margin(margin,fp);
  get_many_bytes(get_long(root->CRuntime), misc_buffer1, root->namelen);
  misc_buffer1[root->namelen] = 0x0;
  if ( root->vtbl )
   fprintf(fp, "%s: adr 0x%X, vtbl 0x%X\n", misc_buffer1, root->CRuntime, root->vtbl);
  else
   fprintf(fp, "%s: adr 0x%X\n", misc_buffer1, root->CRuntime );
  int i;
  margin += 4;
  for ( i = 0; i < root->total; i++ )
   output_rt_tree(fp, root->children[i], margin);
}