1
0
Fork 0

Rework by Frederic for better windows support.

Added MSVC7 workspace files.
Switch from libtar to untarka for it's better windows support.
This commit is contained in:
curt 2004-02-16 00:27:03 +00:00
parent 3daf9e5a2d
commit 35f63ba709
10 changed files with 1650 additions and 146 deletions

View file

@ -10,7 +10,7 @@ dnl Require at least automake 2.52
AC_PREREQ(2.52)
dnl Initialize the automake stuff
AM_INIT_AUTOMAKE(fgadmin, 1.0)
AM_INIT_AUTOMAKE(fgadmin, 1.0.0)
dnl Checks for programs.
AC_PROG_MAKE_SET
@ -162,6 +162,8 @@ if test "x$ac_cv_header_zlib_h" != "xyes"; then
echo "configure aborted."
echo
exit
else
AC_DEFINE([HAVE_ZLIB], 1, [Define to enable gz compressed tar archives])
fi
dnl Check for system installed zlib

View file

@ -6,7 +6,9 @@ fgadmin_SOURCES = \
fgadmin.cxx fgadmin.h \
fgadmin_funcs.cxx \
main.cxx \
tar_utils.cxx tar_utils.hxx
untarka.c untarka.h
fgadmin_LDADD = -lsgmisc -lplibul -ltar -lz
fgadmin.cxx fgadmin.h: fgadmin.fl
fluid -c fgadmin.fl

View file

@ -40,6 +40,9 @@
/* Define to 1 if you have the `unlink' function. */
#define HAVE_UNLINK 1
/* Define to enable gz compressed tar archives */
#define HAVE_ZLIB 1
/* Name of package */
#define PACKAGE "fgadmin"
@ -68,7 +71,7 @@
/* #undef TM_IN_SYS_TIME */
/* Version number of package */
#define VERSION "1.0"
#define VERSION "1.0.0"
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */

View file

