diff mc-macro.c @ 861:c005a392e27e

fix for Marvaricks
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 31 Mar 2014 18:33:20 +0900
parents cd0467ebee31
children e253ffedf947
line wrap: on
line diff
--- a/mc-macro.c	Mon Sep 16 18:02:58 2013 +0900
+++ b/mc-macro.c	Mon Mar 31 18:33:20 2014 +0900
@@ -63,12 +63,12 @@
 
     In macro_function and macro_eavl,
     expand result is put into macrop local variable.
-	list3s(STRING,next,char*)
+        list3s(STRING,next,char*)
     to generate result, mappend/reverse0 is necessary.
     
  */
 
-extern void
+void
 macro_expansion(NMTBL *nptrm)
 {
     int i = mode;
@@ -110,37 +110,37 @@
 
     while (mconcat) {
         // ## re-eval macro
-if (lsrc) printf("## before %s",macropp);
+        if (lsrc) printf("## before %s",macropp);
         mconcat = 0;
         macrop = 0;
-	for(s=t=macropp;*s;) {
-	    if ((c=*s++)=='#'&&*s=='#') {
-		if (t>s-3) t=s-2; else t--;
-		while(*t<=' '&&t>macropp) t--; t++;
-		for(s++;*s && *s<=' ';) s++;
-		continue;
-	    } else if (c==STRING) {
-		c = '"';
-	    }
-	    *t++=c;
-	}
-	*t++=0;
-	// evaluate generated result again
+        for(s=t=macropp;*s;) {
+            if ((c=*s++)=='#'&&*s=='#') {
+                if (t>s-3) t=s-2; else t--;
+                while(*t<=' '&&t>macropp) t--; t++;
+                for(s++;*s && *s<=' ';) s++;
+                continue;
+            } else if (c==STRING) {
+                c = '"';
+            }
+            *t++=c;
+        }
+        *t++=0;
 #if 0
-if (1 && lsrc) {
-     printf("\n### %s\n",macropp);
-     if (t[-2]!='\n') putchar('\n');
-}
+        if (1 && lsrc) {
+           printf("\n### %s\n",macropp);
+           if (t[-2]!='\n') putchar('\n');
+        }
 #endif
+        // evaluate generated result again
         macrop=macro_eval(macrop,macropp,macro_history);
-	cheap = reset_cheap(&scheap);
-	macropp = cheap->ptr;
-	// will not override evaled list
+        cheap = reset_cheap(&scheap);
+        macropp = cheap->ptr;
+        // will not override evaled list
         mappend0(reverse0(macrop),&macropp);
-	// cheap->ptr[-1] ='\n';
-	cheap->ptr[-1] =0;
-	cheap->ptr[0] =0;
-	cheap = increment_cheap(cheap,&macropp);
+        // cheap->ptr[-1] ='\n';
+        cheap->ptr[-1] =0;
+        cheap->ptr[0] =0;
+        cheap = increment_cheap(cheap,&macropp);
     }
     cheap = reset_cheap(&scheap);
     // genrated macro will be overwrited by cheap, but it's OK, again
@@ -148,8 +148,8 @@
     set_lfree(slfree);
 #if 0
      if (lsrc && !asmf && nptrm->sc==FMACRO) {
- 	gen_comment(macropp);
- 	if (0 && t[-2]!='\n') putchar('\n');
+        gen_comment(macropp);
+        if (0 && t[-2]!='\n') putchar('\n');
      }
 #endif
     // push previous chptr, and change it to the generate macro
@@ -164,7 +164,7 @@
 
 /*
     file name concatenation
-	on cheap
+        on cheap
  */
 
 static char *
@@ -174,7 +174,7 @@
     if (! *path) return name;
     while(( *cheap->ptr = *path++ )) cheap = increment_cheap(cheap,&p);
     if (cheap->ptr[-1]!='/') {
-	*cheap->ptr = '/'; cheap = increment_cheap(cheap,&p);
+        *cheap->ptr = '/'; cheap = increment_cheap(cheap,&p);
     }
     while(( *cheap->ptr = *name++ )) cheap = increment_cheap(cheap,&p);
     *cheap->ptr = 0;
@@ -218,7 +218,7 @@
             "name" =>   name
                         current_file_name_dir / name
                         include_path / name
-	    (no difference?)
+            (no difference?)
       next flag ignores the first occurence.
  */
 
@@ -238,8 +238,8 @@
     } else { error(INCERR); err=1; 
     }
     for(i=0;(getch()!=end && ch!='\n');) {
-	*cheap->ptr = ch;
-	cheap = increment_cheap(cheap,&name);
+        *cheap->ptr = ch;
+        cheap = increment_cheap(cheap,&name);
     }
     if(ch=='\n') error(INCERR);
     if (err) return filep->fcb;
@@ -250,31 +250,31 @@
     if (next && fp) { fclose(fp); fp=0; next=0; prev=name; }
     p = name;
     if (!fp) {
-	// no deferenced on "" and <>?
-	for(pp=include_path; *pp;pp++) {
-	    p = expand_file_name(*pp,name);
-	    if(prev && nameeq(p,prev)) continue;
-	    if ((fp = fopen(p,"r"))) {
-		if (next) {
-		    fclose(fp); fp=0; next=0; prev=p;
-		    continue;
-		} else
-		    break ;
-	    }
-	}
+        // no deferenced on "" and <>?
+        for(pp=include_path; *pp;pp++) {
+            p = expand_file_name(*pp,name);
+            if(prev && nameeq(p,prev)) continue;
+            if ((fp = fopen(p,"r"))) {
+                if (next) {
+                    fclose(fp); fp=0; next=0; prev=p;
+                    continue;
+                } else
+                    break ;
+            }
+        }
         if (!fp /* && (end=='>'||filep->inc=='>') */ ) {  // <> case only
-	    for(pp=l_include_path; *pp;pp++) {
-		p = expand_file_name(*pp,name);
-		if(prev && nameeq(p,prev)) continue;
-		if ((fp = fopen(p,"r"))) {
-		    if (next) {
-			fclose(fp); fp=0; next=0; prev=p;
-			continue;
-		    } else
-			break ;
-		}
-	    }
-	}
+            for(pp=l_include_path; *pp;pp++) {
+                p = expand_file_name(*pp,name);
+                if(prev && nameeq(p,prev)) continue;
+                if ((fp = fopen(p,"r"))) {
+                    if (next) {
+                        fclose(fp); fp=0; next=0; prev=p;
+                        continue;
+                    } else
+                        break ;
+                }
+            }
+        }
     }
     if(!fp) { error(FILERR); return filep->fcb; }
     //  we have so search current directory of the included file
@@ -284,10 +284,10 @@
     cheap = reset_cheap(&scheap);
     //  Generated name needs copy.
     if (p!=name) {
-	name = cheap->ptr;
-	while((*cheap->ptr = *s++)) cheap = increment_cheap(cheap,&name);
-	*cheap->ptr = 0;
-	cheap = increment_cheap(cheap,&name);
+        name = cheap->ptr;
+        while((*cheap->ptr = *s++)) cheap = increment_cheap(cheap,&name);
+        *cheap->ptr = 0;
+        cheap = increment_cheap(cheap,&name);
     }
     // should check filep over flow (sigh...)
     (filep+1)->inc = end;
@@ -302,7 +302,7 @@
 static int macro_if_skip ;
 
 /* there may extra non-terminate comment after #if/#else directive */
-/*      #endif / * hoge						   */
+/*      #endif / * hoge                                            */
 /*           */
 /*                                                                 */
 
