/************************************************************************ * unstak -unstack the stack according to type of token * ************************************************************************/ subroutine unstak(sp,lextyp,labval) implicit integer(a-z) include ratfor.def integer lextyp(100),labval(100) integer sp,gettok character token(MAXTOKEN) for(;sp > 1;sp = sp - 1) [ if(lextyp(sp) == LEXBEGIN) break if(lextyp(sp) == LEXIF) [ for(i = gettok(token);i == NEWLINE;i = gettok(token)) ; call pbstr(token) if(i == LEXELSE) break ] if(lextyp(sp) == LEXFORINIT) [ call fortst(labval(sp)) #do the code sp = sp - 1 break ] if(lextyp(sp) == LEXIF) call outcon(labval(sp)) #output label else if(lextyp(sp) == LEXELSE) [ if(sp > 2) sp=sp-1 call outcon(labval(sp)+1) ] else if(lextyp(sp) == LEXDO) call dostat(labval(sp)) else if(lextyp(sp) == LEXWHILE) call whiles(labval(sp)) else if(lextyp(sp) == LEXREPEAT) call untils(labval(sp)) else if(lextyp(sp) == LEXFOR) { call fors(labval(sp)) sp = sp - 1 break } if(lextyp(sp) == LEXSWITCH) call ecase(labval(sp)) ] return end