summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/po/tr.po
diff options
context:
space:
mode:
authorThierry Vignaud <tv@mandriva.org>2010-06-05 21:33:19 +0000
committerThierry Vignaud <tv@mandriva.org>2010-06-05 21:33:19 +0000
commitdfedd4239c31061df428e865e7db0bc13a59dd50 (patch)
tree8cd53e887a432e0f57684ef966e0047641896c38 /perl-install/standalone/po/tr.po
parent79c64afc08f13da0fb1d4cec0ff7d7ab58ee5abf (diff)
downloaddrakx-dfedd4239c31061df428e865e7db0bc13a59dd50.tar
drakx-dfedd4239c31061df428e865e7db0bc13a59dd50.tar.gz
drakx-dfedd4239c31061df428e865e7db0bc13a59dd50.tar.bz2
drakx-dfedd4239c31061df428e865e7db0bc13a59dd50.tar.xz
drakx-dfedd4239c31061df428e865e7db0bc13a59dd50.zip
sync with code
Diffstat (limited to 'perl-install/standalone/po/tr.po')
-rw-r--r--perl-install/standalone/po/tr.po731
1 files changed, 344 insertions, 387 deletions
diff --git a/perl-install/standalone/po/tr.po b/perl-install/standalone/po/tr.po
index 7bcb849a5..4f57e185b 100644
--- a/perl-install/standalone/po/tr.po
+++ b/perl-install/standalone/po/tr.po
@@ -25,49 +25,26 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: display_help:50
-#: display_help:55
-#: drakbug:186
-#: drakperm:136
+#: display_help:50 display_help:55 drakbug:186 drakperm:136
#, c-format
msgid "Help"
msgstr "Yardım"
-#: display_help:63
-#: drakbug:191
-#: drakfont:506
+#: display_help:63 drakbug:191 drakfont:506
#, c-format
msgid "Close"
msgstr "Kapat"
-#: drakauth:24
-#: drakauth:26
-#: draksec:164
+#: drakauth:24 drakauth:26 draksec:164
#, c-format
msgid "Authentication"
msgstr "Kimlik kanıtlama"
-#: drakauth:37
-#: drakclock:111
-#: drakclock:125
-#: drakdvb:74
-#: drakfont:213
-#: drakfont:226
-#: drakfont:264
-#: finish-install:130
-#: logdrake:170
-#: logdrake:445
-#: logdrake:450
-#: scannerdrake:59
-#: scannerdrake:101
-#: scannerdrake:142
-#: scannerdrake:200
-#: scannerdrake:259
-#: scannerdrake:729
-#: scannerdrake:740
-#: scannerdrake:879
-#: scannerdrake:890
-#: scannerdrake:960
+#: drakauth:37 drakclock:111 drakclock:125 drakdvb:74 drakfont:213
+#: drakfont:226 drakfont:264 finish-install:130 logdrake:170 logdrake:445
+#: logdrake:450 scannerdrake:59 scannerdrake:101 scannerdrake:142
+#: scannerdrake:200 scannerdrake:259 scannerdrake:729 scannerdrake:740
+#: scannerdrake:879 scannerdrake:890 scannerdrake:960
#, c-format
msgid "Error"
msgstr "Hata"
@@ -77,23 +54,17 @@ msgstr "Hata"
msgid "No bootloader found, creating a new configuration"
msgstr "Önyükleyici bulunamadı. Yeni bir yapılandırma oluşturuluyor."
-#: drakboot:88
-#: harddrake2:196
-#: harddrake2:197
-#: logdrake:71
+#: drakboot:88 harddrake2:196 harddrake2:197 logdrake:71
#, c-format
msgid "/_File"
msgstr "/_Dosya"
-#: drakboot:89
-#: logdrake:77
+#: drakboot:89 logdrake:77
#, c-format
msgid "/File/_Quit"
msgstr "/Dosya/Çı_kış"
-#: drakboot:89
-#: harddrake2:197
-#: logdrake:77
+#: drakboot:89 harddrake2:197 logdrake:77
#, c-format
msgid "<control>Q"
msgstr "<control>K"
@@ -113,20 +84,9 @@ msgstr "Verbose"
msgid "Silent"
msgstr "Sessiz"
-#: drakboot:137
-#: drakbug:263
-#: drakdvb:57
-#: drakfont:682
-#: drakperm:376
-#: drakperm:386
-#: drakups:27
-#: harddrake2:535
-#: localedrake:45
-#: notify-x11-free-driver-switch:18
-#: scannerdrake:51
-#: scannerdrake:54
-#: scannerdrake:297
-#: scannerdrake:302
+#: drakboot:137 drakbug:263 drakdvb:57 drakfont:682 drakperm:376 drakperm:386
+#: drakups:27 harddrake2:535 localedrake:45 notify-x11-free-driver-switch:18
+#: scannerdrake:51 scannerdrake:54 scannerdrake:297 scannerdrake:302
#: scannerdrake:954
#, c-format
msgid "Warning"
@@ -134,8 +94,13 @@ msgstr "Uyarı"
#: drakboot:138
#, c-format
-msgid "Your system bootloader is not in framebuffer mode. To activate graphical boot, select a graphic video mode from the bootloader configuration tool."
-msgstr "Sistem önyükleyiciniz çerçeve tampon belleği kipinde değil. Grafiksel açılışı 
etkinleştirmek için, önyükleyici yapılandırma aracını kullanarak grafik ekran kipi 
seçin."
+msgid ""
+"Your system bootloader is not in framebuffer mode. To activate graphical "
+"boot, select a graphic video mode from the bootloader configuration tool."
+msgstr ""
+"Sistem önyükleyiciniz çerçeve tampon belleği kipinde değil. Grafiksel "
+"açılışı 
etkinleştirmek için, önyükleyici yapılandırma aracını kullanarak grafik "
+"ekran kipi 
seçin."
#: drakboot:139
#, c-format
@@ -197,8 +162,7 @@ msgstr "Grafiksel ortam açılışta çalıştırılsın"
msgid "Boot Style Configuration"
msgstr "Önyükleme Yapılandırması"
-#: drakboot:261
-#: drakboot:265
+#: drakboot:261 drakboot:265
#, c-format
msgid "Video mode"
msgstr "Ekran kipi"
@@ -206,14 +170,14 @@ msgstr "Ekran kipi"
#: drakboot:262
#, c-format
msgid ""
-"Please choose a video mode, it will be applied to each of the boot entries selected below.\n"
+"Please choose a video mode, it will be applied to each of the boot entries "
+"selected below.\n"
"Be sure your video card supports the mode you choose."
msgstr ""
"Lütfen bir ekran kipi seçin, bu kip aşağıda seçilen her bir açılış girdisine 
uygulanacaktır.\n"
"
Seçtiğiniz kipin ekran kartınız tarafından desteklendiğinden emin olun."
-#: drakbug:65
-#: drakbug:153
+#: drakbug:65 drakbug:153
#, c-format
msgid "The \"%s\" program has crashed with the following error:"
msgstr "\"%s\" uygulaması şu hatayı vererek çöktü:"
@@ -238,14 +202,12 @@ msgstr "İlk Açılış Sihirbazı"
msgid "Synchronization tool"
msgstr "Eşleştirme aracı"
-#: drakbug:84
-#: drakbug:219
+#: drakbug:84 drakbug:219
#, c-format
msgid "Standalone Tools"
msgstr "Tekli Araçlar"
-#: drakbug:86
-#: drakbug:87
+#: drakbug:86 drakbug:87
#, c-format
msgid "Mandriva Online"
msgstr "Mandriva Online"
@@ -318,16 +280,23 @@ msgstr "GDB izi :"
#, c-format
msgid ""
"To submit a bug report, click on the report button. \n"
-"This will open a web browser window on %s where you'll find a form to fill in. The information displayed above will be transferred to that server"
+"This will open a web browser window on %s where you'll find a form to fill "
+"in. The information displayed above will be transferred to that server"
msgstr ""
"Hata bildirimi göndermek için raporla düğmesine tıklayın.\n"
-"Web tarayıcısı %s adresiyle açılacaktır. Oradaki formu doldurunca yukarıdaki bilgilerilerle birlikte oraya gönderilecektir."
+"Web tarayıcısı %s adresiyle açılacaktır. Oradaki formu doldurunca yukarıdaki "
+"bilgilerilerle birlikte oraya gönderilecektir."
#: drakbug:161
#, c-format
-msgid "It would be very useful to attach to your report the output of the following command: %s."
-msgid_plural "Things useful to attach to your report are the output of the following commands: %s."
-msgstr[0] "Şu komutların çıktısını rapora eklemeniz oldukça yararlı olacaktır: %s."
+msgid ""
+"It would be very useful to attach to your report the output of the following "
+"command: %s."
+msgid_plural ""
+"Things useful to attach to your report are the output of the following "
+"commands: %s."
+msgstr[0] ""
+"Şu komutların çıktısını rapora eklemeniz oldukça yararlı olacaktır: %s."
#: drakbug:164
#, c-format
@@ -361,7 +330,9 @@ msgstr "Paket kurulu deÄŸil"
#: drakbug:264
#, c-format
-msgid "You must type in what you were doing when this bug happened in order to enable us to reproduce this bug and to increase the odds of fixing it"
+msgid ""
+"You must type in what you were doing when this bug happened in order to "
+"enable us to reproduce this bug and to increase the odds of fixing it"
msgstr "Bizim yeniden bu hatayı oluşturabilmemiz ve düzeltebilmemiz için, 
bu hata oluştuğu sırada ne yaptığınız yazmanız gereklidir."
#: drakbug:265
@@ -369,8 +340,7 @@ msgstr "Bizim yeniden bu hatayı oluÅŸturabilmemiz ve düzeltebilmemiz için, â€
msgid "Thanks."
msgstr "Teşekkürler."
-#: drakclock:30
-#: draksec:170
+#: drakclock:30 draksec:170
#, c-format
msgid "Date, Clock & Time Zone Settings"
msgstr "Tarih, Saat & Zaman Dilimi Ayarları"
@@ -444,10 +414,7 @@ msgstr "Lütfen geçerli bir NTP sunucu adresi girin."
msgid "Could not synchronize with %s."
msgstr "%s ile eÅŸleÅŸtirilemiyor."
-#: drakclock:127
-#: drakdvb:149
-#: logdrake:175
-#: scannerdrake:491
+#: drakclock:127 drakdvb:149 logdrake:175 scannerdrake:491
#, c-format
msgid "Quit"
msgstr "Çık"
@@ -457,8 +424,7 @@ msgstr "Çık"
msgid "Retry"
msgstr "Yeniden dene"
-#: drakclock:151
-#: drakclock:161
+#: drakclock:151 drakclock:161
#, c-format
msgid "Reset"
msgstr "Sıfırla"
@@ -468,8 +434,7 @@ msgstr "Sıfırla"
msgid "DVB"
msgstr "DVB"
-#: drakdvb:39
-#: harddrake2:98
+#: drakdvb:39 harddrake2:98
#, c-format
msgid "Channel"
msgstr "Kanal"
@@ -484,19 +449,9 @@ msgstr "%s zaten var ve tüm içeriği kaybedilecektir."
msgid "Could not get the list of available channels"
msgstr "Erişilebilir kanalların listesi alınamıyor."
-#: drakdvb:80
-#: draksec:73
-#: drakups:99
-#: finish-install:105
-#: harddrake2:379
-#: scannerdrake:66
-#: scannerdrake:70
-#: scannerdrake:78
-#: scannerdrake:319
-#: scannerdrake:368
-#: scannerdrake:504
-#: scannerdrake:508
-#: scannerdrake:530
+#: drakdvb:80 draksec:73 drakups:99 finish-install:105 harddrake2:379
+#: scannerdrake:66 scannerdrake:70 scannerdrake:78 scannerdrake:319
+#: scannerdrake:368 scannerdrake:504 scannerdrake:508 scannerdrake:530
#: service_harddrake:344
#, c-format
msgid "Please wait"
@@ -507,12 +462,7 @@ msgstr "Lütfen bekleyin"
msgid "Detecting DVB channels, this will take a few minutes"
msgstr "DVB kanalları algılanıyor. Bu işlem zaman alabilir."
-#: drakdvb:85
-#: drakfont:572
-#: drakfont:652
-#: drakfont:736
-#: drakups:217
-#: logdrake:175
+#: drakdvb:85 drakfont:572 drakfont:652 drakfont:736 drakups:217 logdrake:175
#, c-format
msgid "Cancel"
msgstr "Ä°ptal"
@@ -565,8 +515,12 @@ msgstr "Değişiklik tamamlandı, dm hizmetini yeniden başlatmak ister misiniz?
#: drakedm:75
#, c-format
-msgid "You are going to close all running programs and lose your current session. Are you really sure that you want to restart the dm service?"
-msgstr "Çalışan tüm uygulamalarınızı kapatmak ve şu anki oturumu kaybetmek üzeresiniz. 
Gerçek ekran yöneticisi hizmetini yeniden başlatmak istiyor musnuz?"
+msgid ""
+"You are going to close all running programs and lose your current session. "
+"Are you really sure that you want to restart the dm service?"
+msgstr ""
+"Çalışan tüm uygulamalarınızı kapatmak ve şu anki oturumu kaybetmek "
+"üzeresiniz. 
Gerçek ekran yöneticisi hizmetini yeniden başlatmak istiyor musnuz?"
#: drakfont:187
#, c-format
@@ -588,14 +542,8 @@ msgstr "Hiç yazı tipi bulunamadı"
msgid "parse all fonts"
msgstr "tüm yazı tiplerini çözümle"
-#: drakfont:222
-#: drakfont:263
-#: drakfont:338
-#: drakfont:379
-#: drakfont:383
-#: drakfont:409
-#: drakfont:427
-#: drakfont:435
+#: drakfont:222 drakfont:263 drakfont:338 drakfont:379 drakfont:383
+#: drakfont:409 drakfont:427 drakfont:435
#, c-format
msgid "done"
msgstr "bitti"
@@ -645,8 +593,7 @@ msgstr "ttmkfdir çalışıyor, lütfen bekleyiniz..."
msgid "True Type install done"
msgstr "True Type kurulumu bitti"
-#: drakfont:354
-#: drakfont:369
+#: drakfont:354 drakfont:369
#, c-format
msgid "type1inst building"
msgstr "type1 kurulumu"
@@ -661,8 +608,7 @@ msgstr "Ghostscript başvuruları"
msgid "Suppress Temporary Files"
msgstr "Geçici dosyaları engelle"
-#: drakfont:425
-#: drakfont:431
+#: drakfont:425 drakfont:431
#, c-format
msgid "Suppress Fonts Files"
msgstr "Yazı tipi Dosyalarını Engelle"
@@ -670,13 +616,17 @@ msgstr "Yazı tipi Dosyalarını Engelle"
#: drakfont:439
#, c-format
msgid ""
-"Before installing any fonts, be sure that you have the right to use and install them on your system.\n"
+"Before installing any fonts, be sure that you have the right to use and "
+"install them on your system.\n"
"\n"
-"You can install the fonts the normal way. In rare cases, bogus fonts may hang up your X Server."
+"You can install the fonts the normal way. In rare cases, bogus fonts may "
+"hang up your X Server."
msgstr ""
-"Herhangi bir yazı tipini sisteminize kurmadan önce kullanım hakkınız olduğundan emin olmalısınız.\n"
+"Herhangi bir yazı tipini sisteminize kurmadan önce kullanım hakkınız "
+"olduğundan emin olmalısınız.\n"
"\n"
-"Yazı tiplerini normal yoldan kurabilirsiniz. Genellikle, sağdan soldan toplanan bozuk yazı tipleri X sunucunuzun çökmesine sebep olur.
"
+"Yazı tiplerini normal yoldan kurabilirsiniz. Genellikle, sağdan soldan "
+"toplanan bozuk yazı tipleri X sunucunuzun çökmesine sebep olur.
"
#: drakfont:478
#, c-format
@@ -688,8 +638,7 @@ msgstr "Yazı Tipi Kurulumu"
msgid "DrakFont"
msgstr "DrakFont"
-#: drakfont:490
-#: drakfont:642
+#: drakfont:490 drakfont:642
#, c-format
msgid "Font List"
msgstr "Yazı tipi Listesi"
@@ -704,14 +653,12 @@ msgstr "Windows Yazı Tiplerini Al"
msgid "About"
msgstr "Hakkında"
-#: drakfont:500
-#: drakfont:541
+#: drakfont:500 drakfont:541
#, c-format
msgid "Options"
msgstr "Seçenekler"
-#: drakfont:501
-#: drakfont:721
+#: drakfont:501 drakfont:721
#, c-format
msgid "Uninstall"
msgstr "Kaldır"
@@ -726,8 +673,7 @@ msgstr "Al"
msgid "Drakfont"
msgstr "Drakfont"
-#: drakfont:522
-#: harddrake2:234
+#: drakfont:522 harddrake2:234
#, c-format
msgid "Copyright (C) %s by Mandriva"
msgstr "Copyright (C) %s bir Mandriva ürünüdür"
@@ -737,16 +683,14 @@ msgstr "Copyright (C) %s bir Mandriva ürünüdür"
msgid "Font installer."
msgstr "Yazı tipi kurucusu."
-#: drakfont:526
-#: harddrake2:238
+#: drakfont:526 harddrake2:238
#, c-format
msgid "Mandriva Linux"
msgstr "Mandriva Linux"
#. -PO: put here name(s) and email(s) of translator(s) (eg: "John Smith <jsmith@nowhere.com>")
#. -PO: put here name(s) and email(s) of translator(s) (eg: "John Smith <jsmith@nowhere.com>")
-#: drakfont:533
-#: harddrake2:243
+#: drakfont:533 harddrake2:243
#, c-format
msgid "_: Translator(s) name(s) & email(s)\n"
msgstr ""
@@ -783,9 +727,7 @@ msgstr "Abiword"
msgid "Generic Printers"
msgstr "Temel Yazıcı"
-#: drakfont:562
-#: drakfont:572
-#: drakups:210
+#: drakfont:562 drakfont:572 drakups:210
#, c-format
msgid "Ok"
msgstr "Tamam"
@@ -793,7 +735,8 @@ msgstr "Tamam"
#: drakfont:571
#, c-format
msgid "Select the font file or directory and click on 'Add'"
-msgstr "Yazı tipi dosyasını ya da dizinini seçtikten sonra 'Ekle' ye tıklayınız."
+msgstr ""
+"Yazı tipi dosyasını ya da dizinini seçtikten sonra 'Ekle' ye tıklayınız."
#: drakfont:572
#, c-format
@@ -805,25 +748,17 @@ msgstr "Dosya Seçimi"
msgid "Fonts"
msgstr "Yazı tipleri"
-#: drakfont:640
-#: draksec:166
+#: drakfont:640 draksec:166
#, c-format
msgid "Import fonts"
msgstr "Yazı tipi al"
-#: drakfont:646
-#: drakups:299
-#: drakups:361
-#: drakups:381
+#: drakfont:646 drakups:299 drakups:361 drakups:381
#, c-format
msgid "Add"
msgstr "Ekle"
-#: drakfont:647
-#: drakfont:735
-#: drakups:301
-#: drakups:363
-#: drakups:383
+#: drakfont:647 drakfont:735 drakups:301 drakups:363 drakups:383
#, c-format
msgid "Remove"
msgstr "Kaldır"
@@ -838,16 +773,12 @@ msgstr "Kur"
msgid "Are you sure you want to uninstall the following fonts?"
msgstr "Aşağıdaki yazı tiplerini kaldırmak istediğinizden emin misiniz?"
-#: drakfont:688
-#: draksec:60
-#: harddrake2:324
+#: drakfont:688 draksec:60 harddrake2:324
#, c-format
msgid "Yes"
msgstr "Evet"
-#: drakfont:690
-#: draksec:59
-#: harddrake2:325
+#: drakfont:690 draksec:59 harddrake2:325
#, c-format
msgid "No"
msgstr "Hayır"
@@ -867,8 +798,7 @@ msgstr "Tümünü Seç"
msgid "Importing fonts"
msgstr "Yazı tipi alınıyor"
-#: drakfont:753
-#: drakfont:773
+#: drakfont:753 drakfont:773
#, c-format
msgid "Initial tests"
msgstr "Denetimler başlıyor"
@@ -908,13 +838,15 @@ msgstr "Kurulumun kaldırılması Sonrası"
msgid ""
" drakhelp 0.1\n"
"Copyright (C) %s Mandriva.\n"
-"This is free software and may be redistributed under the terms of the GNU GPL.\n"
+"This is free software and may be redistributed under the terms of the GNU "
+"GPL.\n"
"\n"
"Usage: \n"
msgstr ""
" drakhelp 0.1\n"
"Telif Hakkı (C) %s Mandriva.\n"
-"Bu bir serbest yazılımdır ve GNU GPL lisansı altında tekrar dağıtılabilinir.\n"
+"Bu bir serbest yazılımdır ve GNU GPL lisansı altında tekrar "
+"dağıtılabilinir.\n"
"\n"
"Kullanımı: \n"
@@ -925,13 +857,18 @@ msgstr " --help - bu yardım ekranını gösterir \n"
#: drakhelp:23
#, c-format
-msgid " --id <id_label> - load the html help page which refers to id_label\n"
-msgstr " --id <id_label> - id_label'e başvuran html yardım dosyasını yükle\n"
+msgid ""
+" --id <id_label> - load the html help page which refers to id_label\n"
+msgstr ""
+" --id <id_label> - id_label'e başvuran html yardım dosyasını yükle\n"
#: drakhelp:24
#, c-format
-msgid " --doc <link> - link to another web page ( for WM welcome frontend)\n"
-msgstr " --doc <link> - diğer web sayfasına bağlantıla ( WM hoşgeldiniz 
ön yüzü için)\n"
+msgid ""
+" --doc <link> - link to another web page ( for WM welcome "
+"frontend)\n"
+msgstr ""
+" --doc <link> - diğer web sayfasına bağlantıla ( WM hoşgeldiniz 
ön yüzü için)\n"
#: drakhelp:52
#, c-format
@@ -968,28 +905,22 @@ msgstr "Güvenlik İzinleri"
msgid "Editable"
msgstr "Düzenlenebilir"
-#: drakperm:50
-#: drakperm:320
+#: drakperm:50 drakperm:320
#, c-format
msgid "Path"
msgstr "Yol"
-#: drakperm:50
-#: drakperm:249
+#: drakperm:50 drakperm:249
#, c-format
msgid "User"
msgstr "Kullanıcı"
-#: drakperm:50
-#: drakperm:249
+#: drakperm:50 drakperm:249
#, c-format
msgid "Group"
msgstr "Grup"
-#: drakperm:50
-#: drakperm:109
-#: drakperm:332
-#: draksec:181
+#: drakperm:50 drakperm:109 drakperm:332 draksec:181
#, c-format
msgid "Permissions"
msgstr "Yetkiler"
@@ -999,9 +930,7 @@ msgstr "Yetkiler"
msgid "Add a new rule"
msgstr "Yeni bir kural ekle"
-#: drakperm:67
-#: drakperm:102
-#: drakperm:128
+#: drakperm:67 drakperm:102 drakperm:128
#, c-format
msgid "Edit current rule"
msgstr "Geçerli kuralı düzenle"
@@ -1009,11 +938,14 @@ msgstr "Geçerli kuralı düzenle"
#: drakperm:110
#, c-format
msgid ""
-"Here you can see files to use in order to fix permissions, owners, and groups via msec.\n"
+"Here you can see files to use in order to fix permissions, owners, and "
+"groups via msec.\n"
"You can also edit your own rules which will owerwrite the default rules."
msgstr ""
-"Burada, msec yoluyla yetkileri, sahipleri ve grupları düzeltmek amacıyla kullanılacak dosyaları görebilirsiniz.\n"
-"Ayrıca ön tanımlı kuralları değiştirerek kendi kurallarınızı da düzenleyebilirsiniz."
+"Burada, msec yoluyla yetkileri, sahipleri ve grupları düzeltmek amacıyla "
+"kullanılacak dosyaları görebilirsiniz.\n"
+"Ayrıca ön tanımlı kuralları değiştirerek kendi kurallarınızı da "
+"düzenleyebilirsiniz."
#: drakperm:112
#, c-format
@@ -1064,10 +996,7 @@ msgstr "Sil"
msgid "Delete selected rule"
msgstr "Seçili kuralı sil"
-#: drakperm:128
-#: drakups:300
-#: drakups:362
-#: drakups:382
+#: drakperm:128 drakups:300 drakups:362 drakups:382
#, c-format
msgid "Edit"
msgstr "Düzenle"
@@ -1268,8 +1197,7 @@ msgstr "Kök parolası"
msgid "User password"
msgstr "Kullanıcı parolası"
-#: draksec:149
-#: draksec:204
+#: draksec:149 draksec:204
#, c-format
msgid "Software Management"
msgstr "Yazılım Yöneticisi"
@@ -1349,8 +1277,7 @@ msgstr "Bağlantı Paylaşımı"
msgid "Backups"
msgstr "Yedekler"
-#: draksec:167
-#: logdrake:52
+#: draksec:167 logdrake:52
#, c-format
msgid "Logs"
msgstr "Kayıtlar"
@@ -1399,7 +1326,8 @@ msgstr "Ses kartı bulunamadı!"
#: draksound:51
#, c-format
msgid ""
-"No Sound Card has been detected on your machine. Please verify that a Linux-supported Sound Card is correctly plugged in.\n"
+"No Sound Card has been detected on your machine. Please verify that a Linux-"
+"supported Sound Card is correctly plugged in.\n"
"\n"
"\n"
"You can visit our hardware database at:\n"
@@ -1407,7 +1335,8 @@ msgid ""
"\n"
"http://www.mandrivalinux.com/en/hardware.php3"
msgstr ""
-"Sisteminizde hiç bir ses kartı bulunamadı. Lütfen makinanıza Linux-Uyumlu bir ses Kartının sorunsuz olarak takılı olduğundan emin olun.\n"
+"Sisteminizde hiç bir ses kartı bulunamadı. Lütfen makinanıza Linux-Uyumlu "
+"bir ses Kartının sorunsuz olarak takılı olduğundan emin olun.\n"
"\n"
"\n"
"Desteklenen donanımlar listesine aşağıdaki adresten ulaşabilirsiniz:\n"
@@ -1421,12 +1350,15 @@ msgid ""
"\n"
"\n"
"\n"
-"Note: if you've an ISA PnP sound card, you'll have to use the alsaconf or the sndconfig program. Just type \"alsaconf\" or \"sndconfig\" in a console."
+"Note: if you've an ISA PnP sound card, you'll have to use the alsaconf or "
+"the sndconfig program. Just type \"alsaconf\" or \"sndconfig\" in a console."
msgstr ""
"\n"
"\n"
"\n"
-"Not: Eğer Tak Kullan(PnP) tipinde bir ISA ses kartınız var ise, sndconfig veya alsaconf uygulamalarını kullanmalısınız. Sadece konsolda \"sndconfig\"veya \"alsaconf\" yazınız."
+"Not: Eğer Tak Kullan(PnP) tipinde bir ISA ses kartınız var ise, sndconfig "
+"veya alsaconf uygulamalarını kullanmalısınız. Sadece konsolda \"sndconfig"
+"\"veya \"alsaconf\" yazınız."
#: drakups:71
#, c-format
@@ -1459,7 +1391,8 @@ msgstr ""
msgid ""
"We're going to add an UPS device.\n"
"\n"
-"Do you want to autodetect UPS devices connected to this machine or to manually select them?"
+"Do you want to autodetect UPS devices connected to this machine or to "
+"manually select them?"
msgstr ""
"Bir UPS aygıtı ekleyeceğiz.\n"
"\n"
@@ -1470,16 +1403,12 @@ msgstr ""
msgid "Autodetection"
msgstr "Otomatik algıla"
-#: drakups:99
-#: harddrake2:379
+#: drakups:99 harddrake2:379
#, c-format
msgid "Detection in progress"
msgstr "Algılama sürüyor"
-#: drakups:118
-#: drakups:157
-#: logdrake:457
-#: logdrake:463
+#: drakups:118 drakups:157 logdrake:457 logdrake:463
#, c-format
msgid "Congratulations"
msgstr "Tebrikler"
@@ -1494,8 +1423,7 @@ msgstr "Sihirbaz aşağıdaki UPS aygıtları başarıyla ekledi:"
msgid "No new UPS devices was found"
msgstr "Yeni bir UPS aygıt bulunamadı"
-#: drakups:126
-#: drakups:138
+#: drakups:126 drakups:138
#, c-format
msgid "UPS driver configuration"
msgstr "UPS sürücü yapılandırması"
@@ -1559,24 +1487,18 @@ msgstr "Sihirbaz başarıyla yeni \"%s\" UPS aygıtını yapılandırdı."
msgid "UPS devices"
msgstr "UPS aygıtları"
-#: drakups:249
-#: drakups:268
-#: drakups:284
-#: harddrake2:86
-#: harddrake2:113
+#: drakups:249 drakups:268 drakups:284 harddrake2:86 harddrake2:113
#: harddrake2:120
#, c-format
msgid "Name"
msgstr "Ä°sim"
-#: drakups:249
-#: harddrake2:136
+#: drakups:249 harddrake2:136
#, c-format
msgid "Driver"
msgstr "Sürücü"
-#: drakups:249
-#: harddrake2:56
+#: drakups:249 harddrake2:56
#, c-format
msgid "Port"
msgstr "Kapı"
@@ -1611,8 +1533,7 @@ msgstr "Kurallar"
msgid "Action"
msgstr "Hareket"
-#: drakups:297
-#: harddrake2:83
+#: drakups:297 harddrake2:83
#, c-format
msgid "Level"
msgstr "Seviye"
@@ -1622,8 +1543,7 @@ msgstr "Seviye"
msgid "ACL name"
msgstr "ACL ismi"
-#: drakups:297
-#: finish-install:195
+#: drakups:297 finish-install:195
#, c-format
msgid "Password"
msgstr "Parola"
@@ -1633,8 +1553,7 @@ msgstr "Parola"
msgid "UPS Management"
msgstr "UPS Yönetimi"
-#: drakups:333
-#: drakups:342
+#: drakups:333 drakups:342
#, c-format
msgid "DrakUPS"
msgstr "DrakUPS"
@@ -1653,7 +1572,8 @@ msgstr "TV kartı bulunamadı."
#: drakxtv:69
#, c-format
msgid ""
-"No TV Card has been detected on your machine. Please verify that a Linux-supported Video/TV Card is correctly plugged in.\n"
+"No TV Card has been detected on your machine. Please verify that a Linux-"
+"supported Video/TV Card is correctly plugged in.\n"
"\n"
"\n"
"You can visit our hardware database at:\n"
@@ -1661,7 +1581,8 @@ msgid ""
"\n"
"http://www.mandrivalinux.com/en/hardware.php3"
msgstr ""
-"Sisteminizde hiç bir TV kartı bulunamadı. Lütfen makinanıza Linux-Uyumlu bir Video/TV Kartının sorunsuz olarak takılı olduğundan emin olun.\n"
+"Sisteminizde hiç bir TV kartı bulunamadı. Lütfen makinanıza Linux-Uyumlu bir "
+"Video/TV Kartının sorunsuz olarak takılı olduğundan emin olun.\n"
"\n"
"\n"
"Desteklenen donanımlar listesine aşağıdaki adresten ulaşabilirsiniz:\n"
@@ -1684,9 +1605,7 @@ msgstr "Lütfen, klavye yerleşimini seçiniz."
msgid "Testing your connection..."
msgstr "Bağlantınız test ediliyor..."
-#: finish-install:193
-#: finish-install:211
-#: finish-install:223
+#: finish-install:193 finish-install:211 finish-install:223
#, c-format
msgid "Encrypted home partition"
msgstr "Şifrelenmiş ev bölümü"
@@ -1721,27 +1640,30 @@ msgstr "Altarnatif sürücüler"
msgid "the list of alternative drivers for this sound card"
msgstr "bu ses kartı için sürücü seçenekleri"
-#: harddrake2:33
-#: harddrake2:122
+#: harddrake2:33 harddrake2:122
#, c-format
msgid "Bus"
msgstr "Veriyolu"
#: harddrake2:34
#, c-format
-msgid "this is the physical bus on which the device is plugged (eg: PCI, USB, ...)"
+msgid ""
+"this is the physical bus on which the device is plugged (eg: PCI, USB, ...)"
msgstr "bu, aygıtın takılı olduğu fiziksel veriyoludur (örn. PCI, USB, ...)"
-#: harddrake2:36
-#: harddrake2:148
+#: harddrake2:36 harddrake2:148
#, c-format
msgid "Bus identification"
msgstr "Veriyolu tanımlaması"
#: harddrake2:37
#, c-format
-msgid "- PCI and USB devices: this lists the vendor, device, subvendor and subdevice PCI/USB ids"
-msgstr "- PCI ve USB aygıtları : bu liste üretici, aygıt, alt-üretici ve alt-aygıt PCI/USB kimliklerini göstermektedir"
+msgid ""
+"- PCI and USB devices: this lists the vendor, device, subvendor and "
+"subdevice PCI/USB ids"
+msgstr ""
+"- PCI ve USB aygıtları : bu liste üretici, aygıt, alt-üretici ve alt-aygıt "
+"PCI/USB kimliklerini göstermektedir"
#: harddrake2:39
#, c-format
@@ -1850,8 +1772,7 @@ msgstr "Ortam sınıfı"
msgid "class of hardware device"
msgstr "donanım aygıtının sınıfı"
-#: harddrake2:55
-#: harddrake2:84
+#: harddrake2:55 harddrake2:84
#, c-format
msgid "Model"
msgstr "Model"
@@ -1876,8 +1797,7 @@ msgstr "Birincil bölümler"
msgid "the number of the primary partitions"
msgstr "birincil bölüm sayısı"
-#: harddrake2:58
-#: harddrake2:89
+#: harddrake2:58 harddrake2:89
#, c-format
msgid "Vendor"
msgstr "Ãœretici"
@@ -1892,8 +1812,7 @@ msgstr "aygıtın üreticisinin adı"
msgid "PCI domain"
msgstr "PCI etki alanı"
-#: harddrake2:59
-#: harddrake2:60
+#: harddrake2:59 harddrake2:60
#, c-format
msgid "the PCI domain of the device"
msgstr "aygıtının PCI etki alanı"
@@ -1990,8 +1909,14 @@ msgstr "Bogomips"
#: harddrake2:72
#, c-format
-msgid "the GNU/Linux kernel needs to run a calculation loop at boot time to initialize a timer counter. Its result is stored as bogomips as a way to \"benchmark\" the cpu."
-msgstr "GNU/Linux çekirdeğinin bir zamanlayıcı sayacı çalıştırabilmesi için açılış sırasında bir hesaplama döngü yürütmesi gerekli. Bunun sonucu işlemcinin \"benchmark\" ı olması için bogomip çeklinde saklanacaktır."
+msgid ""
+"the GNU/Linux kernel needs to run a calculation loop at boot time to "
+"initialize a timer counter. Its result is stored as bogomips as a way to "
+"\"benchmark\" the cpu."
+msgstr ""
+"GNU/Linux çekirdeğinin bir zamanlayıcı sayacı çalıştırabilmesi için açılış "
+"sırasında bir hesaplama döngü yürütmesi gerekli. Bunun sonucu işlemcinin "
+"\"benchmark\" ı olması için bogomip çeklinde saklanacaktır."
#: harddrake2:73
#, c-format
@@ -2030,8 +1955,13 @@ msgstr "Frekans (MHz)"
#: harddrake2:76
#, c-format
-msgid "the CPU frequency in MHz (Megahertz which in first approximation may be coarsely assimilated to number of instructions the cpu is able to execute per second)"
-msgstr "MHz cinsinden İşlemci frekansı (İşlemcinin saniyede yürütebileceği talimat sayısına kabaca benzeşen ilk yaklaşık Megahertz değeri)"
+msgid ""
+"the CPU frequency in MHz (Megahertz which in first approximation may be "
+"coarsely assimilated to number of instructions the cpu is able to execute "
+"per second)"
+msgstr ""
+"MHz cinsinden İşlemci frekansı (İşlemcinin saniyede yürütebileceği talimat "
+"sayısına kabaca benzeşen ilk yaklaşık Megahertz değeri)"
#: harddrake2:77
#, c-format
@@ -2043,8 +1973,7 @@ msgstr "Bayraklar"
msgid "CPU flags reported by the kernel"
msgstr "Çekirdek tarafından CPU bayrakları raporlandı"
-#: harddrake2:78
-#: harddrake2:141
+#: harddrake2:78 harddrake2:141
#, c-format
msgid "Cores"
msgstr "Çekirdekler"
@@ -2131,8 +2060,14 @@ msgstr "Yazma koruması"
#: harddrake2:90
#, c-format
-msgid "the WP flag in the CR0 register of the cpu enforce write protection at the memory page level, thus enabling the processor to prevent unchecked kernel accesses to user memory (aka this is a bug guard)"
-msgstr "Hafıza sayfalama seviyesinde işlemci yazma korumasına zorlaması CR0 kaydındaki WP bayrağı; ki kullanıcı hafızasına çekirdeğin denetlenmemiş erişimlerini engeller (yani bir hata korumasıdır.)"
+msgid ""
+"the WP flag in the CR0 register of the cpu enforce write protection at the "
+"memory page level, thus enabling the processor to prevent unchecked kernel "
+"accesses to user memory (aka this is a bug guard)"
+msgstr ""
+"Hafıza sayfalama seviyesinde işlemci yazma korumasına zorlaması CR0 "
+"kaydındaki WP bayrağı; ki kullanıcı hafızasına çekirdeğin denetlenmemiş "
+"erişimlerini engeller (yani bir hata korumasıdır.)"
#: harddrake2:94
#, c-format
@@ -2177,10 +2112,12 @@ msgstr "Mantıksal bölüm numarası"
#: harddrake2:101
#, c-format
msgid ""
-"the SCSI Logical Unit Number (LUN). SCSI devices connected to a host are uniquely identified by a\n"
+"the SCSI Logical Unit Number (LUN). SCSI devices connected to a host are "
+"uniquely identified by a\n"
"channel number, a target id and a logical unit number"
msgstr ""
-"SCSI hedef numarası (LUN). Bir makineye bağlanan SCSI aygıtlar benzersiz bir kanal numarası,\n"
+"SCSI hedef numarası (LUN). Bir makineye bağlanan SCSI aygıtlar benzersiz bir "
+"kanal numarası,\n"
"hedef kimliği ve bir mantıksal birim numarası ile algılanırlar."
#. -PO: here, "size" is the size of the ram chip (eg: 128Mo, 256Mo, ...)
@@ -2204,8 +2141,7 @@ msgstr "EtkinleÅŸtirilmiÅŸ Boyut"
msgid "Enabled size of the memory bank"
msgstr "Hafıza bankasının etkinleştirilmiş boyutu"
-#: harddrake2:110
-#: harddrake2:119
+#: harddrake2:110 harddrake2:119
#, c-format
msgid "Type"
msgstr "Türü"
@@ -2242,7 +2178,8 @@ msgstr "Aygıt dosyası"
#: harddrake2:117
#, c-format
-msgid "the device file used to communicate with the kernel driver for the mouse"
+msgid ""
+"the device file used to communicate with the kernel driver for the mouse"
msgstr "aygıt dosyası, fare için çekirdek sürücüsü ile iletişimde kullanılır."
#: harddrake2:118
@@ -2295,8 +2232,7 @@ msgstr "grafik masaüstünün fare ile kullanacağı protokol"
msgid "Identification"
msgstr "Tanımlama Ekle"
-#: harddrake2:132
-#: harddrake2:147
+#: harddrake2:132 harddrake2:147
#, c-format
msgid "Connection"
msgstr "Bağlantı"
@@ -2322,15 +2258,12 @@ msgid "Features"
msgstr "Özellikler"
#. -PO: please keep all "/" characters !!!
-#: harddrake2:178
-#: logdrake:78
+#: harddrake2:178 logdrake:78
#, c-format
msgid "/_Options"
msgstr "/_Ayarlar"
-#: harddrake2:179
-#: harddrake2:208
-#: logdrake:80
+#: harddrake2:179 harddrake2:208 logdrake:80
#, c-format
msgid "/_Help"
msgstr "/_Yardım"
@@ -2391,8 +2324,12 @@ msgstr "Bir aygıt seçiniz"
#: harddrake2:221
#, c-format
-msgid "Once you've selected a device, you'll be able to see the device information in fields displayed on the right frame (\"Information\")"
-msgstr "Bir aygıt seçtiğinizde, sağ yandaki tablada (\"Bilgi\") aygıt hakkındaki bilgileri görebilirsiniz."
+msgid ""
+"Once you've selected a device, you'll be able to see the device information "
+"in fields displayed on the right frame (\"Information\")"
+msgstr ""
+"Bir aygıt seçtiğinizde, sağ yandaki tablada (\"Bilgi\") aygıt hakkındaki "
+"bilgileri görebilirsiniz."
#: harddrake2:227
#, c-format
@@ -2419,8 +2356,7 @@ msgstr "Bu HardDrake' tir. Bir %s donanım yapılandırma aracıdır."
msgid "Detected hardware"
msgstr "Bulunan donanımlar"
-#: harddrake2:272
-#: scannerdrake:286
+#: harddrake2:272 scannerdrake:286
#, c-format
msgid "Information"
msgstr "Bilgiler"
@@ -2437,11 +2373,11 @@ msgstr "Yapılandırma aracını çalıştır"
#: harddrake2:301
#, c-format
-msgid "Click on a device in the left tree in order to display its information here."
+msgid ""
+"Click on a device in the left tree in order to display its information here."
msgstr "Hakkında bilgi edinmek istediğiniz aygıtı sol ağaçtan tıklayınız."
-#: harddrake2:322
-#: notify-x11-free-driver-switch:13
+#: harddrake2:322 notify-x11-free-driver-switch:13
#, c-format
msgid "unknown"
msgstr "bilinmeyen"
@@ -2625,8 +2561,7 @@ msgstr "Takvim"
msgid "Content of the file"
msgstr "Dosya içeriği"
-#: logdrake:163
-#: logdrake:407
+#: logdrake:163 logdrake:407
#, c-format
msgid "Mail alert"
msgstr "Posta uyarısı"
@@ -2734,7 +2669,9 @@ msgstr "Hizmet ayarları"
#: logdrake:422
#, c-format
-msgid "You will receive an alert if one of the selected services is no longer running"
+msgid ""
+"You will receive an alert if one of the selected services is no longer "
+"running"
msgstr "Eğer seçili servislerden biri artık çalışmıyorsa bir uyarı alacaksınız"
#: logdrake:429
@@ -2772,12 +2709,17 @@ msgstr "ve kullanmak istediğiniz SMTP sunucu adını (veya IP) girin"
#: logdrake:445
#, c-format
msgid "\"%s\" neither is a valid email nor is an existing local user!"
-msgstr "\"%s\" ne geçerli bir e-posta adresi ne de varolan bir yerel kullanıcı!"
+msgstr ""
+"\"%s\" ne geçerli bir e-posta adresi ne de varolan bir yerel kullanıcı!"
#: logdrake:450
#, c-format
-msgid "\"%s\" is a local user, but you did not select a local smtp, so you must use a complete email address!"
-msgstr "\"%s\" bir yerel kullanıcı; ancak bir yerel smtp seçmemiştiniz. Yani, tam bir e-posta adresi kullanmak durumundasınız!"
+msgid ""
+"\"%s\" is a local user, but you did not select a local smtp, so you must use "
+"a complete email address!"
+msgstr ""
+"\"%s\" bir yerel kullanıcı; ancak bir yerel smtp seçmemiştiniz. Yani, tam "
+"bir e-posta adresi kullanmak durumundasınız!"
#: logdrake:457
#, c-format
@@ -2796,8 +2738,12 @@ msgstr "Farklı Kaydet..."
#: notify-x11-free-driver-switch:20
#, c-format
-msgid "The proprietary driver for your graphic card can not be found, the system is now using the free software driver (%s)."
-msgstr "Ekran kartınız için tescilli bir sürücü bulunamadı. Sistem şu anda özgür yazılım sürücüsü(%s) kullanıyor."
+msgid ""
+"The proprietary driver for your graphic card can not be found, the system is "
+"now using the free software driver (%s)."
+msgstr ""
+"Ekran kartınız için tescilli bir sürücü bulunamadı. Sistem şu anda özgür "
+"yazılım sürücüsü(%s) kullanıyor."
#: notify-x11-free-driver-switch:21
#, c-format
@@ -2822,28 +2768,27 @@ msgstr "Scannerdrake iptal ediliyor."
#: scannerdrake:60
#, c-format
-msgid "Could not install the packages needed to set up a scanner with Scannerdrake."
-msgstr "Scannerdrake ile bir tarayıcı kurabilmek için gerekli paketler kurulamıyor."
+msgid ""
+"Could not install the packages needed to set up a scanner with Scannerdrake."
+msgstr ""
+"Scannerdrake ile bir tarayıcı kurabilmek için gerekli paketler kurulamıyor."
#: scannerdrake:61
#, c-format
msgid "Scannerdrake will not be started now."
msgstr "Scannerdrake şimdi başlatılmayacak."
-#: scannerdrake:67
-#: scannerdrake:505
+#: scannerdrake:67 scannerdrake:505
#, c-format
msgid "Searching for configured scanners..."
msgstr "Yapılandırılmış tarayıcılar aranıyor ..."
-#: scannerdrake:71
-#: scannerdrake:509
+#: scannerdrake:71 scannerdrake:509
#, c-format
msgid "Searching for new scanners..."
msgstr "Yeni tarayıcılar aranıyor ..."
-#: scannerdrake:79
-#: scannerdrake:531
+#: scannerdrake:79 scannerdrake:531
#, c-format
msgid "Re-generating list of configured scanners..."
msgstr "Yapılandırılmış tarayıcıların listesi yeniden oluşturuluyor ..."
@@ -2853,8 +2798,7 @@ msgstr "Yapılandırılmış tarayıcıların listesi yeniden oluşturuluyor ...
msgid "The %s is not supported by this version of %s."
msgstr "%s aygıtı %s sürümlü dağıtımca desteklenmiyor."
-#: scannerdrake:104
-#: scannerdrake:115
+#: scannerdrake:104 scannerdrake:115
#, c-format
msgid "Confirmation"
msgstr "Onaylama"
@@ -2889,8 +2833,7 @@ msgstr "Bir tarayıcı modeli seçin (Algılanan model %s)"
msgid "Select a scanner model (Port: %s)"
msgstr "Bir tarayıcı modeli seçin (Port: %s)"
-#: scannerdrake:136
-#: scannerdrake:139
+#: scannerdrake:136 scannerdrake:139
#, c-format
msgid " (UNSUPPORTED)"
msgstr " (DESTEKLENMÄ°YOR)"
@@ -2900,68 +2843,63 @@ msgstr " (DESTEKLENMÄ°YOR)"
msgid "The %s is not supported under Linux."
msgstr "%s aygıtı Linux tarafından desteklenmiyor."
-#: scannerdrake:169
-#: scannerdrake:183
+#: scannerdrake:169 scannerdrake:183
#, c-format
msgid "Do not install firmware file"
msgstr "Donanım yazılımı dosyasını kurma"
-#: scannerdrake:172
-#: scannerdrake:222
+#: scannerdrake:172 scannerdrake:222
#, c-format
msgid "Scanner Firmware"
msgstr "Tarayıcı donanımsal yazılımı"
-#: scannerdrake:173
-#: scannerdrake:225
+#: scannerdrake:173 scannerdrake:225
#, c-format
-msgid "It is possible that your %s needs its firmware to be uploaded everytime when it is turned on."
-msgstr "%s için her çalıştırılmasında bir donanım yazılımı yüklenmesi gerekebilir."
+msgid ""
+"It is possible that your %s needs its firmware to be uploaded everytime when "
+"it is turned on."
+msgstr ""
+"%s için her çalıştırılmasında bir donanım yazılımı yüklenmesi gerekebilir."
-#: scannerdrake:174
-#: scannerdrake:226
+#: scannerdrake:174 scannerdrake:226
#, c-format
msgid "If this is the case, you can make this be done automatically."
msgstr "Durum buysa; bunun otomatikman yapılmasını sağlayabilirsiniz."
-#: scannerdrake:175
-#: scannerdrake:229
+#: scannerdrake:175 scannerdrake:229
#, c-format
-msgid "To do so, you need to supply the firmware file for your scanner so that it can be installed."
-msgstr "Bunu yapmak için; tarayıcınız için bir donanım yazılımı dosyası sağlamalısınız ki aygıt kurulabilsin."
+msgid ""
+"To do so, you need to supply the firmware file for your scanner so that it "
+"can be installed."
+msgstr ""
+"Bunu yapmak için; tarayıcınız için bir donanım yazılımı dosyası "
+"sağlamalısınız ki aygıt kurulabilsin."
-#: scannerdrake:176
-#: scannerdrake:230
+#: scannerdrake:176 scannerdrake:230
#, c-format
-msgid "You find the file on the CD or floppy coming with the scanner, on the manufacturer's home page, or on your Windows partition."
-msgstr "Dosyayı tarayıcı ile verilen CD veya disket üzerinde, üreticinin internet sitesinde veya bilgisayarınızın Windows bölümünde bulabilirsiniz."
+msgid ""
+"You find the file on the CD or floppy coming with the scanner, on the "
+"manufacturer's home page, or on your Windows partition."
+msgstr ""
+"Dosyayı tarayıcı ile verilen CD veya disket üzerinde, üreticinin internet "
+"sitesinde veya bilgisayarınızın Windows bölümünde bulabilirsiniz."
-#: scannerdrake:178
-#: scannerdrake:237
+#: scannerdrake:178 scannerdrake:237
#, c-format
msgid "Install firmware file from"
msgstr "Donanım yazılımını şu kaynaklardan birinden kurun:"
-#: scannerdrake:180
-#: scannerdrake:188
-#: scannerdrake:239
-#: scannerdrake:246
+#: scannerdrake:180 scannerdrake:188 scannerdrake:239 scannerdrake:246
#, c-format
msgid "CD-ROM"
msgstr "CD-ROM"
-#: scannerdrake:181
-#: scannerdrake:190
-#: scannerdrake:240
-#: scannerdrake:248
+#: scannerdrake:181 scannerdrake:190 scannerdrake:240 scannerdrake:248
#, c-format
msgid "Floppy Disk"
msgstr "Disket"
-#: scannerdrake:182
-#: scannerdrake:192
-#: scannerdrake:241
-#: scannerdrake:250
+#: scannerdrake:182 scannerdrake:192 scannerdrake:241 scannerdrake:250
#, c-format
msgid "Other place"
msgstr "DiÄŸer konum"
@@ -2971,26 +2909,37 @@ msgstr "DiÄŸer konum"
msgid "Select firmware file"
msgstr "Donanım yazılımı dosyasını seçin"
-#: scannerdrake:201
-#: scannerdrake:260
+#: scannerdrake:201 scannerdrake:260
#, c-format
msgid "The firmware file %s does not exist or is unreadable!"
msgstr "%s donanım yazılımı dosyası ya hiç yok ya da okunamaz durumda!"
#: scannerdrake:224
#, c-format
-msgid "It is possible that your scanners need their firmware to be uploaded everytime when they are turned on."
-msgstr "Tarayıcılarınız için her çalıştırılmalarında bir donanım yazılımı yüklenmesi gerekebilir."
+msgid ""
+"It is possible that your scanners need their firmware to be uploaded "
+"everytime when they are turned on."
+msgstr ""
+"Tarayıcılarınız için her çalıştırılmalarında bir donanım yazılımı yüklenmesi "
+"gerekebilir."
#: scannerdrake:228
#, c-format
-msgid "To do so, you need to supply the firmware files for your scanners so that it can be installed."
-msgstr "Bunu yapmak için; tarayıcılarınız için birer donanım yazılımı dosyası sağlamalısınız ki aygıtlar kurulabilsin."
+msgid ""
+"To do so, you need to supply the firmware files for your scanners so that it "
+"can be installed."
+msgstr ""
+"Bunu yapmak için; tarayıcılarınız için birer donanım yazılımı dosyası "
+"sağlamalısınız ki aygıtlar kurulabilsin."
#: scannerdrake:231
#, c-format
-msgid "If you have already installed your scanner's firmware you can update the firmware here by supplying the new firmware file."
-msgstr "Tarayıcınız için bir donanım yazılımını önceden kurduysanız, yeni bir donanım yazılımı dosyası sağlayarak burada güncelleyebilirsiniz."
+msgid ""
+"If you have already installed your scanner's firmware you can update the "
+"firmware here by supplying the new firmware file."
+msgstr ""
+"Tarayıcınız için bir donanım yazılımını önceden kurduysanız, yeni bir "
+"donanım yazılımı dosyası sağlayarak burada güncelleyebilirsiniz."
#: scannerdrake:233
#, c-format
@@ -3021,31 +2970,29 @@ msgstr "%s desteklenmiyor"
#, c-format
msgid ""
"The %s must be configured by system-config-printer.\n"
-"You can launch system-config-printer from the %s Control Center in Hardware section."
+"You can launch system-config-printer from the %s Control Center in Hardware "
+"section."
msgstr ""
"%s system-config-printer ile yapılandırılmalı.\n"
-"system-config-printer uygulamasını %s Denetim Merkezinin Donanım bölümünden çalıştırabilirsiniz."
+"system-config-printer uygulamasını %s Denetim Merkezinin Donanım bölümünden "
+"çalıştırabilirsiniz."
#: scannerdrake:320
#, c-format
msgid "Setting up kernel modules..."
msgstr "Çekirdek modülleri kuruluyor..."
-#: scannerdrake:330
-#: scannerdrake:337
-#: scannerdrake:367
+#: scannerdrake:330 scannerdrake:337 scannerdrake:367
#, c-format
msgid "Auto-detect available ports"
msgstr "Mevcut limanları otomatik algıla"
-#: scannerdrake:331
-#: scannerdrake:377
+#: scannerdrake:331 scannerdrake:377
#, c-format
msgid "Device choice"
msgstr "Aygıt seçimi"
-#: scannerdrake:332
-#: scannerdrake:378
+#: scannerdrake:332 scannerdrake:378
#, c-format
msgid "Please select the device where your %s is attached"
msgstr "Lütfen %s limanına eklediğiniz aygıtı seçiniz"
@@ -3055,8 +3002,7 @@ msgstr "Lütfen %s limanına eklediğiniz aygıtı seçiniz"
msgid "(Note: Parallel ports cannot be auto-detected)"
msgstr "(Not: Paralel limanlar otomatik algılanılamıyor)"
-#: scannerdrake:335
-#: scannerdrake:380
+#: scannerdrake:335 scannerdrake:380
#, c-format
msgid "choose device"
msgstr "Aygıtı Seç"
@@ -3066,8 +3012,7 @@ msgstr "Aygıtı Seç"
msgid "Searching for scanners..."
msgstr "Tarayıcılar aranıyor ..."
-#: scannerdrake:405
-#: scannerdrake:412
+#: scannerdrake:405 scannerdrake:412
#, c-format
msgid "Attention!"
msgstr "Dikkat!"
@@ -3077,33 +3022,48 @@ msgstr "Dikkat!"
msgid ""
"Your %s cannot be configured fully automatically.\n"
"\n"
-"Manual adjustments are required. Please edit the configuration file /etc/sane.d/%s.conf. "
+"Manual adjustments are required. Please edit the configuration file /etc/"
+"sane.d/%s.conf. "
msgstr ""
"%s tamamen otomatik olarak yapılandırılamaz.\n"
"\n"
"Elle ayarlama gerekli. Lütfen, etc/sane.d/%s.conf dosyasını düzenleyin."
-#: scannerdrake:407
-#: scannerdrake:416
+#: scannerdrake:407 scannerdrake:416
#, c-format
-msgid "More info in the driver's manual page. Run the command \"man sane-%s\" to read it."
-msgstr "Daha fazla bilgi sürücünün el kitabında bulunmaktadır. \"man sane-%s\" komutunu çalıştırarak okuyabilirsiniz."
+msgid ""
+"More info in the driver's manual page. Run the command \"man sane-%s\" to "
+"read it."
+msgstr ""
+"Daha fazla bilgi sürücünün el kitabında bulunmaktadır. \"man sane-%s\" "
+"komutunu çalıştırarak okuyabilirsiniz."
-#: scannerdrake:409
-#: scannerdrake:418
+#: scannerdrake:409 scannerdrake:418
#, c-format
-msgid "After that you may scan documents using \"XSane\" or \"Kooka\" from Multimedia/Graphics in the applications menu."
-msgstr "Bundan sonra uygulamalar menüsünden Çoklu Ortam/Grafikler altından \"XSane\" veya \"Kooka\" ile belgelerinizi tarayabilirsiniz."
+msgid ""
+"After that you may scan documents using \"XSane\" or \"Kooka\" from "
+"Multimedia/Graphics in the applications menu."
+msgstr ""
+"Bundan sonra uygulamalar menüsünden Çoklu Ortam/Grafikler altından \"XSane\" "
+"veya \"Kooka\" ile belgelerinizi tarayabilirsiniz."
#: scannerdrake:413
#, c-format
-msgid "Your %s has been configured, but it is possible that additional manual adjustments are needed to get it to work. "
-msgstr "%s yapılandırıldı. Ancak, çalışabilmesi için elle ek ayarlamalar yapmanız gerekebilir."
+msgid ""
+"Your %s has been configured, but it is possible that additional manual "
+"adjustments are needed to get it to work. "
+msgstr ""
+"%s yapılandırıldı. Ancak, çalışabilmesi için elle ek ayarlamalar yapmanız "
+"gerekebilir."
#: scannerdrake:414
#, c-format
-msgid "If it does not appear in the list of configured scanners in the main window of Scannerdrake or if it does not work correctly, "
-msgstr "Scannerdrake ana penceresindeki yapılandırılan tarayıcılar arasında göremezseniz veya düzgün biçimde çalışmazsa, "
+msgid ""
+"If it does not appear in the list of configured scanners in the main window "
+"of Scannerdrake or if it does not work correctly, "
+msgstr ""
+"Scannerdrake ana penceresindeki yapılandırılan tarayıcılar arasında "
+"göremezseniz veya düzgün biçimde çalışmazsa, "
#: scannerdrake:415
#, c-format
@@ -3119,10 +3079,12 @@ msgstr "Tebrikler!"
#, c-format
msgid ""
"Your %s has been configured.\n"
-"You may now scan documents using \"XSane\" or \"Kooka\" from Multimedia/Graphics in the applications menu."
+"You may now scan documents using \"XSane\" or \"Kooka\" from Multimedia/"
+"Graphics in the applications menu."
msgstr ""
"%s tarayıcınızın yapılandırması tamamlandı.\n"
-"Bundan sonra uygulamalar menüsünden Çoklu Ortam/Grafikler altından \"XSane\" veya \"Kooka\" ile belgelerinizi tarayabilirsiniz."
+"Bundan sonra uygulamalar menüsünden Çoklu Ortam/Grafikler altından \"XSane\" "
+"veya \"Kooka\" ile belgelerinizi tarayabilirsiniz."
#: scannerdrake:446
#, c-format
@@ -3150,8 +3112,7 @@ msgstr ""
"%s\n"
"sisteminizde mevcut.\n"
-#: scannerdrake:449
-#: scannerdrake:452
+#: scannerdrake:449 scannerdrake:452
#, c-format
msgid "There are no scanners found which are available on your system.\n"
msgstr "Bilgisayarınızda hiçbir mevcut tarayıcı bulunamadı.\n"
@@ -3181,14 +3142,12 @@ msgstr "Firmware dosyalarını Kur/Güncelle"
msgid "Scanner sharing"
msgstr "Tarayıcı paylaşımı"
-#: scannerdrake:544
-#: scannerdrake:709
+#: scannerdrake:544 scannerdrake:709
#, c-format
msgid "All remote machines"
msgstr "Tüm uzak makineler"
-#: scannerdrake:556
-#: scannerdrake:859
+#: scannerdrake:556 scannerdrake:859
#, c-format
msgid "This machine"
msgstr "Bu makine"
@@ -3200,26 +3159,35 @@ msgstr "Tarayıcı Paylaşımı"
#: scannerdrake:596
#, c-format
-msgid "Here you can choose whether the scanners connected to this machine should be accessible by remote machines and by which remote machines."
-msgstr "Burada, bu makineye bağlanan tarayıcılara uzak makinelerden erişilip erişilemeyeceğini ve hangi uzak makinelerden erişilebileceğini ayarlayabilirsiniz."
+msgid ""
+"Here you can choose whether the scanners connected to this machine should be "
+"accessible by remote machines and by which remote machines."
+msgstr ""
+"Burada, bu makineye bağlanan tarayıcılara uzak makinelerden erişilip "
+"eriÅŸilemeyeceÄŸini ve hangi uzak makinelerden eriÅŸilebileceÄŸini "
+"ayarlayabilirsiniz."
#: scannerdrake:597
#, c-format
-msgid "You can also decide here whether scanners on remote machines should be made available on this machine."
-msgstr "Ayrıca, uzak makinelerdeki tarayıcıların bu makine tarafından kullanılıp kullanılmayacağına karar verebilirsiniz."
+msgid ""
+"You can also decide here whether scanners on remote machines should be made "
+"available on this machine."
+msgstr ""
+"Ayrıca, uzak makinelerdeki tarayıcıların bu makine tarafından kullanılıp "
+"kullanılmayacağına karar verebilirsiniz."
#: scannerdrake:600
#, c-format
msgid "The scanners on this machine are available to other computers"
-msgstr "Bu makinedeki mevcut tarayıcılara diğer bilgisayarlardan da erişilebilir"
+msgstr ""
+"Bu makinedeki mevcut tarayıcılara diğer bilgisayarlardan da erişilebilir"
#: scannerdrake:602
#, c-format
msgid "Scanner sharing to hosts: "
msgstr "Şu makinelere tarayıcı paylaştırılıyor: "
-#: scannerdrake:607
-#: scannerdrake:624
+#: scannerdrake:607 scannerdrake:624
#, c-format
msgid "No remote machines"
msgstr "Uzak makine yok"
@@ -3234,68 +3202,57 @@ msgstr "Uzak makinelerdeki tarayıcıları kullan"
msgid "Use the scanners on hosts: "
msgstr "Şu makinelerdeki tarayıcıları kullan: "
-#: scannerdrake:646
-#: scannerdrake:718
-#: scannerdrake:868
+#: scannerdrake:646 scannerdrake:718 scannerdrake:868
#, c-format
msgid "Sharing of local scanners"
msgstr "Yerel tarayıcıların paylaşımı"
#: scannerdrake:647
#, c-format
-msgid "These are the machines on which the locally connected scanner(s) should be available:"
-msgstr "Bunlar yerel bağlanmış tarayıcı(lar)ın kullanılabileceği makineler ve ağlardır:"
+msgid ""
+"These are the machines on which the locally connected scanner(s) should be "
+"available:"
+msgstr ""
+"Bunlar yerel bağlanmış tarayıcı(lar)ın kullanılabileceği makineler ve "
+"ağlardır:"
-#: scannerdrake:658
-#: scannerdrake:808
+#: scannerdrake:658 scannerdrake:808
#, c-format
msgid "Add host"
msgstr "Makine Ekle"
-#: scannerdrake:664
-#: scannerdrake:814
+#: scannerdrake:664 scannerdrake:814
#, c-format
msgid "Edit selected host"
msgstr "Seçili makineyi düzenle"
-#: scannerdrake:673
-#: scannerdrake:823
+#: scannerdrake:673 scannerdrake:823
#, c-format
msgid "Remove selected host"
msgstr "Seçili makineleri kaldır"
-#: scannerdrake:682
-#: scannerdrake:832
+#: scannerdrake:682 scannerdrake:832
#, c-format
msgid "Done"
msgstr "Tamamlandı"
-#: scannerdrake:697
-#: scannerdrake:705
-#: scannerdrake:710
-#: scannerdrake:756
-#: scannerdrake:847
-#: scannerdrake:855
-#: scannerdrake:860
-#: scannerdrake:906
+#: scannerdrake:697 scannerdrake:705 scannerdrake:710 scannerdrake:756
+#: scannerdrake:847 scannerdrake:855 scannerdrake:860 scannerdrake:906
#, c-format
msgid "Name/IP address of host:"
msgstr "Makinenin adı/IP adresi:"
-#: scannerdrake:719
-#: scannerdrake:869
+#: scannerdrake:719 scannerdrake:869
#, c-format
msgid "Choose the host on which the local scanners should be made available:"
msgstr "Yerel tarayıcıların kullanılabileceği ağ veya makineleri seçin:"
-#: scannerdrake:730
-#: scannerdrake:880
+#: scannerdrake:730 scannerdrake:880
#, c-format
msgid "You must enter a host name or an IP address.\n"
msgstr "Makina adı ya da IP numarası girmelisiniz.\n"
-#: scannerdrake:741
-#: scannerdrake:891
+#: scannerdrake:741 scannerdrake:891
#, c-format
msgid "This host is already in the list, it cannot be added again.\n"
msgstr "Bu makine listede zaten mevcut, tekrar eklenemez.\n"
@@ -3317,12 +3274,12 @@ msgid ""
"\n"
"Do you want to install the saned package?"
msgstr ""
-"Yerel tatarıcı(lar)ın paylaştırılabilmesi için saned paketinin kurulması gerekiyor.\n"
+"Yerel tatarıcı(lar)ın paylaştırılabilmesi için saned paketinin kurulması "
+"gerekiyor.\n"
"\n"
"Saned paketinin kurulmasını ister misiniz?"
-#: scannerdrake:958
-#: scannerdrake:962
+#: scannerdrake:958 scannerdrake:962
#, c-format
msgid "Your scanner(s) will not be available on the network."
msgstr "Tarayıcıları(nız) ağda görünmeyecek."
2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888
package printerdrake;
# $Id$
use diagnostics;
use strict;


