65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- use_module(library(lineutils),
							 | 
						||
| 
								 | 
							
									[file_filter_with_init/5,
							 | 
						||
| 
								 | 
							
									 split/3]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- use_module(library(lists),
							 | 
						||
| 
								 | 
							
									[append/2]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- initialization(main).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- yap_flag(write_strings,on).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								main :-
							 | 
						||
| 
								 | 
							
									warning(Warning),
							 | 
						||
| 
								 | 
							
									nb_setval(atom_counter,0),
							 | 
						||
| 
								 | 
							
									nb_setval(functor_counter,0),
							 | 
						||
| 
								 | 
							
									file_filter_with_init('misc/SWIATOMS','include/dswiatoms.h',gen_defs, Warning, ['dswiatoms.h']),
							 | 
						||
| 
								 | 
							
									open('include/dswiatoms.h',append,W),
							 | 
						||
| 
								 | 
							
									nb_getval(atom_counter,SWIAtoms),
							 | 
						||
| 
								 | 
							
									nb_getval(functor_counter,SWIFunctors),
							 | 
						||
| 
								 | 
							
									format(W,'~n~n#define N_SWI_ATOMS ~d~n',[SWIAtoms]),
							 | 
						||
| 
								 | 
							
									format(W,'#define N_SWI_FUNCTORS ~d~n',[SWIFunctors]),
							 | 
						||
| 
								 | 
							
									HashSizeBits is msb(SWIAtoms+SWIFunctors)+2,
							 | 
						||
| 
								 | 
							
									HashSize is 2^HashSizeBits,
							 | 
						||
| 
								 | 
							
									format(W,'#define N_SWI_HASH_BITS ~d~n',[HashSizeBits]),
							 | 
						||
| 
								 | 
							
									format(W,'#define N_SWI_HASH ~d~n',[HashSize]),
							 | 
						||
| 
								 | 
							
									close(W),
							 | 
						||
| 
								 | 
							
									file_filter_with_init('misc/SWIATOMS','H/iswiatoms.h',gen_init, Warning, ['iswiatoms.h']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								warning('~n  /* This file, ~a, was generated automatically~n     by calling \"yap -L misc/buildswiatoms\"~n     and is based on SWIATOMS, copied from the SWI-Prolog distribution~n     please do not update */~n~n').
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								gen_defs(Inp,Out) :-
							 | 
						||
| 
								 | 
							
									split(Inp,"	 ",["A",Atom,_]), !,
							 | 
						||
| 
								 | 
							
									nb_getval(atom_counter, Pos),
							 | 
						||
| 
								 | 
							
									NPos is Pos+1,
							 | 
						||
| 
								 | 
							
									nb_setval(atom_counter, NPos),
							 | 
						||
| 
								 | 
							
									OffPos is Pos*2+1,
							 | 
						||
| 
								 | 
							
									number_codes(OffPos, Val),
							 | 
						||
| 
								 | 
							
									append(["#define ATOM_",Atom," ",Val], Out).
							 | 
						||
| 
								 | 
							
								gen_defs(Inp,Out) :-
							 | 
						||
| 
								 | 
							
									split(Inp,"	 ",["F",Functor,Arity]), !,
							 | 
						||
| 
								 | 
							
									nb_getval(functor_counter, Pos),
							 | 
						||
| 
								 | 
							
									NPos is Pos+1,
							 | 
						||
| 
								 | 
							
									nb_setval(functor_counter, NPos),
							 | 
						||
| 
								 | 
							
									OffPos is Pos*2+1,
							 | 
						||
| 
								 | 
							
									number_codes(OffPos, Val),
							 | 
						||
| 
								 | 
							
									append(["#define FUNCTOR_",Functor,Arity," ",Val], Out).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								gen_init(Inp,Out) :-
							 | 
						||
| 
								 | 
							
									split(Inp," 	",["A",_,String]), !,
							 | 
						||
| 
								 | 
							
									append(["  SWI_Atoms[i++] = Yap_LookupAtom(",String,");"],Out).
							 | 
						||
| 
								 | 
							
								gen_init(Inp,Out) :-
							 | 
						||
| 
								 | 
							
									split(Inp," 	",["F",String,Arity]), !,
							 | 
						||
| 
								 | 
							
									append(["  SWI_Functors[j++] = Yap_MkFunctor(SWIAtomToAtom(ATOM_",String,"),",Arity,");"],Out).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									
							 |