61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*************************************************************************
							 | 
						||
| 
								 | 
							
								*									 *
							 | 
						||
| 
								 | 
							
								*	 YAP Prolog 							 *
							 | 
						||
| 
								 | 
							
								*									 *
							 | 
						||
| 
								 | 
							
								*	Yap Prolog was developed at NCCUP - Universidade do Porto	 *
							 | 
						||
| 
								 | 
							
								*									 *
							 | 
						||
| 
								 | 
							
								* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997	 *
							 | 
						||
| 
								 | 
							
								*									 *
							 | 
						||
| 
								 | 
							
								**************************************************************************
							 | 
						||
| 
								 | 
							
								*									 *
							 | 
						||
| 
								 | 
							
								* File:		corout.c						 *
							 | 
						||
| 
								 | 
							
								* Last rev:								 *
							 | 
						||
| 
								 | 
							
								* mods:									 *
							 | 
						||
| 
								 | 
							
								* comments:	Co-routining from within YAP				 *
							 | 
						||
| 
								 | 
							
								*									 *
							 | 
						||
| 
								 | 
							
								*************************************************************************/
							 | 
						||
| 
								 | 
							
								#ifdef SCCS
							 | 
						||
| 
								 | 
							
								static char SccsId[]="%W% %G%";
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef COROUTINING
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Attributed variales are controlled by the attvar_record. This includes
							 | 
						||
| 
								 | 
							
								three pieces of information:
							 | 
						||
| 
								 | 
							
								       A pointer to the list of attributes;
							 | 
						||
| 
								 | 
							
								       The value for the variable, if the variable was bound
							 | 
						||
| 
								 | 
							
								       Whether we are done with this variable as an attributed variable
							 | 
						||
| 
								 | 
							
								       An array of NUM_OF_ATTS attributes.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Each attribute contains;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 o a time stamp;
							 | 
						||
| 
								 | 
							
								 o the current value ([] if unbound).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct attvar_struct {
							 | 
						||
| 
								 | 
							
								  Term	Done;		/* if unbound suspension active, if bound terminated */
							 | 
						||
| 
								 | 
							
								  CELL sus_id;
							 | 
						||
| 
								 | 
							
								  Term NS;			 /* other attributed variables */
							 | 
						||
| 
								 | 
							
								  Term Value;                    /* value the variable will take */
							 | 
						||
| 
								 | 
							
								#ifdef __GNUC__
							 | 
						||
| 
								 | 
							
								  /* GNUCC understands empty arrays */
							 | 
						||
| 
								 | 
							
								  Term  Atts[0];
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								  Term  Atts[2];                 /* size of an entry */
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								} attvar_record;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*********** tags for suspension variables */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define AbsAttVar(attvar_ptr)	AbsAppl(((CELL *)(attvar_ptr)))
							 | 
						||
| 
								 | 
							
								#define RepAttVar(val)		((attvar_record *)RepAppl(val))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |