
DESOLVE(EQNS,VARS):=BLOCK([TEQNS,TVARS,OVAR,LVAR,FLAG,DISPFLAG],
	MODEDECLARE(FLAG,BOOLEAN),
	FLAG:FALSE,
	IF NOT LISTP(VARS) THEN (EQNS:[EQNS], VARS:[VARS], FLAG:TRUE),
	IF LENGTH(OVAR:VARS[1])#1 THEN
		ERROR(OVAR,"contains more than one independent variable."),
	OVAR:INPART(OVAR,1),DISPFLAG:FALSE,
	TEQNS:MAP(LAMBDA([Z],LAPLACE(Z,OVAR,LVAR)),EQNS),
	TVARS:MAP(LAMBDA([Z],'LAPLACE(Z,OVAR,LVAR)),VARS),
	/* if not freeof(nounify('diff),teqns) then return(false), */
	TEQNS:ERRCATCH(EV(SOLVE(TEQNS,TVARS),EVAL)),
	IF TEQNS=[] OR TEQNS=[[]] 
	  THEN ERROR("DESOLVE can't handle this case.")
	  ELSE TEQNS:FIRST(TEQNS),
	if flag#true then teqns:first(teqns),
	TEQNS:MAP(LAMBDA([Z],ILT(Z,LVAR,OVAR)),TEQNS),
	IF FLAG AND LENGTH(TVARS)=1 THEN TEQNS[1] ELSE TEQNS)$