@@ -311,26 +311,26 @@
 {
     getch();
     do {
-	while(ch!='\n'&&ch!='\r') {
-	    if (!in_comment) {
-		if (ch=='/') {
-		    getch();
-		    if (ch=='/') in_comment=2;
-		    else if (ch=='*') {
-			in_comment=1;
-		    } else continue;
-		}
-	    } else if (ch=='*') {
-		getch();
-		if (ch=='/') {
-		    in_comment=0; 
-		    return macro_if_skip?0:1;
-		}
-		else continue;
-	    }
-	    getch();
-	}
-	if (in_comment==1) { getline1(); getch(); }
+        while(ch!='\n'&&ch!='\r') {
+            if (!in_comment) {
+                if (ch=='/') {
+                    getch();
+                    if (ch=='/') in_comment=2;
+                    else if (ch=='*') {
+                        in_comment=1;
+                    } else continue;
+                }
+            } else if (ch=='*') {
+                getch();
+                if (ch=='/') {
+                    in_comment=0; 
+                    return macro_if_skip?0:1;
+                }
+                else continue;
+            }
+            getch();
+        }
+        if (in_comment==1) { getline1(); getch(); }
     } while(in_comment==1);
     in_comment=0;
     return 0;
@@ -339,8 +339,8 @@
 /*
      getline1 from chptr or chinput (for internal source)
         with macro processing 
-	generate comment
-	generate ST_COMMENT parse tree, in inline mode
+        generate comment
+        generate ST_COMMENT parse tree, in inline mode
     In getch, if chptr is empty, pop chptr stack, if stack is empy
     read from fp.
  */
@@ -359,92 +359,92 @@
     char *p;
 
     if (next_eof) {
-	next_eof=0;
-	error(EOFERR);
+        next_eof=0;
+        error(EOFERR);
     }
     do {
-	if (chinput) {
-	    //  some another input source ( init string )
-	    if (! *chinput) {
-		chinput=0;
-		continue;
-	    }
-	    chptr=linebuf;
-	    i=0;
-	    while((*chptr++=c=*chinput++)&&(c!='\n')) {
-		if (++i > LBUFSIZE-2) error(LNERR);
-	    }
-	} else {
-	    // get the line from input stream
-	    lineno++;
-	    glineno++;
-	    chptr=linebuf;
-	    i=0;
-	    while ((*chptr++ = c = getc(filep->fcb)) != '\n') {
-		if (++i > LBUFSIZE-2) error(LNERR);
-		if (c=='\r') {
-		    c = getc(filep->fcb);
-		    if (c == '\n') {
-			chptr[-1]='\n'; break;
-		    } else {
-			// single cr equal to nl
-			ungetc(c,filep->fcb);
-			chptr[-1]=c='\n'; i--; break;
-		    }
-		}
-		if (c==EOF) {
-		    next_eof=1;
-		    --chptr;
-		    break;
-		}
-	    }
-	}
+        if (chinput) {
+            //  some another input source ( init string )
+            if (! *chinput) {
+                chinput=0;
+                continue;
+            }
+            chptr=linebuf;
+            i=0;
+            while((*chptr++=c=*chinput++)&&(c!='\n')) {
+                if (++i > LBUFSIZE-2) error(LNERR);
+            }
+        } else {
+            // get the line from input stream
+            lineno++;
+            glineno++;
+            chptr=linebuf;
+            i=0;
+            while ((*chptr++ = c = getc(filep->fcb)) != '\n') {
+                if (++i > LBUFSIZE-2) error(LNERR);
+                if (c=='\r') {
+                    c = getc(filep->fcb);
+                    if (c == '\n') {
+                        chptr[-1]='\n'; break;
+                    } else {
+                        // single cr equal to nl
+                        ungetc(c,filep->fcb);
+                        chptr[-1]=c='\n'; i--; break;
+                    }
+                }
+                if (c==EOF) {
+                    next_eof=1;
+                    --chptr;
+                    break;
+                }
+            }
+        }
 
-	*chptr = '\0';
-	if (lsrc && !asmf && !macro_if_skip && linebuf[0]) {
-	    if (!inmode)
-		gen_comment(linebuf);  // #if ed line will not be commented
-	    if (inmode) {
-		// inline mode 
+        *chptr = '\0';
+        if (lsrc && !asmf && !macro_if_skip && linebuf[0]) {
+            if (!inmode)
+                gen_comment(linebuf);  // #if ed line will not be commented
+            if (inmode) {
+                // inline mode 
 
-		// generate inlined line in assembler output
+                // generate inlined line in assembler output
 
-		int i=0;
-		int c;
-		// should be done in some init
-		if (!st_cheap) {
-		    st_cheap = cheap1 = new_cheap();
-		}
+                int i=0;
+                int c;
+                // should be done in some init
+                if (!st_cheap) {
+                    st_cheap = cheap1 = new_cheap();
+                }
 
-		p = st_cheap->ptr;
-		sprintf(num,"%d: ",lineno);
-		parse = list4n(ST_COMMENT,parse,lineno,(NMTBL*)p);
-		// should contain file name
-		c = 0;
-		while((*st_cheap->ptr = num[c++])) 
-		    st_cheap = increment_cheap(st_cheap,&p);
-		while((c = *st_cheap->ptr = linebuf[i++])) {
-		    st_cheap = increment_cheap(st_cheap,&p);
-		    if (c=='\n') {
-			*st_cheap->ptr = 0;
-			st_cheap = increment_cheap(st_cheap,&p);
-			p = st_cheap->ptr;
-			// parse = list3n(ST_COMMENT,parse,(NMTBL*)p);
-			sprintf(num,"%d: ",lineno);
-			c = 0;
-			while((*cheap->ptr = num[c++])) 
-			    st_cheap = increment_cheap(st_cheap,&p);
-		    }
-		}
-	    }
-	}
-	p = chptr = linebuf; while(*p==' '||*p=='\t') p++;
-	if (*p == '#' && !in_comment && !in_quote) {
-	    // macro directive
-	    chptr = p;
-	    if (macro_processing()) return;
-	}
-	if (c==EOF) break;
+                p = st_cheap->ptr;
+                sprintf(num,"%d: ",lineno);
+                parse = list4n(ST_COMMENT,parse,lineno,(NMTBL*)p);
+                // should contain file name
+                c = 0;
+                while((*st_cheap->ptr = num[c++])) 
+                    st_cheap = increment_cheap(st_cheap,&p);
+                while((c = *st_cheap->ptr = linebuf[i++])) {
+                    st_cheap = increment_cheap(st_cheap,&p);
+                    if (c=='\n') {
+                        *st_cheap->ptr = 0;
+                        st_cheap = increment_cheap(st_cheap,&p);
+                        p = st_cheap->ptr;
+                        // parse = list3n(ST_COMMENT,parse,(NMTBL*)p);
+                        sprintf(num,"%d: ",lineno);
+                        c = 0;
+                        while((*cheap->ptr = num[c++])) 
+                            st_cheap = increment_cheap(st_cheap,&p);
+                    }
+                }
+            }
+        }
+        p = chptr = linebuf; while(*p==' '||*p=='\t') p++;
+        if (*p == '#' && !in_comment && !in_quote) {
+            // macro directive
+            chptr = p;
+            if (macro_processing()) return;
+        }
+        if (c==EOF) break;
     } while(!in_quote && (macro_if_skip || linebuf[0] == '#'));
 }
 
@@ -459,13 +459,13 @@
     // can't be in macro expansion
     for(c=0;c<LBUFSIZE-3&&chptr[c];c++);
     if (c>0&&chptr[c-1]=='\\') {
-	return;
+        return;
     } else if (c>0&&chptr[c-1]=='\n') {
-	if (c>0&&chptr[c-2]=='\\') {
-	    return;
-	} else {
-	    c--;
-	}
+        if (c>0&&chptr[c-2]=='\\') {
+            return;
+        } else {
+            c--;
+        }
     } 
     chptr[c] = ';';
     chptr[c+1] = '\n';