use common;
use detect_devices;
use modules;
use network;
use log;
use printer;

1;

sub choose_printer_type {
    my ($printer, $in) = @_;
    $in->set_help('configurePrinterConnected') if $::isInstall;
    my $queue = $printer->{OLD_QUEUE};
    $printer->{str_type} = $printer::printer_type_inv{$printer->{TYPE}};
    $printer->{str_type} = 
	$in->ask_from_list_(_("Select Printer Connection"),
			    _("How is the printer connected?") .
			    ($printer->{SPOOLER} eq "cups" ?
			     _("
Printers on remote CUPS servers you do not have to configure here; these printers will be automatically detected.") : ()),
			    [ printer::printer_type($printer) ],
			    $printer->{str_type},
			    ) or return 0;
    $printer->{TYPE} = $printer::printer_type{$printer->{str_type}};
    1;
}

sub config_cups {
    my ($printer, $in) = @_;

    local $::isWizard = 0;
    # Check whether the network functionality is configured and
    # running
    if (!check_network($printer, $in)) {return 0};

    $in->set_help('configureRemoteCUPSServer') if $::isInstall;
    my $queue = $printer->{OLD_QUEUE};
    #- hack to handle cups remote server printing,
    #- first read /etc/cups/cupsd.conf for variable BrowsePoll address:port
    my ($server, $port, $default, $autoconf);
    # Return value: 0 when nothing was changed ("Apply" never pressed), 1
    # when "Apply" was at least pressed once.
    my $retvalue = 0;
    # Read CUPS config file
    my @cupsd_conf = printer::read_cupsd_conf();
    foreach (@cupsd_conf) {
	/^\s*BrowsePoll\s+(\S+)/ and $server = $1, last;
    }
    $server =~ /([^:]*):(.*)/ and ($server, $port) = ($1, $2);
    #- Did we have automatic or manual configuration mode for CUPS
    $autoconf = printer::get_cups_autoconf();
    #- Remember the server/port/autoconf settings to check whether the user
    #- has changed them.
    my $oldserver = $server;
    my $oldport = $port;
    my $oldautoconf = $autoconf;
    
    #- then ask user for this combination and rewrite /etc/cups/cupsd.conf
    #- according to new settings. There are no other point where such
    #- information is written in this file.
    
    if ($in->ask_from_
	({ title => ($::expert ? _("CUPS configuration") :
		     _("Specify CUPS server")),
	   messages => _("To get access to printers on remote CUPS servers in your local network you do not have to configure anything; the CUPS servers inform your machine automatically about their printers. All printers currently known to your machine are listed in the \"Remote printers\" section in the main window of Printerdrake. When your CUPS server is not in your local network, you have to enter the CUPS server IP address and optionally the port number to get the printer information from the server, otherwise leave these fields blank.") .
	       ($::expert ? "\n" . _("
Normally, CUPS is automatically configured according to your network environment, so that you can access the printers on the CUPS servers in your local network. If this does not work correctly, turn off \"Automatic CUPS configuration\" and edit your file /etc/cups/cupsd.conf manually. Do not forget to restart CUPS afterwards (command: \"service cups restart\").") : ()),
	   callbacks => { complete => sub {
	       unless (!$server || network::is_ip($server)) {
		   $in->ask_warn('', _("The IP address should look like 192.168.1.20"));
		   return (1,0);
	       }
	       if ($port !~ /^\d*$/) {
		   $in->ask_warn('', _("The port number should be an integer!"));
		   return (1,1);
	       }
	       return 0;
	   } }
       },
	 [	
		{ label => _("CUPS server IP"), val => \$server },
		{ label => _("Port"), val => \$port },
		($::expert ?
		 { text => _("Automatic CUPS configuration"), type => 'bool',
		   val => \$autoconf } : ()),
	 ]
	 )) {
	# We have clicked "OK"
	$retvalue = 1;
	# Set BrowsePoll line
	if (($server ne $oldserver) || ($port ne $oldport)) {
	    $server && $port and $server = "$server:$port";
	    if ($server) {
		@cupsd_conf = 
		    map { $server and 
			      s/^\s*BrowsePoll\s+(\S+)/BrowsePoll $server/ and
			      $server = '';
			  $_ } @cupsd_conf;
		$server and push @cupsd_conf, "\nBrowsePoll $server\n";
	    } else {
		@cupsd_conf = 
		    map { s/^\s*BrowsePoll\s+(\S+)/\#BrowsePoll $1/;
			  $_ } @cupsd_conf;
	    }
	    printer::write_cupsd_conf(@cupsd_conf);
	}
	# Set auto-configuration state
	if ($autoconf != $oldautoconf) {
	    printer::set_cups_autoconf($autoconf);
	}
	# Save user settings for auto-install
	$printer->{BROWSEPOLLADDR} = $server;
	$printer->{BROWSEPOLLPORT} = $port;
	$printer->{MANUALCUPSCONFIG} = 1 - $autoconf;
    }
    return $retvalue;
}

sub setup_printer_connection {
    my ($printer, $in) = @_;
    # Choose the appropriate connection config dialog
    my $done = 1;
    for ($printer->{TYPE}) {
	/LOCAL/     and setup_local    ($printer, $in) and last;
	/LPD/       and setup_lpd      ($printer, $in) and last;
	/SOCKET/    and setup_socket   ($printer, $in) and last;
	/SMB/       and setup_smb      ($printer, $in) and last;
	/NCP/       and setup_ncp      ($printer, $in) and last;
	/URI/       and setup_uri      ($printer, $in) and last;
	/POSTPIPE/  and setup_postpipe ($printer, $in) and last;
	$done = 0; last;
    }
    return $done;
}

sub auto_detect {
    my ($in) = @_;
    {
	my $w = $in->wait_message(_("Test ports"), _("Detecting devices ..."));
	modules::get_alias("usb-interface") and eval { modules::load("printer"); sleep(2); };
	foreach (qw(lp parport_pc parport_probe parport)) {
	    eval { modules::unload($_); }; #- on kernel 2.4 parport has to be unloaded to probe again
	}
	foreach (qw(parport_pc lp parport_probe)) {
	    eval { modules::load($_); }; #- take care as not available on 2.4 kernel (silent error).
	}
    }
    my $b = before_leaving { eval { modules::unload("parport_probe") } };
    detect_devices::whatPrinter();
}

sub wizard_welcome {
    my ($printer, $in) = @_;
    my $ret;
    my $autodetect = 1;
    $autodetect = 0 if ($printer->{NOAUTODETECT});
    if ($in) {
	eval {
	    if ($::expert) {
		$ret = $in->ask_okcancel
		    (_("Add a new printer"),
		     _("
Welcome to the Printer Setup Wizard

This wizard allows you to install local or remote printers to be used from this machine and also from other machines in the network.

It asks you for all necessary information to set up the printer and gives you access to all available printer drivers, driver options, and printer connection types."));
	    } else {
		$ret = $in->ask_from_
		    ({title => _("Local Printer"),
		      messages => _("
Welcome to the Printer Setup Wizard

This wizard will help you to install your printer(s) connected to this computer.

Please plug in your printer(s) on this computer and turn it/them on. Click on \"Next\" when you are ready, and on \"Cancel\" when you do not want to set up your printer(s) now.

Note that some computers can crash during the printer auto-detection, turn off \"Auto-detect printers\" to do a printer installation without auto-detection. Use the \"Expert Mode\" of printerdrake when you want to set up printing on a remote printer if printerdrake does not list it automatically.")},
		     [
		      { text => _("Auto-detect printers"), type => 'bool',
			val => \$autodetect},
		      ]);
		if (!$autodetect) {
		    $printer->{NOAUTODETECT} = 1;
		} else {
		    undef $printer->{NOAUTODETECT};
		}
	    }
	};
	return ($@ =~ /wizcancel/) ? 0 : $ret;
    }
}

sub wizard_congratulations {
    my ($in) = @_;
    if ($in) {
	$in->ask_okcancel(_("Local Printer"),
			  _("
Congratulations, your printer is now installed and configured!

You can print using the \"Print\" command of your application (usually in the \"File\" menu).

If you want to add, remove, or rename a printer, or if you want to change the default option settings (paper input tray, printout quality, ...), select \"Printer\" in the \"Hardware\" section of the Mandrake Control Center."))
    }
}

sub setup_local {
    my ($printer, $in) = @_;
    my (@port, @str, $device);
    my $queue = $printer->{OLD_QUEUE};
    my $do_auto_detect;
    if ((!$::expert) && ($::isWizard)) {
	$do_auto_detect = !$printer->{NOAUTODETECT};
    } else {
	local $::isWizard = 0;
	my $res = $in->ask_from_list_
	    (_("Auto-Detection of Printers"),
	     _("Printerdrake is able to auto-detect your locally connected parallel and USB printers for you, but note that on some systems the auto-detection CAN FREEZE YOUR SYSTEM AND THIS CAN LEAD TO CORRUPTED FILE SYSTEMS! So do it ON YOUR OWN RISK!

Do you really want to get your printers auto-detected?"),
	     [_("Do auto-detection"),
	      _("Set up printer manually")],
	     _("Do auto-detection"));
	$do_auto_detect = ($res eq _("Do auto-detection"));
    }
    my @parport = ();
    my $menuentries = {};
    $in->set_help('setupLocal') if $::isInstall;
    if ($do_auto_detect) {
	# When HPOJ is running, it blocks the printer ports on which it is
	# configured, so we stop it here. If it is not installed or not 
	# configured, this command has no effect.
	printer::stop_service("hpoj");
	@parport = auto_detect($in);
	# We have more than one printer, so we must ask the user for a queue
	# name in the fully automatic printer configuration.
	$printer->{MORETHANONE} = ($#parport > 0);
	for my $p (@parport) {
	    if ($p->{val}{DESCRIPTION}) {
		my $menustr = $p->{val}{DESCRIPTION};
		if ($p->{port} =~ m!^/dev/lp(\d+)$!) {
		    $menustr .= _(" on parallel port \#%s", $1);
		} elsif ($p->{port} =~ m!^/dev/usb/lp(\d+)$!) {
		    $menustr .= _(", USB printer \#%s", $1);
		}
		if ($::expert) {
		    $menustr .= " ($p->{port})";
		}
		$menuentries->{$menustr} = $p->{port};
		push @str, _("Detected %s", $menustr);
	    } else {
		my $menustr;
		if ($p->{port} =~ m!^/dev/lp(\d+)$!) {
		    $menustr = _("Printer on parallel port \#%s", $1);
		} elsif ($p->{port} =~ m!^/dev/usb/lp(\d+)$!) {
		    $menustr = _("USB printer \#%s", $1);
		}
		if ($::expert) {
		    $menustr .= " ($p->{port})";
		}
		$menuentries->{$menustr} = $p->{port};
	    }
	}
	if ($::expert) {
	    @port = detect_devices::whatPrinterPort();
	    for my $q (@port) {
		if (@str) {
		    my $alreadyfound = 0;
		    for my $p (@parport) {
			if ($p->{port} eq $q) {
			    $alreadyfound = 1;
			    last;
			}
		    }
		    if ($alreadyfound) {
			next;
		    }
		}
		my $menustr;
		if ($q =~ m!^/dev/lp(\d+)$!) {
		    $menustr = _("Printer on parallel port \#%s", $1);
		} elsif ($q =~ m!^/dev/usb/lp(\d+)$!) {
		    $menustr = _("USB printer \#%s", $1);
		}
		if ($::expert) {
		    $menustr .= " ($q)";
		}
		$menuentries->{$menustr} = $q;
	    }
	}
	# We are ready with auto-detection, so we restart HPOJ here. If it 
	# is not installed or not configured, this command has no effect.
	printer::start_service("hpoj");
    } else {
	# Always ask for queue name in recommended mode when no auto-
	# detection was done
	$printer->{MORETHANONE} = ($#parport > 0);
	my $m;
	for ($m = 0; $m <= 2; $m++) {
	    my $menustr = _("Printer on parallel port \#%s", $m);
	    if ($::expert) {
		$menustr .= " (/dev/lp$m)";
	    }
	    $menuentries->{$menustr} = "/dev/lp$m";
	    $menustr = _("USB printer \#%s", $m);
	    if ($::expert) {
		$menustr .= " (/dev/usb/lp$m)";
	    }
	    $menuentries->{$menustr} = "/dev/usb/lp$m";
	}
    }
    my @menuentrieslist = sort { $menuentries->{$a} cmp $menuentries->{$b} }
    keys(%{$menuentries});
    my $menuchoice = "";
    my $oldmenuchoice = "";
    if (($printer->{configured}{$queue}) &&
	($printer->{currentqueue}{'connect'} =~ m/^file:/)) {
	# Non-HP or HP print-only device (HPOJ not used)
	$device = $printer->{currentqueue}{'connect'};
	$device =~ s/^file://;
	for my $p (keys %{$menuentries}) {
	    if ($device eq $menuentries->{$p}) {
		$menuchoice = $p;
		last;
	    }
	}
    } elsif (($printer->{configured}{$queue}) &&
	($printer->{currentqueue}{'connect'} =~ m!^ptal:/mlc:!)) {
	# HP multi-function device (controlled by HPOJ)
	my $ptaldevice = $printer->{currentqueue}{'connect'};
	$ptaldevice =~ s!^ptal:/mlc:!!;
	if ($ptaldevice =~ /^par:(\d+)$/) {
	    $device = "/dev/lp$1";
	    for my $p (keys %{$menuentries}) {
		if ($device eq $menuentries->{$p}) {
		    $menuchoice = $p;
		    last;
		}
	    }
	} else {
	    my $make = lc($printer->{currentqueue}{'make'});
	    my $model = lc($printer->{currentqueue}{'model'});
	    $device = "";
	    for my $p (keys %{$menuentries}) {
		my $menumakemodel = lc($p);
		if (($menumakemodel =~ /$make/) && 
		    ($menumakemodel =~ /$model/)) {
		    $menuchoice = $p;
		    $device = $menuentries->{$p};
		    last;
		}
	    }
	}
    } else {
	$device = "";
    }
    if (($menuchoice eq "") && (@menuentrieslist > -1)) {
	$menuchoice = $menuentrieslist[0];
	$oldmenuchoice = $menuchoice;
	if ($device eq "") {
	    $device = $menuentries->{$menuchoice};
	}
    }
    if ($in) {
	$::expert or $in->set_help('configurePrinterDev') if $::isInstall;
	if ($#menuentrieslist < 0) { # No menu entry
	    # auto-detection has failed, we must do all manually
	    $do_auto_detect = 0;
	    $printer->{MANUAL} = 1;
	    if ($::expert) {
		$device = $in->ask_from_entry
		    (_("Local Printer"),
		     _("No local printer found! To manually install a printer enter a device name/file name in the input line (Parallel Ports: /dev/lp0, /dev/lp1, ..., equivalent to LPT1:, LPT2:, ..., 1st USB printer: /dev/usb/lp0, 2nd USB printer: /dev/usb/lp1, ...)."),
		     { 
			 complete => sub {
			     unless ($menuchoice ne "") {
				 $in->ask_warn('', _("You must enter a device or file name!"));
				 return (1,0);
			     }
			     return 0;
			 }
		     });
		if ($device eq "") {
		    return 0;
		}
	    } else {
		$in->ask_warn(_("Local Printer"),
			      _("No local printer found!\n\n") . 
			      ($::isInstall ? _("Network printers can only be installed after the installation. Choose \"Hardware\" and then \"Printer\" in the Mandrake Control Center.") :
			       _("To install network printers, click \"Cancel\", switch to the \"Expert Mode\", and click \"Add a new printer\" again.")));
		return 0;
	    }
	} else {
	    my $manualconf = 0;
	    $manualconf = 1 if (($printer->{MANUAL}) || (!$do_auto_detect));
	    if (!$in->ask_from_(
	    {title => _("Local Printer"),
	     messages => (($do_auto_detect ?
			  ($::expert ?
			   (($#menuentrieslist == 0) ?
_("The following printer was auto-detected, if it is not the one you want to configure, enter a device name/file name in the input line") :
_("Here is a list of all auto-detected printers. Please choose the printer you want to set up or enter a device name/file name in the input line")) :
			   (($#menuentrieslist == 0) ?
_("The following printer was auto-detected. The configuration of the printer will work fully automatically. If your printer was not correctly detected or if you prefer a customized printer configuration, turn on \"Manual configuration\".") :
_("Here is a list of all auto-detected printers. Please choose the printer you want to set up. The configuration of the printer will work fully automatically. If your printer was not correctly detected or if you prefer a customized printer configuration, turn on \"Manual configuration\"."))) :
			  ($::expert ?
_("Please choose the port where your printer is connected to or enter a device name/file name in the input line") :
_("Please choose the port where your printer is connected to."))) .
			 ($::expert ?
_(" (Parallel Ports: /dev/lp0, /dev/lp1, ..., equivalent to LPT1:, LPT2:, ..., 1st USB printer: /dev/usb/lp0, 2nd USB printer: /dev/usb/lp1, ...).") :
			  ())), 
             callbacks => {
		 complete => sub {
		     unless ($menuchoice ne "") {
			 $in->ask_warn('', _("You must choose/enter a printer/device!"));
			 return (1,0);
		     }
		     return 0;
		 },
		 changed => sub {
		     if ($oldmenuchoice ne $menuchoice) {
			 $device = $menuentries->{$menuchoice};
			 $oldmenuchoice = $menuchoice;
		     }
		     return 0;
		 }
	     }},
            [
	     ($::expert ? 
	      { val => \$device } : ()),
	     { val => \$menuchoice, list => \@menuentrieslist, 
	       not_edit => !$::expert, format => \&translate,
	       allow_empty_list => 1, type => 'list' },
	     (((!$::expert) && ($do_auto_detect) && ($printer->{NEW})) ? 
	      { text => _("Manual configuration"), type => 'bool',
		val => \$manualconf } : ()),
	    ]
	    )) {
		return 0;
	    }
	    if ($manualconf) {
		$printer->{MANUAL} = 1;
	    } else {
		undef $printer->{MANUAL};
	    }
	}
    }

    #- Check whether the printer is an HP multi-function device and 
    #- configure HPOJ if it is one

    my $ptaldevice = "";
    my $isHPOJ = 0;
    if (!$do_auto_detect) {
	local $::isWizard = 0;
	$isHPOJ = $in->ask_yesorno(_("Local Printer"),
				   _("Is your printer a multi-function device from HP (OfficeJet, PSC, PhotoSmart LaserJet 1100/1200/1220/3200 with scanner)?"), 0);
    }
    if (($menuchoice =~ /HP\s+OfficeJet/i) ||
	($menuchoice =~ /HP\s+PSC/i) ||
	($menuchoice =~ /HP\s+PhotoSmart/i) ||
	($menuchoice =~ /HP\s+LaserJet\s+1100/i) ||
	($menuchoice =~ /HP\s+LaserJet\s+1200/i) ||
	($menuchoice =~ /HP\s+LaserJet\s+1220/i) ||
	($menuchoice =~ /HP\s+LaserJet\s+3200/i) ||
	($isHPOJ)) {
	# Install HPOJ package
	if ((!$::testing) &&
	    (!printer::files_exist((qw(/usr/sbin/ptal-mlcd
				       /etc/ptal-start.conf))))) {
	    my $w = $in->wait_message('', _("Installing HPOJ package..."));
	    $in->do_pkgs->install('hpoj');
	}
	# Configure and start HPOJ
	my $w = $in->wait_message
	    ('', _("Checking device and configuring HPOJ ..."));
	$ptaldevice = printer::configure_hpoj($device, @parport);

	if ($ptaldevice) {
	    # Configure scanning with SANE on the MF device
	    if (($menuchoice =~ /HP\s+OfficeJet\s+[KVRGP]/i) ||
		($menuchoice =~ /HP\s+PSC\s+[579]/i)) {
		# Install SANE
		if ((!$::testing) &&
		    (!printer::files_exist((qw(/usr/bin/scanimage
					       /usr/bin/xscanimage
					       /usr/bin/xsane
					       /etc/sane.d/dll.conf),
					    (printer::files_exist
					     ('/usr/bin/gimp') ? 
					     '/usr/bin/xsane-gimp' : 
					     ()))))) {
		    my $w = $in->wait_message
			('', _("Installing SANE package..."));
		    $in->do_pkgs->install('sane-backends', 'sane-frontends',
					  'xsane', 
					  if_($in->do_pkgs->is_installed
					      ('gimp'),'xsane-gimp'));
		}
		# Configure the HP SANE backend
		printer::config_sane($ptaldevice);
	    }
	    # Inform user about how to scan with his MF device
	    my $text = scanner_help($menuchoice, "ptal:/$ptaldevice");
	    if ($text) {
		$in->ask_warn(_("Scanning on your HP multi-function device"),
			      $text);
	    }
	    # make the DeviceURI from $ptaldevice.
	    $printer->{currentqueue}{'connect'} = "ptal:/" . $ptaldevice;
	} else {
	    # make the DeviceURI from $device.
	    $printer->{currentqueue}{'connect'} = "file:" . $device;
	}
    } else {
	# make the DeviceURI from $device.
	$printer->{currentqueue}{'connect'} = "file:" . $device;
    }

    #- if CUPS is the spooler, make sure that CUPS knows the device
    if ($printer->{SPOOLER} eq "cups") {
	my $w = $in->wait_message
	    ('', _("Making printer port available for CUPS ..."));
	if ($ptaldevice eq "") {
	    printer::assure_device_is_available_for_cups($device);
	} else {
	    printer::assure_device_is_available_for_cups($ptaldevice);
	}
    }

    #- Read the printer driver database if necessary
    if ((keys %printer::thedb) == 0) {
	my $w = $in->wait_message('', _("Reading printer database ..."));
        printer::read_printer_db($printer->{SPOOLER});
    }

    #- Search the database entry which matches the detected printer best
    my $descr = "";
    foreach (@parport) {
	$device eq $_->{port} or next;
	if (($_->{val}{MANUFACTURER}) && ($_->{val}{MODEL})) {
	    $descr = "$_->{val}{MANUFACTURER} $_->{val}{MODEL}";
	} else {
	    $descr = $_->{val}{DESCRIPTION};
	}
	# Clean up the description from noise which makes the best match
	# difficult
	$descr =~ s/\s+Inc\.//;
	$descr =~ s/\s+Corp\.//;
	$descr =~ s/\s+SA\.//;
	$descr =~ s/\s+S\.\s*A\.//;
	$descr =~ s/\s+Ltd\.//;
	$descr =~ s/\s+International//;
	$descr =~ s/\s+Int\.//;
	$descr =~ s/\s+[Ss]eries//;
	$descr =~ s/\s+\(?[Pp]rinter\)?$//;
	$printer->{DBENTRY} = "";
	for my $entry (keys(%printer::thedb)) {
	    if ($entry =~ m!$descr!) {
		$printer->{DBENTRY} = $entry;
		last;
	    }
	}
	if (!$printer->{DBENTRY}) {
	    $printer->{DBENTRY} =
		bestMatchSentence ($descr, keys %printer::thedb);
	}
        # If the manufacturer was not guessed correctly, discard the
        # guess.
        $printer->{DBENTRY} =~ /^([^\|]+)\|/;
        my $guessedmake = lc($1);
        if (($descr !~ /$guessedmake/i) &&
            (($guessedmake ne "hp") ||
             ($descr !~ /Hewlett[\s-]+Packard/i)))
            {$printer->{DBENTRY} = ""};
    }

    #- Pre-fill the "Description" field with the printer's model name
    if ((!$printer->{currentqueue}{'desc'}) && ($descr)) {
	$printer->{currentqueue}{'desc'} = $descr;
	$printer->{currentqueue}{'desc'} =~ s/\|/ /g;
    }

    #- When we have chosen a printer here, the question whether the
    #- automatically chosen model from the database is correct, should
    #- have "This model is correct" as default answer
    delete($printer->{MANUALMODEL});

    1;
}

sub setup_lpd {
    my ($printer, $in) = @_;

    # Check whether the network functionality is configured and
    # running
    if (!check_network($printer, $in)) {return 0};

    $in->set_help('setupLPD') if $::isInstall;
    my ($uri, $remotehost, $remotequeue);
    my $queue = $printer->{OLD_QUEUE};
    if (($printer->{configured}{$queue}) &&
	($printer->{currentqueue}{'connect'} =~ m/^lpd:/)) {
	$uri = $printer->{currentqueue}{'connect'};
	$uri =~ m!^\s*lpd://([^/]+)/([^/]+)/?\s*$!;
	$remotehost = $1;
	$remotequeue = $2;
    } else {
	$remotehost = "";
	$remotequeue = "lp";
    }

    return if !$in->ask_from(_("Remote lpd Printer Options"),
_("To use a remote lpd printer, you need to supply the hostname of the printer server and the printer name on that server."), [
{ label => _("Remote host name"), val => \$remotehost },
{ label => _("Remote printer name"), val => \$remotequeue } ],
complete => sub {
    unless ($remotehost ne "") {
	$in->ask_warn('', _("Remote host name missing!"));
	return (1,0);
    }
    unless ($remotequeue ne "") {
	$in->ask_warn('', _("Remote printer name missing!"));
	return (1,1);
    }
    return 0;
}
			      );
    #- make the DeviceURI from user input.
    $printer->{currentqueue}{'connect'} = 
        "lpd://$remotehost/$remotequeue";

    #- LPD does not support filtered queues to a remote LPD server by itself
    #- It needs an additional program as "rlpr"
    if (($printer->{SPOOLER} eq 'lpd') && (!$::testing) &&
        (!printer::files_exist((qw(/usr/bin/rlpr))))) {
        $in->do_pkgs->install('rlpr');
    }

    1;
}

sub setup_smb {
    my ($printer, $in) = @_;

    # Check whether the network functionality is configured and
    # running
    if (!check_network($printer, $in)) {return 0};

    $in->set_help('setupSMB') if $::isInstall;
    my ($uri, $smbuser, $smbpassword, $workgroup, $smbserver, $smbserverip, $smbshare);
    my $queue = $printer->{OLD_QUEUE};
    if (($printer->{configured}{$queue}) &&
	($printer->{currentqueue}{'connect'} =~ m/^smb:/)) {
	$uri = $printer->{currentqueue}{'connect'};
	$uri =~ m!^\s*smb://(.*)$!;
	my $parameters = $1;
	# Get the user's login and password from the URI
	if ($parameters =~ m!([^@]*)@([^@]+)!) {
	    my $login = $1;
	    $parameters = $2;
	    if ($login =~ m!([^:]*):([^:]*)!) {
		$smbuser = $1;
		$smbpassword = $2;
	    } else {
		$smbuser = $login;
		$smbpassword = "";
	    }
	} else {
	    $smbuser = "";
	    $smbpassword = "";
	}
	# Get the workgroup, server, and share name
	if ($parameters =~ m!([^/]*)/([^/]+)/([^/]+)$!) {
	    $workgroup = $1;
	    $smbserver = $2;
	    $smbshare = $3;
	} elsif ($parameters =~ m!([^/]+)/([^/]+)$!) {
	    $workgroup = "";
	    $smbserver = $1;
	    $smbshare = $2;
	} else {
	    die "The \"smb://\" URI must at least contain the server name and the share name!\n";
	}
	if (network::is_ip($smbserver)) {
	    $smbserverip = $smbserver;
	    $smbserver = "";
	}
    }

    return if !$in->ask_from(_("SMB (Windows 9x/NT) Printer Options"),
_("To print to a SMB printer, you need to provide the SMB host name (Note! It may be different from its TCP/IP hostname!) and possibly the IP address of the print server, as well as the share name for the printer you wish to access and any applicable user name, password, and workgroup information."), [
{ label => _("SMB server host"), val => \$smbserver },
{ label => _("SMB server IP"), val => \$smbserverip },
{ label => _("Share name"), val => \$smbshare },
{ label => _("User name"), val => \$smbuser },
{ label => _("Password"), val => \$smbpassword, hidden => 1 },
{ label => _("Workgroup"), val => \$workgroup }, ],
complete => sub {
    unless ((network::is_ip($smbserverip)) || ($smbserverip eq "")) {
	$in->ask_warn('', _("IP address should be in format 1.2.3.4"));
	return (1,1);
    }
    unless (($smbserver ne "") || ($smbserverip ne "")) {
	$in->ask_warn('', _("Either the server name or the server's IP must be given!"));
	return (1,0);
    }
    unless ($smbshare ne "") {
	$in->ask_warn('', _("Samba share name missing!"));
	return (1,2);
    }
    return 0;
}
    );
    #- make the DeviceURI from, try to probe for available variable to
    #- build a suitable URI.
    $printer->{currentqueue}{'connect'} =
    join '', ("smb://", ($smbuser && ($smbuser . 
    ($smbpassword && ":$smbpassword") . "@")), ($workgroup && ("$workgroup/")),
    ($smbserver || $smbserverip), "/$smbshare");

    if ((!$::testing) &&
        (!printer::files_exist((qw(/usr/bin/smbclient))))) {
	$in->do_pkgs->install('samba-client');
    }
    $printer->{SPOOLER} eq 'cups' and printer::restart_queue($printer);
    1;
}

sub setup_ncp {
    my ($printer, $in) = @_;

    # Check whether the network functionality is configured and
    # running
    if (!check_network($printer, $in)) {return 0};

    $in->set_help('setupNCP') if $::isInstall;
    my ($uri, $ncpuser, $ncppassword, $ncpserver, $ncpqueue);
    my $queue = $printer->{OLD_QUEUE};
    if (($printer->{configured}{$queue}) &&
	($printer->{currentqueue}{'connect'} =~ m/^ncp:/)) {
	$uri = $printer->{currentqueue}{'connect'};
	my $parameters = $uri =~ m!^\s*ncp://(.*)$!;
	# Get the user's login and password from the URI
	if ($parameters =~ m!([^@]*)@([^@]+)!) {
	    my $login = $1;
	    $parameters = $2;
	    if ($login =~ m!([^:]*):([^:]*)!) {
		$ncpuser = $1;
		$ncppassword = $2;
	    } else {
		$ncpuser = $login;
		$ncppassword = "";
	    }
	} else {
	    $ncpuser = "";
	    $ncppassword = "";
	}
	# Get the workgroup, server, and share name
	if ($parameters =~ m!([^/]+)/([^/]+)$!) {
	    $ncpserver = $1;
	    $ncpqueue = $2;
	} else {
	    die "The \"ncp://\" URI must at least contain the server name and the share name!\n";
	}
    }

    return if !$in->ask_from(_("NetWare Printer Options"),
_("To print on a NetWare printer, you need to provide the NetWare print server name (Note! it may be different from its TCP/IP hostname!) as well as the print queue name for the printer you wish to access and any applicable user name and password."), [
{ label => _("Printer Server"), val => \$ncpserver },
{ label => _("Print Queue Name"), val => \$ncpqueue },
{ label => _("User name"), val => \$ncpuser },
{ label => _("Password"), val => \$ncppassword, hidden => 1 } ],
complete => sub {
    unless ($ncpserver ne "") {
	$in->ask_warn('', _("NCP server name missing!"));
	return (1,0);
    }
    unless ($ncpqueue ne "") {
	$in->ask_warn('', _("NCP queue name missing!"));
	return (1,1);
    }
    return 0;
}
					);
    # Generate the Foomatic URI
    $printer->{currentqueue}{'connect'} =
    join '', ("ncp://", ($ncpuser && ($ncpuser . 
    ($ncppassword && ":$ncppassword") . "@")),
    "$ncpserver/$ncpqueue");

    if ((!$::testing) &&
        (!printer::files_exist((qw(/usr/bin/nprint))))) {
	$in->do_pkgs->install('ncpfs');
    }

    1;
}

sub setup_socket {
    my ($printer, $in) = @_;

    # Check whether the network functionality is configured and
    # running
    if (!check_network($printer, $in)) {return 0};

    $in->set_help('setupSocket') if $::isInstall;
    my ($hostname, $port, $uri, $remotehost,$remoteport);
    my $queue = $printer->{OLD_QUEUE};
    if (($printer->{configured}{$queue}) &&
	($printer->{currentqueue}{'connect'} =~ m/^socket:/)) {
	$uri = $printer->{currentqueue}{'connect'};
	($remotehost, $remoteport) = $uri =~ m!^\s*socket://([^/:]+):([0-9]+)/?\s*$!;
    } else {
	$remotehost = "";
	$remoteport = "9100";
    }

    return if !$in->ask_from(_("TCP/Socket Printer Options"),
_("To print to a TCP or socket printer, you need to provide the host name of the printer and optionally the port number. On HP JetDirect servers the port number is usually 9100, on other servers it can vary. See the manual of your hardware."), [
{ label => _("Printer host name"), val => \$remotehost },
{ label => _("Port"), val => \$remoteport } ],
complete => sub {
    unless ($remotehost ne "") {
	$in->ask_warn('', _("Printer host name missing!"));
	return (1,0);
    }
    unless ($remoteport =~ /^[0-9]+$/) {
	$in->ask_warn('', _("The port number should be an integer!"));
	return (1,1);
    }
    return 0;
}
					 );

    #- make the Foomatic URI
    $printer->{currentqueue}{'connect'} = 
    join '', ("socket://$remotehost", $remoteport ? (":$remoteport") : ());

    #- LPD and LPRng need netcat ('nc') to access to socket printers
    if ((($printer->{SPOOLER} eq 'lpd') || ($printer->{SPOOLER} eq 'lprng'))&& 
        (!$::testing) &&
        (!printer::files_exist((qw(/usr/bin/nc))))) {
        $in->do_pkgs->install('nc');
    }

    1;
}

sub setup_uri {
    my ($printer, $in) = @_;

    $in->set_help('setupURI') if $::isInstall;
    return if !$in->ask_from(_("Printer Device URI"),
_("You can specify directly the URI to access the printer. The URI must fulfill either the CUPS or the Foomatic specifications. Note that not all URI types are supported by all the spoolers."), [
{ label => _("Printer Device URI"),
val => \$printer->{currentqueue}{'connect'},
list => [ $printer->{currentqueue}{'connect'},
	  "file:/",
	  "http://",
	  "ipp://",
	  "lpd://",
	  "smb://",
	  "ncp://",
	  "socket://",
	  "postpipe:\"\"",
	  ], not_edit => 0 }, ],
complete => sub {
    unless ($printer->{currentqueue}{'connect'} =~ /[^:]+:.+/) {
	$in->ask_warn('', _("A valid URI must be entered!"));
	return (1,0);
    }
    return 0;
}
    );

    # Non-local printer, check network and abort if no network available
    if (($printer->{currentqueue}{'connect'} !~ m!^file:/!) &&
        (!check_network($printer, $in))) {return 0};

    # If the chosen protocol needs additional software, install it.

    # LPD does not support filtered queues to a remote LPD server by itself
    # It needs an additional program as "rlpr"
    if (($printer->{currentqueue}{'connect'} =~ /^lpd:/) &&
	($printer->{SPOOLER} eq 'lpd') && (!$::testing) &&
        (!printer::files_exist((qw(/usr/bin/rlpr))))) {
        $in->do_pkgs->install('rlpr');
    }
    if (($printer->{currentqueue}{'connect'} =~ /^smb:/) &&
        (!$::testing) &&
        (!printer::files_exist((qw(/usr/bin/smbclient))))) {
	$in->do_pkgs->install('samba-client');
    }
    if (($printer->{currentqueue}{'connect'} =~ /^ncp:/) &&
	(!$::testing) &&
        (!printer::files_exist((qw(/usr/bin/nprint))))) {
	$in->do_pkgs->install('ncpfs');
    }
    #- LPD and LPRng need netcat ('nc') to access to socket printers
    if (($printer->{currentqueue}{'connect'} =~ /^socket:/) &&
	(($printer->{SPOOLER} eq 'lpd') || ($printer->{SPOOLER} eq 'lprng')) &&
        (!$::testing) &&
        (!printer::files_exist((qw(/usr/bin/nc))))) {
        $in->do_pkgs->install('nc');
    }
    1;
}

sub setup_postpipe {
    my ($printer, $in) = @_;

    $in->set_help('setupPostpipe') if $::isInstall;
    my $uri;
    my $commandline;
    my $queue = $printer->{OLD_QUEUE};
    if (($printer->{configured}{$queue}) &&
	($printer->{currentqueue}{'connect'} =~ m/^postpipe:/)) {
	$uri = $printer->{currentqueue}{'connect'};
	$uri =~ m!^\s*postpipe:\"(.*)\"$!;
	$commandline = $1;
    } else {
	$commandline = "";
    }

    return if !$in->ask_from(_("Pipe into command"),
_("Here you can specify any arbitrary command line into which the job should be piped instead of being sent directly to a printer."), [
{ label => _("Command line"),
val => \$commandline }, ],
complete => sub {
    unless ($commandline ne "") {
	$in->ask_warn('', _("A command line must be entered!"));
	return (1,0);
    }
    return 0;
}
);

    #- make the Foomatic URI
    $printer->{currentqueue}{'connect'} = "postpipe:$commandline";
    
    1;
}

sub choose_printer_name {
    my ($printer, $in) = @_;
    # Name, description, location
    $in->set_help('setupPrinterName') if $::isInstall;
    my $default = $printer->{currentqueue}{'queue'};
    $in->ask_from_
	(
	 { title => _("Enter Printer Name and Comments"),
	   #cancel => !$printer->{configured}{$queue} ? '' : _("Remove queue"),
	   callbacks => { complete => sub {
	       unless ($printer->{currentqueue}{'queue'} =~ /^\w+$/) {
		   $in->ask_warn('', _("Name of printer should contain only letters, numbers and the underscore"));
		   return (1,0);
	       }
	       local $::isWizard = 0;
	       if (($printer->{configured}{$printer->{currentqueue}{'queue'}})
		   && ($printer->{currentqueue}{'queue'} ne $default) && 
		   (!$in->ask_yesorno('', _("The printer \"%s\" already exists,\ndo you really want to overwrite its configuration?",
					    $printer->{currentqueue}{'queue'}),
				      0))) {
		   return (1,0); # Let the user correct the name
	       }
	       return 0;
	   },
		      },
	   messages =>
_("Every printer needs a name (for example \"printer\"). The Description and Location fields do not need to be filled in. They are comments for the users.") }, 
	 [ { label => _("Name of printer"), val => \$printer->{currentqueue}{'queue'} },
	   { label => _("Description"), val => \$printer->{currentqueue}{'desc'} },
	   { label => _("Location"), val => \$printer->{currentqueue}{'loc'} },
	 ]) or return 0;

    $printer->{QUEUE} = $printer->{currentqueue}{'queue'};
    1;
}

sub get_db_entry {
    my ($printer, $in) = @_;
    #- Read the printer driver database if necessary
    if ((keys %printer::thedb) == 0) {
	my $w = $in->wait_message('', _("Reading printer database ..."));
        printer::read_printer_db($printer->{SPOOLER});
    }
    my $w = $in->wait_message('', _("Preparing printer database ..."));
    my $queue = $printer->{OLD_QUEUE};
    if ($printer->{configured}{$queue}) {
	# The queue was already configured
	if ($printer->{configured}{$queue}{'queuedata'}{'foomatic'}) {
	    # The queue was configured with Foomatic
	    my $driverstr;
	    if ($printer->{configured}{$queue}{'queuedata'}{'driver'} eq "Postscript") {
		$driverstr = "PostScript";
	    } else {
		$driverstr = "GhostScript + $printer->{configured}{$queue}{'queuedata'}{'driver'}";
	    }
	    my $make = uc($printer->{configured}{$queue}{'queuedata'}{'make'});
	    my $model =	$printer->{configured}{$queue}{'queuedata'}{'model'};
	    if ($::expert) {
		$printer->{DBENTRY} = "$make|$model|$driverstr";
		# database key contains the "(recommended)" for the
		# recommended driver, so add it if necessary
		if (!($printer::thedb{$printer->{DBENTRY}}{printer})) {
		    $printer->{DBENTRY} .= " (recommended)";
		}
	    } else {
		$printer->{DBENTRY} = "$make|$model";
	    }
	    $printer->{OLD_CHOICE} = $printer->{DBENTRY};
	} elsif (($printer->{SPOOLER} eq "cups") && ($::expert) &&
		 ($printer->{configured}{$queue}{'queuedata'}{'ppd'})) {
	    # Do we have a native CUPS driver or a PostScript PPD file?
	    $printer->{DBENTRY} = printer::get_descr_from_ppd($printer) || $printer->{DBENTRY};
	    $printer->{OLD_CHOICE} = $printer->{DBENTRY};
	} else {
	    # Point the list cursor at least to manufacturer and model of the
	    # printer
	    $printer->{DBENTRY} = "";
	    my $make = uc($printer->{configured}{$queue}{'queuedata'}{'make'});
	    my $model = $printer->{configured}{$queue}{'queuedata'}{'model'};
	    my $key;
	    for $key (keys %printer::thedb) {
		if ((($::expert) && ($key =~ /^$make\|$model\|.*\(recommended\)$/)) ||
		    ((!$::expert) && ($key =~ /^$make\|$model$/))) {
		    $printer->{DBENTRY} = $key;
		}
	    }
	    if ($printer->{DBENTRY} eq "") {
		# Exact match of make and model did not work, try to clean
		# up the model name
		$model =~ s/PS//;
		$model =~ s/PostScript//;
		$model =~ s/Series//;
		for $key (keys %printer::thedb) {
		    if ((($::expert) && ($key =~ /^$make\|$model\|.*\(recommended\)$/)) ||
			((!$::expert) && ($key =~ /^$make\|$model$/))) {
			$printer->{DBENTRY} = $key;
		    }
		}
	    }
	    if (($printer->{DBENTRY} eq "") && ($make ne "")) {
		# Exact match with cleaned-up model did not work, try a best match
		my $matchstr = "$make|$model";
		$printer->{DBENTRY} = bestMatchSentence($matchstr, keys %printer::thedb);
		# If the manufacturer was not guessed correctly, discard the
		# guess.
		$printer->{DBENTRY} =~ /^([^\|]+)\|/;
		my $guessedmake = lc($1);
		if (($matchstr !~ /$guessedmake/i) &&
		    (($guessedmake ne "hp") ||
		     ($matchstr !~ /Hewlett[\s-]+Packard/i)))
		{$printer->{DBENTRY} = ""};
	    }
	    # Set the OLD_CHOICE to a non-existing value
	    $printer->{OLD_CHOICE} = "XXX";
	}
    } else {
	if (($::expert) && ($printer->{DBENTRY} !~ /(recommended)/)) {
	    my ($make, $model) = $printer->{DBENTRY} =~ /^([^\|]+)\|([^\|]+)\|/;
	    for my $key (keys %printer::thedb) {
		if ($key =~ /^$make\|$model\|.*\(recommended\)$/) {
		    $printer->{DBENTRY} = $key;
		}
	    }
	}
	$printer->{OLD_CHOICE} = $printer->{DBENTRY};
    }
}

sub is_model_correct {
    my ($printer, $in) = @_;
    $in->set_help('chooseModel') if $::isInstall;
    my $dbentry = $printer->{DBENTRY};
    $dbentry =~ s/\|/ /g;
    my $res = $in->ask_from_list_
	    (_("Your printer model"),
	     _("Printerdrake has compared the model name resulting from the printer auto-detection with the models listed in its printer database to find the best match. This choice can be wrong, especially when your printer is not listed at all in the database. So check whether the choice is correct and click \"The model is correct\" if so and if not, click \"Select model manually\" so that you can choose your printer model manually on the next screen.

For your printer Printerdrake has found:

%s", $dbentry),
	     [_("The model is correct"),
	      _("Select model manually")],
	     ($printer->{MANUALMODEL} ? _("Select model manually") : 
	      _("The model is correct")));
    return 0 if !$res;
    $printer->{MANUALMODEL} = ($res eq _("Select model manually"));
    1;
}

sub choose_model {
    my ($printer, $in) = @_;
    $in->set_help('chooseModel') if $::isInstall;
    #- Read the printer driver database if necessary
    if ((keys %printer::thedb) == 0) {
	my $w = $in->wait_message('', _("Reading printer database ..."));
        printer::read_printer_db($printer->{SPOOLER});
    }
    if (!$printer::thedb{$printer->{DBENTRY}}) {
	$printer->{DBENTRY} = _("Raw printer (No driver)");
    }
    # Choose the printer/driver from the list
    return ($printer->{DBENTRY} = $in->ask_from_treelist(_("Printer model selection"),
							 _("Which printer model do you have?") .
							 _("

Please check whether Printerdrake did the auto-detection of your printer model correctly. Search the correct model in the list when the cursor is standing on a wrong model or on \"Raw printer\".") . " " .
_("If your printer is not listed, choose a compatible (see printer manual) or a similar one."), '|',
							 [ keys %printer::thedb ], $printer->{DBENTRY}));

}

sub get_printer_info {
    my ($printer, $in) = @_;
    #- Read the printer driver database if necessary
    #if ((keys %printer::thedb) == 0) {
    #    my $w = $in->wait_message('', _("Reading printer database ..."));
    #    printer::read_printer_db($printer->{SPOOLER});
    #}
    my $queue = $printer->{OLD_QUEUE};
    my $oldchoice = $printer->{OLD_CHOICE};
    my $newdriver = 0;
    if ((!$printer->{configured}{$queue}) ||      # New queue  or
	(($oldchoice) && ($printer->{DBENTRY}) && # make/model/driver changed
	 (($oldchoice ne $printer->{DBENTRY}) ||
	  ($printer->{currentqueue}{'driver'} ne 
	   $printer::thedb{$printer->{DBENTRY}}{'driver'})))) {
	delete($printer->{currentqueue}{printer});
	delete($printer->{currentqueue}{ppd});
	$printer->{currentqueue}{foomatic} = 0;
	# Read info from printer database
	foreach (qw(printer ppd driver make model)) { #- copy some parameter, shorter that way...
	    $printer->{currentqueue}{$_} = $printer::thedb{$printer->{DBENTRY}}{$_};
	}
	$newdriver = 1;
    }
    # Use the "printer" and not the "foomatic" field to identify a Foomatic
    # queue because in a new queue "foomatic" is not set yet.
    if (($printer->{currentqueue}{'printer'}) || # We have a Foomatic queue
	($printer->{currentqueue}{'ppd'})) { # We have a CUPS+PPD queue
	if ($printer->{currentqueue}{'printer'}) { # Foomatic queue?
	    # In case of a new queue "foomatic" was not set yet
	    $printer->{currentqueue}{'foomatic'} = 1;
	    # Now get the options for this printer/driver combo
	    if (($printer->{configured}{$queue}) && ($printer->{configured}{$queue}{'queuedata'}{'foomatic'})) {
		# The queue was already configured with Foomatic ...
		if (!$newdriver) {
		    # ... and the user didn't change the printer/driver
		    $printer->{ARGS} = $printer->{configured}{$queue}{'args'};
		} else {
		    # ... and the user has chosen another printer/driver
		    $printer->{ARGS} = printer::read_foomatic_options($printer);
		}
	    } else {
		# The queue was not configured with Foomatic before
		# Set some special options
		$printer->{SPECIAL_OPTIONS} = '';
		# Default page size depending on the country/language
		# (US/Canada -> Letter, Others -> A4)
		my $pagesize;
		if ($printer->{PAPERSIZE}) {
		    $printer->{SPECIAL_OPTIONS} .= 
			" -o PageSize=$printer->{PAPERSIZE}";
		} elsif (($pagesize = $in->{lang}) ||
			 ($pagesize = $ENV{'LC_PAPER'}) ||
			 ($pagesize = $ENV{'LANG'}) ||
			 ($pagesize = $ENV{'LANGUAGE'}) ||
			 ($pagesize = $ENV{'LC_ALL'})) {
		    if (($pagesize =~ /^en_CA/) ||
			($pagesize =~ /^fr_CA/) || 
			($pagesize =~ /^en_US/)) {
			$pagesize = "Letter";
		    } else {
			$pagesize = "A4";
		    }
		    $printer->{SPECIAL_OPTIONS} .= 
			" -o PageSize=$pagesize";
		}
		# oki4w driver -> OKI winprinter which needs the
		# oki4daemon to work
		if ($printer->{currentqueue}{'driver'} eq 'oki4w') {
		    if ($printer->{currentqueue}{'connect'} ne 
			'file:/dev/lp0') {
			$in->ask_warn(_("OKI winprinter configuration"),
				      _("You are configuring an OKI laser winprinter. These printers\nuse a very special communication protocol and therefore they work only when connected to the first parallel port. When your printer is connected to another port or to a print server box please connect the printer to the first parallel port before you print a test page. Otherwise the printer will not work. Your connection type setting will be ignored by the driver."));
		    }
		    $printer->{currentqueue}{'connect'} = 'file:/dev/null';
		    # Start the oki4daemon
		    printer::start_service_on_boot('oki4daemon');
		    printer::start_service('oki4daemon');
		    # Set permissions
		    if ($printer->{SPOOLER} eq 'cups') {
			printer::set_permissions('/dev/oki4drv', '660', 'lp',
						 'sys');
		    } elsif ($printer->{SPOOLER} eq 'pdq') {
			printer::set_permissions('/dev/oki4drv', '666');
		    } else {
			printer::set_permissions('/dev/oki4drv', '660', 'lp',
						 'lp');
		    }
		} elsif ($printer->{currentqueue}{'driver'} eq 'lexmarkinkjet') {
		    # Set "Port" option
		    if ($printer->{currentqueue}{'connect'} eq 
			'file:/dev/lp0') {
			$printer->{SPECIAL_OPTIONS} .= 
			    " -o Port=ParPort1";
		    } elsif ($printer->{currentqueue}{'connect'} eq 
			'file:/dev/lp1') {
			$printer->{SPECIAL_OPTIONS} .= 
			    " -o Port=ParPort2";
		    } elsif ($printer->{currentqueue}{'connect'} eq 
			'file:/dev/lp2') {
			$printer->{SPECIAL_OPTIONS} .= 
			    " -o Port=ParPort3";
		    } elsif ($printer->{currentqueue}{'connect'} eq 
			'file:/dev/usb/lp0') {
			$printer->{SPECIAL_OPTIONS} .= 
			    " -o Port=USB1";
		    } elsif ($printer->{currentqueue}{'connect'} eq 
			'file:/dev/usb/lp1') {
			$printer->{SPECIAL_OPTIONS} .= 
			    " -o Port=USB2";
		    } elsif ($printer->{currentqueue}{'connect'} eq 
			'file:/dev/usb/lp2') {
			$printer->{SPECIAL_OPTIONS} .= 
			    " -o Port=USB3";
		    } else {
			$in->ask_warn(_("Lexmark inkjet configuration"),
				      _("The inkjet printer drivers provided by Lexmark only support local printers, no printers on remote machines or print server boxes. Please connect your printer to a local port or configure it on the machine where it is connected to."));
			return 0;
		    }
		    # Set device permissions
		    $printer->{currentqueue}{'connect'} =~ /^\s*file:(\S*)\s*$/;
		    if ($printer->{SPOOLER} eq 'cups') {
			printer::set_permissions($1, '660', 'lp', 'sys');
		    } elsif ($printer->{SPOOLER} eq 'pdq') {
			printer::set_permissions($1, '666');
		    } else {
			printer::set_permissions($1, '660', 'lp', 'lp');
		    }
		    # This is needed to have the device not blocked by the
		    # spooler backend.
		    $printer->{currentqueue}{'connect'} = 'file:/dev/null';
		    #install packages
		    my $drivertype = $printer->{currentqueue}{'model'};
		    if ($drivertype eq 'Z22') {$drivertype = 'Z32';}
		    if ($drivertype eq 'Z23') {$drivertype = 'Z33';}
		    $drivertype = lc($drivertype);
		    if (!printer::files_exist("/usr/local/lexmark/$drivertype/$drivertype")) {
			eval { $in->do_pkgs->install("lexmark-drivers-$drivertype") };
		    }
		    if (!printer::files_exist("/usr/local/lexmark/$drivertype/$drivertype")) {
			# Driver installation failed, probably we do not have
			# the commercial CDs
			$in->ask_warn(_("Lexmark inkjet configuration"),
				      _("To be able to print with your Lexmark inkjet and this configuration, you need the inkjet printer drivers provided by Lexmark (http://www.lexmark.com/). Go to the US site and click on the \"Drivers\" button. Then choose your model and afterwards \"Linux\" as operating system. The drivers come as RPM packages or shell scripts with interactive graphical installation. You do not need to do this configuration by the graphical frontends. Cancel directly after the license agreement. Then print printhead alignment pages with \"lexmarkmaintain\" and adjust the head alignment settings with this program."));
		    }
		}
		$printer->{ARGS} = printer::read_foomatic_options($printer);
		delete($printer->{SPECIAL_OPTIONS});
	    }
	} elsif ($printer->{currentqueue}{'ppd'}) { # CUPS+PPD queue?
	    # If we had a Foomatic queue before, unmark the flag and initialize
	    # the "printer" and "driver" fields
	    $printer->{currentqueue}{'foomatic'} = 0;
	    $printer->{currentqueue}{'printer'} = undef;
	    $printer->{currentqueue}{'driver'} = "CUPS/PPD";
	    # Now get the options from this PPD file
	    if ($printer->{configured}{$queue}) {
		# The queue was already configured
		if ((!$printer->{DBENTRY}) || (!$oldchoice) ||
		    ($printer->{DBENTRY} eq $oldchoice)) {
		    # ... and the user didn't change the printer/driver
		    $printer->{ARGS} = printer::read_cups_options($queue);
		} else {
		    # ... and the user has chosen another printer/driver
		    $printer->{ARGS} = printer::read_cups_options("/usr/share/cups/model/$printer->{currentqueue}{ppd}");
		}
	    } else {
		# The queue was not configured before
		$printer->{ARGS} = printer::read_cups_options("/usr/share/cups/model/$printer->{currentqueue}{ppd}");
	    }
	}
    }
    1;
}

sub setup_options {
    my ($printer, $in) = @_;
    my @simple_options = 
	("PageSize",        # Media properties
	 "MediaType",
	 "Form",
	 "InputSlot",       # Trays
	 "Tray",
	 "OutBin",
	 "OutputBin",
	 "FaceUp",
	 "FaceDown",
	 "Collate",
	 "Manual",
	 "ManualFeed",
	 "Manualfeed",
	 "ManualFeeder",
	 "Feeder",
	 "Duplex",          # Double-sided printing
	 "Binding",
	 "Tumble",
	 "DoubleSided",
	 "Resolution",      # Resolution/Quality
	 "GSResolution",
	 "JCLResolution",
	 "Quality",
	 "PrintQuality",
	 "PrintoutQuality",
	 "QualityType",
	 "ImageType",
	 "stpImageType",
	 "InkType",         # Colour/Gray/BW, 4-ink/6-ink
	 "stpInkType",
	 "Mode",
	 "OutputMode",
	 "OutputType",
	 "ColorMode",
	 "ColorModel",
	 "PrintingMode",
	 "Monochrome",
	 "BlackOnly",
	 "Grayscale",
	 "GrayScale",
	 "Colour",
	 "Color",
	 "Gamma",           # Lighter/Darker
	 "GammaCorrection",
	 "GammaGeneral",
	 "MasterGamma",
	 "StpGamma",
	 "stpGamma",
	 "EconoMode",       # Ink/Toner saving
	 "Economode",
	 "TonerSaving",
	 "JCLEconomode",
	 "HPNup",           # Other useful options
	 "InstalledMemory", # Laser printer hardware config
	 "Option1",
	 "Option2",
	 "Option3",
	 "Option4",
	 "Option5",
	 "Option6",
	 "Option7",
	 "Option8",
	 "Option9",
	 "Option10",
	 "Option11",
	 "Option12",
	 "Option13",
	 "Option14",
	 "Option15",
	 "Option16",
	 "Option17",
	 "Option18",
	 "Option19",
	 "Option20",
	 "Option21",
	 "Option22",
	 "Option23",
	 "Option24",
	 "Option25",
	 "Option26",
	 "Option27",
	 "Option28",
	 "Option29",
	 "Option30"
	 );
    $in->set_help('setupOptions') if $::isInstall;
    if (($printer->{currentqueue}{'printer'}) || # We have a Foomatic queue
	($printer->{currentqueue}{'ppd'})) { # We have a CUPS+PPD queue
	# Set up the widgets for the option dialog
	my @widgets;
	my @userinputs;
	my @choicelists;
	my @shortchoicelists;
	my $i;
	for ($i = 0; $i <= $#{$printer->{ARGS}}; $i++) {
	    my $optshortdefault = $printer->{ARGS}[$i]{'default'};
	    if ($printer->{ARGS}[$i]{'type'} eq 'enum') {
		# enumerated option
		push(@choicelists, []);
		push(@shortchoicelists, []);
		my $choice;
		for $choice (@{$printer->{ARGS}[$i]{'vals'}}) {
		    push(@{$choicelists[$i]}, $choice->{'comment'});
		    push(@{$shortchoicelists[$i]}, $choice->{'value'});
		    if ($choice->{'value'} eq $optshortdefault) {
			push(@userinputs, $choice->{'comment'});
		    }
		}
		push(@widgets,
		     { label => $printer->{ARGS}[$i]{'comment'}, 
		       val => \$userinputs[$i], 
		       not_edit => 1,
		       list => \@{$choicelists[$i]},
		       advanced => !member($printer->{ARGS}[$i]{'name'},
					   @simple_options) });
	    } elsif ($printer->{ARGS}[$i]{'type'} eq 'bool') {
		# boolean option
		push(@choicelists, [$printer->{ARGS}[$i]{'name'}, 
				    $printer->{ARGS}[$i]{'name_false'}]);
		push(@shortchoicelists, []);
		push(@userinputs, $choicelists[$i][1-$optshortdefault]);
		push(@widgets,
		     { label => $printer->{ARGS}[$i]{'comment'},
		       val => \$userinputs[$i],
		       not_edit => 1,
		       list => \@{$choicelists[$i]},
		       advanced => !member($printer->{ARGS}[$i]{'name'},
					   @simple_options) });
	    } else {
		# numerical option
		push(@choicelists, []);
		push(@shortchoicelists, []);
		push(@userinputs, $optshortdefault);
		push(@widgets,
		     { label => $printer->{ARGS}[$i]{'comment'} . 
			   " ($printer->{ARGS}[$i]{'min'} ... " .
			       "$printer->{ARGS}[$i]{'max'})",
			   #type => 'range',
			   #min => $printer->{ARGS}[$i]{'min'},
			   #max => $printer->{ARGS}[$i]{'max'},
			   val => \$userinputs[$i],
			   advanced => !member($printer->{ARGS}[$i]{'name'},
					       @simple_options) });
	    }
	}
	# Show the options dialog. The call-back function does a
	# range check of the numerical options.
	my $windowtitle = "$printer->{currentqueue}{'make'} $printer->{currentqueue}{'model'}";
	if ($::expert) {
	    my $driver = undef;
	    if ($driver = $printer->{currentqueue}{driver}) {
		if ($printer->{currentqueue}{foomatic}) {
		    if ($driver eq 'Postscript') {
			$driver = "PostScript";
		    } else {
			$driver = "GhostScript + $driver";
		    }
		} elsif ($printer->{currentqueue}{ppd}) {
		    if ($printer->{DBENTRY}) {
			$printer->{DBENTRY} =~ /^[^\|]*\|[^\|]*\|(.*)$/;
			$driver = $1;
		    } else {
			$driver = printer::get_descr_from_ppd($printer);
			if ($driver =~ /^[^\|]*\|[^\|]*$/) { # No driver info
			    $driver = "CUPS/PPD";
			} else {
			    $driver =~ /^[^\|]*\|[^\|]*\|(.*)$/;
			    $driver = $1;
			}
		    }
		}
	    } 
	    if ($driver) {
		$windowtitle .= ", $driver";
	    }
	}
	# Do not show the options setup dialog when installing a new printer
	# in recommended mode without "Manual configuration" turned on.
	if ((!$printer->{NEW}) or ($::expert) or ($printer->{MANUAL})) {
	    return 0 if !$in->ask_from
		($windowtitle,
		 _("Printer default settings

You should make sure that the page size and the ink type/printing mode (if available) and also the hardware configuration of laser printers (memory, duplex unit, extra trays) are set correctly. Note that with a very high printout quality/resolution printing can get substantially slower."),
		 \@widgets,
		 complete => sub {
		     my $i;
		     for ($i = 0; $i <= $#{$printer->{ARGS}}; $i++) {
			 if (($printer->{ARGS}[$i]{'type'} eq 'int') || ($printer->{ARGS}[$i]{'type'} eq 'float')) {
			     unless (($printer->{ARGS}[$i]{'type'} ne 'int') || ($userinputs[$i] =~ /^[\-\+]?[0-9]+$/)) {
				 $in->ask_warn('', _("Option %s must be an integer number!", $printer->{ARGS}[$i]{'comment'}));
				 return (1, $i);
			     }
			     unless (($printer->{ARGS}[$i]{'type'} ne 'float') || ($userinputs[$i] =~ /^[\-\+]?[0-9\.]+$/)) {
				 $in->ask_warn('', _("Option %s must be a number!", $printer->{ARGS}[$i]{'comment'}));
				 return (1, $i);
			     }
			     unless (($userinputs[$i] >= $printer->{ARGS}[$i]{'min'}) &&
				     ($userinputs[$i] <= $printer->{ARGS}[$i]{'max'})) {
				 $in->ask_warn('', _("Option %s out of range!", $printer->{ARGS}[$i]{'comment'}));
				 return (1, $i);
			     }
			 }
		     }
		     return (0);
		 } );
	}
	# Read out the user's choices and generate the appropriate command
	# line arguments
	@{$printer->{currentqueue}{options}} = ();
	for ($i = 0; $i <= $#{$printer->{ARGS}}; $i++) {
	    push(@{$printer->{currentqueue}{options}}, "-o");
	    if ($printer->{ARGS}[$i]{'type'} eq 'enum') {
		# enumerated option
		my $j;
		for ($j = 0; $j <= $#{$choicelists[$i]}; $j++) {
		    if ($choicelists[$i][$j] eq $userinputs[$i]) {
			push(@{$printer->{currentqueue}{options}}, $printer->{ARGS}[$i]{'name'} . "=". $shortchoicelists[$i][$j]);
		    }
		}
	    } elsif ($printer->{ARGS}[$i]{'type'} eq 'bool') {
		# boolean option
		push(@{$printer->{currentqueue}{options}}, $printer->{ARGS}[$i]{'name'} . "=".
		     (($choicelists[$i][0] eq $userinputs[$i]) ? "1" : "0"));
	    } else {
		# numerical option
		push(@{$printer->{currentqueue}{options}}, $printer->{ARGS}[$i]{'name'} . "=" . $userinputs[$i]);
	    }
	}
    }
    1;
}

sub setasdefault {
    my ($printer, $in) = @_;
    $in->set_help('setupAsDefault') if $::isInstall;
    if (($printer->{DEFAULT} eq '') || # We have no default printer,
	                               # so set the current one as default
	($in->ask_yesorno('', _("Do you want to set this printer (\"%s\")\nas the default printer?", $printer->{QUEUE}), 0))) { # Ask the user
	$printer->{DEFAULT} = $printer->{QUEUE};
        printer::set_default_printer($printer);
    }
}
	
sub print_testpages {
    my ($printer, $in, $upNetwork) = @_;
    $in->set_help('printTestPages') if $::isInstall;
    # print test pages
    my $standard = 1;
    my $altletter = 0;
    my $alta4 = 0;
    my $photo = 0;
    my $ascii = 0;
    my $res2 = 0;
    my $res1 = $in->ask_from_
	({ title => _("Test pages"),
	   messages => _("Please select the test pages you want to print.
Note: the photo test page can take a rather long time to get printed and on laser printers with too low memory it can even not come out. In most cases it is enough to print the standard test page."),
          cancel => ((!$printer->{NEW}) ?
		     _("Cancel") : ($::isWizard ? _("<- Previous") : 
				    _("No test pages"))),
          ok => ($::isWizard ? _("Next ->") : _("Print"))},
	 [
	  { text => _("Standard test page"), type => 'bool',
	    val => \$standard },
	  ($::expert ?
	   { text => _("Alternative test page (Letter)"), type => 'bool', 
	     val => \$altletter } : ()),
	  ($::expert ?
	   { text => _("Alternative test page (A4)"), type => 'bool', 
	     val => \$alta4 } : ()), 
	  { text => _("Photo test page"), type => 'bool', val => \$photo },
	  #{ text => _("Plain text test page"), type => 'bool',
	  #  val => \$ascii }
	  ($::isWizard ?
	   { text => _("Do not print any test page"), type => 'bool', 
	     val => \$res2 } : ())
	  ]);
    $res2 = 1 if (!($standard || $altletter || $alta4 || $photo ||
		    $ascii));
    if ($res1 && !$res2) {
	my @lpq_output;
	{
	    my $w = $in->wait_message('', _("Printing test page(s)..."));
	    
	    $upNetwork and do { &$upNetwork(); undef $upNetwork; sleep(1) };
	    my $stdtestpage = "/usr/share/printer-testpages/testprint.ps";
	    my $altlttestpage = "/usr/share/printer-testpages/testpage.ps";
	    my $alta4testpage = "/usr/share/printer-testpages/testpage-a4.ps";
	    my $phototestpage = "/usr/share/printer-testpages/photo-testpage.jpg";
	    my $asciitestpage = "/usr/share/printer-testpages/testpage.asc";
	    my @testpages;
	    # Install the filter to convert the photo test page to PS
	    if (($photo) && (!$::testing) &&
		(!printer::files_exist((qw(/usr/bin/convert))))) {
		$in->do_pkgs->install('ImageMagick');
	    }
	    # set up list of pages to print
	    $standard && push (@testpages, $stdtestpage);
	    $altletter && push (@testpages, $altlttestpage);
	    $alta4 && push (@testpages, $alta4testpage);
	    $photo && push (@testpages, $phototestpage);
	    $ascii && push (@testpages, $asciitestpage);
	    # print the stuff
	    @lpq_output = printer::print_pages($printer, @testpages);
	}
	my $dialogtext;
	if (@lpq_output) {
	    $dialogtext = _("Test page(s) have been sent to the printer.
It may take some time before the printer starts.
Printing status:\n%s\n\n", @lpq_output);
	} else {
	    $dialogtext = _("Test page(s) have been sent to the printer.
It may take some time before the printer starts.\n");
	}
	if ($printer->{NEW} == 0) {
	    $in->ask_warn('',$dialogtext);
	    return 1;
	} else {
	    $in->ask_yesorno('',$dialogtext . _("Did it work properly?"), 1) 
		and return 1;
	}
    } else {
	return ($::isWizard ? $res1 : 1) ;
    }
    return 2;
}

sub printer_help {
    my ($printer, $in) = @_;
    my $spooler = $printer->{SPOOLER};
    my $queue = $printer->{QUEUE};
    my $default = $printer->{DEFAULT};
    my $raw = 0;
    my $cupsremote = 0;
    my $scanning = "";
    if ($printer->{configured}{$queue}) {
	if (($printer->{configured}{$queue}{'queuedata'}{'model'} eq
	     _("Unknown model")) ||
	    ($printer->{configured}{$queue}{'queuedata'}{'model'} eq
	     _("Raw printer"))) {
	    $raw = 1;
	}
	# Information about scanning with HP's multi-function devices
	$scanning = scanner_help
	    ($printer->{configured}{$queue}{'queuedata'}{'make'} . " " .
	     $printer->{configured}{$queue}{'queuedata'}{'model'}, 
	     $printer->{configured}{$queue}{'queuedata'}{'connect'});
	if ($scanning) {
	    $scanning = "\n\n$scanning\n\n";
	}
    } else {
	$cupsremote = 1;
    }

    my $dialogtext;
    if ($spooler eq "cups") {
	$dialogtext =
_("To print a file from the command line (terminal window) you can either use the command \"%s <file>\" or a graphical printing tool: \"xpp <file>\" or \"kprinter <file>\". The graphical tools allow you to choose the printer and to modify the option settings easily.
", ($queue ne $default ? "lpr -P $queue" : "lpr")) .
_("These commands you can also use in the \"Printing command\" field of the printing dialogs of many applications, but here do not supply the file name because the file to print is provided by the application.
") .
(!$raw ?
_("
The \"%s\" command also allows to modify the option settings for a particular printing job. Simply add the desired settings to the command line, e. g. \"%s <file>\". ", "lpr", ($queue ne $default ? "lpr -P $queue -o option=setting -o switch" : "lpr -o option=setting -o switch")) .
(!$cupsremote ?
 _("To know about the options available for the current printer read either the list shown below or click on the \"Print option list\" button.%s

", $scanning) . printer::lphelp_output($printer) : $scanning .
 _("Here is a list of the available printing options for the current printer:

") . printer::lphelp_output($printer)) : $scanning);
    } elsif ($spooler eq "lprng") {
	$dialogtext =
_("To print a file from the command line (terminal window) use the command \"%s <file>\".
", ($queue ne $default ? "lpr -P $queue" : "lpr")) . 
_("This command you can also use in the \"Printing command\" field of the printing dialogs of many applications. But here do not supply the file name because the file to print is provided by the application.
") .
(!$raw ?
_("
The \"%s\" command also allows to modify the option settings for a particular printing job. Simply add the desired settings to the command line, e. g. \"%s <file>\". ", "lpr", ($queue ne $default ? "lpr -P $queue -Z option=setting -Z switch" : "lpr -Z option=setting -Z switch")) .
_("To get a list of the options available for the current printer click on the \"Print option list\" button." . $scanning) : $scanning);
    } elsif ($spooler eq "lpd") {
	$dialogtext =
_("To print a file from the command line (terminal window) use the command \"%s <file>\".
", ($queue ne $default ? "lpr -P $queue" : "lpr")) .
_("This command you can also use in the \"Printing command\" field of the printing dialogs of many applications. But here do not supply the file name because the file to print is provided by the application.
") .
(!$raw ?
_("
The \"%s\" command also allows to modify the option settings for a particular printing job. Simply add the desired settings to the command line, e. g. \"%s <file>\". ", "lpr", ($queue ne $default ? "lpr -P $queue -o option=setting -o switch" : "lpr -o option=setting -o switch")) .
_("To get a list of the options available for the current printer click on the \"Print option list\" button." . $scanning) : $scanning);
    } elsif ($spooler eq "pdq") {
	$dialogtext =
_("To print a file from the command line (terminal window) use the command \"%s <file>\" or \"%s <file>\".
", ($queue ne $default ? "pdq -P $queue" : "pdq"), ($queue ne $default ? "lpr -P $queue" : "lpr")) .
_("This command you can also use in the \"Printing command\" field of the printing dialogs of many applications. But here do not supply the file name because the file to print is provided by the application.
") .
_("You can also use the graphical interface \"xpdq\" for setting options and handling printing jobs.
If you are using KDE as desktop environment you have a \"panic button\", an icon on the desktop, labeled with \"STOP Printer!\", which stops all print jobs immediately when you click it. This is for example useful for paper jams.
") .
(!$raw ?
_("
The \"%s\" and \"%s\" commands also allow to modify the option settings for a particular printing job. Simply add the desired settings to the command line, e. g. \"%s <file>\".
", "pdq", "lpr", ($queue ne $default ? "pdq -P $queue -aoption=setting -oswitch" : "pdq -aoption=setting -oswitch")) .
_("To know about the options available for the current printer read either the list shown below or click on the \"Print option list\" button.%s

", $scanning) . printer::pdqhelp_output($printer) : $scanning);
    }
    if (!$raw && !$cupsremote) {
        my $choice;
        while ($choice ne _("Close")) {
	    $choice = $in->ask_from_list_
	        (($scanning ?
		  _("Printing/Scanning on \"%s\"", $queue) :
		  _("Printing on the printer \"%s\"", $queue)),
		 $dialogtext,
		 [ _("Print option list"), _("Close") ],
		 _("Close"));
	    if ($choice ne _("Close")) {
		my $w = $in->wait_message('', _("Printing test page(s)..."));
	        printer::print_optionlist($printer);
	    }
	}
    } else {
	$in->ask_warn(($scanning ?
		       _("Printing/Scanning on \"%s\"", $queue) :
		       _("Printing on the printer \"%s\"", $queue)), 
		      $dialogtext);
    }
}

sub scanner_help {
    my ($makemodel, $deviceuri) = @_;
    if ($deviceuri =~ m!^ptal:/(.*)$!) {
	my $ptaldevice = $1;
	if (($makemodel =~ /HP\s+OfficeJet\s+[KVRGP]/i) ||
	    ($makemodel =~ /HP\s+PSC\s+[579]/i)) {
	    # SANE-driven models
	    return _("Your HP multi-function device was configured automatically to be able to scan. Now you can scan with \"scanimage\" (\"scanimage -d hp:%s\" to specify the scanner when you have more than one) from the command line or with the graphical interfaces \"xscanimage\" or \"xsane\". If you are using the GIMP, you can also scan by choosing the appropriate point in the \"File\"/\"Acquire\" menu. Call also \"man scanimage\" and \"man sane-hp\" on the command line to get more information.

Do not use \"scannerdrake\" for this device!",
		     $ptaldevice);
	} elsif ($makemodel !~ /HP\s+PhotoSmart/i) {
	    # "ptal-hp"-driven models
	    return _("Your HP multi-function device was configured automatically to be able to scan. Now you can scan from the command line with \"ptal-hp %s scan ...\". Scanning via a graphical interface or from the GIMP is not supported yet for your device. More information you will find in the \"/usr/share/doc/hpoj-0.8/ptal-hp-scan.html\" file on your system. If you have an HP LaserJet 1100 or 1200 you can only scan when you have the scanner option installed.

Do not use \"scannerdrake\" for this device!",
		     $ptaldevice);
	} else {
	    return "";
	}
    }
}

sub copy_queues_from {
    my ($printer, $in, $oldspooler) = @_;

    $in->set_help('copyQueues') if $::isInstall;
    my $newspooler = $printer->{SPOOLER};
    my @oldqueues;
    my @queueentries;
    my @queuesselected;
    my $newspoolerstr;
    my $oldspoolerstr;
    my $noninteractive = 0;
    {
	my $w = $in->wait_message('', _("Reading printer data ..."));
	@oldqueues = printer::get_copiable_queues($oldspooler, $newspooler);
	@oldqueues = sort(@oldqueues);
	$newspoolerstr = $printer::shortspooler_inv{$newspooler};
	$oldspoolerstr = $printer::shortspooler_inv{$oldspooler};
	for (@oldqueues) {
	    push (@queuesselected, 1);
	    push (@queueentries, { text => $_, type => 'bool', 
				   val => \$queuesselected[$#queuesselected] });
	}
	# LPRng and LPD use the same config files, therefore one sees the 
	# queues of LPD when one uses LPRng and vice versa, but these queues
	# do not work. So automatically transfer all queues when switching
	# between LPD and LPRng.
	if (($oldspooler =~ /^lp/) && ($newspooler =~ /^lp/)) {
	    $noninteractive = 1;
	}
    }
    if ($noninteractive ||
	$in->ask_from_
	({ title => _("Transfer printer configuration"),
	   messages => _("You can copy the printer configuration which you have done for the spooler %s to %s, your current spooler. All the configuration data (printer name, description, location, connection type, and default option settings) is overtaken, but jobs will not be transferred.
Not all queues can be transferred due to the following reasons:
", $oldspoolerstr, $newspoolerstr) .
($newspooler eq "cups" ? _("CUPS does not support printers on Novell servers or printers sending the data into a free-formed command.
") :
 ($newspooler eq "pdq" ? _("PDQ only supports local printers, remote LPD printers, and Socket/TCP printers.
") :
  _("LPD and LPRng do not support IPP printers.
"))) .
_("In addition, queues not created with this program or \"foomatic-configure\" cannot be transferred.") .
($oldspooler eq "cups" ? _("
Also printers configured with the PPD files provided by their manufacturers or with native CUPS drivers cannot be transferred.") : ()) . _("
Mark the printers which you want to transfer and click 
\"Transfer\"."),
	   cancel => _("Do not transfer printers"),
           ok => _("Transfer")
	 },
         \@queueentries
      )) {
	my $queuecopied = 0;
	for (@oldqueues) {
	    if (shift(@queuesselected)) {
                my $oldqueue = $_;
                my $newqueue = $_;
                if ((!$printer->{configured}{$newqueue}) ||
		    ($noninteractive) ||
		    ($in->ask_from_
	             ({ title => _("Transfer printer configuration"),
	                messages => _("A printer named \"%s\" already exists under %s. 
Click \"Transfer\" to overwrite it.
You can also type a new name or skip this printer.", 
				      $newqueue, $newspoolerstr),
                        ok => _("Transfer"),
                        cancel => _("Skip"),
		        callbacks => { complete => sub {
	                    unless ($newqueue =~ /^\w+$/) {
				$in->ask_warn('', _("Name of printer should contain only letters, numbers and the underscore"));
				return (1,0);
			    }
			    if (($printer->{configured}{$newqueue})
				&& ($newqueue ne $oldqueue) && 
				(!$in->ask_yesorno('', _("The printer \"%s\" already exists,\ndo you really want to overwrite its configuration?",
							 $newqueue),
						   0))) {
				return (1,0); # Let the user correct the name
			    }
			    return 0;
			}}
		    },
		      [{label => _("New printer name"),val => \$newqueue}]))) {
		    {
			my $w = $in->wait_message('', 
			   _("Transferring %s ...", $oldqueue));
		        printer::copy_foomatic_queue($printer, $oldqueue,
						   $oldspooler, $newqueue) and
							 $queuecopied = 1;
		    }
		    if ($oldqueue eq $printer->{DEFAULT}) {
			# Make the former default printer the new default
			# printer if the user does not reject
			if (($noninteractive) ||
			    ($in->ask_yesorno
			     (_("Transfer printer configuration"),
			      _("You have transferred your former default printer (\"%s\"), Should it be also the default printer under the new printing system %s?", $oldqueue, $newspoolerstr), 1))) {
			    $printer->{DEFAULT} = $newqueue;
			    printer::set_default_printer($printer);
			}
		    }
		}
            }
	}
        if ($queuecopied) {
	    my $w = $in->wait_message('', _("Refreshing printer data ..."));
	    printer::read_configured_queues($printer);
        }
    }
}

sub start_network {
    my $in = $_[0];
    my $w = $in->wait_message(_("Configuration of a remote printer"), 
			      _("Starting network ..."));
    return printer::start_service("network");
}

sub check_network {

    # This routine is called whenever the user tries to configure a remote
    # printer. It checks the state of the network functionality to assure
    # that the network is up and running so that the remote printer is
    # reachable.

    my ($printer, $in) = @_;

    # Any additional dialogs caused by this subroutine should appear as
    # extra windows and not embedded in the "Add printer" wizard.
    local $::isWizard = 0;

    $in->set_help('checkNetwork') if $::isInstall;

    # First check: Does /etc/sysconfig/network-scripts/draknet_conf exist
    # (otherwise the network is not configured yet and draknet has to be
    # started)

    if (!printer::files_exist("/etc/sysconfig/network-scripts/draknet_conf")) {
	my $go_on = 0;
	while (!$go_on) {
	    my $choice = _("Configure the network now");
	    if ($in->ask_from(_("Network functionality not configured"),
			      _("You are going to configure a remote printer. This needs working network access, but your network is not configured yet. If you go on without network configuration, you will not be able to use the printer which you are configuring now. How do you want to proceed?"),
			      [ { val => \$choice, type => 'list',
				  list => [ _("Configure the network now"),
					    _("Go on without configuring the network") ]} ] )) {
		if ($choice eq _("Configure the network now")){
		    if ($::isInstall) {
			require network::netconnect;
		        network::netconnect::main
			    ($in->{prefix}, $in->{netcnx} ||= {}, 
			     $in->{netc}, $in->{mouse}, $in, 
			     $in->{intf}, 0,
			     $in->{lang} eq "fr_FR" && 
			     $in->{keyboard} eq "fr", 0);
		    } else {
			system("/usr/sbin/draknet");
		    }
		    if (printer::files_exist("/etc/sysconfig/network-scripts/draknet_conf")) {
			$go_on = 1;
		    }
		} else {
		    return 1;
		}
	    } else {
		return 0;
	    }
	}
    }

    # Second check: Is the network running?

    if (printer::network_running()) {return 1;}

    # The network is configured now, start it.
    if (!start_network($in)) {
	$in->ask_warn(_("Configuration of a remote printer"), 
($::isInstall ?
_("The network configuration done during the installation cannot be started now. Please check whether the network gets accessable after booting your system and correct the configuration using the Mandrake Control Center, section \"Network & Internet\"/\"Connection\", and afterwards set up the printer, also using the Mandrake Control Center, section \"Hardware\"/\"Printer\"") :
_("The network access was not running and could not be started. Please check your configuration and your hardware. Then try to configure your remote printer again.")));
	return 0;
    }

    # Give a SIGHUP to the daemon and in case of CUPS do also the
    # automatic configuration of broadcasting/access permissions
    # The daemon is not really restarted but only SIGHUPped to not
    # interrupt print jobs.

    my $w = $in->wait_message(_("Configuration of a remote printer"), 
			      _("Restarting printing system ..."));

    return printer::SIGHUP_daemon($printer->{SPOOLER});

}

sub security_check {
    # Check the security mode and when in "high" or "paranoid" mode ask the
    # user whether he really wants to configure printing.
    my ($printer, $in, $spooler) = @_;

    # Any additional dialogs caused by this subroutine should appear as
    # extra windows and not embedded in the "Add printer" wizard.
    local $::isWizard = 0;

    $in->set_help('securityCheck') if $::isInstall;

    # Get security level
    my $security = undef;
    if ($::isInstall) {
	$security = $in->{'security'};
    } else {
	$security = printer::get_security_level();
    }

    # Exit silently if the spooler is PDQ
    if ($spooler eq "pdq") {return 1;}

    # Exit silently in medium or lower security levels
    if ((!$security) || ($security < 4)) {return 1;}
    
    # Exit silently if the current spooler is already activated for the current
    # security level
    if (printer::spooler_in_security_level($spooler, $security)) {return 1;}

    # Tell user in which security mode he is and ask him whether he really
    # wants to activate the spooler in the given security mode. Stop the
    # operation of installing the spooler if he disagrees.
    my $securitystr = ($security == 4 ? _("high") : _("paranoid"));
    if ($in->ask_yesorno(_("Installing a printing system in the %s security level", $securitystr),
			 _("You are about to install the printing system %s on a system running in the %s security level.

This printing system runs a daemon (background process) which waits for print jobs and handles them. This daemon is also accessable by remote machines through the network and so it is a possible point for attacks. Therefore only a few selected daemons are started by default in this security level.

Do you really want to configure printing on this machine?",
			   $printer::shortspooler_inv{$spooler},
			   $securitystr))) {
        printer::add_spooler_to_security_level($spooler, $security);
	my $service;
	if (($spooler eq "lpr") || ($spooler eq "lprng")) {
	    $service = "lpd";
	} else {
	    $service = $spooler;
	}
        printer::start_service_on_boot($service);
	return 1;
    } else {
	return 0;
    }
}

sub start_spooler_on_boot {
    # Checks whether the spooler will be started at boot time and if not,
    # ask the user whether he wants to start the spooler at boot time.
    my ($printer, $in, $service) = @_;

    # Any additional dialogs caused by this subroutine should appear as
    # extra windows and not embedded in the "Add printer" wizard.
    local $::isWizard = 0;

    $in->set_help('startSpoolerOnBoot') if $::isInstall;
    if (!printer::service_starts_on_boot($service)) {
	if ($in->ask_yesorno(_("Starting the printing system at boot time"),
			     _("The printing system (%s) will not be started automatically when the machine is booted.

It is possible that the automatic starting was turned off by changing to a higher security level, because the printing system is a potential point for attacks.

Do you want to have the automatic starting of the printing system turned on again?",
		       $printer::shortspooler_inv{$printer->{SPOOLER}}))) {
	    printer::start_service_on_boot($service);
	}
    }
    1;
}

sub install_spooler {
    # installs the default spooler and start its daemon
    my ($printer, $in) = @_;
    if (!$::testing) {
	# If the user refuses to install the spooler in high or paranoid
	# security level, exit.
	if (!security_check($printer, $in, $printer->{SPOOLER})) {
	    return 0;
	}
	if ($printer->{SPOOLER} eq "cups") {
	    {
		my $w = $in->wait_message('', _("Checking installed software..."));
		if ((!$::testing) &&
		    (!printer::files_exist((qw(/usr/lib/cups/cgi-bin/printers.cgi
					       /sbin/ifconfig
					       /usr/bin/xpp
					       /usr/bin/curl),
					    ($::expert ? 
					     "/usr/share/cups/model/postscript.ppd.gz" : ())
					    )))) {
		    $in->do_pkgs->install(('cups', 'net-tools', 'xpp',
					   'curl',
					   ($::expert ? 'cups-drivers' : ())));
		}
		# Start daemon
	        printer::start_service("cups");
		# Set the CUPS tools as defaults for "lpr", "lpq", "lprm", ...
	        printer::set_alternative("lpr","/usr/bin/lpr-cups");
	        printer::set_alternative("lpq","/usr/bin/lpq-cups");
	        printer::set_alternative("lprm","/usr/bin/lprm-cups");
	        printer::set_alternative("lp","/usr/bin/lp-cups");
	        printer::set_alternative("cancel","/usr/bin/cancel-cups");
	        printer::set_alternative("lpstat","/usr/bin/lpstat-cups");
	        printer::set_alternative("lpc","/usr/sbin/lpc-cups");
		# Remove PDQ panic buttons from the user's KDE Desktops
	        printer::pdq_panic_button("remove");
	    }
	    # Should it be started at boot time?
	    start_spooler_on_boot($printer, $in, "cups");
	} elsif ($printer->{SPOOLER} eq "lpd") {
	    {
		my $w = $in->wait_message('', _("Checking installed software..."));
		# "lpr" conflicts with "LPRng", remove "LPRng"
		if ((!$::testing) &&
		    (printer::files_exist((qw(/usr/lib/filters/lpf))))) {
		    my $w = $in->wait_message('', _("Removing LPRng..."));
		    $in->do_pkgs->remove_nodeps('LPRng');
		}
		if ((!$::testing) &&
		    (!printer::files_exist((qw(/usr/sbin/lpf
					       /usr/sbin/lpd
					       /sbin/ifconfig
					       /usr/bin/gpr
					       /usr/bin/a2ps
					       /usr/bin/convert))))) {
		    $in->do_pkgs->install(('lpr', 'net-tools', 'gpr', 'a2ps', 'ImageMagick'));
		}
		# Start daemon
	        printer::restart_service("lpd");
		# Set the LPD tools as defaults for "lpr", "lpq", "lprm", ...
	        printer::set_alternative("lpr","/usr/bin/lpr-lpd");
	        printer::set_alternative("lpq","/usr/bin/lpq-lpd");
	        printer::set_alternative("lprm","/usr/bin/lprm-lpd");
	        printer::set_alternative("lpc","/usr/sbin/lpc-lpd");
		# Remove PDQ panic buttons from the user's KDE Desktops
	        printer::pdq_panic_button("remove");
	    }
	    # Should it be started at boot time?
	    start_spooler_on_boot($printer, $in, "lpd");
	} elsif ($printer->{SPOOLER} eq "lprng") {
	    {
		my $w = $in->wait_message('', _("Checking installed software..."));
		# "LPRng" conflicts with "lpr", remove "lpr"
		if ((!$::testing) &&
		    (printer::files_exist((qw(/usr/sbin/lpf))))) {
		    my $w = $in->wait_message('', _("Removing LPD..."));
		    $in->do_pkgs->remove_nodeps('lpr');
		}
		if ((!$::testing) &&
		    (!printer::files_exist((qw(/usr/lib/filters/lpf
					       /usr/sbin/lpd
					       /sbin/ifconfig
					       /usr/bin/gpr
					       /usr/bin/a2ps
					       /usr/bin/convert))))) {
		    $in->do_pkgs->install('LPRng', 'net-tools', 'gpr', 'a2ps', 'ImageMagick');
		}
		# Start daemon
	        printer::restart_service("lpd");
		# Set the LPRng tools as defaults for "lpr", "lpq", "lprm", ...
	        printer::set_alternative("lpr","/usr/bin/lpr-lpd");
	        printer::set_alternative("lpq","/usr/bin/lpq-lpd");
	        printer::set_alternative("lprm","/usr/bin/lprm-lpd");
	        printer::set_alternative("lp","/usr/bin/lp-lpd");
	        printer::set_alternative("cancel","/usr/bin/cancel-lpd");
	        printer::set_alternative("lpstat","/usr/bin/lpstat-lpd");
	        printer::set_alternative("lpc","/usr/sbin/lpc-lpd");
		# Remove PDQ panic buttons from the user's KDE Desktops
	        printer::pdq_panic_button("remove");
	    }
	    # Should it be started at boot time?
	    start_spooler_on_boot($printer, $in, "lpd");
	} elsif ($printer->{SPOOLER} eq "pdq") {
	    {
		my $w = $in->wait_message('', _("Checking installed software..."));
		if ((!$::testing) &&
		    (!printer::files_exist((qw(/usr/bin/pdq
					       /usr/X11R6/bin/xpdq))))) {
		    $in->do_pkgs->install('pdq');
		}
		# PDQ has no daemon, so nothing needs to be started
		
		# Set the PDQ tools as defaults for "lpr", "lpq", "lprm", ...
	        printer::set_alternative("lpr","/usr/bin/lpr-pdq");
	        printer::set_alternative("lpq","/usr/bin/lpq-foomatic");
	        printer::set_alternative("lprm","/usr/bin/lprm-foomatic");
		# Add PDQ panic buttons to the user's KDE Desktops
	        printer::pdq_panic_button("add");
	    }
	}
	# Give a SIGHUP to the devfsd daemon to correct the permissions
	# for the /dev/... files according to the spooler
	printer::SIGHUP_daemon("devfs");
    }
    1;
}

sub setup_default_spooler {
    my ($printer, $in) = @_;
    $in->set_help('setupDefaultSpooler') if $::isInstall;
    $printer->{SPOOLER} ||= 'cups';
    my $oldspooler = $printer->{SPOOLER};
    my $str_spooler = 
	$in->ask_from_list_(_("Select Printer Spooler"),
			    _("Which printing system (spooler) do you want to use?"),
			    [ printer::spooler() ],
			    $printer::spooler_inv{$printer->{SPOOLER}},
			    ) or return;
    $printer->{SPOOLER} = $printer::spooler{$str_spooler};
    # Install the spooler if not done yet
    if (!install_spooler($printer, $in)) {
	$printer->{SPOOLER} = $oldspooler;
	return;
    }
    if ($printer->{SPOOLER} ne $oldspooler) {
	# Remove the local printers from Star Office/Open Office
	printer::removelocalprintersfromapplications($printer);
	# Get the queues of this spooler
	{
	    my $w = $in->wait_message('', _("Reading printer data ..."));
	    printer::read_configured_queues($printer);
	}
	# Copy queues from former spooler
	copy_queues_from($printer, $in, $oldspooler);
	# Re-read the printer database (CUPS has additional drivers, PDQ
	# has no raw queue)
	%printer::thedb = ();
	#my $w = $in->wait_message('', _("Reading printer database ..."));
	#printer::read_printer_db($printer->{SPOOLER});
    }
    # Save spooler choice
    printer::set_default_spooler($printer);
    return $printer->{SPOOLER};
}

sub configure_queue {
    my ($printer, $in) = @_;
    my $w = $in->wait_message('', _("Configuring printer \"%s\" ...",
				    $printer->{currentqueue}{queue}));
    $printer->{complete} = 1;
    printer::configure_queue($printer);
    $printer->{complete} = 0;
}

sub install_foomatic {
    my ($in) = @_;
    if ((!$::testing) &&
	(!printer::files_exist((qw(/usr/bin/foomatic-configure
				       /usr/lib/perl5/site_perl/5.6.1/Foomatic/DB.pm)
				    )))) {
	my $w = $in->wait_message('', _("Installing Foomatic ..."));
	$in->do_pkgs->install('foomatic');
    }
}

sub wizard_close {
    my ($in, $mode) = @_;
    # Leave wizard mode with congratulations screen if $mode = 1
    $::Wizard_no_previous = 1;
    $::Wizard_no_cancel = 1;
    $::Wizard_finished = 1;
    wizard_congratulations($in) if ($mode == 1);
    undef $::isWizard;
    $::WizardWindow->destroy if defined $::WizardWindow;
    undef $::WizardWindow;
};

#- Program entry point for configuration of the printing system.
sub main {
    my ($printer, $in, $ask_multiple_printer, $upNetwork) = @_;

    # Default printer name, we do not use "lp" so that one can switch the
    # default printer under LPD without needing to rename another printer.
    # Under LPD the alias "lp" will be given to the default printer.
    my $defaultprname = _("Printer");

    # printerdrake does not work without foomatic, and for more convenience
    # we install some more stuff
    {
	my $w = $in->wait_message('', _("Checking installed software..."));
	if ((!$::testing) &&
	    (!printer::files_exist((qw(/usr/bin/foomatic-configure
				       /usr/lib/perl5/site_perl/5.6.1/Foomatic/DB.pm
				       /usr/bin/escputil
				       /usr/share/printer-testpages/testprint.ps
				       ),
				    (printer::files_exist("/usr/bin/gimp") ?
				     "/usr/lib/gimp/1.2/plug-ins/print" : ())
				    )))) {
	    $in->do_pkgs->install('foomatic','printer-utils','printer-testpages',
				  if_($in->do_pkgs->is_installed('gimp'), 'gimpprint'));
	}

	# only experts should be asked for the spooler
	!$::expert and $printer->{SPOOLER} ||= 'cups';

    }

    # If we have chosen a spooler, install it and mark it as default spooler
    if (($printer->{SPOOLER}) && ($printer->{SPOOLER} ne '')) {
	if (!install_spooler($printer, $in)) {return;}
        printer::set_default_spooler($printer);
    }

    # Control variables for the main loop
    my ($menuchoice, $cursorpos, $queue, $continue, $newqueue, $editqueue, $expertswitch, $menushown) = ('', '::', $defaultprname, 1, 0, 0, 0, 0);
    # Cursor position in queue modification window
    my $modify = _("Printer options");
    while ($continue) {
	$newqueue = 0;
	# When the queue list is not shown, cancelling the printer type
	# dialog should leave the program
	$continue = 0;
	# Get the default printer
	if (defined($printer->{SPOOLER}) && ($printer->{SPOOLER} ne '') &&
	    ((!defined($printer->{DEFAULT})) || ($printer->{DEFAULT} eq ''))) {
	    my $w = $in->wait_message('', _("Preparing PrinterDrake ..."));
	    $printer->{DEFAULT} = printer::get_default_printer($printer);
	    if ($printer->{DEFAULT}) {
		# If a CUPS system has only remote printers and no default
		# printer defined, it defines the first printer whose
		# broadcast signal appeared after the start of the CUPS
		# daemon, so on every start another printer gets the default
		# printer. To avoid this, make sure that the default printer
		# is defined.
		printer::set_default_printer($printer);
	    } else {
		$printer->{DEFAULT} = '';
	    }
	}

	# Configure the current printer queues in applications
	{
	    my $w = $in->wait_message('', _("Configuring applications..."));
	    printer::configureapplications($printer);
	}

	if ($editqueue) {
	    # The user was either in the printer modification dialog and did
	    # not close it or he had set up a new queue and said that the test
	    # page didn't come out correctly, so let the user edit the queue.
	    $newqueue = 0;
	    $continue = 1;
	    $editqueue = 0;
	} else {
	    # Reset modification window cursor when one leaves the window
	    $modify = _("Printer options");
	    if (!$ask_multiple_printer && 
		%{$printer->{configured} || {}} == ()) {
		$in->set_help('doYouWantToPrint') if $::isInstall;
		$newqueue = 1;
		$menuchoice = $printer->{want} || 
		    $in->ask_yesorno(_("Printer"),
				    _("Would you like to configure printing?"),
				    0) ? "\@addprinter" : "\@quit";
		if ($menuchoice ne "\@quit") {
		    $printer->{SPOOLER} ||= 
			setup_default_spooler ($printer, $in) ||
			    return;
		}
	    } else {
		# Ask for a spooler when none is defined
		$printer->{SPOOLER} ||=  setup_default_spooler ($printer, $in) || return;
		# This entry and the check for this entry have to use
		# the same translation to work properly
		my $spoolerentry = _("Printing system: ");
		# Show a queue list window when there is at least one queue,
		# when we are in expert mode, or when we are not in the
		# installation.
		unless ((!%{$printer->{configured} || {}}) && 
			(!$::expert) && ($::isInstall)) {
		    $in->set_help('mainMenu') if $::isInstall;
		    # Cancelling the printer type dialog should leed to this
		    # dialog
		    $continue = 1;
		    # This is for the "Recommended" installation. When one has
		    # no printer queue printerdrake starts directly adding
		    # a printer and in the end it asks whether one wants to
		    # install another printer. If the user says "Yes", he
		    # arrives in the main menu of printerdrake. From now
		    # on the question is not asked any more but the menu
		    # is shown directly after having done an operation.
		    $menushown = 1;
		    # Initialize the cursor position
		    if (($cursorpos eq "::") && 
			($printer->{DEFAULT}) &&
			($printer->{DEFAULT} ne "")) {
			if ($printer->{configured}{$printer->{DEFAULT}}) {
			    $cursorpos = 
				$printer->{configured}{$printer->{DEFAULT}}{'queuedata'}{'menuentry'} . _(" (Default)");
			} elsif ($printer->{SPOOLER} eq "cups") {
			    ($cursorpos) = 
				grep { $_ =~ /!$printer->{DEFAULT}:[^!]*$/ }
			    printer::get_cups_remote_queues($printer);
			}
		    }
		    # Generate the list of available printers
		    my @printerlist = 
			( (sort((map {$printer->{configured}{$_}{'queuedata'}{'menuentry'} 
				      . ($_ eq $printer->{DEFAULT} ?
					 _(" (Default)") : (""))}
				 keys(%{$printer->{configured}
					|| {}})),
				($printer->{SPOOLER} eq "cups" ?
				 printer::get_cups_remote_queues($printer)
				 : ())))
			  );
		    my $noprinters = ($#printerlist < 0);
		    # Position the cursor where it were before (in case
		    # a button was pressed).
		    $menuchoice = $cursorpos;
		    # Show the main dialog
		    $in->ask_from_(
			{title => _("Printerdrake"),
			 messages =>
			     ($noprinters ? "" :
			      (($printer->{SPOOLER} eq "cups") ?
			       _("The following printers are configured. Double-click on a printer to change its settings; to make it the default printer; to view information about it; or to make a printer on a remote CUPS server available for Star/Open Office.") :
			       _("The following printers are configured. Double-click on a printer to change its settings; to make it the default printer; or to view information about it."))),
			 cancel => (""),
			 ok => (""),
			},
			# List the queues
			[ ($noprinters ? () :
			   { val => \$menuchoice, format => \&translate,
			     sort => 0, separator => "!",tree_expanded => 1,
			     quit_if_double_click => 1,allow_empty_list =>1,
			     list => \@printerlist }),
			  { clicked_may_quit =>
			    sub { 
				# Save the cursor position
				$cursorpos = $menuchoice;
				$menuchoice = "\@addprinter";
				1; 
			    },
			    val => _("Add a new printer") },
			  ( $printer->{SPOOLER} eq "cups" ?
			    ({ clicked_may_quit =>
				   sub { 
				       # Save the cursor position
				       $cursorpos = $menuchoice;
				       $menuchoice = "\@refresh";
				       1;
				   },
			       val => _("Refresh printer list (to display all available remote CUPS printers)") },
			     { clicked_may_quit =>
				   sub { 
				       # Save the cursor position
				       $cursorpos = $menuchoice;
				       $menuchoice = "\@cupsconfig";
				       1;
				   },
			       val => ($::expert ? _("CUPS configuration") :
				       _("Specify CUPS server")) }) : ()),
			  ( $::expert ?
			    { clicked_may_quit =>
				  sub {
				      # Save the cursor position
				      $cursorpos = $menuchoice;
				      $menuchoice = "\@spooler";
				      1;
				  },
				  val => _("Change the printing system") } :
			    ()),
			  ( !$::isInstall ?
			    { clicked_may_quit =>
				  sub { $menuchoice = "\@usermode"; 1; },
				  val => ($::expert ? _("Normal Mode") :
					  _("Expert Mode")) } : ()),
			  { clicked_may_quit =>
			    sub { $menuchoice = "\@quit"; 1; },
			    val => _("Quit") },
			  ]
		    );
		    # Toggle expert mode and standard mode
		    if ($menuchoice eq "\@usermode") {
			$::expert = !$::expert;
			# Read printer database for the new user mode
			%printer::thedb = ();
			#my $w = $in->wait_message('', _("Reading printer database ..."));
		        #printer::read_printer_db($printer->{SPOOLER});
			# Re-read printer queues to switch the tree
			# structure between expert/normal mode.
			my $w = $in->wait_message('', _("Reading printer data ..."));
			printer::read_configured_queues($printer);
			$cursorpos = "::";
			next;
		    }
		} else {
		    #- as there are no printer already configured, Add one
		    #- automatically.
		    $menuchoice = "\@addprinter"; 
		}
		# Refresh printer list
		if ($menuchoice eq "\@refresh") {
		    next;
		}
		# Configure CUPS
		if ($menuchoice eq "\@cupsconfig") {
		    config_cups($printer, $in);
		    next;
		}
	        # Determine a default name for a new printer queue
		if ($menuchoice eq "\@addprinter") {
		    $newqueue = 1;
		    my %queues; 
		    @queues{map { split '\|', $_ } keys %{$printer->{configured}}} = ();
		    my $i = ''; while ($i < 150) { last unless exists $queues{"$defaultprname$i"}; ++$i; }
		    $queue = "$defaultprname$i";
		}
		# Function to switch to another spooler
		if ($menuchoice eq "\@spooler") {
		    $printer->{SPOOLER} = setup_default_spooler ($printer, $in) || $printer->{SPOOLER};
		    next;
		}
		# Rip the queue name out of the chosen menu entry
		if ($menuchoice =~ /!([^\s!:]+):[^!]*$/) {
		    $queue = $1;
		    # Save the cursor position
		    $cursorpos = $menuchoice;
		}
	    }
	    # Save the default spooler
	    printer::set_default_spooler($printer);
	    #- Close printerdrake
	    $menuchoice eq "\@quit" and last;
	}
	if ($newqueue) {
	    $printer->{NEW} = 1;
	    #- Set default values for a new queue
	    $printer::printer_type_inv{$printer->{TYPE}} or 
		$printer->{TYPE} = printer::default_printer_type($printer);
	    $printer->{currentqueue} = { queue    => $queue,
					 foomatic => 0,
					 desc     => "",
					 loc      => "",
					 make     => "",
					 model    => "",
					 printer  => "",
					 driver   => "",
					 connect  => "",
					 spooler  => $printer->{SPOOLER},
				       };
	    #- Set OLD_QUEUE field so that the subroutines for the
	    #- configuration work correctly.
	    $printer->{OLD_QUEUE} = $printer->{QUEUE} = $queue;
	    #- Do all the configuration steps for a new queue
	  step_0:
	    #if ((!$::expert) && (!$::isEmbedded) && (!$::isInstall) &&
	    if ((!$::isEmbedded) && (!$::isInstall) &&
		($in->isa('interactive_gtk'))) {
		$continue = 1;
		# Enter wizard mode
		$::Wizard_pix_up = "wiz_printerdrake.png";
		$::Wizard_title = _("Add a new printer");
		$::isWizard = 1;
		# Wizard welcome screen
		$::Wizard_no_previous = 1;
		undef $::Wizard_no_cancel;
		undef $::Wizard_finished;
		wizard_welcome($printer, $in) or do {
		    wizard_close($in, 0);
		    next;
		};
		undef $::Wizard_no_previous;
		eval { 
		    # eval to catch wizard cancel. The wizard stuff should 
		    # be in a separate function with steps. see dragw.
		    # (dams)
		    $printer->{TYPE} = "LOCAL";
		  step_1:
		    !$::expert or choose_printer_type($printer, $in) or
			goto step_0;
		  step_2:
		    setup_printer_connection($printer, $in) or do {
			goto step_1 if $::expert;
			goto step_0;
		    };
		  step_3:
		    if (($::expert) or ($printer->{MANUAL}) or
			($printer->{MORETHANONE})) {
			choose_printer_name($printer, $in) or
			    goto step_2;
		    }
		    get_db_entry($printer, $in);
		  step_3_9:
		    if ((!$::expert) and (!$printer->{MANUAL})) {
			is_model_correct($printer, $in) or do {
			    goto step_3 if $printer->{MORETHANONE};
			    goto step_2;
			}
		    }
		  step_4:
		    # Remember DB entry for "Previous" button in wizard
		    my $dbentry = $printer->{DBENTRY};
		    if (($::expert) or ($printer->{MANUAL}) or
			($printer->{MANUALMODEL})) { 
			choose_model($printer, $in) or do {
			    # Restore DB entry
			    $printer->{DBENTRY} = $dbentry;
			    goto step_3_9 if $printer->{MANUALMODEL};
			    goto step_3;
			};
		    }
		    get_printer_info($printer, $in) or next;
		  step_5:
		    setup_options($printer, $in) or
			goto step_4;
		    configure_queue($printer, $in);
		    undef $printer->{MANUAL} if $printer->{MANUAL};
		    $::Wizard_no_previous = 1;
		    setasdefault($printer, $in);
		    $cursorpos = 
			$printer->{configured}{$printer->{QUEUE}}{'queuedata'}{'menuentry'} .
			($printer->{QUEUE} eq $printer->{DEFAULT} ?
			 _(" (Default)") : ());
		    my $testpages = print_testpages($printer, $in, $printer->{TYPE} !~ /LOCAL/ && $upNetwork);
		    if ($testpages == 1) {
			# User was content with test pages
			# Leave wizard mode with congratulations screen
			wizard_close($in, 1);
			$continue = ($::expert || !$::isInstall || $menushown ||
				     $in->ask_yesorno('',_("Do you want to configure another printer?")));
		    } elsif ($testpages == 2) {
			# User was not content with test pages
			# Leave wizard mode without congratulations
			# screen
			wizard_close($in, 0);
			$editqueue = 1;
			$queue = $printer->{QUEUE};
		    }
		};
		wizard_close($in, 0) if ($@ =~ /wizcancel/);
	    } else {
		$printer->{TYPE} = "LOCAL";
		!$::expert or choose_printer_type($printer, $in) or next;
		#- Cancelling the printer connection type window
		#- should not restart printerdrake in recommended mode,
		#- it is the first dialog of the sequence there and
		#- the "Add printer" sequence should be stopped when there
		#- are no local printers. In expert mode this is the second
		#- dialog of the sequence.
		$continue = 1 if ($::expert || !$::isInstall);
		setup_printer_connection($printer, $in) or next;
		#- Cancelling one of the following dialogs should
		#- restart printerdrake
		$continue = 1;
		if (($::expert) or ($printer->{MANUAL}) or
		    ($printer->{MORETHANONE})) {
		    choose_printer_name($printer, $in) or next;
		}
		get_db_entry($printer, $in);
		if ((!$::expert) and (!$printer->{MANUAL})) {
		    is_model_correct($printer, $in) or next;
		}
		if (($::expert) or ($printer->{MANUAL}) or
		    ($printer->{MANUALMODEL})) { 
		    choose_model($printer, $in) or next;
		}
		get_printer_info($printer, $in) or next;
		setup_options($printer, $in) or next;
		configure_queue($printer, $in);
		undef $printer->{MANUAL} if $printer->{MANUAL};
		setasdefault($printer, $in);
		$cursorpos = 
		    $printer->{configured}{$printer->{QUEUE}}{'queuedata'}{'menuentry'} .
		    ($printer->{QUEUE} eq $printer->{DEFAULT} ?
		     _(" (Default)") : ());
		my $testpages = print_testpages($printer, $in, $printer->{TYPE} !~ /LOCAL/ && $upNetwork);
		if ($testpages == 1) {
		    # User was content with test pages
		    $continue = ($::expert || !$::isInstall || $menushown ||
				 $in->ask_yesorno('',_("Do you want to configure another printer?")));
		} elsif ($testpages == 2) {
		    # User was not content with test pages
		    $editqueue = 1;
		    $queue = $printer->{QUEUE};
		}
	    };
	    undef $printer->{MANUAL} if $printer->{MANUAL};
	    undef $printer->{NOAUTODETECT} if $printer->{NOAUTODETECT};
	} else {
	    $printer->{NEW} = 0;
	    # Modify a queue, ask which part should be modified
	    $in->set_help('modifyPrinterMenu') if $::isInstall;
	    # Get some info to display
	    my $infoline;
	    if ($printer->{configured}{$queue}) {
		# Here we must regenerate the menu entry, because the
		# parameters can be changed.
		printer::make_menuentry($printer,$queue);
		$printer->{configured}{$queue}{'queuedata'}{menuentry} =~
		    /!([^!]+)$/;
		$infoline = $1 .
		    ($queue eq $printer->{DEFAULT} ? _(" (Default)") : ()) .
		    ($printer->{configured}{$queue}{'queuedata'}{'desc'} ?
		     ", Descr.: $printer->{configured}{$queue}{'queuedata'}{'desc'}" : ()) .
		    ($printer->{configured}{$queue}{'queuedata'}{'loc'} ?
		     ", Loc.: $printer->{configured}{$queue}{'queuedata'}{'loc'}" : ()) .
		    ($::expert ?
		     ", Driver: $printer->{configured}{$queue}{'queuedata'}{'driver'}" : ());
	    } else {
		# The parameters of a remote CUPS queue cannot be changed,
		# so we can simply take the menu entry.
		$cursorpos =~ /!([^!]+)$/;
		$infoline = $1;
	    }
	    if ($in->ask_from_
		   ({ title => _("Modify printer configuration"),
		      messages => 
			   _("Printer %s
What do you want to modify on this printer?",
			     $infoline),
		     cancel => _("Close"),
		     ok => _("Do it!")
		     },
		    [ { val => \$modify, format => \&translate, 
			type => 'list',
			list => [ ($printer->{configured}{$queue} ?
				   (_("Printer connection type"),
				    _("Printer name, description, location"),
				    ($::expert ?
				     _("Printer manufacturer, model, driver") :
				     _("Printer manufacturer, model")),
				    (($printer->{configured}{$queue}{'queuedata'}{'make'} ne
				      "") &&
				     (($printer->{configured}{$queue}{'queuedata'}{'model'} ne
				       _("Unknown model")) &&
				      ($printer->{configured}{$queue}{'queuedata'}{'model'} ne
				       _("Raw printer"))) ?
				     _("Printer options") : ())) : ()),
				   (($queue ne $printer->{DEFAULT}) ?
				    _("Set this printer as the default") : ()),
				   ($printer->{configured}{$queue} ? () :
				    (_("Add this printer to Star/Open Office"),
				     _("Remove this printer from Star/Open Office"))),
				   _("Print test pages"),
				   _("Know how to use this printer"),
				   ($printer->{configured}{$queue} ?
				    _("Remove printer") : ()) ] } ] ) ) {
		# Stay in the queue edit window until the user clicks "Close"
		# or deletes the queue
		$editqueue = 1; 
		#- Copy the queue data and work on the copy
		$printer->{currentqueue} = {};
		my $driver;
		if ($printer->{configured}{$queue}) {
		    printer::copy_printer_params($printer->{configured}{$queue}{'queuedata'}, $printer->{currentqueue});
		    #- Keep in mind the printer driver which was used, so it
                    #- can be determined whether the driver is only
		    #- available in expert and so for setting the options
		    #- for the driver in recommended mode a special
		    #- treatment has to be applied.
		    $driver = $printer->{currentqueue}{driver};
		}
		#- keep in mind old name of queue (in case of changing)
		$printer->{OLD_QUEUE} = $printer->{QUEUE} = $queue;
		#- Reset some variables
		$printer->{OLD_CHOICE} = undef;
		$printer->{DBENTRY} = undef;
		#- Which printer type did we have before (check beginning of
		#- URI)
		my $type;
		if ($printer->{configured}{$queue}) {
		    for $type (qw(file lpd socket smb ncp postpipe)) {
			if ($printer->{currentqueue}{'connect'}
			    =~ /^$type:/) {
			    $printer->{TYPE} = 
				($type eq 'file' ? 'LOCAL' : uc($type));
			    last;
			}
		    }
		}
		# Do the chosen task
		if ($modify eq _("Printer connection type")) {
		    choose_printer_type($printer, $in) &&
			setup_printer_connection($printer, $in) &&
		            configure_queue($printer, $in);
		} elsif ($modify eq _("Printer name, description, location")) {
		    choose_printer_name($printer, $in) &&
			configure_queue($printer, $in);
		    # Delete old queue when it was renamed
		    if (lc($printer->{QUEUE}) ne lc($printer->{OLD_QUEUE})) {
			my $w = $in->wait_message('', _("Removing old printer \"%s\" ...", $printer->{OLD_QUEUE}));
		        printer::remove_queue($printer, $printer->{OLD_QUEUE});
			# If the default printer was renamed, correct the
			# the default printer setting of the spooler
			if ($queue eq $printer->{DEFAULT}) {
			    $printer->{DEFAULT} = $printer->{QUEUE};
			    printer::set_default_printer($printer);
			}
			$queue = $printer->{QUEUE};
		    }
		} elsif (($modify eq _("Printer manufacturer, model, driver")) ||
			 ($modify eq _("Printer manufacturer, model"))) {
		    get_db_entry($printer, $in);
		    choose_model($printer, $in) &&
			get_printer_info($printer, $in) &&
			setup_options($printer, $in) &&
			configure_queue($printer, $in);
		} elsif ($modify eq _("Printer options")) {
		    get_printer_info($printer, $in) &&
			setup_options($printer, $in) &&
			configure_queue($printer, $in);
		} elsif ($modify eq _("Set this printer as the default")) {
		    $printer->{DEFAULT} = $queue;
		    printer::set_default_printer($printer);
		    $in->ask_warn(_("Default printer"),
				  _("The printer \"%s\" is set as the default printer now.", $queue));
		} elsif ($modify eq _("Add this printer to Star/Open Office")) {
		    if (printer::addcupsremotetoapplications
			($printer, $queue)) {
			$in->ask_warn(_("Adding printer to Star/Open Office"),
				      _("The printer \"%s\" was successfully added to Star/Open Office.", $queue));
		    } else {
			$in->ask_warn(_("Adding printer to Star/Open Office"),
				      _("Failed to add the printer \"%s\" to Star/Open Office.", $queue));
		    }
		} elsif ($modify eq _("Remove this printer from Star/Open Office")) {
		    if (printer::removeprinterfromapplications
			($printer, $queue)) {
			$in->ask_warn(_("Removing printer from Star/Open Office"),
				      _("The printer \"%s\" was successfully removed from Star/Open Office.", $queue));
		    } else {
			$in->ask_warn(_("Removing printer from Star/Open Office"),
				      _("Failed to remove the printer \"%s\" from Star/Open Office.", $queue));
		    }
		} elsif ($modify eq _("Print test pages")) {
		    print_testpages($printer, $in, $upNetwork);
		} elsif ($modify eq _("Know how to use this printer")) {
		    printer_help($printer, $in);
		} elsif ($modify eq _("Remove printer")) {
		    if ($in->ask_yesorno('',
           _("Do you really want to remove the printer \"%s\"?", $queue), 1)) {
			{
			    my $w = $in->wait_message('', _("Removing printer \"%s\" ...", $queue));
			    if (printer::remove_queue($printer, $queue)) { 
				$editqueue = 0;
				# Define a new default printer if we have
				# removed the default one
				if ($queue eq $printer->{DEFAULT}) {
				    my @k = sort(keys(%{$printer->{configured}}));
				    if (@k) {
					$printer->{DEFAULT} = $k[0];
				        printer::set_default_printer($printer);
				    } else {
					$printer->{DEFAULT} = "";
				    }
				}
				# Let the main menu cursor go to the default
				# position
				$cursorpos = "::";
			    }
			}
		    }		
		}
		# Make sure that the cursor is still at the same position
		# in the main menu when one has modified something on the
		# current printer
		if (($printer->{QUEUE}) && ($printer->{QUEUE} ne "")) {
		    if ($printer->{configured}{$printer->{QUEUE}}) {
			$cursorpos = 
			    $printer->{configured}{$printer->{QUEUE}}{'queuedata'}{'menuentry'} . 
			    ($printer->{QUEUE} eq $printer->{DEFAULT} ? 
			     _(" (Default)") : ());
		    } else {
			my $s1 = _(" (Default)");
			my $s2 = $s1;
			$s2 =~ s/\(/\\\(/;
			$s2 =~ s/\)/\\\)/;
			if (($printer->{QUEUE} eq $printer->{DEFAULT}) &&
			    ($cursorpos !~ /$s2/)) {
			    $cursorpos .= $s1;
			}
		    }
		}
	    } else {
		$editqueue = 0;
	    }
	    $continue = ($editqueue || $::expert || !$::isInstall || 
			 $menushown ||
			 $in->ask_yesorno('',_("Do you want to configure another printer?")));
	}

	# Configure the current printer queue in applications when main menu
	# will not be shown (During installation in "Recommended" mode)
	if ($::isInstall && !$::expert && !$menushown && !$continue) {
	    my $w = $in->wait_message('', _("Configuring applications..."));
	    printer::configureapplications($printer);
	}

	# Delete some variables
	$printer->{OLD_QUEUE} = "";
	$printer->{QUEUE} = "";
	$printer->{TYPE} = "";
	$printer->{str_type} = "";
	$printer->{currentqueue} = {};
	$printer->{DBENTRY} = "";
	$printer->{ARGS} = "";
	$printer->{complete} = 0;
	$printer->{OLD_CHOICE} = "";
    }
    # Clean up the $printer data structure for auto-install log
    for my $queue (keys %{$printer->{configured}}) {
	for my $item (keys %{$printer->{configured}{$queue}}) {
	    if ($item ne "queuedata") {
		delete($printer->{configured}{$queue}{$item});
	    }
	}
	if ($printer->{configured}{$queue}{'queuedata'}{'menuentry'}) {
	    delete($printer->{configured}{$queue}{'queuedata'}{'menuentry'});
	}
    }
    delete($printer->{OLD_QUEUE});
    delete($printer->{QUEUE});
    delete($printer->{TYPE});
    delete($printer->{str_type});
    delete($printer->{currentqueue});
    delete($printer->{DBENTRY});
    delete($printer->{ARGS});
    delete($printer->{complete});
    delete($printer->{OLD_CHOICE});
    delete($printer->{NEW});
    delete($printer->{MORETHANONE});
    delete($printer->{MANUALMODEL});
    #use Data::Dumper;
    #print "###############################################################################\n", Dumper($printer); 

}