home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 3 / FREEWARE.BIN / towns_os / taropyon / he386 / defs / mmlrpl.awk < prev    next >
Text File  |  1980-01-02  |  2KB  |  82 lines

  1. #
  2. #    MML テキストの指定のパートだけ置換する    By TARO
  3. #
  4. #    usage    jgawk -f mmlrpl.awk --
  5. #        <入力パス名> <出力パス名>
  6. #        <パート数>    <置換パート>    <置換対象文字列>    <新文字列>
  7. #
  8. #     指定のパートの文字列だけを置換します。
  9. #     <置換対象文字列>には正規表現のワイルドカードを使用可能です。
  10. #
  11. #    ※ #includeで外部ファイルをインクルードしているものや#ifdef~#els
  12. #      e~#endif を使ったMML テキストでは正常に処理できません。
  13. #
  14. #     AWK で作ったたあいのないユーティリティですので,気にする必要あり
  15. #    ません。
  16. #     実行にはJGAWK.EXE が必要です。
  17.  
  18. BEGIN    {
  19.     if ( ARGC<6 )
  20.     {    printf "@ Parameter error!\n"
  21.         exit
  22.     }
  23.     READFILE  = ARGV[1]
  24.     WRITEFILE = ARGV[2]
  25.     PARTMAX   = ARGV[3]
  26.     rpl_part  = ARGV[4]
  27.     sea_str   = ARGV[5]
  28.     new_str   = ARGV[6]
  29.     rpl_num   = 0;    #    置換数
  30.     ARGC = 2
  31.     printf "/* filename '%s' (%s)\n",WRITEFILE,READFILE >WRITEFILE
  32.     printf "/* (%d) '%s' -> '%s'\n", rpl_part, sea_str, new_str >WRITEFILE
  33.     NULSKIP = 0
  34. }
  35.  
  36. {    s = $0
  37.     if ( match(s,"^/")!=0 )
  38.         print s >WRITEFILE
  39.     else if ( match(s,"^\.")!=0 )
  40.     {    if( index(s,"next")!=0 )
  41.         {    PART = 0
  42.             print "found next\n"
  43.         } else if( index(s,"partmax")!=0 )
  44.         {    PARTMAX = $2
  45.             printf "partmax = %d\n", PARTMAX
  46.         } else if( index(s,"nulline")!=0 )
  47.         {    if( index(s,"skip")!=0 )
  48.                 NULSKIP = 1
  49.             else if( index(s,"rest")!=0 )
  50.                 NULSKIP = 0
  51.         }
  52.         print s >WRITEFILE
  53.     } else if( match(s,"^#")!=0 )
  54.         print s >WRITEFILE
  55.     else
  56.     {    if( NULSKIP==0 )
  57.         {    if ( PART == rpl_part )
  58.                 mml_rpl()
  59.             ++PART
  60.             if ( PART >= PARTMAX  )
  61.                 PART = 0
  62.         } else if( NF!=0 )
  63.         {    if ( PART == rpl_part )
  64.                 mml_rpl()
  65.             ++PART
  66.             if ( PART >= PARTMAX  )
  67.                 PART = 0
  68.         }
  69.         print s >WRITEFILE
  70.     }
  71. }
  72.  
  73. function    mml_rpl( i )    {
  74.     i = gsub( sea_str, new_str, s);
  75.     rpl_num = rpl_num + i
  76. }
  77.  
  78. END    {
  79.     printf "$ %dコ置換しました\n",rpl_num
  80. }
  81.  
  82.