@@ -489,11 +489,11 @@
     if (car(i)==CONST) i=cadr(i);
     else i=0;
     if (ch) {
-	if (chptr[-1]==ch) {
-	/* we are fall into getch(), which lost the last ch */
-	/* chptr[-1]==ch check is fanatic, but ... */
-	    chptr--;
-	} else error(-1);
+        if (chptr[-1]==ch) {
+        /* we are fall into getch(), which lost the last ch */
+        /* chptr[-1]==ch check is fanatic, but ... */
+            chptr--;
+        } else error(-1);
     }
     macro_if_depth = macro_if_current;
     macro_if_skip = !i;
@@ -519,140 +519,140 @@
     while (*chptr==' '||*chptr=='\t') ++chptr;
     switch(chptr[0]*chptr[1]) {
     case 'i'*'f':
-	if ((macroeq("ifdef") || macroeq("ifndef"))) {
-	    c = (chptr[-4]=='n');
-	    macro_if_current++;
-	    if (!macro_if_skip) {
-		// try getsym in IFDEF mode to avoid symbol define
-		mode_save = mode; mode = IFDEF;
-		ch= *chptr;
-		i = getsym(0);
-		mode = mode_save;
-		macro_if_depth = macro_if_current;
-		macro_if_skip = (!i)^c;
-	    }
-	    return 0;
-	} else if (macroeq("if")) {
-	    macro_if_current++;
-	    if (!macro_if_skip) {
-		macro_if();
-	    }
-	    return 0;
-	}
-	break;
+        if ((macroeq("ifdef") || macroeq("ifndef"))) {
+            c = (chptr[-4]=='n');
+            macro_if_current++;
+            if (!macro_if_skip) {
+                // try getsym in IFDEF mode to avoid symbol define
+                mode_save = mode; mode = IFDEF;
+                ch= *chptr;
+                i = getsym(0);
+                mode = mode_save;
+                macro_if_depth = macro_if_current;
+                macro_if_skip = (!i)^c;
+            }
+            return 0;
+        } else if (macroeq("if")) {
+            macro_if_current++;
+            if (!macro_if_skip) {
+                macro_if();
+            }
+            return 0;
+        }
+        break;
     case 'e'*'l':
-	if (macroeq("elif")) {
-	    if (macro_if_current==0) {
-		error(MCERR); /* extra #else */
-		return 0;
-	    }
-	    if (macro_if_current == macro_if_depth) {
-		if (!macro_if_skip || macro_if_skip==2) {
-		    macro_if_skip=2;
-		    return 0;
-		}
-		macro_if();
-	    }
-	    return 0;
-	} else if (macroeq("else")) {
-	    if (macro_if_current==0) {
-		error(MCERR); /* extra #else */
-		return 0;
-	    }
-	    if (macro_if_current == macro_if_depth) {
-		if (macro_if_skip==2) ;
-		else if (macro_if_skip) macro_if_skip=0;
-		else macro_if_skip=1;
-	    }
-	    return skip_rest_of_line();
-	}
-	break;
+        if (macroeq("elif")) {
+            if (macro_if_current==0) {
+                error(MCERR); /* extra #else */
+                return 0;
+            }
+            if (macro_if_current == macro_if_depth) {
+                if (!macro_if_skip || macro_if_skip==2) {
+                    macro_if_skip=2;
+                    return 0;
+                }
+                macro_if();
+            }
+            return 0;
+        } else if (macroeq("else")) {
+            if (macro_if_current==0) {
+                error(MCERR); /* extra #else */
+                return 0;
+            }
+            if (macro_if_current == macro_if_depth) {
+                if (macro_if_skip==2) ;
+                else if (macro_if_skip) macro_if_skip=0;
+                else macro_if_skip=1;
+            }
+            return skip_rest_of_line();
+        }
+        break;
     case 'e'*'n':
-	if (macroeq("endif")) {
-	    if (macro_if_current == macro_if_depth) {
-		macro_if_skip = 0;
-		macro_if_depth = --macro_if_current;
-	    } else {
-		if (macro_if_current<=0) {
-		    error(MCERR); /* extra #if */
-		    return 0;
-		}
-		macro_if_current--;
-	    }
-	    return skip_rest_of_line();
-	}
+        if (macroeq("endif")) {
+            if (macro_if_current == macro_if_depth) {
+                macro_if_skip = 0;
+                macro_if_depth = --macro_if_current;
+            } else {
+                if (macro_if_current<=0) {
+                    error(MCERR); /* extra #if */
+                    return 0;
+                }
+                macro_if_current--;
+            }
+            return skip_rest_of_line();
+        }
     }
     if (macro_if_skip) return 0;
     switch(chptr[0]) {
     case 'd':
-	if (macroeq("define")) {
-	    ch= *chptr;
-	    macro_define0();
-	    *(chptr = linebuf) = '\0';
-	    return 0;
-	}
-	break;
+        if (macroeq("define")) {
+            ch= *chptr;
+            macro_define0();
+            *(chptr = linebuf) = '\0';
+            return 0;
+        }
+        break;
     case 'u':
-	if (macroeq("undef")) {
-	    i=mode;
-	    mode=IFDEF;
-	    ch= *chptr;
-	    if (getsym(0)) {
-		// make it EMPTY
-		if (nptr->sc == MACRO) {
-		    nptr->sc = EMPTY;
-		} else if (nptr->sc == FMACRO) {
-		    nptr->sc = EMPTY;
-		    /* we cannot reclaim it's arg */
-		} else error(MCERR);
-	    }
-	    mode=i;
-	    return 0;
-	}
-	break;
+        if (macroeq("undef")) {
+            i=mode;
+            mode=IFDEF;
+            ch= *chptr;
+            if (getsym(0)) {
+                // make it EMPTY
+                if (nptr->sc == MACRO) {
+                    nptr->sc = EMPTY;
+                } else if (nptr->sc == FMACRO) {
+                    nptr->sc = EMPTY;
+                    /* we cannot reclaim it's arg */
+                } else error(MCERR);
+            }
+            mode=i;
+            return 0;
+        }
+        break;
     case 'i':
-	next = 1;
-	if (macroeq("include_next")|| (next=0, macroeq("include"))) {
-	    if(filep+1 >= filestack + FILES) error(FILERR);
-	    if ( ((filep+1)->fcb=getfname(next)) == NULL) error(FILERR);
-	    (filep+1)->ln=lineno;
-	    lineno=0;
-	    ++filep;
-	    *(chptr = linebuf) = '\0';
-	    return 0;
-	}
-	break;
+        next = 1;
+        if (macroeq("include_next")|| (next=0, macroeq("include"))) {
+            if(filep+1 >= filestack + FILES) error(FILERR);
+            if ( ((filep+1)->fcb=getfname(next)) == NULL) error(FILERR);
+            (filep+1)->ln=lineno;
+            lineno=0;
+            ++filep;
+            *(chptr = linebuf) = '\0';
+            return 0;
+        }
+        break;
     case 'p':
-	if (macroeq("pragma")) {
-	    getline1();
-	    return 0;
-	}
-	break;
+        if (macroeq("pragma")) {
+            getline1();
+            return 0;
+        }
+        break;
 #if ASM_CODE
     // deprecated, use asm function
     case 'a':
-	if (macroeq("asm")) {
-	    if (asmf) error(MCERR);
-	    asmf = 1;
-	    getline1();
-	    while (asmf) {
-		 printf("%s",linebuf);
-		getline1();
-	    }
-	    return 0;
-	}
-	break;
+        if (macroeq("asm")) {
+            if (asmf) error(MCERR);
+            asmf = 1;
+            getline1();
+            while (asmf) {
+                 printf("%s",linebuf);
+                getline1();
+            }
+            return 0;
+        }
+        break;
     case 'e':
-	if (macroeq("endasm")) {
-	    if (!asmf) error(MCERR);
-	    asmf = 0;
-	    return 0;
-	}
-	break;
+        if (macroeq("endasm")) {
+            if (!asmf) error(MCERR);
+            asmf = 0;
+            return 0;
+        }
+        break;
 #endif
     case ' ': case '\t': case '\n': case 0:
-	getline1();
-	return 0;
+        getline1();
+        return 0;
     }
     error(MCERR);
     return 0;
