home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume17 / contest-prog / part02 / sb.c < prev    next >
C/C++ Source or Header  |  1989-02-06  |  2KB  |  103 lines

  1. #include <stdio.h>
  2. #define newline '\n'
  3. #define blank ' '
  4. #define tab '\t'
  5. #define indent {myputs(line);ilev++;goto lbl;}
  6. #define undent {ilev--;myputs(line);goto lbl;}
  7. int ilev = 0;
  8. main(argc,argv) char **argv;
  9. {
  10.     char line[512], *a;
  11.     int i;
  12.  
  13.     while(gets(line)==line){
  14.     a=line;
  15.     while(*a){if(*a==newline)*a=0; a++;}
  16.         if(endsin(line,"then")==0){
  17.             indent        }
  18.         if(endsin(line,"else")==0){
  19.             
  20.             ilev--; myputs(line); ilev++;goto lbl;
  21.             }
  22.         if(endsin(line,"fi")==0){
  23.             undent        }
  24.         if(endsin(line,"done")==0){
  25.             undent        }
  26.         if(endsin(line,"do")==0){
  27.             indent        }
  28.         if(begins(line,"case")==0){
  29.             indent        }
  30.         if(endsin(line,"esac")==0){
  31.             undent        }
  32.     myputs(line);
  33. lbl: ;
  34.     }
  35. }
  36. myputs(p)char *p;
  37. {
  38.     int i;
  39.     while(*p==blank ||*p==tab)p++;
  40.     if(ilev>0)for(i=1;i<=ilev;i++)printf("   ");
  41. /*    printf("%d",ilev);*/
  42.     puts(p);
  43. }
  44.  
  45. endsin(a,b)
  46. char *a, *b;
  47. {
  48.     char *aa;
  49.     int i;
  50.     aa=a;
  51.     while(*aa==blank || *aa==tab)aa++;
  52.     if(strlen(a)<strlen(b))return -1;
  53.     a = a +strlen(a)-strlen(b);
  54.     i= kindex(a,b);
  55.     if(strlen(aa)==strlen(b))return i;
  56.     a--;
  57.     if(*a==tab||*a==';'||*a==blank)return i; else return -1;
  58. /*    printf("in endsin, a=%s b=%s returning %d\n",a,b,i);*/
  59. /*    fflush(stdout);*/
  60. /*    return i;*/
  61.  
  62. }
  63.     
  64.  
  65.  
  66.  
  67.  
  68. begins(a,b)
  69. char *a, *b;
  70. {
  71.     int i;
  72.     while(*a==blank || *a==tab)a++;
  73.     return kindex(a,b);
  74.  
  75. }
  76.     
  77.  
  78.  
  79.  
  80. kindex(s,t) 
  81. char s[],t[];
  82. {
  83.     int c,i,j,k;
  84.     c=s[0];
  85.     if(c==0){return -1;
  86. /*        i=puts("in kindex ... dummy, s[0] is zero");j=i;*/
  87. /*        puts(t);*/
  88. /*        if(i==j)exit(1);*/
  89.         }
  90.     c=t[0];
  91.     if(c==0){return -1;
  92. /*    i=puts("in kindex ... dummy, t[0] is zero");j=i;*/
  93. /*        puts(s);*/
  94. /*        if(j==i)exit(1);*/
  95.         }
  96.     for(i=0;s[i] !='\0'; i++){
  97.         for(j=i,k=0;t[k] !='\0' && s[j]==t[k];j++,k++)
  98.                 ;
  99.         if(t[k]=='\0')return (i);
  100.     }
  101.         return(-1);
  102.