2% prolog_must/1 is like Java/C's assert/1
    3prolog_must(X):-X,!.
    4prolog_must(X):-trace,not(X).
    5
    6:-dynamic(asserted/4).
    7:-dynamic(assertion/13).
    8
    9%atom_concat_safe(L,R,A):- ((atom(A),(atom(L);atom(R))) ; ((atom(L),atom(R)))), !, atom_concat(L,R,A),!.
   10
   11:-use_module('cyc.pl').
   12
   13current_file(FileBase,Dir):-current_stream(File,read,_Stream),atom(File),is_absolute_file_name(File),
   14   file_directory_name(File,Dir),file_base_name(File,FilePart),once(FileBase=FilePart;file_name_extension(FileBase,_Ext,FilePart)).
   15
   16asserta_if_new(A):-retract(A),fail.
   17asserta_if_new(A):-asserta(A),!.
   18
   19:- current_file(F,Dir),writeq(current_file(F,Dir)),nl,!,
   20   asserta_if_new(user:file_search_path(cyc_api, Dir)),asserta_if_new(library_directory(Dir)).
   21
   22some_data_file(File,Filename):-
   23   absolute_file_name(library(File),[extensions(['.pl','.qlf',''])],Filename),exists_file(Filename),!.
   24some_data_file(File,Filename):-
   25   absolute_file_name(cyc_api(File),[extensions(['.pl','.qlf',''])],Filename),exists_file(Filename),!.
   26some_data_file(Filename,Filename).
   27
   28cycdataFile(File):-some_data_file(File,Filename),exists_file(Filename),debugFmt(ensure_qlf_loaded(Filename)),ensure_qlf_loaded(Filename).
   29
   30cycdataFile(File,File):-cycdataFile(File).
   31
   32init_cycdataFile(F):-initialization(cycdataFile(F)).
   33
   34:-ensure_loaded('../logicmoo_module_aiml_shared').
   35
   36ensure_qlf_loaded(Name):-!,translate_cyc_datafile(Name).
   37ensure_qlf_loaded(Name):-!,ensure_loaded(Name).
   38ensure_qlf_loaded(Name):- file_name_extension(FileStem,_,Name),file_name_extension(FileStem,'qlf',QLF),  
   39   catch((load_files(FileStem,[qcompile(auto)]),(ensure_loaded(Name))),_,(qcompile(FileStem),ensure_loaded(QLF))),!.
   40
   41
   42load_lljs([]):-!.
   43load_lljs([X|Xs]):-load_llj(X),!,load_lljs(Xs).
   44load_llj(X):-[X].
   45
   46:-dynamic(cyc_meta_predicate/1).
   47:-multifile(cyc_meta_predicate/1).
   48:-dynamic(nd_cyc_meta_predicate/3).
   49:-multifile(nd_cyc_meta_predicate/3).
   50cyc_meta_predicate([]):-!.
   51cyc_meta_predicate([X|L]):-cyc_meta_predicate(X),cyc_meta_predicate(L),!.
   52%%cyc_meta_predicate(X):-var(X),X = F/A, !,nd_cyc_meta_predicate(F,A,_LA).
   53cyc_meta_predicate(F/A):- nd_cyc_meta_predicate(F,A,A)->true;
   54 (X=F/A, asserta(nd_cyc_meta_predicate(F,A,A)),!,dynamic(X),multifile(X),style_check(-singleton)),!.
   55%cyc_meta_predicate(X):-functor(X,F,A),F \= '/', !, cyc_meta_predicate(F/A).
   56cyc_meta_predicate(X):-throw(X).
   57
   58:-dynamic(cyc_predicate/1).
   59:-multifile(cyc_predicate/1).
   60:-dynamic(nd_cyc_predicate/3).
   61:-multifile(nd_cyc_predicate/3).
   62%%cyc_predicate(X):-var(X),X = F/A,!,nd_cyc_predicate(F,A,_LA).
   63cyc_predicate([]):-!.
   64cyc_predicate([X]):-!,cyc_predicate(X),!.
   65cyc_predicate([X|L]):-cyc_predicate(X),cyc_predicate(L),!.
   66cyc_predicate(F/A):- nd_cyc_predicate(F,A,A)->true;
   67 (X=F/A, asserta(nd_cyc_predicate(F,A,A)),!,dynamic(X),multifile(X),style_check(-singleton)),!.
   68%cyc_predicate(X):-functor(X,F,A),F \= '/', !, cyc_predicate(F/A).
   69cyc_predicate(X):-throw(X).
   70
   71
   72:-dynamic(savedStubs/3).
   73:-multifile(savedStubs/3).
   74
   75%:- ensure_loaded('splits/allSplits.pl').
   76
   77:- ignore((savedStubs(_, F, A), dynamic(F/A) , multifile(F/A),fail)).
   78:- ignore((nd_cyc_meta_predicate(F, A,_), dynamic(F/A) , multifile(F/A),fail)).
   79:- ignore((nd_cyc_predicate(F, A,_), dynamic(F/A) , multifile(F/A),fail)).
   80
   81checkStatics(P):-not(predicate_property(P,dynamic)),trace,throw(P).
   82checkStatics(P):-not(predicate_property(P,multifile)),trace,throw(P).
   83
   84
   85orig_source_file(File,P):-absolute_file_name(File,F),var(P),source_file(_,F),!,source_file(P,F).
   86
   87checkStatics:- orig_source_file('splits/allSplits.pl',P),once(checkStatics(P)),fail.
   88checkStatics:-!.
   89
   90
   91:-checkStatics.
   92
   93
   94saveOfLoaded:-!.
   95
   96file_name_no_extension(File,Base):-file_name_extension(Base,_,File).
   97load_cyc_data_file(ZZZ):-debugFmt(ZZZ),maplist(cycdataFile,ZZZ,_).
   98
   99loadRestOfStages:-expand_file_name('./stage*/*.pl',X),expand_file_name('./stage*/*.qlf',Y),append(X,Y,Z),maplist(file_name_no_extension,Z,ZZ),sort(ZZ,ZZZ),load_cyc_data_file(ZZZ).
  100
  101loadRestOfKif:-expand_file_name('./stage*/*.kif',X),sort(X,ZZZ),maplist(load_cyc_kif_file,ZZZ).
  102
  103
  104
  105
  106%extract date
  107outputDateDir(FORWARD,NIL1,T1,ASSERTEDTRUEMON,DATE,NIL2,[date(DATE)|MORE]):-integer(DATE),DATE>0,!,
  108    outputDateDir(FORWARD,NIL1,T1,ASSERTEDTRUEMON,0,NIL2,MORE).
  109
  110% backwards
  111outputDateDir('BACKWARD',NIL1,T1,ASSERTEDTRUEMON,DATE,NIL2,[dir('BACKWARD')|MORE]):-!,
  112    outputDateDir('FORWARD',NIL1,T1,ASSERTEDTRUEMON,DATE,NIL2,MORE).
  113
  114outputDateDir('CODE',NIL1,T1,ASSERTEDTRUEMON,DATE,NIL2,[dir('CODE')|MORE]):-!,
  115    outputDateDir('FORWARD',NIL1,T1,ASSERTEDTRUEMON,DATE,NIL2,MORE).
  116
  117outputDateDir('FORWARD',NIL1,T1,ASSERTEDTRUEMON,_DATE,NIL2,MORE):-
  118   outputDateDir2(NIL1,T1,ASSERTEDTRUEMON,NIL2,MORE).
  119
  120outputDateDir2(NIL1,T1,ASSERTEDTRUEMON,NIL2,[ntan(NIL1,T1,ASSERTEDTRUEMON,NIL2)]).
  121
  122
  123makeLogicTV('TRUE', 'MONOTONIC',_ASSERTEDTRUEMON,':TRUE-MON').
  124makeLogicTV('TRUE', 'DEFAULT',_ASSERTEDTRUEMON,':TRUE-DEF').
  125makeLogicTV(_TRUE, _MONOTONIC,'ASSERTED-TRUE-MON',':TRUE-MON').
  126makeLogicTV(_TRUE, _DEFAULT,'ASSERTED-TRUE-DEF',':TRUE-DEF').
  127makeLogicTV('FALSE', 'MONOTONIC',_ASSERTEDTRUEMON,':FALSE-MON').
  128makeLogicTV('FALSE', 'DEFAULT',_ASSERTEDTRUEMON,':FALSE-DEF').
  129makeLogicTV(_TRUE, _MONOTONIC,'ASSERTED-FALSE-MON',':FALSE-MON').
  130makeLogicTV(_TRUE, _DEFAULT,'ASSERTED-FALSE-DEF',':FALSE-DEF').
  131makeLogicTV(A,B,C,D):-concat_atom([':',A,'-',B,'-',C],'',D),!.
  132
  133tdval(TD):-atom(TD),!,member(TD,[':UNKNOWN',':TRUE-DEF',':TRUE-MON',':FALSE-DEF',':FALSE-MON']),!.
  134
  135
  136
  137betterSentence(EL,HL,SENT):-atom(HL),SENT=EL,!.
  138betterSentence(EL,HL,SENT):-atom(EL),SENT=HL,!.
  139betterSentence(EL,_HL,SENT):-SENT=EL.
  140
  141% ===================================================================
  142%% immediate
  143% ===================================================================
  144outputTrans(IN,OUT):-functor(IN,F,A),outputTrans(F,A,IN,MID),!,outputTrans2(MID,OUT).
  145
  146outputTrans2(IN,OUT):-IN=..[output,TermOfUnit|_],functor(TermOfUnit,termOfUnit,_),!,OUT=skip(IN).
  147outputTrans2(OUT,OUT).
  148
  149outputTrans(savedStubs,3,A,prologDb(A)).
  150outputTrans(':-',1,':-'(A),call(':-'(A))):-debugOnFailure(A),!.
  151% ===================================================================
  152%% allp.pl translator
  153% ===================================================================
  154outputTrans(assertion,_FA,assertion(NUM,'termOfUnit',
  155          [nart(NART), NART],
  156      'BaseKB',
  157       _,'TRUE','FORWARD','MONOTONIC','NIL','T','ASSERTED-TRUE-MON',0,'NIL'),skip(nart(NUM,NART))):-!.
  158
  159outputTrans(assertion,_FA,assertion(NUM,'termOfUnit',
  160          [nart(NART), NART],
  161      'BaseKB',
  162       _,'TRUE','FORWARD','MONOTONIC','NIL','T','ASSERTED-TRUE-MON',0,'NIL'),skip(nart(NUM,NART))):-!.
  163
  164
  165outputTrans(assertion,_FA,assertion(NUM,ELPRED,ELARGS,MT, HL, TRUE, FORWARD, MONOTONIC,NIL1,T1,ASSERTEDTRUEMON,ZERO,NIL2),
  166      output(NEWSENT, NEWMT, PROPS, TRUEMON)):-
  167      EL=[ELPRED|ELARGS],
  168      betterSentence(EL,HL,SENT),
  169      fixupEL(MT,SENT,NEWMT,NEWSENT,[],VARS),!,
  170      makeLogicTV(TRUE,MONOTONIC,ASSERTEDTRUEMON,TRUEMON),!,
  171      %debug option
  172      (not(tdval(TRUEMON))->debugFmt(nonTD(TRUEMON,assertion(NUM,ELPRED,ELARGS,MT, HL, TRUE, FORWARD, MONOTONIC,NIL1,T1,ASSERTEDTRUEMON,ZERO,NIL2)));true),
  173      outputDateDir(FORWARD,NIL1,T1,ASSERTEDTRUEMON,ZERO,NIL2,MORE),!,append([num(NUM)|VARS],MORE,PROPS),!.
  174
  175% ===================================================================
  176%% asserted.pl
  177% ===================================================================
  178outputTrans(asserted,4,asserted(('.'),NART,REST,[]), skip(nart([NART|REST]))):-!.
  179
  180% ===================================================================
  181%% el_holds.pl
  182% ===================================================================
  183outputTrans(asserted,_FA,asserted(PRED,ARG1,ARG2,REST), assertedWithoutMt(NEWSENT,MtInfo,VARS)):-
  184  fixupEL('UnknownMt',[PRED,ARG1,ARG2|REST],MtInfo,NEWSENT,[],VARS),!.
  185
  186outputTrans(holds,_FA,HOLDS, assertedWithoutMt(NEWSENT,MtInfo,VARS)):- HOLDS=..[holds|SENT],
  187  fixupEL('UnknownMt',SENT,MtInfo,NEWSENT,[],VARS),!.
  188 
  189
  190% ===================================================================
  191%% littlebetter.pl/nocomment.pl/nonewlines.pl translator
  192% ===================================================================
  193
  194outputTrans(TRUEMON,_FA,TDSENT, output(NEWSENT, NEWMT, PROPS, TRUEMON)):-
  195    TDSENT=..[TRUEMON,TD1,TD2,TD3|TDN],
  196    tdval(TRUEMON),
  197    append(PREFIX,[MT,NUM],[TD2,TD3|TDN]),
  198    SENT=[TD1|PREFIX],
  199    number(NUM),!,
  200    fixupEL(MT,SENT,NEWMT,NEWSENT,[num(NUM)],PROPS).
  201
  202outputTrans('ASSERTION',_FA,'ASSERTION'(TRUEMON,_HL,MT,VARLIST,NUM,BACKWARDFORWARD,/*EL*/SENT),
  203    output(NEWSENT, NEWMT, PROPS, TRUEMON)):- compound(SENT),
  204    tdval(TRUEMON),
  205    number(NUM),!,
  206    fixupEL(MT,SENT,NEWMT,NEWSENT,VARLIST,VARS),!,
  207   append([num(NUM),dir(BACKWARDFORWARD)],VARS,PROPS).
  208
  209% ===================================================================
  210%% read_big_kb.pl translator
  211% ===================================================================
  212outputTrans('ASSERTION',_FA,'ASSERTION'(TRUEMON,[[],SENT],MT,VARLIST,NUM,BACKWARDFORWARD), 
  213    output(NEWSENT, NEWMT, PROPS, TRUEMON)):- compound(SENT),
  214    tdval(TRUEMON),
  215    number(NUM),!,
  216    fixupEL(MT,SENT,NEWMT,NEWSENT,VARLIST,VARS),!,
  217       append([num(NUM),dir(BACKWARDFORWARD)],VARS,PROPS).
  218
  219outputTrans('ASSERTION',_FA,'ASSERTION'(TRUEMON,_,MT,VARLIST,NUM,BACKWARDFORWARD,_HL,SENT),
  220    output(NEWSENT, NEWMT, PROPS, TRUEMON)):- compound(SENT),
  221    tdval(TRUEMON),
  222    number(NUM),!,
  223    fixupEL(MT,SENT,NEWMT,NEWSENT,VARLIST,VARS),!,
  224       append([num(NUM),dir(BACKWARDFORWARD)],VARS,PROPS).
  225
  226outputTrans(Fun,_FA,TDSENT,error(TDSENT)):-tdval(Fun),!,fail.
  227outputTrans(Fun,_FA,TDSENT,error(TDSENT)):-member(Fun,['asserted','assertion','ASSERTION','holds']),!,fail.
  228
  229% ===================================================================
  230%% newver.pl
  231% ===================================================================
  232
  233outputTrans(PRED,_FA,TDSENT, output(NEWSENT, NEWMT, PROPS, TRUEMON)):-
  234    TDSENT=..[PRED,TD1,TD2,TD3|TDN],
  235    append(PREFIX,[MT,NUM,TRUEMON],[TD2,TD3|TDN]),
  236    tdval(TRUEMON),
  237    SENT=[PRED,TD1|PREFIX],
  238    number(NUM),!,
  239    fixupEL(MT,SENT,NEWMT,NEWSENT,[num(NUM)],PROPS).
  240
  241
  242
  243fixupEL(MT,SENT,NEWMT,NEWSENT,VARLIST,VARS):-
  244   normalizeDataTerms('istAsserted'(MT,SENT),'istAsserted'(NEWMT,NEWSENT),Feats),append_nonvars(VARLIST,Feats,VARS),!.
  245fixupEL(_MT,_SENT,mt,[a,b,c,d,e],VARS,[v='?x'|VARS]):-!.
  246
  247append_nonvars(VARLIST,Feats,VARS):-var(VARLIST),!,append_nonvars([],Feats,VARS).
  248append_nonvars(VARLIST,Feats,VARS):-var(Feats),!,append_nonvars(VARLIST,[],VARS).
  249append_nonvars(VARLIST,Feats,VARS):-append(VARLIST,Feats,VARS).
  250
  251normalizeDataTerms(X,Y,Feats):- debugOnFailure((normalizeDataTerms1(X,XO,Feats),balanceBinding(XO,Y))).
  252 
  253normalizeDataTerms1(X,Z,Feats):-
  254      balanceBinding(X,Y),
  255      unnumbervars(Y,UN),
  256      cyc:s2p(cleanUpData, UN,Z,Feats),!.
  257
  258cleanUpDataRecurse(I,O,Feats):- cyc:s2p(cleanUpData,I,O,Feats),!.
  259
  260cleanUpData(S,S,[]):-var(S),!.
  261cleanUpData(S,S,[]):-string(S),!.
  262cleanUpData(M,M,[]):- atom(M),atom_concat(':',_I,M),!.
  263cleanUpData(nart(I),O,Feats):-!,cleanUpDataRecurse(I,O,Feats).
  264
  265cleanUpData(kw(I),O,Feats):- atom_concat(':',I,M),!,cleanUpDataRecurse(M,O,Feats).
  266cleanUpData('#$'(I),O,Feats):- atom_concat('#$',I,M),!,cleanUpDataRecurse(M,O,Feats).
  267
  268cleanUpData(string([I]),Out,[]):-localDestringify(I,Out).
  269cleanUpData(string(I),Out,[]):-localDestringify(I,Out).
  270cleanUpData(I,O,[]):-atom(I),atom_concat('#$',O,I),!,trace.
  271cleanUpData(I,O,[]):-atom(I),atom_concat('"',_,I),!,localDestringify(I,O).
  272cleanUpData(I,Out,[]):-is_string(I),localDestringify(I,Out).
  273
  274
  275cleanUpData(List,Out,[]):-is_list(List),ground(List),member('~a',List),trace,debugOnFailure(localDestringify(List,Out)).
  276cleanUpData([H|T],R,Features):-atom(H),cyc:isKeyword(H),!,cyc:s2List(cleanUpData,T,TT,Features),R=[H|TT],!.
  277
  278
  279localDestringify(string([I]),Out):-!,localDestringify(I,Out).
  280localDestringify(string(I),Out):-!,localDestringify(I,Out).
  281localDestringify([],""):-!,trace.
  282localDestringify([I],Out):-!,localDestringify(I,Out).
  283localDestringify([N,S],Out):-number(N),atom_number(AN,N),debugOnFailure((localDestringify(S,SS),string_concat(AN,SS,Out))).
  284localDestringify([AN,S],Out):-atom(AN),catch(atom_number(AN,_N),_,fail),trace,debugOnFailure((localDestringify(S,SS),string_concat(AN,SS,Out))).
  285localDestringify(S,Out):-not(atom(S)),!,cyc:toCycApiExpression(string(S),_,M),!,string_to_atom(M,A),debugOnFailure(localDestringify(A,Out)).
  286localDestringify(S,Out):-atom(S),pUnquoteAtom(S,OutA),!,string_to_atom(Out,OutA).
  287localDestringify(S,Out):-atom(S),!,string_to_atom(Out,S).
  288
  289localDestringify(S,Out):-trace,cyc:destringify(S,DS),cyc:unquoteAtom(DS,UQ),string_to_atom(Out,UQ),!.
  290localDestringify(Out,error(Out)):-!,trace.
  291
  292pUnquoteAtom(Atom,New):-concat_atom(['',New,''],'"',Atom).
  293
  294translate_cyc_datafile(InputFileHint):-load_single_cyc_data_file(InputFileHint),!.
  295
  296load_single_cyc_data_file(InputFileHint):-
  297  debugOnFailure((global_pathname(InputFileHint,InputFile))),
  298  debugOnFailure((
  299   guess_cyc_predname(InputFile,PredName),
  300   atom_concat_safe(InputFile,'.llj',OutputName),
  301   load_single_cyc_data_file(InputFile,OutputName,PredName,[load]))).
  302
  303load_single_cyc_data_file(InputFile,OutputName,_PredMatch,_Load):- loaded_cyc_data_file(InputFile,OutputName),!.
  304load_single_cyc_data_file(InputFile,OutputName,PredName,Load):-
  305   create_cyc_data_file2(InputFile,OutputName,PredName,Load),!,
  306   asserta(pending_cyc_data_file(InputFile,OutputName)).
  307
  308guess_cyc_predname(File,PredName):-ignore(File=PredName).
  309
  310translate_single_cyc_data_file(InputFileHint):-
  311  debugOnFailure((
  312   global_pathname(InputFileHint,InputFile))),
  313   debugOnFailure((
  314   guess_cyc_predname(InputFile,PredName),
  315   atom_concat_safe(PredName,'.llj',OutputName),
  316   create_cyc_data_file2(InputFile,OutputName,PredName,[noload]))),!.
  317
  318
  319% =================================================================================
  320%  -> Prolog pretransating
  321% =================================================================================
  322
  323:-dynamic(creating_cyc_data_file/2).
  324:-dynamic(loaded_cyc_data_file/2).
  325:-dynamic(pending_cyc_data_file/2).
  326
  327do_pending_data_loads:-forall(retract(pending_cyc_data_file(FileName,OutputName)),load_pending_cyc_data_file(FileName,OutputName)).
  328
  329load_pending_cyc_data_file(InputFile,OutputName):- debugFmt(load_pending_cyc_data_file(InputFile,OutputName)),
  330  catch(debugOnFailure(create_cyc_data_file2(InputFile,OutputName)),E,(debugFmt(E),asserta(pending_cyc_data_file(InputFile,OutputName)))),!.
  331
  332%temp comment create_cyc_data_file2(File,OutputName,PredName,_Load):- creating_cyc_data_file(File,OutputName),!, throw_safe(already(creating_cyc_data_file(File,OutputName),PredName)).
  333create_cyc_data_file2(File,OutputName,PredName,_Load):- loaded_cyc_data_file(File,OutputName),!, throw_safe(already(loaded_cyc_data_file(File,OutputName),PredName)).
  334
  335create_cyc_data_file2(File,OutputName,_PredMatch,Load):-
  336   exists_file(OutputName),
  337   time_file_safe(OutputName,PLTime), % fails on non-existent
  338   time_file_safe(File,FTime),
  339   %not(cyc_dataOption(rebuild__Files,true)),
  340   PLTime > FTime,!,
  341   debugFmt(up_to_date(create_cyc_data_file(File,OutputName))),!,   
  342   ignore((member(load,Load),asserta(pending_cyc_data_file(File,OutputName)))),!.
  343
  344/* create_cyc_data_file2('c:/development/opensim4opencog/bin/cynd/cyc_api/stage1/allp.pl',
  345                         'c:/development/opensim4opencog/bin/cynd/cyc_api/stage1/allp.pl.llj',
  346                         'c:/development/opensim4opencog/bin/cynd/cyc_api/stage1/allp.pl',[load]) */

  347create_cyc_data_file2(InputFile,OutputName,_PredMatch,_Load):- 
  348 debugOnFailure((
  349       retractall(lineInfoElement(InputFile,_,_,_)),
  350        open(InputFile, read, In, [type(binary)]),
  351     repeat,
  352      line_count(In,Lineno),
 double_quotes(_DQBool)
  354      Options = [variables(_Vars),variable_names(_VarNames),singletons(_Singletons),comment(_Comment)],
  355      catch((read_term(In,Term,[syntax_errors(error)|Options])),E,(debugFmt(E),fail)),      
  356      prolog_must((load_cyc_data_term(Term,[line_count(Lineno),file(OutputName),stream(In)|Options],OutputName))),
  357     Term==end_of_file,
  358     close(In))
  358)
  358.
  359
  360
  361commitOutput(skip(_),_Options,_OutputName):-!.
  362commitOutput(Output,_Options,_OutputName):-debugFmt(Output),!.
  363
  364load_cyc_data_term(end_of_file,_Options,_OutputName):-!.
  365load_cyc_data_term(Term,Options,OutputName):-
  366      catch(
  367          debugOnFailure((outputTrans(Term,Output),commitOutput(Output,Options,OutputName))),
  368            E,
  369            (debugFmt(error(load_term(Term,Output,E))),throw_safe(E))).
  370
  371
  372create_cyc_data_file2___XXXXXX(InputFile,OutputName,PredName,Load):-        
  373        asserta(creating_cyc_data_file(InputFile,OutputName)),
  374        debugFmt(doing(create_cyc_data_file(InputFile,OutputName))),
  375        %%cyc_dataCateSig(CateSig),!,
  376   (format('%-----------------------------------------~n')),
  377        printPredCount('Cleaning',PredName,_CP),
  378   (format('%-----------------------------------------~n')),
  379        unify_listing(PredName),
  380        retractall(PredName),
  381   (format('%-----------------------------------------~n')),
  382
  383 tell(OutputName),
  384        flag(cateSigCount,PREV_cateSigCount,0),
  385  /*
  386   (format('%-----------------------------------------~n')),
  387      withAttributes([withCategory=[asserta_cate]],
  388               ( fileToLineInfoElements(InputFile,AILSTRUCTURES), 
  389                  load_cyc_data_structure(AILSTRUCTURES))),
  390  */

  391   (format('%-----------------------------------------~n')),
  392        unify_listing(PredName),
  393   (format('%-----------------------------------------~n')),
  394        listing(xmlns),
  395   (format('%-----------------------------------------~n')),
  396        told,
  397        flag(cateSigCount,NEW_cateSigCount,PREV_cateSigCount),
  398        printPredCount('Errant Lines',lineInfoElement(InputFile,_,_,_),_EL),
  399        printPredCount('Total Categories',toDoCateSig,_TC),!,
  400        debugFmt('NEW_cateSigCount=~q~n',[NEW_cateSigCount]),!,
  401        statistics(global,Mem),MU is (Mem / 1024 / 1024),
  402        debugFmt(statistics(global,MU)),!,
  403        printPredCount('Loaded',PredName, FM),
  405        retractall(lineInfoElement(InputFile,_,_,_)),
  406        retractall(xmlns(_,_,_)),        
  407        retractall(creating_cyc_data_file(InputFile,OutputName)),
  408        ignore((FM == 0, PREV_cateSigCount>0, retractall(loaded_cyc_data_file(InputFile,OutputName)),  member(load,Load), asserta(pending_cyc_data_file(InputFile,OutputName)))),!
  408.
  409
  410
  411        /*
  412
  413        copy_term(NEW,OLD),
  414      cyc_dataCateOrder(Order)
  415         ignore(retract(OLD)),
  416
  417        */

  418
  419load_cyc_kif_file(File):-atom_concat(File,'.pl',OutputName),
  420   load_cyc_kif_file(File,OutputName,_PredName).
  421
  422
  423load_cyc_kif_file(File,OutputName,PredName):- loaded_cyc_data_file(File,OutputName),!, throw_safe(already(load_cyc_kif_file(File,OutputName),PredName)).
  424
  425load_cyc_kif_file(File,OutputName,_PredMatch):-fail,
  426   exists_file(OutputName),
  427   time_file_safe(OutputName,PLTime), % fails on non-existent
  428   time_file_safe(File,FTime),
  429   %not(cyc_dataOption(rebuild__Files,true)),
  430   PLTime > FTime,!,
  431   debugFmt(up_to_date(create_cyc_data_file(File,OutputName))),!,
  432   Load = [load],
  433   ignore((member(load,Load),asserta(pending_cyc_data_file(File,OutputName)))),!.
  434
  435/* create_cyc_data_file2('c:/development/opensim4opencog/bin/cynd/cyc_api/stage1/allp.pl',
  436                         'c:/development/opensim4opencog/bin/cynd/cyc_api/stage1/allp.pl.llj',
  437                         'c:/development/opensim4opencog/bin/cynd/cyc_api/stage1/allp.pl',[load]) */

  438load_cyc_kif_file(InputFile,_OutputName,_PredMatch):-                   
  439             setup_call_cleanup(open(InputFile, read, In),                   
  440                                load_cyc_kif_file0(InputFile, In),               
  441                                close(In) ).    
  442
  443load_cyc_kif_file0(_InputFile, In):- 
  444  %%retractall(lineInfoElement(InputFile,_,_,_)),
  445   debugOnFailure((
  447      %%line_count(In,Lineno),
 double_quotes(_DQBool)
  449      %%Options = [variables(_Vars),variable_names(_VarNames),singletons(_Singletons),comment(_Comment)],
  450         loadLispStream(In,loadKifTerm))
  450)
  450.
  451
  452loadKifTerm(token(Surf),Vars):-!,loadKifTerm(Surf,Vars).
  453loadKifTerm((whitepace(_)),_Vars):- !.
  454loadKifTerm([H|T],Feats):- cleanUpDataRecurse([H|T],Z,Feats),!, writeFmtFlushed(surface(Z:Feats)),!.
  455loadKifTerm(Surf,Vars):- writeFmtFlushed(surface((Surf:Vars))),!.
  456
  457%:-loadRestOfStages.
  458%:-loadRestOfKif.
  462rpl:- repeat,(cyc:lisp_read(user_input,S,Sexp)),debugFmt((string(S)->Sexp)),S="EOF\n".
  463%:-rpl. 
  464
  465:- tell('translate.pl'),loadRestOfKif,told.