@@ -690,7 +690,7 @@
 /* macro define from chptr 
 
        body will be copied and stored in nptr->dsp 
-	    list3s( STRING, list of argments (if any), char *)
+            list3s( STRING, list of argments (if any), char *)
        We don't expand macro here, it just copied.
 
  */
@@ -711,11 +711,11 @@
     }
     args = 0;
     if (ch=='(') {
-	nptr->sc = FMACRO;
-	args = macro_args(&chptr);
+        nptr->sc = FMACRO;
+        args = macro_args(&chptr);
     } else {
-	nptr->sc = MACRO;
-	nptr->ty = -1;
+        nptr->sc = MACRO;
+        nptr->ty = -1;
     }
     // equal is allowed for -Dhoge=aho option
     // if (ch=='=') chptr++;
@@ -725,33 +725,35 @@
 
     // now copy it to the body
     while ((*cheap->ptr = c = *chptr++)
-	&& c != '\n') {
-	cheap = increment_cheap(cheap,body);
-	if (c=='/'&&chptr[0]=='/') {
-	    cheap->ptr--; 
-	    *cheap->ptr = '\0';
-	    while(*chptr++); break;
-	} else if (c=='/'&&chptr[0]=='*') {
-	    cheap->ptr--; chptr++;
-	    for(;;) {
-		c = *chptr++;
-		if (!c) {
-		    getline1();
-		    continue;
-		}
-		if (c=='*'&&chptr[0]=='/') {
-		    c = *chptr++; break;
-		}
-	    }
-	    if (!c) break;
-	} else if (c=='\\' && (*chptr=='\n'||*chptr==0)) {
-	    chptr++;
-	    cheap->ptr--;
-	    getline1();
-	}
+        && c != '\n') {
+        cheap = increment_cheap(cheap,body);
+        if (c=='/'&&chptr[0]=='/') {
+            cheap->ptr--; 
+            *cheap->ptr = '\0';
+            while(*chptr++)
+              ; 
+            break;
+        } else if (c=='/'&&chptr[0]=='*') {
+            cheap->ptr--; chptr++;
+            for(;;) {
+                c = *chptr++;
+                if (!c) {
+                    getline1();
+                    continue;
+                }
+                if (c=='*'&&chptr[0]=='/') {
+                    c = *chptr++; break;
+                }
+            }
+            if (!c) break;
+        } else if (c=='\\' && (*chptr=='\n'||*chptr==0)) {
+            chptr++;
+            cheap->ptr--;
+            getline1();
+        }
     }
     if (c=='\n') {
-	*cheap->ptr = '\0';
+        *cheap->ptr = '\0';
     }
     cheap = increment_cheap(cheap,body);
 // fprintf(stderr,"%s\n",(char *)car(nptr->dsp));
