-rw-r--r-- | noncore/net/wellenreiter/gui/configwindow.cpp | 3 | ||||
-rwxr-xr-x | noncore/net/wellenreiter/makedist.sh | 5 |
2 files changed, 6 insertions, 2 deletions
diff --git a/noncore/net/wellenreiter/gui/configwindow.cpp b/noncore/net/wellenreiter/gui/configwindow.cpp index 3ec190b..f82c088 100644 --- a/noncore/net/wellenreiter/gui/configwindow.cpp +++ b/noncore/net/wellenreiter/gui/configwindow.cpp | |||
@@ -1,228 +1,231 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. | 2 | ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Opie Environment. | 4 | ** This file is part of Opie Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | **********************************************************************/ | 14 | **********************************************************************/ |
15 | 15 | ||
16 | /* LOCAL */ | 16 | /* LOCAL */ |
17 | #include "configwindow.h" | 17 | #include "configwindow.h" |
18 | #include "mainwindow.h" | 18 | #include "mainwindow.h" |
19 | 19 | ||
20 | /* QT */ | 20 | /* QT */ |
21 | #include <qapplication.h> | 21 | #include <qapplication.h> |
22 | #include <qcheckbox.h> | 22 | #include <qcheckbox.h> |
23 | #include <qcombobox.h> | 23 | #include <qcombobox.h> |
24 | #include <qfile.h> | 24 | #include <qfile.h> |
25 | #include <qlineedit.h> | 25 | #include <qlineedit.h> |
26 | #include <qlayout.h> | 26 | #include <qlayout.h> |
27 | #include <qmap.h> | 27 | #include <qmap.h> |
28 | #include <qpushbutton.h> | 28 | #include <qpushbutton.h> |
29 | #include <qtoolbutton.h> | 29 | #include <qtoolbutton.h> |
30 | #include <qspinbox.h> | 30 | #include <qspinbox.h> |
31 | #include <qtextstream.h> | 31 | #include <qtextstream.h> |
32 | 32 | ||
33 | /* OPIE */ | 33 | /* OPIE */ |
34 | #include <opie2/onetwork.h> | 34 | #include <opie2/onetwork.h> |
35 | |||
36 | #ifdef QWS | ||
35 | #include <opie2/oapplication.h> | 37 | #include <opie2/oapplication.h> |
36 | #include <opie2/oconfig.h> | 38 | #include <opie2/oconfig.h> |
39 | #endif | ||
37 | 40 | ||
38 | WellenreiterConfigWindow* WellenreiterConfigWindow::_instance = 0; | 41 | WellenreiterConfigWindow* WellenreiterConfigWindow::_instance = 0; |
39 | 42 | ||
40 | WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f ) | 43 | WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f ) |
41 | :WellenreiterConfigBase( parent, name, true, f ) | 44 | :WellenreiterConfigBase( parent, name, true, f ) |
42 | { | 45 | { |
43 | _devicetype[ "cisco" ] = DEVTYPE_CISCO; | 46 | _devicetype[ "cisco" ] = DEVTYPE_CISCO; |
44 | _devicetype[ "wlan-ng" ] = DEVTYPE_WLAN_NG; | 47 | _devicetype[ "wlan-ng" ] = DEVTYPE_WLAN_NG; |
45 | _devicetype[ "hostap" ] = DEVTYPE_HOSTAP; | 48 | _devicetype[ "hostap" ] = DEVTYPE_HOSTAP; |
46 | _devicetype[ "orinoco" ] = DEVTYPE_ORINOCO; | 49 | _devicetype[ "orinoco" ] = DEVTYPE_ORINOCO; |
47 | _devicetype[ "<manual>" ] = DEVTYPE_MANUAL; | 50 | _devicetype[ "<manual>" ] = DEVTYPE_MANUAL; |
48 | _devicetype[ "<file>" ] = DEVTYPE_FILE; | 51 | _devicetype[ "<file>" ] = DEVTYPE_FILE; |
49 | 52 | ||
50 | // gather possible interface names from ONetwork | 53 | // gather possible interface names from ONetwork |
51 | ONetwork* net = ONetwork::instance(); | 54 | ONetwork* net = ONetwork::instance(); |
52 | ONetwork::InterfaceIterator it = net->iterator(); | 55 | ONetwork::InterfaceIterator it = net->iterator(); |
53 | while ( it.current() ) | 56 | while ( it.current() ) |
54 | { | 57 | { |
55 | if ( it.current()->isWireless() ) | 58 | if ( it.current()->isWireless() ) |
56 | interfaceName->insertItem( it.current()->name() ); | 59 | interfaceName->insertItem( it.current()->name() ); |
57 | ++it; | 60 | ++it; |
58 | } | 61 | } |
59 | 62 | ||
60 | load(); | 63 | load(); |
61 | 64 | ||
62 | #ifdef Q_WS_X11 // We're on X11: adding an Ok-Button for the Dialog here | 65 | #ifdef Q_WS_X11 // We're on X11: adding an Ok-Button for the Dialog here |
63 | QPushButton* okButton = new QPushButton( "ok", this ); | 66 | QPushButton* okButton = new QPushButton( "ok", this ); |
64 | okButton->show(); | 67 | okButton->show(); |
65 | WellenreiterConfigBaseLayout->addWidget( okButton, 0, 3 ); //FIXME: rename this in configbase.ui | 68 | WellenreiterConfigBaseLayout->addWidget( okButton, 0, 3 ); //FIXME: rename this in configbase.ui |
66 | connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); | 69 | connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); |
67 | #endif | 70 | #endif |
68 | 71 | ||
69 | WellenreiterConfigWindow::_instance = this; | 72 | WellenreiterConfigWindow::_instance = this; |
70 | 73 | ||
71 | connect( deviceType, SIGNAL( activated(int) ), this, SLOT( changedDeviceType(int) ) ); | 74 | connect( deviceType, SIGNAL( activated(int) ), this, SLOT( changedDeviceType(int) ) ); |
72 | connect( getCaptureFileName, SIGNAL( clicked() ), this, SLOT( getCaptureFileNameClicked() ) ); | 75 | connect( getCaptureFileName, SIGNAL( clicked() ), this, SLOT( getCaptureFileNameClicked() ) ); |
73 | 76 | ||
74 | // make the checkbox 'channelAll' control all other channels | 77 | // make the checkbox 'channelAll' control all other channels |
75 | connect( channelAll, SIGNAL( stateChanged(int) ), this, SLOT( channelAllClicked(int) ) ); | 78 | connect( channelAll, SIGNAL( stateChanged(int) ), this, SLOT( channelAllClicked(int) ) ); |
76 | 79 | ||
77 | connect( autodetect, SIGNAL( clicked() ), this, SLOT( performAutodetection() ) ); | 80 | connect( autodetect, SIGNAL( clicked() ), this, SLOT( performAutodetection() ) ); |
78 | }; | 81 | }; |
79 | 82 | ||
80 | 83 | ||
81 | WellenreiterConfigWindow::~WellenreiterConfigWindow() | 84 | WellenreiterConfigWindow::~WellenreiterConfigWindow() |
82 | { | 85 | { |
83 | save(); | 86 | save(); |
84 | } | 87 | } |
85 | 88 | ||
86 | 89 | ||
87 | void WellenreiterConfigWindow::performAutodetection() | 90 | void WellenreiterConfigWindow::performAutodetection() |
88 | { | 91 | { |
89 | //TODO: insert modal splash screen here | 92 | //TODO: insert modal splash screen here |
90 | // and sleep a second, so that it looks | 93 | // and sleep a second, so that it looks |
91 | // like we're actually doing something fancy... ;-) | 94 | // like we're actually doing something fancy... ;-) |
92 | 95 | ||
93 | qDebug( "WellenreiterConfigWindow::performAutodetection()" ); | 96 | qDebug( "WellenreiterConfigWindow::performAutodetection()" ); |
94 | 97 | ||
95 | // try to guess device type | 98 | // try to guess device type |
96 | QFile m( "/proc/modules" ); | 99 | QFile m( "/proc/modules" ); |
97 | if ( m.open( IO_ReadOnly ) ) | 100 | if ( m.open( IO_ReadOnly ) ) |
98 | { | 101 | { |
99 | int devicetype(0); | 102 | int devicetype(0); |
100 | QString line; | 103 | QString line; |
101 | QTextStream modules( &m ); | 104 | QTextStream modules( &m ); |
102 | while( !modules.atEnd() && !devicetype ) | 105 | while( !modules.atEnd() && !devicetype ) |
103 | { | 106 | { |
104 | modules >> line; | 107 | modules >> line; |
105 | if ( line.contains( "cisco" ) ) devicetype = DEVTYPE_CISCO; | 108 | if ( line.contains( "cisco" ) ) devicetype = DEVTYPE_CISCO; |
106 | else if ( line.contains( "hostap" ) ) devicetype = DEVTYPE_HOSTAP; | 109 | else if ( line.contains( "hostap" ) ) devicetype = DEVTYPE_HOSTAP; |
107 | else if ( line.contains( "prism" ) ) devicetype = DEVTYPE_WLAN_NG; | 110 | else if ( line.contains( "prism" ) ) devicetype = DEVTYPE_WLAN_NG; |
108 | else if ( line.contains( "orinoco" ) ) devicetype = DEVTYPE_ORINOCO; | 111 | else if ( line.contains( "orinoco" ) ) devicetype = DEVTYPE_ORINOCO; |
109 | } | 112 | } |
110 | if ( devicetype ) | 113 | if ( devicetype ) |
111 | { | 114 | { |
112 | deviceType->setCurrentItem( devicetype ); | 115 | deviceType->setCurrentItem( devicetype ); |
113 | _guess = devicetype; | 116 | _guess = devicetype; |
114 | qDebug( "Wellenreiter: guessed device type to be #%d", devicetype ); | 117 | qDebug( "Wellenreiter: guessed device type to be #%d", devicetype ); |
115 | } | 118 | } |
116 | } | 119 | } |
117 | } | 120 | } |
118 | 121 | ||
119 | 122 | ||
120 | int WellenreiterConfigWindow::driverType() const | 123 | int WellenreiterConfigWindow::driverType() const |
121 | { | 124 | { |
122 | QString name = deviceType->currentText(); | 125 | QString name = deviceType->currentText(); |
123 | if ( _devicetype.contains( name ) ) | 126 | if ( _devicetype.contains( name ) ) |
124 | { | 127 | { |
125 | return _devicetype[name]; | 128 | return _devicetype[name]; |
126 | } | 129 | } |
127 | else | 130 | else |
128 | { | 131 | { |
129 | return 0; | 132 | return 0; |
130 | } | 133 | } |
131 | }; | 134 | }; |
132 | 135 | ||
133 | 136 | ||
134 | int WellenreiterConfigWindow::hoppingInterval() const | 137 | int WellenreiterConfigWindow::hoppingInterval() const |
135 | { | 138 | { |
136 | return hopInterval->cleanText().toInt(); | 139 | return hopInterval->cleanText().toInt(); |
137 | } | 140 | } |
138 | 141 | ||
139 | 142 | ||
140 | bool WellenreiterConfigWindow::usePrismHeader() const | 143 | bool WellenreiterConfigWindow::usePrismHeader() const |
141 | { | 144 | { |
142 | return prismHeader->isChecked(); | 145 | return prismHeader->isChecked(); |
143 | } | 146 | } |
144 | 147 | ||
145 | 148 | ||
146 | bool WellenreiterConfigWindow::isChannelChecked( int channel ) const | 149 | bool WellenreiterConfigWindow::isChannelChecked( int channel ) const |
147 | { | 150 | { |
148 | switch ( channel ) | 151 | switch ( channel ) |
149 | { | 152 | { |
150 | case 1: return channel1->isOn(); | 153 | case 1: return channel1->isOn(); |
151 | case 2: return channel2->isOn(); | 154 | case 2: return channel2->isOn(); |
152 | case 3: return channel3->isOn(); | 155 | case 3: return channel3->isOn(); |
153 | case 4: return channel4->isOn(); | 156 | case 4: return channel4->isOn(); |
154 | case 5: return channel5->isOn(); | 157 | case 5: return channel5->isOn(); |
155 | case 6: return channel6->isOn(); | 158 | case 6: return channel6->isOn(); |
156 | case 7: return channel7->isOn(); | 159 | case 7: return channel7->isOn(); |
157 | case 8: return channel8->isOn(); | 160 | case 8: return channel8->isOn(); |
158 | case 9: return channel9->isOn(); | 161 | case 9: return channel9->isOn(); |
159 | case 10: return channel10->isOn(); | 162 | case 10: return channel10->isOn(); |
160 | case 11: return channel11->isOn(); | 163 | case 11: return channel11->isOn(); |
161 | case 12: return channel12->isOn(); | 164 | case 12: return channel12->isOn(); |
162 | case 13: return channel13->isOn(); | 165 | case 13: return channel13->isOn(); |
163 | case 14: return channel14->isOn(); | 166 | case 14: return channel14->isOn(); |
164 | } | 167 | } |
165 | } | 168 | } |
166 | 169 | ||
167 | 170 | ||
168 | void WellenreiterConfigWindow::changedDeviceType(int t) | 171 | void WellenreiterConfigWindow::changedDeviceType(int t) |
169 | { | 172 | { |
170 | if ( t != DEVTYPE_FILE ) return; | 173 | if ( t != DEVTYPE_FILE ) return; |
171 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(false); | 174 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(false); |
172 | if ( !name.isEmpty() && QFile::exists( name ) ) | 175 | if ( !name.isEmpty() && QFile::exists( name ) ) |
173 | { | 176 | { |
174 | interfaceName->insertItem( name ); | 177 | interfaceName->insertItem( name ); |
175 | interfaceName->setCurrentItem( interfaceName->count()-1 ); | 178 | interfaceName->setCurrentItem( interfaceName->count()-1 ); |
176 | } | 179 | } |
177 | else | 180 | else |
178 | { | 181 | { |
179 | deviceType->setCurrentItem( _guess ); | 182 | deviceType->setCurrentItem( _guess ); |
180 | } | 183 | } |
181 | 184 | ||
182 | } | 185 | } |
183 | 186 | ||
184 | 187 | ||
185 | void WellenreiterConfigWindow::getCaptureFileNameClicked() | 188 | void WellenreiterConfigWindow::getCaptureFileNameClicked() |
186 | { | 189 | { |
187 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(true); | 190 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(true); |
188 | qDebug( "name = %s", (const char*) name ); | 191 | qDebug( "name = %s", (const char*) name ); |
189 | if ( !name.isEmpty() ) | 192 | if ( !name.isEmpty() ) |
190 | { | 193 | { |
191 | captureFileName->setText( name ); | 194 | captureFileName->setText( name ); |
192 | } | 195 | } |
193 | } | 196 | } |
194 | 197 | ||
195 | 198 | ||
196 | void WellenreiterConfigWindow::channelAllClicked(int state) | 199 | void WellenreiterConfigWindow::channelAllClicked(int state) |
197 | { | 200 | { |
198 | bool b = state; | 201 | bool b = state; |
199 | channel1->setChecked( b ); | 202 | channel1->setChecked( b ); |
200 | channel2->setChecked( b ); | 203 | channel2->setChecked( b ); |
201 | channel3->setChecked( b ); | 204 | channel3->setChecked( b ); |
202 | channel4->setChecked( b ); | 205 | channel4->setChecked( b ); |
203 | channel5->setChecked( b ); | 206 | channel5->setChecked( b ); |
204 | channel6->setChecked( b ); | 207 | channel6->setChecked( b ); |
205 | channel7->setChecked( b ); | 208 | channel7->setChecked( b ); |
206 | channel8->setChecked( b ); | 209 | channel8->setChecked( b ); |
207 | channel9->setChecked( b ); | 210 | channel9->setChecked( b ); |
208 | channel10->setChecked( b ); | 211 | channel10->setChecked( b ); |
209 | channel11->setChecked( b ); | 212 | channel11->setChecked( b ); |
210 | channel12->setChecked( b ); | 213 | channel12->setChecked( b ); |
211 | channel13->setChecked( b ); | 214 | channel13->setChecked( b ); |
212 | channel14->setChecked( b ); | 215 | channel14->setChecked( b ); |
213 | } | 216 | } |
214 | 217 | ||
215 | 218 | ||
216 | bool WellenreiterConfigWindow::useGPS() const | 219 | bool WellenreiterConfigWindow::useGPS() const |
217 | { | 220 | { |
218 | return enableGPS->isChecked(); | 221 | return enableGPS->isChecked(); |
219 | } | 222 | } |
220 | 223 | ||
221 | 224 | ||
222 | const QString WellenreiterConfigWindow::gpsHost() const | 225 | const QString WellenreiterConfigWindow::gpsHost() const |
223 | { | 226 | { |
224 | return useGPS() ? gpsdHost->currentText() : QString::null; | 227 | return useGPS() ? gpsdHost->currentText() : QString::null; |
225 | } | 228 | } |
226 | 229 | ||
227 | 230 | ||
228 | int WellenreiterConfigWindow::gpsPort() const | 231 | int WellenreiterConfigWindow::gpsPort() const |
diff --git a/noncore/net/wellenreiter/makedist.sh b/noncore/net/wellenreiter/makedist.sh index 64098d0..ccb9c85 100755 --- a/noncore/net/wellenreiter/makedist.sh +++ b/noncore/net/wellenreiter/makedist.sh | |||
@@ -1,54 +1,55 @@ | |||
1 | VERSION=2-1.0rc2 | 1 | VERSION=2-1.0.1-cvs |
2 | 2 | ||
3 | TGZDIR=$PWD | 3 | TGZDIR=$PWD |
4 | 4 | ||
5 | # script to make a .tgz distributable for the Wellenreiter X11 Standalone Version | 5 | # script to make a .tgz distributable for the Wellenreiter X11 Standalone Version |
6 | 6 | ||
7 | find . -name "*.o"|xargs rm -f | 7 | find . -name "*.o"|xargs rm -f |
8 | find . -name "Makefile"|xargs rm -f | 8 | find . -name "Makefile"|xargs rm -f |
9 | find . -name "*moc*"|xargs rm -f | 9 | find . -name "*moc*"|xargs rm -f |
10 | #TMPFILE=`mktemp -d -q /tmp/build.XXXXXX` | 10 | #TMPFILE=`mktemp -d -q /tmp/build.XXXXXX` |
11 | TMPFILE=/tmp/build | 11 | TMPFILE=/tmp/build |
12 | #if [ $? -ne 0 ]; then | 12 | #if [ $? -ne 0 ]; then |
13 | # echo "$0: Can't create temp file, exiting..." | 13 | # echo "$0: Can't create temp file, exiting..." |
14 | # exit 1 | 14 | # exit 1 |
15 | #fi | 15 | #fi |
16 | 16 | ||
17 | TMPDIR=$TMPFILE/wellenreiter$VERSION | 17 | TMPDIR=$TMPFILE/wellenreiter$VERSION |
18 | OUTPUT=$TMPDIR/output | 18 | OUTPUT=$TMPDIR/output |
19 | 19 | ||
20 | mkdir -p $TMPDIR/libopie2/opieui | 20 | mkdir -p $TMPDIR/libopie2/opieui |
21 | mkdir -p $TMPDIR/libopie2/opienet | 21 | mkdir -p $TMPDIR/libopie2/opienet |
22 | mkdir -p $TMPDIR/include/opie2 | 22 | mkdir -p $TMPDIR/include/opie2 |
23 | mkdir -p $OUTPUT/share/wellenreiter/pics | 23 | mkdir -p $OUTPUT/share/wellenreiter/pics |
24 | mkdir -p $OUTPUT/share/wellenreiter | 24 | mkdir -p $OUTPUT/share/wellenreiter |
25 | cp -dfR gui $TMPDIR | 25 | cp -dfR gui $TMPDIR |
26 | cp -dfR lib $TMPDIR | 26 | cp -dfR lib $TMPDIR |
27 | cp -dfR build README wellenreiter.pro $TMPDIR | 27 | cp -dfR build README wellenreiter.pro $TMPDIR |
28 | cp -dfR $OPIEDIR/pics/wellenreiter/* $OUTPUT/share/wellenreiter/ | 28 | cp -dfR $OPIEDIR/pics/wellenreiter/* $OUTPUT/share/wellenreiter/ |
29 | cp -dfR $OPIEDIR/etc/manufacturers $OUTPUT/share/wellenreiter/ | 29 | cp -dfR $OPIEDIR/etc/manufacturers $OUTPUT/share/wellenreiter/ |
30 | 30 | ||
31 | # take care about sourcefiles | 31 | # take care about sourcefiles |
32 | 32 | ||
33 | FILES="libopie2/opienet/onetwork.h libopie2/opienet/onetwork.cpp \ | 33 | FILES="libopie2/opienet/onetwork.h libopie2/opienet/onetwork.cpp \ |
34 | libopie2/opienet/opcap.h libopie2/opienet/opcap.cpp libopie2/opienet/802_11_user.h \ | 34 | libopie2/opienet/opcap.h libopie2/opienet/opcap.cpp \ |
35 | libopie2/opienet/802_11_user.h libopie2/opienet/dhcp.h libopie2/opienet/udp_ports.h \ | ||
35 | libopie2/opienet/onetutils.h libopie2/opienet/onetutils.cpp \ | 36 | libopie2/opienet/onetutils.h libopie2/opienet/onetutils.cpp \ |
36 | libopie2/opienet/omanufacturerdb.h libopie2/opienet/omanufacturerdb.cpp \ | 37 | libopie2/opienet/omanufacturerdb.h libopie2/opienet/omanufacturerdb.cpp \ |
37 | libopie2/opieui/olistview.cpp libopie2/opieui/olistview.h" | 38 | libopie2/opieui/olistview.cpp libopie2/opieui/olistview.h" |
38 | 39 | ||
39 | for i in $FILES | 40 | for i in $FILES |
40 | do cp -dfR $OPIEDIR/$i $TMPDIR/$i | 41 | do cp -dfR $OPIEDIR/$i $TMPDIR/$i |
41 | done | 42 | done |
42 | 43 | ||
43 | # make includes | 44 | # make includes |
44 | pushd $TMPDIR/include/opie2 | 45 | pushd $TMPDIR/include/opie2 |
45 | ln -sf ../../libopie2/opieui/*.h . | 46 | ln -sf ../../libopie2/opieui/*.h . |
46 | ln -sf ../../libopie2/opienet/*.h . | 47 | ln -sf ../../libopie2/opienet/*.h . |
47 | popd | 48 | popd |
48 | 49 | ||
49 | find $TMPDIR -name "CVS"|xargs rm -rf | 50 | find $TMPDIR -name "CVS"|xargs rm -rf |
50 | 51 | ||
51 | pushd $TMPFILE | 52 | pushd $TMPFILE |
52 | tar czf $TGZDIR/wellenreiter$VERSION.tgz wellenreiter$VERSION | 53 | tar czf $TGZDIR/wellenreiter$VERSION.tgz wellenreiter$VERSION |
53 | popd | 54 | popd |
54 | 55 | ||