:- package(parser). :- package(gui). main([CircuitName|_]) :- % e.g. minerva -l circuit_analysis cd67 read_circuit(CircuitName,Circuit), possible_components(Circuit), explain_whole_circuit(Circuit). read_circuit(CircuitName,Circuit) :- % e.g. term "cd67(Circuit)." in file "cd67.min" openFileOrUrl(CircuitName,In), read(In,CircuitTerm), close(In), functor(CircuitTerm,CircuitName,1),arg(1,CircuitTerm,Circuit). openFileOrUrl(CircuitName,In) :- atom_concat(CircuitName,'.min',CircuitFile), ( % if applet read from server catch( (applet_getCodeBase(applet, Base), url_toExternalForm(Base, BaseName)), _,fail),!, atom_concat(BaseName,'ExamplePrograms/Applications/CircuitAnalysis/',Name), atom_concat(Name, CircuitFile, Url), open(Url, read, In,[url,text,buffered]), writeq(opened_url(Url)),nl,flush_output ; % else normal file open(CircuitFile,read,In), writeq(opened_file(CircuitFile)),nl,flush_output ). possible_components(Circuit) :- subset(Components,Circuit,_Rest), writeq(Components),write('.'),nl,flush_output, fail; true. explain_whole_circuit(Circuit) :- subset(CompleteExplanation,Circuit,[]), writeq(CompleteExplanation),write('.'),nl,flush_output.