@@ -776,82 +778,82 @@
     body = (char **)&scaddr(args);
     for(;;) {
         *cheap->ptr = c = *chptr++;
-	cheap = increment_cheap(cheap,body);
-	if (c=='\\') {
-	    if (*chptr=='\n') {
-		cheap->ptr--;
-		getline1();
-		chptr = *pchptr;
-		continue;
-	    }
-	}
-	if (!c)  {
-	    chptr--;
-	    error(MCERR);
-	    *pchptr = chptr;
-	    return reverse0(args);
-	}
-	if (in_quote) {
-	    if (c=='\\') {
-		if (*chptr != '\n') {
-		    *cheap->ptr = *chptr++;
-		    cheap = increment_cheap(cheap,body);
-		} else {
-		    getline1();
-		    chptr = *pchptr;
-		}
-	    } else if (c=='\'') {
-		in_quote = 0;
-	    }
-	} else if (in_wquote) {
-	    if (c=='\\') {
-		if (*chptr !='\n') {
-		    *cheap->ptr = *chptr++;
-		    cheap = increment_cheap(cheap,body);
-		} else {
-		    *cheap->ptr = '\n';
-		    getline1();
-		    chptr = *pchptr;
-		}
-	    } else if (c=='"') {
-		in_wquote = 0;
-	    }
-	} else if (c=='"') {
-	    in_wquote = 1;
-	} else if (c=='\'') {
-	    in_quote = 1;
-	} if (plevel==0) {
-	    if (c==',') {
-		cheap->ptr[-1] = 0;
-		args = list3s(STRING,args,cheap->ptr);
-		body = (char **)&scaddr(args);
-	    } else if (c==')') {
-		cheap->ptr[-1] = 0;
-		break;
-	    } else if (c=='(') {
-		plevel++;
-	    } else if (c=='\\') {
-		if (*chptr=='\n') {
-		    cheap->ptr--;
-		    getline1();
-		    chptr = *pchptr;
-		}
-//	    } else if (c==' '||c=='\t') {
-//		cheap->ptr--;
-	    } else if (c=='\n') {
-		cheap->ptr--;
-		getline1();
-		chptr = *pchptr;
-	    }
-	} else if (c==')') {
-	    plevel--;
-	} else if (c=='(') {
-	    plevel++;
-	} else if (c=='\n') {
-	    cheap->ptr--;
-	    getline1();
-	    chptr = *pchptr;
-	}
+        cheap = increment_cheap(cheap,body);
+        if (c=='\\') {
+            if (*chptr=='\n') {
+                cheap->ptr--;
+                getline1();
+                chptr = *pchptr;
+                continue;
+            }
+        }
+        if (!c)  {
+            chptr--;
+            error(MCERR);
+            *pchptr = chptr;
+            return reverse0(args);
+        }
+        if (in_quote) {
+            if (c=='\\') {
+                if (*chptr != '\n') {
+                    *cheap->ptr = *chptr++;
+                    cheap = increment_cheap(cheap,body);
+                } else {
+                    getline1();
+                    chptr = *pchptr;
+                }
+            } else if (c=='\'') {
+                in_quote = 0;
+            }
+        } else if (in_wquote) {
+            if (c=='\\') {
+                if (*chptr !='\n') {
+                    *cheap->ptr = *chptr++;
+                    cheap = increment_cheap(cheap,body);
+                } else {
+                    *cheap->ptr = '\n';
+                    getline1();
+                    chptr = *pchptr;
+                }
+            } else if (c=='"') {
+                in_wquote = 0;
+            }
+        } else if (c=='"') {
+            in_wquote = 1;
+        } else if (c=='\'') {
+            in_quote = 1;
+        } if (plevel==0) {
+            if (c==',') {
+                cheap->ptr[-1] = 0;
+                args = list3s(STRING,args,cheap->ptr);
+                body = (char **)&scaddr(args);
+            } else if (c==')') {
+                cheap->ptr[-1] = 0;
+                break;
+            } else if (c=='(') {
+                plevel++;
+            } else if (c=='\\') {
+                if (*chptr=='\n') {
+                    cheap->ptr--;
+                    getline1();
+                    chptr = *pchptr;
+                }
+//          } else if (c==' '||c=='\t') {
+//              cheap->ptr--;
+            } else if (c=='\n') {
+                cheap->ptr--;
+                getline1();
+                chptr = *pchptr;
+            }
+        } else if (c==')') {
+            plevel--;
+        } else if (c=='(') {
+            plevel++;
+        } else if (c=='\n') {
+            cheap->ptr--;
+            getline1();
+            chptr = *pchptr;
+        }
     }
     *pchptr = chptr;
     return reverse0(args);
@@ -873,8 +875,8 @@
     sargs = args = cadr(nptr->dsp);
     values = macro_args(pchptr);
     if (pchptr==&chptr) {
-	getch();
-	// ch = *chptr++;
+        getch();
+        // ch = *chptr++;
     }
     // eval all argument list
     int evalues = 0;
@@ -892,9 +894,9 @@
     while(args) {
         mappend0(reverse0(car(evalues)),&macro);
         local_define(scaddr(args),macro, scaddr(values));
-	args = cadr(args);
-	evalues = cadr(evalues);
-	values = cadr(values);
+        args = cadr(args);
+        evalues = cadr(evalues);
+        values = cadr(values);
     }
     // process body replacement
     macro = scaddr(nptr->dsp);
