- Update expand utility to Wine-1.1.37. Last update happened 7 years ago and since then it was translated into 20 languages. Sorry to all the translators but the preference is given to a working untranslated version rather than a non-working localized one.
See issue #4637 for more details.
svn path=/trunk/; revision=45418
/*
* Copyright 1997 Victor Schneider
* Copyright 2002 Alexandre Julliard
+ * Copyright 2007 Hans Leidekker
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include <stdlib.h>
+#define WIN32_LEAN_AND_MEAN
+
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <lzexpand.h>
-#include <tchar.h>
+#include <setupapi.h>
+
+static UINT CALLBACK set_outfile( PVOID context, UINT notification, UINT_PTR param1, UINT_PTR param2 )
+{
+ FILE_IN_CABINET_INFO_A *info = (FILE_IN_CABINET_INFO_A *)param1;
+ char buffer[MAX_PATH];
+ char* basename;
-#include "resource.h"
+ switch (notification)
+ {
+ case SPFILENOTIFY_FILEINCABINET:
+ {
+ LPSTR outfile = context;
+ if (outfile[0] != 0)
+ {
+ SetLastError( ERROR_NOT_SUPPORTED );
+ return FILEOP_ABORT;
+ }
+ GetFullPathNameA( info->NameInCabinet, sizeof(buffer), buffer, &basename );
+ strcpy( outfile, basename );
+ return FILEOP_SKIP;
+ }
+ default: return NO_ERROR;
+ }
+}
-int _tmain(int argc, TCHAR *argv[])
+static UINT CALLBACK extract_callback( PVOID context, UINT notification, UINT_PTR param1, UINT_PTR param2 )
{
- OFSTRUCT SourceOpenStruct1, SourceOpenStruct2;
- LONG ret;
- HFILE hSourceFile, hDestFile;
- TCHAR szMsg[RC_STRING_MAX_SIZE];
-
- if (argc < 2)
- {
- LoadString( GetModuleHandle(NULL), IDS_Copy, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
- _ftprintf( stderr, szMsg, argv[0] );
- return 1;
- }
- hSourceFile = LZOpenFile(argv[1], &SourceOpenStruct1, OF_READ);
- if (argv[2])
- hDestFile = LZOpenFile(argv[2], &SourceOpenStruct2, OF_CREATE | OF_WRITE);
- else
- {
- TCHAR OriginalName[MAX_PATH];
- GetExpandedName(argv[1], OriginalName);
- hDestFile = LZOpenFile(OriginalName, &SourceOpenStruct2, OF_CREATE | OF_WRITE);
- }
- ret = LZCopy(hSourceFile, hDestFile);
- LZClose(hSourceFile);
- LZClose(hDestFile);
- LoadString( GetModuleHandle(NULL), IDS_FAILS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
- if (ret <= 0) _ftprintf(stderr,szMsg,ret);
- return (ret <= 0);
+ FILE_IN_CABINET_INFO_A *info = (FILE_IN_CABINET_INFO_A *)param1;
+
+ switch (notification)
+ {
+ case SPFILENOTIFY_FILEINCABINET:
+ {
+ LPCSTR targetname = context;
+
+ strcpy( info->FullTargetName, targetname );
+ return FILEOP_DOIT;
+ }
+ default: return NO_ERROR;
+ }
+}
+
+static BOOL option_equal(LPCSTR str1, LPCSTR str2)
+{
+ if (str1[0] != '/' && str1[0] != '-')
+ return FALSE;
+ return !lstrcmpA( str1 + 1, str2 );
+}
+
+int main(int argc, char *argv[])
+{
+ int ret = 0;
+ char infile[MAX_PATH], outfile[MAX_PATH], actual_name[MAX_PATH];
+ char outfile_basename[MAX_PATH], *basename_index;
+ UINT comp;
+
+ if (argc < 3)
+ {
+ fprintf( stderr, "Usage:\n" );
+ fprintf( stderr, "\t%s infile outfile\n", argv[0] );
+ fprintf( stderr, "\t%s /r infile\n", argv[0] );
+ return 1;
+ }
+
+ if (argc == 3 && (option_equal(argv[1], "R") || option_equal(argv[1], "r")))
+ GetFullPathNameA( argv[2], sizeof(infile), infile, NULL );
+ else
+ GetFullPathNameA( argv[1], sizeof(infile), infile, NULL );
+
+ if (!SetupGetFileCompressionInfoExA( infile, actual_name, sizeof(actual_name), NULL, NULL, NULL, &comp ))
+ {
+ fprintf( stderr, "%s: can't open input file %s\n", argv[0], infile );
+ return 1;
+ }
+
+ if (argc == 3 && (option_equal(argv[1], "R") || option_equal(argv[1], "r")))
+ {
+ switch (comp)
+ {
+ case FILE_COMPRESSION_MSZIP:
+ {
+ outfile_basename[0] = 0;
+ if (!SetupIterateCabinetA( infile, 0, set_outfile, outfile_basename ))
+ {
+ fprintf( stderr, "%s: can't determine original name\n", argv[0] );
+ return 1;
+ }
+ GetFullPathNameA( infile, sizeof(outfile), outfile, &basename_index );
+ *basename_index = 0;
+ strcat( outfile, outfile_basename );
+ break;
+ }
+ case FILE_COMPRESSION_WINLZA:
+ {
+ GetExpandedNameA( infile, outfile_basename );
+ break;
+ }
+ default:
+ {
+ fprintf( stderr, "%s: can't determine original\n", argv[0] );
+ return 1;
+ }
+ }
+ }
+ else
+ GetFullPathNameA( argv[2], sizeof(outfile), outfile, NULL );
+
+ if (!lstrcmpiA( infile, outfile ))
+ {
+ fprintf( stderr, "%s: can't expand file to itself\n", argv[0] );
+ return 1;
+ }
+
+ switch (comp)
+ {
+ case FILE_COMPRESSION_MSZIP:
+ {
+ if (!SetupIterateCabinetA( infile, 0, extract_callback, outfile ))
+ {
+ fprintf( stderr, "%s: cabinet extraction failed\n", argv[0] );
+ return 1;
+ }
+ break;
+ }
+ case FILE_COMPRESSION_WINLZA:
+ {
+ INT hin, hout;
+ OFSTRUCT ofin, ofout;
+ LONG error;
+
+ if ((hin = LZOpenFileA( infile, &ofin, OF_READ )) < 0)
+ {
+ fprintf( stderr, "%s: can't open input file %s\n", argv[0], infile );
+ return 1;
+ }
+ if ((hout = LZOpenFileA( outfile, &ofout, OF_CREATE | OF_WRITE )) < 0)
+ {
+ LZClose( hin );
+ fprintf( stderr, "%s: can't open output file %s\n", argv[0], outfile );
+ return 1;
+ }
+ error = LZCopy( hin, hout );
+
+ LZClose( hin );
+ LZClose( hout );
+
+ if (error < 0)
+ {
+ fprintf( stderr, "%s: LZCopy failed, error is %ld\n", argv[0], error );
+ return 1;
+ }
+ break;
+ }
+ default:
+ {
+ if (!CopyFileA( infile, outfile, FALSE ))
+ {
+ fprintf( stderr, "%s: CopyFileA failed\n", argv[0] );
+ return 1;
+ }
+ break;
+ }
+ }
+ return ret;
}
<module name="expand" type="win32cui" installbase="system32" installname="expand.exe" >
<include base="ReactOS">include/reactos/wine</include>
<include base="expand">.</include>
- <define name="ANONYMOUSUNIONS" />
<library>lz32</library>
+ <library>setupapi</library>
<library>user32</library>
<file>expand.c</file>
<file>expand.rc</file>
#define REACTOS_STR_INTERNAL_NAME "expand\0"
#define REACTOS_STR_ORIGINAL_FILENAME "expand.exe\0"
#include <reactos/version.rc>
-
-#include "rsrc.rc"
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- */
-
-LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "Ïðèíàäëåæíîñò íà ÐåàêòÎÑ çà ðàçãúâàíå (ðàçêîìïðåñèðàíå) íà ôàéëîâå, â. 1.0\n\
-Âúçïðîèçâîäñòâåíî ïðàâî íà Victor Schneider 1997\n\n\
-Óïîòðåáà: %s âõîäÿùôàéë [èçõîäÿùôàéë]\n"
-
-IDS_FAILS "LZCopy íåóñïåøíî: âúðíàòî å %ld\n"
-END
+++ /dev/null
-/* FILE: system/expand/lang/cs-CZ.rc
- * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
- * UPDATED: 2008-04-21
- */
-
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- */
-
-LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS rozbalovaè souborù - verze 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Pou\9eití: %s vstupní soubor [výstupní soubor]\n"
-
-IDS_FAILS "LZCopy selhalo: návratový kód je %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Translated into German.
- * By Rouven Wessling 2005 pentiumforever@gmail.com
- */
-
-LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS Dateiexpansionsprogramm Version 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Verwendung: %s Eingabedatei [Ausgabedatei]\n"
-
-IDS_FAILS "LZCopy fehlgeschlagen: Rückgabe ist %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- * GR.rc by Dj Apal®
- *
- */
-
-LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS Expansion Utility Version 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-×ñÞóç: %s infile [outfile]\n"
-
-IDS_FAILS "LZÁíôéãñáöÞ áðÝôõ÷å: åðéóôñÜöçêå %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- */
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS File Expansion Utility Version 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Usage: %s infile [outfile]\n"
-
-IDS_FAILS "LZCopy failed: return is %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- */
-
-LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS Utilidad de Descompresión de Archivos Versión 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Utilización: %s archivo entrada [archivo salida]\n"
-
-IDS_FAILS "LZCopy falló: el resultado es %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- */
-
-LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS Utilitaire de décompression de fichiers Version 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Utilisation : %s FichierEntrée [fichierdesortie]\n"
-
-IDS_FAILS "LZCopy a echoué : code d'erreur retourné : %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- * Hungarian version is Copyright 2005 - Peter Nagy <nagylakas@gmail.com>
- */
-
-LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS Fájlkicsomagoló segédprogram 1.0 verzió\n\
-Szerzõi jog: Victor Schneider 1997\n\n\
-Használat: %s forrás [cél]\n"
-
-IDS_FAILS "LZCopy sikertelen, visszatérése: %ld\n"
-END
+++ /dev/null
-/*
- * Translated into Indonesian.
- * By Zaenal Mutaqin 2007 ade999@gmail.com
- */
-
-#include "resource.h"
-
-LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
-
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "Utilitas Ekspansi File ReactOS Versi 1.0\n\
-Hak Cipta Victor Schneider 1997\n\n\
-Pemakaian: %s infile [outfile]\n"
-
-IDS_FAILS "LZCopy gagal: hasilnya adalah %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-
-LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
-
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "Programma per la espansione dei file di ReactOS Versione 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Usage: %s infile [outfile]\n"
-
-IDS_FAILS "LZCopy fallito: return è %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- */
-
-LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS File Expansion Utility Version 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-\8eg\97p\96@: %s \93W\8aJ\8c³\83t\83@\83C\83\8b [\93W\8aJ\90æ\83t\83@\83C\83\8b]\n"
-
-IDS_FAILS "LZCopy \82É\8e¸\94s\82µ\82Ü\82µ\82½: \95Ô\82è\92l\82Í %ld \82Å\82·\81B\n"
-END
+++ /dev/null
-/* Translation by Vytis 'CMan' Girdþijauskas cman@cman.us */
-
-#include "resource.h"
-
-LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS bylø iðplëtimo pagalbinë programa. Versija 1.0\n\
-(C) Victor Schneider 1997\n\n\
-Naudojimas: %s ðaltinio_byla [iðvesties_byla]\n"
-
-IDS_FAILS "LZCopy nepavyko: graþino %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- */
-
-LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS Fil ekstrakterings Verktøy Versjon 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Bruk: %s innfil [utfil]\n"
-
-IDS_FAILS "LZCopy mislykket: retur ble %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
-* translated by xrogers (http://rogers.cyberdusk.pl/)
-* xxrogers@users.sourceforge.net
-* https://sourceforge.net/projects/reactospl
-*/
-
-LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "Narzêdzie rozwijania plików ReactOS wersja 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Sposób u¿ycia: %s plik_wej\9cciowy [plik_wyj\9cciowy]\n"
-
-IDS_FAILS "Nieudane LZCopy: zwrócony wynik %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Moved all hardcoded strings to En.rc.
- * By Magnus Olsen 2005 magnus@itkonsult-olsen.com
- */
-
-LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS Utilitário para Expandir Arquivos - Versão 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Uso: %s origem [destino]\n"
-
-IDS_FAILS "LZCopy falhou: resultado é %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-
-LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "Óòèëèòà ðàñïàêîâêè ôàéëîâ ReactOS, âåðñèÿ 1.0\n\
-Àâòîðñêèå ïðàâà (ñ) Âèêòîð Øíåéäåð 1997\n\n\
-Èñïîëüçîâàíèå: %s èñõîäíûé_ôàéë [âûõîäíîé_ôàéë]\n"
-
-IDS_FAILS "Íå óäàëîñü âûïîëíèòü LZCopy, âîçâðàùåíî: %ld\n"
-END
+++ /dev/null
-#include "resource.h"
-/*
- * Copyright 2005 David Nordenberg
- */
-
-LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "ReactOS verktyg för filextrahering version 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Användning: %s källfil [målfil]\n"
-
-IDS_FAILS "LZCopy misslyckades, felkod: %ld\n"
-END
+++ /dev/null
-/*
- * ReactOS File Expansion Utility
- *
- * Copyright 2006 Sumath Aowsakulsutthi (Thai translation)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "resource.h"
-
-LANGUAGE LANG_THAI, SUBLANG_DEFAULT
-
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "â»Ãá¡ÃÁÍÃö»ÃÐ⪹ìà¾×èÍ»ÃѺáµè§á¿éÁ¢Í§ ReactOS ÃØè¹·Õè 1.0\n\
-ʧǹÅÔ¢ÊÔ·¸Ôì Victor Schneider 1997\n\n\
-ÊÀÒÇÐãªé§Ò¹: %s á¿éÁÀÒÂã¹ [á¿éÁÀÒ¹͡]\n"
-
-IDS_FAILS "¡ÒäѴÅÍ¡ÅéÁàËÅÇ: Âé͹¡ÅѺà»ç¹ %ld\n"
-END
+++ /dev/null
-/*
- * PROJECT: ReactOS File Expansion Utility
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: base/system/expand/lang/uk-UA.rc
- * PURPOSE: Ukraianian Language File for Expand
- * TRANSLATOR: Artem Reznikov
- */
-#include "resource.h"
-
-LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
-STRINGTABLE DISCARDABLE
-BEGIN
-
-IDS_Copy, "Ïðîãðàìà ðîçïàêîâêè ôàéë³â ReactOS âåðñ³ÿ 1.0\n\
-Copyright Victor Schneider 1997\n\n\
-Usage: %s infile [outfile]\n"
-
-IDS_FAILS "Íå âäàëîñÿ âèêîíàòè: return is %ld\n"
-END
+++ /dev/null
-#ifndef RESOURCE_H__
-#define RESOURCE_H__
-
-#define RC_STRING_MAX_SIZE 4096
-#define IDS_Copy 100
-#define IDS_FAILS 101
-
-#endif
-
-/* EOF */
+++ /dev/null
-#include <windows.h>
-#include "resource.h"
-
-LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-
-#include "lang/bg-BG.rc"
-#include "lang/cs-CZ.rc"
-#include "lang/de-DE.rc"
-#include "lang/el-GR.rc"
-#include "lang/en-US.rc"
-#include "lang/es-ES.rc"
-#include "lang/fr-FR.rc"
-#include "lang/hu-HU.rc"
-#include "lang/id-ID.rc"
-#include "lang/it-IT.rc"
-#include "lang/ja-JP.rc"
-#include "lang/lt-LT.rc"
-#include "lang/no-NO.rc"
-#include "lang/pl-PL.rc"
-#include "lang/pt-BR.rc"
-#include "lang/ru-RU.rc"
-#include "lang/sv-SE.rc"
-#include "lang/th-TH.rc"
-#include "lang/uk-UA.rc"