/***   repr.h   ***/

#define dummy_tag	017777

/*---- program input ----*/
bool	inp(int);
bool	inp_tag(int*);
bool	inp_ind(int*);
bool	inp_denoter(int*);
#define spy(s)		(X[P]==s)
bool	spy_declarer(void);
int	match(void);

/*---- administration ----*/
void	adm_open(int*);
void	adm_close(int);
void	adm_routine(int*,int);
void	adm_parameter(int*);

#define	possess(el,v)	{LIND[++J]=(el);VIND[J]=(v);must(J<max_IND,111);}
#define	mask(x)		(x | 020000)
void	unmask(int);

int	scope(void);
bool	search(int,int*);
bool	further_search(int,bool,int*,int*);

/*---- memory handling ----*/
int	ask(void);
int	askn(int);
#define	free(v)		{D[v]=FS; FS=v;}
void	freen(int,int);
#define copy(v,w)	{A[w]=A[v]; B[w]=B[v]; C[w]=C[v];}
void	copyn(int,int,int);

/*---- primary values ----*/
extern double re1,im1,re2,im2;
#define short_integer(i) (-0x8000L <= (i) && (i) < 0x8000L)
#if INT16
#define store_int(i,v)	{B[v]=(int)((i)>>16);C[v]=(int)(i);}
#define get_int(v)      (long)(((((unsigned long)(unsigned)B[v])<<16)|((unsigned long)(unsigned)C[v])))
#else
#define store_int(i,v)  {B[v]=i;}
#define get_int(v)      B[v]
#endif
#define put_int(i)      {A[Z=ask()]=INT;store_int(i,Z);}
#define store_bits(i,v)	store_int(i,v)
#define	get_bits(i)	get_int(i)
#define put_bits(i)	{A[Z=ask()]=BITS; store_int(i,Z);}
#define	put_bool(b)	{A[Z=ask()]=BOOL;B[Z]=(b);}
#define	put_char(i)	{A[Z=ask()]=CHAR;B[Z]=(i);}
void	store_real(int,double);
bool	get_real(int);
void	put_real(double);
bool	get_complex(int);
void	put_complex(double,double);
#define	void_result()	A[Z=ask()]=VOID
void	put_denoter(int);

/*---- instances and copying ----*/
#define	more_instance(v)	(D[v])++
int	new_reference(int);
#define	references(v)		(D[v]&037777)
#define	new_instance(v)		move(TRUE,v,ask())
#define	actual_instance(v)	move(FALSE,v,ask())
void	relax(int);
#define	emp()			relax(Z)

int	unfold(int);
int	move(bool,int,int);
void	replace(int,int);
void	supersede(int,int);

#define	recursive_mask		040000
#define	recursive(v)		(D[v]&recursive_mask)
#define	put_recursivity(v)	D[v] = (1|recursive_mask)
void	adjust_pointer(int,int);

/*---- row spelling ----*/
extern int source,destination;
void	move_to_destination(int);
void	more_instance_call(int);
void	move_row(int);
void	spelling_row(int,void(*)(int));


