1/* -*- Mode: MACSYMA; Package: CL-MAXIMA -*- */
2
3desolve(eqns,vars):=block([teqns,tvars,ovar,lvar,flag,dispflag],
4	modedeclare(flag,boolean),
5	flag:false,
6	if not listp(vars) then (eqns:[eqns], vars:[vars], flag:true),
7	if length(ovar:vars[1])#1 then
8		error(ovar,"contains more than one independent variable."),
9	ovar:inpart(ovar,1),dispflag:false,
10	teqns:map(lambda([z],laplace(z,ovar,lvar)),eqns),
11	tvars:map(lambda([z],'laplace(z,ovar,lvar)),vars),
12	/* if not freeof(nounify('diff),teqns) then return(false), */
13	teqns:errcatch(solve(teqns,tvars)),
14	if teqns=[] or teqns=[[]]
15	  then error("desolve can't handle this case.")
16	  else teqns:first(teqns),
17	if flag#true then teqns:first(teqns),
18	teqns:map(lambda([z],ilt(z,lvar,ovar)),teqns),
19	if flag and length(tvars)=1 then teqns[1] else teqns)$
20