| /* |
| --------------------------------------------------------------------------- |
| Copyright (c) 1998-2007, Brian Gladman, Worcester, UK. All rights reserved. |
| |
| LICENSE TERMS |
| |
| The free distribution and use of this software is allowed (with or without |
| changes) provided that: |
| |
| 1. source code distributions include the above copyright notice, this |
| list of conditions and the following disclaimer; |
| |
| 2. binary distributions include the above copyright notice, this list |
| of conditions and the following disclaimer in their documentation; |
| |
| 3. the name of the copyright holder is not used to endorse products |
| built using this software without specific written permission. |
| |
| DISCLAIMER |
| |
| This software is provided 'as is' with no explicit or implied warranties |
| in respect of its properties, including, but not limited to, correctness |
| and/or fitness for purpose. |
| --------------------------------------------------------------------------- |
| |
| This program converts Visual Studio 2008 C/C++ version 9 build projects |
| into build projects for Visual Studio 2005 C/C++ version 8. It will |
| also convert files that have been converted in this way back into their |
| original form. It does this conversion by looking for *.vcproj files |
| in the current working directory and its sub-directories and changing |
| the following line in each of them: |
| |
| Version="9.00" |
| |
| to: |
| |
| Version="8.00" |
| |
| or vice versa. |
| |
| It is used by compiling it, placing it in a root build directory and |
| running it from there. It acts recursively on all sub-directories of |
| this directory it is important not to run it at a directory level in |
| which not all projects are to be converted. |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <io.h> |
| |
| void process_file(char *fn) |
| { FILE *f; |
| fpos_t pos; |
| char iobuf[1024], *p; |
| |
| if((f = fopen(fn, "r+")) == 0) /* open for read and write */ |
| { |
| printf("File open error on: %s\n", fn); return; |
| } |
| |
| for( ; ; ) |
| { |
| if(feof(f)) /* version line not found */ |
| break; |
| |
| if(fgetpos(f, &pos)) /* save position of line */ |
| { |
| printf("File getpos error on: %s\n", fn); break; |
| } |
| |
| if(!fgets(iobuf, 1024, f)) /* read the line in */ |
| { |
| printf("File read error on: %s\n", fn); break; |
| } |
| |
| if(p = strchr(iobuf, 'V')) /* look for 'version' line */ |
| { |
| if(!strncmp(p, "Version=\"8.00\"", 14) |
| || !strncmp(p, "Version=\"9.00\"", 14)) |
| { |
| *(p + 9) ^= 1; /* switch versions */ |
| /* reset back to start of line in the file and */ |
| /* write the changed line to the file */ |
| if(fsetpos(f, &pos)) |
| printf("File setpos error on: %s\n", fn); |
| else if(fputs(iobuf, f) == EOF) |
| printf("File write error on: %s\n", fn); |
| break; /* this file is now fixed */ |
| } |
| } |
| } |
| fclose(f); |
| } |
| |
| void find_vcproj_files(char *dir) |
| { struct _finddata_t cfile; |
| intptr_t hfile; |
| char nbuf[_MAX_PATH], *p; |
| |
| strcpy(nbuf, dir); /* find directories and files */ |
| strcat(nbuf, "\\*.*"); |
| if((hfile = _findfirst( nbuf, &cfile )) == -1L ) |
| return; /* if directory is empty */ |
| |
| do |
| { |
| strcpy(nbuf, dir); /* compile path to the current */ |
| strcat(nbuf, "\\"); /* file or directory */ |
| strcat(nbuf, cfile.name); |
| |
| if((cfile.attrib & _A_SUBDIR) == _A_SUBDIR) |
| { /* if it is a sub-direcory */ |
| if(strcmp(cfile.name, ".") && strcmp(cfile.name, "..")) |
| find_vcproj_files(nbuf); /* recursive search */ |
| } |
| else if((cfile.attrib & 0x1f) == _A_NORMAL && (p = strrchr(cfile.name, '.')) |
| && !strcmp(p, ".vcproj")) |
| process_file(nbuf); /* if it is a *.vcproj file */ |
| } |
| while |
| ( _findnext( hfile, &cfile ) == 0 ); |
| |
| _findclose( hfile ); |
| } |
| |
| int main(void) |
| { char *dir; |
| |
| if(!(dir = _getcwd( NULL, 0 ))) |
| printf("Cannot obtain current working directory\n"); |
| else |
| find_vcproj_files(dir); |
| } |