Differences From Artifact [97a142a9264ab72a]:
- File        
src/util.d
- 2011-02-23 12:53:16 - part of checkin [c2b7a98c21] on branch trunk - Initial import (user: kinaba) [annotate]
 
To Artifact [9a6609551ad86e62]:
- File        
src/util.d
- 2015-04-21 10:46:55 - part of checkin [4e2933c620] on branch trunk - Rebased to the latest verson dmd 2.067. Not yet verified the outcome. (user: kinaba) [annotate]
 
     1         -private import std.string;
            1  +private import win32.windows;
            2  +private import std.string;
     2      3   private import std.file;
     3         -private import win32.ansi.windows;
     4      4   
     5         -char lastChar( char[] s )
     6         -  { return *CharPrev(s, cast(char*)s+s.length); }
            5  +char lastChar( string s )
            6  +  { return *CharPrevA(cast(char*)s.ptr, cast(char*)s.ptr+s.length); }
     7      7   
     8      8   //----------------------------------------------------------------
     9      9   // int do_opApply!(E, C)( collection, delegate );
    10     10   // int do_opApply!(E)   (      array, delegate );
    11     11   //   forwarding the opApply call to another collection
    12     12   //----------------------------------------------------------------
    13     13   
................................................................................
    67     67    foreach( int t ; x ) assert( t==2 );
    68     68   }
    69     69   
    70     70   //----------------------------------------------------------------
    71     71   // コマンドライン解析
    72     72   //----------------------------------------------------------------
    73     73   
    74         -char[][] cmd_parse( char[] str, bool in_resp=false )
           74  +string[] cmd_parse( string str, bool in_resp=false )
    75     75   {
    76         - char[][] ans;
           76  + string[] ans;
    77     77    char resp_char = '@';
    78     78   
    79     79    for(int i=0; i!=str.length; )
    80     80    {
    81     81     // 空白スキップ
    82     82     while( i!=str.length && 0<=str[i] && str[i]<=' ' )
    83     83      ++i;
    84     84     if( i == str.length )
    85     85      break;
    86     86   
    87     87     // ""を考慮して一個パラメタ切り出し
    88         -  char[] param;
           88  +  string param;
    89     89     if( str[i] == '"' )
    90     90     {
    91     91      int j = ++i;
    92     92      while( j!=str.length )
    93     93      {
    94     94       if( str[j]=='"' &&
    95     95            (j+1==str.length || 0<=str[j+1] && str[j+1]<=' ') )
................................................................................
   108    108      i = j;
   109    109     }
   110    110   
   111    111     // レスポンスファイル関連の処理
   112    112     if( !in_resp && param[0]==resp_char )
   113    113     {
   114    114      try {
   115         -    char[] rsp = cast(char[]) std.file.read( param[1 .. param.length] );
          115  +    string rsp = cast(string) std.file.read( param[1 .. param.length] );
   116    116       ans ~= cmd_parse(rsp,true);
   117    117      } catch( FileException e ) {}
   118    118     }
   119    119     else if( param.length>=2 && param[0..2]=="--" )
   120    120     {
   121    121      resp_char = (param.length==2 ? '\0' : param[2]);
   122    122     }
................................................................................
   128    128    return ans;
   129    129   }
   130    130   
   131    131   //----------------------------------------------------------------
   132    132   // DOS形式でファイル音更新時刻を書き換え
   133    133   //----------------------------------------------------------------
   134    134   
   135         -void dosSetFTime( char[] fname, ushort date, ushort time )
          135  +void dosSetFTime( string fname, ushort date, ushort time )
   136    136   {
   137    137    FILETIME ft,lc;
   138    138    if( DosDateTimeToFileTime( date, time, &lc ) )
   139    139     if( LocalFileTimeToFileTime( &lc, &ft ) )
   140    140     {
   141         -   HANDLE han = CreateFile( toStringz(fname),
   142         -          GENERIC_READ | GENERIC_WRITE,
   143         -          FILE_SHARE_READ,NULL,
   144         -          OPEN_EXISTING,
   145         -          FILE_ATTRIBUTE_NORMAL,
   146         -          NULL );
          141  +   HANDLE han = CreateFileA( toStringz(fname),
          142  +           GENERIC_READ | GENERIC_WRITE,
          143  +           FILE_SHARE_READ,null,
          144  +           OPEN_EXISTING,
          145  +           FILE_ATTRIBUTE_NORMAL,
          146  +           null );
   147    147      if( han==INVALID_HANDLE_VALUE )
   148    148       return;
   149    149   
   150         -   SetFileTime( han,&ft,NULL,&ft );
          150  +   SetFileTime( han,&ft,null,&ft );
   151    151      CloseHandle( han );
   152    152     }
   153    153   }
   154    154   
   155    155   //----------------------------------------------------------------
   156    156   // 指定時刻(DOS形式)より新しいファイルか?
   157    157   //----------------------------------------------------------------
   158    158   
   159         -bool newer_than( ushort d1, ushort t1, char[] fname )
          159  +bool newer_than( ushort d1, ushort t1, string fname )
   160    160   {
   161         - HANDLE han = CreateFile( toStringz(fname),
   162         -        GENERIC_READ | GENERIC_WRITE,
   163         -        FILE_SHARE_READ,NULL,
   164         -        OPEN_EXISTING,
   165         -        FILE_ATTRIBUTE_NORMAL,
   166         -        NULL );
          161  + HANDLE han = CreateFileA( toStringz(fname),
          162  +         GENERIC_READ | GENERIC_WRITE,
          163  +         FILE_SHARE_READ,null,
          164  +         OPEN_EXISTING,
          165  +         FILE_ATTRIBUTE_NORMAL,
          166  +         null );
   167    167    if( han==INVALID_HANDLE_VALUE )
   168    168     return false;
   169    169    FILETIME ft;
   170    170    GetFileTime( han, null, null, &ft );
   171    171    CloseHandle( han );
   172    172   
   173    173    FILETIME lc;