2 static char rcsid[] = "$Id: state.c,v 2.3 1994/06/24 13:24:21 ceriel Exp $";
9 #include <cg_pattern.h>
16 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
17 * See the copyright notice in the ACK home directory, in the file "Copyright".
19 * Author: Hans van Staveren
22 extern int nstab; /* salloc.c */
25 extern string myalloc();
31 savestatus(sp) register state_p sp; {
33 state_p savestatus() {
37 sp = (state_p) myalloc( sizeof( *sp ) );
41 sp->st_sh = stackheight;
42 bmove((short *)fakestack,(short *)sp->st_fs,stackheight*sizeof(token_t));
44 bmove((short *)allreg,(short *)sp->st_ar,nallreg*sizeof(int));
46 bmove((short *)dollar,(short *)sp->st_do,LONGESTPATTERN*sizeof(result_t));
47 bmove((short *)machregs,(short *)sp->st_mr,NREGS*sizeof(struct reginfo));
49 bmove((short *)emlines,(short *)sp->st_el,nemlines*sizeof(struct emline));
52 sp->st_tl = tokpatlen;
59 restorestatus(sp) register state_p sp; {
61 stackheight = sp->st_sh;
62 bmove((short *)sp->st_fs,(short *)fakestack,stackheight*sizeof(token_t));
64 bmove((short *)sp->st_ar,(short *)allreg,nallreg*sizeof(int));
66 bmove((short *)sp->st_do,(short *)dollar,LONGESTPATTERN*sizeof(result_t));
67 bmove((short *)sp->st_mr,(short *)machregs,NREGS*sizeof(struct reginfo));
69 bmove((short *)sp->st_el,(short *)emlines,nemlines*sizeof(struct emline));
72 tokpatlen = sp->st_tl;
77 freestatus(sp) state_p sp; {
84 bmove(from,to,nbytes) register short *from,*to; register nbytes; {
88 assert(sizeof(short)==2 && (nbytes&1)==0);