@ -20,7 +20,7 @@ class FGAdminUI {open selected
} {
Fl_Window main_window {
label {FlightGear Admin Wizard} open
xywh {186 521 465 435} type Double visible
xywh {187 544 465 435} type Double visible
} {
Fl_Button quit_b {
label Quit

View file

@ -25,13 +25,17 @@
#include <string>
#include <vector>
#ifdef _MSC_VER
# include <direct.h>
#endif
#include <FL/Fl_File_Chooser.H>
#include <plib/ul.h>
#include <simgear/misc/sg_path.hxx>
#include "fgadmin.h"
#include "tar_utils.hxx"
#include "untarka.h"
using std::cout;
using std::endl;
@ -221,13 +225,13 @@ void FGAdminUI::install_selected() {
char *f;
// traverse install box and install each item
for ( int i = 0; i < install_box->nitems(); ++i ) {
for ( int i = 0; i <= install_box->nitems(); ++i ) {
if ( install_box->checked( i ) ) {
f = install_box->text( i );
SGPath file( source );
file.append( f );
cout << "installing " << file.str() << endl;
tarextract( (char *)file.c_str(), (char *)dest.c_str(), true );
tarextract( (char *)file.c_str(), (char *)dest.c_str(), true, 0 );
}
}
@ -263,7 +267,7 @@ void FGAdminUI::remove_selected() {
char *f;
// traverse remove box and recursively remove each item
for ( int i = 0; i < remove_box->nitems(); ++i ) {
for ( int i = 0; i <= remove_box->nitems(); ++i ) {
if ( remove_box->checked( i ) ) {
f = remove_box->text( i );
SGPath dir( dest );

View file

@ -1,136 +0,0 @@
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <tar.h>
#include <libtar.h>
#include <zlib.h>
#include "tar_utils.hxx"
int gzopen_frontend( char *pathname, int oflags, int mode ) {
char *gzoflags;
gzFile gzf;
int fd;
switch (oflags & O_ACCMODE)
{
case O_WRONLY:
gzoflags = "wb";
break;
case O_RDONLY:
gzoflags = "rb";
break;
default:
case O_RDWR:
errno = EINVAL;
return -1;
}
fd = open(pathname, oflags, mode);
if (fd == -1)
return -1;
if ((oflags & O_CREAT) && fchmod(fd, mode))
return -1;
gzf = gzdopen(fd, gzoflags);
if (!gzf) {
errno = ENOMEM;
return -1;
}
return (int)gzf;
}
tartype_t gztype = {
(openfunc_t) gzopen_frontend,
(closefunc_t) gzclose,
(readfunc_t) gzread,
(writefunc_t) gzwrite
};
// list the contents of the specified tar file
bool tarlist( char *tarfile, char *destdir, bool verbose ) {
TAR *t;
int i;
int tarflags = TAR_GNU;
if ( verbose ) {
tarflags |= TAR_VERBOSE;
}
if ( tar_open( &t, tarfile, &gztype, O_RDONLY, 0, tarflags ) == -1) {
fprintf(stderr, "tar_open(): %s\n", strerror(errno));
return -1;
}
while ((i = th_read(t)) == 0) {
th_print_long_ls(t);
#ifdef DEBUG
th_print(t);
#endif
if (TH_ISREG(t) && tar_skip_regfile(t) != 0) {
fprintf(stderr, "tar_skip_regfile(): %s\n",
strerror(errno));
return -1;
}
}
#ifdef DEBUG
printf( "th_read() returned %d\n", i);
printf( "EOF mark encountered after %ld bytes\n",
gzseek((gzFile) t->fd, 0, SEEK_CUR)
);
#endif
if (tar_close(t) != 0) {
fprintf(stderr, "tar_close(): %s\n", strerror(errno));
return -1;
}
return 0;
}
// extract the specified tar file into the specified destination
// directory
int tarextract( char *tarfile, char *destdir, bool verbose ) {
TAR *t;
#ifdef DEBUG
puts("opening tarfile...");
#endif
int tarflags = TAR_GNU;
if ( verbose ) {
tarflags |= TAR_VERBOSE;
}
if ( tar_open(&t, tarfile, &gztype, O_RDONLY, 0, tarflags) == -1 ) {
fprintf(stderr, "tar_open(): %s\n", strerror(errno));
return -1;
}
#ifdef DEBUG
puts("extracting tarfile...");
#endif
if (tar_extract_all(t, destdir) != 0) {
fprintf(stderr, "tar_extract_all(): %s\n", strerror(errno));
return -1;
}
#ifdef DEBUG
puts("closing tarfile...");
#endif
if (tar_close(t) != 0) {
fprintf(stderr, "tar_close(): %s\n", strerror(errno));
return -1;
}
return 0;
}

1464
utils/fgadmin/src/untarka.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -3,8 +3,8 @@
using std::string;
// list the contents of the specified tar file
bool tarlist( char *tarfile, char *destdir, bool verbose );
// bool tarlist( char *tarfile, char *destdir, bool verbose );
// extract the specified tar file into the specified destination
// directory
int tarextract( char *tarfile, char *destdir, bool verbose );
extern "C" void tarextract( char *tarfile, char *destdir, int verbose, void (*step)(void) );

View file

@ -0,0 +1,27 @@
Microsoft Visual Studio Solution File, Format Version 7.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fgadmin", "fgadmin\fgadmin.vcproj", "{7004E589-7EA0-4AFD-B432-3D5E00B55049}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "untarka", "untarka\untarka.vcproj", "{9FC55559-6801-4537-BAA3-D145B1B5A2F8}"
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
ConfigName.0 = Debug
ConfigName.1 = Release
EndGlobalSection
GlobalSection(ProjectDependencies) = postSolution
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{7004E589-7EA0-4AFD-B432-3D5E00B55049}.Debug.ActiveCfg = Debug|Win32
{7004E589-7EA0-4AFD-B432-3D5E00B55049}.Debug.Build.0 = Debug|Win32
{7004E589-7EA0-4AFD-B432-3D5E00B55049}.Release.ActiveCfg = Release|Win32
{7004E589-7EA0-4AFD-B432-3D5E00B55049}.Release.Build.0 = Release|Win32
{9FC55559-6801-4537-BAA3-D145B1B5A2F8}.Debug.ActiveCfg = Debug|Win32
{9FC55559-6801-4537-BAA3-D145B1B5A2F8}.Debug.Build.0 = Debug|Win32
{9FC55559-6801-4537-BAA3-D145B1B5A2F8}.Release.ActiveCfg = Release|Win32
{9FC55559-6801-4537-BAA3-D145B1B5A2F8}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,138 @@
<?xml version="1.0" encoding = "Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.00"
Name="fgadmin"
ProjectGUID="{7004E589-7EA0-4AFD-B432-3D5E00B55049}"
Keyword="Win32Proj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\fltk-1.1.4"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;HAVE_ZLIB"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="fltkd.lib Simgear_d.lib ul_d.lib comctl32.lib wsock32.lib zlib.lib"
OutputFile="$(OutDir)/fgadmin.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="&quot;..\..\..\..\fltk-1.1.4\lib&quot;"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/fgadmin.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
OmitFramePointers="TRUE"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
StringPooling="TRUE"
RuntimeLibrary="4"
EnableFunctionLevelLinking="TRUE"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/fgadmin.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
</Configuration>
</Configurations>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
<File
RelativePath="..\..\..\src\fgadmin.cxx">
</File>
<File
RelativePath="..\..\..\src\fgadmin_funcs.cxx">
</File>
<File
RelativePath="..\..\..\src\main.cxx">
</File>
<File
RelativePath="..\..\..\src\untarka.c">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc">
<File
RelativePath="..\..\..\src\fgadmin.h">
</File>
<File
RelativePath="..\..\..\src\tar_utils.hxx">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>