# HG changeset patch
# User jlarmour
# Date 992645104 0
# Node ID 2395031e7a66778d19f839d678643834ed083e86
# Parent ac086aa3217e04076ebc11fbf0dac414468e3d44
Merge from eCos master repository on 2001-06-15-06:43:03-BST
diff --git a/host/tools/Utils/common/eCosStd.h b/host/tools/Utils/common/eCosStd.h
--- a/host/tools/Utils/common/eCosStd.h
+++ b/host/tools/Utils/common/eCosStd.h
@@ -45,7 +45,41 @@
#if !defined(AFX_STDAFX_H__F20BA9C4_CFD5_11D2_BF75_00A0C949ADAC__INCLUDED_)
#define AFX_STDAFX_H__F20BA9C4_CFD5_11D2_BF75_00A0C949ADAC__INCLUDED_
-#ifdef _WIN32
+#if defined(__GNUWIN32__)
+ #include
+
+#if 0
+ #include
+ #include
+ #include
+ #include
+ #include
+
+ #include // socket etc...
+ #include // inet_addr
+ #include // inet_addr
+ #include // gethostbyname
+#endif
+ #include
+ #include
+ #define cPathsep '/'
+
+ #include // malloc
+ #include // atoi
+ #include
+ #define WOULDBLOCK EWOULDBLOCK
+
+ #include "wcharunix.h"
+ #include
+
+ #define _stat stat
+
+ typedef long long Time;
+ #define MODE_TEXT
+
+ #include
+
+#elif defined(_WIN32)
#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE // UNICODE is used by Windows headers
diff --git a/host/tools/configtool/common/common/build.cxx b/host/tools/configtool/common/common/build.cxx
--- a/host/tools/configtool/common/common/build.cxx
+++ b/host/tools/configtool/common/common/build.cxx
@@ -121,6 +121,11 @@ std::string nospace_path (const std::str
}
#endif
+// Two methods of generating Cygwin filenames
+// CYGWIN_USE_CYGDRIVE = 1: use e.g. /cygdrive/c/, but this can have problems with mkdir -p
+// CYGWIN_USE_CYGDRIVE = 0: use e.g. //c/, but this is deprecated in new versions of Cygwin
+#define CYGWIN_USE_CYGDRIVE 0
+
// convert a DOS filepath to a Cygwin filepath
std::string cygpath (const std::string input) {
#ifdef _WIN32
@@ -134,6 +139,8 @@ std::string cygpath (const std::string i
cygwin_conv_to_posix_path (path.c_str (), buffer);
output = buffer;
#else
+
+#if CYGWIN_USE_CYGDRIVE
std::string strCygdrive("/cygdrive");
HKEY hKey = 0;
@@ -159,6 +166,16 @@ std::string cygpath (const std::string i
output += ('\\' == path [n]) ? '/' : path [n]; // convert backslash to slash
}
}
+#else
+ for (unsigned int n = 0; n < path.size (); n++) { // for each char
+ if ((1 == n) && (':' == path [n])) { // if a DOS logical drive letter is present
+ output = "//" + output; // convert to Cygwin notation
+ } else {
+ output += ('\\' == path [n]) ? '/' : path [n]; // convert backslash to slash
+ }
+ }
+#endif
+ // CYGWIN_USE_CYGDRIVE
#endif
return output;
#else
diff --git a/host/tools/configtool/standalone/wxwin/Makefile b/host/tools/configtool/standalone/wxwin/Makefile
--- a/host/tools/configtool/standalone/wxwin/Makefile
+++ b/host/tools/configtool/standalone/wxwin/Makefile
@@ -210,24 +210,24 @@ cleanall: clean cleanecc cleanwx
releasect:
echo "#include " > /tmp/ctver.c
echo "#include \"symbols.h\"" >> /tmp/ctver.c
- echo "int main() { printf(\"%.1f\", ecCONFIGURATION_TOOL_VERSION); }" >> /tmp/ctver.c
+ echo "int main() { printf(\"%.2f\", ecCONFIGURATION_TOOL_VERSION); }" >> /tmp/ctver.c
cc /tmp/ctver.c -I$(CTDIR) -o /tmp/ctver
chmod a+x $(CTDIR)/setup/maketarball.sh
$(CTDIR)/setup/maketarball.sh $(ECOSDIR)/.. $(CTBUILDDIR) /tmp/ctdeliver `/tmp/ctver`
- rm -f /tmp/ctver /tmp/ctver.c
+# rm -f /tmp/ctver /tmp/ctver.c
# Installs the binary and associated files in the correct place for local running
installbinary: releasect
- cp /tmp/ctdeliver/configtool/configtool $(LOCALBINDIR)/configtool-`date -I`
- mv /tmp/ctdeliver/configtool/README.txt /tmp/ctdeliver/configtool/README-configtool.txt
+ cp /tmp/ctdeliver/configtool-`/tmp/ctver`/configtool $(LOCALBINDIR)/configtool-`date -I`
+ mv /tmp/ctdeliver/configtool-`/tmp/ctver`/README.txt /tmp/ctdeliver/configtool-`/tmp/ctver`/README-configtool.txt
rm -f $(LOCALBINDIR)/configtool
ln -s $(LOCALBINDIR)/configtool-`date -I` $(LOCALBINDIR)/configtool
- cp -r /tmp/ctdeliver/configtool/* $(LOCALBINDIR)
+ cp -r /tmp/ctdeliver/configtool-`/tmp/ctver`/* $(LOCALBINDIR)
# Copies an archive to a suitable place for people to grab
installtarball: releasect
mkdir -p $(LOCALARCHIVEDIR)/`date -I`
- cp /tmp/ctdeliver/configtool*.tgz $(LOCALARCHIVEDIR)/`date -I`
+ cp /tmp/ctdeliver/configtool*.tar.?z* $(LOCALARCHIVEDIR)/`date -I`
### GUI Configtool files
diff --git a/host/tools/configtool/standalone/wxwin/TODO.txt b/host/tools/configtool/standalone/wxwin/TODO.txt
new file mode 100644
--- /dev/null
+++ b/host/tools/configtool/standalone/wxwin/TODO.txt
@@ -0,0 +1,7 @@
+ToDo List for Configuration Tool 2.x
+====================================
+
+- implement Memory Layout Tool
+- debug Run Tests Dialog
+- List packages in alphabetical order in the Packages dialog
+
diff --git a/host/tools/configtool/standalone/wxwin/configtooldoc.cpp b/host/tools/configtool/standalone/wxwin/configtooldoc.cpp
--- a/host/tools/configtool/standalone/wxwin/configtooldoc.cpp
+++ b/host/tools/configtool/standalone/wxwin/configtooldoc.cpp
@@ -30,7 +30,7 @@
// Author(s): julians
// Contact(s): julians
// Date: 2000/10/05
-// Version: $Id: configtooldoc.cpp,v 1.28 2001/05/02 13:56:39 julians Exp $
+// Version: $Id: configtooldoc.cpp,v 1.30 2001/06/11 14:49:49 julians Exp $
// Purpose:
// Description: Implementation file for the ecConfigToolDoc class
// Requires:
@@ -68,8 +68,9 @@
#ifdef __WXMSW__
#include
-#include
+#ifndef __GNUWIN32__
#include
+#endif
#include "wx/msw/winundef.h"
#ifdef CreateDirectory
#undef CreateDirectory
@@ -145,6 +146,21 @@ bool ecConfigToolDoc::OnCloseDocument()
}
}
+bool ecConfigToolDoc::Save()
+{
+ bool ret = FALSE;
+
+ if (!IsModified() && m_savedYet) return TRUE;
+ if (m_documentFile == wxT("") || !m_savedYet)
+ ret = SaveAs();
+ else
+ ret = OnSaveDocument(m_documentFile);
+ if ( ret )
+ SetDocumentSaved(TRUE);
+ return ret;
+}
+
+
bool ecConfigToolDoc::OnCreate(const wxString& path, long flags)
{
wxGetApp().m_currentDoc = this;
@@ -191,8 +207,12 @@ bool ecConfigToolDoc::OnCreate(const wxS
// m_memoryMap.set_map_size (0xFFFFFFFF); // set the maximum memory map size
// NewMemoryLayout (CFileName (m_strPackagesDir, m_strMemoryLayoutFolder, _T("include\\pkgconf")));
+ // Why should we generate the names at this point, when we only have a temporary filename?
+ // Don't do it!
+#if 0
wxGetApp().SetStatusText(wxT("Updating build information..."), FALSE);
UpdateBuildInfo();
+#endif
}
}
return success;
@@ -966,11 +986,12 @@ void ecConfigToolDoc::SelectHardware (co
void ecConfigToolDoc::SelectPackages ()
{
+ // Crashes the Cygwin 1.0 compiler
+#ifndef __CYGWIN10__
ecPackagesDialog dlg(wxGetApp().GetTopWindow());
// This map holds the ecConfigItem pointers for the packages loaded before the dialog is invoked.
// We cannot use Find(), which traverses all items - potentially those that have been removed
- //CMapStringToPtr arLoadedPackages;
wxHashTable arLoadedPackages(wxKEY_STRING);
wxBeginBusyCursor();
@@ -1065,6 +1086,7 @@ void ecConfigToolDoc::SelectPackages ()
RegenerateData();
}
}
+#endif
}
diff --git a/host/tools/configtool/standalone/wxwin/configtooldoc.h b/host/tools/configtool/standalone/wxwin/configtooldoc.h
--- a/host/tools/configtool/standalone/wxwin/configtooldoc.h
+++ b/host/tools/configtool/standalone/wxwin/configtooldoc.h
@@ -30,7 +30,7 @@
// Author(s): julians
// Contact(s): julians
// Date: 2000/10/05
-// Version: $Id: configtooldoc.h,v 1.12 2001/04/24 10:07:01 julians Exp $
+// Version: $Id: configtooldoc.h,v 1.13 2001/06/11 14:22:31 julians Exp $
// Purpose:
// Description: Header file for ecConfigToolDoc
// Requires:
@@ -81,6 +81,7 @@ public:
virtual bool OnSaveDocument(const wxString& filename);
virtual bool OnNewDocument() { return TRUE; }
virtual bool OnCloseDocument() ;
+ virtual bool Save(); // Overridden only to correct bug in wxWindows, docview.cpp
//// Error and other handlers
static void CdlLoadErrorHandler(std::string message);
diff --git a/host/tools/configtool/standalone/wxwin/msgdlgex.cpp b/host/tools/configtool/standalone/wxwin/msgdlgex.cpp
--- a/host/tools/configtool/standalone/wxwin/msgdlgex.cpp
+++ b/host/tools/configtool/standalone/wxwin/msgdlgex.cpp
@@ -4,9 +4,25 @@
// Author: Julian Smart
// Modified by:
// Created: 12/12/2000
-// RCS-ID: $Id: msgdlgex.cpp,v 1.1 2001/02/08 18:06:51 julians Exp $
+// RCS-ID: $Id: msgdlgex.cpp,v 1.2 2001/06/11 14:22:31 julians Exp $
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+//
+// This program is part of the eCos host tools.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 of the License, or (at your option)
+// any later version.
+//
+// This program 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 General Public License for
+// more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
diff --git a/host/tools/configtool/standalone/wxwin/msgdlgex.h b/host/tools/configtool/standalone/wxwin/msgdlgex.h
--- a/host/tools/configtool/standalone/wxwin/msgdlgex.h
+++ b/host/tools/configtool/standalone/wxwin/msgdlgex.h
@@ -4,9 +4,25 @@
// Author: Julian Smart
// Modified by:
// Created: 12/12/2000
-// RCS-ID: $Id: msgdlgex.h,v 1.1 2001/02/08 18:06:51 julians Exp $
+// RCS-ID: $Id: msgdlgex.h,v 1.2 2001/06/11 14:22:31 julians Exp $
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+//
+// This program is part of the eCos host tools.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 of the License, or (at your option)
+// any later version.
+//
+// This program 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 General Public License for
+// more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_MSGDLGEX_H_
diff --git a/host/tools/configtool/standalone/wxwin/readme.html b/host/tools/configtool/standalone/wxwin/readme.html
--- a/host/tools/configtool/standalone/wxwin/readme.html
+++ b/host/tools/configtool/standalone/wxwin/readme.html
@@ -84,7 +84,7 @@ from configtool-2.0-i386.tar.gz.
+Unarchive the tar file into a suitable directory and add the
directory to your path. You do not have to install it as root. For
example:
@@ -107,7 +107,7 @@ warnings.
does require the GTK+ 1.2, GDK 1.2 and TCL 8.x libraries to be
installed.
Run the installer provided, preferably having installed eCos for
Windows on your PC previously so the tool can pick up the relevant
registry information added by the eCos installer. A new eCos
@@ -211,7 +211,9 @@ wxgtkfix
from:a suitable version of wxWindows for GTK+, available from
ftp://sources.redhat.com/pub/ecos/ct2/.
- Unarchive the file wxGTK-x.y.z.tgz into a suitable directory,
+
Unarchive the file wxGTK-x.y.z.tar.bz2 (downloaded from
+
+ ftp://sources.redhat.com/pub/ecos/ct2/) into a suitable directory,
e.g.
% mkdir /home/julians/wxWindows
% cd /home/julians/wxWindows
%
diff --git a/host/tools/configtool/standalone/wxwin/setup/configtool.iss b/host/tools/configtool/standalone/wxwin/setup/configtool.iss
--- a/host/tools/configtool/standalone/wxwin/setup/configtool.iss
+++ b/host/tools/configtool/standalone/wxwin/setup/configtool.iss
@@ -4,13 +4,13 @@
[Setup]
MinVersion=4.0,4.0
- AppName=eCos Configuration Tool 2.0
+ AppName=eCos Configuration Tool 2.01
AppId=eCos Configuration Tool
CreateUninstallRegKey=1
UsePreviousAppDir=1
UsePreviousGroup=1
- AppVersion=2.0
- AppVerName=eCos Configuration Tool 2.0
+ AppVersion=2.01
+ AppVerName=eCos Configuration Tool 2.01
AppCopyright=Copyright © Red Hat Inc., 2001
BackColor=$FF0000
BackColor2=$000000
@@ -214,7 +214,7 @@
; DO NOT DELETE THEM or you may be unable to reload the script
;[ScriptSetup]
-;VerNum=2.0
+;VerNum=2.01
;InnoVer=1.3
;AddVerTo=AppVerName
;SetupFilename=setup.exe
diff --git a/host/tools/configtool/standalone/wxwin/setup/makesetup.sh b/host/tools/configtool/standalone/wxwin/setup/makesetup.sh
--- a/host/tools/configtool/standalone/wxwin/setup/makesetup.sh
+++ b/host/tools/configtool/standalone/wxwin/setup/makesetup.sh
@@ -27,7 +27,7 @@ findversion()
{
echo "#include " > /tmp/ctver.c
echo "#include \"symbols.h\"" >> /tmp/ctver.c
- echo "int main() { printf(\"%.1f\", ecCONFIGURATION_TOOL_VERSION); }" >> /tmp/ctver.c
+ echo "int main() { printf(\"%.2f\", ecCONFIGURATION_TOOL_VERSION); }" >> /tmp/ctver.c
gcc /tmp/ctver.c -I$CONFIGTOOLDIR -o /tmp/ctver
VERSION=`/tmp/ctver`
rm -f /tmp/ctver /tmp/ctver.c
diff --git a/host/tools/configtool/standalone/wxwin/setup/maketarball.sh b/host/tools/configtool/standalone/wxwin/setup/maketarball.sh
--- a/host/tools/configtool/standalone/wxwin/setup/maketarball.sh
+++ b/host/tools/configtool/standalone/wxwin/setup/maketarball.sh
@@ -19,13 +19,13 @@ VERSION=$4
dotar()
{
- rm -f -r $DEST/configtool
- rm -f $DEST/configtool-*.tgz
+ rm -f -r $DEST/configtool*
+ rm -f $DEST/configtool-*.*
- mkdir -p $DEST/configtool
- mkdir -p $DEST/configtool/manual
- mkdir -p $DEST/configtool/manual/pix
- cd $DEST/configtool
+ mkdir -p $DEST/configtool-$VERSION
+ mkdir -p $DEST/configtool-$VERSION/manual
+ mkdir -p $DEST/configtool-$VERSION/manual/pix
+ cd $DEST/configtool-$VERSION
cp $SRC/*.htm .
cp $SRC/*.png .
@@ -33,16 +33,20 @@ dotar()
cp $SRC/README.txt .
cp "$ECOSDIR/ecc/release/eCos Install/Setup Files/Uncompressed Files/Disk1/license.txt" .
cp $BINARYSRC/configtool .
- cp $CONFIGTOOLDIR/manual/*.html $CONFIGTOOLDIR/manual/*.css $CONFIGTOOLDIR/manual/*.gif $DEST/configtool/manual
- cp $CONFIGTOOLDIR/manual/pix/*.gif $DEST/configtool/manual/pix
+ cp $CONFIGTOOLDIR/manual/*.html $CONFIGTOOLDIR/manual/*.css $CONFIGTOOLDIR/manual/*.gif manual
+ cp $CONFIGTOOLDIR/manual/pix/*.gif manual/pix
strip configtool
if [ "$UPX" != "0" ]; then
upx configtool
fi
+
+ cd ..
- tar cvfz $DEST/configtool-$VERSION.tgz *
+ tar cvf $DEST/configtool-$VERSION-i386.tar configtool-$VERSION/*
+ gzip -c $DEST/configtool-$VERSION-i386.tar > $DEST/configtool-$VERSION-i386.tar.gz
+ bzip2 -c $DEST/configtool-$VERSION-i386.tar > $DEST/configtool-$VERSION-i386.tar.bz2
}
dobuild()
diff --git a/host/tools/configtool/standalone/wxwin/splittree.cpp b/host/tools/configtool/standalone/wxwin/splittree.cpp
--- a/host/tools/configtool/standalone/wxwin/splittree.cpp
+++ b/host/tools/configtool/standalone/wxwin/splittree.cpp
@@ -6,9 +6,25 @@
// Author: Julian Smart
// Modified by:
// Created: 8/7/2000
-// RCS-ID: $Id: splittree.cpp,v 1.5 2001/05/01 17:18:47 julians Exp $
+// RCS-ID: $Id: splittree.cpp,v 1.7 2001/06/11 14:49:49 julians Exp $
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+//
+// This program is part of the eCos host tools.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 of the License, or (at your option)
+// any later version.
+//
+// This program 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 General Public License for
+// more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
@@ -313,19 +329,8 @@ void wxRemotelyScrolledTreeCtrl::CalcTre
if (GetBoundingRect(id, itemSize))
{
rect = CombineRectangles(rect, itemSize);
-#if 0
- wxString msg;
- wxString name = GetItemText(id);
- msg.Printf("Item rect for %s (%d) is %dx%d, %dx%d", (const wxChar*) name, g_count, itemSize.x, itemSize.y, itemSize.width, itemSize.height);
- wxLogDebug(msg);
- g_count ++;
-#endif
}
- else
- {
- //wxLogDebug("Couldn't get size.");
- }
-
+
long cookie;
wxTreeItemId childId = GetFirstChild(id, cookie);
while (childId != 0)
@@ -439,7 +444,7 @@ void wxTreeCompanionWindow::OnPaint(wxPa
dc.DrawLine(0, cy, clientSize.x, cy);
}
}
- if (m_treeCtrl->GetBoundingRect(lastH, itemRect))
+ if (lastH.IsOk() && m_treeCtrl->GetBoundingRect(lastH, itemRect))
{
cy = itemRect.GetBottom();
dc.DrawLine(0, cy, clientSize.x, cy);
diff --git a/host/tools/configtool/standalone/wxwin/splittree.h b/host/tools/configtool/standalone/wxwin/splittree.h
--- a/host/tools/configtool/standalone/wxwin/splittree.h
+++ b/host/tools/configtool/standalone/wxwin/splittree.h
@@ -6,9 +6,25 @@
// Author: Julian Smart
// Modified by:
// Created: 8/7/2000
-// RCS-ID: $Id: splittree.h,v 1.2 2001/05/01 17:18:47 julians Exp $
+// RCS-ID: $Id: splittree.h,v 1.3 2001/06/11 14:22:31 julians Exp $
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+//
+// This program is part of the eCos host tools.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 of the License, or (at your option)
+// any later version.
+//
+// This program 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 General Public License for
+// more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_SPLITTREE_H_
diff --git a/host/tools/configtool/standalone/wxwin/symbols.h b/host/tools/configtool/standalone/wxwin/symbols.h
--- a/host/tools/configtool/standalone/wxwin/symbols.h
+++ b/host/tools/configtool/standalone/wxwin/symbols.h
@@ -30,7 +30,7 @@
// Author(s): julians
// Contact(s): julians
// Date: 2001/05/14
-// Version: $Id: symbols.h,v 1.2 2001/05/16 10:24:00 julians Exp $
+// Version: $Id: symbols.h,v 1.3 2001/06/11 14:36:05 julians Exp $
// Purpose:
// Description: Some important symbols, such as the version
// Requires:
@@ -43,5 +43,5 @@
//
//===========================================================================
-#define ecCONFIGURATION_TOOL_VERSION 2.0
-#define ecCONFIGURATION_TOOL_VERSION_STRING "2.0"
+#define ecCONFIGURATION_TOOL_VERSION 2.01
+#define ecCONFIGURATION_TOOL_VERSION_STRING "2.01"
diff --git a/packages/NEWS b/packages/NEWS
--- a/packages/NEWS
+++ b/packages/NEWS
@@ -2,9 +2,9 @@
* C library now supports multiple locales with multibyte character set support,
and the possibility of plugging in more. Current locales supported
are now C, C-SJIS, C-EUCJP and C-JIS.
-* Major reorganization of x86 HAL. Support for RedBoot added. i82559
- ethernet driver added (Intel Etherexpress). Synthetic HAL redesigned
- and moved to separate hal/synth hierarchy.
+* Major reorganization of x86 HAL. Support for RedBoot and PCI added, based on
+ Fabrice Gautier's patches. i82559 ethernet driver added (Intel Etherexpress).
+ Synthetic HAL redesigned and moved to separate hal/synth hierarchy.
* Added ethernet drivers for SMSC lan91cxx
* Added driver for Motorola PowerPC 8xxT "Fast Ethernet Controller".
* Added support for Analogue & Micro "viper" - PowerPC 860T based
diff --git a/packages/compat/posix/current/ChangeLog b/packages/compat/posix/current/ChangeLog
--- a/packages/compat/posix/current/ChangeLog
+++ b/packages/compat/posix/current/ChangeLog
@@ -1,3 +1,13 @@
+2001-06-14 Jonathan Larmour
+
+ * src/pthread.cxx (pthread_attr_setstacksize): Correct stack
+ size assertion.
+
+2001-06-12 Jonathan Larmour
+
+ * src/pthread.cxx (MAIN_DEFAULT_STACK_SIZE): Define to use at
+ least PTHREAD_STACK_MIN for main_stack.
+
2001-05-01 Nick Garnett
[x86 branch]
diff --git a/packages/compat/posix/current/src/pthread.cxx b/packages/compat/posix/current/src/pthread.cxx
--- a/packages/compat/posix/current/src/pthread.cxx
+++ b/packages/compat/posix/current/src/pthread.cxx
@@ -156,7 +156,11 @@ static pthread_t thread_id_cookie = THRE
//-----------------------------------------------------------------------------
// Main thread.
-static char main_stack[CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE];
+#define MAIN_DEFAULT_STACK_SIZE \
+ (CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE < PTHREAD_STACK_MIN \
+ ? PTHREAD_STACK_MIN : CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE)
+
+static char main_stack[MAIN_DEFAULT_STACK_SIZE];
// Thread ID of main thread.
static pthread_t main_thread;
@@ -412,8 +416,8 @@ externC void cyg_posix_pthread_start( vo
pthread_attr_init( &attr );
pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
- pthread_attr_setstackaddr( &attr, &main_stack[CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE] );
- pthread_attr_setstacksize( &attr, CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE );
+ pthread_attr_setstackaddr( &attr, &main_stack[sizeof(main_stack)] );
+ pthread_attr_setstacksize( &attr, sizeof(main_stack) );
pthread_attr_setschedpolicy( &attr, SCHED_RR );
pthread_attr_setschedparam( &attr, &schedparam );
@@ -1177,7 +1181,7 @@ externC int pthread_attr_setstacksize (p
PTHREAD_CHECK(attr);
- CYG_ASSERT( stacksize > PTHREAD_STACK_MIN, "Inadequate stack size supplied");
+ CYG_ASSERT( stacksize >= PTHREAD_STACK_MIN, "Inadequate stack size supplied");
// Reject inadequate stack sizes
if( stacksize < PTHREAD_STACK_MIN )
diff --git a/packages/devs/flash/amd/am29xxxxx/current/ChangeLog b/packages/devs/flash/amd/am29xxxxx/current/ChangeLog
--- a/packages/devs/flash/amd/am29xxxxx/current/ChangeLog
+++ b/packages/devs/flash/amd/am29xxxxx/current/ChangeLog
@@ -1,3 +1,14 @@
+2001-06-11 Jesper Skov
+
+ * include/flash_am29xxxxx.inl: Traverse by incrementing
+ driver-global pointer variable.
+
+2001-06-11 David Howells
+
+ * include/flash_am29xxxxx.inl: actually traverse the list of
+ supported devices, rather than checking the first entry several
+ times
+
2001-06-08 Jesper Skov
* include/flash_am29xxxxx_parts.inl: New file with just part
diff --git a/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx.inl b/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx.inl
--- a/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx.inl
+++ b/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx.inl
@@ -55,6 +55,7 @@
//==========================================================================
#include
+#include
#include
#include
#include CYGHWR_MEMORY_LAYOUT_H
@@ -184,6 +185,7 @@ flash_hwr_init(void)
for (i = 0; i < NUM_DEVICES; i++) {
if (flash_dev_info->device_id == id[1])
break;
+ flash_dev_info++;
}
// Did we find the device? If not, return error.
diff --git a/packages/devs/flash/arm/ebsa285/current/ChangeLog b/packages/devs/flash/arm/ebsa285/current/ChangeLog
--- a/packages/devs/flash/arm/ebsa285/current/ChangeLog
+++ b/packages/devs/flash/arm/ebsa285/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-11 Gary Thomas
+
+ * src/ebsa285_flash.c: Remove dependency on printf() via user functions.
+
2001-05-23 Jesper Skov
* cdl/flash_ebsa285.cdl: Needs IO controller to copy functions to
diff --git a/packages/devs/flash/arm/ebsa285/current/src/ebsa285_flash.c b/packages/devs/flash/arm/ebsa285/current/src/ebsa285_flash.c
--- a/packages/devs/flash/arm/ebsa285/current/src/ebsa285_flash.c
+++ b/packages/devs/flash/arm/ebsa285/current/src/ebsa285_flash.c
@@ -79,7 +79,7 @@ flash_hwr_init(void)
flash_info.end = (void *)(0x41000000+(num_regions*region_size));
return FLASH_ERR_OK;
} else {
- printf("Can't identify FLASH, sorry\n");
+ (*flash_info.pf)("Can't identify FLASH, sorry\n");
diag_dump_buf(data, sizeof(data));
return FLASH_ERR_HWR;
}
diff --git a/packages/devs/flash/arm/edb7xxx/current/ChangeLog b/packages/devs/flash/arm/edb7xxx/current/ChangeLog
--- a/packages/devs/flash/arm/edb7xxx/current/ChangeLog
+++ b/packages/devs/flash/arm/edb7xxx/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-11 Gary Thomas
+
+ * src/edb7xxx_flash.c: Remove dependency on printf() via user functions.
+
2001-05-23 Jesper Skov
* cdl/flash_edb7xxx.cdl: Needs IO controller to copy functions to
@@ -12,7 +16,7 @@ 2000-12-05 Jonathan Larmour
* src/edb7xxx_flash.c (flash_hwr_init): Additional debugging
- printf statments - in case this stuff fails in the future.
+ (*flash_info.pf) statments - in case this stuff fails in the future.
2000-11-21 Gary Thomas
diff --git a/packages/devs/flash/arm/edb7xxx/current/src/edb7xxx_flash.c b/packages/devs/flash/arm/edb7xxx/current/src/edb7xxx_flash.c
--- a/packages/devs/flash/arm/edb7xxx/current/src/edb7xxx_flash.c
+++ b/packages/devs/flash/arm/edb7xxx/current/src/edb7xxx_flash.c
@@ -73,32 +73,32 @@ flash_hwr_init(void)
volatile int *cp = 0xE0000000;
// See if the data cache is working
*cp = 0x12345678;
- printf("ROM cache:\n");
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("ROM cache:\n");
+ (*flash_info.pf)("cache test = %x\n", *cp);
HAL_DCACHE_INVALIDATE_ALL();
HAL_DCACHE_DISABLE();
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
*cp = 0xDEADDEAD;
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
HAL_DCACHE_ENABLE();
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
cp = 0x00100000;
// See if the data cache is working
*cp = 0x12345678;
- printf("RAM cache:\n");
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("RAM cache:\n");
+ (*flash_info.pf)("cache test = %x\n", *cp);
HAL_DCACHE_DISABLE();
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
*cp = 0xDEADDEAD;
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
HAL_DCACHE_ENABLE();
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
}
#endif
stat = (*_flash_query)(data);
#if 0
- printf("stat = %x\n", stat);
+ (*flash_info.pf)("stat = %x\n", stat);
dump_buf(data, sizeof(data));
#endif
@@ -107,21 +107,21 @@ flash_hwr_init(void)
volatile int cache_test;
volatile int *cp = 0xE0000000;
// See if the data cache is working
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
*cp = 0x56781234;
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
HAL_DCACHE_INVALIDATE_ALL();
HAL_DCACHE_DISABLE();
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
*cp = 0xDEADDEAD;
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
HAL_DCACHE_ENABLE();
- printf("cache test = %x\n", *cp);
+ (*flash_info.pf)("cache test = %x\n", *cp);
}
#endif
if (data[0] != FLASH_Intel_code) {
- printf("Not Intel = %x\n", data[0]);
+ (*flash_info.pf)("Not Intel = %x\n", data[0]);
return FLASH_ERR_HWR;
}
@@ -129,7 +129,7 @@ flash_hwr_init(void)
num_regions = 64*2;
region_size = 0x20000;
} else {
- printf("Unknown device type: %x\n", data[1]);
+ (*flash_info.pf)("Unknown device type: %x\n", data[1]);
return FLASH_ERR_HWR;
}
@@ -146,7 +146,7 @@ int
flash_hwr_map_error(int err)
{
if (err & 0x007E007E) {
- printf("Err = %x\n", err);
+ (*flash_info.pf)("Err = %x\n", err);
if (err & 0x00100010) {
return FLASH_ERR_PROGRAM;
} else
diff --git a/packages/devs/flash/arm/iq80310/current/ChangeLog b/packages/devs/flash/arm/iq80310/current/ChangeLog
--- a/packages/devs/flash/arm/iq80310/current/ChangeLog
+++ b/packages/devs/flash/arm/iq80310/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-11 Gary Thomas
+
+ * src/iq80310_flash.c: Remove dependency on printf() via user functions.
+
2001-05-23 Jesper Skov
* cdl/flash_iq80310.cdl: Needs IO controller to copy functions to
diff --git a/packages/devs/flash/arm/iq80310/current/src/iq80310_flash.c b/packages/devs/flash/arm/iq80310/current/src/iq80310_flash.c
--- a/packages/devs/flash/arm/iq80310/current/src/iq80310_flash.c
+++ b/packages/devs/flash/arm/iq80310/current/src/iq80310_flash.c
@@ -84,7 +84,7 @@ flash_hwr_init(void)
flash_info.end = (void *)(0x00000000+(num_regions*region_size));
return FLASH_ERR_OK;
} else {
- printf("Can't identify FLASH sorry\n");
+ (*flash_info.pf)("Can't identify FLASH sorry\n");
diag_dump_buf(data, sizeof(data));
return FLASH_ERR_HWR;
}
@@ -95,7 +95,7 @@ int
flash_hwr_map_error(int err)
{
if (err & 0x7E) {
- printf("Err = %x\n", err);
+ (*flash_info.pf)("Err = %x\n", err);
if (err & 0x10) {
return FLASH_ERR_PROGRAM;
} else
diff --git a/packages/devs/flash/arm/sa1100mm/current/ChangeLog b/packages/devs/flash/arm/sa1100mm/current/ChangeLog
--- a/packages/devs/flash/arm/sa1100mm/current/ChangeLog
+++ b/packages/devs/flash/arm/sa1100mm/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-11 Gary Thomas
+
+ * src/sa1100mm_flash.c: Remove dependency on printf() via user functions.
+
2001-05-23 Jesper Skov
* cdl/flash_sa1100mm.cdl: Needs IO controller to copy functions to
diff --git a/packages/devs/flash/arm/sa1100mm/current/src/sa1100mm_flash.c b/packages/devs/flash/arm/sa1100mm/current/src/sa1100mm_flash.c
--- a/packages/devs/flash/arm/sa1100mm/current/src/sa1100mm_flash.c
+++ b/packages/devs/flash/arm/sa1100mm/current/src/sa1100mm_flash.c
@@ -81,7 +81,7 @@ flash_hwr_init(void)
flash_info.end = (void *)(0x08000000+(num_regions*region_size));
return FLASH_ERR_OK;
} else {
- printf("Can't identify FLASH, sorry\n");
+ (*flash_info.pf)("Can't identify FLASH, sorry\n");
diag_dump_buf(data, sizeof(data));
return FLASH_ERR_HWR;
}
diff --git a/packages/devs/flash/intel/bootblock/current/ChangeLog b/packages/devs/flash/intel/bootblock/current/ChangeLog
--- a/packages/devs/flash/intel/bootblock/current/ChangeLog
+++ b/packages/devs/flash/intel/bootblock/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-11 Gary Thomas
+
+ * src/bootblock_flash.c:Remove dependency on printf() via user functions.
+
2001-05-23 Jesper Skov
* cdl/flash_intel_bootblock.cdl: Needs IO driver to copy functions
diff --git a/packages/devs/flash/intel/bootblock/current/src/bootblock_flash.c b/packages/devs/flash/intel/bootblock/current/src/bootblock_flash.c
--- a/packages/devs/flash/intel/bootblock/current/src/bootblock_flash.c
+++ b/packages/devs/flash/intel/bootblock/current/src/bootblock_flash.c
@@ -71,12 +71,12 @@ flash_hwr_init(void)
HAL_ICACHE_INVALIDATE_ALL(); // is also required to avoid old contents
stat = (*_flash_query)(data);
#if DEBUG
- printf("stat = %x\n", stat);
+ (*flash_info.pf)("stat = %x\n", stat);
dump_buf(data, sizeof(data));
#endif
if (data[0] != FLASH_Intel_code) {
- printf("Not Intel = %x\n", data[0]);
+ (*flash_info.pf)("Not Intel = %x\n", data[0]);
return FLASH_ERR_HWR;
}
@@ -88,7 +88,7 @@ flash_hwr_init(void)
num_regions = 32; // (only use one for now)*4; // 4 devices in serial, each having 32 regions
region_size = 0x10000;
} else {
- printf("Unknown device type: %x\n", data[1]);
+ (*flash_info.pf)("Unknown device type: %x\n", data[1]);
return FLASH_ERR_HWR;
}
@@ -111,7 +111,7 @@ int
flash_hwr_map_error(int err)
{
if (err & 0x007E007E) {
- printf("Err = %x\n", err);
+ (*flash_info.pf)("Err = %x\n", err);
if (err & 0x00400040) {
return FLASH_ERR_ERASE_SUSPEND;
} else
diff --git a/packages/devs/flash/intel/strata/current/ChangeLog b/packages/devs/flash/intel/strata/current/ChangeLog
--- a/packages/devs/flash/intel/strata/current/ChangeLog
+++ b/packages/devs/flash/intel/strata/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-11 Gary Thomas
+
+ * src/strata.c: Remove dependency on printf() via user functions.
+
2001-06-07 Hugo Tyson
* src/strata.c (flash_hwr_init): If we find a flash device that is
diff --git a/packages/devs/flash/intel/strata/current/src/strata.c b/packages/devs/flash/intel/strata/current/src/strata.c
--- a/packages/devs/flash/intel/strata/current/src/strata.c
+++ b/packages/devs/flash/intel/strata/current/src/strata.c
@@ -145,7 +145,7 @@ flash_hwr_init(void)
x = (~(CYGNUM_FLASH_BASE_MASK)) + 1; // expected device size
x += (unsigned int)flash_info.start;
if ( x < (unsigned int)flash_info.end ) { // 2nd sanity check
- printf("\nFLASH: Oversized device! End addr %p changed to %p\n",
+ (*flash_info.pf)("\nFLASH: Oversized device! End addr %p changed to %p\n",
flash_info.end, (void *)x );
flash_info.end = (void *)x;
}
@@ -155,7 +155,7 @@ flash_hwr_init(void)
return FLASH_ERR_OK;
}
flash_type_unknown:
- printf("Can't identify FLASH, sorry, man %x, dev %x, id [%4s] stat %x\n",
+ (*flash_info.pf)("Can't identify FLASH, sorry, man %x, dev %x, id [%4s] stat %x\n",
qp->manuf_code, qp->device_code, qp->id, stat );
diag_dump_buf(qp, sizeof(data));
return FLASH_ERR_HWR;
@@ -166,7 +166,7 @@ int
flash_hwr_map_error(int err)
{
if (err & FLASH_ErrorMask) {
- printf("Err = %x\n", err);
+ (*flash_info.pf)("Err = %x\n", err);
if (err & FLASH_ErrorProgram)
return FLASH_ERR_PROGRAM;
else if (err & FLASH_ErrorErase)
diff --git a/packages/devs/flash/mips/atlas/current/ChangeLog b/packages/devs/flash/mips/atlas/current/ChangeLog
--- a/packages/devs/flash/mips/atlas/current/ChangeLog
+++ b/packages/devs/flash/mips/atlas/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-11 Gary Thomas
+
+ * src/atlas_flash.c: Remove dependency on printf() via user functions.
+
2001-05-23 Jesper Skov
* cdl/flash_atlas.cdl: Needs IO controller to copy functions to
diff --git a/packages/devs/flash/mips/atlas/current/src/atlas_flash.c b/packages/devs/flash/mips/atlas/current/src/atlas_flash.c
--- a/packages/devs/flash/mips/atlas/current/src/atlas_flash.c
+++ b/packages/devs/flash/mips/atlas/current/src/atlas_flash.c
@@ -82,7 +82,7 @@ flash_hwr_init(void)
flash_info.end = (void *)0x9e000000;
return FLASH_ERR_OK;
} else {
- printf("Can't identify FLASH, sorry\n");
+ (*flash_info.pf)("Can't identify FLASH, sorry\n");
diag_dump_buf(data, sizeof(data));
return FLASH_ERR_HWR;
}
@@ -93,7 +93,7 @@ int
flash_hwr_map_error(int err)
{
if (err & 0x007E007E) {
- printf("Err = %x\n", err);
+ (*flash_info.pf)("Err = %x\n", err);
if (err & 0x00100010) {
return FLASH_ERR_PROGRAM;
} else
diff --git a/packages/devs/flash/powerpc/viper/current/ChangeLog b/packages/devs/flash/powerpc/viper/current/ChangeLog
--- a/packages/devs/flash/powerpc/viper/current/ChangeLog
+++ b/packages/devs/flash/powerpc/viper/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-11 Gary Thomas
+
+ * src/viper_flash.c: Remove dependency on printf() via user functions.
+
2001-05-23 Jesper Skov
* cdl/flash_viper.cdl: Needs IO controller to copy functions to
diff --git a/packages/devs/flash/powerpc/viper/current/src/viper_flash.c b/packages/devs/flash/powerpc/viper/current/src/viper_flash.c
--- a/packages/devs/flash/powerpc/viper/current/src/viper_flash.c
+++ b/packages/devs/flash/powerpc/viper/current/src/viper_flash.c
@@ -69,7 +69,7 @@ flash_hwr_init(void)
stat = (*_flash_query)(info);
#if 0
- printf("stat = %x\n", stat);
+ (*flash_info.pf)("stat = %x\n", stat);
dump_buf(info, sizeof(info));
#endif
@@ -86,7 +86,7 @@ int
flash_hwr_map_error(int err)
{
if (err & 0x007E007E) {
- printf("Err = %x\n", err);
+ (*flash_info.pf)("Err = %x\n", err);
if (err & 0x00100010) {
return FLASH_ERR_PROGRAM;
} else
diff --git a/packages/hal/arm/edb7xxx/current/ChangeLog b/packages/hal/arm/edb7xxx/current/ChangeLog
--- a/packages/hal/arm/edb7xxx/current/ChangeLog
+++ b/packages/hal/arm/edb7xxx/current/ChangeLog
@@ -1,3 +1,10 @@
+2001-06-08 Gary Thomas
+
+ * support/dl_edb7xxx.c: Change use of 'CharReady()' which seems
+ to be unreliable on Windows/CygWin. These changes should make
+ this program work on Windows when built via CygWin. Suggested
+ by Lewin A.R.W. Edwards .
+
2001-05-29 Jonathan Larmour
* include/hal_platform_setup.h: Use correct 7209 define.
diff --git a/packages/hal/arm/edb7xxx/current/support/dl_edb7xxx.c b/packages/hal/arm/edb7xxx/current/support/dl_edb7xxx.c
--- a/packages/hal/arm/edb7xxx/current/support/dl_edb7xxx.c
+++ b/packages/hal/arm/edb7xxx/current/support/dl_edb7xxx.c
@@ -12,6 +12,10 @@
#include
#include "bootcode.h"
+#ifndef _WIN32
+#define CHAR_READY_IS_RELIABLE
+#endif
+
#define DEFAULT_PORT "/dev/ttyS1"
extern char ReceiveChar(long);
extern void SendChar(long, char);
@@ -199,10 +203,12 @@ main(int argc, char *argv[])
//
// Empty out the input queue.
//
+#ifdef CHAR_READY_IS_RELIABLE
while(CharReady(lPort))
{
cChar = ReceiveChar(lPort);
}
+#endif
//
// Tell the user to reset the board.
@@ -284,7 +290,11 @@ main(int argc, char *argv[])
//
// See if there is a character waiting to be read.
//
+#ifdef CHAR_READY_IS_RELIABLE
if(CharReady(lPort))
+#else
+ if (1)
+#endif
{
//
// Read the character.
@@ -304,10 +314,12 @@ main(int argc, char *argv[])
//
// Empty out the input queue.
//
+#ifdef CHAR_READY_IS_RELIABLE
while(CharReady(lPort))
{
cChar = ReceiveChar(lPort);
}
+#endif
//
// Send the program flash command.
diff --git a/packages/hal/arm/sa11x0/ipaq/current/images/MD5SUMS b/packages/hal/arm/sa11x0/ipaq/current/images/MD5SUMS
new file mode 100644
--- /dev/null
+++ b/packages/hal/arm/sa11x0/ipaq/current/images/MD5SUMS
@@ -0,0 +1,13 @@
+4b36faf83910e115b7abfb31811bd880 OSloader
+35c584d189f5c2fad2a1188e50558138 redboot_Compaq.elf
+8dfc76586574ffd92acf3af4eb757513 redboot_RAM.elf
+2c90a1c5d3445447461c44923bea156c redboot_ROM.elf
+36a3b851497e21a8ca2c5d853b06ae37 redboot_WinCE.elf
+d7b2c2a60fd10b2511d191da139a205d redboot_Compaq.bin
+f528f043d26a7b03509603416cc7773a redboot_RAM.bin
+3a135dfd032188ca41638d3779dc77b9 redboot_ROM.bin
+c56b54ccc82343bbdacbc4b159a4a2b6 redboot_WinCE.bin
+f633ac4f2ca87d10a2455e460408990a redboot_Compaq.srec
+a3f6b6d734ceb50d367ca1cb4c8b897e redboot_RAM.srec
+427a5872fba348b30a40d5e5128f0539 redboot_ROM.srec
+ebe45b05fe1d8c3e6ea91190a2011264 redboot_WinCE.srec
diff --git a/packages/hal/arm/sa11x0/ipaq/current/images/redboot_RAM.bin b/packages/hal/arm/sa11x0/ipaq/current/images/redboot_RAM.bin
index 6c6284cafec6c7663bc9dada079d1b8da45dc958..d24a56835c1bd892c3ca9eb97fb43840119b41ed
GIT binary patch
literal 158436
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