@@ -933,8 +935,8 @@
 {
     if (c=='#' && body[0]=='#') return 1;
     while((c=*body++)) {
-	if (c=='#' && body[0]=='#') return 1;
-	if (c!=' ' && c!='\t' && c!='\n') return 0;
+        if (c=='#' && body[0]=='#') return 1;
+        if (c!=' ' && c!='\t' && c!='\n') return 0;
     }
     return 0;
 }
@@ -945,7 +947,7 @@
     This is a recursive interpreter. 
 
     reuslt:   list2("replaced string",next)
-	history is necessary to avoid recursion
+        history is necessary to avoid recursion
  */
 
 static int
@@ -965,122 +967,122 @@
     macrop = list3s(STRING,macrop,cheap->ptr);
     expand = (char **)&scaddr(macrop);
     for(; (c = *body++) ;) {
-	if (in_quote) {
-	    if (c=='\\') {
-		*cheap->ptr = c; c = *body++;
-		cheap = increment_cheap(cheap,expand);
-	    } else if (c=='\'') {
-		in_quote = 0;
-	    }
-	} else if (in_wquote) {
-	    if (c=='\\') {
-		*cheap->ptr = c; c = *body++;
-		cheap = increment_cheap(cheap,expand);
-	    } else if (c=='"') {
-		in_wquote = 0;
-	    }
-	} else if (c=='"') {
-	    in_wquote = 1; prev_concat = 0;
-	} else if (c=='\'') {
-	    in_quote = 1; prev_concat = 0;
-	} else if (c=='#' && *body=='#') {
-	    mconcat = 1; 
-	    prev_concat = 1;
-	    // name concatenation. flag only. remove and re-evaluate
-	    // in the top level. (and skip space)
-	} else if (!mconcat && c=='#' && alpha(*body)) {
-	    // turn into string next macro literal
-	    string_flag = 1;
-	    string_mark(expand);
-	    prev_concat = 0;
+        if (in_quote) {
+            if (c=='\\') {
+                *cheap->ptr = c; c = *body++;
+                cheap = increment_cheap(cheap,expand);
+            } else if (c=='\'') {
+                in_quote = 0;
+            }
+        } else if (in_wquote) {
+            if (c=='\\') {
+                *cheap->ptr = c; c = *body++;
+                cheap = increment_cheap(cheap,expand);
+            } else if (c=='"') {
+                in_wquote = 0;
+            }
+        } else if (c=='"') {
+            in_wquote = 1; prev_concat = 0;
+        } else if (c=='\'') {
+            in_quote = 1; prev_concat = 0;
+        } else if (c=='#' && *body=='#') {
+            mconcat = 1; 
+            prev_concat = 1;
+            // name concatenation. flag only. remove and re-evaluate
+            // in the top level. (and skip space)
+        } else if (!mconcat && c=='#' && alpha(*body)) {
+            // turn into string next macro literal
+            string_flag = 1;
+            string_mark(expand);
+            prev_concat = 0;
             goto names;
-	} else if (alpha(c)) {
-	    // find a name
-	    body--; // ungetc
+        } else if (alpha(c)) {
+            // find a name
+            body--; // ungetc
 names:
-	    nptrm = get_name(body,&len,NONDEF);
-	    if (!nptrm) {
-		while((*cheap->ptr = *body++) && len--)
-		    cheap = increment_cheap(cheap,expand);
-		body--;
-		if (string_flag) {
-		    string_flag = 0;
-		    string_mark(expand);
-		}
-		continue;
-	    }
-	    body += len;
-	    c = *body;
-	    nptrm = name_space_search(nptrm,MACRO);
-	    if (nptrm->dsp)
-		macro = scaddr(nptrm->dsp);
-	    else
-		macro="";
-	    if (check_recurse(nptrm->nm,history)) {
-		// should return the most original one, but how?
-		// save_cheap/reset_cheap and return here?
-		macro = nptrm->nm;
-		goto skip;
-	    }
-	    switch(nptrm->sc) {
-	    case FMACRO:
-		if (c==' '||c=='\t') {
-		    while (c==' '||c=='\t') c=*body++;
-		    body--;
-		}
-		if(c!='(') {
-		    macro = nptrm->nm;
-		    goto skip; // error(MCERR); this isn't error
-		}
-		*cheap->ptr = 0;
-		cheap = increment_cheap(cheap,expand);
-		body++;
-		macrop = macro_function(macrop,&body,nptrm,
-			glist3s(STRING,history,nptrm->nm));
-		macrop = list3s(STRING,macrop,cheap->ptr);
-		expand = (char **)&(scaddr(macrop));
-		break;
-	    default:
-		if (prev_concat) {
-		    prev_concat = 0;
-		    macro = nptrm->u.nm;
-		} else if (next_concat(c,body)) {
-		    prev_concat = 1;
-		    macro = nptrm->u.nm;
-		}  
-		if (macro==0 || !macro[0]) 
-		    macro = nptrm->nm;
-		goto skip;
-	    case MACRO:
-		if (neqname(nptrm->nm,macro)) {
-		    if (macro[0]==0)  {
-			if (string_flag) {
-			    string_flag = 0;
-			    string_mark(expand);
-			}
-			continue;
-		    }
-		    *cheap->ptr = 0;
-		    cheap = increment_cheap(cheap,expand);
-		    macrop=macro_eval(macrop,macro,glist3s(STRING,history,nptrm->nm));
-		    macrop = list3s(STRING,macrop,cheap->ptr);
-		    expand = (char **)&(scaddr(macrop));
-		    break;
-		}
-		macro = nptrm->nm;
+            nptrm = get_name(body,&len,NONDEF);
+            if (!nptrm) {
+                while((*cheap->ptr = *body++) && len--)
+                    cheap = increment_cheap(cheap,expand);
+                body--;
+                if (string_flag) {
+                    string_flag = 0;
+                    string_mark(expand);
+                }
+                continue;
+            }
+            body += len;
+            c = *body;
+            nptrm = name_space_search(nptrm,MACRO);
+            if (nptrm->dsp)
+                macro = scaddr(nptrm->dsp);
+            else
+                macro="";
+            if (check_recurse(nptrm->nm,history)) {
+                // should return the most original one, but how?
+                // save_cheap/reset_cheap and return here?
+                macro = nptrm->nm;
+                goto skip;
+            }
+            switch(nptrm->sc) {
+            case FMACRO:
+                if (c==' '||c=='\t') {
+                    while (c==' '||c=='\t') c=*body++;
+                    body--;
+                }
+                if(c!='(') {
+                    macro = nptrm->nm;
+                    goto skip; // error(MCERR); this isn't error
+                }
+                *cheap->ptr = 0;
+                cheap = increment_cheap(cheap,expand);
+                body++;
+                macrop = macro_function(macrop,&body,nptrm,
+                        glist3s(STRING,history,nptrm->nm));
+                macrop = list3s(STRING,macrop,cheap->ptr);
+                expand = (char **)&(scaddr(macrop));
+                break;
+            default:
+                if (prev_concat) {
+                    prev_concat = 0;
+                    macro = nptrm->u.nm;
+                } else if (next_concat(c,body)) {
+                    prev_concat = 1;
+                    macro = nptrm->u.nm;
+                }  
+                if (macro==0 || !macro[0]) 
+                    macro = nptrm->nm;
+                goto skip;
+            case MACRO:
+                if (neqname(nptrm->nm,macro)) {
+                    if (macro[0]==0)  {
+                        if (string_flag) {
+                            string_flag = 0;
+                            string_mark(expand);
+                        }
+                        continue;
+                    }
+                    *cheap->ptr = 0;
+                    cheap = increment_cheap(cheap,expand);
+                    macrop=macro_eval(macrop,macro,glist3s(STRING,history,nptrm->nm));
+                    macrop = list3s(STRING,macrop,cheap->ptr);
+                    expand = (char **)&(scaddr(macrop));
+                    break;
+                }
+                macro = nptrm->nm;
 skip:
-	    case LMACRO:
-		while((*cheap->ptr = *macro++)/* && len-- */)
-		    cheap = increment_cheap(cheap,expand);
-	    }
-	    if (string_flag) {
-		string_flag = 0;
-		string_mark(expand);
-	    }
-	    continue;
-	}
-	*cheap->ptr = c;
-	cheap = increment_cheap(cheap,expand);
+            case LMACRO:
+                while((*cheap->ptr = *macro++)/* && len-- */)
+                    cheap = increment_cheap(cheap,expand);
+            }
+            if (string_flag) {
+                string_flag = 0;
+                string_mark(expand);
+            }
+            continue;
+        }
+        *cheap->ptr = c;
+        cheap = increment_cheap(cheap,expand);
     }
     *cheap->ptr = 0;
     cheap = increment_cheap(cheap,expand);
