Added /bin/version, code from Ryan Fleet.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1482 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
9363d444c8
commit
6b2bd871b1
@ -10,6 +10,7 @@ StdBinCommands
|
||||
isvolume.cpp
|
||||
lsindex.cpp
|
||||
yes.cpp
|
||||
version.cpp
|
||||
: be ;
|
||||
|
||||
StdBinCommands
|
||||
@ -48,4 +49,4 @@ SubInclude OBOS_TOP src apps bin ping ;
|
||||
SubInclude OBOS_TOP src apps bin route ;
|
||||
SubInclude OBOS_TOP src apps bin traceroute ;
|
||||
SubInclude OBOS_TOP src apps bin unzip ;
|
||||
SubInclude OBOS_TOP src apps bin zip ;
|
||||
SubInclude OBOS_TOP src apps bin zip ;
|
||||
|
193
src/apps/bin/version.cpp
Normal file
193
src/apps/bin/version.cpp
Normal file
@ -0,0 +1,193 @@
|
||||
// Author: Ryan Fleet
|
||||
// Created: 9th October 2002
|
||||
// Modified: 10th October 2002
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <AppFileInfo.h>
|
||||
|
||||
|
||||
void help(void)
|
||||
{
|
||||
printf("usage: version [OPTION] FILENAME [FILENAME2, ...]\n");
|
||||
printf("Returns the version of a file.\n\n");
|
||||
printf(" -h, --help this usage message\n");
|
||||
printf(" -l, --long print long version information of FILENAME\n");
|
||||
printf(" -n, --numerical print in numerical mode\n");
|
||||
printf(" (Major miDdle miNor Variety Internal)\n");
|
||||
printf(" -s, --system print system version instead of app version\n");
|
||||
printf(" --version print version information for this command\n");
|
||||
}
|
||||
|
||||
|
||||
void getversion(const char *filename, version_kind kind, bool bLongFlag, bool bNumericalFlag)
|
||||
{
|
||||
BFile file(filename, O_RDONLY);
|
||||
if(file.InitCheck() != B_OK)
|
||||
{
|
||||
printf("Couldn't get file info!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
BAppFileInfo info(&file);
|
||||
if(info.InitCheck() != B_OK)
|
||||
{
|
||||
printf("Couldn't get file info!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
version_info version;
|
||||
if(info.GetVersionInfo(&version, kind) != B_OK)
|
||||
{
|
||||
printf("Version unknown!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if(true == bLongFlag)
|
||||
{
|
||||
printf("%s\n", version.long_info);
|
||||
return;
|
||||
}
|
||||
|
||||
if(true == bNumericalFlag)
|
||||
{
|
||||
printf("%lu ", version.major);
|
||||
printf("%lu ", version.middle);
|
||||
printf("%lu ", version.minor);
|
||||
switch(version.variety)
|
||||
{
|
||||
case 0: printf("d "); break;
|
||||
case 1: printf("a "); break;
|
||||
case 2: printf("b "); break;
|
||||
case 3: printf("g "); break;
|
||||
case 4: printf("gm "); break;
|
||||
case 5: printf("f "); break;
|
||||
};
|
||||
printf("%lu\n", version.internal);
|
||||
return;
|
||||
}
|
||||
|
||||
printf("%s\n", version.short_info);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
strLessEqual(string1, string2)
|
||||
determines whether string1 contains at least one or more of the characters
|
||||
of string2 but none of which string2 doesn't contain.
|
||||
|
||||
true == ("hel" == "help"); true == ("help" == "help"); true == ("h" == "help");
|
||||
false == ("held" == "help"); false == ("helped" == "help");
|
||||
*/
|
||||
bool strLessEqual(const char *str1, const char *str2)
|
||||
{
|
||||
char *ptr1 = const_cast<char*>(str1);
|
||||
char *ptr2 = const_cast<char*>(str2);
|
||||
|
||||
while(*ptr1 != '\0')
|
||||
{
|
||||
if(*ptr1 != *ptr2)
|
||||
return false;
|
||||
++ptr1;
|
||||
++ptr2;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
version_kind kind = B_APP_VERSION_KIND;
|
||||
bool bLongFlag = false;
|
||||
bool bNumericalFlag = false;
|
||||
int i;
|
||||
|
||||
if(argc < 2)
|
||||
return 0;
|
||||
|
||||
for(i = 1; i < argc; ++i)
|
||||
{
|
||||
if(strncmp(argv[i], "-", 1) == 0)
|
||||
{
|
||||
char *ptr = argv[i];
|
||||
++ptr;
|
||||
|
||||
if(*ptr == '-')
|
||||
{
|
||||
bool lequal = false;
|
||||
++ptr;
|
||||
|
||||
if(*ptr == 'h')
|
||||
{
|
||||
lequal = strLessEqual(ptr, "help");
|
||||
if(lequal == true)
|
||||
{
|
||||
help();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
else if(*ptr == 'l')
|
||||
{
|
||||
lequal = strLessEqual(ptr, "long");
|
||||
if(lequal == true)
|
||||
bLongFlag = true;
|
||||
}
|
||||
|
||||
else if(*ptr == 'n')
|
||||
{
|
||||
lequal = strLessEqual(ptr, "numerical");
|
||||
if(lequal == true)
|
||||
bNumericalFlag = true;
|
||||
}
|
||||
|
||||
else if(*ptr == 's')
|
||||
{
|
||||
lequal = strLessEqual(ptr, "system");
|
||||
if(lequal == true)
|
||||
kind = B_SYSTEM_VERSION_KIND;
|
||||
}
|
||||
|
||||
else if(*ptr == 'v')
|
||||
{
|
||||
lequal = strLessEqual(ptr, "version");
|
||||
if(lequal == true)
|
||||
{
|
||||
getversion(argv[0], B_APP_VERSION_KIND, false, false);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(lequal == false)
|
||||
printf("%s unrecognized option `%s'\n", argv[0], argv[i]);
|
||||
}
|
||||
|
||||
else while(*ptr != '\0')
|
||||
{
|
||||
if(*ptr == 'h')
|
||||
{
|
||||
help();
|
||||
return 0;
|
||||
}
|
||||
else if(*ptr == 's')
|
||||
kind = B_SYSTEM_VERSION_KIND;
|
||||
else if(*ptr == 'l')
|
||||
bLongFlag = true;
|
||||
else if(*ptr == 'n')
|
||||
bNumericalFlag = true;
|
||||
else
|
||||
printf("%s: invalid option -- %c\n", argv[0], *ptr);
|
||||
|
||||
++ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(i = 1; i < argc; ++i)
|
||||
{
|
||||
if(strncmp(argv[i], "-", 1) != 0)
|
||||
getversion(argv[i], kind, bLongFlag, bNumericalFlag);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user