Exemplo n.º 1
0
static int
init()
{
       if (audio_fd >= 0)
               return 1;
       if ((audio_fd = asa_init()) >= 0)
               return 1;
       err_setstr(RuntimeError, "can't initialize async audio");
       return 0;
}
Exemplo n.º 2
0
static object *
amigalibs_obj2reg(object *self, object *arg)
{
	ULONG res;
	if(!arg)
		return (object*) PyErr_BadArgument();

	if(obj2reg(arg, &res))
		return newintobject(res);
	else
	{
		err_setstr(TypeError, "can't convert type to register ULONG");
		return NULL;
	}
}
Exemplo n.º 3
0
static object *
newamigalibobject(char *libname, int libver)
{
	amigalibobject *ao;

	if(ao = NEWOBJ(amigalibobject, &Amigalibtype))
	{
		if(strcmp(libname,"exec.library")==0)
			ao->libbase = *(struct Library**)4L;
		else
			ao->libbase = OpenLibrary(libname,libver);

		if(!ao->libbase)
		{
			err_setstr(AmigalibsError, "can't open library");
			DECREF(ao);
			ao = NULL;
		}
	}
	return (object *)ao;
}
Exemplo n.º 4
0
/*
**	CALL - perform library call
*/
static object *
lib_call(amigalibobject *self, object *args)				// call
{
	object *dic;
	int LVO_value;
	ULONG regspec, orig_regspec;
	int pos=0;
	object *key, *value;

	/* the registers: */
	ULONG reg[16];

	if (!newgetargs(args, "(ii)O", &LVO_value, &regspec, &dic)) return NULL;

	if(!PyDict_Check(dic))
	{
		err_setstr(TypeError, "2nd arg must be dictionary");
		return NULL;
	}

	if(LVO_value>-30 || LVO_value%2)
	{
		err_setstr(ValueError, "illegal LVO value");
		return NULL;
	}

	if(regspec<0 || regspec >0xFFFF)
	{
		err_setstr(ValueError, "illegal regspec");
		return NULL;
	}
	
	orig_regspec=regspec;

	while(PyDict_Next(dic,&pos,&key,&value))
	{
		int regnr =  PyInt_AsLong(key);
		if(!PyInt_Check(key) || regnr<0 || regnr>15)
		{
			err_setstr(ValueError, "illegal key/regnr.");
			return NULL;
		}
		else
		{
			ULONG regval;
			if(!obj2reg(value,&regval))
			{
				err_setstr(ValueError, "illegal register value");
				return NULL;
			}

			/* OK: the register `regnr' must get the value `regval' */
			/* Check if register regnr indeed must get a value */
			if(regspec & (1<<regnr))
			{
				/* Yes, put value in register & clear register bit */
				reg[regnr]=regval;
				regspec &= ~(1<<regnr);
			}
			else
			{
				err_setstr(ValueError, "registers not consistent with LVO spec");
				return NULL;
			}
		}
	}

	/* Are there still registers to assign a value to? */
	if(regspec)
	{
		err_setstr(ValueError, "too few arguments provided");
		return NULL;
	}

	/* XXXX TODO: SHOULD PASS ARGUMENTS ALSO */
	return newintobject(
			amigalibs_calllib(self->libbase,
				LVO_value,orig_regspec,reg));
}
Exemplo n.º 5
0
/* Set a SV-specific error from svideo_errno and return NULL */
static object *
sv_error()
{
	err_setstr(SvError, svStrerror(svideo_errno));
	return NULL;
}