This is mm.var.c in view mode; [Download] [Up]
#include "mm.head.h" variable(){ int i, index; float *fptr; char *sptr; BARE0("var "); if(bc != ';'){bc = field(fld,SIGS,SBRK); *(Params+2) = Time = getp2(fld);} if(!Merging){ if(Time > 0 && Time < Now)SEQ(SEC); if(Time > Now)synthesize(); } bc = field(fld,SIGS," [,;"); BARE1("%s ",fld); switch(*fld){ case 'p': if(bc == '['){ if((bc = field(fld,SIGS,"] ")) != ']'){ Error++; PROUT("Illegal p-field subscript\n",index); return; } index = expr(fld); } else index = atoi(&fld[1]); if(index > Pmax){ Pmax = index; EXTEND(Pp, Params, Pmax+1, float); } fptr = (Params + index); if(bc != ';') do{ bc = field(fld,SIGS,SBRK); if(index > Pmax){ Pmax = index; EXTEND(Pp, Params, Pmax+1, float); } index++; *fptr++ = expr(fld); } while (bc != ';'); break; case 'v': if(bc == '['){ if((bc = field(fld,SIGS,"] ")) != ']'){ Error++; PROUT("Illegal v-field subscript\n",index); return; } index = expr(fld); } else index = atoi(&fld[1]); if(index > Vmax){ Vmax = index; EXTEND(Vp, Vars, Vmax+1, float); } fptr = (Vars + index); if(bc != ';') do{ bc = field(fld,SIGS,SBRK); if(index > Vmax){ Vmax = index; EXTEND(Vp, Vars, Vmax+1, float); } index++; *fptr++ = expr(fld); } while (bc != ';'); break; case 's': if(bc == '['){ if((bc = field(fld,SIGS,"] ")) != ']'){ Error++; PROUT("Illegal string subscript\n",index); return; } index = expr(fld); } else index = atoi(&fld[1]); if(index > Strmax){ Strmax = index; if(Strvars) Strvars = (char **) realloc(Strvars,(Strmax+1)*sizeof(char **)); else Strvars = (char **) malloc((Strmax+1)*sizeof(char **)); Strp = (Strvars+(Strmax+1)-1); *Strp = NULL; } Strp = (Strvars + index); while(bc != ';'){ bc = field(fld,SIGS,SBRK); BARE1("\"%s\"", fld); if(index > Strmax){ Strmax = index; if(Strvars) Strvars = (char **) realloc(Strvars,(Strmax+1)*sizeof(char **)); else Strvars = (char **) malloc((Strmax+1)*sizeof(char **)); Strp = (Strvars+(Strmax+1)-1); *Strp = NULL; } if(*Strp) *Strp = strcpy(realloc(*Strp, (strlen(fld)+1)*sizeof(char *)), fld); else *Strp = strcpy(malloc(strlen(fld)+1), fld); index++; } break; default: PROUT("Illegal Variable %s\n",fld); Error++; return; } BARE0(";\n"); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.