@@ -1100,9 +1102,9 @@
     for(;lists;lists = cadr(lists)) {
         p = scaddr(lists);
         for(;(*cheap->ptr = *p++);cheap = increment_cheap(cheap,result)) {
-	    // in_quote + \n case ? should be \n.
-	    if (p[-1]=='\n') cheap->ptr[0]=' ';
-	}
+            // in_quote + \n case ? should be \n.
+            if (p[-1]=='\n') cheap->ptr[0]=' ';
+        }
     }
     cheap = increment_cheap(cheap,result);
     return *result;
@@ -1117,9 +1119,9 @@
     for(;lists;lists = cadr(lists)) {
         p = scaddr(lists);
         for(;(*cheap->ptr=*p++);cheap = increment_cheap(cheap,result)) {
-	    // in_quote + \n case ? should be \n.
-	    // if (p[-1]=='\n') cheap->ptr[0]=' ';
-	}
+            // in_quote + \n case ? should be \n.
+            // if (p[-1]=='\n') cheap->ptr[0]=' ';
+        }
     }
     cheap = increment_cheap(cheap,result);
     return *result;
@@ -1129,11 +1131,11 @@
 check_recurse(char *macro,int history)
 {
     for(;history;history = cadr(history)) {
-	if (macro==scaddr(history)) {
+        if (macro==scaddr(history)) {
 // fprintf(stderr,"check_recurse: %s %s = ",macro,scaddr(history)); 
 // fprintf(stderr,"1\n");
-	    return 1;
-	}
+            return 1;
+        }
     }
 // fprintf(stderr,"0\n");
     return 0;