aboutsummaryrefslogtreecommitdiffstats
path: root/po/hr.po
diff options
context:
space:
mode:
Diffstat (limited to 'po/hr.po')
-rw-r--r--po/hr.po758
1 files changed, 392 insertions, 366 deletions
diff --git a/po/hr.po b/po/hr.po
index 532fcb9e..bee1f4b0 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: rpmdrake\n"
-"POT-Creation-Date: 2004-07-12 12:14+0200\n"
+"POT-Creation-Date: 2004-07-19 10:03+0200\n"
"PO-Revision-Date: Fri Apr 21 2000 17:32:14+0200\n"
"Last-Translator: Vlatko Kosturjak <kost@iname.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -60,7 +60,7 @@ msgstr ""
msgid "Path or mount point:"
msgstr "putanja ili mjesto za montiranje: "
-#: ../edit-urpm-sources.pl:68 ../rpmdrake:734
+#: ../edit-urpm-sources.pl:68 ../rpmdrake:739
#, fuzzy, c-format
msgid "Security updates"
msgstr "Prikaži sigurnosne nadogradnje"
@@ -129,8 +129,8 @@ msgstr "Tip izvora:"
#: ../edit-urpm-sources.pl:406 ../edit-urpm-sources.pl:447
#: ../edit-urpm-sources.pl:504 ../edit-urpm-sources.pl:568
#: ../edit-urpm-sources.pl:605 ../edit-urpm-sources.pl:716 ../rpmdrake:93
-#: ../rpmdrake:519 ../rpmdrake:535 ../rpmdrake:540 ../rpmdrake:1205
-#: ../rpmdrake:1266 ../rpmdrake:1400 ../rpmdrake.pm:182 ../rpmdrake.pm:231
+#: ../rpmdrake:524 ../rpmdrake:540 ../rpmdrake:545 ../rpmdrake:1210
+#: ../rpmdrake:1271 ../rpmdrake:1405 ../rpmdrake.pm:182 ../rpmdrake.pm:231
#: ../rpmdrake.pm:428
#, c-format
msgid "Ok"
@@ -140,7 +140,7 @@ msgstr "U Redu"
#: ../edit-urpm-sources.pl:233 ../edit-urpm-sources.pl:293
#: ../edit-urpm-sources.pl:373 ../edit-urpm-sources.pl:407
#: ../edit-urpm-sources.pl:454 ../edit-urpm-sources.pl:573 ../rpmdrake:93
-#: ../rpmdrake:519 ../rpmdrake:1266 ../rpmdrake:1272 ../rpmdrake.pm:428
+#: ../rpmdrake:524 ../rpmdrake:1271 ../rpmdrake:1277 ../rpmdrake.pm:428
#: ../rpmdrake.pm:563
#, c-format
msgid "Cancel"
@@ -277,7 +277,7 @@ msgid "Add"
msgstr "Dodaj"
#: ../edit-urpm-sources.pl:437 ../edit-urpm-sources.pl:444
-#: ../edit-urpm-sources.pl:493 ../edit-urpm-sources.pl:694 ../rpmdrake:1005
+#: ../edit-urpm-sources.pl:493 ../edit-urpm-sources.pl:694 ../rpmdrake:1010
#, fuzzy, c-format
msgid "Remove"
msgstr "Popis za uklanjanje"
@@ -312,8 +312,8 @@ msgstr ""
msgid "Command"
msgstr "Kanada"
-#: ../edit-urpm-sources.pl:482 ../rpmdrake:257 ../rpmdrake:274 ../rpmdrake:385
-#: ../rpmdrake:457
+#: ../edit-urpm-sources.pl:482 ../rpmdrake:262 ../rpmdrake:279 ../rpmdrake:390
+#: ../rpmdrake:462
#, c-format
msgid "(none)"
msgstr "(nema)"
@@ -427,23 +427,23 @@ msgstr ""
msgid "Parallel..."
msgstr ""
-#: ../edit-urpm-sources.pl:711 ../rpmdrake:994
+#: ../edit-urpm-sources.pl:711 ../rpmdrake:999
#, c-format
msgid "Help"
msgstr "Pomoć"
-#: ../edit-urpm-sources.pl:713 ../rpmdrake:997
+#: ../edit-urpm-sources.pl:713 ../rpmdrake:1002
#, c-format
msgid "Help launched in background"
msgstr ""
-#: ../edit-urpm-sources.pl:714 ../rpmdrake:998
+#: ../edit-urpm-sources.pl:714 ../rpmdrake:1003
#, c-format
msgid ""
"The help window has been started, it should appear shortly on your desktop."
msgstr ""
-#: ../edit-urpm-sources.pl:725 ../gurpmi.addmedia:75 ../rpmdrake:1510
+#: ../edit-urpm-sources.pl:725 ../gurpmi.addmedia:75 ../rpmdrake:1515
#, c-format
msgid ""
"%s\n"
@@ -507,525 +507,551 @@ msgid "Accessibility"
msgstr "Pristupačnost"
#: ../rpmdrake:99 ../rpmdrake:100 ../rpmdrake:101 ../rpmdrake:102
-#: ../rpmdrake:103 ../rpmdrake:104 ../rpmdrake:105 ../rpmdrake:106
-#: ../rpmdrake:107 ../rpmdrake:108 ../rpmdrake:109 ../rpmdrake:110
-#: ../rpmdrake:111 ../rpmdrake:112 ../rpmdrake:113 ../rpmdrake:114
#, c-format
-msgid "System"
-msgstr "Sustav"
+msgid "Archiving"
+msgstr "Arhiviranje"
#: ../rpmdrake:99
#, c-format
-msgid "Servers"
-msgstr ""
+msgid "Backup"
+msgstr "Sigurnosno spremanje"
#: ../rpmdrake:100
#, c-format
-msgid "Kernel and hardware"
-msgstr ""
+msgid "Cd burning"
+msgstr "Prženje CD-a"
#: ../rpmdrake:101
#, c-format
-msgid "Libraries"
-msgstr ""
+msgid "Compression"
+msgstr "Kompresija"
-#: ../rpmdrake:102
+#: ../rpmdrake:102 ../rpmdrake:107 ../rpmdrake:119 ../rpmdrake:130
+#: ../rpmdrake:139 ../rpmdrake:150 ../rpmdrake:161 ../rpmdrake:169
+#: ../rpmdrake:240
#, c-format
-msgid "XFree86"
-msgstr ""
+msgid "Other"
+msgstr "Ostali"
#: ../rpmdrake:103 ../rpmdrake:104 ../rpmdrake:105 ../rpmdrake:106
-#, c-format
-msgid "Fonts"
-msgstr "Pisma"
+#: ../rpmdrake:107
+#, fuzzy, c-format
+msgid "Books"
+msgstr "Ostali"
#: ../rpmdrake:103
#, c-format
-msgid "Console"
-msgstr "Konzola"
+msgid "Computer books"
+msgstr ""
#: ../rpmdrake:104
-#, fuzzy, c-format
-msgid "True type"
-msgstr "Tip"
+#, c-format
+msgid "Faqs"
+msgstr ""
#: ../rpmdrake:105
-#, fuzzy, c-format
-msgid "Type1"
-msgstr "Tip"
+#, c-format
+msgid "Howtos"
+msgstr ""
#: ../rpmdrake:106
#, c-format
-msgid "X11 bitmap"
+msgid "Literature"
msgstr ""
-#: ../rpmdrake:107
+#: ../rpmdrake:108 ../rpmdrake:109
#, c-format
-msgid "Base"
+msgid "Cluster"
msgstr ""
-#: ../rpmdrake:108 ../rpmdrake:109 ../rpmdrake:110 ../rpmdrake:111
-#: ../rpmdrake:112 ../rpmdrake:113
-#, fuzzy, c-format
-msgid "Configuration"
-msgstr "Podesiti izvor?"
-
#: ../rpmdrake:108
#, c-format
-msgid "Hardware"
-msgstr "Hardware"
+msgid "Message Passing"
+msgstr ""
#: ../rpmdrake:109
#, c-format
-msgid "Packaging"
-msgstr "Paketiranje"
-
-#: ../rpmdrake:110 ../rpmdrake:154 ../rpmdrake:155 ../rpmdrake:156
-#: ../rpmdrake:157 ../rpmdrake:158 ../rpmdrake:159 ../rpmdrake:160
-#: ../rpmdrake:161 ../rpmdrake:162
-#, fuzzy, c-format
-msgid "Networking"
-msgstr "Mreža"
-
-#: ../rpmdrake:111
-#, fuzzy, c-format
-msgid "Printing"
-msgstr "Upozorenje"
-
-#: ../rpmdrake:112
-#, c-format
-msgid "Boot and Init"
-msgstr "Boot i Init"
+msgid "Queueing Services"
+msgstr ""
-#: ../rpmdrake:113 ../rpmdrake:124 ../rpmdrake:132 ../rpmdrake:144
-#: ../rpmdrake:149 ../rpmdrake:162 ../rpmdrake:176 ../rpmdrake:181
-#: ../rpmdrake:235
+#: ../rpmdrake:110
#, c-format
-msgid "Other"
-msgstr "Ostali"
+msgid "Communications"
+msgstr "Komunikacije"
-#: ../rpmdrake:114
+#: ../rpmdrake:111 ../rpmdrake:114
#, c-format
-msgid "Internationalization"
+msgid "Databases"
msgstr ""
-#: ../rpmdrake:115 ../rpmdrake:116 ../rpmdrake:117 ../rpmdrake:118
-#: ../rpmdrake:119 ../rpmdrake:120 ../rpmdrake:121 ../rpmdrake:122
-#: ../rpmdrake:123 ../rpmdrake:124
+#: ../rpmdrake:112 ../rpmdrake:113 ../rpmdrake:114 ../rpmdrake:115
+#: ../rpmdrake:116 ../rpmdrake:117 ../rpmdrake:118 ../rpmdrake:119
+#: ../rpmdrake:120 ../rpmdrake:121
#, fuzzy, c-format
msgid "Development"
msgstr "Razvojne nadogradnje"
-#: ../rpmdrake:115
-#, fuzzy, c-format
-msgid "Kernel"
-msgstr "općenito"
-
-#: ../rpmdrake:116 ../rpmdrake:134
-#, c-format
-msgid "Databases"
-msgstr ""
-
-#: ../rpmdrake:117
-#, c-format
-msgid "Perl"
-msgstr ""
-
-#: ../rpmdrake:118
+#: ../rpmdrake:112
#, c-format
-msgid "Python"
+msgid "C"
msgstr ""
-#: ../rpmdrake:119
+#: ../rpmdrake:113
#, c-format
-msgid "C"
+msgid "C++"
msgstr ""
-#: ../rpmdrake:120
+#: ../rpmdrake:115
#, c-format
-msgid "C++"
+msgid "GNOME and GTK+"
msgstr ""
-#: ../rpmdrake:121
+#: ../rpmdrake:116
#, fuzzy, c-format
msgid "Java"
msgstr "Japan"
-#: ../rpmdrake:122
-#, c-format
-msgid "GNOME and GTK+"
-msgstr ""
-
-#: ../rpmdrake:123
+#: ../rpmdrake:117
#, fuzzy, c-format
msgid "KDE and Qt"
msgstr "Razvojne nadogradnje"
-#: ../rpmdrake:125 ../rpmdrake:126 ../rpmdrake:127 ../rpmdrake:128
-#: ../rpmdrake:129 ../rpmdrake:130 ../rpmdrake:131 ../rpmdrake:132
-#, c-format
-msgid "Sciences"
-msgstr "Znanosti"
-
-#: ../rpmdrake:125
-#, c-format
-msgid "Astronomy"
-msgstr "Astronomija"
-
-#: ../rpmdrake:126
-#, c-format
-msgid "Biology"
-msgstr "Biologija"
-
-#: ../rpmdrake:127
-#, c-format
-msgid "Chemistry"
-msgstr "Kemija"
-
-#: ../rpmdrake:128
-#, c-format
-msgid "Computer science"
-msgstr "Računarska tehnika"
-
-#: ../rpmdrake:129
-#, c-format
-msgid "Geosciences"
-msgstr "Geologija"
-
-#: ../rpmdrake:130
-#, c-format
-msgid "Mathematics"
-msgstr "Matematika"
+#: ../rpmdrake:118
+#, fuzzy, c-format
+msgid "Kernel"
+msgstr "općenito"
-#: ../rpmdrake:131
+#: ../rpmdrake:120
#, c-format
-msgid "Physics"
-msgstr "Fizika"
+msgid "Perl"
+msgstr ""
-#: ../rpmdrake:133
+#: ../rpmdrake:121
#, c-format
-msgid "Communications"
-msgstr "Komunikacije"
+msgid "Python"
+msgstr ""
-#: ../rpmdrake:135
+#: ../rpmdrake:122
#, fuzzy, c-format
msgid "Editors"
msgstr "Ažuriraj"
-#: ../rpmdrake:136
+#: ../rpmdrake:123
+#, fuzzy, c-format
+msgid "Education"
+msgstr "Komunikacije"
+
+#: ../rpmdrake:124
#, c-format
msgid "Emulators"
msgstr "Emulatori"
-#: ../rpmdrake:137 ../rpmdrake:138 ../rpmdrake:139 ../rpmdrake:140
-#: ../rpmdrake:141 ../rpmdrake:142 ../rpmdrake:143 ../rpmdrake:144
+#: ../rpmdrake:125
+#, c-format
+msgid "File tools"
+msgstr "Datotečni alati"
+
+#: ../rpmdrake:126 ../rpmdrake:127 ../rpmdrake:128 ../rpmdrake:129
+#: ../rpmdrake:130 ../rpmdrake:131 ../rpmdrake:132 ../rpmdrake:133
#, fuzzy, c-format
msgid "Games"
msgstr "Ime"
-#: ../rpmdrake:137
+#: ../rpmdrake:126
#, c-format
msgid "Adventure"
msgstr "Avantura"
-#: ../rpmdrake:138
+#: ../rpmdrake:127
#, c-format
msgid "Arcade"
msgstr "Arkada"
-#: ../rpmdrake:139
+#: ../rpmdrake:128
#, c-format
msgid "Boards"
msgstr "Ploče"
-#: ../rpmdrake:140
+#: ../rpmdrake:129
#, c-format
msgid "Cards"
msgstr "Karte"
-#: ../rpmdrake:141
+#: ../rpmdrake:131
#, c-format
msgid "Puzzles"
msgstr "Slagalice"
-#: ../rpmdrake:142
+#: ../rpmdrake:132
#, c-format
msgid "Sports"
msgstr "Šport"
-#: ../rpmdrake:143
+#: ../rpmdrake:133
#, c-format
msgid "Strategy"
msgstr "Strategija"
-#: ../rpmdrake:145
+#: ../rpmdrake:134 ../rpmdrake:135 ../rpmdrake:136 ../rpmdrake:137
+#: ../rpmdrake:138 ../rpmdrake:139 ../rpmdrake:140 ../rpmdrake:141
#, c-format
-msgid "Toys"
-msgstr "Igračke"
+msgid "Graphical desktop"
+msgstr ""
-#: ../rpmdrake:146 ../rpmdrake:147 ../rpmdrake:148 ../rpmdrake:149
+#: ../rpmdrake:134
#, c-format
-msgid "Archiving"
-msgstr "Arhiviranje"
+msgid "Enlightenment"
+msgstr "Enlightenment"
-#: ../rpmdrake:146
+#: ../rpmdrake:135
#, c-format
-msgid "Compression"
-msgstr "Kompresija"
+msgid "FVWM based"
+msgstr ""
-#: ../rpmdrake:147
+#: ../rpmdrake:136
#, c-format
-msgid "Cd burning"
-msgstr "Prženje CD-a"
+msgid "GNOME"
+msgstr ""
-#: ../rpmdrake:148
+#: ../rpmdrake:137
#, c-format
-msgid "Backup"
-msgstr "Sigurnosno spremanje"
+msgid "Icewm"
+msgstr ""
-#: ../rpmdrake:150
-#, fuzzy, c-format
-msgid "Monitoring"
-msgstr "ali ne odgovara"
+#: ../rpmdrake:138
+#, c-format
+msgid "KDE"
+msgstr "KDE"
-#: ../rpmdrake:151
+#: ../rpmdrake:140
#, c-format
-msgid "Sound"
-msgstr "Zvuk"
+msgid "Sawfish"
+msgstr ""
-#: ../rpmdrake:152
+#: ../rpmdrake:141
+#, c-format
+msgid "WindowMaker"
+msgstr ""
+
+#: ../rpmdrake:142
#, c-format
msgid "Graphics"
msgstr "Grafika"
-#: ../rpmdrake:153
-#, c-format
-msgid "Video"
-msgstr "Video"
+#: ../rpmdrake:143
+#, fuzzy, c-format
+msgid "Monitoring"
+msgstr "ali ne odgovara"
-#: ../rpmdrake:154
+#: ../rpmdrake:144 ../rpmdrake:145 ../rpmdrake:146 ../rpmdrake:147
+#: ../rpmdrake:148 ../rpmdrake:149 ../rpmdrake:150 ../rpmdrake:151
+#: ../rpmdrake:152 ../rpmdrake:168
+#, fuzzy, c-format
+msgid "Networking"
+msgstr "Mreža"
+
+#: ../rpmdrake:144
+#, fuzzy, c-format
+msgid "Chat"
+msgstr "Kina"
+
+#: ../rpmdrake:145
#, c-format
msgid "File transfer"
msgstr "Prijenos datoteka"
-#: ../rpmdrake:155
-#, c-format
-msgid "IRC"
-msgstr "IRC"
-
-#: ../rpmdrake:156
+#: ../rpmdrake:146
#, c-format
msgid "Instant messaging"
msgstr "Instant messaging"
-#: ../rpmdrake:157
-#, fuzzy, c-format
-msgid "Chat"
-msgstr "Kina"
-
-#: ../rpmdrake:158
+#: ../rpmdrake:147
#, c-format
-msgid "News"
-msgstr "Diskusije"
+msgid "IRC"
+msgstr "IRC"
-#: ../rpmdrake:159
+#: ../rpmdrake:148
#, fuzzy, c-format
msgid "Mail"
msgstr "Brazil"
-#: ../rpmdrake:160
+#: ../rpmdrake:149
#, c-format
-msgid "WWW"
-msgstr "WWW"
+msgid "News"
+msgstr "Diskusije"
-#: ../rpmdrake:161
+#: ../rpmdrake:151
#, fuzzy, c-format
msgid "Remote access"
msgstr "Prenosivi medij"
-#: ../rpmdrake:163
+#: ../rpmdrake:152
+#, c-format
+msgid "WWW"
+msgstr "WWW"
+
+#: ../rpmdrake:153
#, c-format
msgid "Office"
msgstr "Ured"
-#: ../rpmdrake:164
+#: ../rpmdrake:154
#, c-format
msgid "Publishing"
msgstr "Izdavaštvo"
-#: ../rpmdrake:165
+#: ../rpmdrake:155 ../rpmdrake:156 ../rpmdrake:157 ../rpmdrake:158
+#: ../rpmdrake:159 ../rpmdrake:160 ../rpmdrake:161 ../rpmdrake:162
#, c-format
-msgid "Terminals"
-msgstr "Terminali"
+msgid "Sciences"
+msgstr "Znanosti"
-#: ../rpmdrake:166
+#: ../rpmdrake:155
#, c-format
-msgid "Shells"
-msgstr "Ljuske"
+msgid "Astronomy"
+msgstr "Astronomija"
-#: ../rpmdrake:167
+#: ../rpmdrake:156
#, c-format
-msgid "File tools"
-msgstr "Datotečni alati"
+msgid "Biology"
+msgstr "Biologija"
-#: ../rpmdrake:168
+#: ../rpmdrake:157
#, c-format
-msgid "Text tools"
-msgstr "Alati za tekst"
+msgid "Chemistry"
+msgstr "Kemija"
+
+#: ../rpmdrake:158
+#, c-format
+msgid "Computer science"
+msgstr "Računarska tehnika"
+
+#: ../rpmdrake:159
+#, c-format
+msgid "Geosciences"
+msgstr "Geologija"
+
+#: ../rpmdrake:160
+#, c-format
+msgid "Mathematics"
+msgstr "Matematika"
+
+#: ../rpmdrake:162
+#, c-format
+msgid "Physics"
+msgstr "Fizika"
+
+#: ../rpmdrake:163
+#, c-format
+msgid "Shells"
+msgstr "Ljuske"
+#: ../rpmdrake:164
+#, c-format
+msgid "Sound"
+msgstr "Zvuk"
+
+#: ../rpmdrake:165 ../rpmdrake:166 ../rpmdrake:167 ../rpmdrake:168
#: ../rpmdrake:169 ../rpmdrake:170 ../rpmdrake:171 ../rpmdrake:172
#: ../rpmdrake:173 ../rpmdrake:174 ../rpmdrake:175 ../rpmdrake:176
+#: ../rpmdrake:177 ../rpmdrake:178 ../rpmdrake:179 ../rpmdrake:180
+#: ../rpmdrake:181
#, c-format
-msgid "Graphical desktop"
-msgstr ""
+msgid "System"
+msgstr "Sustav"
-#: ../rpmdrake:169
+#: ../rpmdrake:165
#, c-format
-msgid "GNOME"
+msgid "Base"
msgstr ""
+#: ../rpmdrake:166 ../rpmdrake:167 ../rpmdrake:168 ../rpmdrake:169
+#: ../rpmdrake:170 ../rpmdrake:171
+#, fuzzy, c-format
+msgid "Configuration"
+msgstr "Podesiti izvor?"
+
+#: ../rpmdrake:166
+#, c-format
+msgid "Boot and Init"
+msgstr "Boot i Init"
+
+#: ../rpmdrake:167
+#, c-format
+msgid "Hardware"
+msgstr "Hardware"
+
#: ../rpmdrake:170
#, c-format
-msgid "Icewm"
-msgstr ""
+msgid "Packaging"
+msgstr "Paketiranje"
#: ../rpmdrake:171
-#, c-format
-msgid "FVWM based"
-msgstr ""
+#, fuzzy, c-format
+msgid "Printing"
+msgstr "Upozorenje"
#: ../rpmdrake:172
+#, fuzzy, c-format
+msgid "Deploiement"
+msgstr "Razvojne nadogradnje"
+
+#: ../rpmdrake:173 ../rpmdrake:174 ../rpmdrake:175 ../rpmdrake:176
#, c-format
-msgid "KDE"
-msgstr "KDE"
+msgid "Fonts"
+msgstr "Pisma"
#: ../rpmdrake:173
#, c-format
-msgid "Sawfish"
-msgstr ""
+msgid "Console"
+msgstr "Konzola"
#: ../rpmdrake:174
-#, c-format
-msgid "WindowMaker"
-msgstr ""
+#, fuzzy, c-format
+msgid "True type"
+msgstr "Tip"
#: ../rpmdrake:175
-#, c-format
-msgid "Enlightenment"
-msgstr "Enlightenment"
-
-#: ../rpmdrake:177 ../rpmdrake:178 ../rpmdrake:179 ../rpmdrake:180
-#: ../rpmdrake:181
#, fuzzy, c-format
-msgid "Books"
-msgstr "Ostali"
+msgid "Type1"
+msgstr "Tip"
+
+#: ../rpmdrake:176
+#, c-format
+msgid "X11 bitmap"
+msgstr ""
#: ../rpmdrake:177
#, c-format
-msgid "Howtos"
+msgid "Internationalization"
msgstr ""
#: ../rpmdrake:178
#, c-format
-msgid "Faqs"
+msgid "Kernel and hardware"
msgstr ""
#: ../rpmdrake:179
#, c-format
-msgid "Computer books"
+msgid "Libraries"
msgstr ""
#: ../rpmdrake:180
#, c-format
-msgid "Literature"
+msgid "Servers"
msgstr ""
-#: ../rpmdrake:280 ../rpmdrake:650 ../rpmdrake:651
+#: ../rpmdrake:181
+#, c-format
+msgid "XFree86"
+msgstr ""
+
+#: ../rpmdrake:182
+#, c-format
+msgid "Terminals"
+msgstr "Terminali"
+
+#: ../rpmdrake:183
+#, c-format
+msgid "Text tools"
+msgstr "Alati za tekst"
+
+#: ../rpmdrake:184
+#, c-format
+msgid "Toys"
+msgstr "Igračke"
+
+#: ../rpmdrake:185
+#, c-format
+msgid "Video"
+msgstr "Video"
+
+#: ../rpmdrake:285 ../rpmdrake:655 ../rpmdrake:656
#, c-format
msgid "(Not available)"
msgstr ""
-#: ../rpmdrake:308 ../rpmdrake:366
+#: ../rpmdrake:313 ../rpmdrake:371
#, fuzzy, c-format
msgid "Search results"
msgstr "Rezultati pretraživanja"
-#: ../rpmdrake:308
+#: ../rpmdrake:313
#, fuzzy, c-format
msgid "Search results (none)"
msgstr "Rezultati pretraživanja"
-#: ../rpmdrake:318 ../rpmdrake:329
+#: ../rpmdrake:323 ../rpmdrake:334
#, fuzzy, c-format
msgid "Please wait, searching..."
msgstr "Molimo pričekajte dok rpm uklanja navedene pakete:"
-#: ../rpmdrake:327 ../rpmdrake:1051 ../rpmdrake:1297 ../rpmdrake:1509
+#: ../rpmdrake:332 ../rpmdrake:1056 ../rpmdrake:1302 ../rpmdrake:1514
#, fuzzy, c-format
msgid "Rpmdrake"
msgstr "rpmdrake"
-#: ../rpmdrake:332
+#: ../rpmdrake:337
#, c-format
msgid "Stop"
msgstr "Zaustavljanje"
-#: ../rpmdrake:367 ../rpmdrake:486
+#: ../rpmdrake:372 ../rpmdrake:491
#, fuzzy, c-format
msgid "Upgradable"
msgstr "Nadogradi"
-#: ../rpmdrake:367 ../rpmdrake:486
+#: ../rpmdrake:372 ../rpmdrake:491
#, c-format
msgid "Addable"
msgstr ""
-#: ../rpmdrake:369
+#: ../rpmdrake:374
#, fuzzy, c-format
msgid "Selected"
msgstr ""
"Izaberi\n"
"sve"
-#: ../rpmdrake:369
+#: ../rpmdrake:374
#, fuzzy, c-format
msgid "Not selected"
msgstr " je u konfliktu s %s-%s-%s"
-#: ../rpmdrake:403
+#: ../rpmdrake:408
#, fuzzy, c-format
msgid "Rpmdrake %s"
msgstr "rpmdrake"
-#: ../rpmdrake:421 ../rpmdrake:530 ../rpmdrake:532 ../rpmdrake:1390
-#: ../rpmdrake:1393
+#: ../rpmdrake:426 ../rpmdrake:535 ../rpmdrake:537 ../rpmdrake:1395
+#: ../rpmdrake:1398
#, c-format
msgid "More information on package..."
msgstr ""
-#: ../rpmdrake:422
+#: ../rpmdrake:427
#, c-format
msgid "Please choose"
msgstr ""
-#: ../rpmdrake:422
+#: ../rpmdrake:427
#, c-format
msgid "One of the following packages is needed:"
msgstr "Jedan od slijedeih paketa je potreban:"
-#: ../rpmdrake:442
+#: ../rpmdrake:447
#, fuzzy, c-format
msgid "Please wait, listing packages..."
msgstr ""
"Molimo pričekajte\n"
"Sortiram pakete"
-#: ../rpmdrake:459
+#: ../rpmdrake:464
#, fuzzy, c-format
msgid "No update"
msgstr "Napravi Nadogradnje"
-#: ../rpmdrake:460
+#: ../rpmdrake:465
#, c-format
msgid ""
"The list of updates is empty. This means that either there is\n"
@@ -1033,30 +1059,30 @@ msgid ""
"or you already installed all of them."
msgstr ""
-#: ../rpmdrake:480
+#: ../rpmdrake:485
#, c-format
msgid "All"
msgstr "Sve"
#. -PO: Keep it short, this is gonna be on a button
-#: ../rpmdrake:519 ../rpmdrake:522
+#: ../rpmdrake:524 ../rpmdrake:527
#, c-format
msgid "More info"
msgstr ""
-#: ../rpmdrake:525 ../rpmdrake:1380
+#: ../rpmdrake:530 ../rpmdrake:1385
#, fuzzy, c-format
msgid "Information on packages"
msgstr "Izaberite vaše pakete"
-#: ../rpmdrake:548
+#: ../rpmdrake:553
#, fuzzy, c-format
msgid "Some additional packages need to be removed"
msgstr ""
"Ovi dodatni paketi su potrebni da budu instalirani u pravilu da sve radi "
"ispravno:"
-#: ../rpmdrake:549
+#: ../rpmdrake:554
#, fuzzy, c-format
msgid ""
"Because of their dependencies, the following package(s) also need to be\n"
@@ -1066,19 +1092,19 @@ msgstr ""
"U pravilu da zadovoljite sve ovisnosti,\n"
"slijedeći paketi biti će uklonjeni:"
-#: ../rpmdrake:555 ../rpmdrake:564
+#: ../rpmdrake:560 ../rpmdrake:569
#, fuzzy, c-format
msgid "Some packages can't be removed"
msgstr "Nisam u stanju instalirati paket"
-#: ../rpmdrake:556
+#: ../rpmdrake:561
#, c-format
msgid ""
"Removing these packages would break your system, sorry:\n"
"\n"
msgstr ""
-#: ../rpmdrake:565 ../rpmdrake:620
+#: ../rpmdrake:570 ../rpmdrake:625
#, c-format
msgid ""
"Because of their dependencies, the following package(s) must be\n"
@@ -1086,12 +1112,12 @@ msgid ""
"\n"
msgstr ""
-#: ../rpmdrake:588
+#: ../rpmdrake:593
#, c-format
msgid "Additional packages needed"
msgstr ""
-#: ../rpmdrake:589
+#: ../rpmdrake:594
#, c-format
msgid ""
"To satisfy dependencies, the following package(s) also need\n"
@@ -1099,12 +1125,12 @@ msgid ""
"\n"
msgstr ""
-#: ../rpmdrake:605
+#: ../rpmdrake:610
#, fuzzy, c-format
msgid "Some packages can't be installed"
msgstr "Nisam u stanju instalirati paket"
-#: ../rpmdrake:606
+#: ../rpmdrake:611
#, fuzzy, c-format
msgid ""
"Sorry, the following package(s) can't be selected:\n"
@@ -1112,182 +1138,182 @@ msgid ""
"%s"
msgstr "Nisam u stanju instalirati paket"
-#: ../rpmdrake:619 ../rpmdrake:931
+#: ../rpmdrake:624 ../rpmdrake:936
#, c-format
msgid "Some packages need to be removed"
msgstr ""
-#: ../rpmdrake:638
+#: ../rpmdrake:643
#, c-format
msgid "Selected: %d MB / Free disk space: %d MB"
msgstr ""
-#: ../rpmdrake:640
+#: ../rpmdrake:645
#, fuzzy, c-format
msgid "Selected size: %d MB"
msgstr "%d izabranih paketa: %.1f MB"
-#: ../rpmdrake:648
+#: ../rpmdrake:653
#, fuzzy, c-format
msgid "Files:\n"
msgstr "Datoteke:"
-#: ../rpmdrake:651
+#: ../rpmdrake:656
#, c-format
msgid "Changelog:\n"
msgstr ""
-#: ../rpmdrake:653
+#: ../rpmdrake:658
#, c-format
msgid "Medium: "
msgstr ""
-#: ../rpmdrake:655
+#: ../rpmdrake:660
#, c-format
msgid "Currently installed version: "
msgstr ""
-#: ../rpmdrake:659
+#: ../rpmdrake:664
#, fuzzy, c-format
msgid "Name: "
msgstr "Ime: %s"
-#: ../rpmdrake:660
+#: ../rpmdrake:665
#, c-format
msgid "Version: "
msgstr "Verzija: "
-#: ../rpmdrake:661
+#: ../rpmdrake:666
#, fuzzy, c-format
msgid "Size: "
msgstr "Veličina: %s"
-#: ../rpmdrake:661
+#: ../rpmdrake:666
#, c-format
msgid "%s KB"
msgstr "%s KB"
-#: ../rpmdrake:663
+#: ../rpmdrake:668
#, fuzzy, c-format
msgid "Importance: "
msgstr "Značaj: %s\n"
-#: ../rpmdrake:665
+#: ../rpmdrake:670
#, fuzzy, c-format
msgid "Summary: "
msgstr "Sumarno"
-#: ../rpmdrake:667
+#: ../rpmdrake:672
#, c-format
msgid "Reason for update: "
msgstr ""
-#: ../rpmdrake:669
+#: ../rpmdrake:674
#, fuzzy, c-format
msgid "Description: "
msgstr "Opis:"
-#: ../rpmdrake:734
+#: ../rpmdrake:739
#, fuzzy, c-format
msgid "Bugfixes updates"
msgstr "Prikaži ispravke grešaka"
-#: ../rpmdrake:734
+#: ../rpmdrake:739
#, fuzzy, c-format
msgid "Normal updates"
msgstr "Normalne nadogradnje"
-#: ../rpmdrake:752
+#: ../rpmdrake:757
#, fuzzy, c-format
msgid "Mandrakelinux choices"
msgstr "MandrakeDogradnja"
-#: ../rpmdrake:753
+#: ../rpmdrake:758
#, c-format
msgid "All packages, alphabetical"
msgstr ""
-#: ../rpmdrake:761
+#: ../rpmdrake:766
#, c-format
msgid "All packages, by group"
msgstr ""
-#: ../rpmdrake:762
+#: ../rpmdrake:767
#, c-format
msgid "All packages, by size"
msgstr ""
-#: ../rpmdrake:763
+#: ../rpmdrake:768
#, fuzzy, c-format
msgid "All packages, by selection state"
msgstr "Spremi odabir paketa"
-#: ../rpmdrake:767
+#: ../rpmdrake:772
#, c-format
msgid "All packages, by medium repository"
msgstr ""
-#: ../rpmdrake:768
+#: ../rpmdrake:773
#, c-format
msgid "All packages, by update availability"
msgstr ""
-#: ../rpmdrake:772
+#: ../rpmdrake:777
#, c-format
msgid "Leaves only, sorted by install date"
msgstr ""
-#: ../rpmdrake:843
+#: ../rpmdrake:848
#, fuzzy, c-format
msgid "in names"
msgstr "Ime domene"
-#: ../rpmdrake:845
+#: ../rpmdrake:850
#, fuzzy, c-format
msgid "in descriptions"
msgstr "Opisi"
-#: ../rpmdrake:847
+#: ../rpmdrake:852
#, fuzzy, c-format
msgid "in file names"
msgstr "Dajte ime datoteke"
-#: ../rpmdrake:858
+#: ../rpmdrake:863
#, c-format
msgid "Reset the selection"
msgstr ""
-#: ../rpmdrake:859
+#: ../rpmdrake:864
#, fuzzy, c-format
msgid "Reload the packages list"
msgstr "Izabir instaliranih paketa"
-#: ../rpmdrake:862 ../rpmdrake.pm:543
+#: ../rpmdrake:867 ../rpmdrake.pm:543
#, fuzzy, c-format
msgid "Update media"
msgstr "Ažuriraj izvore"
-#: ../rpmdrake:893
+#: ../rpmdrake:898
#, fuzzy, c-format
msgid "Normal information"
msgstr "normalne dogradnje"
-#: ../rpmdrake:893
+#: ../rpmdrake:898
#, c-format
msgid "Maximum information"
msgstr ""
-#: ../rpmdrake:913
+#: ../rpmdrake:918
#, fuzzy, c-format
msgid "You need to select some packages first."
msgstr "Izaberite vaše pakete"
-#: ../rpmdrake:918
+#: ../rpmdrake:923
#, fuzzy, c-format
msgid "Too many packages are selected"
msgstr "Paketa već instalirano"
-#: ../rpmdrake:919
+#: ../rpmdrake:924
#, c-format
msgid ""
"Warning: it seems that you are attempting to add so much\n"
@@ -1298,7 +1324,7 @@ msgid ""
"Do you really want to install all the selected packages?"
msgstr ""
-#: ../rpmdrake:932
+#: ../rpmdrake:937
#, c-format
msgid ""
"The following packages have to be removed for others to be upgraded:\n"
@@ -1308,52 +1334,52 @@ msgid ""
"Is it ok to continue?"
msgstr ""
-#: ../rpmdrake:968
+#: ../rpmdrake:973
#, fuzzy, c-format
msgid "Software Packages Removal"
msgstr " Upravitelj programima "
-#: ../rpmdrake:969
+#: ../rpmdrake:974
#, fuzzy, c-format
msgid "Mandrake Update"
msgstr "MandrakeUpdate postavke"
-#: ../rpmdrake:970
+#: ../rpmdrake:975
#, fuzzy, c-format
msgid "Software Packages Installation"
msgstr "Pripremam se za instalaciju"
-#: ../rpmdrake:983
+#: ../rpmdrake:988
#, c-format
msgid "Find:"
msgstr "Pronađi:"
-#: ../rpmdrake:988
+#: ../rpmdrake:993
#, fuzzy, c-format
msgid "Search"
msgstr "potraga"
-#: ../rpmdrake:1005
+#: ../rpmdrake:1010
#, c-format
msgid "Install"
msgstr "Instaliraj"
-#: ../rpmdrake:1009
+#: ../rpmdrake:1014
#, c-format
msgid "Quit"
msgstr "Završi"
-#: ../rpmdrake:1043
+#: ../rpmdrake:1048
#, fuzzy, c-format
msgid "Fatal error"
msgstr "Greša pri pisanju\n"
-#: ../rpmdrake:1044
+#: ../rpmdrake:1049
#, c-format
msgid "A fatal error occurred: %s."
msgstr ""
-#: ../rpmdrake:1052
+#: ../rpmdrake:1057
#, c-format
msgid ""
"I need to contact the mirror to get latest update packages.\n"
@@ -1362,12 +1388,12 @@ msgid ""
"Is it ok to continue?"
msgstr ""
-#: ../rpmdrake:1061
+#: ../rpmdrake:1066
#, fuzzy, c-format
msgid "Already existing update media"
msgstr "Provjeravam ovisnosti..."
-#: ../rpmdrake:1062
+#: ../rpmdrake:1067
#, c-format
msgid ""
"You already have at least one update medium configured, but\n"
@@ -1378,12 +1404,12 @@ msgid ""
"Then, restart MandrakeUpdate."
msgstr ""
-#: ../rpmdrake:1072
+#: ../rpmdrake:1077
#, c-format
msgid "How to choose manually your mirror"
msgstr ""
-#: ../rpmdrake:1073
+#: ../rpmdrake:1078
#, c-format
msgid ""
"You may also choose your desired mirror manually: to do so,\n"
@@ -1393,64 +1419,64 @@ msgid ""
"Then, restart MandrakeUpdate."
msgstr ""
-#: ../rpmdrake:1102
+#: ../rpmdrake:1107
#, fuzzy, c-format
msgid "Please wait, finding available packages..."
msgstr ""
"Molimo pričekajte\n"
"Sortiram pakete"
-#: ../rpmdrake:1150
+#: ../rpmdrake:1155
#, c-format
msgid "Inspecting %s"
msgstr ""
-#: ../rpmdrake:1169
+#: ../rpmdrake:1174
#, fuzzy, c-format
msgid "changes:"
msgstr "Paketi"
-#: ../rpmdrake:1173
+#: ../rpmdrake:1178
#, fuzzy, c-format
msgid "Remove .%s"
msgstr "Prenosivi medij"
-#: ../rpmdrake:1175
+#: ../rpmdrake:1180
#, c-format
msgid "Use .%s as main file"
msgstr ""
-#: ../rpmdrake:1177
+#: ../rpmdrake:1182
#, fuzzy, c-format
msgid "Do nothing"
msgstr "ali ne odgovara"
-#: ../rpmdrake:1189
+#: ../rpmdrake:1194
#, fuzzy, c-format
msgid "Installation finished"
msgstr "Instalirano"
-#: ../rpmdrake:1199
+#: ../rpmdrake:1204
#, c-format
msgid "Inspect..."
msgstr ""
-#: ../rpmdrake:1225 ../rpmdrake:1376
+#: ../rpmdrake:1230 ../rpmdrake:1381
#, c-format
msgid "Everything installed successfully"
msgstr ""
-#: ../rpmdrake:1226 ../rpmdrake:1377
+#: ../rpmdrake:1231 ../rpmdrake:1382
#, c-format
msgid "All requested packages were installed successfully."
msgstr ""
-#: ../rpmdrake:1228 ../rpmdrake:1361
+#: ../rpmdrake:1233 ../rpmdrake:1366
#, fuzzy, c-format
msgid "Problem during installation"
msgstr "Dogodili su se problemi prilikom instalacije"
-#: ../rpmdrake:1229 ../rpmdrake:1362 ../rpmdrake:1416
+#: ../rpmdrake:1234 ../rpmdrake:1367 ../rpmdrake:1421
#, fuzzy, c-format
msgid ""
"There was a problem during the installation:\n"
@@ -1458,17 +1484,17 @@ msgid ""
"%s"
msgstr "Pripremam se za instalaciju"
-#: ../rpmdrake:1250
+#: ../rpmdrake:1255
#, fuzzy, c-format
msgid "Unable to get source packages."
msgstr "Izaberite vaše pakete"
-#: ../rpmdrake:1251
+#: ../rpmdrake:1256
#, fuzzy, c-format
msgid "Unable to get source packages, sorry. %s"
msgstr "Loši, nečitljivi ili nisu pronađeni paketi"
-#: ../rpmdrake:1252 ../rpmdrake:1308
+#: ../rpmdrake:1257 ../rpmdrake:1313
#, c-format
msgid ""
"\n"
@@ -1477,37 +1503,37 @@ msgid ""
"%s"
msgstr ""
-#: ../rpmdrake:1259
+#: ../rpmdrake:1264
#, fuzzy, c-format
msgid "Package installation..."
msgstr "Pripremam se za instalaciju"
-#: ../rpmdrake:1259
+#: ../rpmdrake:1264
#, fuzzy, c-format
msgid "Initializing..."
msgstr "Instaliram:"
-#: ../rpmdrake:1264
+#: ../rpmdrake:1269
#, c-format
msgid "Change medium"
msgstr ""
-#: ../rpmdrake:1265
+#: ../rpmdrake:1270
#, c-format
msgid "Please insert the medium named \"%s\" on device [%s]"
msgstr "Molim umetnite medij pod nazivom \"%s\" u ureaj [%s]"
-#: ../rpmdrake:1270
+#: ../rpmdrake:1275
#, c-format
msgid "Downloading package `%s' (%s/%s)..."
msgstr ""
-#: ../rpmdrake:1289
+#: ../rpmdrake:1294
#, c-format
msgid "Verifying packages signatures..."
msgstr ""
-#: ../rpmdrake:1298
+#: ../rpmdrake:1303
#, c-format
msgid ""
"The following packages have bad signatures:\n"
@@ -1517,12 +1543,12 @@ msgid ""
"Do you want to continue installation?"
msgstr ""
-#: ../rpmdrake:1305 ../rpmdrake:1415
+#: ../rpmdrake:1310 ../rpmdrake:1420
#, fuzzy, c-format
msgid "Installation failed"
msgstr "Instaliraj sve"
-#: ../rpmdrake:1306
+#: ../rpmdrake:1311
#, c-format
msgid ""
"Installation failed, some files are missing:\n"
@@ -1531,22 +1557,22 @@ msgid ""
"You may want to update your media database."
msgstr ""
-#: ../rpmdrake:1320
+#: ../rpmdrake:1325
#, fuzzy, c-format
msgid "Preparing packages installation..."
msgstr "Pripremam se za instalaciju"
-#: ../rpmdrake:1323
+#: ../rpmdrake:1328
#, c-format
msgid "Installing package `%s' (%s/%s)..."
msgstr ""
-#: ../rpmdrake:1339
+#: ../rpmdrake:1344
#, c-format
msgid "unable to access rpm file [%s]"
msgstr ""
-#: ../rpmdrake:1374
+#: ../rpmdrake:1379
#, c-format
msgid ""
"The installation is finished; %s.\n"
@@ -1555,46 +1581,46 @@ msgid ""
"you may now inspect some in order to take actions:"
msgstr ""
-#: ../rpmdrake:1374
+#: ../rpmdrake:1379
#, fuzzy, c-format
msgid "everything was installed correctly"
msgstr "Paket je već instaliran"
-#: ../rpmdrake:1382
+#: ../rpmdrake:1387
#, c-format
msgid "These packages come with upgrade information"
msgstr ""
-#: ../rpmdrake:1406
+#: ../rpmdrake:1411
#, fuzzy, c-format
msgid "No package found for installation."
msgstr "Pripremam se za instalaciju"
-#: ../rpmdrake:1407
+#: ../rpmdrake:1412
#, fuzzy, c-format
msgid "Unrecoverable error: no package found for installation, sorry."
msgstr "Pripremam se za instalaciju"
-#: ../rpmdrake:1429
+#: ../rpmdrake:1434
#, fuzzy, c-format
msgid "Please wait, reading packages database..."
msgstr ""
"Molimo pričekajte\n"
"Sortiram pakete"
-#: ../rpmdrake:1476
+#: ../rpmdrake:1481
#, fuzzy, c-format
msgid "Please wait, removing packages..."
msgstr ""
"Molimo pričekajte\n"
"Sortiram pakete"
-#: ../rpmdrake:1481
+#: ../rpmdrake:1486
#, fuzzy, c-format
msgid "Problem during removal"
msgstr "Dogodili su se problemi prilikom instalacije"
-#: ../rpmdrake:1482
+#: ../rpmdrake:1487
#, fuzzy, c-format
msgid ""
"There was a problem during the removal of packages:\n"
@@ -1602,7 +1628,7 @@ msgid ""
"%s"
msgstr "Pripremam se za instalaciju"
-#: ../rpmdrake:1514
+#: ../rpmdrake:1519
#, c-format
msgid ""
"Welcome to the software removal tool!\n"
@@ -1611,7 +1637,7 @@ msgid ""
"your computer."
msgstr ""
-#: ../rpmdrake:1519
+#: ../rpmdrake:1524
#, c-format
msgid ""
"Welcome to MandrakeUpdate!\n"
@@ -1620,7 +1646,7 @@ msgid ""
"computer."
msgstr ""
-#: ../rpmdrake:1524
+#: ../rpmdrake:1529
#, c-format
msgid ""
"Welcome to the software installation tool!\n"
ength of time specified by *timo (indefinite * if timo is NULL). */ int wait_for_input (int fd, struct timeval *timo) { fd_set ready; int n; FD_ZERO(&ready); FD_SET(fd, &ready); n = select(fd+1, &ready, NULL, &ready, timo); return n; } /* UNUSED */ /* read characters into the buffer buf, until one of: */ /* char_timeout expired before next character arrives */ /* total_timeout expires */ /* maxlen characters are retrieved */ /* */ /* returns < 0 if it fails */ /* otherwise the # of characters received is returned */ /* char_timeout is in microseconds (millionths of a sec) */ /* total_timeout is in seconds */ int timed_serial_read(int fd, int char_timeout, int total_timeout, unsigned char *buf, int maxlen ) { int done, pos, starttime, temp; struct timeval timo; unsigned char intbuf[2]; /* start reading */ done = 0; pos = 0; starttime=time(NULL); memset(buf, 0, maxlen); while (!done) { timo.tv_sec=0; timo.tv_usec=char_timeout; if (wait_for_input(fd, &timo) > 0) { temp = read( fd, intbuf, 1 ); if (temp < 0) { if (errno != EAGAIN) return -1; } else { buf[pos++] = intbuf[0]; buf[pos] = 0; } } else done = 1; /* shouldnt run more than 5 seconds */ if (time(NULL)-starttime > total_timeout ) done = 1; if (pos > maxlen) done = 1; } return pos; } int open_serial_port( char *port ) { int fd; fd = open( port, O_RDWR | O_NONBLOCK); if (fd < 0) return -1; /* reset file so it is no longer in non-blocking mode */ if (fcntl(fd, F_SETFL, 0) < 0) { close(fd); return -1; } return fd; } /* <0 means ioctl error occurred */ int get_serial_lines( int fd ) { int modem_lines; ioctl(fd, TIOCMGET, &modem_lines); return modem_lines; } /* <0 means ioctl error occurred */ int set_serial_lines( int fd, int modem_lines ) { return ioctl(fd, TIOCMSET, &modem_lines); } /* set serial port to 1200 baud, 'nbits' bits, 1 stop, no parity */ int setup_serial_port( int fd, int nbits, struct termios *attr ) { attr->c_iflag = IGNBRK | IGNPAR; attr->c_cflag = 0; attr->c_cflag &= ~(CSIZE | CSTOPB | PARENB | PARODD | PARENB); attr->c_cflag |= CREAD | CLOCAL; /*| CRTSCTS ; */ if (nbits == 7) attr->c_cflag |= CS7 | CSTOPB; else attr->c_cflag |= CS8; attr->c_oflag = 0; attr->c_lflag = 0; attr->c_cc[VMIN] = 1; attr->c_cc[VTIME] = 5; cfsetospeed( attr, B1200); cfsetispeed( attr, B1200); return tcsetattr(fd, TCSANOW, attr); } /* Initialize the serial port to a known state *before* probing. This is * apparently required for some Logitech mice, who will stubbornly refuse * to respond to PnP probes after they've been opened by gpm or XFree. */ int init_port(int fd) { struct termios attr; if (tcgetattr(fd,&attr)) return 1; cfsetospeed(&attr, B2400); cfsetispeed(&attr, B2400); attr.c_iflag = IXON | ICRNL; attr.c_cflag = CLOCAL | HUPCL | CREAD | B9600 | CS8; attr.c_oflag = 0; attr.c_lflag = 0; return tcsetattr(fd, TCSANOW, &attr); } /* Request for PnP info from serial device */ /* See page 6 of the pnpcom doc from Microsoft */ /* Return code tells us what happened */ /* */ /* PNP_COM_FATAL - error, errno has reason */ /* PNP_COM_OK - probe initiated successfully */ /* PNP_COM_FAIL - DSR never came on - try alterntives */ /* means (ATI9?) to get PnP string */ int init_pnp_com_seq1( int fd ) { int modem_lines; int temp; int dsr_status; int rc = PNP_COM_OK; struct termios portattr; if (init_port(fd)) return PNP_COM_FATAL; modem_lines = get_serial_lines(fd); /* turn off RTS */ modem_lines &= ~TIOCM_RTS; set_serial_lines(fd, modem_lines); /* wait 200ms for DSR=1 */ usleep(200000); dsr_status = get_serial_lines(fd) & TIOCM_DSR; /* see if we got DSR coming up */ if (!dsr_status) { /* turn DTR and RTS back on and try alternative methods */ modem_lines |= TIOCM_DTR | TIOCM_RTS; set_serial_lines(fd, modem_lines); rc = PNP_COM_OK; } /* COM port Setup, 1st phase */ /* now we set port to be 1200 baud, 7 bits, no parity, 1 stop bit */ temp = tcgetattr(fd, &portattr); if (temp < 0) return PNP_COM_FATAL; /* goto 1200 baud, etc etc as PnP requires */ temp = setup_serial_port( fd, 7, &portattr ); if (temp < 0) return PNP_COM_FATAL; /* we drop DTR and RTS */ modem_lines &= ~( TIOCM_RTS | TIOCM_DTR); set_serial_lines(fd, modem_lines); usleep(200000); /* bring DTR back up */ modem_lines |= TIOCM_DTR; set_serial_lines(fd, modem_lines); usleep(200000); /* now entering next phase */ modem_lines |= TIOCM_RTS; set_serial_lines(fd, modem_lines); usleep(200000); return rc; } /* Request for PnP info from serial device */ /* Uses ATI9 code, may not do anything but return 'ERROR' */ /* Return code tells us what happened */ /* */ /* PNP_COM_FATAL - error, errno has reason */ /* PNP_COM_OK - probe initiated successfully */ /* PNP_COM_FAIL - DSR never came on - try alterntives */ /* means (ATI9?) to get PnP string */ int init_pnp_com_ati9( int fd ) { int modem_lines; int temp; int done; int respindex; int starttime; unsigned char resp[100], buf[2]; struct timeval timo; struct termios portattr; modem_lines = get_serial_lines(fd); /* turn off RTS */ modem_lines &= ~TIOCM_RTS; set_serial_lines(fd, modem_lines); /* wait 200ms for DSR=1 */ usleep(200000); /* now we set port to be 1200 baud, 8 bits, no parity, 1 stop bit */ temp = tcgetattr(fd, &portattr); if (temp < 0) { modem_lines |= TIOCM_DTR | TIOCM_RTS; set_serial_lines(fd, modem_lines); return PNP_COM_FATAL; } /* goto 1200 baud, 8 bits */ temp = setup_serial_port( fd, 8, &portattr ); if (temp < 0) { modem_lines |= TIOCM_DTR | TIOCM_RTS; set_serial_lines(fd, modem_lines); return PNP_COM_FATAL; } /* turn on DTR and RTS */ modem_lines = get_serial_lines(fd); modem_lines |= TIOCM_RTS | TIOCM_DTR; set_serial_lines(fd, modem_lines); usleep(200000); /* send the 'AT' command */ if (debug_level > 0) printf("Sending ATI9 command to modem\n"); write(fd, "ATI9\r", 5); /* start reading - read the AT command back */ done = 0; respindex= 0; starttime=time(NULL); memset(resp, 0, sizeof(resp)); while (!done) { timo.tv_sec=0; timo.tv_usec=250000; if (wait_for_input(fd, &timo) > 0) { temp = read( fd, buf, 1 ); if (temp < 0) { if (errno != EAGAIN) return PNP_COM_FATAL; } else { resp[respindex++] = buf[0]; resp[respindex] = 0; } } else done = 1; /* shouldnt run more than 5 seconds */ if (time(NULL)-starttime > 5 ) done = 1; if (respindex > 6) done = 1; if (strstr(resp, "ATI9\r")) done = 1; if (debug_level > 0) printf("ATI9 probe ->%d \"%s\"\n",respindex, resp); } /* see if we saw the 'OK' response */ if (strstr(resp, "(")) return PNP_COM_OK; else return PNP_COM_FAIL; return PNP_COM_OK; } /* See if this is a legacy mouse device */ /* Only called if the PnP probe above failed */ /* We turn off the mouse via RS232 lines, then turn it on */ /* If it spits out an 'M' character (at 1200 baud, 7N1) */ /* it could be a mouse. */ /* */ /* Return code tells us what happened */ /* */ /* PNP_COM_FATAL - error, errno has reason */ /* PNP_COM_OK - probe saw 'M' */ /* PNP_COM_FAIL - Never saw the 'M' response */ int find_legacy_mouse( int fd ) { int modem_lines; int temp; int done; int starttime; unsigned char resp[2]; struct timeval timo; struct termios portattr; /* now we set port to be 1200 baud, 7 bits, no parity, 1 stop bit */ temp = tcgetattr(fd, &portattr); if (temp < 0) return PNP_COM_FATAL; /* goto 1200 baud, etc etc*/ temp = setup_serial_port( fd, 7, &portattr ); if (temp < 0) return PNP_COM_FATAL; /* we drop DTR and RTS */ modem_lines = get_serial_lines(fd); modem_lines &= ~( TIOCM_RTS | TIOCM_DTR); set_serial_lines(fd, modem_lines); usleep(200000); /* bring them DTR back up */ modem_lines |= TIOCM_DTR | TIOCM_RTS; set_serial_lines(fd, modem_lines); /* start reading - after first character we quit */ done = 0; starttime=time(NULL); while (!done) { timo.tv_sec=0; timo.tv_usec=250000; if (wait_for_input(fd, &timo) > 0) { temp = read( fd, resp, 1 ); if (temp < 0) { if (errno != EAGAIN) return PNP_COM_FATAL; } else { done = 1; } } else done = 1; /* shouldnt run more than 2 seconds */ if (time(NULL)-starttime > 2 ) done = 1; } if (*resp == 'M') return PNP_COM_OK; else return PNP_COM_FAIL; } /* See if this is a legacy modem device */ /* Only called if the PnP probe above failed */ /* We send a '!AT' and see if we get an 'OK' back */ /* */ /* Return code tells us what happened */ /* */ /* PNP_COM_FATAL - error, errno has reason */ /* PNP_COM_OK - probe saw 'OK' */ /* PNP_COM_FAIL - Never saw the 'OK' response */ int find_legacy_modem( int fd ) { int modem_lines; int temp; int done; int respindex; int starttime; unsigned char resp[10], buf[2]; struct timeval timo; struct termios portattr; /* now we set port to be 1200 baud, 8 bits, no parity, 1 stop bit */ temp = tcgetattr(fd, &portattr); if (temp < 0) return PNP_COM_FATAL; /* goto 1200 baud, 8 bits */ temp = setup_serial_port( fd, 8, &portattr ); if (temp < 0) return PNP_COM_FATAL; /* turn on DTR and RTS */ modem_lines = get_serial_lines(fd); modem_lines |= TIOCM_RTS | TIOCM_DTR; set_serial_lines(fd, modem_lines); usleep(200000); /* send the 'AT' command */ if (debug_level > 0) printf("Sending AT command to modem\n"); write(fd, "AT\r", 3); /* start reading - we'll get AT command back first, then modem response */ done = 0; respindex= 0; starttime=time(NULL); memset(resp, 0, sizeof(resp)); while (!done) { timo.tv_sec=0; timo.tv_usec=250000; if (wait_for_input(fd, &timo) > 0) { temp = read( fd, buf, 1 ); if (temp < 0) { if (errno != EAGAIN) return PNP_COM_FATAL; } else { resp[respindex++] = buf[0]; } } else done = 1; /* shouldnt run more than 5 seconds */ if (time(NULL)-starttime > 5 ) done = 1; if (respindex > 9) done = 1; } /* see if we saw the 'OK' response */ if (strstr(resp, "OK")) return PNP_COM_OK; else return PNP_COM_FAIL; } /* retrieve the PnP ID string */ /* timeout after 3 seconds */ /* should probably set a 200 msec timeout per char, as spec says */ /* if no char received, we're done */ int read_pnp_string( int fd, unsigned char *pnp_string, int *pnp_len, int pnp_stringbuf_size ) { int pnp_index; int temp, done, counter; int seen_start; time_t starttime; struct timeval timo; unsigned char buf[80]; unsigned char end_char; /* see if we have any input waiting */ pnp_index =0; seen_start = 0; done = 0; end_char = 0; starttime=time(NULL); while (!done) { timo.tv_sec=0; timo.tv_usec=250000; if (wait_for_input(fd, &timo) > 0) { temp = read( fd, buf, 1 ); if (temp < 0) { if (errno != EAGAIN) return PNP_COM_FATAL; } else { for (counter=0; counter < temp; counter++) { pnp_string[pnp_index++] = buf[counter]; if (seen_start) { if (buf[counter] == end_char) { done=1; break; } } else { if (buf[counter] == BeginPnP1) { seen_start = 1; end_char = EndPnP1; } else if (buf[counter] == BeginPnP2) { seen_start = 1; end_char = EndPnP2; } } } } } else done = 1; /* shouldnt run more than 4 seconds */ if (time(NULL)-starttime > 4 ) done = 1; if (pnp_index >= pnp_stringbuf_size) done = 1; } pnp_string[pnp_index] = 0; *pnp_len=pnp_index; return 0; } /* UNUSED */ /* simple little helper function */ void xlate_memcpy( void *dest, void *src, int len, int xlate_flag ) { unsigned char *d, *s; int i; for (i=0,d=dest,s=src; i<len; i++, d++, s++) *d = (*s) + ((xlate_flag) ? 0x20 : 0 ); } /* parse the PnP ID string into components */ int parse_pnp_string( unsigned char *pnp_id_string, int pnp_len, struct pnp_com_id *pnp_id ) { unsigned char *p1, *p2; unsigned char *start; unsigned char *end; unsigned char *curpos; unsigned char *endfield; unsigned char *temppos; unsigned char *pnp_string; unsigned char end_char; int no_more_extensions=0; int stage; int len; unsigned short int checksum; char hex_checksum[5]; char extension_delims[] = {EndPnP1, EndPnP2, ExtendPnP1, ExtendPnP2, 0}; char end_delims[] = {EndPnP1, EndPnP2, 0}; /* clear out pnp_id */ memset(pnp_id, 0, sizeof(*pnp_id)); /* copy pnp_string to temp space */ pnp_string = alloca(pnp_len+1); memcpy(pnp_string, pnp_id_string, pnp_len+1); /* first find the start of the PnP part of string */ p1 = memchr( pnp_string, BeginPnP1, pnp_len ); p2 = memchr( pnp_string, BeginPnP2, pnp_len ); /* use the one which points nearest to start of the string */ /* and is actually defined */ if ( p1 && p2 ) { start = (p1 < p2) ? p1 : p2; } else if (p1) start = p1; else if (p2) start = p2; else start = NULL; /* if no start then we're done */ if (!start) return -1; /* the length of the initial part cannot be more than 17 bytes */ if ((start - pnp_string) > 17) return -1; /* setup end character we are looking for based on the start character */ if (start == p2) { pnp_id->xlate_6bit = 1; end_char = EndPnP2; /* we need to xlate data in PnP fields */ /* remember to skip the revision fields (bytes 1 and 2 after start) */ temppos=start; while (1) { if (*temppos == EndPnP2) { *temppos += 0x20; break; } else if (temppos != start+1 && temppos != start+2 ) *temppos += 0x20; temppos++; } } else { pnp_id->xlate_6bit = 0; end_char = EndPnP1; } /* move everything before the start of the PnP block */ memcpy(pnp_id->other_id, pnp_string, start-pnp_string); pnp_id->other_len = start - pnp_string; /* now we get the PnP fields - all were zero'd out above */ curpos = start+1; memcpy(pnp_id->pnp_rev,curpos,2); curpos += 2; memcpy(pnp_id->eisa_id,curpos,3); curpos += 3; memcpy(pnp_id->product_id,curpos,4); curpos += 4; /* now we see if have extension fields */ no_more_extensions = 0; stage = 0; while (!no_more_extensions) { if (*curpos == ExtendPnP1 || *curpos == ExtendPnP2) { curpos++; endfield = strpbrk(curpos, extension_delims); if (!endfield) return -1; /* if we reached the end of all PnP data, back off */ /* cause there is a checksum at the end of extension data */ if (*endfield == EndPnP1 || *endfield == EndPnP2) endfield -= 2; } else break; len = endfield - curpos; switch (stage) { case 0: if (len != 8 && len != 0 ) return -1; memcpy(pnp_id->serial_number,curpos,len); curpos += len; break; case 1: if (len > 33) return -1; memcpy(pnp_id->class_name, curpos, len); curpos = endfield; break; case 2: if (len > 41) return -1; memcpy(pnp_id->driver_id, curpos, len); curpos = endfield; break; case 3: if (len > 41) return -1; memcpy(pnp_id->user_name, curpos, len); curpos = endfield; break; } stage++; } /* now find the end of all PnP data */ end = strpbrk(curpos, end_delims); if (!end) return -1; /* if we had any extensions, we expect an checksum */ if (stage != 0) { /* copy checksum into struct */ memcpy(pnp_id->checksum, curpos, 2); /* compute the checksum as the sum of all PnP bytes, excluding */ /* the two byte checksum. */ checksum = 0; for (temppos=start; temppos <= end; temppos++) { /* skip checksum in calculation */ if (temppos == (end-2) || temppos == (end-1)) continue; /* dont xlate the revision at start */ if (temppos != (start+1) && temppos != (start+2)) checksum += *temppos - ((pnp_id->xlate_6bit) ? 0x20 : 0); else checksum += *temppos; } sprintf(hex_checksum, "%.2X", checksum & 0xff); if (strncmp(hex_checksum, pnp_id->checksum, 2)) return -1; } /* checksum was ok, so we're done */ return 0; } /* UNUSED except for debugging */ void print_pnp_id( struct pnp_com_id id ) { int i; int extensions_exist; int revision_temp; if (id.other_len != 0) { printf("Detected non-PnP data stream at start.\n"); printf(" Length = 0x%x\n",id.other_len); printf(" Contents ="); for (i=0; i<id.other_len; i++) printf(" 0x%x",id.other_id[i]); printf("\n"); } else printf("Non-PnP data stream not detected at start.\n"); /* parse PnP revision bytes into a string values (eg. "1.00") */ revision_temp = ((id.pnp_rev[0]&0x3f) << 6)+(id.pnp_rev[1]&0x3f); sprintf(id.pnp_rev_str, "%d.%d",revision_temp/100,revision_temp % 100); printf("\nPnP Required fields:\n"); printf(" Revision = %s\n",id.pnp_rev_str); printf(" Manufacturer = %s\n",id.eisa_id); printf(" Product ID = %s\n",id.product_id); extensions_exist = id.serial_number[0] || id.class_name[0] || id.driver_id[0] || id.user_name[0]; if (extensions_exist) { printf("\nPnP extension field(s) exist:\n"); if (id.serial_number[0]) printf(" Serial Number = %s\n",id.serial_number); if (id.class_name[0]) printf(" PnP class name = %s\n",id.class_name); if (id.driver_id[0]) printf(" PnP Compatible = %s\n",id.driver_id); if (id.user_name[0]) printf(" PnP Description = %s\n",id.user_name); } } int attempt_pnp_retrieve(int fd, char *pnp_string, int *pnp_strlen, int pnp_stringbuf_size) { int pnp_probe_status; int tried_at_prodding; int give_up; struct pnp_com_id pnp_id; tried_at_prodding=0; give_up=0; while (!give_up) { pnp_probe_status = init_pnp_com_seq1(fd); if (pnp_probe_status == PNP_COM_FATAL) { return(PNP_COM_FATAL); } else if (pnp_probe_status == PNP_COM_OK) { read_pnp_string(fd, pnp_string, pnp_strlen, pnp_stringbuf_size ); if (debug_level > 0) { printf("\nPNP string = |%s|\n\n",pnp_string); print_hex_data(pnp_string, *pnp_strlen); } if (*pnp_strlen == 1 && pnp_string[0] == 'M') /* legacy mouse */ return PNP_COM_OK; /* see if we got anything useful, if not try at command */ /* to prod device into correct serial params */ if (parse_pnp_string( pnp_string, *pnp_strlen, &pnp_id )<0) if (!tried_at_prodding) { write(fd, "AT\r", 3); tried_at_prodding=1; } else give_up = 1; else return PNP_COM_OK; } else give_up = 1; } /* try sending a ATI9 code to the modem to see if we get PnP id back */ init_pnp_com_ati9(fd); read_pnp_string(fd, pnp_string, pnp_strlen, pnp_stringbuf_size ); if (parse_pnp_string( pnp_string, *pnp_strlen, &pnp_id )<0) { *pnp_strlen = 0; pnp_string[0] = 0; return PNP_COM_FAIL; } else return PNP_COM_OK; } struct device *serialProbe(enum deviceClass probeClass, int probeFlags, struct device *devlist) { int fd; int temp; int pnp_strlen; int devicetype=-1; unsigned char pnp_string[100]; char port[20]; struct termios origattr; struct pnp_com_id pnp_id; struct serialDevice *serdev; struct stat sb; int maj, twelve=12; int console=-1; int stdin_line=-1; struct serial_struct si; if (probeFlags & PROBE_SAFE) return devlist; /* Are we on a serial console? */ fstat(0,&sb); maj = major(sb.st_rdev); if (maj != 4 && (maj < 136 || maj > 143)) { if (ioctl (0, TIOCLINUX, &twelve) < 0) { if (ioctl (0, TIOCGSERIAL, &si) >= 0) { if (si.line > 0) { stdin_line = 1 << si.line; } else { stdin_line = 0; } } else stdin_line = 0; } } fd=open("/dev/console",O_RDWR); if (fd != -1) { fstat(fd,&sb); maj = major(sb.st_rdev); if (maj != 4 && (maj < 136 || maj > 143)) { if (ioctl (fd, TIOCLINUX, &twelve) < 0) { if (ioctl (fd, TIOCGSERIAL, &si) >= 0) { if (si.line > 0) { console = 1 << si.line; } else { console = 0; } } else console = 0; } } close(fd); } if ( (probeClass == CLASS_UNSPEC) || (probeClass == CLASS_OTHER) || (probeClass == CLASS_MOUSE) || (probeClass == CLASS_MODEM) || (probeClass == CLASS_PRINTER) ) { int x; for (x=0; x<=3 ; x++) { struct stat sbuf; char lockfile[32]; if (x==console || x==stdin_line) continue; snprintf(port,20,"/dev/ttyS%d",x); /* Make sure it's not in use */ snprintf(lockfile,32,"/var/lock/LCK..ttyS%d",x); if (!stat(lockfile,&sbuf)) continue; memset(lockfile,'\0',32); if (readlink("/dev/modem",lockfile,32)>0) { if (!strcmp(basename(port),basename(lockfile))) { snprintf(lockfile,32,"/var/lock/LCK..modem"); if (!stat(lockfile,&sbuf)) continue; } } if ((fd=open_serial_port(port)) < 0) { continue; } /* save the current state of the port */ temp = tcgetattr(fd, &origattr); if (temp < 0) { close(fd); continue; } /* try twiddling RS232 control lines and see if it talks to us */ devicetype=-1; pnp_strlen = 0; attempt_pnp_retrieve( fd, pnp_string, &pnp_strlen, sizeof(pnp_string) - 1 ); /* see if we found any PnP signature */ if (pnp_strlen != 0) { if (*pnp_string == 'M') { /* Legacy mouse */ if (probeClass == CLASS_MOUSE || probeClass == CLASS_UNSPEC) { serdev = serialNewDevice(NULL); serdev->class=CLASS_MOUSE; serdev->device=strdup(port+5); serdev->desc=strdup("Generic Serial Mouse"); serdev->driver=strdup("generic"); if (devlist) serdev->next = devlist; devlist = (struct device *)serdev; if (probeFlags & PROBE_ONE) { tcsetattr(fd, TCSANOW, &origattr); tcflush(fd, TCIOFLUSH); close(fd); return devlist; } } tcsetattr(fd, TCSANOW, &origattr); close(fd); continue; } /* fill in the PnP com structure */ if (parse_pnp_string( pnp_string, pnp_strlen, &pnp_id )<0) { goto endprobe; } else { char *foo; int len; if (debug_level > 0) { printf("PnP ID string for serial device on port %s\n",port); print_pnp_id( pnp_id ); } serdev = serialNewDevice(NULL); if (pnp_id.user_name[0]) { serdev->pnpdesc = strdup(pnp_id.user_name); len = strlen(pnp_id.eisa_id)+strlen(pnp_id.product_id)+strlen(pnp_id.user_name)+3; foo = malloc(len); snprintf(foo,len,"%s|%s %s",pnp_id.eisa_id,pnp_id.product_id,pnp_id.user_name); } else { len = strlen(pnp_id.eisa_id)+strlen(pnp_id.product_id)+3; foo = malloc(len); snprintf(foo,len,"%s|%s",pnp_id.eisa_id,pnp_id.product_id); } serdev->desc=strdup(foo); serdev->device=strdup(port+5); serdev->driver=strdup("ignore"); serdev->pnpmfr = strdup(pnp_id.eisa_id); serdev->pnpmodel = strdup(pnp_id.product_id); free(foo); foo=pnp_id.product_id; if (pnp_id.driver_id) { if (strstr(pnp_id.driver_id,"PNP")) foo = strstr(pnp_id.driver_id,"PNP")+3; serdev->pnpcompat = strdup(pnp_id.driver_id); } if (!strncmp(foo, "0F", 2)) serdev->class = CLASS_MOUSE; else if (!strncmp(foo, "C", 1)) serdev->class = CLASS_MODEM; else if (!strncmp(pnp_id.class_name, "Modem", 5)) serdev->class = CLASS_MODEM; else serdev->class = CLASS_OTHER; if (serdev->class == probeClass || probeClass == CLASS_UNSPEC) { if (devlist) serdev->next = devlist; devlist = (struct device *)serdev; if (probeFlags & PROBE_ONE) { tcsetattr(fd, TCSANOW, &origattr); tcflush(fd, TCIOFLUSH); close(fd); return devlist; } } else { serdev->freeDevice(serdev); } goto endprobe; } } else { /* try to find a legacy device */ temp = find_legacy_mouse(fd); if (temp == PNP_COM_FATAL) { goto endprobe; } else if (temp == PNP_COM_OK) { if (probeClass == CLASS_UNSPEC || probeClass == CLASS_MOUSE) { serdev=serialNewDevice(NULL); serdev->class = CLASS_MOUSE; serdev->device = strdup(port+5); serdev->driver= strdup("generic"); serdev->desc = strdup("Generic Serial Mouse"); if (devlist) serdev->next = devlist; devlist = (struct device *)serdev; if (probeFlags & PROBE_ONE) { tcsetattr(fd, TCSANOW, &origattr); tcflush(fd, TCIOFLUSH); close(fd); return devlist; } } goto endprobe; } else { if (debug_level > 0) printf("Didnt see a legacy mouse, need to ATI it now.\n"); temp = find_legacy_modem(fd); if (temp == PNP_COM_FATAL) { goto endprobe; } else if (temp == PNP_COM_OK) { if (debug_level > 0) printf("\nLegacy modem signature seen.\n\n"); if (probeClass == CLASS_UNSPEC || probeClass == CLASS_MODEM) { serdev=serialNewDevice(NULL); serdev->class = CLASS_MODEM; serdev->device = strdup(port+5); serdev->driver= strdup("ignore"); serdev->desc = strdup("Generic Serial Modem"); if (devlist) serdev->next = devlist; devlist = (struct device *)serdev; if (probeFlags & PROBE_ONE) { tcsetattr(fd, TCSANOW, &origattr); tcflush(fd, TCIOFLUSH); close(fd); return devlist; } } goto endprobe; } else { if (debug_level > 0) printf("Didnt see a legacy modem, game over.\n"); } } } endprobe: tcsetattr(fd, TCSANOW, &origattr); tcflush(fd, TCIOFLUSH); close(fd); } } return devlist; }