home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Programmation / c / Outils / Edition / ctab.lzh / CTab / ctab.c next >
Encoding:
C/C++ Source or Header  |  1992-05-14  |  3.3 KB  |  173 lines

  1. /*
  2.     CTab V1.40
  3.     
  4.     (c) 1992 Alexander Rawass
  5.  
  6.     Alexander Rawass
  7.     Wilhelminenstr. 44
  8.     6700 Ludwigshafen 15
  9.     Germany
  10.     0621/57 75 98
  11.  
  12.     E-Mail : rawass@sun.rhrk.uni-kl.de
  13. */
  14.  
  15. #include <exec/types.h>
  16. #include <stdio.h>
  17.  
  18. #define TAB 9        /* tabulator     */
  19. #define SPC 32        /* space     */
  20. #define RET 10        /* return     */
  21. #define INVCOM 34    /* inverted comma, hochkomma, gaensefuesschen */
  22. #define APO 39        /* apostroph     */
  23. #define STREQU(x,y) !(strcmp(x,y))
  24. #define EOS '\0'
  25.  
  26. FILE *new_file,*old_file;
  27. char new_name[40];
  28. STRPTR name_end=".ct";
  29. char chr,lchr;
  30.  
  31. BOOL flag_bol;    /* begin of line    */
  32. BOOL flag_apo;    /* apostroph    */
  33. BOOL flag_ic;    /* hochkomma    */
  34. BOOL flag_ovrd;    /* ueberlesen    */
  35. BOOL flag_spc;    /* ???        */
  36. BOOL flag_done;    /* done        */
  37.  
  38. UWORD num_rems,num_tabs,num_spc;    /* Anzahl Remarks,zu schreibender Tabs */
  39.  
  40. VOID CloseW()
  41. {
  42.  
  43.     if(old_file)    fclose(old_file);
  44.     if(new_file)    fclose(new_file);
  45.     exit(NULL);
  46. }
  47.  
  48. VOID chrput(c,f)
  49. char c;
  50. FILE *f;
  51. {
  52.     if(fputc(c,f)==EOF){
  53.         printf("Error while writing!\n");
  54.         CloseW();
  55.     }
  56. }
  57.  
  58. char chrget(f)
  59. FILE *f;
  60. {
  61.     char r;
  62.  
  63.     if((r=fgetc(f))==EOF){
  64.         CloseW();
  65.     }
  66.     return(r);
  67. }
  68.  
  69. VOID main(argc,argv)
  70. UWORD argc;
  71. STRPTR argv[];
  72. {
  73.     UWORD a,b,c,d;
  74.  
  75.     printf("\033[1mCTab V1.40\033[0m - (c) 1992 Alexander Rawass\n");
  76.     if(*argv[1]=='?' || argc<2){
  77.         printf("Usage  : %s <filename> [SPC n]\n",argv[0]);
  78.         printf("         destination is <filename>.ct\n");
  79.         printf("Options: SPC n : will use n spaces instead of a tab\n");
  80.         CloseW();
  81.     }
  82.     new_name[0]=EOS;
  83.     flag_bol=TRUE;
  84.     flag_apo=flag_ic=flag_ovrd=flag_spc=flag_done=FALSE;
  85.     num_rems=num_tabs=num_spc=0;
  86.     if(!(old_file=fopen(argv[1],"r"))){
  87.         printf("Error : File not found\n");
  88.         CloseW();
  89.     }
  90.     strcpy(&new_name,argv[1]);
  91.     strcat(&new_name,name_end);
  92.     if(!(new_file=fopen(&new_name,"w"))){
  93.         printf("Error : could not open output\n");
  94.         CloseW();
  95.     }
  96.     if(argc==4){
  97.         if(STREQU(argv[2],"SPC") || STREQU(argv[2],"spc")){
  98.             flag_spc=TRUE;
  99.             num_spc=atoi(argv[3]);
  100.         }
  101.     }
  102.     while(!feof(old_file)){
  103.         chr=chrget(old_file);
  104.         if(chr==INVCOM && !flag_apo && !num_rems){
  105.             flag_ic=~flag_ic;
  106.         }
  107.         else if(chr==APO && !flag_ic && !num_rems){
  108.             flag_apo=~flag_apo;
  109.         }
  110.         else if(lchr=='/' && chr=='*' && !flag_ic && !flag_apo){
  111.             num_rems++;
  112.         }
  113.         else if(lchr=='*' && chr=='/' && !flag_ic && !flag_apo){
  114.             num_rems--;
  115.         }
  116.         if(!flag_ic && !flag_apo && !num_rems){
  117.             if(flag_bol && chr!=RET){
  118.                 while(chr==TAB || chr==SPC){
  119.                      chr=chrget(old_file);
  120.                 }
  121.                 if(chr=='}'){
  122.                     lchr=chr;
  123.                     num_tabs--;
  124.                     flag_done=TRUE;
  125.                 }
  126.                 if(flag_spc){
  127.                     for(a=0;a<num_tabs;a++)
  128.                     for(b=0;b<num_spc;b++)
  129.                     chrput(SPC,new_file);
  130.                 }
  131.                 else{
  132.                     for(a=0;a<num_tabs;a++)
  133.                     chrput(TAB,new_file);
  134.                 }
  135.                 flag_bol=FALSE;
  136.             }
  137.             if(chr=='{'){
  138.                 chrput(chr,new_file);
  139.                 chrput(RET,new_file);
  140.                 lchr=chr;
  141.                 num_tabs++;
  142.                 flag_bol=TRUE;
  143.             }
  144.             else if(chr=='}'){
  145.                 chrput(chr,new_file);
  146.                 chrput(RET,new_file);
  147.                 lchr=chr;
  148.                 if(!flag_done) num_tabs--;
  149.                 flag_done=FALSE;
  150.                 flag_bol=TRUE;
  151.             }
  152.             else if(chr==RET){
  153.                 if(lchr!='{' && lchr!='}'){
  154.                     chrput(chr,new_file);
  155.                 }
  156.                 flag_bol=TRUE;
  157.                 lchr=chr;
  158.             }
  159.             else if(!((chr==TAB || chr==SPC) && flag_ovrd)){
  160.                 chrput(chr,new_file);
  161.                 lchr=chr;
  162.             }
  163.         }
  164.         else{
  165.             chrput(chr,new_file);
  166.             if(chr==RET) flag_bol=TRUE;
  167.             else flag_bol=FALSE;
  168.             lchr=chr;
  169.         }
  170.     }
  171.     CloseW();
  172. }
  173.