pavuk-0.9.35/0000777000175000001440000000000010567011371007740 500000000000000pavuk-0.9.35/po/0000777000175000001440000000000010567011371010356 500000000000000pavuk-0.9.35/po/de.po0000644000175000001440000044717310565415541011247 00000000000000# German message catalog for the Pavuk web grabber. # Copyright (c) 1998,1999,2000 Stefan Ondrejicka # Jürgen Grieb , 1998,1999. # Colin Marquardt , 1999,2000. # Dirk Stöcker , 2003. msgid "" msgstr "" "Project-Id-Version: pavuk-0.9pl29i\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-02-16 21:57+0100\n" "PO-Revision-Date: 2003-10-30 12:00+0200\n" "Last-Translator: Dirk Stöcker \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: abstract.c:41 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "Setze Download für %d Sekunden aus.\n" #: abstract.c:78 doc.c:539 msgid "File redirect\n" msgstr "Datei umgeleitet\n" #: abstract.c:114 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "Lade Kopie aus lokalem Netscape-Cache - %s\n" #: abstract.c:146 #, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "Lade Kopie aus lokalem Mozilla-Cache - %s\n" #: abstract.c:180 #, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "Lade Kopie aus lokalem MSIE-Cache - %s\n" #: abstract.c:217 msgid "Unsupported URL\n" msgstr "Nichtunterstützte URL\n" #: abstract.c:306 msgid "Warning: broken ftp transfer ...\n" msgstr "Warnung: abgebrochene FTP-Übertragung\n" #: abstract.c:316 msgid "Error removing FTP document from remote server\n" msgstr "Fehler beim Entfernen des FTP-Dokuments vom Server\n" #: abstract.c:364 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "Fehler beim Lesen eines Dokuments mit \"chunked\" transfer encoding!\n" #: ainterface.c:124 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "Entferne nichtunterstützte URL: %s\n" #: ainterface.c:215 msgid "Specify at least one starting URL!" msgstr "Mindestens eine Anfangs-URL muss angegeben werden!" #: ainterface.c:217 msgid "Specify at least one starting URL!\n" msgstr "Mindestens eine Anfangs-URL muss angegeben werden!\n" #: ainterface.c:562 msgid "Can't list available message catalogs\n" msgstr "Kann verfügbare Meldungskataloge nicht anzeigen\n" #: authinfo.c:105 msgid "Bad section - specify protocol\n" msgstr "Falscher Abschnitt -- Protokoll angeben\n" #: authinfo.c:110 msgid "Bad section - specify hostname\n" msgstr "Falscher Abschnitt -- Hostnamen angeben\n" #: authinfo.c:159 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "Kann nicht bearbeitet werden: \"%s\"\n" #: authinfo.c:178 #, c-format msgid "Bad protocol - %s\n" msgstr "Falsches Protokoll - %s\n" #: authinfo.c:189 #, c-format msgid "Bad port number %s\n" msgstr "Falsche Portnummer %s\n" #: authinfo.c:210 #, c-format msgid "Unknown auth type - %s\n" msgstr "Unbekannter Authentifizierungstyp - %s\n" #: cleanup.c:66 #, c-format msgid "press any key to exit\n" msgstr "Beliebige Taste zum Beenden\n" #: cmdparse.c:121 #, c-format msgid "Error parsing commandline at: %s\n" msgstr "Fehler beim Parsen der Kommandozeile bei: %s\n" #: cmdparse.c:177 #, c-format msgid "Unable to parse commandline: %s\n" msgstr "Kann Kommandozeile nicht parsen: %s\n" # config.c:2321 #: config.c:46 msgid "Level order" msgstr "Ebenen-Reihenfolge" # config.c:2322 #: config.c:47 msgid "Level order, inline first" msgstr "Ebenen-Reihenfolge, Inline zuerst" # config.c:2323 #: config.c:48 msgid "Pre order" msgstr "Pre-Reihenfolge" # config.c:2324 #: config.c:49 msgid "Pre order, inline first" msgstr "Pre-Reihenfolge, Inline zuerst" #: config.c:115 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "Verwendung: %s [Optionen] [beliebige Anzahl von URLs]\n" "pavuk-%s %s\n" #: config.c:131 #, c-format msgid "Type \"%s --help\" for long help\n" msgstr "\"%s --help\" für ausführliche Hilfe\n" #: config.c:138 msgid "Optional features available :\n" msgstr "Optional verfügbare Features:\n" #: config.c:140 msgid " - Debug mode\n" msgstr " - Debug-Modus\n" #: config.c:144 msgid " - GNU gettext internationalization of messages\n" msgstr " - GNU gettext Meldungs-Internationalisierung\n" #: config.c:148 msgid " - flock() document locking\n" msgstr " - flock() Dokumenten-Locking\n" #: config.c:152 msgid " - fcntl() document locking\n" msgstr " - fcntl() Dokumenten-Locking\n" #: config.c:157 msgid " - Gtk GUI interface\n" msgstr " - Gtk GUI-Interface\n" #: config.c:160 msgid " - URL tree preview\n" msgstr " - URL-Baum-Vorschau\n" #: config.c:165 msgid " - HTTP and FTP over SSL\n" msgstr " - HTTP und FTP über SSL\n" #: config.c:176 #, c-format msgid " - SSL layer implemented with %s library\n" msgstr " - SSL-Layer mit %s-Bibliothek implementiert\n" #: config.c:180 msgid " - Socks proxy support\n" msgstr " - Socks Proxy-Unterstützung\n" #: config.c:183 msgid " - filesystem free space checking\n" msgstr " - Überprüfung des freien Dateisystem-Platzes\n" #: config.c:189 msgid " - optional regex patterns in -fnrules and -*rpattern options\n" msgstr " - optionale reguläre Ausdrücken in -fnrules und -*rpattern-Optionen\n" # config.c:3108 #: config.c:193 msgid " - POSIX regexp\n" msgstr " - POSIX-Regexp\n" # config.c:3112 #: config.c:197 msgid " - Bell V8 regexp\n" msgstr " - Bell V8-Regexp\n" # config.c:3108 #: config.c:201 msgid " - BSD regexp\n" msgstr " - BSD-Regexp\n" # config.c:3108 #: config.c:205 msgid " - GNU regexp\n" msgstr " - GNU-Regexp\n" # config.c:3108 #: config.c:209 msgid " - PCRE regexp\n" msgstr " - PCRE-Regexp\n" # config.c:2970 #: config.c:214 msgid " - support for loading files from Netscape browser cache\n" msgstr " - Unterstützung des Ladens von Dateien aus dem Netscape-Cache\n" #: config.c:220 msgid " - support for detecting whether pavuk is running as background job\n" msgstr " - Unterstützung des Erkennens, ob Pavuk im Hintergrund läuft\n" #: config.c:224 msgid " - multithreading support\n" msgstr " - Multithreading-Unterstützung\n" #: config.c:228 msgid " - NTLM authorization support\n" msgstr " - NTLM-Autorisierungsunterstützung\n" #: config.c:232 msgid " - JavaScript bindings\n" msgstr " - JavaScript-Unterstützung\n" #: config.c:236 msgid " - IPv6 support\n" msgstr " - IPv6-Unterstützung\n" #: config.c:307 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "HTML-Tag nicht unterstützt: %s.%s\n" #: config.c:714 msgid "Error parsing commandline\n" msgstr "Fehler beim Parsen der Kommandozeile\n" #: config.c:722 #, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "Nicht genügend Parameter für die \"-%s\"-Option\n" #: config.c:730 #, c-format msgid "Unknown option %s\n" msgstr "Unbekannte Option %s\n" #: config.c:737 #, c-format msgid "Wrong format of option %s\n" msgstr "Falsches Format der Option %s\n" #: config.c:748 config.c:1161 #, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "" "WARNUNG: Option \"-%s\" in der aktuellen Konfiguration nicht unterstützt!\n" #: config.c:763 #, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "Bitte Nummer bei Parameter \"-%s\" angeben\n" #: config.c:783 config.c:1220 #, c-format msgid "Invalid port range \"%s\"\n" msgstr "Falscher Portnummernbereich \"%s\"\n" #: config.c:841 config.c:1263 http_proxy.c:114 #, c-format msgid "Unknown port \"%s\"\n" msgstr "Unbekannter Port \"%s\"\n" #: config.c:859 config.c:1277 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "Falsches Authentifizierungs-Schema \"%s\"\n" #: config.c:869 config.c:1287 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "Unbekannter Arbeits-Modus \"%s\"\n" #: config.c:893 #, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "Bitte Gleitpunktzahl bei Parameter \"-%s\" angeben\n" #: config.c:919 #, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "Bitte gültigen Bedingungstyp für -%s (%s) angeben\n" #: config.c:939 #, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "Bitte gültigen regulären Ausdruck angeben bei Parameter \"-%s\"\n" # config.c:2902 config.c:3210 #: config.c:952 config.c:1406 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "Unbekannte Reihenfolge des URL-Ladens - \"%s\"\n" #: config.c:961 config.c:1418 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "Unbekannte SSL-Version \"%s\"\n" #: config.c:970 config.c:1430 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "Ungültiger zusätzlicher HTTP-Header - \"%s\"\n" #: config.c:995 config.c:1455 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "Ungültige Anforderung spezifiziert - \"%s\"\n" #: config.c:1060 #, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "Ungültige Parameter für die \"-%s\"-Option\n" #: config.c:1078 #, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "Ungültige Nummernliste \"%s\" für die \"-%s\"-Option\n" #: config.c:1097 #, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "Ungültiger FTP-Anmeldestring \"%s\" für die \"-%s\"-Option\n" #: config.c:1187 #, c-format msgid "Please specify number \"%s\"\n" msgstr "Bitte Nummer angeben \"%s\"\n" #: config.c:1207 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "Nur \"wahr\" & \"falsch\" möglich: \"%s\"\n" #: config.c:1298 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "Falscher Zeit-Parameter \"%s\"\n" #: config.c:1329 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "Bitte Nummer angeben \"%s\"\n" #: config.c:1347 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "Bitte gültige Argumente angeben für \"%s\"\n" #: config.c:1361 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "Bitte gültigen Bedingungstyp für %s (%s) angeben\n" #: config.c:1390 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "Bitte gültigen regulären Ausdruck angeben: \"%s\"\n" #: config.c:1504 #, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "Ungültige js_transform-Spezifizierung - \"%s\"\n" #: config.c:1527 #, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "Ungültige Nummernliste spezifiziert - \"%s\"\n" #: config.c:1543 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "Ungültiger FTP-Anmeldestring \"%s\".\n" #: config.c:1593 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "Kann nicht bearbeitet werden: \"%s\"\n" #: config.c:1633 #, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "FEHLER: Szenario konnte nicht geladen werden (%s)\n" #: cookie.c:322 #, c-format msgid "Unable to parse : %s\n" msgstr "Kann nicht bearbeitet werden: %s\n" #: cookie.c:463 msgid "Cookie file format not supported for writing.\n" msgstr "Schreiben in Dateiformat der Cookiedatei nicht unterstützt.\n" #: cookie.c:468 msgid "Updating cookie file\n" msgstr "Aktualisiere Cookie-Datei\n" #: cookie.c:498 msgid "Cookie file has changed - > synchronizing\n" msgstr "Cookie-Datei wurde geändert -> synchronisiere\n" #: cookie.c:644 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "Server %s versucht, Cookie für Domain %s zu setzen\n" #: cookie.c:656 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "Entferne Cookie von ausgeschalteter Domain %s\n" #: debugl.c:15 msgid "HTML parsers" msgstr "HTML-Parser" #: debugl.c:16 msgid "Server responses" msgstr "Serverantworten" #: debugl.c:17 msgid "Client requests" msgstr "Clientanforderungen" #: debugl.c:18 msgid "Procedure calling" msgstr "Prozeduraufrufe" #: debugl.c:19 msgid "File locking" msgstr "File-Locking" #: debugl.c:20 msgid "Networking code" msgstr "Netzwerkcode" #: debugl.c:21 msgid "Miscelanous" msgstr "Verschiedenes" #: debugl.c:22 msgid "Extended user infos" msgstr "Erweiterte Benutzer-Infos" #: debugl.c:23 msgid "Multithreading - locking" msgstr "Multithreading - Locking" #: debugl.c:24 msgid "Multithreading - threads" msgstr "Multithreading - Threads" #: debugl.c:25 msgid "POST request data" msgstr "POST-Anforderungsdaten" #: debugl.c:26 msgid "Limiting conditions" msgstr "Einschränkende Bedingungen" #: debugl.c:27 msgid "SSL informations" msgstr "SSL-Informationen" #: debugl.c:65 #, c-format msgid "Bad debug level selection : %s\n" msgstr "Falsche Auswahl des Debug-Level: %s\n" #: decode.c:285 msgid "decode" msgstr "dekodieren" #: digest_auth.c:145 msgid "Trying to do HTTP Digest authorization\n" msgstr "Versuche HTTP-Digest-Autorisierung\n" #: digest_auth.c:190 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "Versuche HTTP-Proxy-Digest-Autorisierung\n" #: dinfo.c:406 dinfo.c:426 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr "Fehler beim Parsen des Felds aus der Datei .pavuk_info: %s\n" #: doc.c:289 msgid "Transfering data" msgstr "Übertrage Daten" #: doc.c:303 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt: SO_RCVBUF fehlgeschlagen" #: doc.c:323 msgid "storing document" msgstr "speichere Dokument" #: doc.c:398 msgid "Document transfer data" msgstr "Dokumentenübertragung abgeschlossen" #: doc.c:417 msgid "Data transfer done" msgstr "Datenübertragung abgeschlossen" #: doc.c:588 #, c-format msgid "Trying to resume from position %d\n" msgstr "Versuche fortzufahren an Stelle: %d\n" #: doc.c:650 msgid "Opening connection" msgstr "Öffne Verbindung" # doc.c:470 doc.c:502 #: doc.c:679 msgid "Loading local copy\n" msgstr "Lade lokale Kopie\n" #: doc.c:917 msgid "File may be truncated\n" msgstr "Datei könnte abgeschnitten sein\n" #: doc.c:939 doc.c:952 msgid "Decoding document - OK\n" msgstr "Dekodiere Dokument - OK\n" #: doc.c:942 msgid "Decoding document - failed\n" msgstr "Dekodiere Dokument - misslungen\n" #: doc.c:956 msgid "Deflating document - failed\n" msgstr "Entpacke Dokument - misslungen\n" #: doc.c:960 msgid "Unsupported document encoding\n" msgstr "Nichtunterstützte Dokumentkodierung\n" #: doc.c:966 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "" "Kodierte Datei erhalten, aber Dekodierung nicht erlaubt (unverändert)\n" #: doc.c:1157 #, c-format msgid "Removing improper document : %s\n" msgstr "Lösche ungültiges Dokument : %s\n" #: doc.c:1220 doc.c:1287 msgid "Local file" msgstr "Lokale Datei" #: doc.c:1226 msgid "Gopher/Text File" msgstr "Gopher/Text-Datei" #: doc.c:1229 msgid "Gopher/Directory" msgstr "Gopher/Verzeichnis" #: doc.c:1232 msgid "Gopher/CSO phone book" msgstr "Gopher/CSO-Telefonbuch" #: doc.c:1235 msgid "Gopher/Error" msgstr "Gopher/Fehler" #: doc.c:1238 msgid "Gopher/BINHEX" msgstr "Gopher/BINHEX" #: doc.c:1241 msgid "Gopher/DOS bin" msgstr "Gopher/DOS bin" #: doc.c:1244 msgid "Gopher/UUencoded" msgstr "Gopher/UUencoded" #: doc.c:1247 msgid "Gopher/Search index" msgstr "Gopher/Suchindex" #: doc.c:1250 msgid "Gopher/Telnet session" msgstr "Gopher/Telnet-Sitzung" #: doc.c:1253 msgid "Gopher/bin" msgstr "Gopher/bin" #: doc.c:1256 msgid "Gopher/Duplicated server" msgstr "Gopher/Doppelter Server" #: doc.c:1259 msgid "Gopher/TN3270" msgstr "Gopher/TN3270" #: doc.c:1262 msgid "Gopher/GIF" msgstr "Gopher/GIF" #: doc.c:1265 msgid "Gopher/Image" msgstr "Gopher/Bild" #: doc.c:1271 msgid "FTP/Directory" msgstr "FTP/Verzeichnis" #: doc.c:1273 msgid "FTP/File" msgstr "FTP/Datei" #: doc.c:1277 msgid "FTPS/Directory" msgstr "FTPS/Verzeichnis" #: doc.c:1279 msgid "FTPS/File" msgstr "FTPS/Datei" #: doc.c:1282 msgid "Unsupported type" msgstr "Nichtunterstützter Typ" #: doc.c:1476 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s]" msgstr "S: %s [R: %s] [ET: %s] [RT: %s]" #: doc.c:1479 #, c-format msgid "S: %s [R: %s] [ET: %s]" msgstr "S: %s [R: %s] [ET: %s]" #: doc.c:1517 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "Warte, dass Sperre aufgehoben wird auf: %s\n" #: doc.c:1784 msgid "Rewriting links inside parent documents" msgstr "Schreibe Links innerhalb der Elterndokumente neu" #: errcode.c:17 #, c-format msgid "%s: user break\n" msgstr "%s: Benutzerabbruch\n" #: errcode.c:24 #, c-format msgid "%s: OK\n" msgstr "%s: OK\n" #: errcode.c:27 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s: FEHLER: Dokument speichern\n" #: errcode.c:30 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s: FEHLER: Datei öffnen\n" #: errcode.c:35 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "" "%s: FEHLER: URL zeigt auf lokales Verzeichnis, wird nicht unterstützt\n" #: errcode.c:38 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s: FEHLER: unbekannt\n" #: errcode.c:41 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s: FEHLER: Dokument schreibgeschützt\n" #: errcode.c:44 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s: FEHLER: Socket lesen\n" #: errcode.c:47 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s: MELDUNG: größer als erlaubt\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "%s: MELDUNG: ausgeschaltet durch Bedingung im Benutzer-Exit-Skript\n" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s: MELDUNG: kleiner als minimal erlaubte Größe\n" #: errcode.c:59 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s: MELDUNG: Mime-Typ ist nicht erlaubt (%s)\n" #: errcode.c:63 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s: FEHLER: Proxy-Verbindung\n" #: errcode.c:66 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s: FEHLER: Übertragung vom Benutzer abgebrochen\n" #: errcode.c:71 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "" "%s: MELDUNG: Dateiänderungsdatum passt nicht zum festgelegten Intervall\n" #: errcode.c:75 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s: FEHLER: Datei hat Größe null - möglicher Fehler\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s: MELDUNG: Dokument wurde bereits verarbeitet\n" #: errcode.c:82 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s: MELDUNG: Dokument durch Benutzer ausgeschaltet\n" #: errcode.c:86 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "%s: MELDUNG: Dokument ausgeschaltet durch Limit-Regeln\n" #: errcode.c:90 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "%s: WARNUNG: Übertragungsrate geringer als minimal erlaubt\n" #: errcode.c:96 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "" "%s: WARNUNG: Dateigrößen-Quota überschritten, Rest wird abgeschnitten\n" #: errcode.c:101 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "%s: FEHLER: Übertragungs-Quota überschritten, breche Holen ab\n" #: errcode.c:106 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "%s: FEHLER: zuwenig Speicherplatz auf Dateisystem, breche Laden ab\n" #: errcode.c:112 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "%s: WARNUNG: maximale Laufzeit überschritten, Holen wird abgebrochen\n" #: errcode.c:116 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s: FEHLER: unbekannter FTP-Fehler\n" #: errcode.c:120 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s: FEHLER: FTP-Server unterstützt REST Befehl nicht\n" #: errcode.c:124 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s: FEHLER: kann Verzeichnisinhalt nicht anzeigen\n" #: errcode.c:127 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s: FEHLER: keine Verbindung zum FTP-Server\n" #: errcode.c:130 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s: FEHLER: FTP-Authentifizierung - Falscher Benutzername\n" #: errcode.c:134 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s: FEHLER: FTP-Authentifizierung - Falsches Passwort\n" #: errcode.c:139 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "%s: FEHLER: FTP-Proxy-Authentifizierung - Falscher Benutzername\n" #: errcode.c:143 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s: FEHLER: FTP-Proxy-Authentifizierung - Falsches Passwort\n" #: errcode.c:146 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s: FEHLER: kann FTP-Datenverbindung nicht herstellen\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s: FEHLER: kann Datei nicht vom FTP-Server holen\n" #: errcode.c:155 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s: FEHLER: FTP Server unterstützt MDTM Befehl nicht\n" #: errcode.c:158 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s: FEHLER: Dokument vom FTP-Server wurde abgeschnitten\n" #: errcode.c:163 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s: MELDUNG: Neuholen unnötig - Datei ist aktuell\n" #: errcode.c:168 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s: MELDUNG: FTP-Übertragung durch Regeln verboten\n" #: errcode.c:174 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "" "%s: WARNUNG: FTP-Verzeichnis-URL, aber FTP-Verzeichnis verboten (-FTPdir)\n" #: errcode.c:178 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "%s: WARNUNG: FTP-Anmeldung fehlgeschlagen\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s: FEHLER: unbekannter HTTP-Fehler\n" #: errcode.c:184 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s: FEHLER: kann keine Verbindung zum HTTP-Server herstellen\n" #: errcode.c:189 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "%s: FEHLER: HTTP-Server unterstützt kein partielles Holen\n" #: errcode.c:193 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "%s: FEHLER: unvollständige HTTP-Anfrage gesendet\n" #: errcode.c:196 #, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%s: FEHLER: kann HTTP-Antwort nicht lesen\n" #: errcode.c:201 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "%s: FEHLER: unerwartete HTTP-Antwort nach Wiederholungsversuch\n" #: errcode.c:206 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "%s: FEHLER: kann HTTP-Anfrage nicht senden\n" #: errcode.c:209 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s: MELDUNG: leite an andere Stelle um\n" #: errcode.c:213 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s: FEHLER: HTTP-Dokument ist abgeschnitten\n" #: errcode.c:216 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s: FEHLER: zyklische Umleitung!\n" #: errcode.c:219 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s: FEHLER: Umleitung zu nichtunterstützter URL\n" #: errcode.c:222 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s: FEHLER: kann nicht zum Proxy-Server verbinden\n" #: errcode.c:227 #, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "%s: FEHLER: fehlerhafte Redirect-Antwort vom Server erhalten\n" #: errcode.c:231 #, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "%s: FEHLER: keine NTLM-Autorisierung möglich\n" #: errcode.c:234 #, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "%s: FEHLER: keine HTTP_Digest-Autorisierung möglich\n" #: errcode.c:238 #, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "%s: FEHLER: keine NTLM-Proxy-Autorisierung möglich\n" #: errcode.c:243 #, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "%s: FEHLER: keine HTTP-Proxy-Digest-Autorisierung möglich\n" #: errcode.c:247 #, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s: FEHLER: HTTP-Client sendet falsche Anfrage\n" #: errcode.c:250 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s: FEHLER: HTTP-Authentifizierung erforderlich\n" #: errcode.c:253 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s: FEHLER: HTTP-Proxyauthentifizierung erforderlich\n" #: errcode.c:257 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "%s: FEHLER: HTTP-Bezahlung erforderlich\n" #: errcode.c:260 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "%s: FEHLER: nichterlaubte HTTP-Anfrage\n" #: errcode.c:263 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s: FEHLER: HTTP-Dokument nicht gefunden\n" #: errcode.c:266 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s: FEHLER: HTTP-Server-Fehler\n" #: errcode.c:271 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "%s: FEHLER: HTTP-Server antwortete mit Verbindungs-Timeout\n" #: errcode.c:276 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "%s: FEHLER: HTTP-Server antwortete mit Konflikt-Antwort\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s: FEHLER: Dokument wurde vom HTTP-Server entfernt\n" #: errcode.c:284 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "" "%s: FEHLER: Proxy muss verwendet werden, um auf diese URL zuzugreifen\n" #: errcode.c:288 #, c-format msgid "%s: ERROR: 306\n" msgstr "%s: FEHLER: 306\n" #: errcode.c:293 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" "%s: FEHLER: verwendete HTTP-Methode ist für diese URL nicht unterstützt oder " "erlaubt\n" #: errcode.c:299 #, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "%s: FEHLER: Client akzeptiert MIME-Type der angeforderten URL nicht\n" #: errcode.c:304 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "%s: FEHLER: Content-Length: fehlt im Anforderungs-Header\n" #: errcode.c:310 #, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "%s: FEHLER: Vorbedingungen für angefragte URL nicht erfüllt\n" #: errcode.c:314 #, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s: FEHLER: Anforderungs-Body zu groß\n" #: errcode.c:317 #, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s: FEHLER: Anforderungs-URL zu lang\n" #: errcode.c:321 #, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "" "%s: FEHLER: Ressource im Format für diese Anforderung nicht unterstützt\n" #: errcode.c:325 #, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s: FEHLER: falscher Bereich für Dokument angefordert\n" #: errcode.c:329 #, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "%s: FEHLER: nicht erfülltes »Expect:« der Anfrage\n" #: errcode.c:335 #, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "" "%s: FEHLER: angeforderte HTTP-Methode auf Serverseite nicht implementiert\n" #: errcode.c:339 #, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s: FEHLER: Gatewaying für diese URL fehlgeschlagen\n" #: errcode.c:344 #, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "" "%s: FEHLER: HTTP-Service zur Zeit nicht verfügbar, bitte später versuchen\n" #: errcode.c:350 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "" "%s: FEHLER: Timeout in Kommunikation zwischen Gateway und entferntem Server " "aufgetreten\n" #: errcode.c:356 #, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "" "%s: FEHLER: HTTP-Version der Anfrage nicht vom entfernten Server " "unterstützt\n" #: errcode.c:360 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s: FEHLER: kann nicht mit GOPHER-Server verbinden\n" #: errcode.c:364 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%s: FEHLER: unbekannter GOPHER-Fehler\n" #: errcode.c:367 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s: FEHLER: kann keine Verbindung zum HTTPS-Server herstellen\n" #: errcode.c:373 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "" "%s: FEHLER: kann keine SSL-Kontrollverbindung zum FTPS-Server herstellen\n" #: errcode.c:378 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s: FEHLER: FTP-Server unterstützt keine SSL-Verbindungen\n" #: errcode.c:384 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "" "%s: FEHLER: kann keine SSL-Datenverbindung zum FTPS-Server herstellen\n" #: errcode.c:388 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s: FEHLER: unbekannter HTTP-Fehlercode: %d\n" #: file.c:30 msgid "Can't open directory\n" msgstr "Verzeichnis kann nicht geöffnet werden\n" #: form.c:1090 form.c:1153 form.c:1317 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "Nichtunterstützter Formulartyp in Kontext: %d\n" #: form.c:1402 msgid "Browse" msgstr "Browsen" #: form.c:1416 msgid "URLs with forms" msgstr "URLs mit Formularen" #: form.c:1426 msgid "Refresh URL list" msgstr "Aktualisiere URL-Liste" #: form.c:1462 form.c:1467 url.c:1199 msgid "unknown" msgstr "unbekannt" #: form.c:1611 msgid "Pavuk: load form file" msgstr "Pavuk: Lade Formular-Datei" #: form.c:1634 msgid "Fill forms" msgstr "Fülle Formulare aus" #: form.c:1641 msgid "Form number: " msgstr "Formularnummer: " #: form.c:1655 msgid "Action URL: " msgstr "Aktions-URL: " #: form.c:1666 gui_common.c:705 msgid "Request method: " msgstr "Anforderungs-Methode: " #: form.c:1677 gui_common.c:726 gui_tree.c:118 msgid "Request encoding: " msgstr "Anforderungs-Kodierung: " #: form.c:1688 msgid "HTML form content" msgstr "HTML-Formularinhalt" #: form.c:1703 msgid "Load HTML file ..." msgstr "Lade HTML-Datei ..." # gauthinfo.c:360 #: form.c:1756 msgid "Pavuk: HTML forms editor" msgstr "Pavuk: HTML-Formulareditor" #: form.c:1778 gui_jscons.c:185 msgid "Close" msgstr "Schließen" #: ftp.c:95 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "" "ftp_get_response: FTP-Kontrollverbindung wurde vor jeglicher Antwort " "geschlossen\n" #: ftp.c:173 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "ftp: setsockopt TOS - THROUGHPUT fehlgeschlagen" #: ftp.c:268 ftp.c:291 ftp.c:331 #, c-format msgid "Error parsing FTP response to %s command - %s\n" msgstr "Fehler beim Parsen der FTP-Antwort auf das Kommando %s - %s\n" #: ftp.c:663 msgid "Re-using established FTP control connection\n" msgstr "Verwende bestehende FTP-Kontrollverbindung wieder\n" #: ftp.c:885 http.c:1462 msgid "Size differs, regeting whole\n" msgstr "Größe weicht ab, hole komplett\n" #: ftp.c:896 http.c:1346 http.c:1472 msgid "Modified from last download - regeting whole\n" msgstr "Verändert seit letztem Mal - hole komplett\n" #: ftp.c:993 msgid "" "Warning: FTP server understands REST command, but can't handle it properly.\n" msgstr "" "Warnung: FTP-Server versteht REST-Kommando, kann es aber nicht richtig " "handhaben.\n" #: ftp.c:1237 ftp.c:1684 #, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%hu%s\n" "\n" "\n" "

List of FTP directory %s://%s:%hu/%s


    " msgstr "" "\n" "\n" "\n" "Verzeichnis von %s://%s:%hu%s\n" "\n" "\n" "

    FTP-Verzeichnisliste von %s://%s:%hu/%s


      " #: ftp.c:1759 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" "ERROR: Kann FTP-Listenzeile nicht parsen:\n" "\t%s\n" #: ftp.c:1943 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "Erzeuge symbolischen Link \"%s\" nach \"%s\"\n" #: gauthinfo.c:101 msgid "Pavuk: Save auth. info file" msgstr "Pavuk: Speichere Authentifizierungs-Info-Datei" #: gauthinfo.c:150 msgid "Pavuk: Load auth. info file" msgstr "Pavuk: Lade Authentifizierungs-Info-Datei" # gauthinfo.c:360 #: gauthinfo.c:328 msgid "Pavuk: Authorization info editor" msgstr "Pavuk: Editor für Authentifizierungs-Information" # gauthinfo.c:376 #: gauthinfo.c:345 msgid "Protocol" msgstr "Protokoll" #: gauthinfo.c:346 gui_common.c:1890 msgid "Host" msgstr "Host" # gauthinfo.c:378 #: gauthinfo.c:347 msgid "User" msgstr "Benutzer" #: gauthinfo.c:348 msgid "Password" msgstr "Passwort" # gauthinfo.c:380 #: gauthinfo.c:349 msgid "Base dir." msgstr "Basisverzeichnis" #: gauthinfo.c:350 msgid "Realm" msgstr "Realm" #: gauthinfo.c:351 msgid "Scheme" msgstr "Schema" #: gauthinfo.c:376 msgid "Protocol: " msgstr "Protokoll: " #: gauthinfo.c:403 gui_common.c:1907 gui_common.c:1967 gui_common.c:1990 #: gui_common.c:2019 msgid "Host: " msgstr "Host: " #: gauthinfo.c:414 msgid "User: " msgstr "Benutzer: " #: gauthinfo.c:425 gui_common.c:2183 gui_common.c:2235 gui_common.c:2260 msgid "Password: " msgstr "Passwort: " #: gauthinfo.c:436 msgid "Base directory: " msgstr "Basisverzeichnis: " #: gauthinfo.c:447 msgid "Realm: " msgstr "Realm: " #: gauthinfo.c:469 gui_common.c:2127 msgid "User auth. scheme" msgstr "Benutzerauthentifizierung" #: gauthinfo.c:475 msgid "Base auth. scheme" msgstr "Basisauthentifizierung" #: gauthinfo.c:481 gui_common.c:2129 msgid "Digest auth. scheme" msgstr "Digestauthentifizierung" #: gauthinfo.c:488 gui_common.c:2131 msgid "NTLM auth. scheme" msgstr "NTLM-Authentifizierungsschema" #: gauthinfo.c:500 gui_addurl.c:156 gui_common.c:639 gui_common.c:782 #: gui_common.c:970 gui_common.c:1059 gui_common.c:1917 gui_common.c:2715 #: gui_common.c:2968 gui_limits.c:655 gui_tools.c:669 msgid "Append" msgstr "Hinzufügen" #: gauthinfo.c:508 gui_common.c:650 gui_common.c:789 gui_common.c:981 #: gui_common.c:1066 gui_common.c:1923 gui_common.c:2721 gui_common.c:2974 #: gui_limits.c:661 gui_tools.c:690 msgid "Modify" msgstr "Modifizieren" #: gauthinfo.c:516 gui_common.c:658 gui_common.c:989 gui_common.c:1929 #: gui_common.c:2727 gui_common.c:2980 gui_limits.c:667 gui_tools.c:703 msgid "Clear" msgstr "Löschen" #: gauthinfo.c:524 gui_common.c:666 gui_common.c:796 gui_common.c:997 #: gui_common.c:1073 gui_common.c:1935 gui_common.c:2733 gui_common.c:2986 #: gui_limits.c:673 gui_tools.c:716 msgid "Delete" msgstr "Entfernen" #: gauthinfo.c:537 gui_common.c:3068 gui_limits.c:741 gui_sched.c:122 #: gui_tools.c:262 msgid "OK" msgstr "OK" #: gauthinfo.c:548 gui_common.c:3076 gui_limits.c:749 msgid "Apply" msgstr "Übernehmen" # gauthinfo.c:566 #: gauthinfo.c:556 msgid "Load" msgstr "Laden" # gauthinfo.c:574 #: gauthinfo.c:564 msgid "Save" msgstr "Speichern" #: gauthinfo.c:575 gui_about.c:71 gui_addurl.c:164 gui_common.c:3090 #: gui_limits.c:763 gui_sched.c:130 gui_tools.c:270 gui_tree.c:601 #: gui_tree.c:724 stats.c:502 msgid "Cancel" msgstr "Abbruch" #: gkeys.c:69 gkeys.c:86 gkeys.c:98 #, c-format msgid "Unable to parse: %s\n" msgstr "Kann nicht parsen: %s\n" #: gkeys.c:120 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "Kann Datei ~/.pavuk_keys nicht erzeugen\n" #: gkeys.c:126 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# Diese Datei wurde von %s generiert.\n" "# Mit der nötigen Umsicht kann sie editiert werden!\n" #: gopher.c:66 msgid "********************* Gopher request **************\n" msgstr "********************* Gopher-Anfrage **************\n" #: gopher.c:104 #, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%hu/%s\n" "\n" "\n" "

      Directory of gopher://%s:%hu/%s



        " msgstr "" "\n" "\n" "\n" "Gopher-Verzeichnis://%s:%hu/%s\n" "\n" "\n" "

        Gopher-Verzeichnis://%s:%hu/%s



          " #: gopher.c:153 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" "Konnte Gopher-Verzeichniseintrag nicht parsen:\n" "%s\n" #: gui_about.c:38 msgid "Pavuk: About" msgstr "Pavuk: Über" #: gui_about.c:61 #, c-format msgid "" "Pavuk %s %s\n" "\n" "an automatic WEB file grabber\n" "\n" "By Stefan Ondrejicka\n" "\n" "URL: http://pavuk.sourceforge.net/\n" msgstr "" "Pavuk %s %s\n" " \n" "Ein automatischer Grabber für das Web.\n" "\n" "Von Stefan Ondrejicka\n" "\n" "URL: http://pavuk.sourceforge.net/\n" #: gui_api.c:160 #, c-format msgid "Processed: %5ld" msgstr "Verarbeitet: %5ld" #: gui_api.c:162 #, c-format msgid "Queued: %5ld" msgstr "In Warteschlange: %5ld" #: gui_api.c:164 #, c-format msgid "Failed: %4ld" msgstr "Fehlgeschlagen: %4ld" #: gui_api.c:166 #, c-format msgid "Rejected: %5ld" msgstr "Zurückgewiesen: %5ld" #: gui_api.c:360 msgid "Start" msgstr "Start" #: gui_api.c:474 msgid "Starting ..." msgstr "Starte ..." # net.c:127 #: gui_api.c:534 msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "Zu hoher Timeout-Wert für die GUI-Implementierung des Timeouts\n" #: gui_addurl.c:66 gui_main.c:240 #, c-format msgid "Dropped URL : %s\n" msgstr "Abgelegte URL: %s\n" #: gui_addurl.c:119 msgid "Pavuk: Append URL" msgstr "Pavuk: Hänge URL an" #: gui_addurl.c:131 msgid "New URL:" msgstr "Neue URL:" #: gui_common.c:589 gui_common.c:606 gui_main.c:735 msgid "URL" msgstr "URL" #: gui_common.c:608 msgid "Local filename" msgstr "Lokaler Dateiname" #: gui_common.c:625 msgid "Request URL: " msgstr "Fordere URL an: " #: gui_common.c:629 msgid "Local filename: " msgstr "Lokaler Dateiname: " #: gui_common.c:686 msgid "Extended informations for HTTP POST request" msgstr "Erweiterte Informationen für die HTTP-POST-Anforderung" #: gui_common.c:747 gui_common.c:1024 msgid "Query fields: " msgstr "Frage Felder ab: " #: gui_common.c:763 gui_common.c:1040 gui_common.c:2658 gui_limits.c:559 msgid "Type" msgstr "Typ" #: gui_common.c:765 gui_common.c:1042 msgid "Name" msgstr "Name" #: gui_common.c:767 gui_common.c:1044 msgid "Value" msgstr "Wert" #: gui_common.c:807 gui_common.c:1084 msgid "Type: " msgstr "Typ: " #: gui_common.c:839 gui_common.c:1116 msgid "Name: " msgstr "Name: " #: gui_common.c:841 gui_common.c:1118 msgid "Value: " msgstr "Wert: " #: gui_common.c:873 gui_common.c:1150 msgid "Pavuk: Choose form field file" msgstr "Pavuk: Wähle Formularfeld-Datei" #: gui_common.c:928 msgid "Form data" msgstr "Formulardaten" #: gui_common.c:956 msgid "Matching action URL: " msgstr "Passendes URL-Muster: " #: gui_common.c:1220 msgid "Grabber I" msgstr "Grabber I" #: gui_common.c:1228 msgid "Cache Directory: " msgstr "Cache-Verzeichnis: " #: gui_common.c:1231 msgid "Default URL prefix: " msgstr "Standard URL-Präfix: " #: gui_common.c:1234 msgid "Separate info directory: " msgstr "Separates Info-Verzeichnis: " #: gui_common.c:1237 msgid "Index file name: " msgstr "Index-Dateiname: " #: gui_common.c:1240 msgid "Store file name: " msgstr "Dateiname zum Speichern: " #: gui_common.c:1243 msgid "Identity string: " msgstr "Identifizierungs-String: " #: gui_common.c:1247 msgid "Netscape browser cache directory: " msgstr "Netscapes Cache-Verzeichnis: " #: gui_common.c:1250 msgid "Mozilla browser cache directory: " msgstr "Mozilla Cache-Verzeichnis: " #: gui_common.c:1255 msgid "Browser: " msgstr "Browser: " #: gui_common.c:1259 msgid "Reminder command: " msgstr "Erinnerungs-Kommando: " #: gui_common.c:1262 msgid "Post command: " msgstr "Senden-Kommando: " #: gui_common.c:1279 msgid "How many times retry on fail: " msgstr "Anzahl der Wiederholungen bei Fehlversuch: " #: gui_common.c:1282 msgid "How many moved links to follow: " msgstr "Anzahl der zu folgenden Verweise: " #: gui_common.c:1285 msgid "How many times to reget file: " msgstr "Anzahl der Wiederholungen bei Dateien: " #: gui_common.c:1288 msgid "Document age before syncing with server: " msgstr "Alter des Dokuments vor Synchronisation mit Server: " #: gui_common.c:1290 msgid " days " msgstr " Tage " #: gui_common.c:1296 msgid "Read buffer size: " msgstr "Lesepuffergröße: " #: gui_common.c:1300 msgid " kB " msgstr " kB " #: gui_common.c:1306 msgid "Hash tables size: " msgstr "Hashtabellengröße: " #: gui_common.c:1308 msgid " entries " msgstr " Einträge " #: gui_common.c:1323 msgid "Sleep time between transfers: " msgstr "Wartezeit zwischen Transfers: " #: gui_common.c:1325 msgid " sec." msgstr " Sek." #: gui_common.c:1330 msgid "randomize" msgstr "zufällig machen" #: gui_common.c:1336 msgid "Rollback amount on reget: " msgstr "Rücksetzungsbetrag beim Wiederholen: " #: gui_common.c:1338 msgid " bytes" msgstr " Bytes" #: gui_common.c:1344 msgid "Transfer quota: " msgstr "Übertragungs-Quota: " #: gui_common.c:1346 gui_common.c:1354 gui_common.c:1363 msgid " kB" msgstr " kB" #: gui_common.c:1352 msgid "File size quota: " msgstr "Dateigrößen-Quota: " #: gui_common.c:1361 msgid "Filesystem freespace quota: " msgstr "Quota des freien Speicherplatzes: " #: gui_common.c:1379 msgid "Number of downloading threads: " msgstr "Anzahl der Threads zum Herunterladen: " #: gui_common.c:1393 msgid "Grabber II" msgstr "Grabber II" # ginterface.c:3373 #: gui_common.c:1396 msgid "Misc settings" msgstr "Verschiedene Einstellungen" #: gui_common.c:1406 msgid "Always generate unique name for document" msgstr "Generiere einen einzigartigen Namen für jedes Dokument" #: gui_common.c:1412 msgid "Delete FTP document after succesful download" msgstr "Lösche FTP-Dokument nach dem erfolgreichen Holen" #: gui_common.c:1418 msgid "Preserve document modification time" msgstr "Bewahre Änderungsdatum des Dokuments" #: gui_common.c:1424 msgid "Preserve FTP document permissions" msgstr "Bewahre Rechte des FTP-Dokuments" #: gui_common.c:1430 msgid "Preserve FTP symbolic links paths" msgstr "Bewahre symbolische Linkpfade bei FTP" #: gui_common.c:1436 msgid "Retrieve FTP symbolic links like files" msgstr "Hole symbolische Links bei FTP als Dateien" #: gui_common.c:1443 msgid "Whole reget when partial not supported" msgstr "Komplett Neuladen, falls partiell nicht unterstützt wird" #: gui_common.c:1450 msgid "Use gzip encoding for transfer" msgstr "Benutze gzip-Kodierung für Übertragung" #: gui_common.c:1455 msgid "Remove improper documents" msgstr "Entferne ungültige Dokumente" #: gui_common.c:1461 msgid "Check transferred size of document" msgstr "Überprüfe übertragene Größe des Dokuments" #: gui_common.c:1467 msgid "Store directory URLs as index files" msgstr "Speichere Verzeichnis-URLs als Index-Dateien" #: gui_common.c:1473 msgid "Store info files with each document" msgstr "Speichere Info-Dateien mit jedem Dokument" # ginterface.c:3433 xinterface.c:2642 #: gui_common.c:1479 msgid "Send self URL as Referer for starting URLs" msgstr "Sende eigene URL als Referer für Anfangs-URLs" #: gui_common.c:1485 msgid "Send Referer with HTTP requests" msgstr "Sende Referer-Feld mit HTTP-Anforderung" #: gui_common.c:1491 msgid "Fetch objects mentioned in style sheets" msgstr "Hole in Style-Sheets verlinkte Objekte" # ginterface.c:3481 xinterface.c:2669 #: gui_common.c:1497 msgid "Send If-Range header field when regeting" msgstr "Sende If-Bereichs-Header beim erneuten Holen" #: gui_common.c:1503 msgid "Show time of start and end of downloading" msgstr "Zeige Zeit von Beginn und Ende des Ladens" #: gui_common.c:1511 msgid "URL scheduling strategy: " msgstr "URL-Terminplanungsstrategie: " #: gui_common.c:1555 gui_limits.c:430 msgid "HTML" msgstr "HTML" # ginterface.c:3332 #: gui_common.c:1558 msgid "HTML document URL rewriting rules" msgstr "URL-Neuschreiberegeln im HTML-Dokument" #: gui_common.c:1568 msgid "Rewrite URLs inside HTML doc." msgstr "Schreibe Links innerhalb von HTML-Dokumenten neu" #: gui_common.c:1576 msgid "Rewrite URLs to local when stored locally" msgstr "Ändere URLs zu lokalen URLs, wenn sie lokal gespeichert werden" #: gui_common.c:1582 msgid "Rewrite all suitable URLs to local" msgstr "Ändere alle passende Links zu lokalen Links" #: gui_common.c:1588 msgid "Rewrite all URLs to local immediately" msgstr "Ändere alle Links unverzüglich zu lokalen Links" #: gui_common.c:1594 msgid "Rewrite all URLs to remote immediately" msgstr "Ändere alle URLs unverzüglich zu entfernten URLs" #: gui_common.c:1600 msgid "Rewrite only one currently download URL" msgstr "Nur eine aktuell zu ladende URL neuschreiben" #: gui_common.c:1605 msgid "Tuning of HTML rewriting engine" msgstr "Anpassung der HTML-Neuschreiberegeln" #: gui_common.c:1615 msgid "Don't touch URL wildcard pattern: " msgstr "URL-Wildcard-Muster nicht ändern: " #: gui_common.c:1619 msgid "Don't touch URL RE pattern: " msgstr "Reg. Ausdruck der URL nicht ändern: " #: gui_common.c:1622 msgid "Don't touch HTML tag RE pattern: " msgstr "Reg. Ausdruck der HTML-Tags nicht ändern: " #: gui_common.c:1697 msgid "Net" msgstr "Netz" #: gui_common.c:1704 msgid "Allowed protocols" msgstr "Erlaubte Protokolle" #: gui_common.c:1713 msgid "HTTP" msgstr "HTTP" #: gui_common.c:1718 msgid "FTP" msgstr "FTP" #: gui_common.c:1723 msgid "Gopher" msgstr "Gopher" #: gui_common.c:1729 msgid "HTTPS" msgstr "HTTPS" #: gui_common.c:1734 msgid "FTPS" msgstr "FTPS" #: gui_common.c:1740 msgid "FTP data connection type " msgstr "FTP-Datenverbindung" #: gui_common.c:1749 msgid "Active" msgstr "Aktiv" #: gui_common.c:1755 msgid "Passive" msgstr "Passiv" #: gui_common.c:1761 msgid "Communication timeout: " msgstr "Kommunikations-Timeout: " #: gui_common.c:1774 msgid " min." msgstr " min" #: gui_common.c:1780 msgid "Maximal transfer rate: " msgstr "Maximale Übertragungsrate: " #: gui_common.c:1793 gui_common.c:1812 msgid " kB/s" msgstr " kB/s" #: gui_common.c:1799 msgid "Minimal transfer rate: " msgstr "Minimale Übertragungsrate: " #: gui_common.c:1818 msgid "Local interface address: " msgstr "Lokale Interface-Adresse: " #: gui_common.c:1829 msgid "Additional HTTP headers: " msgstr "Zusätzliche HTTP-Header: " #: gui_common.c:1840 msgid "Additional FTP list options: " msgstr "Zusätzliche FTP-Listenoptionen: " #: gui_common.c:1854 msgid "Use wide listing of FTP directories" msgstr "Verwende breite Liste für FTP-Verzeichnis" #: gui_common.c:1861 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "Korrigiere Erkennung fehlender Verzeichnisse auf WuFTPD-Servern" #: gui_common.c:1868 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "Verwende HTTP/1.1-Protokoll für HTTP-Verbindungen" #: gui_common.c:1874 msgid "FTP login handshake rules" msgstr "FTP-Anmelderegeln" #: gui_common.c:1892 msgid "Login handshake" msgstr "Anmeldevorgang" #: gui_common.c:1910 msgid "Handshake: " msgstr "Verbindung: " #: gui_common.c:1951 msgid "Proxy" msgstr "Proxy" #: gui_common.c:1957 msgid "Gopher proxy" msgstr "Gopher-Proxy" #: gui_common.c:1970 gui_common.c:1993 gui_common.c:2022 msgid "Port: " msgstr "Port: " #: gui_common.c:1974 msgid "Gopher via HTTP proxy" msgstr "Gopher über HTTP-Proxy" #: gui_common.c:1979 msgid "FTP proxy" msgstr "FTP-Proxy" #: gui_common.c:1996 msgid "FTP via HTTP proxy" msgstr "FTP über HTTP-Proxy" #: gui_common.c:2002 msgid "FTP via HTTP tunneling proxy" msgstr "FTP über HTTP-Tunnel-Proxy" #: gui_common.c:2009 msgid "SSL proxy" msgstr "SSL-Proxy" #: gui_common.c:2026 msgid "HTTP proxy" msgstr "HTTP-Proxy" #: gui_common.c:2033 msgid "Proxy: " msgstr "Proxy: " #: gui_common.c:2038 msgid "Allow caching of documents" msgstr "Erlaube Caching von Dokumenten" #: gui_common.c:2087 msgid "Languages" msgstr "Sprachen" #: gui_common.c:2090 msgid "Preffered languages" msgstr "Bevorzugte Sprachen" #: gui_common.c:2095 msgid "Language code: " msgstr "Sprachcode: " #: gui_common.c:2106 msgid "Preffered character sets" msgstr "Bevorzugte Zeichensätze" #: gui_common.c:2111 msgid "Character set code: " msgstr "Zeichensatzcode: " #: gui_common.c:2128 msgid "Basic auth. scheme" msgstr "Grundlegendes Authentifizierungschema" #: gui_common.c:2138 msgid "Auth" msgstr "Authentifizierung" #: gui_common.c:2145 msgid "User authentification" msgstr "Benutzerauthentifizierung" #: gui_common.c:2154 gui_common.c:2204 msgid "Scheme: " msgstr "Schema: " #: gui_common.c:2180 gui_common.c:2232 gui_common.c:2257 msgid "User name: " msgstr "Benutzer: " #: gui_common.c:2186 gui_common.c:2238 msgid "NTLM domain: " msgstr "NTLM-Domain: " #: gui_common.c:2190 gui_common.c:2242 msgid "Reuse HTTP Digest access nonce" msgstr "Verwende HTTP-Digest-Zugriffs-Nonce wieder" #: gui_common.c:2195 msgid "HTTP proxy user authentification" msgstr "HTTP-Proxy-Benutzerkennung" #: gui_common.c:2247 msgid "FTP proxy user authentification" msgstr "FTP-Proxy-Benutzerauthentifizierung" #: gui_common.c:2262 msgid "Misc" msgstr "Verschiedenes" #: gui_common.c:2276 msgid "E-mail address: " msgstr "E-Mail-Adresse: " #: gui_common.c:2280 msgid "Send From: header with HTTP request" msgstr "Sende From:-Header mit HTTP-Anforderung" #: gui_common.c:2293 msgid "SSL" msgstr "SSL" #: gui_common.c:2296 msgid "SSL client certificate" msgstr "SSL-Client-Zertifikat" #: gui_common.c:2306 gui_common.c:2320 msgid "Certificate password: " msgstr "Zertifikats-Passwort: " #: gui_common.c:2309 msgid "Certificate PEM file: " msgstr "Zertifikats-PEM-Datei: " #: gui_common.c:2312 msgid "Certificate key file: " msgstr "Zertifikats-Schlüssel-Datei: " #: gui_common.c:2317 msgid "NSS certificate config directory: " msgstr "NSS-Zetifikatseinstellungsverzeichnis: " #: gui_common.c:2323 msgid "Accept unknown certificates" msgstr "Akzeptiere unbekannte Zertifikate" #: gui_common.c:2329 msgid "Domestic SSL ciphers policy" msgstr "SSL-Chiffren Politik" #: gui_common.c:2337 msgid "List of preffered ciphers: " msgstr "Liste der bevorzugten Verschlüsselungen: " #: gui_common.c:2343 msgid "SSL protocol version" msgstr "SSL-Protokollversion" #: gui_common.c:2351 msgid "SSLv23" msgstr "SSLv23" #: gui_common.c:2357 msgid "SSLv2" msgstr "SSLv2" #: gui_common.c:2363 msgid "SSLv3" msgstr "SSLv3" #: gui_common.c:2370 msgid "TLSv1" msgstr "TLSv1" # ginterface.c:3373 #: gui_common.c:2377 msgid "Miscelanous SSL settings" msgstr "Verschiedene SSl-Einstellungen" #: gui_common.c:2388 msgid "EGD daemon socket path: " msgstr "EGD-Dämon Socket-Pfad: " #: gui_common.c:2394 msgid "Unique ID for all SSL sessions" msgstr "Einzigartige ID für alle SSL-Sitzungen" #: gui_common.c:2408 gui_main.c:1796 msgid "Log" msgstr "Log" # ginterface.c:4129 xinterface.c:3220 #: gui_common.c:2417 msgid "Try to find unique name, when original log file locked" msgstr "" "Versuche eindeutigen Namen zu finden, wenn die originale Log-Datei gelockt " "ist" #: gui_common.c:2423 msgid "Log file: " msgstr "Log-Datei: " #: gui_common.c:2426 msgid "Shortlog file: " msgstr "Kurzlog-Datei: " #: gui_common.c:2429 msgid "Log window length: " msgstr "Länge des Log-Fensters: " #: gui_common.c:2441 msgid "Cookies" msgstr "Cookies" #: gui_common.c:2444 msgid "Disabled cookie domains" msgstr "Nichterlaubte Cookie-Domains: " #: gui_common.c:2450 gui_limits.c:253 msgid "Domain: " msgstr "Domain: " # ginterface.c:3373 #: gui_common.c:2454 msgid "Cookies settings" msgstr "Cookie-Einstellungen" #: gui_common.c:2463 msgid "Update cookies" msgstr "Aktualisiere Cookies" #: gui_common.c:2469 msgid "Send cookies" msgstr "Sende Cookies" #: gui_common.c:2474 msgid "Accept cookies" msgstr "Akzeptiere Cookies" #: gui_common.c:2479 msgid "Check cookies domain" msgstr "Überprüfe Domain der Cookies: " #: gui_common.c:2488 msgid "Cookies maximal number: " msgstr "Maximalzahl der Cookies: " #: gui_common.c:2504 msgid "Cookie file: " msgstr "Cookie-Datei: " #: gui_common.c:2583 msgid "Filename" msgstr "Dateiname" #: gui_common.c:2586 msgid "Local filename conversion rules" msgstr "Konvertierungregeln für lokale Dateinamen" #: gui_common.c:2594 msgid "Replace String1 with String2 in filename" msgstr "Ersetze String 1 mit String 2" #: gui_common.c:2603 msgid "String1: " msgstr "String 1: " #: gui_common.c:2606 msgid "String2: " msgstr "String 2: " #: gui_common.c:2608 msgid "Delete characters from filename" msgstr "Lösche Zeichen aus Dateinamen" #: gui_common.c:2617 msgid "Character set: " msgstr "Zeichen: " #: gui_common.c:2621 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "Ersetze Zeichen aus Liste 1 mit Zeichen aus Liste 2" #: gui_common.c:2630 msgid "Character set1: " msgstr "Liste 1: " #: gui_common.c:2633 msgid "Character set2: " msgstr "Liste 2: " #: gui_common.c:2640 msgid "Base level of tree: " msgstr "Unterste Ebene des Baumes: " #: gui_common.c:2642 msgid "Local filename mapping rules" msgstr "Regeln für Zuordnung von lokalen Dateinamen" #: gui_common.c:2660 msgid "Match pattern" msgstr "Passendes Muster" #: gui_common.c:2662 msgid "Rule" msgstr "Regel" #: gui_common.c:2682 msgid "wildcard pattern" msgstr "Wildcard-Muster" #: gui_common.c:2689 msgid "RE pattern" msgstr "Muster aus regulären Ausdrücken" #: gui_common.c:2701 msgid "Matching pattern: " msgstr "Passendes Muster: " #: gui_common.c:2708 msgid "Construction rule: " msgstr "Erzeugungsregel: " # ginterface.c:4487 #: gui_common.c:2747 msgid "Advertisement" msgstr "Werbung" # ginterface.c:4494 #: gui_common.c:2756 msgid "Enable removing of advertisement banners" msgstr "Schalte Entfernen von Werbebannern ein" # ginterface.c:4499 #: gui_common.c:2761 msgid "RE for advertisement URLs: " msgstr "Reg. Ausdruck für Werbe-URLs: " #: gui_common.c:2871 msgid "Javascript" msgstr "Javascript" #: gui_common.c:2879 msgid "Processing of javascript" msgstr "Verarbeite Javascript" #: gui_common.c:2883 msgid "Javascript patterns" msgstr "Javascript-Muster" #: gui_common.c:2888 msgid "RE for Javascript patterns: " msgstr "Reg. Ausdruck für Javascript-Muster: " #: gui_common.c:2895 msgid "Javascript patterns with transform rules" msgstr "Javascript-Muster mit Umwandlungsregeln" #: gui_common.c:2911 msgid "Pattern" msgstr "Muster" #: gui_common.c:2913 msgid "Transform rule" msgstr "Regel umwandeln" #: gui_common.c:2915 msgid "HTML tag" msgstr "HTML-Tag" #: gui_common.c:2917 msgid "HTML tag attribute" msgstr "HTML-Tag-Attribut" #: gui_common.c:2919 msgid "Rewrite" msgstr "Neuschreiben" #: gui_common.c:2938 msgid "Pattern: " msgstr "Muster: " #: gui_common.c:2941 msgid "Tranform rule: " msgstr "Regel umwandeln: " #: gui_common.c:2950 msgid "HTML tag: " msgstr "HTML-Tag: " #: gui_common.c:2954 msgid "HTML tag attribute: " msgstr "HTML-Tag-Attribut: " #: gui_common.c:2958 msgid "Rewrite URL part in HTML document" msgstr "Schreibe Links innerhalb von HTML-Dokumenten neu" #: gui_common.c:3016 msgid "Pavuk: Common config" msgstr "Pavuk: Allgemeine Einstellungen" #: gui_common.c:3083 msgid "Limitations ..." msgstr "Beschränkungen..." #: gui_jscons.c:149 msgid "Pavuk: JavaScript console" msgstr "Pavuk: JavaScript-Konsole" #: gui_jscons.c:165 msgid "Reload script file" msgstr "Lade Skript-Datei neu" #: gui_jscons.c:169 msgid "Save script to file" msgstr "Speichere Skript in Datei" #: gui_jscons.c:176 msgid "Load script to JavaScript runtime" msgstr "Lade Skript zur JavaScript-Laufzeit" #: gui_jscons.c:180 msgid "Restart JavaScript runtime" msgstr "JavaScript zur Laufzeut neustarten" #: gui_jscons.c:203 msgid "Prompt: " msgstr "Eingabe: " #: gui_jscons.c:216 msgid "JavaScript source file: " msgstr "JavaScript-Quelltextdatei: " #: gui_limits.c:44 msgid "Tree" msgstr "Baum" #: gui_limits.c:56 msgid "Download cgi-generated pages" msgstr "Hole CGI-erzeugte Seiten" #: gui_limits.c:62 msgid "Recurse through FTP directory" msgstr "Rekursives FTP-Verzeichnis" #: gui_limits.c:68 msgid "Allow \"robots.txt\"" msgstr "Erlaube \"robots.txt\"" #: gui_limits.c:75 msgid "Process HTML files downloaded over FTP" msgstr "Verarbeite HTML-Dateien, die über FTP geholt wurden" #: gui_limits.c:81 msgid "Don't leave starting site" msgstr "Verlasse Startseite nicht" #: gui_limits.c:88 msgid "Don't leave starting directory" msgstr "Verlasse Startverzeichnis nicht" #: gui_limits.c:95 msgid "Don't leave site enter directory" msgstr "Verlasse Eintritts-Verzeichnis nicht" #: gui_limits.c:101 msgid "Download just single page" msgstr "Hole nur eine einzelne Seite" #: gui_limits.c:108 msgid "Apply limiting options on inline objects" msgstr "Einschränkende Optionen auf Inlineobjekte anwenden" #: gui_limits.c:123 msgid "Max. count of documents: " msgstr "Maximale Anzahl der Dokumente: " #: gui_limits.c:126 msgid "Max. depth of tree: " msgstr "Maximale Tiefe des URL-Baumes: " #: gui_limits.c:129 msgid "Max. levels to leave from starting site: " msgstr "Maximale Ebenen von der Startseite weg: " #: gui_limits.c:132 msgid "Max. document size: " msgstr "Maximale Dokumentengröße: " #: gui_limits.c:135 msgid "Min. document size: " msgstr "Minimale Dokumenten-Größe: " #: gui_limits.c:138 msgid "Max. site levels to leave from starting site: " msgstr "Maximales Fortbewegen von der Startseite weg (Ebenen): " #: gui_limits.c:149 msgid "Working subdirectory :" msgstr "Arbeits-Unterverzeichnis:" #: gui_limits.c:152 msgid "User condition script: " msgstr "Benutzer-Bedingungs-Skript: " #: gui_limits.c:155 msgid "Follow command: " msgstr "Folge-Kommando: " #: gui_limits.c:165 msgid "Patterns" msgstr "Muster" #: gui_limits.c:168 gui_limits.c:592 msgid "Wildcard patterns" msgstr "Wildcard-Muster" #: gui_limits.c:177 gui_limits.c:200 msgid "Documents matching pattern: " msgstr "Dem Muster entsprechende Dokumente: " #: gui_limits.c:180 gui_limits.c:187 gui_limits.c:203 gui_limits.c:210 #: gui_limits.c:272 msgid "skip: " msgstr "Überspringe: " #: gui_limits.c:181 gui_limits.c:204 msgid "Pavuk: edit Documents matching skip pattern" msgstr "Pavuk: ändern des Musters zum Dokumente überspringen" #: gui_limits.c:184 gui_limits.c:207 msgid "URL matching pattern: " msgstr "Passendes Muster für URL: " #: gui_limits.c:188 gui_limits.c:211 msgid "Pavuk: edit URL matching skip pattern" msgstr "Pavuk: ändern des Musters zum URL überspringen" #: gui_limits.c:191 gui_limits.c:598 msgid "RE patterns" msgstr "Muster aus regulären Ausdrücken" #: gui_limits.c:221 msgid "Hosts" msgstr "Hosts" #: gui_limits.c:230 msgid "Allow / Disallow sites" msgstr "Erlaube/Verbiete Sites" #: gui_limits.c:236 msgid "Site: " msgstr "Site: " #: gui_limits.c:247 msgid "Allow / Disallow domains" msgstr "Erlaube/Verbiete Domains" #: gui_limits.c:259 msgid "IP address RE patterns" msgstr "IP-Adresse, reguläre Ausdrücke" #: gui_limits.c:269 msgid "Server IP address matching pattern: " msgstr "Server-IP-Adresse, entsprechendes Muster: " #: gui_limits.c:273 msgid "Pavuk: edit Server IP address matching skip pattern" msgstr "Pavuk: ändern des Musters zum überspringen von Server-IP-Adressen" #: gui_limits.c:277 msgid "Server ports" msgstr "Server-Ports" #: gui_limits.c:287 msgid "Allow/deny" msgstr "Erlauben/Verbieten" #: gui_limits.c:292 msgid "Ports: " msgstr "Port: " #: gui_limits.c:302 msgid "Documents" msgstr "Dokumente" #: gui_limits.c:311 msgid "Allow / Disallow suffix" msgstr "Erlaube/Verbiete Suffix" #: gui_limits.c:317 msgid "Suffix: " msgstr "Suffix: " #: gui_limits.c:328 msgid "Allow / Disallow prefix" msgstr "Erlaube/Verbiete Präfix" #: gui_limits.c:334 msgid "Prefix: " msgstr "Präfix: " #: gui_limits.c:347 gui_limits.c:359 msgid "MIME types" msgstr "MIME-Typen" #: gui_limits.c:355 msgid "Allow / Disallow MIME type" msgstr "Erlaube/Verbiete MIME-Typ" #: gui_limits.c:364 msgid "MIME type: " msgstr "MIME-Typ: " #: gui_limits.c:375 msgid "Time" msgstr "Zeit" #: gui_limits.c:381 msgid "Lower document time limit" msgstr "Untere Dateidatumsgrenze" #: gui_limits.c:391 msgid "Check if doc. time newer than this" msgstr "Prüfe, ob Dateidatum jünger" #: gui_limits.c:395 msgid "Upper document time limit" msgstr "Obere Dateidatumsgrenze" #: gui_limits.c:405 msgid "Check if doc. time older than this" msgstr "Prüfe, ob Dateidatum älter" #: gui_limits.c:414 msgid "Maximal allowed time of downloading: " msgstr "Maximal erlaubte Zeit für das Laden: " #: gui_limits.c:416 msgid " min" msgstr " min" #: gui_limits.c:428 msgid "Select allowed HTML tags and attributes" msgstr "Erlaubte HTML-Tags und -Attribute" #: gui_limits.c:445 #, c-format msgid "%s of %s" msgstr "%s von %s" #: gui_limits.c:547 msgid "Tag patterns" msgstr "Muster aus regulären Ausdrücken" #: gui_limits.c:561 gui_limits.c:639 msgid "Tag pattern" msgstr "Tag-Muster" #: gui_limits.c:563 gui_limits.c:643 msgid "Attribute pattern" msgstr "Attribut-Muster" #: gui_limits.c:565 gui_limits.c:647 msgid "URL pattern" msgstr "URL-Muster" #: gui_limits.c:580 msgid "Pattern type: " msgstr "Art der Muster: " #: gui_limits.c:703 msgid "Pavuk: Limits config" msgstr "Pavuk: Beschränkende Einstellungen" #: gui_limits.c:756 msgid "Common ..." msgstr "Allgemeines ..." #: gui_main.c:183 msgid "Unable to change language during processing time!\n" msgstr "Sprache kann zur Laufzeit nicht gewechselt werden!\n" #: gui_main.c:382 msgid "Unknown window to popup" msgstr "Unbekanntes Fenster soll aufgemacht werden" #: gui_main.c:439 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "URL aus der Zwischenablage geholt: %s\n" #: gui_main.c:481 #, c-format msgid "Fetched URL from browser : %s\n" msgstr "URL vom Browser geholt: %s\n" #: gui_main.c:717 msgid "Both" msgstr "Icons und Text" #: gui_main.c:718 msgid "Icons only" msgstr "Nur Icons" #: gui_main.c:720 msgid "Text only" msgstr "Nur Text" #: gui_main.c:734 msgid "Nr." msgstr "Nr." #: gui_main.c:737 msgid "Status" msgstr "Status" #: gui_main.c:739 msgid "Size" msgstr "Größe" #: gui_main.c:741 msgid "Transfer rate" msgstr "Übertragungsrate" #: gui_main.c:743 msgid "Elapsed time" msgstr "Verstrichene Zeit" #: gui_main.c:745 msgid "Remaining time" msgstr "Verbleibende Zeit" #: gui_main.c:874 msgid "Open _URL ..." msgstr "Öffne _URL..." #: gui_main.c:885 msgid "Append URL ..." msgstr "Hänge URL an..." #: gui_main.c:893 msgid "Fetch URL from Clipboard" msgstr "Hole URL aus der Zwischenablage" #: gui_main.c:909 msgid "Fetch URL from browser" msgstr "Hole URL vom Browser" #: gui_main.c:920 msgid "Load scenario ..." msgstr "Lade Szenario..." #: gui_main.c:928 msgid "Add scenario ..." msgstr "Füge Szenario hinzu ..." #: gui_main.c:936 msgid "Save scenario ..." msgstr "Speichere Szenario..." #: gui_main.c:944 msgid "Save settings to ~/.pavukrc" msgstr "Speichere Einstellungen in ~/.pavukrc" #: gui_main.c:957 msgid "Schedule ..." msgstr "Termine..." #: gui_main.c:965 msgid "Auth. info editor ..." msgstr "Authentifizierungs-Info-Editor..." #: gui_main.c:978 msgid "E_xit" msgstr "_Beenden" #: gui_main.c:986 msgid "_File" msgstr "_Datei" #: gui_main.c:1000 msgid "Document _Tree ..." msgstr "Dokumenten-_Baum..." #: gui_main.c:1009 msgid "Status page ..." msgstr "Statusseite..." #: gui_main.c:1018 msgid "HTML forms editor ..." msgstr "HTML-Formulareditor ..." #: gui_main.c:1028 msgid "Javascript console ..." msgstr "Javascript-Konsole ..." #: gui_main.c:1042 msgid "Clear log window" msgstr "Lösche Log-Fenster" #: gui_main.c:1051 msgid "_View" msgstr "_Zeige" #: gui_main.c:1067 msgid "normal recurse" msgstr "Normal rekursiv" #: gui_main.c:1077 msgid "synchronize" msgstr "Synchronisiere" #: gui_main.c:1087 msgid "mirror" msgstr "Spiegeln" #: gui_main.c:1096 msgid "single page" msgstr "Einzelne Seite" #: gui_main.c:1106 msgid "update local links" msgstr "Aktualisiere lokale Verweise" #: gui_main.c:1116 msgid "resume files" msgstr "Abgebrochene Dateien fortsetzen" #: gui_main.c:1126 msgid "unlimited reget" msgstr "Unbegrenztes Wiederholen" #: gui_main.c:1138 msgid "transfer but don't store" msgstr "Übertrage, aber speichere nicht" #: gui_main.c:1147 msgid "reminder" msgstr "Erinnerung" #: gui_main.c:1156 msgid "list ftp directory" msgstr "zeige FTP-Verzeichnis" #: gui_main.c:1165 msgid "_Mode" msgstr "_Modus" #: gui_main.c:1182 msgid "C_ommon ..." msgstr "_Allgemeines..." #: gui_main.c:1191 msgid "_Limitations ..." msgstr "_Beschränkungen..." #: gui_main.c:1200 msgid "Reset configuration" msgstr "Setze Konfiguration zurück" #: gui_main.c:1214 msgid "Toolbar" msgstr "Werkzeugleiste" #: gui_main.c:1222 msgid "Toggle toolbar" msgstr "Werkzeugleiste ein/aus" # config.c:2323 #: gui_main.c:1278 msgid "Progressbar" msgstr "Fortschrittsanzeige" #: gui_main.c:1311 msgid "Language" msgstr "Sprache" #: gui_main.c:1319 nls.c:32 msgid "English" msgstr "Englisch" #: gui_main.c:1358 msgid "Debug level" msgstr "Debug-Level" #: gui_main.c:1381 msgid "All" msgstr "Alles" #: gui_main.c:1387 msgid "None" msgstr "Nichts" #: gui_main.c:1394 msgid "Debug" msgstr "Debug" #: gui_main.c:1409 msgid "Allow tooltips" msgstr "Erlaube Tooltips" #: gui_main.c:1420 msgid "Log window autoscroll" msgstr "Rolle Log-Fenster automatisch" #: gui_main.c:1429 msgid "Use preferences" msgstr "Verwende Einstellungen" #: gui_main.c:1439 msgid "Quiet" msgstr "Keine Meldungen" #: gui_main.c:1451 msgid "Immediate messages" msgstr "Unverzügliche Meldungen" #: gui_main.c:1463 msgid "_Config" msgstr "_Einstellungen" #: gui_main.c:1477 msgid "_Restart" msgstr "_Neustart" #: gui_main.c:1487 msgid "Co_ntinue" msgstr "_Fortsetzen" #: gui_main.c:1497 msgid "Sto_p" msgstr "_Stop" #: gui_main.c:1506 msgid "_Break" msgstr "_Unterbreche" #: gui_main.c:1515 msgid "_Action" msgstr "_Aktion" #: gui_main.c:1533 msgid "About ..." msgstr "Über..." #: gui_main.c:1541 msgid "_Help" msgstr "_Hilfe" #: gui_main.c:1577 msgid "Config" msgstr "Einstellungen" #: gui_main.c:1578 msgid "Popup config window" msgstr "Zeige Einstellungs-Fenster" #: gui_main.c:1581 msgid "Limits" msgstr "Limits" #: gui_main.c:1582 msgid "Popup limits window" msgstr "Bringe Limit-Fenster vor" #: gui_main.c:1587 msgid "Go bg" msgstr "Hintergrund" #: gui_main.c:1588 msgid "Destroy window as soon as posible and continue on terminal" msgstr "Schließe Fenster so schnell wie möglich und fahre im Terminal fort" #: gui_main.c:1591 gui_main.c:1666 msgid "Restart" msgstr "Neustart" #: gui_main.c:1592 msgid "Start working on currently set starting URLs" msgstr "Beginne mit aktueller Start-URL" #: gui_main.c:1595 gui_main.c:1670 msgid "Continue" msgstr "Fortsetzen" #: gui_main.c:1596 msgid "Continue after stop or break" msgstr "Fortsetzung nach Stop oder Unterbrechung" #: gui_main.c:1601 gui_main.c:1674 msgid "Stop" msgstr "Stop" #: gui_main.c:1602 msgid "Finish this transfer and stop" msgstr "Beende diese Übertragung und stoppe" #: gui_main.c:1605 gui_main.c:1678 msgid "Break" msgstr "Unterbreche" #: gui_main.c:1606 msgid "Break transfer and stop" msgstr "Unterbreche Übertragung und stoppe" #: gui_main.c:1611 msgid "Exit" msgstr "Beenden" #: gui_main.c:1612 msgid "Immediately quit the program" msgstr "Programm sofort verlassen" #: gui_main.c:1682 msgid "Show whole main window" msgstr "Zeige gesamtes Hauptfenster" #: gui_main.c:1686 msgid "Quit" msgstr "Beenden" #: gui_main.c:1762 msgid "Pavuk: save log" msgstr "Pavuk: speichere Log" #: gui_main.c:1819 msgid "Select all" msgstr "Alles wählen" #: gui_main.c:1827 msgid "Clear selection" msgstr "Auswahl löschen" #: gui_main.c:1835 msgid "Copy selection" msgstr "Auswahl kopieren" # gauthinfo.c:574 #: gui_main.c:1846 msgid "Save log ..." msgstr "Log speichern..." #: gui_main.c:1853 msgid "Clear log" msgstr "Lösche Log-Fenster" #: gui_main.c:1925 gui_main.c:2037 msgid "Processed: " msgstr "Verarbeitet: " #: gui_main.c:1934 gui_main.c:2046 msgid "Failed: " msgstr "Fehlgeschlagen: " #: gui_main.c:1943 gui_main.c:2055 msgid "Queued: " msgstr "In Warteschlange: " #: gui_main.c:1952 gui_main.c:2064 msgid "Rejected: " msgstr "Zurückgewiesen: " #: gui_main.c:1996 msgid "S: " msgstr "S: " #: gui_main.c:2005 msgid "R: " msgstr "R: " #: gui_main.c:2014 msgid "ET: " msgstr "ET: " #: gui_main.c:2023 msgid "RT: " msgstr "RT: " #: gui_scenario.c:47 msgid "Pavuk: Scenario saver" msgstr "Pavuk: Speichere Szenario" #: gui_scenario.c:145 msgid "Pavuk: Scenario loader" msgstr "Pavuk: Lade Szenario" #: gui_scenario.c:241 msgid "Pavuk: Scenario add" msgstr "Pavuk: Füge Szenario hinzu" #: gui_sched.c:44 pavuk.c:538 msgid "Error scheduling\n" msgstr "Fehler im Terminplaner\n" #: gui_sched.c:68 msgid "Pavuk: Scheduler" msgstr "Pavuk: Terminplaner" #: gui_sched.c:88 msgid "Scheduling command: " msgstr "Erinnerungs-Kommando: " #: gui_sched.c:98 msgid "Reschedule after " msgstr "Neuer Termin nach " #: gui_sched.c:108 msgid " hours" msgstr " Stunden" #: gui_tools.c:49 msgid "Time: " msgstr "Zeit: " #: gui_tools.c:58 msgid " : " msgstr " : " #: gui_tools.c:235 #, c-format msgid "Pavuk: edit %s" msgstr "Pavuk: ändere %s" #: gui_tools.c:236 msgid "entry" msgstr "Eintrag" #: gui_tools.c:371 msgid "Edit ..." msgstr "Ändere..." #: gui_tools.c:423 #, c-format msgid "Pavuk: select %s" msgstr "Pavuk: wähle %s aus" #: gui_tools.c:424 msgid "file" msgstr "Datei" #: gui_tools.c:513 msgid "Browse ..." msgstr "Suchen..." #: gui_tree.c:95 #, c-format msgid "URL: %s\n" msgstr "URL: %s\n" #: gui_tree.c:108 gui_tree.c:114 gui_tree.c:152 msgid "Request type: " msgstr "Anforderungstyp: " #: gui_tree.c:128 msgid "Query values:\n" msgstr "Frage Werte an:\n" #: gui_tree.c:158 msgid "Status: " msgstr "Status" #: gui_tree.c:164 msgid "not processed yet\n" msgstr "noch nicht verarbeitet\n" #: gui_tree.c:170 msgid "loaded from NS cache\n" msgstr "aus Netscape-Cache geladen\n" #: gui_tree.c:176 msgid "loaded from local URL tree\n" msgstr "aus lokalem URL-Baum geladen\n" #: gui_tree.c:182 msgid "moved to another URL\n" msgstr "zu anderer URL verschoben: %s\n" #: gui_tree.c:188 msgid "URL not found on remote server\n" msgstr "URL nicht auf entferntem Server gefunden\n" #: gui_tree.c:194 msgid "truncated\n" msgstr "abgeschnitten\n" #: gui_tree.c:200 msgid "downloaded OK\n" msgstr "holen OK\n" #: gui_tree.c:206 msgid "rejected by rules\n" msgstr "verboten durch Regeln\n" #: gui_tree.c:212 msgid "disabled by user\n" msgstr "verboten durch Benutzer\n" #: gui_tree.c:218 msgid "probably recoverable error\n" msgstr "wahrscheinlich behebbarer Fehler\n" #: gui_tree.c:224 msgid "unrecoverable error\n" msgstr "nichtbehebbarer Fehler\n" #: gui_tree.c:230 msgid "unknown\n" msgstr "unbekannt\n" #: gui_tree.c:240 #, c-format msgid "Moved to URL: %s\n" msgstr "Verschoben nach URL: %s\n" #: gui_tree.c:250 #, c-format msgid "Type: %s\n" msgstr "Typ: %s\n" #: gui_tree.c:252 #, c-format msgid "Type: unknown\n" msgstr "Typ: unbekannt\n" #: gui_tree.c:258 #, c-format msgid "Size: %d\n" msgstr "Größe: %d\n" #: gui_tree.c:267 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "Änderungszeit: %a, %d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:278 #, c-format msgid "Local filename: %s\n" msgstr "Lokaler Dateiname: %s\n" #: gui_tree.c:289 msgid "Parent URLs:\n" msgstr "Elter-URLs:\n" #: gui_tree.c:543 msgid "Pavuk: Store tree" msgstr "Pavuk: Speichere Baum" #: gui_tree.c:600 gui_tree.c:631 msgid "Pavuk: URL tree preview" msgstr "Pavuk: URL-Baum-Voransicht" #: gui_tree.c:602 gui_tree.c:717 msgid "Store tree ..." msgstr "Speichere Baum..." #: gui_tree.c:604 gui_tree.c:651 msgid "Automaticaly watch last processed URLs" msgstr "Überwache zuletzt verarbeitete URLs automatisch" #: gui_tree.c:606 gui_tree.c:743 msgid "Properties" msgstr "Eigenschaften" #: gui_tree.c:608 gui_tree.c:752 msgid "Launch browser" msgstr "Starte Browser" #: gui_tree.c:610 gui_tree.c:760 msgid "Disable URL" msgstr "Sperre URL" #: gui_tree.c:612 gui_tree.c:769 msgid "Enable URL" msgstr "Erlaube URL" #: gui_tree.c:614 gui_tree.c:777 msgid "Download URL" msgstr "Hole URL" #: gui_tree.c:617 gui_tree.c:670 msgid "URL tree" msgstr "URL-Baum" #: html.c:244 htmlparser.c:227 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "Nichtunterstützte BASE URL - %s (wahrscheinlich falsch behandelt)\n" #: html.c:519 msgid "Can't work on directory\n" msgstr "Kann Verzeichnis nicht bearbeiten\n" #: html.c:546 html.c:551 msgid "rewrite parent" msgstr "schreibe Elter neu" #: http.c:390 msgid "****************** Proxy connect request *****************\n" msgstr "****************** Proxy-Verbindungsanforderung *****************\n" #: http.c:435 msgid "***************** Proxy connect response *****************\n" msgstr "***************** Proxy-Verbindungsantwort *****************\n" #: http.c:525 msgid "Sending request ..." msgstr "Sende Anforderung..." #: http.c:776 msgid "************ Client HTTP MIME header ***************\n" msgstr "************ HTTP-MIME-Header des Client ***************\n" #: http.c:793 msgid "Sending data ..." msgstr "Sende Daten ..." #: http.c:794 msgid "************ HTTP request data ***************\n" msgstr "************ HTTP-Anforderungsdaten **********\n" #: http.c:804 msgid "Waiting for response ..." msgstr "Warte auf Antwort ..." #: http.c:826 msgid "Error reading HTTP 1xx class response\n" msgstr "Fehler beim Lesen der HTTP-Klasse-1xx-Antwort\n" #: http.c:832 msgid "***************** class 1xx HTTP response ****************\n" msgstr "***************** Klasse-1xx-HTTP-Antwort ****************\n" #: http.c:939 msgid "Connecting ..." msgstr "Verbinde ..." #: http.c:1228 msgid "*********** HTTP Server response MIME header **********\n" msgstr "*********** HTTP Server antwortet mit MIME Header **********\n" #: http.c:1329 msgid "Regeting whole file\n" msgstr "Hole komplette Datei\n" #: http.c:1379 #, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "Unerwartete Antwort \"%d %s\" bei Wiederholungsversuch!\n" #: http_proxy.c:151 #, c-format msgid "Checking HTTP proxy server %s:%hu\n" msgstr "Überprüfe HTTP-Proxy-Server %s:%hu\n" #: http_proxy.c:163 msgid "Failed to check proxy (sock open)!\n" msgstr "Konnte Proxy nicht überprüfen (Socket offen)!\n" #: http_proxy.c:175 msgid "Failed to check proxy (write failed)!\n" msgstr "Konnte Proxy nicht überprüfen! (Schreiben fehlgeschlagen)\n" #: http_proxy.c:182 msgid "Failed to check proxy (read failed)!\n" msgstr "Konnte Proxy nicht überprüfen! (Lesen fehlgeschlagen)\n" #: http_proxy.c:191 msgid "Failed to check proxy (bad response)!\n" msgstr "Konnte Proxy nicht überprüfen! (Falsche Antwort)\n" #: http_proxy.c:197 #, c-format msgid "Proxy %s:%hu is HTTP/%d.%d proxy\n" msgstr "Proxy %s:%hu ist ein HTTP/%d.%d-Proxy\n" #: jsbind.c:68 msgid "bad parameter" msgstr "Falscher Parameter" #: jsbind.c:261 msgid "PavukUrl constructor failed\n" msgstr "PavukUrl-Erzeugung fehlgeschlagen\n" #: jsbind.c:439 msgid "invalid assignment" msgstr "ungültige Zuweisung" #: jsbind.c:461 msgid "bad parent index" msgstr "Falscher Hauptindex" #: jsbind.c:514 msgid "not enough parameters" msgstr "Nicht genug Parameter" #: jsbind.c:539 msgid "unknown limiting condition" msgstr "Unbekannte einschränkende Bedingungen" #: jsbind.c:611 msgid "PavukFnrules constructor call prohibited from script\n" msgstr "PavukFnrules-Erzeugung durch Skript verboten\n" #: jsbind.c:650 jsbind.c:674 msgid "bad parameters" msgstr "Falsche Parameter" #: jsbind.c:897 #, c-format msgid "pjs: There is no \"%s\" JavaScript function!\n" msgstr "pjs: Es gibt keine JavaScript-Funktion \"%s\"!\n" #: lfname.c:501 lfname.c:512 lfname.c:520 lfname.c:532 lfname.c:557 #: lfname.c:659 lfname.c:671 lfname.c:682 lfname.c:696 lfname.c:708 re.c:48 #: re.c:58 re.c:65 re.c:77 re.c:92 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "Fehler beim Übersetzen des regulären Ausdrucks: %s\n" #: lfname.c:574 lfname.c:633 lfname.c:931 lfname.c:1060 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "LSP-Analysefehler: falsches Token bei - %s\n" #: lfname.c:942 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "LSP-Analysefehler: falscher numerischer Wert bei - %s\n" #: lfname.c:956 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "LSP-Analysefehler: falsches Makro bei - %s\n" #: lfname.c:989 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "LSP-Analysefehler: nichtterminierter String bei - %s\n" #: lfname.c:1013 lfname.c:1030 lfname.c:1049 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "LSP-Analysefehler: falscher Parametertyp bei - %s\n" # log.c:184 #: log.c:396 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "Beende Log : %H:%M:%S %d.%m.%Y\n" # log.c:204 #: log.c:418 msgid "Unable to open log file - disabling logging\n" msgstr "Kann Log-Datei nicht öffnen - schalte Logging aus\n" # log.c:212 #: log.c:426 msgid "Log file is locked by another process - " msgstr "Log-Datei ist von anderem Prozess gelockt - " #: log.c:430 msgid "generating new log filename\n" msgstr "generiere neuen Log-Dateinamen\n" # log.c:221 #: log.c:435 msgid "disabling logging\n" msgstr "schalte Logging aus\n" # log.c:243 #: log.c:457 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "Starte Log : %H:%M:%S %d.%m.%Y\n" # nscache.c:68 #: mozcache.c:177 #, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "Kann Mozilla Cache-Index nicht öffnen - %s\n" # nscache.c:68 #: mozcache.c:291 #, c-format msgid "Error opening cache index file %s\n" msgstr "Kann Cache-Index %s nicht öffnen\n" #: mozcache.c:308 msgid "Mozilla new cache map file format not recognized" msgstr "Das neue Cache-Inhaltsformat wird nicht unterstützt" #: mozcache.c:354 mozcache.c:364 msgid "Corrupted Mozilla cache blockfile!" msgstr "Defekte Mozilla Cache-Blockdatei!" #: mozcache.c:460 msgid "Corrupted Mozilla cache map file!" msgstr "Defekte Mozilla Cache-Inhaltsdatei!" #: myssl_nss.c:285 msgid "NSS_Init: Unable to open cert database" msgstr "NSS_Init: Konnte Zertifikatsdatenbank nicht öffnen" #: myssl_nss.c:505 #, c-format msgid "SSL connect failure - %s\n" msgstr "SSL-Verbindung fehlgeschlagen - %s\n" #: myssl_nss.c:533 #, c-format msgid "SSL error - %s\n" msgstr "SSL-Fehler - %s\n" #: myssl_openssl.c:452 msgid "Failed obtaining entropy pathname\n" msgstr "Ermitteln des Entropy-Pfadnamen fehlgeschlagen\n" #: myssl_openssl.c:464 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "" "Initialisierung des OpenSSL-Random-Seed über den EGD-Dämon fehlgeschlagen\n" #: myssl_openssl.c:475 msgid "Seeding entropy pool INSECURELY!\n" msgstr "Entropy-Pool-Füllung UNSICHER!\n" #: myssl_openssl.c:616 msgid "Unable to set certificate file (wrong password?)\n" msgstr "Kann Zertifikats-Datei nicht setzen (falsches Passwort?)\n" #: myssl_openssl.c:627 msgid "Unable to set public key file\n" msgstr "Kann Datei des öffentlichen Schlüssels nicht setzen\n" #: myssl_openssl.c:645 msgid "Private key does not match the certificate public key\n" msgstr "" "Privater Schlüssel passt nicht zum öffentlichen Zertifikats-Schlüssel\n" #: nls.c:23 msgid "Czech" msgstr "Tschechisch" #: nls.c:24 msgid "German" msgstr "Deutsch" #: nls.c:25 msgid "Spanish" msgstr "Spanisch" #: nls.c:26 msgid "French" msgstr "Fränzösisch" #: nls.c:27 msgid "Italian" msgstr "Italienisch" #: nls.c:28 msgid "Japanese" msgstr "Japanisch" #: nls.c:29 msgid "Polish" msgstr "Polnisch" #: nls.c:30 msgid "Slovak" msgstr "Slowakisch" #: nls.c:31 msgid "Ukrainian" msgstr "Ukrainisch" # nscache.c:68 #: nscache.c:106 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "Kann Netscapes Cache-Index nicht öffnen - %s\n" #: ntlm_auth.c:535 msgid "Trying to do NTLM authorization\n" msgstr "Versuche NTLM-Autorisierung\n" #: ntlm_auth.c:546 ntlm_auth.c:637 ntlm_auth.c:719 ntlm_auth.c:808 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "NTLM-Autorisierung nur auf persistenten Verbindungen unterstützt!\n" #: ntlm_auth.c:573 ntlm_auth.c:744 msgid "Not enough data for NTLM authorization!\n" msgstr "Nicht genügend Daten für NTLM-Autorisierung!\n" # ginterface.c:3373 #: ntlm_auth.c:574 ntlm_auth.c:745 msgid "Missing:\n" msgstr "Vermisst:\n" #: ntlm_auth.c:576 ntlm_auth.c:747 msgid " domain\n" msgstr " Domain\n" #: ntlm_auth.c:578 ntlm_auth.c:749 msgid " username\n" msgstr " Benutzername\n" #: ntlm_auth.c:580 ntlm_auth.c:751 msgid " password\n" msgstr " Passwort\n" #: ntlm_auth.c:582 ntlm_auth.c:753 msgid " local hostname\n" msgstr " lokaler Hostname\n" #: ntlm_auth.c:618 ntlm_auth.c:626 ntlm_auth.c:653 ntlm_auth.c:789 #: ntlm_auth.c:797 ntlm_auth.c:824 msgid "Got unexpected response\n" msgstr "Unerwartete Antwort erhalten\n" #: ntlm_auth.c:663 msgid "Failed NTLM nonce negotiation\n" msgstr "NTLM-Nonce-Negoziierung fehlgeschlagen\n" #: ntlm_auth.c:704 msgid "Trying to do proxy NTLM authorization\n" msgstr "Versuche Proxy-NTLM-Autorisierung\n" #: ntlm_auth.c:834 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "NTLM-Proxy-Nonce-Negoziierung fehlgeschlagen\n" #: options.h:193 msgid "\t-v - print version number\n" msgstr "\t-v - zeige Versionsnummer\n" #: options.h:205 msgid "\t-h - help\n" msgstr "\t-h - Hilfe\n" #: options.h:220 msgid "\t-X - start GUI interface\n" msgstr "\t-X - starte grafisches Interface\n" #: options.h:252 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" "\t-runX - fange unmittelbar nach Start des\n" "\t grafischen Interfaces mit dem Bearbeiten\n" "\t der eingetragenen URLs an\n" #: options.h:269 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "" "\t-prefs/-noprefs - lade Voreinstellungen aus der Datei ~/.pavuk_prefs\n" #: options.h:499 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" "\t-progress/-noprogress\n" "\t - zeige Ladefortgang solange im Terminal aktiv\n" #: options.h:523 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "\t-lmax $nr - erlaubte Baum-Tiefe\n" #: options.h:535 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "\t-dmax $nr - maximale Anzahl zu holender Dokumente\n" #: options.h:547 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "" "\t-sleep $nr - warte $nr Sekunden zwischen den Übertragungen,\n" "\t Vorgabe: 0 Sek.\n" #: options.h:560 msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "" "\t-rsleep/-norsleep - zufällige Verzögerungszeit zwischen Übertragungen\n" "\t von 0 bis -sleep Zeit.\n" #: options.h:584 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "" "\t-retry $nr - Anzahl der Wiederholungen, falls Fehler auftreten\n" #: options.h:596 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "" "\t-nregets $nr - Anzahl der max. Wiederholungen bei\n" "\t einzelnen Dateien, Vorgabe: 2\n" #: options.h:608 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" "\t-nredirs $nr - Anzahl der maximal zu beachtenden\n" "\t HTTP-Umleitungen, Vorgabe: 5\n" #: options.h:620 msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" "\t-timeout $nr - Timeout für Netzwerkverbindungen (min).\n" "\t 0 == kein Timeout,\n" "\t Vorgabe: 0\n" #: options.h:633 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" "\t-rollback $nr - Anzahl der Bytes (beginnend vom Dateiende),\n" "\t welche bei wiederholtem Holen weggelassen werden,\n" "\t Vorgabe: 0\n" #: options.h:647 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" "\t-ddays $nr - Anzahl der Tage seit letztem Zugriff, wenn Dokument\n" "\t im Sync-Modus geprueft wurde\n" #: options.h:660 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" "\t-nocache/-cache - verbiete Caching von HTTP-Dokumenten\n" "\t (beim Proxy-Cache)\n" #: options.h:683 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "\t-noRobots/-Robots - benutze Datei \"robots.txt\"?\n" #: options.h:706 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "\t-noFTP/-FTP - hole keine FTP-Dateien\n" #: options.h:729 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "\t-noHTTP/-HTTP - hole keine HTTP-Dateien\n" #: options.h:755 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "\t-noSSL/-SSL - hole keine SSL-Dateien (HTTPS)\n" #: options.h:786 options.h:802 msgid "\t-noverify/-verify - don't verify SSL certificates\n" msgstr "\t-noverify/-verify - SSL-Zertifikate nicht überprüfen\n" #: options.h:818 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "\t-noFTPS/-FTPS - hole keine FTPS-Dateien\n" #: options.h:846 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "\t-noGopher/-Gopher - hole Gopher-Dateien?\n" #: options.h:869 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "\t-noCGI/-CGI - hole parametrische CGI-Seiten?\n" #: options.h:892 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "\t-noEnc/-Enc - erlaube kodierte Dateien?\n" #: options.h:915 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" "\t-noRelocate/-Relocate\n" "\t - Links nicht neuschreiben\n" #: options.h:939 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" "\t-FTPhtml/-noFTPhtml\n" "\t - verarbeite HTML-Dateien, die über FTP\n" "\t geladen wurden\n" #: options.h:963 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" "\t-FTPlist/-noFTPlist\n" "\t - verwende breite FTP-Verzeichnis-Liste\n" #: options.h:987 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "\t-FTPdir/-noFTPdir - steige in FTP-Verzeichnisse hinab\n" #: options.h:1010 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" "\t-store_index/-nostore_index\n" "\t - speichere Verzeichnis-URLs als Indexdateien\n" #: options.h:1034 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" "\t-force_reget/-noforce_reget\n" "\t - Erzwinge komplettes Neuladen von Dateien, falls\n" "\t der Server kein Wiederholen unterstützt\n" #: options.h:1062 msgid "\t-debug - turn on debug mode\n" msgstr "\t-debug - Debug-Modus einschalten\n" #: options.h:1093 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "\t-debug_level $l - Debug-Level ($l: siehe Dokumentation)\n" #: options.h:1106 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "\t-asite $list - Komma-getrennte Liste erlaubter Sites\n" #: options.h:1118 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "\t-dsite $list - Komma-getrennte Liste nichterlaubter Sites\n" #: options.h:1130 msgid "\t-adomain $list - list of allowed domains\n" msgstr "\t-adomain $list - Liste erlaubter Domains\n" #: options.h:1142 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "\t-ddomain $list - Liste nichterlaubter Domains\n" #: options.h:1154 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "\t-aprefix $list - Liste erlaubter Verzeichnis-/Datei-Präfixe\n" #: options.h:1166 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "" "\t-dprefix $list - Liste nichterlaubter Verzeichnis-/Datei-Präfixe\n" #: options.h:1178 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "\t-asfx $list - Liste erlaubter Endungen\n" #: options.h:1190 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "\t-dsfx $list - Liste nichterlaubter Endungen\n" #: options.h:1202 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "\t-amimet $list - Liste erlaubter MIME-Typen\n" #: options.h:1214 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "\t-dmimet $list - Liste nichterlaubter MIME-Typen\n" #: options.h:1226 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "\t-alang $list - Liste bevorzugter Sprachen (nur für HTTP)\n" #: options.h:1238 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "\t-acharset $list - Liste bevorzugter Zeichensätze (nur für HTTP)\n" #: options.h:1250 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" "\t-scndir $dir - Verzeichnis für Szenarios (Konfigurationsdateien)\n" #: options.h:1263 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "\t-cdir $dir - Verzeichnis zum Speichern der Dokumente\n" #: options.h:1275 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "\t-subdir $dir - Unterverzeichnis, in dem cdir arbeiten soll\n" #: options.h:1287 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" "\t-scenario $str - Verzeichnis des Szenarios, das geladen/gestartet\n" "\t werden soll\n" #: options.h:1300 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" "\t-auth_scheme 1/2/3 - HTTP-Authentifizierungsschema:\n" "\t 1-Benutzer, 2-Basic, 3-Digest (Vorgabe: 2)\n" #: options.h:1313 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "\t-auth_name $str - Name für Authentifizierung (nur für HTTP)\n" #: options.h:1325 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "\t-auth_passwd $str - Passwort für Authentifizierung (nur für HTTP)\n" #: options.h:1337 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - verwende eine HTTP-Digest-\n" "\t Zugangsauthentifizierung wieder\n" "\t nonce für weitere Anfragen\n" #: options.h:1362 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - verwende eine HTTP-Proxy-Digest-\n" "\t Zugangsauthentifizierung wieder\n" "\t nonce für weitere Anfragen\n" #: options.h:1390 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" "\t-ssl_cert_passwd $str \n" "\t - Passwort für SSL-Zertifizierungs-Datei\n" #: options.h:1407 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - SSL-Zertifizierungs-Datei\n" #: options.h:1424 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "\t-ssl_key_file $str - SSL-Zertifizierungsschlüssel-Datei\n" #: options.h:1440 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" "\t-ssl_cipher_list $str\n" "\t - Liste der bevorzugten SSL-Verschlüsselungen in einer " "SSL-Kommunikation\n" #: options.h:1457 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "\t-egd_socket $file - Pfad zur EGD-Socket im Listen-Modus\n" #: options.h:1470 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "\t-from $str - E-Mail-Adresse für Benutzerauthentifizierung\n" #: options.h:1482 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" "\t-send_from/-nosend_from\n" "\t - sende From:-Header in HTTP-Anfrage mit\n" "\t E-Mail-Adresse\n" #: options.h:1507 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "\t-identity $str - Inhalt des User-Agent:-Felds der HTTP-Anfrage\n" #: options.h:1519 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "\t-pattern $list - Liste der Wildcard-Muster für Dateien\n" #: options.h:1534 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "\t-pattern $list - Liste der regulären Ausdrücke für Dateien\n" #: options.h:1547 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" "\t-skip_pattern $list\n" "\t - Liste der zu überspringenden Dateien\n" "\t (Wildcard-Muster)\n" #: options.h:1563 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" "\t-skip_pattern $list\n" "\t - Liste der zu überspringenden Dateien\n" "\t (reguläre Ausdrücke)\n" #: options.h:1577 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "\t-url_pattern $list - Liste der Wildcard-Muster für URLs\n" #: options.h:1592 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "\t-url_pattern $re - Liste der regulären Ausdrücke für URLs\n" #: options.h:1605 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" "\t-skip_url_pattern $list\n" "\t - Liste der zu überspringenden URLs\n" "\t (Wildcard-Muster)\n" #: options.h:1621 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" "\t-skip_url_pattern $list\n" "\t - Liste der zu überspringenden URLs\n" "\t (reguläre Ausdrücke)\n" #: options.h:1635 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" "\t mirror - make exact copy of remote site\n" msgstr "" "\t-mode $mode - setze Arbeitsmodus\n" "\t normal - rekursiv durchs WWW (Vorgabe)\n" "\t linkupdate - aktualisiere Links im lokalen Baum\n" "\t sync - synchronisiere lokalen Baum mit WWW-" "Server\n" "\t singlepage - einzelne Seite mit Inline-Objekten\n" "\t singlereget - wiederhole Datei solange sie nicht\n" "\t komplett ist\n" "\t resumeregets - wiederhole alle defekten Dateien\n" "\t dontstore - übertrage Dokumente ohne speichern\n" "\t reminder - überprüfe URLs auf Änderungen\n" "\t ftpdir - zeige Inhalt des FTP-Verzeichnisses\n" "\t mirror - erzeuge exakte Kopie des Servers\n" #: options.h:1658 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" "\t-ftp_proxy $site[:$port]\n" "\t - Proxy-Server für FTP\n" #: options.h:1671 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" "\t-http_proxy $site[:$port]\n" "\t - Proxy-Server für HTTP\n" #: options.h:1684 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" "\t-gopher_proxy $site[:$port]\n" "\t - Proxy-Server für Gopher\n" #: options.h:1700 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" "\t-ssl_proxy $site[:$port]\n" "\t - Proxy-Server für SSL\n" #: options.h:1714 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - angegebener Gopher-Proxy ist HTTP-Gateway\n" "\t für Gopher\n" #: options.h:1739 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - angegebener FPT-Proxy ist HTTP-Gateway für FTP\n" #: options.h:1764 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - verwende CONNECT-Anfrage zum HTTP-Proxy für\n" "\t FTP-Verbindungen\n" #: options.h:1792 msgid "\t-browser $str - your preferred browser programm\n" msgstr "\t-browser $str - bevorzugtes Programm zum Browsen\n" #: options.h:1808 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "\t-xmaxlog - maximale Länge des Log-Fensters\n" #: options.h:1821 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "" "\t-dumpscn $str - speichere Szenario in scndir unter dem Namen $str\n" #: options.h:1833 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "" "\t-maxsize $nr - maximal erlaubte Größe der zu ladenden Dokumente\n" "\t (in Bytes)\n" #: options.h:1845 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "" "\t-minsize $nr - minimal erlaubte Größe der zu ladenden Dokumente\n" "\t (in Bytes)\n" #: options.h:1857 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - Passwort für HTTP-Proxy-Authentifizierung\n" #: options.h:1870 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - Benutzername für HTTP-Proxy-Authentifizierung\n" #: options.h:1883 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_auth 1/2/3\n" "\t - Schema für HTTP-Proxy-Authentifizierung\n" #: options.h:1896 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "\t-logfile $file - Dateiname zum Speichern von Meldungen\n" #: options.h:1908 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "" "\t-slogfile $file - Dateiname zum Speichern von verkürzten Meldungen\n" #: options.h:1920 msgid "\t-tlogfile $file - name of file where time log will be stored\n" msgstr "\t-tlogfile $file - Dateiname zum Speichern der Zeit-Meldungen\n" #: options.h:1932 msgid "" "\t-trelative $str (object/program)\n" "\t - what timings are relative to\n" msgstr "" "\t-trelative $str (object/program)\n" "\t - Basis für relative Zeitangaben\n" #: options.h:1945 msgid "" "\t-transparent_proxy $site[:$port]\n" "\t - transparent proxy\n" msgstr "" "\t-transparent_proxy $site[:$port]\n" "\t - transparenter Proxy-Server\n" #: options.h:1958 msgid "" "\t-transparent_ssl_proxy $site[:$port]\n" "\t - transparent SSL proxy\n" msgstr "" "\t-transparent_proxy $site[:$port]\n" "\t - transparenter SSL-Proxy-Server\n" #: options.h:1971 msgid "" "\t-sdemo_mode/-notsdemo_mode\n" "\t - sdemo compatible output\n" msgstr "" "\t-sdemo_mode/-notsdemo_mode\n" "\t - sdemo-kompatible Ausgaben\n" #: options.h:1984 msgid "\t-noencode - do not perform rfc 2396 character encoding\n" msgstr "\t-noencode - keine RFC 2396-Zeichensatzkodierung\n" #: options.h:1996 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "" "\t-stime/-nostime - weise Anfangs- und Endzeit der Übertragung aus\n" #: options.h:2019 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - entferne ungültige Dateien oder Verzeichnisse\n" "\t solange im Sync-Modus\n" #: options.h:2045 msgid "" "\t-remove_before_store/-noremove_before_store\n" "\t - remove file before storing new content\n" msgstr "" "\t-remove_before_store/-noremove_before_store\n" "\t - Datei vor Speichern neuen Inhalts löschen\n" #: options.h:2069 msgid "" "\t-always_mdtm/-noalways_mdtm\n" "\t - always use MDTM to determine modifictaion time\n" "\t of remote file; never use values from file listing\n" msgstr "" "\t-always_mdtm/-noalways_mdtm\n" "\t - Immer MDTM nutzen, um Änderungszeit der entfernten\n" "\t zu ermitteln. Niemals Werte aus Dateiliste nutzen.\n" #: options.h:2094 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" "\t-auth_file $file - Datei, in der die Authentifizierung-Informationen\n" "\t gespeichert sind\n" "\t (siehe Anleitung für Formatbeschreibung)\n" #: options.h:2107 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" "\t-base_level $nr - Anzahl der von oben auszulassenden Ebenen\n" "\t im Verzeichnisbaum\n" #: options.h:2119 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "\t-ftp_active - wähle aktive FTP-Datenverbindung\n" #: options.h:2131 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "\t-ftp_passive - wähle passive FTP-Datenverbindung\n" #: options.h:2143 msgid "" "\t-active_ftp_port_range $min:$max\n" "\t - range of FTP data connection ports used\n" "\t for active ftp\n" msgstr "" "\t-active_ftp_port_range $min:$max\n" "\t - Bereich der FTP-Verbindungsports für\n" "\t active Verbindungen\n" #: options.h:2160 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "" "\t-msgcat $dir - Verzeichnis, in welchem die Meldungskataloge\n" "\t gespeichert werden\n" #: options.h:2176 msgid "\t-language $str - set language for messages\n" msgstr "\t-language $str - setze Sprache für Meldungen\n" #: options.h:2189 msgid "\t-quiet - don't show output messages\n" msgstr "\t-quiet - zeige keine Ausgabemeldungen\n" #: options.h:2201 msgid "\t-verbose - show output messages (default)\n" msgstr "\t-verbose - zeige Ausgabemeldungen (Vorgabe)\n" #: options.h:2213 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-newer_than $time - hole nur Dokumente, die jünger als $time sind\n" "\t Format für $time: JJJJ.MM.TT.hh:mm\n" #: options.h:2226 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-older_than $time - hole nur Dokumente, die älter als $time\n" "\t Format für $time: JJJJ.MM.TT.hh:mm\n" #: options.h:2239 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-schedule $time - starte Pavuk um $time\n" "\t Format für $time: JJJJ.MM.TT.hh:mm\n" #: options.h:2252 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "" "\t-reschedule $nr - Zahl der Stunden zwischen zwei Läufen\n" "\t für zyklisches Starten\n" #: options.h:2265 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" "\t-dont_leave_site/-leave_site\n" "\t - verlasse nicht/verlasse die Site der Anfangs-URL\n" #: options.h:2289 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" "\t-dont_leave_dir/-leave_dir\n" "\t - verlasse nicht/verlasse das Verzeichnis\n" "\t der Anfangs-URL\n" #: options.h:2313 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" "\t-preserve_time/-nopreserve_time\n" "\t - behalte das Modifizierungsdatum des Dokuments\n" #: options.h:2337 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" "\t-preserve_perm/-nopreserve_perm\n" "\t - bewahre Zugriffsrechte des Dokuments\n" #: options.h:2361 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - behalte absolute symbolische Links\n" #: options.h:2385 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" "\t-leave_level $nr - Anzahl der Baumebenen, die von der Startsite aus\n" "\t verlassen werden dürfen\n" "\t (Vorgabe: 0 = keine Beschränkung)\n" #: options.h:2398 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "" "\t-cookie_file $file - Datei, in der Cookies im Netscape-Format\n" "\t gespeichert werden\n" #: options.h:2410 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" "\t-cookie_send/-nocookie_send\n" "\t - sende Cookie-Information in HTTP-Anfrage\n" #: options.h:2434 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" "\t-cookie_recv/-nocookie_recv\n" "\t - akzeptiere Cookies der HTTP-Antwort\n" #: options.h:2458 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" "\t-cookie_update/-nocookie_update\n" "\t - aktualisiere Cookies in der Cookie-Datei\n" #: options.h:2482 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" "\t-cookie_check/-nocookie_check\n" "\t - überprüfe, ob Cookies für Quelldomain gesetzt sind\n" #: options.h:2506 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "\t-cookies_max $nr - maximale Anzahl der Cookies im Cookie-Cache\n" #: options.h:2518 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" "\t-disabled_cookie_domains $list\n" "\t - Komma-getrennte Liste der gesperrten Cookie-Domains\n" #: options.h:2531 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - sperre Verarbeitung von URLs mit\n" "\t Attribut $ATTRIB des HTML-Tags $TAG\n" #: options.h:2545 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - erlaube Verarbeitung von URLs mit\n" "\t Attribut $ATTRIB des HTML-Tags $TAG\n" #: options.h:2562 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "\t-gui_font $font - Fontname, der im GUI verwendet wird\n" #: options.h:2575 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" "\t-user_condition $str\n" "\t - Benutzer-Exit-Skript um URLs einzuschränken\n" "\t (weitere Informationen: siehe manpage)\n" #: options.h:2589 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "" "\t-tr_del_chr $str - Zeichen, die aus dem lokalen Dateinamen\n" "\t entfernt werden\n" #: options.h:2602 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" "\t-tr_str_str $str1 $str2\n" "\t - ersetze $str1 nach $str2 im lokalen Dateinamen\n" #: options.h:2615 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - ersetze $chrset1 nach $chrset2 im\n" "\t lokalen Dateinamen\n" #: options.h:2628 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "" "\t-index_name $str - Name des Verzeichnis-Indexes anstelle von _._.html\n" #: options.h:2640 msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "\t-store_name $str - Dateiname für zuerst geholtes Dokument\n" #: options.h:2663 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - vergleiche empfangene Größe mit der\n" "\t des remote servers\n" #: options.h:2688 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" "\t-urls_file $file - URLs sollen bis zu einer Zeile mit einem einzelnen\n" "\t \".\" aus einer Datei gelesen werden\n" #: options.h:2701 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" "\t-bg/-nobg - entferne Pavuk vom Terminal und\n" "\t gebe keinerlei Meldungen aus\n" #: options.h:2725 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "" "\t-maxrate $nr - beschränke auf maximale\n" "\t Übertragungsgeschwindigkeit (kB/s)\n" #: options.h:2737 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "" "\t-minrate $nr - beschränke auf minimale\n" "\t Übertragungsgeschwindigkeit (kB/s)\n" #: options.h:2749 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "\t-bufsize $nr - Größe des Lesepuffers (kB)\n" #: options.h:2761 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "" "\t-file_quota $nr - maximale Größe der zu übertragenden Datei (kB)\n" #: options.h:2773 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "\t-trans_quota $nr - maximale Übertragungsmenge pro Sitzung (kB)\n" #: options.h:2785 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "\t-fs_quota $nr - freie Plattenplatz-Quota (kB)\n" #: options.h:2797 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" "\t-enable_js/-disable_js\n" "\t - Holen von Javascript-Quelldateien an/aus\n" #: options.h:2821 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" "\t-fnrules $t $m $r - Regeln für die Erzeugung des lokalen Dateinamens\n" "\t (siehe Anleitung)\n" #: options.h:2834 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" "\t-store_index/-nostore_index\n" "\t - speichere Dokument-Informationsdateien mit\n" "\t jedem Dokument\n" #: options.h:2858 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" "\t-all_to_local/-noall_to_local\n" "\t - ändere gleich nach dem Holen alle Links\n" "\t im HTML-Dokument zu lokalen Links\n" #: options.h:2883 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" "\t-sel_to_local/-nosel_to_local\n" "\t - ändere gleich nach dem Holen alle Links\n" "\t im HTML-Dokument, welche die Beschränkungen\n" "\t einhalten, zu lokalen Links\n" #: options.h:2909 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" "\t-all_to_remote/-noall_to_remote\n" "\t - ändere gleich nach dem Holen alle Links\n" "\t im HTML-Dokument zu entfernten Links und\n" "\t mache keine weiteren Änderungen\n" #: options.h:2935 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "" "\t-remind_cmd $str - Befehl, welcher die Ergebnisse im\n" "\t Erinnerungs-Modus sendet\n" #: options.h:2947 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" "\t-auto_referer/-noauto_referer\n" "\t - sende für jede Anfangs-URL in der HTTP-Anforderung\n" "\t ein Referer:-Feld mit der eigenen URL\n" #: options.h:2972 msgid "" "\t-referer/-noreferer\n" "\t - send Referer: field in HTTP request\n" msgstr "" "\t-referer/-noreferer\n" "\t - sende Referer-Feld in HTTP-Anfrage\n" # config.c:2288 #: options.h:2996 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" "\t-url_strategy $strategy\n" "\t - Reihenfolge des Herunterladens von URLs\n" "\t $strategy ist:\n" "\t level - Ebene im URL-Baum\n" "\t leveli - Ebene im URL-Baum,\n" "\t jedoch kommen Inline-Objekte zuerst\n" "\t pre - pre-Ordnung im URL-Baum\n" "\t prei - pre-Ordnung im URL-Baum,\n" "\t jedoch kommen Inline-Objekte zuerst\n" # config.c:2309 #: options.h:3020 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "\t-nscache_dir $dir - Pfad zu Netscapes Cache-Verzeichnis\n" # config.c:2970 #: options.h:3036 msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr "" " -ie_cache - erlaube Laden von Dateien aus dem MSIE-Cache\n" # config.c:2322 #: options.h:3067 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" "\t-remove_adv/-noremove_adv\n" "\t - schalte Entfernen von Werbebanner ein\n" "\t Annahme: regulärer Ausdruck zum Matchen\n" "\t der URLs mit der -adv_re-Option gesetzt\n" # config.c:2347 #: options.h:3101 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "" "\t-adv_re $RE - regulärer Ausdruck zum Matchen der\n" "\t Werbebanner-URLs\n" #: options.h:3118 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" "\t-check_bg/-nocheck_bg\n" "\t - schreibe keine Meldungen auf den Schirm wenn\n" "\t im Hintergrund\n" # config.c:2386 #: options.h:3148 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" "\t-send_if_range/-nosend_if_range\n" "\t - sende If-Range-Header in der HTTP-Anforderung\n" "\t schalten Sie dies ab, wenn der Server reget\n" "\t unterstützt (dies generiert jedoch verschiedene\n" "\t Etags für zwei Requests)\n" #: options.h:3174 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "\t-sched_cmd $str - Befehl für Erinnerungs-Modus\n" # config.c:2422 #: options.h:3186 msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" "\t-unique_log/-nounique_log\n" "\t - wenn originale Logdatei gelockt ist, versuche\n" "\t anderen Namen zu finden, der nicht gelockt ist\n" "\t (durch Anhängen von Nummern)\n" #: options.h:3211 msgid "" "\t-read_css/-noread_css\n" "\t - fetch objects mentioned in style sheets\n" msgstr "" "\t-read_css/-noread_css\n" "\t - hole in Style-Sheets verlinkte Dateien\n" # config.c:2446 #: options.h:3235 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" "\t-post_cmd $str - Nachbearbeitungs-Kommando, welches nach dem\n" "\t erfolgreichen Holen ausgeführt wird\n" #: options.h:3252 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" "\t-ssl_version $v - Version des SSL-Protokolls für die Kommunikation,\n" "\t gültige Werte: ssl23,ssl2,ssl3,tls1\n" #: options.h:3256 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" "\t-ssl_version $v - Version des SSL-Protokolls für die Kommunikation,\n" "\t gültige Werte: ssl23,ssl2,ssl3\n" #: options.h:3274 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" "\t-unique_sslid/-nounique_sslid\n" "\t - verwende einzigartige SSL-ID mit jeder SSL-Sitzung\n" #: options.h:3303 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "\t-httpad $hdr - zusätzlicher HTTP-Header\n" #: options.h:3315 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "\t-statfile $str - statistischer Report des Ladefortschritts\n" #: options.h:3330 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "" "\t-ewait - warte auf das Ende des Programms, nachdem das Holen\n" "\t abgeschlossen ist\n" #: options.h:3362 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "\t-aip_pattern $re - Muster für erlaubte Server-IP-Adressen\n" #: options.h:3378 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "\t-dip_pattern $re - Muster für nichterlaubte Server-IP-Adressen\n" #: options.h:3391 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "" "\t-site_level $nr - Maximales Fortbewegen von der Startseite aus\n" "\t (in Zahl der Seiten)\n" #: options.h:3404 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" "\t-use_http11/-nouse_http11\n" "\t - schalte HTTP/1.1-Protokoll-Features ein oder aus,\n" "\t Vorgabe ist nun aus\n" #: options.h:3429 msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" "\t-max_time $nr - setze Maximalzeit für den Programmlauf in Minuten\n" "\t Vorgabe 0 == kein Limit, es können auch\n" "\t Gleitkommazahlen zur Angabe von Sekundenbruchteilen\n" "\t genutzt werden\n" #: options.h:3445 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" "\t-local_ip $str - verwende diese lokale IP-Adresse des Netzwerk-" "Interfaces.\n" "\t (Option für multihomed-Maschinen).\n" #: options.h:3458 msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-request $req - erweiterte Anforderungsinformationen,\n" "\t für GET- oder POST-Anforderungen verwendet\n" "\t Format von $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (siehe Manual-Page für weitere Informationen)\n" #: options.h:3477 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" "\t-hash_size $nr - Größe der internen Hashtabellen zum Tunen der " "Performance\n" #: options.h:3492 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "" "\t-nthreads $nr - lege Zahl der gleichzeitig laufenden Download-Threads " "fest\n" #: options.h:3508 msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" "\t-immesg/-noimmesg - schreibe Meldungen sofort nach dem Erzeugen, nicht\n" "\t erst, wenn es sicher ist (aus MT-Sicht)\n" #: options.h:3537 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-formdata $data - verwendet, um HTML-Formularfelder für Formulare " "anzugeben,\n" "\t die beim Traversieren des Dokumentenbaums gefunden " "werden.\n" "\t Lediglich die hier angegebenen Formulare werden " "automatisch\n" "\t verarbeitet.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (siehe Manual-Page für weitere Informationen)\n" #: options.h:3556 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" "\t-dumpfd $nr - Nummer des Darteideskriptors, in welchen " "Dokumentinhalte\n" "\t abgelegt werden sollen\n" #: options.h:3569 msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" "\t-dump_urlfd $nr - Nummer des Dateideskriptors, in welchem alle\n" "\t in Dokumenten gefundene URLs abgelegt werden sollen\n" #: options.h:3582 msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" "\t-del_after/-nodel_after\n" "\t - lösche FTP-Dokument nach dem erfolgreichen Transfer\n" #: options.h:3606 msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" "\t-unique_name/-nounique_name\n" "\t - generiere einen einzigartigen Namen für jedes " "Dokument\n" #: options.h:3630 msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - verlasse nicht/verlasse das Verzeichnis\n" "\t in dem die Seite betreten wurde\n" #: options.h:3654 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" "\t-singlepage/-nosinglepage\n" "\t - hole einzelne HTML-Seite mit allen inline-Objekten\n" #: options.h:3678 msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" "\t-dump_after/-nodump_after\n" "\t - wenn mit der Option -dumpfd verwendet,\n" "\t Dokument nach dem erfolgreichen Holen und\n" "\t Bearbeiten der HTML-Dokumente ablegen\n" #: options.h:3704 msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" "\t-dump_response/-nodump_response\n" "\t - wenn mit der Option -dumpfd verwendet\n" "\t werden HTTP-Server-Antworten ebenfalls\n" "\t abgelegt\n" #: options.h:3732 msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" "\t-auth_ntlm_domain $str\n" "\t - SMB-Domainname für HTTP-NTLM-Autorisierung\n" #: options.h:3749 msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB-Domainname für HTTP-Proxy-NTLM-Autorisierung\n" #: options.h:3766 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" "\t-js_pattern $re - zusätzliche RE-Muster für passende URLs in\n" "\t DOM-Event-Attributen der HTML-Tags\n" #: options.h:3780 msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" "\t-follow_cmd $str - Benutzer-Exit-Skript, welches befragt wird,\n" "\t ob Links im aktuellen HTML-Dokument verfolgt werden " "sollen\n" #: options.h:3793 msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - hole symbolischen Links wie normale\n" "\t Dateien oder Verzeichnisse\n" #: options.h:3820 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform $p $t $h $a\n" "\t - benutzerspezifisches JS-Muster mit Umwandlung\n" "\t $p - Muster\n" "\t $t - Umwandlung\n" "\t $h - HTML-Tag oder * oder \"\"\n" "\t $a - HTML-Attribut\n" #: options.h:3841 msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform2 $p $t $h $a\n" "\t - benutzerspezifisches JS-Muster mit Umwandlung und\n" "\t Umschreiben der URL im ersten Teilmuster\n" "\t $p - Muster\n" "\t $t - Umwandlung\n" "\t $h - HTML-Tag oder * oder \"\"\n" "\t $a - HTML-Attribut\n" #: options.h:3860 msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_user $str\n" "\t - Benutzername für FTP-Proxy-Autorisierung\n" #: options.h:3873 msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_pass $str\n" "\t - Passwort für FTP-Proxy-Autorisierung\n" #: options.h:3886 msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - Einschränkende Optionen auf Inlineobjekte anwenden?\n" #: options.h:3910 msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" "\t-ftp_list_options $str\n" "\t - zusätzliche Optionen oder Parameter zu den Kommandos\n" "\t FTP LIST oder NLST\n" #: options.h:3924 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - Intensive Prüfung auf Existenz von Verzeichnissen, " "um\n" "\t Fehler der WuFTPD-Antworten beim LeseVersuch nicht-\n" "\t existierende Verzeichnisse zu umgehen\n" #: options.h:3950 msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" "\t-post_update/-nopost_update\n" "\t - Im Elterndokument nur Links zum aktuellen Dokument\n" "\t anpassen\n" #: options.h:3975 msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" "\t-info_dir $dir - separates Verzeichnis zum Speichern von " "Informations-\n" "\t dateien anstatt der Speicherung direkt im " "Dokumenten-\n" "\t baum\n" # config.c:2309 #: options.h:3988 msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "\t-mozcache_dir $dir - Pfad zu Mozilla Cache-Verzeichnis\n" #: options.h:4000 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" "\t-aport $list - erlaube Dokumenten-Download von Servern\n" "\t mit den angegebenen Ports\n" #: options.h:4013 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" "\t-dport $list - verhindere Dokumenten-Download von Servern\n" "\t mit den angegebenen Ports\n" #: options.h:4026 msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" "\t-hack_add_index/-nohack_add_index\n" "\t - dieser Hack erlaubt es das direkte Verzeichnis\n" "\t aller Dokumente mit aufzunehmen\n" #: options.h:4051 msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" "\t-default_prefix $str\n" "\t - Standard-URL-Präfix für Unterverzeichnisse von\n" "\t gespiegelten Dateien\n" #: options.h:4068 msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" "\t-js_script_file $file\n" "\t - Skript-Datei mit JavaScript-Funktionen\n" #: options.h:4082 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" "\t-ftp_login_handshake $host $handshake\n" "\t - spezielle Anmeldeprozedur für FTP-Server\n" #: options.h:4098 msgid "" "\t-nss_cert_dir $dir - set certificate config directory for Netscape NSS\n" msgstr "" "\t-nss_cert_dir $dir - Zertifikatseinstellungverzeichnis für Netscape NSS\n" #: options.h:4114 msgid "" "\t-nss_accept_unknown_cert/-nonss_accept_unknown_cert\n" "\t - accept SSL server certificates not listed in\n" "\t certificate database\n" msgstr "" "\t-nss_accept_unknown_cert/-nonss_accept_unknown_cert\n" "\t - akzeptiere SSL-Server-Zertifikate, welche nicht in\n" "\t der Zertifikatsdatenbank enthalten sind\n" #: options.h:4147 msgid "" "\t-nss_domestic_policy/-nss_export_policy\n" "\t - set policy for SSL ciphers in NSS\n" msgstr "" "\t-nss_domestic_policy/-nss_export_policy\n" "\t - setze Strategie für SSL-Chiffren in NSS\n" #: options.h:4179 msgid "" "\t-dont_touch_url_rpattern $re\n" "\t - RE pattern of URL which should not be touched\n" "\t by URL rewriting engine\n" msgstr "" "\t-dont_touch_url_rpattern $re\n" "\t - Reg. Ausdruck für URLs, welche nicht\n" "\t umgewandelt werden sollen\n" #: options.h:4194 msgid "" "\t-dont_touch_url_pattern $list\n" "\t - wilcard patterns of URLs which should not\n" "\t be touched by URL rewriting engine\n" msgstr "" "\t-dont_touch_url_pattern $list\n" "\t - Wildcard-Muster von URLs, welche nicht\n" "\t umgewandelt werden sollen\n" #: options.h:4211 msgid "" "\t-dont_touch_tag_rpattern $re\n" "\t - RE pattern of HTML tag in which URLs should\n" "\t not be touched by URL rewriting engine\n" msgstr "" "\t-dont_touch_tag_rpattern $re\n" "\t - Reg. Ausdruck von HTML-Tags in welchen URLs nicht\n" "\t umgewandelt werden sollen\n" #: options.h:4226 msgid "" "\t-tag_pattern $tag $attrib $url\n" "\t - wilcard patterns for precise matching of URLs\n" "\t inside HTML tags\n" msgstr "" "\t-tag_pattern $tag $attrib $url\n" "\t - Wilcard-Muster für präzise Anpassung von URLs\n" "\t in HTML-Tags\n" #: options.h:4243 msgid "" "\t-tag_rpattern $tag $attrib $url\n" "\t - RE patterns for precise matching of URLs\n" "\t inside HTML tags\n" msgstr "" "\t-tag_rpattern $tag $attrib $url\n" "\t - Reg. Ausdruck für präzise Anpassung von URLs\n" "\t in HTML-Tags\n" #: pavuk.c:105 #, c-format msgid "QUIT signal catched\n" msgstr "QUIT-Signal erhalten\n" #: pavuk.c:113 #, c-format msgid "Program has been forcefully terminated\n" msgstr "Programm wurde gewaltsam beendet\n" #: pavuk.c:122 #, c-format msgid "TERM signal catched\n" msgstr "TERM-Signal erhalten\n" #: pavuk.c:275 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "Nicht genug Parameter \"-msgcat\"\n" #: pavuk.c:290 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "Nicht genug Parameter \"-scenario\"\n" #: pavuk.c:320 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "Fehler: falscher Dateideskriptor bei der Option -dumpfd angegeben\n" #: pavuk.c:332 msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "" "Fehler: falscher Dateideskriptor bei der Option -dump_urlfd angegeben\n" #: pavuk.c:386 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "WARNUNG: scndir nicht angegeben - speichere in aktuellem Verzeichnis\n" #: pavuk.c:426 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "" "Kann Pavuk nicht in den Hintergrund versetzen - lasse im Vordergrund laufen\n" #: pavuk.c:430 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "Pavuk wird im Hintergrund laufen: PID %d\n" #: pavuk.c:450 #, c-format msgid "reading URLs from file - %s\n" msgstr "lese URLs aus Datei - %s\n" #: recurse.c:77 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "Neuer Termin für gesperrte URL als Nr. %d\n" # recurse.c:106 #: recurse.c:92 msgid "Running post-processing command\n" msgstr "Nachbearbeitungs-Befehl läuft\n" #: recurse.c:235 #, c-format msgid "retry no. %d\n" msgstr "Wiederholung Nr. %d\n" #: recurse.c:238 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "URL[%2d]: %5d(%d) von %5d %s\n" #: recurse.c:241 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "URL: %5d(%d) von %5d %s\n" #: recurse.c:252 recurse.c:396 msgid "Starting download" msgstr "Beginne Holen" #: recurse.c:280 msgid "Already processed\n" msgstr "Bereits verarbeitet\n" #: recurse.c:287 msgid "Disallowed by user\n" msgstr "Verboten durch Benutzer\n" #: recurse.c:297 msgid "Disallowed by rules\n" msgstr "Verboten durch Regeln\n" #: recurse.c:304 msgid "Checking \"robots.txt\"" msgstr "Überprüfe \"robots.txt\"" #: recurse.c:308 msgid "Disallowed by \"robots.txt\"\n" msgstr "Verboten durch \"robots.txt\"\n" #: recurse.c:319 msgid "This URL type is not supported with ftpdir mode\n" msgstr "Dieser URL-Typ ist im ftpdir-Modus nicht unterstützt\n" #: recurse.c:346 msgid "No transfer - file not expired\n" msgstr "Keine Übertragung - Datei nicht abgelaufen\n" #: recurse.c:362 #, c-format msgid "Starting time : %s\n" msgstr "Anfangszeit: %s\n" #: recurse.c:406 recurse.c:572 #, c-format msgid "Ending time : %s\n" msgstr "Endzeit: %s\n" #: recurse.c:413 recurse.c:575 msgid "download" msgstr "hole" #: recurse.c:520 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "letztes Dokument gesperrt -> schlafe 5 Sekunden\n" #: recurse.c:586 msgid "Relocating and scanning HTML document" msgstr "Verschiebe und scanne HTML-Dokument" #: recurse.c:637 msgid "Dumping processed document" msgstr "Lege verarbeitetes Dokument ab" #: recurse.c:656 msgid "Storing document" msgstr "Speichere Dokument" #: recurse.c:662 msgid "Store failed\n" msgstr "Speichern misslungen\n" #: recurse.c:765 recurse.c:853 msgid "Done" msgstr "Fertig" # gauthinfo.c:574 #: recurse.c:925 remind.c:369 msgid "Sleeping ..." msgstr "Schlafe..." #: recurse.c:939 remind.c:386 msgid "Exiting ..." msgstr "Beende..." #: recurse.c:1045 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d bytes)\n" #: recurse.c:1101 msgid "Searching for files to resume" msgstr "Suche nach Dateien um fortzufahren" #: recurse.c:1132 #, c-format msgid "Adding %s to resume list\n" msgstr "Füge %s an Fortsetzungsliste an\n" #: recurse.c:1164 msgid "Searching for documents to synchronize" msgstr "Suche nach Dateien zum Synchronisieren" #: recurse.c:1222 recurse.c:1251 #, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "Füge Datei %s an Sync-Liste als URL %s an\n" #: remind.c:40 #, c-format msgid "Checking: %s\n" msgstr "Überprüfe %s\n" #: remind.c:164 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "Ungültiger Erinnerungs-Datenbank-Eintrag - %s\n" #: remind.c:520 #, c-format msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "Ergebnis des Pavuk-Erinnerungsmodus\n" "\n" #: remind.c:531 #, c-format msgid "Changed URLs\n" msgstr "Geänderte URLs\n" #: remind.c:552 #, c-format msgid "URLs with some errors\n" msgstr "URLs mit Fehlern\n" #: robots.c:161 msgid "transfering \"robots.txt\"" msgstr "Übertrage \"robots.txt\"" #: robots.c:164 msgid "transfering \"robots.txt\"\n" msgstr "Übertrage \"robots.txt\"\n" #: robots.c:226 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "Hmmm: leite \"robots.txt\" nach %s um?\n" #: stats.c:138 stats.c:222 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "Gesamtzahl der URLs in der Queue: %d\n" #: stats.c:139 stats.c:224 #, c-format msgid "Starting urls: %d\n" msgstr "Anfangs-URLs: %d\n" #: stats.c:142 stats.c:229 #, c-format msgid "Not processed yet: %d (%3d%%)\n" msgstr "Noch nicht verarbeitet: %d (%3d%%)\n" #: stats.c:147 stats.c:236 #, c-format msgid "Processed OK: %d (%3d%%)\n" msgstr "Verarbeitet, OK: %d (%3d%%)\n" #: stats.c:150 stats.c:242 #, c-format msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "Aus lokalem Baum geladen: %d (%3d%%)\n" #: stats.c:154 stats.c:249 #, c-format msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "Aus Netscapes Cache-Verzeichnis geladen: %d (%3d%%)\n" #: stats.c:157 stats.c:255 #, c-format msgid "Downloaded over network: %d (%3d%%)\n" msgstr "Über Netzwerk geladen: %d (%3d%%)\n" #: stats.c:160 stats.c:261 #, c-format msgid "Moved to another location: %d (%3d%%)\n" msgstr "An andere Stelle verschoben: %d (%3d%%)\n" #: stats.c:164 stats.c:267 #, c-format msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "Geladen, abgeschnitten: %d (%3d%%)\n" #: stats.c:170 stats.c:274 #, c-format msgid "Non fatal errors: %d (%3d%%)\n" msgstr "Nichtfatale Fehler: %d (%3d%%)\n" #: stats.c:176 stats.c:281 #, c-format msgid "Not found documents: %d (%3d%%)\n" msgstr "Nicht gefundene Dokumente: %d (%3d%%)\n" #: stats.c:182 stats.c:288 #, c-format msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "Documente mit fatalen Fehlern: %d (%3d%%)\n" #: stats.c:188 #, c-format msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "Dokumente mit unbekanntem Status: %d (%3d%%)\n" #: stats.c:296 #, c-format msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "Dokumente mit unbekanntem Status: %d (%3d%%)\n" #: stats.c:357 msgid "Pavuk: save status page" msgstr "Pavuk: speichere Statusseite" #: stats.c:378 stats.c:530 msgid "Not available yet" msgstr "Noch nicht verfügbar" #: stats.c:458 msgid "Pavuk: status page" msgstr "Pavuk: Statusseite" #: stats.c:476 msgid "Status page" msgstr "Statusseite" # gauthinfo.c:574 #: stats.c:487 msgid "Save ..." msgstr "Speichern..." #: stats.c:494 msgid "Refresh" msgstr "Aktualisieren" #: stats.c:519 msgid "Try download" msgstr "Versuche zu laden" #: tag_pattern.c:35 msgid "Bad -tag_pattern tag wildcard pattern\n" msgstr "Falsche -tag_pattern Wildcard-Muster-Marke\n" #: tag_pattern.c:42 msgid "Bad -tag_pattern attribute wildcard pattern\n" msgstr "Falsches -tag_pattern Wildcard-Musterattribut\n" #: tag_pattern.c:49 msgid "Bad -tag_pattern url wildcard pattern\n" msgstr "Falsches -tag_pattern URL-Wildcard-Muster\n" #: tag_pattern.c:64 msgid "Bad -tag_rpattern tag RE pattern\n" msgstr "Falscher regulärer Ausdruck für -tag_rpattern Marke\n" #: tag_pattern.c:66 msgid "Bad -tag_rpattern attribute RE pattern\n" msgstr "Falscher regulärer Ausdruck für -tag_rpattern Attribut\n" #: tag_pattern.c:68 msgid "Bad -tag_rpattern url RE pattern\n" msgstr "Falscher regulärer Ausdruck für -tag_rpattern URL\n" #: tools.c:104 msgid "no error" msgstr "Kein Fehler" #: tools.c:109 msgid "host not found" msgstr "Host nicht gefunden" #: tools.c:114 msgid "temporary error (try again later)" msgstr "Temporärer Fehler (bitte später wiederversuchen)" #: tools.c:119 msgid "non recoverable error" msgstr "Nichtbehebbarer Fehler" #: tools.c:124 msgid "name is valid, but doesn't have an IP address" msgstr "Name ist gültig, besitzt aber keine IP-Adresse" #: tools.c:128 msgid "unknown hostname translation error" msgstr "Unbekannter Hostnamen-Übersetzungs-Fehler" #: tools.c:307 msgid "" "Warning: locking not supported ... don't run multiple processes or threads!\n" msgstr "" "Warnung: Locking nicht unterstützt ... keine parallelen Prozesse oder " "Threads starten!\n" #: tools.c:337 tools.c:366 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "Warte, dass Sperre aufgehoben wird auf FD: %d\n" #: uconfig.c:1038 msgid "Bad parameter - Working subdirectory" msgstr "Falscher Parameter - Arbeits-Unterverzeichnis" #: uconfig.c:1167 msgid "Bad parameter - Cache directory" msgstr "Falscher Parameter - Cache-Verzeichnis" #: uexit.c:29 msgid "Error occured while executing user-exit script" msgstr "Fehler während Ausführung des Benutzer-Exit-Skriptes aufgetreten" #: update_links.c:36 #, c-format msgid "Entering directory %s\n" msgstr "Wechsle ins Verzeichnis %s\n" #: update_links.c:67 #, c-format msgid "Relocating %s\n" msgstr "Verschiebe %s\n" #: update_links.c:71 #, c-format msgid "Omitting %s\n" msgstr "Lasse %s aus\n" #: update_links.c:85 #, c-format msgid "Leaving directory %s\n" msgstr "Verlasse Verzeichnis %s\n" #: update_links.c:102 #, c-format msgid "Can't open directory %s\n" msgstr "Kann Verzeichnis %s nicht öffnen\n" #: url.c:1197 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "Nichtunterstützter URL-Typ \"%s\"\n" #: url.c:1345 msgid "Moved to already processed URL.\n" msgstr "Zu bereits verarbeiteter URL verschoben.\n" #: url.c:3017 msgid "Missing specification of URL in request\n" msgstr "Fehlende Spezifikation der URL in Anforderung\n" #: url.c:3027 msgid "Missing request fields specification for POST request\n" msgstr "Fehlende Anforderungsfeld-Spezifikation für POST-Anforderung\n" #: url.c:3035 msgid "Multipart encoding not supported with GET requests\n" msgstr "Multipart-Encoding wird bei GET-Anforderungen nicht unterstützt\n" pavuk-0.9.35/po/cs.po0000644000175000001440000041012610151073675011247 00000000000000# Czech message catalog form pavuk web graber. # Copyright (C) 1998,1999 Free Software Foundation, Inc. # Petr Vyhnalek , 1998, 1999 # Petr Èech , 1999, 2000, 2001 msgid "" msgstr "" "Project-Id-Version: pavuk-0.9pl28\n" "POT-Creation-Date: 2001-07-30 10:14+0200\n" "PO-Revision-Date: 2001-08-22 22:31+0200\n" "Last-Translator: Petr Èech \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: abstract.c:46 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "Pozastavuji stahování na %d sekund.\n" #: abstract.c:84 doc.c:550 msgid "File redirect\n" msgstr "Pøesmìrování na soubor\n" #: abstract.c:120 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "Ètu kopii z místní NS cache - %s\n" #: abstract.c:152 #, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "Ètu kopii z místní Mozilla cache - %s\n" #: abstract.c:185 #, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "Ètu kopii z místní MSIE cache - %s\n" #: abstract.c:221 msgid "Unsupported URL\n" msgstr "Nepodporované URL\n" #: abstract.c:341 abstract.c:377 msgid "Warning: broken ftp transfer ...\n" msgstr "Pozor: poru¹ený FTP pøenos ...\n" #: abstract.c:351 msgid "Error removing FTP document from remote server\n" msgstr "Chyba pøi odstraòování FTP dokumentu ze vzdáleného serveru\n" #: abstract.c:496 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "Chyba ètení dokumentu v pøenosovém kódování \"chunked\" !\n" #: ainterface.c:118 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "Odstraòuji nepodporované URL: %s\n" #: ainterface.c:199 msgid "Specify at least one starting URL!" msgstr "Uveïte alespoò jednu startovací URL adresu!" #: ainterface.c:201 msgid "Specify at least one starting URL!\n" msgstr "Uveïte alespoò jednu startovací URL adresu!\n" #: ainterface.c:472 msgid "Can't list available message catalogs\n" msgstr "Nelze vypsat seznam dostupnych pøekladù\n" #: authinfo.c:107 msgid "Bad section - specify protocol\n" msgstr "©patná sekce - specifikuje protokol\n" #: authinfo.c:112 msgid "Bad section - specify hostname\n" msgstr "©patná sekce - specifikuj jméno serveru\n" #: authinfo.c:159 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "Nemohu zpracovat: \"%s\"\n" #: authinfo.c:179 #, c-format msgid "Bad protocol - %s\n" msgstr "©patný protokol - %s\n" #: authinfo.c:190 #, c-format msgid "Bad port number %s\n" msgstr "©patné èíslo portu %s\n" #: authinfo.c:211 #, c-format msgid "Unknown auth type - %s\n" msgstr "Neznámý typ autorizace - %s\n" #: cleanup.c:60 msgid "press any key to exit\n" msgstr "stisknìte klávesu k ukonèení\n" #: cmdparse.c:129 #, c-format msgid "Error parsing commandline at: %s\n" msgstr "Chyba pøi zpracování pøíkazové øádky na: %s\n" #: cmdparse.c:186 #, c-format msgid "Unable to parse commandline: %s\n" msgstr "Chyba pøi zpracování pøíkazové øádky: %s\n" #: config.c:44 msgid "Level order" msgstr "Øazení podle hloubky" #: config.c:45 msgid "Level order, inline first" msgstr "Øazení podle houbky, vlo¾ené nejdøíve" #: config.c:46 msgid "Pre order" msgstr "Setøídìné" #: config.c:47 msgid "Pre order, inline first" msgstr "Setøídìné, vlo¾ené nejdøíve" #: config.c:115 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "Pou¾ití: %s [parametry] [libovolný poèet URL]\n" "pavuk-%s %s\n" #: config.c:131 #, c-format msgid "Type \"%s --help\" for long help\n" msgstr "Napi¹te \"%s --help\" pro podrobnou nápovìdu\n" #: config.c:139 msgid "Optional features available :\n" msgstr "Dostupné volitelné funkce a vlastnosti :\n" #: config.c:141 msgid " - Debug mode\n" msgstr " - Ladící mód\n" #: config.c:145 msgid " - GNU gettext internationalization of messages\n" msgstr " - internacionalizace zpráv pomocí GNU gettext\n" #: config.c:149 msgid " - flock() document locking\n" msgstr " - zamykání souborù pomocí flock()\n" #: config.c:153 msgid " - fcntl() document locking\n" msgstr " - zamykání souborù pomocí fcntl()\n" #: config.c:158 msgid " - Gtk GUI interface\n" msgstr " - Gtk grafické rozhraní\n" #: config.c:161 msgid " - URL tree preview\n" msgstr " - náhled URL stromu\n" #: config.c:166 msgid " - http over SSL\n" msgstr " - http pøes SSL\n" #: config.c:171 msgid " - Socks v4 proxy support\n" msgstr " - podpora Socks v4 proxy\n" #: config.c:173 msgid " - Socks v5 proxy support\n" msgstr " - podpora Socks v5 proxy\n" #: config.c:177 msgid " - with filesystem free space checking\n" msgstr " - s testem volného místa na disku\n" #: config.c:181 msgid " - with optional regex patterns in -fnrules and -*rpattern options\n" msgstr " - s volitelnými regulárnímy výrazy ve volbách -fnrules a -*rpattern\n" #: config.c:185 msgid " - with POSIX regexp\n" msgstr " - s POSIX regulárnímy výrazy\n" #: config.c:189 msgid " - with Bell V8 regexp\n" msgstr " - s Bell V8 regulárnímy výrazy\n" #: config.c:193 msgid " - with BSD regexp\n" msgstr " - s BSD regulárnímy výrazy\n" #: config.c:197 msgid " - with GNU regexp\n" msgstr " - s GNU regulárnímy výrazy\n" #: config.c:201 msgid " - with PCRE regexp\n" msgstr " - s PCRE regulárnímy výrazy\n" #: config.c:205 msgid " - with support for loading files from Netscape browser cache\n" msgstr " - s podporou naèítání souborù z cache prohlí¾eèe Netscape\n" #: config.c:209 msgid "" " - with support for detecting whether pavuk is running as background job\n" msgstr " - s podporou detekce bìhu pavuka na pozadí\n" #: config.c:213 msgid " - with multithreading support\n" msgstr " - s podporou více vláken\n" #: config.c:217 msgid " - with NTLM authorization support\n" msgstr " - s podporou NTLM autorizace\n" #: config.c:221 msgid " - with JavaScript bindings\n" msgstr " - s JavaScriptem\n" #: config.c:295 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "HTML tag nepodporován : %s.%s\n" #: config.c:654 msgid "Error parsing commandline\n" msgstr "Chyba pøi zpracování pøíkazové øádky\n" #: config.c:661 #, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "Nedostateèný poèet parametrù pro volbu \"-%s\"\n" #: config.c:668 #, c-format msgid "Unknown option %s\n" msgstr "Neznámá volba %s\n" #: config.c:675 #, c-format msgid "Wrong format of option %s\n" msgstr "Chybný formát volby %s\n" #: config.c:684 #, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "VAROVÁNÍ: volba \"-%s\" není podporována v souèasné konfiguraci!\n" #: config.c:697 #, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "Prosím specifikuj èíslo s parametrem \"-%s\"\n" #: config.c:762 config.c:1113 http_proxy.c:120 #, c-format msgid "Unknown port \"%s\"\n" msgstr "Neznámy port \"%s\"\n" #: config.c:778 config.c:1126 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "©patné autorizaèní schéma \"%s\"\n" #: config.c:788 config.c:1136 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "Neznamý mód \"%s\"\n" #: config.c:810 #, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "Prosím specifikujte reálné èíslo s parametrem \"-%s\"\n" #: config.c:829 #, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "Prosím specifikujte správnou podmínku pro -%s (%s)\n" #: config.c:852 #, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "Prosím specifikujte správný RE s parametrem \"-%s\"\n" #: config.c:863 config.c:1248 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "Neznámá strategie výbìru URL - \"%s\"\n" #: config.c:871 config.c:1259 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "Neznama verse SSL - \"%s\"\n" #: config.c:880 config.c:1270 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "Neplatná dodateèná HTTP hlavièka - \"%s\"\n" #: config.c:903 config.c:1293 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "Chybná specifikace po¾adavku - \"%s\"\n" #: config.c:948 #, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "©patný parametr pro volbu \"-%s\"\n" #: config.c:964 #, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "Chybný parametr èíselného seznamu \"%s\" pro volbu \"-%s\"\n" #: config.c:981 #, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "" "Chybný parametr pøihla¹ovací procedury k FTP serveru\n" " - \"%s\" pro volbu \"-%s\"\n" #: config.c:1031 #, c-format msgid "WARNING: option \"%s\" not supported in current configuration!\n" msgstr "VAROVÁNÍ: volba \"%s\" není podporována v souèasné konfiguraci!\n" #: config.c:1055 #, c-format msgid "Please specify number \"%s\"\n" msgstr "Prosím specifikuj èíslo \"%s\"\n" #: config.c:1073 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "Je povoleno pouze \"true\" a \"false\": \"%s\"\n" #: config.c:1147 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "©patný parametr èasu \"%s\"\n" #: config.c:1178 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "Prosím specifikujte reálné èíslo \"%s\"\n" #: config.c:1195 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "Prosím specifikujte správné argumenty pro %s\n" #: config.c:1207 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "Prosím specifikujte správnou podmínku pro %s (%s)\n" #: config.c:1235 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "Prosím specifikujte správný RE \"%s\"\n" #: config.c:1327 #, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "Neplatné nastavení js_transform - \"%s\"\n" #: config.c:1347 #, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "Chybná polo¾ka v èíselném seznamu - \"%s\"\n" #: config.c:1362 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "Chybné urèení pøihla¹ovací procedury k FTP serveru \"%s\".\n" #: config.c:1388 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "Nemohu oddìlit \"%s\"\n" #: config.c:1430 #, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "CHYBA: Naètení scénáøe selhalo (%s)\n" #: cookie.c:216 #, c-format msgid "Unable to parse : %s\n" msgstr "Nemohu oddìlit : %s\n" #: cookie.c:389 msgid "Updating cookie file\n" msgstr "Aktualizace souboru s cookies\n" #: cookie.c:418 msgid "Cookie file has changed - > synchronizing\n" msgstr "Soubor s cookie se zmìnil -> synchronizuji\n" #: cookie.c:567 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "Server %s se pokou¹í nastavit cookie pro doménu %s\n" #: cookie.c:578 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "Odstraòuji cookie ze zakázané domény %s\n" #: debugl.c:16 msgid "HTML parsers" msgstr "HTML parser" #: debugl.c:17 msgid "Server responses" msgstr "Odpovìdi serveru" #: debugl.c:18 msgid "Client requests" msgstr "Po¾adavky klientù" #: debugl.c:19 msgid "Procedure calling" msgstr "Volání procedur" #: debugl.c:20 msgid "File locking" msgstr "Zamykání souborù" #: debugl.c:21 msgid "Networking code" msgstr "Sí»ování" #: debugl.c:22 msgid "Miscelanous" msgstr "Rùzné" #: debugl.c:23 msgid "Extended user infos" msgstr "Roz¹íøené informace o u¾ivateli" #: debugl.c:24 msgid "Multithreading - locking" msgstr "Multithreading - zamykání" #: debugl.c:25 msgid "Multithreading - threads" msgstr "Multithreading - vlákna" #: debugl.c:26 msgid "POST request data" msgstr "data POST dotazu" #: debugl.c:27 msgid "Limiting conditions" msgstr "Omezující podmínky" #: debugl.c:66 #, c-format msgid "Bad debug level selection : %s\n" msgstr "Chybná úroveò ladících hlá¹ení : %s\n" #: decode.c:184 msgid "decode" msgstr "decode" #: digest_auth.c:155 msgid "Trying to do HTTP Digest authorization\n" msgstr "Pokus o HTTP Digest autorizaci\n" #: digest_auth.c:202 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "Pokus o HTTP Proxy Digest autorizaci\n" #: dinfo.c:368 dinfo.c:387 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr "V .pavuk_info je chybnì polo¾ka %s\n" #: doc.c:297 msgid "Transfering data" msgstr "Pøenos dat" #: doc.c:312 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt: SO_RCVBUF selhalo" #: doc.c:333 msgid "storing document" msgstr "ukládám dokument" #: doc.c:399 msgid "Document transfer data" msgstr "Pøená¹ím data dokumentu" #: doc.c:420 msgid "Data transfer done" msgstr "Pøenos dat ukonèen" #: doc.c:597 #, c-format msgid "Trying to resume from position %d \n" msgstr "Pokus dokonèit pøenos od pozice %d \n" #: doc.c:662 msgid "Opening connection" msgstr "Otvírám spojení" #: doc.c:686 msgid "Loading local copy\n" msgstr "Naèítám místní kopii\n" #: doc.c:912 msgid "File may be truncated\n" msgstr "Soubor mù¾e být neúplný\n" #: doc.c:936 msgid "Decoding document - OK\n" msgstr "Dekódování dokumentu - OK\n" #: doc.c:939 msgid "Decoding document - failed\n" msgstr "Dekódování dokumentu - selhalo\n" #: doc.c:942 msgid "Unsupported document encoding\n" msgstr "Nepodporované kódování dokumentu\n" #: doc.c:946 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "Obdr¾en zakódovaný dokument, ale odkódování není povoleni (nezmìnìn)\n" #: doc.c:1116 #, c-format msgid "Removing improper document : %s\n" msgstr "Ma¾u neaktualní dokument : %s\n" #: doc.c:1178 doc.c:1244 msgid "Local file" msgstr "Lokální soubor" #: doc.c:1184 msgid "Gopher/Text File" msgstr "Gopher/Textový soubor" #: doc.c:1187 msgid "Gopher/Directory" msgstr "Gopher/Adresáø" #: doc.c:1190 msgid "Gopher/CSO phone book" msgstr "Gopher/CSO telefonní seznam" #: doc.c:1193 msgid "Gopher/Error" msgstr "Gopher/Chyba" #: doc.c:1196 msgid "Gopher/BINHEX" msgstr "Gopher/BINHEX" #: doc.c:1199 msgid "Gopher/DOS bin" msgstr "Gopher/DOS bin" #: doc.c:1202 msgid "Gopher/UUencoded" msgstr "Gopher/UUencoded" #: doc.c:1205 msgid "Gopher/Search index" msgstr "Gopher/Vyhledavací index" #: doc.c:1208 msgid "Gopher/Telnet session" msgstr "Gopher/Telnet sezení" #: doc.c:1211 msgid "Gopher/bin" msgstr "Gopher/bin" #: doc.c:1214 msgid "Gopher/Duplicated server" msgstr "Gopher/Duplikaèní server" #: doc.c:1217 msgid "Gopher/TN3270" msgstr "Gopher/TN3270" #: doc.c:1220 msgid "Gopher/GIF" msgstr "Gopher/GIF" #: doc.c:1223 msgid "Gopher/Image" msgstr "Gopher/Obrázek" #: doc.c:1229 msgid "FTP/Directory" msgstr "FTP/Adresáø" #: doc.c:1231 msgid "FTP/File" msgstr "FTP/Soubor" #: doc.c:1235 msgid "FTPS/Directory" msgstr "FTPS/Adresáø" #: doc.c:1237 msgid "FTPS/File" msgstr "FTPS/Soubor" #: doc.c:1240 msgid "Unsupported type" msgstr "Nepodporovaný typ" #: doc.c:1447 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s] \r" msgstr "V: %s [R: %s] [OD: %s] [SÈ: %s] \r" #: doc.c:1450 #, c-format msgid "S: %s [R: %s] [ET: %s] \r" msgstr "V: %s [R: %s] [OD: %s] \r" #: doc.c:1490 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "Èekám na uvolnìní zámku na dokumentu: %s\n" #: doc.c:1730 msgid "Rewriting links inside parent documents" msgstr "Pøepisuji odkazy v rodièovských dokumentech" #: errcode.c:21 #, c-format msgid "%s: user break\n" msgstr "%s: pøeru¹ení u¾ivatelem\n" #: errcode.c:28 #, c-format msgid "%s: OK\n" msgstr "%s: OK\n" #: errcode.c:31 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s: CHYBA: ukládání dokumentù\n" #: errcode.c:34 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s: CHYBA: otevøení souboru\n" #: errcode.c:37 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "%s: CHYBA: URL lokalního adresáøe není podporováno\n" #: errcode.c:40 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s: CHYBA: neznamá\n" #: errcode.c:43 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s: CHYBA: dokument je uzamèený\n" #: errcode.c:46 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s: CHYBA: ètení soketu\n" #: errcode.c:49 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s: ZPRÁVA: vet¹í ne¾ maximalní povolená velikost\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "%s: ZPRÁVA: zakázáno u¾ivatelskùm skriptem pro pøístup\n" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s: ZPRÁVA: men¹í ne¾ minimální povolená velikost\n" #: errcode.c:58 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s: ZPRÁVA: tento mine typ dokumentu není podporován (%s)\n" #: errcode.c:61 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s: CHYBA: chyba pøi komunikaci s proxy\n" #: errcode.c:64 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s: CHYBA: pøenos pøeru¹en u¾ivatelem\n" #: errcode.c:67 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "" "%s: ZPRÁVA: èas modifikace souboru neodpovídá specifikovanému intervalu\n" #: errcode.c:70 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s: CHYBA: soubor má nulovou velikost - mo¾ná chyba\n" #: errcode.c:73 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s: CHYBA: dokument byl ji¾ zpracován\n" #: errcode.c:76 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s: ZPRÁVA: dokument zakázán u¾ivatelem\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "%s: ZPRÁVA: dokument zakázán omezujícími pravidly\n" #: errcode.c:82 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "%s: POZOR: ni¾¹í ne¾ povolená minimální rychlost\n" #: errcode.c:85 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "%s: POZOR: pøekroèena maximální velikost souboru, zkráceno\n" #: errcode.c:88 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "%s: POZOR: maximální velikost pøenosu pøekroèena, pøeru¹uji pøenos\n" #: errcode.c:91 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "%s: CHYBA: málo volného místa na disku, konèím pøenos\n" #: errcode.c:94 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "%s: POZOR: pøekroèena maximální doba bìhu, stahování skonèí\n" #: errcode.c:97 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s: CHYBA: neznamá FTP chyba\n" #: errcode.c:100 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s: CHYBA: FTP server nepodporuje REST pøíkaz\n" #: errcode.c:104 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s: CHYBA: není mo¾né získat obsah FTP adresáøe\n" #: errcode.c:107 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s: CHYBA: není mo¾né se spojit s FTP serverem\n" #: errcode.c:110 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s: CHYBA: FTP autentizace - ¹patné jméno\n" #: errcode.c:113 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s: CHYBA: FTP autentizace - ¹patné heslo\n" #: errcode.c:116 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "%s: CHYBA: FTP proxy autentifikace - ¹patné jméno\n" #: errcode.c:119 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s: CHYBA: FTP proxy autentifikace - ¹patné heslo\n" #: errcode.c:122 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s: CHYBA: nemù¾u otevøít FTP spojení\n" #: errcode.c:125 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s: CHYBA: nemù¾u pøenést soubor z FTP serveru\n" #: errcode.c:128 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s: CHYBA: FTP server nepodporuje MDTM pøíkaz\n" #: errcode.c:131 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s: CHYBA: soubor z FTP serveru je zkrácen\n" #: errcode.c:135 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s: ZPRÁVA: dokument není potøeba znovu pøená¹et, je aktualní\n" #: errcode.c:138 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s: ZPRÁVA: FTP pøenos není povolený podle pravidel\n" #: errcode.c:141 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "%s: UPOZORNÌNÍ: pøenos obsahu FTP adresáøe není povolený (-FTPdir)\n" #: errcode.c:144 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "%s: VAROVÁNÍ: FTP login_handshake selhal\n" #: errcode.c:147 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s: CHYBA: neznamá HTTP chyba\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s: CHYBA: nemù¾u se spojit s HTTP serverem\n" #: errcode.c:153 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "%s: CHYBA: HTTP nepodporuje èásteèný pøenos obsahu souboru\n" #: errcode.c:156 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "%s: CHYBA: po¹kozený HTTP po¾adavek\n" #: errcode.c:159 #, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%s: CHYBA: nelze pøeèíst HTTP odpovìï\n" #: errcode.c:162 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "%s: CHYBA: neoèekávaný HTTP kód po pokusu o napojení\n" #: errcode.c:166 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "%s: CHYBA: nelze poslat data HTTP po¾adavku\n" #: errcode.c:169 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s: ZPRÁVA: pøesmìrování\n" #: errcode.c:172 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s: CHYBA: HTTP dokument je neúplný\n" #: errcode.c:175 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s: CHYBA: kruhové pøesmìrování!\n" #: errcode.c:178 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s: CHYBA: pøesmìrování na nepodporované URL\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s: CHYBA: není mo¾né se spojit s proxy serverem\n" #: errcode.c:184 #, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "%s: CHYBA: neplatný redirekt od serveru\n" #: errcode.c:187 #, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "%s: CHYBA: nelze provést NTML autorizaci\n" #: errcode.c:190 #, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "%s: CHYBA: nelze provést HTTP Digest autorizaci\n" #: errcode.c:193 #, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "%s: CHYBA: nelze provést NTML proxy autorizaci\n" #: errcode.c:196 #, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "%s: CHYBA: nelze provést HTTP Proxy Digest autorizaci\n" #: errcode.c:199 #, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s: CHYBA: HTTP klient poslal ¹patný po¾adavek\n" #: errcode.c:202 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s: CHYBA: je po¾adována HTTP autorizace\n" #: errcode.c:205 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s: CHYBA: je po¾adována autorizace u HTTP proxy\n" #: errcode.c:208 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "%s: CHYBA: HTTP placená slu¾ba\n" #: errcode.c:211 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "%s: CHYBA: zakazáný HTTP po¾adavek\n" #: errcode.c:214 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s: CHYBA: HTTP dokument nenalezen\n" #: errcode.c:217 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s: CHYBA: chyba HTTP serveru\n" #: errcode.c:220 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "%s: CHYBA: odpovìï HTTP serveru je `connection timeout'\n" #: errcode.c:223 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "%s: CHYBA: odpovìï HTTP serveru je `conflict'\n" #: errcode.c:226 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s: CHYBA: dokument byl odstranìn z HTTP serveru\n" #: errcode.c:229 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "%s: CHYBA: musíte pou¾ít pøístup pøez proxy pro toto URL\n" #: errcode.c:232 #, c-format msgid "%s: ERROR: 306\n" msgstr "%s: CHYBA: 306\n" #: errcode.c:235 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" "%s: CHYBA: pou¾itá HTTP medona není podporována nebo povolena pro toto URL\n" #: errcode.c:238 #, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "%s: CHYBA: klient nepøijímá MIME typ po¾adovaného URL\n" #: errcode.c:241 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "%s: CHYBA: v hlavièce po¾adavku chybí polo¾ka Content-Length:\n" #: errcode.c:244 #, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "%s: CHYBA: podmínky pro po¾adavek nesplnìny pro toto URL\n" #: errcode.c:247 #, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s: CHYBA: tìlo pøíli¹ veliké\n" #: errcode.c:250 #, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s: CHYBA: URL po¾adavku pøíli¹ dlouhé\n" #: errcode.c:253 #, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "" "%s: CHYBA: prostøedek ve formátu není podporován pro tento dotaz\n" "\n" #: errcode.c:256 #, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s: CHYBA: po¾adován neplatný úsek dokumentu\n" #: errcode.c:259 #, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "%s: CHYBA: nepodaøilo se splnit oèekávání od po¾adavku\n" #: errcode.c:262 #, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "%s: CHYBA: po¾adovaná HTTP metoda není podporována serverem\n" #: errcode.c:265 #, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s: CHYBA: pøístup pøez bránu selhal pro toto URL\n" #: errcode.c:268 #, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "%s: CHYBA: HTTP není nyní k dispozici. Zkuste to za pozdìji\n" #: errcode.c:271 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "%s: CHYBA: timeout v komunikaci mezi bránou a vzdáleným serverem\n" #: errcode.c:274 #, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "%s: CYBA: HTTP verze v po¾adavku není podporována vzdáleným serverem\n" #: errcode.c:277 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s: CHYBA: nemù¾u se spojit s GOPHER serverem\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%s: CHYBA: neznámá chyba GOPHER protokolu\n" #: errcode.c:283 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s: CHYBA: nemù¾u se spojit s HTTPS serverem\n" #: errcode.c:286 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "%s: CHYBA: nelze vytvoøit kontrolní SSL spojení pro FTPS server\n" #: errcode.c:289 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s: CHYBA: tento FTP server nepodporuje SSL spojení\n" #: errcode.c:292 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "%s: CHYBA: nelze vytvoøit datové SSL spojení pro FTPS server\n" #: errcode.c:295 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s: CHYBA: neznamá HTTP chyba : %d\n" #: file.c:35 msgid "Can't open directory\n" msgstr "Nemù¾u otevøít adresáø\n" #: form.c:1074 form.c:1139 form.c:1296 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "Nepodporovaný typ formuláøe v kontextu: %d\n" #: form.c:1395 msgid "Browse" msgstr "Prohlí¾eè" #: form.c:1410 msgid "URLs with forms" msgstr "URL s formuláøi" #: form.c:1419 msgid "Refresh URL list" msgstr "Obnovit seznam URL" #: form.c:1453 form.c:1454 url.c:1002 msgid "unknown" msgstr "neznámý" #: form.c:1604 msgid "Pavuk: load form file" msgstr "Pavuk: naèti soubor s formuláøi" #: form.c:1628 msgid "Fill forms" msgstr "Vyplòte formuláø" #: form.c:1635 msgid "Form number: " msgstr "Èíslo formuláøe: " #: form.c:1647 msgid "Action URL: " msgstr "URL akce formuláøe: " #: form.c:1656 gui_common.c:706 msgid "Request method: " msgstr "Metoda dotazu: " #: form.c:1665 gui_common.c:725 gui_tree.c:140 msgid "Request encoding: " msgstr "Kódování dotazu: " #: form.c:1674 msgid "HTML form content" msgstr "Obsah HTML formuláøe" #: form.c:1689 msgid "Load HTML file ..." msgstr "Naèti HTML soubor ..." #: form.c:1742 msgid "Pavuk: HTML forms editor" msgstr "Pavuk: editor HTML formuláøe" #: form.c:1764 gui_jscons.c:192 msgid "Close" msgstr "Zavøít" #: ftp.c:118 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "" "ftp_get_response: ovládací FTP spojení bylo uzavøeno pøed jakoukoli " "odpovìdí\n" #: ftp.c:189 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "ftp: setsockopt TOS - THROUGHPUT selhalo" #: ftp.c:551 msgid "Re-using established FTP control connection\n" msgstr "Dal¹í pou¾ití øídícího FTP spojení\n" #: ftp.c:758 http.c:1392 msgid "Size differs, regeting whole\n" msgstr "Li¹í se velikost - pøenos startuje od zaèátku\n" #: ftp.c:768 http.c:1278 http.c:1402 msgid "Modified from last download - regeting whole\n" msgstr "Dokument byl modifikován od posledního pøenosu - pøenos od zaèátku\n" #: ftp.c:849 msgid "" "Warning: FTP server undertand REST command, but can't handle it properly.\n" msgstr "Varování: FTP server rozumí pøíkazu REST, ale ¹patnì.\n" #: ftp.c:1094 ftp.c:1421 #, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%d%s\n" "\n" "\n" "

          List of FTP directory %s://%s:%d/%s


            " msgstr "" "\n" "\n" "\n" "Adresáø z %s://%s:%d%s\n" "\n" "\n" "

            Obsah FTP adresáøe %s://%s:%d/%s


              " #: ftp.c:1490 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" "CHYBA: nelze rozlo¾it øádku FTP seznamu :\n" "\t%s\n" #: ftp.c:1683 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "Vytváøím symbolický odkaz z \"%s\" na \"%s\"\n" #: gauthinfo.c:107 msgid "Pavuk: Save auth. info file" msgstr "Pavuk: Ulo¾ soubor s autentikacemi" #: gauthinfo.c:159 msgid "Pavuk: Load auth. info file" msgstr "Pavuk: Naèítám autentikaèní informace" #: gauthinfo.c:340 msgid "Pavuk: Authorization info editor" msgstr "Pavuk: Editor autentikaèních informací" #: gauthinfo.c:359 msgid "Protocol" msgstr "Protokol" #: gauthinfo.c:360 gui_common.c:1819 msgid "Host" msgstr "Server" #: gauthinfo.c:361 msgid "User" msgstr "U¾ivatel" #: gauthinfo.c:362 msgid "Password" msgstr "Heslo" #: gauthinfo.c:363 msgid "Base dir." msgstr "Základní adresáø." #: gauthinfo.c:364 msgid "Realm" msgstr "Oblast" #: gauthinfo.c:365 msgid "Scheme" msgstr "Schéma" #: gauthinfo.c:394 msgid "Protocol: " msgstr "Protokol: " #: gauthinfo.c:419 gui_common.c:1837 gui_common.c:1898 gui_common.c:1921 #: gui_common.c:1950 msgid "Host: " msgstr "Server: " #: gauthinfo.c:428 msgid "User: " msgstr "U¾ivatel: " #: gauthinfo.c:437 gui_common.c:2120 gui_common.c:2170 gui_common.c:2194 msgid "Password: " msgstr "Heslo: " #: gauthinfo.c:446 msgid "Base directory: " msgstr "Základní adresáø: " #: gauthinfo.c:455 msgid "Realm: " msgstr "Oblast: " #: gauthinfo.c:473 gui_common.c:2064 msgid "User auth. scheme" msgstr "U¾ivatelské aut. schéma" #: gauthinfo.c:478 msgid "Base auth. scheme" msgstr "Základní aut. schéma" #: gauthinfo.c:483 gui_common.c:2066 msgid "Digest auth. scheme" msgstr "Aut. schéma digest" #: gauthinfo.c:489 gui_common.c:2068 msgid "NTLM auth. scheme" msgstr "NTML auth. schéma" #: gauthinfo.c:500 gui_addurl.c:171 gui_common.c:629 gui_common.c:778 #: gui_common.c:957 gui_common.c:1057 gui_common.c:1847 gui_common.c:2620 #: gui_common.c:2868 gui_tools.c:648 msgid "Append" msgstr "Pøidej" #: gauthinfo.c:508 gui_common.c:645 gui_common.c:785 gui_common.c:973 #: gui_common.c:1064 gui_common.c:1853 gui_common.c:2626 gui_common.c:2874 #: gui_tools.c:670 msgid "Modify" msgstr "Zmìnit" #: gauthinfo.c:516 gui_common.c:654 gui_common.c:982 gui_common.c:1859 #: gui_common.c:2632 gui_common.c:2880 gui_tools.c:683 msgid "Clear" msgstr "Odstranit" #: gauthinfo.c:524 gui_common.c:663 gui_common.c:792 gui_common.c:991 #: gui_common.c:1071 gui_common.c:1865 gui_common.c:2638 gui_common.c:2886 #: gui_tools.c:696 msgid "Delete" msgstr "Smazat" #: gauthinfo.c:537 gui_common.c:2963 gui_limits.c:512 gui_sched.c:131 msgid "OK" msgstr "OK" #: gauthinfo.c:548 gui_common.c:2972 gui_limits.c:521 msgid "Apply" msgstr "Pou¾ít" #: gauthinfo.c:556 msgid "Load" msgstr "Naèíst" #: gauthinfo.c:564 msgid "Save" msgstr "Ulo¾it" #: gauthinfo.c:575 gui_about.c:67 gui_addurl.c:180 gui_common.c:2988 #: gui_limits.c:537 gui_sched.c:140 gui_tree.c:657 gui_tree.c:797 stats.c:507 msgid "Cancel" msgstr "Zru¹it" #: gkeys.c:64 gkeys.c:82 gkeys.c:95 #, c-format msgid "Unable to parse: %s\n" msgstr "Nemohu oddìlit: %s\n" #: gkeys.c:117 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "Nelze vytvoøit soubor ~/.pavuk_keys\n" #: gkeys.c:121 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# Tento soubor byl vygenerován %s\n" "# Mù¾ete ho editovat, pokud budete opatrní!\n" "\n" #: gopher.c:65 msgid "********************* Gopher request **************\n" msgstr "********************* Gopher request **************\n" #: gopher.c:103 #, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%d/%s\n" "\n" "\n" "

              Directory of gopher://%s:%d/%s



                " msgstr "" "\n" "\n" "\n" "Adresáø gopher://%s:%d/%s\n" "\n" "\n" "

                Adresáø gopher://%s:%d/%s



                  " #: gopher.c:151 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" "Chyba pøi zpracování polo¾ky Gopher adresáøe:\n" "%s\n" #: gui_about.c:38 msgid "Pavuk: About" msgstr "Pavuk: O aplikaci" #: gui_about.c:60 #, c-format msgid "" "Pavuk %s %s\n" " \n" "an automatic WEB file grabber\n" " \n" "By Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " msgstr "" "Pavuk %s %s\n" " \n" "automatický stahovaè souborù\n" " \n" "vytvoøil ©tefan Ondrejièka\n" " \n" "(ondrej@idata.sk)\n" " \n" "èeské titulky: Petr VYHNÁLEK (petr.vyhnalek@email.cz)\n" " Petr Èech (cech@atrey.karlin.mff.cuni.cz)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " #: gui_api.c:168 #, c-format msgid "Processed: %5d" msgstr "Zpracováno: %5d" #: gui_api.c:170 #, c-format msgid "Queued: %5d" msgstr "Ve frontì: %5d" #: gui_api.c:172 #, c-format msgid "Failed: %4d" msgstr "Selhalo: %4d" #: gui_api.c:174 #, c-format msgid "Rejected: %5d" msgstr "Zakázáno: %5d" #: gui_api.c:475 gui_api.c:492 msgid "Start" msgstr "Start" #: gui_api.c:616 msgid "Starting ..." msgstr "Zaèínám ..." #: gui_api.c:681 msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "Pøíli¹ velká hodnota timeout pro grafickou implementaci\n" #: gui_addurl.c:73 gui_main.c:270 #, c-format msgid "Dropped URL : %s\n" msgstr "Pøeta¾ené URL : %s\n" #: gui_addurl.c:128 msgid "Pavuk: Append URL" msgstr "Pavuk: URL pøidáno" #: gui_addurl.c:140 msgid "New URL:" msgstr "Nové URL: " #: gui_common.c:580 gui_common.c:596 gui_main.c:803 msgid "URL" msgstr "URL" #: gui_common.c:597 msgid "Local filename" msgstr "Lokální soubor" #: gui_common.c:616 msgid "Request URL: " msgstr "URL po¾adavku: " #: gui_common.c:619 msgid "Local filename: " msgstr "Lokální soubor: " #: gui_common.c:687 msgid "Extended informations for HTTP POST request" msgstr "Roz¹íøené informace pro HTTP POST po¾adavek" #: gui_common.c:744 gui_common.c:1023 msgid "Query fields: " msgstr "Polo¾ky po¾adavku: " #: gui_common.c:758 gui_common.c:1037 gui_common.c:2563 msgid "Type" msgstr "Typ" #: gui_common.c:759 gui_common.c:1038 msgid "Name" msgstr "Jméno" #: gui_common.c:760 gui_common.c:1039 msgid "Value" msgstr "Hodnota" #: gui_common.c:804 gui_common.c:1083 msgid "Type: " msgstr "Typ: " #: gui_common.c:833 gui_common.c:1112 msgid "Name: " msgstr "Jméno: " #: gui_common.c:835 gui_common.c:1114 msgid "Value: " msgstr "Hodnota: " #: gui_common.c:865 gui_common.c:1144 msgid "Pavuk: Choose form field file" msgstr "Pavuk: vyber soubor pro polo¾ku formuláøe" #: gui_common.c:914 msgid "Form data" msgstr "Data formulá¾e" #: gui_common.c:942 msgid "Matching action URL: " msgstr "URL akce formuláøe: " #: gui_common.c:1206 msgid "Grabber I" msgstr "Stahovaè I" #: gui_common.c:1214 msgid "Cache Directory: " msgstr "Cache adresáø (strom): " #: gui_common.c:1217 msgid "Default URL prefix: " msgstr "Standardní prefix URL: " #: gui_common.c:1220 msgid "Separate info directory: " msgstr "Samostatný adresáø pro info soubory: " #: gui_common.c:1223 msgid "Index file name: " msgstr "Jméno indexového souboru: " #: gui_common.c:1226 msgid "Store file name: " msgstr "Ulo¾ jméno souboru: " #: gui_common.c:1229 msgid "Identity string: " msgstr "Identifikaèní øetìzec: " #: gui_common.c:1233 msgid "Netscape browser cache directory: " msgstr "Cache adresáø prohlí¾eèe Netscape: " #: gui_common.c:1236 msgid "Mozilla browser cache directory: " msgstr "Cache adresáø prohlí¾eèe Mozilla: " #: gui_common.c:1241 msgid "Browser: " msgstr "Prohlí¾eè: " #: gui_common.c:1245 msgid "Reminder command: " msgstr "Pøíkaz pro reminder: " #: gui_common.c:1248 msgid "Post command: " msgstr "Pøíkaz pro Post: " #: gui_common.c:1264 msgid "How many times retry on fail: " msgstr "Poèet opakování pøenosu pøi chybì: " #: gui_common.c:1267 msgid "How many moved links to follow: " msgstr "Poèet pøesmìrování dokumentù: " #: gui_common.c:1270 msgid "How many times to reget file: " msgstr "Maximum èásteèných pøenosù: " #: gui_common.c:1273 msgid "Document age before syncing with server: " msgstr "Staøí dokumentu pøed synchronizací se serverrem: " #: gui_common.c:1275 msgid " days " msgstr " dnù " #: gui_common.c:1281 msgid "Read buffer size: " msgstr "Velikost vyrovnávací pamìti pro ètení: " #: gui_common.c:1286 msgid " kB " msgstr " kB " #: gui_common.c:1292 msgid "Hash tables size: " msgstr "Velikost hash tabulek: " #: gui_common.c:1294 msgid " entries " msgstr " polo¾ek " #: gui_common.c:1308 msgid "Sleep time between transfers: " msgstr "Pøestávka mezi pøenosy: " #: gui_common.c:1310 msgid " sec." msgstr " sec." #: gui_common.c:1315 msgid "randomize" msgstr "náhodnì" #: gui_common.c:1321 msgid "Rollback amount on reget: " msgstr "Délka opakovaného pøenosu: " #: gui_common.c:1323 msgid " bytes" msgstr " bytù" #: gui_common.c:1329 msgid "Transfer quota: " msgstr "Maximální velikost pøenesených dat: " #: gui_common.c:1331 gui_common.c:1339 gui_common.c:1348 msgid " kB" msgstr " kB" #: gui_common.c:1337 msgid "File size quota: " msgstr "Maximální velikost souboru: " #: gui_common.c:1346 msgid "Filesystem freespace quota: " msgstr "Velikost volného místa na disku: " #: gui_common.c:1364 msgid "Number of downloading threads: " msgstr "Poèet stahovacích vláken: " #: gui_common.c:1392 msgid "Grabber II" msgstr "Stahovaè II" #: gui_common.c:1395 msgid "HTML document URL rewriting" msgstr "HTML dokument, pøepisuji URL" #: gui_common.c:1404 msgid "Rewrite URLs inside HTML doc." msgstr "Pøepi¹ odkazy v HTML dokumentech" #: gui_common.c:1412 msgid "Rewrite URLs to local when stored locally" msgstr "Pøepsat URL na místní pøi místním ulo¾ení" #: gui_common.c:1418 msgid "Rewrite all suitable URLs to local" msgstr "Pøepsat v¹echna vhodná URL na místní" #: gui_common.c:1424 msgid "Rewrite all URLs to local immediately" msgstr "Okam¾itì pøepsat v¹echna URL na místní" #: gui_common.c:1430 msgid "Rewrite all URLs to remote immediately" msgstr "Okam¾itì pøepsat v¹echna URL na vzdálená" #: gui_common.c:1436 msgid "Rewrite only one currently download URL" msgstr "Pøepi¹ pouze právì zpracovávané URL" #: gui_common.c:1442 msgid "Misc settings" msgstr "Rùzná nastavení" #: gui_common.c:1451 msgid "Always generate unique name for document" msgstr "V¾dy generuj jedineèné jméno dokumentu" #: gui_common.c:1456 msgid "Delete FTP document after succesful download" msgstr "Sma¾ FTP dokument po úspì¹ném sta¾ení" #: gui_common.c:1461 msgid "Preserve document modification time" msgstr "Ponechej èas modifikace dokumentu" #: gui_common.c:1466 msgid "Preserve FTP document permissions" msgstr "Zachovej práva dokumentu pøes FTP" #: gui_common.c:1471 msgid "Preserve FTP symbolic links paths" msgstr "Zachovej symbolické odkazy pøes FTP" #: gui_common.c:1476 msgid "Retrieve FTP symbolic links like files" msgstr "Stáhni symbolické odkazy pøes FTP jako soubory" #: gui_common.c:1482 msgid "Whole reget when partial not supported" msgstr "Pøenes celý dokument, kdy¾ to nejde po èástech" #: gui_common.c:1488 msgid "Use gzip encoding for transfer" msgstr "Pou¾ij kódování gzipem pro pøenos" #: gui_common.c:1493 msgid "Remove improper documents" msgstr "Sma¾ neaktuální dokumenty" #: gui_common.c:1498 msgid "Check transferred size of document" msgstr "Zkontroluj velikost pøeneseného dokumentu" #: gui_common.c:1503 msgid "Store directory URLs as index files" msgstr "Ukládej výpis adresáøe jako indexový soubor" #: gui_common.c:1508 msgid "Store info files with each document" msgstr "Ukládat informace o ka¾dém dokumentu" #: gui_common.c:1513 msgid "Send self URL as Referer for starting URLs" msgstr "Po¹li samotné URL jako Referer pro poèáteèní URL" #: gui_common.c:1518 msgid "Send If-Range header field when regeting" msgstr "Po¹lu hlavièku If-Range pøi reget" #: gui_common.c:1523 msgid "Show time of start and end of downloading" msgstr "Zobraz èas zaèátku a konce stahování" #: gui_common.c:1531 msgid "URL scheduling strategy: " msgstr "Strategie plánování URL: " #: gui_common.c:1628 msgid "Net" msgstr "Sít" #: gui_common.c:1635 msgid "Allowed protocols" msgstr "Povolené protokoly" #: gui_common.c:1644 msgid "HTTP" msgstr "HTTP" #: gui_common.c:1649 msgid "FTP" msgstr "FTP" #: gui_common.c:1654 msgid "Gopher" msgstr "Gopher" #: gui_common.c:1660 msgid "HTTPS" msgstr "HTTPS" #: gui_common.c:1665 msgid "FTPS" msgstr "FTPS" #: gui_common.c:1671 msgid "FTP data connection type " msgstr "typ datového FTP spojení" #: gui_common.c:1680 msgid "Active" msgstr "Aktivní" #: gui_common.c:1687 msgid "Passive" msgstr "Pasivní" #: gui_common.c:1694 msgid "Communication timeout: " msgstr "Timeout pøi sí»ové komunikaci: " #: gui_common.c:1707 msgid " min." msgstr " min." #: gui_common.c:1713 msgid "Maximal transfer rate: " msgstr "Maximální rychlost pøenosu: " #: gui_common.c:1726 gui_common.c:1745 msgid " kB/s" msgstr " kB/s" #: gui_common.c:1732 msgid "Minimal transfer rate: " msgstr "Minimální rychlost pøenosu: " #: gui_common.c:1751 msgid "Local interface address: " msgstr "Adresa místního rozhraní: " #: gui_common.c:1762 msgid "Additional HTTP headers: " msgstr "Dodateèné HTTP hlavièky: " #: gui_common.c:1773 msgid "Additional FTP list options: " msgstr "Dal¹í parametry pro pøíkaz FTP LIST: " #: gui_common.c:1786 msgid "Use wide listing of FTP directories" msgstr "Pou¾ij ¹iroký výpist FTP adresáøù" #: gui_common.c:1792 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "Uprav detekci neexistujících adresáøù na WuFTPd serverch" #: gui_common.c:1798 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "Pou¾ij protokol HTTP/1.1 pro HTTP komunikaci" #: gui_common.c:1804 msgid "FTP login handshake rules" msgstr "Pravidla pro pøihla¹ovací proceduru k FTP" #: gui_common.c:1820 msgid "Login handshake" msgstr "Procedura" #: gui_common.c:1840 msgid "Handshake: " msgstr "Procedura: " #: gui_common.c:1882 msgid "Proxy" msgstr "Proxy" #: gui_common.c:1888 msgid "Gopher proxy" msgstr "Gopher proxy" #: gui_common.c:1901 gui_common.c:1924 gui_common.c:1953 msgid "Port: " msgstr "Port: " #: gui_common.c:1905 msgid "Gopher via HTTP proxy" msgstr "Gopher pøes HTTP proxy" #: gui_common.c:1910 msgid "FTP proxy" msgstr "FTP proxy" #: gui_common.c:1927 msgid "FTP via HTTP proxy" msgstr "FTP pøes HTTP proxy" #: gui_common.c:1933 msgid "FTP via HTTP tunneling proxy" msgstr "FTP pøes HTTP tunel proxy" #: gui_common.c:1940 msgid "SSL proxy" msgstr "SSL proxy" #: gui_common.c:1957 msgid "HTTP proxy" msgstr "HTTP proxy" #: gui_common.c:1963 msgid "Proxy: " msgstr "Proxy: " #: gui_common.c:1968 msgid "Allow caching of documents" msgstr "Povolení pøenosu kopií (cache)" #: gui_common.c:2023 msgid "Languages" msgstr "Jazyky" #: gui_common.c:2026 msgid "Preffered languages" msgstr "Upøednostòované jazyky" #: gui_common.c:2031 msgid "Language code: " msgstr "Kód jazyku: " #: gui_common.c:2043 msgid "Preffered character sets" msgstr "Preferovaná znaková sada" #: gui_common.c:2048 msgid "Character set code: " msgstr "Kód znakové sady: " #: gui_common.c:2065 msgid "Basic auth. scheme" msgstr "Základní auth. schéma" #: gui_common.c:2075 msgid "Auth" msgstr "Autorizace" #: gui_common.c:2082 msgid "User authentification" msgstr "U¾ivatelská autentifikace" #: gui_common.c:2091 gui_common.c:2140 msgid "Scheme: " msgstr "Schéma: " #: gui_common.c:2117 gui_common.c:2167 gui_common.c:2191 msgid "User name: " msgstr "U¾ivatel: " #: gui_common.c:2123 gui_common.c:2173 msgid "NTLM domain: " msgstr "NTML doména: " #: gui_common.c:2126 gui_common.c:2176 msgid "Reuse HTTP Digest access nonce" msgstr "Znovu pou¾ij token pro HTTP digest pøístup" #: gui_common.c:2131 msgid "HTTP proxy user authentification" msgstr "HTTP proxy autentifikace u¾ivatele" #: gui_common.c:2181 msgid "FTP proxy user authentification" msgstr "FTP proxy autentifikace u¾ivatele" #: gui_common.c:2196 msgid "Misc" msgstr "Rùzné" #: gui_common.c:2210 msgid "E-mail address: " msgstr "E-mail adresa: " #: gui_common.c:2212 msgid "Send From: header with HTTP request" msgstr "Posílej From: hlavièku v HTTP po¾adavcích" #: gui_common.c:2226 msgid "SSL" msgstr "SSL" #: gui_common.c:2229 msgid "SSL client certificate" msgstr "SSL certifikát klienta" #: gui_common.c:2238 msgid "Certificate password: " msgstr "Heslo certifikátu: " #: gui_common.c:2241 msgid "Certificate PEM file: " msgstr "PEM soubor certifikátu: " #: gui_common.c:2244 msgid "Certificate key file: " msgstr "Soubor s klíèem certifikátu: " #: gui_common.c:2247 msgid "List of preffered ciphers: " msgstr "Seznam preferovaných ¹ifer: " #: gui_common.c:2253 msgid "SSL protocol version" msgstr "Verse protokolu SSL" #: gui_common.c:2261 msgid "SSLv23" msgstr "SSLv23" #: gui_common.c:2267 msgid "SSLv2" msgstr "SSLv2" #: gui_common.c:2273 msgid "SSLv3" msgstr "SSLv3" #: gui_common.c:2280 msgid "TLSv1" msgstr "TLSv1" #: gui_common.c:2287 msgid "Miscelanous SSL settings" msgstr "Rùzná SSL nastavení" #: gui_common.c:2297 msgid "EGD daemon socket path: " msgstr "Cesa k socketu EGD daemona: " #: gui_common.c:2301 msgid "Unique ID for all SSL sessions" msgstr "Jedineèné ID pro v¹echny SSL seance" #: gui_common.c:2316 gui_main.c:1896 msgid "Log" msgstr "Log" #: gui_common.c:2323 msgid "Try to find unique name, when original log file locked" msgstr "" "Pokus se najít jedineèné jméno, pøi uzamèeném pùvodním logovacím souboru" #: gui_common.c:2328 msgid "Log file: " msgstr "Soubor logù: " #: gui_common.c:2331 msgid "Shortlog file: " msgstr "Soubor krátkých logù: " #: gui_common.c:2334 msgid "Log window length: " msgstr "Poèet øádku logovacího okna: " #: gui_common.c:2347 msgid "Cookies" msgstr "Cookies" #: gui_common.c:2350 msgid "Disabled cookie domains" msgstr "Domény se zakázanými cookies" #: gui_common.c:2355 gui_limits.c:247 msgid "Domain: " msgstr "Doména: " #: gui_common.c:2358 msgid "Cookies settings" msgstr "Nastavení cookies" #: gui_common.c:2367 msgid "Update cookies" msgstr "Aktualizuj cookies" #: gui_common.c:2372 msgid "Send cookies" msgstr "Posílej cookies" #: gui_common.c:2377 msgid "Accept cookies" msgstr "Pøijímej cookies" #: gui_common.c:2382 msgid "Check cookies domain" msgstr "Zkontroluj doménu cookies" #: gui_common.c:2390 msgid "Cookies maximal number: " msgstr "Maximální poèet cookies: " #: gui_common.c:2405 msgid "Cookie file: " msgstr "Soubor s cookies: " #: gui_common.c:2491 msgid "Filename" msgstr "Jména souborù" #: gui_common.c:2494 msgid "Local filename conversion rules" msgstr "Pravidla na zmìnu jména lokálního souboru" #: gui_common.c:2502 msgid "Replace String1 with String2 in filename" msgstr "Zamìò Øetìzec1 za Øetìzec2 ve jménu souboru" #: gui_common.c:2511 msgid "String1: " msgstr "Øetìzec1: " #: gui_common.c:2514 msgid "String2: " msgstr "Øetìzec2: " #: gui_common.c:2516 msgid "Delete characters from filename" msgstr "Odstraò znaky ze jména souboru" #: gui_common.c:2525 msgid "Character set: " msgstr "Seznam znakù: " #: gui_common.c:2527 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "Nahraï znaky ve jménì souboru ze Sezn1 znaky v Sezn2" #: gui_common.c:2536 msgid "Character set1: " msgstr "Znaky sezn1: " #: gui_common.c:2539 msgid "Character set2: " msgstr "Znaky sezn2: " #: gui_common.c:2546 msgid "Base level of tree: " msgstr "Základní úroveò stromu: " #: gui_common.c:2548 msgid "Local filename mapping rules" msgstr "Pravidla na zmìnu jména lokálního souboru" #: gui_common.c:2564 msgid "Match pattern" msgstr "Hledaný výraz" #: gui_common.c:2565 msgid "Rule" msgstr "Pravidlo" #: gui_common.c:2587 msgid "wildcard pattern" msgstr "¾olíkový výraz" #: gui_common.c:2594 msgid "RE pattern" msgstr "regulární výraz" #: gui_common.c:2606 msgid "Matching pattern: " msgstr "Hledaný výraz: " #: gui_common.c:2613 msgid "Construction rule: " msgstr "Pravidlo tvorby jména: " #: gui_common.c:2653 msgid "Advertisement" msgstr "Reklamy" #: gui_common.c:2660 msgid "Enable removing of advertisement banners" msgstr "Zapní odstraòování reklamních prou¾kù" #: gui_common.c:2665 msgid "RE for advertisement URLs: " msgstr "RE pro reklamní URL: " #: gui_common.c:2777 msgid "Javascript" msgstr "Javascript" #: gui_common.c:2785 msgid "Processing of javascript" msgstr "Zpracovávám javascript" #: gui_common.c:2789 msgid "Javascript patterns" msgstr "Javascript výraz" #: gui_common.c:2794 msgid "RE for Javascript patterns: " msgstr "Regulární výraz pro Javascript: " #: gui_common.c:2800 msgid "Javascript patterns with transform rules" msgstr "Javascript vzory s tranformaèními pravidly" #: gui_common.c:2815 msgid "Pattern" msgstr "Vzor" #: gui_common.c:2816 msgid "Transform rule" msgstr "Transformaèní pravidlo" #: gui_common.c:2817 msgid "HTML tag" msgstr "HTML znaèka" #: gui_common.c:2818 msgid "HTML tag attribute" msgstr "Atribut HTML znaèky" #: gui_common.c:2819 msgid "Rewrite" msgstr "Pøepisuj" #: gui_common.c:2840 msgid "Pattern: " msgstr "Vzor: " #: gui_common.c:2843 msgid "Tranform rule: " msgstr "Transformaèní pravidlo: " #: gui_common.c:2852 msgid "HTML tag: " msgstr "HTML znaèka: " #: gui_common.c:2856 msgid "HTML tag attribute: " msgstr "Atributy HTML znaèky: " #: gui_common.c:2858 msgid "Rewrite URL part in HTML document" msgstr "Pøepi¹ odkazy v HTML dokumentech" #: gui_common.c:2913 msgid "Pavuk: Common config" msgstr "Pavuk: Základní konfigurace" #: gui_common.c:2980 msgid "Limitations ..." msgstr "Omezení ..." #: gui_jscons.c:150 msgid "Pavuk: JavaScript console" msgstr "Pavuk: JavaScript konzole" #: gui_jscons.c:169 msgid "Reload script file" msgstr "Znovu naèti scénáø" #: gui_jscons.c:174 msgid "Save script to file" msgstr "Ulo¾ scénáø do souboru" #: gui_jscons.c:181 msgid "Load script to JavaScript runtime" msgstr "Na¹ti scénáø do JavaScript interpretru" #: gui_jscons.c:186 msgid "Restart JavaScript runtime" msgstr "Restartuj JavaScript interpretr" #: gui_jscons.c:215 msgid "Prompt: " msgstr "Prompt: " #: gui_jscons.c:228 msgid "JavaScript source file: " msgstr "Zdrojový soubor JavaScriptu: " #: gui_limits.c:44 msgid "Tree" msgstr "Strom" #: gui_limits.c:56 msgid "Download cgi-generated pages" msgstr "Stahovaní stran generovaných CGI skripty" #: gui_limits.c:62 msgid "Recurse through FTP directory" msgstr "Rekurzivní procházení FTP adresáøù" #: gui_limits.c:68 msgid "Allow \"robots.txt\"" msgstr "Povolení \"robots.txt\"" #: gui_limits.c:74 msgid "Process HTML files downloaded over FTP" msgstr "Zpracuj HTML soubory sta¾ené pomocí FTP" #: gui_limits.c:80 msgid "Don't leave starting site" msgstr "Neopou¹tìj startovní místo" #: gui_limits.c:86 msgid "Don't leave starting directory" msgstr "Neopou¹tìj startovní adresáø" #: gui_limits.c:92 msgid "Don't leave site enter directory" msgstr "Neopou¹tìj místo vstupu na server" #: gui_limits.c:98 msgid "Download just single page" msgstr "Stáhni jen jednu stránku" #: gui_limits.c:104 msgid "Apply limiting options on inline objects" msgstr "Pou¾ij omezení i na vlo¾ené objeky" #: gui_limits.c:119 msgid "Max. count of documents: " msgstr "Max. poèet dokumentù: " #: gui_limits.c:122 msgid "Max. depth of tree: " msgstr "Max. hloubka stromu: " #: gui_limits.c:125 msgid "Max. levels to leave from starting site: " msgstr "Max. poèet úrovní ponechání od startovního místa: " #: gui_limits.c:128 msgid "Max. document size: " msgstr "Max. velikost dokumentù: " #: gui_limits.c:131 msgid "Min. document size: " msgstr "Min. velikost dokumentu: " #: gui_limits.c:134 msgid "Max. site levels to leave from starting site: " msgstr "Max. poèet zmìn serverù od startovního místa: " #: gui_limits.c:145 msgid "Working subdirectory :" msgstr "Pracovní podstrom :" #: gui_limits.c:148 msgid "User condition script: " msgstr "Skript s u¾ivatelskými podmínkami: " #: gui_limits.c:151 msgid "Follow command: " msgstr "Pøíkaz po zta¾ení: " #: gui_limits.c:162 msgid "Patterns" msgstr "Vzory" #: gui_limits.c:165 msgid "Wildcard patterns" msgstr "®olíkový výraz" #: gui_limits.c:174 gui_limits.c:195 msgid "Documents matching pattern: " msgstr "Dokumenty vyhovující výrazu: " #: gui_limits.c:177 gui_limits.c:183 gui_limits.c:198 gui_limits.c:204 #: gui_limits.c:266 msgid "skip: " msgstr "pøeskoè: " #: gui_limits.c:180 gui_limits.c:201 msgid "URL matching pattern: " msgstr "Regulární výraz pro URL: " #: gui_limits.c:186 msgid "RE patterns" msgstr "Regulární výraz" #: gui_limits.c:215 msgid "Hosts" msgstr "Servery" #: gui_limits.c:224 msgid "Allow / Disallow sites" msgstr "Povolené / Zakázané servery" #: gui_limits.c:230 msgid "Site: " msgstr "Server(site): " #: gui_limits.c:241 msgid "Allow / Disallow domains" msgstr "Povolené / Zakázané domény" #: gui_limits.c:253 msgid "IP address RE patterns" msgstr "Regulární výraz pro IP adresy" #: gui_limits.c:263 msgid "Server IP address matching pattern: " msgstr "Výraz pro povolení IP adres serveru: " #: gui_limits.c:269 msgid "Server ports" msgstr "Porty serveru" #: gui_limits.c:279 msgid "Allow/denny" msgstr "Povol/zaka¾" #: gui_limits.c:284 msgid "Ports: " msgstr "Porty: " #: gui_limits.c:295 msgid "Documents" msgstr "Dokumenty" #: gui_limits.c:304 msgid "Allow / Disallow suffix" msgstr "Povolení / Zakázání pøípony" #: gui_limits.c:310 msgid "Suffix: " msgstr "Pøípona: " #: gui_limits.c:321 msgid "Allow / Disallow prefix" msgstr "Povolení / Zakázání pøedpony" #: gui_limits.c:327 msgid "Prefix: " msgstr "Pøedpona: " #: gui_limits.c:341 gui_limits.c:353 msgid "MIME types" msgstr "MIME typy" #: gui_limits.c:349 msgid "Allow / Disallow MIME type" msgstr "Povolené / Zakázané MIME typy" #: gui_limits.c:358 msgid "MIME type: " msgstr "MIME typy: " #: gui_limits.c:371 msgid "Time" msgstr "Èas" #: gui_limits.c:377 msgid "Lower document time limit" msgstr "Spodní limit èasu pro dokument" #: gui_limits.c:387 msgid "Check if doc. time newer than this" msgstr "data " #: gui_limits.c:391 msgid "Upper document time limit" msgstr "Horní limit èasu pro dokument" #: gui_limits.c:401 msgid "Check if doc. time older than this" msgstr "Zkontroluj zda je dokument star¹í" #: gui_limits.c:410 msgid "Maximal allowed time of downloading: " msgstr "Maximální povolený èas stahování: " #: gui_limits.c:413 msgid " min" msgstr " min" #: gui_limits.c:426 msgid "Select allowed HTML tags and attributes" msgstr "Vyber povolené HTML tagy a atributy" #: gui_limits.c:428 msgid "HTML" msgstr "HTML" #: gui_limits.c:443 #, c-format msgid "%s of %s" msgstr "%s z %s" #: gui_limits.c:476 msgid "Pavuk: Limits config" msgstr "Pavuk: Konfigurace omezení" #: gui_limits.c:529 msgid "Common ..." msgstr "Spoleèné ..." #: gui_main.c:433 msgid "Unknown window to popup" msgstr "Neznamé okno na popup" #: gui_main.c:498 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "URL získané ze schránky : %s\n" #: gui_main.c:542 #, c-format msgid "Fetched URL from browser : %s\n" msgstr "Získej URL od prohlí¾eèe : %s\n" #: gui_main.c:788 msgid "Both" msgstr "Text i ikony" #: gui_main.c:789 msgid "Icons only" msgstr "Pouze ikony" #: gui_main.c:790 msgid "Text only" msgstr "Pouze text" #: gui_main.c:802 msgid "Nr." msgstr "Nr." #: gui_main.c:804 msgid "Status" msgstr "Stavo" #: gui_main.c:805 msgid "Size" msgstr "Velikost" #: gui_main.c:806 msgid "Transfer rate" msgstr "Pøenosová rychlost" #: gui_main.c:807 msgid "Elapsed time" msgstr "Uplynulý èas" #: gui_main.c:808 msgid "Remaining time" msgstr "Zbývající èas" #: gui_main.c:956 msgid "Open _URL ..." msgstr "Otevøení _URL ..." #: gui_main.c:969 msgid "Append URL ..." msgstr "Pøidat URL ..." #: gui_main.c:978 msgid "Fetch URL from Clipboard" msgstr "Vezmi URL ze schránky" #: gui_main.c:996 msgid "Fetch URL from browser" msgstr "Vezmi URL od prohlí¾eèe" #: gui_main.c:1006 msgid "Load scenario ..." msgstr "Naèti scénáø ..." #: gui_main.c:1015 msgid "Add scenario ..." msgstr "Pøidej scénáø ..." #: gui_main.c:1024 msgid "Save scenario ..." msgstr "Ulo¾ scénáø ..." #: gui_main.c:1033 msgid "Save settings to ~/.pavukrc" msgstr "Ulo¾it nastavení do ~/.pavukrc" #: gui_main.c:1046 msgid "Schedule ..." msgstr "Plánuj ..." #: gui_main.c:1055 msgid "Auth. info editor ..." msgstr "Editor autentikaèních informací ..." #: gui_main.c:1068 msgid "E_xit" msgstr "_Konec" #: gui_main.c:1077 msgid "_File" msgstr "_Soubor" #: gui_main.c:1093 msgid "Document _Tree ..." msgstr "S_trom dokumentù ..." #: gui_main.c:1102 msgid "Status page ..." msgstr "Stavová stránka ..." #: gui_main.c:1110 msgid "HTML forms editor ..." msgstr "Editor HTML formuláøù ..." #: gui_main.c:1119 msgid "Javascript console ..." msgstr "Javascript konzole ..." #: gui_main.c:1132 msgid "Clear log window" msgstr "Vyèisti okno se zprávami" #: gui_main.c:1141 msgid "_View" msgstr "_Prohlí¾ení" #: gui_main.c:1159 msgid "normal recurse" msgstr "bì¾ná (normalní) rekurze" #: gui_main.c:1169 msgid "synchronize" msgstr "synchronizace" #: gui_main.c:1180 msgid "single page" msgstr "jedna strana" #: gui_main.c:1190 msgid "update local links" msgstr "obnov lokální odkazy" #: gui_main.c:1200 msgid "resume files" msgstr "pokraèovaní souboru" #: gui_main.c:1210 msgid "unlimited reget" msgstr "neomezený poèet pokusù o sta¾ení" #: gui_main.c:1220 msgid "transfer but don't store" msgstr "pøenes ale neulo¾" #: gui_main.c:1230 msgid "reminder" msgstr "pøipomínka" #: gui_main.c:1240 msgid "list ftp directory" msgstr "výpist ftp adresáøe" #: gui_main.c:1250 msgid "_Mode" msgstr "_Mód" #: gui_main.c:1268 msgid "C_ommon ..." msgstr "Sp_oleèné ..." #: gui_main.c:1277 msgid "_Limitations ..." msgstr "O_mezení ..." #: gui_main.c:1286 msgid "Reset configuration" msgstr "Vyma¾ konfiguraci" #: gui_main.c:1301 msgid "Toolbar" msgstr "Li¹ta" #: gui_main.c:1309 msgid "Toggle toolbar" msgstr "Nastavení li¹ty" #: gui_main.c:1364 msgid "Progressbar" msgstr "Progresbar" #: gui_main.c:1396 msgid "Language" msgstr "Jazyk" #: gui_main.c:1446 msgid "Debug level" msgstr "Úroveò ladìní" #: gui_main.c:1469 msgid "All" msgstr "V¹e" #: gui_main.c:1476 msgid "None" msgstr "Nic" #: gui_main.c:1483 msgid "Debug" msgstr "Ladìní" #: gui_main.c:1499 msgid "Allow tooltips" msgstr "Povol nápovìdu" #: gui_main.c:1509 msgid "Log window autoscroll" msgstr "Automatický posun logovacího okna" #: gui_main.c:1518 msgid "Use preferences" msgstr "Pou¾ij nastavení" #: gui_main.c:1527 msgid "Quiet" msgstr "Ti¹e" #: gui_main.c:1539 msgid "Immediate messages" msgstr "Okam¾ité zprávy" #: gui_main.c:1551 msgid "_Config" msgstr "_Konfigurace" #: gui_main.c:1567 msgid "_Restart" msgstr "_Restart" #: gui_main.c:1577 msgid "Co_ntinue" msgstr "_Pokraèuj" #: gui_main.c:1587 msgid "Sto_p" msgstr "Sto_p" #: gui_main.c:1597 msgid "_Break" msgstr "Pøe_ru¹ení" #: gui_main.c:1607 msgid "_Action" msgstr "_Akce" #: gui_main.c:1627 msgid "About ..." msgstr "O aplikaci ..." #: gui_main.c:1636 msgid "_Help" msgstr "_Nápovìda" #: gui_main.c:1667 msgid "Config" msgstr "Konfigurace" #: gui_main.c:1668 msgid "Popup config window" msgstr "Otevøení konfiguraèních oken" #: gui_main.c:1672 msgid "Limits" msgstr "Limity" #: gui_main.c:1673 msgid "Popup limits window" msgstr "Zobraz okno s omezeníni" #: gui_main.c:1679 msgid "Go bg" msgstr "Na pozadí" #: gui_main.c:1680 msgid "Destroy window as soon as posible and continue on terminal" msgstr "Zru¹ co nejdøíve okno aplikace a pokraèuj na terminálu" #: gui_main.c:1684 gui_main.c:1757 msgid "Restart" msgstr "Restart" #: gui_main.c:1685 msgid "Start working on currently set starting URLs" msgstr "Zaèni pracovat na zadaných URL" #: gui_main.c:1689 gui_main.c:1762 msgid "Continue" msgstr "Pokraèuj" #: gui_main.c:1690 msgid "Continue after stop or break" msgstr "Pokraèuj po pøeru¹ení" #: gui_main.c:1696 gui_main.c:1767 msgid "Stop" msgstr "Zastavení" #: gui_main.c:1697 msgid "Finish this transfer and stop" msgstr "Dokonèi aktuální pøenos a zastav" #: gui_main.c:1701 gui_main.c:1772 msgid "Break" msgstr "Pøeru¹ení" #: gui_main.c:1702 msgid "Break transfer and stop" msgstr "Pøeru¹ pøenos a zastav" #: gui_main.c:1708 msgid "Exit" msgstr "Konec" #: gui_main.c:1709 msgid "Immediately quit the program" msgstr "Okam¾itì ukonèi program" #: gui_main.c:1777 msgid "Show whole main window" msgstr "Uka¾ celé hlavní okno" #: gui_main.c:1782 msgid "Quit" msgstr "Konec" #: gui_main.c:1861 msgid "Pavuk: save log" msgstr "Pavuk: ulo¾ log" #: gui_main.c:1924 msgid "Select all" msgstr "Vyber v¹e" #: gui_main.c:1932 msgid "Clear selection" msgstr "Sma¾ oznaèené" #: gui_main.c:1940 msgid "Copy selection" msgstr "Zkopíruj oznaèené" #: gui_main.c:1952 msgid "Save log ..." msgstr "Ulo¾ log ..." #: gui_main.c:1959 msgid "Clear log" msgstr "Sma¾ okno výpisu" #: gui_main.c:2046 gui_main.c:2164 msgid "Processed: " msgstr "Zpracováno: " #: gui_main.c:2055 gui_main.c:2173 msgid "Failed: " msgstr "Selhalo: " #: gui_main.c:2064 gui_main.c:2182 msgid "Queued: " msgstr "Ve frontì: " #: gui_main.c:2073 gui_main.c:2191 msgid "Rejected: " msgstr "Zakázáno: " #: gui_main.c:2123 msgid "S: " msgstr "S: " #: gui_main.c:2132 msgid "R: " msgstr "R: " #: gui_main.c:2141 msgid "ET: " msgstr "ET: " #: gui_main.c:2150 msgid "RT: " msgstr "RT: " #: gui_scenario.c:46 msgid "Pavuk: Scenario saver" msgstr "Pavuk: Ukladání scénáøe" #: gui_scenario.c:139 msgid "Pavuk: Scenario loader" msgstr "Pavuk: Naètení scénáøe" #: gui_scenario.c:231 msgid "Pavuk: Scenario add" msgstr "Pavuk: Pøidání scénáøe" #: gui_sched.c:55 pavuk.c:495 msgid "Error scheduling\n" msgstr "Chyba plánovaní\n" #: gui_sched.c:78 msgid "Pavuk: Scheduler" msgstr "Pavuk: Plánovaè" #: gui_sched.c:97 msgid "Scheduling command: " msgstr "Pøíkaz pro plánování: " #: gui_sched.c:107 msgid "Reschedule after " msgstr "Obnovuji plánovaní po " #: gui_sched.c:117 msgid " hours" msgstr " hodin" #: gui_tools.c:28 msgid "January" msgstr "Leden" #: gui_tools.c:29 msgid "February" msgstr "Únor" #: gui_tools.c:30 msgid "March" msgstr "Bøezen" #: gui_tools.c:31 msgid "April" msgstr "Duben" #: gui_tools.c:32 msgid "May" msgstr "Kvìten" #: gui_tools.c:33 msgid "June" msgstr "Èerven" #: gui_tools.c:34 msgid "July" msgstr "Èervenec" #: gui_tools.c:35 msgid "August" msgstr "Srpen" #: gui_tools.c:36 msgid "September" msgstr "Záøí" #: gui_tools.c:37 msgid "October" msgstr "Øíjen" #: gui_tools.c:38 msgid "November" msgstr "Listopad" #: gui_tools.c:39 msgid "December" msgstr "Prosinec" #: gui_tools.c:43 msgid "Sun" msgstr "Ned" #: gui_tools.c:44 msgid "Mon" msgstr "Pon" #: gui_tools.c:45 msgid "Tue" msgstr "Úte" #: gui_tools.c:46 msgid "Wed" msgstr "Stø" #: gui_tools.c:47 msgid "Thu" msgstr "Ètv" #: gui_tools.c:48 msgid "Fri" msgstr "Pát" #: gui_tools.c:49 msgid "Sat" msgstr "Sob" #: gui_tools.c:171 msgid "Time: " msgstr "Èas: " #: gui_tools.c:180 msgid " : " msgstr " : " #: gui_tools.c:360 #, c-format msgid "Pavuk: select %s" msgstr "Pavuk: vyber %s" #: gui_tools.c:361 msgid "file" msgstr "soubor" #: gui_tools.c:459 msgid "Browse ..." msgstr "Vyber ..." #: gui_tree.c:117 #, c-format msgid "URL: %s\n" msgstr "URL: %s\n" #: gui_tree.c:130 gui_tree.c:136 gui_tree.c:175 msgid "Request type: " msgstr "Typ dotazu: " #: gui_tree.c:151 msgid "Query values:\n" msgstr "Hodnoty dotazu:\n" #: gui_tree.c:181 msgid "Status: " msgstr "Stavov: " #: gui_tree.c:187 msgid "not processed yet\n" msgstr "je¹tì nezpracované\n" #: gui_tree.c:193 msgid "loaded from NS cache\n" msgstr "naèteno z NS cache\n" #: gui_tree.c:199 msgid "loaded from local URL tree\n" msgstr "naèteno z lokálního URL stromu\n" #: gui_tree.c:205 msgid "moved to another URL\n" msgstr "pøesunito na jiné URL\n" #: gui_tree.c:211 msgid "URL not found on remote server\n" msgstr "URL nenalezeno na vzdáleném serveru\n" #: gui_tree.c:217 msgid "truncated\n" msgstr "zkráceno\n" #: gui_tree.c:223 msgid "downloaded OK\n" msgstr "stahování v poøádku\n" #: gui_tree.c:229 msgid "rejected by rules\n" msgstr "zakázáno podle pravidel\n" #: gui_tree.c:235 msgid "disabled by user\n" msgstr "zakázáno u¾ivatelem\n" #: gui_tree.c:241 msgid "probably recoverable error\n" msgstr "asi nenapravitelná chyba\n" #: gui_tree.c:247 msgid "unrecoverable error\n" msgstr "nenapravitelná chyba\n" #: gui_tree.c:253 msgid "unknown\n" msgstr "neznámý\n" #: gui_tree.c:263 #, c-format msgid "Moved to URL: %s\n" msgstr "Pøesunito na URL : %s\n" #: gui_tree.c:273 #, c-format msgid "Type: %s\n" msgstr "Typ: %s\n" #: gui_tree.c:275 msgid "Type: unknown\n" msgstr "Typ: neznamý\n" #: gui_tree.c:281 #, c-format msgid "Size: %d\n" msgstr "Server(site): %d\n" #: gui_tree.c:290 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "Èas modifikace: %a, %d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:300 #, c-format msgid "Local filename: %s\n" msgstr "Lokální soubor: %s\n" #: gui_tree.c:311 msgid "Parent URLs:\n" msgstr "Rodièovká URL:\n" #: gui_tree.c:612 msgid "Pavuk: Store tree" msgstr "Pavuk: Ukládací strom" #: gui_tree.c:656 gui_tree.c:684 msgid "Pavuk: URL tree preview" msgstr "Pavuk: Pøehled URL stromu" #: gui_tree.c:659 gui_tree.c:788 msgid "Store tree ..." msgstr "Ukládací strom ..." #: gui_tree.c:660 gui_tree.c:704 msgid "Automaticaly watch last processed URLs" msgstr "Automaticky sleduj poslední zpracovaná URL" #: gui_tree.c:662 gui_tree.c:821 msgid "Properties" msgstr "Vlastnosti" #: gui_tree.c:663 gui_tree.c:829 msgid "Launch browser" msgstr "Spus» prohlí¾eè" #: gui_tree.c:664 gui_tree.c:837 msgid "Disable URL" msgstr "Zaka¾ URL" #: gui_tree.c:665 gui_tree.c:845 msgid "Enable URL" msgstr "Povol URL" #: gui_tree.c:666 gui_tree.c:853 msgid "Download URL" msgstr "Stáhni URL" #: gui_tree.c:670 gui_tree.c:724 msgid "URL tree" msgstr "URL strom" #: html.c:253 htmlparser.c:281 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "Nepodporované BASE URL - %s (pravdìpodobnì ¹patnì zpracované)\n" #: html.c:522 msgid "Can't work on directory\n" msgstr "Nemù¾u pracovat s adresáøem\n" #: html.c:548 html.c:552 msgid "rewrite parent" msgstr "pøepisuji rodièe" #: http.c:366 msgid "****************** Proxy connect request *****************\n" msgstr "****************** Proxy connect request *****************\n" #: http.c:413 msgid "***************** Proxy connect response *****************\n" msgstr "***************** Proxy connect response *****************\n" #: http.c:469 msgid "Sending request ..." msgstr "Posílám po¾adavek ..." #: http.c:716 msgid "************ Client HTTP MIME header ***************\n" msgstr "************ Client HTTP MIME header ***************\n" #: http.c:733 msgid "Sending data ..." msgstr "Posílám data ..." #: http.c:734 msgid "************ HTTP request data ***************\n" msgstr "*********** data HTTP po¾adavku **************\n" #: http.c:744 msgid "Waiting for response ..." msgstr "Èekám na odpovìï ..." #: http.c:759 msgid "Error reading HTTP 1xx class response\n" msgstr "Chyba ètení odpovìdí tøídy HTTP 1xx\n" #: http.c:764 msgid "***************** class 1xx HTTP response ****************\n" msgstr "***************** class 1xx HTTP response *****************\n" #: http.c:875 msgid "Connecting ..." msgstr "Pøipojuji se ..." #: http.c:1159 msgid "*********** HTTP Server response MIME header **********\n" msgstr "*********** HTTP Server response MIME header **********\n" #: http.c:1262 msgid "Regeting whole file\n" msgstr "Znovu stahuji soubor\n" #: http.c:1312 #, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "Neoèekávaná opovìï \"%d %s\" pøi pokusu o napojení!\n" #: http_proxy.c:150 #, c-format msgid "Checking HTTP proxy server %s:%d\n" msgstr "Kontroluji HTTP proxy server %s:%d\n" #: http_proxy.c:162 http_proxy.c:174 http_proxy.c:181 http_proxy.c:190 msgid "Failed to check proxy !\n" msgstr "Chyba pøi kontole proxy !\n" #: http_proxy.c:196 #, c-format msgid "Proxy %s:%d is HTTP/%d.%d proxy\n" msgstr "Proxy %s:%d je HTTP/%d.%d proxy\n" #: jsbind.c:76 msgid "bad parameter" msgstr "¹patný parametr" #: jsbind.c:529 msgid "not enough parameters" msgstr "nedostateèný poèet parametrù" #: jsbind.c:553 msgid "unknown limiting condition" msgstr "neznámá omezující podmínka" #: lfname.c:479 lfname.c:491 lfname.c:500 lfname.c:513 lfname.c:536 #: lfname.c:645 lfname.c:658 lfname.c:670 lfname.c:685 lfname.c:698 re.c:51 #: re.c:61 re.c:68 re.c:80 re.c:95 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "Chyba v regulárním výrazu : %s\n" #: lfname.c:553 lfname.c:617 lfname.c:939 lfname.c:1057 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "LSP chyba analýzy: chybný symbol - %s\n" #: lfname.c:950 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "LSP chyba analýzy: chybné èíslo - %s\n" #: lfname.c:964 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "LSP chyba analýzy: chybné makro - %s\n" #: lfname.c:992 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "LSP chyba analýzy: neukonèený øetìzec - %s\n" #: lfname.c:1013 lfname.c:1029 lfname.c:1047 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "LSP chyba analýzy: chybný typ parametru - %s\n" #: log.c:203 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "Konèím log : %H:%M:%S %d.%m.%Y\n" #: log.c:224 msgid "Unable to open log file - disabling logging\n" msgstr "Nelze otevøít logovací soubor - vypínám logování\n" #: log.c:232 msgid "Log file is locked by another process - " msgstr "Logovací soubor je uzamèen dal¹ím procesem - " #: log.c:236 msgid "generating new log filename\n" msgstr "generuji nové jméno logovacího souboru\n" #: log.c:241 msgid "disabling logging\n" msgstr "vypínám logování\n" #: log.c:263 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "Zaèínám log : %H:%M:%S %d.%m.%Y\n" #: mozcache.c:184 #, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "Nelze otevøít index Mozilla cache - %s\n" #: myssl.c:49 msgid "Failed obtaining entropy pathname\n" msgstr "Chyba pøi získat cestu k souboru na inicializaci generátoru náhodných èísel\n" #: myssl.c:59 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "Chyba pøi inicializaci generátoru náhodných èísel pro OpenSSL pomocí EGD daemona\n" #: myssl.c:70 msgid "Seeding entropy pool INSECURELY!\n" msgstr "Inicializuji generátoru náhodných èísel nebezpeèným zpùsobem!\n" #: myssl.c:157 msgid "Unable to set certificate file (wrong password?)\n" msgstr "Nelza nastavit soubor s certifikátem (¹patné heslo?)\n" #: myssl.c:167 msgid "Unable to set public key file\n" msgstr "Nelze nastavit soubor s veøejným klíèem\n" #: myssl.c:183 msgid "Private key does not match the certificate public key\n" msgstr "Soukromý klíè neodpovídá veøejnému klíèi certifikátu\n" #: myssl.c:231 #, c-format msgid "SSL connection is using %s\n" msgstr "SSL spojení pou¾ívá %s\n" #: myssl.c:234 msgid "Server certificate:\n" msgstr "Certifikát serveru:\n" #: myssl.c:238 #, c-format msgid "\t subject: %s\n" msgstr "\t subject: %s\n" #: myssl.c:243 #, c-format msgid "\t issuer: %s\n" msgstr "\t issuer: %s\n" #: nscache.c:103 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "Nelze otevøít index Netscape cache - %s\n" #: ntlm_auth.c:416 msgid "Trying to do NTLM authorization\n" msgstr "Zkou¹ím NTLM autorizaci\n" #: ntlm_auth.c:425 ntlm_auth.c:506 ntlm_auth.c:587 ntlm_auth.c:667 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "NTLM autorizace je podporována pouze pro trvalá spojení!\n" #: ntlm_auth.c:448 ntlm_auth.c:609 msgid "Not enough data for NTLM authorization!\n" msgstr "Málo dat pro NTML autorizaci!\n" #: ntlm_auth.c:449 ntlm_auth.c:610 msgid "Missing:\n" msgstr "Chybí:\n" #: ntlm_auth.c:450 ntlm_auth.c:611 msgid " domain\n" msgstr " doména\n" #: ntlm_auth.c:451 ntlm_auth.c:612 msgid " username\n" msgstr " u¾ivatelské jméno\n" #: ntlm_auth.c:452 ntlm_auth.c:613 msgid " password\n" msgstr " heslo\n" #: ntlm_auth.c:453 ntlm_auth.c:614 msgid " local hostname\n" msgstr " jméno poèítaèe\n" #: ntlm_auth.c:489 ntlm_auth.c:497 ntlm_auth.c:522 ntlm_auth.c:650 #: ntlm_auth.c:658 ntlm_auth.c:683 msgid "Got unexpected response\n" msgstr "Obdr¾ena neoèekávaná odpovìï\n" #: ntlm_auth.c:532 msgid "Failed NTLM nonce negotiation\n" msgstr "Chyba pøi NTLM nonce dohodì\n" #: ntlm_auth.c:574 msgid "Trying to do proxy NTLM authorization\n" msgstr "Zkou¹ím NTLM proxy autentikaci\n" #: ntlm_auth.c:693 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "Chyba pøi NTLM proxy nonce dohodì\n" #: options.h:193 msgid "\t-v - print version number\n" msgstr "\t-v - výpis verze\n" #: options.h:204 msgid "\t-h - help\n" msgstr "\t-h - nápovìda\n" #: options.h:218 msgid "\t-X - start GUI interface\n" msgstr "\t-X - start grafikého rozhraní\n" #: options.h:249 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" "\t-runX - okam¾itì po spu¹tìní grafického rozhraní\n" "\t zaèni zpracovávat zadaná URL\n" #: options.h:265 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "\t-prefs/-noprefs - nahraj nastavení ze souboru ~/.pavuk_prefs\n" #: options.h:494 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" "\t-progress/-noprogress\n" "\t - uka¾ stav pøenosu, kdy¾ je spu¹tìn na terminálu\n" #: options.h:517 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "\t-lmax $nr - povolená hloubka stromu\n" #: options.h:528 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "\t-dmax $nr - maximalní poèet stáhnutých dokumentù\n" #: options.h:539 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "\t-sleep $nr - èekej $nr sekund mezi pøenosy, standardnì 0 s\n" #: options.h:551 msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "" "\t-rsleep/-norsleep - náhodná pauza mezí stahováním v rozmezí\n" "\t 0 a¾ -sleep time\n" #: options.h:574 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "\t-retry $nr - poèet pokusù, jestli¾e vznikla chyba\n" #: options.h:585 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "" "\t-nregets $nr - max poèet pokusù stáhnutí samotného souboru, " "standardnì 2\n" #: options.h:596 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" "\t-nredirs $nr - max poèet následovaných HTTP pøesmìrování, standardnì " "5\n" #: options.h:607 msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" "\t-timeout $nr - timeout pro sí»ovou komunikaci (min).\n" "\t 0 == ¾ádný timeout, standardnì = 0\n" #: options.h:619 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" "\t-rollback $nr - poèet bytù od konce souboru, které budou zahozené\n" "\t pøi obnovení spojení, standardnì 0\n" #: options.h:632 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" "\t-ddays $nr - poèet dní od posledního pøístupu, kdy¾ je dokument\n" "\t testován v sync modu\n" #: options.h:644 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" "\t-nocache/-cache - zákaz cachování HTTP dokumentù (u proxy cache)\n" #: options.h:666 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "\t-noRobots/-Robots - pou¾ívat soubor \"robots.txt\" ?\n" #: options.h:688 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "\t-noFTP/-FTP - nestahovat FTP soubory\n" #: options.h:710 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "\t-noHTTP/-HTTP - nestahovat HTTP soubory\n" #: options.h:735 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "\t-noSSL/-SSL - nestahovat (HTTPS) SSL soubory\n" #: options.h:765 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "\t-noFTPS/-FTPS - nestahovat FTPS soubory\n" #: options.h:792 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "\t-noGopher/-Gopher - stáhnout Gopher soubory ?\n" #: options.h:814 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "\t-noCGI/-CGI - stáhnout CGI stránky s parametry ?\n" #: options.h:836 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "\t-noEnc/-Enc - povolit pøenos kódovaných souborù ?\n" #: options.h:858 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" "\t-noRelocate/-Relocate\n" "\t - nepøepisovat odkazy\n" #: options.h:881 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" "\t-FTPhtml/-noFTPhtml\n" "\t - zpracuj HTML soubory sta¾ené pøes FTP\n" #: options.h:904 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" "\t-FTPlist/-noFTPlist\n" "\t - pou¾ij ¹iroký výpis FTP adresáøe\n" #: options.h:927 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "\t-FTPdir/-noFTPdir - povolení pøenosu FTP adresáøù\n" #: options.h:949 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" "\t-store_index/-nostore_index\n" "\t - ukládej výpis adresáøe jako indexový soubor\n" #: options.h:972 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" "\t-force_reget/-noforce_reget\n" "\t - pøenos celého dokumentu, kdy¾ server\n" "\t nepodporuje reget\n" #: options.h:1000 msgid "\t-debug - turn on debug mode\n" msgstr "\t-debug - zapne debug mód\n" #: options.h:1030 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "" "\t-debug_level $l - úroveò ladících hlá¹ení, popis $l v ej manuálu\n" #: options.h:1042 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "" "\t-asite $list - èárkou oddìlený seznam povolených serverù (sites)\n" #: options.h:1053 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "" "\t-dsite $list - èárkou oddìlený seznam zakázaných serverù (sites)\n" #: options.h:1064 msgid "\t-adomain $list - list of allowed domains\n" msgstr "\t-adomain $list - seznam povolených domén\n" #: options.h:1075 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "\t-adomain $list - seznam zakázaných domén\n" #: options.h:1086 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "\t-aprefix $list - seznam povolených pøedpon adresáøù/souborù\n" #: options.h:1097 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "\t-dprefix $list - seznam zakázaných pøedpon adresáøù/souborù\n" #: options.h:1108 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "\t-asfx $list - seznam povolených pøípon\n" #: options.h:1119 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "\t-dsfx $list - seznam zakázaných pøípon\n" #: options.h:1130 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "\t-amimet $list - seznam povolených MINE typù\n" #: options.h:1141 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "\t-dmimet $list - seznam zakázaných MINE typù\n" #: options.h:1152 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "\t-alang $list - seznam preferovaných jazykù (pouze pro HTTP)\n" #: options.h:1163 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "" "\t-acharset $list - seznam preferovaných znakových sad\n" "\t (pouze pro HTTP)\n" #: options.h:1174 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" "\t-scndir $dir - adresáø, kde jsou ulo¾eny scénáøe\n" "\t (konfiguraèní soubory)\n" #: options.h:1186 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "\t-cdir $dir - adresáø pro ukládání dokumentù\n" #: options.h:1197 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "\t-subdir $dir - podadresáø cdir-u, ve kterém se bude pracovat\n" #: options.h:1208 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" "\t-scenario $str - jméno scénáøe z adresáøe scénáøù, který bude\n" "\t naèten a spu¹tìn\n" #: options.h:1220 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" "\t-auth_scheme 1/2/3 - HTTP autorizace 1-user 2-Basic 3-Digest,\n" "\t standardnì 2\n" #: options.h:1232 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "\t-auth_name $str - jméno pro autorizaci (pouze pøes HTTP)\n" #: options.h:1243 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "\t-auth_passwd $str - heslo pro autorizaci (pouze pøes HTTP)\n" #: options.h:1254 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - pou¾ij jednu HTTP digest autorizaci pro více " "po¾adavkù\n" #: options.h:1278 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - pou¾ij jednu proxy HTTP digest autorizaci\n" "\t pøístupu pro více po¾adavkù\n" #: options.h:1305 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" "\t-ssl_cert_passwd $str\n" "\t - heslo pro certifikaèní soubor SSL\n" #: options.h:1321 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - certifikaèní soubor SSL\n" #: options.h:1337 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "\t-ssl_key_file $str - soubor s certifikaèním klíèem SSL\n" #: options.h:1352 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" "\t-ssl_cipher_list $str\n" "\t - seznam preferovaných SSL ¹ifer pro SSL komunikaci\n" #: options.h:1368 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "\t-egd_socket $file - cesta k EGD socketu\n" #: options.h:1380 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "" "\t-from $str - e-mail adresa pou¾itá k identifikaci u¾ivatele\n" #: options.h:1391 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" "\t-send_from/-nosend_from\n" "\t - po¹li hlavièku From: v HTTP po¾adavku\n" "\t s va¹í e-mail adresou\n" #: options.h:1415 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "\t-identity $str - obsah polo¾ky User-agent: v HTTP po¾adavku\n" #: options.h:1426 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "\t-pattern $list - seznam ¾olíkových výrazù pro jména souborù\n" #: options.h:1440 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "\t-rpattern $re - seznam regulárních výrazù pro jména souborù\n" #: options.h:1452 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" "\t-skip_pattern $list\n" "\t - seznam ¾olíkových výrazù pro dokumenty,\n" "\t které nebudou zpracovány\n" #: options.h:1467 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" "\t-skip_pattern $re\n" "\t - seznam regulárních výrazù pro dokumenty,\n" "\t které nebudou zpracovány\n" #: options.h:1480 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "\t-url_pattern $list - seznam ¾olíkových výrazù pro URL\n" #: options.h:1494 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "\t-url_rpattern $re - seznam regulárních výrazù pro URL\n" #: options.h:1506 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" "\t-skip_url_pattern $list\n" "\t - seznam ¾olíkových výrazù pro URL,\n" "\t která nebudou zpracována\n" #: options.h:1521 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" "\t-skip_url_pattern $re\n" "\t - seznam regulárních výrazù pro URL,\n" "\t která nebudou zpracována\n" #: options.h:1534 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" msgstr "" "\t-mode $mode - nastavení módu\n" "\t normal - rekurzivnì pøes WWW (standardnì)\n" "\t linkupdate - update vzdálených odkazù v lokalním " "stromu\n" "\t sync - synchronizace lokalního stromu se " "vzdaleným WWW\n" "\t serverem\n" "\t singlepage - jedna stránka s inline objekty\n" "\t singlereget - stáhni soubor dokud není celý\n" "\t resumeregets - znovu stáhni v¹echny po¹kozené " "soubory\n" "\t dontstore - pøenes soubory, ale neukládej je\n" "\t reminder - provìø, zda se obsah URL nezmnìnil\n" "\t ftpdir - vypi¹ obsah FTP adresáøe\n" #: options.h:1555 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" #: options.h:1567 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" #: options.h:1579 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" #: options.h:1594 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" #: options.h:1607 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - uvedená gopher proxy HTTP gatewaye pro Gopher\n" #: options.h:1631 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specifikace ftp proxy, HTTP gatewaye pro FTP\n" #: options.h:1655 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - pou¾ij po¾adavek CONNECT na HTTP proxy pro FTP\n" "\t spojení\n" #: options.h:1682 msgid "\t-browser $str - your preferred browser programm\n" msgstr "\t-browser $str - vá¹ preferovaný prohlí¾eè\n" #: options.h:1697 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "\t-xmaxlog - maximalní délka logovacího okna\n" #: options.h:1709 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "\t-dumpscn $str - ulo¾ scénáø v scndir se jménem $str\n" #: options.h:1720 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "" "\t-maxsize $nr - maximalní povolená velikost dokumentu v bytech\n" #: options.h:1731 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "\t-minsize $nr - nejmen¹í povolená velikost dokumentu v bytech\n" #: options.h:1742 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - heslo pro HTTP proxy autorizaci\n" #: options.h:1754 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - u¾ivatelské jméno pro HTTP proxy autorizaci\n" #: options.h:1766 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_auth 1/2/3\n" "\t - autorizaèní schéma pro HTTP proxy authorizaci\n" #: options.h:1778 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "\t-logfile $file - jméno souboru, kde se ulo¾í zprávy\n" #: options.h:1789 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "\t-slogfile $file - jméno souboru pro ukládání zkrácených zpráv\n" #: options.h:1800 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "\t-stime/-nostime - výpis èasu zaèátku a konce pøenosu\n" #: options.h:1822 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - pøi synchronizaci odstraò neplatné soubory a " "adresáøe\n" #: options.h:1847 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" "\t-auth_file $file - soubor, kde máte ulo¾eny autorizaèní informace\n" "\t informace o formátu zápisu naleznete v dokumentaci\n" #: options.h:1859 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" "\t-base_level $nr - poèet úrovní adresáøového stromu, které se pøeskoèí\n" "\t od vrchního adresáøe\n" #: options.h:1870 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "\t-ftp_active - pou¾ij aktivní datové FTP spojení\n" #: options.h:1881 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "\t-ftp_passive - pou¾ij pasivní datové FTP spojení\n" #: options.h:1895 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "\t-msgcat $dir - adresáø, kde jsou ulo¾eny pøeklady zpráv\n" #: options.h:1910 msgid "\t-language $str - set language for messages\n" msgstr "\t-language $str\t - výbìr jazyka zpráv\n" #: options.h:1922 msgid "\t-quiet - don't show output messages\n" msgstr "\t-quiet - neukazuj výstupní zprávy\n" #: options.h:1933 msgid "\t-verbose - show output messages (default)\n" msgstr "\t-verbose - ukazuj výstupní zprávy (standardnì)\n" #: options.h:1944 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-newer_than $time - stáhni pouze dokumenty novìj¹í ne¾ $time\n" "\t formát $time: RRRR.MM.DD.hh.mm\n" #: options.h:1956 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-older_than $time - stáhni pouze dokumenty star¹í ne¾ $time\n" "\t formát $time: RRRR.MM.DD.hh.mm\n" #: options.h:1968 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-schedule $time - nastav spu¹tìní pavuka na $time\n" "\t formát $time: RRRR.MM.DD.hh:mm\n" #: options.h:1980 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "" "\t-reschedule $nr - poèet hodin mezi dvìma spu¹tìníma\n" "\t pro cyklické spou¹tìní\n" #: options.h:1992 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" "\t-dont_leave_site/-leave_site\n" "\t - zaka¾/povol opu¹tìní serveru startovního URL\n" #: options.h:2015 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" "\t-dont_leave_dir/-leave_dir\n" "\t - neopou¹tìj adresáø startovní URL\n" #: options.h:2038 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" "\t-preserve_time/-nopreserve_time\n" "\t - zachovej datum modifikace souboru\n" #: options.h:2061 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" "\t-preserve_perm/-nopreserve_perm\n" "\t - zachovej práva souboru\n" #: options.h:2084 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - zachovej absolutní symbolické odkazy\n" #: options.h:2107 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" "\t-leave_level $nr - kolik úrovní stromu od zaèátku\n" "\t místa mám opustit, (0 == nestarej se) standardnì 0\n" #: options.h:2119 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "\t-cookie_file $file - soubor, kde jsou ulo¾eny cookies\n" #: options.h:2130 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" "\t-cookie_send/-nocookie_send\n" "\t - poslat cookie informace v HTTP po¾adavku\n" #: options.h:2153 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" "\t-cookie_recv/-nocookie_recv\n" "\t - pøijmout cookie informace z HTTP odpovìdi\n" #: options.h:2176 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" "\t-cookie_update/-nocookie_update\n" "\t - aktualizace cookies v souboru s cookies\n" #: options.h:2199 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" "\t-cookie_check/-nocookie_check\n" "\t - zkontrolovat nastavení cookies pro zdrojovou doménu\n" #: options.h:2222 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "\t-cookies_max $nr - maximální poèet cookies v cookie cachi\n" #: options.h:2233 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" "\t-disabled_cookie_domains $list\n" "\t - seznam domén odkud nepøijímám cookies\n" #: options.h:2245 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - zaka¾ zpracování URL z atribudu $ATTRUB\n" "\t v HTML tagu $TAG\n" #: options.h:2258 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - povol zpracování URL z atributu $ATTRIB\n" "\t v HTML tagu $TAG\n" #: options.h:2274 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "\t-gui_font $font - jméno písma pou¾itého v grafickém rozhraní\n" #: options.h:2286 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" "\t-user_condition $str\n" "\t - u¾ivatelský skript pro omezení nìkterých URL\n" "\t bli¾¹í informace naleznete v manuálové stránce\n" #: options.h:2299 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "" "\t-tr_del_chr $str - znaky které budou odstranìny ze jména\n" "\t místního souboru\n" #: options.h:2311 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" "\t-tr_str_str $str1 $str2\n" "\t - zmìò $str1 za $str2 ve jménì místního souboru\n" #: options.h:2323 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - zmìn znaky z $chrset1 za $chrset2 ve jménì místního " "souboru\n" #: options.h:2335 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "\t-index_name $str - jméno seznamu adresáøe místo _._.html\n" #: options.h:2346 msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "\t--store_name $str - jméno prvního stáhnutého dokumentu\n" #: options.h:2368 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - porovnej velikost sta¾eného souboru\n" "\t s hodnotou udanou serverem\n" #: options.h:2392 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" "\t-urls_file $file - Ète URL ze souboru, dokud nenarazí\n" "\t na teèku \".\" na samostatném øádku.\n" #: options.h:2404 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" "\t-bg/-nobg - odpoutej pavuka z terminálu a nezobrazuj\n" "\t nic na obrazovku\n" #: options.h:2427 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "\t-maxrate $nr - omez maximální rychlost pøenosu (kB/s)\n" #: options.h:2438 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "\t-minrate $nr - omez minimální rychlost pøenosu (kB/s)\n" #: options.h:2449 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "\t-bufsize $nr - velikost vyrovnávací pamìti pro ètení (kB)\n" #: options.h:2460 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "\t-file_quota $nr - maximální velikost pøená¹eného souboru (kB)\n" #: options.h:2471 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "" "\t-trans_quota $nr - maximální velikost dat pøenesených\n" "\t v jedné seanci (kB)\n" #: options.h:2482 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "\t-fs_quota $nr - velikost volného místa (kB)\n" #: options.h:2493 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" "\t-enable_js/-disable_js\n" "\t - povol pøenos zdrojových kódù v javascriptu\n" #: options.h:2516 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" "\t-fnrules $t $m $r - pravidla pro tvoøení jmen ulo¾ených souborù\n" "\t (více v manuálových stránkách)\n" #: options.h:2528 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" "\t-store_info/-nostore_info\n" "\t - s ka¾dým souborem ulo¾ i informace o nìm\n" #: options.h:2551 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" "\t-all_to_local/-noall_to_local\n" "\t - zmìò v¹echny odkazy v HTML dokumentu\n" "\t na místní ihned po sta¾ení\n" #: options.h:2575 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" " -sel_to_local/-nosel_to_local\n" " - zmìò v¹echny odkazy v HTML dokumentu,\n" " který vyhovyje podmínkám, na místní\n" " ihned po sta¾ení\n" #: options.h:2600 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" "\t-all_to_remote/-noall_to_remote\n" "\t - zmìò v¹echny odkazy v HTML dokumentu\n" "\t na vzálení ihned po sta¾ení\n" "\t a ji¾ nemìò\n" #: options.h:2625 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "\t-remind_cmd $str - pøíkaz na odeslání výsledkù módu reminder\n" #: options.h:2636 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" "\t-auto_referer/-noauto_referer\n" "\t - pro ka¾dé úvodní URL po¹li v HTTP po¾adavku\n" "\t polo¾ku Referrer:, která je obsahuje\n" #: options.h:2660 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" "\t-url_strategie $strategie\n" "\t - strategie výbìru URL\n" "\t (poøadí v jakém budou URL stahována)\n" "\t $strategie je jedním z:\n" "\t level - hloubka v URL stromu\n" "\t leveli - hloubka v URL stromu,\n" "\t ale vlo¾ené objekty nejdøíve\n" "\t pre - srovnaný URL strom\n" "\t prei - srovnaný URL strom,\n" "\t ale vlo¾ené objekty nejdøíve\n" #: options.h:2683 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "\t-nscache_dir $dir - cesta k cache adresáøi prohlí¾eèe Netscape\n" #: options.h:2698 msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr "\t-ie_cache - povol naèítání z MSIE cache\n" #: options.h:2728 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" "\t-remove_adv/-noremove_adv\n" "\t-remove_adv/-noremove_adv\n" "\t - odstraòovat reklamní prou¾ky, pøedpokládá se\n" "\t nastavení regulárního výrazu pro testování\n" "\t reklamy volbou -adv_re\n" #: options.h:2761 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "" "\t-adv_re $RE - regulární výraz pro testování na\n" "\t reklamní prou¾ky\n" #: options.h:2777 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" "\t-check_bg/-nocheck_bg\n" "\t - pøí bìhu na pozadí nevypisuj ¾ádné zprávy\n" "\t na obrazovku\n" #: options.h:2806 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" "\t-send_if_range/-nosend_if_range\n" "\t - po¹li hlavièku If-Range v HTTP po¾adavku\n" "\t toto zapnìte, pokud server podporuje reget, ale\n" "\t generuje rùzné Etags pro dva po¾adavky\n" #: options.h:2831 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "\t-sched_cmd $str - pøíkaz na plánování\n" #: options.h:2842 msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" "\t-unique_log/-nounique_log\n" "\t - pokud je pùvodní logovací soubor uzamèen, zkus najít\n" "\t dal¹í pøidáním èísla za jméno uzamèeného souboru\n" #: options.h:2866 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" "\t-post_cmd $str - tento pøíkaz bude proveden po úspì¹ném sta¾ení\n" "\t dokumentu\n" #: options.h:2882 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" "\t-ssl_version $v - verse SSL protokolu, která bude pou¾ita pro spojení,\n" "\t pøípustné hodnoty: ssl23,ssl2,ssl3,tls1\n" #: options.h:2885 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" "\t-ssl_version $v - verse SSL protokolu, která bude pou¾ita pro spojení,\n" "\t pøípustné hodnoty: ssl23,ssl2,ssl3\n" #: options.h:2903 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" "\t-unique_sslid/-nounique_sslid\n" "\t - pou¾ij jedineèné SSL ID pro ka¾dou SSL seanci\n" #: options.h:2931 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "\t-httpad $hdr - dodateèné HTTP hlavièky\n" #: options.h:2942 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "\t-statfile $str - statistika stahovanýh programù\n" #: options.h:2956 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "" "\t-ewait - poèkej na zkonèení programu po zkonèení stahování\n" #: options.h:2987 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "\t-aip_pattern $re - RE pro povolené IP adresy serverù\n" #: options.h:3002 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "\t-dip_pattern $re - RE zakázaných IP adres serverù\n" #: options.h:3014 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "\t-site_level $nr - maximální povolená vzdálenost od poèátku\n" #: options.h:3026 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" "\t-use_http11/-nouse_http11\n" "\t - povolí nebo zaká¾e pou¾ití mo¾ností protokolu\n" "\t HTTP/1.1, standardnì vypnuto\n" #: options.h:3050 msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" "\t-max_time $nr - nastaví maximální dobu bìhu programu\n" "\t v minutách, standardnì 0 = bez limitu\n" "\t lze pou¾ít i desetinná èísla pro krat¹í dobu\n" #: options.h:3065 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" "\t-local_ip $str - pou¾ij tuto lokální IP adresu sí»ového rozhraní.\n" "\t Tato volba je pro multihomed poèítaèe.\n" #: options.h:3077 msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-request $req - roz¹íøené informace pro po¾adavek, pou¾ito k " "nastavení\n" "\t informací pro GET a POST\n" "\t formát $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (více informací v manuálové stránce)\n" #: options.h:3095 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" "\t-hash_size $nr - velikost interní hash tabulek (pro ladìní výkonu)\n" #: options.h:3109 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "\t-nthreads $nr - nastav poèet najednou bì¾ících vláken\n" #: options.h:3124 msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" "\t-immesg/-noimmesg - zapi¹ zprávy ihned po vygenerování, ne a¾\n" "\t to byde bezpeèné (z pohledu MT)\n" #: options.h:3152 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-formdata $data - pou¾ito na urèení HTML polo¾ek formuláøù pro HTML\n" "\t formuláøe nalezené pøi stahování. Jen formuláøe\n" "\t zmínìné v této volbì budou automaticky zpracovány.\n" "\t \"URL:$url\"\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t (více informací naleznete v manuálové stránce)\n" #: options.h:3170 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" "\t-dumpfd $nr - èíslo file descriptoru, kam se má dokument\n" "\t zapsat, místo do souboru\n" #: options.h:3182 msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" "\t-dump_urlfd $nr - èíslo file descriptoru, kam se mají zapsat\n" "\t URL nalezená v dokumentech\n" #: options.h:3194 msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" "\t-del_after/-nodel_after\n" "\t - zma¾ FTP dokument po úspì¹ném pøenesení\n" #: options.h:3217 msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" "\t-unique_name/-nounique_name\n" "\t - v¾dy vytvoø jedineèné jméno pro ka¾dý dokument\n" #: options.h:3240 msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - neopou¹tìj adresáø, kterým jsme se vstoupili na tento " "server\n" #: options.h:3263 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" "\t-singlepage/-nosinglepage\n" "\t - stáhni jedinou HTML stránku se v¹emi vlo¾enými " "objekty\n" #: options.h:3286 msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" "\t-dump_after/-nodump_after\n" "\t - pou¾ití spoleènì s -dumpfd, po úspì¹ném stáhnutí\n" "\t a zpracování HTML dokumentu ho po¹li do roury\n" #: options.h:3311 msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" "\t-dump_response/-nodump_response\n" "\t - pou¾ití spoleènì s -dumpfd, také odpovìdi HTTP " "serverù\n" "\t budou poslány do roury\t\n" #: options.h:3338 msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" "\t-auth_ntlm_domain $str\n" "\t - u¾ivatelské jméno pro HTTP NTLM autorizaci\n" #: options.h:3354 msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" "\t-auth_ntlm_domain $str\n" "\t - u¾ivatelské jméno pro HTTP proxy NTLM autorizaci\n" #: options.h:3370 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" "\t-js_pattern $re - dal¹í regulární výraz pro zji¹»ování URL\n" "\t v DOM atributech HTML znaèek\n" #: options.h:3383 msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" "\t-follow_cmd $str - podle exit kódu programu se rozhodne, zda se mají\n" "\t zpracovat odkazy v aktuálním dokumentu\n" #: options.h:3395 msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - stáhni symbolické odkazy jako skuteèné soubory nebo " "adresáøe\n" #: options.h:3421 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform $p $t $h $a\n" "\t - vlastní javascript vzor pro transformaci\n" "\t $p - vzor\n" "\t $t - transformace\n" "\t $h - HTML znaèka nebo * nebo \"\"\n" "\t $a - HTML atribut\n" #: options.h:3441 msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform $p $t $h $a\n" "\t - vlastní javascript vzor pro transformaci\n" "\t a pøepisování URL v prvním vzoru\n" "\t $p - vzor\n" "\t $t - transformace\n" "\t $h - HTML znaèka nebo * nebo \"\"\n" "\t $a - HTML atribut\n" #: options.h:3459 msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_user $str\n" "\t - u¾ivatelské jméno pro FTP proxy autorizaci\n" #: options.h:3471 msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_pass $str\n" "\t - heslo pro FTP proxy autorizaci\n" #: options.h:3483 msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - pou¾íj omezovací podmínky také na vlo¾ené objekty\n" #: options.h:3506 msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" "\t-ftp_list_options $str\n" "\t - dal¹í volby nebo parametry FTP pøíkazu LIST\n" "\t nebo NLST\n" #: options.h:3519 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - provìd zvlá¹tní kontrolu existence FTP adresáøe jako\n" "\t obejití chyby v WuFTPd odpovìdi pøi pokusu o vypsání\n" "\t neexistujícího adresáøe\n" #: options.h:3544 msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" "\t-post_update/-nopost_update\n" "\t - v rodièovských dokumentech zmìò jenom okazy na\n" "\t aktuální dokument\n" #: options.h:3568 msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" "\t-info_dir $dir - zvlá¹tní adresáø pro ulo¾ení info souborù\n" "\t místo pøímo do adresáøe s dokumenty\n" #: options.h:3583 msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "\t-mozcache_dir $dir - cesta k cache adresáøi prohlí¾eèe Mozilla\n" #: options.h:3595 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "\t-aport $list - povol stahování dokumentù ze serverù na tìchto portech\n" #: options.h:3607 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "\t-dport $list - zaka¾ stahování dokumentù ze serverù na tìchto portech\n" #: options.h:3619 msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" "\t-hack_add_index/-nohack_add_index\n" "\t - toto je hack, který umo¾òuje pøidání adresáøù\n" "\t do fronty souborù\n" #: options.h:3643 msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" "\t-default_prefix $str\n" "\t - standardní URL pøedpona pro podadresáøe\n" "\t stahovaných souborù\n" #: options.h:3659 msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" "\t-js_script_file $file\n" "\t - soubor s JavaScript funkcemi\n" #: options.h:3672 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" " -ftp_login_handshake $host $handshake\n" " - vlastní pøihla¹ovací procedura pro FTP server\n" #: pavuk.c:106 msgid "QUIT signal catched\n" msgstr "zachycen signál QUIT\n" #: pavuk.c:259 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "Nedostateèný poèet parametrù \"-msgcat\"\n" #: pavuk.c:273 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "Nedostateèný poèet parametrù \"-scenario\"\n" #: pavuk.c:303 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "Chyba: File descriptor z volby -dumpfd je ¹patný\n" #: pavuk.c:314 msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "Chyba: File descriptor z volby -dump_urlfd ¹patný\n" #: pavuk.c:366 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "POZOR: scndir není specifikován - ukládám do aktualního adresáøe\n" #: pavuk.c:403 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "Nelze pøepnou pavuka na pozadí - pokraèuji v bìhu na popøedí\n" #: pavuk.c:407 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "Pavuk pobì¾í na pozadí s PID %d\n" #: pavuk.c:427 #, c-format msgid "reading URLs from file - %s\n" msgstr "ètu URL ze souboru - %s\n" #: recurse.c:82 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "Znovu naplánuj zamknuté URL na è. %d\n" #: recurse.c:95 msgid "Running post-processing command\n" msgstr "Spou¹tím program pro úpravu po sta¾ení\n" #: recurse.c:243 #, c-format msgid "retry no. %d\n" msgstr "pokus è. %d\n" #: recurse.c:246 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "URL[%2d]: %5d(%d) of %5d %s\n" #: recurse.c:249 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "URL: %5d(%d) z %5d %s\n" #: recurse.c:260 recurse.c:394 msgid "Starting download" msgstr "Zaèínám stahovat" #: recurse.c:284 msgid "Already processed\n" msgstr "Ji¾ zpracováno\n" #: recurse.c:291 msgid "Disallowed by user\n" msgstr "Zakázáno u¾ivatelem\n" #: recurse.c:305 msgid "Disallowed by rules\n" msgstr "Zakázané podle pravidel\n" #: recurse.c:312 msgid "Checking \"robots.txt\"" msgstr "Kontroluji \"robots.txt\"" #: recurse.c:316 msgid "Disallowed by \"robots.txt\"\n" msgstr "Zakázané v \"robots.txt\"\n" #: recurse.c:326 msgid "This URL type is not supported with ftpdir mode\n" msgstr "Tento typ URL není podporován v módu ftpdir\n" #: recurse.c:346 msgid "No transfer - file not expired\n" msgstr "®ádný pøenos - soubor neexpiroval\n" #: recurse.c:362 #, c-format msgid "Starting time : %s\n" msgstr "Èas startu : %s\n" #: recurse.c:404 recurse.c:563 #, c-format msgid "Ending time : %s\n" msgstr "Konec : %s\n" #: recurse.c:411 recurse.c:566 msgid "download" msgstr "stahuj" #: recurse.c:511 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "poslední dokument uzamèen -> èekám 5 sekund\n" #: recurse.c:577 msgid "Relocating and scanning HTML document" msgstr "Relokuji a prohledávám HTML dokument" #: recurse.c:629 msgid "Dumping processed document" msgstr "Posílám zpracované dokumenty do roury" #: recurse.c:649 msgid "Storing document" msgstr "Ukládám dokument" #: recurse.c:655 msgid "Store failed\n" msgstr "Ukladání selhalo\n" #: recurse.c:762 recurse.c:845 msgid "Done" msgstr "Hotovo" #: recurse.c:922 remind.c:379 msgid "Sleeping ..." msgstr "Uspaný ..." #: recurse.c:936 remind.c:396 msgid "Exiting ..." msgstr "Konèím ..." #: recurse.c:1048 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d bytù)\n" #: recurse.c:1106 msgid "Searching for files to resume" msgstr "Hledám soubor pro pokraèování" #: recurse.c:1133 #, c-format msgid "Adding %s to resume list\n" msgstr "Pøipojení %s do seznamu na dokonèení pøenosu\n" #: recurse.c:1165 msgid "Searching for documents to synchronize" msgstr "Hledám dokumenty k synchronizaci" #: recurse.c:1220 recurse.c:1245 #, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "Pøidávám soubor %s do seznamu pro synchronizaci jako URL %s\n" #: remind.c:45 #, c-format msgid "Checking: %s\n" msgstr "Kontroluji: %s\n" #: remind.c:170 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "©patná polo¾ka v databázi reminder - %s\n" #: remind.c:529 msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "Toto je výsledek spu¹tìní pavuka v modu reminder\n" "\n" #: remind.c:540 msgid "Changed URLs\n" msgstr "Zmìnìná URL\n" #: remind.c:561 msgid "URLs with some errors\n" msgstr "URL s chybami\n" #: robots.c:166 msgid "transfering \"robots.txt\"" msgstr "pøenos \"robots.txt\"" #: robots.c:169 msgid "transfering \"robots.txt\"\n" msgstr "pøenos \"robots.txt\"\n" #: robots.c:230 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "Hmm: pøesmìrování \"robots.txt\" na %s ???\n" #: stats.c:138 stats.c:221 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "Celkový poèet URL ve frontì: %d\n" #: stats.c:139 stats.c:223 #, c-format msgid "Starting urls: %d\n" msgstr "Poèáteèní URL: %d\n" #: stats.c:142 stats.c:228 msgid "Not processed yet: %d (%3d%%)\n" msgstr "Je¹tì nezpracované: %d (%3d%%)\n" #: stats.c:147 stats.c:235 msgid "Processed OK: %d (%3d%%)\n" msgstr "V poøádku zpracované: %d (%3d%%)\n" #: stats.c:150 stats.c:241 msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "Naèteno z lokálního stromu: %d (%3d%%)\n" #: stats.c:153 stats.c:247 msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "Naèteno z cache adresáøe prohlí¾eèe Netscape: %d (%3%%)\n" #: stats.c:156 stats.c:253 msgid "Downloaded over network: %d (%3d%%)\n" msgstr "Sta¾eno ze sítì: %d (%3d%%)\n" #: stats.c:159 stats.c:259 msgid "Moved to another location: %d (%3d%%)\n" msgstr "Pøesunuto jinam: %d (%3d%%)\n" #: stats.c:163 stats.c:265 msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "Sta¾eno zkrácenì: %d (%3d%%)\n" #: stats.c:169 stats.c:272 msgid "Non fatal errors: %d (%3d%%)\n" msgstr "Nekritické chyby: %d (%3d%%)\n" #: stats.c:175 stats.c:279 msgid "Not found documents: %d (%3d%%)\n" msgstr "Nenalezené dokumenty: %d (%3d%%)\n" #: stats.c:181 stats.c:286 msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "Dokumenty s kritickými chybami: %d (%3d%%)\n" #: stats.c:187 msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "Dokumenty s neznámým stavem: %d (%3d%%)\n" #: stats.c:293 msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "Dokumenty s nespecifikovaným stavem: %d (%3d%%)\n" #: stats.c:358 msgid "Pavuk: save status page" msgstr "Pavuk: ulo¾ stránku se stavem" #: stats.c:379 stats.c:537 msgid "Not available yet" msgstr "Nedostupné" #: stats.c:462 msgid "Pavuk: status page" msgstr "Pavuk: stavová stránka" #: stats.c:479 msgid "Status page" msgstr "Stavová stránka" #: stats.c:492 msgid "Save ..." msgstr "Ulo¾it ..." #: stats.c:499 msgid "Refresh" msgstr "Obnovit" #: stats.c:526 msgid "Try download" msgstr "Zkusit stáhnout" #: tools.c:109 msgid "no error" msgstr "bez chyby" #: tools.c:114 msgid "host not found" msgstr "server nenalezen" #: tools.c:119 msgid "temporary error (try again later)" msgstr "doèasná chyba (zkuste to pozdìji)" #: tools.c:124 msgid "non recoverable error" msgstr "nenapravitelná chyba" #: tools.c:129 msgid "name is valid, but doesn't have an IP address" msgstr "platné jméno, ale nemá IP adresu" #: tools.c:133 msgid "unknown hostname translation error" msgstr "neznámá chyba pøi pøekladu jména" #: tools.c:315 tools.c:330 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "èekám na uvolnìní zámku na FD : %d\n" #: uconfig.c:998 msgid "Bad parameter - Working subdirectory" msgstr "©patný parametr - pracovní adresáø" #: uconfig.c:1178 msgid "Bad parameter - Cache directory" msgstr "©patný parametr - Cache adresáøe" #: uexit.c:30 msgid "Error occured while executing user-exit script" msgstr "Nastala chyba pøi provádìní u¾ivatelského exit skriptu" #: update_links.c:40 #, c-format msgid "Entering directory %s\n" msgstr "Vstupuji do adresáøe %s\n" #: update_links.c:69 #, c-format msgid "Relocating %s\n" msgstr "Pøemístìní %s\n" #: update_links.c:72 #, c-format msgid "Omitting %s\n" msgstr "Vynechávám %s\n" #: update_links.c:86 #, c-format msgid "Leaving directory %s\n" msgstr "Opou¹tím adresáø %s\n" #: update_links.c:104 #, c-format msgid "Can't open directory %s\n" msgstr "Není mo¾né otevøít adresáø %s\n" #: url.c:1000 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "nepodporovaný typ URL\"%s\"\n" #: url.c:1152 msgid "Moved to already processed URL.\n" msgstr "Ji¾ zpracované URL.\n" #: url.c:2767 msgid "Missing specification of URL in request\n" msgstr "Chybí URL pro po¾adavek\n" #: url.c:2776 msgid "Missing request fields specification for POST request\n" msgstr "Chybí polo¾ka request v dotazu POST\n" #: url.c:2784 msgid "Multipart encoding not supported with GET requests\n" msgstr "Kódování multipart není podporováno v po¾adavku GET\n" pavuk-0.9.35/po/es.po0000644000175000001440000041743210151073675011260 00000000000000# Spanish Message Catalog for Pavuk. # Copyright (C) 1999-2000, Free Software Foundation, Inc. # Francisco Javier Comerón Gayoso , 1999-2000. # # Revision 9 for Pavuk 0.9pl26 # msgid "" msgstr "" "Project-Id-Version: R10-0.9pl27\n" "POT-Creation-Date: 2001-07-30 10:14+0200\n" "PO-Revision-Date: 2001-05-04 13:00+CEST\n" "Last-Translator: Francisco Javier Comerón Gayoso \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: abstract.c:46 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "" #: abstract.c:84 doc.c:550 msgid "File redirect\n" msgstr "Fichero redirigido\n" #: abstract.c:120 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "Recuperando copia desde la caché local del NS - %s\n" #: abstract.c:152 #, fuzzy, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "Recuperando copia desde caché local de MSIE - %s\n" #: abstract.c:185 #, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "Recuperando copia desde caché local de MSIE - %s\n" #: abstract.c:221 msgid "Unsupported URL\n" msgstr "URL no soportada\n" #: abstract.c:341 abstract.c:377 msgid "Warning: broken ftp transfer ...\n" msgstr "Advertencia: se interrumpió la transferencia ftp ..\n" #: abstract.c:351 msgid "Error removing FTP document from remote server\n" msgstr "" #: abstract.c:496 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "" "Error leyendo documento con codificación \"chunked\" en transferencia !!!\n" #: ainterface.c:118 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "Eliminando URL no soportada: %s\n" #: ainterface.c:199 msgid "Specify at least one starting URL!" msgstr "Indíque al menos una URL inicial" #: ainterface.c:201 msgid "Specify at least one starting URL!\n" msgstr "Indíque al menos una URL inicial !!!\n" #: ainterface.c:472 msgid "Can't list available message catalogs\n" msgstr "Imposible listar los catálogos de mensajes disponibles\n" #: authinfo.c:107 msgid "Bad section - specify protocol\n" msgstr "Sección incorrecta - indíque un protocolo\n" #: authinfo.c:112 msgid "Bad section - specify hostname\n" msgstr "Sección incorrecta - especifique un nombre de host\n" #: authinfo.c:159 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "Imposible analizar : \"%s\"\n" #: authinfo.c:179 #, c-format msgid "Bad protocol - %s\n" msgstr "Protocolo incorrecto - %s\n" #: authinfo.c:190 #, c-format msgid "Bad port number %s\n" msgstr "Número de puerto incorrecto %s\n" #: authinfo.c:211 #, c-format msgid "Unknown auth type - %s\n" msgstr "Tipo de autorización desconocida - %s\n" #: cleanup.c:60 msgid "press any key to exit\n" msgstr "presione cualquier tecla para salir\n" #: cmdparse.c:129 #, fuzzy, c-format msgid "Error parsing commandline at: %s\n" msgstr "Error analizando la línea de comando\n" #: cmdparse.c:186 #, c-format msgid "Unable to parse commandline: %s\n" msgstr "Imposible analizar la línea de comando: %s\n" #: config.c:44 msgid "Level order" msgstr "Nivel" #: config.c:45 msgid "Level order, inline first" msgstr "Nivel, primero incrustados" #: config.c:46 msgid "Pre order" msgstr "Pre-orden" #: config.c:47 msgid "Pre order, inline first" msgstr "Pre-orden, primero incrustados" #: config.c:115 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "Utilización: %s [opciones] [cualquier número de URLs]\n" "pavuk-%s %s\n" #: config.c:131 #, c-format msgid "Type \"%s --help\" for long help\n" msgstr "Escriba \"%s --help\" para la ayuda extendida\n" #: config.c:139 msgid "Optional features available :\n" msgstr "Características opcionales disponibles:\n" #: config.c:141 msgid " - Debug mode\n" msgstr " - Modo depuración\n" #: config.c:145 msgid " - GNU gettext internationalization of messages\n" msgstr " - Internacionalización de mensajes basada en \"gettext\" de GNU\n" #: config.c:149 msgid " - flock() document locking\n" msgstr " - Bloqueo de documentos basada en flock()\n" #: config.c:153 msgid " - fcntl() document locking\n" msgstr " - Bloqueo de documentos basada en fcntl()\n" #: config.c:158 msgid " - Gtk GUI interface\n" msgstr " - Interfaz gráfico basado en Gtk\n" #: config.c:161 msgid " - URL tree preview\n" msgstr " - Previsualización del árbol de URLs\n" #: config.c:166 msgid " - http over SSL\n" msgstr " - HTTP sobre SSL\n" #: config.c:171 msgid " - Socks v4 proxy support\n" msgstr " - Soporte para Socks v4 proxy\n" #: config.c:173 msgid " - Socks v5 proxy support\n" msgstr " - Soporte para Socks v5 proxy\n" #: config.c:177 msgid " - with filesystem free space checking\n" msgstr " - con verificación de espacio libre\n" #: config.c:181 msgid " - with optional regex patterns in -fnrules and -*rpattern options\n" msgstr "" " - con patrones ER opcionales para las opciones -fnrules y -*rpattern\n" #: config.c:185 msgid " - with POSIX regexp\n" msgstr " - con regexp POSIX\n" #: config.c:189 msgid " - with Bell V8 regexp\n" msgstr " - con regexp Bell V8\n" #: config.c:193 msgid " - with BSD regexp\n" msgstr " - con regexp BSD\n" #: config.c:197 msgid " - with GNU regexp\n" msgstr " - con regexp GNU\n" #: config.c:201 msgid " - with PCRE regexp\n" msgstr " - con regexp PCRE\n" #: config.c:205 msgid " - with support for loading files from Netscape browser cache\n" msgstr "" " - con soporte para la recuperación de ficheros desde la caché de Netscape\n" #: config.c:209 msgid "" " - with support for detecting whether pavuk is running as background job\n" msgstr "" " - con soporte para detectar si pavuk se está ejecutando en segundo plano\n" #: config.c:213 msgid " - with multithreading support\n" msgstr " - con soporte de ejecución multihilo\n" #: config.c:217 msgid " - with NTLM authorization support\n" msgstr " - con soporte para autorización NTLM\n" #: config.c:221 msgid " - with JavaScript bindings\n" msgstr "" #: config.c:295 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "Elemento HTML no soportado: %s.%s\n" #: config.c:654 msgid "Error parsing commandline\n" msgstr "Error analizando la línea de comando\n" #: config.c:661 #, fuzzy, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "Insuficiente número de parámetros para la opción \"%s\"\n" #: config.c:668 #, c-format msgid "Unknown option %s\n" msgstr "Opción desconocida: %s\n" #: config.c:675 #, c-format msgid "Wrong format of option %s\n" msgstr "Formato incorrecto para la opción %s\n" #: config.c:684 #, fuzzy, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "ADVERTENCIA: la configuración actual no soporta la opción \"%s\"!\n" #: config.c:697 #, fuzzy, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "Por favor, aporte un número con el parámetro \"%s\"\n" #: config.c:762 config.c:1113 http_proxy.c:120 #, c-format msgid "Unknown port \"%s\"\n" msgstr "El puerto \"%s\" es desconocido\n" #: config.c:778 config.c:1126 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "Método de autentificación incorrecto \"%s\"\n" #: config.c:788 config.c:1136 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "Modo de operación incorrecto \"%s\"\n" #: config.c:810 #, fuzzy, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "Por favor, especifique un número flotante con el parámetro \"%s\"\n" #: config.c:829 #, fuzzy, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "Por favor especifique un tipo de condición apropiado para %s (%s)\n" #: config.c:852 #, fuzzy, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "Por favor, especifique una ER válida con el parámetro \"%s\"\n" #: config.c:863 config.c:1248 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "Estrategia de planificación de URLs desconocida - \"%s\"\n" #: config.c:871 config.c:1259 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "Versión de SSL desconocida - \"%s\"\n" #: config.c:880 config.c:1270 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "Cabecera HTTP adicional inválida - \"%s\"\n" #: config.c:903 config.c:1293 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "Especificación de solicitud inválida - \"%s\"\n" #: config.c:948 #, fuzzy, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "Parámetros inválidos para la opción \"%s\"\n" #: config.c:964 #, fuzzy, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "Parámetros inválidos para la opción \"%s\"\n" #: config.c:981 #, fuzzy, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "Parámetros inválidos para la opción \"%s\"\n" #: config.c:1031 #, c-format msgid "WARNING: option \"%s\" not supported in current configuration!\n" msgstr "ADVERTENCIA: la configuración actual no soporta la opción \"%s\"!\n" #: config.c:1055 #, c-format msgid "Please specify number \"%s\"\n" msgstr "Por favor, suministre un número \"%s\"\n" #: config.c:1073 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "Sólo se admite \"true\" y \"false\": \"%s\"\n" #: config.c:1147 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "Parámetro de hora incorrecto \"%s\"\n" #: config.c:1178 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "Por favor, suministre un número flotante \"%s\"\n" #: config.c:1195 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "Por favor, suministre los argumentos apropiados para %s\n" #: config.c:1207 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "Por favor especifique un tipo de condición apropiado para %s (%s)\n" #: config.c:1235 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "Por favor utilice una ER válida \"%s\"\n" #: config.c:1327 #, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "Especificación js_transform inválida - \"%s\"\n" #: config.c:1347 #, fuzzy, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "Especificación de solicitud inválida - \"%s\"\n" #: config.c:1362 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "" #: config.c:1388 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "Imposible analizar \"%s\"\n" #: config.c:1430 #, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "ERROR: falló la carga del escenario (%s)\n" #: cookie.c:216 #, c-format msgid "Unable to parse : %s\n" msgstr "Imposible analizar: %s\n" #: cookie.c:389 msgid "Updating cookie file\n" msgstr "Actualizando fichero de \"cookies\"\n" #: cookie.c:418 msgid "Cookie file has changed - > synchronizing\n" msgstr "El fichero de cookies ha sido modificado - > sincronizando\n" #: cookie.c:567 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "" "El servidor %s está intentando establecer el cookie para el dominio %s\n" #: cookie.c:578 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "Eliminando cookie para el dominio inhabilitado %s\n" #: debugl.c:16 msgid "HTML parsers" msgstr "analizadores HTML" #: debugl.c:17 msgid "Server responses" msgstr "Respuestas del servidor" #: debugl.c:18 msgid "Client requests" msgstr "Solicitudes de clientes" #: debugl.c:19 msgid "Procedure calling" msgstr "Llamada a procedimientos" #: debugl.c:20 msgid "File locking" msgstr "Bloqueo de ficheros" #: debugl.c:21 msgid "Networking code" msgstr "Código de red" #: debugl.c:22 msgid "Miscelanous" msgstr "Miscelánea" #: debugl.c:23 msgid "Extended user infos" msgstr "Información extendida de usuario" #: debugl.c:24 msgid "Multithreading - locking" msgstr "Multihilo - bloqueo" #: debugl.c:25 msgid "Multithreading - threads" msgstr "Multihilo - hilos" #: debugl.c:26 msgid "POST request data" msgstr "datos petición POST" #: debugl.c:27 msgid "Limiting conditions" msgstr "Delimitando las condiciones" #: debugl.c:66 #, c-format msgid "Bad debug level selection : %s\n" msgstr "Selección incorrecta de nivel de depurado : %s\n" #: decode.c:184 msgid "decode" msgstr "decodificar" #: digest_auth.c:155 msgid "Trying to do HTTP Digest authorization\n" msgstr "Intentando llevar a cabo autorización HTTP abreviada\n" #: digest_auth.c:202 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "Intentando llevar a cabo autorización abreviada del proxy HTTP\n" #: dinfo.c:368 dinfo.c:387 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr "Error analizando fichero .pavuk_info; campo: %s\n" #: doc.c:297 msgid "Transfering data" msgstr "Transfiriendo datos" #: doc.c:312 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt: falló SO_RCVBUF" #: doc.c:333 msgid "storing document" msgstr "Guardando el documento" #: doc.c:399 #, fuzzy msgid "Document transfer data" msgstr "Transferencia de datos finalizada" #: doc.c:420 msgid "Data transfer done" msgstr "Transferencia de datos finalizada" #: doc.c:597 #, c-format msgid "Trying to resume from position %d \n" msgstr "Intentando reanudar desde la posición %d \n" #: doc.c:662 msgid "Opening connection" msgstr "Abriendo conexión" #: doc.c:686 msgid "Loading local copy\n" msgstr "Cargando copia local\n" #: doc.c:912 msgid "File may be truncated\n" msgstr "El fichero puede estar truncado\n" #: doc.c:936 msgid "Decoding document - OK\n" msgstr "Decodificando documento - finalizado\n" #: doc.c:939 msgid "Decoding document - failed\n" msgstr "Decodificando documento - fallo\n" #: doc.c:942 msgid "Unsupported document encoding\n" msgstr "Codifificación de documento no soportada\n" #: doc.c:946 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "" "Se recibió fichero codificado, pero ésta no se permitía (no se altera)\n" #: doc.c:1116 #, c-format msgid "Removing improper document : %s\n" msgstr "Eliminando documento inapropiado: %s\n" #: doc.c:1178 doc.c:1244 msgid "Local file" msgstr "Fichero local" #: doc.c:1184 msgid "Gopher/Text File" msgstr "Fichero Gopher/Texto" #: doc.c:1187 msgid "Gopher/Directory" msgstr "Gopher/Directorio" #: doc.c:1190 msgid "Gopher/CSO phone book" msgstr "Gopher/agenda telefónica CSO" #: doc.c:1193 msgid "Gopher/Error" msgstr "Gopher/Error" #: doc.c:1196 msgid "Gopher/BINHEX" msgstr "Gopher/BINHEX" #: doc.c:1199 msgid "Gopher/DOS bin" msgstr "Gopher/DOS bin" #: doc.c:1202 msgid "Gopher/UUencoded" msgstr "Gopher/UUcodificado" #: doc.c:1205 msgid "Gopher/Search index" msgstr "Gopher/Índice de búsqueda" #: doc.c:1208 msgid "Gopher/Telnet session" msgstr "Gopher/Sesión telnet" #: doc.c:1211 msgid "Gopher/bin" msgstr "Gopher/bin" #: doc.c:1214 msgid "Gopher/Duplicated server" msgstr "Gopher/Servidor duplicado" #: doc.c:1217 msgid "Gopher/TN3270" msgstr "Gopher/TN3270" #: doc.c:1220 msgid "Gopher/GIF" msgstr "Gopher/GIF" #: doc.c:1223 msgid "Gopher/Image" msgstr "Gopher/Imagen" #: doc.c:1229 msgid "FTP/Directory" msgstr "FTP/Directorio" #: doc.c:1231 msgid "FTP/File" msgstr "FTP/Fichero" #: doc.c:1235 msgid "FTPS/Directory" msgstr "FTPS/Directorio" #: doc.c:1237 msgid "FTPS/File" msgstr "FTPS/Fichero" #: doc.c:1240 msgid "Unsupported type" msgstr "Tipo no soportado" #: doc.c:1447 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s] \r" msgstr "S: %s [R: %s] [ET: %s] [RT: %s] \r" #: doc.c:1450 #, c-format msgid "S: %s [R: %s] [ET: %s] \r" msgstr "S: %s [R: %s] [ET: %s] \r" #: doc.c:1490 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "Esperando a que se libere el bloqueo sobre el documento: %s\n" #: doc.c:1730 msgid "Rewriting links inside parent documents" msgstr "Convirtiendo enlaces en documento padre" #: errcode.c:21 #, c-format msgid "%s: user break\n" msgstr "%s: interrumpido por usuario\n" #: errcode.c:28 #, c-format msgid "%s: OK\n" msgstr "%s: Finalizado\n" #: errcode.c:31 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s: ERROR: guardando documento\n" #: errcode.c:34 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s: ERROR: abriendo fichero\n" #: errcode.c:37 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "%s: ERROR: no se soportan las URLs que apuntan a directorios locales\n" #: errcode.c:40 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s: ERROR: desconocido\n" #: errcode.c:43 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s: ERROR: el documento se encuentra bloqueado\n" #: errcode.c:46 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s: ERROR: leyendo desde el socket\n" #: errcode.c:49 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s: MENSAJE: mayor que el tamaño máximo permitido\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "" "%s: MENSAJE: inhabilitado por una condición del guión de salida\n" "suministrado por el usuario\n" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s: MENSAJE: menor que el tamaño mínimo permitido\n" #: errcode.c:58 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s: MENSAJE: no se admite este tipo MIME (%s)\n" #: errcode.c:61 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s: ERROR: error en conexión con proxy\n" #: errcode.c:64 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s: ERROR: transferencia interrumpida por el usuario\n" #: errcode.c:67 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "" "%s: MENSAJE: la hora de modificación del fichero no cae dentro del\n" "intervalo especificado\n" #: errcode.c:70 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s: ERROR: fichero con tamaño cero - posible error\n" #: errcode.c:73 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s: MENSAJE: el documento ya había sido procesado\n" #: errcode.c:76 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s: MENSAJE: documento inhabilitado por el usuario\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "" "%s: MENSAJE: documento inhabilitado por las restricciones de las reglas\n" #: errcode.c:82 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "" "%s: ADVERTENCIA: la velocidad de transerencia cayó por debajo del límite\n" #: errcode.c:85 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "" "%s: ADVERTENCIA: se excedió la cuota para el tamaño del fichero,\n" "se truncará el resto\n" #: errcode.c:88 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "" "%s: ADVERTENCIA: se excedió la cuota de transferencia, cancelando descarga\n" #: errcode.c:91 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "" "%s: ERROR: poco espacio libre en el sistema de ficheros,\n" "cancelando transferencia\n" #: errcode.c:94 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "" "%s: ADVERTENCIA: se excedió el tiempo de ejecución permitido, se interrumpe " "la transferencia\n" #: errcode.c:97 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s: ERROR: error FTP desconocido\n" #: errcode.c:100 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s: ERROR: el servidor FTP no soporta el comando REST\n" #: errcode.c:104 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s: ERROR: imposible listar el contenido del directorio\n" #: errcode.c:107 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s: ERROR: imposible conectar con el servidor FTP\n" #: errcode.c:110 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s: ERROR: en autentificación FTP - nombre de usuario incorrecto\n" #: errcode.c:113 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s: ERROR: en autentificación FTP - contraseña incorrecta\n" #: errcode.c:116 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "" "%s: ERROR: en autentificación proxy FTP - nombre de usuario incorrecto\n" #: errcode.c:119 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s: ERROR: en autentificación proxy FTP - contraseña incorrecta\n" #: errcode.c:122 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s: ERROR: imposible abrir conexión de datos FTP\n" #: errcode.c:125 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s: ERROR: imposible recuperar fichero desde el servidor FTP\n" #: errcode.c:128 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s: ERROR: el servidor FTP no soporta el comando MDTM\n" #: errcode.c:131 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s: ERROR: el documento recibido desde el servidor FTP está truncado\n" #: errcode.c:135 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s: MENSAJE: no es precisa su recuperación - fichero ya actualizado\n" #: errcode.c:138 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s: MENSAJE: las reglas no permiten la transferencia FTP\n" #: errcode.c:141 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "" "%s: ADVERTENCIA: URL es un directorio FTP, pero no se admite (-FTPdir)\n" #: errcode.c:144 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "" #: errcode.c:147 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s: ERROR: error HTTP desconocido\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s: ERROR: imposible conectar con servidor HTTP\n" #: errcode.c:153 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "" "%s: ERROR: el servidor HTTP no soporta la recuperación parcial de contenido\n" #: errcode.c:156 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "%s: ERROR: se canceló el envío de la solicitud HTTP\n" #: errcode.c:159 #, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%s: ERROR: fallo en la lectura de la respuesta HTTP\n" #: errcode.c:162 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "" #: errcode.c:166 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "%s: ERROR: imposible enviar datos de la petición HTTP\n" #: errcode.c:169 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s: MENSAJE: redireccionando a otra ubicación\n" #: errcode.c:172 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s: ERROR: el documento HTTP está truncado\n" #: errcode.c:175 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s: ERROR: redirección cíclica !!!!\n" #: errcode.c:178 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s: ERROR: redireccionando a una URL no soportada\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s: ERROR: imposible conectar con el servidor proxy\n" #: errcode.c:184 #, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "" "%s: ERROR: se recibió una respuesta de redirección incorrecta desde el " "servidor\n" #: errcode.c:187 #, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "%s: ERROR: imposible realizar autorización NTLM\n" #: errcode.c:190 #, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "%s: ERROR: imposible realizar autorización HTTP Digest\n" #: errcode.c:193 #, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "%s: ERROR: imposible realizar autorización proxy NTLM\n" #: errcode.c:196 #, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "%s: ERROR: imposible realizar autorización abreviada con proxy HTTP\n" #: errcode.c:199 #, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s: ERROR: el cliente HTTP envía una petición no válida\n" #: errcode.c:202 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s: ERROR: se requiere autentificación HTTP\n" #: errcode.c:205 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s: ERROR: se requiere autentificación proxy HTTP\n" #: errcode.c:208 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "%s: ERROR: se requiere pago HTTP\n" #: errcode.c:211 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "%s: ERROR: solicitud HTTP prohibida\n" #: errcode.c:214 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s: ERROR: no se encontró el documento HTTP\n" #: errcode.c:217 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s: ERROR: error en el servidor HTTP remoto\n" #: errcode.c:220 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "" "%s: ERROR: el servidor HTTP informa de un agotamiento del tiempo para la " "conexión\n" #: errcode.c:223 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "%s: ERROR: el servidor HTTP informó de un conflicto\n" #: errcode.c:226 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s: ERROR: el documento ya no existe en el servidor HTTP\n" #: errcode.c:229 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "%s: ERROR: debe utilizar un proxy para acceder a esta URL\n" #: errcode.c:232 #, c-format msgid "%s: ERROR: 306\n" msgstr "%s: ERROR: 306\n" #: errcode.c:235 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" "%s: ERROR: el método HTTP utilizado no está soportado o permitido para\n" "esta URL\n" #: errcode.c:238 #, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "%s: ERROR: el cliente no acepta el tipo MIME de la URL solicitada\n" #: errcode.c:241 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "" "%s: ERROR: falta la cabecera Content-Length: en la cabecera de la\n" "petición\n" #: errcode.c:244 #, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "" "%s: ERROR: fallaron las condiciones previas de la petición para la URL " "solicitada\n" #: errcode.c:247 #, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s: ERROR: el cuerpo de la petición es demasiado grande\n" #: errcode.c:250 #, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s: ERROR: la URL solicitada es demasiado larga\n" #: errcode.c:253 #, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "%s: ERROR: recurso en un formato no soportado para esta petición\n" #: errcode.c:256 #, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s: ERROR: se solicitó un rango inválido del documento\n" #: errcode.c:259 #, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "" "%s: ERROR: no se pudieron satisfacer las expectativas de la solicitud\n" #: errcode.c:262 #, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "" "%s: ERROR: el método HTTP solicitado no está implementado en el servidor\n" #: errcode.c:265 #, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s: ERROR: falló el \"gatewaying\" para esta URL\n" #: errcode.c:268 #, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "" "%s: ERROR: servicio HTTP no disponible en este momento, inténtelo más tarde\n" #: errcode.c:271 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "" "%s: ERROR: se agotó el tiempo límite para la comunicación entre el\n" "gateway y el servidor remoto\n" #: errcode.c:274 #, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "" "%s: ERROR: el servidor remoto no soporta la versión de HTTP de la petición\n" #: errcode.c:277 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s: ERROR: imposible conectar con el servidor GOPHER\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%s: ERROR: error GOPHER desconocido\n" #: errcode.c:283 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s: ERROR: imposible conectar con el servidor HTTPS\n" #: errcode.c:286 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "" "%s: ERROR: imposible establecer conexión de control SSL con el servidor " "FTPS\n" #: errcode.c:289 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s: ERROR: el servidor FTP no soporta conexiones SSL\n" #: errcode.c:292 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "" "%s: ERROR: imposible establecer conexión de datos SSL con el servidor FTPS\n" #: errcode.c:295 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s: ERROR: código de error desconocido : %d\n" #: file.c:35 msgid "Can't open directory\n" msgstr "No se puede abrir el directorio\n" #: form.c:1074 form.c:1139 form.c:1296 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "Tipo de formulario no soportado en el contexto: %d\n" #: form.c:1395 msgid "Browse" msgstr "Navegador" #: form.c:1410 msgid "URLs with forms" msgstr "URLs con formularios" #: form.c:1419 msgid "Refresh URL list" msgstr "Refrescar lista direcciones" #: form.c:1453 form.c:1454 url.c:1002 msgid "unknown" msgstr "desconocido" #: form.c:1604 msgid "Pavuk: load form file" msgstr "Pavuk: cargar fichero de formulario" #: form.c:1628 msgid "Fill forms" msgstr "Rellenar formularios" #: form.c:1635 msgid "Form number: " msgstr "Número de formulario: " #: form.c:1647 msgid "Action URL: " msgstr "URL acción: " #: form.c:1656 gui_common.c:706 msgid "Request method: " msgstr "Método de solicitud: " #: form.c:1665 gui_common.c:725 gui_tree.c:140 msgid "Request encoding: " msgstr "Codificación solicitud: " #: form.c:1674 msgid "HTML form content" msgstr "Contenido del formulario HTML " #: form.c:1689 msgid "Load HTML file ..." msgstr "Cargar fichero HTML ..." #: form.c:1742 msgid "Pavuk: HTML forms editor" msgstr "Pavuk: editor de formularios HTML" #: form.c:1764 gui_jscons.c:192 msgid "Close" msgstr "Cerrar" #: ftp.c:118 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "" "ftp_get_response: se cerró la conexión de control ftp antes de recibir\n" "respuesta alguna\n" #: ftp.c:189 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "ftp: setsockopt TOS - falló THROUGHPUT" #: ftp.c:551 msgid "Re-using established FTP control connection\n" msgstr "Reutilizando una conexión de control FTP previa\n" #: ftp.c:758 http.c:1392 msgid "Size differs, regeting whole\n" msgstr "El tamaño difiere, descargando de nuevo al completo\n" #: ftp.c:768 http.c:1278 http.c:1402 msgid "Modified from last download - regeting whole\n" msgstr "Modificado desde la última descarga - recuperación completa de nuevo\n" #: ftp.c:849 msgid "" "Warning: FTP server undertand REST command, but can't handle it properly.\n" msgstr "" #: ftp.c:1094 ftp.c:1421 #, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%d%s\n" "\n" "\n" "

                  List of FTP directory %s://%s:%d/%s


                    " msgstr "" "\n" "\n" "\n" "Directorio %s://%s:%d%s\n" "\n" "\n" "

                    Listado del directorio FTP %s://%s:%d/%s


                      " #: ftp.c:1490 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" "ERROR: imposible analizar línea con listado FTP :\n" "\t%s\n" #: ftp.c:1683 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "Creando enlace simbólico \"%s\" hacia \"%s\"\n" #: gauthinfo.c:107 msgid "Pavuk: Save auth. info file" msgstr "Pavuk: Guardar fichero info. autentificación" #: gauthinfo.c:159 msgid "Pavuk: Load auth. info file" msgstr "Pavuk: Cargar fichero info. autentificación" #: gauthinfo.c:340 msgid "Pavuk: Authorization info editor" msgstr "Pavuk: editor autorizaciones" #: gauthinfo.c:359 msgid "Protocol" msgstr "Protocolo" #: gauthinfo.c:360 gui_common.c:1819 msgid "Host" msgstr "Equipo" #: gauthinfo.c:361 msgid "User" msgstr "Usuario" #: gauthinfo.c:362 msgid "Password" msgstr "Contraseña" #: gauthinfo.c:363 msgid "Base dir." msgstr "Dir. base" #: gauthinfo.c:364 msgid "Realm" msgstr "Realm" #: gauthinfo.c:365 msgid "Scheme" msgstr "Método" #: gauthinfo.c:394 msgid "Protocol: " msgstr "Protocolo: " #: gauthinfo.c:419 gui_common.c:1837 gui_common.c:1898 gui_common.c:1921 #: gui_common.c:1950 msgid "Host: " msgstr "Host: " #: gauthinfo.c:428 msgid "User: " msgstr "Usuario: " #: gauthinfo.c:437 gui_common.c:2120 gui_common.c:2170 gui_common.c:2194 msgid "Password: " msgstr "Contraseña: " #: gauthinfo.c:446 msgid "Base directory: " msgstr "Directorio inicial: " #: gauthinfo.c:455 msgid "Realm: " msgstr "Nombre: " #: gauthinfo.c:473 gui_common.c:2064 msgid "User auth. scheme" msgstr "Método aut. usuario" #: gauthinfo.c:478 msgid "Base auth. scheme" msgstr "Método aut. básico" #: gauthinfo.c:483 gui_common.c:2066 msgid "Digest auth. scheme" msgstr "Método aut. abreviado" #: gauthinfo.c:489 gui_common.c:2068 msgid "NTLM auth. scheme" msgstr "Mét. autentificación NTLM" #: gauthinfo.c:500 gui_addurl.c:171 gui_common.c:629 gui_common.c:778 #: gui_common.c:957 gui_common.c:1057 gui_common.c:1847 gui_common.c:2620 #: gui_common.c:2868 gui_tools.c:648 msgid "Append" msgstr "Añadir" #: gauthinfo.c:508 gui_common.c:645 gui_common.c:785 gui_common.c:973 #: gui_common.c:1064 gui_common.c:1853 gui_common.c:2626 gui_common.c:2874 #: gui_tools.c:670 msgid "Modify" msgstr "Modificar" #: gauthinfo.c:516 gui_common.c:654 gui_common.c:982 gui_common.c:1859 #: gui_common.c:2632 gui_common.c:2880 gui_tools.c:683 msgid "Clear" msgstr "Limpiar" #: gauthinfo.c:524 gui_common.c:663 gui_common.c:792 gui_common.c:991 #: gui_common.c:1071 gui_common.c:1865 gui_common.c:2638 gui_common.c:2886 #: gui_tools.c:696 msgid "Delete" msgstr "Borrar" #: gauthinfo.c:537 gui_common.c:2963 gui_limits.c:512 gui_sched.c:131 msgid "OK" msgstr "Aceptar" #: gauthinfo.c:548 gui_common.c:2972 gui_limits.c:521 msgid "Apply" msgstr "Applicar" #: gauthinfo.c:556 msgid "Load" msgstr "Cargar" #: gauthinfo.c:564 msgid "Save" msgstr "Guardar" #: gauthinfo.c:575 gui_about.c:67 gui_addurl.c:180 gui_common.c:2988 #: gui_limits.c:537 gui_sched.c:140 gui_tree.c:657 gui_tree.c:797 stats.c:507 msgid "Cancel" msgstr "Cancelar" #: gkeys.c:64 gkeys.c:82 gkeys.c:95 #, c-format msgid "Unable to parse: %s\n" msgstr "Imposible analizar: %s\n" #: gkeys.c:117 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "Imposible crear el fichero ~/.pavuk_keys\n" #: gkeys.c:121 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# Fichero generado por %s\n" "# Puede editarlo, pero con mucho cuidado!\n" "\n" #: gopher.c:65 msgid "********************* Gopher request **************\n" msgstr "********************* solicitud Gopher **************\n" #: gopher.c:103 #, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%d/%s\n" "\n" "\n" "

                      Directory of gopher://%s:%d/%s



                        " msgstr "" "\n" "\n" "\n" "Directorio Gopher://%s:%d/%s\n" "\n" "\n" "

                        Directorio Gopher://%s:%d/%s



                          " #: gopher.c:151 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" "Falló el procesamiento de la entrada de directorio Gopher:\n" "%s\n" #: gui_about.c:38 msgid "Pavuk: About" msgstr "Pavuk: Acerca de" #: gui_about.c:60 #, c-format msgid "" "Pavuk %s %s\n" " \n" "an automatic WEB file grabber\n" " \n" "By Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " msgstr "" "Pavuk %s %s\n" " \n" "un grabador de ficheros Web automatizado\n" " \n" "por Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " #: gui_api.c:168 #, c-format msgid "Processed: %5d" msgstr "Procesada: %5d" #: gui_api.c:170 #, c-format msgid "Queued: %5d" msgstr "En cola: %5d" #: gui_api.c:172 #, c-format msgid "Failed: %4d" msgstr "Fallo: %4d" #: gui_api.c:174 #, c-format msgid "Rejected: %5d" msgstr "Rechazado: %5d" #: gui_api.c:475 gui_api.c:492 msgid "Start" msgstr "Inicio" #: gui_api.c:616 msgid "Starting ..." msgstr "Iniciando ..." #: gui_api.c:681 msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "" "Valor de tiempo límite excesivamente alto para la implementación con " "interfaz GUI del tiempo límite\n" #: gui_addurl.c:73 gui_main.c:270 #, c-format msgid "Dropped URL : %s\n" msgstr "descargada URL : %s\n" #: gui_addurl.c:128 msgid "Pavuk: Append URL" msgstr "Pavuk: Añadir URL" #: gui_addurl.c:140 msgid "New URL:" msgstr "Nueva URL:" #: gui_common.c:580 gui_common.c:596 gui_main.c:803 msgid "URL" msgstr "URL" #: gui_common.c:597 msgid "Local filename" msgstr "Nombre del fichero local" #: gui_common.c:616 msgid "Request URL: " msgstr "Solicitar URL: " #: gui_common.c:619 msgid "Local filename: " msgstr "Nombre del fichero local: " #: gui_common.c:687 msgid "Extended informations for HTTP POST request" msgstr "Informaciones ampliadas para solicitud POST de HTTP" #: gui_common.c:744 gui_common.c:1023 msgid "Query fields: " msgstr "Campos consulta: " #: gui_common.c:758 gui_common.c:1037 gui_common.c:2563 msgid "Type" msgstr "Tipo" #: gui_common.c:759 gui_common.c:1038 msgid "Name" msgstr "Nombre" #: gui_common.c:760 gui_common.c:1039 msgid "Value" msgstr "Valor" #: gui_common.c:804 gui_common.c:1083 msgid "Type: " msgstr "Tipo: " #: gui_common.c:833 gui_common.c:1112 msgid "Name: " msgstr "Nombre: " #: gui_common.c:835 gui_common.c:1114 msgid "Value: " msgstr "Valor: " #: gui_common.c:865 gui_common.c:1144 msgid "Pavuk: Choose form field file" msgstr "Pavuk: Seleccionar fichero con campos de formulario" #: gui_common.c:914 msgid "Form data" msgstr "Datos formulario" #: gui_common.c:942 msgid "Matching action URL: " msgstr "URL de acción: " #: gui_common.c:1206 msgid "Grabber I" msgstr "Grabador I" #: gui_common.c:1214 msgid "Cache Directory: " msgstr "Directorio caché: " #: gui_common.c:1217 msgid "Default URL prefix: " msgstr "" #: gui_common.c:1220 #, fuzzy msgid "Separate info directory: " msgstr "Directorio inicial: " #: gui_common.c:1223 msgid "Index file name: " msgstr "Nombre fichero índice: " #: gui_common.c:1226 msgid "Store file name: " msgstr "Nombre fichero: " #: gui_common.c:1229 msgid "Identity string: " msgstr "Cadena identidad: " #: gui_common.c:1233 msgid "Netscape browser cache directory: " msgstr "Directorio caché de Netscape: " #: gui_common.c:1236 #, fuzzy msgid "Mozilla browser cache directory: " msgstr "Directorio caché de Netscape: " #: gui_common.c:1241 msgid "Browser: " msgstr "Navegador: " #: gui_common.c:1245 msgid "Reminder command: " msgstr "Comando recordatorio: " #: gui_common.c:1248 msgid "Post command: " msgstr "Comando post-proceso: " #: gui_common.c:1264 msgid "How many times retry on fail: " msgstr "Número de reintentos ante un fallo: " #: gui_common.c:1267 msgid "How many moved links to follow: " msgstr "Número de enlaces a seguir: " #: gui_common.c:1270 msgid "How many times to reget file: " msgstr "Número reintentos descarga fichero: " #: gui_common.c:1273 msgid "Document age before syncing with server: " msgstr "Edad del documento antes de sincronizar: " #: gui_common.c:1275 msgid " days " msgstr " días " #: gui_common.c:1281 msgid "Read buffer size: " msgstr "Tamaño del búfer de lectura: " #: gui_common.c:1286 msgid " kB " msgstr " Kb" #: gui_common.c:1292 msgid "Hash tables size: " msgstr "Tamaño tablas \"hash\": " #: gui_common.c:1294 msgid " entries " msgstr " entradas " #: gui_common.c:1308 msgid "Sleep time between transfers: " msgstr "Pausa entre transferencias: " #: gui_common.c:1310 msgid " sec." msgstr " seg." #: gui_common.c:1315 msgid "randomize" msgstr "" #: gui_common.c:1321 msgid "Rollback amount on reget: " msgstr "Cantidad \"rollback\" en reintento: " #: gui_common.c:1323 msgid " bytes" msgstr " bytes" #: gui_common.c:1329 msgid "Transfer quota: " msgstr "Quota de transferencia: " #: gui_common.c:1331 gui_common.c:1339 gui_common.c:1348 msgid " kB" msgstr " Kb" #: gui_common.c:1337 msgid "File size quota: " msgstr "Quota tamaño fichero: " #: gui_common.c:1346 msgid "Filesystem freespace quota: " msgstr "Quota de espacio libre en sist. fich.: " #: gui_common.c:1364 msgid "Number of downloading threads: " msgstr "Número de hilos de descarga: " #: gui_common.c:1392 msgid "Grabber II" msgstr "Grabador II" #: gui_common.c:1395 msgid "HTML document URL rewriting" msgstr "Reescritura de las URLs en documento HTML" #: gui_common.c:1404 msgid "Rewrite URLs inside HTML doc." msgstr "Reescribir URLS en documento HTML" #: gui_common.c:1412 msgid "Rewrite URLs to local when stored locally" msgstr "Convertir a URLs locales en guardado local" #: gui_common.c:1418 msgid "Rewrite all suitable URLs to local" msgstr "Convertir a URLs locales todas las apropiadas" #: gui_common.c:1424 msgid "Rewrite all URLs to local immediately" msgstr "Convertir a URLs locales de inmediato" #: gui_common.c:1430 msgid "Rewrite all URLs to remote immediately" msgstr "Convertir de inmediato todo a URLs remotas" #: gui_common.c:1436 msgid "Rewrite only one currently download URL" msgstr "" #: gui_common.c:1442 msgid "Misc settings" msgstr "Configuraciones varias" #: gui_common.c:1451 msgid "Always generate unique name for document" msgstr "Generar siempre un nombre únicom para el documento" #: gui_common.c:1456 msgid "Delete FTP document after succesful download" msgstr "Borrar documento FTP despues de su descarga exitosa" #: gui_common.c:1461 msgid "Preserve document modification time" msgstr "Conservar hora de modificación del documento" #: gui_common.c:1466 msgid "Preserve FTP document permissions" msgstr "Conservar permisos FTP del documento" #: gui_common.c:1471 msgid "Preserve FTP symbolic links paths" msgstr "Conservar rutas a enlaces simbólicos de FTP" #: gui_common.c:1476 msgid "Retrieve FTP symbolic links like files" msgstr "Recuperar los enlaces simbólicos de FTP como ficheros" #: gui_common.c:1482 msgid "Whole reget when partial not supported" msgstr "Reintento completo cuando no se soporte el parcial" #: gui_common.c:1488 msgid "Use gzip encoding for transfer" msgstr "Utilizar codificación gzip para la transferencia" #: gui_common.c:1493 msgid "Remove improper documents" msgstr "Eliminar documentos inapropiados" #: gui_common.c:1498 msgid "Check transferred size of document" msgstr "Verificar la cantidad transferida del documento" #: gui_common.c:1503 msgid "Store directory URLs as index files" msgstr "Guardar las URLs de directorio como ficheros índices" #: gui_common.c:1508 msgid "Store info files with each document" msgstr "Guardar ficheros info con cada documento" #: gui_common.c:1513 msgid "Send self URL as Referer for starting URLs" msgstr "Enviar la URL propia como \"Referer\" para las URLs iniciales" #: gui_common.c:1518 msgid "Send If-Range header field when regeting" msgstr "Enviar campo de cabecera \"If-Range\" al reintentar" #: gui_common.c:1523 msgid "Show time of start and end of downloading" msgstr "Mostrar hora de inicio y fin de la descarga" #: gui_common.c:1531 msgid "URL scheduling strategy: " msgstr "Estrategia planificación URLs: " #: gui_common.c:1628 msgid "Net" msgstr "Red" #: gui_common.c:1635 msgid "Allowed protocols" msgstr "Protocolos admitidos" #: gui_common.c:1644 msgid "HTTP" msgstr "HTTP" #: gui_common.c:1649 msgid "FTP" msgstr "FTP" #: gui_common.c:1654 msgid "Gopher" msgstr "Gopher" #: gui_common.c:1660 msgid "HTTPS" msgstr "HTTPS" #: gui_common.c:1665 msgid "FTPS" msgstr "FTPS" #: gui_common.c:1671 msgid "FTP data connection type " msgstr "Tipo de conexión de datos FTP " #: gui_common.c:1680 msgid "Active" msgstr "Activa" #: gui_common.c:1687 msgid "Passive" msgstr "Pasiva" #: gui_common.c:1694 msgid "Communication timeout: " msgstr "Límite de tiempo en las comunicaciones: " #: gui_common.c:1707 msgid " min." msgstr " min." #: gui_common.c:1713 msgid "Maximal transfer rate: " msgstr "Máx. velocidad de transferencia: " #: gui_common.c:1726 gui_common.c:1745 msgid " kB/s" msgstr " Kb/s" #: gui_common.c:1732 msgid "Minimal transfer rate: " msgstr "Mín. velocidad de transferencia: " #: gui_common.c:1751 msgid "Local interface address: " msgstr "Dirección interfaz local: " #: gui_common.c:1762 msgid "Additional HTTP headers: " msgstr "Cabecerar HTTP adicionales: " #: gui_common.c:1773 #, fuzzy msgid "Additional FTP list options: " msgstr "Cabecerar HTTP adicionales: " #: gui_common.c:1786 msgid "Use wide listing of FTP directories" msgstr "Mostrar listado ampliado para directorios FTP" #: gui_common.c:1792 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "" #: gui_common.c:1798 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "Utilizar protocolo HTTP/1.1 para comunicación HTTP" #: gui_common.c:1804 msgid "FTP login handshake rules" msgstr "" #: gui_common.c:1820 msgid "Login handshake" msgstr "" #: gui_common.c:1840 msgid "Handshake: " msgstr "" #: gui_common.c:1882 msgid "Proxy" msgstr "Proxy" #: gui_common.c:1888 msgid "Gopher proxy" msgstr "Proxy Gopher" #: gui_common.c:1901 gui_common.c:1924 gui_common.c:1953 msgid "Port: " msgstr "Puerto: " #: gui_common.c:1905 msgid "Gopher via HTTP proxy" msgstr "Gopher a través de proxy HTTP" #: gui_common.c:1910 msgid "FTP proxy" msgstr "Proxy FTP" #: gui_common.c:1927 msgid "FTP via HTTP proxy" msgstr "FTP a través de proxy HTTP" #: gui_common.c:1933 msgid "FTP via HTTP tunneling proxy" msgstr "FTP a través de túnel proxy HTTP" #: gui_common.c:1940 msgid "SSL proxy" msgstr "proxy SSL" #: gui_common.c:1957 msgid "HTTP proxy" msgstr "Proxy HTTP" #: gui_common.c:1963 msgid "Proxy: " msgstr "Proxy: " #: gui_common.c:1968 msgid "Allow caching of documents" msgstr "Documentos sujetos a \"caching\"" #: gui_common.c:2023 msgid "Languages" msgstr "Idiomas" #: gui_common.c:2026 msgid "Preffered languages" msgstr "Idiomas preferidos" #: gui_common.c:2031 msgid "Language code: " msgstr "Código de idioma: " #: gui_common.c:2043 msgid "Preffered character sets" msgstr "Conj. de caracteres preferido" #: gui_common.c:2048 msgid "Character set code: " msgstr "Código conj. caracteres: " #: gui_common.c:2065 msgid "Basic auth. scheme" msgstr "Método aut. básico" #: gui_common.c:2075 msgid "Auth" msgstr "Autentificación" #: gui_common.c:2082 msgid "User authentification" msgstr "Autentificación de usuario" #: gui_common.c:2091 gui_common.c:2140 msgid "Scheme: " msgstr "Método: " #: gui_common.c:2117 gui_common.c:2167 gui_common.c:2191 msgid "User name: " msgstr "Nombre de usuario: " #: gui_common.c:2123 gui_common.c:2173 msgid "NTLM domain: " msgstr "Dominio NTLM: " #: gui_common.c:2126 gui_common.c:2176 msgid "Reuse HTTP Digest access nonce" msgstr "Reutilizar acceso HTTP abreviado" #: gui_common.c:2131 msgid "HTTP proxy user authentification" msgstr "Autentificación del usuario de proxy HTTP" #: gui_common.c:2181 msgid "FTP proxy user authentification" msgstr "Autentificación del usuario de proxy FTP" #: gui_common.c:2196 msgid "Misc" msgstr "Varios" #: gui_common.c:2210 msgid "E-mail address: " msgstr "Dirección de correo: " #: gui_common.c:2212 msgid "Send From: header with HTTP request" msgstr "Enviar cabecera \"From:\" con solicitud HTTP" #: gui_common.c:2226 msgid "SSL" msgstr "SSL" #: gui_common.c:2229 msgid "SSL client certificate" msgstr "certificado de cliente SSL" #: gui_common.c:2238 msgid "Certificate password: " msgstr "Contraseña certificados: " #: gui_common.c:2241 msgid "Certificate PEM file: " msgstr "Fichero con certificados PEM: " #: gui_common.c:2244 msgid "Certificate key file: " msgstr "Fichero con claves de certificados: " #: gui_common.c:2247 msgid "List of preffered ciphers: " msgstr "Lista de cifradores preferidos: " #: gui_common.c:2253 msgid "SSL protocol version" msgstr "Versión del protocolo SSL" #: gui_common.c:2261 msgid "SSLv23" msgstr "SSLv23" #: gui_common.c:2267 msgid "SSLv2" msgstr "SSLv2" #: gui_common.c:2273 msgid "SSLv3" msgstr "SSLv3" #: gui_common.c:2280 msgid "TLSv1" msgstr "TLSv1" #: gui_common.c:2287 #, fuzzy msgid "Miscelanous SSL settings" msgstr "Configuraciones varias" #: gui_common.c:2297 msgid "EGD daemon socket path: " msgstr "" #: gui_common.c:2301 msgid "Unique ID for all SSL sessions" msgstr "ID único para todas las sesiones SSL" #: gui_common.c:2316 gui_main.c:1896 msgid "Log" msgstr "Registro" #: gui_common.c:2323 msgid "Try to find unique name, when original log file locked" msgstr "" "Intentar localizar un nombre único, ante bloqueo del fichero de registro " "original" #: gui_common.c:2328 msgid "Log file: " msgstr "Fichero de registro: " #: gui_common.c:2331 msgid "Shortlog file: " msgstr "Fichero de registro abreviado: " #: gui_common.c:2334 msgid "Log window length: " msgstr "Tamaño ventana de registro: " #: gui_common.c:2347 msgid "Cookies" msgstr "Cookies" #: gui_common.c:2350 msgid "Disabled cookie domains" msgstr "Dominios de cookies inhabilitados" #: gui_common.c:2355 gui_limits.c:247 msgid "Domain: " msgstr "Dominio: " #: gui_common.c:2358 #, fuzzy msgid "Cookies settings" msgstr "Configuraciones varias" #: gui_common.c:2367 msgid "Update cookies" msgstr "Actualizar cookies" #: gui_common.c:2372 msgid "Send cookies" msgstr "Enviar cookies" #: gui_common.c:2377 msgid "Accept cookies" msgstr "Aceptar cookies" #: gui_common.c:2382 msgid "Check cookies domain" msgstr "Verificar dominio de cookies" #: gui_common.c:2390 msgid "Cookies maximal number: " msgstr "Núm. máx. cookies: " #: gui_common.c:2405 msgid "Cookie file: " msgstr "Fichero de cookies: " #: gui_common.c:2491 msgid "Filename" msgstr "Nombres fichero" #: gui_common.c:2494 msgid "Local filename conversion rules" msgstr "Reglas de conversión (nombres locales)" #: gui_common.c:2502 msgid "Replace String1 with String2 in filename" msgstr "Reemplazar Cad1 con Cad2 en nombre fichero" #: gui_common.c:2511 msgid "String1: " msgstr "Cadena1: " #: gui_common.c:2514 msgid "String2: " msgstr "Cadena2: " #: gui_common.c:2516 msgid "Delete characters from filename" msgstr "Eliminar caracteres desde el nombre de fichero" #: gui_common.c:2525 msgid "Character set: " msgstr "Conjunto de caracteres: " #: gui_common.c:2527 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "Reemplazar caracteres de Conj1 por los de Conj2 en nombre fichero" #: gui_common.c:2536 msgid "Character set1: " msgstr "Conjunto de caracteres 1: " #: gui_common.c:2539 msgid "Character set2: " msgstr "Conjunto de caracteres 2: " #: gui_common.c:2546 msgid "Base level of tree: " msgstr "Nivel base del árbol: " #: gui_common.c:2548 msgid "Local filename mapping rules" msgstr "Reglas de conversión (nombres locales)" #: gui_common.c:2564 msgid "Match pattern" msgstr "Patrón de coincidencia" #: gui_common.c:2565 msgid "Rule" msgstr "Regla" #: gui_common.c:2587 msgid "wildcard pattern" msgstr "Patrón ER shell" #: gui_common.c:2594 msgid "RE pattern" msgstr "patrón ER editor" #: gui_common.c:2606 msgid "Matching pattern: " msgstr "Patrón de coincidencia: " #: gui_common.c:2613 msgid "Construction rule: " msgstr "Regla de construcción: " #: gui_common.c:2653 msgid "Advertisement" msgstr "Publicidad" #: gui_common.c:2660 msgid "Enable removing of advertisement banners" msgstr "Permitir la supresión de carteles publicitarios" #: gui_common.c:2665 msgid "RE for advertisement URLs: " msgstr "ER para las URLs publicitarias: " #: gui_common.c:2777 msgid "Javascript" msgstr "Javascript" #: gui_common.c:2785 msgid "Processing of javascript" msgstr "Procesamiento de javascript" #: gui_common.c:2789 msgid "Javascript patterns" msgstr "Patrones de Javascript" #: gui_common.c:2794 msgid "RE for Javascript patterns: " msgstr "ER para patrones de Javascript: " #: gui_common.c:2800 msgid "Javascript patterns with transform rules" msgstr "Patrones de Javascript con reglas de transformación" #: gui_common.c:2815 msgid "Pattern" msgstr "Patrón" #: gui_common.c:2816 msgid "Transform rule" msgstr "Regla de transformación" #: gui_common.c:2817 msgid "HTML tag" msgstr "Elemento HTML" #: gui_common.c:2818 msgid "HTML tag attribute" msgstr "Atributo del elemento HTML" #: gui_common.c:2819 msgid "Rewrite" msgstr "" #: gui_common.c:2840 msgid "Pattern: " msgstr "Patrón: " #: gui_common.c:2843 msgid "Tranform rule: " msgstr "Regla de transformación: " #: gui_common.c:2852 msgid "HTML tag: " msgstr "Elemento HTML: " #: gui_common.c:2856 msgid "HTML tag attribute: " msgstr "Atributo del elemento HTML: " #: gui_common.c:2858 #, fuzzy msgid "Rewrite URL part in HTML document" msgstr "Reescribir URLS en documento HTML" #: gui_common.c:2913 msgid "Pavuk: Common config" msgstr "Pavuk: Configuración general" #: gui_common.c:2980 msgid "Limitations ..." msgstr "Limitaciones ..." #: gui_jscons.c:150 #, fuzzy msgid "Pavuk: JavaScript console" msgstr "Pavuk: Guardar fichero info. autentificación" #: gui_jscons.c:169 msgid "Reload script file" msgstr "" #: gui_jscons.c:174 #, fuzzy msgid "Save script to file" msgstr "Guardar escenario ..." #: gui_jscons.c:181 msgid "Load script to JavaScript runtime" msgstr "" #: gui_jscons.c:186 msgid "Restart JavaScript runtime" msgstr "" #: gui_jscons.c:215 #, fuzzy msgid "Prompt: " msgstr "Puerto: " #: gui_jscons.c:228 msgid "JavaScript source file: " msgstr "" #: gui_limits.c:44 msgid "Tree" msgstr "Árbol" #: gui_limits.c:56 msgid "Download cgi-generated pages" msgstr "Descargas páginas generadas con CGIs" #: gui_limits.c:62 msgid "Recurse through FTP directory" msgstr "Procesar directorios FTP recursivamente" #: gui_limits.c:68 msgid "Allow \"robots.txt\"" msgstr "Permitir \"robots.txt\"" #: gui_limits.c:74 msgid "Process HTML files downloaded over FTP" msgstr "Procesar ficheros HTML descargados via FTP" #: gui_limits.c:80 msgid "Don't leave starting site" msgstr "No abandonar el sitio inicial" #: gui_limits.c:86 msgid "Don't leave starting directory" msgstr "No abandonar el directorio inicial" #: gui_limits.c:92 msgid "Don't leave site enter directory" msgstr "No abandonar el directorio inicial del sitio" #: gui_limits.c:98 msgid "Download just single page" msgstr "Descargar sólo página simple" #: gui_limits.c:104 msgid "Apply limiting options on inline objects" msgstr "" #: gui_limits.c:119 msgid "Max. count of documents: " msgstr "Núm. máx. de documentos: " #: gui_limits.c:122 msgid "Max. depth of tree: " msgstr "Profundidad máx. árbol: " #: gui_limits.c:125 msgid "Max. levels to leave from starting site: " msgstr "Núm. máx. niveles admitidos desde el sitio inicial: " #: gui_limits.c:128 msgid "Max. document size: " msgstr "Tamaño máx. documento: " #: gui_limits.c:131 msgid "Min. document size: " msgstr "Tamaño mín. documento: " #: gui_limits.c:134 msgid "Max. site levels to leave from starting site: " msgstr "Núm. máx. niveles admitidos desde el sitio inicial: " #: gui_limits.c:145 msgid "Working subdirectory :" msgstr "Subdirectorio de trabajo: " #: gui_limits.c:148 msgid "User condition script: " msgstr "Guión condición de usuario: " #: gui_limits.c:151 msgid "Follow command: " msgstr "Seguir comando: " #: gui_limits.c:162 #, fuzzy msgid "Patterns" msgstr "Patrón" #: gui_limits.c:165 msgid "Wildcard patterns" msgstr "ER shell" #: gui_limits.c:174 gui_limits.c:195 msgid "Documents matching pattern: " msgstr "Patrón para documentos: " #: gui_limits.c:177 gui_limits.c:183 gui_limits.c:198 gui_limits.c:204 #: gui_limits.c:266 msgid "skip: " msgstr "Descartar: " #: gui_limits.c:180 gui_limits.c:201 msgid "URL matching pattern: " msgstr "Patrón para las URLs: " #: gui_limits.c:186 msgid "RE patterns" msgstr "Patrones ER editor" #: gui_limits.c:215 msgid "Hosts" msgstr "Máquinas" #: gui_limits.c:224 msgid "Allow / Disallow sites" msgstr "No/Permitir sitios" #: gui_limits.c:230 msgid "Site: " msgstr "Sitio: " #: gui_limits.c:241 msgid "Allow / Disallow domains" msgstr "No/Permitir dominios" #: gui_limits.c:253 msgid "IP address RE patterns" msgstr "Patrones ER para direcciones IP" #: gui_limits.c:263 msgid "Server IP address matching pattern: " msgstr "Patrón de direcciones IP del servidor: " #: gui_limits.c:269 #, fuzzy msgid "Server ports" msgstr "Respuestas del servidor" #: gui_limits.c:279 msgid "Allow/denny" msgstr "" #: gui_limits.c:284 #, fuzzy msgid "Ports: " msgstr "Puerto: " #: gui_limits.c:295 msgid "Documents" msgstr "Documentos" #: gui_limits.c:304 msgid "Allow / Disallow suffix" msgstr "No/Permitir sufijo" #: gui_limits.c:310 msgid "Suffix: " msgstr "Sufijo: " #: gui_limits.c:321 msgid "Allow / Disallow prefix" msgstr "No/Permitir prefijo" #: gui_limits.c:327 msgid "Prefix: " msgstr "Prefijo: " #: gui_limits.c:341 gui_limits.c:353 msgid "MIME types" msgstr "Tipos MIME" #: gui_limits.c:349 msgid "Allow / Disallow MIME type" msgstr "No/Permitir tipo MIME" #: gui_limits.c:358 msgid "MIME type: " msgstr "Tipo MIME: " #: gui_limits.c:371 msgid "Time" msgstr "Hora" #: gui_limits.c:377 msgid "Lower document time limit" msgstr "Límite inferior para hora del documento" #: gui_limits.c:387 msgid "Check if doc. time newer than this" msgstr "Verificar si el documento es más reciente que " #: gui_limits.c:391 msgid "Upper document time limit" msgstr "Límite superior para hora del documento" #: gui_limits.c:401 msgid "Check if doc. time older than this" msgstr "Verificar si el documento es anterior a " #: gui_limits.c:410 msgid "Maximal allowed time of downloading: " msgstr "Máximo tiempo permitido para la descarga: " #: gui_limits.c:413 msgid " min" msgstr " min" #: gui_limits.c:426 msgid "Select allowed HTML tags and attributes" msgstr "Seleccionar elementos y atributos HTML admitidos" #: gui_limits.c:428 msgid "HTML" msgstr "HTML" #: gui_limits.c:443 #, c-format msgid "%s of %s" msgstr "%s de %s" #: gui_limits.c:476 msgid "Pavuk: Limits config" msgstr "Pavuk: Conf. límites" #: gui_limits.c:529 msgid "Common ..." msgstr "General ..." #: gui_main.c:433 msgid "Unknown window to popup" msgstr "Ventana desconocida para mostrar" #: gui_main.c:498 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "URL recuperada desde el portapapeles : %s\n" #: gui_main.c:542 #, c-format msgid "Fetched URL from browser : %s\n" msgstr "URL recuperada desde navegador : %s\n" #: gui_main.c:788 msgid "Both" msgstr "Ambos" #: gui_main.c:789 msgid "Icons only" msgstr "Sólo iconos" #: gui_main.c:790 msgid "Text only" msgstr "Sólo texto" #: gui_main.c:802 msgid "Nr." msgstr "Nr." #: gui_main.c:804 msgid "Status" msgstr "Estado" #: gui_main.c:805 msgid "Size" msgstr "Tamaño" #: gui_main.c:806 msgid "Transfer rate" msgstr "Velocidad de transferencia" #: gui_main.c:807 msgid "Elapsed time" msgstr "Tiempo transcurrido" #: gui_main.c:808 msgid "Remaining time" msgstr "Tiempo restante" #: gui_main.c:956 msgid "Open _URL ..." msgstr "Abrir _URL ..." #: gui_main.c:969 msgid "Append URL ..." msgstr "Añadir URL ..." #: gui_main.c:978 msgid "Fetch URL from Clipboard" msgstr "Recuperar URL desde el portapapeles" #: gui_main.c:996 msgid "Fetch URL from browser" msgstr "Recuperar URL desde el navegador" #: gui_main.c:1006 msgid "Load scenario ..." msgstr "Cargar escenario ..." #: gui_main.c:1015 msgid "Add scenario ..." msgstr "Añadir escenario ..." #: gui_main.c:1024 msgid "Save scenario ..." msgstr "Guardar escenario ..." #: gui_main.c:1033 msgid "Save settings to ~/.pavukrc" msgstr "Guardar configuración en ~/.pavukrc" #: gui_main.c:1046 msgid "Schedule ..." msgstr "Planificar ..." #: gui_main.c:1055 msgid "Auth. info editor ..." msgstr "Editor info. autentificación ..." #: gui_main.c:1068 msgid "E_xit" msgstr "_Salir" #: gui_main.c:1077 msgid "_File" msgstr "_Fichero" #: gui_main.c:1093 msgid "Document _Tree ..." msgstr "Ár_bol de documentos ..." #: gui_main.c:1102 msgid "Status page ..." msgstr "Página de estado ..." #: gui_main.c:1110 msgid "HTML forms editor ..." msgstr "Editor de formularios HTML ..." #: gui_main.c:1119 #, fuzzy msgid "Javascript console ..." msgstr "Patrones de Javascript" #: gui_main.c:1132 msgid "Clear log window" msgstr "Limpiar ventana de registro" #: gui_main.c:1141 msgid "_View" msgstr "_Ver" #: gui_main.c:1159 msgid "normal recurse" msgstr "procesamiento normal" #: gui_main.c:1169 msgid "synchronize" msgstr "sincronizar" #: gui_main.c:1180 msgid "single page" msgstr "página única" #: gui_main.c:1190 msgid "update local links" msgstr "actualizar enlaces locales" #: gui_main.c:1200 msgid "resume files" msgstr "reanudar ficheros" #: gui_main.c:1210 msgid "unlimited reget" msgstr "sin límite de reintentos" #: gui_main.c:1220 msgid "transfer but don't store" msgstr "transferir sin guardar" #: gui_main.c:1230 msgid "reminder" msgstr "recordar" #: gui_main.c:1240 msgid "list ftp directory" msgstr "listar directorio FTP" #: gui_main.c:1250 msgid "_Mode" msgstr "_Modo" #: gui_main.c:1268 msgid "C_ommon ..." msgstr "_General ..." #: gui_main.c:1277 msgid "_Limitations ..." msgstr "_Limitaciones ..." #: gui_main.c:1286 msgid "Reset configuration" msgstr "Inicializar configuración" #: gui_main.c:1301 msgid "Toolbar" msgstr "Barra de herramientas" #: gui_main.c:1309 msgid "Toggle toolbar" msgstr "Mostrar/ocultar barra de herramientas" #: gui_main.c:1364 msgid "Progressbar" msgstr "Indicador de progreso" #: gui_main.c:1396 msgid "Language" msgstr "Idioma" #: gui_main.c:1446 msgid "Debug level" msgstr "Nivel de depuración" #: gui_main.c:1469 msgid "All" msgstr "Todo" #: gui_main.c:1476 msgid "None" msgstr "Ninguno" #: gui_main.c:1483 msgid "Debug" msgstr "Depurar" #: gui_main.c:1499 #, fuzzy msgid "Allow tooltips" msgstr "Protocolos admitidos" #: gui_main.c:1509 msgid "Log window autoscroll" msgstr "AutoScroll en ventana de registro" #: gui_main.c:1518 msgid "Use preferences" msgstr "Utilizar preferencias" #: gui_main.c:1527 msgid "Quiet" msgstr "Tranquilo" #: gui_main.c:1539 msgid "Immediate messages" msgstr "Mensajes inmediatos" #: gui_main.c:1551 msgid "_Config" msgstr "_Configuración" #: gui_main.c:1567 msgid "_Restart" msgstr "_Reiniciar" #: gui_main.c:1577 msgid "Co_ntinue" msgstr "Co_ntinuar" #: gui_main.c:1587 msgid "Sto_p" msgstr "_Detener" #: gui_main.c:1597 msgid "_Break" msgstr "_Interrumpir" #: gui_main.c:1607 msgid "_Action" msgstr "_Acción" #: gui_main.c:1627 msgid "About ..." msgstr "Acerca de ..." #: gui_main.c:1636 msgid "_Help" msgstr "_Ayuda" #: gui_main.c:1667 msgid "Config" msgstr "Configuración" #: gui_main.c:1668 msgid "Popup config window" msgstr "Ventana desplegable para configuración" #: gui_main.c:1672 msgid "Limits" msgstr "Límites" #: gui_main.c:1673 msgid "Popup limits window" msgstr "Mostrar ventana límites" #: gui_main.c:1679 msgid "Go bg" msgstr "En bg" #: gui_main.c:1680 msgid "Destroy window as soon as posible and continue on terminal" msgstr "" "Destruir la ventana tan pronto como sea posible y continuar sobre terminal" #: gui_main.c:1684 gui_main.c:1757 msgid "Restart" msgstr "Reiniciar" #: gui_main.c:1685 msgid "Start working on currently set starting URLs" msgstr "Iniciar el procesamiento de las URLs de inicio ya seleccionadas" #: gui_main.c:1689 gui_main.c:1762 msgid "Continue" msgstr "Continuar" #: gui_main.c:1690 msgid "Continue after stop or break" msgstr "Continuar después de una detención o pausa" #: gui_main.c:1696 gui_main.c:1767 msgid "Stop" msgstr "Detener" #: gui_main.c:1697 msgid "Finish this transfer and stop" msgstr "Finalizar esta transferencia y detener" #: gui_main.c:1701 gui_main.c:1772 msgid "Break" msgstr "Interrumpir" #: gui_main.c:1702 msgid "Break transfer and stop" msgstr "Interrumpir la transferencia y detener" #: gui_main.c:1708 msgid "Exit" msgstr "Salir" #: gui_main.c:1709 msgid "Immediately quit the program" msgstr "Salir del programa de inmediato" #: gui_main.c:1777 msgid "Show whole main window" msgstr "Mostrar la ventana principal al completo" #: gui_main.c:1782 msgid "Quit" msgstr "Abandonar" #: gui_main.c:1861 #, fuzzy msgid "Pavuk: save log" msgstr "Pavuk: guardar página de estado" #: gui_main.c:1924 msgid "Select all" msgstr "" #: gui_main.c:1932 msgid "Clear selection" msgstr "" #: gui_main.c:1940 msgid "Copy selection" msgstr "" #: gui_main.c:1952 #, fuzzy msgid "Save log ..." msgstr "Guardar ..." #: gui_main.c:1959 #, fuzzy msgid "Clear log" msgstr "Limpiar ventana de registro" #: gui_main.c:2046 gui_main.c:2164 msgid "Processed: " msgstr "Procesado: " #: gui_main.c:2055 gui_main.c:2173 msgid "Failed: " msgstr "Falló: " #: gui_main.c:2064 gui_main.c:2182 msgid "Queued: " msgstr "Encolado: " #: gui_main.c:2073 gui_main.c:2191 msgid "Rejected: " msgstr "Rechazado: " #: gui_main.c:2123 msgid "S: " msgstr "S: " #: gui_main.c:2132 msgid "R: " msgstr "R: " #: gui_main.c:2141 msgid "ET: " msgstr "ET: " #: gui_main.c:2150 msgid "RT: " msgstr "RT: " #: gui_scenario.c:46 msgid "Pavuk: Scenario saver" msgstr "Pavuk: Grabador escenarios" #: gui_scenario.c:139 msgid "Pavuk: Scenario loader" msgstr "Pavuk: Cargador escenarios" #: gui_scenario.c:231 msgid "Pavuk: Scenario add" msgstr "Pavuk: Adición de escenarios" #: gui_sched.c:55 pavuk.c:495 msgid "Error scheduling\n" msgstr "Error planificando\n" #: gui_sched.c:78 msgid "Pavuk: Scheduler" msgstr "Pavuk: Planificador" #: gui_sched.c:97 msgid "Scheduling command: " msgstr "Comando planificación: " #: gui_sched.c:107 msgid "Reschedule after " msgstr "Volver a planificar después de " #: gui_sched.c:117 msgid " hours" msgstr " horas" #: gui_tools.c:28 msgid "January" msgstr "Enero" #: gui_tools.c:29 msgid "February" msgstr "Febrero" #: gui_tools.c:30 msgid "March" msgstr "Marzo" #: gui_tools.c:31 msgid "April" msgstr "Abril" #: gui_tools.c:32 msgid "May" msgstr "Mayo" #: gui_tools.c:33 msgid "June" msgstr "Junio" #: gui_tools.c:34 msgid "July" msgstr "Julio" #: gui_tools.c:35 msgid "August" msgstr "Agosto" #: gui_tools.c:36 msgid "September" msgstr "Septiembre" #: gui_tools.c:37 msgid "October" msgstr "Octubre" #: gui_tools.c:38 msgid "November" msgstr "Noviembre" #: gui_tools.c:39 msgid "December" msgstr "Diciembre" #: gui_tools.c:43 msgid "Sun" msgstr "Dom" #: gui_tools.c:44 msgid "Mon" msgstr "Lun" #: gui_tools.c:45 msgid "Tue" msgstr "Mar" #: gui_tools.c:46 msgid "Wed" msgstr "Mie" #: gui_tools.c:47 msgid "Thu" msgstr "Jue" #: gui_tools.c:48 msgid "Fri" msgstr "Vie" #: gui_tools.c:49 msgid "Sat" msgstr "Sab" #: gui_tools.c:171 msgid "Time: " msgstr "Hora: " #: gui_tools.c:180 msgid " : " msgstr " : " #: gui_tools.c:360 #, c-format msgid "Pavuk: select %s" msgstr "Pavuk: seleccionar %s" #: gui_tools.c:361 #, fuzzy msgid "file" msgstr "_Fichero" #: gui_tools.c:459 msgid "Browse ..." msgstr "Examinar ..." #: gui_tree.c:117 #, c-format msgid "URL: %s\n" msgstr "URL: %s\n" #: gui_tree.c:130 gui_tree.c:136 gui_tree.c:175 msgid "Request type: " msgstr "Tipo de solicitud: " #: gui_tree.c:151 msgid "Query values:\n" msgstr "Valores consulta:\n" #: gui_tree.c:181 msgid "Status: " msgstr "Estado: " #: gui_tree.c:187 msgid "not processed yet\n" msgstr "pendiente de procesamiento\n" #: gui_tree.c:193 msgid "loaded from NS cache\n" msgstr "recuperada desde la cache de Netscape\n" #: gui_tree.c:199 msgid "loaded from local URL tree\n" msgstr "cargado desde árbol de URLs local\n" #: gui_tree.c:205 msgid "moved to another URL\n" msgstr "movida a otra URL\n" #: gui_tree.c:211 msgid "URL not found on remote server\n" msgstr "URL no encontrada en servidor remoto\n" #: gui_tree.c:217 msgid "truncated\n" msgstr "truncado\n" #: gui_tree.c:223 msgid "downloaded OK\n" msgstr "Descarga exitosa\n" #: gui_tree.c:229 msgid "rejected by rules\n" msgstr "rechazado por las reglas\n" #: gui_tree.c:235 msgid "disabled by user\n" msgstr "Inhabilitado por el usuario\n" #: gui_tree.c:241 msgid "probably recoverable error\n" msgstr "probable error recuperable\n" #: gui_tree.c:247 msgid "unrecoverable error\n" msgstr "error irrecuperable\n" #: gui_tree.c:253 msgid "unknown\n" msgstr "desconocido\n" #: gui_tree.c:263 #, c-format msgid "Moved to URL: %s\n" msgstr "Movida a la URL: %s\n" #: gui_tree.c:273 #, c-format msgid "Type: %s\n" msgstr "Tipo: %s\n" #: gui_tree.c:275 msgid "Type: unknown\n" msgstr "Tipo: desconocido\n" #: gui_tree.c:281 #, c-format msgid "Size: %d\n" msgstr "Tamaño: %d\n" #: gui_tree.c:290 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "Hora modificación: %a, %d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:300 #, c-format msgid "Local filename: %s\n" msgstr "Fichero local: %s\n" #: gui_tree.c:311 msgid "Parent URLs:\n" msgstr "URL antecesora:\n" #: gui_tree.c:612 msgid "Pavuk: Store tree" msgstr "Pavuk: Guardar árbol" #: gui_tree.c:656 gui_tree.c:684 msgid "Pavuk: URL tree preview" msgstr "Pavuk: Previsualización árbol URL" #: gui_tree.c:659 gui_tree.c:788 msgid "Store tree ..." msgstr "Guardar árbol ..." #: gui_tree.c:660 gui_tree.c:704 msgid "Automaticaly watch last processed URLs" msgstr "Observar automáticamente las últimas direcciones procesadas" #: gui_tree.c:662 gui_tree.c:821 msgid "Properties" msgstr "Propiedades" #: gui_tree.c:663 gui_tree.c:829 msgid "Launch browser" msgstr "Lanzar navegador" #: gui_tree.c:664 gui_tree.c:837 msgid "Disable URL" msgstr "No permitir URL" #: gui_tree.c:665 gui_tree.c:845 msgid "Enable URL" msgstr "Permitir URL" #: gui_tree.c:666 gui_tree.c:853 msgid "Download URL" msgstr "Descargar URL" #: gui_tree.c:670 gui_tree.c:724 msgid "URL tree" msgstr "árbol URLs" #: html.c:253 htmlparser.c:281 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "URL BASE no soportada - %s (probablemente tratada incorrectamente)\n" #: html.c:522 msgid "Can't work on directory\n" msgstr "No se puede operar sobre el directorio\n" #: html.c:548 html.c:552 msgid "rewrite parent" msgstr "rescribir antecesor" #: http.c:366 msgid "****************** Proxy connect request *****************\n" msgstr "****************** Solicitud de conexión con Proxy *****************\n" #: http.c:413 msgid "***************** Proxy connect response *****************\n" msgstr "***************** Respuesta a conexión con Proxy *****************\n" #: http.c:469 msgid "Sending request ..." msgstr "Enviando petición ..." #: http.c:716 msgid "************ Client HTTP MIME header ***************\n" msgstr "************ Cabecera MIME de cliente HTTP ***************\n" #: http.c:733 msgid "Sending data ..." msgstr "Enviando datos ..." #: http.c:734 msgid "************ HTTP request data ***************\n" msgstr "********************* datos solicitud HTTP **************\n" #: http.c:744 msgid "Waiting for response ..." msgstr "Esperando respuesta ..." #: http.c:759 msgid "Error reading HTTP 1xx class response\n" msgstr "Error leyendo respuesta HTTP de clase 1xx\n" #: http.c:764 msgid "***************** class 1xx HTTP response ****************\n" msgstr "***************** respuesta HTTP clase 1xx ****************\n" #: http.c:875 msgid "Connecting ..." msgstr "Conectando ..." #: http.c:1159 msgid "*********** HTTP Server response MIME header **********\n" msgstr "" "*********** Cabecera MIME con la respuesta del Servidor HTTP **********\n" #: http.c:1262 msgid "Regeting whole file\n" msgstr "Recuperando de nuevo el fichero completo\n" #: http.c:1312 #, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "" #: http_proxy.c:150 #, c-format msgid "Checking HTTP proxy server %s:%d\n" msgstr "Verificando el servidor de proxy HTTP %s:%d\n" #: http_proxy.c:162 http_proxy.c:174 http_proxy.c:181 http_proxy.c:190 msgid "Failed to check proxy !\n" msgstr "Falló la comprobación del proxy !\n" #: http_proxy.c:196 #, c-format msgid "Proxy %s:%d is HTTP/%d.%d proxy\n" msgstr "El proxy %s:%d es un proxy HTTP/%d.%d\n" #: jsbind.c:76 #, fuzzy msgid "bad parameter" msgstr "Parámetro de hora incorrecto \"%s\"\n" #: jsbind.c:529 #, fuzzy msgid "not enough parameters" msgstr "Insuficiente número de parámetro \"-msgcat\"\n" #: jsbind.c:553 #, fuzzy msgid "unknown limiting condition" msgstr "Delimitando las condiciones" #: lfname.c:479 lfname.c:491 lfname.c:500 lfname.c:513 lfname.c:536 #: lfname.c:645 lfname.c:658 lfname.c:670 lfname.c:685 lfname.c:698 re.c:51 #: re.c:61 re.c:68 re.c:80 re.c:95 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "Error compilando la ER: %s\n" #: lfname.c:553 lfname.c:617 lfname.c:939 lfname.c:1057 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "Error de análisis LSP: símbolo incorrecto en - %s\n" #: lfname.c:950 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "Error de análisis LSP: valor numérico incorrecto en - %s\n" #: lfname.c:964 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "Error de análisis LSP: macro errónea en - %s\n" #: lfname.c:992 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "Error análisis LSP: cadena no finalizada en - %s\n" #: lfname.c:1013 lfname.c:1029 lfname.c:1047 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "Error análisis LSP: tipo de parámetro no válido en - %s\n" #: log.c:203 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "Finalizando registro : %H:%M:%S %d.%m.%Y\n" #: log.c:224 msgid "Unable to open log file - disabling logging\n" msgstr "Imposible abrir fichero de registro - inhabilitando registro\n" #: log.c:232 msgid "Log file is locked by another process - " msgstr "El fichero de registro se encuentra bloqueado por otro proceso - " #: log.c:236 msgid "generating new log filename\n" msgstr "generando un nuevo fichero de registro\n" #: log.c:241 msgid "disabling logging\n" msgstr "inhabilitando el registro\n" #: log.c:263 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "Iniciando registro : %H:%M:%S %d.%m.%Y\n" #: mozcache.c:184 #, fuzzy, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "Imposible abrir el índice de la caché de Netscape - %s\n" #: myssl.c:49 msgid "Failed obtaining entropy pathname\n" msgstr "" #: myssl.c:59 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "" #: myssl.c:70 msgid "Seeding entropy pool INSECURELY!\n" msgstr "" #: myssl.c:157 msgid "Unable to set certificate file (wrong password?)\n" msgstr "Imposible determinar fichero de certificados (contraseña inválida?)\n" #: myssl.c:167 msgid "Unable to set public key file\n" msgstr "Imposible establecer fichero con claves públicas\n" #: myssl.c:183 msgid "Private key does not match the certificate public key\n" msgstr "La clave privada no coincide con la clave pública del certificado\n" #: myssl.c:231 #, c-format msgid "SSL connection is using %s\n" msgstr "la conexión SSLis está utilizando %s\n" #: myssl.c:234 msgid "Server certificate:\n" msgstr "Certificado del servidor:\n" #: myssl.c:238 #, c-format msgid "\t subject: %s\n" msgstr "\t asunto: %s\n" #: myssl.c:243 #, c-format msgid "\t issuer: %s\n" msgstr "\t remitente: %s\n" #: nscache.c:103 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "Imposible abrir el índice de la caché de Netscape - %s\n" #: ntlm_auth.c:416 msgid "Trying to do NTLM authorization\n" msgstr "Intentando realizar autentificación NTLM\n" #: ntlm_auth.c:425 ntlm_auth.c:506 ntlm_auth.c:587 ntlm_auth.c:667 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "La autorización NTLM sólo es soportada en conexiones persistentes!\n" #: ntlm_auth.c:448 ntlm_auth.c:609 msgid "Not enough data for NTLM authorization!\n" msgstr "Datos insuficientes para la autorización NTLM!\n" #: ntlm_auth.c:449 ntlm_auth.c:610 msgid "Missing:\n" msgstr "Inexistente:\n" #: ntlm_auth.c:450 ntlm_auth.c:611 msgid " domain\n" msgstr " dominio\n" #: ntlm_auth.c:451 ntlm_auth.c:612 msgid " username\n" msgstr " nombre de usuario\n" #: ntlm_auth.c:452 ntlm_auth.c:613 msgid " password\n" msgstr " contraseña\n" #: ntlm_auth.c:453 ntlm_auth.c:614 msgid " local hostname\n" msgstr " nombre de host local\n" #: ntlm_auth.c:489 ntlm_auth.c:497 ntlm_auth.c:522 ntlm_auth.c:650 #: ntlm_auth.c:658 ntlm_auth.c:683 msgid "Got unexpected response\n" msgstr "Se recibió una respuesta inesperada\n" #: ntlm_auth.c:532 msgid "Failed NTLM nonce negotiation\n" msgstr "Falló la negociación NTLM\n" #: ntlm_auth.c:574 msgid "Trying to do proxy NTLM authorization\n" msgstr "Intentando llevar a cabo la autorización del proxy NTLM\n" #: ntlm_auth.c:693 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "Falló la negociación con el proxy NTLM\n" #: options.h:193 msgid "\t-v - print version number\n" msgstr "" " -v\n" " - muestra el número de la versión\n" #: options.h:204 msgid "\t-h - help\n" msgstr "" " -h\n" " - ayuda\n" #: options.h:218 msgid "\t-X - start GUI interface\n" msgstr "" " -X\n" " - iniciar interfaz gráfico (GUI)\n" #: options.h:249 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" " -runX\n" " - iniciar el procesamiento de las URLs suministradas\n" " justo después de iniciar el interfaz gráfico (GUI)\n" #: options.h:265 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "" " -prefs/-noprefs\n" " - cargar preferencias desde el fichero ~/.pavuk_prefs\n" #: options.h:494 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" " -progress/-noprogress\n" " - mostrar indicador de progreso sobre el terminal\n" #: options.h:517 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "" " -lmax $num\n" " - profundidad permitida para el árbol\n" #: options.h:528 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "" " -dmax $num\n" " - número máximo de documentos a descargar\n" #: options.h:539 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "" " -sleep $num\n" " - pausa entre transferencias de $num segundos (0 defecto)\n" #: options.h:551 #, fuzzy msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "" " -sleep $num\n" " - pausa entre transferencias de $num segundos (0 defecto)\n" #: options.h:574 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "" " -retry $num\n" " - número de reintentos si algo falla\n" #: options.h:585 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "" " -nregets $num\n" " - número máximo de reintentos para recuperación fichero (2 defecto)\n" #: options.h:596 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" " -nredirs $num\n" " - núm. máximo de redirecciones HTTP permitidas (5 defecto)\n" #: options.h:607 msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" " -timeout $num\n" " - límite de tiempo (en minutos) para las comunicaciones de red\n" " ( 0 == ningún límite == defecto )\n" #: options.h:619 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" " -rollback $num\n" " - núm. de bytes a descartar en un nuevo intento de descarga del\n" " documento (0 por defecto)\n" #: options.h:632 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" " -ddays $num\n" " - número de días desde el último acceso para la verificación en modo\n" " síncrono del documento\n" #: options.h:644 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" " -nocache/-cache\n" " - no/habilita el \"caching\" de los documentos HTTP (proxy)\n" #: options.h:666 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "" " -noRobots/-Robots\n" " - no/utilizar el fichero \"robots.txt\"\n" #: options.h:688 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "" " -noFTP/-FTP\n" " - no/descargar ficheros FTP\n" #: options.h:710 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "" " -noHTTP/-HTTP\n" " - no/descargar ficheros HTTP\n" #: options.h:735 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "" " -noSSL/-SSL\n" " - no/descargar ficheros SSL (HTTPS)\n" #: options.h:765 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "" " -noFTPS/-FTPS\n" " - no/descargar ficheros FTPS\n" #: options.h:792 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "" " -noGopher/-Gopher\n" " - no/descargar ficheros Gopher\n" #: options.h:814 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "" " -noCGI/-CGI\n" " - no/descargar páginas CGI paramétricas\n" #: options.h:836 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "" " -noEnc/-Enc\n" " - no/permitir la transferencia de ficheros codificados\n" #: options.h:858 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" " -noRelocate/-Relocate\n" " - no/reescribir los enlaces\n" #: options.h:881 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" " -FTPhtml/-noFTPhtml\n" " - no/procesar los ficheros HTML descargados a través de FTP\n" #: options.h:904 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" " -FTPlist/-noFTPlist\n" " - no/utilizar un listado de directorios FTP en formato ampliado\n" #: options.h:927 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "" " -FTPdir/-noFTPdir\n" " - no/procesar recursivamente los directorios FTP\n" #: options.h:949 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" " -store_index/-nostore_index\n" " - no/almacenar las URLs de directorio como ficheros índice\n" #: options.h:972 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" " -force_reget/-noforce_reget\n" " - no/forzar la recuperación completa de un fichero cuando el servidor\n" " no soporte los reintentos\n" #: options.h:1000 msgid "\t-debug - turn on debug mode\n" msgstr "" " -debug\n" " - activar el modo de depuración\n" #: options.h:1030 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "" " -debug_level $nivel\n" " - nivel de depuración (consulte la página del manual)\n" #: options.h:1042 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "" " -asite $lista\n" " - lista de sitios admitidos (separados por comas)\n" #: options.h:1053 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "" " -dsite $lista\n" " - lista de sitios no admitidos (separados por comas)\n" #: options.h:1064 msgid "\t-adomain $list - list of allowed domains\n" msgstr "" " -adomain $lista\n" " - lista de dominios admitidos\n" #: options.h:1075 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "" " -ddomain $lista\n" " - lista de dominios no admitidos\n" #: options.h:1086 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "" " -aprefix $lista\n" " - lista de prefijos de fichero/directorio admitidos\n" #: options.h:1097 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "" " -dprefix $lista\n" " - lista de prefijos de fichero/directorio no admitidos\n" #: options.h:1108 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "" " -asfx $lista\n" " - lista de sufijos admitidos\n" #: options.h:1119 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "" " -dsfx $lista\n" " - lista de sufijos no admitidos\n" #: options.h:1130 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "" " -amimet $lista\n" " - lista de tipos MIME admitidos\n" #: options.h:1141 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "" " -dmimet $lista\n" " - lista de tipos MIME no admitidos\n" #: options.h:1152 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "" " -alang $lista\n" " - lista de lenguajes preferidos (sólo para HTTP)\n" #: options.h:1163 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "" " -acharset $lista\n" " - lista de conj. de caracteres preferidos (sólo para HTTP)\n" #: options.h:1174 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" " -scndir $dir\n" " - directorio dónde guardar los escenarios (ficheros de configuración)\n" #: options.h:1186 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "" " -cdir $dir\n" " - directorio dónde depositar los documentos\n" #: options.h:1197 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "" " -subdir $dir\n" " - sudbirectorio bajo \"cdir\" dónde operar\n" #: options.h:1208 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" " -scenario $str\n" " - nombre de un escenario (dentro del directorio de escenarios)\n" " para cargar y ejecutar\n" #: options.h:1220 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" " -auth_scheme 1/2/3\n" " - método de autentificación para HTTP:\n" " 1) Usuario, 2) Básico, 3) Abreviado (2 por defecto)\n" #: options.h:1232 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "" " -auth_name $str\n" " - nombre para la Autentificación HTTP\n" #: options.h:1243 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "" " -auth_passwd $str\n" " - contraseña para la Autentificación HTTP\n" #: options.h:1254 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" " -auth_reuse_nonce/-noauth_reuse_nonce\n" " - no/reutilizar una autorización de acceso HTTP abreviada\n" #: options.h:1278 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" " -auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" " - no/reutilizar una autorización de acceso HTTP abreviada con proxy\n" #: options.h:1305 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" " -ssl_cert_passwd $str\n" " - contraseña para el fichero de certificados SSL\n" #: options.h:1321 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" " -ssl_cert_file $str\n" " - fichero de certificados SSL\n" #: options.h:1337 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "" " -ssl_key_file $str\n" " - fichero con las claves de certificados SSL\n" #: options.h:1352 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" " -ssl_cipher_list $str\n" " - lista de cifradores SSL preferidos para la comunicación SSL\n" #: options.h:1368 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "" #: options.h:1380 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "" " -from $str\n" " - dirección de correo utilizada para la identificación del usuario\n" #: options.h:1391 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" " -send_from/-nosend_from\n" " - no/enviar cabecera \"From:\" con su dirección de correo junto\n" " con la solicitud HTTP\n" #: options.h:1415 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "" " -identity $str\n" " - contenido del campo \"User-agent:\" para solicitudes HTTP\n" #: options.h:1426 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "" " -pattern $lista\n" " - lista de patrones de nombre de fichero\n" #: options.h:1440 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "" " -rpattern $ER\n" " - expresiones regulares para los nombres de fichero\n" #: options.h:1452 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" " -skip_pattern $lista\n" " - lista de patrones de nombre de fichero a descartar\n" #: options.h:1467 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" " -skip_rpattern $ER\n" " - lista de ER de nombre de fichero a descartar\n" #: options.h:1480 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "" " -url_pattern $lista\n" " - lista de patrones para las URLs\n" #: options.h:1494 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "" " -url_rpattern $ER\n" " - lista de patrones ER para las URLs\n" #: options.h:1506 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" " -skip_url_pattern $lista\n" " - lista de patrones para las URLs a descartar\n" #: options.h:1521 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" " -skip_url_rpattern $ER\n" " - lista de patrones ER para las URLs a descartar\n" #: options.h:1534 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" msgstr "" " -mode $modo\n" " - establece el modo de operación:\n" " normal - recursivo a través de WWW (defecto)\n" " linkupdate - actualizar los enlaces remotos sobre el árbol local\n" " sync - sincronizar el árbol local con los servidores WWW remotos\n" " singlepage - página simple con los objetos incrustados\n" " singlereget - reintentar fichero hasta que se complete\n" " resumeregets - reintentar todos los ficheros incompletos\n" " dontstore - transferir documentos, pero sin guardarlos\n" " reminder - comprobar si han sido modificadas las URLs\n" " ftpdir - lista los contenidos de un directorio FTP\n" #: options.h:1555 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" " -ftp_proxy $sitio[:$puerto]\n" " - servidor proxy/cache ftp\n" #: options.h:1567 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" " -http_proxy $sitio[:$puerto]\n" " - servidor proxy/cache http\n" #: options.h:1579 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" " -gopher_proxy $sitio[:$puerto]\n" " - servidor proxy/cache gopher\n" #: options.h:1594 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" " -ssl_proxy $sitio[:$puerto]\n" " - servidor proxy ssl\n" #: options.h:1607 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" " -gopher_httpgw/-nogopher_httpgw\n" " - el proxy de gopher indicado no/actúa como gateway HTTP para Gopher\n" #: options.h:1631 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" " -ftp_httpgw/-noftp_httpgw\n" " - el proxy ftp indicado no/actúa como gateway HTTP para FTP\n" #: options.h:1655 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" " -ftp_dirtyproxy/-noftp_dirtyproxy\n" " - no/utilizar solicitud CONNECT con proxy HTTP para las conexiones " "FTP\n" #: options.h:1682 msgid "\t-browser $str - your preferred browser programm\n" msgstr "" " -browser $str\n" " - su programa navegador favorito\n" #: options.h:1697 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "" " -xmaxlog\n" " - longitud máxima para la ventana de registro\n" #: options.h:1709 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "" " -dumpscn $str\n" " - guardar escenario bajo el nombre $str\n" #: options.h:1720 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "" " -maxsize $num\n" " - tamaño máximo permitido para un documento (en bytes)\n" #: options.h:1731 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "" " -minsize $num\n" " - tamaño mínimo permitido para un documento (en bytes)\n" #: options.h:1742 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" " -http_proxy_pass $str\n" " - contraseña para la autentificación con proxy HTTP\n" #: options.h:1754 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" " -http_proxy_user $str\n" " - nombre de usuario para la autentificación con proxy HTTP\n" #: options.h:1766 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" " -http_proxy_auth 1/2/3\n" " - método de autorización para la autentificación con proxy HTTP\n" #: options.h:1778 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "" " -logfile $fichero\n" " - nombre del fichero de registro\n" #: options.h:1789 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "" " -slogfile $fichero\n" " - nombre del fichero de registro para los mensajes de escasa longitud\n" #: options.h:1800 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "" " -stime/-nostime\n" " - no/mostrar la hora de inicio y finalización de la transferencia\n" #: options.h:1822 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" " -remove_old/-noremove_old\n" " - no/eliminar ficheros o directorios inapropiados mientras esté\n" " operando en modo síncrono\n" #: options.h:1847 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" " -auth_file $fichero\n" " - fichero con la información relacionada con la autentificación\n" " (consulte la página del manual para una descripción de su formato)\n" #: options.h:1859 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" " -base_level $num\n" " - número de niveles en el árbol de directorios a omitir desde el " "origen\n" #: options.h:1870 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "" " -ftp_active\n" " - seleccionar una conexión de datos FTP activa\n" #: options.h:1881 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "" " -ftp_passive\n" " - seleccionar una conexión de datos FTP pasiva\n" #: options.h:1895 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "" " -msgcat $dir\n" " - directorio con los catálogos de mensajes (internacionalización)\n" #: options.h:1910 msgid "\t-language $str - set language for messages\n" msgstr "" " -language $str\n" " - selecciona el idioma para los mensajes\n" #: options.h:1922 msgid "\t-quiet - don't show output messages\n" msgstr "" " -quiet\n" " - no mostrar mensajes de salida\n" #: options.h:1933 msgid "\t-verbose - show output messages (default)\n" msgstr "" " -verbose\n" " - mostrar mensajes de salida (por defecto)\n" #: options.h:1944 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" " -newer_than $hora\n" " - descargar únicamente documentos más recientes que $hora\n" " (formato de $hora: AAAA.MM.DD.hh.mm)\n" #: options.h:1956 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" " -older_than $hora\n" " - descargar únicamento documentos más antigüos que $hora\n" " (formato de $hora: AAAA.MM.DD.hh.mm)\n" #: options.h:1968 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" " -schedule $hora\n" " - planificar el inicio de Pavuk para $hora\n" " (formato de $hora: AAAA.MM.DD.hh.mm)\n" #: options.h:1980 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "" " -reschedule $num\n" " - número de horas entre dos ejecuciones sucesivas (ejecución cíclica)\n" #: options.h:1992 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" " -dont_leave_site/-leave_site\n" " - no/abandonar el sitio de la URL inicial\n" #: options.h:2015 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" " -dont_leave_dir/-leave_dir\n" " - no/abandonar el directorio de la URL inicial\n" #: options.h:2038 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" " -preserve_time/-nopreserve_time\n" " - no/preservar la hora de modificación del documento\n" #: options.h:2061 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" " -preserve_perm/-nopreserve_perm\n" " - no/preservar los permisos del documento\n" #: options.h:2084 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" " -preserve_slinks/-nopreserve_slinks\n" " - no/preservar los enlaces simbólicos de tipo absoluto\n" #: options.h:2107 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" " -leave_level $num\n" " - número de niveles a descender en la jerarquía desde el sitio " "inicial\n" " (0 == no importa == defecto)\n" #: options.h:2119 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "" " -cookie_file $fichero\n" " - fichero con la información de los \"cookies\"\n" #: options.h:2130 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" " -cookie_send/-nocookie_send\n" " - enviar información \"cookie\" con las solicitudes HTTP\n" #: options.h:2153 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" " -cookie_recv/-nocookie_recv\n" " - no/aceptar los cookies para las respuestas HTTP\n" #: options.h:2176 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" " -cookie_update/-nocookie_update\n" " - no/actualizar cookies en el fichero de cookies\n" #: options.h:2199 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" " -cookie_check/-nocookie_check\n" " - no/comprobar si se han fijado cookies para el dominio fuente\n" #: options.h:2222 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "" " -cookies_max $num\n" " - número máximo de cookies en la caché de cookies\n" #: options.h:2233 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" " -disabled_cookie_domains $lista\n" " - lista de dominios de cookies inhabilitados (separados por comas)\n" #: options.h:2245 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" " -disable_html_tag $ELEMENTO,[$ATRIBUTO][;...]\n" " - impedir el procesamiento de las URLs con el atributo $ATRIBUTO para\n" " el elemento $ELEMENTO\n" #: options.h:2258 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" " -enable_html_tag $ELEMENTO,[$ATRIBUTO][;...]\n" " - permitir el prodesamiento de las URLs con el atributo $ATRIBUTO " "para\n" " el elemento $ELEMENTO\n" #: options.h:2274 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "" " -gui_font $fuente\n" " - nombre de la fuente a utilizar para el interfaz gráfico\n" #: options.h:2286 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" " -user_condition $str\n" " - guión de salida aportado por el usuario para restringir algunas " "URLs\n" " (consulte la página del manual para información adicional)\n" #: options.h:2299 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "" " -tr_del_chr $str\n" " - caracteres a eliminar del nombre de fichero local\n" #: options.h:2311 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" " -tr_str_str $str1 $str2\n" " - sustituir caracteres en $str1 por $str2 en los nombres de fichero\n" " locales\n" #: options.h:2323 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" " -tr_chr_chr $ConjCar1 $ConjCar2\n" " - convierte $ConjCar1 en $ConjCar2 en los nombres de fichero locales\n" #: options.h:2335 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "" " -index_name $str\n" " - nombre del índice de directorios, en lugar de _._.html\n" #: options.h:2346 msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "" " -store_name $cad\n" " - nombre de fichero para el primer documento descargado\n" #: options.h:2368 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" " -check_size/-nocheck_size\n" " - no/comparar el tamaño del fichero recibido con aquél suministrado\n" " por el servidor remoto\n" #: options.h:2392 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" " -urls_file $fichero\n" " - fichero con las URLs a procesar\n" " (el final se marca con una línea que sólo contenga \".\")\n" #: options.h:2404 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" " -bg/-nobg\n" " - liberar a Pavuk de su terminal de control y no mostrar mensajes\n" " en pantalla\n" #: options.h:2427 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "" " -maxrate $num\n" " - límite superior para la velocidad de transferencia (en KB/s)\n" #: options.h:2438 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "" " -minrate $num\n" " - límite inferior para la velocidad de transferencia (en KB/s)\n" #: options.h:2449 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "" " -bufsize $num\n" " - tamaño para el búfer de lectura (en KB)\n" #: options.h:2460 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "" " -file_quota $num\n" " - tamaño máximo de un fichero a transferir (en KB)\n" #: options.h:2471 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "" " -trans_quota $num\n" " - máxima cantidad de transferencia por sesión (en KB)\n" #: options.h:2482 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "" " -fs_quota $num\n" " - quota para el espacio libre en disco (en KB)\n" #: options.h:2493 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" " -enable_js/-disable_js\n" " - no/habilitar la descarga de ficheros con fuentes en javascript\n" #: options.h:2516 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" " -fnrules $t $m $r\n" " - reglas para la construcción de nombres de fichero locales\n" " (consulte la página de manual para una mejor descripción)\n" #: options.h:2528 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" " -store_info/-nostore_info\n" " - no/almacenar los ficheros con la información del documento\n" " conjuntamente con cada uno de los documentos\n" #: options.h:2551 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" " -all_to_local/-noall_to_local\n" " - no/convertir todos los enlaces de un documento HTML en enlaces\n" " locales inmediatamente después de su descarga\n" #: options.h:2575 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" " -sel_to_local/-nosel_to_local\n" " - no/convertir todos los enlaces de un documento HTML que cumplen con\n" " los límites en enlaces locales inmediatemente después de su " "descarga\n" #: options.h:2600 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" " -all_to_remote/-noall_to_remote\n" " - no/convertir todos los enlaces de un documento HTML en enlaces " "remotos\n" " inmediatamente después de su descarga y no realizar ningún cambio\n" " sobre ellos\n" #: options.h:2625 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "" " -remind_cmd $str\n" " - comando que envía el resultado para el modo recordatorio\n" #: options.h:2636 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" " -auto_referer/-noauto_referer\n" " - no/enviar el campo \"Referer:\" que contiene su propia URL\n" " para cada URL de inicio enviada con la solicitud HTTP\n" #: options.h:2660 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" " -url_strategie $estrategia\n" " - estrategia de planificación (orden de descarga) para las URLs.\n" " \"$estragegia\" puede tomar uno de los siguientes valores:\n" " * level - nivel dentro del árbol de URLs\n" " * leveli - nivel dentro del árbol de URLs, pero primero los\n" " objetos incrustrados\n" " * pre - pre-orden en el árbol de URLs\n" " * prei - pre-orden en el árbol de URLs, pero primero los\n" " objetos incrustados\n" #: options.h:2683 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "" " -nscache_dir $dir\n" " - ruta al directorio de la caché del explorador Netscape\n" #: options.h:2698 msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr "" " -ie_cache\n" " - permitir recuperar ficheros desde la cache del navegador MSIE\n" #: options.h:2728 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" " -remove_adv/-noremove_adv\n" " - permitir la supresión de carteles publicitarios\n" " (asume que se han configurado las expresiones regulares con la\n" " opción -adv_re para su selección)\n" #: options.h:2761 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "" " -adv_re $ER\n" " - expresiones regulares para la selección de las URLs asociadas con\n" " carteles publicitarios\n" #: options.h:2777 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" " -check_bg/-nocheck_bg\n" " - para una ejecución en segundo plano, (no)/escribir ningún mensaje\n" " en pantalla\n" #: options.h:2806 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" " -send_if_range/-nosend_if_range\n" " no/enviar cabecera \"If-Range\" con la solicitud HTTP\n" " ( actívese cuando el servidor soporte reintento de descarga, pero\n" " genera diferentes \"Etags\" para dos solicitudes )\n" #: options.h:2831 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "" " -sched_cmd $str\n" " - comando para planificación\n" #: options.h:2842 msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" " -unique_log/-nounique_log\n" " - cuando se encuentre bloqueado el fichero de registro original\n" " intentar localizar otro con su extensión numerada que no se\n" " encuentre bloqueado\n" #: options.h:2866 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" " -post_cmd $str\n" " - comando de postproceso, que será invocado tras la descarga exitosa\n" " del documento\n" #: options.h:2882 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" " -ssl_version $v\n" " - versión del protocolo SSL utilizado para la comunicación\n" " ( Valores válidos: ssl23, ssl2, ssl3, tls1 )\n" #: options.h:2885 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" " -ssl_version $v\n" " - versión del protocolo SSL utilizado para la comunicación\n" " (Valores válidos: ssl23, ssl2, ssl3\n" #: options.h:2903 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" " -unique_sslid/-nounique_sslid\n" " - no/utilizar ID SSL único con cada sesión SSL\n" #: options.h:2931 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "" " -httpad $hdr\n" " - cabecera HTTP adicional\n" #: options.h:2942 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "" " -statfile $str\n" " - informe estadístico acerca del progreso en la descarga\n" #: options.h:2956 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "" " -ewait\n" " - esperar a que finalice el programa después de completarse el\n" " progreso de descarga\n" #: options.h:2987 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "" " -aip_pattern $ER\n" " - patrón con las direcciones IP de servidores permitidos\n" #: options.h:3002 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "" " -dip_pattern $ER\n" " - patrón con las direcciones IP de servidores no permitidos\n" #: options.h:3014 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "" " -site_level $num\n" " - máximo número de sitios a visitar desde el sitio inicial\n" #: options.h:3026 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" " -use_http11/-nouse_http11\n" " - habilita o inhabilita el uso de las características del protocolo\n" " HTTP/1.1 (desactivado por defecto)\n" #: options.h:3050 #, fuzzy msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" " -max_time $num\n" " - fijar una cantidad de tiempo máxima para la ejecución del programa\n" " (en minutos; defecto == 0 == sin límite)\n" #: options.h:3065 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" " -local_ip $str\n" " - utilizar esta dirección IP del interfaz de red.\n" " Esta opción se aplica a máquinas que realizan \"multihome\".\n" #: options.h:3077 msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" " -request $pet\n" " - petición de informaciones ampliadas, utilizada para\n" " suministrar información adicional para las solicitudes GET o POST\n" " Formato de \"$pet\" :\n" " \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" " FIELD:$variable=$valor\n" " FILE:$variable=$nombre_fichero\"\n" " (consulte la página del manual para información adicional)\n" #: options.h:3095 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" " -hash_size $num\n" " - tamaño de las tablas de hash internas para ajuste del rendimiento\n" #: options.h:3109 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "" " -nthreads $num\n" " - fija el número de hilos concurrentes de descarga\n" #: options.h:3124 msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" " -immesg/-noimmesg\n" " - escribe los mensajes tan pronto como se producen, y no\n" " sólo cuando se considere apropiado\n" #: options.h:3152 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" " -formdata $datos\n" " - utilizado para especificar los campos de formularios HTML,\n" " para los formularios detectados durante el rastreo del árbol de\n" " documentos.\n" " Sólo se procesarán de forma automática aquellos formularios\n" " mencionados en esta opción.\n" " \"URL:$url\n" " FIELD:$variable=$valor\n" " FILE:$variable=$nombre_fichero\"\n" " (consulte la página del manual para ampliar información)\n" #: options.h:3170 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" " -dumpfd $num\n" " - número del descriptor de fichero donde enviar como salida los\n" " contenidos de un documento en lugar de un fichero\n" #: options.h:3182 msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" " -dump_urlfd $num\n" " - número del descriptor de fichero donde enviar como salida\n" " todas las direcciones encontradas en los documentos\n" #: options.h:3194 msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" " -del_after/-nodel_after\n" " - no/borrar el documento FTP después de su descarga con éxito\n" #: options.h:3217 msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" " -unique_name/-nounique_name\n" " - no/generar siempre un nombre único para cada documento\n" #: options.h:3240 msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" " -leave_site_enter_dir/-dont_leave_site_enter_dir\n" " - no/abandonar el directorio inicial del sitio\n" #: options.h:3263 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" " -singlepage/-nosinglepage\n" " - descargar únicamente la página HTML con todos los objetos\n" " incrustados\n" #: options.h:3286 msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" " -dump_after/-nodump_after\n" " - cuando se utiliza con la opción -dumpfd, volcar el documento\n" " después de la descarga y el procesamiento con éxito de los\n" " documentos HTML\n" #: options.h:3311 msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" " -dump_response/-nodump_response\n" " - cuando se utiliza con la opción -dumpfd, también se volcarán\n" " las respuestas recibidas desde los servidores HTTP\n" #: options.h:3338 msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" " -auth_ntlm_domain $cad\n" " - nombre de dominio SMB para autorización con NTLM de HTTP\n" #: options.h:3354 msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" " -auth_proxy_ntlm_domain $cad\n" " - nombre de dominio SMB para la autorización con NTLM del proxy HTTP\n" #: options.h:3370 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" " -js_pattern $er\n" " - patrones de ER adicionales para coincidencia de URLs en\n" " atributos de evento DOM de los elementos de HTML\n" #: options.h:3383 msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" " -follow_cmd $cad\n" " - guión de salida de usuario utilizado para preguntar si se desea\n" " seguir cualquier enlace del documento HTML actual\n" #: options.h:3395 msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" " -retrieve_symlink/-noretrieve_symlink\n" " - no/recuperar los enlaces simbólicos como ficheros o directorios " " regulares\n" #: options.h:3421 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" " -js_transform $p $t $h $a\n" " - patrón JS de usuario con transformación\n" " $p - patrón\n" " $t - transformación\n" " $h - elemento de HTML o * \"\"\n" " $a - atributo de HTML\n" #: options.h:3441 #, fuzzy msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" " -js_transform $p $t $h $a\n" " - patrón JS de usuario con transformación\n" " $p - patrón\n" " $t - transformación\n" " $h - elemento de HTML o * \"\"\n" " $a - atributo de HTML\n" #: options.h:3459 msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" " -ftp_proxy_user $cad\n" " - nombre de usuario para autorización de acceso al proxy FTP\n" #: options.h:3471 msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" " -ftp_proxy_pass $cad\n" " - contraseña para la autorización de acceso al proxy FTP\n" #: options.h:3483 #, fuzzy msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" " -singlepage/-nosinglepage\n" " - descargar únicamente la página HTML con todos los objetos\n" " incrustados\n" #: options.h:3506 #, fuzzy msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" " -ftp_dirtyproxy/-noftp_dirtyproxy\n" " - no/utilizar solicitud CONNECT con proxy HTTP para las conexiones " "FTP\n" #: options.h:3519 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" #: options.h:3544 #, fuzzy msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" " -remove_old/-noremove_old\n" " - no/eliminar ficheros o directorios inapropiados mientras esté\n" " operando en modo síncrono\n" #: options.h:3568 #, fuzzy msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" " -scndir $dir\n" " - directorio dónde guardar los escenarios (ficheros de configuración)\n" #: options.h:3583 #, fuzzy msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "" " -nscache_dir $dir\n" " - ruta al directorio de la caché del explorador Netscape\n" #: options.h:3595 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3607 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3619 #, fuzzy msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" " -dump_response/-nodump_response\n" " - cuando se utiliza con la opción -dumpfd, también se volcarán\n" " las respuestas recibidas desde los servidores HTTP\n" #: options.h:3643 msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" #: options.h:3659 #, fuzzy msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" " -ssl_cert_file $str\n" " - fichero de certificados SSL\n" #: options.h:3672 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" #: pavuk.c:106 msgid "QUIT signal catched\n" msgstr "Se capturó la señal QUIT\n" #: pavuk.c:259 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "Insuficiente número de parámetro \"-msgcat\"\n" #: pavuk.c:273 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "Insuficiente número de parámetros \"-scenario\"\n" #: pavuk.c:303 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "" "Error: se suministró un descriptor de fichero incorrecto con la\n" "opción -dumpfd\n" #: pavuk.c:314 msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "" "Error: se suministró un descriptor de fichero incorrecto \n" "con la opción -dump_urlfd\n" #: pavuk.c:366 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "" "ADVERTENCIA: no se ha configurado el directorio de esnecarios - salvando\n" "sobre el directorio actual\n" #: pavuk.c:403 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "" "Imposible iniciar ejecución en segundo plano - se continua en primer plano\n" #: pavuk.c:407 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "Pavuk se ejecutará en segundo plano bajo el PID %d\n" #: pavuk.c:427 #, c-format msgid "reading URLs from file - %s\n" msgstr "Leyendo URLs desde el fichero - %s\n" #: recurse.c:82 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "Volviendo a planificar la URL bloqueada con el núm. %d\n" #: recurse.c:95 msgid "Running post-processing command\n" msgstr "Ejecutando el comando de post-procesamiento\n" #: recurse.c:243 #, c-format msgid "retry no. %d\n" msgstr "Reintento núm. %d\n" #: recurse.c:246 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "URL[%2d]: %5d(%d) de %5d %s\n" #: recurse.c:249 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "URL: %5d(%d) de %5d %s\n" #: recurse.c:260 recurse.c:394 msgid "Starting download" msgstr "Iniciando la descarga" #: recurse.c:284 msgid "Already processed\n" msgstr "Ya estaba procesada\n" #: recurse.c:291 msgid "Disallowed by user\n" msgstr "Inhabilitado por el usuario\n" #: recurse.c:305 msgid "Disallowed by rules\n" msgstr "Inhabilitado por las reglas\n" #: recurse.c:312 msgid "Checking \"robots.txt\"" msgstr "Verificando \"robots.txt\"" #: recurse.c:316 msgid "Disallowed by \"robots.txt\"\n" msgstr "Inhabilitado por \"robots.txt\"\n" #: recurse.c:326 msgid "This URL type is not supported with ftpdir mode\n" msgstr "Este tipo de URL no está soportado con el modo ftpdir\n" #: recurse.c:346 msgid "No transfer - file not expired\n" msgstr "No se transfiere - el fichero no ha expirado\n" #: recurse.c:362 #, c-format msgid "Starting time : %s\n" msgstr "Hora de inicio : %s\n" #: recurse.c:404 recurse.c:563 #, c-format msgid "Ending time : %s\n" msgstr "Hora de finalización : %s\n" #: recurse.c:411 recurse.c:566 msgid "download" msgstr "descarga" #: recurse.c:511 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "último documento bloqueado -> pausa durante 5 segundos\n" #: recurse.c:577 msgid "Relocating and scanning HTML document" msgstr "Localizando y escaneando el documento HTML de nuevo" #: recurse.c:629 msgid "Dumping processed document" msgstr "Volcando documento procesado" #: recurse.c:649 msgid "Storing document" msgstr "Guardando el documento" #: recurse.c:655 msgid "Store failed\n" msgstr "Falló la copia\n" #: recurse.c:762 recurse.c:845 msgid "Done" msgstr "Finalizado" #: recurse.c:922 remind.c:379 msgid "Sleeping ..." msgstr "En pausa ..." #: recurse.c:936 remind.c:396 msgid "Exiting ..." msgstr "Finalizando ..." #: recurse.c:1048 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d bytes)\n" #: recurse.c:1106 msgid "Searching for files to resume" msgstr "Buscando ficheros para reanudar" #: recurse.c:1133 #, c-format msgid "Adding %s to resume list\n" msgstr "Añadiendo %s a la lista de reanudación\n" #: recurse.c:1165 msgid "Searching for documents to synchronize" msgstr "Buscando documentos a sincronizar" #: recurse.c:1220 recurse.c:1245 #, fuzzy, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "Añadiendo %s a la lista de sincronización\n" #: remind.c:45 #, c-format msgid "Checking: %s\n" msgstr "Verificando: %s\n" #: remind.c:170 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "Entrada inválida en BBDD recordatorios - %s\n" #: remind.c:529 msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "Este es el resultado del modo recordatorio de Pavuk\n" "\n" #: remind.c:540 msgid "Changed URLs\n" msgstr "URLs modificadas\n" #: remind.c:561 msgid "URLs with some errors\n" msgstr "URLs con algunos errores\n" #: robots.c:166 msgid "transfering \"robots.txt\"" msgstr "transfiriendo \"robots.txt\"" #: robots.c:169 msgid "transfering \"robots.txt\"\n" msgstr "transfiriendo \"robots.txt\"\n" #: robots.c:230 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "Oh: redireccionando \"robots.txt\" a %s ???\n" #: stats.c:138 stats.c:221 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "Número total de URLs en la cola: %d\n" #: stats.c:139 stats.c:223 #, c-format msgid "Starting urls: %d\n" msgstr "URLs iniciales: %d\n" #: stats.c:142 stats.c:228 msgid "Not processed yet: %d (%3d%%)\n" msgstr "Aún no procesada: %d (%3d%%)\n" #: stats.c:147 stats.c:235 msgid "Processed OK: %d (%3d%%)\n" msgstr "Procesada con éxito: %d (%3d%%)\n" #: stats.c:150 stats.c:241 msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "Cargada desde árbol local: %d (%3d%%)\n" #: stats.c:153 stats.c:247 msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "Cargado desde directorio caché de Netscape: %d (%3d%%)\n" #: stats.c:156 stats.c:253 msgid "Downloaded over network: %d (%3d%%)\n" msgstr "Descargada a través de red: %d (%3d%%)\n" #: stats.c:159 stats.c:259 msgid "Moved to another location: %d (%3d%%)\n" msgstr "Movida a otra ubicación: %d (%3d%%)\n" #: stats.c:163 stats.c:265 msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "Descarga truncada: %d (%3d%%)\n" #: stats.c:169 stats.c:272 msgid "Non fatal errors: %d (%3d%%)\n" msgstr "Errores no fatales: %d (%3d%%)\n" #: stats.c:175 stats.c:279 msgid "Not found documents: %d (%3d%%)\n" msgstr "Documentos no encontrados: %d (%3d%%)\n" #: stats.c:181 stats.c:286 msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "Documentos con errores fatales: %d (%3d%%)\n" #: stats.c:187 msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "Documentos en estado desconocido: %d (%3d%%)\n" #: stats.c:293 msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "Documentos con estado no especificado: %d (%3d%%)\n" #: stats.c:358 msgid "Pavuk: save status page" msgstr "Pavuk: guardar página de estado" #: stats.c:379 stats.c:537 msgid "Not available yet" msgstr "Aun no disponible" #: stats.c:462 msgid "Pavuk: status page" msgstr "Pavuk: Recuperar Fichero" #: stats.c:479 msgid "Status page" msgstr "Página de estado" #: stats.c:492 msgid "Save ..." msgstr "Guardar ..." #: stats.c:499 msgid "Refresh" msgstr "Refrescar" #: stats.c:526 msgid "Try download" msgstr "Intentar descarga" #: tools.c:109 msgid "no error" msgstr "sin error" #: tools.c:114 msgid "host not found" msgstr "host no encontrado" #: tools.c:119 msgid "temporary error (try again later)" msgstr "error temporal (inténtelo de nuevo un poco más tarde)" #: tools.c:124 msgid "non recoverable error" msgstr "error irrecuperable" #: tools.c:129 msgid "name is valid, but doesn't have an IP address" msgstr "nombre válido, pero no cuenta con dirección IP" #: tools.c:133 msgid "unknown hostname translation error" msgstr "se produjo un error durante la resolución del nombre de host" #: tools.c:315 tools.c:330 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "" "esperando a que se libere el bloque sobre el descriptor de fichero: %d\n" #: uconfig.c:998 msgid "Bad parameter - Working subdirectory" msgstr "Parámetro incorrecto - Subdirectorio de trabajo" #: uconfig.c:1178 msgid "Bad parameter - Cache directory" msgstr "Parámetro incorrecto - directorio caché" #: uexit.c:30 msgid "Error occured while executing user-exit script" msgstr "Ocurrió un error mientras se ejecutab el guión de salida de usuario" #: update_links.c:40 #, c-format msgid "Entering directory %s\n" msgstr "Entrando en el directorio %s\n" #: update_links.c:69 #, c-format msgid "Relocating %s\n" msgstr "Trasladando %s\n" #: update_links.c:72 #, c-format msgid "Omitting %s\n" msgstr "Omitiendo %s\n" #: update_links.c:86 #, c-format msgid "Leaving directory %s\n" msgstr "Abandonando el directorio %s\n" #: update_links.c:104 #, c-format msgid "Can't open directory %s\n" msgstr "Imposible abrir el directorio %s\n" #: url.c:1000 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "Tipo de URL no soportado \"%s\"\n" #: url.c:1152 msgid "Moved to already processed URL.\n" msgstr "Moviendo con las URLs ya procesadas.\n" #: url.c:2767 #, fuzzy msgid "Missing specification of URL in request\n" msgstr "Campos ausentes en especificación para solicitud POST\n" #: url.c:2776 msgid "Missing request fields specification for POST request\n" msgstr "Campos ausentes en especificación para solicitud POST\n" #: url.c:2784 msgid "Multipart encoding not supported with GET requests\n" msgstr "Codificación multiparte no soportada con peticiones GET\n" #~ msgid "%s : ERROR: unable to change directory\n" #~ msgstr "%s : ERROR: imposible cambiar al directorio\n" pavuk-0.9.35/po/fr.po0000644000175000001440000042460610151073676011262 00000000000000# French message catalog for Web grabber pavuk. # Copyright (C) 1999 Free Software Foundation, Inc. # TOUSSAINT Frederic , 1999. # AUDOUX Pascal , 2000 # LE FAUCHEUR Frédéric , 2001 # msgid "" msgstr "" "Project-Id-Version: PAVUK\n" "POT-Creation-Date: 2001-08-12 21:55+0200\n" "PO-Revision-Date: 2001-08-06 23:39+0100\n" "Last-Translator: LE FAUCHEUR Frédéric \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: abstract.c:46 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "Téléchargement arrêté pendant %d secondes.\n" #: abstract.c:84 doc.c:550 msgid "File redirect\n" msgstr "Fichier redirigé\n" #: abstract.c:120 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "Lecture des adresses à partir du cache local de Netscape - %s\n" #: abstract.c:152 #, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "Lecture des adresses à partir du cache local de Mozilla - %s\n" #: abstract.c:185 #, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "Lecture des adresses à partir du cache local de MSIE - %s\n" #: abstract.c:221 msgid "Unsupported URL\n" msgstr "Adresse non supportée\n" #: abstract.c:341 abstract.c:377 msgid "Warning: broken ftp transfer ...\n" msgstr "Attention : transfert FTP interrompu ...\n" #: abstract.c:351 msgid "Error removing FTP document from remote server\n" msgstr "Erreur de transfert FTP\n" #: abstract.c:496 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "Erreur de lecture du document encodage \"tronqué\" !\n" #: ainterface.c:118 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "Suppression des adresses non supportées : %s\n" #: ainterface.c:199 msgid "Specify at least one starting URL!" msgstr "Préciser au moins une adresse !" #: ainterface.c:201 msgid "Specify at least one starting URL!\n" msgstr "Préciser au moins une adresse !\n" #: ainterface.c:472 msgid "Can't list available message catalogs\n" msgstr "Impossible de lister les catalogues de message\n" #: authinfo.c:107 msgid "Bad section - specify protocol\n" msgstr "Mauvaise section - spécifier un protocole\n" #: authinfo.c:112 msgid "Bad section - specify hostname\n" msgstr "Mauvaise section - spécifier un serveur\n" #: authinfo.c:159 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "Impossible d'analyser : \"%s\"\n" #: authinfo.c:179 #, c-format msgid "Bad protocol - %s\n" msgstr "Protocole incorrect - %s\n" #: authinfo.c:190 #, c-format msgid "Bad port number %s\n" msgstr "Numéro de port %s incorrect\n" #: authinfo.c:211 #, c-format msgid "Unknown auth type - %s\n" msgstr "Mode d'authentification inconnu - %s\n" #: cleanup.c:60 msgid "press any key to exit\n" msgstr "Appuyer sur une touche pour quitter\n" #: cmdparse.c:129 #, c-format msgid "Error parsing commandline at: %s\n" msgstr "Erreur dans la ligne de commande à %s\n" #: cmdparse.c:186 #, c-format msgid "Unable to parse commandline: %s\n" msgstr "Impossible d'analyser la ligne de commande : %s \n" #: config.c:44 msgid "Level order" msgstr "Ordre par niveau" #: config.c:45 msgid "Level order, inline first" msgstr "Ordre par niveau, les objets inclus en premier" #: config.c:46 msgid "Pre order" msgstr "Pré-ordre" #: config.c:47 msgid "Pre order, inline first" msgstr "Pré-ordre, les objets inclus en premier" #: config.c:115 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "Utilisation : %s [options] [nombre quelconque d'adresses]\n" "pavuk-%s %s\n" #: config.c:131 #, c-format msgid "Type \"%s --help\" for long help\n" msgstr "Entrer \"%s --help\" pour l'aide complète\n" #: config.c:139 msgid "Optional features available :\n" msgstr "Options disponibles : \n" #: config.c:141 msgid " - Debug mode\n" msgstr " - Mode de déboguage\n" #: config.c:145 msgid " - GNU gettext internationalization of messages\n" msgstr " - Internationalisation des messages par GNU gettext\n" #: config.c:149 msgid " - flock() document locking\n" msgstr " - Verrouillage de document flock()\n" #: config.c:153 msgid " - fcntl() document locking\n" msgstr " - Verrouillage de document fcntl()\n" #: config.c:158 msgid " - Gtk GUI interface\n" msgstr " - Interface graphique Gtk\n" #: config.c:161 msgid " - URL tree preview\n" msgstr " - Prévisualisation de l'arborescence\n" #: config.c:166 msgid " - http over SSL\n" msgstr " - HTTP sur SSL\n" #: config.c:171 msgid " - Socks v4 proxy support\n" msgstr " - Support SOCKS V4\n" #: config.c:173 msgid " - Socks v5 proxy support\n" msgstr " - Support SOCKS V5\n" #: config.c:177 msgid " - with filesystem free space checking\n" msgstr " - Avec une vérification de l'espace disque disponible\n" #: config.c:181 msgid " - with optional regex patterns in -fnrules and -*rpattern options\n" msgstr "" " - Avec des motifs regex optionnels dans les options -fnrules et -*rpattern\n" #: config.c:185 msgid " - with POSIX regexp\n" msgstr " - Avec des expressions régulières POSIX\n" #: config.c:189 msgid " - with Bell V8 regexp\n" msgstr " - Avec des expressions régulières Bell V8\n" #: config.c:193 msgid " - with BSD regexp\n" msgstr " - Avec des expressions régulières BSD\n" #: config.c:197 msgid " - with GNU regexp\n" msgstr " - Avec des expressions régulières GNU\n" #: config.c:201 msgid " - with PCRE regexp\n" msgstr " - Avec des expressions régulières PCRE\n" #: config.c:205 msgid " - with support for loading files from Netscape browser cache\n" msgstr "" " - Avec le support de chargement des fichiers depuis le cache de Netscape\n" #: config.c:209 msgid "" " - with support for detecting whether pavuk is running as background job\n" msgstr "" " - Avec le support de la détection du fonctionnement de pavuk en arrière " "plan\n" #: config.c:213 msgid " - with multithreading support\n" msgstr " - Avec le support du multithread\n" #: config.c:217 msgid " - with NTLM authorization support\n" msgstr " - Avec le support de l'authentification Windows NT\n" #: config.c:221 msgid " - with JavaScript bindings\n" msgstr " - Avec le support JavaScript inclus\n" #: config.c:295 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "Tag HTML non supporté : %s.%s\n" #: config.c:654 msgid "Error parsing commandline\n" msgstr "Erreur dans la ligne de commande\n" #: config.c:661 #, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "Pas assez de paramètres pour l'option \"-%s\"\n" #: config.c:668 #, c-format msgid "Unknown option %s\n" msgstr "Option %s inconnue\n" #: config.c:675 #, c-format msgid "Wrong format of option %s\n" msgstr "Format incorrect pour l'option %s\n" #: config.c:684 #, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "" "Attention : l'option \"-%s\" n'est pas supportée dans cette configuration !\n" #: config.c:697 #, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "Spécifier un nombre avec le paramètre \"-%s\"\n" #: config.c:762 config.c:1113 http_proxy.c:120 #, c-format msgid "Unknown port \"%s\"\n" msgstr "Port inconnu \"%s\"\n" #: config.c:778 config.c:1126 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "Mauvais mode d'authentification \"%s\"\n" #: config.c:788 config.c:1136 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "Mode d'opération inconnu \"%s\"\n" #: config.c:810 #, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "Spécifier un nombre flottant avec le paramètre \"-%s\"\n" #: config.c:829 #, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "Spécifier un type de condition correcte pour -%s (%s)\n" #: config.c:852 #, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "Spécifier une expression régulière valide avec le paramètre \"-%s\"\n" #: config.c:863 config.c:1248 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "Stratégie de planification d'adresses inconnue - \"%s\"\n" #: config.c:871 config.c:1259 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "Version SSL inconnue - \"%s\"\n" #: config.c:880 config.c:1270 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "Entête HTTP additionnel invalide - \"%s\"\n" #: config.c:903 config.c:1293 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "Spécification de requête invalide - \"%s\"\n" #: config.c:948 #, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "Paramètres invalides pour l'option \"-%s\"\n" #: config.c:964 #, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "Liste de nombres %s invalide pour l'option \"-%s\"\n" #: config.c:981 #, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "Chaîne de connexion FTP \"%s\" invalide pour l'option \"-%s\"\n" #: config.c:1031 #, c-format msgid "WARNING: option \"%s\" not supported in current configuration!\n" msgstr "" "Attention : l'option \"%s\" n'est pas supportée dans cette configuration !\n" #: config.c:1055 #, c-format msgid "Please specify number \"%s\"\n" msgstr "Spécifier un nombre \"%s\"\n" #: config.c:1073 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "Seulement \"true\" et \"false\" sont autorisés : \"%s\"\n" #: config.c:1147 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "Mauvais paramètre de date \"%s\"\n" #: config.c:1178 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "Spécifier un nombre flottant \"%s\"\n" #: config.c:1195 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "Spécifier des arguments corrects pour %s\n" #: config.c:1207 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "Spécifier un type de condition correcte pour %s (%s)\n" #: config.c:1235 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "Spécifier une expression régulière valide \"%s\"\n" #: config.c:1327 #, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "Spécification de transformation js_transform invalide - \"%s\"\n" #: config.c:1347 #, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "Spécification de liste de nombres invalide - \"%s\"\n" #: config.c:1362 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "Chaîne de connexion FTP invalide \"%s\"\n" #: config.c:1388 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "Impossible d'analyser \"%s\"\n" #: config.c:1430 #, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "Erreur : Chargement du scenario (%s) impossible\n" #: cookie.c:216 #, c-format msgid "Unable to parse : %s\n" msgstr "Impossible d'analyser : \"%s\"\n" #: cookie.c:389 msgid "Updating cookie file\n" msgstr "Mise à jour du fichier des cookies\n" #: cookie.c:418 msgid "Cookie file has changed - > synchronizing\n" msgstr "Le fichier des cookies a été modifié -> synchronisation\n" #: cookie.c:567 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "Le serveur %s tente de positionner un cookie pour le domaine %s\n" #: cookie.c:578 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "Effacement des cookies du domaine désactivé %s\n" #: debugl.c:16 msgid "HTML parsers" msgstr "Analyseur HTML" #: debugl.c:17 msgid "Server responses" msgstr "Réponses du serveur" #: debugl.c:18 msgid "Client requests" msgstr "Requêtes client" #: debugl.c:19 msgid "Procedure calling" msgstr "Appel de procédure" #: debugl.c:20 msgid "File locking" msgstr "Verrouillage de fichier" #: debugl.c:21 msgid "Networking code" msgstr "Code de support réseau" #: debugl.c:22 msgid "Miscelanous" msgstr "Divers" #: debugl.c:23 msgid "Extended user infos" msgstr "Informations utilisateur étendues" #: debugl.c:24 msgid "Multithreading - locking" msgstr "Multithreading - verrouillage" #: debugl.c:25 msgid "Multithreading - threads" msgstr "Multithreading - threads" #: debugl.c:26 msgid "POST request data" msgstr "Données de requête POST" #: debugl.c:27 msgid "Limiting conditions" msgstr "Conditions de limitation" #: debugl.c:66 #, c-format msgid "Bad debug level selection : %s\n" msgstr "Niveau de déboguage erroné : %s\n" #: decode.c:185 msgid "decode" msgstr "Decodage" #: digest_auth.c:155 msgid "Trying to do HTTP Digest authorization\n" msgstr "Essai d'authentification HTTP en mode abrégé\n" #: digest_auth.c:202 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "Essai d'authentification proxy HTTP en mode abrégé\n" #: dinfo.c:368 dinfo.c:387 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr "Erreur dans le champ %s de .pavuk_info\n" #: doc.c:297 msgid "Transfering data" msgstr "Transfert en cours" #: doc.c:312 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt : échec SO_RCVBUF" #: doc.c:333 msgid "storing document" msgstr "Enregistrement du document" #: doc.c:399 msgid "Document transfer data" msgstr "Données de tranfert" #: doc.c:420 msgid "Data transfer done" msgstr "Tranfert terminé" #: doc.c:597 #, c-format msgid "Trying to resume from position %d \n" msgstr "Tentative de reprise à partir de %d\n" #: doc.c:662 msgid "Opening connection" msgstr "Ouverture de la connexion" #: doc.c:686 msgid "Loading local copy\n" msgstr "Chargement de la copie locale\n" #: doc.c:912 msgid "File may be truncated\n" msgstr "Le fichier est peut-être corrompu\n" #: doc.c:936 msgid "Decoding document - OK\n" msgstr "Décodage du document réussi\n" #: doc.c:939 msgid "Decoding document - failed\n" msgstr "Echec du décodage du document\n" #: doc.c:942 msgid "Unsupported document encoding\n" msgstr "Codage du document non supporté\n" #: doc.c:946 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "Fichier encodé reçu mais le décodage est refusé\n" #: doc.c:1116 #, c-format msgid "Removing improper document : %s\n" msgstr "Elimination du document %s non conforme\n" #: doc.c:1178 doc.c:1244 msgid "Local file" msgstr "Fichier local" #: doc.c:1184 msgid "Gopher/Text File" msgstr "Fichier Texte Gopher" #: doc.c:1187 msgid "Gopher/Directory" msgstr "Répertoire Gopher" #: doc.c:1190 msgid "Gopher/CSO phone book" msgstr "Répertoire Gopher/CSO" #: doc.c:1193 msgid "Gopher/Error" msgstr "Erreur Gopher" #: doc.c:1196 msgid "Gopher/BINHEX" msgstr "BINHEX Gopher" #: doc.c:1199 msgid "Gopher/DOS bin" msgstr "DOS bin Gopher" #: doc.c:1202 msgid "Gopher/UUencoded" msgstr "UUencodé Gopher" #: doc.c:1205 msgid "Gopher/Search index" msgstr "Index de recherche Gopher" #: doc.c:1208 msgid "Gopher/Telnet session" msgstr "Session Telnet Gopher" #: doc.c:1211 msgid "Gopher/bin" msgstr "Bin Gopher" #: doc.c:1214 msgid "Gopher/Duplicated server" msgstr "Serveur dupliqué Gopher" #: doc.c:1217 msgid "Gopher/TN3270" msgstr "TN3270 Gopher" #: doc.c:1220 msgid "Gopher/GIF" msgstr "GIF Gopher" #: doc.c:1223 msgid "Gopher/Image" msgstr "Image Gopher" #: doc.c:1229 msgid "FTP/Directory" msgstr "Répertoire FTP" #: doc.c:1231 msgid "FTP/File" msgstr "Fichier FTP" #: doc.c:1235 msgid "FTPS/Directory" msgstr "Répertoire FTPS" #: doc.c:1237 msgid "FTPS/File" msgstr "Fichier FTPS" #: doc.c:1240 msgid "Unsupported type" msgstr "Type non supporté" #: doc.c:1447 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s] \r" msgstr "E : %s [R : %s] [TE : %s] [TR : %s] \r" #: doc.c:1450 #, c-format msgid "S: %s [R: %s] [ET: %s] \r" msgstr "E : %s [R : %s] [TR : %s] \r" #: doc.c:1490 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "En attente de déverrouillage du document : %s\n" #: doc.c:1730 msgid "Rewriting links inside parent documents" msgstr "Ré-écriture des liens dans les documents parents" #: errcode.c:21 #, c-format msgid "%s: user break\n" msgstr "%s : pause utilisateur\n" #: errcode.c:28 #, c-format msgid "%s: OK\n" msgstr "%s : OK\n" #: errcode.c:31 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s : Erreur à l'enregistrement du document\n" #: errcode.c:34 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s : Erreur à l'ouverture du fichier\n" #: errcode.c:37 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "" "%s : Erreur : l'adresse pointant vers le répertoire local n'est pas " "supportée\n" #: errcode.c:40 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s : Erreur inconnue\n" #: errcode.c:43 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s : Erreur : le document est verrouillé\n" #: errcode.c:46 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s : Erreur : lecture de socket\n" #: errcode.c:49 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s : Information : taille supérieure au maximum autorisé\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "%s : Information : désactivé par un script utilisateur\n" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s : Information : taille inférieure au minimum autorisé\n" #: errcode.c:58 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s : Information : type MIME non autorisé (%s)\n" #: errcode.c:61 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s : Erreur : erreur lors de la connexion au proxy\n" #: errcode.c:64 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s : Erreur : transfert arrêté par l'utilisateur\n" #: errcode.c:67 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "" "%s : Information : la date de modification du fichier est en dehors " "del'intervalle spécifié\n" #: errcode.c:70 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s : Erreur : le fichier a une taille nulle - erreur possible\n" #: errcode.c:73 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s : Message : le document a déjà été traité\n" #: errcode.c:76 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s : Message : document interdit par l'utilisateur\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "%s : Information : document interdit par les règles de limitation\n" #: errcode.c:82 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "" "%s : Attention : le taux de transfert est inférieur au minimum autorisé\n" #: errcode.c:85 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "" "%s : Attention : dépassement du quota de la taille des fichiers, le reste va " "être ignoré\n" #: errcode.c:88 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "%s : Attention : dépassement du quota, le transfert est interrompu\n" #: errcode.c:91 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "" "%s : Erreur : pas assez d'espace sur le disque, le transfert est interrompu\n" #: errcode.c:94 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "" "%s : Attention : dépassement du temps maximum de téléchargement, le " "transfert va être arrêté\n" #: errcode.c:97 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s : Erreur : erreur FTP inconnue\n" #: errcode.c:100 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s : Erreur : le serveur FTP ne supporte pas la commande REST\n" #: errcode.c:104 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s : Erreur : impossible d'afficher le contenu du répertoire\n" #: errcode.c:107 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s : Erreur : impossible de se connecter au serveur FTP\n" #: errcode.c:110 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s : Erreur : authentification FTP - nom d'utilisateur incorrect\n" #: errcode.c:113 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s : Erreur : authentification FTP - mot de passe incorrect\n" #: errcode.c:116 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "" "%s : Erreur : authentification proxy FTP - nom d'utilisateur incorrect\n" #: errcode.c:119 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s : Erreur : authentification proxy FTP - mot de passe incorrect\n" #: errcode.c:122 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s : Erreur : impossible d'ouvrir la connexion FTP\n" #: errcode.c:125 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s : Erreur : impossible de télécharger le fichier du serveur FTP\n" #: errcode.c:128 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s : Erreur : le serveur FTP ne supporte pas la commande MDTM\n" #: errcode.c:131 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s : Erreur : le fichier téléchargé du serveur FTP est corrompu\n" #: errcode.c:135 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s : Information : recupération inutile - le fichier est à jour\n" #: errcode.c:138 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s : Information : Transfert FTP non autorisé par les règles\n" #: errcode.c:141 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "%s: Attention : répertoire FTP non autorisé (-FTPdir)\n" #: errcode.c:144 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "%s : Attention : échec de la procédure de connexion FTP\n" #: errcode.c:147 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s : Erreur : erreur HTTP inconnue\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s : Erreur : connexion au serveur HTTP impossible\n" #: errcode.c:153 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "" "%s : Erreur : le serveur HTTP ne supporte pas les téléchargements partiels\n" #: errcode.c:156 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "%s : Erreur : requête HTTP envoyée corrompue\n" #: errcode.c:159 #, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%si : Erreur : impossible de lire la réponse HTTP\n" #: errcode.c:162 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "" "%s : Erreur : réponse HTTP inattendue après la tentative de rechargement\n" #: errcode.c:166 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "" "%s : Erreur : impossible de transmettre les données de la requête HTTP\n" #: errcode.c:169 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s : Information : redirection vers une autre adresse\n" #: errcode.c:172 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s : Erreur : le document HTTP est corrompu\n" #: errcode.c:175 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s : Erreur : redirection cyclique !\n" #: errcode.c:178 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s : Erreur : redirection vers une adresse non supportée\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s : Erreur : connexion au proxy impossible\n" #: errcode.c:184 #, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "%s : Erreur : la réponse de redirection du serveur est erronée\n" #: errcode.c:187 #, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "%s : Erreur : authentification Windows NT impossible\n" #: errcode.c:190 #, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "%s : Erreur : authentification HTTP abrégée impossible\n" #: errcode.c:193 #, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "%s : Erreur : authentification proxy Windows NT impossible\n" #: errcode.c:196 #, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "%s : Erreur : authentification proxy HTTP impossible\n" #: errcode.c:199 #, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s : Erreur : émission d'une requête erronée par le client HTTP\n" #: errcode.c:202 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s : Erreur : Authentification HTTP demandée\n" #: errcode.c:205 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s : Erreur : Authentification proxy HTTP demandée\n" #: errcode.c:208 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "%s : Erreur : paiement HTTP demandé\n" #: errcode.c:211 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "%s : Erreur : requête HTTP non autorisée\n" #: errcode.c:214 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s : Erreur : document HTTP non trouvé\n" #: errcode.c:217 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s : Erreur : erreur du serveur HTTP\n" #: errcode.c:220 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "%s : Erreur : timeout du serveur HTTP\n" #: errcode.c:223 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "%s : Erreur : réponse de conflit du serveur HTTP\n" #: errcode.c:226 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s : Erreur : le document n'existe plus sur le serveur HTTP\n" #: errcode.c:229 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "%s : Erreur : proxy obligatoire pour accéder à cette adresse\n" #: errcode.c:232 #, c-format msgid "%s: ERROR: 306\n" msgstr "%si : Erreur : 306\n" #: errcode.c:235 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" "%s : Erreur : la méthode HTTP utilisée n'est pas supportée ou autorisée pour " "cette adresse\n" #: errcode.c:238 #, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "%s : Erreur : type MIME de l'adresse refusé par le client\n" #: errcode.c:241 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "%s : Erreur : \"Content-Length\" est absent de l'entête HTTP\n" #: errcode.c:244 #, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "" "%s : Erreur : les pré-conditions n'ont pas été satisfaites pour l'adresse " "demandée\n" #: errcode.c:247 #, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s : Erreur : corps de la requête trop important\n" #: errcode.c:250 #, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s : Erreur : adresse trop longue\n" #: errcode.c:253 #, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "" "%s : Erreur : ressource dans un format non supporté pour cette requête\n" #: errcode.c:256 #, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s : Erreur : intervalle du document demandé incorrect\n" #: errcode.c:259 #, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "%s : Erreur : impossible d'obtenir le résultat de la requête\n" #: errcode.c:262 #, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "%s : Erreur : méthode HTTP non implémentée sur le serveur\n" #: errcode.c:265 #, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s : Erreur : échec du passerellage pour cette adresse\n" #: errcode.c:268 #, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "%s : Erreur : service HTTP indisponible. Essayer plus tard\n" #: errcode.c:271 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "" "%s : Erreur : délai dépassé dans la communication entre la passerelle et le " "serveur distant\n" #: errcode.c:274 #, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "" "%s : Erreur : la version HTTP utilisée n'est pas supportée par le serveur\n" #: errcode.c:277 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s : Erreur : connexion au serveur Gopher impossible\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%si : Erreur : erreur Gopher inconnue\n" #: errcode.c:283 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s : Erreur : connexion au serveur HTTPS impossible\n" #: errcode.c:286 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "%s : Erreur : connexion au serveur FTPS impossible\n" #: errcode.c:289 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s : Erreur : le serveur FTP ne supporte pas les connexions SSL\n" #: errcode.c:292 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "%s : Erreur : connexion SSL impossible avec le serveur FTPS\n" #: errcode.c:295 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s : Erreur : code d'erreur inconnu : %d\n" #: file.c:35 msgid "Can't open directory\n" msgstr "Impossible de lister le répertoire\n" #: form.c:1074 form.c:1139 form.c:1296 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "Type de formulaire non supporté dans le contexte : %d\n" #: form.c:1395 msgid "Browse" msgstr "Naviguer" #: form.c:1410 msgid "URLs with forms" msgstr "Adresses contenant des formulaires" #: form.c:1419 msgid "Refresh URL list" msgstr "Rafraîchir la liste des adresses" #: form.c:1453 form.c:1454 url.c:1002 msgid "unknown" msgstr "Inconnu" #: form.c:1604 msgid "Pavuk: load form file" msgstr "Pavuk : Charger le fichier de formulaire" #: form.c:1628 msgid "Fill forms" msgstr "Remplir les formulaires" #: form.c:1635 msgid "Form number: " msgstr "Numéro de formulaire : " #: form.c:1647 msgid "Action URL: " msgstr "Adresse : " #: form.c:1656 gui_common.c:706 msgid "Request method: " msgstr "Méthode : " #: form.c:1665 gui_common.c:725 gui_tree.c:140 msgid "Request encoding: " msgstr "Encodage : " #: form.c:1674 msgid "HTML form content" msgstr "Contenu HTML du formulaire" #: form.c:1689 msgid "Load HTML file ..." msgstr "Charger le fichier HTML ..." #: form.c:1742 msgid "Pavuk: HTML forms editor" msgstr "Pavuk : éditeur de formulaires HTML" #: form.c:1764 gui_jscons.c:192 msgid "Close" msgstr "Fermer" #: ftp.c:118 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "ftp_get_response : la connexion FTP a été fermée avant la réponse\n" #: ftp.c:189 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "ftp : setsockopt TOS - échec THROUGHPUT" #: ftp.c:551 msgid "Re-using established FTP control connection\n" msgstr "Ré-utilisation d'une connexion FTP établie\n" #: ftp.c:758 http.c:1392 msgid "Size differs, regeting whole\n" msgstr "Tailles différentes, récupération complète\n" #: ftp.c:768 http.c:1278 http.c:1402 msgid "Modified from last download - regeting whole\n" msgstr "Modifié depuis le dernier téléchargement - récupération complète\n" #: ftp.c:849 msgid "" "Warning: FTP server undertand REST command, but can't handle it properly.\n" msgstr "Le serveur FTP accepte la commande REST mais ne la traite pas.\n" #: ftp.c:1094 ftp.c:1421 #, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%d%s\n" "\n" "\n" "

                          List of FTP directory %s://%s:%d/%s


                            " msgstr "" "\n" "\n" "\n" "Répertoire de %s://%s:%d%s\n" "\n" "\n" "

                            Contenu du répertoire FTP %s ://%s:%d/%s


                              " #: ftp.c:1490 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" "ERREUR: impossible d'analyser la liste FTP :\n" "\t%s\n" #: ftp.c:1683 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "Création des liens symboliques \"%s\" vers \"%s\"\n" #: gauthinfo.c:107 msgid "Pavuk: Save auth. info file" msgstr "Pavuk : Sauvegarde du fichier d'information d'authentification" #: gauthinfo.c:159 msgid "Pavuk: Load auth. info file" msgstr "Pavuk : Chargement du fichier d'information d'authentification" #: gauthinfo.c:340 msgid "Pavuk: Authorization info editor" msgstr "Pavuk : Editeur d'informations d'authentification" #: gauthinfo.c:359 msgid "Protocol" msgstr "Protocole" #: gauthinfo.c:360 gui_common.c:1819 msgid "Host" msgstr "Serveur" #: gauthinfo.c:361 msgid "User" msgstr "Utilisateur" #: gauthinfo.c:362 msgid "Password" msgstr "Mot de passe" #: gauthinfo.c:363 msgid "Base dir." msgstr "Répertoire de base" #: gauthinfo.c:364 msgid "Realm" msgstr "Zone" #: gauthinfo.c:365 msgid "Scheme" msgstr "Méthode" #: gauthinfo.c:394 msgid "Protocol: " msgstr "Protocole : " #: gauthinfo.c:419 gui_common.c:1837 gui_common.c:1898 gui_common.c:1921 #: gui_common.c:1950 msgid "Host: " msgstr "Serveur : " #: gauthinfo.c:428 msgid "User: " msgstr "Utilisateur : " #: gauthinfo.c:437 gui_common.c:2120 gui_common.c:2170 gui_common.c:2194 msgid "Password: " msgstr "Mot de passe : " #: gauthinfo.c:446 msgid "Base directory: " msgstr "Répertoire de base : " #: gauthinfo.c:455 msgid "Realm: " msgstr "Zone : " #: gauthinfo.c:473 gui_common.c:2064 msgid "User auth. scheme" msgstr "Utilisateur" #: gauthinfo.c:478 msgid "Base auth. scheme" msgstr "Basique" #: gauthinfo.c:483 gui_common.c:2066 msgid "Digest auth. scheme" msgstr "Abrégé" #: gauthinfo.c:489 gui_common.c:2068 msgid "NTLM auth. scheme" msgstr "Windows NT" #: gauthinfo.c:500 gui_addurl.c:171 gui_common.c:629 gui_common.c:778 #: gui_common.c:957 gui_common.c:1057 gui_common.c:1847 gui_common.c:2620 #: gui_common.c:2868 gui_tools.c:648 msgid "Append" msgstr "Ajouter" #: gauthinfo.c:508 gui_common.c:645 gui_common.c:785 gui_common.c:973 #: gui_common.c:1064 gui_common.c:1853 gui_common.c:2626 gui_common.c:2874 #: gui_tools.c:670 msgid "Modify" msgstr "Modifier" #: gauthinfo.c:516 gui_common.c:654 gui_common.c:982 gui_common.c:1859 #: gui_common.c:2632 gui_common.c:2880 gui_tools.c:683 msgid "Clear" msgstr "Effacer" #: gauthinfo.c:524 gui_common.c:663 gui_common.c:792 gui_common.c:991 #: gui_common.c:1071 gui_common.c:1865 gui_common.c:2638 gui_common.c:2886 #: gui_tools.c:696 msgid "Delete" msgstr "Supprimer" #: gauthinfo.c:537 gui_common.c:2963 gui_limits.c:512 gui_sched.c:131 msgid "OK" msgstr "Valider" #: gauthinfo.c:548 gui_common.c:2972 gui_limits.c:521 msgid "Apply" msgstr "Appliquer" #: gauthinfo.c:556 msgid "Load" msgstr "Charger" #: gauthinfo.c:564 msgid "Save" msgstr "Sauver" #: gauthinfo.c:575 gui_about.c:67 gui_addurl.c:180 gui_common.c:2988 #: gui_limits.c:537 gui_sched.c:140 gui_tree.c:657 gui_tree.c:797 stats.c:507 msgid "Cancel" msgstr "Annuler" #: gkeys.c:64 gkeys.c:82 gkeys.c:95 #, c-format msgid "Unable to parse: %s\n" msgstr "Impossible d'analyser : %s\n" #: gkeys.c:117 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "Impossible de créer le fichier ~/.pavuk_keys\n" #: gkeys.c:121 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# Ce fichier a été généré par %s\n" "# Attention en le modifiant !\n" "\n" #: gopher.c:65 msgid "********************* Gopher request **************\n" msgstr "********************* Requête Gopher **************\n" #: gopher.c:103 #, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%d/%s\n" "\n" "\n" "

                              Directory of gopher://%s:%d/%s



                                " msgstr "" "\n" "\n" "\n" "Répertoire gopher : //%s:%d/%s\n" "\n" "\n" "

                                Répertoire Gopher : //%s:%d/%s



                                  " #: gopher.c:151 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" "Impossible d'analyser l'entrée de répertoire Gopher : \n" "%s\n" #: gui_about.c:38 msgid "Pavuk: About" msgstr "Pavuk : A propos ..." #: gui_about.c:60 #, c-format msgid "" "Pavuk %s %s\n" " \n" "an automatic WEB file grabber\n" " \n" "By Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " msgstr "" "Pavuk %s %s \n" " \n" "Aspirateur de sites Web automatique\n" " \n" "Ecrit par Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "Adresse : http://www.idata.sk/~ondrej/pavuk/\n" " " #: gui_api.c:168 #, c-format msgid "Processed: %5d" msgstr "Traités : %5d" #: gui_api.c:170 #, c-format msgid "Queued: %5d" msgstr "En file d'attente : %5d" #: gui_api.c:172 #, c-format msgid "Failed: %4d" msgstr "Echecs : %4d" #: gui_api.c:174 #, c-format msgid "Rejected: %5d" msgstr "Rejetés : %5d" #: gui_api.c:475 gui_api.c:492 msgid "Start" msgstr "Démarrer" #: gui_api.c:616 msgid "Starting ..." msgstr "Démarrage ..." #: gui_api.c:681 msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "Valeur de timeout trop élevée\n" #: gui_addurl.c:73 gui_main.c:270 #, c-format msgid "Dropped URL : %s\n" msgstr "Adresse rejetée : %s\n" #: gui_addurl.c:128 msgid "Pavuk: Append URL" msgstr "Pavuk : Ajouter une adresse" #: gui_addurl.c:140 msgid "New URL:" msgstr "Nouvelle adresse :" #: gui_common.c:580 gui_common.c:596 gui_main.c:803 msgid "URL" msgstr "Adresse" #: gui_common.c:597 msgid "Local filename" msgstr "Fichier local" #: gui_common.c:616 msgid "Request URL: " msgstr "Adresse : " #: gui_common.c:619 msgid "Local filename: " msgstr "Fichier local : " #: gui_common.c:687 msgid "Extended informations for HTTP POST request" msgstr "Informations étendues pour la requête HTTP" #: gui_common.c:744 gui_common.c:1023 msgid "Query fields: " msgstr "Champs : " #: gui_common.c:758 gui_common.c:1037 gui_common.c:2563 msgid "Type" msgstr " Type" #: gui_common.c:759 gui_common.c:1038 msgid "Name" msgstr "Nom" #: gui_common.c:760 gui_common.c:1039 msgid "Value" msgstr "Valeur" #: gui_common.c:804 gui_common.c:1083 msgid "Type: " msgstr "Type : " #: gui_common.c:833 gui_common.c:1112 msgid "Name: " msgstr "Nom : " #: gui_common.c:835 gui_common.c:1114 msgid "Value: " msgstr "Valeur : " #: gui_common.c:865 gui_common.c:1144 msgid "Pavuk: Choose form field file" msgstr "Pavuk : Choisir le fichier de formulaire" #: gui_common.c:914 msgid "Form data" msgstr "Formulaires" #: gui_common.c:942 msgid "Matching action URL: " msgstr "Adresse : " #: gui_common.c:1206 msgid "Grabber I" msgstr "Capture I" #: gui_common.c:1214 msgid "Cache Directory: " msgstr "Répertoire cache : " #: gui_common.c:1217 msgid "Default URL prefix: " msgstr "Prefixe par défaut : " #: gui_common.c:1220 msgid "Separate info directory: " msgstr "Répertoire stockage des autres informations : " #: gui_common.c:1223 msgid "Index file name: " msgstr "Nom du fichier index : " #: gui_common.c:1226 msgid "Store file name: " msgstr "Nom du fichier de stockage : " #: gui_common.c:1229 msgid "Identity string: " msgstr "Chaîne d'identité : " #: gui_common.c:1233 msgid "Netscape browser cache directory: " msgstr "Répertoire cache de Netscape : " #: gui_common.c:1236 msgid "Mozilla browser cache directory: " msgstr "Répertoire cache de Mozilla : " #: gui_common.c:1241 msgid "Browser: " msgstr "Chaîne d'identification du navigateur : " #: gui_common.c:1245 msgid "Reminder command: " msgstr "Commande du mémento :" #: gui_common.c:1248 msgid "Post command: " msgstr "Commande de post traitement : " #: gui_common.c:1264 msgid "How many times retry on fail: " msgstr "Nombre d'essais avant abandon : " #: gui_common.c:1267 msgid "How many moved links to follow: " msgstr "Nombre de liens déplacés à suivre : " #: gui_common.c:1270 msgid "How many times to reget file: " msgstr "Nombre de tentatives de rechargement d'un fichier : " #: gui_common.c:1273 msgid "Document age before syncing with server: " msgstr "Age du document avant resynchronisation avec le serveur : " #: gui_common.c:1275 msgid " days " msgstr " jours " #: gui_common.c:1281 msgid "Read buffer size: " msgstr "Taille du cache de lecture : " #: gui_common.c:1286 msgid " kB " msgstr " Ko " #: gui_common.c:1292 msgid "Hash tables size: " msgstr "Taille des tables de hash : " #: gui_common.c:1294 msgid " entries " msgstr " entrées " #: gui_common.c:1308 msgid "Sleep time between transfers: " msgstr "Temps de pause entre transferts : " #: gui_common.c:1310 msgid " sec." msgstr " sec." #: gui_common.c:1315 msgid "randomize" msgstr "aléatoire" #: gui_common.c:1321 msgid "Rollback amount on reget: " msgstr "Volume à recharger en cas d'interruption : " #: gui_common.c:1323 msgid " bytes" msgstr " octets" #: gui_common.c:1329 msgid "Transfer quota: " msgstr "Volume maximum du transfert : " #: gui_common.c:1331 gui_common.c:1339 gui_common.c:1348 msgid " kB" msgstr " Ko" #: gui_common.c:1337 msgid "File size quota: " msgstr "Taille maximum à transférer par fichier : " #: gui_common.c:1346 msgid "Filesystem freespace quota: " msgstr "Espace minimum d'espace disque libre : " #: gui_common.c:1364 msgid "Number of downloading threads: " msgstr "Nombre de threads de téléchargement : " #: gui_common.c:1392 msgid "Grabber II" msgstr "Capture II" #: gui_common.c:1395 msgid "HTML document URL rewriting" msgstr "Réécriture des adresses dans les documents HTML" #: gui_common.c:1404 msgid "Rewrite URLs inside HTML doc." msgstr "Modifier les liens dans les pages HTML" #: gui_common.c:1412 msgid "Rewrite URLs to local when stored locally" msgstr "Modifier en locales les adresses quand elles sont stockées en local" #: gui_common.c:1418 msgid "Rewrite all suitable URLs to local" msgstr "Modifier les adresses autorisées en adresses locales" #: gui_common.c:1424 msgid "Rewrite all URLs to local immediately" msgstr "Modifier immédiatement toutes les adresses en local" #: gui_common.c:1430 msgid "Rewrite all URLs to remote immediately" msgstr "Modifier immédiatement toutes les adresses en adresses distantes" #: gui_common.c:1436 msgid "Rewrite only one currently download URL" msgstr "Modifier seulement l'adresse en cours de téléchargement" #: gui_common.c:1442 msgid "Misc settings" msgstr "Paramètres divers" #: gui_common.c:1451 msgid "Always generate unique name for document" msgstr "Toujours générer un nom unique par document" #: gui_common.c:1456 msgid "Delete FTP document after succesful download" msgstr "Supprimer le document FTP après téléchargement" #: gui_common.c:1461 msgid "Preserve document modification time" msgstr "Conserver la date de modification des fichiers" #: gui_common.c:1466 msgid "Preserve FTP document permissions" msgstr "Conserver les droits sur les fichiers FTP" #: gui_common.c:1471 msgid "Preserve FTP symbolic links paths" msgstr "Conserver les liens symboliques FTP" #: gui_common.c:1476 msgid "Retrieve FTP symbolic links like files" msgstr "Récupérer les liens symboliques FTP en tant que fichiers" #: gui_common.c:1482 msgid "Whole reget when partial not supported" msgstr "Recharger complètement si le téléchargement partiel n'est pas supporté" #: gui_common.c:1488 msgid "Use gzip encoding for transfer" msgstr "Utiliser la compression gzip pour le transfert" #: gui_common.c:1493 msgid "Remove improper documents" msgstr "Supprimer les documents non conformes" #: gui_common.c:1498 msgid "Check transferred size of document" msgstr "Vérifier la taille des documents transférés" #: gui_common.c:1503 msgid "Store directory URLs as index files" msgstr "Enregistrer les adresses de répertoires en fichiers index" #: gui_common.c:1508 msgid "Store info files with each document" msgstr "Enregistrer les fichiers d'information avec chaque document" #: gui_common.c:1513 msgid "Send self URL as Referer for starting URLs" msgstr "Pour la premiere adresse envoyer sa propre adresse comme référant" #: gui_common.c:1518 msgid "Send If-Range header field when regeting" msgstr "Lors des retransferts transférer le champ \"If-Range\"" #: gui_common.c:1523 msgid "Show time of start and end of downloading" msgstr "Afficher les heures de début et de fin des téléchargements" #: gui_common.c:1531 msgid "URL scheduling strategy: " msgstr "Stratégie de téléchargement des adresses : " #: gui_common.c:1628 msgid "Net" msgstr "Réseau" #: gui_common.c:1635 msgid "Allowed protocols" msgstr "Protocoles autorisés" #: gui_common.c:1644 msgid "HTTP" msgstr "HTTP" #: gui_common.c:1649 msgid "FTP" msgstr "FTP" #: gui_common.c:1654 msgid "Gopher" msgstr "Gopher" #: gui_common.c:1660 msgid "HTTPS" msgstr "HTTPS" #: gui_common.c:1665 msgid "FTPS" msgstr "FTPS" #: gui_common.c:1671 msgid "FTP data connection type " msgstr "Type de connexion FTP" #: gui_common.c:1680 msgid "Active" msgstr "Active" #: gui_common.c:1687 msgid "Passive" msgstr "Passive" #: gui_common.c:1694 msgid "Communication timeout: " msgstr "Timeout de communication : " #: gui_common.c:1707 msgid " min." msgstr " min." #: gui_common.c:1713 msgid "Maximal transfer rate: " msgstr "Taux de transfert maximum : " #: gui_common.c:1726 gui_common.c:1745 msgid " kB/s" msgstr " Ko/s" #: gui_common.c:1732 msgid "Minimal transfer rate: " msgstr "Taux de transfert minimum : " #: gui_common.c:1751 msgid "Local interface address: " msgstr "Adresse IP de la carte réseau : " #: gui_common.c:1762 msgid "Additional HTTP headers: " msgstr "Entêtes HTTP supplémentaires : " #: gui_common.c:1773 msgid "Additional FTP list options: " msgstr "Options de listing FTP : " #: gui_common.c:1786 msgid "Use wide listing of FTP directories" msgstr "Afficher les répertoires FTP en mode large" #: gui_common.c:1792 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "" "Corriger la détection de répertoires inexistants sur les serveurs WuFTPD" #: gui_common.c:1798 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "Utiliser le protocole HTTP/1.1" #: gui_common.c:1804 msgid "FTP login handshake rules" msgstr "Règles de négociation de connexion FTP" #: gui_common.c:1820 msgid "Login handshake" msgstr "Négociation" #: gui_common.c:1840 msgid "Handshake: " msgstr "Négociation : " #: gui_common.c:1882 msgid "Proxy" msgstr "Proxy" #: gui_common.c:1888 msgid "Gopher proxy" msgstr "Proxy Gopher" #: gui_common.c:1901 gui_common.c:1924 gui_common.c:1953 msgid "Port: " msgstr "Port : " #: gui_common.c:1905 msgid "Gopher via HTTP proxy" msgstr "Gopher par proxy HTTP" #: gui_common.c:1910 msgid "FTP proxy" msgstr "Proxy FTP" #: gui_common.c:1927 msgid "FTP via HTTP proxy" msgstr "FTP par proxy HTTP" #: gui_common.c:1933 msgid "FTP via HTTP tunneling proxy" msgstr "FTP par proxy tunnel HTTP" #: gui_common.c:1940 msgid "SSL proxy" msgstr "Proxy SSL" #: gui_common.c:1957 msgid "HTTP proxy" msgstr "Proxy HTTP" #: gui_common.c:1963 msgid "Proxy: " msgstr "Proxy : " #: gui_common.c:1968 msgid "Allow caching of documents" msgstr "Autoriser la mise en cache des documents" #: gui_common.c:2023 msgid "Languages" msgstr "Langues" #: gui_common.c:2026 msgid "Preffered languages" msgstr "Langues préférées" #: gui_common.c:2031 msgid "Language code: " msgstr "Code langue : " #: gui_common.c:2043 msgid "Preffered character sets" msgstr "Jeux de caractères préférés" #: gui_common.c:2048 msgid "Character set code: " msgstr "Jeux de caractères : " #: gui_common.c:2065 msgid "Basic auth. scheme" msgstr "Basique" #: gui_common.c:2075 msgid "Auth" msgstr "Authentification" #: gui_common.c:2082 msgid "User authentification" msgstr "Authentification utilisateur HTTP" #: gui_common.c:2091 gui_common.c:2140 msgid "Scheme: " msgstr "Méthode : " #: gui_common.c:2117 gui_common.c:2167 gui_common.c:2191 msgid "User name: " msgstr "Utilisateur : " #: gui_common.c:2123 gui_common.c:2173 msgid "NTLM domain: " msgstr "Domaine SMB Windows NT : " #: gui_common.c:2126 gui_common.c:2176 msgid "Reuse HTTP Digest access nonce" msgstr "Réutiliser l'authentification HTTP abrégée pour les demandes suivantes" #: gui_common.c:2131 msgid "HTTP proxy user authentification" msgstr "Authentification utilisateur du proxy HTTP" #: gui_common.c:2181 msgid "FTP proxy user authentification" msgstr "Authentification utilisateur du proxy FTP" #: gui_common.c:2196 msgid "Misc" msgstr "Divers" #: gui_common.c:2210 msgid "E-mail address: " msgstr "Adresse E-mail : " #: gui_common.c:2212 msgid "Send From: header with HTTP request" msgstr "Envoyer l'en-tête \"Send from:\" dans les requêtes HTTP" #: gui_common.c:2226 msgid "SSL" msgstr "SSL" #: gui_common.c:2229 msgid "SSL client certificate" msgstr "Certificat client SSL" #: gui_common.c:2238 msgid "Certificate password: " msgstr "Mot de passe certificat : " #: gui_common.c:2241 msgid "Certificate PEM file: " msgstr "Fichier certificat PEM : " #: gui_common.c:2244 msgid "Certificate key file: " msgstr "Fichier contenant la clé publique : " #: gui_common.c:2247 msgid "List of preffered ciphers: " msgstr "Liste des algorithmes de cryptage préférés : " #: gui_common.c:2253 msgid "SSL protocol version" msgstr "Version SSL" #: gui_common.c:2261 msgid "SSLv23" msgstr "SSLv23" #: gui_common.c:2267 msgid "SSLv2" msgstr "SSLv2" #: gui_common.c:2273 msgid "SSLv3" msgstr "SSLv3" #: gui_common.c:2280 msgid "TLSv1" msgstr "TLSv1" #: gui_common.c:2287 msgid "Miscelanous SSL settings" msgstr "Autres paramètres SSL" #: gui_common.c:2297 msgid "EGD daemon socket path: " msgstr "Chemin du démon EGD : " #: gui_common.c:2301 msgid "Unique ID for all SSL sessions" msgstr "ID unique pour toutes les sessions SSL" #: gui_common.c:2316 gui_main.c:1896 msgid "Log" msgstr "Log" #: gui_common.c:2323 msgid "Try to find unique name, when original log file locked" msgstr "Chercher un nom unique quand le fichier log original est verrouillé" #: gui_common.c:2328 msgid "Log file: " msgstr "Fichier de logs : " #: gui_common.c:2331 msgid "Shortlog file: " msgstr "Fichier de logs courts : " #: gui_common.c:2334 msgid "Log window length: " msgstr "Nombre maximum de lignes dans la fenêtre : " #: gui_common.c:2347 msgid "Cookies" msgstr "Cookies" #: gui_common.c:2350 msgid "Disabled cookie domains" msgstr "Désactiver les cookies des domaines" #: gui_common.c:2355 gui_limits.c:247 msgid "Domain: " msgstr "Domaine : " #: gui_common.c:2358 msgid "Cookies settings" msgstr "Paramètres des cookies" #: gui_common.c:2367 msgid "Update cookies" msgstr "Mettre à jour les cookies" #: gui_common.c:2372 msgid "Send cookies" msgstr "Envoyer les cookies" #: gui_common.c:2377 msgid "Accept cookies" msgstr "Accepter les cookies" #: gui_common.c:2382 msgid "Check cookies domain" msgstr "Vérifier le domaine des cookies" #: gui_common.c:2390 msgid "Cookies maximal number: " msgstr "Nombre maximum de cookies : " #: gui_common.c:2405 msgid "Cookie file: " msgstr "Fichier cookie : " #: gui_common.c:2491 msgid "Filename" msgstr "Fichier" #: gui_common.c:2494 msgid "Local filename conversion rules" msgstr "Règles de conversion des noms de fichiers locaux" #: gui_common.c:2502 msgid "Replace String1 with String2 in filename" msgstr "Remplacer la \"Chaîne1\" avec la \"Chaîne2\" dans les noms de fichiers" #: gui_common.c:2511 msgid "String1: " msgstr "Chaîne1 : " #: gui_common.c:2514 msgid "String2: " msgstr "Chaîne2 : " #: gui_common.c:2516 msgid "Delete characters from filename" msgstr "Effacer les jeux de caractères suivants dans les noms de fichiers" #: gui_common.c:2525 msgid "Character set: " msgstr "Jeux de caractères : " #: gui_common.c:2527 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "" "Remplacer les caractères du jeu \"Caract1\" avec les caractères du jeu " "\"Caract2\" dans les noms de fichiers" #: gui_common.c:2536 msgid "Character set1: " msgstr "Jeu \"Caract1\" : " #: gui_common.c:2539 msgid "Character set2: " msgstr "Jeu \"Caract2\" : " #: gui_common.c:2546 msgid "Base level of tree: " msgstr "Niveau de base de l'arborescence : " #: gui_common.c:2548 msgid "Local filename mapping rules" msgstr "Règles de renommage des fichiers locaux" #: gui_common.c:2564 msgid "Match pattern" msgstr "Motif de correspondance" #: gui_common.c:2565 msgid "Rule" msgstr "Règle" #: gui_common.c:2587 msgid "wildcard pattern" msgstr "Motif Jocker" #: gui_common.c:2594 msgid "RE pattern" msgstr "Motif Expression Régulière" #: gui_common.c:2606 msgid "Matching pattern: " msgstr "Motif : " #: gui_common.c:2613 msgid "Construction rule: " msgstr "Règle : " #: gui_common.c:2653 msgid "Advertisement" msgstr "Bannières publicitaires" #: gui_common.c:2660 msgid "Enable removing of advertisement banners" msgstr "Suppression des bannières publicitaires" #: gui_common.c:2665 msgid "RE for advertisement URLs: " msgstr "Expression Régulière : " #: gui_common.c:2777 msgid "Javascript" msgstr "JavaScript" #: gui_common.c:2785 msgid "Processing of javascript" msgstr "Traitement du JavaScript" #: gui_common.c:2789 msgid "Javascript patterns" msgstr "Motifs JavaScript" #: gui_common.c:2794 msgid "RE for Javascript patterns: " msgstr "Expression Régulière : " #: gui_common.c:2800 msgid "Javascript patterns with transform rules" msgstr "Motifs JavaScript avec les règles de transformation" #: gui_common.c:2815 msgid "Pattern" msgstr "Motif" #: gui_common.c:2816 msgid "Transform rule" msgstr "Règle" #: gui_common.c:2817 msgid "HTML tag" msgstr "Balise HTML" #: gui_common.c:2818 msgid "HTML tag attribute" msgstr "Attribut de balise HTML" #: gui_common.c:2819 msgid "Rewrite" msgstr "Réécrire" #: gui_common.c:2840 msgid "Pattern: " msgstr "Motif : " #: gui_common.c:2843 msgid "Tranform rule: " msgstr "Règle : " #: gui_common.c:2852 msgid "HTML tag: " msgstr "Balise HTML : " #: gui_common.c:2856 msgid "HTML tag attribute: " msgstr "Attribut de balise : " #: gui_common.c:2858 msgid "Rewrite URL part in HTML document" msgstr "Modifier l'adresse dans la page HTML" #: gui_common.c:2913 msgid "Pavuk: Common config" msgstr "Pavuk : Configuration" #: gui_common.c:2980 msgid "Limitations ..." msgstr "Limitations ..." #: gui_jscons.c:150 msgid "Pavuk: JavaScript console" msgstr "Pavuk : Console JavaScript" #: gui_jscons.c:169 msgid "Reload script file" msgstr "Rechargement du script" #: gui_jscons.c:174 msgid "Save script to file" msgstr "Enregistrer le script dans le fichier" #: gui_jscons.c:181 msgid "Load script to JavaScript runtime" msgstr "Charger le script dans le runtime JavaScript" #: gui_jscons.c:186 msgid "Restart JavaScript runtime" msgstr "Redémarrer le runtime JavaScript" #: gui_jscons.c:215 msgid "Prompt: " msgstr "Invite : " #: gui_jscons.c:228 msgid "JavaScript source file: " msgstr "Fichier source JavaScript : " #: gui_limits.c:44 msgid "Tree" msgstr "Arborescence" #: gui_limits.c:56 msgid "Download cgi-generated pages" msgstr "Télécharger les pages générées par des scripts CGI" #: gui_limits.c:62 msgid "Recurse through FTP directory" msgstr "Traitement récursif des répertoires FTP" #: gui_limits.c:68 msgid "Allow \"robots.txt\"" msgstr "Autoriser \"robots.txt\"" #: gui_limits.c:74 msgid "Process HTML files downloaded over FTP" msgstr "Traiter les fichiers HTML téléchargés par FTP" #: gui_limits.c:80 msgid "Don't leave starting site" msgstr "Ne pas quitter le site de départ" #: gui_limits.c:86 msgid "Don't leave starting directory" msgstr "Ne pas quitter le répertoire de départ" #: gui_limits.c:92 msgid "Don't leave site enter directory" msgstr "Ne pas quitter le répertoire d'entrée dans le site" #: gui_limits.c:98 msgid "Download just single page" msgstr "Télécharger une seule page" #: gui_limits.c:104 msgid "Apply limiting options on inline objects" msgstr "Appliquer les options de limitations aux objets des pages" #: gui_limits.c:119 msgid "Max. count of documents: " msgstr "Nombre maximum de documents traités : " #: gui_limits.c:122 msgid "Max. depth of tree: " msgstr "Nombre max. de sous-répertoires dans l'arborescence : " #: gui_limits.c:125 msgid "Max. levels to leave from starting site: " msgstr "Nombre max. de niveaux de documents à partir du site de départ : " #: gui_limits.c:128 msgid "Max. document size: " msgstr "Taille maximale des documents (octets) : " #: gui_limits.c:131 msgid "Min. document size: " msgstr "Taille minimale des documents (octets) : " #: gui_limits.c:134 msgid "Max. site levels to leave from starting site: " msgstr "Nombre max. de niveaux de sites à partir du site du départ : " #: gui_limits.c:145 msgid "Working subdirectory :" msgstr "Sous-répertoire de travail : " #: gui_limits.c:148 msgid "User condition script: " msgstr "Script pour le traitement des adresses : " #: gui_limits.c:151 msgid "Follow command: " msgstr "Script pour le suivi des adresses : " #: gui_limits.c:162 msgid "Patterns" msgstr "Motifs" #: gui_limits.c:165 msgid "Wildcard patterns" msgstr "Jockers" #: gui_limits.c:174 gui_limits.c:195 msgid "Documents matching pattern: " msgstr "Motif pour les documents : " #: gui_limits.c:177 gui_limits.c:183 gui_limits.c:198 gui_limits.c:204 #: gui_limits.c:266 msgid "skip: " msgstr "Ignorer : " #: gui_limits.c:180 gui_limits.c:201 msgid "URL matching pattern: " msgstr "Motif pour les adresses : " #: gui_limits.c:186 msgid "RE patterns" msgstr "Expressions Régulières" #: gui_limits.c:215 msgid "Hosts" msgstr "Serveurs" #: gui_limits.c:224 msgid "Allow / Disallow sites" msgstr "Sites Autorisés / Interdits" #: gui_limits.c:230 msgid "Site: " msgstr "Site : " #: gui_limits.c:241 msgid "Allow / Disallow domains" msgstr "Domaines Autorisés / Interdits" #: gui_limits.c:253 msgid "IP address RE patterns" msgstr "Motifs Expressions Régulières pour les adresses IP" #: gui_limits.c:263 msgid "Server IP address matching pattern: " msgstr "Motif de correspondance pour les adresses IP des serveurs : " #: gui_limits.c:269 msgid "Server ports" msgstr "Ports du serveur" #: gui_limits.c:279 msgid "Allow/denny" msgstr "Autorisés / Interdits" #: gui_limits.c:284 msgid "Ports: " msgstr "Ports : " #: gui_limits.c:295 msgid "Documents" msgstr "Documents" #: gui_limits.c:304 msgid "Allow / Disallow suffix" msgstr "Suffixes Autorisés / Interdits" #: gui_limits.c:310 msgid "Suffix: " msgstr "Suffixe : " #: gui_limits.c:321 msgid "Allow / Disallow prefix" msgstr "Préfixes Autorisés / Interdits" #: gui_limits.c:327 msgid "Prefix: " msgstr "Préfixe : " #: gui_limits.c:341 gui_limits.c:353 msgid "MIME types" msgstr "Types MIME" #: gui_limits.c:349 msgid "Allow / Disallow MIME type" msgstr "Types MIME Autorisés / Interdits" #: gui_limits.c:358 msgid "MIME type: " msgstr "Type MIME : " #: gui_limits.c:371 msgid "Time" msgstr "Temps" #: gui_limits.c:377 msgid "Lower document time limit" msgstr "Date la plus ancienne du document" #: gui_limits.c:387 msgid "Check if doc. time newer than this" msgstr "Vérifier si la date du document est ultérieure à celle-ci" #: gui_limits.c:391 msgid "Upper document time limit" msgstr "Date la plus récente du document" #: gui_limits.c:401 msgid "Check if doc. time older than this" msgstr "Vérifier si la date du document est antérieure à celle-ci" #: gui_limits.c:410 msgid "Maximal allowed time of downloading: " msgstr "Temps maximal autorisé pour le téléchargement : " #: gui_limits.c:413 msgid " min" msgstr " min" #: gui_limits.c:426 msgid "Select allowed HTML tags and attributes" msgstr "Sélectionner les balises et attributs HTML autorisés" #: gui_limits.c:428 msgid "HTML" msgstr "HTML" #: gui_limits.c:443 #, c-format msgid "%s of %s" msgstr "%s de %s" #: gui_limits.c:476 msgid "Pavuk: Limits config" msgstr "Pavuk : Limitations" #: gui_limits.c:529 msgid "Common ..." msgstr "Configuration ..." #: gui_main.c:433 msgid "Unknown window to popup" msgstr "Fenêtre inconnue" #: gui_main.c:498 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "Adresse prise dans le presse-papier : %s\n" #: gui_main.c:542 #, c-format msgid "Fetched URL from browser : %s\n" msgstr "Adresse prise du navigateur : %s\n" #: gui_main.c:788 msgid "Both" msgstr "Icones et texte" #: gui_main.c:789 msgid "Icons only" msgstr "Icones" #: gui_main.c:790 msgid "Text only" msgstr "Texte" #: gui_main.c:802 msgid "Nr." msgstr "N°." #: gui_main.c:804 msgid "Status" msgstr "Etat" #: gui_main.c:805 msgid "Size" msgstr "Taille" #: gui_main.c:806 msgid "Transfer rate" msgstr "Taux de Transfert" #: gui_main.c:807 msgid "Elapsed time" msgstr "Temps écoulé" #: gui_main.c:808 msgid "Remaining time" msgstr "Temps restant" #: gui_main.c:956 msgid "Open _URL ..." msgstr "Ouvrir l'adresse ..." #: gui_main.c:969 msgid "Append URL ..." msgstr "Ajouter l'adresse ..." #: gui_main.c:978 msgid "Fetch URL from Clipboard" msgstr "Prendre l'adresse du presse papier" #: gui_main.c:996 msgid "Fetch URL from browser" msgstr "Prendre l'adresse du navigateur" #: gui_main.c:1006 msgid "Load scenario ..." msgstr "Charger un scénario ..." #: gui_main.c:1015 msgid "Add scenario ..." msgstr "Ajouter le scénario ..." #: gui_main.c:1024 msgid "Save scenario ..." msgstr "Enregistrer le scénario ..." #: gui_main.c:1033 msgid "Save settings to ~/.pavukrc" msgstr "Enregistrer la configuration dans ~/.pavukrc" #: gui_main.c:1046 msgid "Schedule ..." msgstr "Planifier ..." #: gui_main.c:1055 msgid "Auth. info editor ..." msgstr "Editeur d'informations d'authentification ..." #: gui_main.c:1068 msgid "E_xit" msgstr "Quitter" #: gui_main.c:1077 msgid "_File" msgstr "_Fichier" #: gui_main.c:1093 msgid "Document _Tree ..." msgstr "Arborescence ..." #: gui_main.c:1102 msgid "Status page ..." msgstr "Page de status ..." #: gui_main.c:1110 msgid "HTML forms editor ..." msgstr "Editeur de formulaires HTML ..." #: gui_main.c:1119 msgid "Javascript console ..." msgstr "Console JavaScript ..." #: gui_main.c:1132 msgid "Clear log window" msgstr "Effacer la fenêtre de Log" #: gui_main.c:1141 msgid "_View" msgstr "_Vue" #: gui_main.c:1159 msgid "normal recurse" msgstr "Récupération normale" #: gui_main.c:1169 msgid "synchronize" msgstr "Synchronisation" #: gui_main.c:1180 msgid "single page" msgstr "Une seule page" #: gui_main.c:1190 msgid "update local links" msgstr "Mettre à jour les liens locaux" #: gui_main.c:1200 msgid "resume files" msgstr "Reprendre les fichiers" #: gui_main.c:1210 msgid "unlimited reget" msgstr "Tentatives illimitées" #: gui_main.c:1220 msgid "transfer but don't store" msgstr "Transférer sans enregistrer" #: gui_main.c:1230 msgid "reminder" msgstr "Mémento" #: gui_main.c:1240 msgid "list ftp directory" msgstr "Lister les répertoires FTP" #: gui_main.c:1250 msgid "_Mode" msgstr "_Mode" #: gui_main.c:1268 msgid "C_ommon ..." msgstr "Configuration ..." #: gui_main.c:1277 msgid "_Limitations ..." msgstr "Limitations ..." #: gui_main.c:1286 msgid "Reset configuration" msgstr "Effacer la configuration ..." #: gui_main.c:1301 msgid "Toolbar" msgstr "Barre d'outils" #: gui_main.c:1309 msgid "Toggle toolbar" msgstr "Affichage de la barre d'outils" #: gui_main.c:1364 msgid "Progressbar" msgstr "Barre de progression" #: gui_main.c:1396 msgid "Language" msgstr "Langue" #: gui_main.c:1446 msgid "Debug level" msgstr "Niveau de déboguage" #: gui_main.c:1469 msgid "All" msgstr "Toutes" #: gui_main.c:1476 msgid "None" msgstr "Aucune" #: gui_main.c:1483 msgid "Debug" msgstr "Déboguage" #: gui_main.c:1499 msgid "Allow tooltips" msgstr "Activer les info-bulles" #: gui_main.c:1509 msgid "Log window autoscroll" msgstr "Défilement auto de la fenêtre de Log" #: gui_main.c:1518 msgid "Use preferences" msgstr "Utiliser les préférences" #: gui_main.c:1527 msgid "Quiet" msgstr "Muet" #: gui_main.c:1539 msgid "Immediate messages" msgstr "Messages immédiats" #: gui_main.c:1551 msgid "_Config" msgstr "_Configuration" #: gui_main.c:1567 msgid "_Restart" msgstr "_Redémarrer" #: gui_main.c:1577 msgid "Co_ntinue" msgstr "Poursuivre" #: gui_main.c:1587 msgid "Sto_p" msgstr "Arrêter" #: gui_main.c:1597 msgid "_Break" msgstr "Pause" #: gui_main.c:1607 msgid "_Action" msgstr "_Action" #: gui_main.c:1627 msgid "About ..." msgstr "A propos ..." #: gui_main.c:1636 msgid "_Help" msgstr "_Aide" #: gui_main.c:1667 msgid "Config" msgstr "Configuration" #: gui_main.c:1668 msgid "Popup config window" msgstr "Configuration" #: gui_main.c:1672 msgid "Limits" msgstr "Limitations" #: gui_main.c:1673 msgid "Popup limits window" msgstr "Limitations" #: gui_main.c:1679 msgid "Go bg" msgstr "Arrière plan" #: gui_main.c:1680 msgid "Destroy window as soon as posible and continue on terminal" msgstr "Détruire la fenêtre et continuer en mode terminal" #: gui_main.c:1684 gui_main.c:1757 msgid "Restart" msgstr "Redémarrer" #: gui_main.c:1685 msgid "Start working on currently set starting URLs" msgstr "Démarrer le téléchargement sur les adresses sélectionnées" #: gui_main.c:1689 gui_main.c:1762 msgid "Continue" msgstr "Poursuivre" #: gui_main.c:1690 msgid "Continue after stop or break" msgstr "Poursuivre après un arrêt ou une pause" #: gui_main.c:1696 gui_main.c:1767 msgid "Stop" msgstr "Arrêter" #: gui_main.c:1697 msgid "Finish this transfer and stop" msgstr "Terminer le transfert en cours et arrêter" #: gui_main.c:1701 gui_main.c:1772 msgid "Break" msgstr "Pause" #: gui_main.c:1702 msgid "Break transfer and stop" msgstr "Faire une pause dans le transfert et arrêter" #: gui_main.c:1708 msgid "Exit" msgstr "Quitter" #: gui_main.c:1709 msgid "Immediately quit the program" msgstr "Quitter immédiatement le programme" #: gui_main.c:1777 msgid "Show whole main window" msgstr "Voir la fenêtre principale" #: gui_main.c:1782 msgid "Quit" msgstr "Quitter" #: gui_main.c:1861 msgid "Pavuk: save log" msgstr "Pavuk : Sauver le fichier de logs" #: gui_main.c:1924 msgid "Select all" msgstr "Sélectionner tout" #: gui_main.c:1932 msgid "Clear selection" msgstr "Effacer la sélection" #: gui_main.c:1940 msgid "Copy selection" msgstr "Copier la sélection" #: gui_main.c:1952 msgid "Save log ..." msgstr "Enregistrer les logs ..." #: gui_main.c:1959 msgid "Clear log" msgstr "Effacer les logs" #: gui_main.c:2046 gui_main.c:2164 msgid "Processed: " msgstr "Traités : " #: gui_main.c:2055 gui_main.c:2173 msgid "Failed: " msgstr "Echecs : " #: gui_main.c:2064 gui_main.c:2182 msgid "Queued: " msgstr "En file d'attente : " #: gui_main.c:2073 gui_main.c:2191 msgid "Rejected: " msgstr "Rejetés : " #: gui_main.c:2123 msgid "S: " msgstr "E : " #: gui_main.c:2132 msgid "R: " msgstr "R : " #: gui_main.c:2141 msgid "ET: " msgstr "TE : " #: gui_main.c:2150 msgid "RT: " msgstr "TR : " #: gui_scenario.c:46 msgid "Pavuk: Scenario saver" msgstr "Pavuk : Enregistrement d'un scénario" #: gui_scenario.c:139 msgid "Pavuk: Scenario loader" msgstr "Pavuk : Chargement d'un scénario" #: gui_scenario.c:231 msgid "Pavuk: Scenario add" msgstr "Pavuk : Ajout d'un scénario" #: gui_sched.c:55 pavuk.c:495 msgid "Error scheduling\n" msgstr "Erreur dans la planification\n" #: gui_sched.c:78 msgid "Pavuk: Scheduler" msgstr "Pavuk : Planification" #: gui_sched.c:97 msgid "Scheduling command: " msgstr "Commande de planification : " #: gui_sched.c:107 msgid "Reschedule after " msgstr "Replanifier après : " #: gui_sched.c:117 msgid " hours" msgstr " Heures" #: gui_tools.c:28 msgid "January" msgstr "Janvier" #: gui_tools.c:29 msgid "February" msgstr "Février" #: gui_tools.c:30 msgid "March" msgstr "Mars" #: gui_tools.c:31 msgid "April" msgstr "Avril" #: gui_tools.c:32 msgid "May" msgstr "Mai" #: gui_tools.c:33 msgid "June" msgstr "Juin" #: gui_tools.c:34 msgid "July" msgstr "Juillet" #: gui_tools.c:35 msgid "August" msgstr "Août" #: gui_tools.c:36 msgid "September" msgstr "Septembre" #: gui_tools.c:37 msgid "October" msgstr "Octobre" #: gui_tools.c:38 msgid "November" msgstr "Novembre" #: gui_tools.c:39 msgid "December" msgstr "Décembre" #: gui_tools.c:43 msgid "Sun" msgstr "Dim" #: gui_tools.c:44 msgid "Mon" msgstr "Lun" #: gui_tools.c:45 msgid "Tue" msgstr "Mar" #: gui_tools.c:46 msgid "Wed" msgstr "Mer" #: gui_tools.c:47 msgid "Thu" msgstr "Jeu" #: gui_tools.c:48 msgid "Fri" msgstr "Ven" #: gui_tools.c:49 msgid "Sat" msgstr "Sam" #: gui_tools.c:171 msgid "Time: " msgstr "Heure : " #: gui_tools.c:180 msgid " : " msgstr " : " #: gui_tools.c:360 #, c-format msgid "Pavuk: select %s" msgstr "Pavuk : Sélectionner %s" #: gui_tools.c:361 msgid "file" msgstr "fichier" #: gui_tools.c:459 msgid "Browse ..." msgstr "Parcourir ..." #: gui_tree.c:117 #, c-format msgid "URL: %s\n" msgstr "Adresse : %s\n" #: gui_tree.c:130 gui_tree.c:136 gui_tree.c:175 msgid "Request type: " msgstr "Type de requête : " #: gui_tree.c:151 msgid "Query values:\n" msgstr "Valeurs de la requête : \n" #: gui_tree.c:181 msgid "Status: " msgstr "Status : " #: gui_tree.c:187 msgid "not processed yet\n" msgstr "Pas encore traités\n" #: gui_tree.c:193 msgid "loaded from NS cache\n" msgstr "Chargement à partir du cache Netscape\n" #: gui_tree.c:199 msgid "loaded from local URL tree\n" msgstr "Chargement à partir de l'arborescence locale des adresses\n" #: gui_tree.c:205 msgid "moved to another URL\n" msgstr "Déplacé vers une nouvelle adresse\n" #: gui_tree.c:211 msgid "URL not found on remote server\n" msgstr "Adresse non trouvée sur le serveur distant\n" #: gui_tree.c:217 msgid "truncated\n" msgstr "Corrompu\n" #: gui_tree.c:223 msgid "downloaded OK\n" msgstr "Téléchargement réussi\n" #: gui_tree.c:229 msgid "rejected by rules\n" msgstr "Eliminé par les règles\n" #: gui_tree.c:235 msgid "disabled by user\n" msgstr "Désactivé par l'utilisateur\n" #: gui_tree.c:241 msgid "probably recoverable error\n" msgstr "Erreur probablement non recupérable\n" #: gui_tree.c:247 msgid "unrecoverable error\n" msgstr "Erreur non recupérable\n" #: gui_tree.c:253 msgid "unknown\n" msgstr "Inconnu\n" #: gui_tree.c:263 #, c-format msgid "Moved to URL: %s\n" msgstr "Déplacé vers l'adresse : %s\n" #: gui_tree.c:273 #, c-format msgid "Type: %s\n" msgstr "Type : %s\n" #: gui_tree.c:275 msgid "Type: unknown\n" msgstr "Type inconnu\n" #: gui_tree.c:281 #, c-format msgid "Size: %d\n" msgstr "Taille : %d\n" #: gui_tree.c:290 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "Date de modification : %a, %d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:300 #, c-format msgid "Local filename: %s\n" msgstr "Fichier local : %s\n" #: gui_tree.c:311 msgid "Parent URLs:\n" msgstr "Adresses mères : \n" #: gui_tree.c:612 msgid "Pavuk: Store tree" msgstr "Pavuk : Arborescence de stockage" #: gui_tree.c:656 gui_tree.c:684 msgid "Pavuk: URL tree preview" msgstr "Pavuk : Prévisualisation de l'arborescence" #: gui_tree.c:659 gui_tree.c:788 msgid "Store tree ..." msgstr "Enregistrer l'arborescence ..." #: gui_tree.c:660 gui_tree.c:704 msgid "Automaticaly watch last processed URLs" msgstr "Surveille automatiquement les dernières adresses traitées" #: gui_tree.c:662 gui_tree.c:821 msgid "Properties" msgstr "Propriétés" #: gui_tree.c:663 gui_tree.c:829 msgid "Launch browser" msgstr "Lancer le navigateur" #: gui_tree.c:664 gui_tree.c:837 msgid "Disable URL" msgstr "Désactiver l'adresse" #: gui_tree.c:665 gui_tree.c:845 msgid "Enable URL" msgstr "Autoriser l'adresse" #: gui_tree.c:666 gui_tree.c:853 msgid "Download URL" msgstr "Télécharger l'adresse" #: gui_tree.c:670 gui_tree.c:724 msgid "URL tree" msgstr "Arborescence des adresses" #: html.c:253 htmlparser.c:281 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "Adresse de base non supportée - %s\n" #: html.c:522 msgid "Can't work on directory\n" msgstr "Impossible d'utiliser le répertoire\n" #: html.c:548 html.c:552 msgid "rewrite parent" msgstr "réécrit l'adresse mère" #: http.c:366 msgid "****************** Proxy connect request *****************\n" msgstr "****************** Demande de connexion Proxy *****************\n" #: http.c:413 msgid "***************** Proxy connect response *****************\n" msgstr "***************** Réponse de connexion du Proxy *****************\n" #: http.c:469 msgid "Sending request ..." msgstr "Envoi de la requête ..." #: http.c:716 msgid "************ Client HTTP MIME header ***************\n" msgstr "************ En-tête MIME du client HTTP ***************\n" #: http.c:733 msgid "Sending data ..." msgstr "Envoi des données ..." #: http.c:734 msgid "************ HTTP request data ***************\n" msgstr "********************* Données de la requête HTTP **************\n" #: http.c:744 msgid "Waiting for response ..." msgstr "Attente de la réponse ..." #: http.c:759 msgid "Error reading HTTP 1xx class response\n" msgstr "Erreur de lecture de la réponse HTTP de classe 1xx\n" #: http.c:764 msgid "***************** class 1xx HTTP response ****************\n" msgstr "***************** Réponse HTTP de classe 1xx *****************\n" #: http.c:875 msgid "Connecting ..." msgstr "Connexion ..." #: http.c:1159 msgid "*********** HTTP Server response MIME header **********\n" msgstr "********** En-tête MIME de la réponse du serveur HTTP **********\n" #: http.c:1262 msgid "Regeting whole file\n" msgstr "Reprise complète du fichier\n" #: http.c:1312 #, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "Réponse inattendue \"%d %s\" lors de la reprise du téléchargement !\n" #: http_proxy.c:150 #, c-format msgid "Checking HTTP proxy server %s:%d\n" msgstr "Vérification du serveur proxy HTTP %s:%d\n" #: http_proxy.c:162 http_proxy.c:174 http_proxy.c:181 http_proxy.c:190 msgid "Failed to check proxy !\n" msgstr "Impossible de vérifier le proxy !\n" #: http_proxy.c:196 #, c-format msgid "Proxy %s:%d is HTTP/%d.%d proxy\n" msgstr "Le proxy %s:%d est le proxy de HTTP/%d.%d\n" #: jsbind.c:76 msgid "bad parameter" msgstr "Paramètre incorrect" #: jsbind.c:529 msgid "not enough parameters" msgstr "Pas assez de paramètres" #: jsbind.c:553 msgid "unknown limiting condition" msgstr "Condition de limitation inconnue" #: lfname.c:479 lfname.c:491 lfname.c:500 lfname.c:513 lfname.c:536 #: lfname.c:645 lfname.c:658 lfname.c:670 lfname.c:685 lfname.c:698 re.c:51 #: re.c:61 re.c:68 re.c:80 re.c:95 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "Erreur de compilation de l'expression régulière : %s\n" #: lfname.c:553 lfname.c:617 lfname.c:939 lfname.c:1057 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "Erreur d'analyse LSP : token erroné à - %s\n" #: lfname.c:950 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "Erreur d'analyse LSP : valeur numérique erronée à - %s\n" #: lfname.c:964 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "Erreur d'analyse LSP : macro erronée à - %s\n" #: lfname.c:992 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "Erreur d'analyse LSP : chaîne non terminée à - %s\n" #: lfname.c:1013 lfname.c:1029 lfname.c:1047 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "Erreur d'analyse LSP : type de paramètre erroné à - %s\n" #: log.c:203 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "Fin du log : %H:%M:%S %d.%m.%Y\n" #: log.c:224 msgid "Unable to open log file - disabling logging\n" msgstr "Impossible d'ouvrir le fichier log - log désactivé\n" #: log.c:232 msgid "Log file is locked by another process - " msgstr "Le fichier log est bloqué par un autre process - " #: log.c:236 msgid "generating new log filename\n" msgstr "Création d'un nouveau nom de fichier log\n" #: log.c:241 msgid "disabling logging\n" msgstr "Désactivation du log\n" #: log.c:263 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "Début du log : %H:%M:%S %d.%m.%Y\n" #: mozcache.c:186 #, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "Impossible d'ouvrir l'index du cache Mozilla - %s\n" #: myssl.c:49 msgid "Failed obtaining entropy pathname\n" msgstr "Impossible d'obtenir le chemin entropique\n" #: myssl.c:59 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "Impossible d'initialiser OpenSSL via le démon EGD\n" #: myssl.c:70 msgid "Seeding entropy pool INSECURELY!\n" msgstr "Méthode non sécurisée !\n" #: myssl.c:157 msgid "Unable to set certificate file (wrong password?)\n" msgstr "" "Impossible de positionner le fichier de certificat (mot de passe incorrect " "?)\n" #: myssl.c:167 msgid "Unable to set public key file\n" msgstr "Impossible de positionner le fichier de clef publique\n" #: myssl.c:183 msgid "Private key does not match the certificate public key\n" msgstr "La clef privée ne correspond pas à la clef publique du certificat\n" #: myssl.c:231 #, c-format msgid "SSL connection is using %s\n" msgstr "La connexion SSL en cours utilise %s\n" #: myssl.c:234 msgid "Server certificate:\n" msgstr "Certificat du serveur :\n" #: myssl.c:238 #, c-format msgid "\t subject: %s\n" msgstr "\t sujet : %s\n" #: myssl.c:243 #, c-format msgid "\t issuer: %s\n" msgstr "\t émetteur : %s\n" #: nscache.c:106 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "Impossible d'ouvrir l'index du cache Netscape - %s\n" #: ntlm_auth.c:416 msgid "Trying to do NTLM authorization\n" msgstr "Demande d'authentification Windows NT\n" #: ntlm_auth.c:425 ntlm_auth.c:506 ntlm_auth.c:587 ntlm_auth.c:667 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "" "L'authentification Windows NT est supportée uniquement pour les connexions " "permanentes ! \n" #: ntlm_auth.c:448 ntlm_auth.c:609 msgid "Not enough data for NTLM authorization!\n" msgstr "Pas assez de données pour l'authentification Windows NT !\n" #: ntlm_auth.c:449 ntlm_auth.c:610 msgid "Missing:\n" msgstr "Manque : \n" #: ntlm_auth.c:450 ntlm_auth.c:611 msgid " domain\n" msgstr " domaine\n" #: ntlm_auth.c:451 ntlm_auth.c:612 msgid " username\n" msgstr " utilisateur\n" #: ntlm_auth.c:452 ntlm_auth.c:613 msgid " password\n" msgstr " mot de passe\n" #: ntlm_auth.c:453 ntlm_auth.c:614 msgid " local hostname\n" msgstr " nom de l'hôte local\n" #: ntlm_auth.c:489 ntlm_auth.c:497 ntlm_auth.c:522 ntlm_auth.c:650 #: ntlm_auth.c:658 ntlm_auth.c:683 msgid "Got unexpected response\n" msgstr "Réponse inattendue\n" #: ntlm_auth.c:532 msgid "Failed NTLM nonce negotiation\n" msgstr "Echec de la négociation Windows NT\n" #: ntlm_auth.c:574 msgid "Trying to do proxy NTLM authorization\n" msgstr "Essai d'authentification Windows NT par proxy\n" #: ntlm_auth.c:693 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "Echec de la négociation Windows NT par proxy\n" #: options.h:193 msgid "\t-v - print version number\n" msgstr "\t-v - Afficher le numéro de version\n" #: options.h:204 msgid "\t-h - help\n" msgstr "\t-h - Aide\n" #: options.h:218 msgid "\t-X - start GUI interface\n" msgstr "\t-X - Démarrer avec l'interface graphique\n" #: options.h:249 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" "\t-runX - Après le démarrage de l'interface graphique\n" "\t commencer immédiatement le téléchargement\n" "\t des adresses sélectionnées\n" #: options.h:265 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "" "\t-prefs/-noprefs - Chargement des préférences à partir du fichier " "~/.pavuk_prefs\n" #: options.h:494 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" "\t-progress/-noprogress\n" "\t - Afficher la progression du transfert dans le mode " "console\n" #: options.h:517 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "\t-lmax $nr - Profondeur maximum de l'arbre\n" #: options.h:528 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "\t-dmax $nr - Nombre maximum de documents téléchargés\n" #: options.h:539 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "" "\t-sleep $nr - Pause de $nr secondes entre chaque transfert,\n" "\t 0 seconde par défaut\n" #: options.h:551 msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "" "\t-rsleep/-norsleep - Pause aléatoire entre les transferts\n" "\t de 0 seconde à la valeur de -sleep\n" #: options.h:574 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "\t-retry $nr - Nombre d'essais en cas d'échec\n" #: options.h:585 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "" "\t-nregets $nr - Nombre maximum de récupération d'un fichier, par " "défaut 2\n" #: options.h:596 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" "\t-nredirs $nr - Nombre maximum de redirections HTTP, 5 par défaut\n" #: options.h:607 msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" "\t-timeout $nr - Timeout sur communications réseau (min).\n" "\t 0 == pas de timeout, defaut = 0\n" #: options.h:619 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" "\t-rollback $nr - Nombre d'octets à rejeter (comptés à partir de la fin " "du fichier)\n" "\t lors d'un rechargement, par défaut 0\n" #: options.h:632 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" "\t-ddays $nr - Nombre de jours depuis le dernier accès quand le " "document\n" "\t est vérifié en mode synchronisation\n" #: options.h:644 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" "\t-nocache/-cache - Désactive le cache des documents HTTP (sur le cache " "proxy)\n" #: options.h:666 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "\t-noRobots/-Robots - Prendre en compte le fichier \"robots.txt\" ?\n" #: options.h:688 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "\t-noFTP/-FTP - Ne pas télécharger les fichiers FTP\n" #: options.h:710 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "\t-noHTTP/-HTTP - Ne pas télécharger les fichiers HTTP\n" #: options.h:735 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "\t-noSSL/-SSL - Ne pas télécharger les fichiers SSL (HTTPS)\n" #: options.h:765 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "\t-noFTPS/-FTPS - Ne pas télécharger les fichiers FTPS\n" #: options.h:792 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "\t-noGopher/-Gopher - Télécharger les fichiers Gopher ?\n" #: options.h:814 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "\t-noCGI/-CGI - Télécharger les pages CGI ?\n" #: options.h:836 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "\t-noEnc/-Enc - Autoriser le transfert des fichiers encodés ?\n" #: options.h:858 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" "\t-noRelocate/-Relocate\n" "\t - Ne pas re-écrire les liens\n" #: options.h:881 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" "\t-FTPhtml/-noFTPhtml\n" "\t - Traiter les fichiers HTML téléchargés par FTP\n" #: options.h:904 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" "\t-FTPlist/-noFTPlist\n" "\t - Affichage complet du listing du répertoire FTP\n" #: options.h:927 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "\t-FTPdir/-noFTPdir - Traitement récursif des répertoires FTP\n" #: options.h:949 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" "\t-store_index/-nostore_index\n" "\t - Enregistrer les adresses de répertoires comme des " "fichiers index\n" #: options.h:972 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" "\t-force_reget/-noforce_reget\n" "\t - Forcer le rechargement du fichier complet quand\n" "\t le serveur ne supporte pas les téléchargements " "partiels\n" #: options.h:1000 msgid "\t-debug - turn on debug mode\n" msgstr "\t-debug - Activation du déboguage\n" #: options.h:1030 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "" "\t-debug_level $l - Niveau de déboguage, voir le manuel pour la " "description $l\n" #: options.h:1042 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "" "\t-asite $list - Liste des sites autorisés séparés par des virgules\n" #: options.h:1053 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "" "\t-dsite $list - Liste des sites interdits séparés par des virgules\n" #: options.h:1064 msgid "\t-adomain $list - list of allowed domains\n" msgstr "\t-adomain $list - Liste des domaines autorisés\n" #: options.h:1075 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "\t-ddomain $list - Liste des domaines interdits\n" #: options.h:1086 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "" "\t-aprefix $list - Liste des préfixes de fichiers et répertoires " "autorisés\n" #: options.h:1097 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "" "\t-dprefix $list - Liste de préfixes de fichiers et de répertoires " "interdits\n" #: options.h:1108 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "\t-asfx $list - Liste des suffixes autorisés\n" #: options.h:1119 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "\t-dsfx $list - Lites des suffixes interdits\n" #: options.h:1130 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "\t-amimet $list - Liste des types MIME autorisés\n" #: options.h:1141 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "\t-dmimet $list - Liste des types MIME interdits\n" #: options.h:1152 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "" "\t-alang $list - Liste des langues préférées (en HTTP uniquement)\n" #: options.h:1163 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "" "\t-acharset $list - Liste des jeux de caractères préférés (en HTTP " "uniquement)\n" #: options.h:1174 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" "\t-scndir $dir - Répertoire de stockage des scénarios (fichiers de\n" "\t configuration)\n" #: options.h:1186 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "" "\t-cdir $dir - Répertoire pour l'enregistrement des documents\n" #: options.h:1197 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "\t-subdir $dir - Sous-répertoire de cdir sur lequel travailler\n" #: options.h:1208 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" "\t-scenario $str - Nom du scénario à charger et / ou executer\n" "\t (stocké dans le répertoire des scénarios)\n" #: options.h:1220 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" "\t-auth_scheme 1/2/3 - Méthode d'authentification HTTP : 1-Utilisateur " "2-Basique\n" "\t 3-Abrégé. 2 Par default\n" #: options.h:1232 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "\t-auth_name $str - Nom pour l'authentification (HTTP uniquement)\n" #: options.h:1243 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "" "\t-auth_passwd $str - Mot de passe pour l'authentification (HTTP " "uniquement)\n" #: options.h:1254 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - Réutiliser un accès HTTP autorisé pour\n" "\t les demandes suivantes\n" #: options.h:1278 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - Réutiliser un accès proxy HTTP autorisé pour\n" "\t les demandes suivantes\n" #: options.h:1305 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" "\t-ssl_cert_passwd $str\n" "\t - Mot de passe pour le fichier de certification SSL\n" #: options.h:1321 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - Fichier de certification SSL\n" #: options.h:1337 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "\t-ssl_key_file $str - Fichier de la clef de certification SSL\n" #: options.h:1352 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" "\t-ssl_cipher_list $str\n" "\t - Liste des algorithmes de cryptage préférés dans les " "communications SSL\n" #: options.h:1368 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "\t-egd_socket $file - Chemin vers la socket EGD\n" #: options.h:1380 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "" "\t-from $str - Adresse messagerie utilisée pour l'identification de " "l'utilisateur\n" #: options.h:1391 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" "\t-send_from/-nosend_from\n" "\t - Completer l'entête \"From\" avec l'adresse " "messagerie\n" "\t dans la requête HTTP\n" #: options.h:1415 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "" "\t-identity $str - Contenu du champ \"User-agent\" dans la requête HTTP\n" #: options.h:1426 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "\t-pattern $list - Liste des motifs jocker pour les fichiers\n" #: options.h:1440 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "" "\t-rpattern $re - Motifs Expressions Régulières our les fichiers\n" #: options.h:1452 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" "\t-skip_pattern $list\n" "\t - Liste des motifs joker à ignorer pour les fichiers\n" #: options.h:1467 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" "\t-skip_rpattern $re\n" "\t - Motifs Expressions Régulières à ignorer pour les " "fichiers\n" #: options.h:1480 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "\t-url_pattern $list - Liste des motifs joker pour les adresses\n" #: options.h:1494 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "" "\t-url_rpattern $re - Motifs Expressions Régulières pour les adresses\n" #: options.h:1506 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" "\t-skip_url_pattern $list\n" "\t - Liste des motifs joker pour les adresses à ignorer\n" #: options.h:1521 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" "\t-skip_url_rpattern $re\n" "\t - Motifs Expressions Régulières pour les adresses à " "ignorer\n" #: options.h:1534 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" msgstr "" "\t-mode $mode - Sélection du Mode\n" "\t normal - récupération récursive par WWW (défaut)\n" "\t linkupdate - mise à jour des liens existants\n" "\t sync - synchronisation du site local avec\n" "\t le site web distant\n" "\t singlepage - une seule page avec les objets " "inclus\n" "\t singlereget - recharger le fichier tant qu'il " "n'est pas complet\n" "\t resumeregets - recharger tous les documents dont " "le transfert a été interrompu\n" "\t dontstore - capturer les documents mais ne pas " "les stocker\n" "\t reminder - vérifier les adresses si elles ont " "changé\n" "\t ftpdir - lister le contenu du répertoire FTP\n" #: options.h:1555 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" "\t-ftp_proxy $site[:$port]\n" "\t - Serveur proxy/cache FTP\n" #: options.h:1567 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" "\t-http_proxy $site[:$port]\n" "\t - Serveur proxy/cache HTTP\n" #: options.h:1579 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" "\t-gopher_proxy $site[:$port]\n" "\t - Serveur proxy/cache Gopher\n" #: options.h:1594 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" "\t-ssl_proxy $site[:$port]\n" "\t - Serveur proxy SSL\n" #: options.h:1607 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - Le proxy gopher spécifié est une passerelle HTTP pour " "Gopher\n" #: options.h:1631 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - Le serveur proxy FTP est une passerelle HTTP pour " "FTP\n" #: options.h:1655 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - Utiliser les réquêtes CONNECT vers le proxy HTTP " "pour\n" "\t les connexions FTP\n" #: options.h:1682 msgid "\t-browser $str - your preferred browser programm\n" msgstr "\t-browser $str - Navigateur web préféré\n" #: options.h:1697 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "\t-xmaxlog - Taille maximale de la fenêtre de log\n" #: options.h:1709 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "" "\t-dumpscn $str - Enregistrer avec le nom $str le scénario dans scndir\n" #: options.h:1720 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "" "\t-maxsize $nr - Taille maximum autorisée des documents (octets)\n" #: options.h:1731 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "" "\t-minsize $nr - Taille minimum autorisée pour les documents (octets)\n" #: options.h:1742 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - Mot de passe pour l'authentification du proxy HTTP\n" #: options.h:1754 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - Nom d'utilisateur pour l'authentification du proxy " "HTTP\n" #: options.h:1766 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_auth 1/2/3\n" "\t - Mode d'authentification pour le proxy HTTP\n" #: options.h:1778 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "" "\t-logfile $file - Nom du fichier où les messages de log sont stockés\n" #: options.h:1789 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "" "\t-slogfile $file - Nom du fichier où les messages de log courts sont " "stockés\n" #: options.h:1800 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "" "\t-stime/-nostime - Ecrire les dates de début et de fin des transferts\n" #: options.h:1822 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - Détruire les fichiers et répertoires non-valides\n" "\t en mode synchronisation\n" #: options.h:1847 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" "\t-auth_file $file - Fichier où sont enregistrées les informations " "d'authentification\n" "\t voir le manuel pour la description du format utilisé\n" #: options.h:1859 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" "\t-base_level $nr - Nombre de niveaux d'arborescence à ommettre à partir " "du haut\n" #: options.h:1870 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "\t-ftp_active - Connexion FTP active\n" #: options.h:1881 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "\t-ftp_passive - Connexion FTP passive\n" #: options.h:1895 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "" "\t-msgcat $dir - Répertoire où les catalogues de messages sont " "stockés\n" #: options.h:1910 msgid "\t-language $str - set language for messages\n" msgstr "\t-language $str - Paramétrer la langue pour les messages\n" #: options.h:1922 msgid "\t-quiet - don't show output messages\n" msgstr "\t-quiet - Ne pas afficher les messages\n" #: options.h:1933 msgid "\t-verbose - show output messages (default)\n" msgstr "\t-verbose - Afficher les messages (défault)\n" #: options.h:1944 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-newer_than $time - Télécharger uniquement les documents plus récents que " "$time\n" "\t format de $time : YYYY.MM.DD.hh:mm\n" #: options.h:1956 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-older_than $time - Télécharger uniquement les documents plus anciens que " "$time\n" "\t format de $time : YYYY.MM.DD.hh:mm\n" #: options.h:1968 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-schedule $time - Planifier le démarrage de Pavuk à $time\n" "\t format de $time : YYYY.MM.DD.hh:mm\n" #: options.h:1980 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "" "\t-reschedule $nr - Nombre d'heures entre deux démarrages\n" "\t pour les planifications cycliques\n" #: options.h:1992 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" "\t-dont_leave_site/-leave_site\n" "\t - Ne pas quitter / Quitter le site de l'adresse de " "départ\n" #: options.h:2015 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" "\t-dont_leave_dir/-leave_dir\n" "\t - Ne pas quitter / Quitter le répertoire de l'adresse " "de départ\n" #: options.h:2038 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" "\t-preserve_time/-nopreserve_time\n" "\t - Conserver les dates de modification des documents\n" #: options.h:2061 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" "\t-preserve_perm/-nopreserve_perm\n" "\t - Conserver les permissions des documents\n" #: options.h:2084 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - Conserver les liens symboliques\n" #: options.h:2107 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" "\t-leave_level $nr - Nombre de niveaux dans l'arborescence à ignorer\n" "\t (0 == sans importance) 0 par défaut\n" #: options.h:2119 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "\t-cookie_file $file - Fichier de stockage des cookies\n" #: options.h:2130 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" "\t-cookie_send/-nocookie_send\n" "\t - Envoyer des cookies dans la requête HTTP\n" #: options.h:2153 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" "\t-cookie_recv/-nocookie_recv\n" "\t - Accepter les cookies dans les réponses HTTP\n" #: options.h:2176 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" "\t-cookie_update/-nocookie_update\n" "\t - Mettre à jour les cookies\n" #: options.h:2199 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" "\t-cookie_check/-nocookie_check\n" "\t - Vérifier si les cookies sont paramétrés pour un " "domaine\n" #: options.h:2222 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "\t-cookies_max $nr - Nombre maximum de cookies dans le cache\n" #: options.h:2233 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" "\t-disabled_cookie_domains $list\n" "\t - Liste de noms de domaines, séparés par des virgules, " "où les cookies sont désactivés\n" #: options.h:2245 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - Désactive le traitement des adresses avec les\n" "\t attributs $ATTRIB des balises HTML $TAG\n" #: options.h:2258 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - Autorise le traitement des adresses avec les\n" "\t attributs $ATTRIB des balises HTML $TAG\n" #: options.h:2274 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "\t-gui_font $font - Police utilisée dans l'interface graphique\n" #: options.h:2286 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" "\t-user_condition $str\n" "\t - Script utilisateur pour restreindre les adresses\n" "\t voir le manuel pour plus d'information\n" #: options.h:2299 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "" "\t-tr_del_chr $str - Caractères qui seront effacés dans le nom\n" "\t de fichier local\n" #: options.h:2311 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" "\t-tr_str_str $str1 $str2\n" "\t - Traduire $str1 en $str2 dans le nom de fichier local\n" #: options.h:2323 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - Traduire $chrset1 en $chrset2 dans le nom du fichier " "local\n" #: options.h:2335 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "\t-index_name $str - Nom du fichier index à la place de _._.html\n" #: options.h:2346 msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "\t-store_name $str - Nom du premier document téléchargé\n" #: options.h:2368 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - Comparer la taille du fichier reçu avec\n" "\t la taille donnée par le serveur\n" #: options.h:2392 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" "\t-urls_file $file - Les adresses devraient être lues à partir d'un " "fichier\n" "\t jusqu'à ce que la ligne contenant le symbole \".\" " "apparaisse\n" #: options.h:2404 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" "\t-bg/-nobg - Détacher le processus de Pavuk du terminal et\n" "\t ne pas afficher de messages à l'écran\n" #: options.h:2427 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "\t-maxrate $nr - Débit maximal du transfert (Ko/s)\n" #: options.h:2438 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "\t-minrate $nr - Débit minimum du transfert (Ko/s)\n" #: options.h:2449 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "\t-bufsize $nr - Taille du cache en lecture (Ko)\n" #: options.h:2460 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "\t-file_quota $nr - Taille maximum des fichiers à transférer (Ko)\n" #: options.h:2471 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "\t-trans_quota $nr - Volume maximum à transférer par session (Ko)\n" #: options.h:2482 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "\t-fs_quota $nr - Quota de disque libre (Ko)\n" #: options.h:2493 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" "\t-enable_js/-disable_js\n" "\t - Autorise le téléchargement des fichiers JavaScript\n" #: options.h:2516 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" "\t-fnrules $t $m $r - Règles de création des nom de fichiers\n" "\t (voir le manuel pour plus d'informations)\n" #: options.h:2528 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" "\t-store_info/-nostore_info\n" "\t - Enregistrer les fichiers d'informations avec chaque " "document\n" #: options.h:2551 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" "\t-all_to_local/-noall_to_local\n" "\t - Modifier immédiatement en local après le transfert\n" "\t tous les liens dans les documents HTML\n" #: options.h:2575 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" "\t-sel_to_local/-nosel_to_local\n" "\t - Modifier immédiatement après le transfert\n" "\t tous les liens en local à l'intéreur des documents " "HTML\n" "\t qui respectent les limites\n" #: options.h:2600 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" "\t-all_to_remote/-noall_to_remote\n" "\t - Modifier immédiatement après le transfert tous les " "liens internes\n" "\t dans les documents HTML en distant\n" "\t et ne plus y faire de changement\n" #: options.h:2625 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "" "\t-remind_cmd $str - Commande qui transmet les résultats du mode " "\"reminder\"\n" #: options.h:2636 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" "\t-auto_referer/-noauto_referer\n" "\t - Envoyer le champ \"Referer\" qui contient sa propre " "adresse dans chaque requête HTTP\n" #: options.h:2660 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" "\t-url_strategy $strategy\n" "\t - Stratégie de téléchargement des adresses\n" "\t (cela précise dans quel ordre sont téléchargées les " "adresses)\n" "\t $strategy est :\n" "\t level - ordre dans l'arbre des adresses\n" "\t leveli - ordre dans l'arbre des adresses,\n" "\t mais les objets sont téléchargés en " "premier\n" "\t pre - pré-ordre dans l'arbre des adresses\n" "\t prei - pré-ordre dans l'arbre des adresses,\n" "\t mais les objets sont téléchargés en " "premier\n" #: options.h:2683 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "\t-nscache_dir $dir - Chemin du répertoire de cache de Netscape\n" #: options.h:2698 msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr "" "\t-ie_cache - Autorise le chargement des fichiers depuis le " "répertoire cache de MSIE\n" #: options.h:2728 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" "\t-remove_adv/-noremove_adv\n" "\t - Valide la suppression des bannières publicitaires\n" "\t les expressions régulières doivent être validées\n" "\t avec l'option -adv_re\n" #: options.h:2761 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "" "\t-adv_re $RE - Expressions régulières pour\n" "\t les bannières publicitaires\n" #: options.h:2777 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - En fonctionnement en arrière plan\n" "\t ne pas écrire de messages à l'écran\n" #: options.h:2806 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" "\t-send_if_range/-nosend_if_range\n" "\t - Envoyer l'entête \"If-Range\" dans les requêtes HTTP\n" "\t valider cette option quand le serveur supporte " "\"reget\"\n" "\t mais génère des \"Etags\" différents entre chaque " "requête\n" #: options.h:2831 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "\t-sched_cmd $str - Commande pour la planification\n" #: options.h:2842 msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" "\t-unique_log/-nounique_log\n" "\t - Trouver un nouveau nom de fichier log\n" "\t quand le fichier log original est bloqué\n" #: options.h:2866 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" "\t-post_cmd $str - Commande exécutée sur chaque document\n" "\t quand il est téléchargé\n" #: options.h:2882 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" "\t-ssl_version $v - Version de SSL utilisée dans la connexion\n" "\t valeurs valides : ssl23, ssl2, ssl3, tls1\n" #: options.h:2885 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" "\t-ssl_version $v - Version de SSL utilisée dans la connexion\n" "\t valeurs valides : ssl23, ssl2, ssl3, tls1\n" #: options.h:2903 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" "\t-unique_sslid/-nounique_sslid\n" "\t - Utiliser un identifiant SSL unique pour les " "connexions SSL\n" #: options.h:2931 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "\t-httpad $hdr - Entête HTTP additionnel\n" #: options.h:2942 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "\t-statfile $str - Rapport statistique sur le téléchargement\n" #: options.h:2956 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "" "\t-ewait - Attendre de finir le programme que le\n" "\t téléchargement soit terminé\n" #: options.h:2987 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "" "\t-aip_pattern $re - Motif pour les adresses IP des serveurs autorisés\n" #: options.h:3002 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "" "\t-dip_pattern $re - Motif pour les adresses IP de serveurs non autorisés\n" #: options.h:3014 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "" "\t-site_level $nr - Nombre maximum de sites autorisés\n" "\t à partir du site de départ\n" #: options.h:3026 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" "\t-use_http11/-nouse_http11\n" "\t - Valider ou invalider le protocole HTTP/1.1\n" "\t invalidé par défaut\n" #: options.h:3050 msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" "\t-max_time $nr - Temps maximum autorisé pour le programme\n" "\t en minutes, par défaut 0 == pas de limite\n" "\t Utilisation possible des nombres en virgule " "flottante\n" "\t pour spécifier des temps sous la minute\n" #: options.h:3065 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" "\t-local_ip $str - Option pour les machines avec plusieurs adresses IP.\n" "\t Précise l'adresse locale.\n" #: options.h:3077 msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-request $req - Informations étendues pour les requêtes, utilisées " "pour\n" "\t spécifier les requêtes GET ou POST.\n" "\t format de la requête $req : \n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (pour plus de détails consulter le manuel)\n" #: options.h:3095 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" "\t-hash_size $nr - Taille des tables internes de hash : règlage des " "performances\n" #: options.h:3109 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "\t-nthreads $nr - Nombre maximum de threads de téléchargement\n" #: options.h:3124 msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" "\t-immesg/-noimmesg - Ecrire les messages tout de suite, ou\n" "\t quand le multithreading le permet\n" #: options.h:3152 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-formdata $data - Spécification des champs de formulaires HTML\n" "\t Pour les formulaires trouvés lors du parcours de " "l'arborescence.\n" "\t Seuls les formulaires précisés dans cette option\n" "\t seront traités automatiquement.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (pour plus d'informations consulter le manuel)\n" #: options.h:3170 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" "\t-dumpfd $nr - Nombre de descripteurs de fichiers ou écrire\n" "\t les documents\n" #: options.h:3182 msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" "\t-dump_urlfd $nr - Nombre de descripteurs de fichiers où\n" "\t écrire toutes les adresses trouvées dans les " "documents\n" #: options.h:3194 msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" "\t-del_after/-nodel_after\n" "\t - Supprimer le document FTP après le téléchargement\n" #: options.h:3217 msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" "\t-unique_name/-nounique_name\n" "\t - Toujours générer un nom de document unique pour " "chaque document\n" #: options.h:3240 msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - Quitter le répertoire d'entrée dans le site\n" #: options.h:3263 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" "\t-singlepage/-nosinglepage\n" "\t - Télécharger une seule page avec tous ses objets\n" #: options.h:3286 msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" "\t-dump_after/-nodump_after\n" "\t - Ecrire le fichier après le téléchargement réussi\n" "\t et traitement du code HTML\n" #: options.h:3311 msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" "\t-dump_response/-nodump_response\n" "\t - Les réponses des serveurs HTTP sont également écrites " "avec cette option.\n" #: options.h:3338 msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" "\t-auth_ntlm_domain $str\n" "\t - Domaine SMB pour l'authentification HTTP Windows NT\n" #: options.h:3354 msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" "\t-auth_proxy_ntlm_domain $str\n" "\t - Domaine SMB pour l'authentification proxy HTTP " "Windows NT\n" #: options.h:3370 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" "\t-js_pattern $re - Expressions régulières additionnelles pour traiter\n" "\t pour les attributs DOM des tags HTML\n" #: options.h:3383 msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" "\t-follow_cmd $str - Script utilisateur pour traiter ou non les liens\n" "\t dans les documents HTML\n" #: options.h:3395 msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - Traiter les liens symboliques comme des fichiers et " "répertoires ordinaires\n" #: options.h:3421 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform $p $t $h $a\n" "\t - Motif JavaScript spécifique avec transformation\n" "\t $p - motif\n" "\t $t - transfomation\n" "\t $h - balise HTML ou * ou \"\"\n" "\t $a - attribut HTML\n" #: options.h:3441 msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform2 $p $t $h $a\n" "\t - Motif JavaScript spécifique avec transformation\n" "\t et réécriture des adresses dans le premier " "sous-motif\n" "\t $p - motif\n" "\t $t - transfomation\n" "\t $h - balise HTML ou * ou \"\"\n" "\t $a - attribut HTML\n" #: options.h:3459 msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_user $str\n" "\t - Nom d'utilisateur pour accès au proxy FTP\n" #: options.h:3471 msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_pass $str\n" "\t - Mot de passe pour le proxy FTP\n" #: options.h:3483 msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - Appliquer les limitations aux objets inclus dans les " "pages HTML\n" #: options.h:3506 msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" "\t-ftp_list_options $str\n" "\t - Options additionnelles ou paramètres\n" " \t pour les commandes FTP LIST ou NLST\n" #: options.h:3519 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - Recherche intensive de l'existence de répertoire FTP\n" "\t correction du bug de WuFTPD\n" #: options.h:3544 msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" "\t-post_update/-nopost_update\n" "\t - Mettre à jour dans les documents parents seulement " "les liens\n" "\t pointant vers le document courant\n" #: options.h:3568 msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" "\t-info_dir $dir - Répertoire séparé de l'arborecence normale ou seront\n" "\t stockés les fichiers d'information\n" #: options.h:3583 msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "\t-mozcache_dir $dir - Chemin du répertoire cache de Mozilla\n" #: options.h:3595 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" "\t-aport $list - Ports des serveurs autorisés\n" "\t pour le téléchargement\n" #: options.h:3607 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" "\t-dport $list - Ports des serveurs interdits\n" "\t pour le téléchargement\n" #: options.h:3619 msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" "\t-hack_add_index/-nohack_add_index\n" "\t - Astuce pour autoriser l'ajout du répertoire\n" "\t pour tous les fichiers dans la file d'attente\n" #: options.h:3643 msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" "\t-default_prefix $str\n" "\t - Préfixe d'adresse par défaut pour les " "sous-répertoires\n" "\t des fichiers mirrorés\n" #: options.h:3659 msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" "\t-js_script_file $file\n" "\t - Fichier de script avec des fonctions JavaScript\n" #: options.h:3672 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" "\t-ftp_login_handshake $host $handshake\n" "\t - Paramètre le protocole de login pour le serveur FTP\n" #: pavuk.c:106 msgid "QUIT signal catched\n" msgstr "Signal de fin reçu\n" #: pavuk.c:259 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "Pas assez de paramètres \"-msgcat\"\n" #: pavuk.c:273 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "Pas assez de paramètres \"-scenario\"\n" #: pavuk.c:303 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "Erreur : mauvais descripteur de fichier dans l'option -dumpfd\n" #: pavuk.c:314 msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "Erreur : mauvais descripteur de fichier dans l'option -dump_urlfd\n" #: pavuk.c:366 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "" "Attention : scndir n'a pas été précisé - la sauvegarde se fait dans le " "répertoire courant\n" #: pavuk.c:403 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "" "Impossible de basculer Pavuk en arrière plan - fonctionnement en avant-plan\n" #: pavuk.c:407 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "Pavuk sera en arrière plan avec le PID %d\n" #: pavuk.c:427 #, c-format msgid "reading URLs from file - %s\n" msgstr "Lecture des adresses à partir du fichier - %s\n" #: recurse.c:82 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "Replanification des adresses bloquées avec le n° %d\n" #: recurse.c:95 msgid "Running post-processing command\n" msgstr "Exécution de commande de post-processing\n" #: recurse.c:243 #, c-format msgid "retry no. %d\n" msgstr "Essai n° %d\n" #: recurse.c:246 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "Adresse[%2d] : %5d(%d) de %5d %s\n" #: recurse.c:249 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "Adresse : %5d(%d) de %5d %s\n" #: recurse.c:260 recurse.c:394 msgid "Starting download" msgstr "Démarrage du téléchargement" #: recurse.c:284 msgid "Already processed\n" msgstr "Déjà traité\n" #: recurse.c:291 msgid "Disallowed by user\n" msgstr "Interdit par l'utilisateur\n" #: recurse.c:305 msgid "Disallowed by rules\n" msgstr "Interdit par les règles\n" #: recurse.c:312 msgid "Checking \"robots.txt\"" msgstr "Vérification de \"robots.txt\"" #: recurse.c:316 msgid "Disallowed by \"robots.txt\"\n" msgstr "Interdit par \"robots.txt\"\n" #: recurse.c:326 msgid "This URL type is not supported with ftpdir mode\n" msgstr "Cette adresse n'est pas supportée en mode ftpdir\n" #: recurse.c:346 msgid "No transfer - file not expired\n" msgstr "Pas de transfert - fichier non expiré\n" #: recurse.c:362 #, c-format msgid "Starting time : %s\n" msgstr "Démarré à : %s\n" #: recurse.c:404 recurse.c:563 #, c-format msgid "Ending time : %s\n" msgstr "Terminé à : %s\n" #: recurse.c:411 recurse.c:566 msgid "download" msgstr "Téléchargement" #: recurse.c:511 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "Dernier document verrouillé -> pause de 5 secondes\n" #: recurse.c:577 msgid "Relocating and scanning HTML document" msgstr "Déplacement et traitement du document" #: recurse.c:629 msgid "Dumping processed document" msgstr "Dump du document traité" #: recurse.c:649 msgid "Storing document" msgstr "Enregistrement du document" #: recurse.c:655 msgid "Store failed\n" msgstr "Echec de l'enregistrement\n" #: recurse.c:762 recurse.c:845 msgid "Done" msgstr "Terminé" #: recurse.c:922 remind.c:379 msgid "Sleeping ..." msgstr "Pause ..." #: recurse.c:936 remind.c:396 msgid "Exiting ..." msgstr "Sortie ..." #: recurse.c:1048 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d octets)\n" #: recurse.c:1106 msgid "Searching for files to resume" msgstr "Recherche des fichiers à reprendre" #: recurse.c:1133 #, c-format msgid "Adding %s to resume list\n" msgstr "Ajout de %s à la liste de reprise\n" #: recurse.c:1165 msgid "Searching for documents to synchronize" msgstr "Recherche des documents pour la synchronisation" #: recurse.c:1220 recurse.c:1245 #, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "" "Ajout du fichier %s dans la liste de synchronisation comme adresse %s\n" #: remind.c:45 #, c-format msgid "Checking: %s\n" msgstr "Vérification : %s\n" #: remind.c:170 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "Mauvais rappel d'entrée db - %s\n" #: remind.c:529 msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "Ceci est le résultat de l'utilisation de Pavuk en mode rappel\n" "\n" #: remind.c:540 msgid "Changed URLs\n" msgstr "Adresses modifiées\n" #: remind.c:561 msgid "URLs with some errors\n" msgstr "Adresses contenant des erreurs\n" #: robots.c:166 msgid "transfering \"robots.txt\"" msgstr "Transfert de \"robots.txt\"" #: robots.c:169 msgid "transfering \"robots.txt\"\n" msgstr "Transfert de \"robots.txt\"\n" #: robots.c:230 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "Redirection de \"robots.txt\" vers %s ???\n" #: stats.c:138 stats.c:221 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "Nombre total d'adresses dans la file d'attente : %d\n" #: stats.c:139 stats.c:223 #, c-format msgid "Starting urls: %d\n" msgstr "Adresses de départ : %d\n" #: stats.c:142 stats.c:228 msgid "Not processed yet: %d (%3d%%)\n" msgstr "Pas encore traités : %d (%3d%%)\n" #: stats.c:147 stats.c:235 msgid "Processed OK: %d (%3d%%)\n" msgstr "Traitement réussi : %d (%3d%%)\n" #: stats.c:150 stats.c:241 msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "Chargement à partir de l'arbre local : %d (%3d%%)\n" #: stats.c:153 stats.c:247 msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "Chargement à partir du répertoire de cache de Netscape : %d (%3d%%)\n" #: stats.c:156 stats.c:253 msgid "Downloaded over network: %d (%3d%%)\n" msgstr "Téléchargés par le réseau : %d (%3d%%)\n" #: stats.c:159 stats.c:259 msgid "Moved to another location: %d (%3d%%)\n" msgstr "Deplacés vers un autre emplacement : %d (%3d%%)\n" #: stats.c:163 stats.c:265 msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "Téléchargés et corrompus : %d (%3d%%)\n" #: stats.c:169 stats.c:272 msgid "Non fatal errors: %d (%3d%%)\n" msgstr "Erreurs non fatales : %d (%3d%%)\n" #: stats.c:175 stats.c:279 msgid "Not found documents: %d (%3d%%)\n" msgstr "Documents non trouvés : %d (%3d%%)\n" #: stats.c:181 stats.c:286 msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "Documents avec des erreurs fatales : %d (%3d%%)\n" #: stats.c:187 msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "Documents avec un status inconnu : %d (%3d%%)\n" #: stats.c:293 msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "Documents avec un status non spécifique : %d (%3d%%)\n" #: stats.c:358 msgid "Pavuk: save status page" msgstr "Pavuk : Sauver la page de status" #: stats.c:379 stats.c:537 msgid "Not available yet" msgstr "Non disponible" #: stats.c:462 msgid "Pavuk: status page" msgstr "Pavuk : Page de status" #: stats.c:479 msgid "Status page" msgstr "Page de status" #: stats.c:492 msgid "Save ..." msgstr "Enregistrer ..." #: stats.c:499 msgid "Refresh" msgstr "Rafraîchir" #: stats.c:526 msgid "Try download" msgstr "Essayer de télécharger" #: tools.c:109 msgid "no error" msgstr "Pas d'erreur" #: tools.c:114 msgid "host not found" msgstr "Serveur non trouvé" #: tools.c:119 msgid "temporary error (try again later)" msgstr "Erreur temporaire (essayer plus tard)" #: tools.c:124 msgid "non recoverable error" msgstr "Erreur non recupérable" #: tools.c:129 msgid "name is valid, but doesn't have an IP address" msgstr "Le nom est valide mais il ne possède pas d'adresse IP" #: tools.c:133 msgid "unknown hostname translation error" msgstr "Erreur de traduction inconnue du serveur de noms" #: tools.c:315 tools.c:330 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "En attente de déverrouillage sur FD : %d\n" #: uconfig.c:998 msgid "Bad parameter - Working subdirectory" msgstr "Mauvais paramètre - sous-répertoire de travail" #: uconfig.c:1178 msgid "Bad parameter - Cache directory" msgstr "Mauvais paramètre - répertoire de cache" #: uexit.c:30 msgid "Error occured while executing user-exit script" msgstr "Une erreur s'est produite en executant un script utilisateur" #: update_links.c:40 #, c-format msgid "Entering directory %s\n" msgstr "Entrée dans le répertoire %s\n" #: update_links.c:69 #, c-format msgid "Relocating %s\n" msgstr "Relocalisation %s\n" #: update_links.c:72 #, c-format msgid "Omitting %s\n" msgstr "Omission de %s\n" #: update_links.c:86 #, c-format msgid "Leaving directory %s\n" msgstr "Quitte le répertoire %s\n" #: update_links.c:104 #, c-format msgid "Can't open directory %s\n" msgstr "Impossible d'ouvrir le répertoire %s\n" #: url.c:1000 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "Type d'adresse non supportée \"%s\"\n" #: url.c:1152 msgid "Moved to already processed URL.\n" msgstr "Déplacée vers des adresses déjà traitées\n" #: url.c:2767 msgid "Missing specification of URL in request\n" msgstr "Specification de l'adresse absente de de la requête\n" #: url.c:2776 msgid "Missing request fields specification for POST request\n" msgstr "Champs manquants pour la requête POST\n" #: url.c:2784 msgid "Multipart encoding not supported with GET requests\n" msgstr "Encodage \"Multipart\" non supporté dans le requêtes GET\n" pavuk-0.9.35/po/ja.po0000644000175000001440000040012410151073677011233 00000000000000# ja.po for pavuk. # Copyright (C) 2000 Free Software Foundation, Inc. # SATO Satoru , 2000. # msgid "" msgstr "" "Project-Id-Version: pavuk 0.9p126\n" "POT-Creation-Date: 2001-07-30 10:14+0200\n" "PO-Revision-Date: 2000-10-22 21:24+09:00\n" "Last-Translator: SATO Satoru \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=EUC-JP\n" "Content-Transfer-Encoding: 8bit\n" #: abstract.c:46 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "" #: abstract.c:84 doc.c:550 msgid "File redirect\n" msgstr "¥Õ¥¡¥¤¥ë¥ê¥À¥¤¥ì¥¯¥È\n" #: abstract.c:120 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "¥í¡¼¥«¥ë¤Î NS ¥­¥ã¥Ã¥·¥å¤«¤é¥³¥Ô¡¼¤òÆÉ¤ß¹þ¤ßÃæ - %s\n" #: abstract.c:152 #, fuzzy, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "¥í¡¼¥«¥ë¤Î NS ¥­¥ã¥Ã¥·¥å¤«¤é¥³¥Ô¡¼¤òÆÉ¤ß¹þ¤ßÃæ - %s\n" #: abstract.c:185 #, fuzzy, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "¥í¡¼¥«¥ë¤Î NS ¥­¥ã¥Ã¥·¥å¤«¤é¥³¥Ô¡¼¤òÆÉ¤ß¹þ¤ßÃæ - %s\n" #: abstract.c:221 msgid "Unsupported URL\n" msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ URL\n" #: abstract.c:341 abstract.c:377 msgid "Warning: broken ftp transfer ...\n" msgstr "·Ù¹ð: ftp žÁ÷¤¬ÀÚÃǤµ¤ì¤Þ¤·¤¿...\n" #: abstract.c:351 msgid "Error removing FTP document from remote server\n" msgstr "" #: abstract.c:496 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "\"chuked\" žÁ÷¥¨¥ó¥³¡¼¥É¤Îʸ½ñÆÉ¤ß¹þ¤ßÃæ¤Ë¥¨¥é¡¼!\n" #: ainterface.c:118 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ URL ¤ò¾ÃµîÃæ: %s\n" #: ainterface.c:199 msgid "Specify at least one starting URL!" msgstr "ºÇÄã¤Ç¤â°ì¤Ä¤Î¥¹¥¿¡¼¥È URL ¤ò»ØÄꤷ¤Æ²¼¤µ¤¤!" #: ainterface.c:201 msgid "Specify at least one starting URL!\n" msgstr "ºÇÄã¤Ç¤â°ì¤Ä¤Î¥¹¥¿¡¼¥È URL ¤ò»ØÄꤷ¤Æ²¼¤µ¤¤!\n" #: ainterface.c:472 msgid "Can't list available message catalogs\n" msgstr "ÍøÍѲÄǽ¤Ê¥á¥Ã¥»¡¼¥¸¥«¥¿¥í¥°¤ò¥ê¥¹¥Èɽ¼¨¤Ç¤­¤Þ¤»¤ó\n" #: authinfo.c:107 msgid "Bad section - specify protocol\n" msgstr "ÉÔÀµ¤Ê¥»¥¯¥·¥ç¥ó - ¥×¥í¥È¥³¥ë¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: authinfo.c:112 msgid "Bad section - specify hostname\n" msgstr "ÉÔÀµ¤Ê¥»¥¯¥·¥ç¥ó - ¥Û¥¹¥È̾¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: authinfo.c:159 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "²òÀϤǤ­¤Þ¤»¤ó : \"%s\"\n" #: authinfo.c:179 #, c-format msgid "Bad protocol - %s\n" msgstr "ÉÔÀµ¤Ê¥×¥í¥È¥³¥ë - %s\n" #: authinfo.c:190 #, c-format msgid "Bad port number %s\n" msgstr "ÉÔÀµ¤Ê¥Ý¡¼¥ÈÈÖ¹æ %s\n" #: authinfo.c:211 #, c-format msgid "Unknown auth type - %s\n" msgstr "ÉÔÌÀ¤Êǧ¾ÚÊý¼° - %s\n" #: cleanup.c:60 msgid "press any key to exit\n" msgstr "½ªÎ»¤¹¤ë¤¿¤á¤Ë¤É¤ì¤«¥­¡¼¤ò²¡¤·¤Æ²¼¤µ¤¤\n" #: cmdparse.c:129 #, fuzzy, c-format msgid "Error parsing commandline at: %s\n" msgstr ".pavuk_info ¥Õ¥¡¥¤¥ë¥Õ¥£¡¼¥ë¥É²òÀÏÃæ¤Ë¥¨¥é¡¼: %s\n" #: cmdparse.c:186 #, fuzzy, c-format msgid "Unable to parse commandline: %s\n" msgstr "²òÀϤǤ­¤Þ¤»¤ó : %s\n" #: config.c:44 #, fuzzy msgid "Level order" msgstr "¥ì¥Ù¥ë¤Î½çÈÖ" #: config.c:45 #, fuzzy msgid "Level order, inline first" msgstr "¥ì¥Ù¥ë¤Î½çÈÖ¡¢¥¤¥ó¥é¥¤¥ó¤¬ºÇ½é" #: config.c:46 msgid "Pre order" msgstr "" #: config.c:47 msgid "Pre order, inline first" msgstr "" #: config.c:115 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó] [URL ¤Î¿ô]\n" "pavuk-%s %s\n" #: config.c:131 #, fuzzy, c-format msgid "Type \"%s --help\" for long help\n" msgstr "¾ÜºÙ¥Ø¥ë¥×¤ò¸«¤ë¤Ë¤Ï \"%s -h\" ¤ÈÆþÎϤ·¤Æ²¼¤µ¤¤\n" #: config.c:139 msgid "Optional features available :\n" msgstr "²Äǽ¤Ê¥ª¥×¥·¥ç¥óÆÃÀ­ :\n" #: config.c:141 msgid " - Debug mode\n" msgstr "- ¥Ç¥Ð¥Ã¥°¥â¡¼¥É\n" #: config.c:145 msgid " - GNU gettext internationalization of messages\n" msgstr " - GNU gettext ¹ñºÝ²½¥á¥Ã¥»¡¼¥¸\n" #: config.c:149 msgid " - flock() document locking\n" msgstr " - flock() ʸ½ñ¥í¥Ã¥¯Ãæ\n" #: config.c:153 msgid " - fcntl() document locking\n" msgstr " - fcntl() ʸ½ñ¥í¥Ã¥¯Ãæ\n" #: config.c:158 msgid " - Gtk GUI interface\n" msgstr " - Gtk GUI ¥¤¥ó¥¿¥Õ¥§¡¼¥¹\n" #: config.c:161 msgid " - URL tree preview\n" msgstr " - URL ¥Ä¥ê¡¼ÆâÍ÷\n" #: config.c:166 msgid " - http over SSL\n" msgstr " - SSL ¾å¤Î HTTP\n" #: config.c:171 msgid " - Socks v4 proxy support\n" msgstr " - Socks v4 ¥×¥í¥­¥·¥µ¥Ý¡¼¥È\n" #: config.c:173 msgid " - Socks v5 proxy support\n" msgstr " - Socks v5 ¥×¥í¥­¥·¥µ¥Ý¡¼¥È\n" #: config.c:177 msgid " - with filesystem free space checking\n" msgstr " - ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥Õ¥ê¡¼¥¹¥Ú¡¼¥¹¥Á¥§¥Ã¥¯\n" #: config.c:181 msgid " - with optional regex patterns in -fnrules and -*rpattern options\n" msgstr " - -fnrules ¤È -*rpattern ¥ª¥×¥·¥ç¥ó¤Ç¤Î¥ª¥×¥·¥ç¥óÀµµ¬É½¸½¥Ñ¥¿¡¼¥ó\n" #: config.c:185 msgid " - with POSIX regexp\n" msgstr " - POSIX Àµµ¬É½¸½\n" #: config.c:189 msgid " - with Bell V8 regexp\n" msgstr " - Bell V8 Àµµ¬É½¸½\n" #: config.c:193 msgid " - with BSD regexp\n" msgstr " - BSD Àµµ¬É½¸½\n" #: config.c:197 msgid " - with GNU regexp\n" msgstr " - GNU Àµµ¬É½¸½\n" #: config.c:201 msgid " - with PCRE regexp\n" msgstr " - PCRE Àµµ¬É½¸½\n" #: config.c:205 msgid " - with support for loading files from Netscape browser cache\n" msgstr " - Netscape ¥Ö¥é¥¦¥¶¥­¥ã¥Ã¥·¥å¤«¤é¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ß¤ò¥µ¥Ý¡¼¥È\n" #: config.c:209 msgid "" " - with support for detecting whether pavuk is running as background job\n" msgstr " - ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¥¸¥ç¥Ö¤Î pavuk ¤Î¼Â¹Ô¸¡½Ð¤ò¥µ¥Ý¡¼¥È\n" #: config.c:213 msgid " - with multithreading support\n" msgstr "" #: config.c:217 msgid " - with NTLM authorization support\n" msgstr "" #: config.c:221 msgid " - with JavaScript bindings\n" msgstr "" #: config.c:295 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "HTML ¥¿¥°¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %s.%s\n" #: config.c:654 #, fuzzy msgid "Error parsing commandline\n" msgstr "¥¨¥é¡¼¥¹¥±¥¸¥å¡¼¥ê¥ó¥°\n" #: config.c:661 #, fuzzy, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "¥Ñ¥é¥á¡¼¥¿ \"%s\" ¤Î¿ô¤¬ÉÔ½¼Ê¬¤Ç¤¹\n" #: config.c:668 #, fuzzy, c-format msgid "Unknown option %s\n" msgstr "ÉÔÌÀ¤Ê¥Ý¡¼¥È \"%s\"\n" #: config.c:675 #, c-format msgid "Wrong format of option %s\n" msgstr "" #: config.c:684 #, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "" #: config.c:697 #, fuzzy, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "¥Ñ¥é¥á¡¼¥¿¤Ë¿ô»ú¤ò»ØÄꤷ¤Æ²¼¤µ¤¤: \"%s\"\n" #: config.c:762 config.c:1113 http_proxy.c:120 #, c-format msgid "Unknown port \"%s\"\n" msgstr "ÉÔÌÀ¤Ê¥Ý¡¼¥È \"%s\"\n" #: config.c:778 config.c:1126 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "ÉÔÀµ¤Êǧ¾ÚÊýË¡ \"%s\"\n" #: config.c:788 config.c:1136 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "ÉÔÌÀ¤ÊÁàºî¥â¡¼¥É \"%s\"\n" #: config.c:810 #, fuzzy, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "¥Ñ¥é¥á¡¼¥¿ \"%s\" ¤Ë¤Ä¤¤¤Æ float Ãͤò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: config.c:829 #, fuzzy, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "%s (%s) ¤ËÂФ·¤ÆÅ¬Àڤʾò·ï¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: config.c:852 #, fuzzy, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "¥Ñ¥é¥á¡¼¥¿ \"%s\" ¤Ë¤Ä¤¤¤ÆÅ¬ÀÚ¤ÊÀµµ¬É½¸½¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: config.c:863 config.c:1248 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "ÉÔÌÀ¤Ê URL ½ä²ó·×²è - \"%s\"\n" #: config.c:871 config.c:1259 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "ÉÔÌÀ¤Ê SSL ¥Ð¡¼¥¸¥ç¥ó - \"%s\"\n" #: config.c:880 config.c:1270 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "ÉÔÀµ¤ÊÄɲà HTTP ¥Ø¥Ã¥À - \"%s\"\n" #: config.c:903 config.c:1293 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "ÉÔÀµ¤Ê¥ê¥¯¥¨¥¹¥È»ØÄê - \"%s\"\n" #: config.c:948 #, fuzzy, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "ÉÔÀµ¤Ê»þ´Ö¥Ñ¥é¥á¡¼¥¿ \"%s\"\n" #: config.c:964 #, fuzzy, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "ÉÔÀµ¤Ê¥ê¥¯¥¨¥¹¥È»ØÄê - \"%s\"\n" #: config.c:981 #, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "" #: config.c:1031 #, c-format msgid "WARNING: option \"%s\" not supported in current configuration!\n" msgstr "" #: config.c:1055 #, c-format msgid "Please specify number \"%s\"\n" msgstr "ÈÖ¹æ \"%s\" ¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: config.c:1073 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "\"true\" ¤È \"false\" ¤À¤±¤¬µö¤µ¤ì¤Þ¤¹ : \"%s\"\n" #: config.c:1147 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "ÉÔÀµ¤Ê»þ´Ö¥Ñ¥é¥á¡¼¥¿ \"%s\"\n" #: config.c:1178 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "float ¿ô \"%s\" ¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: config.c:1195 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "%s ¤Ë¤Ä¤¤¤Æ¥×¥í¥°¥é¥à°ú¿ô¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: config.c:1207 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "%s (%s) ¤ËÂФ·¤ÆÅ¬Àڤʾò·ï¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: config.c:1235 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "ŬÀÚ¤ÊÀµµ¬É½¸½ \"%s\" ¤ò»ØÄꤷ¤Æ²¼¤µ¤¤\n" #: config.c:1327 #, fuzzy, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "ÉÔÀµ¤Ê¥ê¥¯¥¨¥¹¥È»ØÄê - \"%s\"\n" #: config.c:1347 #, fuzzy, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "ÉÔÀµ¤Ê¥ê¥¯¥¨¥¹¥È»ØÄê - \"%s\"\n" #: config.c:1362 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "" #: config.c:1388 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "\"%s\" ¤ò²òÀϤǤ­¤Þ¤»¤ó\n" #: config.c:1430 #, fuzzy, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "·Ù¹ð: ¥·¥Ê¥ê¥ª¤ÎÆÉ¤ß¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿ (%s)\n" #: cookie.c:216 #, c-format msgid "Unable to parse : %s\n" msgstr "²òÀϤǤ­¤Þ¤»¤ó : %s\n" #: cookie.c:389 msgid "Updating cookie file\n" msgstr "cookie ¥Õ¥¡¥¤¥ë¤ò¹¹¿·Ãæ\n" #: cookie.c:418 msgid "Cookie file has changed - > synchronizing\n" msgstr "cookie ¥Õ¥¡¥¤¥ë¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿ - > Ʊ´üÃæ\n" #: cookie.c:567 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "¥µ¡¼¥Ð %s ¤Ï %s ¥É¥á¥¤¥ó¤Ë¤Ä¤¤¤Æ cookie ¤òÀßÄꤷ¤è¤È»î¹ÔÃæ\n" #: cookie.c:578 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "¶Ø»ß¤µ¤ì¤¿¥É¥á¥¤¥ó %s ¤«¤é cookie ¤ò¾ÃµîÃæ\n" #: debugl.c:16 msgid "HTML parsers" msgstr "HTML ¥Ñ¡¼¥¶" #: debugl.c:17 msgid "Server responses" msgstr "¥µ¡¼¥Ð±þÅú" #: debugl.c:18 msgid "Client requests" msgstr "¥¯¥é¥¤¥¢¥ó¥È±þÅú" #: debugl.c:19 msgid "Procedure calling" msgstr "¼ê³¸Æ½Ð¤·" #: debugl.c:20 msgid "File locking" msgstr "¥Õ¥¡¥¤¥ë¥í¥Ã¥¯" #: debugl.c:21 msgid "Networking code" msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¥³¡¼¥É" #: debugl.c:22 msgid "Miscelanous" msgstr "¤½¤Î¾" #: debugl.c:23 msgid "Extended user infos" msgstr "³ÈÄ¥¥æ¡¼¥¶¾ðÊó" #: debugl.c:24 msgid "Multithreading - locking" msgstr "¥Þ¥ë¥Á¥¹¥ì¥Ã¥É - ¥í¥Ã¥¯" #: debugl.c:25 msgid "Multithreading - threads" msgstr "¥Þ¥ë¥Á¥¹¥ì¥Ã¥É - ¥¹¥ì¥Ã¥É" #: debugl.c:26 msgid "POST request data" msgstr "POST ¥ê¥¯¥¨¥¹¥È¥Ç¡¼¥¿" #: debugl.c:27 msgid "Limiting conditions" msgstr "" #: debugl.c:66 #, c-format msgid "Bad debug level selection : %s\n" msgstr "ÉÔÀµ¤Ê¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ëÁªÂò : %s\n" #: decode.c:184 msgid "decode" msgstr "¥Ç¥³¡¼¥É" #: digest_auth.c:155 msgid "Trying to do HTTP Digest authorization\n" msgstr "" #: digest_auth.c:202 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "" #: dinfo.c:368 dinfo.c:387 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr ".pavuk_info ¥Õ¥¡¥¤¥ë¥Õ¥£¡¼¥ë¥É²òÀÏÃæ¤Ë¥¨¥é¡¼: %s\n" #: doc.c:297 msgid "Transfering data" msgstr "žÁ÷¥Ç¡¼¥¿" #: doc.c:312 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt: SO_RCVBUF ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" #: doc.c:333 msgid "storing document" msgstr "ʸ½ñ¤òÊÝÂ¸Ãæ" #: doc.c:399 #, fuzzy msgid "Document transfer data" msgstr "¥Ç¡¼¥¿Å¾Á÷´°Î»" #: doc.c:420 msgid "Data transfer done" msgstr "¥Ç¡¼¥¿Å¾Á÷´°Î»" #: doc.c:597 #, c-format msgid "Trying to resume from position %d \n" msgstr "°ÌÃÖ %d ¤«¤é¤ÎºÆ³«¤ò»î¹ÔÃæ\n" #: doc.c:662 msgid "Opening connection" msgstr "µ¯Æ°»þ¤ÎÀܳ" #: doc.c:686 msgid "Loading local copy\n" msgstr "¥í¡¼¥«¥ë¥³¥Ô¡¼¤òÆÉ¤ß¹þ¤ß\n" #: doc.c:912 msgid "File may be truncated\n" msgstr "¥Õ¥¡¥¤¥ë¤Ï²õ¤ì¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹\n" #: doc.c:936 msgid "Decoding document - OK\n" msgstr "ʸ½ñ¤ò¥Ç¥³¡¼¥É - OK\n" #: doc.c:939 msgid "Decoding document - failed\n" msgstr "ʸ½ñ¤ò¥Ç¥³¡¼¥É - ¼ºÇÔ\n" #: doc.c:942 msgid "Unsupported document encoding\n" msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤Ê¸½ñ¥¨¥ó¥³¡¼¥É\n" #: doc.c:946 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "" "¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿¤¬¥Ç¥³¡¼¥É¤ÏÉԲĤǤ¹(untouched)\n" #: doc.c:1116 #, c-format msgid "Removing improper document : %s\n" msgstr "ÉÔŬÀÚ¤Êʸ½ñ¤ò¾Ãµî : %s\n" #: doc.c:1178 doc.c:1244 msgid "Local file" msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë" #: doc.c:1184 msgid "Gopher/Text File" msgstr "Gopher/¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë" #: doc.c:1187 msgid "Gopher/Directory" msgstr "Gopher/¥Ç¥£¥ì¥¯¥È¥ê" #: doc.c:1190 msgid "Gopher/CSO phone book" msgstr "Gopher/CSO ÅÅÏÃÄ¢" #: doc.c:1193 msgid "Gopher/Error" msgstr "Gopher/¥¨¥é¡¼" #: doc.c:1196 msgid "Gopher/BINHEX" msgstr "Gopher/BINHEX" #: doc.c:1199 msgid "Gopher/DOS bin" msgstr "Gopher/DOS ¥Ð¥¤¥Ê¥ê" #: doc.c:1202 msgid "Gopher/UUencoded" msgstr "" #: doc.c:1205 msgid "Gopher/Search index" msgstr "Gopher/¸¡º÷º÷°ú" #: doc.c:1208 msgid "Gopher/Telnet session" msgstr "Gopher/Telnet ¥»¥Ã¥·¥ç¥ó" #: doc.c:1211 msgid "Gopher/bin" msgstr "Gopher/¥Ð¥¤¥Ê¥ê" #: doc.c:1214 msgid "Gopher/Duplicated server" msgstr "Gopher/½ÅÊ£¤¹¤ë¥µ¡¼¥Ð" #: doc.c:1217 msgid "Gopher/TN3270" msgstr "" #: doc.c:1220 msgid "Gopher/GIF" msgstr "" #: doc.c:1223 msgid "Gopher/Image" msgstr "Gopher/²èÁü" #: doc.c:1229 msgid "FTP/Directory" msgstr "FTP/¥Ç¥£¥ì¥¯¥È¥ê" #: doc.c:1231 msgid "FTP/File" msgstr "FTP/¥Õ¥¡¥¤¥ë" #: doc.c:1235 msgid "FTPS/Directory" msgstr "FTPS/¥Ç¥£¥ì¥¯¥È¥ê" #: doc.c:1237 msgid "FTPS/File" msgstr "FTPS/¥Õ¥¡¥¤¥ë" #: doc.c:1240 msgid "Unsupported type" msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥¿¥¤¥×" #: doc.c:1447 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s] \r" msgstr "" #: doc.c:1450 #, c-format msgid "S: %s [R: %s] [ET: %s] \r" msgstr "" #: doc.c:1490 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "ʸ½ñ¤Î¥í¥Ã¥¯²òÊü¤òÂԤäƤ¤¤Þ¤¹: %s\n" #: doc.c:1730 msgid "Rewriting links inside parent documents" msgstr "¿ÆÊ¸½ñÆâ¤Î¥ê¥ó¥¯¤ò½ñ¤­Ä¾¤·Ãæ" #: errcode.c:21 #, c-format msgid "%s: user break\n" msgstr "%s: ¥æ¡¼¥¶¤Ë¤è¤ëÄä»ß\n" #: errcode.c:28 #, c-format msgid "%s: OK\n" msgstr "" #: errcode.c:31 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s: ¥¨¥é¡¼: ʸ½ñÊݸ\n" #: errcode.c:34 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s: ¥¨¥é¡¼: ʸ½ñ¤ò³«¤¯\n" #: errcode.c:37 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "" "%s: ¥¨¥é¡¼: ¥í¡¼¥«¥ë¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î URL »Ø¼¨¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" #: errcode.c:40 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s: ¥¨¥é¡¼: ÉÔÌÀ\n" #: errcode.c:43 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s: ¥¨¥é¡¼: ʸ½ñ¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹\n" #: errcode.c:46 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s: ¥¨¥é¡¼: ¥½¥±¥Ã¥ÈÆÉ¤ß¹þ¤ß\n" #: errcode.c:49 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: µö¤µ¤ì¤ë¥µ¥¤¥º¤è¤ê¤âÂ礭¤¤\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: user-exit ¥¹¥¯¥ê¥×¥È¾ò·ï¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹\n" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: µö¤µ¤ì¤ëºÇ¾®¥µ¥¤¥º¤è¤ê¤â¾®¤µ¤¤\n" #: errcode.c:58 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: ¤³¤Î MIME ¥¿¥¤¥×¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹ (%s)\n" #: errcode.c:61 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s: ¥¨¥é¡¼: ¥×¥í¥­¥·Àܳ¤Ç¥¨¥é¡¼\n" #: errcode.c:64 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s: ¥¨¥é¡¼: ¥æ¡¼¥¶¤¬Å¾Á÷¤òÄä»ß\n" #: errcode.c:67 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: ¥Õ¥¡¥¤¥ëÊѹ¹»þ´Ö¤¬»ØÄê»þ´Ö´Ö³Ö¤Ë°ìÃפ·¤Þ¤»¤ó\n" #: errcode.c:70 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s: ¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë¤Ï¶õ¤Ç¤¹ - ¤ª¤½¤é¤¯¥¨¥é¡¼¤Ç¤¹\n" #: errcode.c:73 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: ʸ½ñ¤Ï´û¤Ë½èÍýºÑ¤ß\n" #: errcode.c:76 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: ʸ½ñ¤Ï¥æ¡¼¥¶¤Ë¤è¤Ã¤Æ¶Ø»ß¤µ¤ì¤Þ¤·¤¿\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: ʸ½ñ¤ÏÀ©¸Â¥ë¡¼¥ë¤Ë¤è¤Ã¤Æ¶Ø»ß¤µ¤ì¤Þ¤·¤¿\n" #: errcode.c:82 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "%s: ·Ù¹ð: žÁ÷¥ì¡¼¥È¤¬µö¤µ¤ì¤ëÃͤè¤ê¤âÄ㤤¤Ç¤¹\n" #: errcode.c:85 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë¥µ¥¤¥ºÀ©¸Â¤ò±Û¤¨¤¿¤Î¤Ç»Ä¤ê¤Ï²õ¤ì¤¿¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹\n" #: errcode.c:88 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "%s: ·Ù¹ð: žÁ÷ÎÌÀ©¸Â¤ò±Û¤¨¤¿¤Î¤Ç¥À¥¦¥ó¥í¡¼¥É¤òÃæ»ß¤·¤Þ¤¹\n" #: errcode.c:91 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÎÍÆÎ̤¬Â­¤ê¤Ê¤¤¤Î¤ÇžÁ÷¤òÃæ»ß¤·¤Þ¤¹\n" #: errcode.c:94 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "%s: ·Ù¹ð: µö¤µ¤ì¤ëºÇÂç¼Â¹Ô»þ´Ö¤ò±Û¤¨¤¿¤Î¤Ç¥À¥¦¥ó¥í¡¼¥É¤òÃæ»ß¤·¤Þ¤¹\n" #: errcode.c:97 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s: ¥¨¥é¡¼: ÉÔÌÀ¤Ê FTP ¥¨¥é¡¼\n" #: errcode.c:100 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s: ¥¨¥é¡¼: FTP ¥µ¡¼¥Ð¤Ï REST ¥³¥Þ¥ó¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" #: errcode.c:104 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s: ¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥êÆâÍÆ¤ò¥ê¥¹¥Èɽ¼¨¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:107 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s: ¥¨¥é¡¼: FTP ¥µ¡¼¥Ð¤ØÀܳ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:110 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s: ¥¨¥é¡¼: FTP ǧ¾Ú - ÉÔÀµ¤Ê¥æ¡¼¥¶Ì¾\n" #: errcode.c:113 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s: ¥¨¥é¡¼: FTP ǧ¾Ú - ÉÔÀµ¤Ê¥Ñ¥¹¥ï¡¼¥É\n" #: errcode.c:116 #, fuzzy, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "%s: ¥¨¥é¡¼: FTP ǧ¾Ú - ÉÔÀµ¤Ê¥æ¡¼¥¶Ì¾\n" #: errcode.c:119 #, fuzzy, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s: ¥¨¥é¡¼: FTP ǧ¾Ú - ÉÔÀµ¤Ê¥Ñ¥¹¥ï¡¼¥É\n" #: errcode.c:122 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s: ¥¨¥é¡¼: FTP ¥Ç¡¼¥¿Àܳ¤ò³«¤±¤Þ¤»¤ó\n" #: errcode.c:125 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s: ¥¨¥é¡¼: FTP¥µ¡¼¥Ð¤«¤é¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:128 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s: ¥¨¥é¡¼: FTP ¥µ¡¼¥Ð¤Ï MDTM ¥³¥Þ¥ó¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" #: errcode.c:131 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s: ¥¨¥é¡¼: FTP ¥µ¡¼¥Ð¤«¤é¤Î¥Õ¥¡¥¤¥ë¤¬²õ¤ì¤Æ¤¤¤Þ¤¹\n" #: errcode.c:135 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: ºÆ¼èÆÀ¤¬Ì¤´°Î» - ¥Õ¥¡¥¤¥ë¤ÏºÇ¿·¤Ç¤¹\n" #: errcode.c:138 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: FTP žÁ÷¤Ï¥ë¡¼¥ë¤Ë¤è¤Ã¤Æ¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹\n" #: errcode.c:141 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "%s: ·Ù¹ð: FTP ¤Î¥Ç¥£¥ì¥¯¥È¥ê URL ¤Ç¤¹¤¬¡¢¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹(-FTPdir)\n" #: errcode.c:144 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "" #: errcode.c:147 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s: ¥¨¥é¡¼: ÉÔÌÀ¤Ê HTTP ¥¨¥é¡¼\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥µ¡¼¥Ð¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:153 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥µ¡¼¥Ð¤ÏÉôʬŪ¤ÊÆâÍÆ¤Î¼èÆÀ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" #: errcode.c:156 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "%s: ¥¨¥é¡¼: ´Ö°ã¤Ã¤¿ HTTP ¥ê¥¯¥¨¥¹¥È¤òÁ÷½Ð\n" #: errcode.c:159 #, fuzzy, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥ê¥¯¥¨¥¹¥È¥Ç¡¼¥¿¤òÁ÷¤ì¤Þ¤»¤ó\n" #: errcode.c:162 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "" #: errcode.c:166 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥ê¥¯¥¨¥¹¥È¥Ç¡¼¥¿¤òÁ÷¤ì¤Þ¤»¤ó\n" #: errcode.c:169 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s: ¥á¥Ã¥»¡¼¥¸: ¾¤Î¾ì½ê¤Ø¥ê¥À¥¤¥ì¥¯¥È\n" #: errcode.c:172 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s: ¥¨¥é¡¼: HTTP ʸ½ñ¤Ï²õ¤ì¤Æ¤¤¤Þ¤¹\n" #: errcode.c:175 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s: ¥¨¥é¡¼: ½Û´Ä¤¹¤ë¥ê¥À¥¤¥ì¥¯¥È!\n" #: errcode.c:178 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s: ¥¨¥é¡¼: ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ URL ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s: ¥¨¥é¡¼: ¥×¥í¥­¥·¥µ¡¼¥Ð¤ØÀܳ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:184 #, fuzzy, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "%s: ¥¨¥é¡¼: ʸ½ñ¤Ï HTTP ¥µ¡¼¥Ð¤«¤éºï½ü¤µ¤ì¤Þ¤·¤¿\n" #: errcode.c:187 #, fuzzy, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "%s: ¥¨¥é¡¼: FTP ¥Ç¡¼¥¿Àܳ¤ò³«¤±¤Þ¤»¤ó\n" #: errcode.c:190 #, fuzzy, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥ê¥¯¥¨¥¹¥È¥Ç¡¼¥¿¤òÁ÷¤ì¤Þ¤»¤ó\n" #: errcode.c:193 #, fuzzy, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "%s: ¥¨¥é¡¼: FTP ¥Ç¡¼¥¿Àܳ¤ò³«¤±¤Þ¤»¤ó\n" #: errcode.c:196 #, fuzzy, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥ê¥¯¥¨¥¹¥È¥Ç¡¼¥¿¤òÁ÷¤ì¤Þ¤»¤ó\n" #: errcode.c:199 #, fuzzy, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥¯¥é¥¤¥¢¥ó¥È¤ÏÉÔÀµ¤Ê¥ê¥¯¥¨¥¹¥È¤òÁ÷½Ð\n" #: errcode.c:202 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s: ¥¨¥é¡¼: HTTP ǧ¾Ú¤¬É¬ÍפǤ¹\n" #: errcode.c:205 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥×¥í¥­¥·Ç§¾Ú¤¬É¬ÍפǤ¹\n" #: errcode.c:208 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "%s: ¥¨¥é¡¼: HTTP »Ùʧ¤¬É¬ÍפǤ¹\n" #: errcode.c:211 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "%s: ¥¨¥é¡¼: ±£Ê䵤줿 HTTP ¥ê¥¯¥¨¥¹¥È\n" #: errcode.c:214 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s: ¥¨¥é¡¼: HTTP ʸ½ñ¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó\n" #: errcode.c:217 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥ê¥â¡¼¥È¥µ¡¼¥Ð¥¨¥é¡¼\n" #: errcode.c:220 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥µ¡¼¥Ð¤ÏÀܳ¥¿¥¤¥à¥¢¥¦¥È±þÅú¤òÊÖ¤·¤Þ¤·¤¿\n" #: errcode.c:223 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥µ¡¼¥Ð¤Ï conflict ±þÅú¤òÊÖ¤·¤Þ¤·¤¿\n" #: errcode.c:226 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s: ¥¨¥é¡¼: ʸ½ñ¤Ï HTTP ¥µ¡¼¥Ð¤«¤éºï½ü¤µ¤ì¤Þ¤·¤¿\n" #: errcode.c:229 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "" #: errcode.c:232 #, fuzzy, c-format msgid "%s: ERROR: 306\n" msgstr "%s: ¥¨¥é¡¼: ÉÔÌÀ\n" #: errcode.c:235 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" #: errcode.c:238 #, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "" #: errcode.c:241 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "" #: errcode.c:244 #, fuzzy, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "%s: ¥¨¥é¡¼: ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ URL ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È\n" #: errcode.c:247 #, fuzzy, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s: ¥¨¥é¡¼: ¥×¥í¥­¥·¥µ¡¼¥Ð¤ØÀܳ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:250 #, fuzzy, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s: ¥¨¥é¡¼: ´Ö°ã¤Ã¤¿ HTTP ¥ê¥¯¥¨¥¹¥È¤òÁ÷½Ð\n" #: errcode.c:253 #, fuzzy, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "%s: ¥¨¥é¡¼: ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ URL ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È\n" #: errcode.c:256 #, fuzzy, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s: ¥¨¥é¡¼: ʸ½ñÊݸ\n" #: errcode.c:259 #, fuzzy, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "%s: ¥¨¥é¡¼: FTP¥µ¡¼¥Ð¤«¤é¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:262 #, fuzzy, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥ê¥â¡¼¥È¥µ¡¼¥Ð¥¨¥é¡¼\n" #: errcode.c:265 #, fuzzy, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s: ¥¨¥é¡¼: ʸ½ñ¤ò³«¤¯\n" #: errcode.c:268 #, fuzzy, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥µ¡¼¥Ð¤ÏÉôʬŪ¤ÊÆâÍÆ¤Î¼èÆÀ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" #: errcode.c:271 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "" #: errcode.c:274 #, fuzzy, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "%s: ¥¨¥é¡¼: HTTP ¥µ¡¼¥Ð¤ÏÉôʬŪ¤ÊÆâÍÆ¤Î¼èÆÀ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" #: errcode.c:277 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s: ¥¨¥é¡¼: Gopher ¥µ¡¼¥Ð¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%s: ¥¨¥é¡¼: ÉÔÌÀ¤Ê Gopher ¥¨¥é¡¼\n" #: errcode.c:283 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s: ¥¨¥é¡¼: HTTPS ¥µ¡¼¥Ð¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:286 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "%s: ¥¨¥é¡¼: FTPS ¥µ¡¼¥Ð¤È SSL ¥³¥ó¥È¥í¡¼¥ëÀܳ¤ò³ÎΩ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:289 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s: ¥¨¥é¡¼: ¤³¤Î FTP ¥µ¡¼¥Ð¤Ï SSL Àܳ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n" #: errcode.c:292 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "%s: ¥¨¥é¡¼: FTPS ¥µ¡¼¥Ð¤È SSL ¥Ç¡¼¥¿Àܳ¤ò³ÎΩ¤Ç¤­¤Þ¤»¤ó\n" #: errcode.c:295 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s: ¥¨¥é¡¼: ÉÔÌÀ¤Ê¥¨¥é¡¼¥³¡¼¥É: %d\n" #: file.c:35 msgid "Can't open directory\n" msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤ò³«¤±¤Þ¤»¤ó\n" #: form.c:1074 form.c:1139 form.c:1296 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "¥³¥ó¥Æ¥­¥¹¥ÈÆâ¤Ë¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥¿¥¤¥×: %d\n" #: form.c:1395 msgid "Browse" msgstr "±ÜÍ÷" #: form.c:1410 msgid "URLs with forms" msgstr "¥Õ¥©¡¼¥àÉÕ¤­ URL" #: form.c:1419 msgid "Refresh URL list" msgstr "URL ¥ê¥¹¥È¤ò¹¹¿·" #: form.c:1453 form.c:1454 url.c:1002 msgid "unknown" msgstr "ÉÔÌÀ" #: form.c:1604 msgid "Pavuk: load form file" msgstr "Pavuk: ¥Õ¥©¡¼¥à¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ß" #: form.c:1628 msgid "Fill forms" msgstr "¥Õ¥¡¥¤¥ë¥Õ¥©¡¼¥à" #: form.c:1635 msgid "Form number: " msgstr "¥Õ¥©¡¼¥àÈÖ¹æ" #: form.c:1647 msgid "Action URL: " msgstr "¥¢¥¯¥·¥ç¥ó URL: " #: form.c:1656 gui_common.c:706 msgid "Request method: " msgstr "¥ê¥¯¥¨¥¹¥ÈÊýË¡: " #: form.c:1665 gui_common.c:725 gui_tree.c:140 msgid "Request encoding: " msgstr "¥ê¥¯¥¨¥¹¥È¥¨¥ó¥³¡¼¥É: " #: form.c:1674 msgid "HTML form content" msgstr "HTML ¥Õ¥©¡¼¥àÆâÍÆ" #: form.c:1689 msgid "Load HTML file ..." msgstr "HTML ¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ßÃæ ..." #: form.c:1742 msgid "Pavuk: HTML forms editor" msgstr "Pavuk: HTML ¥Õ¥©¡¼¥à¥¨¥Ç¥£¥¿" #: form.c:1764 gui_jscons.c:192 msgid "Close" msgstr "ÊĤ¸¤ë" #: ftp.c:118 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "" "ftp_get_response: ²¿¤é±þÅú¤Ê¤·¤Ë ftp ¥³¥ó¥È¥í¡¼¥ëÀܳ¤¬ÊĤ¸¤é¤ì¤Þ¤·¤¿\n" #: ftp.c:189 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "ftp: setsockopt TOS - THROUGHPUT ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" #: ftp.c:551 msgid "Re-using established FTP control connection\n" msgstr "³ÎΩ¤µ¤ì¤¿ FTP ¥³¥ó¥È¥í¡¼¥ëÀܳ¤òºÆÍøÍѤ·¤Þ¤¹\n" #: ftp.c:758 http.c:1392 msgid "Size differs, regeting whole\n" msgstr "¥µ¥¤¥º¤¬°ã¤¦¤Î¤Ç¤¹¤Ù¤ÆºÆ¼èÆÀÃæ\n" #: ftp.c:768 http.c:1278 http.c:1402 msgid "Modified from last download - regeting whole\n" msgstr "ºÇ¸å¤Î¥À¥¦¥ó¥í¡¼¥É¤«¤é¤ÎÊѹ¹ - ¤¹¤Ù¤ÆºÆ¼èÆÀÃæ\n" #: ftp.c:849 msgid "" "Warning: FTP server undertand REST command, but can't handle it properly.\n" msgstr "" #: ftp.c:1094 ftp.c:1421 #, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%d%s\n" "\n" "\n" "

                                  List of FTP directory %s://%s:%d/%s


                                    " msgstr "" #: ftp.c:1490 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" "¥¨¥é¡¼: FTP ¥ê¥¹¥È¹Ô¤ò²òÀϤǤ­¤Þ¤»¤ó:\n" "\t%s\n" #: ftp.c:1683 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "\"%s\" ¤«¤é \"%s\" ¤Ø¤Î¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤òÀ¸À®Ãæ\n" #: gauthinfo.c:107 msgid "Pavuk: Save auth. info file" msgstr "Pavuk: auth. ¾ðÊó¥Õ¥¡¥¤¥ë¤òÊݸ" #: gauthinfo.c:159 msgid "Pavuk: Load auth. info file" msgstr "Pavuk: auth. ¾ðÊó¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ß" #: gauthinfo.c:340 msgid "Pavuk: Authorization info editor" msgstr "Pavuk: ǧ¾Ú¾ðÊ󥨥ǥ£¥¿" #: gauthinfo.c:359 msgid "Protocol" msgstr "¥×¥í¥È¥³¥ë" #: gauthinfo.c:360 gui_common.c:1819 msgid "Host" msgstr "¥Û¥¹¥È" #: gauthinfo.c:361 msgid "User" msgstr "¥æ¡¼¥¶" #: gauthinfo.c:362 msgid "Password" msgstr "¥Ñ¥¹¥ï¡¼¥É" #: gauthinfo.c:363 msgid "Base dir." msgstr "´ðËܥǥ£¥ì¥¯¥È¥ê" #: gauthinfo.c:364 msgid "Realm" msgstr "Realm" #: gauthinfo.c:365 msgid "Scheme" msgstr "ÊýË¡" #: gauthinfo.c:394 msgid "Protocol: " msgstr "¥×¥í¥È¥³¥ë: " #: gauthinfo.c:419 gui_common.c:1837 gui_common.c:1898 gui_common.c:1921 #: gui_common.c:1950 msgid "Host: " msgstr "¥Û¥¹¥È: " #: gauthinfo.c:428 msgid "User: " msgstr "¥æ¡¼¥¶: " #: gauthinfo.c:437 gui_common.c:2120 gui_common.c:2170 gui_common.c:2194 msgid "Password: " msgstr "¥Ñ¥¹¥ï¡¼¥É: " #: gauthinfo.c:446 msgid "Base directory: " msgstr "´ðËܥǥ£¥ì¥¯¥È¥ê: " #: gauthinfo.c:455 msgid "Realm: " msgstr "Realm: " #: gauthinfo.c:473 gui_common.c:2064 msgid "User auth. scheme" msgstr "¥æ¡¼¥¶Ç§¾ÚÊýË¡" #: gauthinfo.c:478 msgid "Base auth. scheme" msgstr "´ðËÜǧ¾ÚÊýË¡" #: gauthinfo.c:483 gui_common.c:2066 msgid "Digest auth. scheme" msgstr "¥À¥¤¥¸¥§¥¹¥Èǧ¾ÚÊýË¡" #: gauthinfo.c:489 gui_common.c:2068 #, fuzzy msgid "NTLM auth. scheme" msgstr "¥æ¡¼¥¶Ç§¾ÚÊýË¡" #: gauthinfo.c:500 gui_addurl.c:171 gui_common.c:629 gui_common.c:778 #: gui_common.c:957 gui_common.c:1057 gui_common.c:1847 gui_common.c:2620 #: gui_common.c:2868 gui_tools.c:648 msgid "Append" msgstr "ÄɲÃ" #: gauthinfo.c:508 gui_common.c:645 gui_common.c:785 gui_common.c:973 #: gui_common.c:1064 gui_common.c:1853 gui_common.c:2626 gui_common.c:2874 #: gui_tools.c:670 msgid "Modify" msgstr "Êѹ¹" #: gauthinfo.c:516 gui_common.c:654 gui_common.c:982 gui_common.c:1859 #: gui_common.c:2632 gui_common.c:2880 gui_tools.c:683 msgid "Clear" msgstr "¥¯¥ê¥¢" #: gauthinfo.c:524 gui_common.c:663 gui_common.c:792 gui_common.c:991 #: gui_common.c:1071 gui_common.c:1865 gui_common.c:2638 gui_common.c:2886 #: gui_tools.c:696 msgid "Delete" msgstr "¾Ãµî" #: gauthinfo.c:537 gui_common.c:2963 gui_limits.c:512 gui_sched.c:131 msgid "OK" msgstr "λ²ò" #: gauthinfo.c:548 gui_common.c:2972 gui_limits.c:521 msgid "Apply" msgstr "ŬÍÑ" #: gauthinfo.c:556 msgid "Load" msgstr "ÆÉ¤ß¹þ¤ß" #: gauthinfo.c:564 msgid "Save" msgstr "Êݸ" #: gauthinfo.c:575 gui_about.c:67 gui_addurl.c:180 gui_common.c:2988 #: gui_limits.c:537 gui_sched.c:140 gui_tree.c:657 gui_tree.c:797 stats.c:507 msgid "Cancel" msgstr "¥­¥ã¥ó¥»¥ë" #: gkeys.c:64 gkeys.c:82 gkeys.c:95 #, c-format msgid "Unable to parse: %s\n" msgstr "²òÀÏÉÔǽ: %s\n" #: gkeys.c:117 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "~/.pavuk_keys ¥Õ¥¡¥¤¥ë¤òÀ¸À®¤Ç¤­¤Þ¤»¤ó\n" #: gkeys.c:121 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï %s ¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤Þ¤·¤¿¡£\n" "# ÊÔ½¸¤¹¤ë¤È¤­¤ÏÃí°Õ¤·¤Æ²¼¤µ¤¤ !\n" "\n" #: gopher.c:65 msgid "********************* Gopher request **************\n" msgstr "********************* Gopher ¥ê¥¯¥¨¥¹¥È **************\n" #: gopher.c:103 #, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%d/%s\n" "\n" "\n" "

                                    Directory of gopher://%s:%d/%s



                                      " msgstr "" #: gopher.c:151 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" #: gui_about.c:38 msgid "Pavuk: About" msgstr "Pavuk: ³µÍ×" #: gui_about.c:60 #, c-format msgid "" "Pavuk %s %s\n" " \n" "an automatic WEB file grabber\n" " \n" "By Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " msgstr "" "Pavuk %s %s\n" " \n" "¼«Æ° WEB ¥Õ¥¡¥¤¥ë¥°¥é¥Ð¡¼\n" " \n" "Stefan Ondrejicka ºî\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " #: gui_api.c:168 #, c-format msgid "Processed: %5d" msgstr "¥×¥í¥È¥³¥ë: %5d" #: gui_api.c:170 #, c-format msgid "Queued: %5d" msgstr "¥­¥å¡¼: %5d" #: gui_api.c:172 #, c-format msgid "Failed: %4d" msgstr "¼ºÇÔ: %4d" #: gui_api.c:174 #, c-format msgid "Rejected: %5d" msgstr "µñÈÝ: %5d" #: gui_api.c:475 gui_api.c:492 msgid "Start" msgstr "³«»Ï" #: gui_api.c:616 msgid "Starting ..." msgstr "³«»Ï ..." #: gui_api.c:681 #, fuzzy msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "Àܳ¤Î GUI ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¼ÂÁõ¤ËÂФ·¤Æ¥¿¥¤¥à¥¢¥¦¥È»þ´Ö¤¬Ä¹¤¹¤®¤Þ¤¹\n" #: gui_addurl.c:73 gui_main.c:270 #, c-format msgid "Dropped URL : %s\n" msgstr "¥À¥¦¥ó¥í¡¼¥É¤·¤¿ URL : %s\n" #: gui_addurl.c:128 msgid "Pavuk: Append URL" msgstr "Pavuk: Äɲà URL" #: gui_addurl.c:140 msgid "New URL:" msgstr "¿·µ¬ URL:" #: gui_common.c:580 gui_common.c:596 gui_main.c:803 msgid "URL" msgstr "" #: gui_common.c:597 msgid "Local filename" msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾" #: gui_common.c:616 msgid "Request URL: " msgstr "¥ê¥¯¥¨¥¹¥È URL: " #: gui_common.c:619 msgid "Local filename: " msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾: " #: gui_common.c:687 msgid "Extended informations for HTTP POST request" msgstr "HTTP POST ¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë³ÈÄ¥¾ðÊó" #: gui_common.c:744 gui_common.c:1023 msgid "Query fields: " msgstr "¥­¥å¡¼¥Õ¥£¡¼¥ë¥É: " #: gui_common.c:758 gui_common.c:1037 gui_common.c:2563 msgid "Type" msgstr "¥¿¥¤¥×" #: gui_common.c:759 gui_common.c:1038 msgid "Name" msgstr "̾Á°" #: gui_common.c:760 gui_common.c:1039 msgid "Value" msgstr "ÃÍ" #: gui_common.c:804 gui_common.c:1083 msgid "Type: " msgstr "¥¿¥¤¥×: " #: gui_common.c:833 gui_common.c:1112 msgid "Name: " msgstr "̾Á°: " #: gui_common.c:835 gui_common.c:1114 msgid "Value: " msgstr "ÃÍ: " #: gui_common.c:865 gui_common.c:1144 msgid "Pavuk: Choose form field file" msgstr "Pavuk: ¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É¥Õ¥¡¥¤¥ë¤òÁªÂò" #: gui_common.c:914 msgid "Form data" msgstr "¥Õ¥©¡¼¥à¥Ç¡¼¥¿" #: gui_common.c:942 msgid "Matching action URL: " msgstr "°ìÃ×¥¢¥¯¥·¥ç¥ó URL: " #: gui_common.c:1206 msgid "Grabber I" msgstr "¥°¥é¥Ð¡¼ I" #: gui_common.c:1214 msgid "Cache Directory: " msgstr "¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê: " #: gui_common.c:1217 msgid "Default URL prefix: " msgstr "" #: gui_common.c:1220 #, fuzzy msgid "Separate info directory: " msgstr "´ðËܥǥ£¥ì¥¯¥È¥ê: " #: gui_common.c:1223 msgid "Index file name: " msgstr "º÷°ú¥Õ¥¡¥¤¥ë̾: " #: gui_common.c:1226 msgid "Store file name: " msgstr "Êݸ¤¹¤ë¥Õ¥¡¥¤¥ë̾: " #: gui_common.c:1229 msgid "Identity string: " msgstr "¼±ÊÌʸ»úÎó: " #: gui_common.c:1233 msgid "Netscape browser cache directory: " msgstr "Netscape ¥Ö¥é¥¦¥¶¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê: " #: gui_common.c:1236 #, fuzzy msgid "Mozilla browser cache directory: " msgstr "Netscape ¥Ö¥é¥¦¥¶¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê: " #: gui_common.c:1241 msgid "Browser: " msgstr "¥Ö¥é¥¦¥¶: " #: gui_common.c:1245 msgid "Reminder command: " msgstr "reminder ¥³¥Þ¥ó¥É: " #: gui_common.c:1248 msgid "Post command: " msgstr "POST ¥³¥Þ¥ó¥É: " #: gui_common.c:1264 msgid "How many times retry on fail: " msgstr "¼ºÇÔ¤·¤¿¤È¤­¤ÎºÆ»î¹Ô²ó¿ô: " #: gui_common.c:1267 msgid "How many moved links to follow: " msgstr "Ϣ³¤¹¤ë¥ê¥ó¥¯¤ò°Üư¤¹¤ë²ó¿ô: " #: gui_common.c:1270 msgid "How many times to reget file: " msgstr "¥Õ¥¡¥¤¥ë¤òºÆ¼èÆÀ¤¹¤ë¤Þ¤Ç¤Î»þ´Ö: " #: gui_common.c:1273 msgid "Document age before syncing with server: " msgstr "¥µ¡¼¥Ð¤ÈƱ´ü¤µ¤»¤ë¤Þ¤Ç¤Îʸ½ñ¤Î¼÷Ì¿: " #: gui_common.c:1275 msgid " days " msgstr " Æü " #: gui_common.c:1281 msgid "Read buffer size: " msgstr "ÆÉ¤ß¹þ¤ß¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º: " #: gui_common.c:1286 msgid " kB " msgstr "" #: gui_common.c:1292 msgid "Hash tables size: " msgstr "¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¥µ¥¤¥º: " #: gui_common.c:1294 msgid " entries " msgstr "" #: gui_common.c:1308 msgid "Sleep time between transfers: " msgstr "žÁ÷´Ö¤ÎµÙ»ß»þ´Ö: " #: gui_common.c:1310 msgid " sec." msgstr " ÉÃ" #: gui_common.c:1315 msgid "randomize" msgstr "" #: gui_common.c:1321 msgid "Rollback amount on reget: " msgstr "ºÆ¼èÆÀ¤Ç¤Î´¬¤­ÊÖ¤·ÎÌ: " #: gui_common.c:1323 msgid " bytes" msgstr " ¥Ð¥¤¥È" #: gui_common.c:1329 msgid "Transfer quota: " msgstr "žÁ÷ÎÌÀ©¸Â: " #: gui_common.c:1331 gui_common.c:1339 gui_common.c:1348 msgid " kB" msgstr "" #: gui_common.c:1337 msgid "File size quota: " msgstr "¥Õ¥¡¥¤¥ë¥µ¥¤¥ºÀ©¸Â: " #: gui_common.c:1346 msgid "Filesystem freespace quota: " msgstr "¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥Õ¥ê¡¼¥¹¥Ú¡¼¥¹À©¸Â: " #: gui_common.c:1364 msgid "Number of downloading threads: " msgstr "¥À¥¦¥ó¥í¡¼¥É¥¹¥ì¥Ã¥É¿ô: " #: gui_common.c:1392 msgid "Grabber II" msgstr "¥°¥é¥Ð¡¼ II" #: gui_common.c:1395 msgid "HTML document URL rewriting" msgstr "HTML ʸ½ñ URL ½ñ¤­Ä¾¤·" #: gui_common.c:1404 msgid "Rewrite URLs inside HTML doc." msgstr "HTML ʸ½ñÆâ¤Î URL ¤ò½ñ¤­Ä¾¤·" #: gui_common.c:1412 msgid "Rewrite URLs to local when stored locally" msgstr "¥í¡¼¥«¥ë¤ÎÊݸ¤¹¤ë¤È¤­¤Ë URL ¤ò¥í¡¼¥«¥ë¤Ë½ñ¤­Ä¾¤¹" #: gui_common.c:1418 msgid "Rewrite all suitable URLs to local" msgstr "¤¹¤Ù¤Æ¤ÎŬÀÚ¤Ê URL ¤ò¥í¡¼¥«¥ë¤Ë½ñ¤­Ä¾¤¹" #: gui_common.c:1424 msgid "Rewrite all URLs to local immediately" msgstr "¤¹¤Ù¤Æ¤Î URL ¤ò¥í¡¼¥«¥ë¤Ë¨ºÂ¤Ë½ñ¤­Ä¾¤¹" #: gui_common.c:1430 msgid "Rewrite all URLs to remote immediately" msgstr "¤¹¤Ù¤Æ¤Î URL ¤ò¥ê¥â¡¼¥È¤Ë¨ºÂ¤Ë½ñ¤­Ä¾¤¹" #: gui_common.c:1436 msgid "Rewrite only one currently download URL" msgstr "" #: gui_common.c:1442 msgid "Misc settings" msgstr "¤½¤Î¾¤ÎÀßÄê" #: gui_common.c:1451 msgid "Always generate unique name for document" msgstr "¾ï¤Ëʸ½ñ¤Ë¤Ä¤¤¤Æ¸ÇÍ­¤Ê̾Á°¤òÀ¸À®" #: gui_common.c:1456 msgid "Delete FTP document after succesful download" msgstr "¥À¥¦¥ó¥í¡¼¥ÉÀ®¸ù¸å¤Ë FTP ʸ½ñ¤ò¾Ãµî" #: gui_common.c:1461 msgid "Preserve document modification time" msgstr "ʸ½ñ¤ÎÊѹ¹»þ´Ö¤òÊÝ»ý" #: gui_common.c:1466 msgid "Preserve FTP document permissions" msgstr "FTP ʸ½ñ¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÊÝ»ý" #: gui_common.c:1471 #, fuzzy msgid "Preserve FTP symbolic links paths" msgstr "FTP ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤òÊÝ»ý" #: gui_common.c:1476 #, fuzzy msgid "Retrieve FTP symbolic links like files" msgstr "FTP ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤òÊÝ»ý" #: gui_common.c:1482 msgid "Whole reget when partial not supported" msgstr "ÉôʬŪ¤Ê¼èÆÀ¤¬¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¤È¤­¤Ë¤¹¤Ù¤Æ¤òºÆ¼èÆÀ" #: gui_common.c:1488 msgid "Use gzip encoding for transfer" msgstr "žÁ÷¤Î¤µ¤¤¤Ë gzip ¥¨¥ó¥³¡¼¥É¤ò»ÈÍÑ" #: gui_common.c:1493 msgid "Remove improper documents" msgstr "ÉÔŬÀÚ¤Êʸ½ñ¤ò¾Ãµî" #: gui_common.c:1498 msgid "Check transferred size of document" msgstr "ʸ½ñ¤ÎžÁ÷¥µ¥¤¥º¤ò¥Á¥§¥Ã¥¯" #: gui_common.c:1503 msgid "Store directory URLs as index files" msgstr "¥Ç¥£¥ì¥¯¥È¥ê URL ¤ò index ¥Õ¥¡¥¤¥ë¤È¤·¤ÆÊݸ" #: gui_common.c:1508 msgid "Store info files with each document" msgstr "³ÆÊ¸½ñ¤Ë¤Ä¤¤¤Æ¾ðÊó¥Õ¥¡¥¤¥ë¤òÊݸ" #: gui_common.c:1513 msgid "Send self URL as Referer for starting URLs" msgstr "³«»Ï URL ¤ËÂФ¹¤ë Referer ¤È¤·¤Æ URL ¼«¿È¤òÁ÷¤ë" #: gui_common.c:1518 msgid "Send If-Range header field when regeting" msgstr "ºÆ¼èÆÀ¤Î¤È¤­¤Ë If-Range ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òÁ÷¤ë" #: gui_common.c:1523 msgid "Show time of start and end of downloading" msgstr "¥À¥¦¥ó¥í¡¼¥É¤Î³«»Ï¡¢½ªÎ»¤Î»þ´Ö¤òɽ¼¨" #: gui_common.c:1531 msgid "URL scheduling strategy: " msgstr "URL ½ä²ó·×²è: " #: gui_common.c:1628 msgid "Net" msgstr "¥Í¥Ã¥È" #: gui_common.c:1635 msgid "Allowed protocols" msgstr "²Äǽ¤Ê¥×¥í¥È¥³¥ë" #: gui_common.c:1644 msgid "HTTP" msgstr "" #: gui_common.c:1649 msgid "FTP" msgstr "" #: gui_common.c:1654 msgid "Gopher" msgstr "" #: gui_common.c:1660 msgid "HTTPS" msgstr "" #: gui_common.c:1665 msgid "FTPS" msgstr "" #: gui_common.c:1671 msgid "FTP data connection type " msgstr "FTP ¥Ç¡¼¥¿Àܳ¥¿¥¤¥× " #: gui_common.c:1680 msgid "Active" msgstr "¥¢¥¯¥Æ¥£¥Ö" #: gui_common.c:1687 msgid "Passive" msgstr "" #: gui_common.c:1694 msgid "Communication timeout: " msgstr "Àܳ¥¿¥¤¥à¥¢¥¦¥È: " #: gui_common.c:1707 msgid " min." msgstr " ʬ" #: gui_common.c:1713 msgid "Maximal transfer rate: " msgstr "ºÇÂçžÁ÷¥ì¡¼¥È: " #: gui_common.c:1726 gui_common.c:1745 msgid " kB/s" msgstr "" #: gui_common.c:1732 msgid "Minimal transfer rate: " msgstr "ºÇÄãžÁ÷¥ì¡¼¥È: " #: gui_common.c:1751 msgid "Local interface address: " msgstr "¥í¡¼¥«¥ë¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥¢¥É¥ì¥¹: " #: gui_common.c:1762 msgid "Additional HTTP headers: " msgstr "Äɲà HTTP ¥Ø¥Ã¥À: " #: gui_common.c:1773 #, fuzzy msgid "Additional FTP list options: " msgstr "Äɲà HTTP ¥Ø¥Ã¥À: " #: gui_common.c:1786 msgid "Use wide listing of FTP directories" msgstr "FTP ¥Ç¥£¥ì¥¯¥È¥ê¤Î¾ÜºÙ¥ê¥¹¥È¤òÍøÍÑ" #: gui_common.c:1792 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "" #: gui_common.c:1798 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "HTTP Àܳ¤Ë HTTP/1.1 ¥×¥í¥È¥³¥ë¤ò»ÈÍÑ" #: gui_common.c:1804 msgid "FTP login handshake rules" msgstr "" #: gui_common.c:1820 msgid "Login handshake" msgstr "" #: gui_common.c:1840 msgid "Handshake: " msgstr "" #: gui_common.c:1882 msgid "Proxy" msgstr "¥×¥í¥­¥·" #: gui_common.c:1888 msgid "Gopher proxy" msgstr "Gopher ¥×¥í¥­¥·" #: gui_common.c:1901 gui_common.c:1924 gui_common.c:1953 msgid "Port: " msgstr "¥Ý¡¼¥È: " #: gui_common.c:1905 msgid "Gopher via HTTP proxy" msgstr "HTTP ¥×¥í¥­¥·¤ò²ð¤·¤¿ Gopher" #: gui_common.c:1910 msgid "FTP proxy" msgstr "FTP ¥×¥í¥­¥·" #: gui_common.c:1927 msgid "FTP via HTTP proxy" msgstr "HTTP ¥×¥í¥­¥·¤ò²ð¤·¤¿ FTP" #: gui_common.c:1933 msgid "FTP via HTTP tunneling proxy" msgstr "HTTP ¥È¥ó¥Í¥ë¥×¥í¥­¥·¤ò²ð¤·¤¿ FTP" #: gui_common.c:1940 msgid "SSL proxy" msgstr "SSL ¥×¥í¥­¥·" #: gui_common.c:1957 msgid "HTTP proxy" msgstr "HTTP ¥×¥í¥­¥·" #: gui_common.c:1963 msgid "Proxy: " msgstr "¥×¥í¥­¥·: " #: gui_common.c:1968 msgid "Allow caching of documents" msgstr "ʸ½ñ¤Î¥­¥ã¥Ã¥·¥å¤òµö²Ä" #: gui_common.c:2023 msgid "Languages" msgstr "¸À¸ì" #: gui_common.c:2026 msgid "Preffered languages" msgstr "" #: gui_common.c:2031 #, fuzzy msgid "Language code: " msgstr "¸À¸ì" #: gui_common.c:2043 #, fuzzy msgid "Preffered character sets" msgstr "¥­¥ã¥é¥¯¥¿¥»¥Ã¥È" #: gui_common.c:2048 #, fuzzy msgid "Character set code: " msgstr "¥­¥ã¥é¥¯¥¿¥»¥Ã¥È: " #: gui_common.c:2065 #, fuzzy msgid "Basic auth. scheme" msgstr "´ðËÜǧ¾ÚÊýË¡" #: gui_common.c:2075 msgid "Auth" msgstr "ǧ¾Ú" #: gui_common.c:2082 #, fuzzy msgid "User authentification" msgstr "HTTP ¥æ¡¼¥¶Ç§¾Ú" #: gui_common.c:2091 gui_common.c:2140 #, fuzzy msgid "Scheme: " msgstr "ÊýË¡" #: gui_common.c:2117 gui_common.c:2167 gui_common.c:2191 #, fuzzy msgid "User name: " msgstr "¥æ¡¼¥¶: " #: gui_common.c:2123 gui_common.c:2173 #, fuzzy msgid "NTLM domain: " msgstr "¥É¥á¥¤¥ó: " #: gui_common.c:2126 gui_common.c:2176 msgid "Reuse HTTP Digest access nonce" msgstr "Î×»þ HTTP ¥À¥¤¥¸¥§¥¹¥È¥¢¥¯¥»¥¹¤òºÆÍøÍÑ" #: gui_common.c:2131 msgid "HTTP proxy user authentification" msgstr "HTTP ¥×¥í¥­¥·¥æ¡¼¥¶Ç§¾Ú" #: gui_common.c:2181 #, fuzzy msgid "FTP proxy user authentification" msgstr "HTTP ¥×¥í¥­¥·¥æ¡¼¥¶Ç§¾Ú" #: gui_common.c:2196 msgid "Misc" msgstr "" #: gui_common.c:2210 msgid "E-mail address: " msgstr "E-mail ¥¢¥É¥ì¥¹: " #: gui_common.c:2212 msgid "Send From: header with HTTP request" msgstr "Send From: HTTP ¥ê¥¯¥¨¥¹¥È¤òȼ¤¦¥Ø¥Ã¥À" #: gui_common.c:2226 msgid "SSL" msgstr "" #: gui_common.c:2229 msgid "SSL client certificate" msgstr "SSL ¥¯¥é¥¤¥¢¥ó¥È¾ÚÌÀ" #: gui_common.c:2238 msgid "Certificate password: " msgstr "¾ÚÌÀ¥Ñ¥¹¥ï¡¼¥É: " #: gui_common.c:2241 msgid "Certificate PEM file: " msgstr "¾ÚÌÀ PEM ¥Õ¥¡¥¤¥ë: " #: gui_common.c:2244 msgid "Certificate key file: " msgstr "¾ÚÌÀ¥­¡¼¥Õ¥¡¥¤¥ë: " #: gui_common.c:2247 msgid "List of preffered ciphers: " msgstr "ÍøÍѤ·¤¿¤¤°Å¹æ¤Î¥ê¥¹¥È: " #: gui_common.c:2253 msgid "SSL protocol version" msgstr "SSL ¥×¥í¥È¥³¥ë¥Ð¡¼¥¸¥ç¥ó" #: gui_common.c:2261 msgid "SSLv23" msgstr "" #: gui_common.c:2267 msgid "SSLv2" msgstr "" #: gui_common.c:2273 msgid "SSLv3" msgstr "" #: gui_common.c:2280 msgid "TLSv1" msgstr "" #: gui_common.c:2287 #, fuzzy msgid "Miscelanous SSL settings" msgstr "¤½¤Î¾¤ÎÀßÄê" #: gui_common.c:2297 msgid "EGD daemon socket path: " msgstr "" #: gui_common.c:2301 msgid "Unique ID for all SSL sessions" msgstr "¤¹¤Ù¤Æ¤Î SSL ¥»¥Ã¥·¥ç¥ó¤ËÂФ·¤Æ¸ÇÍ­¤Î ID" #: gui_common.c:2316 gui_main.c:1896 msgid "Log" msgstr "¥í¥°" #: gui_common.c:2323 msgid "Try to find unique name, when original log file locked" msgstr "" "¥ª¥ê¥¸¥Ê¥ë¥í¥°¥Õ¥¡¥¤¥ë¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë¤È¤­¤Ë¸Çͭ̾¤ò¤ß¤Ä¤±¤ë¤³¤È¤ò»î¤ß¤ë" #: gui_common.c:2328 msgid "Log file: " msgstr "¥í¥°¥Õ¥¡¥¤¥ë: " #: gui_common.c:2331 msgid "Shortlog file: " msgstr "´Ê°×¥í¥°¥Õ¥¡¥¤¥ë: " #: gui_common.c:2334 msgid "Log window length: " msgstr "¥í¥°¥¦¥£¥ó¥É¥¦Ä¹: " #: gui_common.c:2347 msgid "Cookies" msgstr "" #: gui_common.c:2350 msgid "Disabled cookie domains" msgstr "cookie ¥É¥á¥¤¥ó¤ò¶Ø»ß" #: gui_common.c:2355 gui_limits.c:247 msgid "Domain: " msgstr "¥É¥á¥¤¥ó: " #: gui_common.c:2358 #, fuzzy msgid "Cookies settings" msgstr "¤½¤Î¾¤ÎÀßÄê" #: gui_common.c:2367 msgid "Update cookies" msgstr "cookie ¤ò¹¹¿·" #: gui_common.c:2372 msgid "Send cookies" msgstr "cookie ¤òÁ÷¤ë" #: gui_common.c:2377 msgid "Accept cookies" msgstr "cookie ¤ò¼õ¤±Æþ¤ì¤ë" #: gui_common.c:2382 msgid "Check cookies domain" msgstr "cookie ¥É¥á¥¤¥ó¤ò¥Á¥§¥Ã¥¯" #: gui_common.c:2390 msgid "Cookies maximal number: " msgstr "cookie ºÇÂç¸Ä¿ô: " #: gui_common.c:2405 msgid "Cookie file: " msgstr "cookie ¥Õ¥¡¥¤¥ë: " #: gui_common.c:2491 msgid "Filename" msgstr "¥Õ¥¡¥¤¥ë̾" #: gui_common.c:2494 msgid "Local filename conversion rules" msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾ÊÑ´¹¥ë¡¼¥ë" #: gui_common.c:2502 msgid "Replace String1 with String2 in filename" msgstr "¥Õ¥¡¥¤¥ë̾Æâ¤Î String1 ¤ò String2 ¤ÇÃÖ¤­´¹¤¨" #: gui_common.c:2511 msgid "String1: " msgstr "" #: gui_common.c:2514 msgid "String2: " msgstr "" #: gui_common.c:2516 msgid "Delete characters from filename" msgstr "¥Õ¥¡¥¤¥ë̾¤«¤éʸ»ú¤ò¾Ãµî" #: gui_common.c:2525 msgid "Character set: " msgstr "¥­¥ã¥é¥¯¥¿¥»¥Ã¥È: " #: gui_common.c:2527 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "¥Õ¥¡¥¤¥ë̾Æâ¤Î Set1 ¤Îʸ»ú¤ò Set2 ¤Îʸ»ú¤òÃÖ¤­´¹¤¨" #: gui_common.c:2536 msgid "Character set1: " msgstr "¥­¥ã¥é¥¯¥¿¥»¥Ã¥È1: " #: gui_common.c:2539 msgid "Character set2: " msgstr "¥­¥ã¥é¥¯¥¿¥»¥Ã¥È2: " #: gui_common.c:2546 msgid "Base level of tree: " msgstr "¥Ä¥ê¡¼¤Î´ðËÜ¥ì¥Ù¥ë: " #: gui_common.c:2548 msgid "Local filename mapping rules" msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾Âбþ¥ë¡¼¥ë" #: gui_common.c:2564 msgid "Match pattern" msgstr "°ìÃץѥ¿¡¼¥ó" #: gui_common.c:2565 msgid "Rule" msgstr "¥ë¡¼¥ë" #: gui_common.c:2587 msgid "wildcard pattern" msgstr "¥ï¥¤¥ë¥É¥«¡¼¥É¥Ñ¥¿¡¼¥ó" #: gui_common.c:2594 msgid "RE pattern" msgstr "Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó" #: gui_common.c:2606 msgid "Matching pattern: " msgstr "°ìÃץѥ¿¡¼¥ó: " #: gui_common.c:2613 msgid "Construction rule: " msgstr "¹½À®¥ë¡¼¥ë: " #: gui_common.c:2653 msgid "Advertisement" msgstr "¸ø¹ð" #: gui_common.c:2660 msgid "Enable removing of advertisement banners" msgstr "ÀëÅÁ¥Ð¥Ê¡¼¤Î¾Ãµîµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë" #: gui_common.c:2665 msgid "RE for advertisement URLs: " msgstr "ÀëÅÁ URL ¤ËÂФ¹¤ëÀµµ¬É½¸½: " #: gui_common.c:2777 msgid "Javascript" msgstr "" #: gui_common.c:2785 msgid "Processing of javascript" msgstr "" #: gui_common.c:2789 #, fuzzy msgid "Javascript patterns" msgstr "°ìÃץѥ¿¡¼¥ó" #: gui_common.c:2794 #, fuzzy msgid "RE for Javascript patterns: " msgstr "URL °ìÃץѥ¿¡¼¥ó: " #: gui_common.c:2800 msgid "Javascript patterns with transform rules" msgstr "" #: gui_common.c:2815 #, fuzzy msgid "Pattern" msgstr "Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó" #: gui_common.c:2816 #, fuzzy msgid "Transform rule" msgstr "žÁ÷¥ì¡¼¥È" #: gui_common.c:2817 #, fuzzy msgid "HTML tag" msgstr "HTML ¥Ñ¡¼¥¶" #: gui_common.c:2818 #, fuzzy msgid "HTML tag attribute" msgstr "µö¤µ¤ì¤ë HTML ¥¿¥°¤È°À­¤òÁªÂò" #: gui_common.c:2819 msgid "Rewrite" msgstr "" #: gui_common.c:2840 #, fuzzy msgid "Pattern: " msgstr "Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó" #: gui_common.c:2843 #, fuzzy msgid "Tranform rule: " msgstr "žÁ÷ÎÌÀ©¸Â: " #: gui_common.c:2852 msgid "HTML tag: " msgstr "" #: gui_common.c:2856 #, fuzzy msgid "HTML tag attribute: " msgstr "µö¤µ¤ì¤ë HTML ¥¿¥°¤È°À­¤òÁªÂò" #: gui_common.c:2858 #, fuzzy msgid "Rewrite URL part in HTML document" msgstr "HTML ʸ½ñÆâ¤Î URL ¤ò½ñ¤­Ä¾¤·" #: gui_common.c:2913 msgid "Pavuk: Common config" msgstr "Pavuk: ¶¦ÄÌÀßÄê" #: gui_common.c:2980 msgid "Limitations ..." msgstr "À©¸Â ..." #: gui_jscons.c:150 #, fuzzy msgid "Pavuk: JavaScript console" msgstr "Pavuk: auth. ¾ðÊó¥Õ¥¡¥¤¥ë¤òÊݸ" #: gui_jscons.c:169 msgid "Reload script file" msgstr "" #: gui_jscons.c:174 #, fuzzy msgid "Save script to file" msgstr "¥·¥Ê¥ê¥ª¤òÊݸ ..." #: gui_jscons.c:181 msgid "Load script to JavaScript runtime" msgstr "" #: gui_jscons.c:186 msgid "Restart JavaScript runtime" msgstr "" #: gui_jscons.c:215 #, fuzzy msgid "Prompt: " msgstr "¥Ý¡¼¥È: " #: gui_jscons.c:228 msgid "JavaScript source file: " msgstr "" #: gui_limits.c:44 msgid "Tree" msgstr "¥Ä¥ê¡¼" #: gui_limits.c:56 msgid "Download cgi-generated pages" msgstr "cgi ¤ÎÀ¸À®¤¹¤ë¥Ú¡¼¥¸¤ò¥À¥¦¥ó¥í¡¼¥É" #: gui_limits.c:62 msgid "Recurse through FTP directory" msgstr "FTP ¥Ç¥£¥ì¥¯¥È¥ê¤òºÆµ¢" #: gui_limits.c:68 msgid "Allow \"robots.txt\"" msgstr "\"robots.txt\" ¤òµö²Ä" #: gui_limits.c:74 msgid "Process HTML files downloaded over FTP" msgstr "FTP ¤òÄ̤¸¤Æ HTML ¥Õ¥¡¥¤¥ë¤ò½èÍý" #: gui_limits.c:80 msgid "Don't leave starting site" msgstr "³«»Ï¥µ¥¤¥È¤òÎ¥¤ì¤Ê¤¤" #: gui_limits.c:86 msgid "Don't leave starting directory" msgstr "³«»Ï¥Ç¥£¥ì¥¯¥È¥ê¤òÎ¥¤ì¤Ê¤¤" #: gui_limits.c:92 msgid "Don't leave site enter directory" msgstr "Æþ¤Ã¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Î¥µ¥¤¥È¤òÎ¥¤ì¤Ê¤¤" #: gui_limits.c:98 msgid "Download just single page" msgstr "ñ°ì¥Ú¡¼¥¸¤ò¥À¥¦¥ó¥í¡¼¥É" #: gui_limits.c:104 msgid "Apply limiting options on inline objects" msgstr "" #: gui_limits.c:119 msgid "Max. count of documents: " msgstr "ʸ½ñ¤ÎºÇÂç¸Ä¿ô: " #: gui_limits.c:122 msgid "Max. depth of tree: " msgstr "¥Ä¥ê¡¼¤ÎºÇÂ翼¤µ: " #: gui_limits.c:125 msgid "Max. levels to leave from starting site: " msgstr "³«»Ï¥µ¥¤¥È¤«¤éÎ¥¤ì¤ëºÇÂç¥ì¥Ù¥ë: " #: gui_limits.c:128 msgid "Max. document size: " msgstr "ºÇÂçʸ½ñ¥µ¥¤¥º: " #: gui_limits.c:131 msgid "Min. document size: " msgstr "ºÇ¾®Ê¸½ñ¥µ¥¤¥º: " #: gui_limits.c:134 msgid "Max. site levels to leave from starting site: " msgstr "³«»Ï¥µ¥¤¥È¤«¤éÎ¥¤ì¤ëºÇÂ祵¥¤¥È¥ì¥Ù¥ë: " #: gui_limits.c:145 msgid "Working subdirectory :" msgstr "ºî¶ÈÍÑ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê: " #: gui_limits.c:148 msgid "User condition script: " msgstr "¥æ¡¼¥¶¾ò·ï¥¹¥¯¥ê¥×¥È: " #: gui_limits.c:151 #, fuzzy msgid "Follow command: " msgstr "POST ¥³¥Þ¥ó¥É: " #: gui_limits.c:162 #, fuzzy msgid "Patterns" msgstr "Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó" #: gui_limits.c:165 msgid "Wildcard patterns" msgstr "¥ï¥¤¥ë¥É¥«¡¼¥É¥Ñ¥¿¡¼¥ó" #: gui_limits.c:174 gui_limits.c:195 msgid "Documents matching pattern: " msgstr "ʸ½ñ°ìÃץѥ¿¡¼¥ó: " #: gui_limits.c:177 gui_limits.c:183 gui_limits.c:198 gui_limits.c:204 #: gui_limits.c:266 msgid "skip: " msgstr "¥¹¥­¥Ã¥×: " #: gui_limits.c:180 gui_limits.c:201 msgid "URL matching pattern: " msgstr "URL °ìÃץѥ¿¡¼¥ó: " #: gui_limits.c:186 msgid "RE patterns" msgstr "Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó" #: gui_limits.c:215 msgid "Hosts" msgstr "¥Û¥¹¥È" #: gui_limits.c:224 msgid "Allow / Disallow sites" msgstr "µö²Ä/¶Ø»ß¥µ¥¤¥È" #: gui_limits.c:230 msgid "Site: " msgstr "¥µ¥¤¥È: " #: gui_limits.c:241 msgid "Allow / Disallow domains" msgstr "µö²Ä/¶Ø»ß¥É¥á¥¤¥ó" #: gui_limits.c:253 msgid "IP address RE patterns" msgstr "IP ¥¢¥É¥ì¥¹Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó" #: gui_limits.c:263 msgid "Server IP address matching pattern: " msgstr "¥µ¡¼¥Ð IP ¥¢¥É¥ì¥¹°ìÃץѥ¿¡¼¥ó: " #: gui_limits.c:269 #, fuzzy msgid "Server ports" msgstr "¥µ¡¼¥Ð±þÅú" #: gui_limits.c:279 msgid "Allow/denny" msgstr "" #: gui_limits.c:284 #, fuzzy msgid "Ports: " msgstr "¥Ý¡¼¥È: " #: gui_limits.c:295 msgid "Documents" msgstr "ʸ½ñ" #: gui_limits.c:304 msgid "Allow / Disallow suffix" msgstr "µö²Ä/¶Ø»ß suffix" #: gui_limits.c:310 msgid "Suffix: " msgstr "" #: gui_limits.c:321 msgid "Allow / Disallow prefix" msgstr "µö²Ä/¶Ø»ß prefix" #: gui_limits.c:327 msgid "Prefix: " msgstr "" #: gui_limits.c:341 gui_limits.c:353 msgid "MIME types" msgstr "MIME ¥¿¥¤¥×" #: gui_limits.c:349 msgid "Allow / Disallow MIME type" msgstr "µö²Ä/¶Ø»ß MIME ¥¿¥¤¥×" #: gui_limits.c:358 #, fuzzy msgid "MIME type: " msgstr "MIME ¥¿¥¤¥×" #: gui_limits.c:371 msgid "Time" msgstr "»þ´Ö" #: gui_limits.c:377 msgid "Lower document time limit" msgstr "ʸ½ñ»þ´ÖÀ©¸Â²¼¸Â" #: gui_limits.c:387 msgid "Check if doc. time newer than this" msgstr "ʸ½ñ¤Î»þ´Ö¤¬¤³¤ì¤è¤ê¤â¿·¤·¤¤¤«¤É¤¦¤«¥Á¥§¥Ã¥¯" #: gui_limits.c:391 msgid "Upper document time limit" msgstr "ʸ½ñ»þ´ÖÀ©¸Â¾å¸Â" #: gui_limits.c:401 msgid "Check if doc. time older than this" msgstr "ʸ½ñ»þ´Ö¤¬¤³¤ì¤è¤ê¤â¸Å¤¤¤«¤É¤¦¤«¥Á¥§¥Ã¥¯" #: gui_limits.c:410 msgid "Maximal allowed time of downloading: " msgstr "µö¤µ¤ì¤ë¥À¥¦¥ó¥í¡¼¥ÉºÇÂç»þ´Ö: " #: gui_limits.c:413 msgid " min" msgstr " ʬ" #: gui_limits.c:426 msgid "Select allowed HTML tags and attributes" msgstr "µö¤µ¤ì¤ë HTML ¥¿¥°¤È°À­¤òÁªÂò" #: gui_limits.c:428 msgid "HTML" msgstr "" #: gui_limits.c:443 #, c-format msgid "%s of %s" msgstr "" #: gui_limits.c:476 msgid "Pavuk: Limits config" msgstr "Pavuk: À©¸ÂÀßÄê" #: gui_limits.c:529 msgid "Common ..." msgstr "¶¦ÄÌ ..." #: gui_main.c:433 msgid "Unknown window to popup" msgstr "ÉÔÌÀ¤Ê¥Ý¥Ã¥×¥¢¥Ã¥×¥¦¥£¥ó¥É¥¦" #: gui_main.c:498 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤«¤é URL ¤ò¼èÆÀ : %s\n" #: gui_main.c:542 #, fuzzy, c-format msgid "Fetched URL from browser : %s\n" msgstr "¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤«¤é URL ¤ò¼èÆÀ : %s\n" #: gui_main.c:788 msgid "Both" msgstr "ξÊý" #: gui_main.c:789 msgid "Icons only" msgstr "¥¢¥¤¥³¥ó¤À¤±" #: gui_main.c:790 msgid "Text only" msgstr "¥Æ¥­¥¹¥È¤À¤±" #: gui_main.c:802 msgid "Nr." msgstr "" #: gui_main.c:804 msgid "Status" msgstr "¾õÂÖ" #: gui_main.c:805 msgid "Size" msgstr "ÍÆÎÌ" #: gui_main.c:806 msgid "Transfer rate" msgstr "žÁ÷¥ì¡¼¥È" #: gui_main.c:807 msgid "Elapsed time" msgstr "·Ð²á»þ´Ö" #: gui_main.c:808 msgid "Remaining time" msgstr "»Ä¤ê»þ´Ö" #: gui_main.c:956 msgid "Open _URL ..." msgstr "URL ¤ò³«¤¯(_U) ..." #: gui_main.c:969 msgid "Append URL ..." msgstr "Äɲà URL ..." #: gui_main.c:978 msgid "Fetch URL from Clipboard" msgstr "¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤«¤é URL ¤ò¼èÆÀ" #: gui_main.c:996 #, fuzzy msgid "Fetch URL from browser" msgstr "¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤«¤é URL ¤ò¼èÆÀ" #: gui_main.c:1006 msgid "Load scenario ..." msgstr "¥·¥Ê¥ê¥ª¤òÆÉ¤ß¹þ¤ß ..." #: gui_main.c:1015 msgid "Add scenario ..." msgstr "¥·¥Ê¥ê¥ª¤òÄɲà ..." #: gui_main.c:1024 msgid "Save scenario ..." msgstr "¥·¥Ê¥ê¥ª¤òÊݸ ..." #: gui_main.c:1033 msgid "Save settings to ~/.pavukrc" msgstr "ÀßÄê¤ò ~/.pavukrc ¤ËÊݸ" #: gui_main.c:1046 msgid "Schedule ..." msgstr "ͽÄê ..." #: gui_main.c:1055 msgid "Auth. info editor ..." msgstr "ǧ¾Ú¾ðÊóÊÔ½¸ ..." #: gui_main.c:1068 msgid "E_xit" msgstr "½ªÎ»(_x)" #: gui_main.c:1077 msgid "_File" msgstr "¥Õ¥¡¥¤¥ë(_F)" #: gui_main.c:1093 msgid "Document _Tree ..." msgstr "ʸ½ñ¥Ä¥ê¡¼(_T) ..." #: gui_main.c:1102 msgid "Status page ..." msgstr "¾õÂÖ¥Ú¡¼¥¸ ..." #: gui_main.c:1110 msgid "HTML forms editor ..." msgstr "HTML ¥Õ¥©¡¼¥àÊÔ½¸ ..." #: gui_main.c:1119 msgid "Javascript console ..." msgstr "" #: gui_main.c:1132 msgid "Clear log window" msgstr "¥í¥°¥¦¥£¥ó¥É¥¦¤ò½é´ü²½" #: gui_main.c:1141 msgid "_View" msgstr "´ÑÍ÷(_V)" #: gui_main.c:1159 msgid "normal recurse" msgstr "ÉáÄ̤κƵ¢" #: gui_main.c:1169 msgid "synchronize" msgstr "Ʊ´ü" #: gui_main.c:1180 msgid "single page" msgstr "ñ°ì¥Ú¡¼¥¸" #: gui_main.c:1190 msgid "update local links" msgstr "¥í¡¼¥«¥ë¥ê¥ó¥¯¤ò¹¹¿·" #: gui_main.c:1200 msgid "resume files" msgstr "¥Õ¥¡¥¤¥ë¤òºÆ³«" #: gui_main.c:1210 msgid "unlimited reget" msgstr "À©¸Â¤Ê¤·¤ÎºÆ¼èÆÀ" #: gui_main.c:1220 msgid "transfer but don't store" msgstr "žÁ÷¤·¡¢¤·¤«¤·Êݸ¤·¤Ê¤¤" #: gui_main.c:1230 msgid "reminder" msgstr "" #: gui_main.c:1240 msgid "list ftp directory" msgstr "FTP ¥Ç¥£¥ì¥¯¥È¥ê¤Î¥ê¥¹¥È" #: gui_main.c:1250 msgid "_Mode" msgstr "¥â¡¼¥É(_M)" #: gui_main.c:1268 msgid "C_ommon ..." msgstr "¶¦ÄÌ(_o) ..." #: gui_main.c:1277 msgid "_Limitations ..." msgstr "À©¸Â(_L) ..." #: gui_main.c:1286 msgid "Reset configuration" msgstr "ÀßÄê¤ò¥ê¥»¥Ã¥È" #: gui_main.c:1301 msgid "Toolbar" msgstr "¥Ä¡¼¥ë¥Ð¡¼" #: gui_main.c:1309 msgid "Toggle toolbar" msgstr "¥Ä¡¼¥ë¥Ð¡¼¤òÀÚ¤êÂØ¤¨" #: gui_main.c:1364 msgid "Progressbar" msgstr "¿Ê¹Ô¾õ¶·É½¼¨¥Ð¡¼" #: gui_main.c:1396 msgid "Language" msgstr "¸À¸ì" #: gui_main.c:1446 msgid "Debug level" msgstr "¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë" #: gui_main.c:1469 msgid "All" msgstr "¤¹¤Ù¤Æ" #: gui_main.c:1476 msgid "None" msgstr "¤Ê¤·" #: gui_main.c:1483 msgid "Debug" msgstr "¥Ç¥Ð¥Ã¥°" #: gui_main.c:1499 #, fuzzy msgid "Allow tooltips" msgstr "²Äǽ¤Ê¥×¥í¥È¥³¥ë" #: gui_main.c:1509 msgid "Log window autoscroll" msgstr "¥í¥°¥¦¥£¥ó¥É¥¦¼«Æ°¥¹¥¯¥í¡¼¥ë" #: gui_main.c:1518 msgid "Use preferences" msgstr "ÀßÄê¤ò»ÈÍÑ" #: gui_main.c:1527 msgid "Quiet" msgstr "ÀŽÍ" #: gui_main.c:1539 msgid "Immediate messages" msgstr "¨ºÂ¤Î¥á¥Ã¥»¡¼¥¸" #: gui_main.c:1551 msgid "_Config" msgstr "ÀßÄê(_C)" #: gui_main.c:1567 msgid "_Restart" msgstr "ºÆµ¯Æ°(_R)" #: gui_main.c:1577 msgid "Co_ntinue" msgstr "³¹Ô(_n)" #: gui_main.c:1587 msgid "Sto_p" msgstr "Ää»ß(_p)" #: gui_main.c:1597 msgid "_Break" msgstr "ÃæÃÇ(_B)" #: gui_main.c:1607 msgid "_Action" msgstr "¥¢¥¯¥·¥ç¥ó(_A)" #: gui_main.c:1627 msgid "About ..." msgstr "³µÍ× ..." #: gui_main.c:1636 msgid "_Help" msgstr "¥Ø¥ë¥×(_H)" #: gui_main.c:1667 msgid "Config" msgstr "ÀßÄê" #: gui_main.c:1668 msgid "Popup config window" msgstr "ÀßÄꥦ¥£¥ó¥É¥¦¤ò¥Ý¥Ã¥×¥¢¥Ã¥×" #: gui_main.c:1672 msgid "Limits" msgstr "À©¸Â" #: gui_main.c:1673 msgid "Popup limits window" msgstr "À©¸Â¥¦¥£¥ó¥É¥¦¤ò¥Ý¥Ã¥×¥¢¥Ã¥×" #: gui_main.c:1679 msgid "Go bg" msgstr "¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Çưºî" #: gui_main.c:1680 msgid "Destroy window as soon as posible and continue on terminal" msgstr "¥¦¥£¥ó¥É¥¦¤ò½ªÎ»¤·¡¢²Äǽ¤Ê¤«¤®¤ê¤¹¤°¤ËüËö¾å¤Ç³¹Ô" #: gui_main.c:1684 gui_main.c:1757 msgid "Restart" msgstr "ºÆµ¯Æ°" #: gui_main.c:1685 msgid "Start working on currently set starting URLs" msgstr "º£ÀßÄꤵ¤ì¤Æ¤¤¤ë³«»Ï URL ¤Çºî¶È³«»Ï" #: gui_main.c:1689 gui_main.c:1762 msgid "Continue" msgstr "³¹Ô" #: gui_main.c:1690 msgid "Continue after stop or break" msgstr "Ää»ß¡¢¤¢¤ë¤¤¤ÏÃæÃǸå¤Ç³¹Ô" #: gui_main.c:1696 gui_main.c:1767 msgid "Stop" msgstr "Ää»ß" #: gui_main.c:1697 msgid "Finish this transfer and stop" msgstr "žÁ÷¤ò½ªÎ»¤·¡¢Ää»ß" #: gui_main.c:1701 gui_main.c:1772 msgid "Break" msgstr "ÃæÃÇ" #: gui_main.c:1702 msgid "Break transfer and stop" msgstr "žÁ÷¤òÃæÃǤ·¡¢Ää»ß" #: gui_main.c:1708 msgid "Exit" msgstr "½ªÎ»" #: gui_main.c:1709 msgid "Immediately quit the program" msgstr "¨ºÂ¤Ë¥×¥í¥°¥é¥à¤ò½ªÎ»" #: gui_main.c:1777 msgid "Show whole main window" msgstr "¤¹¤Ù¤Æ¤Î¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤òɽ¼¨" #: gui_main.c:1782 msgid "Quit" msgstr "½ªÎ»" #: gui_main.c:1861 #, fuzzy msgid "Pavuk: save log" msgstr "Pavuk: ¾õÂÖ¥Ú¡¼¥¸¤òÊݸ" #: gui_main.c:1924 msgid "Select all" msgstr "" #: gui_main.c:1932 msgid "Clear selection" msgstr "" #: gui_main.c:1940 msgid "Copy selection" msgstr "" #: gui_main.c:1952 #, fuzzy msgid "Save log ..." msgstr "Êݸ ..." #: gui_main.c:1959 #, fuzzy msgid "Clear log" msgstr "¥í¥°¥¦¥£¥ó¥É¥¦¤ò½é´ü²½" #: gui_main.c:2046 gui_main.c:2164 msgid "Processed: " msgstr "½èÍýºÑ: " #: gui_main.c:2055 gui_main.c:2173 msgid "Failed: " msgstr "¼ºÇÔ: " #: gui_main.c:2064 gui_main.c:2182 msgid "Queued: " msgstr "ÂÔµ¡: " #: gui_main.c:2073 gui_main.c:2191 msgid "Rejected: " msgstr "µñÈݤµ¤ì¤¿: " #: gui_main.c:2123 msgid "S: " msgstr "" #: gui_main.c:2132 msgid "R: " msgstr "" #: gui_main.c:2141 msgid "ET: " msgstr "" #: gui_main.c:2150 msgid "RT: " msgstr "" #: gui_scenario.c:46 msgid "Pavuk: Scenario saver" msgstr "Pavuk: ¥·¥Ê¥ê¥ªÊݸ" #: gui_scenario.c:139 msgid "Pavuk: Scenario loader" msgstr "Pavuk: ¥·¥Ê¥ê¥ªÆÉ¤ß¹þ¤ß" #: gui_scenario.c:231 msgid "Pavuk: Scenario add" msgstr "Pavuk: ¥·¥Ê¥ê¥ªÄɲÃ" #: gui_sched.c:55 pavuk.c:495 msgid "Error scheduling\n" msgstr "¥¨¥é¡¼¥¹¥±¥¸¥å¡¼¥ê¥ó¥°\n" #: gui_sched.c:78 msgid "Pavuk: Scheduler" msgstr "Pavuk: ¥¹¥±¥¸¥å¡¼¥é" #: gui_sched.c:97 msgid "Scheduling command: " msgstr "¥¹¥±¥¸¥å¡¼¥ë¥³¥Þ¥ó¥É: " #: gui_sched.c:107 msgid "Reschedule after " msgstr "¸å¤ÇºÆ¥¹¥±¥¸¥å¡¼¥ë " #: gui_sched.c:117 msgid " hours" msgstr " »þ´Ö" #: gui_tools.c:28 msgid "January" msgstr "1 ·î" #: gui_tools.c:29 msgid "February" msgstr "2 ·î" #: gui_tools.c:30 msgid "March" msgstr "3 ·î" #: gui_tools.c:31 msgid "April" msgstr "4 ·î" #: gui_tools.c:32 msgid "May" msgstr "5 ·î" #: gui_tools.c:33 msgid "June" msgstr "6 ·î" #: gui_tools.c:34 msgid "July" msgstr "7 ·î" #: gui_tools.c:35 msgid "August" msgstr "8 ·î" #: gui_tools.c:36 msgid "September" msgstr "9 ·î" #: gui_tools.c:37 msgid "October" msgstr "10 ·î" #: gui_tools.c:38 msgid "November" msgstr "11 ·î" #: gui_tools.c:39 msgid "December" msgstr "12 ·î" #: gui_tools.c:43 msgid "Sun" msgstr "Æü" #: gui_tools.c:44 msgid "Mon" msgstr "·î" #: gui_tools.c:45 msgid "Tue" msgstr "²Ð" #: gui_tools.c:46 msgid "Wed" msgstr "¿å" #: gui_tools.c:47 msgid "Thu" msgstr "ÌÚ" #: gui_tools.c:48 msgid "Fri" msgstr "¶â" #: gui_tools.c:49 msgid "Sat" msgstr "ÅÚ" #: gui_tools.c:171 msgid "Time: " msgstr "»þ´Ö: " #: gui_tools.c:180 msgid " : " msgstr " : " #: gui_tools.c:360 #, c-format msgid "Pavuk: select %s" msgstr "Pavuk: %s ¤òÁªÂò" #: gui_tools.c:361 #, fuzzy msgid "file" msgstr "¥Õ¥¡¥¤¥ë(_F)" #: gui_tools.c:459 msgid "Browse ..." msgstr "±ÜÍ÷ ..." #: gui_tree.c:117 #, c-format msgid "URL: %s\n" msgstr "URL: %s\n" #: gui_tree.c:130 gui_tree.c:136 gui_tree.c:175 msgid "Request type: " msgstr "¥ê¥¯¥¨¥¹¥È¥¿¥¤¥×: " #: gui_tree.c:151 msgid "Query values:\n" msgstr "Ì䤤¹ç¤ï¤»ÃÍ:\n" #: gui_tree.c:181 msgid "Status: " msgstr "¾õÂÖ" #: gui_tree.c:187 msgid "not processed yet\n" msgstr "¤Þ¤À̤½èÍý\n" #: gui_tree.c:193 msgid "loaded from NS cache\n" msgstr "NS ¥­¥ã¥Ã¥·¥å¤«¤éÆÉ¤ß¹þ¤ß\n" #: gui_tree.c:199 msgid "loaded from local URL tree\n" msgstr "¥í¡¼¥«¥ë URL ¥Ä¥ê¡¼¤«¤éÆÉ¤ß¹þ¤ß\n" #: gui_tree.c:205 msgid "moved to another URL\n" msgstr "¾¤Î URL ¤Ø°Üư\n" #: gui_tree.c:211 msgid "URL not found on remote server\n" msgstr "¥ê¥â¡¼¥È¥µ¡¼¥Ð¾å¤Ç URL ¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿\n" #: gui_tree.c:217 msgid "truncated\n" msgstr "²õ¤ì¤Æ¤¤¤ë\n" #: gui_tree.c:223 msgid "downloaded OK\n" msgstr "¥À¥¦¥ó¥í¡¼¥É´°Î»\n" #: gui_tree.c:229 msgid "rejected by rules\n" msgstr "¥ë¡¼¥ë¤ÇµñÈݤµ¤ì¤¿\n" #: gui_tree.c:235 msgid "disabled by user\n" msgstr "¥æ¡¼¥¶¤Ë¤è¤Ã¤Æ¶Ø»ß¤µ¤ì¤¿\n" #: gui_tree.c:241 msgid "probably recoverable error\n" msgstr "¤ª¤½¤é¤¯²óÉüÉÔ²Äǽ¤Ê¥¨¥é¡¼\n" #: gui_tree.c:247 msgid "unrecoverable error\n" msgstr "²óÉü²Äǽ¤Ê¥¨¥é¡¼\n" #: gui_tree.c:253 msgid "unknown\n" msgstr "ÉÔÌÀ\n" #: gui_tree.c:263 #, c-format msgid "Moved to URL: %s\n" msgstr "URL ¤Ø°Üư: %s\n" #: gui_tree.c:273 #, c-format msgid "Type: %s\n" msgstr "¥¿¥¤¥×: %s\n" #: gui_tree.c:275 msgid "Type: unknown\n" msgstr "¥¿¥¤¥×: ÉÔÌÀ\n" #: gui_tree.c:281 #, c-format msgid "Size: %d\n" msgstr "¥µ¥¤¥º: %d\n" #: gui_tree.c:290 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "Êѹ¹»þ´Ö: %a¡¢%d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:300 #, c-format msgid "Local filename: %s\n" msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾: %s\n" #: gui_tree.c:311 msgid "Parent URLs:\n" msgstr "¿Æ URL:\n" #: gui_tree.c:612 msgid "Pavuk: Store tree" msgstr "Pavuk: ¥Ä¥ê¡¼¤òÊÝ»ý" #: gui_tree.c:656 gui_tree.c:684 msgid "Pavuk: URL tree preview" msgstr "Pavuk: URL ¥Ä¥ê¡¼¤òÆâÍ÷" #: gui_tree.c:659 gui_tree.c:788 msgid "Store tree ..." msgstr "¥Ä¥ê¡¼¤òÊÝ»ý ..." #: gui_tree.c:660 gui_tree.c:704 msgid "Automaticaly watch last processed URLs" msgstr "¼«Æ°Åª¤ËºÇ¸å¤Ë½èÍý¤µ¤ì¤¿ URL ¤ò±ÜÍ÷" #: gui_tree.c:662 gui_tree.c:821 msgid "Properties" msgstr "¥×¥í¥Ñ¥Æ¥£" #: gui_tree.c:663 gui_tree.c:829 msgid "Launch browser" msgstr "¥Ö¥é¥¦¥¶¤òµ¯Æ°" #: gui_tree.c:664 gui_tree.c:837 msgid "Disable URL" msgstr "URL ¤ò¶Ø»ß¤Ë¤¹¤ë" #: gui_tree.c:665 gui_tree.c:845 msgid "Enable URL" msgstr "URL ¤òµö²Ä¤¹¤ë" #: gui_tree.c:666 gui_tree.c:853 msgid "Download URL" msgstr "URL ¤ò¥À¥¦¥ó¥í¡¼¥É" #: gui_tree.c:670 gui_tree.c:724 msgid "URL tree" msgstr "URL ¥Ä¥ê¡¼" #: html.c:253 htmlparser.c:281 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ base URL - %s (¤ª¤½¤é¤¯¾å¼ê¤¯½èÍý¤µ¤ì¤Þ¤»¤ó)\n" #: html.c:522 msgid "Can't work on directory\n" msgstr "¥Ç¥£¥ì¥¯¥È¥ê¾å¤Çºî¶È¤Ç¤­¤Þ¤»¤ó\n" #: html.c:548 html.c:552 msgid "rewrite parent" msgstr "¿Æ¤òºÆ½ñ¤­¹þ¤ß" #: http.c:366 msgid "****************** Proxy connect request *****************\n" msgstr "***************** ¥×¥í¥­¥·Àܳ¥ê¥¯¥¨¥¹¥È *****************\n" #: http.c:413 msgid "***************** Proxy connect response *****************\n" msgstr "******************** ¥×¥í¥­¥·Àܳ±þÅú ********************\n" #: http.c:469 msgid "Sending request ..." msgstr "¥ê¥¯¥¨¥¹¥È¤òÁ÷¤Ã¤Æ¤¤¤Þ¤¹ ..." #: http.c:716 msgid "************ Client HTTP MIME header ***************\n" msgstr "********* ¥¯¥é¥¤¥¢¥ó¥È HTTP MIME ¥Ø¥Ã¥À ************\n" #: http.c:733 msgid "Sending data ..." msgstr "¥Ç¡¼¥¿¤òÁ÷¤Ã¤Æ¤¤¤Þ¤¹ ..." #: http.c:734 msgid "************ HTTP request data ***************\n" msgstr "*********** HTTP ¥ê¥¯¥¨¥¹¥È¥Ç¡¼¥¿ ************\n" #: http.c:744 msgid "Waiting for response ..." msgstr "±þÅú¤òÂԤäƤ¤¤Þ¤¹ ..." #: http.c:759 msgid "Error reading HTTP 1xx class response\n" msgstr "HTTP 1xx ¥¯¥é¥¹±þÅú¤òÆÉ¤ß¹þ¤ßÃæ¤Ë¥¨¥é¡¼\n" #: http.c:764 msgid "***************** class 1xx HTTP response ****************\n" msgstr "****************** ¥¯¥é¥¹ 1xx HTTP ±þÅú ******************\n" #: http.c:875 msgid "Connecting ..." msgstr "Àܳ¤·¤Æ¤¤¤Þ¤¹ ..." #: http.c:1159 msgid "*********** HTTP Server response MIME header **********\n" msgstr "*********** HTTP ¥µ¡¼¥Ð±þÅú MIME ¥Ø¥Ã¥À **********\n" #: http.c:1262 msgid "Regeting whole file\n" msgstr "¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤òºÆ¼èÆÀ\n" #: http.c:1312 #, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "" #: http_proxy.c:150 #, c-format msgid "Checking HTTP proxy server %s:%d\n" msgstr "" #: http_proxy.c:162 http_proxy.c:174 http_proxy.c:181 http_proxy.c:190 msgid "Failed to check proxy !\n" msgstr "" #: http_proxy.c:196 #, c-format msgid "Proxy %s:%d is HTTP/%d.%d proxy\n" msgstr "" #: jsbind.c:76 #, fuzzy msgid "bad parameter" msgstr "ÉÔÀµ¤Ê»þ´Ö¥Ñ¥é¥á¡¼¥¿ \"%s\"\n" #: jsbind.c:529 #, fuzzy msgid "not enough parameters" msgstr "¥Ñ¥é¥á¡¼¥¿ \"%s\" ¤Î¿ô¤¬ÉÔ½¼Ê¬¤Ç¤¹\n" #: jsbind.c:553 msgid "unknown limiting condition" msgstr "" #: lfname.c:479 lfname.c:491 lfname.c:500 lfname.c:513 lfname.c:536 #: lfname.c:645 lfname.c:658 lfname.c:670 lfname.c:685 lfname.c:698 re.c:51 #: re.c:61 re.c:68 re.c:80 re.c:95 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "Àµµ¬É½¸½¤ò²ò¼áÃæ¤Ë¥¨¥é¡¼: %s\n" #: lfname.c:553 lfname.c:617 lfname.c:939 lfname.c:1057 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "LSP ²òÀÏ¥¨¥é¡¼: %s ¤ÇÉÔÀµ¤Ê¥È¡¼¥¯¥ó\n" #: lfname.c:950 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "LSP ²òÀÏ¥¨¥é¡¼: %s ¤ÇÉÔÀµ¤Ê¿ôÃÍ\n" #: lfname.c:964 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "LSP ²òÀÏ¥¨¥é¡¼: %s ¤Ç´Ö°ã¤Ã¤¿¥Þ¥¯¥í\n" #: lfname.c:992 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "LSP ²òÀÏ¥¨¥é¡¼: %s ¤Ç½ªÎ»¤·¤Æ¤¤¤Ê¤¤Ê¸»úÎó\n" #: lfname.c:1013 lfname.c:1029 lfname.c:1047 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "LSP ²òÀÏ¥¨¥é¡¼: %s ¤ÇÉÔÀµ¤Ê¥Ñ¥é¥á¡¼¥¿¥¿¥¤¥×\n" #: log.c:203 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "¥í¥°½ªÎ»: %H:%M:%S %d.%m.%Y\n" #: log.c:224 msgid "Unable to open log file - disabling logging\n" msgstr "¥í¥°¥Õ¥¡¥¤¥ë¤ò³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó - ¥í¥°µ¡Ç½¤ò̵¸ú¤Ë¤·¤Þ¤¹\n" #: log.c:232 msgid "Log file is locked by another process - " msgstr "¥í¥°¥Õ¥¡¥¤¥ë¤¬Â¾¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹ - " #: log.c:236 msgid "generating new log filename\n" msgstr "¿·µ¬¥í¥°¥Õ¥¡¥¤¥ë̾¤òÀ¸À®\n" #: log.c:241 msgid "disabling logging\n" msgstr "¥í¥°µ¡Ç½¤ò̵¸ú¤Ë¤¹¤ë\n" #: log.c:263 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "¥í¥°¤ò³«»Ï: %H:%M:%S %d.%m.%Y\n" #: mozcache.c:184 #, fuzzy, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "Netscape ¥­¥ã¥Ã¥·¥åº÷°ú¤ò³«¤±¤Þ¤»¤ó - %s\n" #: myssl.c:49 msgid "Failed obtaining entropy pathname\n" msgstr "" #: myssl.c:59 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "" #: myssl.c:70 msgid "Seeding entropy pool INSECURELY!\n" msgstr "" #: myssl.c:157 msgid "Unable to set certificate file (wrong password?)\n" msgstr "¾ÚÌÀ¥Õ¥¡¥¤¥ë¤òÀßÄê¤Ç¤­¤Þ¤»¤ó(¥Ñ¥¹¥ï¡¼¥É¤¬°ã¤¤¤Þ¤»¤ó¤«?)\n" #: myssl.c:167 msgid "Unable to set public key file\n" msgstr "¸ø³«¸°¥Õ¥¡¥¤¥ë¤òÀßÄê¤Ç¤­¤Þ¤»¤ó\n" #: myssl.c:183 msgid "Private key does not match the certificate public key\n" msgstr "ÈëÌ©¸°¤Ï¾ÚÌÀ¸ø³«¸°¤ÈÂбþ¤·¤Æ¤¤¤Þ¤»¤ó\n" #: myssl.c:231 #, c-format msgid "SSL connection is using %s\n" msgstr "%s ¤ò»ÈÍѤ·¤Æ SSL Àܳ\n" #: myssl.c:234 msgid "Server certificate:\n" msgstr "¥µ¡¼¥Ð¾ÚÌÀ:\n" #: myssl.c:238 #, c-format msgid "\t subject: %s\n" msgstr "" #: myssl.c:243 #, c-format msgid "\t issuer: %s\n" msgstr "" #: nscache.c:103 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "Netscape ¥­¥ã¥Ã¥·¥åº÷°ú¤ò³«¤±¤Þ¤»¤ó - %s\n" #: ntlm_auth.c:416 msgid "Trying to do NTLM authorization\n" msgstr "" #: ntlm_auth.c:425 ntlm_auth.c:506 ntlm_auth.c:587 ntlm_auth.c:667 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "" #: ntlm_auth.c:448 ntlm_auth.c:609 msgid "Not enough data for NTLM authorization!\n" msgstr "" #: ntlm_auth.c:449 ntlm_auth.c:610 #, fuzzy msgid "Missing:\n" msgstr "¤½¤Î¾¤ÎÀßÄê" #: ntlm_auth.c:450 ntlm_auth.c:611 msgid " domain\n" msgstr "" #: ntlm_auth.c:451 ntlm_auth.c:612 msgid " username\n" msgstr "" #: ntlm_auth.c:452 ntlm_auth.c:613 msgid " password\n" msgstr "" #: ntlm_auth.c:453 ntlm_auth.c:614 msgid " local hostname\n" msgstr "" #: ntlm_auth.c:489 ntlm_auth.c:497 ntlm_auth.c:522 ntlm_auth.c:650 #: ntlm_auth.c:658 ntlm_auth.c:683 msgid "Got unexpected response\n" msgstr "" #: ntlm_auth.c:532 msgid "Failed NTLM nonce negotiation\n" msgstr "" #: ntlm_auth.c:574 msgid "Trying to do proxy NTLM authorization\n" msgstr "" #: ntlm_auth.c:693 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "" #: options.h:193 msgid "\t-v - print version number\n" msgstr "\t-v - ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òɽ¼¨\n" #: options.h:204 msgid "\t-h - help\n" msgstr "\t-h - ¥Ø¥ë¥×\n" #: options.h:218 msgid "\t-X - start GUI interface\n" msgstr "\t-X - GUI ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤òµ¯Æ°\n" #: options.h:249 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" "\t-runX - GUI ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Î³«»Ï¸å¤Ë¤¹¤°¤Ë\n" "\t ÆþÎÏ URL ¤Î½èÍý¤ò³«»Ï\n" #: options.h:265 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "\t-prefs/-noprefs - ~/.pavuk_prefs ¥Õ¥¡¥¤¥ë¤«¤éÀßÄê¤òÆÉ¤ß¹þ¤ß\n" #: options.h:494 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" "\t-progress/-noprogress\n" "\t - üËö¾å¤ÇưºîÃæ¤Ë²ó¼ý¿Ê¹Ô¾õ¶·¤òɽ¼¨\n" #: options.h:517 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "\t-lmax $nr - ²Äǽ¤Ê¥Ä¥ê¡¼¤Î¿¼¤µ\n" #: options.h:528 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "\t-dmax $nr - ¥À¥¦¥ó¥í¡¼¥Éʸ½ñ¤ÎºÇÂç¿ô\n" #: options.h:539 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "\t-sleep $nr - $nr ÉôÖžÁ÷¤òÄä»ß (¥Ç¥Õ¥©¥ë¥È¤Ï 0 ÉÃ)\n" #: options.h:551 #, fuzzy msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "\t-sleep $nr - $nr ÉôÖžÁ÷¤òÄä»ß (¥Ç¥Õ¥©¥ë¥È¤Ï 0 ÉÃ)\n" #: options.h:574 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "\t-retry $nr - ²¿¤é¤«¤Î¥¨¥é¡¼»þ¤ÎºÆ»î¹Ô²ó¿ô\n" #: options.h:585 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "\t-nregets $nr - °ì¤Ä¤Î¥Õ¥¡¥¤¥ë¤ÎºÆ¼èÆÀ²ó¿ô(¥Ç¥Õ¥©¥ë¥È¤Ï 2)\n" #: options.h:596 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" "\t-nredirs $nr - Ϣ³¤¹¤ë HTTP ¥ê¥À¥¤¥ì¥¯¥È¤ÎºÇÂç¸Ä¿ô(¥Ç¥Õ¥©¥ë¥È¤Ï 5)\n" #: options.h:607 msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" "\t-timeout $nr - ¥Í¥Ã¥È¥ï¡¼¥¯Àܳ¤Î¥¿¥¤¥à¥¢¥¦¥È»þ´Ö(ʬ)\n" "\t 0 == ¥¿¥¤¥à¥¢¥¦¥È¤Ê¤·(¥Ç¥Õ¥©¥ë¥È)\n" #: options.h:619 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" "\t-rollback $nr - ºÆ¼èÆÀ»þ¤Ë(¥Õ¥¡¥¤¥ë¤Î½ªÃ¼¤«¤é)¼Î¤Æ¤ë¥Ð¥¤¥È¿ô\n" "\t (¥Ç¥Õ¥©¥ë¥È¤Ï 0)\n" #: options.h:632 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" "\t-ddays $nr - sync ¥â¡¼¥É¤Çʸ½ñ¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤Þ¤Ç¤Î\n" "\t ºÇ¸å¤Î¥¢¥¯¥»¥¹¤«¤é¤ÎÆü¿ô\n" #: options.h:644 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" "\t-nocache/-cache - HTTP ʸ½ñ " "¤Î¥­¥ã¥Ã¥·¥å¤òµö²Ä¤·¤Ê¤¤(¥×¥í¥­¥·¥­¥ã¥Ã¥·¥å)\n" #: options.h:666 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "\t-noRobots/-Robots - \"robots.txt\" ¥Õ¥¡¥¤¥ë¤ò¹Íθ¤¹¤ë¤«¤É¤¦¤«\n" #: options.h:688 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "\t-noFTP/-FTP - FTP ¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Ê¤¤\n" #: options.h:710 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "\t-noHTTP/-HTTP - HTTP ¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Ê¤¤\n" #: options.h:735 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "\t-noSSL/-SSL - (HTTPS) SSL ¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Ê¤¤\n" #: options.h:765 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "\t-noFTPS/-FTPS - FTPS ¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Ê¤¤\n" #: options.h:792 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "\t-noGopher/-Gopher - Gopher ¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤«¤É¤¦¤«\n" #: options.h:814 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "" "\t-noCGI/-CGI - ¥Ñ¥é¥á¥È¥ê¥Ã¥¯ CGI ¥Ú¡¼¥¸¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Ê¤¤(¤¹¤ë)\n" #: options.h:836 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "\t-noEnc/-Enc - ¥¨¥ó¥³¡¼¥É¥Õ¥¡¥¤¥ë¤ÎžÁ÷¤òµö²Ä¤·¤Ê¤¤(¤¹¤ë)\n" #: options.h:858 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" "\t-noRelocate/-Relocate\n" "\t - ¥ê¥ó¥¯¤òºÆ½ñ¤­¹þ¤ß¤·¤Ê¤¤\n" #: options.h:881 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" "\t-FTPhtml/-noFTPhtml\n" "\t - FTP ¤òÄ̤¸¤Æ HTML ¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É\n" #: options.h:904 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" "\t-FTPlist/-noFTPlist\n" "\t - ¥ï¥¤¥É FTP ¥Ç¥£¥ì¥¯¥È¥ê¥ê¥¹¥È¤ò»ÈÍÑ\n" #: options.h:927 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "\t-FTPdir/-noFTPdir - FTP ¥Ç¥£¥ì¥¯¥È¥ê¤òºÆµ¢¤¹¤ë\n" #: options.h:949 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" "\t-store_index/-nostore_index\n" "\t - ¥Ç¥£¥ì¥¯¥È¥ê URL ¤ò index ¥Õ¥¡¥¤¥ë¤ËÊݸ\n" #: options.h:972 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" "\t-force_reget/-noforce_reget\n" "\t - ¥µ¡¼¥Ð¤¬ºÆ¼èÆÀ¤ò¶Ø»ß¤·¤Æ¤¤¤Æ¤â¤¹¤Ù¤Æ¤Î\n" "\t ¥Õ¥¡¥¤¥ë¤ò¶¯À©Åª¤ËºÆ¼èÆÀ\n" #: options.h:1000 msgid "\t-debug - turn on debug mode\n" msgstr "\t-debug - ¥Ç¥Ð¥Ã¥°¥â¡¼¥É\n" #: options.h:1030 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "\t-debug_level $l - ¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë(¥Þ¥Ë¥å¥¢¥ë $l ¤ÎÀâÌÀ¤ò»²¾È)\n" #: options.h:1042 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "\t-asite $list - ¥«¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤¿¡¢µö¤µ¤ì¤ë¥µ¥¤¥È¤Î¥ê¥¹¥È\n" #: options.h:1053 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "\t-dsite $list - ¥«¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤¿¡¢¶Ø»ß¤µ¤ì¤¿¥µ¥¤¥È¤Î¥ê¥¹¥È\n" #: options.h:1064 msgid "\t-adomain $list - list of allowed domains\n" msgstr "\t-adomain $list - µö¤µ¤ì¤ë¥É¥á¥¤¥ó¤Î¥ê¥¹¥È\n" #: options.h:1075 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "\t-ddomain $list - ¶Ø»ß¤µ¤ì¤¿¥É¥á¥¤¥ó¤Î¥ê¥¹¥È\n" #: options.h:1086 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "\t-aprefix $list - µö¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê/¥Õ¥¡¥¤¥ë prefix ¤Î¥ê¥¹¥È\n" #: options.h:1097 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "" "\t-dprefix $list - ¶Ø»ß¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê/¥Õ¥¡¥¤¥ë prefix ¤Î¥ê¥¹¥È\n" #: options.h:1108 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "\t-asfx $list - µö¤µ¤ì¤ë suffix ¤Î¥ê¥¹¥È\n" #: options.h:1119 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "\t-dsfx $list - ¶Ø»ß¤µ¤ì¤¿ suffix ¤Î¥ê¥¹¥È\n" #: options.h:1130 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "\t-amimet $list - µö¤µ¤ì¤ë MIME ¥¿¥¤¥×¥ê¥¹¥È\n" #: options.h:1141 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "\t-dmimet $list - ¶Ø»ß¤µ¤ì¤¿ MIME ¥¿¥¤¥×¥ê¥¹¥È\n" #: options.h:1152 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "\t-alang $list - »È¤¤¤¿¤¤¸À¸ì¤Î¥ê¥¹¥È(HTTP ¤Î¤ß)\n" #: options.h:1163 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "\t-acharset $list - »È¤¤¤¿¤¤¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤Î¥ê¥¹¥È(HTTP ¤Î¤ß)\n" #: options.h:1174 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" "\t-scndir $dir - ¥·¥Ê¥ê¥ª(ÀßÄê¥Õ¥¡¥¤¥ë)¤òÊݸ¤¹¤ë\n" "\t ¥Ç¥£¥ì¥¯¥È¥ê\n" #: options.h:1186 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "\t-cdir $dir - ʸ½ñ¤òÊݸ¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê\n" #: options.h:1197 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "\t-subdir $dir - ºî¶ÈÍѤΠcdir ¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê\n" #: options.h:1208 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" "\t-scenario $str - ÆÉ¤ß¹þ¤ß¤¢¤ë¤¤¤Ï¼Â¹ÔÍѤΥ·¥Ê¥ê¥ª¥Ç¥£¥ì¥¯¥È¥ê\n" "\t ¤«¤é¤Î¥·¥Ê¥ê¥ªÌ¾\n" #: options.h:1220 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" "\t-auth_scheme 1/2/3 - HTTP ǧ¾ÚÊýË¡ : 1-¥æ¡¼¥¶ 2-´ðËÜ 3-¥À¥¤¥¸¥§¥¹¥È\n" "\t (¥Ç¥Õ¥©¥ë¥È¤Ï 2)\n" #: options.h:1232 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "\t-auth_name $str - ǧ¾Ú̾ (HTTP ¤Î¤ß)\n" #: options.h:1243 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "\t-auth_passwd $str - ǧ¾Ú¥Ñ¥¹¥ï¡¼¥É (HTTP ¤Î¤ß)\n" #: options.h:1254 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - ¥ê¥¯¥¨¥¹¥È»þ¤Ë°ì²óÌܤΠHTTP ¥À¥¤¥¸¥§¥¹¥È\n" "\t ¥¢¥¯¥»¥¹Ç§¾Ú¤òÎ×»þ¤ËºÆÍøÍÑ\n" #: options.h:1278 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - ¥ê¥¯¥¨¥¹¥È»þ¤Ë°ì²óÌܤΠHTTP ¥×¥í¥­¥·\n" "\t ¥À¥¤¥¸¥§¥¹¥È¥¢¥¯¥»¥¹Ç§¾Ú¤òºÆÍøÍÑ\n" #: options.h:1305 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" "\t-ssl_cert_passwd $str\n" "\t - SSL ¾ÚÌÀ¥Õ¥¡¥¤¥ë¤Î¤¿¤á¤Î¥Ñ¥¹¥ï¡¼¥É\n" #: options.h:1321 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - SSL ¾ÚÌÀ¥Õ¥¡¥¤¥ë\n" #: options.h:1337 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "\t-ssl_key_file $str - SSL ¾ÚÌÀ¥­¡¼¥Õ¥¡¥¤¥ë\n" #: options.h:1352 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" "\t-ssl_cipher_list $str\n" "\t - SSL Àܳ¤Ç»È¤¤¤¿¤¤ SSL °Å¹æ¤Î¥ê¥¹¥È\n" #: options.h:1368 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "" #: options.h:1380 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "\t-from $str - ¿È¸µ¾ÚÌÀ¤Ë»È¤¦ email ¥¢¥É¥ì¥¹\n" #: options.h:1391 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" "\t-send_from/-nosend_from\n" "\t - send From: email ¥¢¥É¥ì¥¹Æâ¤È°ì½ï¤ËÁ÷¤ë HTTP \n" "\t ¥ê¥¯¥¨¥¹¥È¤Ç¤Î¥Ø¥Ã¥À\n" #: options.h:1415 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "" "\t-identity $str - User-agent ¤ÎÆâÍÆ: HTTP ¥ê¥¯¥¨¥¹¥È\n" "\t Æâ¤Î¥Õ¥£¡¼¥ë¥É\n" #: options.h:1426 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "\t-pattern $list - ¥Õ¥¡¥¤¥ë¤Î¥ï¥¤¥ë¥É¥«¡¼¥É¥Ñ¥¿¡¼¥ó¤Î¥ê¥¹¥È\n" #: options.h:1440 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "\t-rpattern $re - ¥Õ¥¡¥¤¥ë¤ÎÀµµ¬É½¸½¥Þ¥Ã¥Á¥Ñ¥¿¡¼¥ó\n" #: options.h:1452 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" "\t-skip_pattern $list\n" "\t - ¥Õ¥¡¥¤¥ë¤Î¥¹¥­¥Ã¥×¥ï¥¤¥ë¥É¥«¡¼¥É\n" "\t ¥Ñ¥¿¡¼¥ó¤Î¥ê¥¹¥È\n" #: options.h:1467 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" "\t-skip_rpattern $re\n" "\t - ¥Õ¥¡¥¤¥ë¤Î¥¹¥­¥Ã¥×Àµµ¬É½¸½¥Þ¥Ã¥Á¥Ñ¥¿¡¼¥ó\n" #: options.h:1480 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "\t-url_pattern $list - URL ¤Î¥ï¥¤¥ë¥É¥«¡¼¥É¥Ñ¥¿¡¼¥ó¥ê¥¹¥È\n" #: options.h:1494 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "\t-url_rpattern $re - URL ¤ÎÀµµ¬É½¸½¥Þ¥Ã¥Á¥Ñ¥¿¡¼¥ó\n" #: options.h:1506 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" "\t-skip_url_pattern $list\n" "\t - URL ¤Î¥ï¥¤¥ë¥É¥«¡¼¥É¥Ñ¥¿¡¼¥ó¥ê¥¹¥È\n" #: options.h:1521 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" "\t-skip_url_rpattern $re\n" "\t - URL ¤ÎÀµµ¬É½¸½¥Þ¥Ã¥Á¥Ñ¥¿¡¼¥ó\n" #: options.h:1534 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" msgstr "" "\t-mode $mode - ưºî¥â¡¼¥É¤òÀßÄê\n" "\t normal - WWW (¥Ç¥Õ¥©¥ë¥È)¤òÄ̤¸¤¿¥ê¥½¡¼¥¹\n" "\t linkupdate - ¥í¡¼¥«¥ë¥Ä¥ê¡¼Æâ¤Î¥ê¥â¡¼¥È¥ê¥ó¥¯¤ò\n" "\t ¥¢¥Ã¥×¥Ç¡¼¥È\n" "\t sync - ¥ê¥â¡¼¥È WWW ¥µ¡¼¥Ð¤È¥í¡¼¥«¥ë¥Ä¥ê¡¼¤ò\n" "\t ƱĴ¤µ¤»¤ë\n" "\t singlepage - ¥¤¥ó¥é¥¤¥ó¥ª¥Ö¥¸¥§¥¯¥È¤È°ì½ï¤Ëñ°ì\n" "\t ¥Ú¡¼¥¸¤ò¼èÆÀ\n" "\t singlereget - °ìÉô¤Î¥Õ¥¡¥¤¥ë¤òºÆ¼èÆÀ\n" "\t resumeregets - ¤¹¤Ù¤Æ¤Î²õ¤ì¤¿¥Õ¥¡¥¤¥ë¤òºÆ¼èÆÀ\n" "\t dontstore - ʸ½ñ¤òžÁ÷¤¹¤ë¤¬Êݸ¤·¤Ê¤¤\n" "\t reminder - Êѹ¹¤µ¤ì¤¿ URL ¤ò¥Á¥§¥Ã¥¯\n" "\t ftpdir - FTP ¥Ç¥£¥ì¥¯¥È¥ê¤ÎÃæ¿È¤ò¥ê¥¹¥Èɽ¼¨\n" #: options.h:1555 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" "\t-ftp_proxy $site[:$port]\n" "\t - FTP ¥×¥í¥­¥·/¥­¥ã¥Ã¥·¥å¥µ¡¼¥Ð\n" #: options.h:1567 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" "\t-http_proxy $site[:$port]\n" "\t - HTTP ¥×¥í¥­¥·/¥­¥ã¥Ã¥·¥å¥µ¡¼¥Ð\n" #: options.h:1579 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" "\t-gopher_proxy $site[:$port]\n" "\t - Gopher ¥×¥í¥­¥·/¥­¥ã¥Ã¥·¥å¥µ¡¼¥Ð\n" #: options.h:1594 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" "\t-ssl_proxy $site[:$port]\n" "\t - SSL ¥×¥í¥­¥·¥µ¡¼¥Ð\n" #: options.h:1607 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" "\t-gopher_httpgw/-nogopher_httpgw\\n\"\n" "\t - Gopher ¥×¥í¥­¥·¤ò Gopher ÍѤΠHTTP ¥²¡¼¥È\n" "\t ¥¦¥§¥¤¤È¤·¤Æ»ØÄê\n" #: options.h:1631 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - FTP ¥×¥í¥­¥·¤ò FTP ÍѤΠHTTP ¥²¡¼¥È\n" "\t ¥¦¥§¥¤¤È¤·¤Æ»ØÄê\n" #: options.h:1655 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - FTP ÀܳÍѤΠHTTP ¥×¥í¥­¥·¤Ç CONNECT\n" "\t ¥ê¥¯¥¨¥¹¥È¤ò»ÈÍÑ\n" #: options.h:1682 msgid "\t-browser $str - your preferred browser programm\n" msgstr "\t-browser $str - »ØÄê¥Ö¥é¥¦¥¶¥×¥í¥°¥é¥à\n" #: options.h:1697 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "\t-xmaxlog - ¥í¥°¥¦¥£¥ó¥É¥¦¤ÎºÇÂçĹ\n" #: options.h:1709 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "\t-dumpscn $str - ¥·¥Ê¥ê¥ª¤ò $str ¤È¤¤¤¦ scndir ¤ËÊݸ\n" #: options.h:1720 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "\t-maxsize $nr - µö¤µ¤ì¤ëʸ½ñ¤ÎºÇÂ祵¥¤¥º(¥Ð¥¤¥È)\n" #: options.h:1731 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "\t-minsize $nr - µö¤µ¤ì¤ëºÇ¾®¥µ¥¤¥º(¥Ð¥¤¥È)\n" #: options.h:1742 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - HTTP ¥×¥í¥­¥·Ç§¾Ú¥Ñ¥¹¥ï¡¼¥É\n" #: options.h:1754 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - HTTP ¥×¥í¥­¥·Ç§¾Ú¥æ¡¼¥¶Ì¾\n" #: options.h:1766 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_auth 1/2/3\n" "\t - HTTP ¥×¥í¥­¥·Ç§¾Ú¤Îǧ¾ÚÊýË¡\n" #: options.h:1778 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "\t-logfile $file - ¥á¥Ã¥»¡¼¥¸¤òÊݸ¤¹¤ë¥Õ¥¡¥¤¥ë̾\n" #: options.h:1789 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "\t-slogfile $file - ´Ê°×¥í¥°¤òÊݸ¤¹¤ë¥Õ¥¡¥¤¥ë̾\n" #: options.h:1800 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "\t-stime/-nostime - žÁ÷¤Î³«»Ï¡¢½ªÎ»»þ´Ö¤ò½ñ¤­¹þ¤à\n" #: options.h:1822 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - sync ¥â¡¼¥É¤ÇÉÔŬÀڤʥե¡¥¤¥ë¤ä¥Ç¥£¥ì\n" "\t ¥¯¥È¥ê¤òºï½ü\n" #: options.h:1847 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" "\t-auth_file $file - ǧ¾Ú¾ðÊó¤òÊݸ¤¹¤ë¥Õ¥¡¥¤¥ë(·Á¼°¤Î\n" "\t ¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È)\n" #: options.h:1859 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" "\t-base_level $nr - ºÇ¾åÁؤ«¤é¾Êά¤¹¤ë¤¿¤á¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î\n" "\t ³¬ÁØ¥ì¥Ù¥ë\n" #: options.h:1870 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "\t-ftp_active - ¥¢¥¯¥Æ¥£¥Ö¤Ê FTP ¥Ç¡¼¥¿Àܳ¤òÁªÂò\n" #: options.h:1881 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "\t-ftp_passive - ¥¢¥¯¥Æ¥£¥Ö¤Ç¤Ê¤¤ FTP ¥Ç¡¼¥¿Àܳ¤òÁªÂò\n" #: options.h:1895 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "\t-msgcat $dir - ¥á¥Ã¥»¡¼¥¸¥«¥¿¥í¥°¤ÎÊݸ¾ì½ê\n" #: options.h:1910 msgid "\t-language $str - set language for messages\n" msgstr "\t-language $str - ¥á¥Ã¥»¡¼¥¸¤Î¤¿¤á¤Î¸À¸ì¤òÀßÄê\n" #: options.h:1922 msgid "\t-quiet - don't show output messages\n" msgstr "\t-quiet - ½ÐÎÏ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤\n" #: options.h:1933 msgid "\t-verbose - show output messages (default)\n" msgstr "\t-verbose - ½ÐÎÏ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨(¥Ç¥Õ¥©¥ë¥È)\n" #: options.h:1944 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-newer_than $time - $time ¤è¤ê¿·¤·¤¤Ê¸½ñ¤À¤±¥À¥¦¥ó¥í¡¼¥É¡£\n" "\t $time ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È: YYYY.MM.DD.hh:mm\n" #: options.h:1956 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-older_than $time - $time ¤è¤ê¤â¸Å¤¤Ê¸½ñ¤À¤±¥À¥¦¥ó¥í¡¼¥É¡£\n" "\t $time ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È: YYYY.MM.DD.hh:mm\n" #: options.h:1968 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-schedule $time - pavuk ¤Îưºî³«»Ï»þ´Ö¤ò $time ¤Ë»ØÄê¡£\n" "\t $time ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È: YYYY.MM.DD.hh:mm\n" #: options.h:1980 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "\t-reschedule $nr - ½ä²ó»þ´Ö¤Î´Ö³Ö(»þ´Ö)\n" #: options.h:1992 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" "\t-dont_leave_site/-leave_site\\n\"\n" "\t - ³«»Ï»þ¤Î URL ¤Î¥µ¥¤¥È¤ò»Ä¤·¤Æ¤ª¤¯\n" #: options.h:2015 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" "\t-dont_leave_dir/-leave_dir\n" "\t - ³«»Ï»þ¤Î URL ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò»Ä¤·¤Æ¤ª¤¯\n" #: options.h:2038 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" "\t-preserve_time/-nopreserve_time\n" "\t - ʸ½ñ¤ÎÊѹ¹»þ´Ö¤òÊÝ»ý\n" #: options.h:2061 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" "\t-preserve_perm/-nopreserve_perm\n" "\t - ʸ½ñ¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÊÝ»ý\n" #: options.h:2084 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤òÊÝ»ý\n" #: options.h:2107 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" #: options.h:2119 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "\t-cookie_file $file - cookie ¾ðÊó¤òÊݸ¤¹¤ë¥Õ¥¡¥¤¥ë\n" #: options.h:2130 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" "\t-cookie_send/-nocookie_send\n" "\t - HTTP ¥ê¥¯¥¨¥¹¥È»þ¤Ë cookie ¾ðÊó¤òÁ÷¤ë\n" #: options.h:2153 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" "\t-cookie_recv/-nocookie_recv\n" "\t - HTTP ±þÅú¤«¤é¤Î cookie ¤ò¼õ¤±Æþ¤ì¤ë\n" #: options.h:2176 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" "\t-cookie_update/-nocookie_update\n" "\t - cookie ¥Õ¥¡¥¤¥ë¤Î cookie ¤ò¹¹¿·\n" #: options.h:2199 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" "\t-cookie_check/-nocookie_check\n" "\t - cookie ¤¬¥½¡¼¥¹¥É¥á¥¤¥ó¤ËÂФ·¤ÆÀßÄꤵ¤ì¤Æ\n" "\t ¤¤¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë\n" #: options.h:2222 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "\t-cookies_max $nr - cookie ¥­¥ã¥Ã¥·¥åÆâ¤Î cookie ¤ÎºÇÂç¿ô\n" #: options.h:2233 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" "\t-disabled_cookie_domains $list\n" "\t - ¥«¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤¿¡¢¶Ø»ß¤µ¤ì¤¿ cookie\n" "\t ¥É¥á¥¤¥ó¤Î¥ê¥¹¥È\n" #: options.h:2245 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - HTML ¥¿¥° $TAG ¤Î°À­ $ATTRIB ¤«¤é¤Î\n" "\t URL ¤Î½èÍý¤ò̵¸ú¤Ë¤¹¤ë\n" #: options.h:2258 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\\n\"\n" "\t - HTML ¥¿¥° $TAG ¤Î°À­ $ATTRIB ¤«¤é¤Î\n" "\t URL ¤Î½èÍý¤òÍ­¸ú¤Ë¤¹¤ë\n" #: options.h:2274 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "\t-gui_font $font - GUI ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Î¥Õ¥©¥ó¥È̾\n" #: options.h:2286 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" "\t-user_condition $str\n" "\t - ¸·³Ê¤Ê¤¤¤¯¤Ä¤«¤Î URL ¤Ë¤Ä¤¤¤Æ user-exit\n" "\t ¥¹¥¯¥ê¥×¥È¤ò»ÈÍÑ(¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¥Þ¥Ë¥å¥¢¥ë¤ò\n" "\t »²¾È)\n" #: options.h:2299 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "\t-tr_del_chr $str - ¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾¤«¤é¼è¤ê½ü¤¯¥­¥ã¥é¥¯¥¿\n" #: options.h:2311 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" "\t-tr_str_str $str1 $str2\n" "\t - ¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾Æâ¤Ç $str1 ¤ò $str2 ¤ØÊÑ´¹\n" #: options.h:2323 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - ¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾Æâ¤Ç $chrset1 ¤ò \n" "\t $chrset2 ¤ØÊÑ´¹\n" #: options.h:2335 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "" "\t-index_name $str - _._.html ¤ÎÂå¤ê¤Ë»È¤¦¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹Ì¾\n" #: options.h:2346 msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "\t-store_name $str - ºÇ½é¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¤¿Ê¸½ñ¤Î¥Õ¥¡¥¤¥ë̾\n" #: options.h:2368 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - ¥ê¥â¡¼¥È¥µ¡¼¥Ð¤¬Ä󶡤¹¤ë¥µ¥¤¥º¾ðÊó¤È\n" "\t ¼õ¤±¼è¤Ã¤¿¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤òÈæ³Ó\n" #: options.h:2392 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" "\t-urls_file $file - URL ¤òÆþÎÏ¤Ë \".\" ¤¬¸½¤ì¤ë¹Ô¤Þ¤Ç¥Õ¥¡¥¤¥ë¤«¤é\n" "\t ÆÉ¤ß¹þ¤à\n" #: options.h:2404 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" "\t-bg/-nobg - pavuk ¥×¥í¥»¥¹¤òüËö¤«¤éÀÚÎ¥¤·¡¢²èÌ̤Ë\n" "\t ²¿¤â¥á¥Ã¥»¡¼¥¸¤ò½ÐÎϤ·¤Ê¤¤\n" #: options.h:2427 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "\t-maxrate $nr - žÁ÷ºÇÂç®ÅÙ¤ÎÀ©¸Â (kB/s)\n" #: options.h:2438 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "\t-minrate $nr - žÁ÷ºÇÄã®ÅÙ¤ÎÀ©¸Â (kB/s)\n" #: options.h:2449 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "\t-bufsize $nr - ÆÉ¤ß¹þ¤ß¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º (kB)\n" #: options.h:2460 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "\t-file_quota $nr - žÁ÷¥Õ¥¡¥¤¥ë¤ÎºÇÂ祵¥¤¥º (kB)\n" #: options.h:2471 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "\t-trans_quota $nr - ¥»¥Ã¥·¥ç¥óËè¤ÎžÁ÷ÎÌÁí·×¤ÎºÇÂçÃÍ (kB)\n" #: options.h:2482 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "\t-fs_quota $nr - ¥Ç¥£¥¹¥¯¥Õ¥ê¡¼¥¹¥Ú¡¼¥¹¤Î³ä¤êÅö¤Æ (kB)\n" #: options.h:2493 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" "\t-enable_js/-disable_js\n" "\t - javascript ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É¤ò\n" "\t ²Äǽ¤Ë¤¹¤ë\n" #: options.h:2516 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" "\t-fnrules $t $m $r - ¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë̾¤ÎÀ¸À®¥ë¡¼¥ë\n" "\t (¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È)\n" #: options.h:2528 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" "\t-store_info/-nostore_info\n" "\t - ³ÆÊ¸½ñËè¤Ëʸ½ñ¾ðÊó¥Õ¥¡¥¤¥ë¤òÊݸ\n" #: options.h:2551 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" "\t-all_to_local/-noall_to_local\n" "\t - ¥À¥¦¥ó¥í¡¼¥Éľ¸å¤ËHTML ʸ½ñÆâ¤Î¤¹¤Ù¤Æ¤Î\n" "\t ¥ê¥ó¥¯¤ò¥í¡¼¥«¥ë¤ËÊÑ´¹\n" #: options.h:2575 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" "\t-sel_to_local/-nosel_to_local\n" "\t - ¥À¥¦¥ó¥í¡¼¥Éľ¸å¤Ë¾ò·ï¤òËþ­¤¹¤ë¤¹¤Ù¤Æ¤Î\n" "\t HTML ʸ½ñÆâ¤Î¥ê¥ó¥¯¤ò¥í¡¼¥«¥ë¤ËÊݸ\n" #: options.h:2600 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" "\t-all_to_remote/-noall_to_remote\n" "\t - ¥À¥¦¥ó¥í¡¼¥Éľ¸å¤Ë HTML ʸ½ñÆâ¤Î¤¹¤Ù¤Æ¤Î\n" "\t ¥ê¥ó¥¯¤ò¥ê¥â¡¼¥È¤ÇÊݸ¤·¡¢¤½¤ì°Ê¾åÊѲ½¤ò\n" "\t ²Ã¤¨¤Ê¤¤\n" #: options.h:2625 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "\t-remind_cmd $str - reminder ¥â¡¼¥É¤Ç·ë²Ì¤òÁ÷¤ë¥³¥Þ¥ó¥É\n" #: options.h:2636 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" "\t-auto_referer/-noauto_referer\n" "\t - ³«»Ï»þ¤Î³Æ URL ¤ØÁ÷¤ë HTTP ¥ê¥¯¥¨¥¹¥È¤Î\n" "\t Referer: ¥Õ¥£¡¼¥ë¥É¤Ï¤½¤ì¤é¤Î URL ¤ò´Þ¤à\n" #: options.h:2660 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" "\t-url_strategy $strategy\n" "\t - URL ¤Ë¤Ä¤¤¤Æ¤Î½ä²ó·×²è\n" "\t (¤¹¤Ê¤ï¤Á¤¤¤¯¤Ä¤Î URL ¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤«)\n" "\t $strategy ¤Î¹àÌÜ:\n" "\t level - URL ¥Ä¥ê¡¼Æâ¤Î¿¼¤µ½ç\n" "\t leveli - URL ¥Ä¥ê¡¼Æâ¤Î¿¼¤µ½ç¡¢¤¿¤À¤·¥¤¥ó\n" "\t ¥é¥¤¥ó¥ª¥Ö¥¸¥§¥¯¥È¤òÀè¤Ë\n" "\t pre - URL ¥Ä¥ê¡¼¤ÎÀè½ç¤Ç\n" "\t pre - URL ¥Ä¥ê¡¼¤ÎÀè½ç¤Ç¡¢¤¿¤À¤·¥¤¥ó¥é\n" "\t ¥¤¥ó¥ª¥Ö¥¸¥§¥¯¥È¤òÀè¤Ë\n" #: options.h:2683 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "\t-nscache_dir $dir - Netscape ¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Ñ¥¹\n" #: options.h:2698 #, fuzzy msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr " - Netscape ¥Ö¥é¥¦¥¶¥­¥ã¥Ã¥·¥å¤«¤é¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ß¤ò¥µ¥Ý¡¼¥È\n" #: options.h:2728 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" "\t-remove_adv/-noremove_adv\n" "\t - ÀëÅÁ¥Ð¥Ê¡¼¤Îºï½üµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¡£\n" "\t Àµµ¬É½¸½¤òÀßÄꤷ¡¢°ìÃפ¹¤ëÀëÅÁ¥Ð¥Ê¡¼¤ò\n" "\t ºï½ü¤¹¤ë¤Ë¤Ï -adv_re ¥ª¥×¥·¥ç¥ó¤¬»ÈÍÑ\n" #: options.h:2761 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "\t-adv_re $RE - ÀëÅÁ¥Ð¥Ê¡¼ URL ¤Ë°ìÃפ¹¤ëÀµµ¬É½¸½\n" #: options.h:2777 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" "\t-check_bg/-nocheck_bg\n" "\t - ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÇưºîÃæ¤Ë¥á¥Ã¥»¡¼¥¸¤ò\n" "\t ²èÌ̤˽ÐÎϤ·¤Ê¤¤\n" #: options.h:2806 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" "\t-send_if_range/-nosend_if_range\n" "\t - ¥µ¡¼¥Ð¤¬ºÆ¼èÆÀ¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤¬Æó¤Ä¤Î\n" "\t ¥ê¥¯¥¨¥¹¥È¤Ë¤Ä¤¤¤Æ°Û¤Ê¤ë Etags ¤òÀ¸À®¤¹¤ë\n" "\t ¤è¤¦¤Ê¾ì¹ç¤ËHTTP ¥ê¥¯¥¨¥¹¥ÈÆâ¤Ç if_Range\n" "\t ¥Ø¥Ã¥À¤òÁ÷¤ë\n" #: options.h:2831 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "\t-sched_cmd $str - ¥¹¥±¥¸¥å¡¼¥ë¥³¥Þ¥ó¥É\n" #: options.h:2842 #, fuzzy msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" "\t-unique_log/-nounique_log\n" "\t - ¥ª¥ê¥¸¥Ê¥ë¥í¥°¥Õ¥¡¥¤¥ë¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë\n" "\t ¾ì¹ç¤Ë¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Ê¤¤Â¾¤Î with numbering \n" "\t extension ¤ò¤ß¤Ä¤±¤è¤¦¤È»î¤ß¤ë\n" #: options.h:2866 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" "\t-post_cmd $str - ʸ½ñ¤Î¥À¥¦¥ó¥í¡¼¥ÉÀ®¸ù¸å¤Ë¼Â¹Ô¤µ¤ì¤ë\n" "\t ¸å½èÍýÍѤΥ³¥Þ¥ó¥É\n" #: options.h:2882 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" "\t-ssl_version $v - Àܳ»þ¤Ë»ÈÍѤ¹¤ëSSL ¥×¥í¥È¥³¥ë¤Î\n" "\t ¥Ð¡¼¥¸¥ç¥ó¡£Í­¸ú¤ÊÃÍ¤Ï ssl23¡¢ssl2¡¢\n" "\t ssl3¡¢tls1¡£\n" #: options.h:2885 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" "\t-ssl_version $v - Àܳ»þ¤Ë»ÈÍѤ¹¤ë SSL ¥×¥í¥È¥³¥ë¤Î\n" "\t ¥Ð¡¼¥¸¥ç¥ó¡£Í­¸ú¤ÊÃÍ¤Ï ssl23¡¢ssl2¡¢\n" "\t ssl3¡£\n" #: options.h:2903 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" "\t-unique_sslid/-nounique_sslid\n" "\t - ³Æ SSL ¥»¥Ã¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¸ÇÍ­¤Î SSL ID ¤ò\n" "\t »ÈÍÑ\n" #: options.h:2931 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "\t-httpad $hdr - Äɲà HTTP ¥Ø¥Ã¥À\n" #: options.h:2942 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "\t-statfile $str - ¥À¥¦¥ó¥í¡¼¥É¿Ê¹Ô¾õ¶·¤ÎÅý·×¥ì¥Ý¡¼¥È\n" #: options.h:2956 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "\t-ewait - ¥À¥¦¥ó¥í¡¼¥É½ªÎ»¸å¤Ë¥×¥í¥°¥é¥à¤ò½ªÎ»\n" #: options.h:2987 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "\t-aip_pattern $re - µö¤µ¤ì¤ë¥µ¡¼¥Ð¤Î IP ¥¢¥É¥ì¥¹¤Î¥Ñ¥¿¡¼¥ó\n" #: options.h:3002 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "\t-dip_pattern $re - ¶Ø»ß¤µ¤ì¤¿¥µ¡¼¥Ð¤Î IP ¥¢¥É¥ì¥¹¤Î¥Ñ¥¿¡¼¥ó\n" #: options.h:3014 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "" "\t-site_level $nr - ³«»Ï»þ¤Î¥µ¥¤¥È¤«¤éÎ¥¤ì¤¿µö¤µ¤ì¤ë¥µ¥¤¥È¤Î\n" "\t ºÇÂç¿ô\n" #: options.h:3026 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" "\t-use_http11/-nouse_http11\n" "\t - HTTP/1.1 ¥×¥í¥È¥³¥ëµ¡Ç½¤ò»ÈÍѤ¹¤ë\n" "\t (¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥ª¥Õ)\n" #: options.h:3050 #, fuzzy msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" "\t-max_time $nr - ¥×¥í¥°¥é¥à¤ÎºÇÂçÁí¼Â¹Ô»þ´Ö¤òʬ¤ÇÀßÄê\n" "\t (¥Ç¥Õ¥©¥ë¥È¤Ï 0 ¤ÇÀ©¸Â¤Ê¤·)\n" #: options.h:3065 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" "\t-local_ip $str - »ÈÍѤ¹¤ë¥Í¥Ã¥È¥ï¡¼¥¯¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Î\n" "\t ¥í¡¼¥«¥ë IP ¥¢¥É¥ì¥¹¡£¥Þ¥ë¥Á¥Û¡¼¥à¤Î\n" "\t ¥Þ¥·¥ó¤Ë¤Ä¤¤¤Æ»ÈÍÑ\n" #: options.h:3077 msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-request $req - GET ¤¢¤ë¤¤¤Ï POST ¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ»ØÄꤹ¤ë\n" "\t ¤Î¤Ë»ÈÍѤ¹¤ë³ÈÄ¥¥ê¥¯¥¨¥¹¥È¾ðÊó\n" "\t $req ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È:\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È)\n" #: options.h:3095 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" "\t-hash_size $nr - ¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¥Á¥å¡¼¥Ë¥ó¥°¤Î¤¿¤á¤Î\n" "\t ÆâÉô¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Î¥µ¥¤¥º\n" #: options.h:3109 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "\t-nthreads $nr - Ʊ»þ¥À¥¦¥ó¥í¡¼¥É¥¹¥ì¥Ã¥É¿ô¤òÀßÄê\n" #: options.h:3124 msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" "\t-immesg/-noimmesg - (MT ¤Î´ÑÅÀ¤«¤é)°ÂÁ´¤Ç¤Ê¤¯¤È¤âȯÀ¸¸å¤Ë¨ºÂ¤Ë\n" "\t ¥á¥Ã¥»¡¼¥¸¤ò½ÐÎÏ\n" #: options.h:3152 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-formdata $data - ʸ½ñ¥Ä¥ê¡¼¤ò²£ÃǤ¹¤ë´Ö¤Ë¤ß¤Ä¤«¤Ã¤¿ HTML \n" "\t ¥Õ¥©¡¼¥à¤Ë¤Ä¤¤¤Æ»ØÄê HTML ¥Õ¥©¡¼¥à¥Õ¥£¡¼\n" "\t ¥ë¥É¤ò»ÈÍÑ¡£¤³¤Î¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤵ¤ì¤¿¥Õ\n" "\t ¥©¡¼¥à¤À¤±¤¬¼«Æ°Åª¤Ë½èÍý¤µ¤ì¤ë¡£\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È)\n" #: options.h:3170 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" "\t-dumpfd $nr - ¥Õ¥¡¥¤¥ë¤ÎÂå¤ê¤Ëʸ½ñ¤ÎÆâÍÆ¤ò½ÐÎϤ¹¤ë\n" "\t ¥Õ¥£¡¼¥ë¥É¥¹¥¯¥ê¥×¥¿¿ô\n" #: options.h:3182 msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" "\t-dump_urlfd $nr - ʸ½ñÆâ¤Ç¤ß¤Ä¤«¤Ã¤¿¤¹¤Ù¤Æ¤Î URL ¤ò½ÐÎÏ\n" "\t ¤¹¤ë¥Õ¥£¡¼¥ë¥É¥¹¥¯¥ê¥×¥¿¿ô\n" #: options.h:3194 msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" "\t-del_after/-nodel_after\n" "\t - FTP ʸ½ñ¤òžÁ÷À®¸ù¸å¤Ë¾Ãµî\n" #: options.h:3217 msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" "\t-unique_name/-nounique_name\n" "\t - ¾ï¤Ë³ÆÊ¸½ñ¤ËÂФ·¤Æ¸ÇÍ­¤Î̾Á°¤òÀ¸À®\n" #: options.h:3240 msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - ºÇ½é¤ËÆþ¤Ã¤¿¥µ¥¤¥È¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òÎ¥¤ì¤ë\n" #: options.h:3263 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" "\t-singlepage/-nosinglepage\n" "\t - ¤¹¤Ù¤Æ¤Î¥¤¥ó¥é¥¤¥ó¥ª¥Ö¥¸¥§¥¯¥È¤È°ì½ï¤Ë\n" "\t HTML ¥Ú¡¼¥¸¤ò¥À¥¦¥ó¥í¡¼¥É\n" #: options.h:3286 #, fuzzy msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" "\t-all_to_remote/-noall_to_remote\n" "\t - ¥À¥¦¥ó¥í¡¼¥Éľ¸å¤Ë HTML ʸ½ñÆâ¤Î¤¹¤Ù¤Æ¤Î\n" "\t ¥ê¥ó¥¯¤ò¥ê¥â¡¼¥È¤ÇÊݸ¤·¡¢¤½¤ì°Ê¾åÊѲ½¤ò\n" "\t ²Ã¤¨¤Ê¤¤\n" #: options.h:3311 #, fuzzy msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - ¥ê¥¯¥¨¥¹¥È»þ¤Ë°ì²óÌܤΠHTTP ¥À¥¤¥¸¥§¥¹¥È\n" "\t ¥¢¥¯¥»¥¹Ç§¾Ú¤òÎ×»þ¤ËºÆÍøÍÑ\n" #: options.h:3338 #, fuzzy msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - HTTP ¥×¥í¥­¥·Ç§¾Ú¥æ¡¼¥¶Ì¾\n" #: options.h:3354 #, fuzzy msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - HTTP ¥×¥í¥­¥·Ç§¾Ú¥æ¡¼¥¶Ì¾\n" #: options.h:3370 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" #: options.h:3383 #, fuzzy msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" "\t-dump_urlfd $nr - ʸ½ñÆâ¤Ç¤ß¤Ä¤«¤Ã¤¿¤¹¤Ù¤Æ¤Î URL ¤ò½ÐÎÏ\n" "\t ¤¹¤ë¥Õ¥£¡¼¥ë¥É¥¹¥¯¥ê¥×¥¿¿ô\n" #: options.h:3395 #, fuzzy msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤òÊÝ»ý\n" #: options.h:3421 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" #: options.h:3441 msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" #: options.h:3459 #, fuzzy msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" "\t-http_proxy_user $str\n" "\t - HTTP ¥×¥í¥­¥·Ç§¾Ú¥æ¡¼¥¶Ì¾\n" #: options.h:3471 #, fuzzy msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - HTTP ¥×¥í¥­¥·Ç§¾Ú¥Ñ¥¹¥ï¡¼¥É\n" #: options.h:3483 #, fuzzy msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" "\t-singlepage/-nosinglepage\n" "\t - ¤¹¤Ù¤Æ¤Î¥¤¥ó¥é¥¤¥ó¥ª¥Ö¥¸¥§¥¯¥È¤È°ì½ï¤Ë\n" "\t HTML ¥Ú¡¼¥¸¤ò¥À¥¦¥ó¥í¡¼¥É\n" #: options.h:3506 #, fuzzy msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - FTP ÀܳÍѤΠHTTP ¥×¥í¥­¥·¤Ç CONNECT\n" "\t ¥ê¥¯¥¨¥¹¥È¤ò»ÈÍÑ\n" #: options.h:3519 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" #: options.h:3544 #, fuzzy msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - sync ¥â¡¼¥É¤ÇÉÔŬÀڤʥե¡¥¤¥ë¤ä¥Ç¥£¥ì\n" "\t ¥¯¥È¥ê¤òºï½ü\n" #: options.h:3568 #, fuzzy msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" "\t-scndir $dir - ¥·¥Ê¥ê¥ª(ÀßÄê¥Õ¥¡¥¤¥ë)¤òÊݸ¤¹¤ë\n" "\t ¥Ç¥£¥ì¥¯¥È¥ê\n" #: options.h:3583 #, fuzzy msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "\t-nscache_dir $dir - Netscape ¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Ñ¥¹\n" #: options.h:3595 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3607 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3619 #, fuzzy msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - ¥ê¥â¡¼¥È¥µ¡¼¥Ð¤¬Ä󶡤¹¤ë¥µ¥¤¥º¾ðÊó¤È\n" "\t ¼õ¤±¼è¤Ã¤¿¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤òÈæ³Ó\n" #: options.h:3643 msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" #: options.h:3659 #, fuzzy msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - SSL ¾ÚÌÀ¥Õ¥¡¥¤¥ë\n" #: options.h:3672 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" #: pavuk.c:106 msgid "QUIT signal catched\n" msgstr "QUIT ¥·¥°¥Ê¥ë¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿\n" #: pavuk.c:259 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "¥Ñ¥é¥á¡¼¥¿ \"-msgcat\" ¤Î¿ô¤¬ÉÔ½¼Ê¬¤Ç¤¹\n" #: pavuk.c:273 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "¥Ñ¥é¥á¡¼¥¿ \"-scenario\" ¤Î¿ô¤¬ÉÔ½¼Ê¬¤Ç¤¹\n" #: pavuk.c:303 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "" "¥¨¥é¡¼: -dumpfd ¥ª¥×¥·¥ç¥óÆâ¤ÇÉÔÀµ¤Ê¥Õ¥¡¥¤¥ë¥Ç¥¹¥¯¥ê¥×¥¿¤¬ÅϤµ¤ì¤Þ¤·¤¿\n" #: pavuk.c:314 msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "" "¥¨¥é¡¼: -dump_urlfd ¥ª¥×¥·¥ç¥óÆâ¤ÇÉÔÀµ¤Ê¥Õ¥¡¥¤¥ë¥Ç¥¹¥¯¥ê¥×¥¿¤¬ÅϤµ¤ì¤Þ¤·¤¿\n" #: pavuk.c:366 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "·Ù¹ð: scndir ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó - º£¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÊݸ¤·¤Þ¤¹\n" #: pavuk.c:403 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "" "pavuk ¤ò¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ë fork ¤Ç¤­¤Þ¤»¤ó - ¥Õ¥©¥¢¥°¥é¥¦¥ó¥É¤Ç¼Â¹Ô¤·¤Þ¤¹\n" #: pavuk.c:407 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "Pavuk ¤Ï PID %d ¤Ç¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¼Â¹Ô¤·¤Þ¤¹\n" #: pavuk.c:427 #, c-format msgid "reading URLs from file - %s\n" msgstr "¥Õ¥¡¥¤¥ë¤«¤é URL ¤òÆÉ¤ß¹þ¤ßÃæ - %s\n" #: recurse.c:82 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "¥í¥Ã¥¯¤µ¤ì¤¿ URL ¤ò no. %d ¤ÇºÆ¥¹¥±¥¸¥å¡¼¥ë\n" #: recurse.c:95 msgid "Running post-processing command\n" msgstr "½èÍý¸å¥³¥Þ¥ó¥É¤ò¼Â¹ÔÃæ\n" #: recurse.c:243 #, c-format msgid "retry no. %d\n" msgstr "ºÆ»î¹Ô no. %d\n" #: recurse.c:246 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "" #: recurse.c:249 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "" #: recurse.c:260 recurse.c:394 msgid "Starting download" msgstr "¥À¥¦¥ó¥í¡¼¥É³«»Ï" #: recurse.c:284 msgid "Already processed\n" msgstr "´û¤Ë½èÍýºÑ\n" #: recurse.c:291 msgid "Disallowed by user\n" msgstr "¥æ¡¼¥¶¤Ë¤è¤Ã¤Æ¶Ø»ß¤µ¤ì¤¿\n" #: recurse.c:305 msgid "Disallowed by rules\n" msgstr "¥ë¡¼¥ë¤Ç¶Ø»ß¤µ¤ì¤¿\n" #: recurse.c:312 msgid "Checking \"robots.txt\"" msgstr "\"robots.txt\" ¤ò¥Á¥§¥Ã¥¯Ãæ" #: recurse.c:316 msgid "Disallowed by \"robots.txt\"\n" msgstr "\"robots.txt\" ¤Ç¶Ø»ß¤µ¤ì¤¿\n" #: recurse.c:326 msgid "This URL type is not supported with ftpdir mode\n" msgstr "¤³¤Î URL ¥¿¥¤¥×¤Ï ftpdir ¥â¡¼¥É¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" #: recurse.c:346 msgid "No transfer - file not expired\n" msgstr "žÁ÷¤Ê¤· - ¥Õ¥¡¥¤¥ë¤Ï̤´°Î»\n" #: recurse.c:362 #, c-format msgid "Starting time : %s\n" msgstr "³«»Ï»þ´Ö : %s\n" #: recurse.c:404 recurse.c:563 #, c-format msgid "Ending time : %s\n" msgstr "½ªÎ»»þ´Ö : %s\n" #: recurse.c:411 recurse.c:566 msgid "download" msgstr "¥À¥¦¥ó¥í¡¼¥É" #: recurse.c:511 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "ºÇ¸å¤Îʸ½ñ¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹ -> 5 Éôֵٻߤ·¤Þ¤¹\n" #: recurse.c:577 #, fuzzy msgid "Relocating and scanning HTML document" msgstr "HTML ʸ½ñ¤òºÆÇÛÃÖÃæ" #: recurse.c:629 #, fuzzy msgid "Dumping processed document" msgstr "¤Þ¤À̤½èÍý\n" #: recurse.c:649 msgid "Storing document" msgstr "ʸ½ñ¤òÊÝÂ¸Ãæ" #: recurse.c:655 msgid "Store failed\n" msgstr "Êݸ¼ºÇÔ\n" #: recurse.c:762 recurse.c:845 msgid "Done" msgstr "´°Î»" #: recurse.c:922 remind.c:379 msgid "Sleeping ..." msgstr "µÙ»ßÃæ ..." #: recurse.c:936 remind.c:396 msgid "Exiting ..." msgstr "½ªÎ»Ãæ ..." #: recurse.c:1048 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d ¥Ð¥¤¥È)\n" #: recurse.c:1106 msgid "Searching for files to resume" msgstr "ºÆ³«¤¹¤ë¥Õ¥¡¥¤¥ë¤ò¸¡º÷" #: recurse.c:1133 #, c-format msgid "Adding %s to resume list\n" msgstr "%s ¤òºÆ³«¥ê¥¹¥È¤ËÄɲÃ\n" #: recurse.c:1165 msgid "Searching for documents to synchronize" msgstr "Ʊ´ü¤¹¤ëʸ½ñ¤ò¸¡º÷" #: recurse.c:1220 recurse.c:1245 #, fuzzy, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "Ʊ´ü¥ê¥¹¥È¤Ë %s ¤òÄɲÃ\n" #: remind.c:45 #, c-format msgid "Checking: %s\n" msgstr "¥Á¥§¥Ã¥¯: %s\n" #: remind.c:170 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "ÉÔÀµ¤Ê reminder ¥Ç¡¼¥¿¥Ù¡¼¥¹¥¨¥ó¥È¥ê - %s\n" #: remind.c:529 msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "pavuk ¤ò reminder ¥â¡¼¥É¤Ç¼Â¹Ô¤·¤¿·ë²Ì\n" "\n" #: remind.c:540 msgid "Changed URLs\n" msgstr "Êѹ¹¤µ¤ì¤¿ URL\n" #: remind.c:561 msgid "URLs with some errors\n" msgstr "¥¨¥é¡¼¤Îµ¯¤­¤¿ URL\n" #: robots.c:166 msgid "transfering \"robots.txt\"" msgstr "\"robots.txt\" ¤òžÁ÷" #: robots.c:169 msgid "transfering \"robots.txt\"\n" msgstr "\"robots.txt\" ¤òžÁ÷\n" #: robots.c:230 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "Hmm: \"robots.txt\" ¤ò %s ¤Ø¥ê¥À¥¤¥ì¥¯¥È ???\n" #: stats.c:138 stats.c:221 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "¥­¥å¡¼Æâ¤Î URL ¤ÎÁí·×: %d\n" #: stats.c:139 stats.c:223 #, c-format msgid "Starting urls: %d\n" msgstr "³«»Ï URL: %d\n" #: stats.c:142 stats.c:228 msgid "Not processed yet: %d (%3d%%)\n" msgstr "¤Þ¤À½èÍýÅÓÃæ: %d (%3d%%)\n" #: stats.c:147 stats.c:235 msgid "Processed OK: %d (%3d%%)\n" msgstr "½èÍý´°Î»: %d (%3d%%)\n" #: stats.c:150 stats.c:241 msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "¥í¡¼¥«¥ë¥Ä¥ê¡¼¤«¤éÆÉ¤ß¹þ¤ß: %d (%3d%%)\n" #: stats.c:153 stats.c:247 msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "Netscape ¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê¤«¤éÆÉ¤ß¹þ¤ß : %d (%3d%%)\n" #: stats.c:156 stats.c:253 msgid "Downloaded over network: %d (%3d%%)\n" msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¤òÄ̤¸¤Æ¥À¥¦¥ó¥í¡¼¥É: %d (%3d%%)\n" #: stats.c:159 stats.c:259 msgid "Moved to another location: %d (%3d%%)\n" msgstr "¾¤Î¾ì½ê¤Ø°Üư: %d (%3d%%)\n" #: stats.c:163 stats.c:265 msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "¥À¥¦¥ó¥í¡¼¥É¤·¤¿¤â¤Î¤¬²õ¤ì¤Æ¤¤¤Þ¤¹: %d (%3d%%)\n" #: stats.c:169 stats.c:272 msgid "Non fatal errors: %d (%3d%%)\n" msgstr "Ã×̿Ū¤Ê¥¨¥é¡¼¤Ê¤·: %d (%3d%%)\n" #: stats.c:175 stats.c:279 msgid "Not found documents: %d (%3d%%)\n" msgstr "¤ß¤Ä¤«¤é¤Ê¤¤Ê¸½ñ: %d (%3d%%)\n" #: stats.c:181 stats.c:286 msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "Ã×̿Ū¤Ê¥¨¥é¡¼¤Î¤¢¤Ã¤¿Ê¸½ñ: %d (%3d%%)\n" #: stats.c:187 msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "¾õÂÖÉÔÌÀ¤Îʸ½ñ: %d (%3d%%)\n" #: stats.c:293 msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "ÉÔÌÀ³Î¤Ê¾õÂÖ¤Îʸ½ñ: %d (%3d%%)\n" #: stats.c:358 msgid "Pavuk: save status page" msgstr "Pavuk: ¾õÂÖ¥Ú¡¼¥¸¤òÊݸ" #: stats.c:379 stats.c:537 msgid "Not available yet" msgstr "¤Þ¤ÀÍøÍѤǤ­¤Þ¤»¤ó" #: stats.c:462 msgid "Pavuk: status page" msgstr "Pavuk: ¾õÂÖ¥Ú¡¼¥¸" #: stats.c:479 msgid "Status page" msgstr "¾õÂÖ¥Ú¡¼¥¸" #: stats.c:492 msgid "Save ..." msgstr "Êݸ ..." #: stats.c:499 msgid "Refresh" msgstr "¹¹¿·" #: stats.c:526 msgid "Try download" msgstr "¥À¥¦¥ó¥í¡¼¥É»î¹Ô" #: tools.c:109 msgid "no error" msgstr "¥¨¥é¡¼¤Ê¤·" #: tools.c:114 msgid "host not found" msgstr "¥Û¥¹¥È¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó" #: tools.c:119 msgid "temporary error (try again later)" msgstr "°ì»þŪ¥¨¥é¡¼(¸å¤ÇºÆ»î¹Ô¤·¤Æ²¼¤µ¤¤)" #: tools.c:124 msgid "non recoverable error" msgstr "²óÉüÉÔǽ¤Ê¥¨¥é¡¼" #: tools.c:129 msgid "name is valid, but doesn't have an IP address" msgstr "̾Á°¤ÏŬÀڤǤ¹¤¬¡¢IP ¥¢¥É¥ì¥¹¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó" #: tools.c:133 msgid "unknown hostname translation error" msgstr "ÉÔÌÀ¤Ê¥Û¥¹¥È̾žÁ÷¥¨¥é¡¼" #: tools.c:315 tools.c:330 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "FD ¾å¤Ç¤Î¥í¥Ã¥¯¤Î²ò½ü¤òÂԤäƤ¤¤Þ¤¹: %d\n" #: uconfig.c:998 msgid "Bad parameter - Working subdirectory" msgstr "ÉÔÀµ¤Ê¥Ñ¥é¥á¡¼¥¿ - ºî¶È¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê" #: uconfig.c:1178 msgid "Bad parameter - Cache directory" msgstr "ÉÔÀµ¤Ê¥Ñ¥é¥á¡¼¥¿ - ¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê" #: uexit.c:30 msgid "Error occured while executing user-exit script" msgstr "user-exit ¥¹¥¯¥ê¥×¥È¤ò¼Â¹ÔÃæ¤Ë¥¨¥é¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿" #: update_links.c:40 #, c-format msgid "Entering directory %s\n" msgstr "¥Ç¥£¥ì¥¯¥È¥ê %s ¤ËÆþ¤ê¤Þ¤¹\n" #: update_links.c:69 #, c-format msgid "Relocating %s\n" msgstr "%s ¤òºÆÇÛÃÖÃæ\n" #: update_links.c:72 #, c-format msgid "Omitting %s\n" msgstr "%s ¤ò¾ÊÎ¬Ãæ\n" #: update_links.c:86 #, c-format msgid "Leaving directory %s\n" msgstr "¥Ç¥£¥ì¥¯¥È¥ê %s ¤òÎ¥¤ì¤Þ¤¹\n" #: update_links.c:104 #, c-format msgid "Can't open directory %s\n" msgstr "¥Ç¥£¥ì¥¯¥È¥ê %s ¤ò³«¤±¤Þ¤»¤ó\n" #: url.c:1000 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "URL ¥¿¥¤¥× \"%s\" ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" #: url.c:1152 msgid "Moved to already processed URL.\n" msgstr "´û¤Ë½èÍýºÑ¤Î URL ¤Ø°Üư¤·¤Þ¤¹\n" #: url.c:2767 #, fuzzy msgid "Missing specification of URL in request\n" msgstr "POST ¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë¥ê¥¯¥¨¥¹¥È¥Õ¥£¡¼¥ë¥É»ØÄ꤬¤ß¤Ä¤«¤ê¤Þ¤»¤ó\n" #: url.c:2776 msgid "Missing request fields specification for POST request\n" msgstr "POST ¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë¥ê¥¯¥¨¥¹¥È¥Õ¥£¡¼¥ë¥É»ØÄ꤬¤ß¤Ä¤«¤ê¤Þ¤»¤ó\n" #: url.c:2784 msgid "Multipart encoding not supported with GET requests\n" msgstr "GET ¥ê¥¯¥¨¥¹¥È¤Ë¤Ä¤¤¤Æ¥Þ¥ë¥Á¥Ñ¡¼¥È¥¨¥ó¥³¡¼¥É¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" #~ msgid "Unknown switch %s\n" #~ msgstr "ÉÔÌÀ¤Ê¥¹¥¤¥Ã¥Á %s\n" #~ msgid "%s: ERROR: unable to change directory\n" #~ msgstr "%s: ¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥ê¤ò°Üư¤Ç¤­¤Þ¤»¤ó\n" #~ msgid "Download javascript script sources" #~ msgstr "javascript ¥½¡¼¥¹¤ò¥À¥¦¥ó¥í¡¼¥É" #~ msgid "Other lang. code: " #~ msgstr "¾¤Î¸À¸ì¥³¡¼¥É: " #~ msgid "Other Charset code: " #~ msgstr "¾¤Î¥­¥ã¥é¥¯¥¿¥³¡¼¥É: " #~ msgid "Other MIME type: " #~ msgstr "¾¤Î MIME ¥¿¥¤¥×: " #~ msgid "HUH: don't know how to gateway FTP when proxy not specified\n" #~ msgstr "" #~ "HUH: ¥×¥í¥­¥·¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç FTP ¤Ø¤Î¥²¡¼¥È¥¦¥§¥¤¤¬ÉÔÌÀ¤Ç¤¹\n" #~ msgid "HUH: don't know how to gateway Gopher when proxy not specified\n" #~ msgstr "" #~ "HUH: ¥×¥í¥­¥·¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç Gopher ¤Ø¤Î¥²¡¼¥È¥¦¥§¥¤¤¬ÉÔÌÀ¤Ç¤¹\n" #~ msgid "HUH: this protocol is not supported for gatewaying\n" #~ msgstr "HUH: ¤³¤Î¥×¥í¥È¥³¥ë¤Ï¥²¡¼¥È¥¦¥§¥¤¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" #~ msgid "Not enough number of parameters \"-scndir\"\n" #~ msgstr "¥Ñ¥é¥á¡¼¥¿ \"-scndir\" ¤Î¿ô¤¬ÉÔ½¼Ê¬¤Ç¤¹\n" #~ msgid "WARNING: Scenario \"%s\" can't be loaded - scenario dir not set\n" #~ msgstr "" #~ "·Ù¹ð: ¥·¥Ê¥ê¥ª \"%s\" ¤ÏÆÉ¤ß¹þ¤á¤Þ¤»¤ó - " #~ "¥·¥Ê¥ê¥ª¥Ç¥£¥ì¥¯¥È¥ê¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó\n" #~ msgid "Searching for links" #~ msgstr "¥ê¥ó¥¯¤ò¸¡º÷Ãæ" #~ msgid "Adjusting document links" #~ msgstr "ʸ½ñ¥ê¥ó¥¯¤òÄ´À°Ãæ" pavuk-0.9.35/po/it.po0000644000175000001440000041574110151073676011267 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: pavuk-0.9pl25e\n" "POT-Creation-Date: 2001-07-30 10:14+0200\n" "PO-Revision-Date: 2000-04-28 12:00+01\n" "Last-Translator: Antonio Fragola \n" "Language-Team: ITALIAN \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: abstract.c:46 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "" #: abstract.c:84 doc.c:550 msgid "File redirect\n" msgstr "Ridirezione file\n" #: abstract.c:120 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "Caricamento di una copia dalla cache locale di NS - %s\n" #: abstract.c:152 #, fuzzy, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "Caricamento di una copia dalla cache locale di NS - %s\n" #: abstract.c:185 #, fuzzy, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "Caricamento di una copia dalla cache locale di NS - %s\n" #: abstract.c:221 msgid "Unsupported URL\n" msgstr "URL non gestita\n" #: abstract.c:341 abstract.c:377 msgid "Warning: broken ftp transfer ...\n" msgstr "Attenzione: trasferimento ftp interrotto ...\n" #: abstract.c:351 msgid "Error removing FTP document from remote server\n" msgstr "" #: abstract.c:496 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "" "Errore in lettura del documento con codifica di trasferimento \"chunked\"!\n" #: ainterface.c:118 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "Rimozione URL non gestita: %s\n" #: ainterface.c:199 msgid "Specify at least one starting URL!" msgstr "Specifica almeno un'URL di partenza!" #: ainterface.c:201 msgid "Specify at least one starting URL!\n" msgstr "Specifica almeno un'URL di partenza!\n" #: ainterface.c:472 msgid "Can't list available message catalogs\n" msgstr "Impossibile elencare i cataloghi di messaggi disponibili\n" #: authinfo.c:107 msgid "Bad section - specify protocol\n" msgstr "Sezione errata - specificare il protocollo\n" #: authinfo.c:112 msgid "Bad section - specify hostname\n" msgstr "Sezione errata - specificare il nome dell'host\n" #: authinfo.c:159 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "Impossibile interpretare : \"%s\"\n" #: authinfo.c:179 #, c-format msgid "Bad protocol - %s\n" msgstr "Protocollo errato - %s\n" #: authinfo.c:190 #, c-format msgid "Bad port number %s\n" msgstr "Numero di porta errato %s\n" #: authinfo.c:211 #, c-format msgid "Unknown auth type - %s\n" msgstr "Tipo di autorizzazione sconosciuto - %s\n" #: cleanup.c:60 msgid "press any key to exit\n" msgstr "premere una tasto per uscire\n" #: cmdparse.c:129 #, fuzzy, c-format msgid "Error parsing commandline at: %s\n" msgstr "Errore di pianificazione\n" #: cmdparse.c:186 #, fuzzy, c-format msgid "Unable to parse commandline: %s\n" msgstr "Impossibile interpretare : %s\n" #: config.c:44 msgid "Level order" msgstr "Ordinamento per livello" #: config.c:45 msgid "Level order, inline first" msgstr "Ordinamento per livello, prima inline" #: config.c:46 msgid "Pre order" msgstr "Pre-ordinamento" #: config.c:47 msgid "Pre order, inline first" msgstr "Pre-ordinamento, prima inline" #: config.c:115 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "Usage: %s [opzioni] [qualsiasi numero di URL]\n" "pavuk-%s %s\n" #: config.c:131 #, fuzzy, c-format msgid "Type \"%s --help\" for long help\n" msgstr "Digita \"%s -h\" per aiuto esteso\n" #: config.c:139 msgid "Optional features available :\n" msgstr "Caratteristiche opzionali disponibili :\n" #: config.c:141 msgid " - Debug mode\n" msgstr " - Modalità debug\n" #: config.c:145 msgid " - GNU gettext internationalization of messages\n" msgstr " - Internazionalizzazione dei messaggi GNU gettext\n" #: config.c:149 msgid " - flock() document locking\n" msgstr " - flock() blocco dei documenti\n" #: config.c:153 msgid " - fcntl() document locking\n" msgstr " - fcntl() blocco dei documenti\n" #: config.c:158 msgid " - Gtk GUI interface\n" msgstr " - Interfaccia GUI Gtk\n" #: config.c:161 msgid " - URL tree preview\n" msgstr " - Anteprima dell'albero dell'URL\n" #: config.c:166 msgid " - http over SSL\n" msgstr " - http su SSL\n" #: config.c:171 msgid " - Socks v4 proxy support\n" msgstr " - Gestione proxy Socks v4\n" #: config.c:173 msgid " - Socks v5 proxy support\n" msgstr " - Gestione proxy Socks v5\n" #: config.c:177 msgid " - with filesystem free space checking\n" msgstr " - con controllo dello spazio libero su disco\n" #: config.c:181 msgid " - with optional regex patterns in -fnrules and -*rpattern options\n" msgstr " - con pattern opzionali RE nelle opzioni -fnrules e -*rpattern\n" #: config.c:185 msgid " - with POSIX regexp\n" msgstr " - con RE POSIX\n" #: config.c:189 msgid " - with Bell V8 regexp\n" msgstr " - con RE Bell V8\n" #: config.c:193 msgid " - with BSD regexp\n" msgstr " - con RE BSD\n" #: config.c:197 msgid " - with GNU regexp\n" msgstr " - con RE GNU\n" #: config.c:201 #, fuzzy msgid " - with PCRE regexp\n" msgstr " - con RE POSIX\n" #: config.c:205 msgid " - with support for loading files from Netscape browser cache\n" msgstr " - con supporto per caricare i file dalla cache del browser Netscape\n" #: config.c:209 msgid "" " - with support for detecting whether pavuk is running as background job\n" msgstr "" " - con supporto per determinare se pavuk sta funzionando come job sullo " "sfondo\n" #: config.c:213 msgid " - with multithreading support\n" msgstr "" #: config.c:217 msgid " - with NTLM authorization support\n" msgstr "" #: config.c:221 msgid " - with JavaScript bindings\n" msgstr "" #: config.c:295 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "Tag HTML non gestito : %s.%s\n" #: config.c:654 #, fuzzy msgid "Error parsing commandline\n" msgstr "Errore di pianificazione\n" #: config.c:661 #, fuzzy, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "Numero di parametri insufficiente \"%s\"\n" #: config.c:668 #, fuzzy, c-format msgid "Unknown option %s\n" msgstr "Porta sconosciuta \"%s\"\n" #: config.c:675 #, c-format msgid "Wrong format of option %s\n" msgstr "" #: config.c:684 #, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "" #: config.c:697 #, fuzzy, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "Per favore specifica un numero col parametro \"%s\"\n" #: config.c:762 config.c:1113 http_proxy.c:120 #, c-format msgid "Unknown port \"%s\"\n" msgstr "Porta sconosciuta \"%s\"\n" #: config.c:778 config.c:1126 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "Tipo di autorizzazione errata \"%s\"\n" #: config.c:788 config.c:1136 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "Modalità operativa sconosciuta \"%s\"\n" #: config.c:810 #, fuzzy, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "" "Per favore specifica un numero in virgola mobile col parametro \"%s\"\n" #: config.c:829 #, fuzzy, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "Per favore specifica un tipo di condizione adeguata per %s (%s)\n" #: config.c:852 #, fuzzy, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "Per favore specifica una RE valida col parametro \"%s\"\n" #: config.c:863 config.c:1248 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "Strategia di pianificazione per l'URL sconosciuta - \"%s\"\n" #: config.c:871 config.c:1259 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "Versione di SSL sconosciuta - \"%s\"\n" #: config.c:880 config.c:1270 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "Header HTTP aggiuntivo non valido - \"%s\"\n" #: config.c:903 config.c:1293 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "Specifica di richiesta non valida - \"%s\"\n" #: config.c:948 #, fuzzy, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "Parametro tempo errato \"%s\"\n" #: config.c:964 #, fuzzy, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "Parametro tempo errato \"%s\"\n" #: config.c:981 #, fuzzy, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "Parametro tempo errato \"%s\"\n" #: config.c:1031 #, c-format msgid "WARNING: option \"%s\" not supported in current configuration!\n" msgstr "" #: config.c:1055 #, c-format msgid "Please specify number \"%s\"\n" msgstr "Per favore specifica un numero \"%s\"\n" #: config.c:1073 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "Solo \"true\" & \"false\" sono ammessi : \"%s\"\n" #: config.c:1147 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "Parametro tempo errato \"%s\"\n" #: config.c:1178 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "Per favore specifica un numero in virgola mobile \"%s\"\n" #: config.c:1195 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "Per favore specifica un argomento adeguato per %s\n" #: config.c:1207 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "Per favore specifica un tipo di condizione adeguata per %s (%s)\n" #: config.c:1235 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "Per favore specifica una RE valida \"%s\"\n" #: config.c:1327 #, fuzzy, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "Specifica di richiesta non valida - \"%s\"\n" #: config.c:1347 #, fuzzy, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "Specifica di richiesta non valida - \"%s\"\n" #: config.c:1362 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "" #: config.c:1388 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "Impossibile interpretare \"%s\"\n" #: config.c:1430 #, fuzzy, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "ATTENZIONE: Fallito il caricamento dello scenario (%s)\n" #: cookie.c:216 #, c-format msgid "Unable to parse : %s\n" msgstr "Impossibile interpretare : %s\n" #: cookie.c:389 msgid "Updating cookie file\n" msgstr "Aggiornamento del file dei cookie\n" #: cookie.c:418 msgid "Cookie file has changed - > synchronizing\n" msgstr "Il file del cookie è cambiato - > sincronizzazione\n" #: cookie.c:567 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "Il server %s sta provando a impostare un cookie per il dominio %s\n" #: cookie.c:578 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "Rimozione del cookie dal dominio disabiliato %s\n" #: debugl.c:16 msgid "HTML parsers" msgstr "Interpreti HTML" #: debugl.c:17 msgid "Server responses" msgstr "Risposte del server" #: debugl.c:18 msgid "Client requests" msgstr "Richieste del client" #: debugl.c:19 msgid "Procedure calling" msgstr "Chiamata a procedura" #: debugl.c:20 msgid "File locking" msgstr "Blocco del file" #: debugl.c:21 msgid "Networking code" msgstr "Codice di rete" #: debugl.c:22 msgid "Miscelanous" msgstr "Varie" #: debugl.c:23 msgid "Extended user infos" msgstr "Informazioni estese dell'utente" #: debugl.c:24 msgid "Multithreading - locking" msgstr "Multithreading - blocco" #: debugl.c:25 msgid "Multithreading - threads" msgstr "Multithreading - threads" #: debugl.c:26 msgid "POST request data" msgstr "Richiesta di dati POST" #: debugl.c:27 msgid "Limiting conditions" msgstr "" #: debugl.c:66 #, c-format msgid "Bad debug level selection : %s\n" msgstr "Selezione errata del livello di debug : %s\n" #: decode.c:184 msgid "decode" msgstr "decodifica" #: digest_auth.c:155 msgid "Trying to do HTTP Digest authorization\n" msgstr "" #: digest_auth.c:202 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "" #: dinfo.c:368 dinfo.c:387 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr "Errore di interpretazione nel file .pavuk_info del campo: %s\n" #: doc.c:297 msgid "Transfering data" msgstr "Trasferimento dei dati" #: doc.c:312 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt: SO_RCVBUF fallito" #: doc.c:333 msgid "storing document" msgstr "memorizzazione del documento" #: doc.c:399 #, fuzzy msgid "Document transfer data" msgstr "Trasferimento dei dati completato" #: doc.c:420 msgid "Data transfer done" msgstr "Trasferimento dei dati completato" #: doc.c:597 #, c-format msgid "Trying to resume from position %d \n" msgstr "Tentativo di ripresa (resume) dalla posizione %d \n" #: doc.c:662 msgid "Opening connection" msgstr "Apertura connessione" #: doc.c:686 msgid "Loading local copy\n" msgstr "Caricamento della copia locale\n" #: doc.c:912 msgid "File may be truncated\n" msgstr "Il file può essere troncato\n" #: doc.c:936 msgid "Decoding document - OK\n" msgstr "Decodifica del documento - OK\n" #: doc.c:939 msgid "Decoding document - failed\n" msgstr "Decodifica del documento - fallita\n" #: doc.c:942 msgid "Unsupported document encoding\n" msgstr "Codifica del documento non supportata\n" #: doc.c:946 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "" "Ricevuto un file codificato ma la decodifica non è permessa (intatto)\n" #: doc.c:1116 #, c-format msgid "Removing improper document : %s\n" msgstr "Rimozione del documento irregolare : %s\n" #: doc.c:1178 doc.c:1244 msgid "Local file" msgstr "File locale" #: doc.c:1184 msgid "Gopher/Text File" msgstr "Gopher/File di testo" #: doc.c:1187 msgid "Gopher/Directory" msgstr "Gopher/Directory" #: doc.c:1190 msgid "Gopher/CSO phone book" msgstr "Gopher/Rubrica CSO" #: doc.c:1193 msgid "Gopher/Error" msgstr "Gopher/Errore" #: doc.c:1196 msgid "Gopher/BINHEX" msgstr "Gopher/BINHEX" #: doc.c:1199 msgid "Gopher/DOS bin" msgstr "Gopher/Binario DOS" #: doc.c:1202 msgid "Gopher/UUencoded" msgstr "Gopher/UUencoded" #: doc.c:1205 msgid "Gopher/Search index" msgstr "Gopher/Indice di ricerca" #: doc.c:1208 msgid "Gopher/Telnet session" msgstr "Gopher/Sessione Telnet" #: doc.c:1211 msgid "Gopher/bin" msgstr "Gopher/binario" #: doc.c:1214 msgid "Gopher/Duplicated server" msgstr "Gopher/Server Duplicato" #: doc.c:1217 msgid "Gopher/TN3270" msgstr "Gopher/TN3270" #: doc.c:1220 msgid "Gopher/GIF" msgstr "Gopher/GIF" #: doc.c:1223 msgid "Gopher/Image" msgstr "Gopher/Immagine" #: doc.c:1229 msgid "FTP/Directory" msgstr "FTP/Directory" #: doc.c:1231 msgid "FTP/File" msgstr "FTP/File" #: doc.c:1235 msgid "FTPS/Directory" msgstr "FTPS/Directory" #: doc.c:1237 msgid "FTPS/File" msgstr "FTPS/File" #: doc.c:1240 msgid "Unsupported type" msgstr "Tipo non gestito" #: doc.c:1447 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s] \r" msgstr "S: %s [R: %s] [ET: %s] [RT: %s] \r" #: doc.c:1450 #, c-format msgid "S: %s [R: %s] [ET: %s] \r" msgstr "S: %s [R: %s] [ET: %s] \r" #: doc.c:1490 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "Attesa per il rilascio del blocco sul documento: %s\n" #: doc.c:1730 msgid "Rewriting links inside parent documents" msgstr "Riscrittura dei collegamenti all'interno dei documenti d'origine" #: errcode.c:21 #, c-format msgid "%s: user break\n" msgstr "%s: interruzione dell'utente\n" #: errcode.c:28 #, c-format msgid "%s: OK\n" msgstr "%s: OK\n" #: errcode.c:31 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s: ERRORE: durante la memorizzazione del documento\n" #: errcode.c:34 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s: ERRORE: in apertura del file\n" #: errcode.c:37 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "" "%s: ERRORE: un'URL che punta ad una directory locale non è supportata\n" #: errcode.c:40 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s: ERRORE: sconosciuto\n" #: errcode.c:43 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s: ERRORE: il documento è bloccato\n" #: errcode.c:46 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s: ERRORE: in lettura del socket\n" #: errcode.c:49 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s: MESSAGGIO: più grande della dimensione massima ammessa\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "" "%s: MESSAGGIO: disabilitato dalla condizione dello script in uscita " "dell'utente\n" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s: MESSAGGIO: più piccolo della dimensione minima ammessa\n" #: errcode.c:58 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s: MESSAGGIO: questo tipo mime non è consentito (%s)\n" #: errcode.c:61 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s: ERRORE: errore di connessione al proxy\n" #: errcode.c:64 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s: ERRORE: trasferimento interrotto dall'utente\n" #: errcode.c:67 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "" "%s: MESSAGGIO: il tempo di modifica del file non rientra nell'intervallo " "specificato\n" #: errcode.c:70 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s: ERRORE: il file ha dimensione zero - possibile errore\n" #: errcode.c:73 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s: MESSAGGIO: il documento è già stato elaborato\n" #: errcode.c:76 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s: MESSAGGIO: il documento è stato disabilitato dall'utente\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "" "%s: MESSAGGIO: il documento è stato disabilitato dalle regole di " "limitazione\n" #: errcode.c:82 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "" "%s: ATTENZIONE: il tasso di trasferimento è più basso del limite consentito\n" #: errcode.c:85 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "" "%s: ATTENZIONE: quota per la dimensione del file superata, il resto sarà " "troncato\n" #: errcode.c:88 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "" "%s: ATTENZIONE: quota di trasferimento superata, interruzione dello " "scaricamento\n" #: errcode.c:91 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "" "%s: ERRORE: spazio libero insufficiente nel filesystem, interruzione dello " "scaricamento\n" #: errcode.c:94 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "" "%s: ATTENZIONE: tempo massimo di esecuzione superato, lo scaricamento sarà " "interrotto\n" #: errcode.c:97 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s: ERRORE: errore FTP sconosciuto\n" #: errcode.c:100 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s: ERRORE: il server FTP non supporta il comando REST\n" #: errcode.c:104 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s: ERRORE: impossibile fare l'elenco del contenuto della directory\n" #: errcode.c:107 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s: ERRORE: connessione impossibile al server FTP\n" #: errcode.c:110 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s: ERRORE: autenticazione FTP - nome utente errato\n" #: errcode.c:113 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s: ERRORE: autenticazione FTP - password errata\n" #: errcode.c:116 #, fuzzy, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "%s: ERRORE: autenticazione FTP - nome utente errato\n" #: errcode.c:119 #, fuzzy, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s: ERRORE: autenticazione FTP - password errata\n" #: errcode.c:122 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s: ERRORE: impossibile aprire una connessione dati FTP\n" #: errcode.c:125 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s: ERRORE: impossibile ricevere il file dal server FTP\n" #: errcode.c:128 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s: ERRORE: il server FTP non supporta il comando MDTM\n" #: errcode.c:131 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s: ERRORE: il file dal server FTP è troncato\n" #: errcode.c:135 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s: MESSAGGIO: riscaricamento non necessario - il file è aggiornato\n" #: errcode.c:138 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s: MESSAGGIO: trasferimento FTP non consentito dalle regole\n" #: errcode.c:141 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "" "%s: ATTENZIONE: URL di directory FTP, ma le directory FTP non sono " "consentite (-FTPdir)\n" #: errcode.c:144 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "" #: errcode.c:147 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s: ERRORE: errore HTTP sconosciuto\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s: ERRORE: impossibile connettersi al server HTTP\n" #: errcode.c:153 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "" "%s: ERRORE: il server HTTP non consente lo scaricamento parziale di " "contenuti\n" #: errcode.c:156 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "%s: ERRORE: invio della richiesta HTTP interrotto\n" #: errcode.c:159 #, fuzzy, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%s: ERRORE: impossibile inviare i dati della richiesta HTTP\n" #: errcode.c:162 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "" #: errcode.c:166 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "%s: ERRORE: impossibile inviare i dati della richiesta HTTP\n" #: errcode.c:169 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s: MESSAGGIO: ridirezione in un'altra posizione\n" #: errcode.c:172 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s: ERRORE: il documento HTTP è truncato\n" #: errcode.c:175 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s: ERRORE: ridirezione ciclica!\n" #: errcode.c:178 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s: ERRORE: ridirezione ad un'URL non supportata\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s: ERRORE: impossibile connettersi al server proxy\n" #: errcode.c:184 #, fuzzy, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "%s: ERRORE: il documento è stato rimosso dal server HTTP\n" #: errcode.c:187 #, fuzzy, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "%s: ERRORE: impossibile aprire una connessione dati FTP\n" #: errcode.c:190 #, fuzzy, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "%s: ERRORE: impossibile inviare i dati della richiesta HTTP\n" #: errcode.c:193 #, fuzzy, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "%s: ERRORE: impossibile aprire una connessione dati FTP\n" #: errcode.c:196 #, fuzzy, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "%s: ERRORE: impossibile inviare i dati della richiesta HTTP\n" #: errcode.c:199 #, fuzzy, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s: ERRORE: il client HTTP invia richieste errate\n" #: errcode.c:202 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s: ERRORE: è richiesta l'autenticazione HTTP\n" #: errcode.c:205 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s: ERRORE: è richiesta l'autenticazione HTTP proxy\n" #: errcode.c:208 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "%s: ERRORE: è richiesto HTTP payment\n" #: errcode.c:211 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "%s: ERRORE: richiesta HTTP proibita\n" #: errcode.c:214 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s: ERRORE: documento HTTP non trovato\n" #: errcode.c:217 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s: ERRORE: errore del server HTTP remoto\n" #: errcode.c:220 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "" "%s: ERROR: il server HTTP ha replicato con una risposta di tempo limite di " "connessione\n" #: errcode.c:223 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "" "%s: ERRORE: il server HTTP ha replicato con una risposta di conflitto\n" #: errcode.c:226 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s: ERRORE: il documento è stato rimosso dal server HTTP\n" #: errcode.c:229 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "" #: errcode.c:232 #, fuzzy, c-format msgid "%s: ERROR: 306\n" msgstr "%s: ERRORE: sconosciuto\n" #: errcode.c:235 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" #: errcode.c:238 #, fuzzy, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "%s: ERRORE: il client HTTP invia richieste errate\n" #: errcode.c:241 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "" #: errcode.c:244 #, fuzzy, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "%s: ERRORE: ridirezione ad un'URL non supportata\n" #: errcode.c:247 #, fuzzy, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s: ERRORE: impossibile connettersi al server proxy\n" #: errcode.c:250 #, fuzzy, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s: ERRORE: invio della richiesta HTTP interrotto\n" #: errcode.c:253 #, fuzzy, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "%s: ERRORE: ridirezione ad un'URL non supportata\n" #: errcode.c:256 #, fuzzy, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s: ERRORE: durante la memorizzazione del documento\n" #: errcode.c:259 #, fuzzy, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "%s: ERRORE: impossibile ricevere il file dal server FTP\n" #: errcode.c:262 #, fuzzy, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "%s: ERRORE: errore del server HTTP remoto\n" #: errcode.c:265 #, fuzzy, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s: ERRORE: in apertura del file\n" #: errcode.c:268 #, fuzzy, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "" "%s: ERRORE: il server HTTP non consente lo scaricamento parziale di " "contenuti\n" #: errcode.c:271 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "" #: errcode.c:274 #, fuzzy, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "" "%s: ERRORE: il server HTTP non consente lo scaricamento parziale di " "contenuti\n" #: errcode.c:277 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s: ERRORE: impossibile connettersi al server GOPHER\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%s: ERRORE: errore sconosciuto GOPHER\n" #: errcode.c:283 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s: ERRORE: impossibile connettersi al server HTTPS\n" #: errcode.c:286 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "" "%s: ERRORE: impossibile stabilire un controllo SSL sulla connessione al " "server FTPS\n" #: errcode.c:289 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s: ERRORE: questo server FTP non supporta le connessioni SSL\n" #: errcode.c:292 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "" "%s: ERRORE: impossibile stabilire una connessione dati SSL con il server " "FTPS\n" #: errcode.c:295 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s: ERRORE: codice d'errore sconosciuto : %d\n" #: file.c:35 msgid "Can't open directory\n" msgstr "Impossibile aprire la directory\n" #: form.c:1074 form.c:1139 form.c:1296 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "Tipo di modulo non supportato nel contesto: %d\n" #: form.c:1395 msgid "Browse" msgstr "Sfoglia" #: form.c:1410 msgid "URLs with forms" msgstr "URL con moduli" #: form.c:1419 msgid "Refresh URL list" msgstr "Aggiorna l'elenco delle URL" #: form.c:1453 form.c:1454 url.c:1002 msgid "unknown" msgstr "sconosciuto" #: form.c:1604 msgid "Pavuk: load form file" msgstr "Pavuk: carica il file del modulo" #: form.c:1628 msgid "Fill forms" msgstr "Riempi i moduli" #: form.c:1635 msgid "Form number: " msgstr "Modulo nunero: " #: form.c:1647 msgid "Action URL: " msgstr "URL su cui agire: " #: form.c:1656 gui_common.c:706 msgid "Request method: " msgstr "Metodo di richiesta: " #: form.c:1665 gui_common.c:725 gui_tree.c:140 msgid "Request encoding: " msgstr "Codifica della richiesta: " #: form.c:1674 msgid "HTML form content" msgstr "Contenuto del modulo HTML" #: form.c:1689 msgid "Load HTML file ..." msgstr "Carica il file HTML ..." #: form.c:1742 msgid "Pavuk: HTML forms editor" msgstr "Pavuk: Editor dei moduli HTML" #: form.c:1764 gui_jscons.c:192 msgid "Close" msgstr "Chiudi" #: ftp.c:118 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "" "ftp_get_response: controllo di connessione ftp chiuso prima di qualsiasi " "risposta\n" #: ftp.c:189 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "ftp: setsockopt TOS - THROUGHPUT fallito" #: ftp.c:551 msgid "Re-using established FTP control connection\n" msgstr "Riusare il controllo della connessione FTP stabilita\n" #: ftp.c:758 http.c:1392 msgid "Size differs, regeting whole\n" msgstr "La dimensione è diverso, riscaricamento completo\n" #: ftp.c:768 http.c:1278 http.c:1402 msgid "Modified from last download - regeting whole\n" msgstr "Modificato dall'ultimo scaricamento - riscaricamento completo\n" #: ftp.c:849 msgid "" "Warning: FTP server undertand REST command, but can't handle it properly.\n" msgstr "" #: ftp.c:1094 ftp.c:1421 #, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%d%s\n" "\n" "\n" "

                                      List of FTP directory %s://%s:%d/%s


                                        " msgstr "" "\n" "\n" "\n" "Directory di %s://%s:%d%s\n" "\n" "\n" "

                                        Elenco della directory FTP %s://%s:%d/%s


                                          " #: ftp.c:1490 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" "ERRORE: impossibile interpretare nell'elenco FTP la riga:\n" "\t%s\n" #: ftp.c:1683 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "Creazione del collegamento simbolico \"%s\" a \"%s\"\n" #: gauthinfo.c:107 msgid "Pavuk: Save auth. info file" msgstr "Pavuk: Salva il file con le informazioni di autenticazione" #: gauthinfo.c:159 msgid "Pavuk: Load auth. info file" msgstr "Pavuk: Carica il file con le informazioni di autenticazione" #: gauthinfo.c:340 msgid "Pavuk: Authorization info editor" msgstr "Pavuk: Editor delle informazioni di autorizzazione" #: gauthinfo.c:359 msgid "Protocol" msgstr "Protocollo" #: gauthinfo.c:360 gui_common.c:1819 msgid "Host" msgstr "Host" #: gauthinfo.c:361 msgid "User" msgstr "Utente" #: gauthinfo.c:362 msgid "Password" msgstr "Password" #: gauthinfo.c:363 msgid "Base dir." msgstr "Directory di partenza" #: gauthinfo.c:364 msgid "Realm" msgstr "Dominio" #: gauthinfo.c:365 msgid "Scheme" msgstr "Schema" #: gauthinfo.c:394 msgid "Protocol: " msgstr "Protocollo: " #: gauthinfo.c:419 gui_common.c:1837 gui_common.c:1898 gui_common.c:1921 #: gui_common.c:1950 msgid "Host: " msgstr "Host: " #: gauthinfo.c:428 msgid "User: " msgstr "Utente: " #: gauthinfo.c:437 gui_common.c:2120 gui_common.c:2170 gui_common.c:2194 msgid "Password: " msgstr "Passoword: " #: gauthinfo.c:446 msgid "Base directory: " msgstr "Directory di partenza: " #: gauthinfo.c:455 msgid "Realm: " msgstr "Dominio: " #: gauthinfo.c:473 gui_common.c:2064 msgid "User auth. scheme" msgstr "Tipo di autorizzazione dell'utente" #: gauthinfo.c:478 msgid "Base auth. scheme" msgstr "Tipo di autorizzazione di base" #: gauthinfo.c:483 gui_common.c:2066 msgid "Digest auth. scheme" msgstr "Tipo di autorizzazione Digest" #: gauthinfo.c:489 gui_common.c:2068 #, fuzzy msgid "NTLM auth. scheme" msgstr "Tipo di autorizzazione dell'utente" #: gauthinfo.c:500 gui_addurl.c:171 gui_common.c:629 gui_common.c:778 #: gui_common.c:957 gui_common.c:1057 gui_common.c:1847 gui_common.c:2620 #: gui_common.c:2868 gui_tools.c:648 msgid "Append" msgstr "Appendi" #: gauthinfo.c:508 gui_common.c:645 gui_common.c:785 gui_common.c:973 #: gui_common.c:1064 gui_common.c:1853 gui_common.c:2626 gui_common.c:2874 #: gui_tools.c:670 msgid "Modify" msgstr "Modifica" #: gauthinfo.c:516 gui_common.c:654 gui_common.c:982 gui_common.c:1859 #: gui_common.c:2632 gui_common.c:2880 gui_tools.c:683 msgid "Clear" msgstr "Pulisci" #: gauthinfo.c:524 gui_common.c:663 gui_common.c:792 gui_common.c:991 #: gui_common.c:1071 gui_common.c:1865 gui_common.c:2638 gui_common.c:2886 #: gui_tools.c:696 msgid "Delete" msgstr "Cancella" #: gauthinfo.c:537 gui_common.c:2963 gui_limits.c:512 gui_sched.c:131 msgid "OK" msgstr "OK" #: gauthinfo.c:548 gui_common.c:2972 gui_limits.c:521 msgid "Apply" msgstr "Applica" #: gauthinfo.c:556 msgid "Load" msgstr "Carica" #: gauthinfo.c:564 msgid "Save" msgstr "Salva" #: gauthinfo.c:575 gui_about.c:67 gui_addurl.c:180 gui_common.c:2988 #: gui_limits.c:537 gui_sched.c:140 gui_tree.c:657 gui_tree.c:797 stats.c:507 msgid "Cancel" msgstr "Annulla" #: gkeys.c:64 gkeys.c:82 gkeys.c:95 #, c-format msgid "Unable to parse: %s\n" msgstr "Impossibile interpretare: %s\n" #: gkeys.c:117 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "Impossibile creare il file ~/.pavuk_keys\n" #: gkeys.c:121 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# Questo file è stato generato da %s\n" "# Puoi modificarlo, ma fai attenzione!\n" "\n" #: gopher.c:65 msgid "********************* Gopher request **************\n" msgstr "********************* Richiesta Gopher **************\n" #: gopher.c:103 #, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%d/%s\n" "\n" "\n" "

                                          Directory of gopher://%s:%d/%s



                                            " msgstr "" "\n" "\n" "\n" "Directory di gopher://%s:%d/%s\n" "\n" "\n" "

                                            Directory di gopher://%s:%d/%s



                                              " #: gopher.c:151 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" #: gui_about.c:38 msgid "Pavuk: About" msgstr "Pavuk: Informazioni" #: gui_about.c:60 #, c-format msgid "" "Pavuk %s %s\n" " \n" "an automatic WEB file grabber\n" " \n" "By Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " msgstr "" "Pavuk %s %s\n" " \n" "un grabber automatico di file WEB\n" " \n" "By Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " #: gui_api.c:168 #, c-format msgid "Processed: %5d" msgstr "Elaborato: %5d" #: gui_api.c:170 #, c-format msgid "Queued: %5d" msgstr "Accodato: %5d" #: gui_api.c:172 #, c-format msgid "Failed: %4d" msgstr "Fallito: %4d" #: gui_api.c:174 #, c-format msgid "Rejected: %5d" msgstr "Rifiutato: %5d" #: gui_api.c:475 gui_api.c:492 msgid "Start" msgstr "Inizia" #: gui_api.c:616 msgid "Starting ..." msgstr "Inizio ..." #: gui_api.c:681 #, fuzzy msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "" "Valore troppo alto del tempo limite per l'avvio dell'interfaccia GUI di " "connessione\n" #: gui_addurl.c:73 gui_main.c:270 #, c-format msgid "Dropped URL : %s\n" msgstr "URL eliminata: %s\n" #: gui_addurl.c:128 msgid "Pavuk: Append URL" msgstr "Pavuk: Appendi l'URL" #: gui_addurl.c:140 msgid "New URL:" msgstr "Nuova URL:" #: gui_common.c:580 gui_common.c:596 gui_main.c:803 msgid "URL" msgstr "URL" #: gui_common.c:597 #, fuzzy msgid "Local filename" msgstr "Nome del file locale: %s\n" #: gui_common.c:616 msgid "Request URL: " msgstr "Richiedi l'URL: " #: gui_common.c:619 #, fuzzy msgid "Local filename: " msgstr "Nome del file locale: %s\n" #: gui_common.c:687 msgid "Extended informations for HTTP POST request" msgstr "Informazioni estese per la richiesta POST HTTP" #: gui_common.c:744 gui_common.c:1023 msgid "Query fields: " msgstr "Campi della query: " #: gui_common.c:758 gui_common.c:1037 gui_common.c:2563 msgid "Type" msgstr "Tipo" #: gui_common.c:759 gui_common.c:1038 msgid "Name" msgstr "Nome" #: gui_common.c:760 gui_common.c:1039 msgid "Value" msgstr "Valore" #: gui_common.c:804 gui_common.c:1083 msgid "Type: " msgstr "Tipo: " #: gui_common.c:833 gui_common.c:1112 msgid "Name: " msgstr "Nome: " #: gui_common.c:835 gui_common.c:1114 msgid "Value: " msgstr "Valore: " #: gui_common.c:865 gui_common.c:1144 msgid "Pavuk: Choose form field file" msgstr "Pavuk: Scegli il file con i campi del modulo" #: gui_common.c:914 msgid "Form data" msgstr "Dati del modulo" #: gui_common.c:942 msgid "Matching action URL: " msgstr "URL su cui agire corrispondente: " #: gui_common.c:1206 msgid "Grabber I" msgstr "Grabber I" #: gui_common.c:1214 msgid "Cache Directory: " msgstr "Directory cache: " #: gui_common.c:1217 msgid "Default URL prefix: " msgstr "" #: gui_common.c:1220 #, fuzzy msgid "Separate info directory: " msgstr "Directory di partenza: " #: gui_common.c:1223 msgid "Index file name: " msgstr "Nome del file di indice: " #: gui_common.c:1226 msgid "Store file name: " msgstr "Nome del file da memorizzare: " #: gui_common.c:1229 msgid "Identity string: " msgstr "Stringa dell'identità: " #: gui_common.c:1233 msgid "Netscape browser cache directory: " msgstr "Directory cache del browser Netscape: " #: gui_common.c:1236 #, fuzzy msgid "Mozilla browser cache directory: " msgstr "Directory cache del browser Netscape: " #: gui_common.c:1241 msgid "Browser: " msgstr "Browser: " #: gui_common.c:1245 msgid "Reminder command: " msgstr "Comando del promemoria: " #: gui_common.c:1248 msgid "Post command: " msgstr "Comando Post: " #: gui_common.c:1264 msgid "How many times retry on fail: " msgstr "Quante volte riprovare in caso di fallimento: " #: gui_common.c:1267 msgid "How many moved links to follow: " msgstr "Quanti collegamenti spostati seguire: " #: gui_common.c:1270 msgid "How many times to reget file: " msgstr "Quante volte riscaricare un file: " #: gui_common.c:1273 msgid "Document age before syncing with server: " msgstr "Età del documento prima della sincronizzazione col server: " #: gui_common.c:1275 msgid " days " msgstr " giorni " #: gui_common.c:1281 msgid "Read buffer size: " msgstr "Dimensione del buffer di lettura: " #: gui_common.c:1286 msgid " kB " msgstr " kB " #: gui_common.c:1292 msgid "Hash tables size: " msgstr "Dimensione delle tabelle Hash: " #: gui_common.c:1294 msgid " entries " msgstr "" #: gui_common.c:1308 msgid "Sleep time between transfers: " msgstr "Pausa tra gli scaricamenti: " #: gui_common.c:1310 msgid " sec." msgstr " sec." #: gui_common.c:1315 msgid "randomize" msgstr "" #: gui_common.c:1321 msgid "Rollback amount on reget: " msgstr "Quantità da scartare quando si riscarica: " #: gui_common.c:1323 msgid " bytes" msgstr " bytes" #: gui_common.c:1329 msgid "Transfer quota: " msgstr "Quota di trasferimento: " #: gui_common.c:1331 gui_common.c:1339 gui_common.c:1348 msgid " kB" msgstr " kB" #: gui_common.c:1337 msgid "File size quota: " msgstr "Quota di dimensione del file: " #: gui_common.c:1346 msgid "Filesystem freespace quota: " msgstr "Quota di spazio libero nel filesystem: " #: gui_common.c:1364 msgid "Number of downloading threads: " msgstr "Numero di thread di scaricamento: " #: gui_common.c:1392 msgid "Grabber II" msgstr "Grabber II" #: gui_common.c:1395 msgid "HTML document URL rewriting" msgstr "Riscrittura delle URL del documento HTML" #: gui_common.c:1404 msgid "Rewrite URLs inside HTML doc." msgstr "Riscrivi le URL all'interno dei documenti HTML" #: gui_common.c:1412 msgid "Rewrite URLs to local when stored locally" msgstr "Riscrivi le URL come locali quando memorizzate localmente" #: gui_common.c:1418 msgid "Rewrite all suitable URLs to local" msgstr "Riscrivi tutte le URL adatte come remote" #: gui_common.c:1424 msgid "Rewrite all URLs to local immediately" msgstr "Riscrivi tutte le URL come locali immediatamente" #: gui_common.c:1430 msgid "Rewrite all URLs to remote immediately" msgstr "Riscrivi tutte le URL come remote immediatamente" #: gui_common.c:1436 msgid "Rewrite only one currently download URL" msgstr "" #: gui_common.c:1442 msgid "Misc settings" msgstr "Impostazioni varie" #: gui_common.c:1451 msgid "Always generate unique name for document" msgstr "" #: gui_common.c:1456 msgid "Delete FTP document after succesful download" msgstr "" #: gui_common.c:1461 msgid "Preserve document modification time" msgstr "Preserva il tempo di modifica del documento " #: gui_common.c:1466 msgid "Preserve FTP document permissions" msgstr "Preserva i permessi del documento FTP" #: gui_common.c:1471 #, fuzzy msgid "Preserve FTP symbolic links paths" msgstr "Preserva i collegamenti simbolici FTP" #: gui_common.c:1476 #, fuzzy msgid "Retrieve FTP symbolic links like files" msgstr "Preserva i collegamenti simbolici FTP" #: gui_common.c:1482 msgid "Whole reget when partial not supported" msgstr "Riscaricamento intero quando la parziale non è supportata" #: gui_common.c:1488 msgid "Use gzip encoding for transfer" msgstr "Usa la codifica gzip per il trasferimento" #: gui_common.c:1493 msgid "Remove improper documents" msgstr "Rimozione dei documenti irregolari" #: gui_common.c:1498 msgid "Check transferred size of document" msgstr "Controlla la dimensione del documento trasferito" #: gui_common.c:1503 msgid "Store directory URLs as index files" msgstr "Memorizza le URL di directory come file di indice" #: gui_common.c:1508 msgid "Store info files with each document" msgstr "Memorizza i file di informazione con ogni documento" #: gui_common.c:1513 msgid "Send self URL as Referer for starting URLs" msgstr "Manda l'URL stessa come Referer per le URL di partenza" #: gui_common.c:1518 msgid "Send If-Range header field when regeting" msgstr "Invia l'header If-Range nelle richieste HTTP durante il riscaricamento" #: gui_common.c:1523 msgid "Show time of start and end of downloading" msgstr "Mostra il tempo di inizio e conclusione dello scaricamento" #: gui_common.c:1531 msgid "URL scheduling strategy: " msgstr "Strategia di pianificazione delle URL: " #: gui_common.c:1628 msgid "Net" msgstr "Rete" #: gui_common.c:1635 msgid "Allowed protocols" msgstr "Protocolli ammessi" #: gui_common.c:1644 msgid "HTTP" msgstr "HTTP" #: gui_common.c:1649 msgid "FTP" msgstr "FTP" #: gui_common.c:1654 msgid "Gopher" msgstr "Gopher" #: gui_common.c:1660 msgid "HTTPS" msgstr "HTTPS" #: gui_common.c:1665 msgid "FTPS" msgstr "FTPS" #: gui_common.c:1671 msgid "FTP data connection type " msgstr "Tipo di connessione dati FTP " #: gui_common.c:1680 msgid "Active" msgstr "Attivo" #: gui_common.c:1687 msgid "Passive" msgstr "Passivo" #: gui_common.c:1694 msgid "Communication timeout: " msgstr "Tempo limite di comunicazione: " #: gui_common.c:1707 msgid " min." msgstr " min." #: gui_common.c:1713 msgid "Maximal transfer rate: " msgstr "Tasso di trasferimento massimo: " #: gui_common.c:1726 gui_common.c:1745 msgid " kB/s" msgstr " kB/s" #: gui_common.c:1732 msgid "Minimal transfer rate: " msgstr "Tasso di trasferimento minimo: " #: gui_common.c:1751 msgid "Local interface address: " msgstr "Indirizzo dell'interfaccia locale: " #: gui_common.c:1762 msgid "Additional HTTP headers: " msgstr "Header HTTP aggiuntivi: " #: gui_common.c:1773 #, fuzzy msgid "Additional FTP list options: " msgstr "Header HTTP aggiuntivi: " #: gui_common.c:1786 msgid "Use wide listing of FTP directories" msgstr "Usa l'elenco esteso delle directory FTP" #: gui_common.c:1792 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "" #: gui_common.c:1798 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "Usa protocollo HTTP/1.1 per le comunicazioni HTTP" #: gui_common.c:1804 msgid "FTP login handshake rules" msgstr "" #: gui_common.c:1820 msgid "Login handshake" msgstr "" #: gui_common.c:1840 msgid "Handshake: " msgstr "" #: gui_common.c:1882 msgid "Proxy" msgstr "Proxy" #: gui_common.c:1888 msgid "Gopher proxy" msgstr "Proxy Gopher" #: gui_common.c:1901 gui_common.c:1924 gui_common.c:1953 msgid "Port: " msgstr "Porta: " #: gui_common.c:1905 msgid "Gopher via HTTP proxy" msgstr "Proxy per Gopher via HTTP" #: gui_common.c:1910 msgid "FTP proxy" msgstr "Proxy FTP" #: gui_common.c:1927 msgid "FTP via HTTP proxy" msgstr "Proxy per FTP via HTTP" #: gui_common.c:1933 msgid "FTP via HTTP tunneling proxy" msgstr "Proxy per tunneling FTP via HTTP" #: gui_common.c:1940 msgid "SSL proxy" msgstr "Proxy SSL" #: gui_common.c:1957 msgid "HTTP proxy" msgstr "Proxy HTTP" #: gui_common.c:1963 msgid "Proxy: " msgstr "Proxy: " #: gui_common.c:1968 msgid "Allow caching of documents" msgstr "Permetti il caching dei documenti" #: gui_common.c:2023 msgid "Languages" msgstr "Lingua" #: gui_common.c:2026 msgid "Preffered languages" msgstr "" #: gui_common.c:2031 #, fuzzy msgid "Language code: " msgstr "Lingua" #: gui_common.c:2043 #, fuzzy msgid "Preffered character sets" msgstr "Insiemi di caratteri" #: gui_common.c:2048 #, fuzzy msgid "Character set code: " msgstr "Insieme di caratteri: " #: gui_common.c:2065 #, fuzzy msgid "Basic auth. scheme" msgstr "Tipo di autorizzazione di base" #: gui_common.c:2075 msgid "Auth" msgstr "Autorizzazione" #: gui_common.c:2082 #, fuzzy msgid "User authentification" msgstr "Autentificazione dell'utente per HTTP" #: gui_common.c:2091 gui_common.c:2140 #, fuzzy msgid "Scheme: " msgstr "Schema" #: gui_common.c:2117 gui_common.c:2167 gui_common.c:2191 #, fuzzy msgid "User name: " msgstr "Utente: " #: gui_common.c:2123 gui_common.c:2173 #, fuzzy msgid "NTLM domain: " msgstr "Dominio: " #: gui_common.c:2126 gui_common.c:2176 msgid "Reuse HTTP Digest access nonce" msgstr "Riusa un accesso HTTP Digest per questa volta" #: gui_common.c:2131 msgid "HTTP proxy user authentification" msgstr "Autentificazione dell'utente per il proxy HTTP" #: gui_common.c:2181 #, fuzzy msgid "FTP proxy user authentification" msgstr "Autentificazione dell'utente per il proxy HTTP" #: gui_common.c:2196 msgid "Misc" msgstr "" #: gui_common.c:2210 msgid "E-mail address: " msgstr "Indirizzo E-mail: " #: gui_common.c:2212 msgid "Send From: header with HTTP request" msgstr "Invia l'header From: con le richieste HTTP" #: gui_common.c:2226 msgid "SSL" msgstr "SSL" #: gui_common.c:2229 msgid "SSL client certificate" msgstr "Certificato del client SSL" #: gui_common.c:2238 msgid "Certificate password: " msgstr "Password del certificato: " #: gui_common.c:2241 msgid "Certificate PEM file: " msgstr "File del certificato PEM: " #: gui_common.c:2244 msgid "Certificate key file: " msgstr "File della chiave certificata: " #: gui_common.c:2247 msgid "List of preffered ciphers: " msgstr "Elenco delle codifiche preferite: " #: gui_common.c:2253 msgid "SSL protocol version" msgstr "Versione del protocollo SSL" #: gui_common.c:2261 msgid "SSLv23" msgstr "SSLv23" #: gui_common.c:2267 msgid "SSLv2" msgstr "SSLv2" #: gui_common.c:2273 msgid "SSLv3" msgstr "SSLv3" #: gui_common.c:2280 msgid "TLSv1" msgstr "" #: gui_common.c:2287 #, fuzzy msgid "Miscelanous SSL settings" msgstr "Impostazioni varie" #: gui_common.c:2297 msgid "EGD daemon socket path: " msgstr "" #: gui_common.c:2301 msgid "Unique ID for all SSL sessions" msgstr "ID univoco per tutte le sessioni SSL" #: gui_common.c:2316 gui_main.c:1896 msgid "Log" msgstr "Log" #: gui_common.c:2323 msgid "Try to find unique name, when original log file locked" msgstr "" "Prova a trovare un nome univoco, quando il file di log originale è bloccato" #: gui_common.c:2328 msgid "Log file: " msgstr "File del log: " #: gui_common.c:2331 msgid "Shortlog file: " msgstr "File del log breve: " #: gui_common.c:2334 msgid "Log window length: " msgstr "Lunghezza della finestra di log: " #: gui_common.c:2347 msgid "Cookies" msgstr "Cookie" #: gui_common.c:2350 msgid "Disabled cookie domains" msgstr "Domini con i cookie disabilitati" #: gui_common.c:2355 gui_limits.c:247 msgid "Domain: " msgstr "Dominio: " #: gui_common.c:2358 #, fuzzy msgid "Cookies settings" msgstr "Impostazioni varie" #: gui_common.c:2367 msgid "Update cookies" msgstr "Aggiorna i cookie" #: gui_common.c:2372 msgid "Send cookies" msgstr "Invia i cookie" #: gui_common.c:2377 msgid "Accept cookies" msgstr "Accetta i cookie" #: gui_common.c:2382 msgid "Check cookies domain" msgstr "Controlla i domini dei cookie" #: gui_common.c:2390 msgid "Cookies maximal number: " msgstr "Numero massimo di cookie: " #: gui_common.c:2405 msgid "Cookie file: " msgstr "File del cookie: " #: gui_common.c:2491 msgid "Filename" msgstr "Nome del file" #: gui_common.c:2494 msgid "Local filename conversion rules" msgstr "Regole di conversione del nome locale del file" #: gui_common.c:2502 msgid "Replace String1 with String2 in filename" msgstr "Sostituisci Stringa1 con Stringa2 nel nome del file" #: gui_common.c:2511 msgid "String1: " msgstr "Stringa 1: " #: gui_common.c:2514 msgid "String2: " msgstr "Stringa 2: " #: gui_common.c:2516 msgid "Delete characters from filename" msgstr "Cancella i caratteri dal nome del file" #: gui_common.c:2525 msgid "Character set: " msgstr "Insieme di caratteri: " #: gui_common.c:2527 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "" "Sostituisci nel nome del file i caratteri dall'insieme 1 con i caratteri " "dall'insieme 2" #: gui_common.c:2536 msgid "Character set1: " msgstr "Insieme di caratteri 1: " #: gui_common.c:2539 msgid "Character set2: " msgstr "Insieme di caratteri 2: " #: gui_common.c:2546 msgid "Base level of tree: " msgstr "Livello base dell'albero: " #: gui_common.c:2548 msgid "Local filename mapping rules" msgstr "Regole di generazione del nome locale del file" #: gui_common.c:2564 msgid "Match pattern" msgstr "Confronta pattern" #: gui_common.c:2565 msgid "Rule" msgstr "Regola" #: gui_common.c:2587 msgid "wildcard pattern" msgstr "pattern wildcard" #: gui_common.c:2594 msgid "RE pattern" msgstr "Pattern RE" #: gui_common.c:2606 msgid "Matching pattern: " msgstr "Pattern di confronto: " #: gui_common.c:2613 msgid "Construction rule: " msgstr "Regola di costruzione: " #: gui_common.c:2653 msgid "Advertisement" msgstr "Pubblicità" #: gui_common.c:2660 msgid "Enable removing of advertisement banners" msgstr "Abilita la rimozione dei banner pubblicitari" #: gui_common.c:2665 msgid "RE for advertisement URLs: " msgstr "RE per le URL pubblicitarie: " #: gui_common.c:2777 msgid "Javascript" msgstr "" #: gui_common.c:2785 msgid "Processing of javascript" msgstr "" #: gui_common.c:2789 #, fuzzy msgid "Javascript patterns" msgstr "Pattern di confronto per le URL: " #: gui_common.c:2794 #, fuzzy msgid "RE for Javascript patterns: " msgstr "Pattern di confronto per le URL: " #: gui_common.c:2800 #, fuzzy msgid "Javascript patterns with transform rules" msgstr "Pattern di confronto per le URL: " #: gui_common.c:2815 #, fuzzy msgid "Pattern" msgstr "Pattern RE" #: gui_common.c:2816 #, fuzzy msgid "Transform rule" msgstr "Tasso di trasferimento" #: gui_common.c:2817 #, fuzzy msgid "HTML tag" msgstr "HTML" #: gui_common.c:2818 #, fuzzy msgid "HTML tag attribute" msgstr "Seleziona i tag ed attributi HTML consentiti" #: gui_common.c:2819 msgid "Rewrite" msgstr "" #: gui_common.c:2840 #, fuzzy msgid "Pattern: " msgstr "Pattern RE" #: gui_common.c:2843 #, fuzzy msgid "Tranform rule: " msgstr "Quota di trasferimento: " #: gui_common.c:2852 msgid "HTML tag: " msgstr "" #: gui_common.c:2856 #, fuzzy msgid "HTML tag attribute: " msgstr "Seleziona i tag ed attributi HTML consentiti" #: gui_common.c:2858 #, fuzzy msgid "Rewrite URL part in HTML document" msgstr "Riscrivi le URL all'interno dei documenti HTML" #: gui_common.c:2913 msgid "Pavuk: Common config" msgstr "Pavuk: Configurazione generale" #: gui_common.c:2980 msgid "Limitations ..." msgstr "Limitazioni ..." #: gui_jscons.c:150 #, fuzzy msgid "Pavuk: JavaScript console" msgstr "Pavuk: Salva il file con le informazioni di autenticazione" #: gui_jscons.c:169 msgid "Reload script file" msgstr "" #: gui_jscons.c:174 #, fuzzy msgid "Save script to file" msgstr "Salva lo scenario ..." #: gui_jscons.c:181 msgid "Load script to JavaScript runtime" msgstr "" #: gui_jscons.c:186 msgid "Restart JavaScript runtime" msgstr "" #: gui_jscons.c:215 #, fuzzy msgid "Prompt: " msgstr "Porta: " #: gui_jscons.c:228 msgid "JavaScript source file: " msgstr "" #: gui_limits.c:44 msgid "Tree" msgstr "Albero" #: gui_limits.c:56 msgid "Download cgi-generated pages" msgstr "Scarica le pagine generate da CGI" #: gui_limits.c:62 msgid "Recurse through FTP directory" msgstr "Esegui la ricorsione attraverso la directory FTP" #: gui_limits.c:68 msgid "Allow \"robots.txt\"" msgstr "Permetti \"robots.txt\"" #: gui_limits.c:74 msgid "Process HTML files downloaded over FTP" msgstr "Elabora i file HTML scaricati via FTP" #: gui_limits.c:80 msgid "Don't leave starting site" msgstr "Non abbandonare il sito di partenza" #: gui_limits.c:86 msgid "Don't leave starting directory" msgstr "Non abbandonare la directory di partenza" #: gui_limits.c:92 #, fuzzy msgid "Don't leave site enter directory" msgstr "Non abbandonare la directory di partenza" #: gui_limits.c:98 #, fuzzy msgid "Download just single page" msgstr "Scarica le pagine generate da CGI" #: gui_limits.c:104 msgid "Apply limiting options on inline objects" msgstr "" #: gui_limits.c:119 msgid "Max. count of documents: " msgstr "Conteggio massimo di documenti: " #: gui_limits.c:122 msgid "Max. depth of tree: " msgstr "Profondità massima dell'albero: " #: gui_limits.c:125 msgid "Max. levels to leave from starting site: " msgstr "Numero massimo di livelli da attraversare dal sito di partenza: " #: gui_limits.c:128 msgid "Max. document size: " msgstr "Dimensione massima del documento: " #: gui_limits.c:131 msgid "Min. document size: " msgstr "Dimensione minima del documento: " #: gui_limits.c:134 msgid "Max. site levels to leave from starting site: " msgstr "" "Numero massimo di livelli di siti da attraversare dal sito di partenza: " #: gui_limits.c:145 msgid "Working subdirectory :" msgstr "Subdirectory di lavoro :" #: gui_limits.c:148 msgid "User condition script: " msgstr "Script con le condizioni dell'utente: " #: gui_limits.c:151 #, fuzzy msgid "Follow command: " msgstr "Comando Post: " #: gui_limits.c:162 #, fuzzy msgid "Patterns" msgstr "Pattern RE" #: gui_limits.c:165 msgid "Wildcard patterns" msgstr "Pattern wildcard" #: gui_limits.c:174 gui_limits.c:195 msgid "Documents matching pattern: " msgstr "Pattern di confronto per i documenti: " #: gui_limits.c:177 gui_limits.c:183 gui_limits.c:198 gui_limits.c:204 #: gui_limits.c:266 msgid "skip: " msgstr "salta: " #: gui_limits.c:180 gui_limits.c:201 msgid "URL matching pattern: " msgstr "Pattern di confronto per le URL: " #: gui_limits.c:186 msgid "RE patterns" msgstr "Pattern RE" #: gui_limits.c:215 msgid "Hosts" msgstr "Host" #: gui_limits.c:224 msgid "Allow / Disallow sites" msgstr "Permetti / Vieta i siti" #: gui_limits.c:230 msgid "Site: " msgstr "Sito: " #: gui_limits.c:241 msgid "Allow / Disallow domains" msgstr "Permetti / Vieta i domini" #: gui_limits.c:253 msgid "IP address RE patterns" msgstr "Pattern RE per gli indirizzi IP" #: gui_limits.c:263 msgid "Server IP address matching pattern: " msgstr "Pattern di confronto per gli indirizzi IP del server: " #: gui_limits.c:269 #, fuzzy msgid "Server ports" msgstr "Risposte del server" #: gui_limits.c:279 msgid "Allow/denny" msgstr "" #: gui_limits.c:284 #, fuzzy msgid "Ports: " msgstr "Porta: " #: gui_limits.c:295 msgid "Documents" msgstr "Documenti" #: gui_limits.c:304 msgid "Allow / Disallow suffix" msgstr "Permetti / Vieta il suffisso" #: gui_limits.c:310 msgid "Suffix: " msgstr "Suffisso: " #: gui_limits.c:321 msgid "Allow / Disallow prefix" msgstr "Permetti / Vieta il prefisso" #: gui_limits.c:327 msgid "Prefix: " msgstr "Prefisso: " #: gui_limits.c:341 gui_limits.c:353 msgid "MIME types" msgstr "Tipi MIME" #: gui_limits.c:349 msgid "Allow / Disallow MIME type" msgstr "Permetti / Vieta il tipo MIME" #: gui_limits.c:358 #, fuzzy msgid "MIME type: " msgstr "Tipi MIME" #: gui_limits.c:371 msgid "Time" msgstr "Tempo" #: gui_limits.c:377 msgid "Lower document time limit" msgstr "Limite inferiore del tempo del documento" #: gui_limits.c:387 msgid "Check if doc. time newer than this" msgstr "Controlla se il tempo del documento è più nuovo di questo" #: gui_limits.c:391 msgid "Upper document time limit" msgstr "Limite superiore del tempo del documento" #: gui_limits.c:401 msgid "Check if doc. time older than this" msgstr "Controlla se il tempo del documento è più vecchio di questo" #: gui_limits.c:410 msgid "Maximal allowed time of downloading: " msgstr "Tempo massimo consentito per lo scaricamento: " #: gui_limits.c:413 msgid " min" msgstr " min" #: gui_limits.c:426 msgid "Select allowed HTML tags and attributes" msgstr "Seleziona i tag ed attributi HTML consentiti" #: gui_limits.c:428 msgid "HTML" msgstr "HTML" #: gui_limits.c:443 #, c-format msgid "%s of %s" msgstr "%s di %s" #: gui_limits.c:476 msgid "Pavuk: Limits config" msgstr "Pavuk: Configurazione delle limitazioni" #: gui_limits.c:529 msgid "Common ..." msgstr "Generale ..." #: gui_main.c:433 msgid "Unknown window to popup" msgstr "Finestra da mostrare sconosciuta" #: gui_main.c:498 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "URL scaricata dalla clipboard : %s\n" #: gui_main.c:542 #, fuzzy, c-format msgid "Fetched URL from browser : %s\n" msgstr "URL scaricata dalla clipboard : %s\n" #: gui_main.c:788 msgid "Both" msgstr "Entrambi" #: gui_main.c:789 msgid "Icons only" msgstr "Solo icone" #: gui_main.c:790 msgid "Text only" msgstr "Solo testo" #: gui_main.c:802 msgid "Nr." msgstr "N°" #: gui_main.c:804 msgid "Status" msgstr "Stato" #: gui_main.c:805 msgid "Size" msgstr "Dimensione" #: gui_main.c:806 msgid "Transfer rate" msgstr "Tasso di trasferimento" #: gui_main.c:807 msgid "Elapsed time" msgstr "Tempo trascorso" #: gui_main.c:808 msgid "Remaining time" msgstr "Tempo rimanente" #: gui_main.c:956 msgid "Open _URL ..." msgstr "Apri _URL ..." #: gui_main.c:969 msgid "Append URL ..." msgstr "Appendi URL ..." #: gui_main.c:978 msgid "Fetch URL from Clipboard" msgstr "Scarica l'URL dalla Clipboard" #: gui_main.c:996 #, fuzzy msgid "Fetch URL from browser" msgstr "Scarica l'URL dalla Clipboard" #: gui_main.c:1006 msgid "Load scenario ..." msgstr "Carica uno scenario ..." #: gui_main.c:1015 msgid "Add scenario ..." msgstr "Aggiungi uno scenario ..." #: gui_main.c:1024 msgid "Save scenario ..." msgstr "Salva lo scenario ..." #: gui_main.c:1033 msgid "Save settings to ~/.pavukrc" msgstr "Salva le impostazioni in ~/.pavukrc" #: gui_main.c:1046 msgid "Schedule ..." msgstr "Pianifica ..." #: gui_main.c:1055 msgid "Auth. info editor ..." msgstr "Editor delle informazioni di autorizzazione ..." #: gui_main.c:1068 msgid "E_xit" msgstr "_Esci" #: gui_main.c:1077 msgid "_File" msgstr "_File" #: gui_main.c:1093 msgid "Document _Tree ..." msgstr "Albero dei Documen_ti ..." #: gui_main.c:1102 msgid "Status page ..." msgstr "Pagina di stato ..." #: gui_main.c:1110 msgid "HTML forms editor ..." msgstr "Editor dei moduli HTML ..." #: gui_main.c:1119 #, fuzzy msgid "Javascript console ..." msgstr "Pattern di confronto per le URL: " #: gui_main.c:1132 msgid "Clear log window" msgstr "Svuota la finestra di log" #: gui_main.c:1141 msgid "_View" msgstr "_Visualizza" #: gui_main.c:1159 msgid "normal recurse" msgstr "risorsione normale" #: gui_main.c:1169 msgid "synchronize" msgstr "sincronizza" #: gui_main.c:1180 msgid "single page" msgstr "pagina singola" #: gui_main.c:1190 msgid "update local links" msgstr "aggiorna i collegamenti locali" #: gui_main.c:1200 msgid "resume files" msgstr "riprendi (resume) file" #: gui_main.c:1210 msgid "unlimited reget" msgstr "riscaricamento illimitato" #: gui_main.c:1220 msgid "transfer but don't store" msgstr "trasferisci ma non memorizzare" #: gui_main.c:1230 msgid "reminder" msgstr "promemoria" #: gui_main.c:1240 msgid "list ftp directory" msgstr "elenca directory ftp" #: gui_main.c:1250 msgid "_Mode" msgstr "_Modalità" #: gui_main.c:1268 msgid "C_ommon ..." msgstr "C_omune ..." #: gui_main.c:1277 msgid "_Limitations ..." msgstr "_Limitazioni ..." #: gui_main.c:1286 msgid "Reset configuration" msgstr "Azzera la configurazione" #: gui_main.c:1301 msgid "Toolbar" msgstr "Barra dei pulsanti" #: gui_main.c:1309 msgid "Toggle toolbar" msgstr "(Dis)attiva la barra dei pulsanti" #: gui_main.c:1364 msgid "Progressbar" msgstr "Barra di progresso" #: gui_main.c:1396 msgid "Language" msgstr "Lingua" #: gui_main.c:1446 msgid "Debug level" msgstr "Livello di debug" #: gui_main.c:1469 msgid "All" msgstr "Tutto" #: gui_main.c:1476 msgid "None" msgstr "Niente" #: gui_main.c:1483 msgid "Debug" msgstr "Debug" #: gui_main.c:1499 #, fuzzy msgid "Allow tooltips" msgstr "Protocolli ammessi" #: gui_main.c:1509 msgid "Log window autoscroll" msgstr "Scorrimento automatico della finestra di log" #: gui_main.c:1518 msgid "Use preferences" msgstr "Usa preferenze" #: gui_main.c:1527 msgid "Quiet" msgstr "Silenzioso" #: gui_main.c:1539 msgid "Immediate messages" msgstr "Messaggi immediati" #: gui_main.c:1551 msgid "_Config" msgstr "_Configura" #: gui_main.c:1567 msgid "_Restart" msgstr "_Riavvia" #: gui_main.c:1577 msgid "Co_ntinue" msgstr "Co_ntinua" #: gui_main.c:1587 msgid "Sto_p" msgstr "_Ferma" #: gui_main.c:1597 msgid "_Break" msgstr "_Interrompi" #: gui_main.c:1607 msgid "_Action" msgstr "_Azione" #: gui_main.c:1627 msgid "About ..." msgstr "Informazioni ..." #: gui_main.c:1636 msgid "_Help" msgstr "_Aiuto" #: gui_main.c:1667 msgid "Config" msgstr "Configurazione" #: gui_main.c:1668 msgid "Popup config window" msgstr "Mostra la finestra di configurazione" #: gui_main.c:1672 msgid "Limits" msgstr "Limitazioni" #: gui_main.c:1673 msgid "Popup limits window" msgstr "Mostra la finestra delle limitazioni" #: gui_main.c:1679 msgid "Go bg" msgstr "Vai sullo sfondo" #: gui_main.c:1680 msgid "Destroy window as soon as posible and continue on terminal" msgstr "Distruggi la finestra al più presto possibile e continua in terminale" #: gui_main.c:1684 gui_main.c:1757 msgid "Restart" msgstr "Riavvia" #: gui_main.c:1685 msgid "Start working on currently set starting URLs" msgstr "Inizia ad operare sull'insieme corrente di URL di partenza" #: gui_main.c:1689 gui_main.c:1762 msgid "Continue" msgstr "Continua" #: gui_main.c:1690 msgid "Continue after stop or break" msgstr "Continua dopo un arresto o interruzione" #: gui_main.c:1696 gui_main.c:1767 msgid "Stop" msgstr "Fermati" #: gui_main.c:1697 msgid "Finish this transfer and stop" msgstr "Concludi questo trasferimento e fermati" #: gui_main.c:1701 gui_main.c:1772 msgid "Break" msgstr "Interrompi" #: gui_main.c:1702 msgid "Break transfer and stop" msgstr "Interrompi il trasferimento e fermati" #: gui_main.c:1708 msgid "Exit" msgstr "Esci" #: gui_main.c:1709 msgid "Immediately quit the program" msgstr "Chiudi immediatamente il programma" #: gui_main.c:1777 msgid "Show whole main window" msgstr "Mostra l'intera finestra principale" #: gui_main.c:1782 msgid "Quit" msgstr "Chiudi" #: gui_main.c:1861 #, fuzzy msgid "Pavuk: save log" msgstr "Pavuk: salva la pagina di stato" #: gui_main.c:1924 msgid "Select all" msgstr "" #: gui_main.c:1932 msgid "Clear selection" msgstr "" #: gui_main.c:1940 msgid "Copy selection" msgstr "" #: gui_main.c:1952 #, fuzzy msgid "Save log ..." msgstr "Salva..." #: gui_main.c:1959 #, fuzzy msgid "Clear log" msgstr "Svuota la finestra di log" #: gui_main.c:2046 gui_main.c:2164 msgid "Processed: " msgstr "Elaborato: " #: gui_main.c:2055 gui_main.c:2173 msgid "Failed: " msgstr "Fallito: " #: gui_main.c:2064 gui_main.c:2182 msgid "Queued: " msgstr "Accodato: " #: gui_main.c:2073 gui_main.c:2191 msgid "Rejected: " msgstr "Rifiutato: " #: gui_main.c:2123 msgid "S: " msgstr "S: " #: gui_main.c:2132 msgid "R: " msgstr "R: " #: gui_main.c:2141 msgid "ET: " msgstr "ET: " #: gui_main.c:2150 msgid "RT: " msgstr "RT: " #: gui_scenario.c:46 msgid "Pavuk: Scenario saver" msgstr "Pavuk: salvataggio scenario" #: gui_scenario.c:139 msgid "Pavuk: Scenario loader" msgstr "Pavuk: caricamento scenario" #: gui_scenario.c:231 msgid "Pavuk: Scenario add" msgstr "Pavuk: caricamento scenario" #: gui_sched.c:55 pavuk.c:495 msgid "Error scheduling\n" msgstr "Errore di pianificazione\n" #: gui_sched.c:78 msgid "Pavuk: Scheduler" msgstr "Pavuk: Pianificazione" #: gui_sched.c:97 msgid "Scheduling command: " msgstr "Comando di pianificazione: " #: gui_sched.c:107 msgid "Reschedule after " msgstr "Ripianifica dopo " #: gui_sched.c:117 msgid " hours" msgstr " ore" #: gui_tools.c:28 msgid "January" msgstr "Gennaio" #: gui_tools.c:29 msgid "February" msgstr "Febbraio" #: gui_tools.c:30 msgid "March" msgstr "Marzo" #: gui_tools.c:31 msgid "April" msgstr "Aprile" #: gui_tools.c:32 msgid "May" msgstr "Maggio" #: gui_tools.c:33 msgid "June" msgstr "Giugno" #: gui_tools.c:34 msgid "July" msgstr "Luglio" #: gui_tools.c:35 msgid "August" msgstr "Agosto" #: gui_tools.c:36 msgid "September" msgstr "Settembre" #: gui_tools.c:37 msgid "October" msgstr "Ottobre" #: gui_tools.c:38 msgid "November" msgstr "Novembre" #: gui_tools.c:39 msgid "December" msgstr "Dicembre" #: gui_tools.c:43 msgid "Sun" msgstr "Dom" #: gui_tools.c:44 msgid "Mon" msgstr "Lun" #: gui_tools.c:45 msgid "Tue" msgstr "Mar" #: gui_tools.c:46 msgid "Wed" msgstr "Mer" #: gui_tools.c:47 msgid "Thu" msgstr "Gio" #: gui_tools.c:48 msgid "Fri" msgstr "Ven" #: gui_tools.c:49 msgid "Sat" msgstr "Sab" #: gui_tools.c:171 msgid "Time: " msgstr "Tempo: " #: gui_tools.c:180 msgid " : " msgstr " : " #: gui_tools.c:360 #, c-format msgid "Pavuk: select %s" msgstr "Pavuk: selezione %s" #: gui_tools.c:361 #, fuzzy msgid "file" msgstr "_File" #: gui_tools.c:459 msgid "Browse ..." msgstr "Sfoglia ..." #: gui_tree.c:117 #, c-format msgid "URL: %s\n" msgstr "URL: %s\n" #: gui_tree.c:130 gui_tree.c:136 gui_tree.c:175 msgid "Request type: " msgstr "Tipo di richiesta: " #: gui_tree.c:151 msgid "Query values:\n" msgstr "Valori della query:\n" #: gui_tree.c:181 msgid "Status: " msgstr "Stato: " #: gui_tree.c:187 msgid "not processed yet\n" msgstr "non ancora elaborato\n" #: gui_tree.c:193 msgid "loaded from NS cache\n" msgstr "caricato dalla cache di NS\n" #: gui_tree.c:199 msgid "loaded from local URL tree\n" msgstr "caricato dall'albero locale dell'URL\n" #: gui_tree.c:205 msgid "moved to another URL\n" msgstr "spostato ad un'altra URL\n" #: gui_tree.c:211 msgid "URL not found on remote server\n" msgstr "URL non trovata sul server remoto\n" #: gui_tree.c:217 msgid "truncated\n" msgstr "troncato\n" #: gui_tree.c:223 msgid "downloaded OK\n" msgstr "scaricamento OK\n" #: gui_tree.c:229 msgid "rejected by rules\n" msgstr "rifiutato dalle regole\n" #: gui_tree.c:235 msgid "disabled by user\n" msgstr "disattivato dall'utente\n" #: gui_tree.c:241 msgid "probably recoverable error\n" msgstr "errore probabilmente recuperabile\n" #: gui_tree.c:247 msgid "unrecoverable error\n" msgstr "errore non recuperabile\n" #: gui_tree.c:253 msgid "unknown\n" msgstr "sconosciuto\n" #: gui_tree.c:263 #, c-format msgid "Moved to URL: %s\n" msgstr "Spostato all'URL: %s\n" #: gui_tree.c:273 #, c-format msgid "Type: %s\n" msgstr "Tipo: %s\n" #: gui_tree.c:275 msgid "Type: unknown\n" msgstr "Tipo: sconosciuto\n" #: gui_tree.c:281 #, c-format msgid "Size: %d\n" msgstr "Dimensione: %d\n" #: gui_tree.c:290 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "Tempo di modifica: %a, %d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:300 #, c-format msgid "Local filename: %s\n" msgstr "Nome del file locale: %s\n" #: gui_tree.c:311 msgid "Parent URLs:\n" msgstr "URL d'origine:\n" #: gui_tree.c:612 msgid "Pavuk: Store tree" msgstr "Pavuk: Memorizza albero" #: gui_tree.c:656 gui_tree.c:684 msgid "Pavuk: URL tree preview" msgstr "Pavuk: anteprima albero dell'URL" #: gui_tree.c:659 gui_tree.c:788 msgid "Store tree ..." msgstr "Memorizza l'albero ..." #: gui_tree.c:660 gui_tree.c:704 msgid "Automaticaly watch last processed URLs" msgstr "Controlla automaticamente l'ultima URL elaborata" #: gui_tree.c:662 gui_tree.c:821 msgid "Properties" msgstr "Proprietà" #: gui_tree.c:663 gui_tree.c:829 msgid "Launch browser" msgstr "Avvia il browser" #: gui_tree.c:664 gui_tree.c:837 msgid "Disable URL" msgstr "Disattiva l'URL" #: gui_tree.c:665 gui_tree.c:845 msgid "Enable URL" msgstr "Attiva l'URL" #: gui_tree.c:666 gui_tree.c:853 msgid "Download URL" msgstr "Scarica l'URL" #: gui_tree.c:670 gui_tree.c:724 msgid "URL tree" msgstr "Albero dell'URL" #: html.c:253 htmlparser.c:281 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "BASE URL non gestita- %s (probabilmente errata gestione)\n" #: html.c:522 msgid "Can't work on directory\n" msgstr "Impossibile operare nella directory\n" #: html.c:548 html.c:552 msgid "rewrite parent" msgstr "riscrittura origine" #: http.c:366 msgid "****************** Proxy connect request *****************\n" msgstr "****************** richiesta di connessione Proxy *****************\n" #: http.c:413 msgid "***************** Proxy connect response *****************\n" msgstr "***************** risposta di connessione Proxy *****************\n" #: http.c:469 msgid "Sending request ..." msgstr "Invia richiesta ..." #: http.c:716 msgid "************ Client HTTP MIME header ***************\n" msgstr "************ header Client HTTP MIME ***************\n" #: http.c:733 msgid "Sending data ..." msgstr "Invio dati ..." #: http.c:734 msgid "************ HTTP request data ***************\n" msgstr "************ richiesta dati HTTP ***************\n" #: http.c:744 msgid "Waiting for response ..." msgstr "Attesa per una risposta ..." #: http.c:759 msgid "Error reading HTTP 1xx class response\n" msgstr "Errore in lettura della risposta HTTP classe 1xx\n" #: http.c:764 msgid "***************** class 1xx HTTP response ****************\n" msgstr "***************** risposta HTTP classe 1xx ****************\n" #: http.c:875 msgid "Connecting ..." msgstr "Connessione ..." #: http.c:1159 msgid "*********** HTTP Server response MIME header **********\n" msgstr "*********** Header MIME di risposta del server HTTP **********\n" #: http.c:1262 msgid "Regeting whole file\n" msgstr "Riscaricamento del file intero\n" #: http.c:1312 #, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "" #: http_proxy.c:150 #, c-format msgid "Checking HTTP proxy server %s:%d\n" msgstr "" #: http_proxy.c:162 http_proxy.c:174 http_proxy.c:181 http_proxy.c:190 msgid "Failed to check proxy !\n" msgstr "" #: http_proxy.c:196 #, c-format msgid "Proxy %s:%d is HTTP/%d.%d proxy\n" msgstr "" #: jsbind.c:76 #, fuzzy msgid "bad parameter" msgstr "Parametro tempo errato \"%s\"\n" #: jsbind.c:529 #, fuzzy msgid "not enough parameters" msgstr "Numero di parametri insufficiente \"-msgcat\"\n" #: jsbind.c:553 msgid "unknown limiting condition" msgstr "" #: lfname.c:479 lfname.c:491 lfname.c:500 lfname.c:513 lfname.c:536 #: lfname.c:645 lfname.c:658 lfname.c:670 lfname.c:685 lfname.c:698 re.c:51 #: re.c:61 re.c:68 re.c:80 re.c:95 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "Errore di compilazione dell'espressione regolare : %s\n" #: lfname.c:553 lfname.c:617 lfname.c:939 lfname.c:1057 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "Errore di analisi LSP: token errato a - %s\n" #: lfname.c:950 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "Errore di analisi LSP: valore numerico errato a - %s\n" #: lfname.c:964 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "Errore di analisi LSP: macro errata a - %s\n" #: lfname.c:992 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "Errore di analisi LSP: stringa non terminata a - %s\n" #: lfname.c:1013 lfname.c:1029 lfname.c:1047 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "Errore di analisi LSP: tipo di parametro errato a - %s\n" #: log.c:203 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "Conclusione log : %H:%M:%S %d.%m.%Y\n" #: log.c:224 msgid "Unable to open log file - disabling logging\n" msgstr "Impossibile aprire il file di log - disabilitazione log\n" #: log.c:232 msgid "Log file is locked by another process - " msgstr "Il file di log è bloccato da un altro processo - " #: log.c:236 msgid "generating new log filename\n" msgstr "generazione nuovo file di log\n" #: log.c:241 msgid "disabling logging\n" msgstr "disabilitazione log\n" #: log.c:263 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "Avvio log : %H:%M:%S %d.%m.%Y\n" #: mozcache.c:184 #, fuzzy, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "Impossibile aprire l'indice della cache di Netscape - %s\n" #: myssl.c:49 msgid "Failed obtaining entropy pathname\n" msgstr "" #: myssl.c:59 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "" #: myssl.c:70 msgid "Seeding entropy pool INSECURELY!\n" msgstr "" #: myssl.c:157 msgid "Unable to set certificate file (wrong password?)\n" msgstr "Impossibile impostare il file del certificato (password errata?)\n" #: myssl.c:167 msgid "Unable to set public key file\n" msgstr "Impossibile impostare il file della chiave pubblica\n" #: myssl.c:183 msgid "Private key does not match the certificate public key\n" msgstr "La chiave privata non corrisponde alla chiave pubblica certificata\n" #: myssl.c:231 #, c-format msgid "SSL connection is using %s\n" msgstr "La connessione SSL sta usando %s\n" #: myssl.c:234 msgid "Server certificate:\n" msgstr "Certificato del server:\n" #: myssl.c:238 #, c-format msgid "\t subject: %s\n" msgstr "\t subject: %s\n" #: myssl.c:243 #, c-format msgid "\t issuer: %s\n" msgstr "\t distributore: %s\n" #: nscache.c:103 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "Impossibile aprire l'indice della cache di Netscape - %s\n" #: ntlm_auth.c:416 msgid "Trying to do NTLM authorization\n" msgstr "" #: ntlm_auth.c:425 ntlm_auth.c:506 ntlm_auth.c:587 ntlm_auth.c:667 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "" #: ntlm_auth.c:448 ntlm_auth.c:609 msgid "Not enough data for NTLM authorization!\n" msgstr "" #: ntlm_auth.c:449 ntlm_auth.c:610 #, fuzzy msgid "Missing:\n" msgstr "Impostazioni varie" #: ntlm_auth.c:450 ntlm_auth.c:611 msgid " domain\n" msgstr "" #: ntlm_auth.c:451 ntlm_auth.c:612 msgid " username\n" msgstr "" #: ntlm_auth.c:452 ntlm_auth.c:613 msgid " password\n" msgstr "" #: ntlm_auth.c:453 ntlm_auth.c:614 msgid " local hostname\n" msgstr "" #: ntlm_auth.c:489 ntlm_auth.c:497 ntlm_auth.c:522 ntlm_auth.c:650 #: ntlm_auth.c:658 ntlm_auth.c:683 msgid "Got unexpected response\n" msgstr "" #: ntlm_auth.c:532 msgid "Failed NTLM nonce negotiation\n" msgstr "" #: ntlm_auth.c:574 msgid "Trying to do proxy NTLM authorization\n" msgstr "" #: ntlm_auth.c:693 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "" #: options.h:193 msgid "\t-v - print version number\n" msgstr "\t-v - mostra il numero di versione\n" #: options.h:204 msgid "\t-h - help\n" msgstr "\t-h - aiuto\n" #: options.h:218 msgid "\t-X - start GUI interface\n" msgstr "\t-X - avvia l'interfaccia GUI\n" #: options.h:249 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" "\t-runX - dopo l'avvio dell'interfaccia GUI, inizia l'\n" "\t elaborazione delle URL inserite immediatamente\n" #: options.h:265 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "\t-prefs/-noprefs - carica le preferenze dal file ~/.pavuk_prefs\n" #: options.h:494 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" "\t-progress/-noprogress\n" "\t - mostra l'indicatore di progresso durante l'avvio in " "terminale\n" #: options.h:517 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "\t-lmax $nr - profondità richiesta dell'albero\n" #: options.h:528 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "\t-dmax $nr - numero massimo di documenti scaricati\n" #: options.h:539 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "" "\t-sleep $nr - fermati per $nr secondi tra i trasferimenti,\n" "\t default 0 secondi\n" #: options.h:551 #, fuzzy msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "" "\t-sleep $nr - fermati per $nr secondi tra i trasferimenti,\n" "\t default 0 secondi\n" #: options.h:574 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "\t-retry $nr - numero di tentativi se qualcosa fallisce\n" #: options.h:585 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "" "\t-nregets $nr - numero massimo di riscaricamenti per singolo file, " "default 2\n" #: options.h:596 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" "\t-nredirs $nr - numero massimo di ridirezioni HTTP da seguire, " "default 5\n" #: options.h:607 #, fuzzy msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" "\t-timeout $nr - tempo limite per le comunicazioni di rete (min).\n" "\t 0 == nessun limite,\n" "\t default = 0\n" #: options.h:619 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" "\t-rollback $nr - numero di byte da scartare (contati dalla fine\n" "\t del file) se si riscarica, default 0\n" #: options.h:632 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" "\t-ddays $nr - numero di giorni dall'ultimo accesso per il " "controllo\n" "\t del documento in modalità sincronizzata\n" #: options.h:644 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" "\t-nocache/-cache - impedisci il caching di documenti HTTP (nella cache " "del proxy)\n" #: options.h:666 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "\t-noRobots/-Robots - tieni conto dei file \"robots.txt\" ?\n" #: options.h:688 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "\t-noFTP/-FTP - non scariacare i file FTP\n" #: options.h:710 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "\t-noHTTP/-HTTP - non scaricare i file HTTP\n" #: options.h:735 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "\t-noSSL/-SSL - non scaricare i file SSL (HTTPS)\n" #: options.h:765 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "\t-noFTPS/-FTPS - non scaricare i file FTPS\n" #: options.h:792 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "\t-noGopher/-Gopher - scarica i file Gopher ?\n" #: options.h:814 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "\t-noCGI/-CGI - scarica le pagine CGI parametriche ?\n" #: options.h:836 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "" "\t-noEnc/-Enc - permetti il trasferimento di file codificati ?\n" #: options.h:858 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" "\t-noRelocate/-Relocate\n" "\t - non riscrivere i collegamenti\n" #: options.h:881 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" "\t-FTPhtml/-noFTPhtml\n" "\t - elabora i file HTML scaricati via FTP\n" #: options.h:904 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" "\t-FTPlist/-noFTPlist\n" "\t - usa l'elenco esteso per le directory FTP\n" #: options.h:927 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "\t-FTPdir/-noFTPdir - esegui la ricorsione della directory FTP\n" #: options.h:949 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" "\t-store_index/-nostore_index\n" "\t - memorizza le URL delle directory come file di indice\n" #: options.h:972 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" "\t-force_reget/-noforce_reget\n" "\t - forza il riscaricamento dell'intero file\n" "\t quando il server non gestisce il reget\n" #: options.h:1000 msgid "\t-debug - turn on debug mode\n" msgstr "\t-debug - attiva la modalità debug\n" #: options.h:1030 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "" "\t-debug_level $l - numero del livello di debug, guarda il manuale\n" "\t per la descrizione di $1\n" #: options.h:1042 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "" "\t-asite $list - elenco separato da virgole dei siti consentiti\n" #: options.h:1053 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "\t-dsite $list - elenco separato da virgole dei siti vietati\n" #: options.h:1064 msgid "\t-adomain $list - list of allowed domains\n" msgstr "\t-adomain $list - elenco dei domini consentiti\n" #: options.h:1075 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "\t-ddomain $list - elenco dei domini vietati\n" #: options.h:1086 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "\t-aprefix $list - elenco delle directory/file consentiti\n" #: options.h:1097 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "\t-dprefix $list - elenco delle directory/file vietati\n" #: options.h:1108 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "\t-asfx $list - elenco dei suffissi consentiti\n" #: options.h:1119 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "\t-dsfx $list - elenco dei siti vietati\n" #: options.h:1130 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "\t-amimet $list - elenco dei tipi MIME consentiti\n" #: options.h:1141 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "\t-dmimet $list - elenco dei tipi MIME vietati\n" #: options.h:1152 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "\t-alang $list - elenco delle lingue preferite (solo via HTTP)\n" #: options.h:1163 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "" "\t-acharset $list - elenco degli insiemi di caratteri preferiti (solo via " "HTTP)\n" #: options.h:1174 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" "\t-scndir $dir - directory, dove sono memorizzati i tuoi scenari\n" "\t (file di configurazione)\n" #: options.h:1186 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "\t-cdir $dir - directory in cui memorizzare i documenti\n" #: options.h:1197 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "" "\t-subdir $dir - subdirectory di quella corrente su cui operare\n" #: options.h:1208 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" "\t-scenario $str - nome dello scenario dalla directory degli scenari\n" "\t da caricare e/o avviare\n" #: options.h:1220 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" "\t-auth_scheme 1/2/3 - tipo di autorizzazione HTTP: 1-Utente 2-Base " "3-Digest,\n" "\t default 2\n" #: options.h:1232 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "\t-auth_name $str - nome per l'Autorizzazione (solo via HTTP)\n" #: options.h:1243 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "\t-auth_passwd $str - password per l'Autorizzazione (solo via HTTP)\n" #: options.h:1254 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - riusa un'autorizzazione Digest per accesso\n" "\t HTTP in caso di altre richieste\n" #: options.h:1278 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - riusa un'autorizzazione Digest per accesso\n" "\t HTTP proxy in caso di altre richieste\n" #: options.h:1305 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" "\t-ssl_cert_passwd $str\n" "\t - password per il file di certificazione SSL\n" #: options.h:1321 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - file di certificazione SSL\n" #: options.h:1337 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "\t-ssl_key_file $str - file della chiave di certificazione SSL\n" #: options.h:1352 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" "\t-ssl_cipher_list $str\n" "\t - elenco delle codifiche SSL preferite per le " "comunicazioni SSL\n" #: options.h:1368 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "" #: options.h:1380 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "" "\t-from $str - indirizzo e-mail usato per l'identificazione " "dell'utente\n" #: options.h:1391 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" "\t-send_from/-nosend_from\n" "\t - invia l'header From: nelle richieste HTTP con il tuo\n" "\t indirizzo e-mail\n" #: options.h:1415 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "" "\t-identity $str - contenuto dell'header User-agent: nelle richieste " "HTTP\n" #: options.h:1426 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "\t-pattern $list - elenco dei pattern wildcard per i file\n" #: options.h:1440 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "\t-rpattern $re - file che corrispondono al pattern RE\n" #: options.h:1452 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" "\t-skip_pattern $list\n" "\t - evita i file il cui pattern wildcard è nell'elenco\n" #: options.h:1467 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" "\t-skip_rpattern $re\n" "\t - evita i file che corrispondono al pattern RE\n" #: options.h:1480 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "\t-url_pattern $list - URL il cui pattern wildcard è nell'elenco\n" #: options.h:1494 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "\t-url_rpattern $re - URL che corrispondono al pattern RE\n" #: options.h:1506 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" "\t-skip_url_pattern $list\n" "\t - evita le URL il cui pattern wildcard è nell'elenco\n" #: options.h:1521 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" "\t-skip_url_rpattern $re\n" "\t - evita le URL che corrispondono al pattern RE\n" #: options.h:1534 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" msgstr "" "\t-mode $mode - imposta modalità operativa\n" "\t normal - ricorsione attraverso WWW (default)\n" "\t linkupdate - aggiorna i collegamenti remoti\n" "\t nell'albero locale\n" "\t sync - sincronizza l'albero locale con i server\n" "\t WWW remoti\n" "\t singlepage - pagina singola con oggetti " "incorporati\n" "\t singlereget - riscarica il file finché non è " "intero\n" "\t resumeregets - riscarica tutti i file che sono " "interrotti\n" "\t dontstore - trasferisci i documenti, ma non " "memorizzarli\n" "\t reminder - controlla le URL se sono cambiate\n" "\t ftpdir - elenca contenuto delle directory FTP\n" #: options.h:1555 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" #: options.h:1567 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" #: options.h:1579 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" #: options.h:1594 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" #: options.h:1607 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - il proxy gopher specificato è il gateway HTTP per " "Gopher\n" #: options.h:1631 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - il proxy ftp specificato è il gateway HTTP per FTP\n" #: options.h:1655 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - usa la richiesta CONNECT al proxy HTTP per\n" "\t le connessioni FTP\n" #: options.h:1682 msgid "\t-browser $str - your preferred browser programm\n" msgstr "\t-browser $str - il tuo browser preferito\n" #: options.h:1697 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "\t-xmaxlog - lunghezza massima della finestra di log\n" #: options.h:1709 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "" "\t-dumpscn $str - salva lo scenario nella directory apposita con il " "nome $str\n" #: options.h:1720 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "" "\t-maxsize $nr - dimensione massima consentita dei documenti in byte\n" #: options.h:1731 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "" "\t-minsize $nr - dimensione minima consentita dei documenti in byte\n" #: options.h:1742 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - password per l'autorizzazione HTTP proxy\n" #: options.h:1754 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - nome utente per l'autorizzazione HTTP proxy\n" #: options.h:1766 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_auth 1/2/3\n" "\t - tipo di autorizzazione per l'autorizzazione per " "l'HTTP proxy\n" #: options.h:1778 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "" "\t-logfile $file - nome del file in cui sono memorizzati i messaggi\n" #: options.h:1789 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "" "\t-slogfile $file - nome del file in cui sarà memorizzato il log breve\n" #: options.h:1800 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "" "\t-stime/-nostime - scrivi il tempo di inizio e conclusione del " "trasferimento\n" #: options.h:1822 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - rimuovi file o directory irregolari quando lanciato " "in\n" "\t modalità sincronizzata\n" #: options.h:1847 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" "\t-auth_file $file - file in cui hai memorizzato le tue informazioni di\n" "\t autorizzazione\n" "\t guarda il manuale per la descriozione del formato\n" #: options.h:1859 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" "\t-base_level $nr - numero di livelli dell'albero di directory da\n" "\t tralasciare dalla cima\n" #: options.h:1870 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "\t-ftp_active - seleziona la connessione dati FTP attiva\n" #: options.h:1881 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "\t-ftp_passive - seleziona la connessione dati FTP passiva\n" #: options.h:1895 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "" "\t-msgcat $dir - directory in cui sono memorizzati i cataloghi di " "messaggi\n" #: options.h:1910 msgid "\t-language $str - set language for messages\n" msgstr "\t-language $str - imposta la lingua per i messaggi\n" #: options.h:1922 msgid "\t-quiet - don't show output messages\n" msgstr "\t-quiet - non mostrare i messaggi di output\n" #: options.h:1933 msgid "\t-verbose - show output messages (default)\n" msgstr "\t-verbose - mostra i messaggi di output (default)\n" #: options.h:1944 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-newer_than $time - scarica solo i documenti più nuovi di $time\n" "\t formato di $time: YYYY.MM.DD.hh:mm\n" #: options.h:1956 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-older_than $time - scarica solo i documenti più vecchi di $time\n" "\t formato di $time: YYYY.MM.DD.hh:mm\n" #: options.h:1968 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-schedule $time - pianifica l'avvio di pavuk alle $time\n" "\t formato di $time: YYYY.MM.DD.hh:mm\n" #: options.h:1980 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "" "\t-reschedule $nr - numero di ore tra due avvii\n" "\t per pianificazioni cicliche\n" #: options.h:1992 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" "\t-dont_leave_site/-leave_site\n" "\t - non/abbandonare il sito con l'URL di partenza\n" #: options.h:2015 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" "\t-dont_leave_dir/-leave_dir\n" "\t - non/abbandonare la directory con l'URL di partenza\n" #: options.h:2038 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" "\t-preserve_time/-nopreserve_time\n" "\t - preserva il tempo di modifica del documento\n" #: options.h:2061 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserva i permessi del documento\n" #: options.h:2084 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserva i collegamenti simbolici assoluti\n" #: options.h:2107 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" "\t-leave_level $nr - quanti livelli dell'albero attraversare dal sito\n" "\t di partenza, (0 == non importa) default 0\n" #: options.h:2119 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "" "\t-cookie_file $file - file in cui sono memorizzate le informazioni sul " "cookie\n" #: options.h:2130 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" "\t-cookie_send/-nocookie_send\n" "\t - invia le informazioni sul cookie nelle richieste " "HTTP\n" #: options.h:2153 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" "\t-cookie_recv/-nocookie_recv\n" "\t - accetta cookie dalle risposte HTTP\n" #: options.h:2176 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" "\t-cookie_update/-nocookie_update\n" "\t - aggiorna i cookie nel file dei cookie\n" #: options.h:2199 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" "\t-cookie_check/-nocookie_check\n" "\t - controlla se i cookie sono impostati dal dominio " "d'origine\n" #: options.h:2222 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "" "\t-cookies_max $nr - numero massimo di cookie nella cache dei cookie\n" #: options.h:2233 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" "\t-disabled_cookie_domains $list\n" "\t - elenco separato da virgole dei domini con cookie " "disabilitati\n" #: options.h:2245 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disabilita l'elaborazione delle URL dall'\n" "\t attributo $ATTRIB del tag HTML $TAG\n" #: options.h:2258 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - abilita l'elaborazione delle URL dall'\n" "\t attributo $ATTRIB del tag HTML $TAG\n" #: options.h:2274 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "\t-gui_font $font - nome del font usato nell'interfaccia GUI\n" #: options.h:2286 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" "\t-user_condition $str\n" "\t - script in uscita dell'utente usato per limitare " "alcune URL\n" "\t per ulteriori informazioni guardare la pagina man\n" #: options.h:2299 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "" "\t-tr_del_chr $str - caratteri che saranno cancellati dai nomi\n" "\t dei file locali\n" #: options.h:2311 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" "\t-tr_str_str $str1 $str2\n" "\t - trasforma $str1 in $str2 nei nomi dei file locali\n" #: options.h:2323 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - trasforma $chrset1 in $chrset2 nei nomi dei file " "locali\n" #: options.h:2335 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "" "\t-index_name $str - nome dell'indice della directory invece di _._.html\n" #: options.h:2346 #, fuzzy msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "\t-dmax $nr - numero massimo di documenti scaricati\n" #: options.h:2368 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - confronta la dimensione del file ricevuto con\n" "\t quella fornita dal server remoto\n" #: options.h:2392 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" "\t-urls_file $file - le URL dovrebbero essere lette dal file, fino a\n" "\t quando giunge in input una riga con un singolo \".\"\n" #: options.h:2404 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" "\t-bg/-nobg - stacca il processo di pavuk dal terminale e\n" "\t non emettere alcun messaggio sullo schermo\n" #: options.h:2427 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "" "\t-maxrate $nr - limita al massimo la velocità di trasferimento " "(kB/s)\n" #: options.h:2438 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "" "\t-minrate $nr - limita al minimo la velocità di trasferimento (kB/s)\n" #: options.h:2449 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "\t-bufsize $nr - dimensione del buffer di lettura (kB)\n" #: options.h:2460 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "" "\t-file_quota $nr - dimensione massima del file da trasferire (kB)\n" #: options.h:2471 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "" "\t-trans_quota $nr - ammontare massimo di trasferimenti per sessione (kB)\n" #: options.h:2482 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "\t-fs_quota $nr - quota di spazio libero su disco (kB)\n" #: options.h:2493 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" "\t-enable_js/-disable_js\n" "\t - abilita lo scaricamento dei file sorgenti javascript\n" #: options.h:2516 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" "\t-fnrules $t $m $r - regole per la costruzione dei nomi dei file locali\n" "\t (per una descrizione migliore guarda il manuale)\n" #: options.h:2528 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" "\t-store_info/-nostore_info\n" "\t - memorizza i file con le informazioni sul documento\n" "\t insieme a ciascun documento\n" #: options.h:2551 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" "\t-all_to_local/-noall_to_local\n" "\t - cambia in locali tutti i collegamenti all'interno " "del\n" "\t documento HTML immediatamente dopo lo scaricamento\n" #: options.h:2575 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" "\t-sel_to_local/-nosel_to_local\n" "\t - cambia in locali tutti i collegamenti all'\n" "\t interno del documento HTML che soddisfano le\n" "\t limitazioni, immediatamente dopo lo scaricamento\n" #: options.h:2600 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" "\t-all_to_remote/-noall_to_remote\n" "\t - cambia in remoti tutti i collegamenti all'interno\n" "\t del documento immediatamente dopo lo scaricamento e\n" "\t non fare ulteriori cambiamenti ad esso\n" #: options.h:2625 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "" "\t-remind_cmd $str - comando che invia il risultato dalla modalità\n" "\t reminder (promemoria)\n" #: options.h:2636 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" "\t-auto_referer/-noauto_referer\n" "\t - nelle richieste HTTP invia per ogni URL di partenza\n" "\t il campo Referer: che contiene la sua propria URL\n" #: options.h:2660 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" "\t-url_strategy $strategy\n" "\t - strategia di pianificazione per le URL\n" "\t (cioè l'ordine in cui le URL saranno scaricate)\n" "\t $strategy è una tra :\n" "\t level - ordinamento per livello nell'albero delle " "URL\n" "\t leveli - ordinamento per livello nell'albero delle " "URL,\n" "\t ma gli oggetti incorporati vengono prima\n" "\t pre - pre-ordinamento per livello nell'albero " "delle URL\n" "\t prei - pre-ordinamento per livello nell'albero " "delle URL,\n" "\t ma gli oggetti incorporati vengono prima\n" #: options.h:2683 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "" "\t-nscache_dir $dir - percorso della directory della cache del browser " "Netscape\n" #: options.h:2698 #, fuzzy msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr " - con supporto per caricare i file dalla cache del browser Netscape\n" #: options.h:2728 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" "\t-remove_adv/-noremove_adv\n" "\t - abilita la rimozione dei banner pubblicitari\n" "\t suppone che tu abbia impostato delle espressioni " "regolari\n" "\t per il riconoscimento dei banner con l'opzione " "-adv_re\n" #: options.h:2761 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "" "\t-adv_re $RE - espressioni regolari per il riconoscimento\n" "\t delle URL dei banner pubblicitari\n" #: options.h:2777 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" "\t-check_bg/-nocheck_bg\n" "\t - se funzionante sullo sfondo, non scrivere\n" "\t alcun messagggio sullo schermo\n" #: options.h:2806 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" "\t-send_if_range/-nosend_if_range\n" "\t - invia l'header If-Range nelle richieste HTTP\n" "\t disabilita questa opzione se il server gestisce il " "reget,\n" "\t ma genera Etags diversi per due richieste\n" #: options.h:2831 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "\t-sched_cmd $str - comando per la pianificazione\n" #: options.h:2842 msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" "\t-unique_log/-nounique_log\n" "\t - quando il file di log originale è bloccato, prova a " "cercarne\n" "\t un altro con estensione numerica che non è bloccata\n" #: options.h:2866 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" "\t-post_cmd $str - comando di post-elaborazione, che sarà attivato\n" "\t dopo che il documento sarà scaricato con successo\n" #: options.h:2882 #, fuzzy msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" "\t-ssl_version $v - versione del protocollo SSL usata per le " "comunicazioni,\n" "\t valori ammessi: ssl23,ssl2,ssl3\n" #: options.h:2885 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" "\t-ssl_version $v - versione del protocollo SSL usata per le " "comunicazioni,\n" "\t valori ammessi: ssl23,ssl2,ssl3\n" #: options.h:2903 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" "\t-unique_sslid/-nounique_sslid\n" "\t - usa un ID SSL univoco per ogni sessione\n" #: options.h:2931 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "\t-httpad $hdr - header HTTP aggiuntivo\n" #: options.h:2942 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "" "\t-statfile $str - rapporto statistico sull'avanzamento dello " "scaricamento\n" #: options.h:2956 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "" "\t-ewait - aspetta a chiudere il programma dopo che " "l'avanzamento\n" "\t dello scaricamento è completato\n" #: options.h:2987 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "\t-aip_pattern $re - pattern per gli IP dei server ammessi\n" #: options.h:3002 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "\t-dip_pattern $re - pattern per gli IP dei server vietati\n" #: options.h:3014 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "" "\t-site_level $nr - numero massimo ammesso di siti da attraversare dal\n" "\t sito di partenza\n" #: options.h:3026 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" "\t-use_http11/-nouse_http11\n" "\t - abilita o disabilita l'uso delle caratteristiche\n" "\t del protocollo HTTP/1.1, default è off adesso\n" #: options.h:3050 #, fuzzy msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" "\t-max_time $nr - imposta il tempo massimo di esecuzione del programma\n" "\t in minuti, default 0 == nessuna limitazione\n" #: options.h:3065 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" "\t-local_ip $str - usa questo indirizzo IP locale dell'interfaccia di " "rete.\n" "\t Questa opzione è per macchine con più indirizzi IP.\n" #: options.h:3077 #, fuzzy msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-request $req - informazioni estese per le richieste, usata per " "specificare\n" "\t le informazioni per le richieste GET o POST.\n" "\t formato di $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (per altre informazioni guarda la pagina man)\n" #: options.h:3095 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" "\t-hash_size $nr - dimensione delle tabelle hash interne per migliorare\n" "\t le prestazioni\n" #: options.h:3109 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "" "\t-nthreads $nr - imposta il numero di thread concorrenti di " "scaricamento\n" #: options.h:3124 #, fuzzy msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" "\t-immesg/-noimmesg - scrivi i messaggi quando generati immediatamente, non\n" "\t solo quando si salva (dal punto di vista del MT)\n" #: options.h:3152 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-formdata $data - usato per specificare i campi di un modulo HTML, per\n" "\t i moduli HTML trovati durante l'attraversamento " "dell'\n" "\t albero del documento. Solo i moduli citati in questa\n" "\t opzione saranno elaborati automaticamente.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (per altre informazioni guarda la pagina man)\n" #: options.h:3170 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" "\t-dumpfd $nr - numero del descrittore di file in cui inviare in " "output\n" "\t il contenuto del documento invece di un file\n" #: options.h:3182 #, fuzzy msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" "\t-dumpfd $nr - numero del descrittore di file in cui inviare in " "output\n" "\t il contenuto del documento invece di un file\n" #: options.h:3194 #, fuzzy msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserva i permessi del documento\n" #: options.h:3217 #, fuzzy msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" "\t-unique_sslid/-nounique_sslid\n" "\t - usa un ID SSL univoco per ogni sessione\n" #: options.h:3240 #, fuzzy msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" "\t-dont_leave_dir/-leave_dir\n" "\t - non/abbandonare la directory con l'URL di partenza\n" #: options.h:3263 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" #: options.h:3286 #, fuzzy msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - riusa un'autorizzazione Digest per accesso\n" "\t HTTP in caso di altre richieste\n" #: options.h:3311 #, fuzzy msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - riusa un'autorizzazione Digest per accesso\n" "\t HTTP in caso di altre richieste\n" #: options.h:3338 #, fuzzy msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - nome utente per l'autorizzazione HTTP proxy\n" #: options.h:3354 #, fuzzy msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - nome utente per l'autorizzazione HTTP proxy\n" #: options.h:3370 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" #: options.h:3383 #, fuzzy msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" "\t-dumpfd $nr - numero del descrittore di file in cui inviare in " "output\n" "\t il contenuto del documento invece di un file\n" #: options.h:3395 #, fuzzy msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserva i collegamenti simbolici assoluti\n" #: options.h:3421 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" #: options.h:3441 msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" #: options.h:3459 #, fuzzy msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" "\t-http_proxy_user $str\n" "\t - nome utente per l'autorizzazione HTTP proxy\n" #: options.h:3471 #, fuzzy msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - password per l'autorizzazione HTTP proxy\n" #: options.h:3483 msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" #: options.h:3506 #, fuzzy msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - usa la richiesta CONNECT al proxy HTTP per\n" "\t le connessioni FTP\n" #: options.h:3519 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" #: options.h:3544 #, fuzzy msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - rimuovi file o directory irregolari quando lanciato " "in\n" "\t modalità sincronizzata\n" #: options.h:3568 #, fuzzy msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" "\t-scndir $dir - directory, dove sono memorizzati i tuoi scenari\n" "\t (file di configurazione)\n" #: options.h:3583 #, fuzzy msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "" "\t-nscache_dir $dir - percorso della directory della cache del browser " "Netscape\n" #: options.h:3595 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3607 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3619 #, fuzzy msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - confronta la dimensione del file ricevuto con\n" "\t quella fornita dal server remoto\n" #: options.h:3643 #, fuzzy msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - usa la richiesta CONNECT al proxy HTTP per\n" "\t le connessioni FTP\n" #: options.h:3659 #, fuzzy msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - file di certificazione SSL\n" #: options.h:3672 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" #: pavuk.c:106 msgid "QUIT signal catched\n" msgstr "Intercettato segnale QUIT\n" #: pavuk.c:259 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "Numero di parametri insufficiente \"-msgcat\"\n" #: pavuk.c:273 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "Numero di parametri insufficiente \"-scenario\"\n" #: pavuk.c:303 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "Errore: Fornito un descrittore di file errato nell'opzione -dumpfd\n" #: pavuk.c:314 #, fuzzy msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "Errore: Fornito un descrittore di file errato nell'opzione -dumpfd\n" #: pavuk.c:366 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "" "ATTENZIONE: scndir non specificata - salvataggio nella directory corrente\n" #: pavuk.c:403 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "Impossibile spostare pavuk sullo sfondo - esecuzione in primo piano\n" #: pavuk.c:407 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "Pavuk sarà eseguito in backround con PID %d\n" #: pavuk.c:427 #, c-format msgid "reading URLs from file - %s\n" msgstr "lettura delle URL dal file - %s\n" #: recurse.c:82 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "Ripianificazione dell'URL bloccata N° %d\n" #: recurse.c:95 msgid "Running post-processing command\n" msgstr "Avvio comando di post-elaborazione\n" #: recurse.c:243 #, c-format msgid "retry no. %d\n" msgstr "tentativo N° %d\n" #: recurse.c:246 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "URL[%2d]: %5d(%d) di %5d %s\n" #: recurse.c:249 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "URL: %5d(%d) di %5d %s\n" #: recurse.c:260 recurse.c:394 msgid "Starting download" msgstr "Inizio scaricamento" #: recurse.c:284 msgid "Already processed\n" msgstr "Già elaborato\n" #: recurse.c:291 msgid "Disallowed by user\n" msgstr "Vietato dall'utente\n" #: recurse.c:305 msgid "Disallowed by rules\n" msgstr "Vietato dalle regole\n" #: recurse.c:312 msgid "Checking \"robots.txt\"" msgstr "Controllo \"robots.txt\"" #: recurse.c:316 msgid "Disallowed by \"robots.txt\"\n" msgstr "Vietato da \"robots.txt\"\n" #: recurse.c:326 msgid "This URL type is not supported with ftpdir mode\n" msgstr "Questo tipo di URL non è gestito con la modalità ftpdir\n" #: recurse.c:346 msgid "No transfer - file not expired\n" msgstr "Nessun trasferimento - file non scaduto\n" #: recurse.c:362 #, c-format msgid "Starting time : %s\n" msgstr "Tempo di inizio : %s\n" #: recurse.c:404 recurse.c:563 #, c-format msgid "Ending time : %s\n" msgstr "Tempo di conclusione : %s\n" #: recurse.c:411 recurse.c:566 msgid "download" msgstr "scaricamento" #: recurse.c:511 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "ultimo documento bloccato -> pausa di 5 secondi\n" #: recurse.c:577 #, fuzzy msgid "Relocating and scanning HTML document" msgstr "Spostamento dei documenti HTML" #: recurse.c:629 #, fuzzy msgid "Dumping processed document" msgstr "non ancora elaborato\n" #: recurse.c:649 msgid "Storing document" msgstr "Memorizzazione del documento" #: recurse.c:655 msgid "Store failed\n" msgstr "Memorizzazione fallita\n" #: recurse.c:762 recurse.c:845 msgid "Done" msgstr "Fatto" #: recurse.c:922 remind.c:379 msgid "Sleeping ..." msgstr "Pausa ..." #: recurse.c:936 remind.c:396 msgid "Exiting ..." msgstr "Uscita ..." #: recurse.c:1048 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d byte)\n" #: recurse.c:1106 msgid "Searching for files to resume" msgstr "Ricerca dei file da riprendere" #: recurse.c:1133 #, c-format msgid "Adding %s to resume list\n" msgstr "Aggiunta di %s all'elenco di ripresa\n" #: recurse.c:1165 msgid "Searching for documents to synchronize" msgstr "Ricerca dei documenti da sincronizzare" #: recurse.c:1220 recurse.c:1245 #, fuzzy, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "Aggiunta di %s all'elenco di sincronizzazione\n" #: remind.c:45 #, c-format msgid "Checking: %s\n" msgstr "Controllo: %s\n" #: remind.c:170 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "Registrazione errata nel db del promemoria - %s\n" #: remind.c:529 msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "Questo è il risultato dell'esecuzione di pavuk in modalità reminder " "(promemoria)\n" "\n" #: remind.c:540 msgid "Changed URLs\n" msgstr "URL cambiata\n" #: remind.c:561 msgid "URLs with some errors\n" msgstr "URL con alcuni errori\n" #: robots.c:166 msgid "transfering \"robots.txt\"" msgstr "trasferimento di \"robots.txt\"" #: robots.c:169 msgid "transfering \"robots.txt\"\n" msgstr "trasferimento di \"robots.txt\"\n" #: robots.c:230 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "Hmm: ridirezione di \"robots.txt\" a %s ???\n" #: stats.c:138 stats.c:221 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "Numero totale di URL in coda: %d\n" #: stats.c:139 stats.c:223 #, c-format msgid "Starting urls: %d\n" msgstr "URL di partenza: %d\n" #: stats.c:142 stats.c:228 msgid "Not processed yet: %d (%3d%%)\n" msgstr "Non ancora elaborato: %d (%3d%%)\n" #: stats.c:147 stats.c:235 msgid "Processed OK: %d (%3d%%)\n" msgstr "Elaborazione OK: %d (%3d%%)\n" #: stats.c:150 stats.c:241 msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "Caricato dall'albero locale: %d (%3d%%)\n" #: stats.c:153 stats.c:247 msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "Caricato dalla directory cache del browser Netscape: %d (%3d%%)\n" #: stats.c:156 stats.c:253 msgid "Downloaded over network: %d (%3d%%)\n" msgstr "Scaricamenti su rete: %d (%3d%%)\n" #: stats.c:159 stats.c:259 msgid "Moved to another location: %d (%3d%%)\n" msgstr "Spostato in un'altra posizione: %d (%3d%%)\n" #: stats.c:163 stats.c:265 msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "Scaricamenti interrotti: %d (%3d%%)\n" #: stats.c:169 stats.c:272 msgid "Non fatal errors: %d (%3d%%)\n" msgstr "Errori non fatali: %d (%3d%%)\n" #: stats.c:175 stats.c:279 msgid "Not found documents: %d (%3d%%)\n" msgstr "Documento non trovati: %d (%3d%%)\n" #: stats.c:181 stats.c:286 msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "Documenti con errori fatali: %d (%3d%%)\n" #: stats.c:187 msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "Documenti con stato sconosciuto: %d (%3d%%)\n" #: stats.c:293 msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "Documenti con stato non specificato: %d (%3d%%)\n" #: stats.c:358 msgid "Pavuk: save status page" msgstr "Pavuk: salva la pagina di stato" #: stats.c:379 stats.c:537 msgid "Not available yet" msgstr "Non ancora disponibile" #: stats.c:462 msgid "Pavuk: status page" msgstr "Pavuk: pagina di stato" #: stats.c:479 msgid "Status page" msgstr "Pagina di stato" #: stats.c:492 msgid "Save ..." msgstr "Salva..." #: stats.c:499 msgid "Refresh" msgstr "Aggiorna" #: stats.c:526 msgid "Try download" msgstr "Prova il download" #: tools.c:109 msgid "no error" msgstr "nessun errore" #: tools.c:114 msgid "host not found" msgstr "host non trovato" #: tools.c:119 msgid "temporary error (try again later)" msgstr "errore temporaneo (riprova più tardi)" #: tools.c:124 msgid "non recoverable error" msgstr "errore non recuperabile" #: tools.c:129 msgid "name is valid, but doesn't have an IP address" msgstr "il nome è valido, ma non ha un indirizzo IP" #: tools.c:133 msgid "unknown hostname translation error" msgstr "errore sconosciuto di traduzione del nome dell'host" #: tools.c:315 tools.c:330 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "attesa per il rilascio del blocco sul FD : %d\n" #: uconfig.c:998 msgid "Bad parameter - Working subdirectory" msgstr "Parametro errato - Subdirectory di lavoro" #: uconfig.c:1178 msgid "Bad parameter - Cache directory" msgstr "Parametro errato - Cache directory" #: uexit.c:30 msgid "Error occured while executing user-exit script" msgstr "Errore insorto durante l'esecuzione dello script in uscita dell'utente" #: update_links.c:40 #, c-format msgid "Entering directory %s\n" msgstr "Ingresso directory %s\n" #: update_links.c:69 #, c-format msgid "Relocating %s\n" msgstr "Trasferimento %s\n" #: update_links.c:72 #, c-format msgid "Omitting %s\n" msgstr "Tralascio %s\n" #: update_links.c:86 #, c-format msgid "Leaving directory %s\n" msgstr "Abbandono directory %s\n" #: update_links.c:104 #, c-format msgid "Can't open directory %s\n" msgstr "Impossibile aprire la directory %s\n" #: url.c:1000 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "tipo di URL non gestito \"%s\"\n" #: url.c:1152 msgid "Moved to already processed URL.\n" msgstr "Spostato ad un'URL già elaborata.\n" #: url.c:2767 #, fuzzy msgid "Missing specification of URL in request\n" msgstr "Specifica mancante dei campi di richiesta per la richiesta POST\n" #: url.c:2776 msgid "Missing request fields specification for POST request\n" msgstr "Specifica mancante dei campi di richiesta per la richiesta POST\n" #: url.c:2784 msgid "Multipart encoding not supported with GET requests\n" msgstr "Codifica Multipart gestita con le richieste GET\n" pavuk-0.9.35/po/pl.po0000644000175000001440000035130410251617051011250 00000000000000# Polish translation # Copyright (C) 2001 Free Software Foundation, Inc. # Przemys³aw Su³ek , 2001. # msgid "" msgstr "" "Project-Id-Version: 0.96\n" "POT-Creation-Date: 2001-09-18 22:21+0200\n" "PO-Revision-Date: 2001-08-08 15:30+0200\n" "Last-Translator: Przemys³aw Su³ek \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: abstract.c:42 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "Wstrzymanie pobierania na %d sekund.\n" #: abstract.c:80 doc.c:547 msgid "File redirect\n" msgstr "Przekierowanie pliku\n" #: abstract.c:116 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "Czytanie kopii z lokalnego cache NS - %s\n" #: abstract.c:148 #, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "Czytanie kopii z lokalnego cache MSIE - %s\n" #: abstract.c:181 #, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "Czytanie kopii z lokalnego cache MSIE - %s\n" #: abstract.c:217 msgid "Unsupported URL\n" msgstr "Nieobs³ugiwany URL\n" #: abstract.c:312 msgid "Warning: broken ftp transfer ...\n" msgstr "Uwaga: przerwana transmisja ftp ...\n" #: abstract.c:322 msgid "Error removing FTP document from remote server\n" msgstr "" #: abstract.c:384 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "B³±d czytania dokumentu z kodowaniem transmisji \"chunked\"\n" #: ainterface.c:120 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "Usuwanie nieobs³ugiwanego URL: %s\n" #: ainterface.c:209 msgid "Specify at least one starting URL!" msgstr "Okre¶l co najmniej jeden pocz±tkowy URL!" #: ainterface.c:211 msgid "Specify at least one starting URL!\n" msgstr "Okre¶l co najmniej jeden pocz±tkowy URL!\n" #: ainterface.c:477 msgid "Can't list available message catalogs\n" msgstr "Nie mo¿na wylistowaæ dostêpnych katalogów wiadomo¶ci\n" #: authinfo.c:107 msgid "Bad section - specify protocol\n" msgstr "B³êdna sekcja - okre¶l protokó³\n" #: authinfo.c:112 msgid "Bad section - specify hostname\n" msgstr "B³êdna sekcja - okre¶l nazwê hosta\n" #: authinfo.c:162 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "Nie mo¿na przetworzyæ :\"%s\"\n" #: authinfo.c:182 #, c-format msgid "Bad protocol - %s\n" msgstr "Z³y protokó³ - %s\n" #: authinfo.c:194 #, c-format msgid "Bad port number %s\n" msgstr "Z³y numer portu %s\n" #: authinfo.c:215 #, c-format msgid "Unknown auth type - %s\n" msgstr "Nieznany typ uwierzytelniania - %s\n" #: cleanup.c:65 msgid "press any key to exit\n" msgstr "naci¶nij dowolny klawisz by wyj¶æ\n" #: cmdparse.c:129 #, c-format msgid "Error parsing commandline at: %s\n" msgstr "B³±d przetwarzania linii poleceñ przy: %s\n" #: cmdparse.c:186 #, c-format msgid "Unable to parse commandline: %s\n" msgstr "Nie mo¿na przetworzyæ linii poleceñ: %s\n" #: config.c:45 msgid "Level order" msgstr "Kolejno¶æ poziomów" #: config.c:46 msgid "Level order, inline first" msgstr "Kolejno¶æ poziomów, pierwsze inline" #: config.c:47 msgid "Pre order" msgstr "" #: config.c:48 msgid "Pre order, inline first" msgstr "" #: config.c:116 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "U¿ycie: %s [opcje] [jaka¶ liczba URLi]\n" "pavuk-%s %s\n" #: config.c:132 #, c-format msgid "Type \"%s --help\" for long help\n" msgstr "Napisz \"%s --help\" by otrzymaæ wiêcej pomocy\n" #: config.c:140 msgid "Optional features available :\n" msgstr "Dostêpne dodatkowe w³a¶ciwo¶ci :\n" #: config.c:142 msgid " - Debug mode\n" msgstr " - tryb ¶ledzenia\n" #: config.c:146 msgid " - GNU gettext internationalization of messages\n" msgstr "" #: config.c:150 msgid " - flock() document locking\n" msgstr " - flock() blokowanie dokumentu\n" #: config.c:154 msgid " - fcntl() document locking\n" msgstr " - fcntl() blokowanie dokumentu\n" #: config.c:159 msgid " - Gtk GUI interface\n" msgstr " - interfejs graficzny GTK\n" #: config.c:162 msgid " - URL tree preview\n" msgstr " - podgl±d drzewa URL\n" #: config.c:167 msgid " - HTTP and FTP over SSL\n" msgstr "" #: config.c:178 #, c-format msgid " - SSL layer implemented with %s library\n" msgstr "" #: config.c:184 msgid " - Socks v4 proxy support\n" msgstr " - obs³uga proxy Socks v4\n" #: config.c:186 msgid " - Socks v5 proxy support\n" msgstr " - obs³uga proxy Socks v5\n" #: config.c:190 msgid " - with filesystem free space checking\n" msgstr " - ze sprawdzaniem wolnego miejsca na dysku\n" #: config.c:194 msgid " - with optional regex patterns in -fnrules and -*rpattern options\n" msgstr "" #: config.c:198 msgid " - with POSIX regexp\n" msgstr "" #: config.c:202 msgid " - with Bell V8 regexp\n" msgstr "" #: config.c:206 msgid " - with BSD regexp\n" msgstr "" #: config.c:210 msgid " - with GNU regexp\n" msgstr "" #: config.c:214 msgid " - with PCRE regexp\n" msgstr "" #: config.c:218 msgid " - with support for loading files from Netscape browser cache\n" msgstr " - z obs³ug± czytania plików z cache Netscape\n" #: config.c:222 msgid "" " - with support for detecting whether pavuk is running as background job\n" msgstr " - z obs³ug± wykrywania czy pavuk jest uruchomiony w tle\n" #: config.c:226 msgid " - with multithreading support\n" msgstr " - z obs³ug± wielow±tkowo¶ci\n" #: config.c:230 msgid " - with NTLM authorization support\n" msgstr " - z obs³ug± uwierzytelniania NTLM\n" #: config.c:234 msgid " - with JavaScript bindings\n" msgstr "" #: config.c:238 #, fuzzy msgid " - with IPv6 support\n" msgstr " - z obs³ug± wielow±tkowo¶ci\n" #: config.c:312 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "Tag nie obs³ugiwany : %s.%s\n" #: config.c:691 msgid "Error parsing commandline\n" msgstr "B³±d przetwarzania linii poleceñ\n" #: config.c:698 #, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "Niewystarczaj±ca ilo¶æ parametrów dla ocji \"%s\"\n" #: config.c:705 #, c-format msgid "Unknown option %s\n" msgstr "Nieznana opcja %s\n" #: config.c:712 #, c-format msgid "Wrong format of option %s\n" msgstr "Niepoprawny format opcji %s\n" #: config.c:721 #, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "UWAGA: w bie¿±cej konfiguracji opcja \"%s\" nie jest obs³ugiwana!\n" #: config.c:734 #, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "Okre¶l liczbê z parametrem \"%s\"\n" #: config.c:799 config.c:1164 http_proxy.c:123 #, c-format msgid "Unknown port \"%s\"\n" msgstr "Nieznany port \"%s\"\n" #: config.c:815 config.c:1177 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "Z³y schemat uwierzytelniania \"%s\"\n" #: config.c:825 config.c:1187 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "Nieznany tryb operacji \"%s\"\n" #: config.c:847 #, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "Okre¶l liczbê float z parametrem \"%s\"\n" #: config.c:866 #, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "Okre¶l w³a¶ciwy typ warunku dla %s (%s)\n" #: config.c:889 #, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "Okre¶l poprawny RE z parametrem \"%s\"\n" #: config.c:900 config.c:1299 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "Nieznana strategia URL scheduling - \"%s\"\n" #: config.c:908 config.c:1310 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "Nieznana wersja SSL - \"%s\"\n" #: config.c:917 config.c:1321 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "Niepoprawny dodatkowy nag³ówek HTTP - \"%s\"\n" #: config.c:940 config.c:1344 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "Niepoprawne okre¶lenie ¿±dania - \"%s\"\n" #: config.c:985 #, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "Niepoprawne parametry dla opcji \"%s\"\n" #: config.c:1001 #, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "Niepoprawny numer listy \"%s\" dla opcji \"-%s\"\n" #: config.c:1018 #, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "Niepoprawny ³añcuch \"%s\" uzgadniania loginu FTP dla opcji \"-%s\"\n" #: config.c:1080 #, c-format msgid "WARNING: option \"%s\" not supported in current configuration!\n" msgstr "UWAGA: w bie¿±cej konfiguracji opcja \"%s\" nie jest obs³ugiwana!\n" #: config.c:1106 #, c-format msgid "Please specify number \"%s\"\n" msgstr "Okre¶l liczbê \"%s\"\n" #: config.c:1124 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "Dupuszczalne jedynie \"true\" lub \"false\" : \"%s\"\n" #: config.c:1198 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "Z³y parametr czasu \"%s\"\n" #: config.c:1229 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "Okre¶l liczbê float \"%s\"\n" #: config.c:1246 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "Okre¶l w³a¶ciwy argument dla %s\n" #: config.c:1258 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "Okre¶l w³a¶ciwy typ warunku dla %s (%s)\n" #: config.c:1286 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "Okre¶l poprawny RE \"%s\"\n" #: config.c:1378 #, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "Niepoprawne okre¶lenie js_transform - \"%s\"\n" #: config.c:1398 #, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "Niepoprawne okre¶lenie ¿±dania - \"%s\"\n" #: config.c:1413 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "Niepoprawny ³añcuch \"%s\" uzgadniania loginu FTP\n" #: config.c:1459 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "Nie mo¿na przetworzyæ \"%s\"\n" #: config.c:1501 #, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "B£¡D: B³êdny odczyt scenariusza (%s)\n" #: cookie.c:212 #, c-format msgid "Unable to parse : %s\n" msgstr "Nie mo¿na przetowzyæ : %s\n" #: cookie.c:385 msgid "Updating cookie file\n" msgstr "Uaktualnianie pliku ciasteczek\n" #: cookie.c:414 msgid "Cookie file has changed - > synchronizing\n" msgstr "Plik ciasteczek zmieniony - > synchronizowanie\n" #: cookie.c:563 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "Serwer %s próbuje ustawiæ ciasteczko dla domeny %s\n" #: cookie.c:574 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "Usuwanie ciasteczka z wy³±czonej domeny %s\n" #: debugl.c:16 msgid "HTML parsers" msgstr "Parsery HTML" #: debugl.c:17 msgid "Server responses" msgstr "Odpowiedzi serwera" #: debugl.c:18 msgid "Client requests" msgstr "¯±dania klienta" #: debugl.c:19 msgid "Procedure calling" msgstr "Wywo³ywanie procedury" #: debugl.c:20 msgid "File locking" msgstr "Blokowanie pliku" #: debugl.c:21 msgid "Networking code" msgstr "Kodowanie sieci" #: debugl.c:22 msgid "Miscelanous" msgstr "Ró¿ne" #: debugl.c:23 msgid "Extended user infos" msgstr "Rozszerzone informacje u¿ytkownika" #: debugl.c:24 msgid "Multithreading - locking" msgstr "Wielow±tkowanie - blokowanie" #: debugl.c:25 msgid "Multithreading - threads" msgstr "Wielow±tkowanie - w±tki" #: debugl.c:26 msgid "POST request data" msgstr "¯±danie danych POST" #: debugl.c:27 msgid "Limiting conditions" msgstr "Warunki ograniczania" #: debugl.c:28 msgid "SSL informations" msgstr "" #: debugl.c:67 #, c-format msgid "Bad debug level selection : %s\n" msgstr "Z³y wybór poziomu ¶ledzenia :%s\n" #: decode.c:185 msgid "decode" msgstr "dekoduj" #: digest_auth.c:156 msgid "Trying to do HTTP Digest authorization\n" msgstr "Próba uwierzytelnienia HTTP Digest\n" #: digest_auth.c:203 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "Próba uwierzytelnienia proxy HTTP Digest\n" #: dinfo.c:368 dinfo.c:387 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr "B³±d przetwarzania pola pliku .pavuk_info: %s\n" #: doc.c:294 msgid "Transfering data" msgstr "Trasmisja danych" #: doc.c:309 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt: b³±d SO_RCVBUF" #: doc.c:330 msgid "storing document" msgstr "zapamiêtywanie dokumentu" #: doc.c:396 msgid "Document transfer data" msgstr "Wykonano transmisjê danych" #: doc.c:417 msgid "Data transfer done" msgstr "Wykonano transmisjê danych" #: doc.c:594 #, c-format msgid "Trying to resume from position %d \n" msgstr "Próba przywrócenia od pozycji %d \n" #: doc.c:659 msgid "Opening connection" msgstr "Otwieranie po³±czenia" #: doc.c:683 msgid "Loading local copy\n" msgstr "Czytanie kopii lokalnej\n" #: doc.c:909 msgid "File may be truncated\n" msgstr "Plik mo¿e byæ obciêty\n" #: doc.c:933 msgid "Decoding document - OK\n" msgstr "Dekodowanie dokumentu - OK\n" #: doc.c:936 msgid "Decoding document - failed\n" msgstr "Dekodowanie dokumentu - b³±d\n" #: doc.c:939 msgid "Unsupported document encoding\n" msgstr "Nieobs³ugiwane kodowanie dokumentu\n" #: doc.c:943 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "Odebrano kodowany dokument ale nie mo¿na odkodowaæ (nietkniêty)\n" #: doc.c:1113 #, c-format msgid "Removing improper document : %s\n" msgstr "Usuwanie niepoprawnego dokumentu : %s\n" #: doc.c:1175 doc.c:1241 msgid "Local file" msgstr "Plik lokalny" #: doc.c:1181 msgid "Gopher/Text File" msgstr "Gopher/Plik tekstowy" #: doc.c:1184 msgid "Gopher/Directory" msgstr "Gopher/Katalog" #: doc.c:1187 msgid "Gopher/CSO phone book" msgstr "Gopher/ksi±¿ka telefoniczna CSO" #: doc.c:1190 msgid "Gopher/Error" msgstr "Gopher/B³±d" #: doc.c:1193 msgid "Gopher/BINHEX" msgstr "Gopher/BINHEX" #: doc.c:1196 msgid "Gopher/DOS bin" msgstr "Gopher/DOS bin" #: doc.c:1199 msgid "Gopher/UUencoded" msgstr "Gopher/UUencoded" #: doc.c:1202 msgid "Gopher/Search index" msgstr "Gopher/Indeks wyszukiwania" #: doc.c:1205 msgid "Gopher/Telnet session" msgstr "Gopher/Sesja telnet" #: doc.c:1208 msgid "Gopher/bin" msgstr "Gopher/bin" #: doc.c:1211 msgid "Gopher/Duplicated server" msgstr "Gopher/Zduplikowany serwer" #: doc.c:1214 msgid "Gopher/TN3270" msgstr "Gopher/TN3270" #: doc.c:1217 msgid "Gopher/GIF" msgstr "Gopher/GIF" #: doc.c:1220 msgid "Gopher/Image" msgstr "Gopher/Obraz" #: doc.c:1226 msgid "FTP/Directory" msgstr "FTP/Katalog" #: doc.c:1228 msgid "FTP/File" msgstr "FTP/Plik" #: doc.c:1232 msgid "FTPS/Directory" msgstr "FTPS/Katalog" #: doc.c:1234 msgid "FTPS/File" msgstr "FTPS/Plik" #: doc.c:1237 msgid "Unsupported type" msgstr "Nieobs³ugiwany typ" #: doc.c:1438 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s] \r" msgstr "S: %s [R: %s] [ET: %s] [RT: %s] \r" #: doc.c:1441 #, c-format msgid "S: %s [R: %s] [ET: %s] \r" msgstr "S: %s [R: %s] [ET: %s] \r" #: doc.c:1481 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "Oczekiwanie na zwolnienie blokady dokumentu : %s\n" #: doc.c:1721 msgid "Rewriting links inside parent documents" msgstr "Przepisywanie dowi±zañ wewn±trz g³ównego dokumentu" #: errcode.c:21 #, c-format msgid "%s: user break\n" msgstr "%s: przerwanie u¿ytkownika\n" #: errcode.c:28 #, c-format msgid "%s: OK\n" msgstr "%s: OK\n" #: errcode.c:31 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s: B£¡D: zapamiêtywanie dokumentu\n" #: errcode.c:34 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s: B£¡D: otwieranie pliku\n" #: errcode.c:37 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "%s: B£¡D: nieobs³ugiwane URL wskazuj±ce na lokalny katalog\n" #: errcode.c:40 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s: B£¡D: nieznany\n" #: errcode.c:43 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s: B£¡D: dokument jest zablokowany\n" #: errcode.c:46 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s: B£¡D: czytanie gniazdka\n" #: errcode.c:49 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s: WIADOMO¦Æ: wiêkszy ni¿ maksymalna dopuszczalna wielko¶æ\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "%s: WIADOMO¦Æ: wy³±czone poprzez warunek skryptu wyj¶cia u¿ytkownika\n" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s: WIADOMO¦Æ: mniejszy ni¿ minimalna dopuszczalna wielko¶æ\n" #: errcode.c:58 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s: WIADOMO¦Æ: ten typ MIME nie jest dopuszczalny (%s)\n" #: errcode.c:61 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s: B£¡D: b³±d przy po³±czeniu proxy\n" #: errcode.c:64 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s: B£¡D: transmisja przerwana przez u¿ytkownika\n" #: errcode.c:67 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "" "%s: WIADOMO¦Æ: czas modyfikacji pliku nie mie¶ci siê w okre¶lonym przedziale " "czasowym\n" #: errcode.c:70 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s: B£¡D: plik ma wielko¶æ zero - mo¿liwy b³±d\n" #: errcode.c:73 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s: WIADOMO¦Æ: dokument ju¿ zosta³ przetworzony\n" #: errcode.c:76 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s: WIADOMO¦Æ: dokument wy³±czony przez u¿ytkownika\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "%s: WIADOMO¦Æ: dokument wy³±czony przez regu³y ograniczaj±ce\n" #: errcode.c:82 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "%s: UWAGA: prêdko¶æ transmisji mniejsza ni¿ najni¿sza dopuszczalna\n" #: errcode.c:85 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "" "%s: UWAGA: przekroczono ograniczenie wielko¶ci pliku, reszta bêdzie obciêta\n" #: errcode.c:88 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "" "%s: UWAGA: przekroczono ograniczenie transmisji, przerwanie pobierania\n" #: errcode.c:91 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "%s: B£¡D: ma³a ilo¶æ miejsca na dysku, przerwanie transmisji\n" #: errcode.c:94 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "" "%s: UWAGA: przekroczono maksymalny dopuszczalny czas uruchomienia, " "pobieranie zostanie przerwane\n" #: errcode.c:97 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s: B£¡D: nieznany b³±d FTP\n" #: errcode.c:100 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s: B£¡D: serwer ftp nie obs³uguje polecenia REST\n" #: errcode.c:104 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s: B£¡D: nie mo¿na wylistowaæ zawarto¶ci katalogu\n" #: errcode.c:107 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s: B£¡D: nie mo¿na po³±czyæ siê z serwerem FTP\n" #: errcode.c:110 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s: B£¡D: uwierzytelnianie FTP - z³a nazwa u¿ytkownika\n" #: errcode.c:113 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s: B£¡D: uwierzytelnianie FTP - z³e has³o\n" #: errcode.c:116 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "%s: B£¡D: uwierzytelnianie proxy FTP - z³a nazwa u¿ytkownika\n" #: errcode.c:119 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s: B£¡D: uwierzytelnianie proxy FTP - z³e has³o\n" #: errcode.c:122 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s: B£¡D: nie mo¿na otworzyæ po³±czenia danych FTP\n" #: errcode.c:125 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s: B£¡D: nie mo¿na pobraæ pliku z serwera FTP\n" #: errcode.c:128 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s: B£¡D: serwer FTP nie obs³uguje polecenia MDTM\n" #: errcode.c:131 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s: B£¡D: plik z serwera FTP jest obciêty\n" #: errcode.c:135 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s: WIADOMO¦Æ: niepotrzebne ponowne pobieranie - plik jest aktualny\n" #: errcode.c:138 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s: WIADOMO¦Æ: transmisja FTP niedopuszczalna ze wzglêdu na regu³y\n" #: errcode.c:141 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "%s: UWAGA: URL katalog FTP, a niedopuszczalne katalogi FTP (-FTPdir)\n" #: errcode.c:144 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "%s: UWAGA: b³±d uzgadniania loginu FTP\n" #: errcode.c:147 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s: B£¡D: nieznany b³±d HTTP\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s: B£¡D: nie mo¿na po³±czyæ siê z serwerem HTTP\n" #: errcode.c:153 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "" "%s: B£¡D: serwer HTTP nie obs³uguje czê¶ciowego odbierania zawarto¶ci\n" #: errcode.c:156 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "%s: B£¡D: przerwane wysy³anie ¿±dania HTTP\n" #: errcode.c:159 #, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%s: B£¡D: b³±d odczytu odpowiedzi HTTP\n" #: errcode.c:162 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "" "%s: B£¡D: nieoczekiwany kod odpowiedzi HTTP przy próbie ponownego " "pobierania\n" #: errcode.c:166 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "%s: B£¡D: nie mo¿na wys³aæ danych ¿±dania HTTP\n" #: errcode.c:169 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s: WIADOMO¦Æ: przekierowanie do innego miejsca\n" #: errcode.c:172 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s: B£¡D: dokument HTTP jest obciêty\n" #: errcode.c:175 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s: B£¡D: cykliczne przekierowanie!\n" #: errcode.c:178 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s: B£¡D: przekierowanie do nieobs³ugiwanego URL\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s: B£¡D: nie mo¿na po³±czyæ siê z serwerm proxy\n" #: errcode.c:184 #, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "%s: B£¡D: odebrano z serwera odpowied¼ b³êdnego przekierowania\n" #: errcode.c:187 #, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "%s: B£¡D: nie mo¿na dokonaæ uwierzytelnienia NTLM\n" #: errcode.c:190 #, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "%s: B£¡D: nie mo¿na dokonaæ uwierzytelnienia HTTP Digest\n" #: errcode.c:193 #, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "%s: B£¡D: nie mo¿na dokonaæ uwierzytelnienia NTLM proxy\n" #: errcode.c:196 #, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "%s: B£¡D: nie mo¿na dokonaæ uwierzytelnienia proxy HTTP Digest\n" #: errcode.c:199 #, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s: B£¡D: klient HTTP wysy³± b³êdne ¿±danie\n" #: errcode.c:202 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s: B£¡D: wymagane jest uwierzytelnienie HTTP\n" #: errcode.c:205 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s: B£¡D: wymagane jest uwierzytelnienie HTTP proxy\n" #: errcode.c:208 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "%s: B£¡D: wymagane op³acenie HTTP\n" #: errcode.c:211 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "%s: B£¡D: ¿±danie zabronionego HTTP\n" #: errcode.c:214 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s: B£¡D: nie znaleziono dokumentu HTTP\n" #: errcode.c:217 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s: B£¡D: b³±d zdalnego serwera HTTP\n" #: errcode.c:220 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "" "%s: B£¡D: serwer HTTP da³ odpowied¼ o przekroczonym czasie oczekiwania\n" #: errcode.c:223 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "%s: B£¡D: serwer HTTP da³ odpowied¼ o konflikcie\n" #: errcode.c:226 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s: B£¡D: dokument zosta³ usuniêty z serwera HTTP\n" #: errcode.c:229 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "%s: B£¡D: muszisz u¿yæ proxy by uzyskaæ dostêp do tego URL\n" #: errcode.c:232 #, c-format msgid "%s: ERROR: 306\n" msgstr "%s: B£¡D: 306\n" #: errcode.c:235 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" "%s: B£¡D: u¿yta metoda HTTP nie jesy dopuszczalna lub obs³ugiwana przez ten " "URL\n" #: errcode.c:238 #, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "%s: B£¡D: klient nie akceptuje typu MIME ¿±danego URL\n" #: errcode.c:241 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "%s: B£¡D: w nag³ówku ¿±dania zgubiono nag³ówek Content-Lenght\n" #: errcode.c:244 #, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "%s: B£¡D: dla ¿±danego URL b³±d w ¿±daniu preconditions\n" #: errcode.c:247 #, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s: B£¡D: ¿±danie cia³a za du¿e\n" #: errcode.c:250 #, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s: B£¡D: ¿±danie URL za d³ugie\n" #: errcode.c:253 #, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "%s: B£¡D: zasób w nieobs³ugimanym dla tego ¿±dania formacie\n" #: errcode.c:256 #, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s: B£¡D: ¿±dano z³ego zakresu dokumentu\n" #: errcode.c:259 #, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "%s: B£¡D: b³±d spe³nienia oczekiwania ¿±dania\n" #: errcode.c:262 #, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "" "%s: B£¡D: ¿±dana metoda HTTP nie jest zaimplementowana po stronie serwera\n" #: errcode.c:265 #, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s: B£¡D: b³±d przechodzenia przez bramkê dla tego URL\n" #: errcode.c:268 #, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "%s: B£¡D: serwis HTTP nie jest aktualnie dostêpny, sprawd¼ pó¼niej\n" #: errcode.c:271 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "" "%s: B£¡D: przekroczono czas podczas komunikacji pomiêdzy bramk± a zdalnym " "serwerem\n" #: errcode.c:274 #, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "" "%s: B£¡D: wersja HTTP u¿yta w ¿±daniu nie jest obs³ugiwana przez zdalny " "serwer\n" #: errcode.c:277 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s: B£¡D: nie mo¿na po³±czyæ siê z serwerem GOPHER\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%s: B£¡D: nieznany b³±d GOPHER\n" #: errcode.c:283 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s: B£¡D: nie mo¿na po³±czyæ siê z serwerem HTTPS\n" #: errcode.c:286 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "" "%s: B£¡D: nie mo¿na ustanowiæ po³±czenia kontrolnego SSL z serwerem FTPS\n" #: errcode.c:289 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s: B£¡D: ten serwer FTP nie obs³uguje po³±czeñ SSL\n" #: errcode.c:292 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "%s: B£¡D: nie mo¿na ustanowiæ po³±czenia danych SSL z serwerem FTPS\n" #: errcode.c:295 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s: B£¡D: nieznany kod b³êdu : %d\n" #: file.c:31 msgid "Can't open directory\n" msgstr "Nie mo¿na otworzyæ katalogu\n" #: form.c:1082 form.c:1145 form.c:1300 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "Nieobs³ugiwany typ formularza w kontek¶cie: %d\n" #: form.c:1399 msgid "Browse" msgstr "Przegl±daj" #: form.c:1412 msgid "URLs with forms" msgstr "URLe z formularzami" #: form.c:1421 msgid "Refresh URL list" msgstr "Od¶wie¿ listê URL" #: form.c:1455 form.c:1456 url.c:1009 msgid "unknown" msgstr "nieznany" #: form.c:1602 msgid "Pavuk: load form file" msgstr "Pavuk: wczytaj plik formularza" #: form.c:1626 msgid "Fill forms" msgstr "Wype³niaj formularze" #: form.c:1633 msgid "Form number: " msgstr "Numer formularza: " #: form.c:1645 msgid "Action URL: " msgstr "Akcja URL: " #: form.c:1654 gui_common.c:701 msgid "Request method: " msgstr "Metoda ¿±dania: " #: form.c:1663 gui_common.c:720 gui_tree.c:127 msgid "Request encoding: " msgstr "Kodowanie ¿±dania: " #: form.c:1672 msgid "HTML form content" msgstr "Zawarto¶æ formularza HTML" #: form.c:1687 msgid "Load HTML file ..." msgstr "Wczytaj plik HTML ..." #: form.c:1740 msgid "Pavuk: HTML forms editor" msgstr "Pavuk: edytor formularzy HTML" #: form.c:1762 gui_jscons.c:191 msgid "Close" msgstr "Zamknij" #: ftp.c:101 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "" "ftp_get_response: po³±czenie kontrolne ftp zamkniêto przed odpowiedzi±\n" #: ftp.c:172 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "ftp: setsockopt TOS - b³±d TROUGHPUT" #: ftp.c:269 ftp.c:290 ftp.c:329 #, fuzzy, c-format msgid "Error parsing FTP response to %s command - %s\n" msgstr "B³±d przetwarzania linii poleceñ przy: %s\n" #: ftp.c:667 msgid "Re-using established FTP control connection\n" msgstr "Ponowne u¿ycie ustanowionego kontrolnego po³±czenia FTP\n" #: ftp.c:877 http.c:1401 msgid "Size differs, regeting whole\n" msgstr "Ró¿ne wielko¶ci, pobieranie ca³o¶ci\n" #: ftp.c:887 http.c:1283 http.c:1411 msgid "Modified from last download - regeting whole\n" msgstr "" "Zmodyfikowany formularz od czasu ostatniego pobierania - pobieranie ca³o¶ci\n" #: ftp.c:974 msgid "" "Warning: FTP server undertand REST command, but can't handle it properly.\n" msgstr "" #: ftp.c:1221 ftp.c:1549 #, fuzzy, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%hu%s\n" "\n" "\n" "

                                              List of FTP directory %s://%s:%hu/%s


                                                " msgstr "" "\n" "\n" "\n" "Katalog %s://%s:%d%s\n" "\n" "\n" "

                                                Zawarto¶æ katalogu FTP %s://%s:%d/%s


                                                  " #: ftp.c:1620 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" "B£¡D: nie mo¿na przetworzyæ linii listy FTP :\n" "\t%s\n" #: ftp.c:1813 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "Tworzenie dowi±zania symbolicznego \"%s\" do \"%s\"\n" #: gauthinfo.c:107 msgid "Pavuk: Save auth. info file" msgstr "Pavuk: Zapis informacyjnego pliku uwierzytelniania" #: gauthinfo.c:159 msgid "Pavuk: Load auth. info file" msgstr "Pavuk: Odczyt informacyjnego pliku uwierzytelniania" #: gauthinfo.c:340 msgid "Pavuk: Authorization info editor" msgstr "Pavuk: Edytor informacji uwierzytelniania" #: gauthinfo.c:357 msgid "Protocol" msgstr "Protokó³" #: gauthinfo.c:358 gui_common.c:1842 msgid "Host" msgstr "Host" #: gauthinfo.c:359 msgid "User" msgstr "U¿ytkownik" #: gauthinfo.c:360 msgid "Password" msgstr "Has³o" #: gauthinfo.c:361 msgid "Base dir." msgstr "Katalog podstawowy" #: gauthinfo.c:362 msgid "Realm" msgstr "" #: gauthinfo.c:363 msgid "Scheme" msgstr "Schemat" #: gauthinfo.c:388 msgid "Protocol: " msgstr "Protokó³: " #: gauthinfo.c:413 gui_common.c:1858 gui_common.c:1919 gui_common.c:1942 #: gui_common.c:1971 msgid "Host: " msgstr "Host: " #: gauthinfo.c:422 msgid "User: " msgstr "U¿ytkownik: " #: gauthinfo.c:431 gui_common.c:2141 gui_common.c:2191 gui_common.c:2215 msgid "Password: " msgstr "Has³o: " #: gauthinfo.c:440 msgid "Base directory: " msgstr "Katalog podstawowy: " #: gauthinfo.c:449 msgid "Realm: " msgstr "Realm: " #: gauthinfo.c:467 gui_common.c:2085 msgid "User auth. scheme" msgstr "Schamat uwierzytelniania u¿ytkownika" #: gauthinfo.c:472 msgid "Base auth. scheme" msgstr "Podstawowy schemat uwierzytelniania" #: gauthinfo.c:477 gui_common.c:2087 msgid "Digest auth. scheme" msgstr "Schemat uwierzytelniania Digest" #: gauthinfo.c:483 gui_common.c:2089 msgid "NTLM auth. scheme" msgstr "Schemat uwierzytelniania NTLM" #: gauthinfo.c:494 gui_addurl.c:167 gui_common.c:626 gui_common.c:771 #: gui_common.c:948 gui_common.c:1044 gui_common.c:1868 gui_common.c:2664 #: gui_common.c:2910 gui_limits.c:673 gui_tools.c:733 msgid "Append" msgstr "Do³±cz" #: gauthinfo.c:502 gui_common.c:642 gui_common.c:778 gui_common.c:964 #: gui_common.c:1051 gui_common.c:1874 gui_common.c:2670 gui_common.c:2916 #: gui_limits.c:679 gui_tools.c:755 msgid "Modify" msgstr "Zmieñ" #: gauthinfo.c:510 gui_common.c:651 gui_common.c:973 gui_common.c:1880 #: gui_common.c:2676 gui_common.c:2922 gui_limits.c:685 gui_tools.c:768 msgid "Clear" msgstr "Wyczy¶æ" #: gauthinfo.c:518 gui_common.c:660 gui_common.c:785 gui_common.c:982 #: gui_common.c:1058 gui_common.c:1886 gui_common.c:2682 gui_common.c:2928 #: gui_limits.c:691 gui_tools.c:781 msgid "Delete" msgstr "Usuñ" #: gauthinfo.c:531 gui_common.c:3010 gui_limits.c:759 gui_sched.c:121 #: gui_tools.c:277 msgid "OK" msgstr "OK" #: gauthinfo.c:542 gui_common.c:3019 gui_limits.c:768 msgid "Apply" msgstr "Zastosuj" #: gauthinfo.c:550 msgid "Load" msgstr "Wczytaj" #: gauthinfo.c:558 msgid "Save" msgstr "Zapisz" #: gauthinfo.c:569 gui_about.c:76 gui_addurl.c:176 gui_common.c:3035 #: gui_limits.c:784 gui_sched.c:130 gui_tools.c:286 gui_tree.c:608 #: gui_tree.c:723 stats.c:504 msgid "Cancel" msgstr "Anuluj" #: gkeys.c:64 gkeys.c:81 gkeys.c:93 #, c-format msgid "Unable to parse: %s\n" msgstr "Nie mo¿na przetworzyæ: %s\n" #: gkeys.c:115 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "Nie mo¿na utworzyæ pliku ~/.pavuk_keys\n" #: gkeys.c:119 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# Ten plik zosta³ utworzony przez %s\n" "# Mo¿esz go poddaæ edycji je¶li bêdziesz ostro¿ny!\n" "\n" #: gopher.c:66 msgid "********************* Gopher request **************\n" msgstr "********************* ¯±danie Gopher **************\n" #: gopher.c:104 #, fuzzy, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%hu/%s\n" "\n" "\n" "

                                                  Directory of gopher://%s:%hu/%s



                                                    " msgstr "" "\n" "\n" "\n" "Katalog gopher://%s:%d/%s\n" "\n" "\n" "

                                                    Katalog gopher://%s:%d/%s



                                                      " #: gopher.c:152 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" "B³±d przetwarzania wpisu katalogu Gopher:\n" "%s\n" #: gui_about.c:39 msgid "Pavuk: About" msgstr "Pavuk: O programie" #: gui_about.c:61 #, c-format msgid "" "Pavuk %s %s\n" " \n" "an automatic WEB file grabber\n" " \n" "By Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " msgstr "" "Pavuk %s %s\n" " \n" "to automat do pobierania plików z sieci Web\n" " \n" "napisany przez Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " #: gui_api.c:168 #, c-format msgid "Processed: %5d" msgstr "Przetworzono: %5d" #: gui_api.c:170 #, c-format msgid "Queued: %5d" msgstr "Skolejkowano: %5d" #: gui_api.c:172 #, c-format msgid "Failed: %4d" msgstr "B³êdy: %4d" #: gui_api.c:174 #, c-format msgid "Rejected: %5d" msgstr "Odrzucono: %5d" #: gui_api.c:378 msgid "Start" msgstr "Uruchom" #: gui_api.c:498 msgid "Starting ..." msgstr "Uruchamianie..." #: gui_api.c:563 msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "" "Zbyt du¿a warto¶æ czasu oczekiwania dla implementacji tego czasu w GUI\n" #: gui_addurl.c:72 gui_main.c:251 #, c-format msgid "Dropped URL : %s\n" msgstr "Zrzucone URL : %s\n" #: gui_addurl.c:126 msgid "Pavuk: Append URL" msgstr "Pavuk: Do³±cz URL" #: gui_addurl.c:138 msgid "New URL:" msgstr "Nowy URL:" #: gui_common.c:579 gui_common.c:595 gui_main.c:777 msgid "URL" msgstr "URL" #: gui_common.c:596 msgid "Local filename" msgstr "Lokalna nazwa pliku" #: gui_common.c:613 msgid "Request URL: " msgstr "¯±daj URL: " #: gui_common.c:616 msgid "Local filename: " msgstr "Lokalna nazwa pliku: " #: gui_common.c:682 msgid "Extended informations for HTTP POST request" msgstr "Informacje rozszerzone o ¿±daniu HTTP POST" #: gui_common.c:739 gui_common.c:1012 msgid "Query fields: " msgstr "Pola zapytañ: " #: gui_common.c:753 gui_common.c:1026 gui_common.c:2609 gui_limits.c:579 msgid "Type" msgstr "Typ" #: gui_common.c:754 gui_common.c:1027 msgid "Name" msgstr "Nazwa" #: gui_common.c:755 gui_common.c:1028 msgid "Value" msgstr "Warto¶æ" #: gui_common.c:797 gui_common.c:1070 msgid "Type: " msgstr "Typ: " #: gui_common.c:826 gui_common.c:1099 msgid "Name: " msgstr "Nazwa: " #: gui_common.c:828 gui_common.c:1101 msgid "Value: " msgstr "Warto¶æ: " #: gui_common.c:858 gui_common.c:1131 msgid "Pavuk: Choose form field file" msgstr "Pavuk: Wybierz plik pola formularza" #: gui_common.c:907 msgid "Form data" msgstr "Dane formularza" #: gui_common.c:933 msgid "Matching action URL: " msgstr "Akcja zgodnego URL: " #: gui_common.c:1193 msgid "Grabber I" msgstr "Pobieranie I" #: gui_common.c:1201 msgid "Cache Directory: " msgstr "Katalog cache: " #: gui_common.c:1204 msgid "Default URL prefix: " msgstr "Domy¶lny przedrostek URL: " #: gui_common.c:1207 msgid "Separate info directory: " msgstr "Katalog podstawowy: " #: gui_common.c:1210 msgid "Index file name: " msgstr "Nazwa pliku indeksu: " #: gui_common.c:1213 msgid "Store file name: " msgstr "Nazwa pliku sk³adowania: " #: gui_common.c:1216 msgid "Identity string: " msgstr "£añcuch identyfikuj±cy: " #: gui_common.c:1220 msgid "Netscape browser cache directory: " msgstr "Katalog cache przegl±darki Netscape: " #: gui_common.c:1223 msgid "Mozilla browser cache directory: " msgstr "Katalog cache przegl±darki Netscape: " #: gui_common.c:1228 msgid "Browser: " msgstr "Przegl±darka: " #: gui_common.c:1232 msgid "Reminder command: " msgstr "Polecenie przypominania: " #: gui_common.c:1235 msgid "Post command: " msgstr "Polecenie poczty: " #: gui_common.c:1251 msgid "How many times retry on fail: " msgstr "Ile razy próbowaæ gdy wyst±pi b³±d: " #: gui_common.c:1254 msgid "How many moved links to follow: " msgstr "Za iloma przeniesionymi dowi±zaniami pod±¿aæ: " #: gui_common.c:1257 msgid "How many times to reget file: " msgstr "Ile razy ponownie pobieraæ plik: " #: gui_common.c:1260 msgid "Document age before syncing with server: " msgstr "Wiek dokumentu przed synchronizacj± z serwerem: " #: gui_common.c:1262 msgid " days " msgstr " dni " #: gui_common.c:1268 msgid "Read buffer size: " msgstr "Wielko¶æ bufora odczytu: " #: gui_common.c:1273 msgid " kB " msgstr " kB" #: gui_common.c:1279 msgid "Hash tables size: " msgstr "Wielko¶æ tablic hash: " #: gui_common.c:1281 msgid " entries " msgstr " wpisów " #: gui_common.c:1295 msgid "Sleep time between transfers: " msgstr "Czas przerwy pomiêdzy transmisjami: " #: gui_common.c:1297 msgid " sec." msgstr " sek." #: gui_common.c:1302 msgid "randomize" msgstr "losowo" #: gui_common.c:1308 msgid "Rollback amount on reget: " msgstr "" #: gui_common.c:1310 msgid " bytes" msgstr " bajtów" #: gui_common.c:1316 msgid "Transfer quota: " msgstr "Ograniczenie transmisji: " #: gui_common.c:1318 gui_common.c:1326 gui_common.c:1335 msgid " kB" msgstr " kB" #: gui_common.c:1324 msgid "File size quota: " msgstr "Ograniczenie wielko¶ci pliku: " #: gui_common.c:1333 msgid "Filesystem freespace quota: " msgstr "Ograniczenie ilo¶ci wolnego miejsca: " #: gui_common.c:1351 msgid "Number of downloading threads: " msgstr "Ilo¶æ w±tków pobierania" #: gui_common.c:1366 msgid "Grabber II" msgstr "Pobieranie II" #: gui_common.c:1369 msgid "Misc settings" msgstr "Ró¿ne ustawienia" #: gui_common.c:1378 msgid "Always generate unique name for document" msgstr "Zawsze twórz unikatow± nazwê dla dokumentu" #: gui_common.c:1383 msgid "Delete FTP document after succesful download" msgstr "Usuñ dokument FTP po poprawnym pobraniu" #: gui_common.c:1388 msgid "Preserve document modification time" msgstr "Zachowaj czas modyfikacji dokumentu" #: gui_common.c:1393 msgid "Preserve FTP document permissions" msgstr "Zachowaj prawa dokumentu FTP" #: gui_common.c:1398 msgid "Preserve FTP symbolic links paths" msgstr "Zachowaj ¶cie¿ki FTP dowi±zañ symbolicznych" #: gui_common.c:1403 msgid "Retrieve FTP symbolic links like files" msgstr "Pobieraj dowi±zania symboliczne FTP jako pliki" #: gui_common.c:1409 msgid "Whole reget when partial not supported" msgstr "Pobieraj ponownie ca³o¶æ gdy czê¶ciowe pobieranie nie jest obs³ugiwane" #: gui_common.c:1415 msgid "Use gzip encoding for transfer" msgstr "Uzywaj dla transmisji kodowania gzip" #: gui_common.c:1420 msgid "Remove improper documents" msgstr "Usuwaj niew³a¶ciwe dokumenty" #: gui_common.c:1425 msgid "Check transferred size of document" msgstr "Sprawdzaj transmitowan± wielko¶æ dokumentu" #: gui_common.c:1430 msgid "Store directory URLs as index files" msgstr "Zapamiêtuj katalogi URLi jako pliki indeksu" #: gui_common.c:1435 msgid "Store info files with each document" msgstr "Zapamiêtaj pliki info dla ka¿dego dokumentu" #: gui_common.c:1440 msgid "Send self URL as Referer for starting URLs" msgstr "" #: gui_common.c:1445 msgid "Send If-Range header field when regeting" msgstr "Wysy³aj pole nag³ówka If-Range podczas ponownego pobierania" #: gui_common.c:1450 msgid "Show time of start and end of downloading" msgstr "Poka¿ czas pocz±tku i koñca pobierania" #: gui_common.c:1458 msgid "URL scheduling strategy: " msgstr "" #: gui_common.c:1504 gui_limits.c:447 msgid "HTML" msgstr "" #: gui_common.c:1507 #, fuzzy msgid "HTML document URL rewriting rules" msgstr "Ponowne zapisywanie URL dokumentu HTML" #: gui_common.c:1517 msgid "Rewrite URLs inside HTML doc." msgstr "Przepisz URLe wewn±trz dokumentu HTML." #: gui_common.c:1525 msgid "Rewrite URLs to local when stored locally" msgstr "Zapisz URLe jako lokalne gdy zapamiêtywane lokalnie" #: gui_common.c:1531 msgid "Rewrite all suitable URLs to local" msgstr "Zapisz wszystkie odpowiednie URLe na lokalne" #: gui_common.c:1537 msgid "Rewrite all URLs to local immediately" msgstr "Zapisz od razu wszystkie URLe jako lokalne" #: gui_common.c:1543 msgid "Rewrite all URLs to remote immediately" msgstr "Zapisz od razu wszystkie URLe jako zdalne" #: gui_common.c:1549 msgid "Rewrite only one currently download URL" msgstr "Zapisz ponownie jedynie bie¿±co pobierany URL" #: gui_common.c:1554 msgid "Tuning of HTML rewriting engine" msgstr "" #: gui_common.c:1564 #, fuzzy msgid "Don't touch URL wildcard pattern: " msgstr "Wzorzec dopasowania dokumentów: " #: gui_common.c:1569 #, fuzzy msgid "Don't touch URL RE pattern: " msgstr "Wzorzec dopasowania dokumentów: " #: gui_common.c:1573 #, fuzzy msgid "Don't touch HTML tag RE pattern: " msgstr "Wzorzec dopasowania dokumentów: " #: gui_common.c:1651 msgid "Net" msgstr "Sieæ" #: gui_common.c:1658 msgid "Allowed protocols" msgstr "Dopuszczalne protoko³y" #: gui_common.c:1667 msgid "HTTP" msgstr "" #: gui_common.c:1672 msgid "FTP" msgstr "" #: gui_common.c:1677 msgid "Gopher" msgstr "" #: gui_common.c:1683 msgid "HTTPS" msgstr "" #: gui_common.c:1688 msgid "FTPS" msgstr "" #: gui_common.c:1694 msgid "FTP data connection type " msgstr "Typ po³±czenia danych FTP" #: gui_common.c:1703 msgid "Active" msgstr "Aktywny" #: gui_common.c:1710 msgid "Passive" msgstr "Pasywny" #: gui_common.c:1717 msgid "Communication timeout: " msgstr "Czas oczekiwania komunikacji: " #: gui_common.c:1730 msgid " min." msgstr " min." #: gui_common.c:1736 msgid "Maximal transfer rate: " msgstr "Maksymalna prêdko¶æ transmisji: " #: gui_common.c:1749 gui_common.c:1768 msgid " kB/s" msgstr "" #: gui_common.c:1755 msgid "Minimal transfer rate: " msgstr "Minimalna prêdko¶æ transmisji: " #: gui_common.c:1774 msgid "Local interface address: " msgstr "Adres lokalnego interfejsu: " #: gui_common.c:1785 msgid "Additional HTTP headers: " msgstr "Dodatkowe nag³ówki FTP: " #: gui_common.c:1796 msgid "Additional FTP list options: " msgstr "Dodatkowe nag³ówki FTP: " #: gui_common.c:1809 msgid "Use wide listing of FTP directories" msgstr "U¿ywaj 'szerokiego' listowania katalogów FTP" #: gui_common.c:1815 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "" #: gui_common.c:1821 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "U¿ywaj protoko³u HTTP/1.1 dla komunikacji HTTP" #: gui_common.c:1827 msgid "FTP login handshake rules" msgstr "Regu³y uzgadniania loginu FTP" #: gui_common.c:1843 msgid "Login handshake" msgstr "Uzgadniany login" #: gui_common.c:1861 msgid "Handshake: " msgstr "Uzgadnianie: " #: gui_common.c:1903 msgid "Proxy" msgstr "" #: gui_common.c:1909 msgid "Gopher proxy" msgstr "" #: gui_common.c:1922 gui_common.c:1945 gui_common.c:1974 msgid "Port: " msgstr "" #: gui_common.c:1926 msgid "Gopher via HTTP proxy" msgstr "" #: gui_common.c:1931 msgid "FTP proxy" msgstr "" #: gui_common.c:1948 msgid "FTP via HTTP proxy" msgstr "" #: gui_common.c:1954 msgid "FTP via HTTP tunneling proxy" msgstr "" #: gui_common.c:1961 msgid "SSL proxy" msgstr "" #: gui_common.c:1978 msgid "HTTP proxy" msgstr "" #: gui_common.c:1984 msgid "Proxy: " msgstr "" #: gui_common.c:1989 msgid "Allow caching of documents" msgstr "Pozwól na zamapmiêtywanie dokumentów" #: gui_common.c:2044 msgid "Languages" msgstr "Jêzyki" #: gui_common.c:2047 msgid "Preffered languages" msgstr "Preferowane jêzyki" #: gui_common.c:2052 msgid "Language code: " msgstr "Kod jêzyka: " #: gui_common.c:2064 msgid "Preffered character sets" msgstr "Preferowany zestaw znaków" #: gui_common.c:2069 msgid "Character set code: " msgstr "Kod zestawu znaków: " #: gui_common.c:2086 msgid "Basic auth. scheme" msgstr "Podstawowy schemat uwierzytelniania" #: gui_common.c:2096 msgid "Auth" msgstr "Uwierzytelnianie" #: gui_common.c:2103 msgid "User authentification" msgstr "Uwierzytelnianie u¿ytkownika" #: gui_common.c:2112 gui_common.c:2161 msgid "Scheme: " msgstr "Schemat: " #: gui_common.c:2138 gui_common.c:2188 gui_common.c:2212 msgid "User name: " msgstr "Nazwa u¿ytkownika: " #: gui_common.c:2144 gui_common.c:2194 msgid "NTLM domain: " msgstr "Domena NTLM: " #: gui_common.c:2147 gui_common.c:2197 msgid "Reuse HTTP Digest access nonce" msgstr "U¿yj ponownie dostêpu nonce HTTP Digest" #: gui_common.c:2152 msgid "HTTP proxy user authentification" msgstr "Uwierzytelnianie u¿ytkownika proxy HTTP" #: gui_common.c:2202 msgid "FTP proxy user authentification" msgstr "Uwierzytelnianie u¿ytkownika proxy FTP" #: gui_common.c:2217 msgid "Misc" msgstr "Ró¿ne" #: gui_common.c:2231 msgid "E-mail address: " msgstr "Adres e-mail: " #: gui_common.c:2233 msgid "Send From: header with HTTP request" msgstr "Wysy³aj nag³ówek FROM podczas ¿±dania HTTP" #: gui_common.c:2247 msgid "SSL" msgstr "" #: gui_common.c:2250 msgid "SSL client certificate" msgstr "Certyfikat klienta SSL" #: gui_common.c:2260 gui_common.c:2274 msgid "Certificate password: " msgstr "Has³o certyfikatu: " #: gui_common.c:2263 msgid "Certificate PEM file: " msgstr "Plik PEM certyfikatu: " #: gui_common.c:2266 msgid "Certificate key file: " msgstr "Plik klucza certyfikatu: " #: gui_common.c:2271 #, fuzzy msgid "NSS certificate config directory: " msgstr "Katalog podstawowy: " #: gui_common.c:2277 #, fuzzy msgid "Accept unknown certificates" msgstr "Certyfikat klienta SSL" #: gui_common.c:2283 msgid "Domestic SSL ciphers policy" msgstr "" #: gui_common.c:2291 msgid "List of preffered ciphers: " msgstr "Lista preferowanych ciphers: " #: gui_common.c:2297 msgid "SSL protocol version" msgstr "Wersja protoko³u SSL" #: gui_common.c:2305 msgid "SSLv23" msgstr "" #: gui_common.c:2311 msgid "SSLv2" msgstr "" #: gui_common.c:2317 msgid "SSLv3" msgstr "" #: gui_common.c:2324 msgid "TLSv1" msgstr "" #: gui_common.c:2331 msgid "Miscelanous SSL settings" msgstr "Ró¿ne ustawienia" #: gui_common.c:2342 msgid "EGD daemon socket path: " msgstr "" #: gui_common.c:2347 msgid "Unique ID for all SSL sessions" msgstr "Unikatowy ID dla wszystkich sesji SSL" #: gui_common.c:2362 gui_main.c:1843 msgid "Log" msgstr "" #: gui_common.c:2369 msgid "Try to find unique name, when original log file locked" msgstr "" "Próbuj znale¼æ unikatow± nazwê gdy oryginalny plik log jest zablokowany" #: gui_common.c:2374 msgid "Log file: " msgstr "Plik logu: " #: gui_common.c:2377 msgid "Shortlog file: " msgstr "Plik skróconego logu: " #: gui_common.c:2380 msgid "Log window length: " msgstr "D³ugo¶æ okna logu: " #: gui_common.c:2393 msgid "Cookies" msgstr "Ciasteczka" #: gui_common.c:2396 msgid "Disabled cookie domains" msgstr "Wy³±czone domeny ciasteczek" #: gui_common.c:2401 gui_limits.c:263 msgid "Domain: " msgstr "Domena: " #: gui_common.c:2404 msgid "Cookies settings" msgstr "Utawienia ciasteczek" #: gui_common.c:2413 msgid "Update cookies" msgstr "Od¶wie¿ ciasteczka" #: gui_common.c:2418 msgid "Send cookies" msgstr "Wy¶lij ciasteczka" #: gui_common.c:2423 msgid "Accept cookies" msgstr "Akceptuj ciasteczka" #: gui_common.c:2428 msgid "Check cookies domain" msgstr "Sprawd¼ ciasteczka domeny" #: gui_common.c:2436 msgid "Cookies maximal number: " msgstr "Maksymalna ilo¶æ ciasteczek: " #: gui_common.c:2451 msgid "Cookie file: " msgstr "Plik ciasteczek: " #: gui_common.c:2537 msgid "Filename" msgstr "Nazwa pliku" #: gui_common.c:2540 msgid "Local filename conversion rules" msgstr "Regu³y konwersji lokalnych nazw plików" #: gui_common.c:2548 msgid "Replace String1 with String2 in filename" msgstr "Zamieniaj Napis1 na Napis2 w nazwie pliku" #: gui_common.c:2557 msgid "String1: " msgstr "Napis1: " #: gui_common.c:2560 msgid "String2: " msgstr "Napis2: " #: gui_common.c:2562 msgid "Delete characters from filename" msgstr "Usuwaj znaki z nazwy pliku" #: gui_common.c:2571 msgid "Character set: " msgstr "Zestaw znaków: " #: gui_common.c:2573 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "Zamieniaj znaki z Zestaw1 na znaki z Zestaw2 w nazwie pliku" #: gui_common.c:2582 msgid "Character set1: " msgstr "Zestaw1 znaków: " #: gui_common.c:2585 msgid "Character set2: " msgstr "Zestaw2 znaków: " #: gui_common.c:2592 msgid "Base level of tree: " msgstr "Poziom bazowy drzewa: " #: gui_common.c:2594 msgid "Local filename mapping rules" msgstr "Regu³y mapowania lokalnych nazw plików" #: gui_common.c:2610 msgid "Match pattern" msgstr "" #: gui_common.c:2611 msgid "Rule" msgstr "Regu³a" #: gui_common.c:2631 msgid "wildcard pattern" msgstr "" #: gui_common.c:2638 msgid "RE pattern" msgstr "" #: gui_common.c:2650 msgid "Matching pattern: " msgstr "" #: gui_common.c:2657 msgid "Construction rule: " msgstr "Konstrukcja regu³y: " #: gui_common.c:2697 msgid "Advertisement" msgstr "Reklama" #: gui_common.c:2704 msgid "Enable removing of advertisement banners" msgstr "Za³±cz usuwanie banerów reklamowych" #: gui_common.c:2709 msgid "RE for advertisement URLs: " msgstr "RE dla URLi z reklamami: " #: gui_common.c:2821 msgid "Javascript" msgstr "" #: gui_common.c:2829 msgid "Processing of javascript" msgstr "Przetwarzanie Javascript" #: gui_common.c:2833 msgid "Javascript patterns" msgstr "Wzorce Javascript" #: gui_common.c:2838 msgid "RE for Javascript patterns: " msgstr "RE dla wzorców Javascript: " #: gui_common.c:2844 msgid "Javascript patterns with transform rules" msgstr "Wzorce Javascript z regu³ami transformacji" #: gui_common.c:2859 msgid "Pattern" msgstr "Wzorzec" #: gui_common.c:2860 msgid "Transform rule" msgstr "Regu³a transformacji" #: gui_common.c:2861 msgid "HTML tag" msgstr "" #: gui_common.c:2862 msgid "HTML tag attribute" msgstr "Atrybut taga HTML" #: gui_common.c:2863 msgid "Rewrite" msgstr "" #: gui_common.c:2882 msgid "Pattern: " msgstr "Wzorzec: " #: gui_common.c:2885 msgid "Tranform rule: " msgstr "Regu³a transformacji: " #: gui_common.c:2894 msgid "HTML tag: " msgstr "" #: gui_common.c:2898 msgid "HTML tag attribute: " msgstr "Atrybut taga HTML: " #: gui_common.c:2900 msgid "Rewrite URL part in HTML document" msgstr "Przepisz URLe wewn±trz dokumentu HTML." #: gui_common.c:2958 msgid "Pavuk: Common config" msgstr "Pavuk: ogólne opcje" #: gui_common.c:3027 msgid "Limitations ..." msgstr "Ograniczenia ..." #: gui_jscons.c:151 msgid "Pavuk: JavaScript console" msgstr "Pavuk: Konsola JavaScript" #: gui_jscons.c:168 msgid "Reload script file" msgstr "Ponownie wczytaj plik skryptu" #: gui_jscons.c:173 msgid "Save script to file" msgstr "Zapisz skrypt do pliku" #: gui_jscons.c:180 msgid "Load script to JavaScript runtime" msgstr "Wczytaj skrypt do ¶rodowiska pracy JavaScript" #: gui_jscons.c:185 msgid "Restart JavaScript runtime" msgstr "Uruchom ponownie ¶rodowisko pracy JavaScript" #: gui_jscons.c:208 msgid "Prompt: " msgstr "" #: gui_jscons.c:221 msgid "JavaScript source file: " msgstr "Plik ¼ród³owy JavaScript" #: gui_limits.c:48 msgid "Tree" msgstr "Drzewo" #: gui_limits.c:60 msgid "Download cgi-generated pages" msgstr "Pobieraj strony wygenerowane przez cgi" #: gui_limits.c:66 msgid "Recurse through FTP directory" msgstr "Recursja przez katalog FTP" #: gui_limits.c:72 msgid "Allow \"robots.txt\"" msgstr "Dopuszczaj \"robots.txt\"" #: gui_limits.c:78 msgid "Process HTML files downloaded over FTP" msgstr "Przetwarzaj pliki HTML pobrane poprzez FTP" #: gui_limits.c:84 msgid "Don't leave starting site" msgstr "Nie opuszczaj strony startowej" #: gui_limits.c:90 msgid "Don't leave starting directory" msgstr "Nie opuszczaj katalogu startowego" #: gui_limits.c:96 msgid "Don't leave site enter directory" msgstr "Nie opuszczaj strony wej¶cia katalogowego" #: gui_limits.c:102 msgid "Download just single page" msgstr "Pobieraj tylko jedn± stronê" #: gui_limits.c:108 msgid "Apply limiting options on inline objects" msgstr "Zastosuj opcje ograniczeñ na obiekty inline" #: gui_limits.c:123 msgid "Max. count of documents: " msgstr "Maksymalna ilo¶æ dokumentów: " #: gui_limits.c:126 msgid "Max. depth of tree: " msgstr "Maksymalna g³êboko¶æ drzewa: " #: gui_limits.c:129 msgid "Max. levels to leave from starting site: " msgstr "Maksymalna ilo¶æ poziomów do opuszczenia od strony startowej: " #: gui_limits.c:132 msgid "Max. document size: " msgstr "Maksymalna wielko¶æ dokumentu: " #: gui_limits.c:135 msgid "Min. document size: " msgstr "Minimalna wielko¶æ dokumentu: " #: gui_limits.c:138 msgid "Max. site levels to leave from starting site: " msgstr "Maksymalna ilo¶æ poziomów strony do opuszczenia od strony startowej: " #: gui_limits.c:149 msgid "Working subdirectory :" msgstr "Katalog pracy: " #: gui_limits.c:152 msgid "User condition script: " msgstr "Skrypt warunków u¿ytkownika: " #: gui_limits.c:155 msgid "Follow command: " msgstr "Polecenie folow: " #: gui_limits.c:166 msgid "Patterns" msgstr "Wzorce" #: gui_limits.c:169 gui_limits.c:609 msgid "Wildcard patterns" msgstr "Wzrosce \"wildcard\"" #: gui_limits.c:178 gui_limits.c:205 msgid "Documents matching pattern: " msgstr "Wzorzec dopasowania dokumentów: " #: gui_limits.c:182 gui_limits.c:191 gui_limits.c:209 gui_limits.c:218 #: gui_limits.c:283 msgid "skip: " msgstr "przeskocz: " #: gui_limits.c:183 gui_limits.c:210 #, fuzzy msgid "Pavuk: edit Documents matching skip pattern" msgstr "Wzorzec dopasowania dokumentów: " #: gui_limits.c:187 gui_limits.c:214 msgid "URL matching pattern: " msgstr "Wzorzec dopasowania URLi: " #: gui_limits.c:192 gui_limits.c:219 #, fuzzy msgid "Pavuk: edit URL matching skip pattern" msgstr "Wzorzec dopasowania URLi: " #: gui_limits.c:196 gui_limits.c:615 msgid "RE patterns" msgstr "Wzorce RE" #: gui_limits.c:231 msgid "Hosts" msgstr "Hosty" #: gui_limits.c:240 msgid "Allow / Disallow sites" msgstr "Dopuszczaj / nie dopuszczaj strony" #: gui_limits.c:246 msgid "Site: " msgstr "Strona: " #: gui_limits.c:257 msgid "Allow / Disallow domains" msgstr "Dopuszczaj / nie dopuszczaj domeny" #: gui_limits.c:269 msgid "IP address RE patterns" msgstr "Wzorce RE adresu IP" #: gui_limits.c:279 msgid "Server IP address matching pattern: " msgstr "Wzorzec dopasowania adresu IP serwera: " #: gui_limits.c:284 #, fuzzy msgid "Pavuk: edit Server IP address matching skip pattern" msgstr "Wzorzec dopasowania adresu IP serwera: " #: gui_limits.c:288 msgid "Server ports" msgstr "Porty serwera" #: gui_limits.c:298 #, fuzzy msgid "Allow/deny" msgstr "Dopu¶æ/zabroñ" #: gui_limits.c:303 msgid "Ports: " msgstr "Porty: " #: gui_limits.c:314 msgid "Documents" msgstr "Dokumenty" #: gui_limits.c:323 msgid "Allow / Disallow suffix" msgstr "Dopuszczaj / nie dopuszczaj przyrostek" #: gui_limits.c:329 msgid "Suffix: " msgstr "Przyrostek: " #: gui_limits.c:340 msgid "Allow / Disallow prefix" msgstr "Dopuszczej / nie dopuszczaj przedrostek" #: gui_limits.c:346 msgid "Prefix: " msgstr "Przedrostek: " #: gui_limits.c:360 gui_limits.c:372 msgid "MIME types" msgstr "Typy MIME" #: gui_limits.c:368 msgid "Allow / Disallow MIME type" msgstr "Dopuszczaj / nie dopuszczaj typ MIME" #: gui_limits.c:377 msgid "MIME type: " msgstr "Typ MIME: " #: gui_limits.c:390 msgid "Time" msgstr "Czas" #: gui_limits.c:396 msgid "Lower document time limit" msgstr "Dolne ograniczenie czasu dokumentu" #: gui_limits.c:406 msgid "Check if doc. time newer than this" msgstr "Sprawd¼ czy czas dokumentu jest nowszy ni¿ ten" #: gui_limits.c:410 msgid "Upper document time limit" msgstr "Górne ograniczenie czasu dokumentu" #: gui_limits.c:420 msgid "Check if doc. time older than this" msgstr "Sprawd¿ czy czas dokumentu jest starszy ni¿ ten" #: gui_limits.c:429 msgid "Maximal allowed time of downloading: " msgstr "Maksymalny dopuszczalny czas pobierania: " #: gui_limits.c:432 msgid " min" msgstr "" #: gui_limits.c:445 msgid "Select allowed HTML tags and attributes" msgstr "Wybierz dopuszczane tagi HTML i ich atrybuty" #: gui_limits.c:462 #, c-format msgid "%s of %s" msgstr "%s z %s" #: gui_limits.c:567 #, fuzzy msgid "Tag patterns" msgstr "Wzorce RE" #: gui_limits.c:580 gui_limits.c:657 #, fuzzy msgid "Tag pattern" msgstr "Wzorce RE" #: gui_limits.c:581 #, fuzzy msgid "Atrribute pattern" msgstr "nadpisz nadrzêdne" #: gui_limits.c:582 gui_limits.c:665 #, fuzzy msgid "URL pattern" msgstr "Wzorce RE" #: gui_limits.c:597 #, fuzzy msgid "Pattern type: " msgstr "Wzorzec: " #: gui_limits.c:661 #, fuzzy msgid "Attribute pattern" msgstr "Wzorce Javascript" #: gui_limits.c:721 msgid "Pavuk: Limits config" msgstr "Pavuk: ustawienia ograniczeñ" #: gui_limits.c:776 msgid "Common ..." msgstr "Ogólne ..." #: gui_main.c:186 msgid "Unable to change language during processing time!\n" msgstr "" #: gui_main.c:398 msgid "Unknown window to popup" msgstr "Nieznane okno do rozwiniêcia" #: gui_main.c:463 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "Pobrany URL ze schowka : %s\n" #: gui_main.c:507 #, c-format msgid "Fetched URL from browser : %s\n" msgstr "Pobrany URL z przegl±darki : %s\n" #: gui_main.c:762 msgid "Both" msgstr "Oba" #: gui_main.c:763 msgid "Icons only" msgstr "Tylko ikony" #: gui_main.c:764 msgid "Text only" msgstr "Tylko tekst" #: gui_main.c:776 msgid "Nr." msgstr "Nr" #: gui_main.c:778 msgid "Status" msgstr "Stan" #: gui_main.c:779 msgid "Size" msgstr "Wielko¶æ" #: gui_main.c:780 msgid "Transfer rate" msgstr "Prêdko¶æ transmisji" #: gui_main.c:781 msgid "Elapsed time" msgstr "Up³ynê³o czasu" #: gui_main.c:782 msgid "Remaining time" msgstr "Pozosta³o czasu" #: gui_main.c:922 msgid "Open _URL ..." msgstr "Otwórz _URL ..." #: gui_main.c:935 msgid "Append URL ..." msgstr "Do³±cz URL ..." #: gui_main.c:944 msgid "Fetch URL from Clipboard" msgstr "Pobierz URL ze schowka" #: gui_main.c:962 msgid "Fetch URL from browser" msgstr "Pobierz URL z przegl±darki" #: gui_main.c:972 msgid "Load scenario ..." msgstr "Wczytaj scenariusz ..." #: gui_main.c:981 msgid "Add scenario ..." msgstr "Dodaj scenariusz ..." #: gui_main.c:990 msgid "Save scenario ..." msgstr "Zapisz scenariusz ..." #: gui_main.c:999 msgid "Save settings to ~/.pavukrc" msgstr "Zapisz ustawienia do ~/.pavukrc" #: gui_main.c:1012 msgid "Schedule ..." msgstr "" #: gui_main.c:1021 msgid "Auth. info editor ..." msgstr "Edytor informacji uwierzytelniania ..." #: gui_main.c:1034 msgid "E_xit" msgstr "_Wyj¶cie" #: gui_main.c:1043 msgid "_File" msgstr "_Plik" #: gui_main.c:1057 msgid "Document _Tree ..." msgstr "Drzewo dokumen_tu ..." #: gui_main.c:1066 msgid "Status page ..." msgstr "Strona stanu ..." #: gui_main.c:1074 msgid "HTML forms editor ..." msgstr "Edytor formularzy HTML" #: gui_main.c:1083 msgid "Javascript console ..." msgstr "Konsola Javascript ..." #: gui_main.c:1096 msgid "Clear log window" msgstr "Wyczy¶æ okno loga" #: gui_main.c:1105 msgid "_View" msgstr "Po_ka¿" #: gui_main.c:1121 msgid "normal recurse" msgstr "rekursja normalna" #: gui_main.c:1131 msgid "synchronize" msgstr "synchronizuj" #: gui_main.c:1142 msgid "single page" msgstr "jedna strona" #: gui_main.c:1152 msgid "update local links" msgstr "od¶wie¿ lokalne dowi±zania" #: gui_main.c:1162 msgid "resume files" msgstr "przywróæ pliki" #: gui_main.c:1172 msgid "unlimited reget" msgstr "pobieranie bez ograniczeñ" #: gui_main.c:1182 msgid "transfer but don't store" msgstr "transmituj ale nie zapamiêtuj" #: gui_main.c:1192 msgid "reminder" msgstr "przypomnienie" #: gui_main.c:1202 msgid "list ftp directory" msgstr "listuj katalog FTP" #: gui_main.c:1212 msgid "_Mode" msgstr "T_ryb" #: gui_main.c:1228 msgid "C_ommon ..." msgstr "_Ogólne ..." #: gui_main.c:1237 msgid "_Limitations ..." msgstr "Ogra_niczenia ..." #: gui_main.c:1246 msgid "Reset configuration" msgstr "Zeruj ustawienia" #: gui_main.c:1260 msgid "Toolbar" msgstr "Pasek narzêdzi" #: gui_main.c:1268 msgid "Toggle toolbar" msgstr "Prze³±cz pasek narzêdzi" #: gui_main.c:1323 msgid "Progressbar" msgstr "Pasek postêpu" #: gui_main.c:1354 msgid "Language" msgstr "Jêzyk" #: gui_main.c:1363 nls.c:33 msgid "English" msgstr "" #: gui_main.c:1405 msgid "Debug level" msgstr "Poziom ¶ledzenia" #: gui_main.c:1428 msgid "All" msgstr "Wszystko" #: gui_main.c:1435 msgid "None" msgstr "Brak" #: gui_main.c:1442 msgid "Debug" msgstr "¦led¼" #: gui_main.c:1458 msgid "Allow tooltips" msgstr "Dopuszczaj podpowiedzi" #: gui_main.c:1468 msgid "Log window autoscroll" msgstr "Automatyczne przewijanie okna loga" #: gui_main.c:1477 msgid "Use preferences" msgstr "U¿ywaj preferencji" #: gui_main.c:1486 msgid "Quiet" msgstr "Cicho" #: gui_main.c:1498 msgid "Immediate messages" msgstr "Natychmiastowe informacje" #: gui_main.c:1510 msgid "_Config" msgstr "Konfigura_cja" #: gui_main.c:1524 msgid "_Restart" msgstr "" #: gui_main.c:1534 msgid "Co_ntinue" msgstr "Ko_ntynuacja" #: gui_main.c:1544 msgid "Sto_p" msgstr "" #: gui_main.c:1554 msgid "_Break" msgstr "Prz_erwij" #: gui_main.c:1564 msgid "_Action" msgstr "_Akcja" #: gui_main.c:1582 msgid "About ..." msgstr "O programie ..." #: gui_main.c:1591 msgid "_Help" msgstr "Po_moc" #: gui_main.c:1617 msgid "Config" msgstr "Konfiguracja" #: gui_main.c:1618 msgid "Popup config window" msgstr "Rozwiñ okno konfiguracji" #: gui_main.c:1622 msgid "Limits" msgstr "Ograniczenia" #: gui_main.c:1623 msgid "Popup limits window" msgstr "Rozwiñ okno ograniczeñ" #: gui_main.c:1629 msgid "Go bg" msgstr "Id¿ w t³o" #: gui_main.c:1630 msgid "Destroy window as soon as posible and continue on terminal" msgstr "Zniszcz okno najszybciej jak to mo¿liwe i kontynuuj na terminalu" #: gui_main.c:1634 gui_main.c:1704 msgid "Restart" msgstr "" #: gui_main.c:1635 msgid "Start working on currently set starting URLs" msgstr "Rozpocznij pracê na ustawionych na bie¿±co URLach" #: gui_main.c:1639 gui_main.c:1709 msgid "Continue" msgstr "Kontynuacja" #: gui_main.c:1640 msgid "Continue after stop or break" msgstr "Kontynuuj po zatrzymaniu lub przerwie" #: gui_main.c:1646 gui_main.c:1714 msgid "Stop" msgstr "" #: gui_main.c:1647 msgid "Finish this transfer and stop" msgstr "Zakoñcz tê transmisjê i zatrzymaj" #: gui_main.c:1651 gui_main.c:1719 msgid "Break" msgstr "Przerwij" #: gui_main.c:1652 msgid "Break transfer and stop" msgstr "Przerwij transmisje i zatrzymaj" #: gui_main.c:1658 msgid "Exit" msgstr "Wyj¶cie" #: gui_main.c:1659 msgid "Immediately quit the program" msgstr "Opu¶æ program natychmiastowo" #: gui_main.c:1724 msgid "Show whole main window" msgstr "Poka¿ ca³e g³ówne okno" #: gui_main.c:1729 msgid "Quit" msgstr "Wyjd¼" #: gui_main.c:1808 msgid "Pavuk: save log" msgstr "Pavuk: zapisz log" #: gui_main.c:1864 msgid "Select all" msgstr "Wybierz wszystko" #: gui_main.c:1872 msgid "Clear selection" msgstr "Wyczy¶æ wybór" #: gui_main.c:1880 msgid "Copy selection" msgstr "Kopiuj wybór" #: gui_main.c:1892 msgid "Save log ..." msgstr "Zapisz log ..." #: gui_main.c:1899 msgid "Clear log" msgstr "Wyczy¶æ log" #: gui_main.c:1974 gui_main.c:2088 msgid "Processed: " msgstr "Przetworzono: " #: gui_main.c:1983 gui_main.c:2097 msgid "Failed: " msgstr "B³êdnie: " #: gui_main.c:1992 gui_main.c:2106 msgid "Queued: " msgstr "Skolejkowano: " #: gui_main.c:2001 gui_main.c:2115 msgid "Rejected: " msgstr "Odrzucono: " #: gui_main.c:2047 msgid "S: " msgstr "" #: gui_main.c:2056 msgid "R: " msgstr "" #: gui_main.c:2065 msgid "ET: " msgstr "" #: gui_main.c:2074 msgid "RT: " msgstr "" #: gui_scenario.c:48 msgid "Pavuk: Scenario saver" msgstr "Pavuk: Zapisz scenariusz" #: gui_scenario.c:140 msgid "Pavuk: Scenario loader" msgstr "Pavuk: Wczytaj scenariusz" #: gui_scenario.c:231 msgid "Pavuk: Scenario add" msgstr "Pavuk: Dodaj scenariusz" #: gui_sched.c:44 pavuk.c:495 msgid "Error scheduling\n" msgstr "B³±d planowania\n" #: gui_sched.c:68 msgid "Pavuk: Scheduler" msgstr "Pavuk: Rozk³ad zadañ" #: gui_sched.c:87 msgid "Scheduling command: " msgstr "Polecenie planowania: " #: gui_sched.c:97 msgid "Reschedule after " msgstr "Planuj ponownie po " #: gui_sched.c:107 msgid " hours" msgstr " godziny" #: gui_tools.c:54 msgid "Time: " msgstr "Czas: " #: gui_tools.c:63 msgid " : " msgstr "" #: gui_tools.c:249 #, fuzzy, c-format msgid "Pavuk: edit %s" msgstr "Pavuk: wybierz %s" #: gui_tools.c:250 msgid "entry" msgstr "" #: gui_tools.c:396 #, fuzzy msgid "Edit ..." msgstr "Wychodzenie ..." #: gui_tools.c:453 #, c-format msgid "Pavuk: select %s" msgstr "Pavuk: wybierz %s" #: gui_tools.c:454 msgid "file" msgstr "plik" #: gui_tools.c:552 msgid "Browse ..." msgstr "Przegl±daj ..." #: gui_tree.c:104 #, c-format msgid "URL: %s\n" msgstr "" #: gui_tree.c:117 gui_tree.c:123 gui_tree.c:162 msgid "Request type: " msgstr "Typ ¿±dania: " #: gui_tree.c:138 msgid "Query values:\n" msgstr "Warto¶ci zapytania:\n" #: gui_tree.c:168 msgid "Status: " msgstr "Stan: " #: gui_tree.c:174 msgid "not processed yet\n" msgstr "jeszcze nie przetworzono\n" #: gui_tree.c:180 msgid "loaded from NS cache\n" msgstr "wczytano z cache NS\n" #: gui_tree.c:186 msgid "loaded from local URL tree\n" msgstr "wczytano z lokalnego drzewa URL\n" #: gui_tree.c:192 msgid "moved to another URL\n" msgstr "przeniesiono do innego URL\n" #: gui_tree.c:198 msgid "URL not found on remote server\n" msgstr "Nie znaleziono URL na zdalnym serwerze\n" #: gui_tree.c:204 msgid "truncated\n" msgstr "obciêto\n" #: gui_tree.c:210 msgid "downloaded OK\n" msgstr "pobrano OK\n" #: gui_tree.c:216 msgid "rejected by rules\n" msgstr "odrzucone przez regu³y\n" #: gui_tree.c:222 msgid "disabled by user\n" msgstr "wy³±czone przez u¿ytkownika\n" #: gui_tree.c:228 msgid "probably recoverable error\n" msgstr "prawdopodobnie b³±d naprawialny\n" #: gui_tree.c:234 msgid "unrecoverable error\n" msgstr "nienaprawialny b³±d\n" #: gui_tree.c:240 msgid "unknown\n" msgstr "nieznany\n" #: gui_tree.c:250 #, c-format msgid "Moved to URL: %s\n" msgstr "Przeniesiono do URL: %s\n" #: gui_tree.c:260 #, c-format msgid "Type: %s\n" msgstr "Typ: %s\n" #: gui_tree.c:262 msgid "Type: unknown\n" msgstr "Typ: nieznany\n" #: gui_tree.c:268 #, c-format msgid "Size: %d\n" msgstr "Wielko¶æ: %d\n" #: gui_tree.c:277 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "Czas modyfikacji: %a, %d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:287 #, c-format msgid "Local filename: %s\n" msgstr "Lokalna nazwa pliku: %s\n" #: gui_tree.c:298 msgid "Parent URLs:\n" msgstr "Nadrzêdne URLe:\n" #: gui_tree.c:565 msgid "Pavuk: Store tree" msgstr "Pavuk: Zapamiêtaj drzewo" #: gui_tree.c:607 gui_tree.c:631 msgid "Pavuk: URL tree preview" msgstr "Pavuk: podgl±d drzewa URL" #: gui_tree.c:609 gui_tree.c:715 msgid "Store tree ..." msgstr "Zapamiêtaj drzewo..." #: gui_tree.c:610 gui_tree.c:649 msgid "Automaticaly watch last processed URLs" msgstr "Obserwuj automatycznie ostatnio przetworzone URLe" #: gui_tree.c:611 gui_tree.c:742 msgid "Properties" msgstr "W³a¶ciwo¶ci" #: gui_tree.c:612 gui_tree.c:750 msgid "Launch browser" msgstr "Uruchom przegl±darkê" #: gui_tree.c:613 gui_tree.c:758 msgid "Disable URL" msgstr "Wy³±cz URL" #: gui_tree.c:614 gui_tree.c:766 msgid "Enable URL" msgstr "Za³±cz URL" #: gui_tree.c:615 gui_tree.c:774 msgid "Download URL" msgstr "Pobierz URL" #: gui_tree.c:618 gui_tree.c:668 msgid "URL tree" msgstr "Drzewo URL" #: html.c:253 htmlparser.c:254 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "Nieobs³ugiwany BASE URL - %s (prawdopodobnie ¼le przechwycony)\n" #: html.c:533 msgid "Can't work on directory\n" msgstr "Nie mo¿na pracowaæ w katalogu\n" #: html.c:559 html.c:563 msgid "rewrite parent" msgstr "nadpisz nadrzêdne" #: http.c:366 msgid "****************** Proxy connect request *****************\n" msgstr "****************** ¯±danie po³±czenia proxy *****************\n" #: http.c:413 msgid "***************** Proxy connect response *****************\n" msgstr "***************** Odpowied¼ po³±czenia proxy ******************\n" #: http.c:469 msgid "Sending request ..." msgstr "Wysy³anie ¿±dania ..." #: http.c:716 msgid "************ Client HTTP MIME header ***************\n" msgstr "************ Nag³ówek MIME klienta HTTP ****************\n" #: http.c:733 msgid "Sending data ..." msgstr "Wysy³anie danych ..." #: http.c:734 msgid "************ HTTP request data ***************\n" msgstr "************ ¯±danie danych HTTP ****************\n" #: http.c:744 msgid "Waiting for response ..." msgstr "Oczekiwanie na odpowied¼ ..." #: http.c:759 msgid "Error reading HTTP 1xx class response\n" msgstr "B³±d czytania odpowiedzi HTTP klasy 1xx\n" #: http.c:764 msgid "***************** class 1xx HTTP response ****************\n" msgstr "***************** odpowied¼ HTTP klasy 1xx ****************\n" #: http.c:874 msgid "Connecting ..." msgstr "£±czenie ..." #: http.c:1164 msgid "*********** HTTP Server response MIME header **********\n" msgstr "*********** Nag³ówek MIME odpowiedzi serwera HTTP ********\n" #: http.c:1267 msgid "Regeting whole file\n" msgstr "Ponowne pobieranie ca³ego pliku\n" #: http.c:1317 #, fuzzy, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "" "%s: B£¡D: nieoczekiwany kod odpowiedzi HTTP przy próbie ponownego " "pobierania\n" #: http_proxy.c:153 #, fuzzy, c-format msgid "Checking HTTP proxy server %s:%hu\n" msgstr "Sprawdzanie serwera proxy HTTP %s:%d\n" #: http_proxy.c:165 http_proxy.c:177 http_proxy.c:184 http_proxy.c:193 msgid "Failed to check proxy !\n" msgstr "B³±d sprawdzania proxy !\n" #: http_proxy.c:199 #, fuzzy, c-format msgid "Proxy %s:%hu is HTTP/%d.%d proxy\n" msgstr "Proxy %s:%d to proxy HTTP/%d.%d\n" #: jsbind.c:77 msgid "bad parameter" msgstr "z³y parametr" #: jsbind.c:555 msgid "not enough parameters" msgstr "Za ma³a ilo¶æ parametrów" #: jsbind.c:579 msgid "unknown limiting condition" msgstr "nieznane warunki ograniczania" #: lfname.c:478 lfname.c:490 lfname.c:499 lfname.c:512 lfname.c:535 #: lfname.c:644 lfname.c:657 lfname.c:669 lfname.c:684 lfname.c:697 re.c:51 #: re.c:61 re.c:68 re.c:80 re.c:95 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "B³±d kompilacji wyra¿enia regularnego : %s\n" #: lfname.c:552 lfname.c:616 lfname.c:938 lfname.c:1056 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "B³±d analizy LSP: z³y znacznik przy - %s\n" #: lfname.c:949 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "B³±d analizy LSP: z³a warto¶æ numeryczna przy - %s\n" #: lfname.c:963 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "B³±d analizy LSP: z³e makro przy - %s\n" #: lfname.c:991 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "B³±d analizy LSP: niezakoñczony ³añcuch przy - %s\n" #: lfname.c:1012 lfname.c:1028 lfname.c:1046 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "B³±d analizy LSP: z³y typ parametru przy - %s\n" #: log.c:204 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "Koniec logu : %H:%M:%s %d.%m.%Y\n" #: log.c:225 msgid "Unable to open log file - disabling logging\n" msgstr "Nie mo¿na otworzyæ pliku logu - wy³±czenie logowania\n" #: log.c:233 msgid "Log file is locked by another process - " msgstr "Plik logu jest zablokowany przez inny proces - " #: log.c:237 msgid "generating new log filename\n" msgstr "generowanie nowej nazwy pliku logu\n" #: log.c:242 msgid "disabling logging\n" msgstr "wy³±czenie logowania\n" #: log.c:264 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "Pocz±tek logu : %H:%M:%S %d.%m.%Y\n" #: mozcache.c:179 #, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "Nie mo¿na otworzyæ indeksu cache Mozilla - %s\n" #: mozcache.c:287 #, fuzzy, c-format msgid "Error opening cache index file %s\n" msgstr "Nie mo¿na otworzyæ indeksu cache Mozilla - %s\n" #: mozcache.c:305 msgid "Mozilla new cache map file format not recognized" msgstr "" #: mozcache.c:357 mozcache.c:367 msgid "Corrupted Mozilla cache blockfile!" msgstr "" #: mozcache.c:468 msgid "Corrupted Mozilla cache map file!" msgstr "" #: myssl_nss.c:319 msgid "NSS_Init: Unable to open cert database" msgstr "" #: myssl_nss.c:541 #, fuzzy, c-format msgid "SSL connect failure - %s\n" msgstr "Po³±czenie SSL u¿ywa %s\n" #: myssl_nss.c:576 #, fuzzy, c-format msgid "SSL error - %s\n" msgstr "Nieznana wersja SSL - \"%s\"\n" #: myssl_openssl.c:140 msgid "Failed obtaining entropy pathname\n" msgstr "" #: myssl_openssl.c:150 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "B³±d inicjalizacji 'random seed' dla OpenSSL via demon EGD\n" #: myssl_openssl.c:161 msgid "Seeding entropy pool INSECURELY!\n" msgstr "" #: myssl_openssl.c:276 msgid "Unable to set certificate file (wrong password?)\n" msgstr "Nie mo¿na ustawiæ pliku certyfikacji (z³e has³o?)\n" #: myssl_openssl.c:287 msgid "Unable to set public key file\n" msgstr "Nie mo¿na ustawiæ pliku klucza publicznego\n" #: myssl_openssl.c:304 msgid "Private key does not match the certificate public key\n" msgstr "Klucz prywatny nie zgadza siê z certyfikatem klucza publicznego\n" #: nls.c:24 msgid "Czech" msgstr "" #: nls.c:25 msgid "German" msgstr "" #: nls.c:26 msgid "Spanish" msgstr "" #: nls.c:27 msgid "French" msgstr "" #: nls.c:28 msgid "Italian" msgstr "" #: nls.c:29 msgid "Japanese" msgstr "" #: nls.c:30 msgid "Polish" msgstr "" #: nls.c:31 msgid "Slovak" msgstr "" #: nls.c:32 msgid "Ukrainian" msgstr "" #: nscache.c:106 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "Nie mo¿na otworzyæ indeksu cache Netscape - %s\n" #: ntlm_auth.c:471 msgid "Trying to do NTLM authorization\n" msgstr "Próba uwierzytelniana NTLM\n" #: ntlm_auth.c:480 ntlm_auth.c:561 ntlm_auth.c:642 ntlm_auth.c:722 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "Uwierzytelnianie NTLM obs³ugiwane jedynie przy sta³ych po³±czeniach!\n" #: ntlm_auth.c:503 ntlm_auth.c:664 msgid "Not enough data for NTLM authorization!\n" msgstr "Za ma³o danych dla uwierzytelniania NTLM!\n" #: ntlm_auth.c:504 ntlm_auth.c:665 msgid "Missing:\n" msgstr "Brakuje:\n" #: ntlm_auth.c:505 ntlm_auth.c:666 msgid " domain\n" msgstr " domena\n" #: ntlm_auth.c:506 ntlm_auth.c:667 msgid " username\n" msgstr " nazwa u¿ytkownika\n" #: ntlm_auth.c:507 ntlm_auth.c:668 msgid " password\n" msgstr " has³o\n" #: ntlm_auth.c:508 ntlm_auth.c:669 msgid " local hostname\n" msgstr " lokalna nazwa hosta\n" #: ntlm_auth.c:544 ntlm_auth.c:552 ntlm_auth.c:577 ntlm_auth.c:705 #: ntlm_auth.c:713 ntlm_auth.c:738 msgid "Got unexpected response\n" msgstr "Otrzymano nieoczekiwan± odpowied¼\n" #: ntlm_auth.c:587 msgid "Failed NTLM nonce negotiation\n" msgstr "B³±d negocjacji NTLM\n" #: ntlm_auth.c:629 msgid "Trying to do proxy NTLM authorization\n" msgstr "Próba uwierzytelniania proxy NTLM\n" #: ntlm_auth.c:748 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "" #: options.h:193 msgid "\t-v - print version number\n" msgstr "" #: options.h:204 msgid "\t-h - help\n" msgstr "" #: options.h:218 msgid "\t-X - start GUI interface\n" msgstr "" #: options.h:249 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" #: options.h:265 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "" #: options.h:494 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" #: options.h:517 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "" #: options.h:528 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "" #: options.h:539 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "" #: options.h:551 msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "" #: options.h:574 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "" #: options.h:585 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "" #: options.h:596 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" #: options.h:607 msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" #: options.h:619 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" #: options.h:632 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" #: options.h:644 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" #: options.h:666 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "" #: options.h:688 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "" #: options.h:710 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "" #: options.h:735 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "" #: options.h:765 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "" #: options.h:792 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "" #: options.h:814 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "" #: options.h:836 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "" #: options.h:858 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" #: options.h:881 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" #: options.h:904 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" #: options.h:927 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "" #: options.h:949 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" #: options.h:972 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" #: options.h:1000 msgid "\t-debug - turn on debug mode\n" msgstr "" #: options.h:1030 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "" #: options.h:1042 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "" #: options.h:1053 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "" #: options.h:1064 msgid "\t-adomain $list - list of allowed domains\n" msgstr "" #: options.h:1075 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "" #: options.h:1086 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "" #: options.h:1097 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "" #: options.h:1108 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "" #: options.h:1119 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "" #: options.h:1130 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "" #: options.h:1141 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "" #: options.h:1152 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "" #: options.h:1163 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "" #: options.h:1174 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" #: options.h:1186 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "" #: options.h:1197 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "" #: options.h:1208 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" #: options.h:1220 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" #: options.h:1232 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "" #: options.h:1243 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "" #: options.h:1254 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" #: options.h:1278 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" #: options.h:1305 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" #: options.h:1321 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" #: options.h:1337 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "" #: options.h:1352 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" #: options.h:1368 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "" #: options.h:1380 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "" #: options.h:1391 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" #: options.h:1415 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "" #: options.h:1426 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "" #: options.h:1440 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "" #: options.h:1452 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" #: options.h:1467 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" #: options.h:1480 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "" #: options.h:1494 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "" #: options.h:1506 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" #: options.h:1521 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" #: options.h:1534 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" msgstr "" #: options.h:1555 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" #: options.h:1567 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" #: options.h:1579 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" #: options.h:1594 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" #: options.h:1607 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" #: options.h:1631 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" #: options.h:1655 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" #: options.h:1682 msgid "\t-browser $str - your preferred browser programm\n" msgstr "" #: options.h:1697 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "" #: options.h:1709 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "" #: options.h:1720 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "" #: options.h:1731 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "" #: options.h:1742 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" #: options.h:1754 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" #: options.h:1766 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" #: options.h:1778 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "" #: options.h:1789 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "" #: options.h:1800 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "" #: options.h:1822 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" #: options.h:1847 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" #: options.h:1859 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" #: options.h:1870 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "" #: options.h:1881 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "" #: options.h:1895 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "" #: options.h:1910 msgid "\t-language $str - set language for messages\n" msgstr "" #: options.h:1922 msgid "\t-quiet - don't show output messages\n" msgstr "" #: options.h:1933 msgid "\t-verbose - show output messages (default)\n" msgstr "" #: options.h:1944 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" #: options.h:1956 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" #: options.h:1968 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" #: options.h:1980 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "" #: options.h:1992 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" #: options.h:2015 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" #: options.h:2038 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" #: options.h:2061 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" #: options.h:2084 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" #: options.h:2107 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" #: options.h:2119 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "" #: options.h:2130 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" #: options.h:2153 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" #: options.h:2176 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" #: options.h:2199 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" #: options.h:2222 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "" #: options.h:2233 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" #: options.h:2245 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" #: options.h:2258 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" #: options.h:2274 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "" #: options.h:2286 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" #: options.h:2299 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "" #: options.h:2311 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" #: options.h:2323 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" #: options.h:2335 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "" #: options.h:2346 msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "" #: options.h:2368 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" #: options.h:2392 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" #: options.h:2404 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" #: options.h:2427 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "" #: options.h:2438 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "" #: options.h:2449 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "" #: options.h:2460 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "" #: options.h:2471 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "" #: options.h:2482 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "" #: options.h:2493 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" #: options.h:2516 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" #: options.h:2528 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" #: options.h:2551 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" #: options.h:2575 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" #: options.h:2600 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" #: options.h:2625 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "" #: options.h:2636 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" #: options.h:2660 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" #: options.h:2683 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "" #: options.h:2698 msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr "" #: options.h:2728 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" #: options.h:2761 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "" #: options.h:2777 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" #: options.h:2806 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" #: options.h:2831 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "" #: options.h:2842 msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" #: options.h:2866 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" #: options.h:2882 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" #: options.h:2885 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" #: options.h:2903 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" #: options.h:2931 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "" #: options.h:2942 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "" #: options.h:2956 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "" #: options.h:2987 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "" #: options.h:3002 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "" #: options.h:3014 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "" #: options.h:3026 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" #: options.h:3050 msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" #: options.h:3065 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" #: options.h:3077 msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" #: options.h:3095 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" #: options.h:3109 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "" #: options.h:3124 msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" #: options.h:3152 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" #: options.h:3170 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" #: options.h:3182 msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" #: options.h:3194 msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" #: options.h:3217 msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" #: options.h:3240 msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" #: options.h:3263 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" #: options.h:3286 msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" #: options.h:3311 msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" #: options.h:3338 msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" #: options.h:3354 msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" #: options.h:3370 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" #: options.h:3383 msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" #: options.h:3395 msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" #: options.h:3421 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" #: options.h:3441 msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" #: options.h:3459 msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_user $str\n" "\t - nazwa u¿ytkownika dla uwierzytelniania dostêpu do " "proxy FTP\n" #: options.h:3471 msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_pass $str\n" "\t - has³o uwierzytelniania dostêpu do proxy FTP\n" #: options.h:3483 msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" #: options.h:3506 msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" #: options.h:3519 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" #: options.h:3544 msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" #: options.h:3568 msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" #: options.h:3583 msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "" #: options.h:3595 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3607 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3619 msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" #: options.h:3643 msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" #: options.h:3659 msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" #: options.h:3672 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" #: options.h:3687 msgid "" "\t-nss_cert_dir $dir - set certificate config directory for Netscape NSS\n" msgstr "" #: options.h:3702 msgid "" "\t-nss_accept_unknown_cert/-nonss_accept_unknown_cert\n" "\t - accept SSL server certificates not listed in\n" "\t certificate database\n" msgstr "" #: options.h:3734 msgid "" "\t-nss_domestic_policy/-nss_export_policy\n" "\t - set policy for SSL ciphers in NSS\n" msgstr "" #: options.h:3765 msgid "" "\t-dont_touch_url_rpattern $re\n" "\t - RE pattern of URL which should not be touched\n" "\t by URL rewriting engine\n" msgstr "" #: options.h:3779 msgid "" "\t-dont_touch_url_pattern $list\n" "\t - wilcard patterns of URLs which should not\n" "\t be touched by URL rewriting engine\n" msgstr "" #: options.h:3795 msgid "" "\t-dont_touch_tag_rpattern $re\n" "\t - RE pattern of HTML tag in which URLs should\n" "\t not be touched by URL rewriting engine\n" msgstr "" #: options.h:3809 msgid "" "\t-tag_pattern $tag $attrib $url\n" "\t - wilcard patterns for precise matching of URLs\n" "\t inside HTML tags\n" msgstr "" #: options.h:3825 msgid "" "\t-tag_rpattern $tag $attrib $url\n" "\t - RE patterns for precise matching of URLs\n" "\t inside HTML tags\n" msgstr "" #: pavuk.c:108 msgid "QUIT signal catched\n" msgstr "Przechwycono sygna³ QUIT\n" #: pavuk.c:259 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "Za ma³a ilo¶æ parametrów - \"-msgcat\"\n" #: pavuk.c:273 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "Za ma³a ilo¶æ parametrów - \"-scenario\"\n" #: pavuk.c:303 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "B³±d: Zastosowano z³y desktryptor pliku w opcji -dump_urldf\n" #: pavuk.c:314 msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "B³±d: Zastosowano z³y desktryptor pliku w opcji -dump_urldf\n" #: pavuk.c:364 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "UWAGA: nie okre¶lono scndir - zapisywanie do bie¿±cego katalogu\n" #: pavuk.c:403 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "Nie mo¿na rozwidliæ pavuk w t³o - uruchamianie na wierzchu\n" #: pavuk.c:407 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "Pavuk bêdzie uruchomiony w tle jako PID %d\n" #: pavuk.c:427 #, c-format msgid "reading URLs from file - %s\n" msgstr "czytanie URLi z pliku - %s\n" #: recurse.c:80 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "" #: recurse.c:93 msgid "Running post-processing command\n" msgstr "Uruchamianie polecenia po przetwarzaniu\n" #: recurse.c:241 #, c-format msgid "retry no. %d\n" msgstr "powtórzenie nr %d\n" #: recurse.c:244 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "URL[%2d]: %5d(%d) z %5d %s\n" #: recurse.c:247 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "URL: %5d(%d) z %5d %s\n" #: recurse.c:258 recurse.c:396 msgid "Starting download" msgstr "Rozpoczynanie pobierania" #: recurse.c:286 msgid "Already processed\n" msgstr "Ju¿ przetworzone\n" #: recurse.c:293 msgid "Disallowed by user\n" msgstr "Niedopuszczone przez u¿ytkownika\n" #: recurse.c:307 msgid "Disallowed by rules\n" msgstr "Niedopuszczone przez regu³y\n" #: recurse.c:314 msgid "Checking \"robots.txt\"" msgstr "Sprawdzanie \"robots.txt\"" #: recurse.c:318 msgid "Disallowed by \"robots.txt\"\n" msgstr "Niedopuszczone przez \"robots.txt\"\n" #: recurse.c:328 msgid "This URL type is not supported with ftpdir mode\n" msgstr "Ten typ URL nie jest obs³ugiwany w trybieftpdir\n" #: recurse.c:348 msgid "No transfer - file not expired\n" msgstr "" #: recurse.c:364 #, c-format msgid "Starting time : %s\n" msgstr "Czas rozpoczêcia : %s\n" #: recurse.c:406 recurse.c:565 #, c-format msgid "Ending time : %s\n" msgstr "Czas zakoñczenia : %s\n" #: recurse.c:413 recurse.c:568 msgid "download" msgstr "pobieranie" #: recurse.c:513 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "ostatni dokument zablokowany -> oczekiwanie 5 sekund\n" #: recurse.c:579 msgid "Relocating and scanning HTML document" msgstr "Przenoszenie i skanowanie dokumentu HTML" #: recurse.c:631 msgid "Dumping processed document" msgstr "Zrzucanie przetworzonego dokumentu" #: recurse.c:651 msgid "Storing document" msgstr "Zapamiêtywanie dokumentu" #: recurse.c:657 msgid "Store failed\n" msgstr "B³±d zapamiêtywania\n" #: recurse.c:764 recurse.c:847 msgid "Done" msgstr "Zrobiono" #: recurse.c:924 remind.c:378 msgid "Sleeping ..." msgstr "Oczekiwanie ..." #: recurse.c:938 remind.c:395 msgid "Exiting ..." msgstr "Wychodzenie ..." #: recurse.c:1050 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d bajtów)\n" #: recurse.c:1108 msgid "Searching for files to resume" msgstr "Wyszukiwanie plików do przywrócenia" #: recurse.c:1135 #, c-format msgid "Adding %s to resume list\n" msgstr "Dodawanie %s do listy przywracanych\n" #: recurse.c:1167 msgid "Searching for documents to synchronize" msgstr "Wyszukiwanie dokumentów do synchronizowania" #: recurse.c:1222 recurse.c:1247 #, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "Dodawanie pliku %s do listy synchronizowanych jako URL %s\n" #: remind.c:44 #, c-format msgid "Checking: %s\n" msgstr "Sprawdzanie: %s\n" #: remind.c:169 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "Z³y wpis przypominania db - %s\n" #: remind.c:528 msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "Jest to wynik pray pavuk w trybie przypominania\n" "\n" #: remind.c:539 msgid "Changed URLs\n" msgstr "Zmienione URle\n" #: remind.c:560 msgid "URLs with some errors\n" msgstr "URLe z jakimi¶ b³êdami\n" #: robots.c:162 msgid "transfering \"robots.txt\"" msgstr "transmisja \"robpts.txt\"" #: robots.c:165 msgid "transfering \"robots.txt\"\n" msgstr "transmisja \"robots.txt\"\n" #: robots.c:226 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "Hmm: przekierowanie \"robots.txt\" to %s ???\n" #: stats.c:139 stats.c:222 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "Ca³kowita ilo¶æ URLi w kolejce: %d\n" #: stats.c:140 stats.c:224 #, c-format msgid "Starting urls: %d\n" msgstr "Startowe URLe: %d\n" #: stats.c:143 stats.c:229 msgid "Not processed yet: %d (%3d%%)\n" msgstr "Jeszcze nie przetworzono: %d (%3d%%)\n" #: stats.c:148 stats.c:236 msgid "Processed OK: %d (%3d%%)\n" msgstr "Przetworzono OK: %d (%3d%%)\n" #: stats.c:151 stats.c:242 msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "Wczytano z lokalnego drzewa: %d (%3d%%)\n" #: stats.c:154 stats.c:248 msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "Wczytano z katalogu cache Netscape: %d (%3d%%)\n" #: stats.c:157 stats.c:254 msgid "Downloaded over network: %d (%3d%%)\n" msgstr "Pobrano ponad sieci±: %d (%3d%%)\n" #: stats.c:160 stats.c:260 msgid "Moved to another location: %d (%3d%%)\n" msgstr "Przeniesiono w inne miejsce: %d (%3d%%)\n" #: stats.c:164 stats.c:266 msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "Pobrano obciêtych: %d (%3d%%)\n" #: stats.c:170 stats.c:273 msgid "Non fatal errors: %d (%3d%%)\n" msgstr "B³êdy niefatalne: %d (%3d%%)\n" #: stats.c:176 stats.c:280 msgid "Not found documents: %d (%3d%%)\n" msgstr "Nie znaleziono dokumentów: %d (%3d%%)\n" #: stats.c:182 stats.c:287 msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "Dokument z fatalnymi b³êdami: %d (%3d%%)\n" #: stats.c:188 msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "Dokument z nieznanym stanem: %d (%3d%%)\n" #: stats.c:294 msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "Dokument nieokre¶lonego stanu: %d(%3d%%)\n" #: stats.c:359 msgid "Pavuk: save status page" msgstr "Pavuk: zapisz stronê stanu" #: stats.c:380 stats.c:532 msgid "Not available yet" msgstr "Jeszcze niedostêpne" #: stats.c:461 msgid "Pavuk: status page" msgstr "Pavuk: strona stanu" #: stats.c:478 msgid "Status page" msgstr "Strona stanu" #: stats.c:489 msgid "Save ..." msgstr "Zapisz ..." #: stats.c:496 msgid "Refresh" msgstr "Od¶wie¿" #: stats.c:521 msgid "Try download" msgstr "Próbuj pobieraæ" #: tag_pattern.c:32 msgid "Bad -tag_pattern tag wildcard pattern\n" msgstr "" #: tag_pattern.c:39 msgid "Bad -tag_pattern attribute wildcard pattern\n" msgstr "" #: tag_pattern.c:46 msgid "Bad -tag_pattern url wildcard pattern\n" msgstr "" #: tag_pattern.c:61 msgid "Bad -tag_rpattern tag RE pattern\n" msgstr "" #: tag_pattern.c:63 msgid "Bad -tag_rpattern attribute RE pattern\n" msgstr "" #: tag_pattern.c:65 msgid "Bad -tag_rpattern url RE pattern\n" msgstr "" #: tools.c:110 msgid "no error" msgstr "bez b³êdów" #: tools.c:115 msgid "host not found" msgstr "nie znaleziono hosta" #: tools.c:120 msgid "temporary error (try again later)" msgstr "b³±d tymczasowy (spróbuj pó¼niej)" #: tools.c:125 msgid "non recoverable error" msgstr "b³±d nienaprawialny" #: tools.c:130 msgid "name is valid, but doesn't have an IP address" msgstr "nazwa poprawna, ale nie ma adresu IP" #: tools.c:134 msgid "unknown hostname translation error" msgstr "nieznany b³±d t³umaczenia nazwy hosta" #: tools.c:315 tools.c:339 tools.c:364 tools.c:409 msgid "" "Warning: locking not supported ... don't run multiple processes or threads!\n" msgstr "" #: tools.c:330 tools.c:353 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "oczekiwanie na zwolnienie blokady na FD : %d\n" #: uconfig.c:1035 msgid "Bad parameter - Working subdirectory" msgstr "Z³y parametr - pracuj±cy podkatalog" #: uconfig.c:1161 msgid "Bad parameter - Cache directory" msgstr "Z³y parametr - katalog cache" #: uexit.c:31 msgid "Error occured while executing user-exit script" msgstr "B³±d podczas wykonywania skryptu wyj¶cia u¿ytkownika" #: update_links.c:37 #, c-format msgid "Entering directory %s\n" msgstr "Wchodzenie do katalogu %s\n" #: update_links.c:66 #, c-format msgid "Relocating %s\n" msgstr "Przenoszenie %s\n" #: update_links.c:69 #, c-format msgid "Omitting %s\n" msgstr "Pomijanie %s\n" #: update_links.c:83 #, c-format msgid "Leaving directory %s\n" msgstr "Opuszczanie katalogu %s\n" #: update_links.c:101 #, c-format msgid "Can't open directory %s\n" msgstr "Nie mo¿na otworzyæ katalogu %s\n" #: url.c:1007 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "nieobs³ugiwany typ URL \"%s\"\n" #: url.c:1159 msgid "Moved to already processed URL.\n" msgstr "Przeniesione do przetworzonego ju¿ URL.\n" #: url.c:2775 msgid "Missing specification of URL in request\n" msgstr "Brak okre¶lenia pól ¿±dania dla ¿±dania POST\n" #: url.c:2784 msgid "Missing request fields specification for POST request\n" msgstr "Brak okre¶lenia pól ¿±dania dla ¿±dania POST\n" #: url.c:2792 msgid "Multipart encoding not supported with GET requests\n" msgstr "Kodowanie wieloczê¶ciowe nie obs³ugiwane z ¿±daniami GET\n" #~ msgid "January" #~ msgstr "Styczeñ" #~ msgid "February" #~ msgstr "Luty" #~ msgid "March" #~ msgstr "Marzec" #~ msgid "April" #~ msgstr "Kwiecieñ" #~ msgid "May" #~ msgstr "Maj" #~ msgid "June" #~ msgstr "Czerwiec" #~ msgid "July" #~ msgstr "Lipiec" #~ msgid "August" #~ msgstr "Sierpieñ" #~ msgid "September" #~ msgstr "Wrzesieñ" #~ msgid "October" #~ msgstr "Pa¿dziernik" #~ msgid "November" #~ msgstr "Listopad" #~ msgid "December" #~ msgstr "Grudzieñ" #~ msgid "Sun" #~ msgstr "Nie" #~ msgid "Mon" #~ msgstr "Pon" #~ msgid "Tue" #~ msgstr "Wto" #~ msgid "Wed" #~ msgstr "¦ro" #~ msgid "Thu" #~ msgstr "Czw" #~ msgid "Fri" #~ msgstr "Pi±" #~ msgid "Sat" #~ msgstr "Sob" #~ msgid "Server certificate:\n" #~ msgstr "Certyfikat serewera:\n" #~ msgid "\t subject: %s\n" #~ msgstr "\t temat: %s\n" #~ msgid "%s: ERROR: unable to change directory\n" #~ msgstr "%s: B£¡D: nie mo¿na zmieniæ katalogu\n" pavuk-0.9.35/po/sk.po0000644000175000001440000044616410327675207011276 00000000000000# Slovak message catalog form pavuk web graber. # Copyright (C) 1998-2005 Free Software Foundation, Inc. # Stefan Ondrejicka , 1998-2005. # msgid "" msgstr "" "Project-Id-Version: pavuk-0.9pl32\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-10-26 14:41+0200\n" "PO-Revision-Date: 2005-04-14 22:26+0100\n" "Last-Translator: Stefan Ondrejicka \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: abstract.c:41 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "Pozastavujem prenos na %d sekúnd.\n" #: abstract.c:78 doc.c:539 msgid "File redirect\n" msgstr "Presmerované na súbor\n" #: abstract.c:114 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "Naèítava sa lokálna kópia z NS cache - %s\n" #: abstract.c:146 #, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "Naèítava sa lokálna kópia z Mozilla cache - %s\n" #: abstract.c:180 #, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "Naèítava sa lokálna kópia z MSIE cache - %s\n" #: abstract.c:217 msgid "Unsupported URL\n" msgstr "Nepodporované URL\n" #: abstract.c:306 msgid "Warning: broken ftp transfer ...\n" msgstr "Upozornenie : FTP prenos neprebehol v poriadku\n" #: abstract.c:316 msgid "Error removing FTP document from remote server\n" msgstr "Chyba pri mazaní dokumentu na FTP servery\n" #: abstract.c:364 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "Chyba pri èítaní dokumentu s \"chunked\" kódovaním prenosu!\n" #: ainterface.c:124 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "Ma¾em nepodporovaný typ URL: \"%s\"\n" #: ainterface.c:215 msgid "Specify at least one starting URL!" msgstr "Je potrebné uvies» aspoò jedno ¹tartovacie URL!" #: ainterface.c:217 msgid "Specify at least one starting URL!\n" msgstr "Je potrebné uvies» aspoò jedno ¹tartovacie URL!\n" #: ainterface.c:562 msgid "Can't list available message catalogs\n" msgstr "Nieje mo¾né nájs» dostupné katalógy správ\n" #: authinfo.c:105 msgid "Bad section - specify protocol\n" msgstr "Chybný záznam - je potrebné uvies» protokol\n" #: authinfo.c:110 msgid "Bad section - specify hostname\n" msgstr "Chybný záznam - je potrebné uvies» meno servera\n" #: authinfo.c:159 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "Chybná fráza : \"%s\"\n" #: authinfo.c:178 #, c-format msgid "Bad protocol - %s\n" msgstr "Chybný protokol : \"%s\"\n" #: authinfo.c:189 #, c-format msgid "Bad port number %s\n" msgstr "Chybné èíslo portu : %s\n" #: authinfo.c:210 #, c-format msgid "Unknown auth type - %s\n" msgstr "Neznámy typ autenfikácie - %s\n" #: cleanup.c:65 #, c-format msgid "press any key to exit\n" msgstr "Ak chce¹ program ukonèi» stlaè nejakú klávesu\n" #: cmdparse.c:121 #, c-format msgid "Error parsing commandline at: %s\n" msgstr "Chyba pri spracovaní príkazového riadku: %s\n" #: cmdparse.c:177 #, c-format msgid "Unable to parse commandline: %s\n" msgstr "Nespracovateµný príkazový riadok : %s\n" #: config.c:46 msgid "Level order" msgstr "Po úrovniach" #: config.c:47 msgid "Level order, inline first" msgstr "Po úrovniach, najskôr inline objekty" #: config.c:48 msgid "Pre order" msgstr "V poradí" #: config.c:49 msgid "Pre order, inline first" msgstr "V poradí, najskôr inline objekty" #: config.c:115 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "Pou¾itie: %s [parametre] [µubovoµny poèet URL]\n" "pavuk-%s %s\n" #: config.c:133 #, c-format msgid "Type \"%s --help\" for long help\n" msgstr "Napí¹ \"%s --help\" a obdr¾í¹ kompletný zoznam prepínaèov\n" #: config.c:141 msgid "Optional features available :\n" msgstr "Dostupné voliteµné funkcie a vlastnosti :\n" #: config.c:143 msgid " - Debug mode\n" msgstr " - Ladiaci mód\n" #: config.c:147 msgid " - GNU gettext internationalization of messages\n" msgstr " - internacianalizácia správ pomocou balíka GNU gettext\n" #: config.c:151 msgid " - flock() document locking\n" msgstr " - uzamykanie dokumentov pomocou funkcie flock()\n" #: config.c:155 msgid " - fcntl() document locking\n" msgstr " - uzamykanie dokumentov pomocou funkcie fcntl()\n" #: config.c:160 msgid " - Gtk GUI interface\n" msgstr " - grafické pou¾ívateµské rozhranie GTK\n" #: config.c:163 msgid " - URL tree preview\n" msgstr " - Prehµad URL stromu\n" #: config.c:168 msgid " - HTTP and FTP over SSL\n" msgstr " - HTTP a FTP protocol cez SSL\n" #: config.c:179 #, c-format msgid " - SSL layer implemented with %s library\n" msgstr "- SSL protokol implementovaný kni¾nicou %s\n" #: config.c:184 msgid " - Socks v4 proxy support\n" msgstr " - podpora SOCKS v4 proxy\n" #: config.c:186 msgid " - Socks v5 proxy support\n" msgstr " - podpora SOCKS v5 proxy\n" #: config.c:190 msgid " - filesystem free space checking\n" msgstr " - s kontrolou voµného miesta v súborovom systéme\n" #: config.c:196 msgid " - optional regex patterns in -fnrules and -*rpattern options\n" msgstr "" " - s voliteµnými regulárnymi výrazmi vo voµbách -fnrules a -*rpattern\n" #: config.c:200 msgid " - POSIX regexp\n" msgstr " - s POSIX regulárnymi výrazmi\n" #: config.c:204 msgid " - Bell V8 regexp\n" msgstr " - s Bell V8 regulárnymi výrazmi\n" #: config.c:208 msgid " - BSD regexp\n" msgstr " - s BSD regulárnymi výrazmi\n" #: config.c:212 msgid " - GNU regexp\n" msgstr " - s GNU regulárnymi výrazmi\n" #: config.c:216 msgid " - PCRE regexp\n" msgstr " - s PCRE regulárnymi výrazmi\n" #: config.c:221 msgid " - support for loading files from Netscape browser cache\n" msgstr " - s podporov naèítavania súborov z diskovej cache Netscape browsera\n" #: config.c:227 msgid " - support for detecting whether pavuk is running as background job\n" msgstr " - s podporov kontroly behu na pozadí\n" #: config.c:231 msgid " - multithreading support\n" msgstr " - s podporov multithreadingu\n" #: config.c:235 msgid " - NTLM authorization support\n" msgstr " - s podporou NTLM autorizácie\n" #: config.c:239 msgid " - JavaScript bindings\n" msgstr " - s JavaScrip interpreterom\n" #: config.c:243 msgid " - IPv6 support\n" msgstr " - s podporou IPv6\n" #: config.c:315 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "HTML znaèka nie je podporovaná : %s.%s\n" #: config.c:722 msgid "Error parsing commandline\n" msgstr "Chyba pri spracovaní príkazového riadku\n" #: config.c:730 #, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "Nedostaèujúci poèet parametrov pre voµbu \"-%s\"\n" #: config.c:738 #, c-format msgid "Unknown option %s\n" msgstr "Neznáma voµba %s\n" #: config.c:745 #, c-format msgid "Wrong format of option %s\n" msgstr "Chybný formát voµby %s\n" #: config.c:756 config.c:1169 #, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "" "Upozornenie: voµba \"-%s\" nie je v aktuálnej konfigurácii podporovaná\n" #: config.c:771 #, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "Je potrebné uvies» èíslo pri parametri \"-%s\"\n" #: config.c:791 config.c:1228 #, c-format msgid "Invalid port range \"%s\"\n" msgstr "Chybný rozsah portov : \"%s\"\n" #: config.c:849 config.c:1271 http_proxy.c:114 #, c-format msgid "Unknown port \"%s\"\n" msgstr "Neznámy port \"%s\"\n" #: config.c:867 config.c:1285 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "Chybná autorizaèná schéma \"%s\"\n" #: config.c:877 config.c:1295 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "Neznámy mód \"%s\"\n" #: config.c:901 #, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "Je potrebné uvies» èíslo pri parametri \"-%s\"\n" #: config.c:927 #, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "Je potrebné uvies» správny typ podmienky pri parametri \"-%s\" (%s)\n" #: config.c:947 #, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "Je potrebné uvies» správny regulárny výraz pri parametri \"-%s\"\n" #: config.c:960 config.c:1414 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "Naznáma stratégia radenie URL - \"%s\"\n" #: config.c:969 config.c:1426 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "Neznáma verzia SSL protokolu - \"%s\"\n" #: config.c:978 config.c:1438 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "Chybna doplnková polo¾ka HTTP hlavièky - \"%s\"\n" #: config.c:1003 config.c:1463 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "Chybná ¹pecifikácia po¾iadavky - \"%s\"\n" #: config.c:1068 #, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "Chybný parameter pre voµbu \"-%s\"\n" #: config.c:1086 #, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "Chybný parameter èíselného zoznamu \"%s\" pre voµbu \"-%s\"\n" #: config.c:1105 #, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "" "Chybný parameter prihlasovacej procedúry pre FTP server\n" " - \"%s\" pre voµbu \"-%s\"\n" #: config.c:1195 #, c-format msgid "Please specify number \"%s\"\n" msgstr "Je potrebné uvies» èíselný parameter \"%s\"\n" #: config.c:1215 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "Iba \"true\" a \"false\" je povolené: \"%s\"\n" #: config.c:1306 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "Zlý parameter èasu \"%s\"\n" #: config.c:1337 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "Je potrebné uvies» èíselný parameter \"%s\"\n" #: config.c:1355 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "Je potrebné uvies» správne parametre \"%s\"\n" #: config.c:1369 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "Je potrebné uvies» správny typ podmienky pri parametri \"%s\" (%s)\n" #: config.c:1398 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "Je potrebné uvies» správny regulárny výraz \"%s\"\n" #: config.c:1512 #, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "Chybná ¹pecifikácia parametra pre js_transform - \"%s\"\n" #: config.c:1535 #, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "Chybná ¹pecifikácia èíselného zoznamu - \"%s\"\n" #: config.c:1551 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "Chybná ¹pecifikácia prihlasovacej procedúry pre FTP server \"%s\".\n" #: config.c:1601 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "Nie je mo¾né spracova» \"%s\"\n" #: config.c:1641 #, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "Chyba: neúspe¹né naèítanie scenára (%s)\n" #: cookie.c:322 #, c-format msgid "Unable to parse : %s\n" msgstr "Nespracovateµný záznam : %s\n" #: cookie.c:463 msgid "Cookie file format not supported for writing.\n" msgstr "Formát súboru s Cookies nepodporuje zápis.\n" #: cookie.c:468 msgid "Updating cookie file\n" msgstr "Obnovuje sa súbor cookies\n" #: cookie.c:498 msgid "Cookie file has changed - > synchronizing\n" msgstr "Súbor cookes bol zmenený -> nasleduje synchronizácia\n" #: cookie.c:644 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "Server %s sa pokú¹a nastavi» cookie pre doménu %s\n" #: cookie.c:656 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "Ma¾e sa záznam cookie zo zakázanej domény %s\n" #: debugl.c:15 msgid "HTML parsers" msgstr "HTML analyzátor" #: debugl.c:16 msgid "Server responses" msgstr "Odpovede serverov" #: debugl.c:17 msgid "Client requests" msgstr "Po¾iadavky na servery" #: debugl.c:18 msgid "Procedure calling" msgstr "Volanie procedúr" #: debugl.c:19 msgid "File locking" msgstr "Uzamykanie súborov" #: debugl.c:20 msgid "Networking code" msgstr "Sie»ové rutiny" #: debugl.c:21 msgid "Miscelanous" msgstr "Rôzne iné" #: debugl.c:22 msgid "Extended user infos" msgstr "Roz¹írené informácie pre pou¾ívaµa" #: debugl.c:23 msgid "Multithreading - locking" msgstr "Multithreading - uzamykanie" #: debugl.c:24 msgid "Multithreading - threads" msgstr "Multithreading - thready" #: debugl.c:25 msgid "POST request data" msgstr "Dáta POST po¾iadaviek" #: debugl.c:26 msgid "Limiting conditions" msgstr "Obmedzujúce podmienky" #: debugl.c:27 msgid "SSL informations" msgstr "SSL informácie" #: debugl.c:65 #, c-format msgid "Bad debug level selection : %s\n" msgstr "Chybný výber úrovne ladenia : %s\n" #: decode.c:285 msgid "decode" msgstr "dekódovanie" #: digest_auth.c:145 msgid "Trying to do HTTP Digest authorization\n" msgstr "Pokus o HTTP Digest autorizáciu\n" #: digest_auth.c:190 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "Pokus o HTTP proxy Digest autorizáciu\n" #: dinfo.c:406 dinfo.c:426 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr "Chyba pri spracovávaní polo¾ku .pavuk_info súboru: %s\n" #: doc.c:289 msgid "Transfering data" msgstr "Prenos údajov" #: doc.c:303 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt: SO_RCVBUF bolo neúspe¹né" #: doc.c:323 msgid "storing document" msgstr "ukladanie dokumentu" #: doc.c:398 msgid "Document transfer data" msgstr "Prenos dát dokumentu" #: doc.c:417 msgid "Data transfer done" msgstr "Prenos dát bol ukonèený" #: doc.c:588 #, c-format msgid "Trying to resume from position %d\n" msgstr "Pokus dokonèi» prenos od pozície %d\n" #: doc.c:650 msgid "Opening connection" msgstr "Otvára sa spojenie" #: doc.c:679 msgid "Loading local copy\n" msgstr "Naèítava sa lokálna kópia\n" #: doc.c:917 msgid "File may be truncated\n" msgstr "Súbor mo¾e by» neúplný\n" #: doc.c:939 doc.c:952 msgid "Decoding document - OK\n" msgstr "Dekódovanie dokumentu - v poriadku\n" #: doc.c:942 msgid "Decoding document - failed\n" msgstr "Dekódovanie dokumentu - neúspe¹né\n" #: doc.c:956 msgid "Deflating document - failed\n" msgstr "Dekódovanie dokumentu - neúspe¹né\n" #: doc.c:960 msgid "Unsupported document encoding\n" msgstr "Nepodporované kódovanie dokumentov\n" #: doc.c:966 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "Dokument je zakódovaný, ale odkódovanie nebolo povolené\n" #: doc.c:1157 #, c-format msgid "Removing improper document : %s\n" msgstr "Ma¾e sa neaktuálny dokument : %s\n" #: doc.c:1220 doc.c:1287 msgid "Local file" msgstr "Lokálny súbor" #: doc.c:1226 msgid "Gopher/Text File" msgstr "Gopher/Textový subor" #: doc.c:1229 msgid "Gopher/Directory" msgstr "Gopher/Adresár" #: doc.c:1232 msgid "Gopher/CSO phone book" msgstr "Gopher/CSO telefónny zoznam" #: doc.c:1235 msgid "Gopher/Error" msgstr "Gopher/Chyba" #: doc.c:1238 msgid "Gopher/BINHEX" msgstr "Gopher/BINHEX" #: doc.c:1241 msgid "Gopher/DOS bin" msgstr "Gopher/DOS bin" #: doc.c:1244 msgid "Gopher/UUencoded" msgstr "Gopher/UUencoded" #: doc.c:1247 msgid "Gopher/Search index" msgstr "Gopher/Vyhµadávací index" #: doc.c:1250 msgid "Gopher/Telnet session" msgstr "Gopher/Telnet sedenie" #: doc.c:1253 msgid "Gopher/bin" msgstr "Gopher/bin" #: doc.c:1256 msgid "Gopher/Duplicated server" msgstr "Gopher/Redundantný server" #: doc.c:1259 msgid "Gopher/TN3270" msgstr "Gopher/TN3270" #: doc.c:1262 msgid "Gopher/GIF" msgstr "Gopher/GIF obrázok" #: doc.c:1265 msgid "Gopher/Image" msgstr "Gopher/Obrázok" #: doc.c:1271 msgid "FTP/Directory" msgstr "FTP/Adresár" #: doc.c:1273 msgid "FTP/File" msgstr "FTP/Súbor" #: doc.c:1277 msgid "FTPS/Directory" msgstr "FTPS/Adresár" #: doc.c:1279 msgid "FTPS/File" msgstr "FTPS/Súbor" #: doc.c:1282 msgid "Unsupported type" msgstr "Nepodporovaný typ" #: doc.c:1476 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s]" msgstr "V: %s [R: %s] [UÈ: %s] [ZÈ: %s]" #: doc.c:1479 #, c-format msgid "S: %s [R: %s] [ET: %s]" msgstr "V: %s [R: %s] [UÈ: %s]" #: doc.c:1517 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "Èakám na uvolnenie uzamknutého súboru: %s\n" #: doc.c:1784 msgid "Rewriting links inside parent documents" msgstr "Prepisovanie odkazov v rodièovskom dokumente" #: errcode.c:17 #, c-format msgid "%s: user break\n" msgstr "%s: preru¹ené pou¾ívateµom\n" #: errcode.c:24 #, c-format msgid "%s: OK\n" msgstr "%s: OK\n" #: errcode.c:27 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s: Chyba: ukladanie dokumentu\n" #: errcode.c:30 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s: Chyba: otváranie súboru\n" #: errcode.c:35 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "%s: Chyba: URL lokálneho adresára nie je podporované\n" #: errcode.c:38 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s: Chyba: neznáma\n" #: errcode.c:41 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s: Chyba: dokument je uzamknutý\n" #: errcode.c:44 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s: Chyba: èítanie soketu\n" #: errcode.c:47 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s: Správa: dokument je väè¹í ako maximálna povolená veµkos»\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "%s: Správa: URL vylúèené pou¾ívateµovým skriptom\n" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s: Správa: dokument je men¹í ako minimálna povolená veµkos»\n" #: errcode.c:59 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s: Správa: tento MIME typ nie je povolený (%s)\n" #: errcode.c:63 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s: Chyba: chyba pri komunikácii s proxy serverom\n" #: errcode.c:66 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s: Chyba: prenos ukonèený pou¾ívateµom\n" #: errcode.c:71 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "" "%s: Správa: èas modifikácie dokumentu je mimo ¹pecifikovaného intervalu\n" #: errcode.c:75 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s: Chyba: súbor má nulovú dµ¾ku - pravdepodobne nastala chyba\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s: Správa: dokument bol u¾ zpracovaný\n" #: errcode.c:82 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s: Správa: spracovanie dokumentom bolo zakázané pou¾ívateµom\n" #: errcode.c:86 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "%s: Správa: dokument bol vyradený na základe obmedzujúcich podmienok\n" #: errcode.c:90 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "%s: Správa: prenosová rýchlos» klesla pod minimálnu stanovenú\n" #: errcode.c:96 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "" "%s: Správa: veµkos» dokumentu dosiahla maximálnu povolenú,\n" " zvy¹ok dokumentu bude odrezaný\n" #: errcode.c:101 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "" "%s: Správa: bol prekroèený maximálny povolený objem dát, prenos\n" " dát bude preru¹ený\n" #: errcode.c:106 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "" "%s: Chyba: súborový systém je zaplnený po únosnú hranicu, prenos\n" " dát bude preru¹ený\n" #: errcode.c:112 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "" "%s: Správa: program prekroèil maximálny povolený èas behu,\n" " prenos bude preru¹ený\n" #: errcode.c:116 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s: Chyba: neznáma chyba vo FTP protokole\n" #: errcode.c:120 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s: Chyba: FTP server nepodporuje príkaz REST\n" #: errcode.c:124 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s: Chyba: nie je mo¾né získa» obsah FTP adresára\n" #: errcode.c:127 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s: Chyba: nie je mo¾né otvori» spojenie s FTP serverom\n" #: errcode.c:130 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s: Chyba: FTP autentifikácia - chybné meno pou¾ívateµa\n" #: errcode.c:134 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s: Chyba: FTP autentifikácia - chybné heslo\n" #: errcode.c:139 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "%s: Chyba: FTP proxy autentifikácia - chybné meno pou¾ívateµa\n" #: errcode.c:143 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s: Chyba: FTP proxy autentifikácia - chybné heslo\n" #: errcode.c:146 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s: Chyba: nie je mo¾né otvori» dátové spojenie s FTP serverom\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s: Chyba: nie je mo¾né prenies» súbor z FTP servera\n" #: errcode.c:155 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s: ERROR: FTP server nepodporuje príkaz MDTM\n" #: errcode.c:158 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s: Chyba: súbor z FTP servera nebol prenesený kompletný\n" #: errcode.c:163 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s: Správa: dokument nieje potrebné znovu prená¹a», je aktuálny\n" #: errcode.c:168 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s: Správa: FTP prenos nie je povolený podµa pravidiel\n" #: errcode.c:174 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "" "%s: Upozornenie: prenos obsahu FTP adresára nie je povolený (-FTPdir)\n" #: errcode.c:178 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "" "%s: Upozornenie: prihlasovacia procedura pre FTP server bola neúspe¹ná\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s: Chyba: neznáma chyba HTTP protokolu\n" #: errcode.c:184 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s: Chyba: nie je mo¾né otvori» spojenie s HTTP serverom\n" #: errcode.c:189 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "%s: Chyba: HTTP server nepodporuje èiastoèný prenos obsahu súboru\n" #: errcode.c:193 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "%s: Chyba: chybná HTTP po¾iadavka\n" #: errcode.c:196 #, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%s: Chyba: nie je mo¾né preèíta» HTTP odpoveï\n" #: errcode.c:201 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "" "%s: Chyba: neoèakávana odpoveï HTTP servera pri pokuse o nadviazanie\n" "preru¹eného prenosu\n" #: errcode.c:206 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "%s: Chyba: nie je mo¾né odosla» HTTP po¾iadavku\n" #: errcode.c:209 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s: Správa: presmerovanie na iné URL\n" #: errcode.c:213 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s: Chyba: HTTP dokument je neúplný\n" #: errcode.c:216 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s: CHYBA: cyklické presmerovanie!\n" #: errcode.c:219 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s: Chyba: presmerovanie na nepodporovaný typ URL\n" #: errcode.c:222 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s: Chyba: nie je mo¾né otvori» spojenie s proxy serverom\n" #: errcode.c:227 #, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "%s: Chyba: sever poslal chybnú po¾iadavku na presmerovanie\n" #: errcode.c:231 #, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "" "%s: Chyba: nie je mo¾né prihlási» sa na server pomocou NTLM autorizacie\n" #: errcode.c:234 #, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "" "%s: Chyba: nie je mo¾né prihlási» sa na server pomocou HTTP Digest " "autorizacie\n" #: errcode.c:238 #, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "" "%s: Chyba: nie je mo¾né prihlási» sa na proxy server pomocou NTLM " "autorizacie\n" #: errcode.c:243 #, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "" "%s: Chyba: nie je mo¾né prihlási» sa na proxy server pomocou HTTP Digest " "autorizacie\n" #: errcode.c:247 #, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s: Chyba: HTTP klient zaslal nesprávnu po¾iadavku\n" #: errcode.c:250 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s: Chyba: je po¾adovaná HTTP autentikácia\n" #: errcode.c:253 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s: Chyba: je po¾adovaná HTTP autentikácia proxy serverom\n" #: errcode.c:257 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "%s: Chyba: HTTP - platená slu¾ba\n" #: errcode.c:260 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "%s: Chyba: zakázaná HTTP po¾iadavka\n" #: errcode.c:263 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s: Chyba: HTTP dokument nebol nájdený\n" #: errcode.c:266 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s: Chyba: chyba HTTP servera\n" #: errcode.c:271 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "%s: Chyba: HTTP server poslal odpoveï - timeout spojenia\n" #: errcode.c:276 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "%s: Chyba: HTTP server poslal odpoveï - konflikt\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s: Chyba: dokument bol zmazaný z HTTP servera\n" #: errcode.c:284 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "%s: Chyba: toto URL vy¾aduje prístup cez proxy server\n" #: errcode.c:288 #, c-format msgid "%s: ERROR: 306\n" msgstr "%s: Chyba: HTTP 306\n" #: errcode.c:293 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" "%s: Chyba: pou¾itá HTTP metóda nie je podporovaná alebo povolená pre toto " "URL\n" #: errcode.c:299 #, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "%s: Chyba: HTTP klient odmietol MIME typ aktuálneho URL\n" #: errcode.c:304 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "%s: Chyba: v po¾iadvke chýba hlavièka Content-Length:\n" #: errcode.c:310 #, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "%s: Chyba: predpoklady neboli splenené pre aktuálne URL\n" #: errcode.c:314 #, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s: Chyba: telo správy je príli¹ veµké\n" #: errcode.c:317 #, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s: Chyba: príli¹ dlhé URL\n" #: errcode.c:321 #, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "" "%s: Chyba: dokument je vo formáte, ktorý nie je podporovaný pre tento typ " "po¾iadavky\n" #: errcode.c:325 #, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s: Chyba: chybný interval pre tento dokument\n" #: errcode.c:329 #, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "%s: Chyba: nie je mo¾né splni» podmienky z po¾iadavky\n" #: errcode.c:335 #, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "%s: Chyba: metóda nie je podporovaná HTTP serverom\n" #: errcode.c:339 #, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s: Chyba: chyba pri prenose dokumentu cez gateway\n" #: errcode.c:344 #, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "%s: Chyba: HTTP server nie je momentálne dostupný, skús neskôr\n" #: errcode.c:350 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "%s: Chyba: nastal timeout v komunikácii medzi bránou a serverom\n" #: errcode.c:356 #, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "%s: Chyba: pou¾itá verzia HTTP protokolu nie je podporovaná serverom\n" #: errcode.c:360 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s: Chyba: nie je mo¾né otvori» spojenie s GOPHER serverom\n" #: errcode.c:364 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%s: Chyba: neznáma chyba GOPHER protokolu\n" #: errcode.c:367 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s: Chyba: nie je mo¾né otvori» spojenie s HTTPS serverom\n" #: errcode.c:373 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "%s: Chyba: nie je mo¾né otvori» SSL spojenie s FTPS serverom\n" #: errcode.c:378 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s: Chyba: FTP server nepodporuje SSL spojenia\n" #: errcode.c:384 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "%s: Chyba: nie je mo¾né otvori» SSL dátové spojenie s FTPS serverom\n" #: errcode.c:388 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s: Chyba: neznámy chybový kód : %d\n" #: file.c:30 msgid "Can't open directory\n" msgstr "Nie je mo¾né otvori» adresár\n" #: form.c:1080 form.c:1143 form.c:1299 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "Nepodporovaný prvok formulára v kontexte: %d\n" #: form.c:1384 msgid "Browse" msgstr "Prehµad" #: form.c:1398 msgid "URLs with forms" msgstr "Dokumenty s formulármi" #: form.c:1408 msgid "Refresh URL list" msgstr "Aktualizuj zoznam URL" #: form.c:1444 form.c:1449 url.c:1199 msgid "unknown" msgstr "neznámy" #: form.c:1593 msgid "Pavuk: load form file" msgstr "Pavúk: naèítaj súbor s formulármi" #: form.c:1616 msgid "Fill forms" msgstr "Formulár" #: form.c:1623 msgid "Form number: " msgstr "Èíslo formulára: " #: form.c:1637 msgid "Action URL: " msgstr "URL akcie formulára: " #: form.c:1648 gui_common.c:686 msgid "Request method: " msgstr "Metóda po¾iadavky: " #: form.c:1659 gui_common.c:707 gui_tree.c:118 msgid "Request encoding: " msgstr "Kódovanie po¾iadavky: " #: form.c:1670 msgid "HTML form content" msgstr "Obsah HTML formulára" #: form.c:1685 msgid "Load HTML file ..." msgstr "Naèítaj HTML súbor ..." #: form.c:1738 msgid "Pavuk: HTML forms editor" msgstr "Pavúk: Editor HTML formulárov" #: form.c:1760 gui_jscons.c:185 msgid "Close" msgstr "Zatvor" #: ftp.c:95 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "ftp_get_response: riadiace ftp spojenie bolo ukonèené bez odpovede\n" #: ftp.c:173 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "ftp: setsockopt TOS - THROUGHPUT nebolo úspe¹né" #: ftp.c:267 ftp.c:290 ftp.c:330 #, c-format msgid "Error parsing FTP response to %s command - %s\n" msgstr "Chyba pri spracovaní odpovede FTP servra na príkaz %s - %s\n" #: ftp.c:662 msgid "Re-using established FTP control connection\n" msgstr "Ïal¹ie pou¾itie riadiaceho FTP spojenia\n" #: ftp.c:884 http.c:1462 msgid "Size differs, regeting whole\n" msgstr "Lí¹i sa veµkos» - prenos ¹tartuje od zaèiatku\n" #: ftp.c:895 http.c:1346 http.c:1472 msgid "Modified from last download - regeting whole\n" msgstr "" "Dokument bol modifikovaný od posledného pokusu o prenos - prenos od " "zaèiatku\n" #: ftp.c:992 msgid "" "Warning: FTP server understands REST command, but can't handle it properly.\n" msgstr "Upozornenie: FTP server podporuje príkaz REST, ale nesprávne.\n" #: ftp.c:1236 ftp.c:1683 #, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%hu%s\n" "\n" "\n" "

                                                      List of FTP directory %s://%s:%hu/%s


                                                        " msgstr "" "\n" "\n" "\n" "FTP adresár %s://%s:%hu%s\n" "\n" "\n" "

                                                        List of FTP directory %s://%s:%hu/%s


                                                          " #: ftp.c:1758 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" "CHYBA: nie je mo¾né spracova» riadok výpisu FTP adresára :\n" "\t%s\n" #: ftp.c:1942 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "Vytvára sa symbolická linka \"%s\" ukazújúca na \"%s\"\n" #: gauthinfo.c:101 msgid "Pavuk: Save auth. info file" msgstr "Pavúk: Ulo¾ informácie o autorizácii" #: gauthinfo.c:150 msgid "Pavuk: Load auth. info file" msgstr "Pavúk: Naèítaj informácie o autorizácii" #: gauthinfo.c:328 msgid "Pavuk: Authorization info editor" msgstr "Pavúk: Editor autorizaèných informácií" #: gauthinfo.c:345 msgid "Protocol" msgstr "Protokol" #: gauthinfo.c:346 gui_common.c:1855 msgid "Host" msgstr "Server" #: gauthinfo.c:347 msgid "User" msgstr "Pou¾ívateµ" #: gauthinfo.c:348 msgid "Password" msgstr "Heslo" #: gauthinfo.c:349 msgid "Base dir." msgstr "Základný adresár" #: gauthinfo.c:350 msgid "Realm" msgstr "Oblas»" #: gauthinfo.c:351 msgid "Scheme" msgstr "Schéma" #: gauthinfo.c:376 msgid "Protocol: " msgstr "Protokol: " #: gauthinfo.c:403 gui_common.c:1872 gui_common.c:1932 gui_common.c:1955 #: gui_common.c:1984 msgid "Host: " msgstr "Server: " #: gauthinfo.c:414 msgid "User: " msgstr "Pou¾ívateµ: " #: gauthinfo.c:425 gui_common.c:2148 gui_common.c:2200 gui_common.c:2225 msgid "Password: " msgstr "Heslo: " #: gauthinfo.c:436 msgid "Base directory: " msgstr "Základný adresár: " #: gauthinfo.c:447 msgid "Realm: " msgstr "Oblas»: " #: gauthinfo.c:469 gui_common.c:2092 msgid "User auth. scheme" msgstr "User autor. schéma" #: gauthinfo.c:475 msgid "Base auth. scheme" msgstr "Base autor. schéma" #: gauthinfo.c:481 gui_common.c:2094 msgid "Digest auth. scheme" msgstr "Digest autor. schéma" #: gauthinfo.c:488 gui_common.c:2096 msgid "NTLM auth. scheme" msgstr "NTLM autor. schéma" #: gauthinfo.c:500 gui_addurl.c:156 gui_common.c:620 gui_common.c:763 #: gui_common.c:943 gui_common.c:1032 gui_common.c:1882 gui_common.c:2680 #: gui_common.c:2933 gui_limits.c:655 gui_tools.c:669 msgid "Append" msgstr "Pripoj" #: gauthinfo.c:508 gui_common.c:631 gui_common.c:770 gui_common.c:954 #: gui_common.c:1039 gui_common.c:1888 gui_common.c:2686 gui_common.c:2939 #: gui_limits.c:661 gui_tools.c:690 msgid "Modify" msgstr "Zmeò" #: gauthinfo.c:516 gui_common.c:639 gui_common.c:962 gui_common.c:1894 #: gui_common.c:2692 gui_common.c:2945 gui_limits.c:667 gui_tools.c:703 msgid "Clear" msgstr "Vyma¾" #: gauthinfo.c:524 gui_common.c:647 gui_common.c:777 gui_common.c:970 #: gui_common.c:1046 gui_common.c:1900 gui_common.c:2698 gui_common.c:2951 #: gui_limits.c:673 gui_tools.c:716 msgid "Delete" msgstr "Zma¾" #: gauthinfo.c:537 gui_common.c:3033 gui_limits.c:741 gui_sched.c:122 #: gui_tools.c:262 msgid "OK" msgstr "OK" #: gauthinfo.c:548 gui_common.c:3041 gui_limits.c:749 msgid "Apply" msgstr "Pou¾i" #: gauthinfo.c:556 msgid "Load" msgstr "Naèítaj" #: gauthinfo.c:564 msgid "Save" msgstr "Ulo¾" #: gauthinfo.c:575 gui_about.c:71 gui_addurl.c:164 gui_common.c:3055 #: gui_limits.c:763 gui_sched.c:130 gui_tools.c:270 gui_tree.c:601 #: gui_tree.c:724 stats.c:502 msgid "Cancel" msgstr "Zru¹" #: gkeys.c:69 gkeys.c:86 gkeys.c:98 #, c-format msgid "Unable to parse: %s\n" msgstr "Nespracovateµný záznam : %s\n" #: gkeys.c:120 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "Nie je mo¾né vytvori» súbor ~/.pavuk_keys\n" #: gkeys.c:126 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# Tento súbor vygeneroval program %s\n" "# Mo¾ete ho editova», ale budte opatrný!\n" "\n" #: gopher.c:66 msgid "********************* Gopher request **************\n" msgstr "********************* Gopher request **************\n" #: gopher.c:104 #, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%hu/%s\n" "\n" "\n" "

                                                          Directory of gopher://%s:%hu/%s



                                                            " msgstr "" "\n" "\n" "\n" "Gopher adresá gopher://%s:%hu/%s\n" "\n" "\n" "

                                                            Directory of gopher://%s:%hu/%s



                                                              " #: gopher.c:153 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" "Chyba pri spracovaní polo¾ky Gopher adresára:\n" "%s\n" #: gui_about.c:38 msgid "Pavuk: About" msgstr "Pavúk: O aplikácii" #: gui_about.c:61 #, c-format msgid "" "Pavuk %s %s\n" "\n" "an automatic WEB file grabber\n" "\n" "By Stefan Ondrejicka\n" "\n" "URL: http://pavuk.sourceforge.net/\n" msgstr "" "Pavuk %s %s\n" "\n" "automatický s»ahovaè WEB-ovských dokumentov\n" "\n" "vytvoril ©tefan Ondrejièka a spol.\n" "\n" "URL: http://pavuk.sourceforge.net/\n" #: gui_api.c:160 #, c-format msgid "Processed: %5ld" msgstr "Spracované: %5ld" #: gui_api.c:162 #, c-format msgid "Queued: %5ld" msgstr "Vo fronte: %5ld" #: gui_api.c:164 #, c-format msgid "Failed: %4ld" msgstr "S chybou: %4ld" #: gui_api.c:166 #, c-format msgid "Rejected: %5ld" msgstr "Vylúèené: %5ld" #: gui_api.c:360 msgid "Start" msgstr "©tart" #: gui_api.c:474 msgid "Starting ..." msgstr "©tart ..." #: gui_api.c:534 msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "Príli¹ veµká hodnota pre timeout funkie connect() v GUI rozhraní\n" #: gui_addurl.c:66 gui_main.c:236 #, c-format msgid "Dropped URL : %s\n" msgstr "Dropnuté URL %s\n" #: gui_addurl.c:119 msgid "Pavuk: Append URL" msgstr "Pavúk: Pridaj URL" #: gui_addurl.c:131 msgid "New URL:" msgstr "Nové URL: " #: gui_common.c:570 gui_common.c:587 gui_main.c:732 msgid "URL" msgstr "URL" #: gui_common.c:589 msgid "Local filename" msgstr "Lokálne meno" #: gui_common.c:606 msgid "Request URL: " msgstr "URL po¾iadavky: " #: gui_common.c:610 msgid "Local filename: " msgstr "Lokálne meno: " #: gui_common.c:667 msgid "Extended informations for HTTP POST request" msgstr "Roz¹írené informácie pre po¾iadavku" #: gui_common.c:728 gui_common.c:997 msgid "Query fields: " msgstr "Polo¾ky po¾iadavky: " #: gui_common.c:744 gui_common.c:1013 gui_common.c:2623 gui_limits.c:559 msgid "Type" msgstr "Typ" #: gui_common.c:746 gui_common.c:1015 msgid "Name" msgstr "Názov" #: gui_common.c:748 gui_common.c:1017 msgid "Value" msgstr "Hodnota" #: gui_common.c:788 gui_common.c:1057 msgid "Type: " msgstr "Typ: " #: gui_common.c:820 gui_common.c:1089 msgid "Name: " msgstr "Názov: " #: gui_common.c:822 gui_common.c:1091 msgid "Value: " msgstr "Hodnota: " #: gui_common.c:854 gui_common.c:1123 msgid "Pavuk: Choose form field file" msgstr "Pavúk: Vyber súbor pre polo¾ku formulára" #: gui_common.c:901 msgid "Form data" msgstr "Dáta formulára" #: gui_common.c:929 msgid "Matching action URL: " msgstr "URL akcie formulára: " #: gui_common.c:1185 msgid "Grabber I" msgstr "Grabber I" #: gui_common.c:1193 msgid "Cache Directory: " msgstr "Cache adresár (lokálny strom): " #: gui_common.c:1196 msgid "Default URL prefix: " msgstr "©tandardný prefix URL: " #: gui_common.c:1199 msgid "Separate info directory: " msgstr "Samostatný adresár pre info súbory: " #: gui_common.c:1202 msgid "Index file name: " msgstr "Meno indexového súboru: " #: gui_common.c:1205 msgid "Store file name: " msgstr "Meno ulo¾eného súboru: " #: gui_common.c:1208 msgid "Identity string: " msgstr "Identifikaèný re»azec pavúka: " #: gui_common.c:1212 msgid "Netscape browser cache directory: " msgstr "Cache adresár prehliadaèa Netscape: " #: gui_common.c:1215 msgid "Mozilla browser cache directory: " msgstr "Cache adresár prehliadaèa Mozilla: " #: gui_common.c:1220 msgid "Browser: " msgstr "HTML prehliadaè: " #: gui_common.c:1224 msgid "Reminder command: " msgstr "Príkaz pre pripomínaè: " #: gui_common.c:1227 msgid "Post command: " msgstr "Príkaz na post-spracovanie: " #: gui_common.c:1244 msgid "How many times retry on fail: " msgstr "Poèet opakovaní prenosu pri chybe: " #: gui_common.c:1247 msgid "How many moved links to follow: " msgstr "Max. poèet presmerovaní dokumentu: " #: gui_common.c:1250 msgid "How many times to reget file: " msgstr "Maximálny poèet èiastoèných prenosov: " #: gui_common.c:1253 msgid "Document age before syncing with server: " msgstr "Expirácia platnosti dokumentu pri synchronizácii: " #: gui_common.c:1255 msgid " days " msgstr " dní " #: gui_common.c:1261 msgid "Read buffer size: " msgstr "Veµkos» vyrovnávacej pamäte: " #: gui_common.c:1265 msgid " kB " msgstr " kB " #: gui_common.c:1271 msgid "Hash tables size: " msgstr "Veµkos» hash tabuliek: " #: gui_common.c:1273 msgid " entries " msgstr " polo¾iek " #: gui_common.c:1288 msgid "Sleep time between transfers: " msgstr "Prestávka medzi prenosmi: " #: gui_common.c:1290 msgid " sec." msgstr " sec." #: gui_common.c:1295 msgid "randomize" msgstr "náhodne" #: gui_common.c:1301 msgid "Rollback amount on reget: " msgstr "Då¾ka opakovanej èasti prenosu: " #: gui_common.c:1303 msgid " bytes" msgstr " bajtov" #: gui_common.c:1309 msgid "Transfer quota: " msgstr "Maximálny povolený objem prenesených dát: " #: gui_common.c:1311 gui_common.c:1319 gui_common.c:1328 msgid " kB" msgstr " kB" #: gui_common.c:1317 msgid "File size quota: " msgstr "Max. povolená veµkos» prenesenej èasti súboru: " #: gui_common.c:1326 msgid "Filesystem freespace quota: " msgstr "Min. po¾adovaný priestor v súborovom systéme: " #: gui_common.c:1344 msgid "Number of downloading threads: " msgstr "Poèet s»ahovacích threadov: " #: gui_common.c:1358 msgid "Grabber II" msgstr "Grabber II" #: gui_common.c:1361 msgid "Misc settings" msgstr "Rôzne nastavenia" #: gui_common.c:1371 msgid "Always generate unique name for document" msgstr "V¾dy generuj jedineèné mená pre dokumenty" #: gui_common.c:1377 msgid "Delete FTP document after succesful download" msgstr "Zma¾ dokumenty z FTP servera po úspe¹nom prenose" #: gui_common.c:1383 msgid "Preserve document modification time" msgstr "Zachovávaj èas modifikácie dokumentov" #: gui_common.c:1389 msgid "Preserve FTP document permissions" msgstr "Zachovávaj prístupové práva FTP súborov" #: gui_common.c:1395 msgid "Preserve FTP symbolic links paths" msgstr "Zachovávaj ukazovatele symbolických liniek" #: gui_common.c:1401 msgid "Retrieve FTP symbolic links like files" msgstr "Prenes symbolické linky z FTP servera ako súbory" #: gui_common.c:1408 msgid "Whole reget when partial not supported" msgstr "Prenes celý dokument ak nejde po èastiach" #: gui_common.c:1415 msgid "Use gzip encoding for transfer" msgstr "Povoµ kódovanie gzipom" #: gui_common.c:1420 msgid "Remove improper documents" msgstr "Zma¾ neaktuálne dokumenty" #: gui_common.c:1426 msgid "Check transferred size of document" msgstr "Kontroµuj veµkos» preneseného dokumentu" #: gui_common.c:1432 msgid "Store directory URLs as index files" msgstr "Ukladaj indexové súbory pre adresárové URL" #: gui_common.c:1438 msgid "Store info files with each document" msgstr "Ukladaj informácie o ka¾dom dokumente" #: gui_common.c:1444 msgid "Send self URL as Referer for starting URLs" msgstr "So ¹tartovacími dokumentami po¹li ako Referer vlastné URL" #: gui_common.c:1450 msgid "Send Referer with HTTP requests" msgstr "Posielaj Referer: polo¾ku v HTTP po¾iadavke" #: gui_common.c:1456 msgid "Fetch objects mentioned in style sheets" msgstr "S»ahuj objekty uvádzané v kaskádových ¹týloch" #: gui_common.c:1462 msgid "Send If-Range header field when regeting" msgstr "Po¹li polo¾ku if-Range pri reget-e" #: gui_common.c:1468 msgid "Show time of start and end of downloading" msgstr "Zobraz poèiatoèný a koncový èas prenosu" #: gui_common.c:1476 msgid "URL scheduling strategy: " msgstr "Stratégia usporiadania URL: " #: gui_common.c:1520 gui_limits.c:430 msgid "HTML" msgstr "HTML" #: gui_common.c:1523 msgid "HTML document URL rewriting rules" msgstr "Prepisovacie pravidlá URL v HTML dokumentoch" #: gui_common.c:1533 msgid "Rewrite URLs inside HTML doc." msgstr "Prepisuj URL v HTML dokumentoch" #: gui_common.c:1541 msgid "Rewrite URLs to local when stored locally" msgstr "Prepí¹ URL na lokálne a¾ keï je ulo¾ené lokálne" #: gui_common.c:1547 msgid "Rewrite all suitable URLs to local" msgstr "Prepí¹ v¹etky vhodné URL na lokálne" #: gui_common.c:1553 msgid "Rewrite all URLs to local immediately" msgstr "Prepí¹ ihòeï v¹etky URL na lokálne" #: gui_common.c:1559 msgid "Rewrite all URLs to remote immediately" msgstr "Prepí¹ ihòeï v¹etky URL na vzdialené" #: gui_common.c:1565 msgid "Rewrite only one currently download URL" msgstr "Prepisuj iba práve spracovávané URL" #: gui_common.c:1570 msgid "Tuning of HTML rewriting engine" msgstr "Ladenie nástroja na prepisovanie HTML kódu" #: gui_common.c:1580 msgid "Don't touch URL wildcard pattern: " msgstr "Widcard vzor pre nemenné URL:" #: gui_common.c:1584 msgid "Don't touch URL RE pattern: " msgstr "Regulárny výraz pre nemenné URL: " #: gui_common.c:1587 msgid "Don't touch HTML tag RE pattern: " msgstr "Regulárny výraz pre nemenný HTML tag: " #: gui_common.c:1662 msgid "Net" msgstr "Sie»" #: gui_common.c:1669 msgid "Allowed protocols" msgstr "Povolené protokoly" #: gui_common.c:1678 msgid "HTTP" msgstr "HTTP" #: gui_common.c:1683 msgid "FTP" msgstr "FTP" #: gui_common.c:1688 msgid "Gopher" msgstr "Gopher" #: gui_common.c:1694 msgid "HTTPS" msgstr "HTTPS" #: gui_common.c:1699 msgid "FTPS" msgstr "FTPS" #: gui_common.c:1705 msgid "FTP data connection type " msgstr "Typ dátového FTP spojenia " #: gui_common.c:1714 msgid "Active" msgstr "Aktívne" #: gui_common.c:1720 msgid "Passive" msgstr "Pasívne" #: gui_common.c:1726 msgid "Communication timeout: " msgstr "Timeout pri sie»ovej komunikácii: " #: gui_common.c:1739 msgid " min." msgstr " min." #: gui_common.c:1745 msgid "Maximal transfer rate: " msgstr "Maximálna povolená rýchlos» prenosu: " #: gui_common.c:1758 gui_common.c:1777 msgid " kB/s" msgstr " kB/s" #: gui_common.c:1764 msgid "Minimal transfer rate: " msgstr "Minimálna po¾adovaná rýchlos» prenosu: " #: gui_common.c:1783 msgid "Local interface address: " msgstr "Adresa lokálneho sie»ového rozhrania: " #: gui_common.c:1794 msgid "Additional HTTP headers: " msgstr "Doplòujúce HTTP polo¾ky: " #: gui_common.c:1805 msgid "Additional FTP list options: " msgstr "Doplòujúce parametre pre FTP príkaz LIST: " #: gui_common.c:1819 msgid "Use wide listing of FTP directories" msgstr "Pou¾i ¹iroký výpis FTP adresárov" #: gui_common.c:1826 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "Uprav detekciu neexistencie FTP adresára na WuFTPd FTP serveroch" #: gui_common.c:1833 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "Pou¾i HTTP/1.1 protokol pri HTTP komunikácii" #: gui_common.c:1839 msgid "FTP login handshake rules" msgstr "Pravidlá pre prihlasovaciu procedúru FTP serverov" #: gui_common.c:1857 msgid "Login handshake" msgstr "Procedúra" #: gui_common.c:1875 msgid "Handshake: " msgstr "Procedúra: " #: gui_common.c:1916 msgid "Proxy" msgstr "Proxy" #: gui_common.c:1922 msgid "Gopher proxy" msgstr "Gopher proxy" #: gui_common.c:1935 gui_common.c:1958 gui_common.c:1987 msgid "Port: " msgstr "Port: " #: gui_common.c:1939 msgid "Gopher via HTTP proxy" msgstr "Gopher cez HTTP proxy" #: gui_common.c:1944 msgid "FTP proxy" msgstr "FTP proxy" #: gui_common.c:1961 msgid "FTP via HTTP proxy" msgstr "FTP cez HTTP proxy" #: gui_common.c:1967 msgid "FTP via HTTP tunneling proxy" msgstr "FTP cez tunelujúcu HTTP proxy" #: gui_common.c:1974 msgid "SSL proxy" msgstr "SSL proxy" #: gui_common.c:1991 msgid "HTTP proxy" msgstr "HTTP proxy" #: gui_common.c:1998 msgid "Proxy: " msgstr "Proxy: " #: gui_common.c:2003 msgid "Allow caching of documents" msgstr "Povoli» prenos kopií (cache)" #: gui_common.c:2052 msgid "Languages" msgstr "Jazyky" #: gui_common.c:2055 msgid "Preffered languages" msgstr "Preferovaný jazyk" #: gui_common.c:2060 msgid "Language code: " msgstr "Kód jazyka: " #: gui_common.c:2071 msgid "Preffered character sets" msgstr "Preferovaná kódová stránka" #: gui_common.c:2076 msgid "Character set code: " msgstr "Kódová stránka: " #: gui_common.c:2093 msgid "Basic auth. scheme" msgstr "Basic autor. schéma" #: gui_common.c:2103 msgid "Auth" msgstr "Autorizácia" #: gui_common.c:2110 msgid "User authentification" msgstr "Autentifikácia pou¾ívateµa" #: gui_common.c:2119 gui_common.c:2169 msgid "Scheme: " msgstr "Schéma: " #: gui_common.c:2145 gui_common.c:2197 gui_common.c:2222 msgid "User name: " msgstr "Pou¾ívateµ: " #: gui_common.c:2151 gui_common.c:2203 msgid "NTLM domain: " msgstr "NTLM doména: " #: gui_common.c:2155 gui_common.c:2207 msgid "Reuse HTTP Digest access nonce" msgstr "Viacnásobné pou¾itie HTTP Digest access nonce" #: gui_common.c:2160 msgid "HTTP proxy user authentification" msgstr "HTTP proxy user autentifikácia" #: gui_common.c:2212 msgid "FTP proxy user authentification" msgstr "FTP proxy user autentifikácia" #: gui_common.c:2227 msgid "Misc" msgstr "Rôzne" #: gui_common.c:2241 msgid "E-mail address: " msgstr "E-mail adresa: " #: gui_common.c:2245 msgid "Send From: header with HTTP request" msgstr "Posielaj From: polo¾ku v HTTP po¾iadavku" #: gui_common.c:2258 msgid "SSL" msgstr "SSL" #: gui_common.c:2261 msgid "SSL client certificate" msgstr "Certifikát SSL klienta" #: gui_common.c:2271 gui_common.c:2285 msgid "Certificate password: " msgstr "Certifikaèné heslo: " #: gui_common.c:2274 msgid "Certificate PEM file: " msgstr "Súbor s certifikátom v PEM formáte: " #: gui_common.c:2277 msgid "Certificate key file: " msgstr "Kµúè pre certifikát: " #: gui_common.c:2282 msgid "NSS certificate config directory: " msgstr "Adresár pre konfiguraèný súbor certifikátov NSS: " #: gui_common.c:2288 msgid "Accept unknown certificates" msgstr "Prija» neznáme certifikáty" #: gui_common.c:2294 msgid "Domestic SSL ciphers policy" msgstr "\"Domestic\" pravidlá pre SSL ¹ifry" #: gui_common.c:2302 msgid "List of preffered ciphers: " msgstr "Zoznam preferovných ¹ifier: " #: gui_common.c:2308 msgid "SSL protocol version" msgstr "Verzia SSL protokolu" #: gui_common.c:2316 msgid "SSLv23" msgstr "SSLv23" #: gui_common.c:2322 msgid "SSLv2" msgstr "SSLv2" #: gui_common.c:2328 msgid "SSLv3" msgstr "SSLv3" #: gui_common.c:2335 msgid "TLSv1" msgstr "TLSv1" #: gui_common.c:2342 msgid "Miscelanous SSL settings" msgstr "Rôzne SSL nastavenia" #: gui_common.c:2353 msgid "EGD daemon socket path: " msgstr "Soket pre EGD daemon: " #: gui_common.c:2359 msgid "Unique ID for all SSL sessions" msgstr "Pou¾i jedineèné ID pre v¹etky SSL konekcie" #: gui_common.c:2373 gui_main.c:1793 msgid "Log" msgstr "Log" #: gui_common.c:2382 msgid "Try to find unique name, when original log file locked" msgstr "" "Pokús sa nájs» jedineèné meno logovacieho súboru, ak zadaný je uzamknutý" #: gui_common.c:2388 msgid "Log file: " msgstr "Súbor logu: " #: gui_common.c:2391 msgid "Shortlog file: " msgstr "Súbor krátkeho logu: " #: gui_common.c:2394 msgid "Log window length: " msgstr "Poèet riadkov logovacieho okna: " #: gui_common.c:2406 msgid "Cookies" msgstr "Cookies" #: gui_common.c:2409 msgid "Disabled cookie domains" msgstr "Nepovolené cookie domény" #: gui_common.c:2415 gui_limits.c:253 msgid "Domain: " msgstr "Doména: " #: gui_common.c:2419 msgid "Cookies settings" msgstr "Nastavenia cookies" #: gui_common.c:2428 msgid "Update cookies" msgstr "Aktualizuj súbor cookies" #: gui_common.c:2434 msgid "Send cookies" msgstr "Posielaj cookies" #: gui_common.c:2439 msgid "Accept cookies" msgstr "Prijímaj cookies" #: gui_common.c:2444 msgid "Check cookies domain" msgstr "Kontroluj doménu pre cookies" #: gui_common.c:2453 msgid "Cookies maximal number: " msgstr "Maximálny povolený poèet cookies: " #: gui_common.c:2469 msgid "Cookie file: " msgstr "Súbor cookie: " #: gui_common.c:2548 msgid "Filename" msgstr "Meno súboru" #: gui_common.c:2551 msgid "Local filename conversion rules" msgstr "Pravidá na vytváranie mien lokálnych súborov" #: gui_common.c:2559 msgid "Replace String1 with String2 in filename" msgstr "Zameò Re»azec1 za Re»azec2 v mene súboru" #: gui_common.c:2568 msgid "String1: " msgstr "Re»azec1: " #: gui_common.c:2571 msgid "String2: " msgstr "Re»azec2: " #: gui_common.c:2573 msgid "Delete characters from filename" msgstr "Zma¾ znaky v mene súboru" #: gui_common.c:2582 msgid "Character set: " msgstr "Znaky: " #: gui_common.c:2586 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "Zameò znaky zo Znaky1 za znaky zo Znaky2 v mene súboru" #: gui_common.c:2595 msgid "Character set1: " msgstr "Znaky1: " #: gui_common.c:2598 msgid "Character set2: " msgstr "Znaky2: " #: gui_common.c:2605 msgid "Base level of tree: " msgstr "Základná úroveò stromu: " #: gui_common.c:2607 msgid "Local filename mapping rules" msgstr "Pravidá na vytváranie mien lokálnych súborov" #: gui_common.c:2625 msgid "Match pattern" msgstr "Regulárny výraz" #: gui_common.c:2627 msgid "Rule" msgstr "Pravidlo" #: gui_common.c:2647 msgid "wildcard pattern" msgstr "widcard vzor" #: gui_common.c:2654 msgid "RE pattern" msgstr "regulárny výraz" #: gui_common.c:2666 msgid "Matching pattern: " msgstr "Regulárny výraz: " #: gui_common.c:2673 msgid "Construction rule: " msgstr "Pravidlo: " #: gui_common.c:2712 msgid "Advertisement" msgstr "Reklamy" #: gui_common.c:2721 msgid "Enable removing of advertisement banners" msgstr "Povaµ odstraòovanie reklamných banerov" #: gui_common.c:2726 msgid "RE for advertisement URLs: " msgstr "RE pre reklamné URL: " #: gui_common.c:2836 msgid "Javascript" msgstr "Javascript" #: gui_common.c:2844 msgid "Processing of javascript" msgstr "Spracovanie JavaScriptu" #: gui_common.c:2848 msgid "Javascript patterns" msgstr "Vzory pre javascript URL" #: gui_common.c:2853 msgid "RE for Javascript patterns: " msgstr "Vzor pre javascript URL: " #: gui_common.c:2860 msgid "Javascript patterns with transform rules" msgstr "JS vzory s transformaèným pravidlom" #: gui_common.c:2876 msgid "Pattern" msgstr "Vzor" #: gui_common.c:2878 msgid "Transform rule" msgstr "Pravidlo transformácie" #: gui_common.c:2880 msgid "HTML tag" msgstr "HTML znaèka" #: gui_common.c:2882 msgid "HTML tag attribute" msgstr "Atribút HTML znaèky" #: gui_common.c:2884 msgid "Rewrite" msgstr "Prepisuj" #: gui_common.c:2903 msgid "Pattern: " msgstr "Vzor: " #: gui_common.c:2906 msgid "Tranform rule: " msgstr "Pravidlo transformácie: " #: gui_common.c:2915 msgid "HTML tag: " msgstr "HTML znaèka: " #: gui_common.c:2919 msgid "HTML tag attribute: " msgstr "Atribút HTML znaèky: " #: gui_common.c:2923 msgid "Rewrite URL part in HTML document" msgstr "Prepisuj èas» URL v HTML dokumentoch" #: gui_common.c:2981 msgid "Pavuk: Common config" msgstr "Pavúk: Základná konfigurácia" #: gui_common.c:3048 msgid "Limitations ..." msgstr "Obmedzenia ..." #: gui_jscons.c:149 msgid "Pavuk: JavaScript console" msgstr "Pavúk: JavaScript konzola" #: gui_jscons.c:165 msgid "Reload script file" msgstr "Naèítaj znovu skript" #: gui_jscons.c:169 msgid "Save script to file" msgstr "Ulo¾ skript do súboru" #: gui_jscons.c:176 msgid "Load script to JavaScript runtime" msgstr "Zaveï skript do JavaScript interpretera" #: gui_jscons.c:180 msgid "Restart JavaScript runtime" msgstr "Re¹tart JavaScript interpretera" #: gui_jscons.c:203 msgid "Prompt: " msgstr "Prompt: " #: gui_jscons.c:216 msgid "JavaScript source file: " msgstr "JavaScript zdrojový súbor: " #: gui_limits.c:44 msgid "Tree" msgstr "Strom" #: gui_limits.c:56 msgid "Download cgi-generated pages" msgstr "Prená¹aj generované CGI dokumenty" #: gui_limits.c:62 msgid "Recurse through FTP directory" msgstr "Prechádzaj FTP adresáre" #: gui_limits.c:68 msgid "Allow \"robots.txt\"" msgstr "Povoµ kontrolu \"robots.txt\"" #: gui_limits.c:75 msgid "Process HTML files downloaded over FTP" msgstr "Parsuj HTML súbory pochádzajúce z FTP servera" #: gui_limits.c:81 msgid "Don't leave starting site" msgstr "Neopusti ¹tartovací server" #: gui_limits.c:88 msgid "Don't leave starting directory" msgstr "Neopusti ¹tartovací adresár" #: gui_limits.c:95 msgid "Don't leave site enter directory" msgstr "Neopusti vstupný adresár servera" #: gui_limits.c:101 msgid "Download just single page" msgstr "Prenes iba jednu HTML stránku" #: gui_limits.c:108 msgid "Apply limiting options on inline objects" msgstr "Aplikuj obmedzenia na inline objekty" #: gui_limits.c:123 msgid "Max. count of documents: " msgstr "Max. poèet dokumentov: " #: gui_limits.c:126 msgid "Max. depth of tree: " msgstr "Max. håbka stromu: " #: gui_limits.c:129 msgid "Max. levels to leave from starting site: " msgstr "Max. úrovní mimo ¹tartovací server: " #: gui_limits.c:132 msgid "Max. document size: " msgstr "Max. veµkos» dokumentu: " #: gui_limits.c:135 msgid "Min. document size: " msgstr "Min. veµkos» dokumentu: " #: gui_limits.c:138 msgid "Max. site levels to leave from starting site: " msgstr "Max. úrovní serverov mimo ¹tartovací server: " #: gui_limits.c:149 msgid "Working subdirectory :" msgstr "Pracovný podstrom :" #: gui_limits.c:152 msgid "User condition script: " msgstr "Skript s podmienkou výberu URL: " #: gui_limits.c:155 msgid "Follow command: " msgstr "" "Podmienkový skript na prenos\n" "liniek z aktuálneho dokumentu: " #: gui_limits.c:165 msgid "Patterns" msgstr "Vzory" #: gui_limits.c:168 gui_limits.c:592 msgid "Wildcard patterns" msgstr "Wildcard vzor" #: gui_limits.c:177 gui_limits.c:200 msgid "Documents matching pattern: " msgstr "Regulárny výraz pre dokument: " #: gui_limits.c:180 gui_limits.c:187 gui_limits.c:203 gui_limits.c:210 #: gui_limits.c:272 msgid "skip: " msgstr "vynechaj: " #: gui_limits.c:181 gui_limits.c:204 msgid "Pavuk: edit Documents matching skip pattern" msgstr "Pavuk: editácia vzoru na vynechanie dokumentu" #: gui_limits.c:184 gui_limits.c:207 msgid "URL matching pattern: " msgstr "Vzor pre URL: " #: gui_limits.c:188 gui_limits.c:211 msgid "Pavuk: edit URL matching skip pattern" msgstr "Pavuk: editácia vzoru URL pre vynechanie" #: gui_limits.c:191 gui_limits.c:598 msgid "RE patterns" msgstr "regulárny výraz" #: gui_limits.c:221 msgid "Hosts" msgstr "Server" #: gui_limits.c:230 msgid "Allow / Disallow sites" msgstr "Povolené / Zakázané servery" #: gui_limits.c:236 msgid "Site: " msgstr "Server: " #: gui_limits.c:247 msgid "Allow / Disallow domains" msgstr "Povolené / Zakázané domény" #: gui_limits.c:259 msgid "IP address RE patterns" msgstr "Regulárne výrazy pre IP adresu" #: gui_limits.c:269 msgid "Server IP address matching pattern: " msgstr "Regulárny výraz pre IP adresu: " #: gui_limits.c:273 msgid "Pavuk: edit Server IP address matching skip pattern" msgstr "Pavuk: editácia vzoru servra pre vynechanie" #: gui_limits.c:277 msgid "Server ports" msgstr "Porty serverov" #: gui_limits.c:287 msgid "Allow/deny" msgstr "Povolené/zakázané" #: gui_limits.c:292 msgid "Ports: " msgstr "Porty: " #: gui_limits.c:302 msgid "Documents" msgstr "Dokument" #: gui_limits.c:311 msgid "Allow / Disallow suffix" msgstr "Povolené / Zakázané prípony" #: gui_limits.c:317 msgid "Suffix: " msgstr "Prípona: " #: gui_limits.c:328 msgid "Allow / Disallow prefix" msgstr "Povolené / Zakázané predpony" #: gui_limits.c:334 msgid "Prefix: " msgstr "Predpona: " #: gui_limits.c:347 gui_limits.c:359 msgid "MIME types" msgstr "MIME typy" #: gui_limits.c:355 msgid "Allow / Disallow MIME type" msgstr "Povolené / Zakázané MIME typy" #: gui_limits.c:364 msgid "MIME type: " msgstr "MIME typ: " #: gui_limits.c:375 msgid "Time" msgstr "Èas" #: gui_limits.c:381 msgid "Lower document time limit" msgstr "Spodná èasová hranica pre dokument" #: gui_limits.c:391 msgid "Check if doc. time newer than this" msgstr "Kontroluj èi je dokument nov¹í" #: gui_limits.c:395 msgid "Upper document time limit" msgstr "Horná èasová hranica pre dokument" #: gui_limits.c:405 msgid "Check if doc. time older than this" msgstr "Kontroluj èi je dokument star¹í" #: gui_limits.c:414 msgid "Maximal allowed time of downloading: " msgstr "Maximálny povolený èas behu: " #: gui_limits.c:416 msgid " min" msgstr " min" #: gui_limits.c:428 msgid "Select allowed HTML tags and attributes" msgstr "Výber povolených HTML znaèiek a atribútov" #: gui_limits.c:445 #, c-format msgid "%s of %s" msgstr "%s z %s" #: gui_limits.c:547 msgid "Tag patterns" msgstr "Vzory pre znaèku" #: gui_limits.c:561 gui_limits.c:639 msgid "Tag pattern" msgstr "Vzor pre znaèku" #: gui_limits.c:563 gui_limits.c:643 msgid "Attribute pattern" msgstr "Vzor pre atribút" #: gui_limits.c:565 gui_limits.c:647 msgid "URL pattern" msgstr "Vzor pre URL" #: gui_limits.c:580 msgid "Pattern type: " msgstr "Typ vzoru: " #: gui_limits.c:703 msgid "Pavuk: Limits config" msgstr "Pavúk: Konfigurácia obmedzení" #: gui_limits.c:756 msgid "Common ..." msgstr "Základná ..." #: gui_main.c:179 msgid "Unable to change language during processing time!\n" msgstr "Nie je mo¾né meni» jazyk poèas spracovania!\n" #: gui_main.c:378 msgid "Unknown window to popup" msgstr "Neznáme okno na zobrazenie" #: gui_main.c:435 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "URL prebrané zo schránky : %s\n" #: gui_main.c:477 #, c-format msgid "Fetched URL from browser : %s\n" msgstr "URL prebrané z prehliadaèa : %s\n" #: gui_main.c:714 msgid "Both" msgstr "Oboje" #: gui_main.c:715 msgid "Icons only" msgstr "Iba ikony" #: gui_main.c:717 msgid "Text only" msgstr "Iba text" #: gui_main.c:731 msgid "Nr." msgstr "È." #: gui_main.c:734 msgid "Status" msgstr "Stav" #: gui_main.c:736 msgid "Size" msgstr "Veµkos»" #: gui_main.c:738 msgid "Transfer rate" msgstr "Rýchlos» prenosu" #: gui_main.c:740 msgid "Elapsed time" msgstr "Èas prenosu" #: gui_main.c:742 msgid "Remaining time" msgstr "Zostávajúci èas" #: gui_main.c:871 msgid "Open _URL ..." msgstr "Otvor _URL ..." #: gui_main.c:882 msgid "Append URL ..." msgstr "Pridaj URL ..." #: gui_main.c:890 msgid "Fetch URL from Clipboard" msgstr "Naèítaj URL zo schránky" #: gui_main.c:906 msgid "Fetch URL from browser" msgstr "Naèítaj URL z prehliadaèa" #: gui_main.c:917 msgid "Load scenario ..." msgstr "Naèítaj scenár ..." #: gui_main.c:925 msgid "Add scenario ..." msgstr "Pripoj scenár ..." #: gui_main.c:933 msgid "Save scenario ..." msgstr "Ulo¾ scenár ..." #: gui_main.c:941 msgid "Save settings to ~/.pavukrc" msgstr "Ulo¾ aktuálne nastavenia do ~/.pavukrc" #: gui_main.c:954 msgid "Schedule ..." msgstr "Plánuj ..." #: gui_main.c:962 msgid "Auth. info editor ..." msgstr "Auth. info editor ..." #: gui_main.c:975 msgid "E_xit" msgstr "_Koniec" #: gui_main.c:983 msgid "_File" msgstr "_Súbor" #: gui_main.c:997 msgid "Document _Tree ..." msgstr "S_trom dokumentov ..." #: gui_main.c:1006 msgid "Status page ..." msgstr "©tatistiky prenosu ..." #: gui_main.c:1015 msgid "HTML forms editor ..." msgstr "Editor HTML formulárov ..." #: gui_main.c:1025 msgid "Javascript console ..." msgstr "JavaScript konzola ..." #: gui_main.c:1039 msgid "Clear log window" msgstr "Zma¾ okno výpisu" #: gui_main.c:1048 msgid "_View" msgstr "_Prehliadanie" #: gui_main.c:1064 msgid "normal recurse" msgstr "normálne prechádzanie" #: gui_main.c:1074 msgid "synchronize" msgstr "synchronizácia" #: gui_main.c:1084 msgid "mirror" msgstr "mirror" #: gui_main.c:1093 msgid "single page" msgstr "jedna stránka" #: gui_main.c:1103 msgid "update local links" msgstr "aktualizácia odkazov" #: gui_main.c:1113 msgid "resume files" msgstr "dokonèenie prenosov" #: gui_main.c:1123 msgid "unlimited reget" msgstr "nekoneèný reget" #: gui_main.c:1135 msgid "transfer but don't store" msgstr "prenos bez ulo¾enia do súboru" #: gui_main.c:1144 msgid "reminder" msgstr "pripomínaè zmien URL" #: gui_main.c:1153 msgid "list ftp directory" msgstr "vylistuj FTP adresár" #: gui_main.c:1162 msgid "_Mode" msgstr "_Mód" #: gui_main.c:1179 msgid "C_ommon ..." msgstr "_Základná ..." #: gui_main.c:1188 msgid "_Limitations ..." msgstr "_Obmedzenia ..." #: gui_main.c:1197 msgid "Reset configuration" msgstr "Nastav poèiatoènú konfiguráciu" #: gui_main.c:1211 msgid "Toolbar" msgstr "Nástrojová li¹ta" #: gui_main.c:1219 msgid "Toggle toolbar" msgstr "Zobraz/Skry nástrojovú li¹tu" #: gui_main.c:1275 msgid "Progressbar" msgstr "Progresbar" #: gui_main.c:1308 msgid "Language" msgstr "Jazyk" #: gui_main.c:1316 nls.c:32 msgid "English" msgstr "Anglický" #: gui_main.c:1355 msgid "Debug level" msgstr "Úroveò ladenia" #: gui_main.c:1378 msgid "All" msgstr "V¹etky" #: gui_main.c:1384 msgid "None" msgstr "®iadny" #: gui_main.c:1391 msgid "Debug" msgstr "Ladenie" #: gui_main.c:1406 msgid "Allow tooltips" msgstr "Povoµ nápovedu" #: gui_main.c:1417 msgid "Log window autoscroll" msgstr "Automatické rolovanie okna logu" #: gui_main.c:1426 msgid "Use preferences" msgstr "Automatické ukladanie/naèítavanie nastavení" #: gui_main.c:1436 msgid "Quiet" msgstr "Bez výstupu správ" #: gui_main.c:1448 msgid "Immediate messages" msgstr "Vypisuj správy okam¾ite" #: gui_main.c:1460 msgid "_Config" msgstr "_Konfigurácia" #: gui_main.c:1474 msgid "_Restart" msgstr "_Re¹tart" #: gui_main.c:1484 msgid "Co_ntinue" msgstr "Pokraèova»" #: gui_main.c:1494 msgid "Sto_p" msgstr "Sto_p" #: gui_main.c:1503 msgid "_Break" msgstr "Preru¹enie" #: gui_main.c:1512 msgid "_Action" msgstr "_Akcia" #: gui_main.c:1530 msgid "About ..." msgstr "O aplikácii ..." #: gui_main.c:1538 msgid "_Help" msgstr "P_omoc" #: gui_main.c:1574 msgid "Config" msgstr "Konfigurácia" #: gui_main.c:1575 msgid "Popup config window" msgstr "Zobraz konfiguraèné okno" #: gui_main.c:1578 msgid "Limits" msgstr "Obmedzenia" #: gui_main.c:1579 msgid "Popup limits window" msgstr "Zobraz okno s obmedzeniami" #: gui_main.c:1584 msgid "Go bg" msgstr "Na pozadie" #: gui_main.c:1585 msgid "Destroy window as soon as posible and continue on terminal" msgstr "Zru¹ èo najskôr okno aplikácie a pokraèuj vo vykonávaní na terminály" #: gui_main.c:1588 gui_main.c:1663 msgid "Restart" msgstr "Re¹tart" #: gui_main.c:1589 msgid "Start working on currently set starting URLs" msgstr "Zaèni pracova» so zadanými URL" #: gui_main.c:1592 gui_main.c:1667 msgid "Continue" msgstr "Pokraèuj" #: gui_main.c:1593 msgid "Continue after stop or break" msgstr "Pokraèuj po preru¹ení" #: gui_main.c:1598 gui_main.c:1671 msgid "Stop" msgstr "Stop" #: gui_main.c:1599 msgid "Finish this transfer and stop" msgstr "Ukonèi aktuálny prenos a zastav" #: gui_main.c:1602 gui_main.c:1675 msgid "Break" msgstr "Preru¹" #: gui_main.c:1603 msgid "Break transfer and stop" msgstr "Okam¾ite ukonèi aktuálny prenos" #: gui_main.c:1608 msgid "Exit" msgstr "Koniec" #: gui_main.c:1609 msgid "Immediately quit the program" msgstr "Okam¾ite ukonèi program" #: gui_main.c:1679 msgid "Show whole main window" msgstr "Zobraz celé hlavné okno" #: gui_main.c:1683 msgid "Quit" msgstr "Koniec" #: gui_main.c:1759 msgid "Pavuk: save log" msgstr "Pavúk: ulo¾ log" #: gui_main.c:1816 msgid "Select all" msgstr "Oznaè v¹etko" #: gui_main.c:1824 msgid "Clear selection" msgstr "Zma¾ oznaèené" #: gui_main.c:1832 msgid "Copy selection" msgstr "Skoíruj oznaèené" #: gui_main.c:1843 msgid "Save log ..." msgstr "Ulo¾ log ..." #: gui_main.c:1850 msgid "Clear log" msgstr "Zma¾ okno výpisu" #: gui_main.c:1922 gui_main.c:2034 msgid "Processed: " msgstr "Spracované: " #: gui_main.c:1931 gui_main.c:2043 msgid "Failed: " msgstr "S chybou: " #: gui_main.c:1940 gui_main.c:2052 msgid "Queued: " msgstr "Vo fronte: " #: gui_main.c:1949 gui_main.c:2061 msgid "Rejected: " msgstr "Vylúèené: " #: gui_main.c:1993 msgid "S: " msgstr "V: " #: gui_main.c:2002 msgid "R: " msgstr "R: " #: gui_main.c:2011 msgid "ET: " msgstr "ET: " #: gui_main.c:2020 msgid "RT: " msgstr "RT: " #: gui_scenario.c:47 msgid "Pavuk: Scenario saver" msgstr "Pavúk: Ukladanie scenára" #: gui_scenario.c:145 msgid "Pavuk: Scenario loader" msgstr "Pavúk: Naèítavanie scenára" #: gui_scenario.c:241 msgid "Pavuk: Scenario add" msgstr "Pavúk: Pridanie scenára" #: gui_sched.c:44 pavuk.c:525 msgid "Error scheduling\n" msgstr "Chyba plánovania\n" #: gui_sched.c:68 msgid "Pavuk: Scheduler" msgstr "Pavúk: Plánovaè" #: gui_sched.c:88 msgid "Scheduling command: " msgstr "Príkaz pre plánovaè: " #: gui_sched.c:98 msgid "Reschedule after " msgstr "Naplánova» znovu po " #: gui_sched.c:108 msgid " hours" msgstr " hodinách" #: gui_tools.c:49 msgid "Time: " msgstr "Èas: " #: gui_tools.c:58 msgid " : " msgstr " : " #: gui_tools.c:235 #, c-format msgid "Pavuk: edit %s" msgstr "Pavúk: editácia %s" #: gui_tools.c:236 msgid "entry" msgstr "vstup" #: gui_tools.c:371 msgid "Edit ..." msgstr "Edituj ..." #: gui_tools.c:423 #, c-format msgid "Pavuk: select %s" msgstr "Pavúk: vyber %s" #: gui_tools.c:424 msgid "file" msgstr "súbor" #: gui_tools.c:513 msgid "Browse ..." msgstr "Vyber ..." #: gui_tree.c:95 #, c-format msgid "URL: %s\n" msgstr "URL: %s\n" #: gui_tree.c:108 gui_tree.c:114 gui_tree.c:152 msgid "Request type: " msgstr "Typ po¾iadavky: " #: gui_tree.c:128 msgid "Query values:\n" msgstr "Polo¾ky po¾iadavky:\n" #: gui_tree.c:158 msgid "Status: " msgstr "Stav: " #: gui_tree.c:164 msgid "not processed yet\n" msgstr "zatiaµ nespracované\n" #: gui_tree.c:170 msgid "loaded from NS cache\n" msgstr "naèítané kópia z NS cache\n" #: gui_tree.c:176 msgid "loaded from local URL tree\n" msgstr "naèítané z lokálneho stromu dokumentov\n" #: gui_tree.c:182 msgid "moved to another URL\n" msgstr "presunuté na iné URL\n" #: gui_tree.c:188 msgid "URL not found on remote server\n" msgstr "URL sa nenachádza na vzdialenom servery\n" #: gui_tree.c:194 msgid "truncated\n" msgstr "neúplný súbor\n" #: gui_tree.c:200 msgid "downloaded OK\n" msgstr "prenesené v poriadku\n" #: gui_tree.c:206 msgid "rejected by rules\n" msgstr "zakázané podµa pravidiel\n" #: gui_tree.c:212 msgid "disabled by user\n" msgstr "zakázané pou¾ívateµom\n" #: gui_tree.c:218 msgid "probably recoverable error\n" msgstr "pravdepodobne menej záva¾ná chyba\n" #: gui_tree.c:224 msgid "unrecoverable error\n" msgstr "fatálna chyba\n" #: gui_tree.c:230 msgid "unknown\n" msgstr "neznámy\n" #: gui_tree.c:240 #, c-format msgid "Moved to URL: %s\n" msgstr "Presunuté na URL %s\n" #: gui_tree.c:250 #, c-format msgid "Type: %s\n" msgstr "Typ: %s\n" #: gui_tree.c:252 #, c-format msgid "Type: unknown\n" msgstr "Typ: neznámy\n" #: gui_tree.c:258 #, c-format msgid "Size: %d\n" msgstr "Veµkos»: %d\n" #: gui_tree.c:267 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "Èas poslednej zmeny: %a, %d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:278 #, c-format msgid "Local filename: %s\n" msgstr "Meno v lokálnom strome: %s\n" #: gui_tree.c:289 msgid "Parent URLs:\n" msgstr "Rodièovské URL:\n" #: gui_tree.c:543 msgid "Pavuk: Store tree" msgstr "Pavúk: Ulo¾ strom" #: gui_tree.c:600 gui_tree.c:631 msgid "Pavuk: URL tree preview" msgstr "Pavúk: Prehµad URL stromu" #: gui_tree.c:602 gui_tree.c:717 msgid "Store tree ..." msgstr "Ulo¾ strom dokumentov ..." #: gui_tree.c:604 gui_tree.c:651 msgid "Automaticaly watch last processed URLs" msgstr "Automaticky sleduj spracovávané dokumenty" #: gui_tree.c:606 gui_tree.c:743 msgid "Properties" msgstr "Vlastnosti" #: gui_tree.c:608 gui_tree.c:752 msgid "Launch browser" msgstr "Spusti prehliadaè" #: gui_tree.c:610 gui_tree.c:760 msgid "Disable URL" msgstr "Zablokuj URL" #: gui_tree.c:612 gui_tree.c:769 msgid "Enable URL" msgstr "Odblokuj URL" #: gui_tree.c:614 gui_tree.c:777 msgid "Download URL" msgstr "Prenies URL" #: gui_tree.c:617 gui_tree.c:670 msgid "URL tree" msgstr "URL strom" #: html.c:244 htmlparser.c:227 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "" "Nepodporované základne URL - %s (pravdepodobne bude nesprávne spracované)\n" #: html.c:518 msgid "Can't work on directory\n" msgstr "Nie je mo¾né pracova» s adresárom\n" #: html.c:545 html.c:550 msgid "rewrite parent" msgstr "prepisvanie rodièovského dokumetu" #: http.c:390 msgid "****************** Proxy connect request *****************\n" msgstr "****************** Proxy connect request *****************\n" #: http.c:435 msgid "***************** Proxy connect response *****************\n" msgstr "***************** Proxy connect response *****************\n" #: http.c:525 msgid "Sending request ..." msgstr "Odosielanie po¾iadavky ..." #: http.c:776 msgid "************ Client HTTP MIME header ***************\n" msgstr "************ HTTP MIME hlavièka klienta ***************\n" #: http.c:793 msgid "Sending data ..." msgstr "Odosielanie dát ..." #: http.c:794 msgid "************ HTTP request data ***************\n" msgstr "************ dáta HTTP po¾iadavky ************\n" #: http.c:804 msgid "Waiting for response ..." msgstr "Èakanie na odpoveï ..." #: http.c:826 msgid "Error reading HTTP 1xx class response\n" msgstr "Chyba pri èítaní HTTP odpovede z triedy 1xx\n" #: http.c:832 msgid "***************** class 1xx HTTP response ****************\n" msgstr "***************** HTTP odpoveï triedy 1xx *****************\n" #: http.c:939 msgid "Connecting ..." msgstr "Vytvára spojenie ..." #: http.c:1228 msgid "*********** HTTP Server response MIME header **********\n" msgstr "*********** MIME hlavièka odpovede HTTP servera **********\n" #: http.c:1329 msgid "Regeting whole file\n" msgstr "Prenos dokumentu od poèiatku\n" #: http.c:1379 #, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "Neoèakávaná odpoveï \"%d %s\" pri pokuse o re¹tart prenosu!\n" #: http_proxy.c:151 #, c-format msgid "Checking HTTP proxy server %s:%hu\n" msgstr "Kontrola HTTP proxy servera %s:%hu\n" #: http_proxy.c:163 msgid "Failed to check proxy (sock open)!\n" msgstr "Chyba pri kontrole proxy servera [sock open]!\n" #: http_proxy.c:175 msgid "Failed to check proxy (write failed)!\n" msgstr "Chyba pri kontrole proxy servera [chyba pri zápise]!\n" #: http_proxy.c:182 msgid "Failed to check proxy (read failed)!\n" msgstr "Chyba pri kontrole proxy servera [chyba pri èítaní]!\n" #: http_proxy.c:191 msgid "Failed to check proxy (bad response)!\n" msgstr "Chyba pri kontrole proxy servera [chybná odpoveï]!\n" #: http_proxy.c:197 #, c-format msgid "Proxy %s:%hu is HTTP/%d.%d proxy\n" msgstr "Proxy %s:%hu je HTTP/%d.%d proxy\n" #: jsbind.c:67 msgid "bad parameter" msgstr "zlý parameter" #: jsbind.c:260 msgid "PavukUrl constructor failed\n" msgstr "Nepodarilo sa vytvori» objekt PavukUrl\n" #: jsbind.c:438 msgid "invalid assignment" msgstr "chybné priradenie hodnoty" #: jsbind.c:460 msgid "bad parent index" msgstr "chybný index rodièa" #: jsbind.c:513 msgid "not enough parameters" msgstr "nedostatoèný poèet parametrov" #: jsbind.c:538 msgid "unknown limiting condition" msgstr "neznáma obmedzujúca podmienka" #: jsbind.c:610 msgid "PavukFnrules constructor call prohibited from script\n" msgstr "Vytvorenie objektu PavukFnrules nie je povolené v skripte\n" #: jsbind.c:649 jsbind.c:673 msgid "bad parameters" msgstr "chybné parametre" #: jsbind.c:896 #, c-format msgid "pjs: There is no \"%s\" JavaScript function!\n" msgstr "pjs: JavaScript funkcia \"%s\" neexistuje!\n" #: lfname.c:501 lfname.c:512 lfname.c:520 lfname.c:532 lfname.c:557 #: lfname.c:659 lfname.c:671 lfname.c:682 lfname.c:696 lfname.c:708 re.c:48 #: re.c:58 re.c:65 re.c:77 re.c:92 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "Chyba pri preklade regulárneho výrazu : %s\n" #: lfname.c:574 lfname.c:633 lfname.c:931 lfname.c:1060 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "LSP chyba analýzy: chybný symbol - %s\n" #: lfname.c:942 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "LSP chyba analýzy: chybná numerická hodnota - %s\n" #: lfname.c:956 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "LSP chyba analýzy: chybné makro - %s\n" #: lfname.c:989 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "LSP chyba analýzy: neukonèený re»azec - %s\n" #: lfname.c:1013 lfname.c:1030 lfname.c:1049 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "LSP chyba analýzy: chybný typ parametra - %s\n" #: log.c:396 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "Koniec logu: %H:%M:%S %d.%m.%Y\n" #: log.c:418 msgid "Unable to open log file - disabling logging\n" msgstr "Nie je mo¾né otvori» logovací súbor - zru¹enie logovania\n" #: log.c:426 msgid "Log file is locked by another process - " msgstr "Logovací súbor je uzamknutý iným procesom - " #: log.c:430 msgid "generating new log filename\n" msgstr "generovanie nového mena log súboru\n" #: log.c:435 msgid "disabling logging\n" msgstr "zru¹enie logovania do súboru\n" #: log.c:457 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "Zaèiatok logu: %H:%M:%S %d.%m.%Y\n" #: mozcache.c:177 #, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "Chyba pri otváraní indexového súboru Mozilla cache - %s\n" #: mozcache.c:291 #, c-format msgid "Error opening cache index file %s\n" msgstr "Chyba pri otváraní indexového súboru cache - %s\n" #: mozcache.c:308 msgid "Mozilla new cache map file format not recognized" msgstr "Nepodarilo sa rozpozna» formát cache súboru prehliadaèa Mozilla" #: mozcache.c:354 mozcache.c:364 msgid "Corrupted Mozilla cache blockfile!" msgstr "Po¹kodený zoznam blokov cache prehliadaèa Mozilla!" #: mozcache.c:460 msgid "Corrupted Mozilla cache map file!" msgstr "Po¹kodená mapa cache prehliadaèa Mozilla!" #: myssl_nss.c:285 msgid "NSS_Init: Unable to open cert database" msgstr "NSS_Init: nie je mo¾né otvori» databázu certifikátov" #: myssl_nss.c:505 #, c-format msgid "SSL connect failure - %s\n" msgstr "Chyba pri vytváraní SSL spojenia - %s\n" #: myssl_nss.c:533 #, c-format msgid "SSL error - %s\n" msgstr "SSL chyba - %s\n" #: myssl_openssl.c:452 msgid "Failed obtaining entropy pathname\n" msgstr "" "Chyba pri ziskavaní súbory na inicializáciu generátora náhodných èísel\n" #: myssl_openssl.c:464 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "Chyba pri inicializácii generátora náhodných èísel EGD pre OpenSSL\n" #: myssl_openssl.c:475 msgid "Seeding entropy pool INSECURELY!\n" msgstr "Inicializácia genrátora náhodných èísel nie bezpeèným sposobom!\n" #: myssl_openssl.c:616 msgid "Unable to set certificate file (wrong password?)\n" msgstr "Nie je mo¾né nastavi» certifikát (zlé heslo ?)\n" #: myssl_openssl.c:627 msgid "Unable to set public key file\n" msgstr "Nie je mo¾né nastavi» súbor s verejným kµúèom\n" #: myssl_openssl.c:645 msgid "Private key does not match the certificate public key\n" msgstr "Súkromný kµúè nezodpovedú verejnému kµúèu\n" #: nls.c:23 msgid "Czech" msgstr "Èeský" #: nls.c:24 msgid "German" msgstr "Nemecký" #: nls.c:25 msgid "Spanish" msgstr "©panielsky" #: nls.c:26 msgid "French" msgstr "Francúzsky" #: nls.c:27 msgid "Italian" msgstr "Talianský" #: nls.c:28 msgid "Japanese" msgstr "Japonský" #: nls.c:29 msgid "Polish" msgstr "Poµský" #: nls.c:30 msgid "Slovak" msgstr "Slovenský" #: nls.c:31 msgid "Ukrainian" msgstr "Ukrainský" #: nscache.c:106 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "Chyba pri otváraní indexového súboru Netscape cache - %s\n" #: ntlm_auth.c:535 msgid "Trying to do NTLM authorization\n" msgstr "Pokus o NTLM autorizáciu\n" #: ntlm_auth.c:546 ntlm_auth.c:637 ntlm_auth.c:719 ntlm_auth.c:808 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "NTLM authorizacia je podporovaná iba na perzistentných spojoch!\n" #: ntlm_auth.c:573 ntlm_auth.c:744 msgid "Not enough data for NTLM authorization!\n" msgstr "Chýbajú údaje pre NTLM autorizáciu!\n" #: ntlm_auth.c:574 ntlm_auth.c:745 msgid "Missing:\n" msgstr "Chýba:\n" #: ntlm_auth.c:576 ntlm_auth.c:747 msgid " domain\n" msgstr " doména\n" #: ntlm_auth.c:578 ntlm_auth.c:749 msgid " username\n" msgstr " meno pou¾ívateµa\n" #: ntlm_auth.c:580 ntlm_auth.c:751 msgid " password\n" msgstr " heslo\n" #: ntlm_auth.c:582 ntlm_auth.c:753 msgid " local hostname\n" msgstr " meno lokálneho poèítaèa\n" #: ntlm_auth.c:618 ntlm_auth.c:626 ntlm_auth.c:653 ntlm_auth.c:789 #: ntlm_auth.c:797 ntlm_auth.c:824 msgid "Got unexpected response\n" msgstr "Nepredpokladaná odpoveï!\n" #: ntlm_auth.c:663 msgid "Failed NTLM nonce negotiation\n" msgstr "Chyba pri dohadovaní NTLM nonce\n" #: ntlm_auth.c:704 msgid "Trying to do proxy NTLM authorization\n" msgstr "Pokus o NTLM proxy autorizáciu\n" #: ntlm_auth.c:834 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "Chyba pri dohadovaní NTLM proxy nonce\n" #: options.h:193 msgid "\t-v - print version number\n" msgstr "\t-v - výpis informácií o verzii programu\n" #: options.h:205 msgid "\t-h - help\n" msgstr "\t-h - výpis tejto nápovedy\n" #: options.h:220 msgid "\t-X - start GUI interface\n" msgstr "\t-X - spusti GUI rozhranie\n" #: options.h:252 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" "\t-runX - zaèni okam¾ite po spustení grafického interfejsu\n" "\t sparcováva» zadané dokumenty\n" #: options.h:269 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "" "\t-prefs/-noprefs - pou¾i súbor ~/.pavuk_prefs na ulo¾enie nastavenia\n" #: options.h:499 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" "\t-progress/-noprogress\n" "\t - zobrazuj aktálny stav prenosu pri behu na terminály\n" #: options.h:523 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "\t-lmax $nr - maximálna povolená håbka stromu dokumentov\n" #: options.h:535 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "" "\t-dmax $nr - maximálny povolený poèet prenesených dokumentov\n" #: options.h:547 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "" "\t-sleep $nr - prestávka v sekundách medzi prenosom dvoch\n" "\t dokumentov, ¹tandardne 0 s\n" #: options.h:560 msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "" "\t-rsleep/-norsleep - generuj náhodné prestávky medzi prenosmi v rozsahu\n" "\t 0 a¾ po -sleep\n" #: options.h:584 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "\t-retry $nr - poèet opakovaní prenosu pri chybe\n" #: options.h:596 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "" "\t-nregets $nr - maximalny poèet pokusov o dotiahnutie dokumentu\n" "\t ¹tandardne 2\n" #: options.h:608 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" "\t-nredirs $nr - maximalny povolený poèet presmerovaní (HTTP)\n" "\t ¹tandardne 5\n" #: options.h:620 msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" "\t-timeout $nr - timeout pre sie»ovú komunikaciu (v min).\n" "\t 0 == timeout nie je pou¾itý, ¹tandardne 0\n" #: options.h:633 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" "\t-rollback $nr - poèet bajtov , ktoré sa prená¹ajú znovu pri regete\n" "\t ¹tandardne 0\n" #: options.h:647 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" "\t-ddays $nr - poèet dní, poèas ktorých sa nekontroluje nová verzia\n" "\t pri synchronizácii stromu dokumentov\n" #: options.h:660 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" "\t-nocache/-cache - zákaz prenosu kópie dokumentu z HTTP proxy/cache\n" "\t servera\n" #: options.h:683 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "\t-noRobots/-Robots - zákaz kontroly súboru \"robots.txt\"\n" #: options.h:706 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "\t-noFTP/-FTP - zákaz prenosu dokumentov cez FTP protokol\n" #: options.h:729 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "\t-noHTTP/-HTTP - zákaz prenosu dokumentov cez HTTP protokol\n" #: options.h:755 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "" "\t-noSSL/-SSL - zákaz prenosu dokumentov cez (HTTPS) SSL protokol\n" #: options.h:786 options.h:802 msgid "\t-noverify/-verify - don't verify SSL certificates\n" msgstr "\t-noverify/-verify - zákaz overovania SSL certifikátov\n" #: options.h:818 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "\t-noFTPS/-FTPS - zákaz prenosu dokumentov cez FTPS protokol\n" #: options.h:846 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "\t-noGopher/-Gopher - zákaz prenosu dokumentov cez Gopher protocol\n" #: options.h:869 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "" "\t-noCGI/-CGI - zákaz prenosu parametrických dokumentov,\n" "\t generovaných cez rozhranie CGI\n" #: options.h:892 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "" "\t-noEnc/-Enc - zákaz odkódovava» kódované(komprimované) dokumenty\n" #: options.h:915 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" "\t-noRelocate/-Relocate\n" "\t - prepisovanie odkazov vo vnútry HTML dokumentov\n" #: options.h:939 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" "\t-FTPhtml/-noFTPhtml\n" "\t - upravuj HTML súbory pochádzajúce z FTP servera\n" #: options.h:963 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" "\t-FTPlist/-noFTPlist\n" "\t - pou¾i ¹iroký výpis FTP adresárov\n" #: options.h:987 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "\t-FTPdir/-noFTPdir - povolenie prenosu obsahu FTP adresárov\n" #: options.h:1010 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" "\t-store_index/-nostore_index\n" "\t - ukladaj dokumenty s adresárovým URL ako indexové\n" "\t HTML súbory\n" #: options.h:1034 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" "\t-force_reget/-noforce_reget\n" "\t - prenos celého dokumentu, ak server nepodporuje reget\n" #: options.h:1062 msgid "\t-debug - turn on debug mode\n" msgstr "\t-debug - výpis ladiacich informacií\n" #: options.h:1093 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "" "\t-debug_level $l - èíslo úrovne ladenia, bli¾¹í popis nájdete v manuály\n" #: options.h:1106 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "\t-asite $list - zoznam povolených serverov\n" #: options.h:1118 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "\t-dsite $list - zoznam zakazaných serverov\n" #: options.h:1130 msgid "\t-adomain $list - list of allowed domains\n" msgstr "\t-adomain $list - zoznam povolených domén\n" #: options.h:1142 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "\t-ddomain $list - zoznam zakazaných domén\n" #: options.h:1154 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "\t-aprefix $list - zoznam povolených predpôn\n" #: options.h:1166 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "\t-dprefix $list - zoznam zakazaných predpôn\n" #: options.h:1178 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "\t-asfx $list - zoznam povolených prípon\n" #: options.h:1190 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "\t-dsfx $list - zoznam zakazaných prípon\n" #: options.h:1202 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "\t-amimet $list - zoznam povolených MIME typov\n" #: options.h:1214 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "\t-dmimet $list - zoznam zakazaných MIME typov\n" #: options.h:1226 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "\t-alang $list - zoznam preferovaných jazykov (iba cez HTTP)\n" #: options.h:1238 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "" "\t-acharset $list - zoznam preferovaných kódovní dokumentov\n" " (iba cez HTTP)\n" #: options.h:1250 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" "\t-scndir $dir - adresár, v ktorom sú ulo¾ené konfiguraèné súbory\n" "\t (scenáre)\n" #: options.h:1263 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "\t-cdir $dir - adresár, v ktorom je lokálny strom dokumentov\n" #: options.h:1275 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "" "\t-subdir $dir - podadresár v lokálnom strome, s ktorým sa pracuje\n" #: options.h:1287 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" "\t-scenario $str - meno scenára, ktorý sa má naèíta», prípadne\n" "\t vykona»\n" #: options.h:1300 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" "\t-auth_scheme 1/2/3/4/usr/basic/digest/ntlm\n" "\t - autorizaèná schéma pre HTTP autorizáciu\n" "\t 1-user 2-Basic 3-Digest, ¹tandardne 2\n" #: options.h:1313 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "\t-auth_name $str - meno pou¾ívateµa pre HTTP autorizáciu\n" #: options.h:1325 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "\t-auth_passwd $str - heslo pre HTTP autorizáciu\n" #: options.h:1337 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - pou¾i jednu HTTP digest access authorization\n" "\t nonce vo viacerých po¾iadavkách\n" #: options.h:1362 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - pou¾i jednu HTTP digest access authorization\n" "\t nonce vo viacerých po¾iadavkách\n" #: options.h:1390 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" "\t-ssl_cert_passwd $str\n" "\t - heslo pre súbor so SSL certifikátom\n" #: options.h:1407 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - súbor so SSL certifikátom\n" #: options.h:1424 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "\t-ssl_key_file $str - súbor s kµúèom pre SSL certifikát\n" #: options.h:1440 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" "\t-ssl_cipher_list $str\n" "\t - zoznam preferovných SSL ¹ifier pri komunikácii\n" #: options.h:1457 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "\t-egd_socket $file - cesta ku soketu EGD deamona\n" #: options.h:1470 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "" "\t-from $str - e-mail-ová adresa pre identifikáciu pou¾ívateµa\n" #: options.h:1482 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" "\t-send_from/-nosend_from\n" "\t - posielaj identifikáciu pou¾ívateµa v hlavièke HTTP\n" "\t po¾iadavku\n" #: options.h:1507 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "\t-identity $str - obsah polo¾ky User-Agent: v HTTP po¾iadavke\n" #: options.h:1519 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "\t-pattern $list - zoznam wildcard výrazov pre mená súborov\n" #: options.h:1534 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "\t-rpattern $re - regulárny výraz na matchovanie mena súboru\n" #: options.h:1547 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" "\t-skip_pattern $list\n" "\t - zoznam wildcard výrazov pre dokumenty, ktoré\n" "\t sa nemajú spracováva»\n" #: options.h:1563 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" "\t-skip_pattern $re\n" "\t - regulárny výraz pre dokumenty, ktoré sa nemajú\n" "\t spracováva»\n" #: options.h:1577 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "\t-url_pattern $list - zoznam wildcard výrazov pre URL\n" #: options.h:1592 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "\t-url_rpattern $re - regulárny výraz na matchovanie URL\n" #: options.h:1605 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" "\t-skip_url_pattern $list\n" "\t - zoznam wildcard výrazov pre URL, ktoré\n" "\t sa nemajú spracováva»\n" #: options.h:1621 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" "\t-skip_url_rpattern $re\n" "\t - regulárny výraz na matchovanie URL, ktoré\n" "\t sa nemajú spracováva»\n" #: options.h:1635 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" "\t mirror - make exact copy of remote site\n" msgstr "" "\t-mode $mode - nastavenie módu èinnosti\n" "\t normal - rekurzívne prechádzanie WWW dokumentov\n" "\t (¹tandardný mód)\n" "\t linkupdate - prepísanie vzdialených odkazov\n" "\t v HTML dokumentoch na lokálne ak\n" "\t URL existuje v lokálnom strome\n" "\t sync - synchronizácia lokálneho stromu so\n" "\t vzdialeným\n" "\t singlepage - prenos jednej stránky so v¹etkými\n" "\t zahrnutými objektami\n" "\t (obrázky , zvuky , ...)\n" "\t singlereget - prenos opakuj, kým nieje dokument\n" "\t preneseny celý\n" "\t resumeregets - prenos dokumentov, ktoré neboli\n" "\t prenesené kompletné\n" "\t dontstore - prenesú sa dokumenty, ale\n" "\t neukladajú sa v lokálnom strome\n" "\t dokumentov\n" "\t reminder - kontrola zmeny URL\n" "\t ftpdir - výpis súborov vo FTP adresáry\n" "\t mirror - vytvorenie presnej kópie servra\n" #: options.h:1658 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" #: options.h:1671 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" #: options.h:1684 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" #: options.h:1700 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" #: options.h:1714 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - gopher proxy je HTTP gateway pre Gopher\n" #: options.h:1739 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - ftp proxy je HTTP gateway pre FTP\n" #: options.h:1764 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - pou¾i CONNECT request na HTTP proxy pre FTP\n" "\t spojenia\n" #: options.h:1792 msgid "\t-browser $str - your preferred browser programm\n" msgstr "\t-browser $str - program na prehliadanie WWW stránok\n" #: options.h:1808 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "\t-xmaxlog - maximálna då¾ka okna správ\n" #: options.h:1821 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "\t-dumpscn $str - ulo¾enie konfigurácie do scenára $str\n" #: options.h:1833 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "" "\t-maxsize $nr - maximálna povolená veµkos» dokumentu v bajtoch\n" #: options.h:1845 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "" "\t-minsize $nr - minimálna povolená veµkos» dokumentu v bajtoch\n" #: options.h:1857 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - heslo pre HTTP proxy autorizáciu\n" #: options.h:1870 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - meno pou¾ívateµa pre HTTP proxy autorizáciu\n" #: options.h:1883 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_auth 1/2/3/4/user/basic/digest/ntlm\n" "\t - autorizaèná schéma pre HTTP proxy autorizáciu\n" #: options.h:1896 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "\t-logfile $file - meno logovacieho súboru\n" #: options.h:1908 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "\t-slogfile $file - meno súboru pre krátky log\n" #: options.h:1920 msgid "\t-tlogfile $file - name of file where time log will be stored\n" msgstr "\t-tlogfile $file - meno súboru s èasovým logom\n" #: options.h:1932 msgid "" "\t-trelative $str (object/program)\n" "\t - what timings are relative to\n" msgstr "" "\t-trelative $str (object/program)\n" "\t - na èo sa vz»ahuje èasovanie\n" #: options.h:1945 msgid "" "\t-transparent_proxy $site[:$port]\n" "\t - transparent proxy\n" msgstr "" "\t-transparent_proxy $site[:$port]\n" "\t - transparený proxy server\n" #: options.h:1958 msgid "" "\t-transparent_ssl_proxy $site[:$port]\n" "\t - transparent SSL proxy\n" msgstr "" "\t-transparent_ssl_proxy $site[:$port]\n" "\t - transparentný SSL proxy server\n" #: options.h:1971 msgid "" "\t-sdemo_mode/-notsdemo_mode\n" "\t - sdemo compatible output\n" msgstr "" "\t-sdemo_mode/-notsdemo_mode\n" "\t - výstup kompatibilný s \"sdemo\"\n" #: options.h:1984 msgid "\t-noencode - do not perform rfc 2396 character encoding\n" msgstr "\t-noencode - nevykonáva» kódovanie znakov podµa rfc 2396\n" #: options.h:1996 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "\t-stime/-nostime - vypí¹ èas zaèiatku a konca prenosu\n" #: options.h:2019 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - zma¾ pri synchronizácii neplatné súbory a adresáre\n" #: options.h:2045 msgid "" "\t-remove_before_store/-noremove_before_store\n" "\t - remove file before storing new content\n" msgstr "" "\t-remove_before_store/-noremove_before_store\n" "\t - vyma¾ súbor pred ulo¾ením nového obsahu\n" #: options.h:2069 msgid "" "\t-always_mdtm/-noalways_mdtm\n" "\t - always use MDTM to determine modifictaion time\n" "\t of remote file; never use values from file listing\n" msgstr "" "\t-always_mdtm/-noalways_mdtm\n" "\t - v¾dy pou¾i» MDTM na zistenie èasu modifikácie\n" "\t FTP súboru, nikdy nepou¾i» hodnotu z výpisu adresára\n" #: options.h:2094 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" "\t-auth_file $file - súbor, v ktorom sú ulo¾ené autorizaèné informácie\n" #: options.h:2107 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" "\t-base_level $nr - koµko úrovní adresárového stromu odreza» v\n" "\t lokálnom strome\n" #: options.h:2119 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "\t-ftp_active - pou¾ívaj aktívne dátové FTP spojenie\n" #: options.h:2131 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "\t-ftp_passive - pou¾ívaj pasívne dátové FTP spojenie\n" #: options.h:2143 msgid "" "\t-active_ftp_port_range $min:$max\n" "\t - range of FTP data connection ports used\n" "\t for active ftp\n" msgstr "" "\t-active_ftp_port_range $min:$max\n" "\t - rozsah portov pou¾itých pre FTP dátové\n" "\t spojenia pri aktívnom FTP\n" #: options.h:2160 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "\t-msgcat $dir - adresár, v ktorom sú ulo¾ené katalógy správ\n" #: options.h:2176 msgid "\t-language $str - set language for messages\n" msgstr "\t-language $str - nastav jazyk pre katalóg správ\n" #: options.h:2189 msgid "\t-quiet - don't show output messages\n" msgstr "\t-quiet - nezobrazova» ¾iadne správy\n" #: options.h:2201 msgid "\t-verbose - show output messages (default)\n" msgstr "\t-verbose - zobrazova» správy\n" #: options.h:2213 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-newer_than $time - prenes iba dokumenty modifikované po $time\n" "\t formát èasu : RRRR.MM.DD.hh:mm\n" #: options.h:2226 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-older_than $time - prenes iba dokumenty modifikované pred $time\n" "\t formát èasu : RRRR.MM.DD.hh:mm\n" #: options.h:2239 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-schedule $time - naplánuj spustenie pavuka o $time\n" "\t formát èasu : RRRR.MM.DD.hh:mm\n" #: options.h:2252 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "" "\t-reschedule $nr - poèet hodín po, ktorých sa pavuk znovu\n" "\t spustí (cyklické plánovanie)\n" #: options.h:2265 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" "\t-dont_leave_site/-levave_site\n" "\t - (ne)opusti server zadaný v ¹tartovacom URL\n" #: options.h:2289 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" "\t-dont_leave_dir/-leave_dir\n" "\t - (ne)opusti adresár zadaný v ¹tartovacom URL\n" #: options.h:2313 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" "\t-preserve_time/-nopreserve_time\n" "\t - zachovávaj èas modifikácie dokumentu\n" #: options.h:2337 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" "\t-preserve_perm/-nopreserve_perm\n" "\t - zachovaj prístupové práva k súborom\n" #: options.h:2361 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - zachovaj ukazovatele symbolických liniek\n" #: options.h:2385 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" "\t-leave_level $nr - koµko úrovní v strome dokumentov moze by»\n" "\t mimo ¹tartovací server, (0 = neobmedzene),\n" "\t ¹tandardne 0\n" #: options.h:2398 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "" "\t-cookie_file $file - súbor, v ktorom sú ulo¾ené HTTP cookies vo\n" "\t formáte Netscape Navigátora\n" #: options.h:2410 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" "\t-cookie_send/-nocookie_send\n" "\t - povoµ posielanie HTTP cookies\n" #: options.h:2434 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" "\t-cookie_recv/-nocookie_recv\n" "\t - akceptuj cookies zaslané HTTP serverom\n" #: options.h:2458 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" "\t-cookie_update/-nocookie_update\n" "\t - synchronizuj pamä»ové cookies s cookies\n" "\t v súbore\n" #: options.h:2482 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" "\t-cookie_check/-nocookie_check\n" "\t - kontroluj, èi server nenastavuje cookie pre\n" "\t cudziu doménu\n" #: options.h:2506 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "\t-cookies_max $nr - maximalny akceptovateµný poèet cookies\n" #: options.h:2518 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" "\t-disabled_cookie_domains $list\n" "\t - zoznam domén, z ktorých je zakázané prijíma» cookies\n" #: options.h:2531 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - nespracovávaj URL z atribútu $ATTRIB\n" "\t HTML znaèky $TAG\n" #: options.h:2545 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - spracovávaj URL z atribútu $ATTRIB\n" "\t HTML znaèky $TAG\n" #: options.h:2562 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "\t-gui_font $font - meno fontu pou¾ívaného v grafickom rozhraní\n" #: options.h:2575 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" "\t-user_condition $str\n" "\t - program alebo skript, ktorý definuje pou¾ívateµovu\n" "\t podmienku, viac informácií nájdete v manuály\n" #: options.h:2589 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "" "\t-tr_del_chr $str - znaky, ktoré budú vymazané z mena lokálneho\n" "\t súboru\n" #: options.h:2602 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" "\t-tr_str_str $str1 $str2\n" "\t - zmeò re»azec $str1 na $str2 v mene lokálneho\n" "\t súboru\n" #: options.h:2615 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - zmeò znaky z $chrset1 na zodpovedajúce znaky z\n" "\t $chrset2 v mene lokálneho súboru\n" #: options.h:2628 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "" "\t-index_name $str - meno indexového súboru adresára,\n" "\t ¹tandardne _._.html\n" #: options.h:2640 msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "\t-store_name $str - lokalne meno prvého preneseného dokumentu\n" #: options.h:2663 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - porovnaj prenesenú veµkos» súboru s veµkos»ou,\n" "\t ktorú poskytol server\n" #: options.h:2688 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" "\t-urls_file $file - naèítavaj URL zo súboru, naèítavanie sa ukonèí\n" "\t po naèítaní riadku obsahujúceho znak \".\"\n" #: options.h:2701 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" "\t-bg/-nobg - odpoj proces pavúka od terminálu a nevypisuj na\n" "\t terminál ¾iadne správy\n" #: options.h:2725 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "" "\t-maxrate $nr - limit na maximálnu povolenú rýchlos» prenosu (kB/s)\n" #: options.h:2737 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "" "\t-minrate $nr - limit na minimálnu po¾adovanú rýchlos» prenosu (kB/" "s)\n" #: options.h:2749 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "\t-bufsize $nr - veµkos» vyrovnávacej pamäte pri èítaní (kB)\n" #: options.h:2761 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "" "\t-file_quota $nr - maximálna povolená veµkos» prenesenej èasti\n" "\t súboru v kB\n" #: options.h:2773 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "\t-trans_quota $nr - maximálny povolený objem prenesených dát (kB)\n" #: options.h:2785 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "" "\t-fs_quota $nr - minimálny po¾adovaný voµný priestor v súborovom\n" "\t systéme\n" #: options.h:2797 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" "\t-enable_js/-disable_js\n" "\t - povoµ prenos zdrojových súborov javascript skriptov\n" #: options.h:2821 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" "\t-fnrules $t $m $r - pravidlo na vytváranie mien súborov v lokálnom\n" "\t strome dokumentov (lep¹ie vysvetlenie je v manuály)\n" #: options.h:2834 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" "\t-store_info/-nostore_info\n" "\t - ukladaj informácie o dokumente do zvlá¹tneho súboru\n" "\t pre ka¾dý dokument\n" #: options.h:2858 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" "\t-all_to_local/-noall_to_local\n" "\t - zmeò v¹etky odkazy v HTML dokumente na lokálne\n" "\t ihneï po prenesení dokumentu\n" #: options.h:2883 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" "\t-sel_to_local/-nosel_to_local\n" "\t - zmeò v¹etky odkazy v HTML dokumente, ktoré spåñajú\n" "\t obmedzujúce podmienky, na lokálne, ihòeï po\n" "\t prenesení dokumentu\n" #: options.h:2909 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" "\t-all_to_remote/-noall_to_remote\n" "\t - zmeò v¹etky odkazy v HTML dokumente na vzdialené\n" "\t ihneï po prenesení dokumentu, a ponechaj ich tak\n" #: options.h:2935 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "" "\t-remind_cmd $str - príkaz na odoslanie výsledkov behu v reminder móde\n" #: options.h:2947 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" "\t-auto_referer/-noauto_referer\n" "\t - v HTTP po¾iadavkách ¹tartovacích dokumentov nastav\n" "\t v polo¾ke Referer: vlastné URL\n" #: options.h:2972 msgid "" "\t-referer/-noreferer\n" "\t - send Referer: field in HTTP request\n" msgstr "" "\t-referer/-noreferer\n" "\t - neposiela» Referer: polo¾ku v HTTP po¾iadavkách\n" #: options.h:2996 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" "\t-url_strategy $strategy\n" "\t - stratégia usporiadavania dokumentov v zozname na\n" "\t prenos. $strategie je jeden re»azec z nasledujúcich\n" "\t level - prechaádzanie stromu URL do ¹írky\n" "\t leveli - prechaádzanie stromu URL do ¹írky,\n" "\t inline objekty idú napred\n" "\t pre - prechaádzanie stromu URL do håbky\n" "\t prei - prechaádzanie stromu URL do håbky,\n" "\t inline objekty idú napred\n" #: options.h:3020 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "\t-nscache_dir $dir - cache adresár prehliadaèa Netscape\n" #: options.h:3036 msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr "" "\t-ie_cache - povoµ naèítavanie súborov z cache MSIE prehliadaèa\n" #: options.h:3067 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" "\t-remove_adv/-noremove_adv\n" "\t - povoµ odstraòovanie reklamných banerov z HTML " "stránok\n" "\t tento prepínaè predpokladá, ¾e sú nastavené " "regulárne\n" "\t výrazy na vyhladanie reklamných banerov pomocou -" "adv_re\n" #: options.h:3101 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "" "\t-adv_re $RE - regulárny výraz na kontrolu reklamných banerov\n" #: options.h:3118 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" "\t-check_bg/-nocheck_bg\n" "\t - ak proces pavúka be¾í na pozadí, nevypisuj ¾iadne\n" "\t správy na terminál\n" #: options.h:3148 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" "\t-send_if_range/-nosend_if_range\n" "\t - posielaj hlavièku If-Range v HTTP po¾iadavke\n" "\t aktivuj túto voµbu, ak HTTP server generuje " "rozdielne\n" "\t ETag: polo¾ky pre jeden nezmenený dokument v dvoch\n" "\t nasledujúcich po¾iadavkách\n" #: options.h:3174 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "\t-sched_cmd $str - vzor príkazu pre plánovanie (príkaz at)\n" #: options.h:3186 msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" "\t-unique_log/-nounique_log\n" "\t - ak originálny logovací súbor je pou¾ívaný iným\n" "\t procesom, pokús sa nájs» nový pomocou èíselnej " "prípony\n" #: options.h:3211 msgid "" "\t-read_css/-noread_css\n" "\t - fetch objects mentioned in style sheets\n" msgstr "" "\t-read_css/-noread_css\n" "\t - s»ahova» súbory uvádzané v kaskadových ¹týloch\n" #: options.h:3235 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" "\t-post_cmd $str - príkaz na post-spracovanie, ktorý bude spustený\n" "\t po úspe¹nom prenose a spracovaní dokumentu pavúkom\n" #: options.h:3252 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" "\t-ssl_version $v - verzia SSL protokolu, ktorá bude pou¾itá pri\n" "\t komunikácii s HTTPS serverom\n" "\t prípustné hodnoty: ssl23,ssl2,ssl3,tls1\n" #: options.h:3256 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" "\t-ssl_version $v - verzia SSL protokolu, ktorá bude pou¾itá pri\n" "\t komunikácii s HTTPS serverom\n" "\t prípustné hodnoty: ssl23,ssl2,ssl3\n" #: options.h:3274 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" "\t-unique_sslid/-nounique_sslid\n" "\t - pou¾i jediné SSL ID pre v¹etky SSL spojenia\n" #: options.h:3303 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "\t-httpad $hdr - doplòujúce polo¾ky HTTP po¾iadavky\n" #: options.h:3315 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "" "\t-statfile $str - súbor, do ktorého budú zapísané ¹tatistiky prenosu\n" #: options.h:3330 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "" "\t-ewait - èakaj na ukonèenie programu pou¾ívateµom, po\n" "\t skonèení v¹etkých prenosov\n" #: options.h:3362 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "\t-aip_pattern $re - povolený vzor IP adresy servera\n" #: options.h:3378 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "\t-dip_pattern $re - zakázaný vzor IP adresy servera\n" #: options.h:3391 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "" "\t-site_level $nr - maximálny poèet server v URL strome, ktoré je\n" "\t povolené prejs» zo ¹tartovacieho servera\n" #: options.h:3404 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" "\t-use_http11/-nouse_http11\n" "\t - povolenie pou¾itia HTTP/1.1 protokolu pri\n" "\t komunikácii s HTTP serverom, ¹tandardne vypnuté\n" #: options.h:3429 msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" "\t -max_time $nr - maximálny povolený èas behu programu v minútach,\n" "\t ¹tandardne 0 - bez limitu\n" "\t v prípade potreby zadava» èas pod 1 min.,\n" "\t je mo¾né pou¾i» èísla s plavajúcou desatinnou " "èiarkou\n" #: options.h:3445 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" "\t-local_ip $str - pou¾i túto lokálnu adresu sie»ového rozhrania pri\n" "\t sie»ovej komunikácii. Tento prepínaè je vhodný pre\n" "\t poèítaèe pripojené do viacero sietí.\n" #: options.h:3458 msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-request $req - roz¹írené informácie pre po¾iadavku, pou¾íva sa na\n" "\t urèenie informácií pre HTTP POST alebo GET " "po¾iadavku\n" "\t formát parametra:\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$premenna=$hodnota\n" "\t FILE:$premenna=$meno_suboru\"\n" "\t LNAME:$localne_meno\"\n" "\t (viac informácií nájdete v manuálovej stránke)\n" #: options.h:3477 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" "\t-hash_size $nr - veµkos» interných hash tabuliek (ladenie výkonu pri\n" "\t leµkom mno¾stve spracovávaných dokumentov\n" #: options.h:3492 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "\t-nthreads $nr - poèet súèastne s»ahujúcich threadov\n" #: options.h:3508 msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" "\t-immesg/-noimmesg - vypisuj správy okam¾ite a neèakaj a¾ keï je to\n" "\t bezpeèné (z hµadiska multithreadingu)\n" #: options.h:3537 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-formdata $data - dáta pre HTML formuláre, ktorými sa formulár\n" "\t automaticky vyplní ak je formulár s daným URL\n" "\t nájdený v nejakom HTML dokumente.\n" "\t Formát parametra:\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (viac informácií nájdete v manuálovej stránke)\n" #: options.h:3556 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" "\t-dumpfd $nr - èíslo deskriptora, do ktrého sa budú zapisova»\n" "\t dokumenty miesto do súboru\n" #: options.h:3569 msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" "\t-dump_urlfd $nr - èíslo deskriptora, do ktrého sa budú zapisova»\n" "\t v¹etky nájdené URL v dokumentoch\n" #: options.h:3582 msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" "\t-del_after/-nodel_after\n" "\t - zma¾ z FTP servera dokumenty po úspe¹nom prenose\n" #: options.h:3606 msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" "\t-unique_name/-nounique_name\n" "\t - generuj jedineèné mená lokálnych súborov pre\n" "\t dokumenty\n" #: options.h:3630 msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - (ne)opusti adresár do ktorého sme vstupili ako\n" "\t do prvého na tomto servery\n" #: options.h:3654 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" "\t-singlepage/-nosinglepage\n" "\t - prenes jednu HTML stránku so v¹etkými jej objektami\n" #: options.h:3678 msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" "\t-dump_after/-nodump_after\n" "\t - pri pou¾ití s voµbou -dumpfd, dokument bude vypísaný\n" "\t a¾ po spracovaní odkazov v HTML dockumentoch\n" #: options.h:3704 msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" "\t-dump_response/-nodump_response\n" "\t - ak je po¾itá aj voµba -dumpfd, vypisuj aj odpovede\n" "\t servera\n" #: options.h:3732 msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" "\t-auth_ntlm_domain $str\n" "\t - SMB doména pre HTTP NTLM authorizáciu\n" #: options.h:3749 msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB doména pre HTTP proxy NTLM authorizáciu\n" #: options.h:3766 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" "\t-js_pattern $re - vlastné RE vzory pre parsovanie URL v jascriptových\n" "\t skriptoch\n" #: options.h:3780 msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" "\t-follow_cmd $str - pou¾ívateµský skript urèený na rozhodnutie, èi\n" "\t pokraèova» v spracovaní odkazov z aktuálneho HTML\n" "\t dokumentu\n" #: options.h:3793 msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - prenes symbolické linky z FTP servera ako normálne\n" "\t súbory\n" #: options.h:3820 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform $p $t $h $a\n" "\t - vlastný RE vzor pre JavaScript s transformaèným\n" "\t pravidlom\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" #: options.h:3841 msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform2 $p $t $h $a\n" "\t - vlastný RE vzor pre JavaScript s transformaèným\n" "\t pravidlom a prepisovaním prvého podvzoru regulárnho\n" "\t v ¹pecifikácii URL\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" #: options.h:3860 msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_user $str\n" "\t - meno pou¾ívateµa pre FTP proxy autorizáciu\n" #: options.h:3873 msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_pass $str\n" "\t - heslo pre FTP proxy autorizáciu\n" #: options.h:3886 msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - aplikuj obmedzujúce pravidlá na inline objekty\n" #: options.h:3910 msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" "\t-ftp_list_options $str\n" "\t - doplòujúce parametre pre LIST a NLST FTP príkazy\n" #: options.h:3924 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - pokús sa lep¹ie detekova» neexistujúce adresáre\n" "\t na FTP serveroch s WuFTP daemonom\n" #: options.h:3950 msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" "\t-post_update/-nopost_update\n" "\t - upravuj v rodièovských HTML dokumentoch iba linky\n" "\t na aktuálny dokument\n" #: options.h:3975 msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" "\t-info_dir $dir - samostatný adresár pre info súbory\n" "\t nepou¾íva» priamo strom dokumentov\n" #: options.h:3988 msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "\t-mozcache_dir $dir - cache adresár prehliadaèa Mozilla\n" #: options.h:4000 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "\t-aport $list - zoznam povolených portov serverov\n" #: options.h:4013 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "\t-dport $list - zoznam zakázaných portov serverov\n" #: options.h:4026 msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" "\t-hack_add_index/-nohack_add_index\n" "\t - zaraïuj do fronty pre s»ahovanie aj rodièovské\n" "t adresáre v¹etkych dokumentov\n" #: options.h:4051 msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" "\t-default_prefix $str\n" "\t - ¹tandardný prefix URL pre podadresár lokálneho\n" "\t stromu dokumentov\n" #: options.h:4068 msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" "\t-js_script_file $file\n" "\t - súbor s JavaScript funkciami pre interpreter\n" #: options.h:4082 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" "\t-ftp_login_handshake $host $handshake\n" "\t - uprav prihlasovaciu procedúru pre FTP server\n" #: options.h:4098 msgid "" "\t-nss_cert_dir $dir - set certificate config directory for Netscape NSS\n" msgstr "" "\t-nss_cert_dir $dir - nastav konfiguraèný súbor certifikátov pre Netscape " "NSS\n" #: options.h:4114 msgid "" "\t-nss_accept_unknown_cert/-nonss_accept_unknown_cert\n" "\t - accept SSL server certificates not listed in\n" "\t certificate database\n" msgstr "" "\t-nss_accept_unknown_cert/-nonss_accept_unknown_cert\n" "\t - prija» certifikáty SSL servrov, ktoré nie sú uvedené\n" "\t v databáze certifikátov\n" #: options.h:4147 msgid "" "\t-nss_domestic_policy/-nss_export_policy\n" "\t - set policy for SSL ciphers in NSS\n" msgstr "" "\t-nss_domestic_policy/-nss_export_policy\n" "\t - nastavenie pravidiel pre SSL ¹ifry v NSS\n" #: options.h:4179 msgid "" "\t-dont_touch_url_rpattern $re\n" "\t - RE pattern of URL which should not be touched\n" "\t by URL rewriting engine\n" msgstr "" "\t-dont_touch_url_rpattern $re\n" "\t - regulárny výraz pre URL ktoré sa nemajú prepisova»\n" #: options.h:4194 msgid "" "\t-dont_touch_url_pattern $list\n" "\t - wilcard patterns of URLs which should not\n" "\t be touched by URL rewriting engine\n" msgstr "" "\t-dont_touch_url_pattern $list\n" "\t - wilcard vzor pre URLktré sa nemajút\n" "\t pozmeòova» v dokumentoch\n" #: options.h:4211 msgid "" "\t-dont_touch_tag_rpattern $re\n" "\t - RE pattern of HTML tag in which URLs should\n" "\t not be touched by URL rewriting engine\n" msgstr "" "\t-dont_touch_tag_rpattern $re\n" "\t - regulárny výraz pre HTML tag, v ktorom nemajú by»\n" "\t URL pozmeòované\n" #: options.h:4226 msgid "" "\t-tag_pattern $tag $attrib $url\n" "\t - wilcard patterns for precise matching of URLs\n" "\t inside HTML tags\n" msgstr "" "\t-tag_pattern $tag $attrib $url\n" "\t - wilcard vzor na presnej¹ie vyhµadávanie URL\n" "\t v HTML znaèkách\n" #: options.h:4243 msgid "" "\t-tag_rpattern $tag $attrib $url\n" "\t - RE patterns for precise matching of URLs\n" "\t inside HTML tags\n" msgstr "" "\t-tag_rpattern $tag $attrib $url\n" "\t - regulárny výraz pre presnej¹ie vyhµadávanie URL\n" "\t v HTML znaèkách\n" #: pavuk.c:107 #, c-format msgid "QUIT signal catched\n" msgstr "Bol prijatý signál QUIT\n" #: pavuk.c:263 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "Nedostatoèný poèet parametrov \"-msgcat\"\n" #: pavuk.c:278 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "Nedostatoèný poèet parametrov \"-scenario\"\n" #: pavuk.c:308 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "Chyba: bol zadaný chybný deskriptor súboru vo voµbe -dumpfd\n" #: pavuk.c:321 msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "Chyba: bol zadaný chybný deskriptor súboru vo voµbe -dump_urlfd\n" #: pavuk.c:376 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "" "Upozornenie: nie je uvedené -scndir , ukladanie pokraèuje v aktuálnom " "adresáry\n" #: pavuk.c:417 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "Nie je mo¾né spusti» pavúka na pozadí - pobe¾í na popredí\n" #: pavuk.c:421 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "Pavúk pobe¾í na pozadí s PID %d\n" #: pavuk.c:441 #, c-format msgid "reading URLs from file - %s\n" msgstr "èítanie URL zo súboru - %s\n" #: recurse.c:77 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "" "Uzamknutý dokument bol naplanovaný na neskor¹ie spracovanie ako è. %d\n" #: recurse.c:92 msgid "Running post-processing command\n" msgstr "Spú¹»a sa príkaz na post-spracovanie\n" #: recurse.c:235 #, c-format msgid "retry no. %d\n" msgstr "pokus è. %d\n" #: recurse.c:238 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "URL[%2d]: %5d(%d) z %5d %s\n" #: recurse.c:241 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "URL: %5d(%d) z %5d %s\n" #: recurse.c:252 recurse.c:398 msgid "Starting download" msgstr "Zaèiatok prenosu" #: recurse.c:280 msgid "Already processed\n" msgstr "U¾ bolo spracované\n" #: recurse.c:287 msgid "Disallowed by user\n" msgstr "Zakázané pou¾ívateµom\n" #: recurse.c:300 msgid "Disallowed by rules\n" msgstr "Zakázané podµa pravidiel\n" #: recurse.c:307 msgid "Checking \"robots.txt\"" msgstr "Kontrola \"robots.txt\"" #: recurse.c:311 msgid "Disallowed by \"robots.txt\"\n" msgstr "Zakázné v \"robots.txt\"\n" #: recurse.c:322 msgid "This URL type is not supported with ftpdir mode\n" msgstr "Tento typ URL nie je podporovaný v móde ftpdir\n" #: recurse.c:349 msgid "No transfer - file not expired\n" msgstr "Bez prenosu - súbor zatial neexpiroval\n" #: recurse.c:365 #, c-format msgid "Starting time : %s\n" msgstr "Èas ¹tartu : %s\n" #: recurse.c:408 recurse.c:575 #, c-format msgid "Ending time : %s\n" msgstr "Èas konca : %s\n" #: recurse.c:415 recurse.c:578 msgid "download" msgstr "prenos" #: recurse.c:522 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "posledný dokument je uzamknutý -> o 5 sekúnd prebehne ïal¹í pokus\n" #: recurse.c:589 msgid "Relocating and scanning HTML document" msgstr "Relokácia a parsovanie HTML dokumentu" #: recurse.c:641 msgid "Dumping processed document" msgstr "Zápis spracovaného dokumentu" #: recurse.c:660 msgid "Storing document" msgstr "Ukladanie dokumentu" #: recurse.c:666 msgid "Store failed\n" msgstr "Ukladanie dokumentu nebolo úspe¹né\n" #: recurse.c:769 recurse.c:855 msgid "Done" msgstr "Hotovo" #: recurse.c:927 remind.c:369 msgid "Sleeping ..." msgstr "Uspaný ..." #: recurse.c:941 remind.c:386 msgid "Exiting ..." msgstr "Ukonèený ..." #: recurse.c:1047 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d bajtov)\n" #: recurse.c:1103 msgid "Searching for files to resume" msgstr "Hµadanie súborov, ktoré neboli prenesené úplne" #: recurse.c:1134 #, c-format msgid "Adding %s to resume list\n" msgstr "Pripojenie %s do zoznamu na dokonèenie prenosu\n" #: recurse.c:1166 msgid "Searching for documents to synchronize" msgstr "Hµadanie súborov na synchronizáciu" #: recurse.c:1224 recurse.c:1253 #, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "Pripojenie %s do zoznamu pre synchronizáciu ako URL %s\n" #: remind.c:40 #, c-format msgid "Checking: %s\n" msgstr "Kontrolujem: %s\n" #: remind.c:164 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "Chybná polo¾ka databázy pripomínaèa - %s\n" #: remind.c:520 #, c-format msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "Toto je výsledok behu programu pavúk v reminder móde\n" "\n" #: remind.c:531 #, c-format msgid "Changed URLs\n" msgstr "Zmanené URL\n" #: remind.c:552 #, c-format msgid "URLs with some errors\n" msgstr "URL, pri ktorých sa vyskytla chyba\n" #: robots.c:159 msgid "transfering \"robots.txt\"" msgstr "prenos \"robots.txt\"" #: robots.c:162 msgid "transfering \"robots.txt\"\n" msgstr "prenos \"robots.txt\"\n" #: robots.c:224 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "Hmm: presmerovanie \"robots.txt\" na %s ???\n" #: stats.c:138 stats.c:222 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "Celkový poèet dokumentov vo fronte: %d\n" #: stats.c:139 stats.c:224 #, c-format msgid "Starting urls: %d\n" msgstr "©tartovacie URL : %d\n" #: stats.c:142 stats.c:229 #, c-format msgid "Not processed yet: %d (%3d%%)\n" msgstr "Zatiaµ nespracované: %d (%3d%%)\n" #: stats.c:147 stats.c:236 #, c-format msgid "Processed OK: %d (%3d%%)\n" msgstr "Spracované bez chýb: %d (%3d%%)\n" #: stats.c:150 stats.c:242 #, c-format msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "Naèítané z lokálneho stromu dokumentov: %d (%3d%%)\n" #: stats.c:154 stats.c:249 #, c-format msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "Naèítané z cache adresára Netscape prehliadaèa: %d (%3d%%)\n" #: stats.c:157 stats.c:255 #, c-format msgid "Downloaded over network: %d (%3d%%)\n" msgstr "Prenesené po sieti: %d (%3d%%)\n" #: stats.c:160 stats.c:261 #, c-format msgid "Moved to another location: %d (%3d%%)\n" msgstr "Presunuté na iné miesto: %d (%3d%%)\n" #: stats.c:164 stats.c:267 #, c-format msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "Prenesené neúplné: %d (%3d%%)\n" #: stats.c:170 stats.c:274 #, c-format msgid "Non fatal errors: %d (%3d%%)\n" msgstr "Dokumenty s menej záva¾nými chybami: %d (%3d%%)\n" #: stats.c:176 stats.c:281 #, c-format msgid "Not found documents: %d (%3d%%)\n" msgstr "Dokumenty, ktoré neboly nájdené na vzdialenom servery: %d (%3d%%)\n" #: stats.c:182 stats.c:288 #, c-format msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "Dokumenty so záva¾nými chybami: %d (%3d%%)\n" #: stats.c:188 #, c-format msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "Dokumenty s neznámim stavom: %d (%3d%%)\n" #: stats.c:296 #, c-format msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "Dokumenty bez ¹pecifického stavu: %d (%3d%%)\n" #: stats.c:357 msgid "Pavuk: save status page" msgstr "Pavúk: ulo¾ statistiku" #: stats.c:378 stats.c:530 msgid "Not available yet" msgstr "Nie je dostupná" #: stats.c:458 msgid "Pavuk: status page" msgstr "Pavúk: ¹tatistický report" #: stats.c:476 msgid "Status page" msgstr "©tatistický report" #: stats.c:487 msgid "Save ..." msgstr "Ulo¾ ..." #: stats.c:494 msgid "Refresh" msgstr "Aktualizuj" #: stats.c:519 msgid "Try download" msgstr "Skús prenies»" #: tag_pattern.c:39 msgid "Bad -tag_pattern tag wildcard pattern\n" msgstr "Chybný wildcard vzor v -tag_pattern tag\n" #: tag_pattern.c:46 msgid "Bad -tag_pattern attribute wildcard pattern\n" msgstr "Chybný wildcard vzor v -tag_pattern attribute\n" #: tag_pattern.c:53 msgid "Bad -tag_pattern url wildcard pattern\n" msgstr "Chybný wildcard vzor v -tag_pattern url\n" #: tag_pattern.c:68 msgid "Bad -tag_rpattern tag RE pattern\n" msgstr "Cybný regulárny výraz pre -tag_rpattern\n" #: tag_pattern.c:70 msgid "Bad -tag_rpattern attribute RE pattern\n" msgstr "Chybný atribút regulárneho výrazu pre -tag_rpattern\n" #: tag_pattern.c:72 msgid "Bad -tag_rpattern url RE pattern\n" msgstr "Chybný regulárny výraz pre URL v -tag_rpattern\n" #: tools.c:104 msgid "no error" msgstr "bez chyby" #: tools.c:109 msgid "host not found" msgstr "server nebol nájdený" #: tools.c:114 msgid "temporary error (try again later)" msgstr "doèasná chyba (skúste neskôr)" #: tools.c:119 msgid "non recoverable error" msgstr "fatálna chyba" #: tools.c:124 msgid "name is valid, but doesn't have an IP address" msgstr "menná adresa je správna, ale nemá pridelenú ¾iadnu IP adresu" #: tools.c:128 msgid "unknown hostname translation error" msgstr "neznáma chyba pri preklade mena servera na IP adresu" #: tools.c:307 msgid "" "Warning: locking not supported ... don't run multiple processes or threads!\n" msgstr "" "Upozornenie: uzamykanie súborov nie je podporované ... nespú¹tajte naraz " "viac procesov alebo threadov!\n" #: tools.c:337 tools.c:366 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "èakám na uvolnenie uzamknutého súboru s FD : %d\n" #: uconfig.c:1038 msgid "Bad parameter - Working subdirectory" msgstr "Chybný parameter - Pracovný podadresár" #: uconfig.c:1167 msgid "Bad parameter - Cache directory" msgstr "Chybný parameter - Cache adresár" #: uexit.c:29 msgid "Error occured while executing user-exit script" msgstr "Vyskytla sa chyba pri spú¹»aní pou¾ívateµovho skriptu" #: update_links.c:36 #, c-format msgid "Entering directory %s\n" msgstr "Vstup do adresára %s\n" #: update_links.c:67 #, c-format msgid "Relocating %s\n" msgstr "Relokácia %s\n" #: update_links.c:71 #, c-format msgid "Omitting %s\n" msgstr "Vynechanie %s\n" #: update_links.c:85 #, c-format msgid "Leaving directory %s\n" msgstr "Odchod z adresára %s\n" #: update_links.c:102 #, c-format msgid "Can't open directory %s\n" msgstr "Nie je mo¾né otvori» adresár %s\n" #: url.c:1197 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "nepodporovaný typ URL \"%s\"\n" #: url.c:1345 msgid "Moved to already processed URL.\n" msgstr "Presmerovanie na spracované URL.\n" #: url.c:3016 msgid "Missing specification of URL in request\n" msgstr "Chýba ¹pecifikácia URL v po¾iadavke\n" #: url.c:3026 msgid "Missing request fields specification for POST request\n" msgstr "Chýbajú polo¾ky pre ¹pecifikáciu POST po¾iadavky\n" #: url.c:3034 msgid "Multipart encoding not supported with GET requests\n" msgstr "Multipart kódovanie nie je podporované v GET po¾iadavkách\n" pavuk-0.9.35/po/uk.po0000644000175000001440000040465310251617052011263 00000000000000# ðÅÒÛÁ ÓÐÒÏÂÁ ÕËÒÁ§Î¦ÚÕ×ÁÔÉ pavuk. # $Id: uk.po,v 1.2 2005/04/18 08:09:04 stoecker Exp $ # # ÷Ó¦ ËÏЦÒÁÊÔÉ ÈÁÊ ÎÁÌÅÖÁÔØ ËÏÍÁÎĦ Ukrainian, 2001, # # # Dmytro O. Redchuk # msgid "" msgstr "" "Project-Id-Version: 0.9pl28\n" "POT-Creation-Date: 2001-09-18 22:21+0200\n" "PO-Revision-Date: 2001-08-27 11:50EEST\n" "Last-Translator: Dmytro O. Redchuk \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=KOI8-U\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.5\n" #: abstract.c:42 #, c-format msgid "Suspending download for %d seconds.\n" msgstr "" #: abstract.c:80 doc.c:547 msgid "File redirect\n" msgstr "ðÅÒÅÎÁÐÒÁ×ÌÅÎÎÑ\n" #: abstract.c:116 #, c-format msgid "Loading copy from local NS cache - %s\n" msgstr "âÅÒÅÍÏ ËÏЦÀ Ú ÌÏËÁÌØÎÏÇÏ ËÅÛÁ NS - %s\n" #: abstract.c:148 #, c-format msgid "Loading copy from local Mozilla cache - %s\n" msgstr "âÅÒÅÍÏ ËÏЦÀ Ú ÌÏËÁÌØÎÏÇÏ ËÅÛÁ íÏÚ¦ÌÌÉ - %s\n" #: abstract.c:181 #, c-format msgid "Loading copy from local MSIE cache - %s\n" msgstr "âÅÒÅÍÏ ËÏЦÀ Ú ÌÏËÁÌØÎÏÇÏ ËÅÛÁ MSIE - %s\n" #: abstract.c:217 msgid "Unsupported URL\n" msgstr "URL ΊЦÄÔÒÉÍÕ¤ÔØÓÑ\n" #: abstract.c:312 msgid "Warning: broken ftp transfer ...\n" msgstr "ðÏצÄÏÍÌÅÎÎÑ: ϦÒ×ÁÎÏ ftp ÔÒÁÎÓÆÅÒ ...\n" #: abstract.c:322 msgid "Error removing FTP document from remote server\n" msgstr "ðÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÄÏËÕÍÅÎÔÁ FTP Ú ×¦ÄÄÁÌÅÎÏÇÏ ÓÅÒ×ÅÒÁ\n" #: abstract.c:384 msgid "Error reading document with \"chunked\" transfer encoding!\n" msgstr "" #: ainterface.c:120 #, c-format msgid "Removing unsupported URL: %s\n" msgstr "÷ÉÄÁÌѤÍÏ URL, ÝÏ ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ: %s\n" #: ainterface.c:209 msgid "Specify at least one starting URL!" msgstr "÷ËÁÖ¦ÔØ ÈÏÞÁ  ÏÄÉÎ ÓÔÁÒÔÏ×ÉÊ URL!" #: ainterface.c:211 msgid "Specify at least one starting URL!\n" msgstr "÷ËÁÖ¦ÔØ ÈÏÞÁ  ÏÄÉÎ ÓÔÁÒÔÏ×ÉÊ URL!\n" #: ainterface.c:477 msgid "Can't list available message catalogs\n" msgstr "" #: authinfo.c:107 msgid "Bad section - specify protocol\n" msgstr "îÅצÒÎÁ ÓÅËÃ¦Ñ - ×ËÁÖ¦ÔØ ÐÒÏÔÏËÏÌ\n" #: authinfo.c:112 msgid "Bad section - specify hostname\n" msgstr "îÅצÒÎÁ ÓÅËÃ¦Ñ - ×ËÁÖ¦ÔØ ¦Í'Ñ ÓÅÒ×ÅÒÁ\n" #: authinfo.c:162 #, c-format msgid "Unable to parse : \"%s\"\n" msgstr "îÅ ÍÏÖÕ ÒÏÚ¦ÂÒÁÔÉ : \"%s\"\n" #: authinfo.c:182 #, c-format msgid "Bad protocol - %s\n" msgstr "îÅצÒÎÉÊ ÐÒÏÔÏËÏÌ - %s\n" #: authinfo.c:194 #, c-format msgid "Bad port number %s\n" msgstr "îÅצÒÎÉÊ ÎÏÍÅÒ ÐÏÒÔÁ %s\n" #: authinfo.c:215 #, c-format msgid "Unknown auth type - %s\n" msgstr "îÅצÄÏÍÉÊ ÔÉÐ Á×ÔÏÒÉÚÁæ§ - %s\n" #: cleanup.c:65 msgid "press any key to exit\n" msgstr "ÎÁÔÉÓ¦ÎØ ÂÕÄØ-ÝÏ ÄÌÑ ×ÉÈÏÄÕ\n" #: cmdparse.c:129 #, c-format msgid "Error parsing commandline at: %s\n" msgstr "ðÏÍÉÌËÁ ÒÏÚÂÉÒÁÎÎÑ ËÏÍÁÎÄÎϧ ÓÔÒ¦ÞËÉ Â¦ÌÑ: %s\n" #: cmdparse.c:186 #, c-format msgid "Unable to parse commandline: %s\n" msgstr "îÅ ÍÏÖÕ ÒÏÚ¦ÂÒÁÔÉ ËÏÍÁÎÄÎÕ ÓÔÒ¦ÞËÕ: %s\n" #: config.c:45 msgid "Level order" msgstr "" #: config.c:46 msgid "Level order, inline first" msgstr "" #: config.c:47 msgid "Pre order" msgstr "" #: config.c:48 msgid "Pre order, inline first" msgstr "" #: config.c:116 #, c-format msgid "" "Usage: %s [options] [any number of URLS]\n" "pavuk-%s %s\n" msgstr "" "÷ÉËÏÒÉÓÔÁÎÎÑ: %s [ÏÐæ§] [ÂÕÄØ-ÑËÁ Ë¦ÌØË¦ÓÔØ URL'¦×]\n" "pavuk-%s %s\n" #: config.c:132 #, c-format msgid "Type \"%s --help\" for long help\n" msgstr "îÁÂÅÒ¦ÔØ \"%s --help\" ÄÌÑ Â¦ÌØÛ ÄÏËÌÁÄÎϧ ЦÄËÁÚËÉ\n" #: config.c:140 msgid "Optional features available :\n" msgstr "äÏÄÁÔËÏצ ÍÏÖÌÉ×ÏÓÔ¦ :\n" #: config.c:142 msgid " - Debug mode\n" msgstr " - Debug mode\n" #: config.c:146 msgid " - GNU gettext internationalization of messages\n" msgstr "" #: config.c:150 msgid " - flock() document locking\n" msgstr "" #: config.c:154 msgid " - fcntl() document locking\n" msgstr "" #: config.c:159 msgid " - Gtk GUI interface\n" msgstr " - Gtk GUI ¦ÎÔÅÒÆÅÊÓ\n" #: config.c:162 msgid " - URL tree preview\n" msgstr " - ÐÅÒÅÇÌÑÄ ÄÅÒÅ×Á URL\n" #: config.c:167 #, fuzzy msgid " - HTTP and FTP over SSL\n" msgstr " - http ÞÅÒÅÚ SSL\n" #: config.c:178 #, c-format msgid " - SSL layer implemented with %s library\n" msgstr "" #: config.c:184 msgid " - Socks v4 proxy support\n" msgstr " - ЦÄÔÒÉÍËÁ ÐÒÏËÓ¦ Socks v4\n" #: config.c:186 msgid " - Socks v5 proxy support\n" msgstr " - ЦÄÔÒÉÍËÁ ÐÒÏËÓ¦ Socks v5\n" #: config.c:190 msgid " - with filesystem free space checking\n" msgstr " - Ú ÐÅÒÅצÒËÏÀ ×¦ÌØÎÏÇÏ Í¦ÓÃÑ ÎÁ ÆÁÊÏ×¦Ê ÓÉÓÔÅͦ\n" #: config.c:194 msgid " - with optional regex patterns in -fnrules and -*rpattern options\n" msgstr "" #: config.c:198 msgid " - with POSIX regexp\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ POSIX regexp\n" #: config.c:202 msgid " - with Bell V8 regexp\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ Bell V8 regexp\n" #: config.c:206 msgid " - with BSD regexp\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ BSD regexp\n" #: config.c:210 msgid " - with GNU regexp\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ GNU regexp\n" #: config.c:214 msgid " - with PCRE regexp\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ PCRE regexp\n" #: config.c:218 msgid " - with support for loading files from Netscape browser cache\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ ÚÁ×ÁÎÔÁÖÅÎÎÑ ÆÁÊÌ¦× Ú ËÅÛÁ Netscape\n" #: config.c:222 msgid "" " - with support for detecting whether pavuk is running as background job\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ ÐÅÒÅצÒËÉ ÒÏÂÏÔÉ ðÁ×ÕËÁ Õ \"ЦÄÐ¦ÌØÎÏÍÕ\" ÒÅÖÉͦ\n" #: config.c:226 msgid " - with multithreading support\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ ÂÁÇÁÔÏÐÏÔÏËÏ×ÏÓÔ¦\n" #: config.c:230 msgid " - with NTLM authorization support\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ Á×ÔÏÒÉÚÁæ§ NTLM\n" #: config.c:234 msgid " - with JavaScript bindings\n" msgstr "" #: config.c:238 #, fuzzy msgid " - with IPv6 support\n" msgstr " - Ú Ð¦ÄÔÒÉÍËÏÀ ÂÁÇÁÔÏÐÏÔÏËÏ×ÏÓÔ¦\n" #: config.c:312 #, c-format msgid "HTML tag not supported : %s.%s\n" msgstr "HTML-ÔÅ­ ΊЦÄÔÒÉÍÕ¤ÔØÓÑ : %s.%s\n" #: config.c:691 msgid "Error parsing commandline\n" msgstr "ðÏÍÉÌËÁ ÒÏÚÂÉÒÁÎÎÑ ËÏÍÁÎÄÎϧ ÓÔÒ¦ÞËÉ\n" #: config.c:698 #, c-format msgid "Not enough number of parameters for \"-%s\" option\n" msgstr "îÅÄÏÓÔÁÔÎØÏ ÐÁÒÁÍÅÔÒ¦× ÄÌÑ ÏÐæ§ \"%s\"\n" #: config.c:705 #, c-format msgid "Unknown option %s\n" msgstr "îÅצÄÏÍÁ ÏÐÃ¦Ñ %s\n" #: config.c:712 #, c-format msgid "Wrong format of option %s\n" msgstr "îÅצÒÎÉÊ ÆÏÒÍÁÔ ÏÐæ§ %s\n" #: config.c:721 #, c-format msgid "WARNING: option \"-%s\" not supported in current configuration!\n" msgstr "õ÷áçá: ÏÐÃ¦Ñ \"%s\" ÎÅ ÐÒÁÃÀ¤ Õ ÄÁÎ¦Ê ËÏÎÆ¦­ÕÒÁæ§!\n" #: config.c:734 #, c-format msgid "Please specify number with parameter \"-%s\"\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ ÞÉÓÌÏ Ú ÐÁÒÁÍÅÔÒÏÍ \"%s\"\n" #: config.c:799 config.c:1164 http_proxy.c:123 #, c-format msgid "Unknown port \"%s\"\n" msgstr "îÅצÄÏÍÉÊ ÐÏÒÔ \"%s\"\n" #: config.c:815 config.c:1177 #, c-format msgid "Bad auth scheme \"%s\"\n" msgstr "îÅצÒÎÁ ÓÈÅÍÁ Á×ÔÏÒÉÚÁæ§ \"%s\"\n" #: config.c:825 config.c:1187 #, c-format msgid "Unknow operation mode \"%s\"\n" msgstr "îÅצÄÏÍÉÊ ÒÅÖÉÍ ÒÏÂÏÔÉ \"%s\"\n" #: config.c:847 #, c-format msgid "Please specify floating number with parameter \"-%s\"\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ ÞÉÓÌÏ Ú ËÒÁÐËÏÀ ÄÌÑ ÐÁÒÁÍÅÔÒÁ \"%s\"\n" #: config.c:866 #, c-format msgid "Please specify proper condition type for -%s (%s)\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ צÒÎÉÊ ÔÉÐ ÕÍÏ×É ÄÌÑ %s (%s)\n" #: config.c:889 #, c-format msgid "Please specify valid RE with parameter \"-%s\"\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ צÒÎÉÊ RE ÛÁÂÌÏÎ Ú ÐÁÒÁÍÅÔÒÏÍ \"%s\"\n" #: config.c:900 config.c:1299 #, c-format msgid "Unknown URL scheduling strategy - \"%s\"\n" msgstr "îÅצÄÏÍÁ ÓÔÒÁÔÅÇ¦Ñ ÒÏÚËÌÁÄÕ ×ÉÔÑÇÕ×ÁÎØ URL - \"%s\"\n" #: config.c:908 config.c:1310 #, c-format msgid "Unknown SSL version - \"%s\"\n" msgstr "îÅצÄÏÍÁ ×ÅÒÓ¦Ñ SSL - \"%s\"\n" #: config.c:917 config.c:1321 #, c-format msgid "Invalid additional HTTP header - \"%s\"\n" msgstr "îÅצÒÎÉÊ ÄÏÄÁÔËÏ×ÉÊ ÚÁÇÏÌÏ×ÏË HTTP - \"%s\"\n" #: config.c:940 config.c:1344 #, c-format msgid "Invalid request specification - \"%s\"\n" msgstr "îÅצÒÎÁ ÓÐÅÃÉÆ¦ËÁÃ¦Ñ ÚÁÐÉÔÕ - \"%s\"\n" #: config.c:985 #, c-format msgid "Invalid parameters for \"-%s\" option\n" msgstr "îÅצÒÎÉÊ ÐÁÒÁÍÅÔÅÒ ÄÌÑ ÏÐæ§ \"%s\"\n" #: config.c:1001 #, c-format msgid "Invalid number list \"%s\" for option \"-%s\"\n" msgstr "" #: config.c:1018 #, c-format msgid "Invalid FTP login handshake string \"%s\" for option \"-%s\"\n" msgstr "" #: config.c:1080 #, c-format msgid "WARNING: option \"%s\" not supported in current configuration!\n" msgstr "õ÷áçá: ÏÐÃ¦Ñ \"%s\" ÎÅ ÐÒÁÃÀ¤ Õ ÄÁÎ¦Ê ËÏÎÆ¦­ÕÒÁæ§!\n" #: config.c:1106 #, c-format msgid "Please specify number \"%s\"\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ ÞÉÓÌÏ \"%s\"\n" #: config.c:1124 #, c-format msgid "Only \"true\" & \"false\" is allowed : \"%s\"\n" msgstr "ìÉÛÅ \"true\" ÞÉ \"false\" ÄÏÚ×ÏÌÅÎÏ : \"%s\"\n" #: config.c:1198 #, c-format msgid "Bad time parameter \"%s\"\n" msgstr "îÅצÒÎÉÊ ÐÁÒÁÍÅÔÅÒ ÞÁÓÕ \"%s\"\n" #: config.c:1229 #, c-format msgid "Please specify floating number \"%s\"\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ ÞÉÓÌÏ Ú ËÒÁÐËÏÀ \"%s\"\n" #: config.c:1246 #, c-format msgid "Please specify proper arguments for %s\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ צÒΦ ÁÒÇÕÍÅÎÔÉ ÄÌÑ %s\n" #: config.c:1258 #, c-format msgid "Please specify proper condition type for %s (%s)\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ צÒÎÉÊ ÔÉÐ ÕÍÏ×É ÄÌÑ %s (%s)\n" #: config.c:1286 #, c-format msgid "Please specify valid RE \"%s\"\n" msgstr "âÕÄØ-ÌÁÓËÁ, ×ËÁÖ¦ÔØ צÒÎÉÊ RE ÛÁÂÌÏÎ \"%s\"\n" #: config.c:1378 #, c-format msgid "Invalid js_transform specification - \"%s\"\n" msgstr "îÅצÒÎÁ ÓÐÅÃÉÆ¦ËÁÃ¦Ñ js_transform - \"%s\"\n" #: config.c:1398 #, c-format msgid "Invalid number list specification - \"%s\"\n" msgstr "" #: config.c:1413 #, c-format msgid "Invalid FTP login handshake string \"%s\".\n" msgstr "" #: config.c:1459 #, c-format msgid "Unable to parse \"%s\"\n" msgstr "îÅ ÍÏÖÕ ÒÏÚ¦ÂÒÁÔÉ \"%s\"\n" #: config.c:1501 #, c-format msgid "ERROR: Scenario loading failed (%s)\n" msgstr "ðïíéìëá: îÅ ×ÄÁÌÏÓÑ ÐÒÏÞÉÔÁÔÉ ÓÃÅÎÁÒ¦Ê (%s)\n" #: cookie.c:212 #, c-format msgid "Unable to parse : %s\n" msgstr "îÅ ÍÏÖÕ ÒÏÚ¦ÂÒÁÔÉ : %s\n" #: cookie.c:385 msgid "Updating cookie file\n" msgstr "ðÏÎÏ×ÌÀ¤ÍÏ ÆÁÊÌ Ú ËÏÒÖÉËÁÍÉ\n" #: cookie.c:414 msgid "Cookie file has changed - > synchronizing\n" msgstr "æÁÊÌ Ú ËÏÒÖÉËÁÍÉ ÚͦÎÉ×ÓÑ - > ÓÉÎÈÒÏΦÚÕ¤ÍÏÓÑ\n" #: cookie.c:563 #, c-format msgid "Server %s is trying to set cookie for %s domain\n" msgstr "óÅÒ×ÅÒ %s ÎÁÍÁÇÁ¤ÔØÓÑ ÄÁÔÉ ËÏÒÖÉËÁ ÄÌÑ ÄÏÍÅÎÕ %s\n" #: cookie.c:574 #, c-format msgid "Removing cookie from disabled domain %s\n" msgstr "÷ÉÄÁÌѤÍÏ ËÏÒÖÉËÁ Ú ÎÅÄÏÚ×ÏÌÅÎÏÇÏ ÄÏÍÅÎÁ %s\n" #: debugl.c:16 msgid "HTML parsers" msgstr "òÏÚÂÉÒÁÞ¦ HTML" #: debugl.c:17 msgid "Server responses" msgstr "÷¦ÄÇÕËÉ ÓÅÒ×ÅÒÁ" #: debugl.c:18 msgid "Client requests" msgstr "úÁÐÉÔÉ Ë̦¤ÎÔÁ" #: debugl.c:19 msgid "Procedure calling" msgstr "÷ÉËÌÉËÉ ÐÒÏÃÅÄÕÒ" #: debugl.c:20 msgid "File locking" msgstr "ìÏËÕ×ÁÎÎÑ ÆÁÊ̦×" #: debugl.c:21 msgid "Networking code" msgstr "ëÏÄÉ ÒÏÂÏÔÉ Ú ÍÅÒÅÖÅÀ" #: debugl.c:22 msgid "Miscelanous" msgstr "ò¦ÚÎÅ" #: debugl.c:23 msgid "Extended user infos" msgstr "" #: debugl.c:24 msgid "Multithreading - locking" msgstr "âÁÇÁÔÏÐÏÔÏËÏצÓÔØ - ÌÏËÕ×ÁÎÎÑ" #: debugl.c:25 msgid "Multithreading - threads" msgstr "âÁÇÁÔÏÐÏÔÏËÏצÓÔØ - ÐÏÔÏËÉ" #: debugl.c:26 msgid "POST request data" msgstr "äÁΦ ÚÁÐÉÔÕ POST" #: debugl.c:27 msgid "Limiting conditions" msgstr "õÍÏ×É ÏÂÍÅÖÅÎØ" #: debugl.c:28 msgid "SSL informations" msgstr "" #: debugl.c:67 #, c-format msgid "Bad debug level selection : %s\n" msgstr "îÅצÒÎÉÊ ×ÉÂ¦Ò ÒÅÖÉÍÕ ×¦ÄÌÁÄËÉ : %s\n" #: decode.c:185 msgid "decode" msgstr "" #: digest_auth.c:156 msgid "Trying to do HTTP Digest authorization\n" msgstr "îÁÍÁÇÁ¤ÍÏÓÑ ÐÒÏÊÔÉ HTTP Digest Á×ÔÏÒÉÚÁæÀ\n" #: digest_auth.c:203 msgid "Trying to do HTTP proxy Digest authorization\n" msgstr "îÁÍÁÇÁ¤ÍÏÓÑ ÐÒÏÊÔÉ HTTP proxy Digest Á×ÔÏÒÉÚÁæÀ\n" #: dinfo.c:368 dinfo.c:387 #, c-format msgid "Error parsing .pavuk_info file field: %s\n" msgstr "ðÏÍÉÌËÁ ÒÏÚÂÉÒÁÎÎÑ ÆÁÊÌÁ .pavuk_info: %s\n" #: doc.c:294 msgid "Transfering data" msgstr "ôÑÇÎÅÍÏ ÄÁΦ" #: doc.c:309 msgid "setsockopt: SO_RCVBUF failed" msgstr "setsockopt: ÚÂ¦Ê SO_RCVBUF" #: doc.c:330 msgid "storing document" msgstr "ÚÂÅÒ¦ÇÁ¤ÍÏ ÄÏËÕÍÅÎÔ" #: doc.c:396 msgid "Document transfer data" msgstr "" #: doc.c:417 msgid "Data transfer done" msgstr "äÁΦ ×ÉÔÑÇÎÕÔÏ" #: doc.c:594 #, c-format msgid "Trying to resume from position %d \n" msgstr "îÁÍÁÇÁ¤ÍÏÓÑ ÐÒÏÄÏ×ÖÉÔÉ Ú ÐÏÚÉæ§ %d \n" #: doc.c:659 msgid "Opening connection" msgstr "÷¦ÄËÒÉ×Á¤ÍÏ Ú'¤ÄÎÁÎÎÑ" #: doc.c:683 msgid "Loading local copy\n" msgstr "úÁ×ÁÎÔÁÖÕ¤ÍÏ ÌÏËÁÌØÎÕ ËÏЦÀ\n" #: doc.c:909 msgid "File may be truncated\n" msgstr "æÁÊÌ ÍÏÖÅ ÂÕÔÉ ÕÓ¦ÞÅÎÉÍ\n" #: doc.c:933 msgid "Decoding document - OK\n" msgstr "äÅËÏÄÕ×ÁÎÎÑ ÄÏËÕÍÅÎÔÁ - ïë\n" #: doc.c:936 msgid "Decoding document - failed\n" msgstr "äÅËÏÄÕ×ÁÎÎÑ ÄÏËÕÍÅÎÔÁ - Ú¦Ê\n" #: doc.c:939 msgid "Unsupported document encoding\n" msgstr "ëÏÄÕ×ÁÎÎÑ ÄÏËÕÍÅÎÔÁ, ÝÏ ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ\n" #: doc.c:943 msgid "Received Encoded file but decoding not allowed (untouched)\n" msgstr "ïÔÒÉÍÁÎÏ ÚÁËÏÄÏ×ÁÎÉÍ, ÔÁ ÄÅËÏÄÕ×ÁÎÎÑ ÎÅ ÄÏÚ×ÏÌÅÎÅ (ÌÉÛÉÌÉ, ÑË ¤)\n" #: doc.c:1113 #, c-format msgid "Removing improper document : %s\n" msgstr "÷ÉÄÁÌѤÍÏ \"Ú¦ÊÎÉÊ\" ÄÏËÕÍÅÎÔ : %s\n" #: doc.c:1175 doc.c:1241 msgid "Local file" msgstr "ìÏËÁÌØÎÉÊ ÆÁÊÌ" #: doc.c:1181 msgid "Gopher/Text File" msgstr "Gopher/ôÅËÓÔÏ×ÉÊ ÆÁÊÌ" #: doc.c:1184 msgid "Gopher/Directory" msgstr "Gopher/äÉÒÅËÔÏÒ¦Ñ" #: doc.c:1187 msgid "Gopher/CSO phone book" msgstr "ôÅÌÅÆÏÎÎÁ ËÎÉÇÁ Gopher/CSO" #: doc.c:1190 msgid "Gopher/Error" msgstr "Gopher/ðÏÍÉÌËÁ" #: doc.c:1193 msgid "Gopher/BINHEX" msgstr "Gopher/BINHEX" #: doc.c:1196 msgid "Gopher/DOS bin" msgstr "" #: doc.c:1199 msgid "Gopher/UUencoded" msgstr "" #: doc.c:1202 msgid "Gopher/Search index" msgstr "" #: doc.c:1205 msgid "Gopher/Telnet session" msgstr "" #: doc.c:1208 msgid "Gopher/bin" msgstr "" #: doc.c:1211 msgid "Gopher/Duplicated server" msgstr "" #: doc.c:1214 msgid "Gopher/TN3270" msgstr "" #: doc.c:1217 msgid "Gopher/GIF" msgstr "" #: doc.c:1220 msgid "Gopher/Image" msgstr "" #: doc.c:1226 msgid "FTP/Directory" msgstr "FTP/äÉÒÅËÔÏÒ¦Ñ" #: doc.c:1228 msgid "FTP/File" msgstr "FTP/æÁÊÌ" #: doc.c:1232 msgid "FTPS/Directory" msgstr "FTPS/äÉÒÅËÔÏÒ¦Ñ" #: doc.c:1234 msgid "FTPS/File" msgstr "FTPS/æÁÊÌ" #: doc.c:1237 msgid "Unsupported type" msgstr "ôÉРΊЦÄÔÒÉÍÕ¤ÔØÓÑ" #: doc.c:1438 #, c-format msgid "S: %s [R: %s] [ET: %s] [RT: %s] \r" msgstr "" #: doc.c:1441 #, c-format msgid "S: %s [R: %s] [ET: %s] \r" msgstr "" #: doc.c:1481 #, c-format msgid "Waiting to releases document lock on: %s\n" msgstr "þÅËÁ¤ÍÏ ÎÁ ×É×¦ÌØÎÅÎÎÑ ÄÏËÕÍÅÎÔÁ: %s\n" #: doc.c:1721 msgid "Rewriting links inside parent documents" msgstr "ðÅÒÅÐÉÓÕ×ÁÎÎÑ ÐÏÓÉÌÁÎØ Õ \"ÂÁÔØË¦×ÓØËÉÈ\" ÄÏËÕÍÅÎÔÁÈ" #: errcode.c:21 #, c-format msgid "%s: user break\n" msgstr "%s : ϦÒ×ÁÎÏ ËÏÒÉÓÔÕ×ÁÞÅÍ\n" #: errcode.c:28 #, c-format msgid "%s: OK\n" msgstr "" #: errcode.c:31 #, c-format msgid "%s: ERROR: storing document\n" msgstr "%s : ðïíéìëá ÚÂÅÒ¦ÇÁÎÎÑ ÄÏËÕÍÅÎÔÁ\n" #: errcode.c:34 #, c-format msgid "%s: ERROR: opening file\n" msgstr "%s : ðïíéìëá צÄËÒÉ×ÁÎÎÑ ÆÁÊÌÁ\n" #: errcode.c:37 #, c-format msgid "%s: ERROR: URL pointing to local directory is not supported\n" msgstr "" "%s : ðïíéìëá: URL, ÝÏ ×ËÁÚÕ¤ ÎÁ ÌÏËÁÌØÎÕ ÄÉÒÅËÔÏÒ¦À, ΊЦÄÔÒÉÍÕ¤ÔØÓÑ\n" #: errcode.c:40 #, c-format msgid "%s: ERROR: unknown\n" msgstr "%s : ðïíéìëá: ÎÅצÄÏÍÁ\n" #: errcode.c:43 #, c-format msgid "%s: ERROR: document is locked\n" msgstr "%s : ðïíéìëá: ÄÏËÕÍÅÎÔ ÚÁÌÏËÏ×ÁÎÏ\n" #: errcode.c:46 #, c-format msgid "%s: ERROR: reading socket\n" msgstr "%s : ðïíéìëá ÞÉÔÁÎÎÑ Ú ÓÏËÅÔÁ\n" #: errcode.c:49 #, c-format msgid "%s: MESSAGE: bigger than maximal allowed size\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÐÅÒÅ×ÉÝÕ¤ ÍÁËÓ. ÄÏÚ×ÏÌÅÎÉÊ ÒÏÚͦÒ\n" #: errcode.c:52 #, c-format msgid "%s: MESSAGE: disabled by user-exit script condition\n" msgstr "" #: errcode.c:55 #, c-format msgid "%s: MESSAGE: smaller than minimal allowed size\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÍÅÎÛÅ ÚÁ ͦÎ. ÄÏÚ×ÏÌÅÎÉÊ ÒÏÚͦÒ\n" #: errcode.c:58 #, c-format msgid "%s: MESSAGE: this mime type is not allowed (%s)\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÃÅÊ ÔÉÐ MIME ÚÁÂÏÒÏÎÅÎÉÊ (%s)\n" #: errcode.c:61 #, c-format msgid "%s: ERROR: error in proxy connect\n" msgstr "%s : ðïíéìëá: ÐÏÍÉÌËÁ ЦÄ'¤ÄÎÁÎÎÑ ÄÏ ÐÒÏËÓ¦\n" #: errcode.c:64 #, c-format msgid "%s: ERROR: transfer broken by user\n" msgstr "%s : ðïíéìëá: ÔÒÁÎÓÆÅÒ Ï¦Ò×ÁÎÏ ËÏÒÉÓÔÕ×ÁÞÅÍ\n" #: errcode.c:67 #, c-format msgid "%s: MESSAGE: file modification time doesn't fit to specified interval\n" msgstr "" "%s : ðï÷¶äïíìåîîñ: ÞÁÓ ÚͦÎÉ ÆÁÊÌÁ ÎÅ ×ËÌÁÄÁ¤ÔØÓÑ Õ ×ËÁÚÁÎÉÊ ¦ÎÔÅÒ×ÁÌ\n" #: errcode.c:70 #, c-format msgid "%s: ERROR: file has zero size - possible error\n" msgstr "%s : ðïíéìëá: ÆÁÊÌ ÍÁ¤ ÎÕÌØÏ×Õ ÄÏ×ÖÉÎÕ - ÐÅ×ÎÏ, ÐÏÍÉÌËÁ\n" #: errcode.c:73 #, c-format msgid "%s: MESSAGE: document was already processed\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÄÏËÕÍÅÎÔ ×ÖÅ ÂÕÌÏ ÏÐÒÁÃØÏ×ÁÎÏ\n" #: errcode.c:76 #, c-format msgid "%s: MESSAGE: document was disabled by user\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÄÏËÕÍÅÎÔ ÂÕÌÏ ÚÁÂÏÒÏÎÅÎÏ ËÏÒÉÓÔÕ×ÁÞÅÍ\n" #: errcode.c:79 #, c-format msgid "%s: MESSAGE: document was disabled by limiting rules\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÄÏËÕÍÅÎÔ ÂÕÌÏ ÚÁÂÏÒÏÎÅÎÏ ÐÒÁ×ÉÌÁÍÉ ÏÂÍÅÖÅÎØ\n" #: errcode.c:82 #, c-format msgid "%s: WARNING: transfer rate lower than minimal allowed\n" msgstr "%s : ðï÷¶äïíìåîîñ: Û×ÉÄ˦ÓÔØ ÍÅÎÛÁ ÚÁ ͦΦÍÁÌØÎÕ ÄÏÚ×ÏÌÅÎÕ\n" #: errcode.c:85 #, c-format msgid "%s: WARNING: file size quota exceeded, rest will be truncated\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÒÏÚÍ¦Ò ÆÁÊÌÁ ÐÅÒÅ×ÉÝÕ¤ ÍÅÖ¦, ÆÁÊÌ ÂÕÄÅ ÕÓ¦ÞÅÎÏ\n" #: errcode.c:88 #, c-format msgid "%s: WARNING: transfer quota exceeded, breaking download\n" msgstr "%s : ðï÷¶äïíìåîîñ: Û×ÉÄ˦ÓÔØ ×ÉÊÛÌÁ ÚÁ ÍÅÖ¦, ÕÒÉ×Á¤ÍÏ ×ÉÔÑÇÁÎÎÑ\n" #: errcode.c:91 #, c-format msgid "%s: ERROR: low free space on filesystem, breaking transfer\n" msgstr "%s : ðïíéìëá: ÚÁÍÁÌÏ ×¦ÌØÎÏÇÏ Í¦ÓÃÑ ÎÁ æó, ÕÒÉ×Á¤ÍÏ ×ÉÔÑÇÁÎÎÑ\n" #: errcode.c:94 #, c-format msgid "" "%s: WARNING: maximal allowed running time exceeded, downloading will break\n" msgstr "%s : ðïíéìëá: ÍÁËÓ. ÞÁÓ ×ÉÔÑÇÁÎÎÑ ÐÅÒÅ×ÉÝÅÎÏ, ÕÒÉ×Á¤ÍÏ ×ÉÔÑÇÁÎÎÑ\n" #: errcode.c:97 #, c-format msgid "%s: ERROR: unnown FTP error\n" msgstr "%s : ðïíéìëá: ÎÅצÄÏÍÁ ÐÏÍÉÌËÁ FTP\n" #: errcode.c:100 #, c-format msgid "%s: ERROR: FTP server doesn't support REST command\n" msgstr "%s : ðïíéìëá: FTP ÓÅÒ×ÅÒ ÎŠЦÄÔÒÉÍÕ¤ ËÏÍÁÎÄÕ REST\n" #: errcode.c:104 #, c-format msgid "%s: ERROR: unable to list directory content\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÓÐÉÓÏË ÄÉÒÅËÔÏÒ¦§\n" #: errcode.c:107 #, c-format msgid "%s: ERROR: unable to connect to FTP server\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï Ð¦Ä'¤ÄÎÁÔÉÓÑ ÄÏ ÓÅÒ×ÅÒÁ FTP\n" #: errcode.c:110 #, c-format msgid "%s: ERROR: FTP authentification - bad username\n" msgstr "%s : ðïíéìëá: Á×ÔÅÎÔÉÆ¦ËÁÃ¦Ñ FTP - ÎÅצÒÎÅ ¦Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ\n" #: errcode.c:113 #, c-format msgid "%s: ERROR: FTP authentification - bad password\n" msgstr "%s : ðïíéìëá: Á×ÔÅÎÔÉÆ¦ËÁÃ¦Ñ FTP - ÎÅצÒÎÉÊ ÐÁÒÏÌØ\n" #: errcode.c:116 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad username\n" msgstr "" "%s : ðïíéìëá: Á×ÔÅÎÔÉÆ¦ËÁÃ¦Ñ ÎÁ FTP ÐÒÏËÓ¦ - ÎÅצÒÎÅ ¦Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ\n" #: errcode.c:119 #, c-format msgid "%s: ERROR: FTP proxy authentification - bad password\n" msgstr "%s : ðïíéìëá: Á×ÔÅÎÔÉÆ¦ËÁÃ¦Ñ ÎÁ FTP ÐÒÏËÓ¦ - ÎÅצÒÎÉÊ ÐÁÒÏÌØ\n" #: errcode.c:122 #, c-format msgid "%s: ERROR: unable to open FTP data connection\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ Ú'¤ÄÎÁÎÎÑ FTP data\n" #: errcode.c:125 #, c-format msgid "%s: ERROR: unable to get file from FTP server\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÆÁÊÌ Ú ÓÅÒ×ÅÒÁ FTP\n" #: errcode.c:128 #, c-format msgid "%s: ERROR: FTP server doesn't support MDTM command\n" msgstr "%s : ðïíéìëá: ÓÅÒ×ÅÒ FTP ΊЦÄÔÒÉÍÕ¤ ËÏÍÁÎÄÕ MDTM\n" #: errcode.c:131 #, c-format msgid "%s: ERROR: file from FTP server is truncated\n" msgstr "%s : ðïíéìëá: ÆÁÊÌ Ú ÓÅÒ×ÅÒÁ FTP ÕÓ¦ÞÅÎÏ\n" #: errcode.c:135 #, c-format msgid "%s: MESSAGE: reget unneeded - file is up to date\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÎÅÍÁ ÞÏÇÏ ÐÅÒÅ×ÉÔÑÇÕ×ÁÔÉ - ÆÁÊÌ ÎŠͦÎÑ×ÓÑ\n" #: errcode.c:138 #, c-format msgid "%s: MESSAGE: FTP transfer not allowed because of rules\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÔÒÁÎÓÆÅÒ FTP ÚÁÂÏÒÏÎÅÎÏ ÐÒÁ×ÉÌÁÍÉ ÏÂÍÅÖÅÎØ\n" #: errcode.c:141 #, c-format msgid "" "%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n" msgstr "" "%s : ðï÷¶äïíìåîîñ: ÃÅ URL ÄÉÒÅËÔÏÒ¦§ FTP, ÁÌÅ ÒÏÂÏÔÁ Ú ÄÉÒÅËÔÏÒ¦ÑÍÉ FTP ÎÅ " "ÄÏÚ×ÏÌÅÎÁ (-FTPdir)\n" #: errcode.c:144 #, c-format msgid "%s: WARNING: FTP login_handshake failed\n" msgstr "" #: errcode.c:147 #, c-format msgid "%s: ERROR: unknown HTTP error\n" msgstr "%s : ðïíéìëá: ÎÅצÄÏÍÁ ÐÏÍÉÌËÁ HTTP\n" #: errcode.c:150 #, c-format msgid "%s: ERROR: unable to connect to HTTP server\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï Ð¦Ä'¤ÄÎÁÔÉÓÑ ÄÏ ÓÅÒ×ÅÒÁ HTTP\n" #: errcode.c:153 #, c-format msgid "%s: ERROR: HTTP server doesn't support partial content retrieving\n" msgstr "%s : ðïíéìëá: ÓÅÒ×ÅÒ HTTP ΊЦÄÔÒÉÍÕ¤ ÞÁÓÔËÏ×Õ ÐÅÒÅÄÁÞÕ ÄÏËÕÍÅÎÔ¦×\n" #: errcode.c:156 #, c-format msgid "%s: ERROR: broken HTTP request send\n" msgstr "" #: errcode.c:159 #, c-format msgid "%s: ERROR: failed to read HTTP response\n" msgstr "%s : ðïíéìëá: ÚÂ¦Ê ÞÉÔÁÎÎÑ ×¦ÄÇÕËÁ HTTP\n" #: errcode.c:162 #, c-format msgid "%s: ERROR: unexpected HTTP response code after trying to reget\n" msgstr "" #: errcode.c:166 #, c-format msgid "%s: ERROR: unable to send HTTP request data\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ÎÁĦÓÌÁÔÉ ÄÁΦ ÚÁÐÉÔÕ HTTP\n" #: errcode.c:169 #, c-format msgid "%s: MESSAGE: redirecting to another location\n" msgstr "%s : ðï÷¶äïíìåîîñ: ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÑ ÄÏ ¦ÎÛÏÇÏ Í¦ÓÃÑ\n" #: errcode.c:172 #, c-format msgid "%s: ERROR: HTTP document is truncated\n" msgstr "%s : ðïíéìëá: ÄÏËÕÍÅÎÔ HTTP ÕÓ¦ÞÅÎÉÊ\n" #: errcode.c:175 #, c-format msgid "%s: ERROR: cyclic redirection!\n" msgstr "%s : ðïíéìëá: ÃÉË̦ÞÎÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÑ!\n" #: errcode.c:178 #, c-format msgid "%s: ERROR: redirecting to unsupported URL\n" msgstr "%s : ðïíéìëá: ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÑ ÄÏ URL, ÝÏ ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ\n" #: errcode.c:181 #, c-format msgid "%s: ERROR: unable to connect to proxy server\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï Ð¦Ä'¤ÄÎÁÔÉÓÑ ÄÏ ÐÒÏËÓ¦ ÓÅÒ×ÅÒÁ\n" #: errcode.c:184 #, c-format msgid "%s: ERROR: received bad redirect response from server\n" msgstr "%s : ðïíéìëá: ÏÔÒÉÍÁÎÏ ÎÅצÒÎÉÊ ×¦ÄÇÕË ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÑ\n" #: errcode.c:187 #, c-format msgid "%s: ERROR: unable to do NTLM authorization\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ÚĦÊÓÎÉÔÉ Á×ÔÏÒÉÚÁæÀ NTLM\n" #: errcode.c:190 #, c-format msgid "%s: ERROR: unable to do HTTP Digest authorization\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ÚĦÊÓÎÉÔÉ Á×ÔÏÒÉÚÁæÀ HTTP Digest\n" #: errcode.c:193 #, c-format msgid "%s: ERROR: unable to do NTLM proxy authorization\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ÚĦÊÓÎÉÔÉ Á×ÔÏÒÉÚÁæÀ NTLM proxy\n" #: errcode.c:196 #, c-format msgid "%s: ERROR: unable to do HTTP proxy Digest authorization\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ÚĦÊÓÎÉÔÉ Á×ÔÏÒÉÚÁæÀ HTTP proxy Digest\n" #: errcode.c:199 #, c-format msgid "%s: ERROR: HTTP client sends bad request\n" msgstr "%s : ðïíéìëá: HTTP Ë̦¤ÎÔ ÎÁÄÓÉÌÁ¤ ÎÅצÒÎÏÇÏ ÚÁÐÉÔÁ\n" #: errcode.c:202 #, c-format msgid "%s: ERROR: HTTP authentication is required\n" msgstr "%s : ðïíéìëá: ÎÅÏÂȦÄÎÁ Á×ÔÏÒÉÚÁÃ¦Ñ HTTP\n" #: errcode.c:205 #, c-format msgid "%s: ERROR: HTTP proxy authentication is required\n" msgstr "%s : ðïíéìëá: ÎÅÏÂȦÄÎÁ Á×ÔÏÒÉÚÁÃ¦Ñ HTTP proxy\n" #: errcode.c:208 #, c-format msgid "%s: ERROR: HTTP payment required\n" msgstr "" #: errcode.c:211 #, c-format msgid "%s: ERROR: forbidden HTTP request\n" msgstr "" #: errcode.c:214 #, c-format msgid "%s: ERROR: HTTP document not found\n" msgstr "%s : ðïíéìëá: HTTP ÄÏËÕÍÅÎÔ ÎÅ ÚÎÁÊÄÅÎÏ\n" #: errcode.c:217 #, c-format msgid "%s: ERROR: HTTP remote server error\n" msgstr "%s: ERROR: HTTP remote server error\n" #: errcode.c:220 #, c-format msgid "%s: ERROR: HTTP server replied with connection timeout response\n" msgstr "%s : ðïíéìëá: HTTP ÓÅÒ×ÅÒ ÐÏ×ÅÒÎÕ× \"connection timeout\"\n" #: errcode.c:223 #, c-format msgid "%s: ERROR: HTTP server replied with conflict response\n" msgstr "" #: errcode.c:226 #, c-format msgid "%s: ERROR: document was removed from HTTP server\n" msgstr "%s : ðïíéìëá: ÄÏËÕÍÅÎÔÁ ÂÕÌÏ ×ÉÄÁÌÅÎÏ Ú HTTP ÓÅÒ×ÅÒÁ\n" #: errcode.c:229 #, c-format msgid "%s: ERROR: you must use proxy to access this URL\n" msgstr "%s : ðïíéìëá: ×É ÍÕÓÉÔÅ ÄÏÓÔÕÐÁÔÉÓÑ ÄÏ ÃØÏÇÏ URL ÞÅÒÅÚ ÐÒÏËÓ¦\n" #: errcode.c:232 #, c-format msgid "%s: ERROR: 306\n" msgstr "%s : ðïíéìëá: 306\n" #: errcode.c:235 #, c-format msgid "" "%s: ERROR: used HTTP method is not supported or not allowed for this URL\n" msgstr "" "%s : ðïíéìëá: ÃÅÊ ÍÅÔÏÄ HTTP ΊЦÄÔÒÉÍÕ¤ÔØÓÑ ÞÉ ÎÅ ÄÏÚ×ÏÌÅÎÉÊ ÄÌÑ ÃØÏÇÏ " "URL\n" #: errcode.c:238 #, c-format msgid "%s: ERROR: client doesn't accept MIME type of requested URL\n" msgstr "%s : ðïíéìëá: Ë̦¤ÎÔ ÎÅ ÐÒÉÊÍÁ¤ ÔÉÐ MIME ÚÁÐÉÔÕ×ÁÎÏÇÏ URL\n" #: errcode.c:241 #, c-format msgid "%s: ERROR: in request header is missing Content-Length: header\n" msgstr "%s : ðïíéìëá: צÄÓÕÔΤ ÐÏÌÅ \"Content-Length:\" Õ ÚÁÇÏÌÏ׿ ÚÁÐÉÔÁ\n" #: errcode.c:244 #, c-format msgid "%s: ERROR: preconditions in request failed for requested URL\n" msgstr "" #: errcode.c:247 #, c-format msgid "%s: ERROR: request body too large\n" msgstr "%s : ðïíéìëá: Ô¦ÌÏ ÚÁÐÉÔÁ ÚÁ×ÅÌÉËÅ\n" #: errcode.c:250 #, c-format msgid "%s: ERROR: request URL too long\n" msgstr "%s : ðïíéìëá: URL ÚÁÐÉÔÁ ÚÁÄÏ×ÇÉÊ\n" #: errcode.c:253 #, c-format msgid "%s: ERROR: resource in format unsupported for this request\n" msgstr "" #: errcode.c:256 #, c-format msgid "%s: ERROR: requested bad range of document\n" msgstr "%s : ðïíéìëá: ÚÁÐÉÔÁÎÏ ÎÅצÒÎÉÊ ÆÒÁÇÍÅÎÔ ÄÏËÕÍÅÎÔÁ\n" #: errcode.c:259 #, c-format msgid "%s: ERROR: failed to fulfill expectation from request\n" msgstr "" #: errcode.c:262 #, c-format msgid "%s: ERROR: requested HTTP method not implemented on server side\n" msgstr "%s : ðïíéìëá: ÍÅÔÏÄ HTTP ÚÁÐÉÔÁ ΊЦÄÔÒÉÍÕ¤ÔØÓÑ ÓÅÒ×ÅÒÏÍ\n" #: errcode.c:265 #, c-format msgid "%s: ERROR: gatewaying failed for this URL\n" msgstr "%s : ðïíéìëá: ÚÂ¦Ê ÛÌÀÚÕ×ÁÎÎÑ ÄÌÑ ÃØÏÇÏ URL\n" #: errcode.c:268 #, c-format msgid "%s: ERROR: HTTP service currently not available, check later\n" msgstr "%s : ðïíéìëá: ÓÅÒ×¦Ó HTTP ÎÁÒÁÚ¦ ÎÅÄÏÓÔÕÐÎÉÊ, ÓÐÒÏÂÕÊÔŠЦÚΦÛÅ\n" #: errcode.c:271 #, c-format msgid "" "%s: ERROR: timeout occured in communication between gateway and remote " "server\n" msgstr "" #: errcode.c:274 #, c-format msgid "" "%s: ERROR: HTTP version used in request is unsupported by remote server\n" msgstr "" "%s : ERROR: ×ÉËÏÒÉÓÔÏ×Õ×ÁÎÁ Õ ÚÁÐÉÔ¦ ×ÅÒÓ¦Ñ HTTP ΊЦÄÔÒÉÍÕ¤ÔØÓÑ ÓÅÒ×ÅÒÏÍ\n" #: errcode.c:277 #, c-format msgid "%s: ERROR: unable to connect to GOPHER server\n" msgstr "%s : ðïíéìëá: ÎÅÍÏÖÌÉ×Ï Ð¦Ä'¤ÄÎÁÔÉÓÑ ÄÏ ÓÅÒ×ÅÒÁ GOPHER\n" #: errcode.c:280 #, c-format msgid "%s: ERROR: unknown GOPHER error\n" msgstr "%s : ðïíéìëá: ÎÅצÄÏÍÁ ÐÏÍÉÌËÁ GOPHER\n" #: errcode.c:283 #, c-format msgid "%s: ERROR: unable to connect to HTTPS server\n" msgstr "%s: ðïíéìëá: ÎÅÍÏÖÌÉ×Ï Ð¦Ä'¤ÄÎÁÔÉÓÑ ÄÏ ÓÅÒ×ÅÒÁ HTTPS\n" #: errcode.c:286 #, c-format msgid "%s: ERROR: unable to establish SSL control connection to FTPS server\n" msgstr "" "%s: ðïíéìëá: ÎÅÍÏÖÌÉ×Ï ×ÓÔÁÎÏ×ÉÔÉ ËÏÎÔÒÏÌØÎÅ Ú'¤ÄÎÁÎÎÑ ÞÅÒÅÚ SSL ÄÏ ÓÅÒ×ÅÒÁ " "FTPS\n" #: errcode.c:289 #, c-format msgid "%s: ERROR: this FTP server doesn't support SSL connections\n" msgstr "%s: ðïíéìëá: ÃÅÊ ÓÅÒ×ÅÒ FTP ΊЦÄÔÒÉÍÕ¤ Ú'¤ÄÎÁÎÎÑ SSL\n" #: errcode.c:292 #, c-format msgid "%s: ERROR: unable to establish SSL data connection to FTPS server\n" msgstr "" "%s: ðïíéìëá ÎÅÍÏÖÌÉ×Ï ×ÓÔÁÎÏ×ÉÔÉ Ú'¤ÄÎÁÎÎÑ ftp data ÞÅÒÅÚ SSL ÄÏ ÓÅÒ×ÅÒÁ " "FTPS\n" #: errcode.c:295 #, c-format msgid "%s: ERROR: unknown errcode : %d\n" msgstr "%s: ðïíéìëá: ÎÅצÄÏÍÉÊ ËÏÄ ÐÏÍÉÌËÉ : %d\n" #: file.c:31 msgid "Can't open directory\n" msgstr "îÅ ÍÏÖÕ ×¦ÄËÒÉÔÉ ÄÉÒÅËÔÏÒ¦À\n" #: form.c:1082 form.c:1145 form.c:1300 #, c-format msgid "Unsupported form type in context: %d\n" msgstr "îÅЦÄÔÒÉÍÕ×ÁÎÉÊ ÔÉÐ ÆÏÒÍÉ Õ ËÏÎÔÅËÓÔ¦: %d\n" #: form.c:1399 msgid "Browse" msgstr "ðÒÏÇÌÑÎÕÔÉ" #: form.c:1412 msgid "URLs with forms" msgstr "URL'¦ Ú ÆÏÒÍÁÍÉ" #: form.c:1421 msgid "Refresh URL list" msgstr "ðÏÎÏ×ÉÔÉ ÓÐÉÓÏË URL" #: form.c:1455 form.c:1456 url.c:1009 msgid "unknown" msgstr "ÎÅצÄÏÍÉÊ" #: form.c:1602 msgid "Pavuk: load form file" msgstr "ðÁ×ÕË: ÕÚÑÔÉ Ú ÆÁÊÌÁ" #: form.c:1626 msgid "Fill forms" msgstr "úÁÐÏ×ÎÉÔÉ ÆÏÒÍÉ" #: form.c:1633 msgid "Form number: " msgstr "îÏÍÅÒ ÆÏÒÍÉ: " #: form.c:1645 msgid "Action URL: " msgstr "URL Ħ§: " #: form.c:1654 gui_common.c:701 msgid "Request method: " msgstr "íÅÔÏÄ ÚÁÐÉÔÕ: " #: form.c:1663 gui_common.c:720 gui_tree.c:127 msgid "Request encoding: " msgstr "ëÏÄÕ×ÁÎÎÑ ÚÁÐÉÔÕ: " #: form.c:1672 msgid "HTML form content" msgstr "÷ͦÓÔ HTML ÆÏÒÍÉ" #: form.c:1687 msgid "Load HTML file ..." msgstr "úÁ×ÁÎÔÁÖÉÔÉ HTML ¦Ú ÆÁÊÌÁ ..." #: form.c:1740 msgid "Pavuk: HTML forms editor" msgstr "ðÁ×ÕË: ÒÅÄÁËÔÏÒ ÆÏÒÍ HTML" #: form.c:1762 gui_jscons.c:191 msgid "Close" msgstr "úÁËÒÉÔÉ" #: ftp.c:101 msgid "ftp_get_response: ftp control connection closed before any response\n" msgstr "" "ftp_get_response: ËÏÎÔÒÏÌØÎÅ Ú'¤ÄÎÁÎÎÑ ftp ÚÁËÒÉÔÅ ÒÁÎ¦Û ÏÔÒÉÍÁÎÎÑ ÑËÏÇÏÓØ " "צÄÇÕËÁ\n" #: ftp.c:172 msgid "ftp: setsockopt TOS - THROUGHPUT failed" msgstr "" #: ftp.c:269 ftp.c:290 ftp.c:329 #, fuzzy, c-format msgid "Error parsing FTP response to %s command - %s\n" msgstr "ðÏÍÉÌËÁ ÒÏÚÂÉÒÁÎÎÑ ËÏÍÁÎÄÎϧ ÓÔÒ¦ÞËÉ Â¦ÌÑ: %s\n" #: ftp.c:667 msgid "Re-using established FTP control connection\n" msgstr "÷ÉËÏÒÉÓÔÏ×Õ¤ÍÏ ×ÖÅ ×ÓÔÁÎÏ×ÌÅÎÅ ËÏÎÔÒÏÌØÎÅ Ú'¤ÄÎÁÎÎÑ FTP\n" #: ftp.c:877 http.c:1401 msgid "Size differs, regeting whole\n" msgstr "ò¦ÚΦ ÒÏÚͦÒÉ, ÔÑÇÎÅÍÏ ×ÓÅ ÚÎÏ×Õ\n" #: ftp.c:887 http.c:1283 http.c:1411 msgid "Modified from last download - regeting whole\n" msgstr "úͦÎÅÎÏ Ú ÞÁÓÕ ÏÓÔÁÎÎØÏÇÏ ÚÁ×ÁÎÔÁÖÅÎÎÑ - ÔÑÇÎÅÍÏ ×ÓÅ ÚÎÏ×Õ\n" #: ftp.c:974 msgid "" "Warning: FTP server undertand REST command, but can't handle it properly.\n" msgstr "" "õ×ÁÇÁ: ÓÅÒ×ÅÒ FTP ÒÏÚÕͦ¤ ËÏÍÁÎÄÕ REST, ÁÌÅ ÎÅ ÍÏÖÅ §§ ×ÉËÏÎÁÔÉ ×¦ÒÎÏ.\n" #: ftp.c:1221 ftp.c:1549 #, c-format msgid "" "\n" "\n" "\n" "Directory of %s://%s:%hu%s\n" "\n" "\n" "

                                                              List of FTP directory %s://%s:%hu/%s


                                                                " msgstr "" #: ftp.c:1620 #, c-format msgid "" "ERROR: unable to parse FTP list line :\n" "\t%s\n" msgstr "" #: ftp.c:1813 #, c-format msgid "Making symlink \"%s\" to \"%s\"\n" msgstr "óÔ×ÏÒÀ¤ÍÏ ÓÉÍ×ÏÌØÎÅ ÐÏÓÉÌÁÎÎÑ \"%s\" ÄÏ \"%s\"\n" #: gauthinfo.c:107 msgid "Pavuk: Save auth. info file" msgstr "ðÁ×ÕË: úÂÅÒÅÇÔÉ ÆÁÊÌ ÄÁÎÉÈ Á×ÔÏÒÉÚÁæ§" #: gauthinfo.c:159 msgid "Pavuk: Load auth. info file" msgstr "ðÁ×ÕË: úÁ×ÁÎÔÁÖÉÔÉ ÆÁÊÌ ÄÁÎÉÈ Á×ÔÏÒÉÚÁæ§" #: gauthinfo.c:340 msgid "Pavuk: Authorization info editor" msgstr "ðÁ×ÕË: òÅÄÁËÔÏÒ ÄÁÎÉÈ Á×ÔÏÒÉÚÁæ§" #: gauthinfo.c:357 msgid "Protocol" msgstr "ðÒÏÔÏËÏÌ" #: gauthinfo.c:358 gui_common.c:1842 msgid "Host" msgstr "èÏÓÔ" #: gauthinfo.c:359 msgid "User" msgstr "ëÏÒÉÓÔÕ×ÁÞ" #: gauthinfo.c:360 msgid "Password" msgstr "ðÁÒÏÌØ" #: gauthinfo.c:361 msgid "Base dir." msgstr "" #: gauthinfo.c:362 msgid "Realm" msgstr "" #: gauthinfo.c:363 msgid "Scheme" msgstr "óÈÅÍÁ" #: gauthinfo.c:388 msgid "Protocol: " msgstr "ðÒÏÔÏËÏÌ: " #: gauthinfo.c:413 gui_common.c:1858 gui_common.c:1919 gui_common.c:1942 #: gui_common.c:1971 msgid "Host: " msgstr "óÅÒ×ÅÒ: " #: gauthinfo.c:422 msgid "User: " msgstr "ëÏÒÉÓÔÕ×ÁÞ: " #: gauthinfo.c:431 gui_common.c:2141 gui_common.c:2191 gui_common.c:2215 msgid "Password: " msgstr "ðÁÒÏÌØ: " #: gauthinfo.c:440 msgid "Base directory: " msgstr "âÁÚÏ×Á ÄÉÒÅËÔÏÒ¦Ñ: " #: gauthinfo.c:449 msgid "Realm: " msgstr "" #: gauthinfo.c:467 gui_common.c:2085 msgid "User auth. scheme" msgstr "óÈÅÍÁ Á×ÔÏÒÉÚÁæ§ User" #: gauthinfo.c:472 msgid "Base auth. scheme" msgstr "óÈÅÍÁ Á×ÔÏÒÉÚÁæ§ Base" #: gauthinfo.c:477 gui_common.c:2087 msgid "Digest auth. scheme" msgstr "óÈÅÍÁ Á×ÔÏÒÉÚÁæ§ Digest" #: gauthinfo.c:483 gui_common.c:2089 msgid "NTLM auth. scheme" msgstr "óÈÅÍÁ Á×ÔÏÒÉÚÁæ§ NTLM" #: gauthinfo.c:494 gui_addurl.c:167 gui_common.c:626 gui_common.c:771 #: gui_common.c:948 gui_common.c:1044 gui_common.c:1868 gui_common.c:2664 #: gui_common.c:2910 gui_limits.c:673 gui_tools.c:733 msgid "Append" msgstr "äÏÄÁÔÉ" #: gauthinfo.c:502 gui_common.c:642 gui_common.c:778 gui_common.c:964 #: gui_common.c:1051 gui_common.c:1874 gui_common.c:2670 gui_common.c:2916 #: gui_limits.c:679 gui_tools.c:755 msgid "Modify" msgstr "úͦÎÉÔÉ" #: gauthinfo.c:510 gui_common.c:651 gui_common.c:973 gui_common.c:1880 #: gui_common.c:2676 gui_common.c:2922 gui_limits.c:685 gui_tools.c:768 msgid "Clear" msgstr "ïÞÉÓÔÉÔÉ" #: gauthinfo.c:518 gui_common.c:660 gui_common.c:785 gui_common.c:982 #: gui_common.c:1058 gui_common.c:1886 gui_common.c:2682 gui_common.c:2928 #: gui_limits.c:691 gui_tools.c:781 msgid "Delete" msgstr "÷ÉÄÁÌÉÔÉ" #: gauthinfo.c:531 gui_common.c:3010 gui_limits.c:759 gui_sched.c:121 #: gui_tools.c:277 msgid "OK" msgstr "" #: gauthinfo.c:542 gui_common.c:3019 gui_limits.c:768 msgid "Apply" msgstr "úÁÓÔÏÓÕ×ÁÔÉ" #: gauthinfo.c:550 msgid "Load" msgstr "úÁ×ÁÎÔÁÖÉÔÉ" #: gauthinfo.c:558 msgid "Save" msgstr "úÂÅÒÅÇÔÉ" #: gauthinfo.c:569 gui_about.c:76 gui_addurl.c:176 gui_common.c:3035 #: gui_limits.c:784 gui_sched.c:130 gui_tools.c:286 gui_tree.c:608 #: gui_tree.c:723 stats.c:504 msgid "Cancel" msgstr "óËÁÓÕ×ÁÔÉ" #: gkeys.c:64 gkeys.c:81 gkeys.c:93 #, c-format msgid "Unable to parse: %s\n" msgstr "îÅ ÍÏÖÕ ÒÏÚ¦ÂÒÁÔÉ: %s\n" #: gkeys.c:115 msgid "Unable to create ~/.pavuk_keys file\n" msgstr "îÅ ÍÏÖÕ ÓÔ×ÏÒÉÔÉ ÆÁÊÌ ~/.pavuk_keys\n" #: gkeys.c:119 #, c-format msgid "" "# This file was generated by %s\n" "# You may edit it if you're careful!\n" "\n" msgstr "" "# ãÅÊ ÆÁÊÌ Ú­ÅÎÅÒÏ×ÁÎÏ %s\n" "# íÏÖÅÔÅ ÒÅÄÁÇÕ×ÁÔÉ, ÑËÝÏ ÷É ÄÕÖÅ ÏÂÅÒÅÖΦ!\n" "\n" #: gopher.c:66 msgid "********************* Gopher request **************\n" msgstr "********************* úÁÐÉÔ Gopher **************\n" #: gopher.c:104 #, c-format msgid "" "\n" "\n" "\n" "Directory of gopher://%s:%hu/%s\n" "\n" "\n" "

                                                                Directory of gopher://%s:%hu/%s



                                                                  " msgstr "" #: gopher.c:152 #, c-format msgid "" "Failed to parse Gopher directory entry:\n" "%s\n" msgstr "" #: gui_about.c:39 msgid "Pavuk: About" msgstr "ðÒÏ ðÁ×ÕËÁ" #: gui_about.c:61 #, c-format msgid "" "Pavuk %s %s\n" " \n" "an automatic WEB file grabber\n" " \n" "By Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " msgstr "" "ðÁ×ÕË %s %s\n" " \n" "Á×ÔÏÍÁÔÉÞÎÉÊ ÚÁ×ÁÎÔÁÖÕ×ÁÞ ÆÁÊÌ¦× WEB\n" " \n" "á×ÔÏÒ Stefan Ondrejicka\n" " \n" "(ondrej@idata.sk)\n" " \n" "URL : http://www.idata.sk/~ondrej/pavuk/\n" " " #: gui_api.c:168 #, c-format msgid "Processed: %5d" msgstr "õ ÒÏÂÏÔ¦: %5d" #: gui_api.c:170 #, c-format msgid "Queued: %5d" msgstr "õ ÞÅÒÚ¦: %5d" #: gui_api.c:172 #, c-format msgid "Failed: %4d" msgstr "ú¦Ê: %4d" #: gui_api.c:174 #, c-format msgid "Rejected: %5d" msgstr "÷¦ÄËÉÎÕÔÏ: %5d" #: gui_api.c:378 msgid "Start" msgstr "óÔÁÒÔ" #: gui_api.c:498 msgid "Starting ..." msgstr "óÔÁÒÔÕ¤ÍÏ ..." #: gui_api.c:563 msgid "Too high timeout value for GUI interface implementation of timeout\n" msgstr "" #: gui_addurl.c:72 gui_main.c:251 #, c-format msgid "Dropped URL : %s\n" msgstr "÷¦ÄËÉÎÕÔÏ URL : %s\n" #: gui_addurl.c:126 msgid "Pavuk: Append URL" msgstr "ðÁ×ÕË: ÄÏÄÁÔÉ URL" #: gui_addurl.c:138 msgid "New URL:" msgstr "îÏ×ÉÊ URL:" #: gui_common.c:579 gui_common.c:595 gui_main.c:777 msgid "URL" msgstr "" #: gui_common.c:596 msgid "Local filename" msgstr "ìÏËÁÌØÎÅ ¦Í'Ñ ÆÁÊÌÁ" #: gui_common.c:613 msgid "Request URL: " msgstr "URL ÚÁÐÉÔÕ: " #: gui_common.c:616 msgid "Local filename: " msgstr "ìÏËÁÌØÎÅ ¦Í'Ñ ÆÁÊÌÁ: " #: gui_common.c:682 msgid "Extended informations for HTTP POST request" msgstr "òÏÚÛÉÒÅÎÁ ¦ÎÆÏÒÍÁÃ¦Ñ ÄÌÑ ÚÁÐÉÔÕ HTTP POST" #: gui_common.c:739 gui_common.c:1012 msgid "Query fields: " msgstr "ðÏÌÑ ÆÏÒÍÉ: " #: gui_common.c:753 gui_common.c:1026 gui_common.c:2609 gui_limits.c:579 msgid "Type" msgstr "ôÉÐ" #: gui_common.c:754 gui_common.c:1027 msgid "Name" msgstr "¶Í'Ñ" #: gui_common.c:755 gui_common.c:1028 msgid "Value" msgstr "úÎÁÞÅÎÎÑ" #: gui_common.c:797 gui_common.c:1070 msgid "Type: " msgstr "ôÉÐ: " #: gui_common.c:826 gui_common.c:1099 msgid "Name: " msgstr "¶Í'Ñ: " #: gui_common.c:828 gui_common.c:1101 msgid "Value: " msgstr "úÎÁÞÅÎÎÑ: " #: gui_common.c:858 gui_common.c:1131 msgid "Pavuk: Choose form field file" msgstr "ðÁ×ÕË: ÷ÉÂÅÒ¦ÔØ ÆÁÊÌ ÐÏÌ¦× ÆÏÒÍÉ" #: gui_common.c:907 msgid "Form data" msgstr "äÁΦ ÆÏÒÍÉ" #: gui_common.c:933 msgid "Matching action URL: " msgstr "" #: gui_common.c:1193 msgid "Grabber I" msgstr "ôÑÇÁÊÌÏ ¶" #: gui_common.c:1201 msgid "Cache Directory: " msgstr "äÉÒÅËÔÏÒ¦Ñ ËÅÛÁ: " #: gui_common.c:1204 msgid "Default URL prefix: " msgstr "" #: gui_common.c:1207 msgid "Separate info directory: " msgstr "" #: gui_common.c:1210 msgid "Index file name: " msgstr "¶Í'Ñ ÆÁÊÌÁ ¦ÎÄÅËÓÁ: " #: gui_common.c:1213 msgid "Store file name: " msgstr "úÂÅÒÅÇÔÉ Õ ÆÁÊ̦: " #: gui_common.c:1216 msgid "Identity string: " msgstr "óÔÒ¦ÞËÁ ¦ÄÅÎÔÉÆ¦ËÁæ§: " #: gui_common.c:1220 msgid "Netscape browser cache directory: " msgstr "äÉÒÅËÔÏÒ¦Ñ ËÅÛÁ Netscape: " #: gui_common.c:1223 msgid "Mozilla browser cache directory: " msgstr "äÉÒÅËÔÏÒ¦Ñ ËÅÛÁ íÏÚ¦ÌÌÉ: " #: gui_common.c:1228 msgid "Browser: " msgstr "ðÅÒÅÇÌÑÄÁÞ: " #: gui_common.c:1232 msgid "Reminder command: " msgstr "ëÏÍÁÎÄÁ ÎÁÇÁÄÕ×ÁÞÁ: " #: gui_common.c:1235 msgid "Post command: " msgstr "ëÏÍÁÎÄÁ ÌÉÓÔÕ×ÁÎÎÑ: " #: gui_common.c:1251 msgid "How many times retry on fail: " msgstr "óË¦ÌØËÉ ÒÁÚ¦× ÐÒÏÂÕ×ÁÔÉ Õ ÒÁÚ¦ ÚÂÏÀ: " #: gui_common.c:1254 msgid "How many moved links to follow: " msgstr "úÁ ÓË¦ÌØËÏÍÁ ÐÅÒÅÎÅÓÅÎÎÑÍÉ ÇÁÎÑÔÉÓÑ: " #: gui_common.c:1257 msgid "How many times to reget file: " msgstr "óË¦ÌØËÉ ÒÁÚ¦× ÄÏÔÑÇÕ×ÁÔÉ ÆÁÊÌ: " #: gui_common.c:1260 msgid "Document age before syncing with server: " msgstr "÷¦Ë ÄÏËÕÍÅÎÔÁ ÄÏ ÓÉÎÈÒÏΦÚÁæ§ Ú ÓÅÒ×ÅÒÏÍ: " #: gui_common.c:1262 msgid " days " msgstr " ÄÎ¦× " #: gui_common.c:1268 msgid "Read buffer size: " msgstr "âÕÆÅÒ ÄÌÑ ÚÞÉÔÁÎÉÈ ÄÁÎÉÈ:" #: gui_common.c:1273 msgid " kB " msgstr " Ëâ " #: gui_common.c:1279 msgid "Hash tables size: " msgstr "òÏÚÍ¦Ò hash-ÔÁÂÌÉÃØ: " #: gui_common.c:1281 msgid " entries " msgstr " ÅÌÅÍÅÎÔ¦× " #: gui_common.c:1295 msgid "Sleep time between transfers: " msgstr "óÐÁÔÉ Í¦Ö ÓÐÒÏÂÁÍÉ: " #: gui_common.c:1297 msgid " sec." msgstr " ÓÅË." #: gui_common.c:1302 msgid "randomize" msgstr "×ÉÐÁÄËÏ×Ï" #: gui_common.c:1308 msgid "Rollback amount on reget: " msgstr "÷¦ÄËÏÞÕ×ÁÔÉÓÑ ÐÒÉ ÐÏ×ÔÏÒÁÈ ÎÁ: " #: gui_common.c:1310 msgid " bytes" msgstr " ÂÁÊÔ¦×" #: gui_common.c:1316 msgid "Transfer quota: " msgstr "ïÂÍÅÖÅÎÎÑ Û×ÉÄËÏÓÔ¦: " #: gui_common.c:1318 gui_common.c:1326 gui_common.c:1335 msgid " kB" msgstr " Ëâ" #: gui_common.c:1324 msgid "File size quota: " msgstr "ïÂÍÅÖÅÎÎÑ ÒÏÚͦÒÕ: " #: gui_common.c:1333 msgid "Filesystem freespace quota: " msgstr "úÁÌÉÛÉÔÉ ×¦ÌØÎÉÍ ÎÁ æó: " #: gui_common.c:1351 msgid "Number of downloading threads: " msgstr "ë¦ÌØË¦ÓÔØ ÎÉÔÏË ÚÁ×ÁÎÔÁÖÕ×ÁÎÎÑ: " #: gui_common.c:1366 msgid "Grabber II" msgstr "ôÑÇÁÊÌÏ ¶¶" #: gui_common.c:1369 msgid "Misc settings" msgstr "ò¦ÚÎÅ" #: gui_common.c:1378 msgid "Always generate unique name for document" msgstr "úÁ×ÖÄÉ ×ÉÇÁÄÕ×ÁÔÉ ÕΦËÁÌØÎÅ ¦Í'Ñ ÄÏËÕÍÅÎÔÁ" #: gui_common.c:1383 msgid "Delete FTP document after succesful download" msgstr "÷ÉÄÁÌÑÔÉ ÄÏËÕÍÅÎÔÉ FTP ЦÓÌÑ ×ÄÁÌÏÇÏ ×ÉÔÑÇÁÎÎÑ" #: gui_common.c:1388 msgid "Preserve document modification time" msgstr "úÂÅÒ¦ÇÁÔÉ ÞÁÓ ÍÏÄÉÆ¦ËÁæ§ ÄÏËÕÍÅÎÔÁ" #: gui_common.c:1393 msgid "Preserve FTP document permissions" msgstr "úÂÅÒ¦ÇÁÔÉ ÐÒÁ×Á ÄÏÓÔÕÐÕ ÆÁÊÌ¦× FTP" #: gui_common.c:1398 msgid "Preserve FTP symbolic links paths" msgstr "úÂÅÒ¦ÇÁÔÉ ÛÌÑÈÉ ÄÌÑ ÓÉÍÏÌØÎÉÈ ÐÏÓÉÌÁÎØ FTP" #: gui_common.c:1403 msgid "Retrieve FTP symbolic links like files" msgstr "ôÑÇÔÉ ÐÏÓÉÌÁÎÎÑ FTP ÑË ÆÁÊÌÉ" #: gui_common.c:1409 msgid "Whole reget when partial not supported" msgstr "ôÑÇÔÉ ÐÏ×ΦÓÔÀ, ÑËÝÏ ÞÁÓÔËÏ×Ï ÎÅ ×ÉÈÏÄÉÔØ" #: gui_common.c:1415 msgid "Use gzip encoding for transfer" msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ËÏÄÕ×ÁÎÎÑ gzip ÐÒÉ ×ÉÔÑÇÁÎΦ" #: gui_common.c:1420 msgid "Remove improper documents" msgstr "÷ÉÄÁÌÑÔÉ \"Ú¦ÊΦ\" ÄÏËÕÍÅÎÔÉ" #: gui_common.c:1425 msgid "Check transferred size of document" msgstr "ðÅÒÅצÒÑÔÉ ÒÏÚÍ¦Ò ÏÔÒÉÍÁÎÏÇÏ ÆÁÊÌÁ" #: gui_common.c:1430 msgid "Store directory URLs as index files" msgstr "úÂÅÒ¦ÇÁÔÉ URL¦ ÄÉÒÅËÔÏÒ¦Ê, ÑË ¦ÎÄÅËÓΦ ÆÁÊÌÉ" #: gui_common.c:1435 msgid "Store info files with each document" msgstr "úÂÅÒ¦ÇÁÔÉ ¦ÎÆÏ-ÆÁÊÌÉ ËÏÖÎÏÇÏ ÄÏËÕÍÅÎÔÁ" #: gui_common.c:1440 msgid "Send self URL as Referer for starting URLs" msgstr "óÌÁÔÉ ÓÔÁÒÔÏ×ÉÊ URL ÑË Referer ÎÁ ÓÁÍÏÇÏ ÓÅÂÅ" #: gui_common.c:1445 msgid "Send If-Range header field when regeting" msgstr "óÌÁÔÉ ÚÁÇÏÌÏ×ÏË If-Range ÐÒÉ ÄÏÔÑÇÕ×ÁÎΦ" #: gui_common.c:1450 msgid "Show time of start and end of downloading" msgstr "ðÏËÁÚÕ×ÁÔÉ ÞÁÓ ÐÏÞÁÔËÕ ÔÁ ˦ÎÃÑ ÚÁ×ÁÎÔÁÖÅÎÎÑ" #: gui_common.c:1458 msgid "URL scheduling strategy: " msgstr "óÔÒÁÔÅÇ¦Ñ ÒÏÚËÌÁÄÕ ×ÉÔÑÇÁÎÎÑ: " #: gui_common.c:1504 gui_limits.c:447 msgid "HTML" msgstr "" #: gui_common.c:1507 #, fuzzy msgid "HTML document URL rewriting rules" msgstr "ðÅÒÅÐÉÓÕ×ÁÎÎÑ URL Õ HTML ÄÏËÕÍÅÎÔÁÈ" #: gui_common.c:1517 msgid "Rewrite URLs inside HTML doc." msgstr "ðÅÒÅÐÉÓÕ×ÁÔÉ URL Õ HTML ÄÏËÕÍÅÎÔÁÈ" #: gui_common.c:1525 msgid "Rewrite URLs to local when stored locally" msgstr "í¦ÎÑÔÉ URL ÎÁ ÌÏËÁÌØÎ¦ ÐÒÉ ÚÂÅÒÅÖÅÎΦ" #: gui_common.c:1531 msgid "Rewrite all suitable URLs to local" msgstr "í¦ÎÑÔÉ ÕÓ¦ ÐÒÉÄÁÔΦ URL ÎÁ ÌÏËÁÌØÎ¦" #: gui_common.c:1537 msgid "Rewrite all URLs to local immediately" msgstr "í¦ÎÑÔÉ ÕÓ¦ URL ÎÁ ÌÏËÁÌØÎ¦ ÎÅÇÁÊÎÏ" #: gui_common.c:1543 msgid "Rewrite all URLs to remote immediately" msgstr "í¦ÎÑÔÉ ÕÓ¦ URL ÎÁ צÄÄÁÌÅΦ ÎÅÇÁÊÎÏ" #: gui_common.c:1549 msgid "Rewrite only one currently download URL" msgstr "" #: gui_common.c:1554 msgid "Tuning of HTML rewriting engine" msgstr "" #: gui_common.c:1564 #, fuzzy msgid "Don't touch URL wildcard pattern: " msgstr "ÛÁÂÌÏÎÉ-ÍÁÓËÉ" #: gui_common.c:1569 msgid "Don't touch URL RE pattern: " msgstr "" #: gui_common.c:1573 msgid "Don't touch HTML tag RE pattern: " msgstr "" #: gui_common.c:1651 msgid "Net" msgstr "íÅÒÅÖÁ" #: gui_common.c:1658 msgid "Allowed protocols" msgstr "äÏÚ×ÏÌÅΦ ÐÒÏÔÏËÏÌÉ" #: gui_common.c:1667 msgid "HTTP" msgstr "" #: gui_common.c:1672 msgid "FTP" msgstr "" #: gui_common.c:1677 msgid "Gopher" msgstr "" #: gui_common.c:1683 msgid "HTTPS" msgstr "" #: gui_common.c:1688 msgid "FTPS" msgstr "" #: gui_common.c:1694 msgid "FTP data connection type " msgstr "ôÉÐ Ú'¤ÄÎÁÎÎÑ \"FTP data\" " #: gui_common.c:1703 msgid "Active" msgstr "áËÔÉ×ÎÅ" #: gui_common.c:1710 msgid "Passive" msgstr "ðÁÓÉ×ÎÅ" #: gui_common.c:1717 msgid "Communication timeout: " msgstr "" #: gui_common.c:1730 msgid " min." msgstr " È×." #: gui_common.c:1736 msgid "Maximal transfer rate: " msgstr "íÁËÓÉÍÁÌØÎÁ Û×ÉÄ˦ÓÔØ: " #: gui_common.c:1749 gui_common.c:1768 msgid " kB/s" msgstr " Ëâ/ÓÅË" #: gui_common.c:1755 msgid "Minimal transfer rate: " msgstr "í¦Î¦ÍÁÌØÎÁ Û×ÉÄ˦ÓÔØ: " #: gui_common.c:1774 msgid "Local interface address: " msgstr "áÄÒÅÓÁ ÌÏËÁÌØÎÏÇÏ ¦ÎÔÅÒÆÅÊÓÁ: " #: gui_common.c:1785 msgid "Additional HTTP headers: " msgstr "äÏÄÁÔËÏצ ÚÁÇÏÌÏ×ËÉ HTTP: " #: gui_common.c:1796 msgid "Additional FTP list options: " msgstr "" #: gui_common.c:1809 msgid "Use wide listing of FTP directories" msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ÛÉÒÏËÉÊ ÓÐÉÓÏË FTP ÄÉÒÅËÔÏÒ¦Ê" #: gui_common.c:1815 msgid "Fix detection of nonexisting FTP directories on WuFTPD FTP servers" msgstr "" #: gui_common.c:1821 msgid "Use HTTP/1.1 protocol for HTTP communication" msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ HTTP/1.1 ÄÌÑ Ú'¤ÄÎÁÎØ HTTP" #: gui_common.c:1827 msgid "FTP login handshake rules" msgstr "" #: gui_common.c:1843 msgid "Login handshake" msgstr "" #: gui_common.c:1861 msgid "Handshake: " msgstr "" #: gui_common.c:1903 msgid "Proxy" msgstr "ðÒÏËÓ¦" #: gui_common.c:1909 msgid "Gopher proxy" msgstr "Gopher ÐÒÏËÓ¦" #: gui_common.c:1922 gui_common.c:1945 gui_common.c:1974 msgid "Port: " msgstr "ðÏÒÔ: " #: gui_common.c:1926 msgid "Gopher via HTTP proxy" msgstr "Gopher ÞÅÒÅÚ HTTP ÐÒÏËÓ¦" #: gui_common.c:1931 msgid "FTP proxy" msgstr "FTP ÐÒÏËÓ¦" #: gui_common.c:1948 msgid "FTP via HTTP proxy" msgstr "FTP ÞÅÒÅÚ HTTP ÐÒÏËÓ¦" #: gui_common.c:1954 msgid "FTP via HTTP tunneling proxy" msgstr "ðÒÏËÓ¦ ÔÕÎÅÌÀ×ÁÎÎÑ FTP ÞÅÒÅÚ HTTP" #: gui_common.c:1961 msgid "SSL proxy" msgstr "SSL ÐÒÏËÓ¦" #: gui_common.c:1978 msgid "HTTP proxy" msgstr "HTTP ÐÒÏËÓ¦" #: gui_common.c:1984 msgid "Proxy: " msgstr "ðÒÏËÓ¦: " #: gui_common.c:1989 msgid "Allow caching of documents" msgstr "äÏÚ×ÏÌÉÔÉ ËÅÛÕ×ÁÎÎÑ ÄÏËÕÍÅÎÔ¦×" #: gui_common.c:2044 msgid "Languages" msgstr "íÏ×É" #: gui_common.c:2047 msgid "Preffered languages" msgstr "õÌÀÂÌÅΦ ÍÏ×É" #: gui_common.c:2052 msgid "Language code: " msgstr "ëÏÄ ÍÏ×É: " #: gui_common.c:2064 msgid "Preffered character sets" msgstr "õÌÀÂÌÅΦ ÒÏÚËÌÁÄËÉ ÓÉÍ×Ï̦×" #: gui_common.c:2069 msgid "Character set code: " msgstr "ëÏÄ ÒÏÚËÌÁÄËÉ: " #: gui_common.c:2086 msgid "Basic auth. scheme" msgstr "óÈÅÍÁ Á×ÔÏÒÉÚÁæ§ Basic" #: gui_common.c:2096 msgid "Auth" msgstr "" #: gui_common.c:2103 msgid "User authentification" msgstr "á×ÔÏÒÉÚÁÃ¦Ñ ËÏÒÉÓÔÕ×ÁÞÁ" #: gui_common.c:2112 gui_common.c:2161 msgid "Scheme: " msgstr "óÈÅÍÁ: " #: gui_common.c:2138 gui_common.c:2188 gui_common.c:2212 msgid "User name: " msgstr "ëÏÒÉÓÔÕ×ÁÞ: " #: gui_common.c:2144 gui_common.c:2194 msgid "NTLM domain: " msgstr "äÏÍÅÎ NTLM: " #: gui_common.c:2147 gui_common.c:2197 msgid "Reuse HTTP Digest access nonce" msgstr "" #: gui_common.c:2152 msgid "HTTP proxy user authentification" msgstr "á×ÔÏÒÉÚÁÃ¦Ñ ËÏÒÉÓÔÕ×ÁÞÁ ÎÁ HTTP ÐÒÏËÓ¦" #: gui_common.c:2202 msgid "FTP proxy user authentification" msgstr "á×ÔÏÒÉÚÁÃ¦Ñ ËÏÒÉÓÔÕ×ÁÞÁ ÎÁ FTP ÐÒÏËÓ¦" #: gui_common.c:2217 msgid "Misc" msgstr "ò¦ÚÎÅ" #: gui_common.c:2231 msgid "E-mail address: " msgstr "ðÏÛÔÏ×Á ÁÄÒÅÓÁ: " #: gui_common.c:2233 msgid "Send From: header with HTTP request" msgstr "îÁÄÓÉÌÁÔÉ ÚÁÇÏÌÏ×ÏË \"From:\" ¦Ú ÚÁÐÉÔÏÍ HTTP" #: gui_common.c:2247 msgid "SSL" msgstr "" #: gui_common.c:2250 msgid "SSL client certificate" msgstr "SSL ÓÅÒÔÉÆ¦ËÁÔ Ë̦¤ÎÔÁ" #: gui_common.c:2260 gui_common.c:2274 msgid "Certificate password: " msgstr "ðÁÒÏÌØ ÓÅÒÔÉÆ¦ËÁÔÁ: " #: gui_common.c:2263 msgid "Certificate PEM file: " msgstr "æÁÊÌ ÓÅÒÔÉÆ¦ËÁÔÁ PEM: " #: gui_common.c:2266 msgid "Certificate key file: " msgstr "ëÌÀÞÏ×ÉÊ ÆÁÊÌ ÓÅÒÔÉÆ¦ËÁÔÁ: " #: gui_common.c:2271 msgid "NSS certificate config directory: " msgstr "" #: gui_common.c:2277 #, fuzzy msgid "Accept unknown certificates" msgstr "SSL ÓÅÒÔÉÆ¦ËÁÔ Ë̦¤ÎÔÁ" #: gui_common.c:2283 msgid "Domestic SSL ciphers policy" msgstr "" #: gui_common.c:2291 msgid "List of preffered ciphers: " msgstr "óÐÉÓÏË ÕÌÀÂÌÅÎÉÈ ÛÉÆÒ¦×: " #: gui_common.c:2297 msgid "SSL protocol version" msgstr "÷ÅÒÓ¦Ñ ÐÒÏÔÏËÏÌÁ SSL" #: gui_common.c:2305 msgid "SSLv23" msgstr "" #: gui_common.c:2311 msgid "SSLv2" msgstr "" #: gui_common.c:2317 msgid "SSLv3" msgstr "" #: gui_common.c:2324 msgid "TLSv1" msgstr "" #: gui_common.c:2331 msgid "Miscelanous SSL settings" msgstr "ò¦ÚΦ ÎÁÌÁÛÔÕ×ÁÎÎÑ SSL" #: gui_common.c:2342 msgid "EGD daemon socket path: " msgstr "" #: gui_common.c:2347 msgid "Unique ID for all SSL sessions" msgstr "õΦËÁÌØÎÉÊ ID ÄÌÑ ËÏÖÎϧ ÓÅÓ¦§ SSL" #: gui_common.c:2362 gui_main.c:1843 msgid "Log" msgstr "öÕÒÎÁÌ" #: gui_common.c:2369 msgid "Try to find unique name, when original log file locked" msgstr "îÁÍÁÇÁÔÉÓÑ ÚÎÁÊÔÉ ÕΦËÁÌØÎÅ ¦Í'Ñ, ËÏÌÉ ×ÉȦÄÎÉÊ ÖÕÒÎÁÌ ÚÁÌÏËÏ×ÁÎÏ" #: gui_common.c:2374 msgid "Log file: " msgstr "æÁÊÌ ÖÕÒÎÁÌÁ: " #: gui_common.c:2377 msgid "Shortlog file: " msgstr "æÁÊÌ ÓËÏÒÏÞÅÎÏÇÏ ÖÕÒÎÁÌÕ: " #: gui_common.c:2380 msgid "Log window length: " msgstr "äÏ×ÖÉÎÁ צËÎÁ ÖÕÒÎÁÌÕ: " #: gui_common.c:2393 msgid "Cookies" msgstr "ëÏÒÖÉËÉ" #: gui_common.c:2396 msgid "Disabled cookie domains" msgstr "úÁÂÏÒÏÎÅΦ ÄÏÍÅÎÉ" #: gui_common.c:2401 gui_limits.c:263 msgid "Domain: " msgstr "äÏÍÅÎ: " #: gui_common.c:2404 msgid "Cookies settings" msgstr "îÁÌÁÛÔÕ×ÁÎÎÑ ËÏÒÖÉ˦×" #: gui_common.c:2413 msgid "Update cookies" msgstr "ðÏÎÏ×ÌÀ×ÁÔÉ ËÏÒÖÉËÉ" #: gui_common.c:2418 msgid "Send cookies" msgstr "÷¦ÄÄÁ×ÁÔÉ ËÏÒÖÉËÉ" #: gui_common.c:2423 msgid "Accept cookies" msgstr "âÒÁÔÉ ËÏÒÖÉËÉ" #: gui_common.c:2428 msgid "Check cookies domain" msgstr "ðÅÒÅצÒÑÔÉ ÄÏÍÅÎÉ" #: gui_common.c:2436 msgid "Cookies maximal number: " msgstr "íÁËÓÉÍÁÌØÎÁ Ë¦ÌØË¦ÓÔØ ËÏÒÖÉ˦×: " #: gui_common.c:2451 msgid "Cookie file: " msgstr "æÁÊÌ ËÏÒÖÉ˦×: " #: gui_common.c:2537 msgid "Filename" msgstr "¶ÍÅÎÁ" #: gui_common.c:2540 msgid "Local filename conversion rules" msgstr "í¦ÓÃÅצ ÐÒÁ×ÉÌÁ ÐÅÒÅÊÍÅÎÕ×ÁÎÎÑ ÆÁÊ̦×" #: gui_common.c:2548 msgid "Replace String1 with String2 in filename" msgstr "úÁͦÎÑÔÉ óÔÒ¦ÞËÕ1 óÔÒ¦ÞËÏÀ2 Õ ¦ÍÅÎÁÈ" #: gui_common.c:2557 msgid "String1: " msgstr "óÔÒ¦ÞËÁ1: " #: gui_common.c:2560 msgid "String2: " msgstr "óÔÒ¦ÞËÁ2: " #: gui_common.c:2562 msgid "Delete characters from filename" msgstr "÷ÉÄÁÌÑÔÉ ÓÉÍ×ÏÌÉ Ú ¦ÍÅÎ" #: gui_common.c:2571 msgid "Character set: " msgstr "îÁÂ¦Ò ÓÉÍ×Ï̦×: " #: gui_common.c:2573 msgid "Replace chars from Set1 with chars from Set2 in filename" msgstr "úÁͦÎÑÔÉ ÓÉÍ×ÏÌÉ Ú òÑÄÕ1 ÓÉÍ×ÏÌÁÍÉ Ú òÑÄÕ2 Õ ¦ÍÅÎÁÈ" #: gui_common.c:2582 msgid "Character set1: " msgstr "òÑÄ1: " #: gui_common.c:2585 msgid "Character set2: " msgstr "òÑÄ2: " #: gui_common.c:2592 msgid "Base level of tree: " msgstr "âÁÚÏ×ÉÊ Ò¦×ÅÎØ ÄÅÒÅ×Á: " #: gui_common.c:2594 msgid "Local filename mapping rules" msgstr "ðÒÁ×ÉÌÁ ÍÁÐÕ×ÁÎÎÑ ÄÌÑ ÌÏËÁÌØÎÉÈ ÆÁÊ̦×" #: gui_common.c:2610 msgid "Match pattern" msgstr "ûÁÂÌÏÎ" #: gui_common.c:2611 msgid "Rule" msgstr "ðÒÁ×ÉÌÏ" #: gui_common.c:2631 msgid "wildcard pattern" msgstr "ÛÁÂÌÏÎÉ-ÍÁÓËÉ" #: gui_common.c:2638 msgid "RE pattern" msgstr "ÛÁÂÌÏÎÉ RE" #: gui_common.c:2650 msgid "Matching pattern: " msgstr "ûÁÂÌÏÎ: " #: gui_common.c:2657 msgid "Construction rule: " msgstr "ðÒÁ×ÉÌÏ ËÏÎÓÔÒÕÀ×ÁÎÎÑ: " #: gui_common.c:2697 msgid "Advertisement" msgstr "âÁÎÎÅÒÉ" #: gui_common.c:2704 msgid "Enable removing of advertisement banners" msgstr "äÏÚ×ÏÌÉÔÉ ×ÉÄÁÌÅÎÎÑ ÂÁÎÎÅÒ¦×" #: gui_common.c:2709 msgid "RE for advertisement URLs: " msgstr "RE ÄÌÑ URL'¦× ÂÁÎÎÅÒ¦×: " #: gui_common.c:2821 msgid "Javascript" msgstr "" #: gui_common.c:2829 msgid "Processing of javascript" msgstr "ïÐÒÁÃØÏ×Õ×ÁÎÎÑ javascript" #: gui_common.c:2833 msgid "Javascript patterns" msgstr "ûÁÂÌÏÎÉ Javascript" #: gui_common.c:2838 msgid "RE for Javascript patterns: " msgstr "RE ÄÌÑ ÛÁÂÌÏÎ¦× Javascript: " #: gui_common.c:2844 msgid "Javascript patterns with transform rules" msgstr "ûÁÂÌÏÎÉ Javascript Ú ÐÒÁ×ÉÌÁÍÉ ÔÒÁÎÓÆÏÒÍÁæ§" #: gui_common.c:2859 msgid "Pattern" msgstr "ûÁÂÌÏÎ" #: gui_common.c:2860 msgid "Transform rule" msgstr "ðÒÁ×ÉÌÏ ÔÒÁÎÓÆÏÒÍÁæ§" #: gui_common.c:2861 msgid "HTML tag" msgstr "HTML ÔÅ­" #: gui_common.c:2862 msgid "HTML tag attribute" msgstr "áÔÒÉÂÕÔ HTML ÔÅ­Á" #: gui_common.c:2863 msgid "Rewrite" msgstr "" #: gui_common.c:2882 msgid "Pattern: " msgstr "ûÁÂÌÏÎ: " #: gui_common.c:2885 msgid "Tranform rule: " msgstr "ðÒÁ×ÉÌÏ ÔÒÁÎÓÆÏÒÍÁæ§: " #: gui_common.c:2894 msgid "HTML tag: " msgstr "HTML ÔÅ­: " #: gui_common.c:2898 msgid "HTML tag attribute: " msgstr "áÔÒÉÂÕÔ HTML ÔÅ­Á: " #: gui_common.c:2900 msgid "Rewrite URL part in HTML document" msgstr "ðÅÒÅÐÉÓÕ×ÁÔÉ URL Õ HTML ÄÏËÕÍÅÎÔÁÈ" #: gui_common.c:2958 msgid "Pavuk: Common config" msgstr "ðÁ×ÕË: úÁÇÁÌØÎÁ ËÏÎÆ¦ÇÕÒÁæÑ" #: gui_common.c:3027 msgid "Limitations ..." msgstr "ïÂÍÅÖÅÎÎÑ ..." #: gui_jscons.c:151 msgid "Pavuk: JavaScript console" msgstr "ðÁ×ÕË: ëÏÎÓÏÌØ JavaScript" #: gui_jscons.c:168 msgid "Reload script file" msgstr "ðÅÒÅÞÉÔÁÔÉ ÆÁÊÌ ÓËÒÉÐÔÁ" #: gui_jscons.c:173 msgid "Save script to file" msgstr "úÂÅÒÅÇÔÉ ÓËÒÉÐÔ ÄÏ ÆÁÊÌÁ" #: gui_jscons.c:180 msgid "Load script to JavaScript runtime" msgstr "" #: gui_jscons.c:185 msgid "Restart JavaScript runtime" msgstr "" #: gui_jscons.c:208 msgid "Prompt: " msgstr "" #: gui_jscons.c:221 msgid "JavaScript source file: " msgstr "÷ÉȦÄÎÉÊ ÆÁÊÌ JavaScript: " #: gui_limits.c:48 msgid "Tree" msgstr "äÅÒÅ×Ï" #: gui_limits.c:60 msgid "Download cgi-generated pages" msgstr "÷ÉÔÑÇÁÔÉ cgi-Ú­ÅÎÅÒÏ×ÁΦ ÓÔÏÒ¦ÎËÉ" #: gui_limits.c:66 msgid "Recurse through FTP directory" msgstr "êÔÉ ÒÅËÕÒÓÉ×ÎÏ ËÒ¦ÚØ ÄÉÒÅËÔÏÒ¦§ FTP" #: gui_limits.c:72 msgid "Allow \"robots.txt\"" msgstr "ú×ÁÖÁÔÉ ÎÁ \"robots.txt\"" #: gui_limits.c:78 msgid "Process HTML files downloaded over FTP" msgstr "ïÐÒÁÃØÏ×Õ×ÁÔÉ ÏÔÒÉÍÁΦ ÞÅÒÅÚ FTP ÆÁÊÌÉ HTML" #: gui_limits.c:84 msgid "Don't leave starting site" msgstr "îÅ ÐÏÌÉÛÁÔÉ ÓÔÁÒÔÏ×ÏÇÏ ÓÅÒ×ÅÒÁ" #: gui_limits.c:90 msgid "Don't leave starting directory" msgstr "îÅ ÐÏÌÉÛÁÔÉ ÓÔÁÒÔÏ×Õ ÄÉÒÅËÔÏÒ¦À" #: gui_limits.c:96 msgid "Don't leave site enter directory" msgstr "" #: gui_limits.c:102 msgid "Download just single page" msgstr "÷ÉÔÑÇÔÉ ÌÉÛÅ ÏÄÎÕ ÓÔÏÒ¦ÎËÕ" #: gui_limits.c:108 msgid "Apply limiting options on inline objects" msgstr "" #: gui_limits.c:123 msgid "Max. count of documents: " msgstr "íÁËÓ. Ë¦ÌØË¦ÓÔØ ÄÏËÕÍÅÎÔ¦×: " #: gui_limits.c:126 msgid "Max. depth of tree: " msgstr "íÁËÓ. ÇÌÉÂÉÎÁ ÄÅÒÅ×Á: " #: gui_limits.c:129 msgid "Max. levels to leave from starting site: " msgstr "" #: gui_limits.c:132 msgid "Max. document size: " msgstr "íÁËÓ. ÒÏÚÍ¦Ò ÄÏËÕÍÅÎÔÁ: " #: gui_limits.c:135 msgid "Min. document size: " msgstr "í¦Î. ÒÏÚÍ¦Ò ÄÏËÕÍÅÎÔÁ: " #: gui_limits.c:138 msgid "Max. site levels to leave from starting site: " msgstr "" #: gui_limits.c:149 msgid "Working subdirectory :" msgstr "òÏÂÏÞÁ ÄÉÒÅËÔÏÒ¦Ñ: " #: gui_limits.c:152 msgid "User condition script: " msgstr "" #: gui_limits.c:155 msgid "Follow command: " msgstr "" #: gui_limits.c:166 msgid "Patterns" msgstr "ûÁÂÌÏÎÉ" #: gui_limits.c:169 gui_limits.c:609 msgid "Wildcard patterns" msgstr "ûÁÂÌÏÎÉ Ú ÍÁÓËÁÍÉ" #: gui_limits.c:178 gui_limits.c:205 msgid "Documents matching pattern: " msgstr "" #: gui_limits.c:182 gui_limits.c:191 gui_limits.c:209 gui_limits.c:218 #: gui_limits.c:283 msgid "skip: " msgstr "" #: gui_limits.c:183 gui_limits.c:210 msgid "Pavuk: edit Documents matching skip pattern" msgstr "" #: gui_limits.c:187 gui_limits.c:214 msgid "URL matching pattern: " msgstr "" #: gui_limits.c:192 gui_limits.c:219 msgid "Pavuk: edit URL matching skip pattern" msgstr "" #: gui_limits.c:196 gui_limits.c:615 msgid "RE patterns" msgstr "ûÁÂÌÏÎÉ RE" #: gui_limits.c:231 msgid "Hosts" msgstr "óÅÒ×ÅÒÉ" #: gui_limits.c:240 msgid "Allow / Disallow sites" msgstr "äÏÚ×ÏÌÉÔÉ / úÁÂÏÒÏÎÉÔÉ ÓÅÒ×ÅÒ" #: gui_limits.c:246 msgid "Site: " msgstr "óÅÒ×ÅÒ: " #: gui_limits.c:257 msgid "Allow / Disallow domains" msgstr "äÏÚ×ÏÌÉÔÉ / úÁÂÏÒÏÎÉÔÉ ÄÏÍÅÎ" #: gui_limits.c:269 msgid "IP address RE patterns" msgstr "ûÁÂÌÏÎÉ RE ÄÌÑ ÁÄÒÅÓ IP" #: gui_limits.c:279 msgid "Server IP address matching pattern: " msgstr "ûÁÂÌÏÎÉ ÄÌÑ ÁÄÒÅÓ IP ÓÅÒ×ÅÒ¦×: " #: gui_limits.c:284 #, fuzzy msgid "Pavuk: edit Server IP address matching skip pattern" msgstr "ûÁÂÌÏÎÉ ÄÌÑ ÁÄÒÅÓ IP ÓÅÒ×ÅÒ¦×: " #: gui_limits.c:288 msgid "Server ports" msgstr "ðÏÒÔÉ ÓÅÒ×ÅÒÁ" #: gui_limits.c:298 #, fuzzy msgid "Allow/deny" msgstr "äÏÚ×ÏÌÉÔÉ/úÁÂÏÒÏÎÉÔÉ" #: gui_limits.c:303 msgid "Ports: " msgstr "ðÏÒÔÉ: " #: gui_limits.c:314 msgid "Documents" msgstr "äÏËÕÍÅÎÔÉ" #: gui_limits.c:323 msgid "Allow / Disallow suffix" msgstr "äÏÚ×ÏÌÉÔÉ / úÁÂÏÒÏÎÉÔÉ ÓÕÆ¦ËÓ" #: gui_limits.c:329 msgid "Suffix: " msgstr "óÕÆ¦ËÓ: " #: gui_limits.c:340 msgid "Allow / Disallow prefix" msgstr "äÏÚ×ÏÌÉÔÉ / úÁÂÏÒÏÎÉÔÉ ÐÒÅÆ¦ËÓ" #: gui_limits.c:346 msgid "Prefix: " msgstr "ðÒÅÆ¦ËÓ: " #: gui_limits.c:360 gui_limits.c:372 msgid "MIME types" msgstr "ôÉÐÉ MIME" #: gui_limits.c:368 msgid "Allow / Disallow MIME type" msgstr "äÏÚ×ÏÌÉÔÉ / úÁÂÏÒÏÎÉÔÉ ÔÉÐÉ MIME" #: gui_limits.c:377 msgid "MIME type: " msgstr "ôÉÐ MIME: " #: gui_limits.c:390 msgid "Time" msgstr "þÁÓ " #: gui_limits.c:396 msgid "Lower document time limit" msgstr "îÉÖÎÑ ÍÅÖÁ צËÕ ÄÏËÕÍÅÎÔÁ" #: gui_limits.c:406 msgid "Check if doc. time newer than this" msgstr "äÉ×ÉÔÉÓÑ, ÞÉ ÄÏËÕÍÅÎÔ ÎÏצÛÉÊ Î¦Ö" #: gui_limits.c:410 msgid "Upper document time limit" msgstr "÷ÅÒÈÎÑ ÍÅÖÁ צËÕ ÄÏËÕÍÅÎÔÁ" #: gui_limits.c:420 msgid "Check if doc. time older than this" msgstr "äÉ×ÉÔÉÓÑ, ÞÉ ÄÏËÕÍÅÎÔ ÓÔÁÒ¦ÛÉÊ Î¦Ö" #: gui_limits.c:429 msgid "Maximal allowed time of downloading: " msgstr "îÁÊÂ¦ÌØÎÉÊ ÄÏÚ×ÏÌÅÎÉÊ ÞÁÓ ÚÁ×ÁÎÔÁÖÅÎÎÑ: " #: gui_limits.c:432 msgid " min" msgstr " È×" #: gui_limits.c:445 msgid "Select allowed HTML tags and attributes" msgstr "÷¦ÄÍ¦ÔØÔÅ ÄÏÚ×ÏÌÅΦ ÔÅÇÉ ÔÁ ÁÔÒÉÂÕÔÉ HTML" #: gui_limits.c:462 #, c-format msgid "%s of %s" msgstr "" #: gui_limits.c:567 #, fuzzy msgid "Tag patterns" msgstr "ûÁÂÌÏÎÉ RE" #: gui_limits.c:580 gui_limits.c:657 #, fuzzy msgid "Tag pattern" msgstr "ÛÁÂÌÏÎÉ RE" #: gui_limits.c:581 #, fuzzy msgid "Atrribute pattern" msgstr "ûÁÂÌÏÎÉ Javascript" #: gui_limits.c:582 gui_limits.c:665 #, fuzzy msgid "URL pattern" msgstr "ÛÁÂÌÏÎÉ RE" #: gui_limits.c:597 #, fuzzy msgid "Pattern type: " msgstr "ûÁÂÌÏÎ: " #: gui_limits.c:661 #, fuzzy msgid "Attribute pattern" msgstr "ûÁÂÌÏÎÉ Javascript" #: gui_limits.c:721 msgid "Pavuk: Limits config" msgstr "ðÁ×ÕË: ÏÂÍÅÖÅÎÎÑ" #: gui_limits.c:776 msgid "Common ..." msgstr "úÁÇÁÌØÎ¦ ..." #: gui_main.c:186 msgid "Unable to change language during processing time!\n" msgstr "" #: gui_main.c:398 msgid "Unknown window to popup" msgstr "" #: gui_main.c:463 #, c-format msgid "Fetched URL from clipboard : %s\n" msgstr "÷ÉÔÑÇÎÕÔÉÊ Ú ËÉÛÅΦ URL : %s\n" #: gui_main.c:507 #, c-format msgid "Fetched URL from browser : %s\n" msgstr "÷ÉÔÑÇÎÕÔÉÊ Õ ÐÅÒÅÇÌÑÄÁÞÁ URL : %s\n" #: gui_main.c:762 msgid "Both" msgstr "¶ËÏÎËÉ ÔÁ ÔÅËÓÔ" #: gui_main.c:763 msgid "Icons only" msgstr "ìÉÛÅ ¦ËÏÎËÉ" #: gui_main.c:764 msgid "Text only" msgstr "ìÉÛÅ ÔÅËÓÔ" #: gui_main.c:776 msgid "Nr." msgstr "" #: gui_main.c:778 msgid "Status" msgstr "óÔÁÎ" #: gui_main.c:779 msgid "Size" msgstr "òÏÚͦÒ" #: gui_main.c:780 msgid "Transfer rate" msgstr "û×ÉÄ˦ÓÔØ" #: gui_main.c:781 msgid "Elapsed time" msgstr "ðÒÏÊÛÌÏ ÞÁÓÕ" #: gui_main.c:782 msgid "Remaining time" msgstr "ìÉÛÉÌÏÓÑ ÞÁÓÕ" #: gui_main.c:922 msgid "Open _URL ..." msgstr "÷¦ÄËÒÉÔÉ _URL ..." #: gui_main.c:935 msgid "Append URL ..." msgstr "äÏÄÁÔÉ URL ..." #: gui_main.c:944 msgid "Fetch URL from Clipboard" msgstr "÷ÚÑÔÉ URL Ú ËÉÛÅΦ" #: gui_main.c:962 msgid "Fetch URL from browser" msgstr "÷ÚÑÔÉ URL Õ ÐÅÒÅÇÌÑÄÁÞÁ" #: gui_main.c:972 msgid "Load scenario ..." msgstr "úÞÉÔÁÔÉ ÓÃÅÎÁÒ¦Ê ..." #: gui_main.c:981 msgid "Add scenario ..." msgstr "äÏÄÁÔÉ ÓÃÅÎÁÒ¦Ê ..." #: gui_main.c:990 msgid "Save scenario ..." msgstr "úÂÅÒÅÇÔÉ ÓÃÅÎÁÒ¦Ê ..." #: gui_main.c:999 msgid "Save settings to ~/.pavukrc" msgstr "úÂÅÒÅÇÔÉ ÕÓÔÁÎÏ×ËÉ ÄÏ ~/.pavukrc" #: gui_main.c:1012 msgid "Schedule ..." msgstr "òÏÚËÌÁÄ ..." #: gui_main.c:1021 msgid "Auth. info editor ..." msgstr "òÅÄÁËÔÏÒ Auth. info ..." #: gui_main.c:1034 msgid "E_xit" msgstr "÷É_x¦Ä" #: gui_main.c:1043 msgid "_File" msgstr "æÁÊÌ(_F)" #: gui_main.c:1057 msgid "Document _Tree ..." msgstr "äÅÒÅ×Ï ÄÏËÕÍÅÎ_t¦× ..." #: gui_main.c:1066 msgid "Status page ..." msgstr "ðÅÒÅÇÌÑÄ ÓÔÁÎÕ ..." #: gui_main.c:1074 msgid "HTML forms editor ..." msgstr "òÅÄÁËÔÏÒ ÆÏÒÍ HTML ..." #: gui_main.c:1083 msgid "Javascript console ..." msgstr "ëÏÎÓÏÌØ Javascript ..." #: gui_main.c:1096 msgid "Clear log window" msgstr "ïÞÉÓÔÉÔÉ ×¦ËÎÏ ÖÕÒÎÁÌÕ" #: gui_main.c:1105 msgid "_View" msgstr "÷ÉÇÌÑÄ(_V)" #: gui_main.c:1121 msgid "normal recurse" msgstr "Ú×ÉÞÁÊÎÅ ×ÉËÁÞÕ×ÁÎÎÑ" #: gui_main.c:1131 msgid "synchronize" msgstr "ÓÉÎÈÒÏΦÚÕ×ÁÔÉ" #: gui_main.c:1142 msgid "single page" msgstr "ÏÄÎÁ ÓÔÏÒ¦ÎËÁ" #: gui_main.c:1152 msgid "update local links" msgstr "ÐÏÎÏ×ÉÔÉ ÌÏËÁÌØÎ¦ ÐÏÓÉÌÁÎÎÑ" #: gui_main.c:1162 msgid "resume files" msgstr "ÐÅÒÅ×ÉÔÑÇÔÉ ÆÁÊÌÉ" #: gui_main.c:1172 msgid "unlimited reget" msgstr "ÎÅÏÂÍÅÖÅÎÅ ÄÏÔÑÇÕ×ÁÎÎÑ" #: gui_main.c:1182 msgid "transfer but don't store" msgstr "ÔÑÇÔÉ, ÎÅ ÚÂÅÒ¦ÇÁÀÞÉ" #: gui_main.c:1192 msgid "reminder" msgstr "ÎÁÇÁÄÕ×ÁÞ" #: gui_main.c:1202 msgid "list ftp directory" msgstr "ÓÐÉÓÏË ftp ÄÉÒÅËÔÏÒ¦§" #: gui_main.c:1212 msgid "_Mode" msgstr "òÅÖÉÍ(_M)" #: gui_main.c:1228 msgid "C_ommon ..." msgstr "úÁÇÁÌØÎ¦ (_C) ..." #: gui_main.c:1237 msgid "_Limitations ..." msgstr "ïÂÍÅÖÅÎÎÑ (_L) ..." #: gui_main.c:1246 msgid "Reset configuration" msgstr "÷¦ÄÎÏ×ÉÔÉ ËÏÎÆ¦­ÕÒÁæÀ" #: gui_main.c:1260 msgid "Toolbar" msgstr "ðÁÎÅÌØ ¦ÎÓÔÒÕÍÅÎÔ¦×" #: gui_main.c:1268 msgid "Toggle toolbar" msgstr "ðÅÒÅÍÉËÎÕÔÉ ÐÁÎÅÌØ ¦ÎÓÔÒÕÍÅÎÔ¦×" #: gui_main.c:1323 msgid "Progressbar" msgstr "ðÁÎÅÌØ ÐÏÓÔÕÐÕ" #: gui_main.c:1354 msgid "Language" msgstr "íÏ×Á" #: gui_main.c:1363 nls.c:33 msgid "English" msgstr "" #: gui_main.c:1405 msgid "Debug level" msgstr "ò¦×ÅÎØ צÄÌÁÄËÉ" #: gui_main.c:1428 msgid "All" msgstr "÷ÓÅ" #: gui_main.c:1435 msgid "None" msgstr "î¦ÞÏÇÏ" #: gui_main.c:1442 msgid "Debug" msgstr "÷¦ÄÌÁÄËÁ" #: gui_main.c:1458 msgid "Allow tooltips" msgstr "äÏÚ×ÏÌÉÔÉ Ð¦ÄËÁÚËÉ" #: gui_main.c:1468 msgid "Log window autoscroll" msgstr "á×ÔÏÍÁÔÉÞÎÁ ÐÒÏËÒÕÔËÁ ÖÕÒÎÁÌÕ" #: gui_main.c:1477 msgid "Use preferences" msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ÕÐÏÄÏÂÁÎÎÑ" #: gui_main.c:1486 msgid "Quiet" msgstr "ðÒÁÃÀ×ÁÔÉ ÍÏ×ÞËÉ" #: gui_main.c:1498 msgid "Immediate messages" msgstr "îÅÇÁÊΦ ÐÏצÄÏÍÌÅÎÎÑ" #: gui_main.c:1510 msgid "_Config" msgstr "ðÁÒÁÍÅÔÒÉ(_ó)" #: gui_main.c:1524 msgid "_Restart" msgstr "ðÅÒÅÚÁÐÕÓË (_R)" #: gui_main.c:1534 msgid "Co_ntinue" msgstr "ðÒÏÄÏ×ÖÉÔÉ (_N)" #: gui_main.c:1544 msgid "Sto_p" msgstr "úÕÐÉÎÉÔÉÓÑ (_P)" #: gui_main.c:1554 msgid "_Break" msgstr "õÒ×ÁÔÉ (_B)" #: gui_main.c:1564 msgid "_Action" msgstr "䦧(_A)" #: gui_main.c:1582 msgid "About ..." msgstr "ðÒÏ ..." #: gui_main.c:1591 msgid "_Help" msgstr "äÏÐÏÍÏÇÁ(_H)" #: gui_main.c:1617 msgid "Config" msgstr "ëÏÎÆ¦­ÕÒÁæÑ" #: gui_main.c:1618 msgid "Popup config window" msgstr "÷ÉÇÕÌØËÕ¤ צËÎÏ ËÏÎÆ¦­ÕÒÕ×ÁÎÎÑ" #: gui_main.c:1622 msgid "Limits" msgstr "íÅÖ¦" #: gui_main.c:1623 msgid "Popup limits window" msgstr "÷ÉÇÕÌØËÕ¤ צËÎÏ ËÏÎÆ¦­ÕÒÕ×ÁÎÎÑ ÏÂÍÅÖÅÎØ" #: gui_main.c:1629 msgid "Go bg" msgstr "õ ЦÄЦÌÌÑ" #: gui_main.c:1630 msgid "Destroy window as soon as posible and continue on terminal" msgstr "úÎÉÝÉÔÉ ÃŠצËÎÏ ÑËÎÁÊÛ×ÉÄÛÅ ÔÁ ÐÒÏÄÏ×ÖÉÔÉ Õ ÔÅÒͦÎÁ̦" #: gui_main.c:1634 gui_main.c:1704 msgid "Restart" msgstr "ðÅÒÅÚÁÐÕÓË" #: gui_main.c:1635 msgid "Start working on currently set starting URLs" msgstr "ðÏÞÁÔÉ ÒÏÂÏÔÕ Ú¦ ÓÐÉÓËÏÍ ÓÔÁÒÔÏ×ÉÈ URL" #: gui_main.c:1639 gui_main.c:1709 msgid "Continue" msgstr "äÁ̦" #: gui_main.c:1640 msgid "Continue after stop or break" msgstr "ðÒÏÄÏ×ÖÉÔÉ Ð¦ÓÌÑ ÚÕÐÉÎËÉ ÞÉ ÕÒÉ×ÁÎÎÑ" #: gui_main.c:1646 gui_main.c:1714 msgid "Stop" msgstr "úÕÐÉÎÉÔÉÓÑ" #: gui_main.c:1647 msgid "Finish this transfer and stop" msgstr "úÁ˦ÎÞÉÔÉ ÃÅÊ ÔÒÁÎÓÆÅÒ ÔÁ ÚÕÐÉÎÉÔÉÓÑ" #: gui_main.c:1651 gui_main.c:1719 msgid "Break" msgstr "õÒ×ÁÔÉ" #: gui_main.c:1652 msgid "Break transfer and stop" msgstr "õÒ×ÁÔÉ ÔÒÁÎÓÆÅÒ ÔÁ ÚÕÐÉÎÉÔÉÓÑ" #: gui_main.c:1658 msgid "Exit" msgstr "÷ÉȦÄ" #: gui_main.c:1659 msgid "Immediately quit the program" msgstr "îÅÇÁÊÎÏ ×ÉÊÔÉ Ú ÐÒÏÇÒÁÍÉ" #: gui_main.c:1724 msgid "Show whole main window" msgstr "ðÏËÁÚÁÔÉ ÇÏÌÏ×ΊצËÎÏ ÐÏ×ΦÓÔÀ" #: gui_main.c:1729 msgid "Quit" msgstr "÷ÉÊÔÉ" #: gui_main.c:1808 msgid "Pavuk: save log" msgstr "ðÁ×ÕË: ÚÂÅÒÅÇÔÉ ÖÕÒÎÁÌ" #: gui_main.c:1864 msgid "Select all" msgstr "÷ÉĦÌÉÔÉ ×ÓÅ" #: gui_main.c:1872 msgid "Clear selection" msgstr "úÔÅÒÔÉ ×ÉĦÌÅÎÎÑ" #: gui_main.c:1880 msgid "Copy selection" msgstr "ëÏЦÀ×ÁÔÉ ×ÉĦÌÅÎÎÑ" #: gui_main.c:1892 msgid "Save log ..." msgstr "úÂÅÒÅÇÔÉ ÖÕÒÎÁÌ..." #: gui_main.c:1899 msgid "Clear log" msgstr "ïÞÉÓÔÉÔÉ ÖÕÒÎÁÌ" #: gui_main.c:1974 gui_main.c:2088 msgid "Processed: " msgstr "ïÂÒÏÂÌÅÎÏ: " #: gui_main.c:1983 gui_main.c:2097 msgid "Failed: " msgstr "îÅ×ÄÁÞ: " #: gui_main.c:1992 gui_main.c:2106 msgid "Queued: " msgstr "õ ÞÅÒÚ¦: " #: gui_main.c:2001 gui_main.c:2115 msgid "Rejected: " msgstr "÷¦ÄËÉÎÕÔÏ: " #: gui_main.c:2047 msgid "S: " msgstr "" #: gui_main.c:2056 msgid "R: " msgstr "" #: gui_main.c:2065 msgid "ET: " msgstr "" #: gui_main.c:2074 msgid "RT: " msgstr "" #: gui_scenario.c:48 msgid "Pavuk: Scenario saver" msgstr "ðÁ×ÕË: úÂÅÒ¦ÇÁÞ ÓÃÅÎÁÒ¦§×" #: gui_scenario.c:140 msgid "Pavuk: Scenario loader" msgstr "ðÁ×ÕË: úÁ×ÁÎÔÁÖÕ×ÁÞ ÓÃÅÎÁÒ¦§×" #: gui_scenario.c:231 msgid "Pavuk: Scenario add" msgstr "ðÁ×ÕË: äÏÄÁÔÉ ÓÃÅÎÁÒ¦Ê" #: gui_sched.c:44 pavuk.c:495 msgid "Error scheduling\n" msgstr "ðÏÍÉÌËÁ ÒÏÂÏÔÉ ÚÁ ÒÏÚËÌÁÄÏÍ\n" #: gui_sched.c:68 msgid "Pavuk: Scheduler" msgstr "" #: gui_sched.c:87 msgid "Scheduling command: " msgstr "" #: gui_sched.c:97 msgid "Reschedule after " msgstr "" #: gui_sched.c:107 msgid " hours" msgstr " ÇÏÄÉÎ" #: gui_tools.c:54 msgid "Time: " msgstr "þÁÓ: " #: gui_tools.c:63 msgid " : " msgstr " : " #: gui_tools.c:249 #, fuzzy, c-format msgid "Pavuk: edit %s" msgstr "ðÁ×ÕË: ×ÉÂÅÒ¦ÔØ %s" #: gui_tools.c:250 msgid "entry" msgstr "" #: gui_tools.c:396 #, fuzzy msgid "Edit ..." msgstr "÷ÉÈÏÄÉÍÏ ..." #: gui_tools.c:453 #, c-format msgid "Pavuk: select %s" msgstr "ðÁ×ÕË: ×ÉÂÅÒ¦ÔØ %s" #: gui_tools.c:454 msgid "file" msgstr "ÆÁÊÌ" #: gui_tools.c:552 msgid "Browse ..." msgstr "ðÒÏÇÌÑÎÕÔÉ ..." #: gui_tree.c:104 #, c-format msgid "URL: %s\n" msgstr "" #: gui_tree.c:117 gui_tree.c:123 gui_tree.c:162 msgid "Request type: " msgstr "ôÉÐ ÚÁÐÉÔÕ: " #: gui_tree.c:138 msgid "Query values:\n" msgstr "" #: gui_tree.c:168 msgid "Status: " msgstr "óÔÁÎ: " #: gui_tree.c:174 msgid "not processed yet\n" msgstr "ÝÅ ÎÅ ÏÐÒÁÃØÏ×ÁÎÏ\n" #: gui_tree.c:180 msgid "loaded from NS cache\n" msgstr "ÚÁ×ÁÎÔÁÖÅÎÏ Ú ËÅÛÁ NS\n" #: gui_tree.c:186 msgid "loaded from local URL tree\n" msgstr "ÚÁ×ÁÎÔÁÖÅÎÏ Ú ÌÏËÁÌØÎÏÇÏ ÄÅÒÅ×Á URL\n" #: gui_tree.c:192 msgid "moved to another URL\n" msgstr "ÐÅÒÅͦÝÅÎÏ ÄÏ ¦ÎÛÏÇÏ URL\n" #: gui_tree.c:198 msgid "URL not found on remote server\n" msgstr "URL ÎÅ ÚÎÁÊÄÅÎÏ ÎÁ צÄÄÁÌÅÎÏÍÕ ÓÅÒ×ÅÒ¦\n" #: gui_tree.c:204 msgid "truncated\n" msgstr "ÕÓ¦ÞÅÎÏ\n" #: gui_tree.c:210 msgid "downloaded OK\n" msgstr "×ÉÔÑÇÎÕÔÏ OK\n" #: gui_tree.c:216 msgid "rejected by rules\n" msgstr "צÄËÉÎÕÔÏ ÚÁ ÐÒÁ×ÉÌÁÍÉ\n" #: gui_tree.c:222 msgid "disabled by user\n" msgstr "ÚÁÂÏÒÏÎÅÎÏ ËÏÒÉÓÔÕ×ÁÞÅÍ\n" #: gui_tree.c:228 msgid "probably recoverable error\n" msgstr "" #: gui_tree.c:234 msgid "unrecoverable error\n" msgstr "" #: gui_tree.c:240 msgid "unknown\n" msgstr "ÎÅצÄÏÍÉÊ\n" #: gui_tree.c:250 #, c-format msgid "Moved to URL: %s\n" msgstr "ðÅÒÅͦÝÅÎÏ ÄÏ URL: %s\n" #: gui_tree.c:260 #, c-format msgid "Type: %s\n" msgstr "ôÉÐ: %s\n" #: gui_tree.c:262 msgid "Type: unknown\n" msgstr "ôÉÐ: ÎÅצÄÏÍÉÊ\n" #: gui_tree.c:268 #, c-format msgid "Size: %d\n" msgstr "òÏÚͦÒ: %d\n" #: gui_tree.c:277 msgid "Modification time: %a, %d %b %Y %H:%M:%S %Z\n" msgstr "÷ÏÓÔÁÎΤ ÚͦÎÅÎÏ: %a, %d %b %Y %H:%M:%S %Z\n" #: gui_tree.c:287 #, c-format msgid "Local filename: %s\n" msgstr "ìÏËÁÌØÎÅ ¦Í'Ñ ÆÁÊÌÁ: %s\n" #: gui_tree.c:298 msgid "Parent URLs:\n" msgstr "âÁÔØË¦×ÓØË¦ URL'¦:\n" #: gui_tree.c:565 msgid "Pavuk: Store tree" msgstr "ðÁ×ÕË: úÂÅÒÅÖÅÎÎÑ ÄÅÒÅ×Á" #: gui_tree.c:607 gui_tree.c:631 msgid "Pavuk: URL tree preview" msgstr "ðÁ×ÕË: ðÅÒÅÇÌÑÄ ÄÅÒÅ×Á URL" #: gui_tree.c:609 gui_tree.c:715 msgid "Store tree ..." msgstr "úÂÅÒÅÖÅÎÎÑ ÄÅÒÅ×Á ..." #: gui_tree.c:610 gui_tree.c:649 msgid "Automaticaly watch last processed URLs" msgstr "á×ÔÏÍÁÔÉÞÎÏ ÐÅÒÅÄÉ×ÌÑÔÉÓÑ ÏÓÔÁÎÎ¦Ê ÏÂÒÏÂÌÅÎÉÊ URL" #: gui_tree.c:611 gui_tree.c:742 msgid "Properties" msgstr "÷ÌÁÓÔÉ×ÏÓÔ¦" #: gui_tree.c:612 gui_tree.c:750 msgid "Launch browser" msgstr "úÁÐÕÓÔÉÔÉ ÐÅÒÅÇÌÑÄÁÞÁ" #: gui_tree.c:613 gui_tree.c:758 msgid "Disable URL" msgstr "úÁÂÏÒÏÎÉÔÉ URL" #: gui_tree.c:614 gui_tree.c:766 msgid "Enable URL" msgstr "äÏÚ×ÏÌÉÔÉ URL" #: gui_tree.c:615 gui_tree.c:774 msgid "Download URL" msgstr "÷ÉÔÑÇÔÉ URL" #: gui_tree.c:618 gui_tree.c:668 msgid "URL tree" msgstr "äÅÒÅ×Ï URL" #: html.c:253 htmlparser.c:254 #, c-format msgid "Unsupported BASE URL - %s (probably bad handled)\n" msgstr "" #: html.c:533 msgid "Can't work on directory\n" msgstr "îÅ ÍÏÖÕ ÐÒÁÃÀ×ÁÔÉ Ú ÄÉÒÅËÔÏÒ¦¤À\n" #: html.c:559 html.c:563 msgid "rewrite parent" msgstr "" #: http.c:366 msgid "****************** Proxy connect request *****************\n" msgstr "****************** úÁÐÉÔ Proxy connect *****************\n" #: http.c:413 msgid "***************** Proxy connect response *****************\n" msgstr "***************** ÷¦ÄÇÕË Proxy connect *****************\n" #: http.c:469 msgid "Sending request ..." msgstr "îÁÄÓÉÌÁ¤ÍÏ ÚÁÐÉÔ ..." #: http.c:716 msgid "************ Client HTTP MIME header ***************\n" msgstr "" #: http.c:733 msgid "Sending data ..." msgstr "îÁÄÓÉÌÁ¤ÍÏ ÄÁΦ ..." #: http.c:734 msgid "************ HTTP request data ***************\n" msgstr "************ äÁΦ ÚÁÐÉÔÕ HTTP ***************\n" #: http.c:744 msgid "Waiting for response ..." msgstr "þÅËÁ¤ÍÏ ×¦ÄÇÕËÕ ..." #: http.c:759 msgid "Error reading HTTP 1xx class response\n" msgstr "" #: http.c:764 msgid "***************** class 1xx HTTP response ****************\n" msgstr "" #: http.c:874 msgid "Connecting ..." msgstr "ú'¤ÄÎÕ¤ÍÏÓÑ ..." #: http.c:1164 msgid "*********** HTTP Server response MIME header **********\n" msgstr "" #: http.c:1267 msgid "Regeting whole file\n" msgstr "ôÑÇÎÅÍÏ Õ×ÅÓØ ÆÁÊÌ ÚÎÏ×Õ\n" #: http.c:1317 #, c-format msgid "Unexpected response \"%d %s\" when trying to reget!\n" msgstr "" #: http_proxy.c:153 #, fuzzy, c-format msgid "Checking HTTP proxy server %s:%hu\n" msgstr "ðÅÒÅצÒѤÍÏ HTTP ÐÒÏËÓ¦ ÓÅÒ×ÅÒ %s:%d\n" #: http_proxy.c:165 http_proxy.c:177 http_proxy.c:184 http_proxy.c:193 msgid "Failed to check proxy !\n" msgstr "úÂ¦Ê ÐÅÒÅצÒËÉ ÐÒÏËÓ¦ !\n" #: http_proxy.c:199 #, fuzzy, c-format msgid "Proxy %s:%hu is HTTP/%d.%d proxy\n" msgstr "óÅÒ×ÅÒ %s:%d ¤ HTTP/%d.%d ÐÒÏËÓ¦ ÓÅÒ×ÅÒÏÍ\n" #: jsbind.c:77 msgid "bad parameter" msgstr "ÎÅצÒÎÉÊ ÐÁÒÁÍÅÔÅÒ" #: jsbind.c:555 msgid "not enough parameters" msgstr "ÚÁÍÁÌÏ ÐÁÒÁÍÅÔÒ¦×" #: jsbind.c:579 msgid "unknown limiting condition" msgstr "ÎÅצÄÏÍÁ ÕÍÏ×Á ÏÂÍÅÖÅÎØ" #: lfname.c:478 lfname.c:490 lfname.c:499 lfname.c:512 lfname.c:535 #: lfname.c:644 lfname.c:657 lfname.c:669 lfname.c:684 lfname.c:697 re.c:51 #: re.c:61 re.c:68 re.c:80 re.c:95 #, c-format msgid "Error compiling regular expression : %s\n" msgstr "ðÏÍÉÌËÁ ËÏÍЦÌÑæ§ ÒÅÇÕÌÑÒÎÏÇÏ ×ÉÒÁÚÕ : %s\n" #: lfname.c:552 lfname.c:616 lfname.c:938 lfname.c:1056 #, c-format msgid "LSP analyze error: bad token at - %s\n" msgstr "" #: lfname.c:949 #, c-format msgid "LSP analyze error: bad numeric value at - %s\n" msgstr "" #: lfname.c:963 #, c-format msgid "LSP analyze error: bad macro at - %s\n" msgstr "" #: lfname.c:991 #, c-format msgid "LSP analyze error: unterminated string at - %s\n" msgstr "" #: lfname.c:1012 lfname.c:1028 lfname.c:1046 #, c-format msgid "LSP analyze error: bad parameter type at - %s\n" msgstr "" #: log.c:204 msgid "Ending log : %H:%M:%S %d.%m.%Y\n" msgstr "öÕÒÎÁÌ ÚÁËÒÉÔÏ : %H:%M:%S %d.%m.%Y\n" #: log.c:225 msgid "Unable to open log file - disabling logging\n" msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ ÆÁÊÌ ÖÕÒÎÁÌÕ - ÚÁÂÏÒÏÎѤÍÏ ÖÕÒÎÁÌÀ×ÁÎÎÑ\n" #: log.c:233 msgid "Log file is locked by another process - " msgstr "æÁÊÌ ÖÕÒÎÁÌÕ ÚÁÌÏËÏ×ÁÎÏ ¦ÎÛÉÍ ÐÒÏÃÅÓÏÍ - " #: log.c:237 msgid "generating new log filename\n" msgstr "­ÅÎÅÒÕ¤ÍÏ ÎÏ×Å ¦Í'Ñ ÆÁÊÌÁ ÖÕÒÎÁÌÕ\n" #: log.c:242 msgid "disabling logging\n" msgstr "ÚÁÂÏÒÏÎѤÍÏ ÖÕÒÎÁÌÀ×ÁÎÎÑ\n" #: log.c:264 msgid "Starting log : %H:%M:%S %d.%m.%Y\n" msgstr "öÕÒÎÁÌ ÐÏÞÁÔÏ : %H:%M:%S %d.%m.%Y\n" #: mozcache.c:179 #, c-format msgid "Unable to open Mozilla cache index - %s\n" msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ ¦ÎÄÅËÓ ËÅÛÁ íÏÚ¦ÌÌÉ - %s\n" #: mozcache.c:287 #, fuzzy, c-format msgid "Error opening cache index file %s\n" msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ ¦ÎÄÅËÓ ËÅÛÁ íÏÚ¦ÌÌÉ - %s\n" #: mozcache.c:305 msgid "Mozilla new cache map file format not recognized" msgstr "" #: mozcache.c:357 mozcache.c:367 msgid "Corrupted Mozilla cache blockfile!" msgstr "" #: mozcache.c:468 msgid "Corrupted Mozilla cache map file!" msgstr "" #: myssl_nss.c:319 msgid "NSS_Init: Unable to open cert database" msgstr "" #: myssl_nss.c:541 #, fuzzy, c-format msgid "SSL connect failure - %s\n" msgstr "ú'¤ÄÎÁÎÎÑ SSL ×ÉËÏÒÉÓÔÏ×Õ¤ %s\n" #: myssl_nss.c:576 #, fuzzy, c-format msgid "SSL error - %s\n" msgstr "îÅצÄÏÍÁ ×ÅÒÓ¦Ñ SSL - \"%s\"\n" #: myssl_openssl.c:140 msgid "Failed obtaining entropy pathname\n" msgstr "" #: myssl_openssl.c:150 msgid "Failed to initialize random seed for OpenSSL via EGD daemon\n" msgstr "" #: myssl_openssl.c:161 msgid "Seeding entropy pool INSECURELY!\n" msgstr "" #: myssl_openssl.c:276 msgid "Unable to set certificate file (wrong password?)\n" msgstr "îÅÍÏÖÌÉ×Ï ÚÁĦÑÔÉ ÆÁÊÌ ÓÅÒÔÉÆ¦ËÁÔÕ (ÎÅצÒÎÉÊ ÐÁÒÏÌØ?)\n" #: myssl_openssl.c:287 msgid "Unable to set public key file\n" msgstr "îÅÍÏÖÌÉ×Ï ÚÁĦÑÔÉ ÆÁÊÌ ÐÕÂ̦ÞÎÏÇÏ ËÌÀÞÁ\n" #: myssl_openssl.c:304 msgid "Private key does not match the certificate public key\n" msgstr "ðÒÉ×ÁÔÎÉÊ ËÌÀÞ ÎŠצÄÐÏצÄÁ¤ ÐÕÂ̦ÞÎÏÍÕ ËÌÀÞÅצ ÓÅÒÔÉÆ¦ËÁÔÕ\n" #: nls.c:24 msgid "Czech" msgstr "" #: nls.c:25 msgid "German" msgstr "" #: nls.c:26 msgid "Spanish" msgstr "" #: nls.c:27 msgid "French" msgstr "" #: nls.c:28 msgid "Italian" msgstr "" #: nls.c:29 msgid "Japanese" msgstr "" #: nls.c:30 msgid "Polish" msgstr "" #: nls.c:31 msgid "Slovak" msgstr "" #: nls.c:32 msgid "Ukrainian" msgstr "" #: nscache.c:106 #, c-format msgid "Unable to open Netscape cache index - %s\n" msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ ¦ÎÄÅËÓ ËÅÛÁ Netscape - %s\n" #: ntlm_auth.c:471 msgid "Trying to do NTLM authorization\n" msgstr "îÁÍÁÇÁ¤ÍÏÓÑ ÐÒÏÊÔÉ Á×ÔÏÒÉÚÁæÀ NTLM\n" #: ntlm_auth.c:480 ntlm_auth.c:561 ntlm_auth.c:642 ntlm_auth.c:722 msgid "NTLM authorization supported only on persistent connections!\n" msgstr "" #: ntlm_auth.c:503 ntlm_auth.c:664 msgid "Not enough data for NTLM authorization!\n" msgstr "îÅÄÏÓÔÁÔÎØÏ ÄÁÎÉÈ ÄÌÑ Á×ÔÏÒÉÚÁæ§ NTLM!\n" #: ntlm_auth.c:504 ntlm_auth.c:665 msgid "Missing:\n" msgstr "îÅÍÁ¤:\n" #: ntlm_auth.c:505 ntlm_auth.c:666 msgid " domain\n" msgstr " ÄÏÍÅÎ\n" #: ntlm_auth.c:506 ntlm_auth.c:667 msgid " username\n" msgstr " ËÏÒÉÓÔÕ×ÁÞ\n" #: ntlm_auth.c:507 ntlm_auth.c:668 msgid " password\n" msgstr " ÐÁÒÏÌØ\n" #: ntlm_auth.c:508 ntlm_auth.c:669 msgid " local hostname\n" msgstr " ¦Í'Ñ ÌÏËÁÌØÎϧ ÍÁÛÉÎÉ\n" #: ntlm_auth.c:544 ntlm_auth.c:552 ntlm_auth.c:577 ntlm_auth.c:705 #: ntlm_auth.c:713 ntlm_auth.c:738 msgid "Got unexpected response\n" msgstr "ïÔÒÉÍÁÎÏ ÎÅÏÞ¦ËÕ×ÁÎÏÇÏ ×¦ÄÇÕËÁ\n" #: ntlm_auth.c:587 msgid "Failed NTLM nonce negotiation\n" msgstr "" #: ntlm_auth.c:629 msgid "Trying to do proxy NTLM authorization\n" msgstr "îÁÍÁÇÁ¤ÍÏÓÑ ÐÒÏÊÔÉ Á×ÔÏÒÉÚÁæÀ proxy NTLM\n" #: ntlm_auth.c:748 msgid "Failed NTLM proxy nonce negotiation\n" msgstr "" #: options.h:193 msgid "\t-v - print version number\n" msgstr "\t-v - ÎÁÄÒÕËÕ×ÁÔÉ ÎÏÍÅÒ ×ÅÒÓ¦§\n" #: options.h:204 msgid "\t-h - help\n" msgstr "\t-h - ÄÏÐÏÍÏÇÁ\n" #: options.h:218 msgid "\t-X - start GUI interface\n" msgstr "\t-X - ÚÁÐÕÓÔÉÔÉ Ú ¦ÎÔÅÒÆÅÊÓÏÍ GUI\n" #: options.h:249 msgid "" "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n" msgstr "" "\t-runX - ÎÅÇÁÊÎÏ Ð¦ÓÌÑ ÚÁÐÕÓËÕ ¦ÎÔÅÒÆÅÊÓÁ GUI interface\n" "\t ÐÏÞÁÔÉ ÏÐÒÁÃØÏ×Õ×ÁÎÎÑ ××ÅÄÅÎÉÈ URL'¦×\n" #: options.h:265 msgid "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n" msgstr "\t-prefs/-noprefs - ÞÉ ÚÁ×ÁÎÔÁÖÕ×ÁÔÉ ÕÓÔÁÎÏ×ËÉ Ú ~/.pavuk_prefs\n" #: options.h:494 msgid "" "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n" msgstr "" "\t-progress/-noprogress\n" "\t - ÐÏËÁÚÕ×ÁÔÉ ÐÏÓÔÕÐ Ð¦Ä ÞÁÓ ÒÏÂÏÔÉ Õ ÔÅÒͦÎÁ̦\n" #: options.h:517 msgid "\t-lmax $nr - allowed depth of tree\n" msgstr "\t-lmax $nr - ÄÏÚ×ÏÌÅÎÁ ÇÌÉÂÉÎÁ ÄÅÒÅ×Á\n" #: options.h:528 msgid "\t-dmax $nr - maximal number of downloaded documents\n" msgstr "\t-dmax $nr - ÍÁËÓÉÍÁÌØÎÁ Ë¦ÌØË¦ÓÔØ ÚÁ×ÁÎÔÁÖÅÎÉÈ ÄÏËÕÍÅÎÔ¦×\n" #: options.h:539 msgid "" "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n" msgstr "" "\t-sleep $nr - ÓÐÁÔÉ $nr ÓÅËÕÎÄ Í¦Ö ÚÁ×ÁÎÔÁÖÅÎÎÑÍÉ,\n" "\t ÑËÝÏ ÎÅ ×ËÁÚÁÎÏ - 0 ÓÅËÕÎÄ\n" #: options.h:551 msgid "" "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n" msgstr "" "\t-rsleep/-norsleep - ×ÉÐÁÄËÏ×Á ÔÒÉ×Á̦ÓÔØ ÓÎÕ Í¦Ö ÚÁ×ÁÎÔÁÖÅÎÎÑÍÉ\n" "\t ×¦Ä 0 ÄÏ ÞÁÓÕ Õ -sleep\n" #: options.h:574 msgid "\t-retry $nr - number of retries if anything failed\n" msgstr "\t-retry $nr - Ë¦ÌØË¦ÓÔØ ÓÐÒÏÂ Õ ÒÁÚ¦ ÑËÉÈÏÓØ ÚÂϧ×\n" #: options.h:585 msgid "\t-nregets $nr - max number of regets on single file, default 2\n" msgstr "" "\t-nregets $nr - ÍÁËÓ. Ë¦ÌØË¦ÓÔØ ÚÁ×ÁÎÔÁÖÕ×ÁÎØ ÏËÒÅÍÏÇÏ ÆÁÊÌÁ,\n" "\t default 2\n" #: options.h:596 msgid "" "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n" msgstr "" "\t-nredirs $nr - ÍÁËÓ. Ë¦ÌØË¦ÓÔØ ÐÅÒÅÎÁÐÒÁ×ÌÅÎØ HTTP, default 5\n" #: options.h:607 msgid "" "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n" msgstr "" "\t-timeout $nr - ÔÁÊÍÁÕÔ ÄÌÑ ÍÅÒÅÖÅ×ÉÈ ÏÐÅÒÁÃ¦Ê (È×).\n" "\t 0 == ÂÅÚ ÔÁÊÍÁÕÔÁ, ÑËÝÏ ÎÅ ×ËÁÚÁÎÏ = 0\n" #: options.h:619 msgid "" "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n" msgstr "" "\t-rollback $nr - ÓË¦ÌØËÉ ÂÁÊÔ¦× ×¦ÄËÉÄÁÔÉ (Ú Ë¦ÎÃÑ ÆÁÊÌÁ)\n" "\t ÐÒÉ ÐÅÒÅÚÁ×ÁÎÔÁÖÕ×ÁÎΦ, ÑËÝÏ ÎÅ ×ËÁÚÁÎÏ - 0\n" #: options.h:632 msgid "" "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n" msgstr "" "\t-ddays $nr - Ë¦ÌØË¦ÓÔØ ÄÎ¦× Ð¦ÓÌÑ ÏÓÔÁÎÎØÏÇÏ ÄÏÓÔÕÐÁ, ÑËÝÏ\n" "\t ÄÏËÕÍÅÎÔ ÐÅÒÅצÒÑ¤ÔØÓÑ Õ ÒÅÖÉͦ ÓÉÎÈÒÏΦÚÁæ§ (sync)\n" #: options.h:644 msgid "" "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n" msgstr "" "\t-nocache/-cache - ÄÏÚ×¦Ì ÎÁ ËÅÛÕ×ÁÎÎÑ HTTP ÄÏËÕÍÅÎÔ¦× (Õ ËÅÛ¦ ÐÒÏËÓ¦)\n" #: options.h:666 msgid "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n" msgstr "\t-noRobots/-Robots - ÞÉ Ú×ÁÖÁÔÉ ÎÁ ÆÁÊÌ \"robots.txt\" ?\n" #: options.h:688 msgid "\t-noFTP/-FTP - don't download FTP files\n" msgstr "\t-noFTP/-FTP - ÞÉ ×ÉÔÑÇÁÔÉ ÆÁÊÌÉ FTP\n" #: options.h:710 msgid "\t-noHTTP/-HTTP - don't download HTTP files\n" msgstr "\t-noHTTP/-HTTP - ÞÉ ×ÉÔÑÇÁÔÉ ÆÁÊÌÉ HTTP\n" #: options.h:735 msgid "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n" msgstr "\t-noSSL/-SSL - ÞÉ ×ÉÔÑÇÁÔÉ ÆÁÊÌÉ (HTTPS) SSL\n" #: options.h:765 msgid "\t-noFTPS/-FTPS - don't download FTPS files\n" msgstr "\t-noFTPS/-FTPS - ÞÉ ×ÉÔÑÇÁÔÉ ÆÁÊÌÉ FTPS\n" #: options.h:792 msgid "\t-noGopher/-Gopher - download Gopher files ?\n" msgstr "\t-noGopher/-Gopher - ÞÉ ×ÉÔÑÇÁÔÉ ÆÁÊÌÉ Gopher ?\n" #: options.h:814 msgid "\t-noCGI/-CGI - download parametric CGI pages ?\n" msgstr "\t-noCGI/-CGI - ÞÉ ×ÉÔÑÇÁÔÉ ÓÔÏÒ¦ÎËÉ CGI Ú ÐÁÒÁÍÅÔÒÁÍÉ\n" #: options.h:836 msgid "\t-noEnc/-Enc - allow transfer of encoded files ?\n" msgstr "\t-noEnc/-Enc - ÞÉ ÄÏÚ×ÏÌÑÔÉ ÔÒÁÎÓÆÅÒ ÚÁËÏÄÏ×ÁÎÉÈ ÆÁÊ̦×\n" #: options.h:858 msgid "" "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n" msgstr "" "\t-noRelocate/-Relocate\n" "\t - ÞÉ ÐÅÒÅÐÉÓÕ×ÁÔÉ ÐÏÓÉÌÁÎÎÑ\n" #: options.h:881 msgid "" "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n" msgstr "" "\t-FTPhtml/-noFTPhtml\n" "\t - ÞÉ ÏÐÒÁÃØÏ×Õ×ÁÔÉ ÏÔÒÉÍÁΦ ÞÅÒÅÚ FTP ÆÁÊÌÉ HTML\n" #: options.h:904 msgid "" "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n" msgstr "" "\t-FTPlist/-noFTPlist\n" "\t - ÞÉ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ÛÉÒÏËÉÊ ÓÐÉÓÏË FTP ÄÉÒÅËÔÏÒ¦Ê\n" #: options.h:927 msgid "\t-FTPdir/-noFTPdir - recurse FTP directory\n" msgstr "\t-FTPdir/-noFTPdir - ÞÉ ÊÔÉ ÒÅËÕÒÓÉ×ÎÏ ËÒ¦ÚØ ÄÉÒÅËÔÏÒ¦§ FTP\n" #: options.h:949 msgid "" "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n" msgstr "" "\t-store_index/-nostore_index\n" "\t - ÞÉ ÚÂÅÒ¦ÇÁÔÉ URL'¦ ÄÉÒÅËÔÏÒ¦Ê ÑË ¦ÎÄÅËÓΦ ÆÁÊÌÉ\n" #: options.h:972 msgid "" "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n" msgstr "" "\t-force_reget/-noforce_reget\n" "\t - ÆÏÒÓÕ×ÁÔÉ ×ÉËÁÞÕ×ÁÎÎÑ ×ÓØÏÇÏ ÆÁÊÌÁ, ÑËÝÏ ÓÅÒ×ÅÒ\n" "\t ΊЦÄÔÒÉÍÕ¤ reget\n" #: options.h:1000 msgid "\t-debug - turn on debug mode\n" msgstr "\t-debug - ÕצÍËÎÕÔÉ ÒÅÖÉÍ ×¦ÄÌÁÄËÉ\n" #: options.h:1030 msgid "" "\t-debug_level $l - debug level number, see manual for $l description\n" msgstr "" "\t-debug_level $l - Ò¦×ÅÎØ ÒÅÖÉÍÕ ×¦ÄÌÁÄËÉ, ÄÉ×. ÏÐÉÓ $l Õ ÄÏצÄÎÉËÕ\n" #: options.h:1042 msgid "\t-asite $list - comma-separated list of allowed sites\n" msgstr "\t-asite $list - ÓÐÉÓÏË ÄÏÚ×ÏÌÅÎÉÈ ÓÅÒ×ÅÒ¦×, ÒÏÚĦÌÅÎÉÊ ËÏÍÁÍÉ\n" #: options.h:1053 msgid "\t-dsite $list - comma-separated list of disallowed sites\n" msgstr "" "\t-dsite $list - ÓÐÉÓÏË ÚÁÂÏÒÏÎÅÎÉÈ ÓÅÒ×ÅÒ¦×, ÒÏÚĦÌÅÎÉÊ ËÏÍÁÍÉ\n" #: options.h:1064 msgid "\t-adomain $list - list of allowed domains\n" msgstr "\t-adomain $list - ÓÐÉÓÏË ÄÏÚ×ÏÌÅÎÉÈ ÄÏÍÅΦ×\n" #: options.h:1075 msgid "\t-ddomain $list - list of disallowed domains\n" msgstr "\t-ddomain $list - ÓÐÉÓÏË ÚÁÂÏÒÏÎÅÎÉÈ ÄÏÍÅΦ×\n" #: options.h:1086 msgid "\t-aprefix $list - list of allowed directory/file prefixes\n" msgstr "\t-aprefix $list - ÓÐÉÓÏË ÄÏÚ×ÏÌÅÎÉÈ ÐÒÅÆ¦ËÓ¦× ÄÉÒÅËÔÏÒ¦Ê/ÆÁÊ̦×\n" #: options.h:1097 msgid "\t-dprefix $list - list of disallowed directory/file prefixes\n" msgstr "" "\t-dprefix $list - ÓÐÉÓÏË ÚÁÂÏÒÏÎÅÎÉÈ ÐÒÅÆ¦ËÓ¦× ÄÉÒÅËÔÏÒ¦Ê/ÆÁÊ̦×\n" #: options.h:1108 msgid "\t-asfx $list - list of allowed suffixes\n" msgstr "\t-asfx $list - ÓÐÉÓÏË ÄÏÚ×ÏÌÅÎÉÈ ÓÕÆ¦ËÓ¦×\n" #: options.h:1119 msgid "\t-dsfx $list - list of disallowed suffixes\n" msgstr "\t-dsfx $list - ÓÐÉÓÏË ÚÁÂÏÒÏÎÅÎÉÈ ÓÕÆ¦ËÓ¦×\n" #: options.h:1130 msgid "\t-amimet $list - list of alloved MIME types\n" msgstr "\t-amimet $list - ÓÐÉÓÏË ÄÏÚ×ÏÌÅÎÉÈ ÔÉÐ¦× MIME\n" #: options.h:1141 msgid "\t-dmimet $list - list of disallowed MIME types\n" msgstr "\t-dmimet $list - ÓÐÉÓÏË ÚÁÂÏÒÏÎÅÎÉÈ ÔÉÐ¦× MIME\n" #: options.h:1152 msgid "\t-alang $list - list of preferred languages (only via HTTP)\n" msgstr "\t-alang $list - ÓÐÉÓÏË ÕÌÀÂÌÅÎÉÈ ÍÏ× (ÌÉÛÅ ÞÅÒÅÚ HTTP)\n" #: options.h:1163 msgid "" "\t-acharset $list - list of preferred character sets (only via HTTP)\n" msgstr "" "\t-acharset $list - ÓÐÉÓÏË ÕÌÀÂÌÅÎÉÈ ÎÁÂÏÒ¦× ÓÉÍ×ÏÌ¦× (ÌÉÛÅ ÞÅÒÅÚ HTTP)\n" #: options.h:1174 msgid "" "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n" msgstr "" "\t-scndir $dir - ÄÉÒÅËÔÏÒ¦Ñ, ÄÅ ÚÂÅÒÅÖÅΦ ÷ÁÛ¦ ÓÃÅÎÁÒ¦§\n" "\t (ÆÁÊÌÉ ËÏÎÆ¦­ÕÒÁæ§)\n" #: options.h:1186 msgid "\t-cdir $dir - directory for storing documents\n" msgstr "\t-cdir $dir - ÄÉÒÅËÔÏÒ¦Ñ ÄÌÑ ÚÂÅÒ¦ÇÁÎÎÑ ÄÏËÕÍÅÎÔ¦×\n" #: options.h:1197 msgid "\t-subdir $dir - subdirectory of cdir to operate on\n" msgstr "\t-subdir $dir - ЦÄÄÉÒÅËÔÏÒ¦Ñ, ÄÏ ÑËϧ ÐÅÒÅÊÔÉ ÐÅÒÅÄ ÒÏÂÏÔÏÀ\n" #: options.h:1208 msgid "" "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n" msgstr "" "\t-scenario $str - ¦Í'Ñ ÓÃÅÎÁÒ¦Ñ Ú ÄÉÒÅËÔÏÒ¦§ ÓÃÅÎÁÒ¦§×, ÑËÉÊ ÔÒÅÂÁ\n" "\t ÚÁ×ÁÎÔÁÖÉÔÉ ÔÁ ×ÉËÏÎÁÔÉ\n" #: options.h:1220 msgid "" "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n" msgstr "" "\t-auth_scheme 1/2/3 - ÓÈÅÍÁ Á×ÔÏÒÉÚÁæ§ HTTP (1-user 2-Basic 3-Digest),\n" "\t ÑËÝÏ ÎÅ ×ËÁÚÁÎÏ - 2\n" #: options.h:1232 msgid "\t-auth_name $str - name for Authorization (only via HTTP)\n" msgstr "\t-auth_name $str - ¦Í'Ñ ÄÌÑ Á×ÔÏÒÉÚÁæ§ (ÌÉÛÅ ÞÅÒÅÚ HTTP)\n" #: options.h:1243 msgid "\t-auth_passwd $str - password for Authorization (only via HTTP)\n" msgstr "\t-auth_passwd $str - ÐÁÒÏÌØ ÄÌÑ Á×ÔÏÒÉÚÁæ§ (ÌÉÛÅ ÞÅÒÅÚ HTTP)\n" #: options.h:1254 msgid "" "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n" msgstr "" #: options.h:1278 msgid "" "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n" msgstr "" #: options.h:1305 msgid "" "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n" msgstr "" "\t-ssl_cert_passwd $str\n" "\t - ÐÁÒÏÌØ ÄÌÑ ÆÁÊÌÁ ÓÅÒÔÉÆ¦ËÁÔÁ SSL\n" #: options.h:1321 msgid "" "\t-ssl_cert_file $str\n" "\t - SSL certification file\n" msgstr "" "\t-ssl_cert_file $str\n" "\t - ÆÁÊÌ ÓÅÒÔÉÆ¦ËÁÔÁ SSL\n" #: options.h:1337 msgid "\t-ssl_key_file $str - SSL certification key file\n" msgstr "\t-ssl_key_file $str - ÆÁÊÌ ËÌÀÞÁ ÓÅÒÔÉÆ¦ËÁÔÁ SSL\n" #: options.h:1352 msgid "" "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n" msgstr "" #: options.h:1368 msgid "\t-egd_socket $file - path to EGD listening socket\n" msgstr "" #: options.h:1380 msgid "\t-from $str - e-mail address used for user identification\n" msgstr "" "\t-from $str - ÐÏÛÔÏ×Á ÁÄÒÅÓÁ, ÝÏ ×ÉËÏÒÉÓÔÏ×Õ¤ÔØÓÑ ÄÌÑ " "¦ÄÅÎÔÉÆ¦ËÁæ§\n" #: options.h:1391 msgid "" "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n" msgstr "" "\t-send_from/-nosend_from\n" "\t - ÞÉ ÎÁÄÓÉÌÁÔÉ ÐÏÌÅ \"From:\" Õ ÚÁÐÉÔ¦ HTTP Ú ÷ÁÛÏÀ\n" "\t ÐÏÛÔÏ×ÏÀ ÁÄÒÅÓÏÀ\n" #: options.h:1415 msgid "\t-identity $str - contents of User-agent: field in HTTP request\n" msgstr "\t-identity $str - ÚÎÁÞÅÎÎÑ ÐÏÌÑ \"User-agent:\" Õ ÚÁÐÉÔÁÈ HTTP\n" #: options.h:1426 msgid "\t-pattern $list - list of wildcard patterns for files\n" msgstr "\t-pattern $list - ÓÐÉÓÏË ÛÁÂÌÏÎ¦× Ú ÍÁÓËÁÍÉ ÄÌÑ ÆÁÊ̦×\n" #: options.h:1440 msgid "\t-rpattern $re - RE matching pattern for files\n" msgstr "\t-rpattern $re - ÛÁÂÌÏÎÉ Ú RE ÄÌÑ ÆÁÊ̦×\n" #: options.h:1452 msgid "" "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n" msgstr "" #: options.h:1467 msgid "" "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n" msgstr "" #: options.h:1480 msgid "\t-url_pattern $list - list of wildcard patterns for urls\n" msgstr "\t-url_pattern $list - ÓÐÉÓÏË ÛÁÂÌÏÎ¦× Ú ÍÁÓËÁÍÉ ÄÌÑ URL'¦×\n" #: options.h:1494 msgid "\t-url_rpattern $re - RE matching pattern for urls\n" msgstr "\t-url_rpattern $re - ÓÐÉÓÏË RE ÛÁÂÌÏÎ¦× ÄÌÑ URL'¦×\n" #: options.h:1506 msgid "" "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n" msgstr "" #: options.h:1521 msgid "" "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n" msgstr "" #: options.h:1534 msgid "" "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" msgstr "" "\t-mode $mode - ×ÓÔÁÎÏ×ÉÔÉ ÒÅÖÉÍ ÒÏÂÏÔÉ\n" "\t normal - ÊÔÉ ËÒ¦ÚØ WWW (default)\n" "\t linkupdate - ÐÏÎÏ×ÉÔÉ ÐÏÓÉÌÁÎÎÑ Õ ÌÏËÁÌØÎ. " "ÄÅÒÅצ\n" "\t sync - ÓÉÎÈÒÏΦÚÕ×ÁÔÉ ÌÏËÁÌØÎÅ ÄÅÒÅ×Ï Ú WWW\n" "\t ÓÅÒ×ÅÒÁÍÉ\n" "\t singlepage - ¤ÄÉÎÁ ÓÔÏÒ¦ÎËÁ ÔÁ §§ ÏÂ'¤ËÔÉ\n" "\t singlereget - ÔÑÇÔÉ ÆÁÊÌ, ÄÏËÉ ÎÅ ×ÉÔÑÇÎÅÔØÓÑ\n" "\t resumeregets - ÔÑÇÔÉ ÕÓ¦ ÎÅÄÏ×ÉÔÑÇÎÕÔ¦ ÆÁÊÌÉ\n" "\t dontstore - ÔÑÇÔÉ ÄÏËÕÍÅÎÔÉ, ÔÁ ÎÅ ÚÂÅÒ¦ÇÁÔÉ\n" "\t reminder - ÐÅÒÅצÒÉÔÉ, ÞÉ ÎÅ ÚͦÎÉÌÉÓÑ URL'¦\n" "\t ftpdir - ÓÔ×ÏÒÉÔÉ ÓÐÉÓÏË ÄÉÒÅËÔÏÒ¦§ FTP\n" #: options.h:1555 msgid "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n" msgstr "" "\t-ftp_proxy $site[:$port]\n" "\t - ftp ÐÒÏËÓ¦/ËÅÛ ÓÅÒ×ÅÒ\n" #: options.h:1567 msgid "" "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n" msgstr "" "\t-http_proxy $site[:$port]\n" "\t - http ÐÒÏËÓ¦/ËÅÛ ÓÅÒ×ÅÒ\n" #: options.h:1579 msgid "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n" msgstr "" "\t-gopher_proxy $site[:$port]\n" "\t - gopher ÐÒÏËÓ¦/ËÅÛ ÓÅÒ×ÅÒ\n" #: options.h:1594 msgid "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n" msgstr "" "\t-ssl_proxy $site[:$port]\n" "\t - ssl ÐÒÏËÓ¦ ÓÅÒ×ÅÒ\n" #: options.h:1607 msgid "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n" msgstr "" "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - ×ËÁÚÁÎÉÊ gopher ÐÒÏËÓ¦ ¤ ÛÌÀÚÏÍ HTTP ÄÏ Gopher\n" #: options.h:1631 msgid "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n" msgstr "" "\t-ftp_httpgw/-noftp_httpgw\n" "\t - ×ËÁÚÁÎÉÊ ftp ÐÒÏËÓ¦ ¤ ÛÌÀÚÏÍ HTTP ÄÏ FTP\n" #: options.h:1655 msgid "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n" msgstr "" "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ÚÁÐÉÔ CONNECT ÄÏ HTTP ÐÒÏËÓ¦\n" "\t ÄÌÑ Ú'¤ÄÎÁÎØ FTP\n" #: options.h:1682 msgid "\t-browser $str - your preferred browser programm\n" msgstr "\t-browser $str - ÷ÁÛÁ ÕÌÀÂÌÅÎÁ ÐÒÏÇÒÁÍÁ ÐÅÒÅÇÌÑÄÕ WWW\n" #: options.h:1697 msgid "\t-xmaxlog - maximal length of log window\n" msgstr "\t-xmaxlog - ÍÁËÓÉÍÁÌØÎÁ ÄÏ×ÖÉÎÁ צËÎÁ ÄÕÒÎÁÌÕ\n" #: options.h:1709 msgid "\t-dumpscn $str - save scenario in scndir with name $str\n" msgstr "" "\t-dumpscn $str - ÚÂÅÒÅÇÔÉ ÓÃÅÎÁÒ¦Ê Õ ×ËÁÚÁÎ¦Ê ÄÉÒÅËÔÏÒ¦§ Ú ¦Í'ÑÍ $str\n" #: options.h:1720 msgid "\t-maxsize $nr - maximal allowed size of document in bytes\n" msgstr "" "\t-maxsize $nr - ÍÁËÓÉÍÁÌØÎÉÊ ÄÏÚ×ÏÌÅÎÉÊ ÒÏÚÍ¦Ò ÄÏËÕÍÅÎÔÁ Õ ÂÁÊÔÁÈ\n" #: options.h:1731 msgid "\t-minsize $nr - minimal allowed size of document in bytes\n" msgstr "" "\t-minsize $nr - ͦΦÍÁÌØÎÉÊ ÄÏÚ×ÏÌÅÎÉÊ ÒÏÚÍ¦Ò ÄÏËÕÍÅÎÔÁ Õ ÂÁÊÔÁÈ\n" #: options.h:1742 msgid "" "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_pass $str\n" "\t - ÐÁÒÏÌØ ÄÌÑ Á×ÔÏÒÉÚÁæ§ ÎÁ HTTP ÐÒÏËÓ¦\n" #: options.h:1754 msgid "" "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_user $str\n" "\t - ¦Í'Ñ ÄÌÑ Á×ÔÏÒÉÚÁæ§ ÎÁ HTTP ÐÒÏËÓ¦\n" #: options.h:1766 msgid "" "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n" msgstr "" "\t-http_proxy_auth 1/2/3\n" "\t - ÓÈÅÍÁ Á×ÔÏÒÉÚÁæ§ ÎÁ HTTP ÐÒÏËÓ¦\n" #: options.h:1778 msgid "\t-logfile $file - name of file where mesages are stored\n" msgstr "\t-logfile $file - ¦Í'Ñ ÆÁÊÌÁ, Õ ÑËÏÍÕ ÚÂÅÒ¦ÇÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ\n" #: options.h:1789 msgid "\t-slogfile $file - name of file where short log will be stored\n" msgstr "\t-slogfile $file - ¦Í'Ñ ÆÁÊÌÁ ÄÌÑ ÚÁÐÉÓÕ ÓËÏÒÏÞÅÎÏÇÏ ÖÕÒÎÁÌÕ\n" #: options.h:1800 msgid "\t-stime/-nostime - write starting and ending time of transfer\n" msgstr "" "\t-stime/-nostime - ÞÉ ÚÁÐÉÓÕ×ÁÔÉ ÞÁÓ ÐÏÞÁÔËÕ ÔÁ ˦ÎÃÑ ÚÁ×ÁÎÔÁÖÕ×ÁÎÎÑ\n" #: options.h:1822 msgid "" "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - ÞÉ ×ÉÄÁÌÑÔÉ ÎÅÁËÔÕÁÌØÎ¦ ÆÁÊÌÉ ÞÉ ÄÉÒÅËÔÏÒ¦§, " "ÐÒÁÃÀÀÞÉ\n" "\t Õ ÒÅÖÉͦ ÓÉÎÈÒÏΦÚÁæ§\n" #: options.h:1847 msgid "" "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n" msgstr "" "\t-auth_file $file - ÆÁÊÌ ¦Ú Á×ÔÏÒÉÚÁæÊÎÏÀ ¦ÎÆÏÒÍÁæ¤À\n" "\t ÏÐÉÓ ÆÏÒÍÁÔÕ ÄÉ×. Õ ÄÏצÄÎÉËÕ\n" #: options.h:1859 msgid "" "\t-base_level $nr - number of levels of directory tree to omit from top\n" msgstr "" "\t-base_level $nr - ÐÒÏÐÕÓÔÉÔÉ $nr Ò¦×Î¦× ÄÅÒÅ×Á ÄÉÒÅËÔÏÒ¦Ê Ú ×ÅÒÛÉÎÉ\n" #: options.h:1870 msgid "\t-ftp_active - select active FTP data connection\n" msgstr "\t-ftp_active - ×ÉÂÒÁÔÉ ÁËÔÉ×ÎÉÊ ÔÉÐ Ú'¤ÄÎÁÎÎÑ ÄÌÑ FTP data\n" #: options.h:1881 msgid "\t-ftp_passive - select passive FTP data connection\n" msgstr "\t-ftp_passive - ×ÉÂÒÁÔÉ ÐÁÓÉ×ÎÉÊ ÔÉÐ Ú'¤ÄÎÁÎÎÑ ÄÌÑ FTP data\n" #: options.h:1895 msgid "\t-msgcat $dir - directory where message catalogs are stored\n" msgstr "\t-msgcat $dir - ÄÉÒÅËÔÏÒ¦Ñ Ú ËÁÔÁÌÏÇÁÍÉ ÐÏצÄÏÍÌÅÎØ\n" #: options.h:1910 msgid "\t-language $str - set language for messages\n" msgstr "\t-language $str - ×ÓÔÁÎÏ×ÉÔÉ ÍÏ×Õ ÐÏצÄÏÍÌÅÎØ\n" #: options.h:1922 msgid "\t-quiet - don't show output messages\n" msgstr "\t-quiet - ÐÒÁÃÀ×ÁÔÉ ÍÏ×ÞËÉ\n" #: options.h:1933 msgid "\t-verbose - show output messages (default)\n" msgstr "\t-verbose - ÐÏËÁÚÕ×ÁÔÉ ÒÏÂÏÞ¦ ÐÏצÄÏÍÌÅÎÎÑ (default)\n" #: options.h:1944 msgid "" "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-newer_than $time - ÚÁ×ÁÎÔÁÖÕ×ÁÔÉ ÌÉÛÅ ÎÏצۦ Î¦Ö $time ÄÏËÕÍÅÎÔÉ\n" "\t ÆÏÒÍÁÔ $time: YYYY.MM.DD.hh:mm\n" #: options.h:1956 msgid "" "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" "\t-older_than $time - ÚÁ×ÁÎÔÁÖÕ×ÁÔÉ ÌÉÛÅ ÓÔÁÒ¦Û¦ Î¦Ö $time ÄÏËÕÍÅÎÔÉ\n" "\t ÆÏÒÍÁÔ $time: YYYY.MM.DD.hh:mm\n" #: options.h:1968 msgid "" "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n" msgstr "" #: options.h:1980 msgid "" "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n" msgstr "" #: options.h:1992 msgid "" "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n" msgstr "" "\t-dont_leave_site/-leave_site\n" "\t - ÞÉ ÍÏÖÎÁ ÐÏÌÉÛÁÔÉ ÓÅÒ×ÅÒ ÓÔÁÒÔÏ×ÏÇÏ URL\n" #: options.h:2015 msgid "" "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n" msgstr "" "\t-dont_leave_dir/-leave_dir\n" "\t - ÞÉ ÍÏÖÎÁ ÐÏÌÉÛÁÔÉ ÄÉÒÅËÔÏÒ¦À ÓÔÁÒÔÏ×ÏÇÏ URL\n" #: options.h:2038 msgid "" "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n" msgstr "" "\t-preserve_time/-nopreserve_time\n" "\t - ÞÉ ÚÂÅÒ¦ÇÁÔÉ ÞÁÓ ÍÏÄÉÆ¦ËÁæ§ ÄÏËÕÍÅÎÔÁ\n" #: options.h:2061 msgid "" "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n" msgstr "" "\t-preserve_perm/-nopreserve_perm\n" "\t - ÞÉ ÚÂÅÒ¦ÇÁÔÉ ÐÒÁ×Á ÄÏÓÔÕÐÕ ÄÏËÕÍÅÎÔÁ\n" #: options.h:2084 msgid "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n" msgstr "" "\t-preserve_slinks/-nopreserve_slinks\n" "\t - ÞÉ ÚÂÅÒ¦ÇÁÔÉ ÁÂÓÏÌÀÔΦ ÓÉÍ×ÏÌØÎ¦ ÐÏÓÉÌÁÎÎÑ\n" #: options.h:2107 msgid "" "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n" msgstr "" "\t-leave_level $nr - ÓË¦ÌØËÉ Ò¦×Î¦× ÄÅÒÅ×Á ÐÒÏÊÔÉ ×¦Ä ÓÔÁÒÔÏ×ÏÇÏ ÓÅÒ×ÅÒÁ\n" "\t (0 == ÓË¦ÌØËÉ ÚÁ×ÇÏÄÎÏ), ÑËÝÏ ÎÅ ×ËÁÚÁÎÏ - 0\n" #: options.h:2119 msgid "\t-cookie_file $file - file where are stored cookie infos\n" msgstr "\t-cookie_file $file - ÆÁÊÌ, ÄÅ ÚÂÅÒÅÖÅÎÏ ¦ÎÆÏÒÍÁæÀ ÐÒÏ ËÏÒÖÉËÉ\n" #: options.h:2130 msgid "" "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n" msgstr "" "\t-cookie_send/-nocookie_send\n" "\t - ÞÉ ÎÁÄÓÉÌÁÔÉ ËÏÒÖÉËÉ Õ ÚÁÐÉÔÁÈ HTTP\n" #: options.h:2153 msgid "" "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n" msgstr "" "\t-cookie_recv/-nocookie_recv\n" "\t - ÞÉ ÂÒÁÔÉ ËÏÒÖÉËÉ ¦Ú צÄÇÕË¦× HTTP\n" #: options.h:2176 msgid "" "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n" msgstr "" "\t-cookie_update/-nocookie_update\n" "\t - ÞÉ ÐÏÎÏ×ÌÀ×ÁÔÉ ËÏÒÖÉËÉ Õ ÆÁÊ̦ ËÏÒÖ¦×\n" #: options.h:2199 msgid "" "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n" msgstr "" #: options.h:2222 msgid "\t-cookies_max $nr - maximal number of cookies in cookie cache\n" msgstr "\t-cookies_max $nr - ÍÁËÓÉÍÁÌØÎÁ Ë¦ÌØË¦ÓÔØ ËÏÒÖÉË¦× Õ ËÅÛ¦\n" #: options.h:2233 msgid "" "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n" msgstr "" "\t-disabled_cookie_domains $list\n" "\t - ÒÏÚĦÌÅÎÉÊ ËÏÍÁÍÉ ÓÐÉÓÏË ÚÁÂÏÒÏÎÅÎÉÈ ÄÏÍÅÎ¦× " "ËÏÒÖÉ˦×\n" #: options.h:2245 msgid "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - ÚÁÂÏÒÏÎÉÔÉ ÏÐÒÁÃØÏ×Õ×ÁÎÎÑ URL'¦×\n" "\t ×¦Ä ÁÔÒÉÂÕÔÁ $ATTRIB ÔÅ­Á HTML $TAG\n" #: options.h:2258 msgid "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n" msgstr "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - ÄÏÚ×ÏÌÉÔÉ ÏÐÒÁÃØÏ×Õ×ÁÎÎÑ URL'¦×\n" "\t ×¦Ä ÁÔÒÉÂÕÔÁ $ATTRIB ÔÅ­Á HTML $TAG\n" #: options.h:2274 msgid "\t-gui_font $font - font name used in GUI interface\n" msgstr "\t-gui_font $font - ¦Í'Ñ ÛÒÉÆÔÁ ÄÌÑ GUI ¦ÎÔÅÒÆÅÊÓÁ\n" #: options.h:2286 msgid "" "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n" msgstr "" #: options.h:2299 msgid "" "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n" msgstr "" "\t-tr_del_chr $str - ÓÉÍ×ÏÌÉ, ÝÏ ÍÁÀÔØ ÂÕÔÉ ×ÉÄÁÌÅΦ\n" "\t Ú ÌÏËÁÌØÎÉÈ ¦ÍÅÎ ÆÁÊ̦×\n" #: options.h:2311 msgid "" "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n" msgstr "" "\t-tr_str_str $str1 $str2\n" "\t - ÚÁͦÎÑÔÉ $str1 ÎÁ $str2 Õ ÌÏËÁÌØÎÉÈ ¦ÍÅÎÁÈ\n" #: options.h:2323 msgid "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n" msgstr "" "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - ÚÁͦÎÑÔÉ $chrset1 ÎÁ $chrset2 Õ ÌÏËÁÌØÎÉÈ ¦ÍÅÎÁÈ\n" #: options.h:2335 msgid "\t-index_name $str - name of directory index instead of _._.html\n" msgstr "\t-index_name $str - ¦Í'Ñ ¦ÎÄÅËÓÕ ÄÉÒÅËÔÏÒ¦Ê ÚÁͦÓÔØ _._.html\n" #: options.h:2346 msgid "\t-store_name $str - filename for first downloaded document\n" msgstr "\t-store_name $str - ¦Í'Ñ ÆÁÊÌÁ ÄÌÑ ÓÐÉÓËÕ ÚÁ×ÁÎÔÁÖÅÎÉÈ ÄÏËÕÍÅÎÔ¦×\n" #: options.h:2368 msgid "" "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n" msgstr "" "\t-check_size/-nocheck_size\n" "\t - ÞÉ ÐÏÒ¦×ÎÀ×ÁÔÉ ÒÏÚÍ¦Ò ÏÔÒÉÍÁÎÏÇÏ ÆÁÊÌÁ\n" "\t Ú ÒÏÚͦÒÏÍ, ÕËÁÚÁÎÉÍ ÓÅÒ×ÅÒÏÍ\n" #: options.h:2392 msgid "" "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n" msgstr "" "\t-urls_file $file - ÔÒÅÂÁ ÚÞÉÔÕ×ÁÔÉ URL'¦ Ú ÆÁÊÌÁ, ÄÏËÉ ÎÅ ÚÕÓÔÒ¦ÎÅÔØÓÑ\n" "\t ÓÔÒ¦ÞËÁ ÌÉÛÅ Ú ¤ÄÉÎÉÍ ÓÉÍ×ÏÌÏÍ \".\"\n" #: options.h:2404 msgid "" "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n" msgstr "" "\t-bg/-nobg - צÄ'¤ÄÎÁÔÉ ÐÁ×ÕËÁ ×¦Ä ÔÅÒͦÎÁÌÕ ÔÁ\n" "\t ÎÅ ×ÉÄÁ×ÁÔÉ ÖÏÄÎÉÈ ÐÏצÄÏÍÌÅÎØ\n" #: options.h:2427 msgid "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n" msgstr "\t-maxrate $nr - ÏÂÍÅÖÉÔÉ ÍÁËÓÉÍÁÌØÎÕ Û×ÉÄ˦ÓÔØ (Ëâ/Ó)\n" #: options.h:2438 msgid "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n" msgstr "\t-minrate $nr - ÏÂÍÅÖÉÔÉ Í¦Î¦ÍÁÌØÎÕ Û×ÉÄ˦ÓÔØ (Ëâ/Ó)\n" #: options.h:2449 msgid "\t-bufsize $nr - size of read buffer (kB)\n" msgstr "\t-bufsize $nr - ÒÏÚÍ¦Ò ÂÕÆÅÒÁ ÚÞÉÔÕ×ÁÎÎÑ (kâ)\n" #: options.h:2460 msgid "\t-file_quota $nr - maximal size of file to transfer (kB)\n" msgstr "\t-file_quota $nr - ÍÁËÓÉÍÁÌØÎÉÊ ÒÏÚÍ¦Ò ÆÁÊÌÁ (Ëâ)\n" #: options.h:2471 msgid "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n" msgstr "\t-trans_quota $nr - ÍÁËÓÉÍÁÌØÎÉÊ ÏÂ'¤Í ÄÁÎÉÈ ÐÒÏÔÑÇÏÍ ÓÅÓ¦§ (Ëâ)\n" #: options.h:2482 msgid "\t-fs_quota $nr - disk free space quota (kB)\n" msgstr "\t-fs_quota $nr - ÚÁÌÉÛÏË ×¦ÌØÎÏÇÏ Í¦ÓÃÑ ÎÁ ÄÉÓËÕ (Ëâ)\n" #: options.h:2493 msgid "" "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n" msgstr "" "\t-enable_js/-disable_js\n" "\t - ÞÉ ×ÉÔÑÇÁÔÉ ÆÁÊÌÉ ×ÉȦÄÎÉÈ ÔÅËÓÔ¦× javascript\n" #: options.h:2516 msgid "" "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n" msgstr "" "\t-fnrules $t $m $r - ÐÒÁ×ÉÌÁ ËÏÎÓÔÒÕÀ×ÁÎÎÑ ÌÏËÁÌØÎÉÈ ¦ÍÅÎ ÆÁÊ̦×\n" "\t (ÄÉ×. ÄÏצÄÎÉË ÄÌÑ ÄÅÔÁÌØÎ¦ÛÏÇÏ ÏÐÉÓÕ)\n" #: options.h:2528 msgid "" "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n" msgstr "" #: options.h:2551 msgid "" "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n" msgstr "" "\t-all_to_local/-noall_to_local\n" "\t - ÞÉ ÐÅÒÅÐÉÓÕ×ÁÔÉ ÕÓ¦ ÐÏÓÉÌÁÎÎÑ Õ HTML ÎÁ ÌÏËÁÌØÎ¦\n" "\t ÎÅÇÁÊÎÏ Ð¦ÓÌÑ ×ÉÔÑÇÁÎÎÑ\n" #: options.h:2575 msgid "" "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n" msgstr "" "\t-sel_to_local/-nosel_to_local\n" "\t - ÞÉ ÐÅÒÅÐÉÓÕ×ÁÔÉ ÕÓ¦ ÐÏÓÉÌÁÎÎÑ Õ HTML,\n" "\t ÝÏ ×¦ÄÐÏצÄÁÀÔØ ÏÂÍÅÖÅÎÎÑÍ,\n" "\t ÎÁ ÌÏËÁÌØÎ¦ ÎÅÇÁÊÎÏ Ð¦ÓÌÑ ×ÉÔÑÇÁÎÎÑ\n" #: options.h:2600 msgid "" "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n" msgstr "" #: options.h:2625 msgid "\t-remind_cmd $str - command which sends result from reminder mode\n" msgstr "" "\t-remind_cmd $str - ËÏÍÁÎÄÁ ÎÁÄÓÉÌÁÎÎÑ ÒÅÚÕÌØÔÁÔ¦× Õ ÒÅÖÉͦ ÎÁÇÁÄÕ×ÁÞÁ\n" #: options.h:2636 msgid "" "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n" msgstr "" "\t-auto_referer/-noauto_referer\n" "\t - ÞÉ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ×ÌÁÓÎÉÊ URL Õ ÐÏ̦ \"Referer:\" " "ÚÁÐÉÔÕ\n" "\t ÄÌÑ ÓÔÁÒÔÏ×ÏÇÏ URL\n" #: options.h:2660 msgid "" "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n" msgstr "" "\t-url_strategy $strategy\n" "\t - ÓÔÒÁÔÅÇ¦Ñ ÒÏÚËÌÁÄÕ ×ÉÔÑÇÁÎÎÑ URL'¦×\n" "\t (ÐÏÒÑÄÏË, Õ ÑËÏÍÕ URL'¦ ÂÕÄÅ ÚÁ×ÁÎÔÁÖÅÎÏ)\n" "\t $strategy ÍÏÖÅ ÂÕÔÉ ÏÄÎÁ Ú :\n" "\t level - ÑË Õ ÄÅÒÅצ URL'¦×\n" "\t leveli - ÑË Õ ÄÅÒÅצ URL'¦×,\n" "\t ÁÌÅ inline ÏÂ'¤ËÔÉ ÓÐÏÞÁÔËÕ\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t ÁÌÅ inline ÏÂ'¤ËÔÉ ÓÐÏÞÁÔËÕ\n" #: options.h:2683 msgid "\t-nscache_dir $dir - path to Netcape browser cache directory\n" msgstr "\t-nscache_dir $dir - ÛÌÑÈ ÄÏ ÄÉÒÅËÔÏÒ¦§ ËÅÛÁ ÐÅÒÅÇÌÑÄÁÞÁ Netscape\n" #: options.h:2698 msgid "\t-ie_cache - allow loading of files from MSIE browser cache\n" msgstr "\t-ie_cache - ÄÏÚ×ÏÌÉÔÉ ÚÁ×ÁÎÔÁÖÅÎÎÑ ÆÁÊÌ¦× Ú ËÅÛÁ MSIE\n" #: options.h:2728 msgid "" "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n" msgstr "" "\t-remove_adv/-noremove_adv\n" "\t - ÞÉ ×ÉÄÁÌÑÔÉ ÂÁÎÅÒÉ\n" "\t ÷É ÍÁ¤ÔÅ ×ÓÔÁÎÏ×ÉÔÉ ÒÅÇÕÌÑÒΦ ×ÉÒÁÚÉ ÄÌÑ\n" "\t ×ÉÑ×ÌÅÎÎÑ ÂÁÎÅÒ¦× ÏÐæ¤À -adv_re\n" #: options.h:2761 msgid "" "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n" msgstr "" "\t-adv_re $RE - ÒÅÇÕÌÑÒΦ ×ÉÒÁÚÉ ÄÌÑ ×ÉÑ×ÌÅÎÎÑ\n" "\t URL'¦× ÂÁÎÅÒ¦×\n" #: options.h:2777 msgid "" "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n" msgstr "" "\t-check_bg/-nocheck_bg\n" "\t - ÐÒÁÃÀÀÞÉ Õ Ð¦ÄЦÌ̦, ÎÅ ÐÉÓÁÔÉ ÖÏÄÎÉÈ\n" "\t ÐÏצÄÏÍÌÅÎØ ÎÁ ÅËÒÁΦ\n" #: options.h:2806 msgid "" "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n" msgstr "" "\t-send_if_range/-nosend_if_range\n" "\t - ÞÉ ÎÁÄÓÉÌÁÔÉ ÐÏÌÅ If-Range Õ ÚÁÇÏÌÏ×ËÁÈ ÚÁÐÉÔ¦× HTTP\n" "\t îÅ ×ÉËÏÒÉÓÔÏ×ÕÊÔÅ, ÑËÝÏ ÓÅÒ×ÅÒ Ð¦ÄÔÒÉÍÕ¤ ÄÏÔÑÇÕ×ÁÎÎÑ\n" "\t ÁÌÅ ­ÅÎÅÒÕ¤ Ò¦ÚΦ Etags ÄÌÑ Ä×ÏÈ ÚÁÐÉÔ¦×\n" #: options.h:2831 msgid "\t-sched_cmd $str - command for scheduling\n" msgstr "\t-sched_cmd $str - ËÏÍÁÎÄÁ ÐÒÉÚÎÁÞÁÎÎÑ ÒÏÚËÌÁÄÕ ÒÏÂÏÔÉ\n" #: options.h:2842 msgid "" "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n" msgstr "" #: options.h:2866 msgid "" "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n" msgstr "" "\t-post_cmd $str - ËÏÍÁÎÄÁ ÐÏ ÚÁ˦ÎÞÅÎÎÀ ÒÏÂÏÔÉ, ÚÁÐÕÓËÁ¤ÔØÓÑ\n" "\t ЦÓÌÑ ×ÄÁÌÏÇÏ ÚÁ×ÁÎÔÁÖÅÎÎÑ ÄÏËÕÍÅÎÔÁ\n" #: options.h:2882 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n" msgstr "" "\t-ssl_version $v - ×ÅÒÓ¦Ñ ÐÒÏÔÏËÏÌÁ SSL,\n" "\t ÄÏÚ×ÏÌÅΦ ÚÎÁÞÅÎÎÑ: ssl23,ssl2,ssl3,tls1\n" #: options.h:2885 msgid "" "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n" msgstr "" "\t-ssl_version $v - ×ÅÒÓ¦Ñ ÐÒÏÔÏËÏÌÁ SSL,\n" "\t ÄÏÚ×ÏÌÅΦ ÚÎÁÞÅÎÎÑ: ssl23,ssl2,ssl3\n" #: options.h:2903 msgid "" "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n" msgstr "" "\t-unique_sslid/-nounique_sslid\n" "\t - ÞÉ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ÕΦËÁÌØÎÉÊ ID ÄÌÑ ËÏÖÎϧ SSL " "ÓÅÓ¦§\n" #: options.h:2931 msgid "\t-httpad $hdr - additional HTTP header\n" msgstr "\t-httpad $hdr - ÄÏÄÁÔËÏ×ÉÊ ÚÁÇÏÌÏ×ÏË HTTP\n" #: options.h:2942 msgid "\t-statfile $str - statistical report from downloading progress\n" msgstr "\t-statfile $str - ÓÔÁÔÉÓÔÉÞÎÉÊ Ú×¦Ô ÐÏÓÔÕÐÕ ÚÁ×ÁÎÔÁÖÅÎÎÑ\n" #: options.h:2956 msgid "" "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n" msgstr "" "\t-ewait - ÞÅËÁÔÉ ÚÁ×ÅÒÛÅÎÎÑ ÐÒÏÇÒÁÍÉ ÐÏ ÚÁ˦ÎÞÅÎÎÀ\n" "\t ÚÁ×ÁÎÔÁÖÅÎÎÑ\n" #: options.h:2987 msgid "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n" msgstr "\t-aip_pattern $re - ÛÁÂÌÏÎ ÄÌÑ ÄÏÚ×ÏÌÅÎÉÈ ÁÄÒÅÓ IP ÓÅÒ×ÅÒ¦×\n" #: options.h:3002 msgid "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n" msgstr "\t-dip_pattern $re - ÛÁÂÌÏÎ ÄÌÑ ÚÁÂÏÒÏÎÅÎÉÈ ÁÄÒÅÓ IP ÓÅÒ×ÅÒ¦×\n" #: options.h:3014 msgid "" "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n" msgstr "" "\t-site_level $nr - ÍÁËÓÉÍÁÌØÎÁ Ë¦ÌØË¦ÓÔØ ÐÅÒÅÈÏÄ¦× ¦Ú ÓÅÒ×ÅÒÁ ÎÁ " "ÓÅÒ×ÅÒ,\n" "\t ÐÏÞÉÎÁÀÞÉ ×¦Ä ÓÔÁÒÔÏ×ÏÇÏ\n" #: options.h:3026 msgid "" "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n" msgstr "" "\t-use_http11/-nouse_http11\n" "\t - ÞÉ ÄÏÚ×ÏÌÉÔÉ ×ÉËÏÒÉÓÔÁÎÎÑ ÐÒÏÔÏËÏÌÕ HTTP/1.1,\n" "\t ÑËÝÏ ÎÅ ×ËÁÚÁÎÏ - ÚÁÂÏÒÏÎÉÔÉ\n" #: options.h:3050 msgid "" "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n" msgstr "" "\t-max_time $nr - ×ÓÔÁÎÏ×ÉÔÉ ÍÁËÓÉÍÁÌØÎÉÊ ÞÁÓ ÒÏÂÏÔÉ ÐÒÏÇÒÁÍÉ\n" "\t Õ È×ÉÌÉÎÁÈ, ÑËÝÏ ÎÅ ×ËÁÚÁÎÏ - 0 == ÂÅÚ ÏÂÍÅÖÅÎÎÑ,\n" "\t ÍÏÖÎÁ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ÎÅæ̦ ÚÎÁÞÅÎÎÑ\n" #: options.h:3065 msgid "" "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n" msgstr "" "\t-local_ip $str - ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ×ËÁÚÁÎÕ ÌÏËÁÌØÎÕ IP ÁÄÒÅÓÕ.\n" "\t ãÑ ÏÐÃ¦Ñ - ÄÌÑ ÍÁÛÉÎ Ú Ë¦ÌØËÏÍÁ ÁÄÒÅÓÁÍÉ.\n" #: options.h:3077 msgid "" "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n" msgstr "" #: options.h:3095 msgid "" "\t-hash_size $nr - size of internal hash tables for performance tuning\n" msgstr "" "\t-hash_size $nr - ÒÏÚÍ¦Ò ×ÎÕÔÒ¦ÛÎ¦È hash-ÔÁÂÌÉÃØ (×ÐÌÉ×Á¤ ÎÁ " "Û×ÉÄ˦ÓÔØ)\n" #: options.h:3109 msgid "\t-nthreads $nr - set number of concurent downloading threads\n" msgstr "" "\t-nthreads $nr - ×ËÁÚÁÔÉ Ë¦ÌØË¦ÓÔØ ÐÁÒÁÌÅÌØÎÉÈ ÐÏÔÏË¦× ÚÁ×ÁÎÔÁÖÕ×ÁÎÎÑ\n" #: options.h:3124 msgid "" "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n" msgstr "" #: options.h:3152 msgid "" "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n" msgstr "" "\t-formdata $data - ×ËÁÚÕ¤ ÐÏÌÑ HTML ÆÏÒÍ ÄÌÑ HTML ÆÏÒÍ, ÚÎÁÊÄÅÎÉÈ\n" "\t Ð¦Ä ÞÁÓ ÐÅÒÅÇÌÑÄÕ Õ ÄÅÒÅ×Á ÄÏËÕÍÅÎÔ¦×.\n" "\t ìÉÛÅ ×ËÁÚÁΦ æ¤À ÏÐæ¤À ÆÏÒÍÉ ÂÕÄÕÔØ\n" "\t ÏÂÒÏÂÌÅΦ Á×ÔÏÍÁÔÉÞÎÏ.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (ÄÏÄÁÔËÏ×Õ ¦ÎÆÏÒÍÁæÀ ÛÕËÁÊ Õ ÄÏצÄÎÉËÕ)\n" #: options.h:3170 msgid "" "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n" msgstr "" "\t-dumpfd $nr - ÎÏÍÅÒ ÄÅÓËÒÉÐÔÏÒÁ ÆÁÊÌÕ, ÄÏ ÑËÏÇÏ ÐÉÓÁÔÉ ×ͦÓÔ\n" "\t ÄÏËÕÍÅÎÔ¦× ÚÁͦÓÔØ ÆÁÊÌÕ\n" #: options.h:3182 msgid "" "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n" msgstr "" "\t-dump_urlfd $nr - ÎÏÍÅÒ ÄÅÓËÒÉÐÔÏÒÁ ÆÁÊÌÕ, ÄÏ ÑËÏÇÏ ÐÉÓÁÔÉ\n" "\t ÕÓ¦ URL'¦, ÚÎÁÊÄÅΦ Õ ÄÏËÕÍÅÎÔ¦\n" #: options.h:3194 msgid "" "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n" msgstr "" "\t-del_after/-nodel_after\n" "\t - ÞÉ ×ÉÄÁÌÑÔÉ ÄÏËÕÍÅÎÔ FTP ЦÓÌÑ ×ÄÁÌÏÇÏ ÚÁ×ÁÎÔÁÖÅÎÎÑ\n" #: options.h:3217 msgid "" "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n" msgstr "" "\t-unique_name/-nounique_name\n" "\t - ÚÁ×ÖÄÉ ­ÅÎÅÒÕ×ÁÔÉ ÕΦËÁÌØÎÅ ¦Í'Ñ ÄÌÑ ËÏÖÎÏÇÏ " "ÄÏËÕÍÅÎÔÁ\n" #: options.h:3240 msgid "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n" msgstr "" "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - ÞÉ ÐÏÌÉÛÁÔÉ ÐÅÒÛÕ ÎÁ ÃØÏÍÕ ÓÅÒ×ÅÒ¦ ÄÉÒÅËÔÏÒ¦À\n" #: options.h:3263 msgid "" "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n" msgstr "" "\t-singlepage/-nosinglepage\n" "\t - ÚÁ×ÁÎÔÁÖÉÔÉ ¤ÄÉÎÕ HTML ÓÔÏÒ¦ÎËÕ Ú ÕÓ¦ÍÁ §§ ÏÂ'¤ËÔÁÍÉ\n" #: options.h:3286 msgid "" "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n" msgstr "" #: options.h:3311 msgid "" "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n" msgstr "" #: options.h:3338 msgid "" "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n" msgstr "" "\t-auth_ntlm_domain $str\n" "\t - ¦Í'Ñ ÄÏÍÅÎÁ SMB ÄÌÑ Á×ÔÏÒÉÚÁæ§ HTTP NTLM\n" #: options.h:3354 msgid "" "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n" msgstr "" "\t-auth_proxy_ntlm_domain $str\n" "\t - ¦Í'Ñ ÄÏÍÅÎÁ SMB ÄÌÑ Á×ÔÏÒÉÚÁæ§ NTLM ÞÅÒÅÚ HTTP " "ÐÒÏËÓ¦\n" #: options.h:3370 msgid "" "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n" msgstr "" #: options.h:3383 msgid "" "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n" msgstr "" #: options.h:3395 msgid "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n" msgstr "" "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - ×ÉÔÑÇÁÔÉ ÓÉÍ×. ÐÏÓÉÌÁÎÎÑ ÑË Ú×ÉÞÁÊΦ " "ÆÁÊÌÉ/ÄÉÒÅËÔÏÒ¦§\n" #: options.h:3421 msgid "" "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform $p $t $h $a\n" "\t - ÓÐÅÃÉÆ¦ÞÎÉÊ ÛÁÂÌÏÎ JS Ú ÔÒÁÎÓÆÏÒÍÁæ¤À\n" "\t $p - ÛÁÂÌÏÎ\n" "\t $t - ÔÒÁÎÓÆÏÒÍÁæÑ\n" "\t $h - HTML ÔÅ­ ÞÉ * ÞÉ \"\"\n" "\t $a - HTML ÁÔÒÉÂÕÔ\n" #: options.h:3441 msgid "" "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n" msgstr "" "\t-js_transform2 $p $t $h $a\n" "\t - ÓÐÅÃÉÆ¦ÞÎÉÊ ÛÁÂÌÏÎ JS Ú ÔÒÁÎÓÆÏÒÍÁæ¤À ÔÁ\n" "\t ÐÅÒÅÐÉÓÕ×ÁÎÎÑÍ URL'¦× Õ ÐÅÒÛ¦Ê ÞÁÓÔÉΦ ÛÁÂÌÏÎÁ\n" "\t $p - ÛÁÂÌÏÎ\n" "\t $t - ÔÒÁÎÓÆÏÒÍÁæÑ\n" "\t $h - HTML ÔÅ­ ÞÉ * ÞÉ \"\"\n" "\t $a - HTML ÁÔÒÉÂÕÔ\n" #: options.h:3459 msgid "" "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_user $str\n" "\t - ¦Í'Ñ ÄÌÑ Á×ÔÏÒÉÚÁæ§ ÄÏÓÔÕÐÁ ÄÏ FTP ÐÒÏËÓ¦\n" #: options.h:3471 msgid "" "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n" msgstr "" "\t-ftp_proxy_pass $str\n" "\t - ÐÁÒÏÌØ ÄÌÑ Á×ÔÏÒÉÚÁæ§ ÄÏÓÔÕÐÁ ÄÏ FTP ÐÒÏËÓ¦\n" #: options.h:3483 msgid "" "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n" msgstr "" #: options.h:3506 msgid "" "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n" msgstr "" #: options.h:3519 msgid "" "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n" msgstr "" #: options.h:3544 #, fuzzy msgid "" "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - ÞÉ ×ÉÄÁÌÑÔÉ ÎÅÁËÔÕÁÌØÎ¦ ÆÁÊÌÉ ÞÉ ÄÉÒÅËÔÏÒ¦§, " "ÐÒÁÃÀÀÞÉ\n" "\t Õ ÒÅÖÉͦ ÓÉÎÈÒÏΦÚÁæ§\n" #: options.h:3568 #, fuzzy msgid "" "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n" msgstr "" "\t-scndir $dir - ÄÉÒÅËÔÏÒ¦Ñ, ÄÅ ÚÂÅÒÅÖÅΦ ÷ÁÛ¦ ÓÃÅÎÁÒ¦§\n" "\t (ÆÁÊÌÉ ËÏÎÆ¦­ÕÒÁæ§)\n" #: options.h:3583 msgid "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n" msgstr "\t-mozcache_dir $dir - ÛÌÑÈ ÄÏ ÄÉÒÅËÔÏÒ¦§ ËÅÛÁ ÐÅÒÅÇÌÑÄÁÞÁ Mozilla\n" #: options.h:3595 msgid "" "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3607 msgid "" "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n" msgstr "" #: options.h:3619 msgid "" "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n" msgstr "" #: options.h:3643 #, fuzzy msgid "" "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n" msgstr "" "\t-remove_old/-noremove_old\n" "\t - ÞÉ ×ÉÄÁÌÑÔÉ ÎÅÁËÔÕÁÌØÎ¦ ÆÁÊÌÉ ÞÉ ÄÉÒÅËÔÏÒ¦§, " "ÐÒÁÃÀÀÞÉ\n" "\t Õ ÒÅÖÉͦ ÓÉÎÈÒÏΦÚÁæ§\n" #: options.h:3659 msgid "" "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n" msgstr "" #: options.h:3672 msgid "" "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n" msgstr "" #: options.h:3687 msgid "" "\t-nss_cert_dir $dir - set certificate config directory for Netscape NSS\n" msgstr "" #: options.h:3702 msgid "" "\t-nss_accept_unknown_cert/-nonss_accept_unknown_cert\n" "\t - accept SSL server certificates not listed in\n" "\t certificate database\n" msgstr "" #: options.h:3734 msgid "" "\t-nss_domestic_policy/-nss_export_policy\n" "\t - set policy for SSL ciphers in NSS\n" msgstr "" #: options.h:3765 msgid "" "\t-dont_touch_url_rpattern $re\n" "\t - RE pattern of URL which should not be touched\n" "\t by URL rewriting engine\n" msgstr "" #: options.h:3779 msgid "" "\t-dont_touch_url_pattern $list\n" "\t - wilcard patterns of URLs which should not\n" "\t be touched by URL rewriting engine\n" msgstr "" #: options.h:3795 msgid "" "\t-dont_touch_tag_rpattern $re\n" "\t - RE pattern of HTML tag in which URLs should\n" "\t not be touched by URL rewriting engine\n" msgstr "" #: options.h:3809 #, fuzzy msgid "" "\t-tag_pattern $tag $attrib $url\n" "\t - wilcard patterns for precise matching of URLs\n" "\t inside HTML tags\n" msgstr "" "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - ÚÁÂÏÒÏÎÉÔÉ ÏÐÒÁÃØÏ×Õ×ÁÎÎÑ URL'¦×\n" "\t ×¦Ä ÁÔÒÉÂÕÔÁ $ATTRIB ÔÅ­Á HTML $TAG\n" #: options.h:3825 #, fuzzy msgid "" "\t-tag_rpattern $tag $attrib $url\n" "\t - RE patterns for precise matching of URLs\n" "\t inside HTML tags\n" msgstr "" "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - ÄÏÚ×ÏÌÉÔÉ ÏÐÒÁÃØÏ×Õ×ÁÎÎÑ URL'¦×\n" "\t ×¦Ä ÁÔÒÉÂÕÔÁ $ATTRIB ÔÅ­Á HTML $TAG\n" #: pavuk.c:108 msgid "QUIT signal catched\n" msgstr "ð¦ÊÍÁÌÉ ÓÉÇÎÁÌ QUIT\n" #: pavuk.c:259 msgid "Not enough number of parameters \"-msgcat\"\n" msgstr "úÁÍÁÌÏ ÐÁÒÁÍÅÔÒ¦× ÄÌÑ \"-msgcat\"\n" #: pavuk.c:273 msgid "Not enough number of parameters \"-scenario\"\n" msgstr "úÁÍÁÌÏ ÐÁÒÁÍÅÔÒ¦× ÄÌÑ \"-scenario\"\n" #: pavuk.c:303 msgid "Error: Supplied bad file descriptor in -dumpfd option\n" msgstr "ðÏÍÉÌËÁ: ÷ËÁÚÁÎÏ ÎÅצÒÎÉÊ ÄÅÓËÒÉÐÔÏÒ ÄÌÑ ÏÐæ§ -dumpfd\n" #: pavuk.c:314 msgid "Error: Supplied bad file descriptor in -dump_urlfd option\n" msgstr "ðÏÍÉÌËÁ: ÷ËÁÚÁÎÏ ÎÅצÒÎÉÊ ÄÅÓËÒÉÐÔÏÒ ÄÌÑ ÏÐæ§ -dump_urlfd\n" #: pavuk.c:364 msgid "WARNING: scndir not specified - saving to current directory\n" msgstr "ðï÷¶äïíìåîîñ: scndir ÎÅ ×ËÁÚÁÎÏ - ÚÂÅÒ¦ÇÁ¤ÍÏ ÄÏ ÐÏÔÏÞÎϧ ÄÉÒÅËÔÏÒ¦§\n" #: pavuk.c:403 msgid "Unable to fork pavuk to background - running in foreground\n" msgstr "" #: pavuk.c:407 #, c-format msgid "Pavuk will run at backround as PID %d\n" msgstr "ðÁ×ÕË ÐÒÁÃÀ×ÁÔÉÍÅ Õ Ð¦ÄЦÌ̦ ÑË PID %d\n" #: pavuk.c:427 #, c-format msgid "reading URLs from file - %s\n" msgstr "ÞÉÔÁ¤ÍÏ URL'¦ Ú ÆÁÊÌÁ - %s\n" #: recurse.c:80 #, c-format msgid "Rescheduling locked URL as no. %d\n" msgstr "" #: recurse.c:93 msgid "Running post-processing command\n" msgstr "" #: recurse.c:241 #, c-format msgid "retry no. %d\n" msgstr "ÓÐÒÏÂÁ. %d\n" #: recurse.c:244 #, c-format msgid "URL[%2d]: %5d(%d) of %5d %s\n" msgstr "" #: recurse.c:247 #, c-format msgid "URL: %5d(%d) of %5d %s\n" msgstr "" #: recurse.c:258 recurse.c:396 msgid "Starting download" msgstr "ðÏÞÉÎÁ¤ÍÏ ÚÁ×ÁÎÔÁÖÅÎÎÑ" #: recurse.c:286 msgid "Already processed\n" msgstr "÷ÖÅ ×ÉËÏÎÁÎÏ\n" #: recurse.c:293 msgid "Disallowed by user\n" msgstr "úÁÂÏÒÏÎÅÎÏ ËÏÒÉÓÔÕ×ÁÞÅÍ\n" #: recurse.c:307 msgid "Disallowed by rules\n" msgstr "úÁÂÏÒÏÎÅÎÏ ÏÂÍÅÖÅÎÎÑÍÉ\n" #: recurse.c:314 msgid "Checking \"robots.txt\"" msgstr "ðÅÒÅצÒѤÍÏ \"robots.txt\"" #: recurse.c:318 msgid "Disallowed by \"robots.txt\"\n" msgstr "úÁÂÏÒÏÎÅÎÎÏ ÏÂÍÅÖÅÎÎÑÍÉ \"robots.txt\"\n" #: recurse.c:328 msgid "This URL type is not supported with ftpdir mode\n" msgstr "ãÅÊ ÔÉÐ URL ΊЦÄÔÒÉÍÕ¤ÔØÓÑ Õ ÒÅÖÉͦ ftpdir\n" #: recurse.c:348 msgid "No transfer - file not expired\n" msgstr "" #: recurse.c:364 #, c-format msgid "Starting time : %s\n" msgstr "ðÏÞÁÔÏË ÒÏÂÏÔÉ : %s\n" #: recurse.c:406 recurse.c:565 #, c-format msgid "Ending time : %s\n" msgstr "ë¦ÎÅÃØ ÒÏÂÏÔÉ : %s\n" #: recurse.c:413 recurse.c:568 msgid "download" msgstr "ÚÁ×ÁÎÔÁÖÅÎÎÑ" #: recurse.c:513 msgid "last document locked -> sleeping for 5 seconds\n" msgstr "ÏÓÔÁÎÎØÏÇÏ ÄÏËÕÍÅÎÔÁ ÚÁÌÏËÏ×ÁÎÏ -> ÓÐÉÍÏ 5 ÓÅËÕÎÄ\n" #: recurse.c:579 msgid "Relocating and scanning HTML document" msgstr "" #: recurse.c:631 msgid "Dumping processed document" msgstr "" #: recurse.c:651 msgid "Storing document" msgstr "úÂÅÒ¦ÇÁ¤ÍÏ ÄÏËÕÍÅÎÔ" #: recurse.c:657 msgid "Store failed\n" msgstr "úÂ¦Ê ÚÂÅÒÅÖÅÎÎÑ\n" #: recurse.c:764 recurse.c:847 msgid "Done" msgstr "úÒÏÂÌÅÎÏ" #: recurse.c:924 remind.c:378 msgid "Sleeping ..." msgstr "óÐÉÍÏ ..." #: recurse.c:938 remind.c:395 msgid "Exiting ..." msgstr "÷ÉÈÏÄÉÍÏ ..." #: recurse.c:1050 #, c-format msgid "\t%s (%d bytes)\n" msgstr "\t%s (%d ÂÁÊÔ¦×)\n" #: recurse.c:1108 msgid "Searching for files to resume" msgstr "" #: recurse.c:1135 #, c-format msgid "Adding %s to resume list\n" msgstr "" #: recurse.c:1167 msgid "Searching for documents to synchronize" msgstr "" #: recurse.c:1222 recurse.c:1247 #, c-format msgid "Adding file %s to sync list as URL %s\n" msgstr "" #: remind.c:44 #, c-format msgid "Checking: %s\n" msgstr "ðÅÒÅצÒѤÍÏ: %s\n" #: remind.c:169 #, c-format msgid "Bad reminder db entry - %s\n" msgstr "" #: remind.c:528 msgid "" "This is the result of running pavuk reminder mode\n" "\n" msgstr "" "ãÅ ÒÅÚÕÌØÔÁÔ ÒÏÂÏÔÉ ÐÁ×ÕËÁ Õ ÒÅÖÉͦ ÎÁÇÁÄÕ×ÁÞÁ (reminder)\n" "\n" #: remind.c:539 msgid "Changed URLs\n" msgstr "úͦÎÅΦ URL'¦\n" #: remind.c:560 msgid "URLs with some errors\n" msgstr "URL'¦ Ú ÄÅÑËÉÍÉ ÐÏÍÉÌËÁÍÉ\n" #: robots.c:162 msgid "transfering \"robots.txt\"" msgstr "ÔÑÇÎÅÍÏ \"robots.txt\"" #: robots.c:165 msgid "transfering \"robots.txt\"\n" msgstr "ÔÑÇÎÅÍÏ \"robots.txt\"\n" # þÉ, ËÒÁÝÅ "ôÉ ÂÁ: ÊÔÉ ÐÏ \"robots.txt\" ÄÏ %s ???\n" #: robots.c:226 #, c-format msgid "Hmm: redirecting \"robots.txt\" to %s ???\n" msgstr "ôÉ ÂÁ: ÐÅÒÅÎÁÐÒÁ×ÌÑÔÉ \"robots.txt\" ÄÏ %s ???\n" #: stats.c:139 stats.c:222 #, c-format msgid "Total number of URLs in queue: %d\n" msgstr "÷ÓØÏÇÏ URL'¦× Õ ÞÅÒÚ¦: %d\n" #: stats.c:140 stats.c:224 #, c-format msgid "Starting urls: %d\n" msgstr "óÔÁÒÔÏצ URL'¦: %d\n" #: stats.c:143 stats.c:229 msgid "Not processed yet: %d (%3d%%)\n" msgstr "ýÅ ÎÅ ÏÐÒÁÃØÏ×ÁÎÏ: %d (%3d%%)\n" #: stats.c:148 stats.c:236 msgid "Processed OK: %d (%3d%%)\n" msgstr "ïÐÒÁÃØÏ×ÁÎÏ OK: %d (%3d%%)\n" #: stats.c:151 stats.c:242 msgid "Loaded from local tree: %d (%3d%%)\n" msgstr "úÁ×ÁÎÔÁÖÅÎÏ Ú ÌÏËÁÌØÎÏÇÏ ÄÅÒÅ×Á: %d (%3d%%)\n" #: stats.c:154 stats.c:248 msgid "Loaded from Netscape browser cache dir: %d (%3d%%)\n" msgstr "úÁ×ÁÎÔÁÖÅÎÏ Ú ÄÉÒÅËÔÏÒ¦§ ËÅÛÁ Netscape: %d (%3d%%)\n" #: stats.c:157 stats.c:254 msgid "Downloaded over network: %d (%3d%%)\n" msgstr "úÁ×ÁÎÔÁÖÅÎÏ Ú ÍÅÒÅÖ¦: %d (%3d%%)\n" #: stats.c:160 stats.c:260 msgid "Moved to another location: %d (%3d%%)\n" msgstr "ðÅÒÅÐÉÓÁÎÏ ÄÏ ¦ÎÛÏÇÏ Í¦ÓÃÑ: %d (%3d%%)\n" #: stats.c:164 stats.c:266 msgid "Downloaded truncated: %d (%3d%%)\n" msgstr "úÁ×ÁÎÔÁÖÅÎÏ ÕÓ¦ÞÅÎÉÈ: %d (%3d%%)\n" #: stats.c:170 stats.c:273 msgid "Non fatal errors: %d (%3d%%)\n" msgstr "îÅÆÁÔÁÌØÎÉÈ ÐÏÍÉÌÏË: %d (%3d%%)\n" #: stats.c:176 stats.c:280 msgid "Not found documents: %d (%3d%%)\n" msgstr "îÅ ÚÎÁÊÄÅÎÏ ÄÏËÕÍÅÎÔ¦×: %d (%3d%%)\n" #: stats.c:182 stats.c:287 msgid "Documents with fatal errors: %d (%3d%%)\n" msgstr "äÏËÕÍÅÎÔÉ Ú ÆÁÔÁÌØÎÉÍÉ ÐÏÍÉÌËÁÍÉ: %d (%3d%%)\n" #: stats.c:188 msgid "Documents with unknown status: %d (%3d%%)\n" msgstr "äÏËÕÍÅÎÔÉ Õ ÎÅצÄÏÍÏÍÕ ÓÔÁΦ: %d (%3d%%)\n" #: stats.c:294 msgid "Documents with unspecific status: %d (%3d%%)\n" msgstr "" #: stats.c:359 msgid "Pavuk: save status page" msgstr "ðÁ×ÕË: ÚÂÅÒÅÖÅÎÎÑ ÓÔÏÒ¦ÎËÉ ÓÔÁÔÕÓÕ" #: stats.c:380 stats.c:532 msgid "Not available yet" msgstr "" #: stats.c:461 msgid "Pavuk: status page" msgstr "ðÁ×ÕË: ÓÔÏÒ¦ÎËÁ ÓÔÁÔÕÓÕ" #: stats.c:478 msgid "Status page" msgstr "óÔÏÒ¦ÎËÁ ÓÔÁÔÕÓÕ" #: stats.c:489 msgid "Save ..." msgstr "úÂÅÒÅÇÔÉ ..." #: stats.c:496 msgid "Refresh" msgstr "ðÏÎÏ×ÉÔÉ" #: stats.c:521 msgid "Try download" msgstr "óÐÒÏÂÕ×ÁÔÉ ÔÑÇÔÉ" #: tag_pattern.c:32 #, fuzzy msgid "Bad -tag_pattern tag wildcard pattern\n" msgstr "\t-url_pattern $list - ÓÐÉÓÏË ÛÁÂÌÏÎ¦× Ú ÍÁÓËÁÍÉ ÄÌÑ URL'¦×\n" #: tag_pattern.c:39 #, fuzzy msgid "Bad -tag_pattern attribute wildcard pattern\n" msgstr "\t-url_pattern $list - ÓÐÉÓÏË ÛÁÂÌÏÎ¦× Ú ÍÁÓËÁÍÉ ÄÌÑ URL'¦×\n" #: tag_pattern.c:46 #, fuzzy msgid "Bad -tag_pattern url wildcard pattern\n" msgstr "\t-url_pattern $list - ÓÐÉÓÏË ÛÁÂÌÏÎ¦× Ú ÍÁÓËÁÍÉ ÄÌÑ URL'¦×\n" #: tag_pattern.c:61 msgid "Bad -tag_rpattern tag RE pattern\n" msgstr "" #: tag_pattern.c:63 msgid "Bad -tag_rpattern attribute RE pattern\n" msgstr "" #: tag_pattern.c:65 msgid "Bad -tag_rpattern url RE pattern\n" msgstr "" #: tools.c:110 msgid "no error" msgstr "ÂÅÚ ÐÏÍÉÌÏË" #: tools.c:115 msgid "host not found" msgstr "ÓÅÒ×ÅÒ ÎÅ ÚÎÁÊÄÅÎÏ" #: tools.c:120 msgid "temporary error (try again later)" msgstr "ÔÉÍÞÁÓÏ×Á ÐÏÍÉÌËÁ (ÓÐÒÏÂÕÊÔŠЦÚΦÛÅ)" #: tools.c:125 msgid "non recoverable error" msgstr "" #: tools.c:130 msgid "name is valid, but doesn't have an IP address" msgstr "¦Í'Ñ ×¦ÒÎÅ, ÁÌÅ ÎÅ ÍÁ¤ ÁÄÒÅÓÉ IP" #: tools.c:134 msgid "unknown hostname translation error" msgstr "ÎÅצÄÏÍÁ ÐÏÍÉÌËÁ ÔÒÁÎÓÌÑæ§ ¦ÍÅΦ ÓÅÒ×ÅÒÁ" #: tools.c:315 tools.c:339 tools.c:364 tools.c:409 msgid "" "Warning: locking not supported ... don't run multiple processes or threads!\n" msgstr "" #: tools.c:330 tools.c:353 #, c-format msgid "waiting to release lock on FD : %d\n" msgstr "" #: uconfig.c:1035 msgid "Bad parameter - Working subdirectory" msgstr "îÅצÒÎÉÊ ÐÁÒÁÍÅÔÅÒ - òÏÂÏÞÁ ЦÄÄÉÒÅËÔÏÒ¦Ñ" #: uconfig.c:1161 msgid "Bad parameter - Cache directory" msgstr "îÅצÒÎÉÊ ÐÁÒÁÍÅÔÅÒ - äÉÒÅËÔÏÒ¦Ñ ËÅÛÁ" #: uexit.c:31 msgid "Error occured while executing user-exit script" msgstr "" #: update_links.c:37 #, c-format msgid "Entering directory %s\n" msgstr "úÁÈÏÄÉÍÏ ÄÏ ÄÉÒÅËÔÏÒ¦§ %s\n" #: update_links.c:66 #, c-format msgid "Relocating %s\n" msgstr "ðÅÒÅͦÝÕ¤ÍÏ %s\n" #: update_links.c:69 #, c-format msgid "Omitting %s\n" msgstr "ðÒÏÐÕÓËÁ¤ÍÏ %s\n" #: update_links.c:83 #, c-format msgid "Leaving directory %s\n" msgstr "÷ÉÈÏÄÉÍÏ Ú ÄÉÒÅËÔÏÒ¦§ %s\n" #: update_links.c:101 #, c-format msgid "Can't open directory %s\n" msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ ÄÉÒÅËÔÏÒ¦À %s\n" #: url.c:1007 #, c-format msgid "unsupported URL type \"%s\"\n" msgstr "ÃÅÊ ÔÉÐ URL ΊЦÄÔÒÉÍÕ¤ÔØÓÑ \"%s\"\n" #: url.c:1159 msgid "Moved to already processed URL.\n" msgstr "ðÅÒÅÓÕÎÕÔÏ ÄÏ ×ÖÅ ÏÐÒÁÃØÏ×ÁÎÏÇÏ URL.\n" #: url.c:2775 msgid "Missing specification of URL in request\n" msgstr "" #: url.c:2784 msgid "Missing request fields specification for POST request\n" msgstr "" #: url.c:2792 msgid "Multipart encoding not supported with GET requests\n" msgstr "Multipart encoding ¦Ú ÚÁÐÉÔÁÍÉ GET ΊЦÄÔÒÉÍÕ¤ÔØÓÑ\n" #~ msgid "January" #~ msgstr "ó¦ÞÅÎØ" #~ msgid "February" #~ msgstr "ìÀÔÉÊ" #~ msgid "March" #~ msgstr "âÅÒÅÚÅÎØ" #~ msgid "April" #~ msgstr "ëצÔÅÎØ" #~ msgid "May" #~ msgstr "ôÒÁ×ÅÎØ" #~ msgid "June" #~ msgstr "þÅÒ×ÅÎØ" #~ msgid "July" #~ msgstr "ìÉÐÅÎØ" #~ msgid "August" #~ msgstr "óÅÒÐÅÎØ" #~ msgid "September" #~ msgstr "÷ÅÒÅÓÅÎØ" #~ msgid "October" #~ msgstr "öÏ×ÔÅÎØ" #~ msgid "November" #~ msgstr "ìÉÓÔÏÐÁÄ" #~ msgid "December" #~ msgstr "çÒÕÄÅÎØ" #~ msgid "Sun" #~ msgstr "îÄ." #~ msgid "Mon" #~ msgstr "ðÎ." #~ msgid "Tue" #~ msgstr "÷Ô." #~ msgid "Wed" #~ msgstr "óÒ." #~ msgid "Thu" #~ msgstr "þÔ." #~ msgid "Fri" #~ msgstr "ðÔ." #~ msgid "Sat" #~ msgstr "óÂ." #~ msgid "Server certificate:\n" #~ msgstr "óÅÒÔÉÆ¦ËÁÔ ÓÅÒ×ÅÒÁ:\n" #~ msgid "\t subject: %s\n" #~ msgstr "\t ÓÕÂ'¤ËÔ: %s\n" #~ msgid "\t issuer: %s\n" #~ msgstr "\t ×ÉÄÁÎÏ: %s\n" pavuk-0.9.35/po/README0000644000175000001440000000171310141434034011145 00000000000000How to translate (for beginners): 1) Do the normal configure steps in main directory to get makefiles. 2) Do 'make ln.pox', where is your language to get a new pox-file 3) Translating the new file: a) Enter texts for any new translation string. b) Remove any commented old strings (at end of file). c) Correct anything with "fuzzy" keyword and remove the keyword afterwards. d) Be careful - fuzzy somethimes means printf-specifiers may have changed - e.g. from %d to %u - fix these or it will be very hard to find the errors resulting from this. e) Use diff between old and new file as often as necessary to find everything which needs to be changed. 4) Copy the new pox file to the corresponding po file and call make to see if there are warnings or errors. 5) Have a last look at the complete file to see if something has been forgotten or is wrong. 6) Send the new file to the current maintainer for inclusion in release. pavuk-0.9.35/po/Makefile.am0000644000175000001440000000205410565417031012330 00000000000000POFILES = $(PAVUK_PO) MOFILES = $(PAVUK_MO) POXFILES = $(PAVUK_POX) # Unicode message catalogs UPOFILES = $(PAVUK_UPO) UMOFILES = $(PAVUK_UMO) MSGFMT = @MSGFMT@ EXTRA_DIST = $(POFILES) DISTCLEANFILES = $(POXFILES) $(UPOFILES) $(UMOFILES) $(MOFILES) $(PACKAGE).pot CLEANFILES = $(POXFILES) $(UPOFILES) $(UMOFILES) $(MOFILES) $(PACKAGE).pot SUFFIXES = .po .mo .pox .upo .umo .po.mo: $(MSGFMT) @MSGFMTSTATS@ -o $@ $< .upo.umo: $(MSGFMT) @MSGFMTSTATS@ -o $@ $< %.pox: %.po $(PACKAGE).pot msgmerge $< $(PACKAGE).pot >$@ .po.upo: codep=`awk -F= '/Content-Type:/{split($$2,r,"\\\");print r[1]}' $<`; \ $(ICONV) -f "$$codep" -t UTF-8 $< | sed "s/charset=$$codep/charset=UTF-8/" > $@ all: @PAVUK_UTFMODE@ mo: $(MOFILES) pox: $(POXFILES) umo: $(UMOFILES) upo: $(UPOFILES) pot: $(PACKAGE).pot $(PACKAGE).pot: cd ../src && make pot install-data-am: for lang in $(PAVUK_LANG); do \ install_dir=$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $$install_dir; \ $(INSTALL_DATA) $$lang.@PAVUK_UTFMODE@ $$install_dir/$(PACKAGE).mo; \ done pavuk-0.9.35/po/Makefile.in0000644000175000001440000002325210567010740012342 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = po DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ac-config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AT = @AT@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPS = @DEPS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GNOME_CONFIG = @GNOME_CONFIG@ GNOME_PREFIX = @GNOME_PREFIX@ GREP = @GREP@ GTK_CONFIG = @GTK_CONFIG@ GTK_CONFIG2 = @GTK_CONFIG2@ GZIP = @GZIP@ ICONV = @ICONV@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MSGFMT = @MSGFMT@ MSGFMTSTATS = @MSGFMTSTATS@ MSUBDIRS = @MSUBDIRS@ NSPR_CONFIG = @NSPR_CONFIG@ NWSMAKEFILE = @NWSMAKEFILE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PAVUK_ALLMO = @PAVUK_ALLMO@ PAVUK_ALLPO = @PAVUK_ALLPO@ PAVUK_LANG = @PAVUK_LANG@ PAVUK_MO = @PAVUK_MO@ PAVUK_PO = @PAVUK_PO@ PAVUK_POX = @PAVUK_POX@ PAVUK_UMO = @PAVUK_UMO@ PAVUK_UPO = @PAVUK_UPO@ PAVUK_UTFMODE = @PAVUK_UTFMODE@ PCRE_CONFIG = @PCRE_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ REVISION = @REVISION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ x_cflags = @x_cflags@ x_libs = @x_libs@ POFILES = $(PAVUK_PO) MOFILES = $(PAVUK_MO) POXFILES = $(PAVUK_POX) # Unicode message catalogs UPOFILES = $(PAVUK_UPO) UMOFILES = $(PAVUK_UMO) EXTRA_DIST = $(POFILES) DISTCLEANFILES = $(POXFILES) $(UPOFILES) $(UMOFILES) $(MOFILES) $(PACKAGE).pot CLEANFILES = $(POXFILES) $(UPOFILES) $(UMOFILES) $(MOFILES) $(PACKAGE).pot SUFFIXES = .po .mo .pox .upo .umo all: all-am .SUFFIXES: .SUFFIXES: .po .mo .pox .upo .umo $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu po/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu po/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am .po.mo: $(MSGFMT) @MSGFMTSTATS@ -o $@ $< .upo.umo: $(MSGFMT) @MSGFMTSTATS@ -o $@ $< %.pox: %.po $(PACKAGE).pot msgmerge $< $(PACKAGE).pot >$@ .po.upo: codep=`awk -F= '/Content-Type:/{split($$2,r,"\\\");print r[1]}' $<`; \ $(ICONV) -f "$$codep" -t UTF-8 $< | sed "s/charset=$$codep/charset=UTF-8/" > $@ all: @PAVUK_UTFMODE@ mo: $(MOFILES) pox: $(POXFILES) umo: $(UMOFILES) upo: $(UPOFILES) pot: $(PACKAGE).pot $(PACKAGE).pot: cd ../src && make pot install-data-am: for lang in $(PAVUK_LANG); do \ install_dir=$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $$install_dir; \ $(INSTALL_DATA) $$lang.@PAVUK_UTFMODE@ $$install_dir/$(PACKAGE).mo; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pavuk-0.9.35/man/0000777000175000001440000000000010567011370010512 500000000000000pavuk-0.9.35/man/Makefile.am0000644000175000001440000000010510325125636012461 00000000000000man_MANS = pavuk.1 EXTRA_DIST = pavuk.1.in DISTCLEANFILES = pavuk.1 pavuk-0.9.35/man/Makefile.in0000644000175000001440000002503110567010740012474 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/pavuk.1.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ac-config.h CONFIG_CLEAN_FILES = pavuk.1 SOURCES = DIST_SOURCES = man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AT = @AT@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPS = @DEPS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GNOME_CONFIG = @GNOME_CONFIG@ GNOME_PREFIX = @GNOME_PREFIX@ GREP = @GREP@ GTK_CONFIG = @GTK_CONFIG@ GTK_CONFIG2 = @GTK_CONFIG2@ GZIP = @GZIP@ ICONV = @ICONV@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MSGFMT = @MSGFMT@ MSGFMTSTATS = @MSGFMTSTATS@ MSUBDIRS = @MSUBDIRS@ NSPR_CONFIG = @NSPR_CONFIG@ NWSMAKEFILE = @NWSMAKEFILE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PAVUK_ALLMO = @PAVUK_ALLMO@ PAVUK_ALLPO = @PAVUK_ALLPO@ PAVUK_LANG = @PAVUK_LANG@ PAVUK_MO = @PAVUK_MO@ PAVUK_PO = @PAVUK_PO@ PAVUK_POX = @PAVUK_POX@ PAVUK_UMO = @PAVUK_UMO@ PAVUK_UPO = @PAVUK_UPO@ PAVUK_UTFMODE = @PAVUK_UTFMODE@ PCRE_CONFIG = @PCRE_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ REVISION = @REVISION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ x_cflags = @x_cflags@ x_libs = @x_libs@ man_MANS = pavuk.1 EXTRA_DIST = pavuk.1.in DISTCLEANFILES = pavuk.1 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh pavuk.1: $(top_builddir)/config.status $(srcdir)/pavuk.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ uninstall-info-am: install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-man install-exec-am: install-info: install-info-am install-man: install-man1 installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-man uninstall-man: uninstall-man1 .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-man1 install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-info-am uninstall-man uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pavuk-0.9.35/man/pavuk.1.in0000644000175000001440000030066210400632402012241 00000000000000.TH pavuk 1 "@REVISION@" "@VERSION@" "Internet utils" .SH NAME pavuk \- HTTP, HTTP over SSL, FTP, FTP over SSL and Gopher recursive document retrieval program .SH SYNOPSIS .PP .B pavuk [-mode {normal | resumeregets | singlepage | singlereget | sync | dontstore | ftpdir | mirror}] .I [-X] [-runX] [-bg/-nobg] [prefs/-noprefs] [-h] [-v] [-progress/-noprogress] [-stime/-nostime] [-xmaxlog $nr] .I [-logfile $file] [-slogfile $file] [-auth_file $file] [-msgcat $dir] [-language $str] [-gui_font $font] [-quiet/-verbose .I [-read_css/-noread_css] .I [-cdir $dir] .I [-scndir $dir] .I [-scenario $str] [-dumpscn $filename] .I [-lmax $nr] [-dmax $nr] .I [-leave_level $nr] .I [-maxsize $nr] [-minsize $nr] .I [-asite $list] [-dsite $list] .I [-adomain $list] [-ddomain $list] .I [-asfx $list] [-dsfx $list] .I [-aprefix $list] [-dprefix $list] .I [-amimt $list] [-dmimet $list] .I [-pattern $pattern] [-url_pattern $pattern] .I [-rpattern $regexp] [-url_rpattern $regexp] .I [-skip_pattern $pattern] [-skip_url_pattern $pattern] .I [-skip_rpattern $regexp] [-skip_url_rpattern $regexp] .I [-newer_than $time] [-older_than $time] .I [-schedule $time] [-reschedule $nr] .I [-dont_leave_site/-leave_site] [-dont_leave_dir/-leave_dir] .I [-http_proxy $site[:$port]] [-ftp_proxy $site[:$port]] .I [-ssl_proxy $site[:$port]] [-gopher_proxy $site[:$port]] .I [-ftp_httpgw/-noftp_httpgw] [-ftp_dirtyproxy/-noftp_dirtyproxy] .I [-gopher_httpgw/-nogopher_httpgw] .I [-noFTP/-FTP] [-noHTTP/-HTTP] [-noSSL/-SSL] [-noGopher/-Gopher] .I [-FTPdir/-noFTPdir] .I [-noCGI/-CGI] .I [-FTPlist/-noFTPlist] [-FTPhtml/-noFTPhtml] .I [-noRelocate/-Relocate] [-force_reget/-noforce_reget] .I [-nocache/-cache] [-check_size/-nocheck_size] .I [-noRobots/-Robots] [-noEnc/-Enc] .I [-auth_name $user] [-auth_passwd $pass] [-auth_scheme 1/2/3/4/user/Basic/Digest/NTLM] .I [-auth_reuse_nonce/-no_auth_reuse_nonce] .I [-http_proxy_user $user] [-http_proxy_pass $pass] [-http_proxy_auth 1/2/3/4/user/Basic/Digest/NTLM] .I [-auth_reuse_proxy_nonce/-no_auth_reuse_proxy_nonce] .I [-ssl_key_file $file] [-ssl_cert_file $file] [-ssl_cert_passwd $pass] .I [-from $email] [-send_from/-nosend_from] [-identity $str] [-auto_referer/-noauto_referer] .I [-referer/-noreferer] .I [-alang $list] [-acharset $list] .I [-retry $nr] [-nregets $nr] [-nredirs $nr] [-rollback $nr] [-sleep $nr] [-timeout $nr] .I [-preserve_time/-nopreserve_time] [-preserve_perm/-nopreserve_perm] [-preserve_slinks/-nopreserve_slinks] .I [-bufsize $nr] [-maxrate $nr] [-minrate $nr] .I [-user_condition $str] .I [-cookie_file $file] [-cookie_send/-nocookie_send] [-cookie_recv/-nocookie_recv] [-cookie_update/-nocookie_update] [-cookies_max $nr] [-disabled_cookie_domains $list] .I [-disable_html_tag $TAG,[$ATTRIB][;...]] [-enable_html_tag $TAG,[$ATTRIB][;...]] .I [-tr_del_chr $str] [-tr_str_str $str1 $str2] [-tr_chr_chr $chrset1 $chrset2] .I [-index_name $str] [-store_index/-nostore_index] .I [-store_name $str] [-debug/-nodebug] [-debug_level $level] .I [-browser $str] .I [-urls_file $file] .I [-file_quota $nr] [-trans_quota $nr] [-fs_quota $nr] [-enable_js/-disable_js] .I [-fnrules $t $m $r] [-store_info/-nostore_info] .I [-all_to_local/-noall_to_local] [-sel_to_local/-nosel_to_local] .I [-all_to_remote/-noall_to_remote] .I [-url_strategie $strategie] .I [-remove_adv/-noremove_adv] [-adv_re $RE] .I [-check_bg/-nocheck_bg] .I [-send_if_range/-nosend_if_range] .I [-sched_cmd $str] .I [-unique_log/-nounique_log] .I [-post_cmd $str] [-ssl_version $v] [-unique_sslid/-nounique_sslid] .I [-aip_pattern $re] [-dip_pattern $re] .I [-use_http11/-nouse_http11] .I [-local_ip $addr] .I [-request $req] .I [-formdata $req] [-httpad $str] .I [-nthreads $nr] [-immesg/-noimmesg] .I [-dumpfd $nr] [-dump_urlfd $nr] .I [-unique_name/-nounique_name] .I [-leave_site_enter_dir/-dont_leave_site_enter_dir] .I [-max_time $nr] .I [-del_after/-nodel_after] [-singlepage/-nosinglepage] .I [-dump_after/-nodump_after] [-dump_response/-nodump_response] .I [-auth_ntlm_domain $str] [-auth_proxy_ntlm_domain $str] .I [-js_pattern $re] [-follow_cmd $str] .I [-retrieve_symlink/-noretrieve_symlink] .I [-js_transform $p $t $h $a] [-js_transform2 $p $t $h $a] .I [-ftp_proxy_user $str] [-ftp_proxy_pass $str] .I [-limit_inlines/-dont_limit_inlines] .I [-ftp_list_options $str] [-fix_wuftpd_list/-nofix_wuftpd_list] .I [-post_update/-nopost_update] [-info_dir $dir] .I [-mozcache_dir $dir] [-aport $list] [-dport $list] .I [-hack_add_index/-nohack_add_index] .I [-default_prefix $str] [-rsleep/-norsleep] .I [-ftp_login_handshake $host $handshake] .I [-js_script_file $file] .I [-dont_touch_url_pattern $pat] .I [-dont_touch_url_rpattern $pat] .I [-dont_touch_tag_rpattern $pat] .I [-tag_pattern $tag $attrib $url] .I [-tag_rpattern $tag $attrib $url] .I [-nss_cert_dir $dir] .I [-nss_accept_unknown_cert/-nonss_accept_unknown_cert] .I [-nss_domestic_policy/-nss_export_policy] .I [-[no]verify] .I [-tlogfile $file] .I [-trelative {object | program}] .I [-transparent_proxy FQDN[:port]] .I [-transparent_ssl_proxy FQDN[:port]] .I [-sdemo] .I [-noencode] .I [URLs] .br .PP .B pavuk -mode {normal | singlepage | singlereget} .I [-base_level $nr] .br .PP .B pavuk -mode sync .I [-ddays $nr] [-subdir $dir] [-remove_old/-noremove_old] .br .PP .B pavuk -mode resumeregets .I [-subdir $dir] .br .PP .B pavuk -mode linkupdate .I [-X] [-h] [-v] [-cdir $dir] [-subdir $dir] [-scndir $dir] [-scenario $str] .PP .B pavuk -mode reminder .I [-remind_cmd $str] .br .PP .B pavuk -mode mirror .I [-subdir $dir] [-remove_old/-noremove_old] [-remove_before_store/-noremove_before_store] [-always_mdtm/-noalways_mdtm] .br .PP .SH DESCRIPTION .sp This manual page describes how to use pavuk. Pavuk can be used to mirror contents of internet/intranet servers and to maintain copies in a local tree of documents. Pavuk stores retrieved documents in locally mapped disk space. The structure of the local tree is the same as the one on the remote server. Each supported service (protocol) has its own subdirectory in the local tree. Each referenced server has its own subdirectory in these protocols subdirectories; followed by the port number on which the service resides, delimited by character '_'. Then the directory structure follows. As of version 0.9pl19 this can be be changed. With the option .B -fnrules you can change the default layout of the local document tree, without losing link consistency. .br With .B pavuk it is possible to have up-to-date copies of remote documents in the local disk space. .br As of version 0.3pl2, pavuk can automatically restart broken connections, and reget partial content from an FTP server (which must support the .B REST command), from a properly configured HTTP/1.1 server, or from a HTTP/1.0 server which supports .B Ranges. .br As of version 0.6 it is possible to handle configurations via so called scenarios. The best way to create such a configuration file is to use the X Window interface and simply save the created configuration. The other way is to use the -dumpscn switch. .br As of version 0.7pl1 it is possible to store authentification information into an authinfo file, which pavuk can then parse and use. .br As of version 0.8pl4 pavuk can fetch documents for use in a local proxy/cache server without storing them to local documents tree. .br As of version 0.9pl4 pavuk supports .B SOCKS (4/5) proxies if you have the required libraries. .br As of version 0.9pl12 pavuk can preserve permissions of remote files and symbolic links, so it can be used for powerful FTP mirroring. .br Pavuk supports SSL connections to FTP servers, if you specify ftps:// URL instead of ftp://. .br Pavuk can automatically handle file names with unsafe characters for filesystem. This is yet implemented only for Win32 platform and it is hard coded. .br Pavuk can now use \fBHTTP/1.1\fR protocol for communication with HTTP servers. It can use persistent connections, so one TCP connection should be used to transfer several documents without closing it. This feature saves network bandwidth and also speedup network communication. .br Pavuk can do configurable \fBPOST\fR requests to HTTP servers and support also file uploading via HTTP POST request. .br Pavuk can automatically fill found HTML forms, if user will supply data for its fields before with option \fB-formdata\fR. .br Pavuk can run configurable number of concurrently running downloading threads when compiled with multithreading support. .SH Format of supported URLs .sp .sp \fIHTTP\fR .br http://[[user][:password]@]host[:port][/document] .br [[user][:password]@]host[:port][/document] .sp \fIHTTPS\fR .br https://[[user][:password]@]host[:port][/document] .br ssl[.domain][:port][/document] .sp \fIFTP\fR .br ftp://[[user][:password]@]host[:port][/relative_path][;type=x] .br ftp://[[user][:password]@]host[:port][//absolute_path][;type=x] .br ftp[.domain][:port][/document][;type=x] .sp \fIFTPS\fR .br ftps://[[user][:password]@]host[:port][/relative_path][;type=x] .br ftps://[[user][:password]@]host[:port][//absolute_path][;type=x] .br ftps[.domain][:port][/document][;type=x] .sp \fIGopher\fR .br gopher://host[:port][/type[document]] .br gopher[.domain][:port][/type[document]] .SH Default mapping of URLs to local filenames .sp .sp \fIHTTP\fR .br http://[[user][:password]@]host[:port][/document][?query] .br to .br http/host_port/[document][?query] .sp \fIHTTPS\fR .br https://[[user][:password]@]host[:port][/document][?query] .br to .br https/host_port/[document][?query] .sp \fIFTP\fR .br ftp://[[user][:password]@]host[:port][/path] .br to .br ftp/host_port/[path] .sp \fIFTPS\fR .br ftps://[[user][:password]@]host[:port][/path] .br to .br ftps/host_port/[path] .sp \fIGopher\fR .br gopher://host[:port][/type[document]] .br to .br gopher/host_port/[type[document]] \fINOTE:\fR Pavuk will use the string with which it queries the target server as the name of the results file. This file name may, in some cases, contain punctuations such as \fB$,?,=,&\fR etc. Such punctuation can cause problems when you are trying to browse downloaded files with your browser or you are trying to process downloaded files with shell scripts or view files with file management utilities which reference the name of the results file. If you believe that this maybe causing problems for you, then you can remove all punctuation from the result file name with the option: \fB-tr_del_chr [:punct:]\fR or with other options for adjusting filenames. .SH OPTIONS .sp All options are case insensitive. .SH List of options chapters .sp .I Mode .br .I Help .br .I Indicate/Logging/Interface options .br .I Netli options .br .I Special start .br .I Scenario/Task options .br .I Directory options .br .I Preserve options .br .I Proxy options .br .I Proxy Authentification .br .I Protocol/Download Option .br .I Authentification .br .I Site/Domain/Port Limitation Options .br .I Limitation Document properties .br .I Limitation Document name .br .I Limitation Protocol Option .br .I Other Limitation Options .br .I Javascript support .br .I Cookie .br .I HTML rewriting engine tuning options .br .I Filename/URL Conversion Option .br .I Other Options .br .SH Mode .sp .TP .I -mode {normal, linkupdate, sync, singlepage, singlereget, resumeregets} Set operation mode. .br .B normal - retrieves recursive documents .br .B linkupdate - update remote URLs in local HTML documents to local URLs if these URLs exist in the local tree .br .B sync - synchronize remote documents with local tree (if a local copy of a document is older than remote, the document is retrieved again, otherwise nothing happens) .br .B singlepage - URL is retrieved as one page with all inline objects (picture, sound ...) this mode is now obsoleted by \fB-singlepage\fR option. .br .B resumeregets - pavuk scans the local tree for files that were not retrieved fully and retrieves them again (uses partial get if possible) .br .B singlereget - get URL until it is retrieved in full .br .B dontstore - transfer page from server, but don't store it to the local tree. This mode is suitable for fetching pages that are held in a local proxy/cache server. .br .B reminder - used to inform the user about changed documents .br .B ftpdir - used to list of contents of FTP directories .br .sp default operation mode is .B normal mode. .SH Help .sp .TP .I -h Print long verbose help message .TP .I -v Show version informations and configuration at compilation time. .SH Indicate/Logging/Interface options .sp .TP .I -quiet Don't show any messages on the screen. .TP .I -verbose Force to show output messages on the screen (default) .TP .I -progress/-noprogress Show retrieving progress while running in the terminal (default is progress off) .TP .I -stime/-nostime Show start and end time of transfer. (default isn't this information shown) .TP .I -xmaxlog $nr Maximum number of log lines in the Log widget. 0 means unlimited. This option is available only when compiled with the GTK+ GUI. (default value is 0) .TP .I -logfile $file File where all produced messages are stored. .TP .I -unique_log/-nounique_log When logfile as specified with the option .B -logfile is already used by another process, try to generate new unique name for the log file. (default is this option turned off) .TP .I -slogfile $file File to store short logs in. This file contains one line of informations per processed document. This is meant to be used in connection with any sort of script to produce some statistics, for validating links on your website, or for generating simple sitemaps. Multiple pavuk processes can use this file concurrently, without overwriting each others entries. Record structure: .br .sp .RS .nf - \fBPID\fR of pavuk process - \fBTIME\fR current time - \fBCOUNTER\fR in the format current/total number of URLs - \fBSTATUS\fR contains the type of the error: FATAL, ERR, WARN or OK - \fBERRCODE\fR is the number code of the error (see errcode.h in pavuk sources) - \fBURL\fR of the document - \fBPARENTURL\fR first parent document of this URL (when it doesn't have parent - [none]) - \fBFILENAME\fR is the name of the local file the document is saved under - \fBSIZE\fR size of requested document if known - \fBDOWNLOAD_TIME\fR time which takes downloading of this document in format seconds.mili_seconds - \fBHTTPRESP\fR contains the first line of the HTTP server response .fi .RE .TP .I -language $str Native language that pavuk should use for communication with its user (works only when there is a message catalog for that language) \fBGNU gettext\fR support (for message internationalization) must also be compiled in. Default language is taken from your NLS environment variables. .TP .I -gui_font $font Font used in the GUI interface. To list available X fonts use the .B xlsfonts command. This option is available only when compiled with GTK+ GUI support. .SH Netli options .SP .TP .I -[no]read_css Enable or disable fetching objects mentioned in style sheets. .SP .TP .I -[no]verify Enable or disable verifying server CERTS in SSL mode. .SP .TP .I -tlogfile $file Turn on Netli logging with output to specified file. .SP .TP .I -trelative {object | program} Make Netli timings relative to the start of the first object or the program. .SP .TP .I -transparent_proxy FQDN[:port] When processing URL, send the original, but send it to the IP address at FQDN .SP .TP .I -transparent_ssl_proxy FQDN[:port] When processing HTTPS URL, send the original, but send it to the IP address at FQDN .SP .TP .I -sdemo Output in sdemo compatible format. This is only used by sdemo. (For now it simply means output '-1' rather than '*' when measurements are invalid.) .SP .TP .I -noencode Do not escape characters that are "unsafe" in URLS. .SH Special start .sp .TP .I -X Start program with X Window interface (if compiled with support for GTK+). Pavuk as default starts without GUI, and behaves as regular commandline tool. .TP .I -runX When used together with the \fB-X\fR option, pavuk starts processing of URLs immediately after the GUI window is launched. Without the \fB-X\fR given, this option doesn't have any effect. Only available when compiled with GTK+ support . .TP .I -bg/-nobg This option allows pavuk to detach from its terminal and run in background mode. Pavuk will not output any messages to the terminal than. If you want to see messages, you have to use the .B -log_file option to specify a file where messages will be written. Default pavuk executes at foreground. .TP .I -check_bg/-nocheck_bg Normally, programs sent into the background after being run in foreground continue to output messages to the terminal. If this option is activated, pavuk checks if it is running as background job and will not write any messages to the terminal in this case. After it becomes a foreground job again, it will start writing messages to terminal in the normal way. This option is available only when your system supports retrieving of terminal info via \fBtc*()\fR functions. .TP .I -prefs/-noprefs When you turn this option on, pavuk will preserve all settings when exiting, and when you run pavuk with GUI interface again, all settings will be restored. The settings will be stored in the .B ~./pavuk_prefs file. Default pavuk want restore its option when started. This option is available only when compiled with GTK+. .TP .I -schedule $time Execute pavuk at the time specified as parameter. The Format of the $time parameter is YYYY.MM.DD.hh.mm. You need a properly configured scheduling with the \fBat\fR command on your system for using this option. If default configuration (at -f %f %t %d.%m.%Y) of scheduling command won't work on your system, try to adjust it with \fB-sched_cmd\fR option. .TP .I -reschedule $nr Execute pavuk periodically with $nr hours period. You need properly configured scheduling with the \fBat\fR command on your system for using this option. .TP .I -sched_cmd $str Command to use for scheduling. Pavuk explicitly supports scheduling with \fBat\fR $str should contain regular characters and macros, escaped by \fB%\fR character. Supported macros are: .br .in +3 .B %f - for script filename .br .B %t - for time (in format HH:MM) .br - all macros as supported by the \fBstrftime()\fR function .in -3 .TP .I -urls_file $file If you use this option, pavuk will read URLs from $file before it starts processing. In this file, each URL needs to be on a separate line. After the last URL, a single dot \fB.\fR followed by a LF (line-feed) character denotes the end. Pavuk will start processing right after all URLs have been read. If \fB$file\fR is given as the \fB-\fR character, standard input will be read. .TP .I -store_info/-nostore_info This option causes pavuk to store information about each document into a separate file in the \fB.pavuk_info\fR directory. This file is used to store the original URL from which the document was downloaded. For files that are downloaded via HTTP or HTTPS protocols, the whole HTTP response header is stored there. I recommend to use this option when you are using options that change the default layout of the local document tree, because this info file helps pavuk to map the local filename to the URL. This option is also very useful when different URLs have the same filename in the local tree. When this occurs, pavuk detects this using info files, and it will prefix the local name with numbers. At default is disabled storing of this extra informations. .TP .I -info_dir $dir You can set with this option location of separate directory for storing info files created when \fB-store_info\fR option is used. This is useful when you don't want to mix in destination directory the info files with regular document files. The structure of the info files is preserved, just are stored in different directory. .TP .I -request $req With this option you can specify extended informations for starting URLs. With this option you can specify query data for \fBPOST\fR or \fBGET\fR . Current syntax of this option is : \fBURL:["]$url["] [METHOD:["]{GET|POST}["]] [ENCODING:["]{u|m}["]] [FIELD:["]variable=value["]] [FILE:["]variable=filename["] [LNAME:["]local_filename["]]\fR .sp .RS .nf - \fBURL:\fR specifies request URL - \fBMETHOD:\fR specifies request method for URL and is one of \fIGET\fR or \fIPOST\fR. - \fBENCODING:\fR specifies encoding for request body data. \fBm\fR is for \fImultipart/form-data\fR encoding \fBu\fR is for \fIapplication/x-www-form-urlencoded\fR encoding - \fBFIELD:\fR specifies field of request data in format \fBvariable=value\fR. For encoding of special characters in \fIvariable\fR and \fIvalue\fR you can use same encoding as is used in \fBapplication/x-www-form-urlencoded\fR encoding. - \fBFILE:\fR specifies special field of query, which is used to specify file for \fBPOST\fR based file upload. - \fBLNAME:\fR specifies localname for this request .fi .RE When you need to use inside the \fBFIELD:\fR and \fBFILE:\fR fields of request specification special characters, you should use the \fBapplication/x-www-form-urlencoded\fR encoding of characters. It means all nonASCII characters, quote character ("), space character ( ), ampersand character (&), percent character (%) and equal character (=) should be encoded in form \fB%xx\fR where \fBxx\fR is hexadecimal representation of ASCII value of character. So for example \fI%\fR character should be encoded like \fI%25\fR. .TP .I -formdata $req This option gives you chance to specify contents for HTML forms found during traversing document tree. Current syntax of this option is same as for \fB-request\fR option, but \fBENCODING:\fR and \fBMETHOD:\fR are meaningless in this option semantics. In \fBURL:\fR you have to specify HTML form action URL, which will be matched against action URLs found in processed HTML documents. If pavuk finds action URL which matches that supplied in \fB-formdata\fR option, pavuk will construct \fBGET\fR or \fBPOST\fR request from data supplied in this option and from default form field values supplied in HTML document. Values supplied on commandline have precedence before that supplied in HTML file. .TP .I -nthreads $nr By means of this option you can specify how many concurrent threads will download documents. Default pavuk executes 3 concurrent downloading threads. This option is available only when pavuk is compiled to support multithreading. .TP .I -immesg/-noimmesg Default pavuks behavior when running multiple downloading threads is to buffer all output messages in memory buffer and flush that buffered data just when thread finishes processing of one document. With this option you can change this behavior to see the messages immediately when it is produced. It is only usable when you want to debug some specials in multithreading environment. This option is available only when pavuk is compiled to support multithreading. .TP .I -dumpfd $nr For scripting is sometimes usable to be able to download document directly to pipe or variable instead of storing it to regular file. In such case you can use this option to dump data for example to stdout ($nr = 1). .TP .I -dump_after/-nodump_after While using \fB-dumpfd\fR option in multithreaded pavuk, it is required to dump document in one moment because documents downloaded in multiple threads can overlap. This option is also useful when you want to dump document after pavuk adjusts links inside HTML documents. .TP .I -dump_response/-nodump_response This option have effect only when used with \fB-dumpfd\fR option. It is used to dump HTTP response headers. .TP .I -dump_urlfd $nr When you will use this option, pavuk will output all URLs found in HTML documents to file descriptor $nr. You can use this option to extract and convert all URLs to absolute. .SH Scenario/Task options .sp .TP .I -scenario $str Name of scenario to load and/or run. Scenarios are files with a structure similar to the \fB.pavukrc\fR file. Scenarios contain saved configurations. You can use it for periodical mirroring. Parameters from scenarios specified at the command line can be overwritten by command line parameters. To be able to use this option, you need to specify scenario base directory with option \fB-scndir\fR. .TP .I -dumpscn $filename Store actual configuration into scenario file with name \fB$filename\fR. This is useful to quickly create pre-configured scenarios for manual editing. .SH Directory options .sp .TP .I -msgcat $dir Directory which contains the message catalog for pavuk. If you do not have permission to store a pavuk message catalog in the system directory, you should simply create similar structure of directories in your home directory as it is on your system. .sp .B For example: .sp Your native language is German, and your home directory is /home/jano. .sp You should at first create the directory /home/jano/locales/de/LC_MESSAGES/, then put the German pavuk.mo there and set -msgcat to /home/jano/locales/. If you have properly set locale environment values, you will see pavuk speaking German. This option is available only when you compiled in support for GNU gettext messages internationalization. .TP .I -cdir $dir Directory where are all retrieved documents are stored. If not specified, the current directory is used. If the specified directory doesn't exist, it will be created. .TP .I -scndir $dir Directory in which your scenarios are stored. You must use this option when you are loading or storing scenario files. .SH Preserve options .sp .TP .I -preserve_time/-nopreserve_time Store downloaded document with same modification time as on the remote site. Modification time will be set only when such information is available (some FTP servers do not support the \fBMDTM\fR command, and some documents on HTTP servers are created online so pavuk can't retrieve the modification time of this document). At default modification time of documents isn't preserved. .TP .I -preserve_perm/-nopreserve_perm Store downloaded document with the same permissions as on the remote site. This option has effect only when downloading a file through FTP protocol and assumes that the \fB-ftplist\fR option is used. At default permissions are not preserved. .TP .I -preserve_slinks/-nopreserve_slinks Set symbolic links to point exactly to same location as on the remote server; don't do any relocations. This option has effect only when downloading file through FTP protocol and assumes that the \fB-ftplist\fR option is used. Default symbolic links are not preserved, and are retrieved as regular documents with full contents of linked file. .sp For example, assume that on the FTP server ftp.xx.org there is a symbolic link /pub/pavuk/pavuk-current.tgz, which points to /tmp/pub/pavuk-0.9pl11.tgz. Pavuk will create symbolic link ftp/ftp.xx.org_21/pub/pavuk/pavuk-current.tgz .br if option -preserve_slinks will be used this symbolic link will point to /tmp/pub/pavuk-0.9pl11.tgz .br if option -preserve_slinks want be used, this symbolic link will point to ../../tmp/pub/pavuk-0.9pl11.tgz .TP .I -retrieve_symlink/-noretrieve_symlink Retrieve files behind symbolic links instead of replicating symlinks in local tree. .SH Proxy options .sp .TP .I -http_proxy $site[:$port] If this parameter is used, then all HTTP requests are going through this proxy server. This is useful if your site resides behind a firewall, or if you want to use a HTTP proxy cache server. The default port number is 8080. Pavuk allows you to specify multiple HTTP proxies (using multiple -http_proxy options) and it will rotate proxies with roundrobin priority disabling proxies with errors. .TP .I -nocache/-cache Use this option whenever you want to get the document directly from the site and not from your HTTP proxy cache server. Default pavuk allows transfer of document copies from cache. .TP .I -ftp_proxy $site[:$port] If this parameter is used, then all FTP requests are going through this proxy server. This is useful when your site resides behind a firewall, or if you want to use FTP proxy cache server. The default port number is 22. Pavuk supports three different types of proxies for FTP, see the options \fB-ftp_httpgw, -ftp_dirtyproxy.\fR If none of the mentioned options is used, then pavuk assumes a regular FTP proxy with \fBUSER user@host\fR connecting to remote FTP server. .TP .I -ftp_httpgw/-noftp_httpgw The specified FTP proxy is a HTTP gateway for the FTP protocol. Default FTP proxy is regular FTP proxy. .TP .I -ftp_dirtyproxy/-noftp_dirtyproxy The specified FTP proxy is a HTTP proxy which supports a \fBCONNECT\fR request (pavuk should use full FTP protocol, except of active data connections). Default FTP proxy is regular FTP proxy. If both -ftp_dirtyproxy and -ftp_httpgw are specified, -ftp_dirtyproxy is preferred. . .TP .I -gopher_proxy $site[:$port] Gopher gateway or proxy/cache server. .TP .I -gopher_httpgw/-nogopher_httpgw The specified Gopher proxy server is a HTTP gateway for Gopher protocol. When \fB-gopher_proxy\fR is set and this \fB-gopher_httpgw\fR option isn't used, pavuk is using proxy as HTTP tunnel with \fBCONNECT\fR request to open connections to Gopher servers. .TP .I -ssl_proxy $site[:$port] SSL proxy (tunneling) server [as that in CERN httpd + patch or in Squid] with enabled \fBCONNECT\fR request (at least on port 443). This option is available only when compiled with SSL support (you need the SSleay or OpenSSL libraries with development headers) .SH Proxy Authentification .sp .TP .I -http_proxy_user $user Username for HTTP proxy authentification. .TP .I -http_proxy_pass $pass Password for HTTP proxy authentification. .TP .I -http_proxy_auth {1/2/3/4/user/Basic/Digest/NTLM} Authentification scheme for proxy access. Similar meaning as the \fB-auth_scheme\fR option (see help for this option for more details). Default is 2 (Basic scheme). .TP .I -auth_proxy_ntlm_domain $str NT or LM domain used for authorization again HTTP proxy server when NTLM authentification scheme is required. This option is available only when compiled with OpenSSL or libdes libraries. .TP .I -auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce When using HTTP Proxy Digest access authentification scheme use first received nonce value in multiple following requests. .TP .I -ftp_proxy_user $user Username for FTP proxy authentification. .TP .I -ftp_proxy_pass $pass Password for FTP proxy authentification. .SH Protocol/Download Options .sp .TP .I -ftp_passive Uses passive ftp when downloading via ftp. .TP .I -ftp_active Uses active ftp when downloading via ftp. .TP .I -active_ftp_port_range $min:$max This option permits to specify the ports used for active ftp. This permits easier firewall configuration since the range of ports can be restricted. .sp Pavuk will randomly choose a number from within the specified range until an open port is found. Should no open ports be found within the given range, pavuk will default to a normal kernel-assigned port, and a message (debug level net) is output. .sp The port range selected must be in the non-privileged range (eg. greater than or equal to 1024); it is STRONGLY RECOMMENDED that the chosen range be large enough to handle many simultaneous active connections (for example, 49152-65534, the IANA-registered ephemeral port range). .TP .I -always_mdtm/-noalways_mdtm Force pavuk to always use "MDTM" to determine the file modification time and never uses cached times determined when listing the remote files. .TP .I -remove_before_store/-noremove_before_store Force unlink'ing of files before new content is stored to a file. This is helpful if the local files are hardlinked to some other directory and after mirroring the hardlinks are checked. All "broken" hardlinks indicate a file update. .TP .I -retry $nr Set the number of attempts to transfer processed document. Default set to 1, this mean pavuk will retry once to get documents which failed on first attempt. .TP .I -nregets $nr Set the number of allowed regets on a single document, after a broken transfer. Default value for this option is 2. .TP .I -nredirs $nr Set number of allowed HTTP redirects. (use this for prevention of loops) Default value for this option is 5, and conform to HTTP specification. .TP .I -force_reget/-noforce_reget Force reget'ing of the whole document after a broken transfer when the server doesn't support retrieving of partial content. Pavuk default behavior is to stop getting documents which don't allow restarting of transfer from specified position. .TP .I -timeout $nr Timeout for stalled connections in minutes. This value is also used for connection timeouts. For sub-minute timeouts you can use floating point numbers. Default timeout is 0, an that means timeout checking is disabled. .TP .I -noRobots/-Robots This switch suppresses the use of the \fBrobots.txt\fR standard, which is used to restrict access of Web robots to some locations on the web server. Default is allowed checking of robots.txt files on HTTP servers. Enable this option always when you are downloading huge sets of pages with unpredictable layout. This prevents you from upsetting server administrators :-). .TP .I -noEnc/-Enc This switch suppresses using of \fBgzip\fR or \fBcompress\fR or \fBdeflate\fR encoding in transfer. I don't know if some servers are broken or what, but they are propagating that MIME type application/gzip or application/compress as encoded. Turn this option off, when you doesn't have libz support compiled in and also \fBgzip\fR program which is used to decode document encoded this way. At default is decoding of downloaded document disabled. .TP .I -check_size/-nocheck_size The option -nocheck_size should be used if you are trying to download pages from a HTTP server which sends a wrong \fBContent-Length:\fR field in the MIME header of response. Default pavuk behavior is to check this field and complain when something is wrong. .TP .I -maxrate $nr If you don't want to give all your transfer bandwidth to pavuk, use this option to set pavuk's maximum transfer rate. This option accepts a floating point number to specify the transfer rate in kB/s. If you want get optimal settings, you also have to play with the size of the read buffer (option \fB-bufsize\fR) because pavuk is doing flow control only at application level. At default pavuk use full bandwidth. .TP .I -minrate $nr If you hate slow transfer rates, this option allows you to break transfers with slow speed. You can set the minimum transfer rate, and if the connection gets slower than the given rate, the transfer will be stopped. The minimum transfer rate is given in kB/s. At default pavuk doesn't check this limit. .TP .I -bufsize $nr This option is used to specify the size of the read buffer (default size: 32kB). If you have a very fast connection, you may increase the size of the buffer to get a better read performance. If you need to decrease the transfer rate, you may need to decrease the size of the buffer and set the maximum transfer rate with the \fB-maxrate\fR option. This option accepts the size of the buffer in kB. .TP .I -fs_quota $nr If you are running pavuk on a multiuser system, you may need to avoid filling up your file system. This option lets you specify how many space must remain free. If pavuk detects an underrun of the free space, it will stop downloading files. Specify this quota in kB. Default value is 0, and that mean no checking of this quota. .TP .I -file_quota $nr This option is useful when you want to limit downloading of big files, but want to download at least $nr kilobytes from big files. A big file will be transferred, and when it reaches the specified size, transfer will break. Such document will be processed as properly downloaded, so be careful when using this option. At default pavuk is transferring full size of documents. .TP .I -trans_quota $nr If you are aware that your selection should address a big amount of data, you can use this option to limit the amount of transferred data. Default is by size unlimited transfer. .TP .I -max_time $nr Set maximum amount of time for program run. After time is exceeded, pavuk will stop downloading. Time is specified in minutes. Default value is 0, and it means downloading time is not limited. .TP .I -url_strategy $strategy This option allows you to specify a downloading order for URLs in document tree. This option accepts the following strings as parameters : .br .sp .RS .B level - will order URLs as it loads it from HTML files (default) .br .B leveli - as previous, but inline objects URLs come first .br .B pre - will insert URLs from actual HTML document at start, before other .br .B prei - as previous, but inline objects URLs come first .br .RE .TP .I -send_if_range/-nosend_if_range Send \fBIf-Range:\fR header in HTTP request. I found out, that some HTTP servers (greetings, MS :-)) are sending different \fBETag:\fR fields in different responses for the same, unchanged document. This causes problems when pavuk attempts to reget a document from such a server: pavuk will remember the old ETag value and uses it it following requests for this document. If the server checks it with the new ETag value and it differs, it will refuse to send only part of the document, and start the download from scratch. .TP .I -ssl_version $v Set required SSL protocol version for SSL communication. \fB$v\fR is one of ssl2, ssl23, ssl3 or tls1. This option is available only when compiled with SSL support. Default is ssl23. .TP .I -unique_sslid/-nounique_sslid This option can be used if you want to use a unique \fBSSL ID\fR for all SSL sessions. Default pavuk behavior is to negotiate each time new session ID for each connection. This option is available only when compiled with SSL support. .TP .I -use_http11/-nouse_http11 This option is used to switch between HTTP/1.0 and HTTP/1.1 protocol used with HTTP servers. Now is using of HTTP/1.1 protocol not default because its implementation is very fresh and not 100% tested. Even though using of HTTP/1.1 is very recommended, because it is faster than HTTP/1.0 and uses less network bandwidth for initiating connections. In any further version I will activate using of HTTP/1.1 as default. .TP .I -local_ip $addr You can use this option when you want to use specified network interface for communication with other hosts. This option is suitable for multihomed hosts with several network interfaces. Address should be entered as regular IP address or as host name. .TP .I -identity $str This option allows you to specify content of \fBUser-Agent:\fR field of HTTP request. This is usable, when scripts on remote server returns different document on same URL for different browsers, or if some HTTP server refuse to serve document for Web robots like pavuk. Default pavuk sends in \fBUser-Agent:\fR field \fBpavuk/$VERSION\fR string. .TP .I -auto_referer/-noauto_referer This option forces pavuk to send HTTP \fBReferer:\fR header field with starting URLs. Content of this field will be self URL. Using this option is required, when remote server checks the Referer: field. At default pavuk wont send Referer: field with starting URLs. .TP .I -referer/-noreferer This option allows to enable and disable the transmission of HTTP \fBReferer:\fR header field. At default pavuk sends Referer: field. .TP .I -httpad $str In some cases you may want to add user defined fields to HTTP/HTTPS requests. This option is exactly for this purpose. In \fB$str\fR you can directly specify content of additional header. If you specify only raw header, it will be used only for starting requests. When you want to use this header with each request while crawling, prefix the header with \fB+\fR character. .TP .I -del_after/-nodel_after This option allows you to delete FILES from REMOTE server, when download is properly finished. At default is this option off. .TP .I -FTPlist/-noFTPlist When option -FTPlist will be used, pavuk will retrieve content of FTP directories with FTP command \fBLIST\fR instead of \fBNLST\fR. So the same listing will be retrieved as with "ls -l" UNIX command. This option is required if you need to preserve permissions of remote files or you need to preserve symbolic links. Pavuk supports wide listing on FTP servers with regular \fBBSD\fR or \fBSYSV\fR style "ls -l" directory listing, on FTP servers with \fBEPFL\fR listing format, \fBVMS\fR style listing, \fBDOS/Windows\fR style listing and \fBNovel\fR listing format. Default pavuk behavior is to use NLST fro FTP directory listings. .TP .I -ftp_list_options $str Some FTP servers require to supply extra options to LIST or NLST FTP commands to show all files and directories properly. But be sure not to use any extra options which can reformat output of the listing. Useful is especially \fB-a\fR option which force FTP server to show also dot files and directories and with broken WuFTP servers it also helps to produce full directory listings not just files. .TP .I -fix_wuftpd/-nofix_wuftpd This option is result of several attempts to to get working properly the \fB-remove_old\fR option with WuFTPd server when \fB-ftplist\fR option is used. The problem is that FTP command LIST on WuFTPd don't mind when trying to list nonexisting directory, and indicates success in FTP response code. When you activate this option, pavuk uses extra FTP command (STAT -d dir) to check whether the directory really exists. Don't use this option until you are sure that you really need it! .SH Authentification .sp .TP .I -auth_file $file File where you have stored authentification information for access to some service. For file structure see below in \fBFILES\fR section. .TP .I -auth_name $user If you are using this parameter, program is doing authentification with each HTTP access to document. Use this only if you know that only one HTTP server could be accessed or use \fB-asite\fR option to specify site to which you use authentification. Else your auth parameters will be sent to each accessed HTTP server. .TP .I -auth_passwd $passwd Value of this parameter is used as password for authentification .TP .I -auth_scheme {1/2/3/4/user/Basic/Digest/NTLM} This parameter specifies used authentification scheme. .br .B 1 or user means .B user authentification scheme is used as defined in HTTP/1.0 or HTTP/1.1. Password and user name are sent unencoded. .br .B 2 or Basic means .B Basic authentification scheme is used as defined in HTTP/1.0. Password and user name are sent BASE64 encoded. .br .B 3 or Digest means .B Digest access authentification scheme based on MD5 checksums as defined in RFC2069. .br .B 4 or NTLM means .B NTLM proprietary access authentification scheme used by Microsoft IIS or Proxy servers. When you use this scheme, you must also specify NT or LM domain with option \fB-auth_ntlm_domain\fR. This scheme is supported only when compiled with OpenSSL or libdes libraries. .TP .I -auth_ntlm_domain $str NT or LM domain used for authorization again HTTP server when NTLM authentification scheme is required. This option is available only when compiled with OpenSSL or libdes libraries. .TP .I -auth_reuse_nonce/-noauth_reuse_nonce While using HTTP Digest access authentification scheme use first received nonce value in more following requests. Default pavuk negotiates nonce for each request. .TP .I -ssl_key_file $file File with public key for SSL certificate (learn more from SSLeay or OpenSSL documentation) This option is available only when compiled with SSL support (you need SSleay or OpenSSL libraries and development headers) .TP .I -ssl_cert_file $file Certificate file in PEM format (learn more from SSLeay or OpenSSL documentation) This option is available only when compiled with SSL support (you need SSleay or OpenSSL libraries and development headers) .TP .I -ssl_cer_passwd $str Password used to generate certificate (learn more from SSLeay or OpenSSL documentation) This option is available only when compiled with SSL support (you need SSLeay or OpenSSL libraries and development headers) .TP .I -nss_cert_dir $dir Config directory for NSS (Netscape SSL implementation) certificates. Usually ~/.netscape (created by Netscape communicator/navigator) or profile directory below ~/.mozilla (created by Mozilla browser). The directory should contain \fBcert7.db\fR and \fBkey3.db\fR files. If you don't use Mozilla nor Netscape, you must create this files by utilities distributed with NSS libraries. Pavuk opens certificate database only readonly. This option is available only when pavuk is compiled with SSL support provided by Netscape NSS SSL implementation. .TP .I [-nss_accept_unknown_cert/-nonss_accept_unknown_cert] By default will pavuk reject connection to SSL server which certificate is not stored in local certificate database (set by \fB-nss_cert_dir\fR option). You must explicitly force pavuk to allow connection to servers with unknown certificates. This option is available only when pavuk is compiled with SSL support provided by Netscape NSS SSL implementation. .TP .I [-nss_domestic_policy/-nss_export_policy] Selects sets of ciphers allowed/disabled by USA export rules. This option is available only when pavuk is compiled with SSL support provided by Netscape NSS SSL implementation. .TP .I -from $email This parameter is used when accessing anonymous FTP server as password or is optionally inserted into \fBFrom\fR field in HTTP request. If not specified pavuk discovers this from \fBUSER\fR environment variable and from site hostname. .TP .I -send_from/-nosend_from This option is used for enabling or disabling sending of user identification, entered in \fB-from\fR option, as FTP anonymous user password and \fBFrom:\fR field of HTTP request. As default is this option off. .TP .I -ftp_login_handshake $host $handshake When you need to use nonstandard login procedure for some of FTP servers, you can use this option to change default pavuk login procedure. To allow more flexibility, you can assign the login procedure to some server or to all. When \fI$host\fR is specified as empty string (\fI""\fR), than attached login procedure is assigned to all FTP servers besides those having assigned own login procedures. In the \fI$handshake\fR parameter you can specify exact login procedure specified by FTP commands followed by expected FTP response codes delimited with backslash (\fI\\\fR) characters. .br For example this is default login procedure when logging in regular ftp server without going through proxy server : \fIUSER %u\\331\\PASS %p\\230\fR. There are two commands followed by two response codes. After USER command pavuk expects FTP response code 331 and after PASS command pavuk expects from server FTP response code 230. In ftp commands you can use following macros which will be replaced by respective values: .sp .br \fI%u\fR - user name used to access FTP server .br \fI%p\fR - password used to access FTP server .br \fI%U\fR - user name used to access FTP proxy server .br \fI%P\fR - password used to access FTP proxy server .br \fI%h\fR - hostname of FTP server .br \fI%s\fR - port number on which FTP server listens .SH Site/Domain/Port Limitation Options .sp .TP .I -asite $list Specify comma separated list of allowed sites on which referenced documents are stored. .TP .I -dsite $list Specify comma separated list of disallowed sites. Previous parameter is opposite to this one. If both are used the last occurrence of them is used to be valid. .TP .I -adomain $list Specify comma separated list of allowed domains on which referenced documents are stored. .TP .I -ddomain $list Specify comma separated list of disallowed domains. Previous parameter is opposite to this one. If both are used the last occurrence of them is used to be valid. .TP .I -aport $list In \fB$list\fR, you can write comma separated list of ports from which you allow to download documents. .TP .I -dport $list This option is opposite option to previous option. It is used to specify denied ports. If both \fB-aport\fR and \fB-dport\fR options are used the last occurrence of them is used to be valid and all other occurrences will be omitted. .SH Limitation Document properties .sp .TP .I -amimet $list List of comma separated allowed MIME types. You can use with this option also wildcard patterns. .TP .I -dmimet $list List of comma separated disallowed MIME types. You can use with this option also wildcard patterns. Previous parameter is opposite to this one. If both are used the last occurrence of them is used to be valid. .TP .I -maxsize $nr Maximum allowed size of document. This option is applied only when pavuk is able to detect the document before starting the transfer. Default value is 0, and it means this limit isn't applied. .TP .I -minsize $nr minimal allowed size of document. This option is applied only when pavuk is able to detect the document before starting the transfer. Default value is 0, and it means this limit isn't applied. .TP .I -newer_than $time Allow only transfer of documents with modification time newer than specified in parameter $time. Format of $time is: YYYY.MM.DD.hh:mm. To apply this option pavuk must be able to detect modification time of document. .TP .I -older_than $time Allow only transfer of documents with modification time older than specified in parameter $time. Format of $time is: YYYY.MM.DD.hh:mm. To apply this option pavuk must be able to detect modification time of document. .TP .I -noCGI/-CGI this switch prevents to transfer dynamically generated parametric documents through CGI interface. This is detected with occurrence of \fB?\fR character inside URL. Default pavuk behavior is to allow transfer of URLs with query strings. .TP .I -alang $list this allows you to specify ordered comma separated list of preferred natural languages. This option work only with HTTP and HTTPS protocol using \fBAccept-Language:\fR MIME field. .TP .I -acharset $list This options allows you to enter comma separated list of preferred encoding of transfered documents. This works only with HTTP and HTTPS urls and only if such document encodings are located on destination server. .br .B example: -acharset iso-8859-2,windows-1250,utf8 .SH Limitation Document name .sp .TP .I -asfx $list This parameter allows you to specify set of suffixes used to restrict selection of documents which will be processed. .TP .I -dsfx $list Set of suffixes that are used to specify restriction on selection of documents. This one is inverse to previous option. They are segregating each other. .TP .I -aprefix $list, -dprefix $list This two options allow you to specify set of allowed or disallowed prefixes of documents. They are segregating each other. .TP .I -pattern $pattern This option allows you to specify wildcard pattern for documents. All documents are tested if they match this pattern. .TP .I -rpattern $reg_exp This is equal option as previous, but this uses regular expressions. Available only on platforms which have any supported RE implementation. .TP .I -skip_pattern $pattern This option allows you to specify wildcard pattern for documents that should be skipped. All documents are tested if they match this pattern. .TP .I -skip_rpattern $reg_exp This is equal option as previous, but this uses regular expressions. Available only on platforms which have any supported RE implementation. .TP .I -url_pattern $pattern This option allows you to specify wildcard pattern for URLs. All URLs are tested if they match this pattern. .br .B Example: .br -url_pattern http://\\*.idata.sk:\\*/~ondrej/\\* . this option enables all HTTP URLs from domain .idata.sk on all ports which are located under /~ondrej/. .TP .I -url_rpattern $reg_exp This is equal option as previous, but this uses regular expressions. Available only on platforms which have any supported RE implementation. .TP .I -skip_url_pattern $pattern This option allows you to specify wildcard pattern for URLs that should be skipped. All URLs are tested if they match this pattern. .TP .I -skip_url_rpattern $reg_exp This is equal option as previous, but this uses regular expressions. Available only on platforms which have any supported RE implementation. .TP .I -aip_pattern $re This option allows you to limit set of transferred documents by server IP address. IP address can be specified as regular expressions, so it is possible to specify set of IP addresses by one expression. Available only on platforms which have any supported RE implementation. .TP .I -dip_pattern $re This option similar to previous option, but is used to specify set of disallowed IP addresses. Available only on platforms which have any supported RE implementation. .TP .I -tag_pattern $tag $attrib $url More powerful version of \fI-url_pattern\fR option for more precise matching of allowed URLs based on HTML tag name pattern, HTML tag attribute name pattern and on URL pattern. You can use in all three parameters of this option wildcard patterns, thus something like \fB-tag_pattern '*' '*' url_pattern\fR is equal to \fB-url_pattern url_pattern\fR. The \fI$tag\fR and \fI$attrib\fR parameters are always matched again uppercase strings. For example if you want just let pavuk follow only regular links ignoring any stylesheets, images, etc., use option \fB-tag_pattern A HREF '*'\fR. .TP .I -tag_rpattern $tag $attrib $url This is variation on the \fI-tag_pattern\fR. It uses regular expression patterns in parameters instead of wildcard patterns used in the previous option. .SH Limitation Protocol Option .sp .TP .I -noHTTP/-HTTP This switch suppresses all transfers through HTTP protocol. Default is transfer trough HTTP enabled. .TP .I -noSSL/-SSL This switch suppresses all transfers through HTTPS protocol (HTTP protocol over SSL) . Default is transfer trough HTTPS enabled. This option is available only when compiled with SSL support (you need SSleay or OpenSSL libraries and development headers) .TP .I -noGopher/-Gopher Suppress all transfers through Gopher Internet protocol. Default is transfer trough Gopher enabled. .TP .I -noFTP/-FTP This switch prevents processing documents allocated on all FTP servers. Default is transfer trough FTP enabled. .TP .I -noFTPS/-FTPS This switch prevents processing documents allocated on all FTP servers accessed through SSL. Default is transfer trough FTPS enabled. This option is available only when compiled with SSL support (you need SSleay or OpenSSL libraries and development headers) .TP .I -FTPhtml/-noFTPhtml By using of option -FTPhtml you can force pavuk to process HTML files downloaded with FTP protocol. At default pavuk won't parse HTML files from FTP servers. .TP .I -FTPdir/-noFTPdir Force recursive processing of FTP directories too. At default is recursive downloading from FTP servers denied. .TP .I -disable_html_tag $TAG,[$ATTRIB][;...] .I -enable_html_tag $TAG,[$ATTRIB][;...] Enable or disable processing of particular HTML tags or attributes. At default all supported HTML tags are enabled. .sp For example if you don't want to process all images you should use option .B -disable_html_tag 'IMG,SRC;INPUT,SRC;BODY,BACKGROUND' . .SH Other Limitation Options .sp .TP .I -subdir $dir Subdirectory of local tree directory, to limit some of the modes {sync, resumeregets, linkupdate} in its tree scan. .TP .I -dont_leave_site/-leave_site (Don't) leave starting site. At default pavuk can span host when recursing through WWW tree. .TP .I -dont_leave_dir/-leave_dir (Don't) leave starting directory. If -dont_leave_dir option is used pavuk will stay only in starting directory (including its own subdirectories). At default pavuk can leave starting directories. .TP .I -leave_site_enter_dir/-dont_leave_site_enter_dir If you are downloading WWW tree which spans multiple hosts with huge trees, you may want to allow downloading of document which are in directory hierarchy below directory which we visited as first on each site. To obtain this, use option -dont_leave_site_enter_dir. As default pavuk will go also to higher directory levels on that site. .TP .I -lmax $nr Set maximum allowed level of tree traverse. Default is set to 0, what means that pavuk can traverse at infinitum. As of version 0.8pl1 inline objects of HTML pages are placed at same level as parent HTML page. .TP .I -leave_level $nr Maximum level of documents outside from site of starting URL. Default is set to 0, and 0 means that checking is not applied. .TP .I -site_level $nr Maximum level of sites outside from site of starting URL. Default is set to 0, and 0 means that checking is not applied. .TP .I -dmax $nr Set maximum allowed number of documents that are processed. Default value is 0. That means no restrictions are used in number of processed documents. .TP .I -singlepage/-nosinglepage Using option \fB-singlepage\fR allows you to transfer just HTML pages with all its inlined objects (pictures, sounds, frame documents, ...). As default is disabled single page transfer. This option makes \fB-mode singlepage\fR option obsolete. .TP .I -limit_inlines/-dont_limit_inlines With this option you can control whether limiting options apply also to inline objects (pictures, sounds, ...). This is useful when you want to download specified set of HTML pages with all inline options without any restrictions. .TP .I -user_condition $str Script or program name for users own conditions. You can write any script which should with exit value decide if download URL or not. Script gets from pavuk any number of options, with this meaning : .in +3 .sp .B -url $url - processed URL .br .B -parent $url - any number of parent URLs .br .B -level $nr - level of this URL from starting URL .br .B -size $nr - size of requested URL .br .B -date $datenr - modification time of requested URL in format .I YYYYMMDDhhmmss .br .in -3 .sp The exit status 0 of script or program means that current URL should be rejected and nonzero exit status means that URL should be accepted. .br .B Warning : use user conditions only if required because of big slowdowns caused by forking scripts for each checked URL. .TP .I -follow_cmd $str This option allows you to specify script or program which can by its exit status decide whether to follow URLs from current HTML document. This script will be called after download of each HTML document. The script will get following options as it's parameters: .in +3 .sp .B -url $url - URL of current HTML document .br .B -infile $file - local file where is stored HTML document .in -3 .sp The exit status 0 of script or program means that URLs from current document will be disallowed, other exit status means, that pavuk can follow links from current HTML document. .SH Javascript support Support for scripting languages like JavaScript or VBScript in pavuk is done bit hacky way. There is no interpreter for this languages, so not all things will work. Whole support which pavuk have for this scripting languages is based on regular expression patterns specified by user. Pavuk search for this patterns in DOM event attributes of HTML tags, in javascript:... URLs, in inline scripts in HTML documents enclosed between tags and in separate javascript files. Support for scripting languages is only available when pavuk is compiled with proper regular expression library (POSIX/GNU/PCRE). .TP .I -enable_js/-disable_js This options are used to enable or disable processing of Javascript parts of HTML documents. You must enable this option to be able to use processing of javascript patterns. .TP .I -js_pattern $re With this option you are specifying what patterns match interested parts of Javascript for extracting URLs. The parameter must be RE pattern with exactly one subpattern which match exactly the URL part. For example to match URL in following type of javascript expressions : .br document.b1.src='pics/button1_pre.jpg' .br you can use this pattern .br "^document\.[a-zA-Z0-9_]*\.src[ \t]*=[ \t]*'(.*)'$" .TP .I -js_transform $p $t $h $a This option is similar to previous, but you can use custom transform rules for the URL parts of patterns and also specify the exact HTML tag and attribute where to look for this pattern. The \fB$p\fR is the pattern to match the interested part of script. The \fB$t\fR is transform rule for the URL, in this parameter the \fB$x\fR parts will be replaced by x-th subpattern of the \fB$p\fR pattern. The \fB$h\fR parameter is exact HTML tag or "*" when this apply to javascript: URLs or DOM event attribs or "" (empty string) when this apply to javascript body of HTML document or separate JS file. The \fB$a\fR parameter is exact HTML attrib of tag or "" (empty string) when this rule apply to javascript body. .TP .I -js_transform2 $p $t $h $a This option is very similar to previous. The meaning of all parameters is same, just the pattern \fB$p\fR can have only one substring which will be used in the transform rule \fB$t\fR. This is required to allow rewriting of URL parts of the tags and scripts. This option can also be used to force pavuk to recognize HTML targ/attribute pairs which pavuk does not support. .SH Cookie .sp .TP .I -cookie_file $file File where are stored cookie infos. This file must be in Netscape cookie file format (generated with Netscape Navigator or Communicator ...). .TP .I -cookie_send/-nocookie_send Use collected cookies in HTTP/HTTPS requests. Pavuk will not send at default cookies. .TP .I -cookie_recv/-nocookie_recv Store received cookies from HTTP/HTTPS responses into memory cookie cache. At default pavuk will not remember received cookies. .TP .I -cookie_update/-nocookie_update Update cookie file on disk and synchronize it with changes made by any concurrent processes. At default pavuk will not update cookie file on disk. .TP .I -cookies_max $nr Maximum number of cookies in memory cookie cache. Default value is 0, and that means no restrictions for cookies number. .TP .I -disabled_cookie_domains $list Comma-separated list of cookie domains which are permitted to send cookies stored into cookie cache .TP .I -cookie_check/-nocookie_check Check when receiving cookie, if cookie domain is equal to domain of server which sends this cookie. At default pavuk check is server is setting cookies for its domain, and if it tries to set cookie for foreign domain pavuk will complain about that and will reject such cookie. .SH HTML rewriting engine tuning options .sp .TP .I -noRelocate/-Relocate This switch prevents the program to rewrite relative URLs to absolute, after HTML document is transfered. Default pavuk behavior is to maintain link consistence of HTML documents. So always when HTML document is downloaded pavuk will rewrite all URLs to point to local document if it is available and if it is not available it will point to remote document. After document is properly downloaded, pavuk will update links in HTML documents, which point to this one. .TP .I -all_to_local/-noall_to_local This option forces pavuk to change all URLs inside HTML document to local URLs immediately after download of document. Default is this option disabled. .TP .I -sel_to_local/-nosel_to_local This option forces pavuk to change all URLs, which accomplish conditions for download, to local inside HTML document immediately after download of document. I recommend to use this option, when you are sure, that transfer will be without any problems. This option can save a lot of processor time. Default is this option disabled. .TP .I -all_to_remote/-noall_to_remote This option forces pavuk to change all URLs inside HTML document to remote URLs immediately after download of document. Default is this option disabled. .TP .I -post_update/-nopost_update This option is especially designed to allow in \fB-fnrules\fR option doing rules based on MIME type of document. This option forces pavuk to generate local names for documents just after pavuk knows what is the MIME type of document. This have big impact on the rewriting engine of links inside HTML documents. This option causes disfunction of other options for controlling the link rewriting engine. Use this option only when you know what you are doing :-) .TP .I -dont_touch_url_pattern $pat This options serves to deny rewriting and processing of particular URLs in HTML documents by pavuk HTML rewriting engine. This option accepts wildcard patterns to specify such URLs. Matching is done against untouched URLs so when he URL is relative, you must use pattern which matches the relative URL, when it is absolute, you must use absolute URL. .TP .I -dont_touch_url_rpattern $pat This option is variation on previous option. This one uses regular patterns for matching of URLs instead of wildcard patterns used by \fB-dont_touch_url_pattern\fR option. This option is available only when pavuk is compiled with support for regular expression patterns. .TP .I -dont_touch_tag_rpattern $pat This option is variation on previous option, just matching is made on full HTML tag with included <>. This option accepts regular expression patterns. It is available only when pavuk is compiled with support for regular expression patterns. .SH Filename/URL Conversion Option .sp .TP .I -tr_del_chr $str All characters found in \fB$str\fR will be deleted from local name of document. \fB$str\fR should contain escape sequences similar like in tr command: .br \fB\\n\fR - newline .br \fB\\r\fR - carriage return .br \fB\\t\fR - horizontal tab space .br \fB\\0xXX\fR - hexadecimal ASCII value .br .B [:upper:] - all uppercase letters .br .B [:lower:] - all lowercase letters .br .B [:alpha:] - all letters .br .B [:alnum:] - all letters and digits .br .B [:digit:] - all digits .br .B [:xdigit:] - all hexadecimal digits .br .B [:space:] - all horizontal and vertical whitespace .br .B [:blank:] - all horizontal whitespace .br .B [:cntrl:] - all control characters .br .B [:print:] - all printable characters including space .br .B [:nprint:] - all non printable characters .br .B [:punct:] - all punctation characters .br .B [:graph:] - all printable characters excluding space .TP .I -tr_str_str $str1 $str2 String \fB$str1\fR from local name of document will be replaced with \fB$str2\fR. .TP .I -tr_chr_chr $chrset1 $chrset2 Characters from \fB$chrset1\fR from local name of document will be replaced with corresponding character from \fB$chrset2\fR. \fB$charset1\fR and \fB$charset2\fR should have same syntax as \fB$str\fR in \fB-tr_del_chr\fR option. .TP .I -store_name $str When you want to change local filename of first file downloaded with singlepage mode, you should use this option. .TP .I -index_name $str With this option you can change directory index name. As default is used \fB_._.html\fR . .TP .I -store_index/-nostore_index With option -nostore_index you should deny storing of directory indexes into HTML files. .TP .I -fnrules $t $m $r This is a very powerful option! This option is used to flexible change layout of local document tree. It accepts three parameters. First parameter \fB$t\fR is used to say what type is following pattern. .B F is used for wildcard pattern (uses \fIfnmatch()\fR) and .B R is used for regular expression pattern (using any supported RE implementation). Second parameter is matching pattern used to select URLs for this rule. If URL match this pattern, then local name for this URL is computed following rules of third parameter. And third parameter is local name building rule. Pavuk now supports two kinds of local name building rules. One is simple based only on \fIsimple\fR macros and other more complicated \fIextended\fR rule, which also enables to perform several functions. Recognition between those two kinds of rules is done by looking at first character of rule. In case when first character is \fB'('\fR, rule is extended and in all other cases it is the simple kind of rule. .sp \fBSimple rule\fR should contain literals or escaped macros. Macros are escaped by % character or by $ character. .sp .B Here is list of recognized macros: .sp .sp .br .B $x - where x is any positive number. This macro is replaced with x-th substring matched by RE pattern. (If you use this you need to understand RE !) .br .B %i - is replaced with protocol id (http, https, ftp, gopher) .br .B %p - is replaced with password. (use this only when usable) .br .B %u - is replaced with username. .br .B %h - is replaced with host name. .br .B %m - is replaced with domain name. .br .B %r - is replaced with port number. .br .B %d - is replaced with path to document. .br .B %n - is replaced with document name. .br .B %b - is replaced with basename of document (without extension). .br .B %e - is replaced with extension. .br .B %s - is replaced with searchstring. .br .B %M - is replaced with MIME type of document. When you are using this macro, you *must* use also \fB-post_update\fR option else it won't work. .br .B %E - is replaced with default extension assigned to MIME type of document. When you are using this macro, you *must* use also \fB-post_update\fR option else it won't work. .br .B %x - where x is positive number. This macro is replaced with x-th directory from path to document from beginning. .br .B %-x - where x is positive number. This macro is replaced with x-th directory from path to document from end. .br .sp Here is example. If you want place document into single directories by extension, you should use following fnrules option: .br .B -fnrules F '*' '/%e/%n' .sp \fBExtended rule\fR ever begins with character \fB\'('\fR. It uses some kind of \fILISP\fR like syntax. .sp .B Here are base rules for writing extended rules : - the local filename of of this kind is return value function .br - each function is enclosed inside round braces \fB()\fR .br - first token right after opening brace is function name .br - each function have nonzero fixed number of parameters .br - each function returns numeric or string value .br - function parameters are separated by any number of space characters .br - parameter of function should be string, number, macro or other function .br - string is ever quoted with \fB"\fR .br - each numeric parameter can be in any encoding supported by \fIstrtod()\fR function (octal, decimal, hexadecimal, ...) .br - there is no implicit conversion from number to string .br - each macro is prefixed by \fB%\fR character and is one character long .br - each macro is replaced by its string representation from current URL .br - function parameters are typed strictly .br - toplevel function must return string value .br .sp Extended rule supports full set of \fI%\fR escaped macros supported with simple rules, plus two following addition macros : .br \fB%U\fR - URL string .br \fB%o\fR - default localname for URL .sp .B Here is description of all supported functions .sp \fBsc\fR - concat two string parameters - accepts two string parameters - returns string value .br \fBss\fR - substring form string - accepts three parameters. - first is string from which we want to cut subpart - second is number which represents starting position in string - third is number which represents ending position in string - returns string value .br \fBhsh\fR - compute modulo hash value from string with specified base - accepts two parameters - first is string for which we are computing the hash value - second is numeric value for base of modulo hash - returns numeric value .br \fBmd5\fR - compute MD5 checksum for string - accepts one string value - returns string which represents MD5 checksum .br \fBlo\fR - convert all characters inside string to lower case - accepts ane string value - returns string value .br \fBup\fR - convert all characters inside string to upper case - accepts one string value - returns string value .br \fBue\fR - encode unsafe characters in string with same encoding which is used for encoding unsafe characters inside URL (\fI%xx\fR) As default are encoded all nonascii values when this function is used. - accepts two string values - first is string which we want to encode - second is string which contains unsafe characters - return string value .br \fBdc\fR - delete unwanted characters from string (have similar functionality as \fB-tr_del_chr\fR option) - accepts two string values - first is string from which we want delete - second is string which contains characters we want to delete. - returns string value .br \fBtc\fR - replace character with other character in string (have similar functionality as \fB-tr_chr_chr\fR option) - accepts three string values - first is string inside which we want to replace characters - second is set of characters which we want to replace - third is set of characters with which we are replacing - returns string value .br \fBts\fR - replace some string inside string with any other string (have similar functionality as \fB-tr_str_str\fR option) - accepts three string values - first is string inside which we want to replace string - second is the from string - third is to string - returns string value .br \fBspn\fR - calculate initial length of string which contains only specified set of characters. (have same functionality as \fIstrspn()\fR libc function) - accepts two string values - first is input string - second is set of acceptable characters - returns numeric value .br \fBcspn\fR - calculate initial length of string which doesn't contain specified set of characters. (have same functionality as \fIstrcspn()\fR libc function) - accepts two string values - first is input string - second is set of unacceptable characters - returns numeric value .br \fBsl\fR - calculate length of string - accepts one string value - returns numeric value .br \fBns\fR - convert number to string by format - accepts two parameters - first parameter is format string same as for \fIprintf()\fR function - second is number which we want to convert - returns string value .br \fBlc\fR - return position of last occurrence of specified character inside string - accepts two string parameters - first string which we are searching in - second string contains character for which we are looking for - returns numeric value .br \fB+\fR - add two numeric values - accepts two numeric values - returns numeric value .br \fB-\fR - subtract two numeric values - accepts two numeric values - returns numeric value .br \fB%\fR - modulo addition - accepts two numeric values - returns numeric value .br \fB*\fR - multiple two numeric values - accepts two numeric values - returns numeric value .br \fB/\fR - divide two numeric values - accepts two numeric values - returns numeric value .br \fBrmpar\fR - remove parameter from query string - accepts two string - first string is string which we are adjusting - second parameter is name of parameter which should be removed - returns adjusted string .br \fBgetval\fR - get query string parameter value - accepts two string - first string is query string from which to get the parameter value (usually %s) - second string is name of parameter for which we want to get the value - returns value of the parameter or empty string when the parameter doesn't exists .br \fBsif\fR - logical decision - accepts three parameters - first is numeric and when is zero than result of this decision is result of second parameter, else result is result of third parameter - second parameter is string - third parameter is string - returns string result of decision .br \fB!\fR - logical not - accepts one numeric parameter - returns negation of parameter .br \fB&\fR - logical and - accept two numeric parameters - returns logical and of parameters .br \fB|\fR - logical or - accept two numeric parameters - returns logical or of parameters .br \fBgetext\fR - get file extension - accept one sting (filename or path) - return string containing extension of parameter .br \fBseq\fR - compare two strings - accepts two strings for comparison - returns numeric value 0 - if different 1 - if equal .br .br \fBjsf\fR - execute JavaScript function - accepts one string parameter which holds name of JavaScript function specified in script loaded with \fI-js_script_file\fR option. - returns string value equal to return value of JavaScript function - this function is available only when pavuk is compiled with support for JavaScript bindings .sp For example, if you are mirroring very huge number of internet sites into same local directory, too much entries in one directory, should cause performance problems. You may use for example \fIhsh\fR or \fImd5\fR functions to generate one additional level of hash directories based on hostname whit one of following options : .sp \fI-fnrules F '*' '(sc (nc "%02d/" (hsh %h 100)) %o)'\fR .br \fI-fnrules F '*' '(sc (ss (md5 %h) 0 2) %o)'\fR .br .TP .I -base_level $nr Number of directory levels to omit in local tree. .sp For example when downloading URL ftp://ftp.idata.sk/pub/unix/www/pavuk-0.7pl1.tgz you enter at command line .B -base_level 4 in local tree will be created www/pavuk-0.7pl1.tgz not ftp/ftp.idata.sk_21/pub/unix/www/pavuk-0.7pl1.tgz as normally. .TP .I -default_prefix $str Default prefix of mirrored directory. This option is used only when you are trying to synchronize content of remote directory which was downloaded using \fB-base_level\fR option. Also you must use directory based synchronization method, not URL based synchronization method. This is especially useful, when used in conjunction with \fB-remove_old\fR option. .TP .I -remove_adv/-noremove_adv This option is used for turn on/off of removing HTML tags which contains advertisement banners. The banners are not removed from HTML file, but are commented out. Such URLs also will not be downloaded. This option have effect only when used with option \fB-adv_re\fR. Default is turned off. This option is available only when your system have support for one of supported regular expressions implementation. .TP .I -adv_re $RE This option is used to specify regular expressions for matching URLs of advertisement banners. For example : -adv_re http://ad.doubleclick.net/.* is used to match all files from server ad.doubleclick.net. This option is available only when your system have any supported regular expressions implementation. .TP .I -unique_name/-nounique_name Pavuk as default always attempts to assign to unique URL unique local filename. If this behavior is not wanted, you can use option .B -nounique_name to disable this. .SH Other Options .sp .TP .I -sleep $nr This option allows you to specify number of seconds during that the program will be suspended between two transfers. Useful to deny server overload. Default value for this option is 0. .TP .I -rsleep/-norsleep When this option is active, pavuk randomizes the the sleep time between transfers in interval between zero and value specified with \fB-sleep\fR option. Default is this option inactive. .TP .I -ddays $nr If document has modification time later as $nr days, then in sync mode pavuk attempts to retrieve newer copy of document from remote server. Default value is 0. .TP .I -remove_old/-noremove_old Remove improper documents (that, which doesn't exist on remote site). This option have effect only when used in directory based \fBsync\fR mode. When used with URL based sync mode, pavuk will not remove any old files which were excluded from document tree and are not referenced in any HTML document. You must also use option \fB-subdir\fR, to let pavuk find files which belongs to current mirror. As default pavuk won't remove any old files. .TP .I -browser $str is used to set your browser command (in URL tree dialog you can use right click to raise menu, from which you can start browser on actually selected URL). This option is available only when compiled with GTK GUI and with support for URL tree preview. .TP .I -debug/-nodebug turns on displaying of debug messages. This option is available only when compiled with -DDEBUG. If -debug option is used pavuk will output verbose information about documents, whole protocol level information, locking informations and more (depends on \fB-debug_level\fR setup). This options is used just like trigger to enable output of debug messages selected by \fB-debug_level\fR option. Default is debug mode turned off. .TP .I -debug_level $level Set level of required debug informations. \fB$level\fR can be numeric value which represent binary mask for requested debug levels, or comma separated list of supported debug levels. Currently pavuk supports following debug levels : .br \fBhtml\fR - for HTML parser debugging .br \fBprotos\fR - to see server side protocol messages .br \fBprotoc\fR - to see client side protocol messages .br \fBprocs\fR - to see some special procedure calls .br \fBlocks\fR - for debugging of documents locking .br \fBnet\fR - for debugging some low level network stuff .br \fBmisc\fR - for miscellaneous unsorted debug messages .br \fBuser\fR - for verbose user level messages .br \fBall\fR - request all currently supported debug levels .br \fBmtlock\fR - locking of resources in multithreading environment .br \fBmtthr\fR - launching/weaking/sleeping/stoping of threads in multithreaded environment .br \fBprotod\fR - for DEBUGGING of POST requests .br \fBlimits\fR - for debugging limiting options, you will see the reason why particular URLs are rejected by pavuk and which option caused this. .br \fBssl\fR - to enable verbose reporting about SSL related things. .br .TP .I -remind_cmd $str This option have effect only when running pavuk in .B reminder mode. To command specified with this option pavuk sends result of running reminder mode. There are listed URLs which are changed and URLs which have any errors. Default remind command is "mailx user@server -s \\"pavuk reminder result\\"" . .TP .I -nscache_dir $dir Path to Netscape browser cache directory. If you specify this path, pavuk attempts to find out if you have URL in this cache. If URL is there it will be fetched else pavuk will download it from net. The cache directory index file must be named \fIindex.db\fR and must be located in the cache directory. To support this feature, pavuk have to be linked with BerkeleyDB 1.8x . .TP .I -mozcache_dir $dir Path to Mozilla browser cache directory. Same functionality as with previous option, just for different browser with different cache formats. Pavuk supports both formats of Mozilla browser disk cache (old for versions <0.9 and new used in 0.9=<). The old format cache directory must contain cache directory index database with name \fIcache.db\fR. Then new format cache directory must contain map file \fI_CACHE_MAP_\fR, and three block files \fI_CACHE_001_\fR, \fI_CACHE_002_\fR, \fI_CACHE_003_\fR. To support old Mozilla cache format, pavuk have to be linked with BerkeleyDB 1.8x. New Mozilla cache format doesn't require any external library. .TP .I -post_cmd $str Post-processing command, which will be executed after successful download of document. This command may somehow handle with document. During time of running this command, pavuk leaves actual document locked, so there isn't chance that some other pavuk process will modify document. This postprocessing command will get three additional parameters from pavuk. .in +3 .br - local name of document .br - .B 1/0 1 if document is HTML document, 0 if not .br - original URL of this document .in -3 .TP .I -hack_add_index/-nohack_add_index This is bit hacky option. It forces pavuk to add to URL queue also directory indexes of all queued documents. This allow pavuk to download more documents from site, than it is able achieve in normal traversing of HTML documents. Bit dirty but useful in some cases. .TP .I -js_script_file $file Pavuk have optionally builtin JavaScript interpreter to allow high level customization of some internal procedures. Currently you are allowed to customize with your own JavaScript functions two things. You can use it to set precise limiting options, or you can write own functions which can be used inside rules of \fI-fnrules\fR option. With this option you can load JavaScript script with functions into pavuks internal JavaScript interpreter. To learn more about this capabilities read separate document jsbind.txt which comes with pavuk sources in toplevel directory. This option is available only when you have compiled pavuk with support for JavaScript bindings. .SH EXIT STATUS As of version 0.9pl29 pavuk have changed indication of status by exit codes. In earlier versions exit status 0 was for no error and nonzero exit status was something like count of failed documents. In all version after 0.0pl29 there are defined following exit codes: .br .sp 0 - no error, everything is OK 1 - error in configuration of pavuk options or error in config files 2 - some error occurred while downloading documents .SH ENVIRONMENTAL VARIABLES .sp .TP .I USER variable is used to construct email address from user and hostname .TP .I LC_* or LANG used to set internationalized environment .TP .I PAVUKRC_FILE with this variable you can specify alternative location for your pavukrc configuration file. .SH REQUIRED EXTERNAL PROGRAMS .sp .TP .IB at is used for scheduling. .TP .IB gunzip is used to decode gzip or compress encoded documents. .SH Bugs .sp If you find any, please let me know. .SH FILES .sp .TP .IB @SYSCONFDIR@/pavukrc .TP .IB ~/.pavukrc .TP .IB ~/.pavuk_prefs .br .sp These files are used as default configuration files. You may specify there some constant values like your proxy server or your preferred WWW browser. Configuration options reflect command line options. Not all parameters are suitable for use in default configuration file. You should select only some of them, which you really need. .br .sp File .B ~/.pavuk_prefs is special file which contains automatically stored configuration. This file is used only when running GUI interface of pavuk and option .B -prefs is active. .br .sp First (if present) parsed file is .B @SYSCONFDIR@/pavukrc then .B ~/.pavukrc (if present), then .B ~/.pavuk_prefs (if present). Last the command line is parsed. The precedence is as follows : .br .sp - highest - .br Entered in user interface .br Entered in command line .br ~/.pavuk_prefs .br ~/.pavukrc .br @SYSCONFDIR@/pavukrc .br - lowest - .sp .br Here is table of config file - command line options pairs. .br .sp .RS .nf MaxLevel: ---> -lmax MaxDocs: ---> -dmax MaxSize: ---> -maxsize MinSize: ---> -minsize SleepBetween: ---> -sleep MaxRetry: ---> -retry MaxRegets: ---> -nregets MaxRedirections: ---> -nredirs CommTimeout: ---> -timeout RegetRollbackAmount: ---> -rollback DocExpiration: ---> -ddays UseCache: ---> -nocache UseRobots: ---> -noRobots AllowFTP: ---> -noFTP AllowHTTP: ---> -noHTTP AllowSSL: ---> -noSSL AllowGopher: ---> -noGopher AllowCGI: ---> -noCGI AllowGZEncoding: ---> -noEnc AllowFTPRecursion: ---> -FTPdir ForceReget: ---> -force_reget Debug: ---> -debug AllowedSites: ---> -asite DisallowedSites: ---> -dsite AllowedDomains: ---> -adomain DisallowedDomains: ---> -ddomain AllowedPrefixes: ---> -aprefix DisallowedPrefixes: ---> -dprefix AllowedSuffixes: ---> -asfx DisallowedSuffixes: ---> -dsfx AllowedMIMETypes: ---> -amimet DisallowedMIMETypes: ---> -dmimet PreferredLanguages: ---> -alang PreferredCharset: ---> -acharset WorkingDir: ---> -cdir WorkingSubDir: ---> -subdir HTTPAuthorizationScheme: ---> -auth_scheme HTTPAuthorizationName: ---> -auth_name HTTPAuthorizationPassword: ---> -auth_passwd AuthReuseDigestNonce: ---> -auth_reuse_nonce SSLCertPassword: ---> -ssl_cert_passwd SSLCertFile: ---> -ssl_cert_file SSLKeyFile: ---> -ssl_key_file EmailAddress: ---> -from MatchPattern: ---> -pattern REMatchPattern: ---> -rpattern SkipMatchPattern: ---> -skip_pattern SkipREMatchPattern: ---> -skip_rpattern URLMatchPattern: ---> -url_pattern URLREMatchPattern: ---> -url_rpattern SkipURLMatchPattern: ---> -skip_url_pattern SkipURLREMatchPattern: ---> -skip_url_rpattern DefaultMode: ---> -mode FTPProxy: ---> -ftp_proxy HTTPProxy: ---> -http_proxy SSLProxy: ---> -ssl_proxy GopherProxy: ---> -gopher_proxy FTPViaHTTPProxy: ---> -ftp_httpgw GopherViaHTTPProxy: ---> -gopher_httpgw HTTPProxyUser: ---> -http_proxy_user HTTPProxyPass: ---> -http_proxy_pass HTTPProxyAuth: ---> -http_proxy_auth AuthReuseProxyDigestNonce: ---> -auth_reuse_proxy_nonce Browser: ---> -browser ScenarioDir: ---> -scndir ShowProgress: ---> -progress XMaxLogSize: ---> -xmaxlog LogFile: ---> -logfile RemoveOldDocuments: ---> -remove_old AuthFile: ---> -auth_file BaseLevel: ---> -base_level FTPDirtyProxy: ---> -ftp_dirtyproxy ActiveFTPData: ---> -ftp_active/-ftp_passive ActiveFTPPortRange: ---> -active_ftp_port_range AlwaysMDTM: ---> -always_mdtm/-noalways_mdtm RemoveBeforeStore: ---> -(no)remove_before_store ShowDownloadTime: ---> -stime NLSMessageCatalogDir: ---> -msgcat Quiet: ---> -quiet/-verbose NewerThan: ---> -newer_than OlderThan: ---> -older_than Reschedule: ---> -reschedule DontLeaveSite: ---> -dont_leave_site/-leave_site DontLeaveDir: ---> -dont_leave_dir/-leave_dir PreserveTime: ---> -preserve_time/-nopreserve_time LeaveLevel: ---> -leave_level GUIFont: ---> -gui_font UserCondition: ---> -user_condition CookieFile: ---> -cookie_file CookieSend: ---> -cookie_send/-nocookie_send CookieRecv: ---> -cookie_recv/-nocookie_recv CookieUpdate: ---> -cookie_update/-nocookie_update CookiesMax: ---> -cookies_max CookieCheckDomain: ---> -cookie_check/-nocookie_check DisabledCookieDomains: ---> -disabled_cookie_domains DisableHTMLTag: ---> -disable_html_tag EnableHTMLTag: ---> -enable_html_tag TrDeleteChar: ---> -tr_del_chr TrStrToStr: ---> -tr_str_str TrChrToChr: ---> -tr_chr_chr IndexName: ---> -index_name StoreName: ---> -store_name PreservePermisions: ---> -preserve_perm/-nopreserve_perm PreserveAbsoluteSymlinks: ---> -preserve_slinks/-nopreserve_slinks FTPListCMD: ---> -FTPlist/-noFTPlist MaxRate: ---> -maxrate MinRate: ---> -minrate ReadBufferSize: ---> -bufsize BgMode: ---> -bg/-nobg CheckSize: ---> -check_size/-nocheck_size SLogFile: ---> -slogfile Identity: ---> -identity SendFromHeader: ---> -send_from/-nosend_from RunX: ---> -runX FnameRules: ---> -fnrules StoreDocInfoFiles: ---> -store_info/-nostore_info AllLinksToLocal: ---> -all_to_local/-noall_to_local AllLinksToRemote: ---> -all_to_remote/-noall_to_remote SelectedLinksToLocal: ---> -sel_to_local/-nosel_to_local ReminderCMD: ---> -remind_cmd AutoReferer: ---> -auto_referer/-noauto_referer URLsFile: ---> -urls_file UsePreferences: ---> -prefs/-noprefs FTPhtml: ---> -FTPhtml/-noFTPhtml StoreDirIndexFile: ---> -store_index/-nostore_index Language: ---> -language FileSizeQuota: ---> -file_quota TransferQuota: ---> -trans_quota FSQuota: ---> -fs_quota EnableJS: ---> -enable_js/-disable_js UrlSchedulingStrategy: ---> -url_strategy NetscapeCacheDir: ---> -nscache_dir RemoveAdvertisement: ---> -remove_adv/-noremove_adv AdvBannerRE: ---> -adv_re CheckIfRunnigAtBackground: ---> -check_bg/-nocheck_bg SendIfRange: ---> -send_if_range/-nosend_if_range SchedulingCommand: ---> -sched_cmd UniqueLogName: ---> -unique_log/-nounique_log PostCommand: ---> -post_cmd SSLVersion: ---> -ssl_version UniqueSSLID: ---> -unique_sslid/-nounique_sslid AddHTTPHeader: ---> -httpad StatisticsFile: ---> -statfile WaitOnExit: ---> -ewait AllowedIPAdrressPattern: ---> -aip_pattern DisallowedIPAdrressPattern:---> -dip_pattern SiteLevel: ---> -site_level UseHTTP11: ---> -use_http11 MaxRunTime: ---> -max_time LocalIP: ---> -local_ip RequestInfo: ---> -request HashSize: ---> -hash_size NumberOfThreads: ---> -nthreads ImmediateMessages: ---> -immesg/-noimmsg HTMLFormData: ---> -formdata DumpFD: ---> -dumpfd DumpUrlFD: ---> -dump_urlfd DeleteAfterTransfer: ---> -del_after/-nodel_after UniqueDocName: ---> -unique_name/-nounique_name LeaveSiteEnterDirectory: ---> -leave_site_enter_dir/-dont_leave_site_enter_dir SinglePage: ---> -singlepage/-nosinglepage NTLMAuthorizationDomain: ---> -auth_ntlm_domain NTLMProxyAuthorizationDomain: ---> -auth_proxy_ntlm_domain JavascriptPattern: ---> -js_pattern FollowCommand: ---> -follow_cmd RetrieveSymlinks: ---> -retrieve_symlink/-noretrieve_symlink JSTransform: ---> -js_transform JSTransform2: ---> -js_transform2 FTPProxyUser: ---> -ftp_proxy_user FTPProxyPassword: ---> -ftp_proxy_pass LimitInlineObjects: ---> -limit_inlines/-dont_limit_inlines FTPListOptions: ---> -ftp_list_options FixWuFTPDBrokenLISTcmd: ---> -fix_wuftpd_list/-nofix_wuftpd_list PostUpdate: ---> -post_update/-nopost_update SeparateInfoDir: ---> -info_dir MozillaCacheDir: ---> -mozcache_dir AllowedPorts: ---> -aport DisallowedPorts: ---> -dport HackAddIndex: ---> -hack_add_index/-nohack_add_index JavaScriptFile: ---> -js_script_file FtpLoginHandshake: ---> -ftp_login_handshake NSSCertDir: ---> -nss_cert_dir NSSAcceptUnknownCert: ---> -nss_accept_unknown_cert/-nonss_accept_unknown_cert NSSDomesticPolicy: ---> -nss_domestic_policy/-nss_export_policy DontTouchUrlREPattern: ---> -dont_touch_url_rpattern DontTouchUrlPattern: ---> -dont_touch_url_pattern DontTouchTagREPattern: ---> -dont_touch_tag_rpattern HTMLTagPattern: ---> -tag_pattern HTMLTagREPattern: ---> -tag_rpattern URL: ---> one URL (more lines with URL: ... means more URL's) .fi .RE line which begins with '#' means comment. .br TrStrToStr: and TrChrToChr: must contain two quoted strings. All parameter names are case insensitive. If here is missing any option, try to look inside .B config.c source file. .br .sp See pavukrc.sample file for example .TP .IB .pavuk_authinfo .sp File should contain as many authentification records as you need. Records are separated by any number of empty lines. Parameter name is case insensitive. .sp Structure of record: .sp .RS .nf \fBProto:\fR ---> identification of protocol (ftp/http/https/..) - required field \fBHost:\fR ---> host name - required field \fBUser:\fR ---> name of user - optional \fBPass:\fR ---> password for user - optional \fBBase:\fR ---> base prefix of document path - optional \fBRealm:\fR ---> realm for HTTP authorization - optional \fBNTLMDomain:\fR ---> NT/LM domain for NTLM authorization - optional \fBType:\fR ---> HTTP authentification scheme - 1/user - user auth scheme - 2/Basic - Basic auth scheme (default) - 3/Digest - Digest auth scheme - 4/NTLM - NTLM auth scheme - optional .fi .RE .TP see pavuk_authinfo.sample file for example .TP .IB ~/.pavuk_keys this is file where are stored information about configurable menu option shortcuts. This is available only when compiled with Gtk+1.2 and higher. .TP .IB ~/.pavuk_remind_db this file contains informations about URLs for running in .B reminder mode. Structure of this file is very easy. Each line contains information abou one URL. first entry in line is last known modification time of URL (stored in time_t format - number of secons from 1.1.1970 GMT). And second entry is URL. .SH EXAMPLE COMMAND LINE .sp pavuk -mode mirror -nobg -store_info -info_dir .br /mirror/info -nthreads 1 -cdir /mirror/incoming -subdir .br /mirror/incoming -preserve_time -nopreserve_perm .br -nopreserve_slinks -noretrieve_symlink -force_reget .br -noRobots -trans_quota 16384 -maxsize 16777216 .br -max_time 28 -nodel_after -remove_before_store -ftpdir .br -ftplist -ftp_list_options -a -dont_leave_site .br -dont_leave_dir -all_to_local -remove_old -nostore_index .br -active_ftp_port_range 57344:65535 -always_mdtm .br -ftp_passive -base_level 2 http:///doc/ .SH SEE ALSO .sp Look into .B ChangeLog file for more informations about new features in particular versions of pavuk. .SH AUTHOR .sp Main development \fBOndrejicka Stefan\fR .br Look into .B CREDITS file of sources for additional information. .SH AVAILABILITY .sp pavuk is available from .B http://pavuk.sourceforge.net/ .PP pavuk-0.9.35/src/0000777000175000001440000000000010567011367010534 500000000000000pavuk-0.9.35/src/xpm/0000777000175000001440000000000010567011367011340 500000000000000pavuk-0.9.35/src/xpm/cantaccess.xpm0000644000175000001440000000052207667306551014121 00000000000000/* XPM */ static char * cantaccess_xpm[] = { "14 14 2 1", " c None", ". c #00FF00", ".. ...", "... ....", " ... .... ", " ... .... ", " ... .... ", " ...... ", " .... ", " .... ", " ...... ", " ... ... ", " ... .... ", " ... .... ", "... ....", ".. ..."}; pavuk-0.9.35/src/xpm/notprocessed.xpm0000644000175000001440000000052307667306551014523 00000000000000/* XPM */ static char * notprocessed_xpm[] = { "14 14 2 1", " c none", ". c yellow", " .... ", " .. .. ", " .. .. ", " .. .. ", " .. ", " .. ", " ... ", " ... ", " .. ", " .. ", " .. ", " ", " .. ", " .. "}; pavuk-0.9.35/src/xpm/video.xpm0000644000175000001440000000063007667306551013120 00000000000000/* XPM */ static char * video_xpm[] = { "14 14 7 1", " c None", ". c #000000", "+ c #CCCCCC", "@ c #333333", "# c #666666", "$ c #FFFFFF", "% c #999999", ".++.......++.@", ".++.####$.++.@", "....#%%%$....@", ".++.#%%%$.++.@", ".++.#%%%$.++.@", "....$$$$$....@", ".++.......++.@", ".++.####$.++.@", "....#%%%$....@", ".++.#%%%$.++.@", ".++.#%%%$.++.@", "....$$$$$....@", ".++.......++.@", ".++.......++.@"}; pavuk-0.9.35/src/xpm/gopherdir.xpm0000644000175000001440000000063007667306551013775 00000000000000/* XPM */ static char *gopherdir_xpm[] = { "14 14 5 1", /* colors */ ". c none", "# c #727272", "a c #80b0b0", "b c #e0e0e0", "c c #0a0a0a", /* pixels */ "..............", "..............", "...####.......", "..#aaaa#......", "##aaaaaa#####.", "##bbbbbbbbbb#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "#############c", "..cccccccccccc"}; pavuk-0.9.35/src/xpm/ftpdir.xpm0000644000175000001440000000062507667306551013306 00000000000000/* XPM */ static char *ftpdir_xpm[] = { "14 14 5 1", /* colors */ ". c none", "# c #828282", "a c #ffc125", "b c #ffffff", "c c #0a0a0a", /* pixels */ "..............", "..............", "...####.......", "..#aaaa#......", "##aaaaaa#####.", "##bbbbbbbbbb#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "##baaaaaaaaa#c", "#############c", "..cccccccccccc"}; pavuk-0.9.35/src/xpm/binary.xpm0000644000175000001440000000061107667306551013275 00000000000000/* XPM */ static char *binary_xpm[] = { " 14 14 4 1", /* colors */ ". c #ffffff", "# c #808080", "a c #c8c8c8", "b c #000000", /* pixels */ ".............#", ".aaaaaaaaaaab#", ".abababaabaab#", ".abababababab#", ".abababababab#", ".abababababab#", ".abababaabaab#", ".aaaaaaaaaaab#", ".aabaabaabaab#", ".abababababab#", ".abababababab#", ".abababababab#", ".aabaabaabaab#", ".bbbbbbbbbbbb#"}; pavuk-0.9.35/src/xpm/html.xpm0000644000175000001440000000105607667306551012761 00000000000000/* XPM */ static char * html_xpm[] = { "14 14 17 1", " c None", ". c #152E1F", "+ c #2B744E", "@ c #8A928E", "# c #109A3C", "$ c #58836D", "% c #39A35D", "& c #5A6060", "* c #6F8E7E", "= c #14442C", "- c #C6C8C7", "; c #53A870", "> c #415A54", ", c #4F6B63", "' c #6DB184", ") c #96BAA2", "! c #085F29", " >!!!!> ", " =$;))#)'+. ", " &;''%'###'!, ", " !'#)%'''%)*= ", ">%;''''%-%-++>", ".')#)-;;;'%++.", ".)'%''-)%;+@,.", ".#%-)%)'))$@+.", "+#'-'''#%++$!>", " ,)%%--#**+*= ", " ,)%%;*+@*+,, ", " >=**+!++=. ", " >&>&&> ", " "}; pavuk-0.9.35/src/xpm/redirected.xpm0000644000175000001440000000054107667306551014125 00000000000000/* XPM */ static char * redirected_xpm[] = { "14 14 3 1", " c None", "% c #FF0000", "^ c #660000", " ", " ", " ^% ", " ^%% ", " ^%%% ", " ^%%%%%%%%%%% ", " ^%%%%%%%%%%%%", " ^%%%%%%%%%%%^", " ^^^^^^^^%%%^ ", " ^%%^ ", " ^%^ ", " ^^ ", " ", " "}; pavuk-0.9.35/src/xpm/broken.xpm0000644000175000001440000000051607667306551013275 00000000000000/* XPM */ static char * broken_xpm[] = { "14 14 2 1", " c None", ". c #FF0000", ".. ...", "... ....", " ... .... ", " ... .... ", " ... .... ", " ...... ", " .... ", " .... ", " ...... ", " ... ... ", " ... .... ", " ... .... ", "... ....", ".. ..."}; pavuk-0.9.35/src/xpm/audio.xpm0000644000175000001440000000061007667306551013111 00000000000000/* XPM */ static char * audio_xpm[] = { "15 14 5 1", " c None", ". c #000000", "+ c #9A9A9A", "@ c #FF0000", "# c #FFFFFF", " .. @+ ", " .+. @+ ", " .+#. @+ ", " .+##. @ @ ", " ...+###. @+ +@", ".+++####. +@ +@", ".+######. +@ +@", ".+######. +@ +@", ".+.+.###. +@ +@", " ...#.##. @+ +@", " ...#.#. @ @ ", " ..+.. @+ ", " ..#. @+ ", " ... @+ "}; pavuk-0.9.35/src/xpm/compressed.xpm0000644000175000001440000000074507667306551014165 00000000000000/* XPM */ static char *compressed_xpm[] = { /* width height num_colors chars_per_pixel */ "14 14 7 1", /* colors */ " c none", ". c #ffffff", "# c #ff3333", "b c #999999", "c c #660000", "d c #333333", "e c #000000", /* pixels */ " ddddd ", " d..d.d ", " d..d..d ", " d..dedde ", " c d...eeee c ", " c#d....bbe#c ", " c##.....b##c ", " c###....###c ", " c##c....c##c ", " c#c.....bc#c ", " ccd.....becc ", " d.....be ", " d.....be ", " ddddddee "}; pavuk-0.9.35/src/xpm/text.xpm0000644000175000001440000000053307667306551013000 00000000000000/* XPM */ static char * text_xpm[] = { "14 14 3 1", " c None", "> c #999999", "| c #000000", " ||| ", " >||> ", " >|||> ", " >|>|| ", " >|> || ", " >||> || ", " >||>||>|| ", " |||> >||| ", " >|| >|| ", " > || ", " |||| ", " >||| ", " >|| ", " > "}; pavuk-0.9.35/src/xpm/image.xpm0000644000175000001440000000110107667306551013066 00000000000000/* XPM */ static char * image_xpm[] = { "14 15 17 1", " c None", ". c #302407", "+ c #53B92A", "@ c #EA3F3C", "# c #2B5E12", "$ c #215CD0", "% c #EFC7D0", "& c #C01E1D", "* c #ABBDFE", "= c #87110F", "- c #39951B", "; c #CA7A86", "> c #1B4BB2", ", c #FA8E8E", "' c #14336F", ") c #5E7DE3", "! c #72B2F2", " ** ", " *%**!) ", " !****))' ", " )!))$>'' ", " ))))$>'' ", " %%)))$>''' ", "%%%%))>>>''. ", "@,%,;&>>''## ", "@@@@=#*!--!-- ", "@@@&=-++*+-## ", "@&&&=#+++-### ", "@&&=.#++-###' ", " @&.#---#''' ", " +--#'' ", " -## "}; pavuk-0.9.35/src/xpm/rejected.xpm0000644000175000001440000000052007667306551013575 00000000000000/* XPM */ static char * rejected_xpm[] = { "14 14 2 1", " c None", ". c #FFFF00", ".. ...", "... ....", " ... .... ", " ... .... ", " ... .... ", " ...... ", " .... ", " .... ", " ...... ", " ... ... ", " ... .... ", " ... .... ", "... ....", ".. ..."}; pavuk-0.9.35/src/xpm/local.xpm0000644000175000001440000000056507667306551013113 00000000000000/* XPM */ static char *local_xpm[] = { "14 14 3 1", /* colors */ ". c None", "# c #0a0a0a", "a c #ffff00", /* pixels */ "......######..", ".....#aaaa#...", ".....#aaa#....", "....#aaa#.....", "....#aa#......", "...#aaa####...", "...###aaa#....", ".....#aa#.....", "....#aa#......", "...#aa#.......", "...#a#........", "..#a#.........", "..##..........", ". #..........."}; pavuk-0.9.35/src/xpm/incomplete.xpm0000644000175000001440000000106407667306551014153 00000000000000/* XPM */ static char * incomplete_xpm[] = { "14 14 17 1", " c None", ". c #415A54", "+ c #085F29", "@ c #53A870", "# c #96BAA2", "$ c #109A3C", "% c #6DB184", "& c #2B744E", "* c #152E1F", "= c #39A35D", "- c #4F6B63", "; c #6F8E7E", "> c #14442C", ", c #C6C8C7", "' c #8A928E", ") c #58836D", "! c #5A6060", " .++++. ", " @##$#%&* ", " %=%$$$%+- ", " + %%%=#;> ", ".=@ %=,=,&&.", "*%#$ @@%=&&*", "*#%=% @&'-*", "*$=,#= #)'&*", "&$%,%%% )+.", " -#==,,$ ;> ", " -#==@;&' - ", " .>;;&+&& ", " .!.!!. ", " "}; pavuk-0.9.35/src/mt.c0000644000175000001440000001600710300054562011225 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef HAVE_MT #include #include #include #include "gui.h" #include "mt.h" pthread_key_t _mt_key_main_thread; pthread_mutex_t _mt_urlstack_lock; pthread_mutex_t _mt_urlhash_lock; pthread_mutex_t _mt_filehash_lock; pthread_mutex_t _mt_cookies_lock; pthread_mutex_t _mt_authinfo_lock; pthread_mutex_t _mt_getlfname_lock; pthread_mutex_t _mt_dns_lock; pthread_mutex_t _mt_log_lock; pthread_mutex_t _mt_slog_lock; pthread_mutex_t _mt_tlog_lock; pthread_mutex_t _mt_dbase_lock; pthread_mutex_t _mt_dcnt_lock; pthread_mutex_t _mt_time_lock; pthread_mutex_t _mt_ghbn_lock; pthread_mutex_t _mt_output_lock; pthread_mutex_t _mt_proxy_lock; pthread_mutex_t _mt_dirr_lock; pthread_mutex_t _mt_tcnt_lock; pthread_mutex_t _mt_gtktree_lock; pthread_mutex_t _mt_gtkstatus_lock; pthread_mutex_t _mt_gtklog_lock; pthread_mutex_t _mt_rejcnt_lock; pthread_mutex_t _mt_failcnt_lock; pthread_mutex_t _mt_gcfg_lock; pthread_mutex_t _mt_nscache_lock; pthread_mutex_t _mt_robots_lock; pthread_mutex_t _mt_dumpurls_lock; pthread_mutex_t _mt_taghash_lock; pthread_mutex_t _mt_dumpfd_lock; pthread_mutex_t _mt_inet_ntoa_lock; pthread_mutex_t _mt_mozjs_lock; pthread_mutex_t _mt_ssl_map_lock; void mt_init(void) { static int __h_errno; pthread_mutex_init(&_mt_urlstack_lock, NULL); pthread_mutex_init(&_mt_urlhash_lock, NULL); pthread_mutex_init(&_mt_filehash_lock, NULL); pthread_mutex_init(&_mt_cookies_lock, NULL); pthread_mutex_init(&_mt_authinfo_lock, NULL); pthread_mutex_init(&_mt_dns_lock, NULL); pthread_mutex_init(&_mt_log_lock, NULL); pthread_mutex_init(&_mt_slog_lock, NULL); pthread_mutex_init(&_mt_tlog_lock, NULL); pthread_mutex_init(&_mt_dcnt_lock, NULL); pthread_mutex_init(&_mt_time_lock, NULL); pthread_mutex_init(&_mt_ghbn_lock, NULL); pthread_mutex_init(&_mt_getlfname_lock, NULL); pthread_mutex_init(&_mt_output_lock, NULL); pthread_mutex_init(&_mt_proxy_lock, NULL); pthread_mutex_init(&_mt_dirr_lock, NULL); pthread_mutex_init(&_mt_tcnt_lock, NULL); pthread_mutex_init(&_mt_gtktree_lock, NULL); pthread_mutex_init(&_mt_gtkstatus_lock, NULL); pthread_mutex_init(&_mt_gtklog_lock, NULL); pthread_mutex_init(&_mt_rejcnt_lock, NULL); pthread_mutex_init(&_mt_failcnt_lock, NULL); pthread_mutex_init(&_mt_gcfg_lock, NULL); pthread_mutex_init(&_mt_nscache_lock, NULL); pthread_mutex_init(&_mt_robots_lock, NULL); pthread_mutex_init(&_mt_dumpurls_lock, NULL); pthread_mutex_init(&_mt_taghash_lock, NULL); pthread_mutex_init(&_mt_dumpfd_lock, NULL); pthread_mutex_init(&_mt_inet_ntoa_lock, NULL); pthread_mutex_init(&_mt_mozjs_lock, NULL); pthread_mutex_init(&_mt_ssl_map_lock, NULL); pthread_key_create(&cfg.currdoc_key, NULL); pthread_key_create(&cfg.herrno_key, NULL); pthread_key_create(&cfg.thrnr_key, NULL); pthread_key_create(&cfg.privcfg_key, NULL); pthread_key_create(&_mt_key_main_thread, NULL); mt_semaphore_init(&cfg.nrunning_sem); mt_semaphore_init(&cfg.urlstack_sem); pthread_setspecific(cfg.herrno_key, &__h_errno); pthread_setspecific(cfg.currdoc_key, NULL); pthread_setspecific(cfg.thrnr_key, (void *) -1); pthread_setspecific(cfg.privcfg_key, &cfg); pthread_setspecific(_mt_key_main_thread, (void *) TRUE); cfg.cfg_changed = 0L; #ifdef GTK_FACE g_thread_init(NULL); #endif } int mt_pthread_mutex_lock(pthread_mutex_t * mutex, char *id) { int rv; DEBUG_MTLOCK("Try lock(%ld) - %s\n", pthread_self(), id); rv = pthread_mutex_lock(mutex); DEBUG_MTLOCK("Locking(%ld) - %s\n", pthread_self(), id); return rv; } int mt_pthread_mutex_unlock(pthread_mutex_t * mutex, char *id) { DEBUG_MTLOCK("Unlocking(%ld) - %s\n", pthread_self(), id); return pthread_mutex_unlock(mutex); } /********************************************************/ /* semaphore code based on Tom Wagner and Don Towsley's */ /* document "Getting Started With POSIX Threads" */ /********************************************************/ int mt_semaphore_init(mt_semaphore * sem) { sem->v = 1; if(pthread_mutex_init(&(sem->mutex), NULL)) { xperror("mt_semaphore_init - mutex_init"); return -1; } if(pthread_cond_init(&(sem->cond), NULL)) { xperror("mt_semaphore_init - cond_init"); return -1; } return 0; } int mt_semaphore_destroy(mt_semaphore * sem) { if(pthread_mutex_destroy(&(sem->mutex))) { xperror("mt_semaphore_destroy - mutex_destroy"); return -1; } if(pthread_cond_destroy(&(sem->cond))) { xperror("mt_semaphore_destroy - cond_destroy"); return -1; } return 0; } long mt_semaphore_up(mt_semaphore * sem) { long rv; pthread_mutex_lock(&(sem->mutex)); sem->v++; rv = sem->v; pthread_mutex_unlock(&(sem->mutex)); pthread_cond_signal(&(sem->cond)); return rv; } long mt_semaphore_down(mt_semaphore * sem) { long rv; pthread_mutex_lock(&(sem->mutex)); while(sem->v <= 0) { pthread_cond_wait(&(sem->cond), &(sem->mutex)); } sem->v--; rv = sem->v; pthread_mutex_unlock(&(sem->mutex)); return rv; } static void set_ts(struct timespec *ts, int msec) { #ifdef HAVE_PT_EXPIRATION_NP { struct timespec t; t.tv_sec = msec / 1000; t.tv_nsec = (msec % 1000) * 1000000; pthread_get_expiration_np(&t, ts); } #else /* HAVE_PT_EXPIRATION_NP */ #ifdef HAVE_GETTIMEOFDAY { struct timeval t; gettimeofday(&t, NULL); ts->tv_sec = t.tv_sec; ts->tv_nsec = t.tv_usec * 1000; } #else /* HAVE_GETTIMEOFDAY */ ts->tv_sec = time(NULL); ts->tv_nsec = 0; #endif /* HAVE_GETTIMEOFDAY */ ts->tv_sec += msec / 1000; ts->tv_nsec += (msec % 1000) * 1000000; ts->tv_sec += ts->tv_nsec / 1000000000; ts->tv_nsec %= 1000000000; #endif /* HAVE_PT_EXPIRATION_NP */ } long mt_semaphore_timed_down(mt_semaphore * sem, int msec) { long rv; struct timespec ts; int errnum = 0; pthread_mutex_lock(&(sem->mutex)); set_ts(&ts, msec); while(sem->v <= 0) { errnum = pthread_cond_timedwait(&(sem->cond), &(sem->mutex), &ts); if(errnum) break; } if(!errnum) { sem->v--; rv = sem->v; } else rv = -1; pthread_mutex_unlock(&(sem->mutex)); return rv; } long mt_semaphore_timed_wait(mt_semaphore * sem, int msec) { long rv; struct timespec ts; int errnum = 0; pthread_mutex_lock(&(sem->mutex)); set_ts(&ts, msec); while(sem->v <= 0) { errnum = pthread_cond_timedwait(&(sem->cond), &(sem->mutex), &ts); if(errnum) break; } if(!errnum) { rv = sem->v; } else rv = -1; pthread_mutex_unlock(&(sem->mutex)); return rv; } long mt_semaphore_decrement(mt_semaphore * sem) { long rv; pthread_mutex_lock(&(sem->mutex)); sem->v--; rv = sem->v; pthread_mutex_unlock(&(sem->mutex)); return rv; } #endif pavuk-0.9.35/src/mt.h0000644000175000001440000002217210142077741011242 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _have_mt_h_ #define _have_mt_h_ #ifdef HAVE_MT #include #define MT_STACK_SIZE 131072 extern pthread_key_t _mt_key_main_thread; #define MT_IS_MAIN_THREAD() (pthread_getspecific(_mt_key_main_thread)) extern pthread_mutex_t _mt_urlstack_lock; extern pthread_mutex_t _mt_urlhash_lock; extern pthread_mutex_t _mt_filehash_lock; extern pthread_mutex_t _mt_cookies_lock; extern pthread_mutex_t _mt_authinfo_lock; extern pthread_mutex_t _mt_dns_lock; extern pthread_mutex_t _mt_log_lock; extern pthread_mutex_t _mt_slog_lock; extern pthread_mutex_t _mt_tlog_lock; extern pthread_mutex_t _mt_dcnt_lock; extern pthread_mutex_t _mt_time_lock; extern pthread_mutex_t _mt_ghbn_lock; extern pthread_mutex_t _mt_getlfname_lock; extern pthread_mutex_t _mt_proxy_lock; extern pthread_mutex_t _mt_output_lock; extern pthread_mutex_t _mt_dirr_lock; extern pthread_mutex_t _mt_tcnt_lock; extern pthread_mutex_t _mt_gtktree_lock; extern pthread_mutex_t _mt_gtkstatus_lock; extern pthread_mutex_t _mt_gtklog_lock; extern pthread_mutex_t _mt_rejcnt_lock; extern pthread_mutex_t _mt_failcnt_lock; extern pthread_mutex_t _mt_gcfg_lock; extern pthread_mutex_t _mt_nscache_lock; extern pthread_mutex_t _mt_robots_lock; extern pthread_mutex_t _mt_dumpurls_lock; extern pthread_mutex_t _mt_dumpfd_lock; extern pthread_mutex_t _mt_taghash_lock; extern pthread_mutex_t _mt_jsres_lock; extern pthread_mutex_t _mt_inet_ntoa_lock; extern pthread_mutex_t _mt_mozjs_lock; extern pthread_mutex_t _mt_ssl_map_lock; #define LOCK_CFG_URLSTACK mt_pthread_mutex_lock(&_mt_urlstack_lock, "urlstack") #define UNLOCK_CFG_URLSTACK mt_pthread_mutex_unlock(&_mt_urlstack_lock, "urlstack") #define LOCK_CFG_URLHASH mt_pthread_mutex_lock(&_mt_urlhash_lock, "urlhash") #define UNLOCK_CFG_URLHASH mt_pthread_mutex_unlock(&_mt_urlhash_lock, "urlhash") #define LOCK_CFG_FILEHASH mt_pthread_mutex_lock(&_mt_filehash_lock, "filehash") #define UNLOCK_CFG_FILEHASH mt_pthread_mutex_unlock(&_mt_filehash_lock, "filehash") #define LOCK_COOKIES mt_pthread_mutex_lock(&_mt_cookies_lock, "cookies") #define UNLOCK_COOKIES mt_pthread_mutex_unlock(&_mt_cookies_lock, "cookies") #define LOCK_AUTHINFO mt_pthread_mutex_lock(&_mt_authinfo_lock, "authinfo") #define UNLOCK_AUTHINFO mt_pthread_mutex_unlock(&_mt_authinfo_lock, "authinfo") #define LOCK_GETLFNAME mt_pthread_mutex_lock(&_mt_getlfname_lock, "getlfname") #define UNLOCK_GETLFNAME mt_pthread_mutex_unlock(&_mt_getlfname_lock, "getlfname") #define LOCK_DNS mt_pthread_mutex_lock(&_mt_dns_lock, "dns") #define UNLOCK_DNS mt_pthread_mutex_unlock(&_mt_dns_lock, "dns") #define LOCK_SSL_MAP mt_pthread_mutex_lock(&_mt_ssl_map_lock, "ssl_map") #define UNLOCK_SSL_MAP mt_pthread_mutex_unlock(&_mt_ssl_map_lock, "ssl_map") #define LOCK_LOG mt_pthread_mutex_lock(&_mt_log_lock, "log") #define UNLOCK_LOG mt_pthread_mutex_unlock(&_mt_log_lock, "log") #define LOCK_SLOG mt_pthread_mutex_lock(&_mt_slog_lock, "slog") #define UNLOCK_SLOG mt_pthread_mutex_unlock(&_mt_slog_lock, "slog") #define LOCK_TLOG mt_pthread_mutex_lock(&_mt_tlog_lock, "tlog") #define UNLOCK_TLOG mt_pthread_mutex_unlock(&_mt_tlog_lock, "tlog") #define LOCK_DCNT mt_pthread_mutex_lock(&_mt_dcnt_lock, "dcnt") #define UNLOCK_DCNT mt_pthread_mutex_unlock(&_mt_dcnt_lock, "dcnt") #define LOCK_TIME mt_pthread_mutex_lock(&_mt_time_lock, "time") #define UNLOCK_TIME mt_pthread_mutex_unlock(&_mt_time_lock, "time") #define LOCK_GHBN mt_pthread_mutex_lock(&_mt_ghbn_lock, "ghbn") #define UNLOCK_GHBN mt_pthread_mutex_unlock(&_mt_ghbn_lock, "ghbn") #define LOCK_OUTPUT mt_pthread_mutex_lock(&_mt_output_lock, "output") #define UNLOCK_OUTPUT mt_pthread_mutex_unlock(&_mt_output_lock, "output") #define LOCK_PROXY mt_pthread_mutex_lock(&_mt_proxy_lock, "proxy") #define UNLOCK_PROXY mt_pthread_mutex_unlock(&_mt_proxy_lock, "proxy") #define LOCK_DIRR mt_pthread_mutex_lock(&_mt_dirr_lock, "dirr") #define UNLOCK_DIRR mt_pthread_mutex_unlock(&_mt_dirr_lock, "dirr") #define LOCK_TCNT mt_pthread_mutex_lock(&_mt_tcnt_lock, "tcnt") #define UNLOCK_TCNT mt_pthread_mutex_unlock(&_mt_tcnt_lock, "tcnt") #define LOCK_GTKTREE mt_pthread_mutex_lock(&_mt_gtktree_lock, "gtktree") #define UNLOCK_GTKTREE mt_pthread_mutex_unlock(&_mt_gtktree_lock, "gtktree") #define LOCK_GTKSTATUS mt_pthread_mutex_lock(&_mt_gtkstatus_lock, "gtkstatus") #define UNLOCK_GTKSTATUS mt_pthread_mutex_unlock(&_mt_gtkstatus_lock, "gtkstatus") #define LOCK_GTKLOG mt_pthread_mutex_lock(&_mt_gtklog_lock, "gtklog") #define UNLOCK_GTKLOG mt_pthread_mutex_unlock(&_mt_gtklog_lock, "gtklog") #define LOCK_REJCNT mt_pthread_mutex_lock(&_mt_rejcnt_lock, "rejcnt") #define UNLOCK_REJCNT mt_pthread_mutex_unlock(&_mt_rejcnt_lock, "rejcnt") #define LOCK_FAILCNT mt_pthread_mutex_lock(&_mt_failcnt_lock, "failcnt") #define UNLOCK_FAILCNT mt_pthread_mutex_unlock(&_mt_failcnt_lock, "failcnt") #define LOCK_URL(lurl) mt_pthread_mutex_lock(&(lurl)->lock, "url") #define UNLOCK_URL(lurl) mt_pthread_mutex_unlock(&(lurl)->lock, "url") #define LOCK_GCFG mt_pthread_mutex_lock(&_mt_gcfg_lock, "gcfg") #define UNLOCK_GCFG mt_pthread_mutex_unlock(&_mt_gcfg_lock, "gcfg") #define LOCK_NSCACHE mt_pthread_mutex_lock(&_mt_nscache_lock, "nscache") #define UNLOCK_NSCACHE mt_pthread_mutex_unlock(&_mt_nscache_lock, "nscache") #define LOCK_ROBOTS mt_pthread_mutex_lock(&_mt_robots_lock, "robots") #define UNLOCK_ROBOTS mt_pthread_mutex_unlock(&_mt_robots_lock, "robots") #define LOCK_DUMPURLS mt_pthread_mutex_lock(&_mt_dumpurls_lock, "dumpurls") #define UNLOCK_DUMPURLS mt_pthread_mutex_unlock(&_mt_dumpurls_lock, "dumpurls") #define LOCK_DUMPFD mt_pthread_mutex_lock(&_mt_dumpurls_lock, "dumpfd") #define UNLOCK_DUMPFD mt_pthread_mutex_unlock(&_mt_dumpfd_lock, "dumpfd") #define LOCK_TAG_HASH mt_pthread_mutex_lock(&_mt_taghash_lock, "tag_hash") #define UNLOCK_TAG_HASH mt_pthread_mutex_unlock(&_mt_taghash_lock, "tag_hash") #define LOCK_INETNTOA mt_pthread_mutex_lock(&_mt_inet_ntoa_lock, "inet_ntoa") #define UNLOCK_INETNTOA mt_pthread_mutex_unlock(&_mt_inet_ntoa_lock, "inet_ntoa") #define LOCK_MOZJS mt_pthread_mutex_lock(&_mt_mozjs_lock, "mozjs") #define UNLOCK_MOZJS mt_pthread_mutex_unlock(&_mt_mozjs_lock, "mozjs") #define _h_errno_ (*((int *)pthread_getspecific(cfg.herrno_key))) extern int mt_pthread_mutex_lock(pthread_mutex_t *, char *); extern int mt_pthread_mutex_unlock(pthread_mutex_t *, char *); typedef struct _mt_semaphore { long v; pthread_mutex_t mutex; pthread_cond_t cond; } mt_semaphore; extern int mt_semaphore_init(mt_semaphore *); extern int mt_semaphore_destroy(mt_semaphore *); extern long mt_semaphore_up(mt_semaphore *); extern long mt_semaphore_down(mt_semaphore *); extern long mt_semaphore_timed_down(mt_semaphore *, int); extern long mt_semaphore_timed_wait(mt_semaphore *, int); extern long mt_semaphore_decrement(mt_semaphore *); #else #define MT_IS_MAIN_THREAD() TRUE #define LOCK_CFG_URLSTACK #define UNLOCK_CFG_URLSTACK #define LOCK_CFG_URLHASH #define UNLOCK_CFG_URLHASH #define LOCK_CFG_FILEHASH #define UNLOCK_CFG_FILEHASH #define LOCK_COOKIES #define UNLOCK_COOKIES #define LOCK_AUTHINFO #define UNLOCK_AUTHINFO #define LOCK_DNS #define UNLOCK_DNS #define LOCK_SSL_MAP #define UNLOCK_SSL_MAP #define LOCK_LOG #define UNLOCK_LOG #define UNLOCK_SLOG #define LOCK_SLOG #define LOCK_TLOG #define UNLOCK_TLOG #define LOCK_GETLFNAME #define UNLOCK_GETLFNAME #define LOCK_DCNT #define UNLOCK_DCNT #define LOCK_TIME #define UNLOCK_TIME #define LOCK_OUTPUT #define UNLOCK_OUTPUT #define LOCK_GHBN #define UNLOCK_GHBN #define LOCK_PROXY #define UNLOCK_PROXY #define LOCK_DIRR #define UNLOCK_DIRR #define LOCK_TCNT #define UNLOCK_TCNT #define LOCK_GTKTREE #define UNLOCK_GTKTREE #define LOCK_GTKSTATUS #define UNLOCK_GTKSTATUS #define LOCK_GTKLOG #define UNLOCK_GTKLOG #define LOCK_REJCNT #define UNLOCK_REJCNT #define LOCK_FAILCNT #define UNLOCK_FAILCNT #define LOCK_URL(lurl) #define UNLOCK_URL(lurl) #define LOCK_GCFG #define UNLOCK_GCFG #define LOCK_NSCACHE #define UNLOCK_NSCACHE #define LOCK_ROBOTS #define UNLOCK_ROBOTS #define LOCK_DUMPURLS #define UNLOCK_DUMPURLS #define LOCK_DUMPFD #define UNLOCK_DUMPFD #define LOCK_TAG_HASH #define UNLOCK_TAG_HASH #define LOCK_INETNTOA #define UNLOCK_INETNTOA #define LOCK_MOZJS #define UNLOCK_MOZJS #define _h_errno_ h_errno #endif extern void mt_init(void); #endif pavuk-0.9.35/src/re.c0000644000175000001440000001514310300054563011214 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef HAVE_REGEX #include "re.h" #include "tools.h" void re_free(re_entry * ree) { #ifdef HAVE_POSIX_REGEX regfree(&(ree->preg)); #endif #ifdef HAVE_V8_REGEX _free(ree->preg); #endif #ifdef HAVE_GNU_REGEX regfree(&(ree->preg)); #endif #ifdef HAVE_PCRE_REGEX _free(ree->preg); _free(ree->preg_extra); #endif _free(ree->pattern); _free(ree); } re_entry *re_make(const char *str) { int ec; re_entry *rv; #if defined(HAVE_BSD_REGEX) || defined(HAVE_GNU_REGEX) || defined(HAVE_PCRE_REGEX) char *p; #endif rv = _malloc(sizeof(re_entry)); #ifdef HAVE_POSIX_REGEX if((ec = regcomp(&(rv->preg), str, REG_EXTENDED))) { char pom[PATH_MAX]; xprintf(0, gettext("Error compiling regular expression : %s\n"), str); regerror(ec, &(rv->preg), pom, sizeof(pom)); xprintf(0, "%s\n", pom); regfree(&(rv->preg)); _free(rv); } #endif #ifdef HAVE_V8_REGEX if(!(rv->preg = regcomp(str))) { xprintf(0, gettext("Error compiling regular expression : %s\n"), str); _free(rv); } #endif #ifdef HAVE_BSD_REGEX if((p = re_comp(str))) { xprintf(0, gettext("Error compiling regular expression : %s\n"), str); xprintf(0, "%s", p); _free(rv); } #endif #ifdef HAVE_GNU_REGEX rv->preg.allocated = 0; rv->preg.buffer = NULL; rv->preg.fastmap = NULL; if((p = re_compile_pattern(str, strlen(str), &rv->preg))) { xprintf(0, gettext("Error compiling regular expression : %s\n"), str); xprintf(0, "%s\n", p); regfree(&(rv->preg)); _free(rv); } #endif #ifdef HAVE_PCRE_REGEX if((rv->preg = pcre_compile(str, 0, (const char **) &p, &ec, NULL))) { rv->preg_extra = pcre_study(rv->preg, 0, (const char **) &p); } if(!rv->preg) { xprintf(0, gettext("Error compiling regular expression : %s\n"), str); xprintf(0, "%s\n", p); _free(rv); } #endif else rv->pattern = new_string(str); return rv; } int re_pmatch(re_entry * ree, char *str) { #ifdef HAVE_POSIX_REGEX return !regexec(&(ree->preg), str, 0, NULL, 0); #endif #ifdef HAVE_V8_REGEX return regexec(ree->preg, str); #endif #ifdef HAVE_BSD_REGEX re_comp(ree->pattern); return re_exec(str); #endif #ifdef HAVE_GNU_REGEX return re_match(&(ree->preg), str, strlen(str), 0, NULL) >= 0; #endif #ifdef HAVE_PCRE_REGEX return pcre_exec(ree->preg, ree->preg_extra, str, strlen(str), 0, 0, NULL, 0) >= 0; #endif } int re_pmatch_sub(re_entry * ree, char *str, int nr, int *start, int *end) { int rv = FALSE; if(rv < 0) return FALSE; #ifdef HAVE_POSIX_REGEX if(nr < (ree->preg.re_nsub + 1)) { regmatch_t *pmatch; pmatch = _malloc((ree->preg.re_nsub + 1) * sizeof(regmatch_t)); rv = !regexec(&(ree->preg), str, ree->preg.re_nsub + 1, pmatch, 0); if(rv) { *start = pmatch[nr].rm_so; *end = pmatch[nr].rm_eo; } _free(pmatch); } #endif #ifdef HAVE_V8_REGEX /* not supported ! */ rv = FALSE; #endif #ifdef HAVE_BSD_REGEX /* not supported ! */ rv = FALSE; #endif #ifdef HAVE_GNU_REGEX if(nr < lfnamep->preg.re_nsub) { struct re_registers pmatch; int sra; pmatch.start = _malloc((ree->preg.re_nsub + 1) * sizeof(*pmatch.start)); pmatch.end = _malloc((ree->preg.re_nsub + 1) * sizeof(*pmatch.end)); ree->pmatch.num_regs = rv->preg.re_nsub + 1; sra = ree->preg.regs_allocated; ree->preg.regs_allocated = REGS_FIXED; rv = re_match(&(ree->preg), str, strlen(str), 0, &pmatch) >= 0; if(rv) { *start = pmatch.start[nr]; *end = pmatch.end[nr]; } ree->preg.regs_allocated = sra; _free(pmatch.start); _free(pmatch.end); } #endif #ifdef HAVE_PCRE_REGEX { int *pmatch; int pmatch_nr; pcre_fullinfo(ree->preg, ree->preg_extra, PCRE_INFO_CAPTURECOUNT, &pmatch_nr); if(pmatch_nr >= nr) { pmatch = (int *) _malloc((pmatch_nr + 1) * 3 * sizeof(int)); rv = pcre_exec(ree->preg, ree->preg_extra, str, strlen(str), 0, 0, pmatch, (pmatch_nr + 1) * 3) >= 0; if(rv) { *start = pmatch[2 * nr]; *end = pmatch[2 * nr + 1]; } _free(pmatch); } } #endif return rv; } int re_pmatch_subs(re_entry * ree, char *str, int *nr, int **subs) { int rv = FALSE; if(rv < 0) return FALSE; #ifdef HAVE_POSIX_REGEX { regmatch_t *pmatch; pmatch = _malloc((ree->preg.re_nsub + 1) * sizeof(regmatch_t)); rv = !regexec(&(ree->preg), str, ree->preg.re_nsub + 1, pmatch, 0); if(rv) { *subs = (int *) _malloc((ree->preg.re_nsub + 1) * 2 * sizeof(int)); for(*nr = 0; *nr < (ree->preg.re_nsub + 1); (*nr)++) { (*subs)[2 * (*nr)] = pmatch[*nr].rm_so; (*subs)[2 * (*nr) + 1] = pmatch[*nr].rm_eo; } } _free(pmatch); } #endif #ifdef HAVE_V8_REGEX /* not supported ! */ rv = FALSE; #endif #ifdef HAVE_BSD_REGEX /* not supported ! */ rv = FALSE; #endif #ifdef HAVE_GNU_REGEX { struct re_registers pmatch; int sra; pmatch.start = _malloc((ree->preg.re_nsub + 1) * sizeof(*pmatch.start)); pmatch.end = _malloc((ree->preg.re_nsub + 1) * sizeof(*pmatch.end)); ree->pmatch.num_regs = rv->preg.re_nsub + 1; sra = ree->preg.regs_allocated; ree->preg.regs_allocated = REGS_FIXED; rv = re_match(&(ree->preg), str, strlen(str), 0, &pmatch) >= 0; if(rv) { *subs = (int *) _malloc((ree->preg.re_nsub + 1) * 2 * sizeof(int)); for(*nr = 0; *nr < (ree->preg.re_nsub + 1); (*nr)++) { (*subs)[2 * (*nr)] = pmatch.start[*nr]; (*subs)[2 * (*nr) + 1] = pmatch.end[*nr]; } } ree->preg.regs_allocated = sra; _free(pmatch.start); _free(pmatch.end); } #endif #ifdef HAVE_PCRE_REGEX { int *pmatch; int pmatch_nr; pcre_fullinfo(ree->preg, ree->preg_extra, PCRE_INFO_CAPTURECOUNT, &pmatch_nr); pmatch = (int *) _malloc((pmatch_nr + 1) * 3 * sizeof(int)); rv = pcre_exec(ree->preg, ree->preg_extra, str, strlen(str), 0, 0, pmatch, (pmatch_nr + 1) * 3) >= 0; if(rv) { *subs = (int *) _malloc((pmatch_nr + 1) * 2 * sizeof(int)); for(*nr = 0; *nr < (pmatch_nr + 1); (*nr)++) { (*subs)[2 * (*nr)] = pmatch[2 * (*nr)]; (*subs)[2 * (*nr) + 1] = pmatch[2 * (*nr) + 1]; } } _free(pmatch); } #endif return rv; } #endif pavuk-0.9.35/src/re.h0000644000175000001440000000242110151321616011214 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _re_h_ #define _re_h_ #ifdef HAVE_REGEX #ifdef HAVE_REGEX_H #include #endif #ifdef HAVE_POSIX_REGEX typedef struct { regex_t preg; char *pattern; } re_entry; #endif #ifdef HAVE_V8_REGEX #ifndef NSUBEXP #include #endif typedef struct { regexp *preg; char *pattern; } re_entry; #endif #ifdef HAVE_BSD_REGEX typedef struct { char *pattern; } re_entry; #endif #ifdef HAVE_GNU_REGEX typedef struct { struct re_pattern_buffer preg; char *pattern; } re_entry; #endif #ifdef HAVE_PCRE_REGEX #include typedef struct { pcre *preg; pcre_extra *preg_extra; char *pattern; } re_entry; #endif extern re_entry *re_make(const char *); extern void re_free(re_entry *); extern int re_pmatch(re_entry *, char *); extern int re_pmatch_sub(re_entry *, char *, int, int *, int *); extern int re_pmatch_subs(re_entry *, char *, int *, int **); #endif #endif pavuk-0.9.35/src/tr.c0000644000175000001440000001447510362662467011262 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include "tools.h" #include "tr.h" #define HEXASC2HEXNR(x) (((x) >= '0' && (x) <= '9') ? \ ((x) - '0') : (tl_ascii_tolower(x) - 'a' + 10)) typedef enum { TR_ALPHA, TR_ALNUM, TR_NUM, TR_XNUM, TR_SPACE, TR_BLANK, TR_CTRL, TR_PRINTABLE, TR_UPPER, TR_LOWER, TR_PUNCT, TR_GRAPH, TR_NONPRINTABLE, TR_BADCLS } tr_cls; typedef struct { char *name; tr_cls cls; } tr_cls_str; static const tr_cls_str tr_cls_map[] = { {"[:upper:]", TR_UPPER}, {"[:lower:]", TR_LOWER}, {"[:alpha:]", TR_ALPHA}, {"[:alnum:]", TR_ALNUM}, {"[:digit:]", TR_NUM}, {"[:xdigit:]", TR_XNUM}, {"[:space:]", TR_SPACE}, {"[:blank:]", TR_BLANK}, {"[:cntrl:]", TR_CTRL}, {"[:print:]", TR_PRINTABLE}, {"[:nprint:]", TR_NONPRINTABLE}, {"[:punct:]", TR_PUNCT}, {"[:graph:]", TR_GRAPH} }; static int tr_is_cls(char c, tr_cls cls) { switch (cls) { case TR_ALPHA: return tl_ascii_isalpha(c); break; case TR_ALNUM: return tl_ascii_isalnum(c); break; case TR_NUM: return tl_ascii_isdigit(c); break; case TR_XNUM: return tl_ascii_isxdigit(c); break; case TR_SPACE: return tl_ascii_isspace(c); break; case TR_BLANK: return tl_ascii_isblank(c); break; case TR_CTRL: return tl_ascii_iscntrl(c); break; case TR_PRINTABLE: return tl_ascii_isprint(c); break; case TR_UPPER: return tl_ascii_isupper(c); break; case TR_LOWER: return tl_ascii_islower(c); break; case TR_PUNCT: return tl_ascii_ispunct(c); break; case TR_GRAPH: return tl_ascii_isgraph(c); break; case TR_NONPRINTABLE: return !tl_ascii_isprint(c); break; default: return FALSE; } } static unsigned int tr_append_cls(char *p, tr_cls cls) { unsigned int i; unsigned int apnd = 0; for(i = 0; i <= 255; i++) { if(tr_is_cls(i, cls)) { p[apnd] = i; p[apnd + 1] = '\0'; apnd++; } } return apnd; } static unsigned char tr_get_escaped_str(char **p) { char *ps = *p; char rc; switch (ps[1]) { case 'n': rc = '\n'; (*p)++; break; case 'r': rc = '\r'; (*p)++; break; case 't': rc = '\t'; (*p)++; break; break; case '0': if(ps[2] == 'x') { if(tl_ascii_isxdigit(ps[3]) && tl_ascii_isxdigit(ps[4])) { rc = (HEXASC2HEXNR(ps[3]) << 4) + HEXASC2HEXNR(ps[4]); (*p) += 4; } else rc = ps[0]; } else rc = ps[0]; break; default: rc = ps[1]; (*p)++; } return rc; } static char *tr_expand_str(char *str, int *rlen) { char *p; char pom[4096]; int i; pom[0] = '\0'; for(i = 0, p = str; *p; p++) { switch (*p) { case '\\': pom[i] = tr_get_escaped_str(&p); pom[i + 1] = '\0'; i++; break; case '[': { int j; tr_cls cls = TR_BADCLS; for(j = 0; j < TR_BADCLS; j++) { if(!strncmp(p, tr_cls_map[j].name, strlen(tr_cls_map[j].name))) { cls = tr_cls_map[j].cls; p += strlen(tr_cls_map[j].name) - 1; break; } } if(cls != TR_BADCLS) i += tr_append_cls((pom + i), cls); else { pom[i] = *p; pom[i + 1] = '\0'; i++; } } break; case '-': { char strtc; char endc; int pc; if(i) strtc = pom[i - 1] + 1; else strtc = '\0'; if(*(p + 1)) { p++; if(*p == '\\') { endc = tr_get_escaped_str(&p); } else endc = *p; } else endc = '\255'; for(pc = strtc; pc <= endc; pc++) { pom[i] = pc; i++; } } break; default: pom[i] = *p; pom[i + 1] = '\0'; i++; } } if(rlen) *rlen = i; return (tl_strdup(pom)); } char *tr_chr_chr(char *fset, char *tset, char *str) { char *p, *d; int i; int tsetlen = strlen(tset); char *retv = tl_strdup(str); for(p = str, d = retv; *p; p++, d++) { for(i = 0; fset[i]; i++) { if(fset[i] == *p) { *d = tset[(tsetlen > i) ? i : (tsetlen - 1)]; break; } } } return retv; } char *tr_del_chr(char *set, char *str) { char *p, *d; int i; char *retv = tl_strdup(str); int found; for(p = str, d = retv; *p; p++) { found = FALSE; for(i = 0; set[i]; i++) { if(set[i] == *p) { found = TRUE; break; } } if(!found) { *d = *p; d++; *d = '\0'; } } return retv; } char *tr_str_str(char *s1, char *s2, char *str) { char *p = str, *p1, *retv; int i = 0; while(p) { if((p = strstr(p, s1))) { i++; p += strlen(s1); } } retv = (char *) malloc(1 + strlen(str) - i * strlen(s1) + i * (s2 ? strlen(s2) : 0)); memset(retv, '\0', 1 + strlen(str) - i * strlen(s1) + i * (s2 ? strlen(s2) : 0)); p = p1 = str; while(p1) { p1 = strstr(p, s1); if(p1) { strncat(retv, p, p1 - p); if(s2) strcat(retv, s2); } else strcat(retv, p); p = p1 + strlen(s1); } return retv; } char *tr(char *str) { char *p1, *p2; char *s1, *s2; if(priv_cfg.tr_str_s1 && priv_cfg.tr_str_s2) { p1 = tr_str_str(priv_cfg.tr_str_s1, priv_cfg.tr_str_s2, str); } else { p1 = tl_strdup(str); } if(priv_cfg.tr_del_chr) { s1 = tr_expand_str(priv_cfg.tr_del_chr, NULL); p2 = tr_del_chr(s1, p1); _free(s1); _free(p1); } else { p2 = p1; } if(priv_cfg.tr_chr_s1 && priv_cfg.tr_chr_s2) { s1 = tr_expand_str(priv_cfg.tr_chr_s1, NULL); s2 = tr_expand_str(priv_cfg.tr_chr_s2, NULL); p1 = tr_chr_chr(s1, s2, p2); _free(s1); _free(s2); _free(p2); } else { p1 = p2; } return p1; } pavuk-0.9.35/src/tr.h0000644000175000001440000000112210362662234011240 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _tr_h_ #define _tr_h_ extern char *tr_chr_chr(char *, char *, char *); extern char *tr_str_str(char *, char *, char *); extern char *tr_del_chr(char *, char *); extern char *tr(char *); #endif pavuk-0.9.35/src/htmltags.c0000644000175000001440000003670410325725434012450 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "html.h" #include "tools.h" /*************************************************************/ /* tabulka znamych znaciek a atributov ktore sa spracovavaju */ /* FIXME: Translate me! */ /*************************************************************/ html_tag_t html_link_tags[] = { {HTML_TAG_HEAD, "HEAD", { {HTML_ATTRIB_PROFILE, "PROFILE", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_BODY, "BODY", { {HTML_ATTRIB_BACKGROUND, "BACKGROUND", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_JSEVENT, "ONLOAD", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_JSEVENT, "ONUNLOAD", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_TABLE, "TABLE", { {HTML_ATTRIB_BACKGROUND, "BACKGROUND", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_TH, "TH", { {HTML_ATTRIB_BACKGROUND, "BACKGROUND", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_TD, "TD", { {HTML_ATTRIB_BACKGROUND, "BACKGROUND", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_IMG, "IMG", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_LOWSRC, "LOWSRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_LONGDESC, "LONGDESC", LINK_DOWNLD}, {HTML_ATTRIB_USEMAP, "USEMAP", LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_JSEVENT, "ONMOUSEOVER", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_JSEVENT, "ONCLICK", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_JSEVENT, "ONDBLCLICK", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_INPUT, "INPUT", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_USEMAP, "USEMAP", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_FRAME, "FRAME", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_LONGDESC, "LONGDESC", LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_IFRAME, "IFRAME", { {HTML_ATTRIB_SRC, "SRC", LINK_DOWNLD}, {HTML_ATTRIB_LONGDESC, "LONGDESC", LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_APPLET, "APPLET", { {HTML_ATTRIB_CODEBASE, "CODEBASE", 0}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_SCRIPT, "SCRIPT", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_SCRIPT | LINK_DOWNLD}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_SOUND, "SOUND", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_BGSOUND, "BGSOUND", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_EMBED, "EMBED", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_AREA, "AREA", { {HTML_ATTRIB_HREF, "HREF", LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_JSEVENT, "ONCLICK", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_BASE, "BASE", { {HTML_ATTRIB_HREF, "HREF", 0}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_FIG, "FIG", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_OVERLAY, "OVERLAY", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_A, "A", { {HTML_ATTRIB_HREF, "HREF", LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_JSEVENT, "ONMOUSEOVER", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_JSEVENT, "ONCLICK", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_JSEVENT, "ONDBLCLICK", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_LINK, "LINK", { {HTML_ATTRIB_HREF, "HREF", LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_FORM, "FORM", { {HTML_ATTRIB_ACTION, "ACTION", LINK_FORM}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_META, "META", { {HTML_ATTRIB_CONTENT, "CONTENT", LINK_DOWNLD}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_INS, "INS", { {HTML_ATTRIB_CITE, "CITE", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_DEL, "DEL", { {HTML_ATTRIB_CITE, "CITE", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_Q, "Q", { {HTML_ATTRIB_CITE, "CITE", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_SPAN, "SPAN", { {HTML_ATTRIB_HREF, "HREF", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_DIV, "DIV", { {HTML_ATTRIB_HREF, "HREF", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_OBJECT, "OBJECT", { {HTML_ATTRIB_DATA, "DATA", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_USEMAP, "USEMAP", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_JSEVENT, "ONMOUSEOVER", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_JSEVENT, "ONCLICK", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_JSEVENT, "ONDBLCLICK", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_LAYER, "LAYER", { {HTML_ATTRIB_SRC, "SRC", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_ADDRESS, "ADDRESS", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_BLOCKQUOTE, "BLOCKQUTE", { {HTML_ATTRIB_CITE, "CITE", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_CENTER, "CENTER", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_H1, "H1", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_H2, "H2", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_H3, "H3", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_H4, "H4", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_H5, "H5", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_H6, "H6", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_HR, "HR", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_ISINDEX, "ISINDEX", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_P, "P", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_PRE, "PRE", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_NOSCRIPT, "NOSCRIPT", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_DIR, "DIR", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_DL, "DL", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_DT, "DT", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_DD, "DD", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_LI, "LI", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_MENU, "MENU", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_OL, "OL", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_UL, "UL", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_CAPTION, "CAPTION", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_COLGROUP, "COLGROUP", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_COL, "COL", { {HTML_ATTRIB_BACKGROUND, "BACKGROUND", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_THEAD, "THEAD", { {HTML_ATTRIB_BACKGROUND, "BACKGROUND", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_TFOOT, "TFOOT", { {HTML_ATTRIB_BACKGROUND, "BACKGROUND", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_TBODY, "TBODY", { {HTML_ATTRIB_BACKGROUND, "BACKGROUND", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_FIELDSET, "FIELDSET", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_BUTTON, "BUTTON", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_LEGEND, "LEGEND", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_LABEL, "LABEL", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_SELECT, "SELECT", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_OPTGROUP, "OPTGROUP", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_OPTION, "OPTION", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_TEXTAREA, "TEXTAREA", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_BDO, "BDO", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_BR, "BR", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_FONT, "FONT", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_MAP, "MAP", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_SUB, "SUB", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_SUP, "SUP", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_ABBR, "ABBR", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_ACRONYM, "ACRONYM", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_CITE, "CITE", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_CODE, "CODE", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_DFN, "DFN", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_EM, "EM", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_KBD, "KBD", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_SAMP, "SAMP", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_STRONG, "STRONG", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_VAR, "VAR", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_B, "B", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_BIG, "BIG", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_I, "I", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_S, "S", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_SMALL, "SMALL", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_STRIKE, "STRIKE", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_TT, "TT", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_U, "U", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_FRAMESET, "FRAMESET", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_JSEVENT, "ONLOAD", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_JSEVENT, "ONUNLOAD", LINK_JS | LINK_DOWNLD | LINK_INLINE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_NOFRAMES, "NOFRAMES", { {HTML_ATTRIB_STYLE, "STYLE", LINK_STYLE}, {HTML_ATTRIB_NULL, NULL, 0} } }, {HTML_TAG_CSOBJ, "CSOBJ", { {HTML_ATTRIB_HT, "HT", LINK_INLINE | LINK_DOWNLD}, {HTML_ATTRIB_NULL, NULL, 0} } } }; int html_link_tags_num(void) { return NUM_ELEM(html_link_tags); } pavuk-0.9.35/src/cleanup.c0000644000175000001440000000274010330157355012242 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include "dns.h" #include "htmlparser.h" #include "robots.h" #include "ainterface.h" #include "jsbind.h" #include "myssl.h" void pavuk_do_at_exit(void) { #if defined(I_FACE) && !defined(HAVE_MT) dns_server_kill(); #endif #ifdef HAVE_MOZJS pjs_destroy(); #endif #ifdef USE_SSL my_ssl_cleanup(); #endif robots_do_cleanup(); html_parser_do_cleanup(); #if defined(HAVE_MT) && defined(I_FACE) if(!cfg.xi_face) #endif free_all(); if(cfg.url_hash_tbl) { dlhash_free(cfg.url_hash_tbl); cfg.url_hash_tbl = NULL; } if(cfg.fn_hash_tbl) { dlhash_free(cfg.fn_hash_tbl); cfg.fn_hash_tbl = NULL; } dns_free_tab(); cfg_free_params(); while(cfg.request) { url_info_free((url_info *) cfg.request->data); cfg.request = dllist_remove_entry(cfg.request, cfg.request); } _free(cfg.time); _free(cfg.local_host); _free(cfg.path_to_home); _free(cfg.install_path); #ifdef __CYGWIN__ if(isatty(0) && cfg.wait_on_exit) { printf(gettext("press any key to exit\n")); getc(stdin); } #endif } pavuk-0.9.35/src/gcinfo.c0000644000175000001440000001631110146657462012070 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include #include #include #include "config.h" #include "gcinfo.h" #include "url.h" #include "doc.h" #include "tools.h" #include "http.h" #include "ftp.h" #include "myssl.h" void save_global_connection_data(global_connection_info *infop, doc *docp) { /*** preserve FTP control connection ***/ if(docp->ftp_control) { infop->ftp_con.proto = docp->doc_url->type; infop->ftp_con.control = docp->ftp_control; infop->ftp_con.host = new_string(url_get_site(docp->doc_url)); infop->ftp_con.port = url_get_port(docp->doc_url); infop->ftp_con.user = new_string(url_get_user(docp->doc_url, NULL)); infop->ftp_con.passwd = new_string(url_get_pass(docp->doc_url, NULL)); } else { infop->ftp_con.control = NULL; infop->ftp_con.port = 0; _free(infop->ftp_con.host); _free(infop->ftp_con.user); _free(infop->ftp_con.passwd); } /*** preserve SSL connection ***/ #if defined(USE_SSL) && defined(USE_SSL_IMPL_OPENSSL) if(docp->ssl_data_con.ssl_con) { infop->ssl_con.ssl_con = docp->ssl_data_con.ssl_con; infop->ssl_con.ssl_ctx = docp->ssl_data_con.ssl_ctx; } else { infop->ssl_con.ssl_con = NULL; infop->ssl_con.ssl_ctx = NULL; } #endif /*** preserve HTTP connection infos ***/ if(cfg.auth_reuse_nonce) infop->http_con.auth_digest = (http_digest_info *) docp->auth_digest; else infop->http_con.auth_digest = NULL; if(cfg.auth_reuse_proxy_nonce) infop->http_con.auth_proxy_digest = (http_digest_info *) docp->auth_proxy_digest; else infop->http_con.auth_proxy_digest = NULL; if(docp->datasock) { infop->http_con.connection = docp->datasock; infop->http_con.proto = docp->doc_url->type; infop->http_con.port = url_get_port(docp->doc_url); infop->http_con.host = new_string(url_get_site(docp->doc_url)); if(docp->http_proxy) { infop->http_con.http_proxy_port = docp->http_proxy_port; infop->http_con.http_proxy = docp->http_proxy; docp->http_proxy = NULL; } else { infop->http_con.http_proxy = NULL; infop->http_con.http_proxy_port = 0; } } else { infop->http_con.connection = NULL; infop->http_con.proto = docp->doc_url->type; infop->http_con.port = 0; _free(infop->http_con.host); _free(infop->http_con.http_proxy); } _free(docp->http_proxy); } void restore_global_connection_data(global_connection_info *infop, doc *docp) { #if defined(HAVE_MT) && defined(I_FACE) if(cfg.cfg_changed > cfg.timestamp) { privcfg_free(&priv_cfg); privcfg_make_copy(&priv_cfg); } #endif if(infop->ftp_con.control) { char *pass = url_get_pass(docp->doc_url, NULL); char *user = url_get_user(docp->doc_url, NULL); char *host = url_get_site(docp->doc_url); unsigned short port = url_get_port(docp->doc_url); if((docp->doc_url->type == URLT_FTP || docp->doc_url->type == URLT_FTPS) && infop->ftp_con.proto == docp->doc_url->type && infop->ftp_con.port == port && !strcmp(infop->ftp_con.host, host) && ((pass && infop->ftp_con.passwd && !strcmp(pass, infop->ftp_con.passwd)) || (!pass && !infop->ftp_con.passwd)) && ((user && infop->ftp_con.user && !strcmp(user, infop->ftp_con.user)) || (!user && !infop->ftp_con.user))) { docp->ftp_control = infop->ftp_con.control; } else { bufio_write(infop->ftp_con.control, "QUIT\r\n", 6); bufio_close(infop->ftp_con.control); } _free(infop->ftp_con.host); _free(infop->ftp_con.user); _free(infop->ftp_con.passwd); } infop->ftp_con.control = NULL; #if defined(USE_SSL) && defined(USE_SSL_IMPL_OPENSSL) if(infop->ssl_con.ssl_con) { docp->ssl_data_con.ssl_con = infop->ssl_con.ssl_con; docp->ssl_data_con.ssl_ctx = infop->ssl_con.ssl_ctx; } else memset(&docp->ssl_data_con, '\0', sizeof(ssl_connection)); #endif if(cfg.auth_reuse_nonce && infop->http_con.auth_digest && (docp->doc_url->type == URLT_HTTP || docp->doc_url->type == URLT_HTTPS)) { if(!strcmp(infop->http_con.auth_digest->site, url_get_site(docp->doc_url)) && infop->http_con.auth_digest->port == url_get_port(docp->doc_url)) { docp->auth_digest = infop->http_con.auth_digest; } else { http_digest_deep_free(infop->http_con.auth_digest); } } infop->http_con.auth_digest = NULL; if(cfg.auth_reuse_proxy_nonce) docp->auth_proxy_digest = infop->http_con.auth_proxy_digest; else { if(infop->http_con.auth_proxy_digest) http_digest_deep_free(infop->http_con.auth_proxy_digest); } infop->http_con.auth_proxy_digest = NULL; if(infop->http_con.connection) { char *host = url_get_site(docp->doc_url); unsigned short port = url_get_port(docp->doc_url); if(infop->http_con.proto == docp->doc_url->type && infop->http_con.port == port && !strcmp(infop->http_con.host, host)) { docp->datasock = infop->http_con.connection; docp->http_proxy = infop->http_con.http_proxy; docp->http_proxy_port = infop->http_con.http_proxy_port; } else { bufio_close(infop->http_con.connection); docp->datasock = NULL; _free(infop->http_con.http_proxy); } infop->http_con.connection = NULL; _free(infop->http_con.host); } } void kill_global_connection_data(global_connection_info *infop) { /**** close FTP control connection ****/ if(infop->ftp_con.control) { bufio_write(infop->ftp_con.control, "QUIT\r\n", 6); bufio_close(infop->ftp_con.control); infop->ftp_con.control = NULL; _free(infop->ftp_con.host); _free(infop->ftp_con.user); _free(infop->ftp_con.passwd); } /*** close preserved SSL connection ***/ #if defined(USE_SSL) && defined(USE_SSL_IMPL_OPENSSL) if(infop->ssl_con.ssl_con) my_ssl_connection_close(&infop->ssl_con); #endif if(infop->http_con.auth_digest) http_digest_deep_free(infop->http_con.auth_digest); if(infop->http_con.auth_proxy_digest) http_digest_deep_free(infop->http_con.auth_proxy_digest); if(infop->http_con.connection) { bufio_close(infop->http_con.connection); _free(infop->http_con.host); } _free(infop->http_con.http_proxy); } void init_global_connection_data(global_connection_info *infop) { infop->ftp_con.proto = URLT_FTP; infop->ftp_con.port = 0; infop->ftp_con.host = NULL; infop->ftp_con.user = NULL; infop->ftp_con.passwd = NULL; infop->ftp_con.control = NULL; #ifdef USE_SSL memset(&infop->ssl_con, '\0', sizeof(ssl_connection)); #endif infop->http_con.auth_digest = NULL; infop->http_con.auth_proxy_digest = NULL; infop->http_con.connection = NULL; infop->http_con.host = NULL; infop->http_con.proto = URLT_HTTP; infop->http_con.port = 0; infop->http_con.http_proxy_port = 0; infop->http_con.http_proxy = NULL; } pavuk-0.9.35/src/gcinfo.h0000644000175000001440000000165510142077737012077 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _gcinfo_h_ #define _gcinfo_h_ #include "doc.h" #include "ftp.h" #include "myssl.h" #include "http.h" typedef struct { ftp_connection ftp_con; http_connection http_con; #ifdef USE_SSL ssl_connection ssl_con; #endif } global_connection_info; extern void save_global_connection_data(global_connection_info *, doc *); extern void restore_global_connection_data(global_connection_info *, doc *); extern void kill_global_connection_data(global_connection_info *); extern void init_global_connection_data(global_connection_info *); #endif pavuk-0.9.35/src/remind.c0000644000175000001440000002602610400623655012073 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include "remind.h" #include "bufio.h" #include "url.h" #include "mime.h" #include "times.h" #include "http.h" #include "dllist.h" #include "tools.h" #include "gcinfo.h" #include "gui_api.h" static dllist *remind_urls = NULL; static int remind_check_if_newer(doc * docp, time_t modtime, time_t * nmdtm) { char *p; int retv = 0; http_response *rsp; char *ustr; ustr = url_to_urlstr(docp->doc_url, FALSE); xprintf(1, gettext("Checking: %s\n"), ustr); if(!(docp->doc_url->type == URLT_HTTP #ifdef USE_SSL || docp->doc_url->type == URLT_HTTPS #endif )) { xprintf(1, "This URL type is not supported in reminder mode\n"); return -1; } /*** to init properly proxy ... ***/ doc_download_init(docp, FALSE); docp->request_type = HTTP_REQ_HEAD; docp->datasock = http_get_data_socket(docp); if(!docp->datasock) return -1; if(!docp->mime) { xprintf(1, "Bad response on HEAD request\n"); return -1; } rsp = http_get_response_info(docp->mime); if(rsp->ver_maj == 1 && rsp->ver_min == 1) { docp->is_http11 = TRUE; docp->is_persistent = TRUE; } p = get_mime_param_val_str("Connection:", docp->mime); if(p) { if(!strcasecmp(p, "close")) docp->is_persistent = FALSE; } if(!docp->is_persistent) { bufio_close(docp->datasock); docp->datasock = NULL; } if(rsp->ret_code == 304) { retv = 0; } else if((p = get_mime_param_val_str("Last-Modified:", docp->mime))) { *nmdtm = scntime(p); if(modtime && (difftime(*nmdtm, modtime) > 0)) retv = 1; } else { retv = -1; } _free(rsp->text); _free(rsp); return retv; } static void remind_check_entry(doc * docp, remind_entry * e) { time_t t = 0L; int rv; rv = remind_check_if_newer(docp, e->mdtm, &t); if(!(cfg.stop || cfg.rbreak)) { if(t) e->mdtm = t; if(rv == 1) e->status |= REMIND_MODIFIED; else if(rv == -1) e->status |= REMIND_ERROR; } } void remind_load_db(void) { bufio *fd; char buf[PATH_MAX]; snprintf(buf, sizeof(buf), "%s/.pavuk_remind_db", cfg.path_to_home); while(remind_urls) { free_deep_url(((remind_entry *) remind_urls->data)->urlp); free((remind_entry *)remind_urls->data); remind_urls = dllist_remove_entry(remind_urls, remind_urls); } fd = bufio_copen(buf, O_BINARY | O_RDWR | O_CREAT, 0644); if(!fd) { xperror(buf); return; } _flock(bufio_getfd(fd), buf, O_BINARY | O_RDWR | O_CREAT, TRUE); while(bufio_readln(fd, buf, sizeof(buf)) > 0) { time_t t; url *purl; char *eptr; remind_entry *entry; strip_nl(buf); t = strtol(buf, &eptr, 10); if(!t && errno == ERANGE) { xprintf(1, gettext("Bad reminder db entry - %s\n"), buf); continue; } while(*eptr && tl_ascii_isspace(*eptr)) eptr++; purl = url_parse(eptr); entry = _malloc(sizeof(remind_entry)); entry->urlp = purl; entry->mdtm = t; entry->status = 0; remind_urls = dllist_append(remind_urls, (dllist_t) entry); } _funlock(bufio_getfd(fd)); bufio_close(fd); } void remind_save_db(void) { bufio *fd; char buf[PATH_MAX]; dllist *ptr; snprintf(buf, sizeof(buf), "%s/.pavuk_remind_db", cfg.path_to_home); fd = bufio_copen(buf, O_BINARY | O_RDWR | O_CREAT, 0644); if(!fd) { xperror(buf); return; } _flock(bufio_getfd(fd), buf, O_BINARY | O_RDWR | O_CREAT, TRUE); ftruncate(bufio_getfd(fd), 0); for(ptr = remind_urls; ptr; ptr = ptr->next) { char *p; p = url_to_urlstr(((remind_entry *) ptr->data)->urlp, FALSE); snprintf(buf, sizeof(buf), "%ld %s\n", ((remind_entry *) ptr->data)->mdtm, p); _free(p); bufio_write(fd, buf, strlen(buf)); } _funlock(bufio_getfd(fd)); bufio_close(fd); } static remind_entry *remind_find_entry(url * urlp) { dllist *ptr = remind_urls; remind_entry *rv = NULL; char *ustr; ustr = url_to_urlstr(urlp, FALSE); while(ptr && !rv) { remind_entry *e = (remind_entry *) ptr->data; char *p; p = url_to_urlstr(e->urlp, FALSE); if(!strcmp(ustr, p)) rv = e; _free(p); ptr = ptr->next; } _free(ustr); return rv; } void remind_start_add(void) { dllist *ptr = cfg.request; while(ptr) { url_info *ui = (url_info *) ptr->data; url *urlp = url_parse(ui->urlstr); if(!remind_find_entry(urlp)) { remind_entry *e = _malloc(sizeof(remind_entry)); e->urlp = urlp; e->status = 0; e->mdtm = 0L; remind_urls = dllist_append(remind_urls, (dllist_t) e); } else { free_deep_url(urlp); _free(urlp); } ptr = ptr->next; } } #ifdef HAVE_MT static void _remind_do(int thnr) #else void remind_do(void) #endif { dllist *ptr; remind_entry *e; doc docu; global_connection_info con_info; init_global_connection_data(&con_info); for(ptr = remind_urls; ptr; ptr = ptr->next) { e = (remind_entry *) ptr->data; if(e->status & REMIND_PROCESSED) continue; doc_init(&docu, e->urlp); #ifdef HAVE_MT docu.threadnr = thnr; pthread_setspecific(cfg.currdoc_key, (void *) (&docu)); pthread_setspecific(cfg.herrno_key, (void *) (&(docu.__herrno))); #endif restore_global_connection_data(&con_info, &docu); remind_check_entry(&docu, e); save_global_connection_data(&con_info, &docu); #ifdef HAVE_MT doc_finish_processing(&docu); #endif if(cfg.stop || cfg.rbreak) break; else e->status |= REMIND_PROCESSED; } kill_global_connection_data(&con_info); } #ifdef HAVE_MT static void _sigintthr(int nr) { errno = EINTR; cfg.stop = TRUE; cfg.rbreak = TRUE; } static void _sigquitthr(int nr) { pthread_exit(NULL); } static void _remind_do_thrd(int thrnr) { bool_t init = (thrnr == 0); bool_t frst = TRUE; #ifdef I_FACE _config_struct_priv_t privcfg; #if defined (__OSF__) || defined (__osf__) #define __builtin_try #define __builtin_finally #endif #endif signal(SIGINT, _sigintthr); signal(SIGQUIT, _sigquitthr); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_setspecific(cfg.currdoc_key, (void *) NULL); pthread_setspecific(cfg.thrnr_key, (void *) thrnr); DEBUG_MTTHR("starting thread(%ld) %d\n", pthread_self(), thrnr); #ifdef I_FACE privcfg_make_copy(&privcfg); pthread_setspecific(cfg.privcfg_key, (void *) (&privcfg)); pthread_cleanup_push((void *) privcfg_free, (void *) (&privcfg)); #endif for(;;) { pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); DEBUG_MTTHR("thread %d awaking\n", thrnr); if(!frst) mt_semaphore_decrement(&cfg.nrunning_sem); else frst = FALSE; _remind_do(thrnr); init = FALSE; gui_clear_status(); DEBUG_MTTHR("thread %d sleeping\n", thrnr); gui_set_status(gettext("Sleeping ...")); pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); mt_semaphore_up(&cfg.nrunning_sem); if(cfg.rbreak || cfg.stop) break; /* mt_semaphore_down(&cfg.urlstack_sem); */ while(!cfg.stop && !cfg.rbreak && mt_semaphore_timed_down(&cfg.urlstack_sem, 400) < 0); if(cfg.rbreak || cfg.stop) break; } #ifdef I_FACE pthread_cleanup_pop(TRUE); #endif DEBUG_MTTHR("thread %d exiting\n", thrnr); gui_set_status(gettext("Exiting ...")); pthread_exit(NULL); } void remind_do(void) { pthread_attr_t thrdattr; int i; int num = cfg.nthr; cfg.allthreadsnr = 0; cfg.allthreads = _malloc(num * sizeof(pthread_t)); signal(SIGQUIT, _sigquitthr); pthread_attr_init(&thrdattr); pthread_attr_setscope(&thrdattr, PTHREAD_SCOPE_SYSTEM); pthread_attr_setstacksize(&thrdattr, MT_STACK_SIZE); mt_semaphore_init(&cfg.nrunning_sem); if(num <= 0) num = 1; for(i = 0; i < num; i++) { if(!pthread_create(&(cfg.allthreads[cfg.allthreadsnr]), &thrdattr, (void *) _remind_do_thrd, (void *) cfg.allthreadsnr)) { cfg.allthreadsnr++; gui_mt_thread_start(cfg.allthreadsnr); mt_semaphore_decrement(&cfg.nrunning_sem); if(cfg.rbreak || cfg.stop) break; } else { char pom[100]; sprintf(pom, "Create downloading thread %d", i); xperror(pom); } if(cfg.rbreak || cfg.stop) break; } /* mt_semaphore_down(&cfg.nrunning_sem); */ while(!cfg.stop && !cfg.rbreak && mt_semaphore_timed_down(&cfg.nrunning_sem, 500) < 0); cfg.stop = TRUE; for(i = 0; i < cfg.allthreadsnr; i++) { /* pthread_cancel(cfg.allthreads[i]); */ pthread_kill(cfg.allthreads[i], SIGQUIT); pthread_join(cfg.allthreads[i], NULL); } _free(cfg.allthreads); cfg.allthreadsnr = 0; gui_mt_thread_end(0); } #endif void remind_send_result(void) { FILE *fp; char buf[PATH_MAX]; char *p, *dp; int cnt; dllist *ptr; if(cfg.remind_cmd) { for(dp = buf, p = cfg.remind_cmd; *p; p++) { if(*p == '%') { p++; switch (*(p)) { case '%': *dp = *p; dp++; break; case 'e': strcpy(dp, priv_cfg.from); while(*dp) dp++; break; case 'd': { time_t t = time(NULL); char pom[100]; LOCK_TIME; strftime(pom, sizeof(pom), "%a %H:%M %d.%m.%Y", localtime(&t)); UNLOCK_TIME; strcpy(dp, pom); while(*dp) dp++; } break; default: *dp = *p; dp++; p--; } } else { *dp = *p; dp++; } } *dp = '\0'; } else snprintf(buf, sizeof(buf), "mailx %s -s \"pavuk reminder result\"\n", priv_cfg.from); fp = popen(buf, "w"); if(!fp) { xperror("popen"); } fprintf(fp, gettext("This is the result of running pavuk reminder mode\n\n")); cnt = 0; for(ptr = remind_urls; ptr; ptr = ptr->next) { remind_entry *e = (remind_entry *) ptr->data; if(e->status & REMIND_MODIFIED) { if(!cnt) { fprintf(fp, gettext("Changed URLs\n")); fprintf(fp, "-------------------------\n"); cnt++; } p = url_to_urlstr(e->urlp, FALSE); fprintf(fp, "%s %s", p, ctime(&e->mdtm)); _free(p); } } fprintf(fp, "\n\n"); cnt = 0; for(ptr = remind_urls; ptr; ptr = ptr->next) { remind_entry *e = (remind_entry *) ptr->data; if(e->status & REMIND_ERROR) { if(!cnt) { fprintf(fp, gettext("URLs with some errors\n")); fprintf(fp, "-------------------------\n"); cnt++; } p = url_to_urlstr(e->urlp, FALSE); fprintf(fp, "%s\n", p); _free(p); } } pclose(fp); } pavuk-0.9.35/src/remind.h0000644000175000001440000000151510142077741012076 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _remind_h_ #define _remind_h_ #include "url.h" #include "time.h" typedef struct { url *urlp; time_t mdtm; int status; } remind_entry; #define REMIND_ERROR (1 << 0) #define REMIND_MODIFIED (1 << 1) #define REMIND_PROCESSED (1 << 2) extern void remind_load_db(void); extern void remind_save_db(void); extern void remind_do(void); extern void remind_start_add(void); extern void remind_send_result(void); #endif pavuk-0.9.35/src/gui_tree.c0000644000175000001440000005077010325657311012425 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef WITH_TREE #ifdef GTK_FACE #include #include #include #include "form.h" #include "gaccel.h" #include "gprop.h" #include "gui_api.h" #include "gui.h" #include "recurse.h" #include "icons/save.xpm" #include "icons/cancel.xpm" #define TREE_GET_URL \ ((url *) gtk_ctree_node_get_row_data(GTK_CTREE(gui_cfg.tree_widget) , \ (GtkCTreeNode *)(GTK_CLIST(gui_cfg.tree_widget)->selection->data))) #define TEST_URL_NODE \ (GTK_CLIST(gui_cfg.tree_widget)->selection && TREE_GET_URL) static gint no_destroy(GtkWidget * widget, GdkEvent * event, gpointer data) { if(!gui_cfg._go_bg) { gtk_widget_hide(GTK_WIDGET(data)); return (TRUE); } else return (FALSE); } void gui_SelectTreeNode(GtkObject * object, gpointer func_data) { gtk_label_set(GTK_LABEL(gui_cfg.tree_help), " "); } static void LaunchBrowser(GtkObject * object, gpointer func_data) { char pom[2048]; char *p; url *urlp; if(!cfg.browser || !TEST_URL_NODE) { gdk_beep(); return; } urlp = TREE_GET_URL; p = tl_strdup(url_to_filename(urlp, TRUE)); if(access(p, R_OK)) { free(p); p = url_to_urlstr(urlp, FALSE); } snprintf(pom, sizeof(pom), "%s %s &", cfg.browser, p); tl_system(pom); free(p); } static void Propert(GtkObject * object, gpointer func_data) { char pom[4096]; url_prop *prp; url *urlp; char *p; char *p1; if(!TEST_URL_NODE) { gdk_beep(); return; } urlp = TREE_GET_URL; prp = urlp->prop; p = url_to_urlstr(urlp, FALSE); snprintf(pom, sizeof(pom), gettext("URL: %s\n"), p); _free(p); p = g_strdup(pom); if(urlp->type == URLT_HTTP || urlp->type == URLT_HTTPS) { if(urlp->status & URL_FORM_ACTION) { form_info *fi = (form_info *) urlp->extension; dllist *ptr; if(fi->method == FORM_M_GET) { p1 = g_strconcat(p, gettext("Request type: "), "GET\n", NULL); _free(p); p = p1; } else { p1 = g_strconcat(p, gettext("Request type: "), "POST\n", NULL); _free(p); p = p1; p1 = g_strconcat(p, gettext("Request encoding: "), (fi->encoding == FORM_E_MULTIPART) ? "form/multipart\n" : "application/x-www-urlencoded\n", NULL); _free(p); p = p1; } ptr = fi->infos; if(ptr) { p1 = g_strconcat(p, gettext("Query values:\n"), NULL); _free(p); p = p1; } while(ptr) { form_field *ff = (form_field *) ptr->data; char *name, *value; name = form_encode_urlencoded_str(ff->name); value = form_encode_urlencoded_str(ff->value); p1 = g_strconcat(p, " ", name, " = ", value, "\n", NULL); _free(p); p = p1; _free(name); _free(value); ptr = ptr->next; } } else { p1 = g_strconcat(p, gettext("Request type: "), "GET\n", NULL); _free(p); p = p1; } } p1 = g_strconcat(p, gettext("Status: "), NULL); _free(p); p = p1; if(!(urlp->status & URL_PROCESSED)) { p1 = g_strconcat(p, gettext("not processed yet\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_INNSCACHE) { p1 = g_strconcat(p, gettext("loaded from NS cache\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_REDIRECT) { p1 = g_strconcat(p, gettext("loaded from local URL tree\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_MOVED) { p1 = g_strconcat(p, gettext("moved to another URL\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_NOT_FOUND) { p1 = g_strconcat(p, gettext("URL not found on remote server\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_TRUNCATED) { p1 = g_strconcat(p, gettext("truncated\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_DOWNLOADED) { p1 = g_strconcat(p, gettext("downloaded OK\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_REJECTED) { p1 = g_strconcat(p, gettext("rejected by rules\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_USER_DISABLED) { p1 = g_strconcat(p, gettext("disabled by user\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_ERR_REC) { p1 = g_strconcat(p, gettext("probably recoverable error\n"), NULL); _free(p); p = p1; } else if(urlp->status & URL_ERR_UNREC) { p1 = g_strconcat(p, gettext("unrecoverable error\n"), NULL); _free(p); p = p1; } else { p1 = g_strconcat(p, gettext("unknown\n"), NULL); _free(p); p = p1; } if(urlp->moved_to) { char *ps = url_to_urlstr(urlp->moved_to, FALSE); snprintf(pom, sizeof(pom), gettext("Moved to URL: %s\n"), ps); _free(ps); p1 = g_strconcat(p, pom, NULL); _free(p); p = p1; } if(prp) { if(prp->type) snprintf(pom, sizeof(pom), gettext("Type: %s\n"), gettext(prp->type)); else snprintf(pom, sizeof(pom), gettext("Type: unknown\n")); p1 = g_strconcat(p, pom, NULL); _free(p); p = p1; sprintf(pom, gettext("Size: %d\n"), prp->size); p1 = g_strconcat(p, pom, NULL); _free(p); p = p1; if(prp->mdtm) { LOCK_TIME; strftime(pom, sizeof(pom), gettext("Modification time: %a, %d %b %Y %H:%M:%S %Z\n"), localtime(&prp->mdtm)); UNLOCK_TIME; p1 = g_strconcat(p, pom, NULL); _free(p); p = p1; } } if(urlp->local_name) { snprintf(pom, sizeof(pom), gettext("Local filename: %s\n"), urlp->local_name); p1 = g_strconcat(p, pom, NULL); _free(p); p = p1; } if(urlp->ref_cnt) { dllist *ptr; char *us; p1 = g_strconcat(p, gettext("Parent URLs:\n"), NULL); _free(p); p = p1; LOCK_URL(urlp); for(ptr = urlp->parent_url; ptr; ptr = ptr->next) { url *pomurl = (url *) ptr->data; us = url_to_urlstr(pomurl, FALSE); snprintf(pom, sizeof(pom), " %s\n", us); free(us); p1 = g_strconcat(p, pom, NULL); _free(p); p = p1; } UNLOCK_URL(urlp); } if(!p) p = ""; gtk_label_set(GTK_LABEL(gui_cfg.tree_help), p); g_free(p); } static void item_set_disabled(GtkCTreeNode * widget, gboolean disabled) { static GtkStyle *disabled_style = NULL; static GtkStyle *normal_style = NULL; LOCK_GTKTREE; if(!disabled_style) { normal_style = gtk_ctree_node_get_cell_style(GTK_CTREE(gui_cfg.tree_widget), widget, 0); if(!normal_style) normal_style = gtk_widget_get_style(gui_cfg.tree_widget); disabled_style = normal_style ? gtk_style_copy(normal_style) : gtk_style_new(); disabled_style->fg[GTK_STATE_NORMAL] = disabled_style->fg[GTK_STATE_INSENSITIVE]; disabled_style->bg[GTK_STATE_NORMAL] = disabled_style->bg[GTK_STATE_INSENSITIVE]; disabled_style->base[GTK_STATE_NORMAL] = disabled_style->base[GTK_STATE_INSENSITIVE]; } gtk_ctree_node_set_cell_style(GTK_CTREE(gui_cfg.tree_widget), widget, 0, disabled ? disabled_style : normal_style); UNLOCK_GTKTREE; } static void DisableURL(GtkObject * object, gpointer func_data) { url *urlp; int i; if(!TEST_URL_NODE) { gdk_beep(); return; } urlp = TREE_GET_URL; urlp->status |= URL_USER_DISABLED; LOCK_URL(urlp); for(i = 0; i < urlp->ref_cnt; i++) item_set_disabled(urlp->tree_nfo[i], TRUE); UNLOCK_URL(urlp); } static void EnableURL(GtkObject * object, gpointer func_data) { url *urlp; int i; if(!TEST_URL_NODE) { gdk_beep(); return; } urlp = TREE_GET_URL; urlp->status &= ~URL_USER_DISABLED; LOCK_URL(urlp); for(i = 0; i < urlp->ref_cnt; i++) item_set_disabled(urlp->tree_nfo[i], FALSE); UNLOCK_URL(urlp); if(urlp->status & URL_PROCESSED) { urlp->status &= ~URL_PROCESSED; LOCK_CFG_URLSTACK; cfg.urlstack = dllist_append(cfg.urlstack, (dllist_t) urlp); cfg.total_cnt++; UNLOCK_CFG_URLSTACK; } } static void DownloadThisURL(GtkObject * object, gpointer func_data) { url *urlp; if(!TEST_URL_NODE || cfg.processing) { gdk_beep(); return; } urlp = TREE_GET_URL; #ifdef HAVE_MT { pthread_attr_t thrdattr; pthread_attr_init(&thrdattr); pthread_attr_setscope(&thrdattr, PTHREAD_SCOPE_SYSTEM); pthread_attr_setstacksize(&thrdattr, MT_STACK_SIZE); gui_start_download(TRUE); if(pthread_create(&cfg.mainthread, &thrdattr, (void *) download_single_doc, (void *) urlp)) { xperror("Create downloading thread"); gui_finish_download(TRUE); } } #else download_single_doc(urlp); #endif } gint gui_tree_list_events(GtkWidget * widget, GdkEvent * event) { GdkEventButton *bevent; url *urlp; if(!TEST_URL_NODE) return FALSE; switch (event->type) { case GDK_BUTTON_PRESS: bevent = (GdkEventButton *) event; if(bevent->button == 3) { urlp = TREE_GET_URL; if(!urlp) { gtk_widget_set_sensitive(gui_cfg.me_disable_url, FALSE); gtk_widget_set_sensitive(gui_cfg.me_enable_url, FALSE); gtk_widget_set_sensitive(gui_cfg.me_browse_url, FALSE); gtk_widget_set_sensitive(gui_cfg.me_prop_url, FALSE); gtk_widget_set_sensitive(gui_cfg.me_download_url, FALSE); } else { gtk_widget_set_sensitive(gui_cfg.me_browse_url, TRUE); gtk_widget_set_sensitive(gui_cfg.me_prop_url, TRUE); if(urlp->status & URL_PROCESSED && !(urlp->status & URL_USER_DISABLED)) { gtk_widget_set_sensitive(gui_cfg.me_disable_url, FALSE); gtk_widget_set_sensitive(gui_cfg.me_enable_url, FALSE); gtk_widget_set_sensitive(gui_cfg.me_download_url, (urlp->status & URL_REJECTED) || (urlp->status & URL_TRUNCATED) || (urlp->status & URL_ERR_REC)); } else { gtk_widget_set_sensitive(gui_cfg.me_disable_url, !(urlp->status & URL_USER_DISABLED)); gtk_widget_set_sensitive(gui_cfg.me_enable_url, (urlp->status & URL_USER_DISABLED)); gtk_widget_set_sensitive(gui_cfg.me_download_url, cfg.processing ? FALSE : !(urlp->status & URL_USER_DISABLED)); } } gtk_menu_popup(GTK_MENU(gui_cfg.tmenu), NULL, NULL, NULL, NULL, 3, bevent->time); } break; default: break; } return FALSE; } static void DumpTree(GtkCTree * tree, GtkCTreeNode * node, gpointer data) { url *urlp = (url *) gtk_ctree_node_get_row_data(tree, node); if(urlp) { int i; char *p; FILE *f = (FILE *) data; GtkCTreeRow *row = (GtkCTreeRow *) node->list.data; for(i = 2; i < row->level; i++) fprintf(f, " "); p = url_to_urlstr(urlp, FALSE); fprintf(f, "%s\n", p); _free(p); } } static void StoreTreeOK(GtkWidget * w, gpointer fdata) { const char *p = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fdata)); FILE *f; if(!p || !*p) { gdk_beep(); return; } if(!(f = fopen(p, "wb+"))) { xperror(p); return; } LOCK_GTKTREE; gtk_ctree_pre_recursive(GTK_CTREE(gui_cfg.tree_widget), gui_cfg.root, GTK_CTREE_FUNC(DumpTree), f); UNLOCK_GTKTREE; fclose(f); gtk_widget_destroy(GTK_WIDGET(fdata)); } static void StoreTree(void) { static GtkWidget *fsw = NULL; if(!fsw) { fsw = gtk_file_selection_new(gettext("Pavuk: Store tree")); gtk_signal_connect(GTK_OBJECT(fsw), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fsw); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fsw)->ok_button), "clicked", GTK_SIGNAL_FUNC(StoreTreeOK), fsw); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fsw)->cancel_button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), fsw); } gtk_widget_show(fsw); if(GTK_WIDGET_REALIZED(fsw)) gdk_window_raise(fsw->window); } static void pane_resize(GtkWidget * widget, GtkAllocation * sallocation) { gprop_set_int("tree_height", sallocation->height); } static void top_resize(GtkWidget * widget, GtkAllocation * sallocation) { gprop_set_int("treeview_width", sallocation->width); gprop_set_int("treeview_height", sallocation->height); } #if GTK_FACE < 2 static void gtk_button_set_label(GtkButton * butt, const char *text) { GList *chlist; GtkWidget *w; w = butt->child; for(chlist = GTK_BOX(w)->children; chlist; chlist = chlist->next) { if(GTK_IS_LABEL(((struct _GtkBoxChild *) chlist->data)->widget)) { gtk_label_set(GTK_LABEL(((struct _GtkBoxChild *) chlist->data)->widget), text); } } } #endif void gui_build_tree_preview(int popup) { GtkWidget *col, *swin, *frame, *mi, *bbox, *pane; GdkFont *font; int h, w; static GtkWidget *cbutton = NULL; static GtkWidget *sbutton = NULL; GtkAccelGroup *accel_group; if(gui_cfg.tree_shell) { gtk_window_set_title(GTK_WINDOW(gui_cfg.tree_shell), gettext("Pavuk: URL tree preview")); gtk_button_set_label(GTK_BUTTON(cbutton), gettext("Cancel")); gtk_button_set_label(GTK_BUTTON(sbutton), gettext("Store tree ...")); gtk_button_set_label(GTK_BUTTON(gui_cfg.watch_download), gettext("Automaticaly watch last processed URLs")); gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_prop_url)->child), gettext("Properties")); gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_browse_url)->child), gettext("Launch browser")); gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_disable_url)->child), gettext("Disable URL")); gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_enable_url)->child), gettext("Enable URL")); gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_download_url)->child), gettext("Download URL")); gtk_label_set(GTK_LABEL(gui_cfg.tree_help), ""); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.tree_widget), 0, gettext("URL tree")); if(popup) { gtk_widget_show(gui_cfg.tree_shell); if(GTK_WIDGET_REALIZED(gui_cfg.tree_shell)) gdk_window_raise(gui_cfg.tree_shell->window); } return; } gui_cfg.tree_shell = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_border_width(GTK_CONTAINER(gui_cfg.tree_shell), 3); gtk_window_set_title(GTK_WINDOW(gui_cfg.tree_shell), gettext("Pavuk: URL tree preview")); gtk_signal_connect(GTK_OBJECT(gui_cfg.tree_shell), "delete_event", GTK_SIGNAL_FUNC(no_destroy), gui_cfg.tree_shell); w = -1; h = -1; gprop_get_int("treeview_height", &h); gprop_get_int("treeview_width", &w); gtk_window_set_default_size(GTK_WINDOW(gui_cfg.tree_shell), w, h); gtk_signal_connect(GTK_OBJECT(gui_cfg.tree_shell), "size_allocate", GTK_SIGNAL_FUNC(top_resize), NULL); gtk_window_set_policy(GTK_WINDOW(gui_cfg.tree_shell), FALSE, TRUE, TRUE); col = gtk_vbox_new(0, 5); gtk_container_add(GTK_CONTAINER(gui_cfg.tree_shell), col); gtk_widget_show(col); gui_cfg.watch_download = gtk_check_button_new_with_label(gettext ("Automaticaly watch last processed URLs")); gtk_box_pack_start(GTK_BOX(col), gui_cfg.watch_download, FALSE, FALSE, 1); gtk_widget_show(gui_cfg.watch_download); pane = gtk_vpaned_new(); gtk_box_pack_start(GTK_BOX(col), pane, TRUE, TRUE, 1); gtk_widget_show(pane); swin = gtk_scrolled_window_new(NULL, NULL); if(!gprop_get_int("tree_height", &h)) h = 400; gtk_widget_set_usize(swin, 500, h); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(swin); gtk_container_add(GTK_CONTAINER(pane), swin); gui_cfg.tree_widget = gtk_ctree_new(1, 0); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.tree_widget), 0, gettext("URL tree")); gtk_clist_column_titles_show(GTK_CLIST(gui_cfg.tree_widget)); #if GTK_FACE < 2 font = gui_cfg.tree_widget->style->font; #else font = gtk_style_get_font(gui_cfg.tree_widget->style); #endif gtk_clist_set_row_height(GTK_CLIST(gui_cfg.tree_widget), TL_MAX(font->ascent + font->descent + 1, MAX_PIX_HEIGHT)); gtk_clist_set_column_width(GTK_CLIST(gui_cfg.tree_widget), 0, 500); gtk_clist_set_selection_mode(GTK_CLIST(gui_cfg.tree_widget), GTK_SELECTION_SINGLE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.tree_widget), 0, TRUE); gtk_ctree_set_line_style(GTK_CTREE(gui_cfg.tree_widget), GTK_CTREE_LINES_DOTTED); gtk_signal_connect(GTK_OBJECT(gui_cfg.tree_widget), "button_press_event", (GtkSignalFunc) gui_tree_list_events, gui_cfg.tree_widget); gtk_signal_connect(GTK_OBJECT(gui_cfg.tree_widget), "select_row", (GtkSignalFunc) gui_SelectTreeNode, (gpointer) NULL); gtk_container_add(GTK_CONTAINER(swin), gui_cfg.tree_widget); gtk_widget_show(gui_cfg.tree_widget); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(swin); gtk_container_add(GTK_CONTAINER(pane), swin); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), frame); gui_cfg.tree_help = gtk_label_new(" "); gtk_label_set_justify(GTK_LABEL(gui_cfg.tree_help), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment(GTK_MISC(gui_cfg.tree_help), 0.0, 0.0); gtk_misc_set_padding(GTK_MISC(gui_cfg.tree_help), 3, 3); gtk_widget_show(gui_cfg.tree_help); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.tree_help); gtk_signal_connect(GTK_OBJECT(GTK_PANED(pane)->child1), "size_allocate", GTK_SIGNAL_FUNC(pane_resize), NULL); bbox = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(col), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); sbutton = guitl_pixmap_button(save_xpm, NULL, gettext("Store tree ...")); gtk_container_add(GTK_CONTAINER(bbox), sbutton); gtk_signal_connect(GTK_OBJECT(sbutton), "clicked", GTK_SIGNAL_FUNC(StoreTree), (gpointer) NULL); GTK_WIDGET_SET_FLAGS(sbutton, GTK_CAN_DEFAULT); gtk_widget_show(sbutton); cbutton = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel")); accel_group = gtk_accel_group_new(); gtk_widget_add_accelerator(cbutton, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(gui_cfg.tree_shell), accel_group); gtk_container_add(GTK_CONTAINER(bbox), cbutton); gtk_signal_connect(GTK_OBJECT(cbutton), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) gui_cfg.tree_shell); GTK_WIDGET_SET_FLAGS(cbutton, GTK_CAN_DEFAULT); gtk_widget_grab_default(cbutton); gtk_widget_show(cbutton); gui_cfg.tmenu = gtk_menu_new(); guitl_menu_attach(gui_cfg.tmenu, gui_cfg.tree_shell); gtk_widget_realize(gui_cfg.tmenu); gui_cfg.me_prop_url = mi = gtk_menu_item_new_with_label(gettext("Properties")); gaccel_bind_widget("tree/properties", "activate", mi, NULL, gui_cfg.tree_shell); gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(Propert), (gpointer) NULL); gui_cfg.me_browse_url = mi = gtk_menu_item_new_with_label(gettext("Launch browser")); gaccel_bind_widget("tree/launch", "activate", mi, NULL, gui_cfg.tree_shell); gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(LaunchBrowser), (gpointer) NULL); gui_cfg.me_disable_url = mi = gtk_menu_item_new_with_label(gettext("Disable URL")); gaccel_bind_widget("tree/disable", "activate", mi, NULL, gui_cfg.tree_shell); gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(DisableURL), (gpointer) NULL); gui_cfg.me_enable_url = mi = gtk_menu_item_new_with_label(gettext("Enable URL")); gaccel_bind_widget("tree/enable", "activate", mi, NULL, gui_cfg.tree_shell); gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(EnableURL), (gpointer) NULL); gui_cfg.me_download_url = mi = gtk_menu_item_new_with_label(gettext("Download URL")); gaccel_bind_widget("tree/download", "activate", mi, NULL, gui_cfg.tree_shell); gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(DownloadThisURL), (gpointer) NULL); if(popup) gtk_widget_show(gui_cfg.tree_shell); } #endif /*** GTK_FACE ***/ #endif /*** WITH_TREE ***/ pavuk-0.9.35/src/jsbind.c0000644000175000001440000004715010565032052012064 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef HAVE_MOZJS #include #include #include #include #include "tools.h" #include "url.h" #include "dllist.h" #include "jsbind.h" #define STACK_CHUNK_SIZE 8192 #define SET_STR(s) \ if (s) *val = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, s)); \ else *val = JSVAL_NULL; static JSRuntime *rt = NULL; static JSContext *cx = NULL; static JSObject *go = NULL; static JSObject *scriptobj = NULL; static JSScript *script = NULL; static bool_t pjs_have_pavuk_url_cond_check = FALSE; static JSBool pjs_print(JSContext *, JSObject *, uintN, jsval *, jsval *); /* global class */ static JSClass globalClass = { "Global", 0, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub }; /* global methods available */ static JSFunctionSpec globalMethods[] = { {"print", pjs_print, 0, 0}, {NULL, NULL, 0, 0} }; static void pjs_error(JSContext *cx, const char *msg, JSErrorReport *rpt) { if(!rpt) xprintf(1, "pjs: %s\n", msg); else xprintf(1, "pjs: %s: line %i: error: %s\n", rpt->filename, rpt->lineno, msg); } static JSBool pjs_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rv) { int i; JSString *s; for(i = 0; i < argc; i++) { if(!(s = JS_ValueToString(cx, argv[i]))) { JS_ReportError(cx, "pjs: print: %s", gettext("bad parameter")); return JS_FALSE; } xprintf(1, "%s%s", i ? " " : "", JS_GetStringBytes(s)); } return JS_TRUE; } /* URL class implementation */ static JSBool pjs_url_get_parent(JSContext *, JSObject *, uintN, jsval *, jsval *); static JSBool pjs_url_check_cond(JSContext *, JSObject *, uintN, jsval *, jsval *); static JSBool pjs_url_set_property(JSContext *, JSObject *, jsval, jsval *); static JSBool pjs_url_get_property(JSContext *, JSObject *, jsval, jsval *); static void pjs_url_finalize(JSContext *, JSObject *); static JSClass urlClass = { "PavukUrl", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, pjs_url_get_property, pjs_url_set_property, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, pjs_url_finalize }; #define PJS_IS_URL(v) \ (JS_GET_CLASS(cx, JSVAL_TO_OBJECT(v)) == &urlClass) static JSFunctionSpec urlMethods[] = { {"get_parent", pjs_url_get_parent, 1, JSPROP_ENUMERATE}, {"check_cond", pjs_url_check_cond, 1, JSPROP_ENUMERATE}, {NULL, NULL, 0, 0} }; enum _url_prop { PJSURL_PROTOCOL, PJSURL_STATUS, PJSURL_LEVEL, PJSURL_REF_CNT, PJSURL_URLSTR, PJSURL_MOVED, PJSURL_HTTP_HOST, PJSURL_HTTP_PORT, PJSURL_HTTP_DOCUMENT, PJSURL_HTTP_SEARCHSTR, PJSURL_HTTP_ANCHOR_NAME, PJSURL_HTTP_USER, PJSURL_HTTP_PASS, PJSURL_FTP_HOST, PJSURL_FTP_PORT, PJSURL_FTP_USER, PJSURL_FTP_PASS, PJSURL_FTP_PATH, PJSURL_FTP_ANCHOR_NAME, PJSURL_FTP_DIR, PJSURL_GOPHER_HOST, PJSURL_GOPHER_PORT, PJSURL_GOPHER_SELECTOR, PJSURL_FILE_FNAME, PJSURL_FILE_SEARCHSTR, PJSURL_FILE_ANCHOR_NAME, PJSURL_UNSUP_URLSTR, PJSURL_CHECK_LEVEL, PJSURL_MIME_TYPE, PJSURL_DOC_SIZE, PJSURL_MDTM, PJSURL_DOCNR, PJSURL_HTML_TAG, PJSURL_HTML_DOC, PJSURL_HTML_DOC_OFFSET, PJSURL_TAG, PJSURL_ATTRIB, PJSURL_NULL }; typedef struct { url *urlp; cond_info_t *condp; int free_url; } url_priv_t; static JSPropertySpec urlProperties[] = { {"protocol", PJSURL_PROTOCOL, JSPROP_ENUMERATE | JSPROP_READONLY}, {"status", PJSURL_STATUS, JSPROP_ENUMERATE}, {"level", PJSURL_LEVEL, JSPROP_ENUMERATE | JSPROP_READONLY}, {"ref_cnt", PJSURL_REF_CNT, JSPROP_ENUMERATE | JSPROP_READONLY}, {"urlstr", PJSURL_URLSTR, JSPROP_ENUMERATE | JSPROP_READONLY}, {NULL, 0, 0}, }; static url_priv_t *pjs_url_obj_set_url(JSContext *cx, JSObject *obj, url *purl, cond_info_t *condp) { url_priv_t *up; up = _malloc(sizeof(url_priv_t)); up->urlp = purl; up->condp = condp; up->free_url = FALSE; JS_SetPrivate(cx, obj, up); #define NEW_PROP(name, id) \ JS_DefinePropertyWithTinyId(cx, obj, name, id, JSVAL_VOID, \ pjs_url_get_property, JS_PropertyStub, \ JSPROP_ENUMERATE | JSPROP_READONLY); if(purl->moved_to) NEW_PROP("moved_url", PJSURL_MOVED); switch (purl->type) { case URLT_HTTP: case URLT_HTTPS: NEW_PROP("http_host", PJSURL_HTTP_HOST); NEW_PROP("http_port", PJSURL_HTTP_PORT); NEW_PROP("http_document", PJSURL_HTTP_DOCUMENT); NEW_PROP("http_searchstr", PJSURL_HTTP_SEARCHSTR); NEW_PROP("http_anchor_name", PJSURL_HTTP_ANCHOR_NAME); NEW_PROP("http_user", PJSURL_HTTP_USER); NEW_PROP("http_password", PJSURL_HTTP_PASS); break; case URLT_FTP: case URLT_FTPS: NEW_PROP("ftp_host", PJSURL_FTP_HOST); NEW_PROP("ftp_port", PJSURL_FTP_PORT); NEW_PROP("ftp_user", PJSURL_FTP_USER); NEW_PROP("ftp_password", PJSURL_FTP_PASS); NEW_PROP("ftp_path", PJSURL_FTP_PATH); NEW_PROP("ftp_anchor_name", PJSURL_FTP_ANCHOR_NAME); NEW_PROP("ftp_dir", PJSURL_FTP_DIR); break; case URLT_FILE: NEW_PROP("file_name", PJSURL_FILE_FNAME); NEW_PROP("file_searchstr", PJSURL_FILE_SEARCHSTR); NEW_PROP("file_anchor_name", PJSURL_FILE_ANCHOR_NAME); break; case URLT_GOPHER: NEW_PROP("gopher_host", PJSURL_GOPHER_HOST); NEW_PROP("gopher_port", PJSURL_GOPHER_PORT); NEW_PROP("gopher_selector", PJSURL_GOPHER_SELECTOR); break; case URLT_UNKNOWN: NEW_PROP("unsupported_urlstr", PJSURL_UNSUP_URLSTR); default: break; } if(up->condp) { NEW_PROP("check_level", PJSURL_CHECK_LEVEL); if(up->condp->mimet) NEW_PROP("mime_type", PJSURL_MIME_TYPE); if(up->condp->full_tag) NEW_PROP("html_tag", PJSURL_HTML_TAG); if(up->condp->size >= 0) NEW_PROP("doc_size", PJSURL_DOC_SIZE); if(up->condp->time) NEW_PROP("modification_time", PJSURL_MDTM); if(up->condp->urlnr) NEW_PROP("doc_number", PJSURL_DOCNR); if(up->condp->tag) NEW_PROP("tag", PJSURL_TAG); if(up->condp->attrib) NEW_PROP("attrib", PJSURL_ATTRIB); if(up->condp->html_doc) { NEW_PROP("html_doc", PJSURL_HTML_DOC); NEW_PROP("html_doc_offset", PJSURL_HTML_DOC_OFFSET); } } return up; } /* constructor */ static JSBool pjs_url_new(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rv) { url_priv_t *up; url *urlp = NULL; if(argc != 1 || !JSVAL_IS_STRING(argv[0])) { JS_ReportError(cx, gettext("PavukUrl constructor failed\n")); return JS_FALSE; } urlp = url_parse(JS_GetStringBytes(JSVAL_TO_STRING(argv[0]))); assert(urlp->type != URLT_FROMPARENT); up = pjs_url_obj_set_url(cx, obj, urlp, NULL); up->free_url = TRUE; return JS_TRUE; } /* destructor */ static void pjs_url_finalize(JSContext *cx, JSObject *obj) { url_priv_t *up; up = JS_GetPrivate(cx, obj); if(up) { if(up->free_url) { free_deep_url(up->urlp); _free(up->urlp); } _free(up); } } static JSObject *pjs_url_to_jsobj(JSContext *cx, url *purl, cond_info_t *condp) { JSObject *obj; obj = JS_NewObject(cx, &urlClass, NULL, NULL); pjs_url_obj_set_url(cx, obj, purl, condp); return obj; } static JSBool pjs_url_get_property(JSContext *cx, JSObject *obj, jsval id, jsval *val) { if(JSVAL_IS_INT(id)) { url_priv_t *up; int n; char *p; up = JS_GetPrivate(cx, obj); switch (JSVAL_TO_INT(id)) { case PJSURL_PROTOCOL: p = prottable[up->urlp->type].urlid; SET_STR(p); break; case PJSURL_STATUS: *val = INT_TO_JSVAL(up->urlp->status); break; case PJSURL_LEVEL: *val = INT_TO_JSVAL(up->urlp->level); break; case PJSURL_REF_CNT: *val = INT_TO_JSVAL(up->urlp->ref_cnt); break; case PJSURL_URLSTR: p = url_to_urlstr(up->urlp, TRUE); SET_STR(p); _free(p); break; case PJSURL_HTTP_HOST: case PJSURL_FTP_HOST: case PJSURL_GOPHER_HOST: p = url_get_site(up->urlp); SET_STR(p); break; case PJSURL_HTTP_PORT: case PJSURL_FTP_PORT: case PJSURL_GOPHER_PORT: n = url_get_port(up->urlp); *val = INT_TO_JSVAL(n); break; case PJSURL_HTTP_DOCUMENT: case PJSURL_FTP_PATH: case PJSURL_GOPHER_SELECTOR: case PJSURL_FILE_FNAME: p = url_get_path(up->urlp); SET_STR(p); break; case PJSURL_HTTP_ANCHOR_NAME: case PJSURL_FTP_ANCHOR_NAME: case PJSURL_FILE_ANCHOR_NAME: p = url_get_anchor_name(up->urlp); SET_STR(p); break; case PJSURL_HTTP_SEARCHSTR: case PJSURL_FILE_SEARCHSTR: p = url_get_search_str(up->urlp); SET_STR(p); break; case PJSURL_HTTP_USER: case PJSURL_FTP_USER: p = url_get_user(up->urlp, NULL); SET_STR(p); break; case PJSURL_HTTP_PASS: case PJSURL_FTP_PASS: p = url_get_pass(up->urlp, NULL); SET_STR(p); break; case PJSURL_FTP_DIR: *val = up->urlp->p.ftp.dir ? JS_TRUE : JS_FALSE; break; case PJSURL_UNSUP_URLSTR: p = up->urlp->p.unsup.urlstr; SET_STR(p); break; case PJSURL_CHECK_LEVEL: *val = INT_TO_JSVAL(up->condp->level); break; case PJSURL_MIME_TYPE: SET_STR(up->condp->mimet); break; case PJSURL_DOC_SIZE: *val = INT_TO_JSVAL(up->condp->size); break; case PJSURL_MDTM: *val = INT_TO_JSVAL(up->condp->time); break; case PJSURL_DOCNR: *val = INT_TO_JSVAL(up->condp->urlnr); break; case PJSURL_HTML_TAG: SET_STR(up->condp->full_tag); break; case PJSURL_TAG: SET_STR(up->condp->tag); break; case PJSURL_ATTRIB: SET_STR(up->condp->attrib); break; case PJSURL_HTML_DOC: SET_STR(up->condp->html_doc); break; case PJSURL_HTML_DOC_OFFSET: *val = INT_TO_JSVAL(up->condp->html_doc_offset); break; case PJSURL_MOVED: if(up->urlp->moved_to) { JSObject *robj; robj = pjs_url_to_jsobj(cx, up->urlp->moved_to, NULL); *val = OBJECT_TO_JSVAL(robj); } else *val = JSVAL_NULL; break; } } return JS_TRUE; } static JSBool pjs_url_set_property(JSContext *cx, JSObject *obj, jsval id, jsval *val) { if(JSVAL_IS_INT(id)) { url_priv_t *up; int32 status; up = JS_GetPrivate(cx, obj); switch (JSVAL_TO_INT(id)) { case PJSURL_STATUS: if(!JS_ValueToInt32(cx, *val, &status)) { JS_ReportError(cx, "PavukUrl.status: %s\n", gettext("invalid assignment")); return JS_FALSE; } up->urlp->status = status; break; } } return JS_TRUE; } static JSBool pjs_url_get_parent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rv) { int n; url *rurl; url_priv_t *up; dllist *ptr; JSObject *robj; if(argc != 1 || !JSVAL_IS_INT(argv[0])) { JS_ReportError(cx, "PavukUrl.get_parent: %s\n", gettext("bad parent index")); return JS_FALSE; } n = JSVAL_TO_INT(argv[0]); up = JS_GetPrivate(cx, obj); ptr = dllist_nth(up->urlp->parent_url, n); if(ptr) { rurl = (url *) ptr->data; robj = pjs_url_to_jsobj(cx, rurl, NULL); *rv = OBJECT_TO_JSVAL(robj); } else *rv = JSVAL_NULL; return JS_TRUE; } static JSBool pjs_url_check_cond(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rv) { url_priv_t *up; char *name; JSString *s; int r, i; cond_info_t condp; condp.level = 0; condp.urlnr = 0; condp.size = 0; condp.time = 0L; condp.mimet = NULL; condp.params = NULL; up = JS_GetPrivate(cx, obj); if(up->condp) { condp.level = up->condp->level; condp.urlnr = up->condp->urlnr; condp.size = up->condp->size; condp.time = up->condp->time; condp.mimet = up->condp->mimet; condp.params = up->condp->params; } if(argc < 1) { JS_ReportError(cx, "PavukUrl.check_cond: %s\n", gettext("not enough parameters")); return JS_FALSE; } s = JS_ValueToString(cx, argv[0]); name = JS_GetStringBytes(s); for(i = 1; i < argc; i++) { char *p; s = JS_ValueToString(cx, argv[i]); p = JS_GetStringBytes(s); if(p) condp.params = dllist_append(condp.params, p); } r = url_append_one_condition(name, up->urlp, &condp); dllist_free_all(condp.params); if(r < 0) { JS_ReportError(cx, "pjs: PavukUrl.check_cond: %s - \"%s\"", gettext("unknown limiting condition"), name); return JS_FALSE; } *rv = r ? JSVAL_TRUE : JSVAL_FALSE; return JS_TRUE; } static JSObject *pjs_url_class_init(JSContext *cx, JSObject *obj) { JSObject *prot; prot = JS_InitClass(cx, obj, NULL, &urlClass, pjs_url_new, 0, urlProperties, urlMethods, NULL, NULL); return prot; } /* PavukFnrules class implementation */ static JSBool pjs_fnrules_get_macro(JSContext *, JSObject *, uintN, jsval *, jsval *); static JSBool pjs_fnrules_get_sub(JSContext *, JSObject *, uintN, jsval *, jsval *); static JSBool pjs_fnrules_get_property(JSContext *, JSObject *, jsval, jsval *); static JSClass fnrulesClass = { "PavukFnrules", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, pjs_fnrules_get_property, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub }; static JSFunctionSpec fnrulesMethods[] = { {"get_macro", pjs_fnrules_get_macro, 1, JSPROP_ENUMERATE}, {"get_sub", pjs_fnrules_get_sub, 1, JSPROP_ENUMERATE}, {NULL, NULL, 0, 0} }; enum _fnrules_prop { PJSFNRULES_URL, PJSFNRULES_PATTERN, PJSFNRULES_PATTERN_TYPE, PJSFNRULES_NULL }; static JSPropertySpec fnrulesProperties[] = { {"url", PJSFNRULES_URL, JSPROP_ENUMERATE | JSPROP_READONLY}, {"pattern", PJSFNRULES_PATTERN, JSPROP_ENUMERATE | JSPROP_READONLY}, {"pattern_type", PJSFNRULES_PATTERN_TYPE, JSPROP_ENUMERATE | JSPROP_READONLY}, {NULL, 0, 0}, }; static JSObject *pjs_fnrules_to_jsobj(JSContext *cx, struct lfname_lsp_interp *interp) { JSObject *obj; obj = JS_NewObject(cx, &fnrulesClass, NULL, NULL); JS_SetPrivate(cx, obj, interp); return obj; } /* constructor */ static JSBool pjs_fnrules_new(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rv) { JS_ReportError(cx, gettext("PavukFnrules constructor call prohibited from script\n")); return JS_TRUE; } static JSBool pjs_fnrules_get_property(JSContext *cx, JSObject *obj, jsval id, jsval *val) { if(JSVAL_IS_INT(id)) { struct lfname_lsp_interp *interp; JSObject *uobj; interp = JS_GetPrivate(cx, obj); switch (JSVAL_TO_INT(id)) { case PJSFNRULES_URL: uobj = pjs_url_to_jsobj(cx, interp->urlp, NULL); *val = OBJECT_TO_JSVAL(uobj); break; case PJSFNRULES_PATTERN: SET_STR(interp->orig->matchstr); break; case PJSFNRULES_PATTERN_TYPE: *val = INT_TO_JSVAL(interp->orig->type); break; } } return JS_TRUE; } static JSBool pjs_fnrules_get_macro(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *val) { struct lfname_lsp_interp *interp; const char *v; JSString *s; if(argc != 1 || !(s = JS_ValueToString(cx, argv[0]))) { JS_ReportError(cx, "PavukFnrules.get_macro: %s\n", gettext("bad parameters")); return JS_FALSE; } interp = JS_GetPrivate(cx, obj); v = JS_GetStringBytes(s); if(v && v[0] == '%' && lfname_check_macro(v[1]) && !v[2]) v = lfname_interp_get_macro(interp, v[1]); SET_STR(v); return JS_TRUE; } static JSBool pjs_fnrules_get_sub(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *val) { struct lfname_lsp_interp *interp; char *v; int32 n; if(argc != 1 || !JSVAL_IS_INT(argv[0])) { JS_ReportError(cx, "PavukFnrules.get_sub: %s\n", gettext("bad parameters")); return JS_FALSE; } interp = JS_GetPrivate(cx, obj); JS_ValueToInt32(cx, argv[0], &n); v = lfname_re_sub(interp->orig, interp->urlstr, n); SET_STR(v); return JS_TRUE; } static JSObject *pjs_fnrules_class_init(JSContext *cx, JSObject *obj) { JSObject *prot; prot = JS_InitClass(cx, obj, NULL, &fnrulesClass, pjs_fnrules_new, 0, fnrulesProperties, fnrulesMethods, NULL, NULL); return prot; } static int pjs_func_exist(JSContext *cx, JSObject *obj, char *name) { jsval rv; if(!JS_GetProperty(cx, obj, name, &rv) || rv == JSVAL_VOID) return FALSE; else return TRUE; } int pjs_init(void) { LOCK_MOZJS; if(!rt) { rt = JS_Init(1000000L); cx = JS_NewContext(rt, STACK_CHUNK_SIZE); JS_SetErrorReporter(cx, pjs_error); go = JS_NewObject(cx, &globalClass, NULL, NULL); JS_InitStandardClasses(cx, go); JS_DefineFunctions(cx, go, globalMethods); pjs_url_class_init(cx, go); pjs_fnrules_class_init(cx, go); pjs_load_script(priv_cfg.js_script_file); pjs_have_pavuk_url_cond_check = pjs_func_exist(cx, go, "pavuk_url_cond_check"); } UNLOCK_MOZJS; return 0; } int pjs_destroy(void) { LOCK_MOZJS; if(rt) { if(script) { JS_RemoveRoot(cx, &scriptobj); JS_DestroyScript(cx, script); } JS_GC(cx); JS_DestroyContext(cx); JS_Finish(rt); cx = NULL; rt = NULL; go = NULL; script = NULL; scriptobj = NULL; pjs_have_pavuk_url_cond_check = FALSE; } UNLOCK_MOZJS; return 0; } int pjs_load_script(char *name) { jsval rv; JS_ClearPendingException(cx); if(script) { JS_RemoveRoot(cx, &scriptobj); JS_DestroyScript(cx, script); script = NULL; scriptobj = NULL; } if(name) { script = JS_CompileFile(cx, go, name); if(!script) return -1; scriptobj = JS_NewScriptObject(cx, script); JS_AddNamedRoot(cx, &scriptobj, "pjs_script"); JS_ExecuteScript(cx, go, script, &rv); } return 0; } int pjs_load_script_string(char *str) { jsval rv; LOCK_MOZJS; JS_ClearPendingException(cx); if(script) { JS_RemoveRoot(cx, &scriptobj); JS_DestroyScript(cx, script); script = NULL; scriptobj = NULL; } script = JS_CompileScript(cx, go, str, strlen(str), "intbuffer", 0); if(!script) { UNLOCK_MOZJS; return -1; } scriptobj = JS_NewScriptObject(cx, script); JS_AddNamedRoot(cx, &scriptobj, "pjs_script"); JS_ExecuteScript(cx, go, script, &rv); UNLOCK_MOZJS; return 0; } int pjs_execute(char *scr) { jsval rval; int rv; LOCK_MOZJS; rv = JS_EvaluateScript(cx, go, scr, strlen(scr), "pjs", 0, &rval); UNLOCK_MOZJS; return rv; } int pjs_run_cond_check_func(url *urlp, cond_info_t *condp) { jsval param[2]; jsval rv; JSObject *ourl; int ret; if(!pjs_have_pavuk_url_cond_check || !script) return -1; LOCK_MOZJS; ourl = pjs_url_to_jsobj(cx, urlp, condp); param[0] = OBJECT_TO_JSVAL(ourl); param[1] = INT_TO_JSVAL(condp->level); rv = JSVAL_FALSE; if(!JS_CallFunctionName(cx, go, "pavuk_url_cond_check", 2, param, &rv)) ret = -1; else { if(JSVAL_IS_BOOLEAN(rv)) ret = (rv == JSVAL_TRUE); else ret = -1; } JS_GC(cx); UNLOCK_MOZJS; return ret; } char *pjs_run_fnrules_func(char *name, struct lfname_lsp_interp *interp) { char *ret = NULL; JSObject *rl; jsval param[1]; JSString *s; jsval rv; LOCK_MOZJS; if(pjs_func_exist(cx, go, name)) { rl = pjs_fnrules_to_jsobj(cx, interp); param[0] = OBJECT_TO_JSVAL(rl); rv = JSVAL_FALSE; if(JS_CallFunctionName(cx, go, name, 1, param, &rv)) { s = JS_ValueToString(cx, rv); if(s) ret = tl_strdup(JS_GetStringBytes(s)); } JS_GC(cx); } else { xprintf(1, gettext("pjs: There is no \"%s\" JavaScript function!\n"), name); } UNLOCK_MOZJS; return ret; } #endif /* HAVE_MOZJS */ pavuk-0.9.35/src/jsbind.h0000644000175000001440000000141410142077741012067 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _jsbind_h_ #define _jsbind_h_ #include "condition.h" #include "lfname.h" extern int pjs_destroy(void); extern int pjs_init(void); extern int pjs_load_script(char *); extern int pjs_load_script_string(char *); extern int pjs_execute(char *); extern int pjs_run_cond_check_func(url *, cond_info_t *); extern char *pjs_run_fnrules_func(char *, struct lfname_lsp_interp *); #endif pavuk-0.9.35/src/dinfo.c0000644000175000001440000002546210325662202011714 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include "bufio.h" #include "dinfo.h" #include "doc.h" #include "form.h" #include "mime.h" #include "tools.h" #include "url.h" static char *dinfo_get_filename_by_filename(char *fname) { char *p; char *pom; if(priv_cfg.info_dir) { /* pro: if our file does NOT reside inside the cache dir we just return a bogus file name; The file name could e.g. be inside the current directory of the running pavuk process. See htmlparser.c for details (search for "'#'") Without this fix the program will CRASH in such cases (provided that the file names have a certain minimum length). The crash is caused by the fact that the routine makes the resulting filename start with "info_dir" instead of "cache_dir" even if the prefix of the given file name does not start with "cache_dir". This means that the routine makes the resulting filename start with "info_dir" and then takes the string starting after offset strlen("cache_dir") of the given filename. If strlen("cache_dir") is greater than the length of the given filename the system will take an undefined string of undefined length out of the heap and the resulting string might be much longer than the pre-calculated string len. => happy crashing */ if(strncmp(fname, priv_cfg.cache_dir, strlen(priv_cfg.cache_dir)) != 0) { char bogus[] = "/bogus_dir"; pom = _malloc(strlen(bogus) + 1); strcpy(pom, bogus); DEBUG_HTML("Returning bogus filename for file: '%s'\n", fname); return pom; } pom = _malloc(strlen(fname) + 30 + strlen(priv_cfg.info_dir) - strlen(priv_cfg.cache_dir)); strcpy(pom, priv_cfg.info_dir); p = fname + strlen(priv_cfg.cache_dir); if(*p != '/') p--; strcat(pom, p); } else { pom = _malloc(strlen(fname) + 30); strcpy(pom, fname); } p = strrchr(pom, '/'); if(!p) p = pom; else p++; memmove(p + 12, p, strlen(p) + 1); strncpy(p, ".pavuk_info/", 12); return pom; } static char *dinfo_get_filename_by_url(url * urlp) { return dinfo_get_filename_by_filename(url_to_filename(urlp, TRUE)); } static int dinfo_save_real(char *fnm, url * urlp, char *mime) { int fd; char *p; if(makealldirs(fnm)) xperror(fnm); if((fd = open(fnm, O_BINARY | O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR)) < 0) { xperror(fnm); return -1; } write(fd, "Original_URL: ", 14); p = url_to_urlstr(urlp, FALSE); write(fd, p, strlen(p)); _free(p); write(fd, "\n", 1); if(urlp->status & URL_FORM_ACTION) { form_info *fi; dllist *ptr; fi = (form_info *) urlp->extension; write(fd, "XPavuk-FormMethod: ", 19); if(fi->method == FORM_M_GET) write(fd, "GET\n", 4); else if(fi->method == FORM_M_POST) write(fd, "POST\n", 5); write(fd, "XPavuk-FormEncoding: ", 21); if(fi->encoding == FORM_E_URLENCODED) write(fd, "application/x-www-form-urlencoded\n", 34); else if(fi->encoding == FORM_E_MULTIPART) write(fd, "multipart/form-data\n", 20); ptr = fi->infos; while(ptr) { form_field *ff; char *n, *v; ff = (form_field *) ptr->data; n = form_encode_urlencoded_str(ff->name); v = form_encode_urlencoded_str(ff->value); if(ff->type == FORM_T_FILE) write(fd, "XPavuk-FormFile: ", 17); else write(fd, "XPavuk-FormField: ", 18); write(fd, n, strlen(n)); write(fd, "=", 1); write(fd, v, strlen(v)); write(fd, "\n", 1); _free(v); _free(n); ptr = ptr->next; } } if(mime) write(fd, mime, strlen(mime)); close(fd); return 0; } int dinfo_save(doc * docp) { char *p; int rv; if(!cfg.enable_info) return 0; p = dinfo_get_filename_by_url(docp->doc_url); rv = dinfo_save_real(p, docp->doc_url, docp->mime); _free(p); return rv; } char *dinfo_load(char *fname) { char *p = NULL; char pom[1024]; int l, tl = 0; bufio *fd; if(!(fd = bufio_open(fname, O_BINARY | O_RDONLY))) { /*xperror(fname); */ return NULL; } while((l = bufio_readln(fd, pom, sizeof(pom))) > 0) { p = _realloc(p, tl + l + 1); memcpy(p + tl, pom, l); tl += l; } if(p) *(p + tl) = '\0'; bufio_close(fd); return p; } char *dinfo_get_unique_name(url * urlp, char *pname, int lockfn) { char *dinfos; char *p, *us; int i; char *pom = NULL; char *pom2 = NULL; char xidx[20]; char *idir, *ofn, *odir; int fd = -1; bool_t exist = FALSE; pom2 = dinfo_get_filename_by_filename(pname); pom = _malloc(strlen(pname) + 14); p = strrchr(pname, '/'); if(p) { ofn = tl_strdup(p + 1); odir = tl_strndup(pname, p - pname); } else { ofn = tl_strdup(""); odir = tl_strdup(pname); } p = strrchr(pom2, '/'); if(p) idir = tl_strndup(pom2, p - pom2); else idir = tl_strdup(pom2); /* !!!!! lock !!!!! */ if(lockfn) { pom2[strlen(idir) - 11] = '\0'; strcat(pom2, "._lock"); if(makealldirs(pom2)) xperror(pom2); fd = open(pom2, O_BINARY | O_WRONLY | O_CREAT, 0644); if(fd < 0) { xperror(pom2); _free(ofn); _free(idir); _free(odir); _free(pom); _free(pom2); return NULL; } if(_flock(fd, pom2, O_BINARY | O_WRONLY | O_CREAT, TRUE)) { xperror(pom2); _free(ofn); _free(idir); _free(odir); close(fd); _free(pom); _free(pom2); return NULL; } strcpy(pom2, idir); strcat(pom2, "/"); if(makealldirs(pom2)) xperror(pom2); } us = url_to_urlstr(urlp, FALSE); i = 1; xidx[0] = '\0'; while(i > 0) { sprintf(pom, "%s/%s%s", odir, xidx, ofn); sprintf(pom2, "%s/%s%s", idir, xidx, ofn); if(access(pom, F_OK) && access(pom2, F_OK)) break; if((dinfos = dinfo_load(pom2))) { p = get_mime_param_val_str("Original_URL:", dinfos); _free(dinfos); if(p && !strcmp(p, us)) { _free(p); exist = TRUE; break; } _free(p); } else { /* We don't have info file, but have regular file thus we can assume that this file belongs to current URL. Usable in case when files were before downloaded without -store_info option. */ break; } sprintf(xidx, "%03d_", i); i++; } /* create info file to know, that this filename is reserved */ if(lockfn) { if(!exist) dinfo_save_real(pom2, urlp, NULL); /* !!!! unlock !!!! */ _funlock(fd); close(fd); } _free(us); _free(idir); _free(odir); _free(ofn); _free(pom2); return pom; } url *dinfo_get_url_for_filename(char *fn) { char *p = dinfo_get_filename_by_filename(fn); char *dinfos; url *rv = NULL; dinfos = dinfo_load(p); _free(p); if(dinfos) { p = get_mime_param_val_str("Original_URL:", dinfos); if(p) { rv = url_parse(p); assert(rv->type != URLT_FROMPARENT); _free(p); } if(rv) { p = get_mime_param_val_str("XPavuk-FormMethod:", dinfos); if(p) { form_info *fi; int i; fi = _malloc(sizeof(form_info)); fi->method = FORM_M_GET; fi->encoding = FORM_E_URLENCODED; fi->action = NULL; fi->text = NULL; fi->infos = NULL; if(!strcasecmp(p, "GET")) fi->method = FORM_M_GET; else if(!strcasecmp(p, "POST")) fi->method = FORM_M_POST; _free(p); p = get_mime_param_val_str("XPavuk-FormEncoding:", dinfos); if(p) { if(!strcasecmp(p, "multipart/form-data")) fi->encoding = FORM_E_MULTIPART; else if(strcasecmp(p, "application/x-www-form-urlencoded")) fi->encoding = FORM_E_URLENCODED; _free(p); } for(i = 0; (p = get_mime_n_param_val_str("XPavuk-FormFile:", dinfos, i)); i++) { char *tp = strchr(p, '='); if(tp) { form_field *ff = _malloc(sizeof(form_field)); ff->type = FORM_T_FILE; ff->name = form_decode_urlencoded_str(p, tp - p); ff->value = form_decode_urlencoded_str(tp + 1, strlen(tp)); fi->infos = dllist_append(fi->infos, (dllist_t) ff); } else xprintf(1, gettext("Error parsing .pavuk_info file field: %s\n"), p); _free(p)} for(i = 0; (p = get_mime_n_param_val_str("XPavuk-FormField:", dinfos, i)); i++) { char *tp = strchr(p, '='); if(tp) { form_field *ff = _malloc(sizeof(form_field)); ff->type = FORM_T_TEXT; ff->name = form_decode_urlencoded_str(p, tp - p); ff->value = form_decode_urlencoded_str(tp + 1, strlen(tp)); fi->infos = dllist_append(fi->infos, (dllist_t) ff); } else xprintf(1, gettext("Error parsing .pavuk_info file field: %s\n"), p); _free(p); } if(!fi->infos) _free(fi); if(fi) { rv->extension = fi; rv->status = URL_FORM_ACTION; } } } _free(dinfos); } return rv; } void dinfo_remove(char *fn) { char *p, *pinf; pinf = dinfo_get_filename_by_filename(fn); if(!unlink(pinf)) { char *pom; int fd; pom = tl_strdup(pinf); p = strrchr(pom, '/'); if(p) *(p) = '\0'; p = strrchr(pom, '/'); if(p) *(p + 1) = '\0'; strcat(pom, "._lock"); /* FIXME - security */ fd = open(pom, O_BINARY | O_WRONLY | O_CREAT, 0644); if(fd < 0) { xperror(pom); _free(pom); return; } if(_flock(fd, pom, O_BINARY | O_WRONLY | O_CREAT, TRUE)) { xperror(pom); close(fd); _free(pom); return; } p = strrchr(pom, '/'); if(p) *(p + 1) = '\0'; strcat(pom, ".pavuk_info"); /* FIXME - security */ if(rmdir(pom) && errno != ENOTEMPTY && errno != EEXIST) xperror(pom); p = strrchr(pom, '/'); if(p) *(p + 1) = '\0'; strcat(pom, "._lock"); /* FIXME - security */ if(unlink(pom) && errno != ENOENT) xperror(pom); _funlock(fd); close(fd); _free(pom); } _free(pinf); } pavuk-0.9.35/src/dinfo.h0000644000175000001440000000124010142077736011716 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _dinfo_h_ #define _dinfo_h_ #include "url.h" #include "doc.h" extern int dinfo_save(doc *); extern char *dinfo_load(char *); extern char *dinfo_get_unique_name(url *, char *, int); extern url *dinfo_get_url_for_filename(char *); extern void dinfo_remove(char *); #endif pavuk-0.9.35/src/update_links.c0000644000175000001440000000633510142077742013303 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include "tools.h" #include "url.h" #include "doc.h" #include "html.h" #include "gui_api.h" #include "update_links.h" static void rewrite_links(char *); void update_links(char *dirname) { DIR *dir; struct dirent *dent; char next_dir[PATH_MAX]; struct stat estat; xprintf(1, gettext("Entering directory %s\n"), dirname); if(!(dir = opendir(dirname))) { xperror(dirname); return; } while((dent = readdir(dir))) { _Xt_Serve; sprintf(next_dir, "%s/%s", dirname, dent->d_name); if(!strcmp(dent->d_name, ".")) continue; if(!strcmp(dent->d_name, "..")) continue; if(stat(next_dir, &estat)) { xperror(next_dir); continue; } if(S_ISDIR(estat.st_mode)) { if(!strcmp(dent->d_name, ".pavuk_info") && cfg.enable_info) continue; update_links(next_dir); } else if(file_is_html(next_dir)) { xprintf(1, gettext("Relocating %s\n"), next_dir); rewrite_links(next_dir); } else xprintf(1, gettext("Omitting %s\n"), next_dir); #ifdef I_FACE if(cfg.xi_face) { if(cfg.rbreak || cfg.stop) { closedir(dir); return; } } #endif } closedir(dir); xprintf(1, gettext("Leaving directory %s\n"), dirname); } static void rewrite_links(char *fn) { char pom[2048]; char *savetmp, *p; int sock; doc pdoc; struct stat estat; struct utimbuf ut; url dum; if(stat(fn, &estat) == 0) { if(S_ISDIR(estat.st_mode)) { xprintf(1, gettext("Can't open directory %s\n"), fn); return; } } ut.actime = estat.st_atime; ut.modtime = estat.st_mtime; memset(&dum, '\0', sizeof(url)); dum.type = URLT_FILE; dum.p.file.filename = fn; dum.local_name = fn; if(!strcasecmp(tl_get_extension(fn), "css")) dum.status = URL_STYLE; else dum.status = 0; doc_init(&pdoc, &dum); doc_download(&pdoc, 1, TRUE); _free(pdoc.mime); html_process_parent_document(&pdoc, NULL, NULL); strcpy(pom, fn); p = strrchr(pom, '/'); sprintf(p + 1, "._lnkupd%d", (int) getpid()); savetmp = tl_strdup(pom); rename(fn, savetmp); if((sock = open(fn, O_BINARY | O_TRUNC | O_CREAT | O_WRONLY, 0644)) < 0) { xperror(fn); rename(savetmp, fn); free(savetmp); free(pdoc.contents); doc_remove_lock(&pdoc); return; } if(write(sock, pdoc.contents, pdoc.size) != pdoc.size) { xperror(fn); close(sock); rename(savetmp, fn); free(savetmp); free(pdoc.contents); doc_remove_lock(&pdoc); return; } close(sock); utime(fn, &ut); unlink(savetmp); free(savetmp); free(pdoc.contents); doc_remove_lock(&pdoc); } pavuk-0.9.35/src/update_links.h0000644000175000001440000000074410142077742013306 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _update_links_h_ #define _update_links_h_ extern void update_links(char *); #endif pavuk-0.9.35/src/fnmatch.c0000644000175000001440000001326010142077737012240 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifndef HAVE_FNMATCH /* Enable GNU extensions in fnmatch.h. */ #ifndef _GNU_SOURCE #define _GNU_SOURCE 1 #endif #include #include "fnmatch.h" #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #if defined _LIBC || !defined __GNU_LIBRARY__ #if defined STDC_HEADERS || !defined isascii #define ISASCII(c) 1 #else #define ISASCII(c) isascii(c) #endif #define ISUPPER(c) (ISASCII (c) && isupper (c)) #ifndef errno extern int errno; #endif /* Match STRING against the filename pattern PATTERN, returning zero if it matches, nonzero if not. */ int fnmatch(const char *pattern, const char *string, int flags) { register const char *p = pattern, *n = string; register char c; /* Note that this evaluates C many times. */ #define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c)) while((c = *p++) != '\0') { c = FOLD(c); switch (c) { case '?': if(*n == '\0') return FNM_NOMATCH; else if((flags & FNM_FILE_NAME) && *n == '/') return FNM_NOMATCH; else if((flags & FNM_PERIOD) && *n == '.' && (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) return FNM_NOMATCH; break; case '\\': if(!(flags & FNM_NOESCAPE)) { c = *p++; if(c == '\0') /* Trailing \ loses. */ return FNM_NOMATCH; c = FOLD(c); } if(FOLD(*n) != c) return FNM_NOMATCH; break; case '*': if((flags & FNM_PERIOD) && *n == '.' && (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) return FNM_NOMATCH; for(c = *p++; c == '?' || c == '*'; c = *p++) { if((flags & FNM_FILE_NAME) && *n == '/') /* A slash does not match a wildcard under FNM_FILE_NAME. */ return FNM_NOMATCH; else if(c == '?') { /* A ? needs to match one character. */ if(*n == '\0') /* There isn't another character; no match. */ return FNM_NOMATCH; else /* One character of the string is consumed in matching this ? wildcard, so *??? won't match if there are less than three characters. */ ++n; } } if(c == '\0') return 0; { char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c; c1 = FOLD(c1); for(--p; *n != '\0'; ++n) if((c == '[' || FOLD(*n) == c1) && fnmatch(p, n, flags & ~FNM_PERIOD) == 0) return 0; return FNM_NOMATCH; } case '[': { /* Nonzero if the sense of the character class is inverted. */ register int not; if(*n == '\0') return FNM_NOMATCH; if((flags & FNM_PERIOD) && *n == '.' && (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) return FNM_NOMATCH; not = (*p == '!' || *p == '^'); if(not) ++p; c = *p++; for(;;) { register char cstart = c, cend = c; if(!(flags & FNM_NOESCAPE) && c == '\\') { if(*p == '\0') return FNM_NOMATCH; cstart = cend = *p++; } cstart = cend = FOLD(cstart); if(c == '\0') /* [ (unterminated) loses. */ return FNM_NOMATCH; c = *p++; c = FOLD(c); if((flags & FNM_FILE_NAME) && c == '/') /* [/] can never match. */ return FNM_NOMATCH; if(c == '-' && *p != ']') { cend = *p++; if(!(flags & FNM_NOESCAPE) && cend == '\\') cend = *p++; if(cend == '\0') return FNM_NOMATCH; cend = FOLD(cend); c = *p++; } if(FOLD(*n) >= cstart && FOLD(*n) <= cend) goto matched; if(c == ']') break; } if(!not) return FNM_NOMATCH; break; matched:; /* Skip the rest of the [...] that already matched. */ while(c != ']') { if(c == '\0') /* [... (unterminated) loses. */ return FNM_NOMATCH; c = *p++; if(!(flags & FNM_NOESCAPE) && c == '\\') { if(*p == '\0') return FNM_NOMATCH; /* FIXME: 1003.2d11 is unclear if this is right. */ ++p; } } if(not) return FNM_NOMATCH; } break; default: if(c != FOLD(*n)) return FNM_NOMATCH; } ++n; } if(*n == '\0') return 0; if((flags & FNM_LEADING_DIR) && *n == '/') /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ return 0; return FNM_NOMATCH; } #endif /* _LIBC or not __GNU_LIBRARY__. */ #endif /* HAVE_FNMATCH */ pavuk-0.9.35/src/fnmatch.h0000644000175000001440000000411110142077737012240 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _FNMATCH_H #define _FNMATCH_H 1 #ifdef __cplusplus extern "C" { #endif #if defined (__cplusplus) || (defined (__STDC__) && __STDC__) #undef __P #define __P(protos) protos #else /* Not C++ or ANSI C. */ #undef __P #define __P(protos) () /* We can get away without defining `const' here only because in this file it is used only inside the prototype for `fnmatch', which is elided in non-ANSI C where `const' is problematical. */ #endif /* C++ or ANSI C. */ /* We #undef these before defining them because some losing systems (HP-UX A.08.07 for example) define these in . */ #undef FNM_PATHNAME #undef FNM_NOESCAPE #undef FNM_PERIOD /* Bits set in the FLAGS argument to `fnmatch'. */ #define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ #define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ #define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ #if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE) #define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ #define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ #define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ #endif /* Value returned by `fnmatch' if STRING does not match PATTERN. */ #define FNM_NOMATCH 1 /* Match STRING against the filename pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ extern int fnmatch __P((const char *__pattern, const char *__string, int __flags)); #ifdef __cplusplus } #endif #endif /* fnmatch.h */ pavuk-0.9.35/src/css.c0000644000175000001440000002415510330157355011407 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include "css.h" #include "url.h" #include "tools.h" #include "mode.h" #define BUFFER 1024 #define MEXPAND(sv) \ if((sz - (sv + r + BUFFER)) < 0) \ { \ result = _realloc(result, sz + sv + BUFFER); \ sz += BUFFER + sv; \ } #define SEXPAND(sv) \ if((ssz - (sv + sr + BUFFER)) < 0) \ { \ stack = _realloc(stack, ssz + sv + BUFFER); \ ssz += BUFFER + sv; \ } /* FIXME: Security (the whole file) ! */ dllist *css_get_all_links(url * doc_url, char *stylestr, char *base, char *baset, int no_limits) { bool_t urlstart = FALSE; char *p; char *stack; char *sp; int sr, ssz; dllist *retval = NULL; ssz = 2 * BUFFER; stack = _malloc(ssz); sr = 0; for(p = stylestr; *p; p++) { if(urlstart) { if(*p == ')') { char *pom; stack[sr] = '\0'; sp = stack + sr - 1; while(tl_ascii_isspace(*sp) && sp > stack) { *sp = '\0'; sp--; } if(*sp == '\"' || *sp == '\'') *sp = '\0'; sp = stack; while(tl_ascii_isspace(*sp)) sp++; if(*sp == '\"' || *sp == '\'') sp++; pom = url_to_absolute_url(base, baset, doc_url, sp); if(pom) { url *purl; cond_info_t condp; condp.level = 0; condp.urlnr = 0; condp.size = 0; condp.time = 0L; condp.mimet = NULL; condp.full_tag = NULL; condp.params = NULL; condp.html_doc = stylestr; condp.html_doc_offset = p - stylestr; condp.tag = NULL; condp.attrib = NULL; purl = url_parse(pom); assert(purl->type != URLT_FROMPARENT); purl->parent_url = dllist_append(purl->parent_url, (dllist_t)doc_url); purl->level = doc_url->level + 1; purl->status |= URL_INLINE_OBJ; url_path_abs(purl); if((cfg.mode == MODE_SYNC || cfg.mode == MODE_MIRROR) && cfg.request && (purl->type == URLT_FILE)) { url *pomurl = filename_to_url(purl->p.file.filename); if(pomurl) { free_deep_url(purl); _free(purl); purl = pomurl; } } if(no_limits || url_append_condition(purl, &condp)) { retval = dllist_append(retval, (dllist_t)purl); } else { free_deep_url(purl); _free(purl); } free(pom); } urlstart = FALSE; } else { SEXPAND(1); stack[sr] = *p; sr++; } continue; } if(((p - stylestr) > 3) && !strncasecmp(p - 3, "url(", 4)) { urlstart = TRUE; sr = 0; } } _free(stack); return retval; } char *css_to_absolute_links(url * doc_url, char *stylestr, char *base, char *baset) { bool_t urlstart = FALSE; char *result; int sz, r; char *p; char *sp; char *stack; int ssz, sr, l; sz = strlen(stylestr) + BUFFER; result = _malloc(sz); r = 0; ssz = 2 * BUFFER; stack = _malloc(ssz); sr = 0; for(p = stylestr; *p; p++) { if(urlstart) { if(*p == ')') { char *pom; stack[sr] = '\0'; sp = stack + sr - 1; while(tl_ascii_isspace(*sp) && sp > stack) { *sp = '\0'; sp--; } if(*sp == '\"' || *sp == '\'') *sp = '\0'; sp = stack; while(tl_ascii_isspace(*sp)) sp++; if(*sp == '\"' || *sp == '\'') sp++; pom = url_to_absolute_url(base, baset, doc_url, sp); if(pom) { url *purl; purl = url_parse(pom); assert(purl->type != URLT_FROMPARENT); _free(pom); url_path_abs(purl); pom = url_to_urlstr(purl, TRUE); free_deep_url(purl); _free(purl); } else pom = tl_strdup(sp); l = strlen(pom); MEXPAND(l); result[r] = '\''; r++; strcpy(result + r, pom); r += l; result[r] = '\''; r++; result[r] = ')'; r++; urlstart = FALSE; _free(pom); } else { SEXPAND(1); stack[sr] = *p; sr++; } continue; } if(((p - stylestr) > 3) && !strncasecmp(p - 3, "url(", 4)) { urlstart = TRUE; sr = 0; } MEXPAND(1); result[r] = *p; r++; } result[r] = '\0'; _free(stack); return result; } char *css_remote_to_local_links(url * doc_url, char *stylestr, int all, int sel, char *base, char *baset) { bool_t urlstart = FALSE; char *result; int sz, r; char *p; char pom[4096]; char *act_name = url_to_filename(doc_url, TRUE); char *anchor; char *sp; char *stack; int ssz, sr, l; sz = strlen(stylestr) + BUFFER; result = _malloc(sz); r = 0; ssz = 2 * BUFFER; stack = _malloc(ssz); sr = 0; for(p = stylestr; *p; p++) { if(urlstart) { if(*p == ')') { char *fn; url *urlp; url *purl; struct stat estat; stack[sr] = '\0'; sp = stack + sr - 1; while(tl_ascii_isspace(*sp) && sp > stack) { *sp = '\0'; sp--; } if(*sp == '\"' || *sp == '\'') *sp = '\0'; sp = stack; while(tl_ascii_isspace(*sp)) sp++; if(*sp == '\"' || *sp == '\'') sp++; urlp = url_parse(sp); assert(urlp->type != URLT_FROMPARENT); if(all && urlp->type == URLT_FILE) { fn = url_to_absolute_url(base, baset, doc_url, sp); free_deep_url(urlp); _free(urlp); urlp = url_parse(fn); assert(urlp->type != URLT_FROMPARENT); } anchor = url_get_anchor_name(urlp); /** for better performance with info files **/ if((purl = url_was_befor(urlp))) fn = url_to_filename(purl, TRUE); else fn = url_to_filename(urlp, FALSE); strcpy(pom, sp); if(((all || (sel && purl)) && fn) || (!sel && (((urlp->type != URLT_FILE) && fn && ((!access(fn, R_OK) && !stat(fn, &estat)) || !strcmp(act_name, fn)))))) { if(all || (sel && purl) || (!sel && ((!access(fn, R_OK) && !S_ISDIR(estat.st_mode)) || !strcmp(act_name, fn)))) { char *relfn = get_relative_path(act_name, fn); if(anchor) sprintf(pom, "%s#%s", relfn, anchor); else strcpy(pom, relfn); _free(relfn); } else { sprintf(pom, "%s/%s", fn, priv_cfg.index_name); if(!stat(pom, &estat) && !S_ISDIR(estat.st_mode)) { char *relfn = get_relative_path(act_name, pom); if(anchor) sprintf(pom, "%s#%s", relfn, anchor); else strcpy(pom, relfn); free(relfn); } } } free_deep_url(urlp); _free(urlp); l = strlen(pom); MEXPAND(l); result[r] = '\''; r++; strcpy(result + r, pom); r += l; result[r] = '\''; r++; result[r] = ')'; r++; urlstart = FALSE; } else { SEXPAND(1); stack[sr] = *p; sr++; } continue; } if(((p - stylestr) > 3) && !strncasecmp(p - 3, "url(", 4)) { urlstart = TRUE; sr = 0; } MEXPAND(1); result[r] = *p; r++; } result[r] = '\0'; _free(stack); return result; } char *css_change_url(url * doc_url, char *stylestr, url * url_old, char *url_new) { bool_t urlstart = FALSE; char *result; int sz, r; char *p; char pom[4096]; char *anchor; char *oldfn; char *sp; char *stack; int ssz, sr, l; sz = strlen(stylestr) + BUFFER; result = _malloc(sz); r = 0; ssz = 2 * BUFFER; stack = _malloc(ssz); sr = 0; oldfn = url_to_urlstr(url_old, FALSE); for(p = stylestr; *p; p++) { if(urlstart) { if(*p == ')') { char *pfn; url *urlp; stack[sr] = '\0'; sp = stack + sr - 1; while(tl_ascii_isspace(*sp) && sp > stack) { *sp = '\0'; sp--; } if(*sp == '\"' || *sp == '\'') *sp = '\0'; sp = stack; while(tl_ascii_isspace(*sp)) sp++; if(*sp == '\"' || *sp == '\'') sp++; pfn = NULL; urlp = url_parse(sp); assert(urlp->type != URLT_FROMPARENT); anchor = url_get_anchor_name(urlp); strcpy(pom, sp); if(urlp && (urlp->type != URLT_FILE) && (pfn = url_to_urlstr(urlp, FALSE))) { if(!strcmp(pfn, oldfn)) { if(anchor) sprintf(pom, "%s#%s", url_new, anchor); else strcpy(pom, url_new); } } free_deep_url(urlp); free(urlp); _free(pfn); l = strlen(pom); MEXPAND(l); result[r] = '\''; r++; strcpy(result + r, pom); r += l; result[r] = '\''; r++; result[r] = ')'; r++; urlstart = FALSE; } else { SEXPAND(1); stack[sr] = *p; sr++; } continue; } if(((p - stylestr) > 3) && !strncasecmp(p - 3, "url(", 4)) { urlstart = TRUE; sr = 0; } MEXPAND(1); result[r] = *p; r++; } result[r] = '\0'; _free(stack); return result; } pavuk-0.9.35/src/css.h0000644000175000001440000000135510142077736011416 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _css_h_ #define _css_h_ #include "url.h" #include "dllist.h" extern dllist *css_get_all_links(url *, char *, char *, char *, int); extern char *css_to_absolute_links(url *, char *, char *, char *); extern char *css_remote_to_local_links(url *, char *, int, int, char *, char *); extern char *css_change_url(url *, char *, url *, char *); #endif pavuk-0.9.35/src/doc.c0000644000175000001440000012336610142077737011376 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_FSTATVFS #ifdef HAVE_SYS_STATVFS_H #include #endif #else #ifdef HAVE_FSTATFS #ifdef HAVE_SYS_STATFS_H #include #endif #ifdef HAVE_SYS_VFS_H #include #endif #ifdef HAVE_SYS_MOUNT_H #include #endif #endif #endif #include #include #include #include "url.h" #include "doc.h" #include "tools.h" #include "mime.h" #include "http.h" #include "ftp.h" #include "gopher.h" #include "decode.h" #include "abstract.h" #include "mode.h" #include "times.h" #include "dinfo.h" #include "errcode.h" #include "log.h" #include "gui_api.h" #include "html.h" #ifdef I_FACE static void doc_set_info(doc *); #endif static void show_progress(doc *, ssize_t, int); static double compute_speed_rate(time_t, ssize_t); int doc_download_init(doc * docu, int load) { docu->remove_lock = TRUE; docu->lock_fn = NULL; docu->is_parsable = cfg.enable_js && (docu->doc_url->status & URL_ISSCRIPT); docu->contents = NULL; docu->mime = NULL; docu->type_str = NULL; docu->save_online = FALSE; docu->size = 0; docu->current_size = 0; docu->totsz = -1; docu->origsize = 0; docu->rest_pos = 0; docu->stime = time(NULL); docu->s_sock = NULL; docu->is_http11 = FALSE; docu->is_chunked = FALSE; docu->is_persistent = FALSE; docu->read_chunksize = FALSE; docu->read_trailer = FALSE; docu->doreget = FALSE; docu->origtime = docu->dtime; docu->adj_sz = 0; docu->load = load; docu->http_proxy_10 = FALSE; docu->ftp_data_con_finished = FALSE; docu->num_auth = cfg.auth_reuse_nonce ? 1 : 0; docu->num_proxy_auth = cfg.auth_reuse_proxy_nonce ? 1 : 0; docu->is_http_transfer = docu->doc_url->type == URLT_HTTP || docu->doc_url->type == URLT_HTTPS || (docu->doc_url->type == URLT_FTP && priv_cfg.ftp_proxy && cfg.ftp_via_http && !cfg.ftp_dirtyp) || (docu->doc_url->type == URLT_GOPHER && priv_cfg.gopher_proxy && cfg.gopher_via_http); /*** just default value, later will be assigned properly ***/ docu->request_type = HTTP_REQ_UNKNOWN; if(docu->is_http_transfer && !docu->http_proxy) { char *proxy = NULL; unsigned short port = 0; switch (docu->doc_url->type) { case URLT_HTTP: { http_proxy *pr = NULL; LOCK_PROXY; pr = http_proxy_get(); if(pr) { http_proxy_check(pr, docu); proxy = tl_strdup(pr->addr); port = pr->port; docu->http_proxy_10 = (pr->is_10 != 0); } UNLOCK_PROXY; } break; #ifdef USE_SSL case URLT_HTTPS: if(priv_cfg.ssl_proxy) { proxy = tl_strdup(priv_cfg.ssl_proxy); port = cfg.ssl_proxy_port; } break; #endif case URLT_FTP: if(priv_cfg.ftp_proxy) { proxy = tl_strdup(priv_cfg.ftp_proxy); port = cfg.ftp_proxy_port; } break; case URLT_GOPHER: if(priv_cfg.gopher_proxy) { proxy = tl_strdup(priv_cfg.gopher_proxy); port = cfg.gopher_proxy_port; } break; default: proxy = NULL; port = 0; break; } docu->http_proxy = proxy; docu->http_proxy_port = port; } if(cfg.dumpfd >= 0) { docu->remove_lock = FALSE; if(cfg.dump_after) { docu->load = TRUE; docu->save_online = FALSE; docu->s_sock = NULL; } else { docu->save_online = TRUE; docu->s_sock = bufio_dupfd(cfg.dumpfd); if(!docu->s_sock) { xperror("bufio_dupfd()"); docu->errcode = ERR_STORE_DOC; return -1; } } } gettimeofday(&docu->hr_start_time, NULL); timerclear(&docu->redirect_time); timerclear(&docu->dns_time); timerclear(&docu->connect_time); timerclear(&docu->first_byte_time); timerclear(&docu->end_time); return 0; } static int doc_check_quotas(doc * docu, ssize_t len, ssize_t totallen) { int retcode = 0; #define KILL_PERSISTANT_CONNECTION \ if(docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) \ docu->ftp_fatal_err = TRUE; \ if(docu->is_http11) \ docu->is_persistent = FALSE; if(cfg.minrate > 0.0 && (docu->doc_url->type != URLT_FILE && !(docu->doc_url->status & URL_REDIRECT))) { time_t _tm = doc_etime(docu, FALSE); double _rt = compute_speed_rate(_tm, totallen); if(_rt < (cfg.minrate * 1024.0)) { KILL_PERSISTANT_CONNECTION; docu->errcode = ERR_LOW_TRANSFER_RATE; retcode = -1; } } if(cfg.max_time > 0.0) { if((cfg.start_time + (int) (60.0 * cfg.max_time)) < time(NULL)) { KILL_PERSISTANT_CONNECTION; docu->errcode = ERR_QUOTA_TIME; retcode = -1; } } if(docu->doc_url->type != URLT_FILE && !(docu->doc_url->status & URL_REDIRECT)) cfg.trans_size += len; if(cfg.file_quota && ((cfg.file_quota * 1024) <= totallen) && (docu->doc_url->type != URLT_FILE) && !(docu->doc_url->status & URL_REDIRECT)) { KILL_PERSISTANT_CONNECTION; docu->errcode = ERR_QUOTA_FILE; retcode = 1; } if(cfg.trans_quota && ((cfg.trans_quota * 1024) <= cfg.trans_size)) { KILL_PERSISTANT_CONNECTION; docu->errcode = ERR_QUOTA_TRANS; retcode = -1; } #if defined HAVE_FSTATFS || defined HAVE_FSTATVFS if((cfg.dumpfd < 0) && cfg.fs_quota && (docu->doc_url->type != URLT_FILE) && !(docu->doc_url->status & URL_REDIRECT) && docu->s_sock && cfg.dumpfd < 0) { #ifdef HAVE_FSTATVFS struct statvfs fss; if(fstatvfs(bufio_getfd(docu->s_sock), &fss)) xperror("fstatvfs"); #else struct statfs fss; if(fstatfs(bufio_getfd(docu->s_sock), &fss)) xperror("fstatfs"); #endif else { long freespace = (fss.f_bsize * fss.f_bavail) / 1024; if(freespace < cfg.fs_quota) { KILL_PERSISTANT_CONNECTION; docu->errcode = ERR_QUOTA_FS; retcode = -1; } } } #endif return retcode; } static int doc_transfer_data(doc * docu) { char *buf; int bufsize; ssize_t len, totallen = 0; int retcode = 0; if(docu->report_size) gui_set_status(gettext("Transfering data")); show_progress(docu, docu->adj_sz, FALSE); bufsize = (cfg.bufsize > 0 ? cfg.bufsize : 1) * 1024; buf = _malloc(bufsize); #ifdef SO_RCVBUF #ifndef __QNX__ if(bufio_is_sock(docu->datasock)) { if(setsockopt(bufio_getfd(docu->datasock), SOL_SOCKET, SO_RCVBUF, (char *) &bufsize, sizeof(bufsize))) { xperror(gettext("setsockopt: SO_RCVBUF failed")); } } #endif #endif if(docu->save_online) { DEBUG_USER("Storing to file: %s\n", url_to_filename(docu->doc_url, TRUE)); } if(docu->mime && cfg.dump_resp && cfg.dumpfd >= 0 && !cfg.dump_after) bufio_write(docu->s_sock, docu->mime, strlen(docu->mime)); while((len = abs_read_data(docu, docu->datasock, buf, bufsize)) > 0) { if(docu->save_online) { if(write(bufio_getfd(docu->s_sock), buf, len) != len) { docu->errcode = ERR_STORE_DOC; xperror(gettext("storing document")); retcode = -1; if(docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) docu->ftp_fatal_err = TRUE; if(docu->is_http11) docu->is_persistent = FALSE; break; } } totallen += len; docu->current_size += len; if(cfg.maxrate > 0.0 && (docu->doc_url->type != URLT_FILE && !(docu->doc_url->status & URL_REDIRECT))) { time_t _tm = doc_etime(docu, FALSE); double _rt = compute_speed_rate(_tm, totallen); if(_rt > (cfg.maxrate * 1024.0)) { tl_msleep((time_t) (1000.0 * ((double) totallen) / (cfg.maxrate * 1024.0)) - _tm); } } docu->size = totallen; show_progress(docu, docu->adj_sz, FALSE); if(docu->load || docu->is_parsable || ((docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && docu->doc_url->p.ftp.dir) || (docu->doc_url->type == URLT_GOPHER && (docu->doc_url->p.gopher.selector[0] == '1' || docu->doc_url->p.gopher.selector[0] == 'h'))) { docu->contents = _realloc(docu->contents, totallen + 1); memmove(docu->contents + totallen - len, buf, len); } retcode = doc_check_quotas(docu, len, totallen); if(retcode) { if(retcode == 1) retcode = 0; break; } if(docu->totsz > 0 && docu->totsz <= docu->current_size) break; } show_progress(docu, docu->adj_sz, TRUE); if(cfg.dumpfd >= 0 && !cfg.dump_after) { bufio_close(docu->s_sock); docu->s_sock = NULL; docu->save_online = FALSE; } if(cfg.progres && docu->report_size #ifdef I_FACE && !cfg.xi_face #endif ) { xprintf(0, "\n"); } if(len < 0 || ((docu->totsz > 0) && (docu->totsz != (docu->size + docu->rest_pos)))) { xperror(gettext("Document transfer data")); if((docu->doc_url->type == URLT_HTTP || docu->doc_url->type == URLT_HTTPS) && (!(docu->doc_url->status & URL_REDIRECT))) { docu->errcode = ERR_HTTP_TRUNC; } else if((docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && (!(docu->doc_url->status & URL_REDIRECT))) { docu->errcode = ERR_FTP_TRUNC; } else if(!docu->errcode) docu->errcode = ERR_READ; docu->remove_lock = FALSE; retcode = -1; } if(docu->report_size) gui_set_status(gettext("Data transfer done")); if((docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && docu->errcode == ERR_FTP_TRUNC) { docu->remove_lock = FALSE; retcode = -1; } /*** if transfer was not from begining, reread ***/ /*** document content to memory form local file ***/ /*** to be sure we will process whole document ***/ if(!retcode && docu->rest_pos && (docu->load || docu->is_parsable) && (cfg.dumpfd < 0)) { _free(docu->contents); totallen = 0; lseek(bufio_getfd(docu->s_sock), 0, SEEK_SET); bufio_reset(docu->s_sock); while((len = bufio_read(docu->s_sock, buf, bufsize)) > 0) { totallen += len; docu->contents = _realloc(docu->contents, totallen + 1); memmove(docu->contents + totallen - len, buf, len); } } if(docu->contents) *(docu->contents + totallen) = '\0'; _free(buf); docu->size = totallen; return retcode; } static int doc_check_doc_file(doc * docu, int *rv) { char *fn; struct stat estat; fn = url_to_filename(docu->doc_url, TRUE); if(cfg.mode != MODE_SYNC && cfg.mode != MODE_MIRROR) { if(docu->doc_url->type != URLT_FILE && (access(fn, R_OK) != -1)) { if(!stat(fn, &estat)) { if(!S_ISDIR(estat.st_mode)) { docu->doc_url->status |= URL_REDIRECT; } else { char *pom; char *savepath = url_get_path(docu->doc_url); pom = tl_str_concat(NULL, fn, "/", priv_cfg.index_name, NULL); if(!stat(pom, &estat)) { _free(pom); if(!S_ISDIR(estat.st_mode)) { url *newurl = url_dup_url(docu->doc_url); if(newurl->type != URLT_FILE) pom = tl_str_concat(NULL, savepath, "/", NULL); if(newurl->type == URLT_FTP || newurl->type == URLT_FTPS) newurl->p.ftp.dir = TRUE; url_set_path(newurl, pom); _free(pom); if(url_redirect_to(docu->doc_url, newurl, FALSE)) docu->errcode = ERR_HTTP_CYCLIC; else docu->errcode = ERR_HTTP_REDIR; *rv = -1; return -1; } } _free(pom); fn = url_to_filename(docu->doc_url, TRUE); } } } if((docu->doc_url->type == URLT_FILE || (docu->doc_url->status & URL_REDIRECT)) && !docu->load) { if(!stat(fn, &estat)) { if(S_ISDIR(estat.st_mode)) { docu->errcode = ERR_DIR_URL; *rv = -1; return -1; } } else { docu->errcode = ERR_FILE_OPEN; *rv = -1; return -1; } if((!cfg.ftp_html && strcmp(tl_get_basename(fn), priv_cfg.index_name) && (docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && !docu->doc_url->p.ftp.dir) || !file_is_html(fn)) { docu->is_parsable = FALSE; docu->save_online = TRUE; docu->size = estat.st_size; #ifdef I_FACE if(cfg.xi_face) doc_set_info(docu); #endif xprintf(1, gettext("File redirect\n")); *rv = 0; return -1; } else { if(!strcasecmp("css", tl_get_extension(fn))) docu->doc_url->status |= URL_STYLE; docu->is_parsable = TRUE; } } } else { if(!stat(fn, &estat)) { docu->origsize = estat.st_size; /* pro: somehow it must have been forgotten to set the time as well... */ docu->origtime = estat.st_mtime; } } return 0; } static int doc_open_existing_in_file(doc * docu, int b_lock, int *rv) { char *inname; struct stat estat; if((cfg.dumpfd < 0) && (inname = url_to_in_filename(docu->doc_url))) { if(!stat(inname, &estat) && !S_ISDIR(estat.st_mode)) { if(doc_lock(docu, b_lock)) { docu->errcode = ERR_STORE_DOC; _free(inname); *rv = -1; return -1; } docu->rest_pos = estat.st_size - cfg.rollback; if(docu->rest_pos) { xprintf(1, gettext("Trying to resume from position %d\n"), docu->rest_pos); docu->origtime = estat.st_mtime; docu->stime = estat.st_mtime; docu->doreget = TRUE; docu->remove_lock = FALSE; } } _free(inname); } return 0; } static int doc_open_new_in_file(doc * docu, int b_lock) { if((cfg.dumpfd < 0) && !docu->s_sock) { if(cfg.post_update && docu->type_str) { /** dirty hack, but is required to support **/ /** file naming by its MIME type **/ url_forget_filename(docu->doc_url); url_to_filename_with_type(docu->doc_url, docu->type_str, TRUE); } if(doc_lock(docu, b_lock)) { docu->errcode = ERR_STORE_DOC; return -1; } } return 0; } /********************************************************/ /* nacitanie dokumentu + specificke upravy */ /* FIXME: Translate me! */ /********************************************************/ static int doc_download_helper(doc * docu, int load, int b_lock) { char *p = NULL, *p1 = 0; ssize_t len = 0; int retcode = 0; int rv; struct stat estat; bufio *saved_datasock = NULL; if(doc_download_init(docu, load)) return -1; gettimeofday(&docu->hr_start_time, NULL); if(doc_check_doc_file(docu, &rv)) return rv; if(doc_open_existing_in_file(docu, b_lock, &rv)) return rv; if(docu->report_size) gui_set_status(gettext("Opening connection")); if(!(docu->datasock = abs_get_data_socket(docu)) && /* pro: add test for errcodes. The errcode tests are needed; otherwise the "if" some lines later will never get anything to do... */ docu->errcode != ERR_FTP_ACTUAL && docu->errcode != ERR_HTTP_ACTUAL) { if(docu->mime && docu->doc_url->type != URLT_FILE && !(docu->doc_url->status & URL_REDIRECT)) dinfo_save(docu); docu->remove_lock = FALSE; abs_close_socket(docu, FALSE); return -1; } doc_etime(docu, TRUE); if(docu->errcode == ERR_HTTP_ACTUAL || docu->errcode == ERR_FTP_ACTUAL) { abs_close_socket(docu, FALSE); saved_datasock = docu->datasock; if(docu->load || docu->is_parsable) { xprintf(1, gettext("Loading local copy\n")); p = url_to_filename(docu->doc_url, TRUE); if(!(docu->datasock = bufio_open(p, O_BINARY | O_RDONLY))) { docu->datasock = saved_datasock; docu->errcode = ERR_FILE_OPEN; return -1; } docu->doc_url->status |= URL_REDIRECT; docu->doc_url->status |= URL_ISLOCAL; docu->save_online = FALSE; } else { docu->doc_url->status |= URL_REDIRECT; return 1; } } else if(docu->errcode == ERR_HTTP_NOREGET) { if(!cfg.freget) { docu->is_persistent = FALSE; abs_close_socket(docu, FALSE); docu->remove_lock = FALSE; docu->ftp_fatal_err = TRUE; return -1; } else { docu->rest_pos = 0; } } else if(docu->errcode == ERR_FTP_NOREGET) { if(!cfg.freget) { docu->is_persistent = FALSE; abs_close_socket(docu, FALSE); docu->remove_lock = FALSE; docu->ftp_fatal_err = TRUE; return -1; } else { docu->rest_pos = 0; } } else if(docu->errcode) { if(docu->mime && docu->doc_url->type != URLT_FILE && !(docu->doc_url->status & URL_REDIRECT)) dinfo_save(docu); docu->is_persistent = FALSE; docu->ftp_fatal_err = TRUE; abs_close_socket(docu, FALSE); return -1; } if(doc_open_new_in_file(docu, b_lock)) { docu->is_persistent = FALSE; docu->ftp_fatal_err = TRUE; abs_close_socket(docu, FALSE); return -1; } if(docu->doc_url->type != URLT_FILE && !(docu->doc_url->status & URL_REDIRECT)) dinfo_save(docu); if((((docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && !docu->doc_url->p.ftp.dir) || (docu->doc_url->type == URLT_GOPHER && (docu->doc_url->p.gopher.selector[0] != '1' || docu->doc_url->p.gopher.selector[0] != 'h')) || (docu->doc_url->type == URLT_HTTP || docu->doc_url->type == URLT_HTTPS)) && !(docu->doc_url->status & URL_REDIRECT)) { if(cfg.dumpfd >= 0 && cfg.dump_after) docu->save_online = FALSE; else docu->save_online = TRUE; } if(cfg.ftp_html && (docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && ext_is_html(docu->doc_url->p.ftp.path)) { docu->is_parsable = TRUE; } if(docu->doc_url->status & URL_INNSCACHE) { fstat(bufio_getfd(docu->datasock), &estat); docu->totsz = estat.st_size; docu->is_parsable = (docu->doc_url->status & URL_ISHTML) != 0; } if(docu->errcode == ERR_HTTP_FAILREGET) { docu->rest_pos = 0; docu->save_online = FALSE; } if(docu->save_online) { if(cfg.dumpfd < 0) { ftruncate(bufio_getfd(docu->s_sock), docu->rest_pos); lseek(bufio_getfd(docu->s_sock), docu->rest_pos, SEEK_SET); bufio_reset(docu->s_sock); } } /* We measure time-to-first-byte here again, to add all the processing * timing noise (1-2ms) to the large value -- FB, which is typically * on the order of 100ms, rather then to the time-to-last-byte, * which is often around 0ms */ gettimeofday(&docu->first_byte_time, NULL); retcode = doc_transfer_data(docu); abs_close_socket(docu, TRUE); if(!retcode) docu->remove_lock = TRUE; if(docu->errcode == ERR_HTTP_ACTUAL) { docu->doc_url->status &= ~URL_REDIRECT; docu->datasock = saved_datasock; } if(!retcode && docu->doc_url->status & URL_INNSCACHE) { docu->is_parsable = (docu->doc_url->status & URL_ISHTML) != 0; } else if(!retcode && docu->doc_url->type == URLT_GOPHER && !(docu->doc_url->status & URL_REDIRECT) && !(priv_cfg.gopher_proxy && cfg.gopher_via_http)) { docu->is_parsable = FALSE; /**** convert Gopher directory to HTML ****/ if(docu->doc_url->p.gopher.selector[0] == '1') { if(!(docu->doc_url->status & URL_REDIRECT)) gopher_dir_to_html(docu); docu->is_parsable = TRUE; } else if(docu->doc_url->p.gopher.selector[0] == 'h') { docu->is_parsable = TRUE; } } else if(!retcode && (docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && !(priv_cfg.ftp_proxy && cfg.ftp_via_http && !cfg.ftp_dirtyp) && !(docu->doc_url->status & URL_REDIRECT)) { docu->is_parsable = ext_is_html(docu->doc_url->p.ftp.path) != 0; /*** convert FTP directory listing to HTML ***/ if(docu->doc_url->p.ftp.dir) { if(!(docu->doc_url->status & URL_REDIRECT)) { ftp_dir_to_html(docu); } docu->is_parsable = TRUE; } } else if(docu->is_http_transfer && !retcode && !(docu->doc_url->status & URL_REDIRECT)) { http_response *resp; /*** get HTTP response status info ***/ resp = http_get_response_info(docu->mime); if(resp) { /*** set proper HTTP error code ***/ if(resp->ret_code >= 400) { docu->errcode = 2000 + resp->ret_code; http_response_free(resp); return -1; } /*** redirect to other URL ***/ if(resp->ret_code == 303 || resp->ret_code == 302 || resp->ret_code == 307 || resp->ret_code == 301) { http_handle_redirect(docu, resp->ret_code); http_response_free(resp); if(docu->is_persistent) { if(docu->doc_url->moved_to && ((url_get_port(docu->doc_url) != url_get_port(docu->doc_url->moved_to)) || strcmp(url_get_site(docu->doc_url), url_get_site(docu->doc_url->moved_to)))) { abs_close_socket(docu, TRUE); } docu->is_persistent = FALSE; } return -1; } http_response_free(resp); } /*** check if document was downloaded whole ***/ /*** when we know real document size and no ***/ /*** other error was detected before ***/ if(cfg.check_size && docu->totsz > 0 && docu->errcode == ERR_NOERROR) { /*** if docu->contents && docu->rest_pos ***/ /*** document was reareaded from file and ***/ /*** docu->size is total len ***/ if(docu->totsz != docu->size + (docu->contents ? 0 : docu->rest_pos)) { docu->errcode = ERR_HTTP_TRUNC; docu->remove_lock = FALSE; retcode = -1; xprintf(1, gettext("File may be truncated\n")); } } /*** handle encoded document and decode ***/ /*** it if possible and user requested it ***/ p = get_mime_param_val_str("Content-Encoding:", docu->mime); if(cfg.use_enc && !retcode && p && (!strncasecmp(docu->type_str, "text/plain", 10) || !strncasecmp(docu->type_str, "text/css", 8) || !strncasecmp(docu->type_str, "text/html", 9))) { if((!strcasecmp(p, "x-gzip")) || (!strcasecmp(p, "gzip")) || (!strcasecmp(p, "x-compress")) || (!strcasecmp(p, "compress"))) { if(!gzip_decode(docu->contents, docu->size, &p1, &len, (docu->contents ? NULL : docu->lock_fn))) { docu->size = len; _free(docu->contents); docu->contents = p1; xprintf(1, gettext("Decoding document - OK\n")); } else xperror(gettext("Decoding document - failed\n")); } else if(!strcasecmp(p, "deflate")) { if(!inflate_decode(docu->contents, docu->size, &p1, &len, (docu->contents ? NULL : docu->lock_fn))) { docu->size = len; _free(docu->contents); docu->contents = p1; xprintf(1, gettext("Decoding document - OK\n")); } else { xperror(gettext("Deflating document - failed\n")); } } else xprintf(1, gettext("Unsupported document encoding\n")); } else if(p && !retcode) { xprintf(1, gettext ("Received Encoded file but decoding not allowed (untouched)\n")); } _free(p); } else { if(docu->doc_url->type == URLT_FILE || (docu->doc_url->status & URL_REDIRECT)) { p1 = url_to_filename(docu->doc_url, TRUE); if(file_is_html(p1)) { docu->is_parsable = TRUE; } } else { docu->is_parsable = FALSE; } } if(docu->totsz > 0 && docu->size == 0 && (docu->doc_url->type == URLT_HTTP || docu->doc_url->type == URLT_HTTPS)) { if(!docu->errcode) docu->errcode = ERR_ZERO_SIZE; docu->remove_lock = FALSE; retcode = -1; } #ifdef I_FACE if(cfg.xi_face) doc_set_info(docu); #endif if(!retcode && docu->lock_fn && docu->save_online && (cfg.dumpfd < 0) && !docu->contents && (cfg.mode != MODE_NOSTORE) && (cfg.mode != MODE_FTPDIR) && !(docu->doc_url->status & URL_REDIRECT) && (docu->doc_url->type != URLT_FILE)) { p1 = url_to_filename(docu->doc_url, TRUE); if(!access(p1, F_OK)) { if(unlink(p1)) xperror(p1); } if(link(docu->lock_fn, p1)) { #ifdef __CYGWIN__ if(errno != EPERM && errno != EACCES) #elif __BEOS__ /* ?? no working link() on BeOS ?? */ if(FALSE) #else if(errno != EPERM) #endif xperror(p1); else { if(copy_fd_to_file(bufio_getfd(docu->s_sock), p1)) xperror(p1); } } if(cfg.preserve_time && docu->dtime) { struct utimbuf utmbf; stat(p1, &estat); utmbf.actime = estat.st_atime; utmbf.modtime = docu->dtime; utime(p1, &utmbf); } if(cfg.preserve_perm && (docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && docu->doc_url->extension && (((ftp_url_extension *) docu->doc_url->extension)->perm > 0)) { chmod(p1, ((ftp_url_extension *) docu->doc_url->extension)->perm); } } return retcode; } int doc_download(doc * docu, int load, int b_lock) { const int rc = doc_download_helper(docu, load, b_lock); gettimeofday(&docu->end_time, NULL); time_log(docu); return rc; } /********************************************************/ /* ulozi dokument ak je to potrebne vytvori adresare */ /* FIXME: Translate me! */ /********************************************************/ int doc_store(doc * docu, int overwrite) { char *pom; int f; struct utimbuf utmbf; struct stat estat; if(cfg.mode == MODE_NOSTORE || cfg.mode == MODE_FTPDIR) return 0; /*** don't store directory indexes ***/ if(!cfg.store_index && url_is_dir_index(docu->doc_url)) return 0; pom = url_to_filename(docu->doc_url, TRUE); if(makealldirs(pom)) xperror(pom); if(!access(pom, R_OK) && !overwrite) { return 0; } /* pro: before we open the file we unlink it. This way we assure that other directory that have a hard link to our (old) file will still have a hard link to the old file. */ if(cfg.remove_before_store) { unlink(pom); } if((f = open(pom, O_BINARY | O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR)) == -1) { if(!access(pom, R_OK)) unlink(pom); xperror(pom); return -1; } if(write(f, docu->contents, docu->size) != docu->size) { if(!access(pom, R_OK)) unlink(pom); xperror(pom); close(f); return -1; } close(f); if(docu->dtime && cfg.preserve_time) { utmbf.modtime = docu->dtime; } else { utmbf.modtime = docu->stime; } stat(pom, &estat); utmbf.actime = estat.st_atime; utime(pom, &utmbf); if((docu->doc_url->type == URLT_FTP || docu->doc_url->type == URLT_FTPS) && docu->doc_url->extension && cfg.preserve_perm && (((ftp_url_extension *) docu->doc_url->extension)->perm > 0)) { chmod(pom, ((ftp_url_extension *) docu->doc_url->extension)->perm); } return 0; } /*** remove improper documents if required ***/ int doc_remove(url * urlr) { char *fn; #ifdef DEBUG if(cfg.debug) { fn = url_to_urlstr(urlr, FALSE); xprintf(1, gettext("Removing improper document : %s\n"), fn); _free(fn); } #endif fn = url_to_filename(urlr, TRUE); if(urlr->type == URLT_FTP || urlr->type == URLT_FTPS) { char *p; p = strrchr(fn, '/'); if(p) p++; else p = fn; /*** if URL FTPdir index ***/ if(!strcmp(p, priv_cfg.index_name)) *p = '\0'; if(cfg.enable_info) dinfo_remove(fn); return unlink_recursive(fn); } else { if(cfg.enable_info) dinfo_remove(fn); if(!access(fn, F_OK) && unlink(fn)) { xperror(fn); return -1; } } return 0; } #ifdef I_FACE /********************************************************/ /* nastavenie info dokumentu pre informaciu pouzivatela */ /* FIXME: Translate me! */ /********************************************************/ static void doc_set_info(doc * docp) { #ifdef WITH_TREE url_prop *prp = _malloc(sizeof(url_prop)); prp->size = docp->size; prp->mdtm = docp->dtime; prp->type = NULL; switch (docp->doc_url->type) { case URLT_HTTP: #ifdef USE_SSL case URLT_HTTPS: #endif if(docp->type_str) prp->type = tl_strdup(docp->type_str); break; case URLT_FILE: prp->type = tl_strdup(gettext_nop("Local file")); break; case URLT_GOPHER: switch (docp->doc_url->p.gopher.selector[0]) { case '0': prp->type = tl_strdup(gettext_nop("Gopher/Text File")); break; case '1': prp->type = tl_strdup(gettext_nop("Gopher/Directory")); break; case '2': prp->type = tl_strdup(gettext_nop("Gopher/CSO phone book")); break; case '3': prp->type = tl_strdup(gettext_nop("Gopher/Error")); break; case '4': prp->type = tl_strdup(gettext_nop("Gopher/BINHEX")); break; case '5': prp->type = tl_strdup(gettext_nop("Gopher/DOS bin")); break; case '6': prp->type = tl_strdup(gettext_nop("Gopher/UUencoded")); break; case '7': prp->type = tl_strdup(gettext_nop("Gopher/Search index")); break; case '8': prp->type = tl_strdup(gettext_nop("Gopher/Telnet session")); break; case '9': prp->type = tl_strdup(gettext_nop("Gopher/bin")); break; case '+': prp->type = tl_strdup(gettext_nop("Gopher/Duplicated server")); break; case 'T': prp->type = tl_strdup(gettext_nop("Gopher/TN3270")); break; case 'g': prp->type = tl_strdup(gettext_nop("Gopher/GIF")); break; case 'I': prp->type = tl_strdup(gettext_nop("Gopher/Image")); break; } break; case URLT_FTP: if(docp->doc_url->p.ftp.dir) prp->type = tl_strdup(gettext_nop("FTP/Directory")); else prp->type = tl_strdup(gettext_nop("FTP/File")); break; case URLT_FTPS: if(docp->doc_url->p.ftp.dir) prp->type = tl_strdup(gettext_nop("FTPS/Directory")); else prp->type = tl_strdup(gettext_nop("FTPS/File")); break; default: prp->type = tl_strdup(gettext_nop("Unsupported type")); break; } if(!prp->type) prp->type = tl_strdup(gettext_nop("Local file")); docp->doc_url->prop = prp; #endif } #endif void doc_init(doc * docp, url * urlp) { docp->doc_nr = 0; docp->doc_url = urlp; docp->mime = NULL; docp->type_str = NULL; docp->is_parsable = cfg.enable_js && (docp->doc_url->status & URL_ISSCRIPT); docp->size = 0; docp->totsz = -1; docp->contents = NULL; docp->save_online = FALSE; docp->dtime = 0L; docp->stime = 0L; docp->rest_pos = 0; docp->rest_end_pos = -1; docp->etag = NULL; docp->errcode = ERR_NOERROR; docp->origsize = 0; docp->ftp_fatal_err = FALSE; docp->ftp_respc = 0; docp->ftp_pasv_host = NULL; docp->ftp_pasv_port = 0; docp->ftp_data_con_finished = FALSE; docp->datasock = NULL; docp->ftp_control = NULL; docp->s_sock = NULL; #ifdef USE_SSL memset(&docp->ssl_data_con, '\0', sizeof(ssl_connection)); #endif docp->num_auth = 0; docp->num_proxy_auth = 0; docp->auth_digest = NULL; docp->auth_proxy_digest = NULL; docp->lock_fn = NULL; docp->report_size = TRUE; docp->check_limits = TRUE; docp->remove_lock = FALSE; docp->is_http11 = FALSE; docp->chunk_size = 0; docp->is_chunked = FALSE; docp->read_chunksize = FALSE; docp->read_trailer = FALSE; docp->is_persistent = FALSE; #ifdef HAVE_MT docp->__herrno = 0; docp->msgbuf = NULL; docp->threadnr = 0; #endif docp->is_robot = FALSE; docp->additional_headers = NULL; docp->is_http_transfer = FALSE; docp->http_proxy = NULL; docp->http_proxy_port = DEFAULT_HTTP_PROXY_PORT; docp->http_proxy_10 = FALSE; docp->request_type = HTTP_REQ_UNKNOWN; docp->connect_host = NULL; docp->connect_port = 0; timerclear(&docp->hr_start_time); timerclear(&docp->redirect_time); timerclear(&docp->dns_time); timerclear(&docp->connect_time); timerclear(&docp->first_byte_time); timerclear(&docp->end_time); } static char *get_rate_str(char *str, double rate) { if(rate <= 1024.0) sprintf(str, "%5.0f B/s", rate); else if(rate <= 1048576.0) sprintf(str, "%5.1f kB/s", rate / 1024.0); else if(rate <= 1073741824.0) sprintf(str, "%5.1f MB/s", rate / 1048576.0); else sprintf(str, "%5.1f GB/s", rate / 1073741824.0); return str; } static char *get_time_str(char *str, time_t tm) { sprintf(str, "%ld:%02ld:%02ld", tm / 3600000, (tm % 3600000) / 60000, (tm % 60000) / 1000); return str; } static char *get_size_str(char *str, int total, int actual) { if(total) { if(total < 1000000) sprintf(str, "%6d / %d B [%5.1f%%]", actual, total, (100.0 * (double) actual / (double) total)); else sprintf(str, "%7d / %d kB [%5.1f%%]", actual / 1024, total / 1024, (100.0 * (double) actual / (double) total)); } else { if(actual < 1000000) sprintf(str, "%6d B", actual); else sprintf(str, "%6d kB", actual / 1024); } return str; } time_t doc_etime(doc * docp, int init) { #ifdef HAVE_GETTIMEOFDAY if(init) { gettimeofday(&docp->start_time, NULL); return 0; } else { struct timeval t; gettimeofday(&t, NULL); return (1000 * (t.tv_sec - docp->start_time.tv_sec) + (t.tv_usec - docp->start_time.tv_usec) / 1000); } #else if(init) { docp->start_time = time(NULL); return 0; } else { return 1000 * (time(NULL) - docp->start_time); } #endif } static double compute_speed_rate(time_t etime, ssize_t size) { return (double) size *1000.0 / (etime == 0.0 ? 1.0 : etime); } static void show_progress(doc * docp, ssize_t adjsz, int dolog) { time_t etime = doc_etime(docp, FALSE); double rate = compute_speed_rate(etime, docp->size + adjsz); char s_rate[30] = "", s_etime[30] = "", s_rtime[30] = "", s_size[30] = ""; ftp_url_extension *fe; if(docp->doc_url->type == URLT_FTP || docp->doc_url->type == URLT_FTPS) fe = (ftp_url_extension *) docp->doc_url->extension; else fe = NULL; if(docp->totsz >= 0 || (fe && fe->size > 0)) { int size = docp->totsz >= 0 ? docp->totsz : fe->size; time_t rtime = (time_t) ((double) (size - docp->rest_pos) / (double) (docp->size ? docp->size : 10) * (double) ((etime != 0.0) ? etime : 1.0)) - etime; get_time_str(s_rtime, rtime); get_size_str(s_size, size, docp->size + docp->rest_pos); } else get_size_str(s_size, 0, docp->size + docp->rest_pos); get_rate_str(s_rate, rate); get_time_str(s_etime, etime); if(cfg.progres && docp->report_size && !cfg.quiet && !cfg.bgmode #ifdef I_FACE && !cfg.xi_face #endif ) { if(*s_rtime) xprintf(0, gettext("S: %s [R: %s] [ET: %s] [RT: %s]"), s_size, s_rate, s_etime, s_rtime); else xprintf(0, gettext("S: %s [R: %s] [ET: %s]"), s_size, s_rate, s_etime); xprintf(0, " \r"); } #ifdef I_FACE if(docp->report_size && cfg.xi_face) { gui_set_progress(s_size, s_rate, s_etime, s_rtime); } #endif } int doc_lock(doc * docp, int b_lock) { char *lock_name; int cyclenr = 0; bufio *s_sock = NULL; if(!(lock_name = url_to_in_filename(docp->doc_url))) return -1; do { if(makealldirs(lock_name)) { if(errno != ENOENT) { xperror(lock_name); docp->errcode = ERR_STORE_DOC; break; } else continue; } else { if(cyclenr == 1) { xprintf(0, gettext("Waiting to releases document lock on: %s\n"), lock_name); } if(!(s_sock = bufio_copen(lock_name, O_BINARY | O_RDWR | O_CREAT, 0644))) { if(errno != ENOENT) { xperror(lock_name); docp->errcode = ERR_STORE_DOC; break; } } if(s_sock) { if(_flock(bufio_getfd(s_sock), lock_name, O_BINARY | O_RDWR | O_CREAT, FALSE)) { if(!b_lock) docp->errcode = ERR_LOCKED; bufio_close(s_sock); s_sock = NULL; } else { tl_msleep(50); if(access(lock_name, F_OK)) { if(!b_lock) docp->errcode = ERR_LOCKED; else { bufio_close(s_sock); s_sock = NULL; } } } } if(b_lock && !s_sock) { tl_sleep(1); cyclenr++; } } } while(b_lock && !s_sock); if(!s_sock) { _free(lock_name); docp->s_sock = NULL; } else { docp->s_sock = s_sock; docp->lock_fn = lock_name; } return (s_sock == NULL); } /****************************************************/ /* Unlock document and remove lock file if required */ /****************************************************/ void doc_remove_lock(doc * docp) { struct utimbuf utmbf; if(docp->s_sock) { DEBUG_LOCKS("Unlocking document %s\n", docp->lock_fn); /*_funlock(bufio_getfd(docp->s_sock));*/ bufio_close(docp->s_sock); docp->s_sock = NULL; /* required because close() causes modification time */ /* change on hard linked file on w2k (maybe generaly */ /* on winnt or just on ntfs ??? */ if(cfg.preserve_time && docp->dtime) { struct utimbuf utmbf; struct stat estat; stat(docp->lock_fn, &estat); utmbf.actime = estat.st_atime; utmbf.modtime = docp->dtime; utime(docp->lock_fn, &utmbf); } if(docp->remove_lock) { unlink(docp->lock_fn); } else { utmbf.actime = time(NULL); if(docp->dtime && cfg.preserve_time) utmbf.modtime = docp->dtime; else utmbf.modtime = docp->stime; utime(docp->lock_fn, &utmbf); } _free(docp->lock_fn); } } static void doc_make_clean_dir(doc * docp) { char *p, *ustr; ustr = tl_strdup(url_to_filename(docp->doc_url, FALSE)); if(!docp->mime && cfg.enable_info) dinfo_remove(ustr); p = strrchr(ustr, '/'); if(p) *p = '\0'; while(strlen(ustr) > strlen(priv_cfg.cache_dir)) { if(rmdir(ustr)) { if(errno != ENOTEMPTY && errno != ENOENT && errno != EEXIST) xperror(ustr); break; } p = strrchr(ustr, '/'); if(p) *p = '\0'; } _free(ustr); } void doc_cleanup(doc * docu) { gui_finish_document(docu); short_log(docu, docu->doc_url); LOCK_FAILCNT; if(!((docu->doc_url->status & URL_DOWNLOADED) || (docu->doc_url->status & URL_REDIRECT))) cfg.fail_cnt++; cfg.process_cnt++; UNLOCK_FAILCNT; if(cfg.xi_face) gui_tree_set_icon_for_doc(docu); if(docu->errcode) { char *infn, *fn; fn = url_to_filename(docu->doc_url, FALSE); infn = url_to_in_filename(docu->doc_url); if(access(fn, F_OK) && access(infn, F_OK)) { doc_make_clean_dir(docu); url_forget_filename(docu->doc_url); } _free(infn); } _free(docu->mime); _free(docu->type_str); _free(docu->contents); _free(docu->etag); _free(docu->ftp_pasv_host); _free(docu->additional_headers); _free(docu->http_proxy); if(!cfg.auth_reuse_nonce) { if(docu->auth_digest) http_digest_deep_free(docu->auth_digest); docu->auth_digest = NULL; } if(!cfg.auth_reuse_proxy_nonce) { if(docu->auth_proxy_digest) http_digest_deep_free(docu->auth_proxy_digest); docu->auth_proxy_digest = NULL; } gui_clear_status(); } void doc_destroy(doc * docu) { short_log(docu, docu->doc_url); if(docu->s_sock) bufio_close(docu->s_sock); if(docu->datasock) bufio_close(docu->datasock); _free(docu->mime); _free(docu->type_str); _free(docu->contents); _free(docu->etag); _free(docu->ftp_pasv_host); _free(docu->additional_headers); _free(docu->http_proxy); if(!cfg.auth_reuse_nonce) { if(docu->auth_digest) http_digest_deep_free(docu->auth_digest); docu->auth_digest = NULL; } if(!cfg.auth_reuse_proxy_nonce) { if(docu->auth_proxy_digest) http_digest_deep_free(docu->auth_proxy_digest); docu->auth_proxy_digest = NULL; } } #ifdef HAVE_MT void doc_finish_processing(doc * docp) { dllist *ptr = docp->msgbuf; char *logstr = NULL; pthread_setspecific(cfg.currdoc_key, (void *) NULL); LOCK_OUTPUT; while(ptr) { doc_msg *dm = (doc_msg *) ptr->data; if(dm->log && cfg.logfile) { logstr = tl_str_concat(logstr, dm->msg, NULL); } xprintf(0, "%s", dm->msg); _free(dm->msg); _free(dm); ptr = dllist_remove_entry(ptr, ptr); } UNLOCK_OUTPUT; if(logstr) log_str(logstr); } #endif /* HAVE_MT */ void doc_update_parent_links(doc * docu) { if((cfg.mode != MODE_NOSTORE) && (cfg.dumpfd < 0) && (docu->doc_url->type != URLT_FILE) && !(docu->doc_url->status & URL_REDIRECT) && !(docu->doc_url->status & URL_ISLOCAL) && docu->doc_url->parent_url) { if(cfg.rewrite_links && !cfg.all_to_local && !cfg.sel_to_local && !cfg.all_to_remote) { gui_set_status(gettext("Rewriting links inside parent documents")); rewrite_parents_links(docu->doc_url, NULL); } } } pavuk-0.9.35/src/doc.h0000644000175000001440000001605010142077737011372 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _doc_h_ #define _doc_h_ #include #include #include #include "url.h" #include "tools.h" #include "bufio.h" #include "myssl_openssl.h" #include "myssl_nss.h" typedef struct { bool_t log; char *msg; } doc_msg; typedef struct { /*******************************/ /* Basic document infos */ /*******************************/ int doc_nr; /*** number of document in queue ***/ url *doc_url; /*** URL of document ***/ char *mime; /*** MIME header of document ***/ char *type_str; /*** MIME type of document ***/ bool_t is_parsable; /*** documemt dedicated for parsing ? (html,css,scripts) ***/ ssize_t size; /*** document size readed ***/ ssize_t totsz; /*** total size of document if known ***/ ssize_t origsize; /*** original size of document ***/ char *contents; /*** document content ***/ ssize_t rest_pos; /*** restart position ***/ ssize_t rest_end_pos; /*** restart end position ***/ time_t dtime; /*** creation time of document ***/ time_t stime; /*** time of document request ***/ time_t origtime; /*** modification time of local copy of document */ int errcode; /*** error code for current doc ***/ /*******************************/ /* temporary document infos */ /*******************************/ char *lock_fn; /*** lock file name for document ***/ bufio *datasock; /*** socket for data connection ***/ bufio *s_sock; /*** file where is going online saved data ***/ /*******************************/ /* downloading control flags */ /*******************************/ bool_t load; /*** load document into ->contents ***/ bool_t doreget; /*** continue broken transfer ***/ bool_t report_size; /*** show progressmeter while loading of document ***/ bool_t check_limits; /*** check limits for adding URLs from this document ***/ bool_t remove_lock; /*** remove lock file ***/ bool_t save_online; /*** document should be saved online to file ***/ bool_t is_robot; /*** redirection of robots.txt documents is handled differently ! ***/ bool_t is_http_transfer; /*** is going current transfer over HTTP protocol ? ***/ /*******************************/ /* HTTP connection info */ /*******************************/ int request_type; /*** HTTP request method used for this document ***/ unsigned short http_proxy_port;/*** used HTTP proxy port ***/ char *http_proxy; /*** used HTTP proxy ***/ bool_t http_proxy_10; /*** is this HTTP/1.0 proxy ***/ char *etag; /*** ETag or Last-Modified for conditional partial HTTP GET method ***/ char *connect_host; /*** hostname for CONNECT request ***/ unsigned short connect_port; /*** portnumber for CONNECT request ***/ /*******************************/ /* informations for HTTP/1.1 */ /* (chunked encoding) */ /*******************************/ bool_t is_http11; /*** we are talking with HTTP/1.1 server ***/ ssize_t chunk_size; /*** for HTTP/1.1 chunked transfer encoding ***/ bool_t is_chunked; /*** current document is encoded with chunked encoding ***/ bool_t read_chunksize; /*** in next read we expect chunksize header ***/ bool_t read_trailer; /*** in next read we expect trailer header ***/ bool_t is_persistent; /*** is current HTTP connection persistent (and should leave or not) ***/ /*******************************/ /* HTTPS SSL connection info */ /* (used also by FTPS datacon) */ /* need for persistent SSLID */ /*******************************/ #ifdef USE_SSL ssl_connection ssl_data_con; #endif /*******************************/ /* HTTP auth informations */ /*******************************/ short num_auth; /*** number of attempts to authenticate ***/ short num_proxy_auth; /*** number of attempts to authenticate with proxy ***/ void *auth_digest; /*** HTTP digest access authentification info ***/ void *auth_proxy_digest; /*** HTTP digest access proxy authentification info ***/ char *additional_headers; /*** additional headers (currently required by NTLM) ***/ /*******************************/ /* FTP connection info */ /*******************************/ bool_t ftp_fatal_err; /*** was FTP error fatal ? ***/ short ftp_respc; /*** last FTP response code ***/ bufio *ftp_control; /*** socket for FTP control connection ***/ char *ftp_pasv_host; /*** info for passive data connection ***/ unsigned short ftp_pasv_port; bool_t ftp_data_con_finished; /*** FTP data connection was just fully established ***/ /*******************************/ /* progress meter informations */ /*******************************/ #ifdef HAVE_GETTIMEOFDAY struct timeval start_time; /*** for progress metter ***/ struct timeval hr_start_time; /*** when documant processing started ***/ struct timeval redirect_time; /*** when all redirects finished ***/ struct timeval dns_time; /*** when dns lookup finished ***/ struct timeval connect_time; /*** when connect(2) finished ***/ struct timeval first_byte_time;/*** when first byte was received ***/ struct timeval end_time; /*** when download finished ***/ #else time_t start_time; /*** for progress metter ***/ #endif ssize_t current_size; /*** size for current speed ***/ ssize_t adj_sz; /*** adjustment of doc size (HTTP header size ) ***/ /*******************************/ /* per thread informations */ /*******************************/ #ifdef HAVE_MT dllist *msgbuf; /*** list of buffered messages ***/ int __herrno; /*** per document h_errno value ***/ int threadnr; /*** number of current thread ***/ #endif } doc; extern int doc_download_init(doc *, int); extern int doc_download(doc *, int, int); extern int doc_store(doc *, int); extern int doc_remove(url *); extern int doc_lock(doc *, int); extern time_t doc_etime(doc *, int); extern void doc_init(doc *, url *); extern void doc_cleanup(doc *); extern void doc_destroy(doc *); extern void doc_remove_lock(doc *); extern void doc_update_parent_links(doc *); #ifdef HAVE_MT extern void doc_finish_processing(doc *); #endif #endif pavuk-0.9.35/src/dns.c0000644000175000001440000003550310330157355011402 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #ifdef HAVE_ARPA_INET_H #include #endif #include #include #include #include #include #include #include #include "tools.h" #include "bufio.h" #include "dns.h" /* We use list instead of array to avoid race conditions while reallocating and * to avoid relocating condition variables. */ typedef struct dns_entry { struct dns_entry *next; char *h_name; int h_family; volatile int h_length; char *h_addres; #ifdef HAVE_MT pthread_cond_t h_cond; #endif } dns_entry; typedef struct { dns_entry *e; } htab_entry; #define DNS_HASH_NUM 50 static htab_entry dns_htab[DNS_HASH_NUM]; #if defined(I_FACE) && !defined(HAVE_MT) typedef struct { int serial; int status; int syserr; int herr; int family; int length; char addr[64]; } dns_response_rec_t; typedef struct { int serial; char hostname[256]; } dns_request_rec_t; static pid_t dns_pid = 0; static bufio *dns_w = NULL; static bufio *dns_r = NULL; static void dns_serv_loop(bufio * in, bufio * out) { int len; cfg.xi_face = FALSE; cfg.ctimeout = .0; for(;;) { int ok = FALSE; dns_request_rec_t req; dns_response_rec_t resp; if((len = bufio_read(in, (char *) &req, sizeof(req))) != sizeof(req)) { if(len) perror("dns server - protocol error"); else printf("dns server - client exited\n"); exit(1); } resp.serial = req.serial; #ifdef HAVE_INET6 { struct addrinfo hints; struct addrinfo *addrs; memset(&hints, '\0', sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; /* AF_INET or AF_INET6 */ hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; if(!getaddrinfo(req.hostname, NULL, &hints, &addrs)) { switch (addrs->ai_family) { case AF_INET: { struct sockaddr_in *sa4; sa4 = (struct sockaddr_in *) addrs->ai_addr; resp.length = sizeof(sa4->sin_addr); memcpy(resp.addr, &sa4->sin_addr, resp.length); } break; case AF_INET6: { struct sockaddr_in6 *sa6; sa6 = (struct sockaddr_in6 *) addrs->ai_addr; resp.length = sizeof(sa6->sin6_addr); memcpy(resp.addr, &sa6->sin6_addr, resp.length); } break; } resp.status = 0; resp.syserr = 0; resp.herr = 0; resp.family = addrs->ai_family; freeaddrinfo(addrs); ok = TRUE; } } #else { struct hostent *host; if((host = gethostbyname(req.hostname))) { resp.status = 0; resp.syserr = 0; resp.herr = 0; resp.family = AF_INET; resp.length = host->h_length; memcpy(resp.addr, host->h_addr, host->h_length); ok = TRUE; } } #endif if(!ok) { resp.status = -1; resp.syserr = errno; resp.herr = h_errno; } if(bufio_write(out, (char *) &resp, sizeof(resp)) != sizeof(resp)) { perror("dns server - protocol error"); exit(1); } } } int dns_serv_start(void) { int cfd[2]; int sfd[2]; int i; for(i = 0; i < DNS_HASH_NUM; i++) { dns_htab[i].e = NULL; } if(pipe(cfd)) { xperror("pipe"); return -1; } if(pipe(sfd)) { xperror("pipe"); close(cfd[0]); close(cfd[1]); return -1; } if(!(dns_pid = fork())) { /* child */ close(sfd[0]); close(cfd[1]); dns_serv_loop(bufio_fdopen(cfd[0]), bufio_fdopen(sfd[1])); exit(0); } if(dns_pid < 0) { xperror("fork"); close(cfd[0]); close(cfd[1]); close(sfd[0]); close(sfd[1]); return -1; } setpgid(0, dns_pid); close(sfd[1]); close(cfd[0]); dns_w = bufio_fdopen(cfd[1]); dns_r = bufio_fdopen(sfd[0]); dns_pid = dns_pid; return 0; } void dns_server_kill(void) { if(dns_pid) { kill(dns_pid, 15); waitpid(dns_pid, NULL, 0); bufio_close(dns_w); bufio_close(dns_r); dns_pid = 0; dns_w = NULL; dns_r = NULL; } } static int dns_cli_gethostbyname(char *host, int *len, char *addr, int *family) { static int serno = 0; dns_request_rec_t req; dns_response_rec_t resp; serno++; req.serial = serno; memcpy(req.hostname, host, TL_MIN(strlen(host) + 1, sizeof(req.hostname) - 1)); req.hostname[sizeof(req.hostname) - 1] = '\0'; if(bufio_write(dns_w, (char *) &req, sizeof(req)) != sizeof(req)) { xperror("dns client protocol error"); return -1; } do { if(cfg.rbreak) { errno = EINTR; return -1; } if(bufio_read(dns_r, (char *) &resp, sizeof(resp)) != sizeof(resp)) { xperror("dns client protocol error"); return -1; } } while(serno > resp.serial); if(resp.status) { h_errno = resp.herr; errno = resp.syserr; return -1; } else { h_errno = 0; memcpy(addr, resp.addr, resp.length); *len = resp.length; *family = resp.family; return 0; } } #endif /* I_FACE && !HAVE_MT */ int dns_gethostbyname(char *name, int *alen, char *addr, int *family) { #ifndef HAVE_INET6 struct hostent *host; #ifdef HAVE_GETHOSTBYNAME_R struct hostent shost; #endif #endif int ret; dns_entry *eptr; int i; unsigned int hpos; #ifdef HAVE_INET6 { struct in_addr ia4; struct in6_addr ia6; i = inet_pton(AF_INET, name, &ia4); if(i > 0) { *family = AF_INET; *alen = sizeof(ia4); memcpy(addr, &ia4, sizeof(ia4)); return 0; } else if(i < 0 && errno == EAFNOSUPPORT) { if(inet_pton(AF_INET6, name, &ia6) > 0) { *family = AF_INET; *alen = sizeof(ia6); memcpy(addr, &ia6, sizeof(ia6)); return 0; } } } #else { struct in_addr ia4; if((ia4.s_addr = inet_addr(name)) != -1) { *family = AF_INET; *alen = sizeof(ia4); memcpy(addr, &ia4, sizeof(ia4)); return 0; } } #endif LOCK_DNS; hpos = hash_func(name, DNS_HASH_NUM); for(eptr = dns_htab[hpos].e; eptr != NULL; eptr = eptr->next) { /* Let's see if name is in the hash table */ if(!strcasecmp(eptr->h_name, name)) { /* name is in the table. Let's see what's up with it */ if(eptr->h_length == 0) { /* if h_length is zero, it means that dns * resolution is in progress in a differrent * thread. Unlock and wait until done. */ #ifdef HAVE_MT if(pthread_cond_wait(&eptr->h_cond, &_mt_dns_lock)) { xperror("pthread_cond_wait"); UNLOCK_DNS; return -1; } /* _mt_dns_lock is locked again here */ #endif } /* Somebody else already did the lookup for us. * Check the results. * * The following check is the reason why h_length is * volatile. It was changed by a differrent thread * in a way invisible to complier while we were * waiting on the condition variable. */ if(eptr->h_length == -1) { /* if h_length is -1, it means that the * previous attemt to resolve this name has * falied. We don't bother again. */ UNLOCK_DNS; return -1; } else { /* If h_length is positive, it means that the * hash table entry is valid and was * successfully resolved. */ *alen = eptr->h_length; *family = eptr->h_family; memcpy(addr, eptr->h_addres, eptr->h_length); UNLOCK_DNS; return 0; } } } if(eptr == NULL) { /* name was not in the hash table. It's up to us to do the * lookup. First we create the new entry for it, to signal * to other threads that we are already resolving name. */ eptr = _malloc(sizeof(dns_entry)); #ifdef HAVE_MT if(pthread_cond_init(&eptr->h_cond, NULL)) { free(eptr); xperror("pthread_cond_init"); UNLOCK_DNS; return -1; } #endif eptr->next = dns_htab[hpos].e; eptr->h_name = new_string(name); eptr->h_length = 0; eptr->h_family = AF_UNSPEC; eptr->h_addres = NULL; dns_htab[hpos].e = eptr; } UNLOCK_DNS; *family = AF_INET; #if defined(I_FACE) && !defined(HAVE_MT) if(dns_pid) { ret = dns_cli_gethostbyname(name, alen, addr, family); } else #endif { #if defined(HAVE_INET6) { struct addrinfo hints; struct addrinfo *addrs; int err; memset(&hints, '\0', sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; /* AF_INET or AF_INET6 */ hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; if((err = getaddrinfo(name, NULL, &hints, &addrs))) { _h_errno_ = err; ret = -1; } else { *family = addrs->ai_family; switch (addrs->ai_family) { case AF_INET: { struct sockaddr_in *sa4; sa4 = (struct sockaddr_in *) addrs->ai_addr; *alen = sizeof(sa4->sin_addr); memcpy(addr, &sa4->sin_addr, sizeof(sa4->sin_addr)); } break; case AF_INET6: { struct sockaddr_in6 *sa6; sa6 = (struct sockaddr_in6 *) addrs->ai_addr; *alen = sizeof(sa6->sin6_addr); memcpy(addr, &sa6->sin6_addr, sizeof(sa6->sin6_addr)); } break; } _h_errno_ = 0; ret = 0; freeaddrinfo(addrs); } } #elif defined(HAVE_GETHOSTBYNAME_R) && !(defined(__OSF__) || defined (__osf__)) { char sbuf[2048]; int sherrno; #if defined(__GLIBC__) && __GLIBC__ >= 2 if(!gethostbyname_r(name, &shost, sbuf, sizeof(sbuf), &host, &sherrno) && host) #elif defined (__OSF__) || defined (__osf__) struct hostent_data hdt; host = &shost; if(!gethostbyname_r(name, &shost, &hdt)) #else if((host = gethostbyname_r(name, &shost, sbuf, sizeof(sbuf), &sherrno))) #endif { _h_errno_ = 0; *alen = host->h_length; memcpy(addr, host->h_addr, host->h_length); ret = 0; } else { _h_errno_ = sherrno; ret = -1; } } #else LOCK_GHBN; if((host = gethostbyname(name))) { _h_errno_ = 0; *alen = host->h_length; memcpy(addr, host->h_addr, host->h_length); ret = 0; } else { _h_errno_ = h_errno; ret = -1; } UNLOCK_GHBN; #endif } LOCK_DNS; /* although dns_htab[hpos].e might have been changed by a differrent * thread since we accessed it last time, we don't care since * eptr and *eptr weren't. */ if(!ret) { eptr->h_length = *alen; eptr->h_addres = _malloc(*alen); eptr->h_family = *family; memcpy(eptr->h_addres, addr, *alen); } else { eptr->h_length = -1; } #ifdef HAVE_MT pthread_cond_broadcast(&eptr->h_cond); #endif UNLOCK_DNS; return ret; } static void dns_free_bucket(dns_entry * e) { if(e != NULL) { dns_free_bucket(e->next); _free(e->next); _free(e->h_name); _free(e->h_addres); #ifdef HAVE_MT if(pthread_cond_destroy(&e->h_cond)) { xperror("pthread_cond_destroy"); } #endif } } void dns_free_tab(void) { int i; LOCK_DNS; for(i = 0; i < DNS_HASH_NUM; i++) { dns_free_bucket(dns_htab[i].e); } UNLOCK_DNS; } struct sockaddr *dns_setup_sockaddr(abs_addr * addr, int port, struct sockaddr_storage *buf, int *sasize) { struct sockaddr *sa = (struct sockaddr *) buf; switch (addr->family) { case AF_INET: { struct sockaddr_in *sa4 = (struct sockaddr_in *) buf; memset(buf, '\0', sizeof(struct sockaddr_in)); memcpy(&sa4->sin_addr, addr->addr, sizeof(sa4->sin_addr)); sa4->sin_family = AF_INET; sa4->sin_port = htons(port); *sasize = sizeof(struct sockaddr_in); } break; #ifdef HAVE_INET6 case AF_INET6: { struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) buf; memset(buf, '\0', sizeof(struct sockaddr_in6)); memcpy(&sa6->sin6_addr, addr->addr, sizeof(sa6->sin6_addr)); sa6->sin6_family = AF_INET6; sa6->sin6_port = htons(port); *sasize = sizeof(struct sockaddr_in6); } break; #endif } return sa; } char *dns_get_sockaddr_ip(struct sockaddr *sa) { #ifdef HAVE_INET6 void *addr; char pom[128]; switch (sa->sa_family) { case AF_INET: { struct sockaddr_in *sin; sin = (struct sockaddr_in *) sa; addr = &sin->sin_addr; } break; case AF_INET6: { struct sockaddr_in6 *sin; sin = (struct sockaddr_in6 *) sa; addr = &sin->sin6_addr; } break; default: return NULL; } if(inet_ntop(sa->sa_family, addr, pom, sizeof(pom))) return tl_strdup(pom); else return NULL; #else char *p; struct sockaddr_in *sin; sin = (struct sockaddr_in *) sa; LOCK_INETNTOA; p = tl_strdup(inet_ntoa(sin->sin_addr)); UNLOCK_INETNTOA; return p; #endif } int dns_get_sockaddr_port(struct sockaddr *sa) { int ret; switch (sa->sa_family) { case AF_INET: { struct sockaddr_in *sin; sin = (struct sockaddr_in *) sa; ret = ntohs(sin->sin_port); } break; #ifdef HAVE_INET6 case AF_INET6: { struct sockaddr_in6 *sin; sin = (struct sockaddr_in6 *) sa; ret = ntohs(sin->sin6_port); } break; #endif default: ret = 0; } return ret; } char *dns_get_abs_addr_ip(abs_addr * haddr) { #ifdef HAVE_INET6 void *addr; char pom[128]; struct in_addr ia4; struct in6_addr *ia6; switch (haddr->family) { case AF_INET: { memcpy(&ia4, haddr->addr, sizeof(struct in_addr)); addr = &ia4; } break; case AF_INET6: { memcpy(&ia6, haddr->addr, sizeof(struct in6_addr)); addr = &ia6; } break; default: return NULL; } if(inet_ntop(haddr->family, addr, pom, sizeof(pom))) return tl_strdup(pom); else return NULL; #else char *p; struct in_addr ia; memcpy(&ia, haddr->addr, sizeof(struct in_addr)); LOCK_INETNTOA; p = tl_strdup(inet_ntoa(ia)); UNLOCK_INETNTOA; return p; #endif } int dns_getprotoid(char *name) { #if !defined(IPPROTO_TCP) || !defined(IPPROTO_TCP) struct protoent *pe; int rv = 0; LOCK_INETNTOA; pe = getprotobyname(name); if(pe) rv = pe->p_proto; UNLOCK_INETNTOA; return rv; #else if(name[0] == 'u' && name[1] == 'd' && name[2] == 'p' && !name[3]) return IPPROTO_UDP; else return IPPROTO_TCP; #endif } pavuk-0.9.35/src/dns.h0000644000175000001440000000216710142077736011414 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _dns_h_ #define _dns_h_ #define DNS_MAX_ADDR 64 #include #include typedef struct _abs_addr { int family; char addr[DNS_MAX_ADDR]; } abs_addr; #ifndef HAVE_SOCKADDR_STORAGE struct sockaddr_storage { int ss_family; char padding[132]; }; #endif extern int dns_gethostbyname(char *, int *, char *, int *); extern char *dns_get_abs_addr_ip(abs_addr *); extern struct sockaddr *dns_setup_sockaddr(abs_addr *, int, struct sockaddr_storage *, int *); extern char *dns_get_sockaddr_ip(struct sockaddr *); extern int dns_get_sockaddr_port(struct sockaddr *); extern int dns_getprotoid(char *); extern int dns_serv_start(void); extern void dns_server_kill(void); extern void dns_free_tab(void); #endif pavuk-0.9.35/src/ftp.c0000644000175000001440000014317410557333101011407 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_ARPA_INET_H #include #endif #include "absio.h" #include "abstract.h" #include "dns.h" #include "doc.h" #include "errcode.h" #include "ftp.h" #include "http.h" #include "mode.h" #include "myssl.h" #include "net.h" #include "times.h" #include "tools.h" #include "uexit.h" #include "url.h" static ftp_handshake_info *ftp_handshake_info_data_find(char *, int); static int ftp_do_login_handshake_cust(ftp_handshake_info *, doc *, char *, char *); static int ftp_control_write(doc * docp, char *buf, size_t bufsize) { return bufio_write(docp->ftp_control, buf, bufsize); } static int ftp_control_readln(doc * docp, char *buf, int bufsize) { return bufio_readln(docp->ftp_control, buf, bufsize); } /********************************************************/ /* zistenie navratoveho kodu z FTP servera */ /* FIXME: Translate me! */ /********************************************************/ int ftp_get_response(doc * docp, char **mbuf, int setrc) { char buf[1024]; bool_t end = FALSE; int alen, tlen = 0; char *sresp = NULL; while(!end) { if((alen = ftp_control_readln(docp, buf, sizeof(buf))) > 0) { DEBUG_PROTOS("%s", buf); if(mbuf) { tlen += alen; sresp = _realloc(sresp, tlen + 1); memcpy(sresp + tlen - alen, buf, alen + 1); } if(strlen(buf) > 3) { if(tl_ascii_isdigit(*(buf)) && tl_ascii_isdigit(*(buf + 1)) && tl_ascii_isdigit(*(buf + 2)) && tl_ascii_isspace(*(buf + 3))) end = TRUE; } } else { if(alen) xperror("ftp_get_response"); else xprintf(1, gettext ("ftp_get_response: ftp control connection closed before any response\n")); if(setrc) docp->ftp_respc = 600; return 600; } } if(mbuf) *mbuf = sresp; if(setrc) docp->ftp_respc = _atoi(buf); return _atoi(buf); } static bufio *ftp_open_data_finish(doc * docp) { if(docp->ftp_data_con_finished) return docp->datasock; if(!cfg.ftp_activec || (priv_cfg.ftp_proxy && cfg.ftp_dirtyp)) { if(priv_cfg.ftp_proxy && cfg.ftp_dirtyp) { if(!(docp->datasock = bufio_sock_fdopen(net_connect(priv_cfg.ftp_proxy, cfg.ftp_proxy_port, docp)))) { if(_h_errno_ != 0) xherror(priv_cfg.ftp_proxy); else xperror("net_connect"); docp->errcode = ERR_PROXY_CONNECT; return NULL; } if(http_dumy_proxy_connect(docp, docp->ftp_pasv_host, docp->ftp_pasv_port, priv_cfg.ftp_proxy, cfg.ftp_proxy_port)) { docp->errcode = ERR_PROXY_CONNECT; bufio_close(docp->datasock); docp->datasock = NULL; return NULL; } } else { if(!(docp->datasock = bufio_sock_fdopen(net_connect(docp->ftp_pasv_host, docp->ftp_pasv_port, docp)))) { if(_h_errno_ != 0) xherror(priv_cfg.ftp_proxy); else xperror("net_connect"); docp->errcode = ERR_FTP_DATACON; return NULL; } } } else { bufio *dsock = bufio_sock_fdopen(net_accept(bufio_getfd(docp->datasock))); bufio_close(docp->datasock); docp->datasock = dsock; } #ifdef IP_TOS #ifdef IPTOS_THROUGHPUT if(docp->datasock) { int v = IPTOS_THROUGHPUT; if(setsockopt(bufio_getfd(docp->datasock), IPPROTO_IP, IP_TOS, (char *) &v, sizeof(v))) { xperror(gettext("ftp: setsockopt TOS - THROUGHPUT failed")); } } #endif #endif #ifdef USE_SSL if(docp->doc_url->type == URLT_FTPS) { bufio *ssl_sock; ssl_sock = my_ssl_do_connect(docp, docp->datasock, bufio_get_ssl_hook_data(docp->ftp_control)); if(!ssl_sock) { if(!docp->errcode) docp->errcode = ERR_FTPS_DATASSLCONNECT; bufio_close(docp->datasock); docp->datasock = NULL; } else docp->datasock = ssl_sock; } #endif if(docp->datasock) docp->ftp_data_con_finished = TRUE; return docp->datasock; } static int ftp_open_data_init(doc * docp) { char buf[256]; char *mbuf; struct sockaddr_storage scaddr; struct sockaddr *caddr; int reply; socklen_t n; caddr = (struct sockaddr *) &scaddr; n = sizeof(scaddr); if(getsockname(bufio_getfd(docp->ftp_control), caddr, &n)) { xperror("FTP control getsockname"); docp->datasock = NULL; return -1; } if(!cfg.ftp_activec || (priv_cfg.ftp_proxy && cfg.ftp_dirtyp)) { #ifdef HAVE_INET6 if(caddr->sa_family == AF_INET6) { sprintf(buf, "EPSV\r\n"); DEBUG_PROTOC("%s", buf); ftp_control_write(docp, buf, strlen(buf)); mbuf = NULL; if((reply = ftp_get_response(docp, &mbuf, TRUE)) >= 400) { int h[16], p[2], hal, af, pal; abs_addr haddr; _free(mbuf) if(reply == 600) { docp->ftp_fatal_err = TRUE; return -1; } sprintf(buf, "LPSV\r\n"); DEBUG_PROTOC("%s", buf); ftp_control_write(docp, buf, strlen(buf)); mbuf = NULL; if((reply = ftp_get_response(docp, &mbuf, TRUE)) >= 400) { docp->ftp_fatal_err = (reply == 600); _free(mbuf); return -1; } n = sscanf(mbuf, "%d %*[^0-9]%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", &reply, &af, &hal, &h[0], &h[1], &h[2], &h[3], &h[4], &h[5], &h[6], &h[7], &h[8], &h[9], &h[10], &h[11], &h[12], &h[13], &h[14], &h[15], &pal, &p[0], &p[1]); if(n != 22 || reply != 228 || af != 6 || hal != 16 || pal != 2) { xprintf(1, gettext("Error parsing FTP response to %s command - %s\n"), "LPSV", mbuf); _free(mbuf); return -1; } _free(mbuf); docp->ftp_pasv_port = (p[0] << 8) + p[1]; haddr.family = AF_INET6; for(n = 0; n < 16; n++) haddr.addr[n] = (unsigned char) h[n]; docp->ftp_pasv_host = dns_get_abs_addr_ip(&haddr); } else { int port; char d[4]; n = sscanf(mbuf, "%d %*[^0-9(]\(%c%c%c%d%c", &reply, &d[0], &d[1], &d[2], &port, &d[3]); if(n != 6 || reply != 229 || d[0] != d[1] || d[0] != d[2] || d[0] != d[3]) { xprintf(1, gettext("Error parsing FTP response to %s command - %s\n"), "EPSV", mbuf); _free(mbuf); return -1; } _free(mbuf); docp->ftp_pasv_port = port; docp->ftp_pasv_host = dns_get_sockaddr_ip(caddr); } } else #endif { int h0, h1, h2, h3, p0, p1; sprintf(buf, "PASV\r\n"); DEBUG_PROTOC("%s", buf); ftp_control_write(docp, buf, strlen(buf)); mbuf = NULL; if((reply = ftp_get_response(docp, &mbuf, TRUE)) >= 400) { docp->ftp_fatal_err = (reply == 600); _free(mbuf); return -1; } if(!mbuf) { return -1; } n = sscanf(mbuf, "%d %*[^0-9]%d,%d,%d,%d,%d,%d", &reply, &h0, &h1, &h2, &h3, &p0, &p1); if(n != 7 || reply != 227) { xprintf(1, gettext("Error parsing FTP response to %s command - %s\n"), "PASV", mbuf); _free(mbuf); return -1; } _free(mbuf); docp->ftp_pasv_port = (p0 << 8) + p1; sprintf(buf, "%d.%d.%d.%d", h0, h1, h2, h3); docp->ftp_pasv_host = tl_strdup(buf); } } else { struct sockaddr_storage saddr; struct sockaddr *addr; char *p; int port; addr = (struct sockaddr *) &saddr; if(!docp->datasock) { int bfd; abs_addr laddr; memset(laddr.addr, '\0', sizeof(laddr.addr)); laddr.family = caddr->sa_family; if(priv_cfg.local_ip) { memcpy(laddr.addr, cfg.local_ip_addr.addr, sizeof(laddr.addr)); laddr.family = cfg.local_ip_addr.family; } bfd = net_bindport(&laddr, cfg.active_ftp_min_port, cfg.active_ftp_max_port); if(!(docp->datasock = bufio_sock_fdopen(bfd))) { xperror("bind"); return -1; } } n = sizeof(saddr); if(getsockname(bufio_getfd(docp->datasock), addr, &n)) { xperror("FTP data getsockname"); bufio_close(docp->datasock); docp->datasock = NULL; return -1; } port = dns_get_sockaddr_port(addr); mbuf = dns_get_sockaddr_ip(caddr); #ifdef HAVE_INET6 if(caddr->sa_family == AF_INET6) { snprintf(buf, sizeof(buf), "EPRT |2|%s|%d|\r\n", mbuf, port); _free(mbuf); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if((reply = ftp_get_response(docp, NULL, TRUE)) >= 400) { unsigned char *h; if(reply == 600) { bufio_close(docp->datasock); docp->datasock = NULL; docp->ftp_fatal_err = TRUE; return -1; } h = ((struct sockaddr_in6 *) caddr)->sin6_addr.s6_addr; sprintf(buf, "LPRT 6,16,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,2,%d,%d\r\n", h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7], h[8], h[9], h[10], h[11], h[12], h[13], h[14], h[15], port / 256, port % 256); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if((reply = ftp_get_response(docp, NULL, TRUE)) >= 400) { bufio_close(docp->datasock); docp->datasock = NULL; docp->ftp_fatal_err = (reply == 600); return -1; } } } else #endif { for(p = mbuf; (p = strchr(p, '.')); *p = ','); snprintf(buf, sizeof(buf), "PORT %s,%d,%d\r\n", mbuf, port / 256, port % 256); _free(mbuf); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if((reply = ftp_get_response(docp, NULL, TRUE)) >= 400) { bufio_close(docp->datasock); docp->datasock = NULL; docp->ftp_fatal_err = (reply == 600); return -1; } } } return 0; } static int ftp_do_login_handshake(doc * docp, char *ruser, char *user, char *password) { ftp_handshake_info *fhi; fhi = ftp_handshake_info_data_find(docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port); if(!fhi) fhi = ftp_handshake_info_data_find("", DEFAULT_FTP_PORT); if(fhi) { if(ftp_do_login_handshake_cust(fhi, docp, ruser, password)) { docp->ftp_fatal_err = TRUE; docp->errcode = ERR_FTP_LOGIN_HANDSHAKE; return -1; } } else { char buf[2048]; int reply; if(priv_cfg.ftp_proxy_user && priv_cfg.ftp_proxy && !cfg.ftp_via_http && !cfg.ftp_dirtyp) { snprintf(buf, sizeof(buf), "USER %s\r\n", priv_cfg.ftp_proxy_user); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if((reply = ftp_get_response(docp, NULL, TRUE)) >= 400) { docp->ftp_fatal_err = TRUE; docp->errcode = ERR_FTP_BPROXYUSER; return -1; } } else reply = 0; if(priv_cfg.ftp_proxy_pass && priv_cfg.ftp_proxy && !cfg.ftp_via_http && !cfg.ftp_dirtyp) { if(reply == 331) /*** we need password ***/ { snprintf(buf, sizeof(buf), "PASS %s\r\n", priv_cfg.ftp_proxy_pass); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if(ftp_get_response(docp, NULL, TRUE) >= 400) { docp->ftp_fatal_err = TRUE; docp->errcode = ERR_FTP_BPROXYPASS; return -1; } } } snprintf(buf, sizeof(buf), "USER %s\r\n", user); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if((reply = ftp_get_response(docp, NULL, TRUE)) >= 400) { docp->ftp_fatal_err = TRUE; docp->errcode = ERR_FTP_BUSER; return -1; } if(reply == 331) /*** we need password ***/ { snprintf(buf, sizeof(buf), "PASS %s\r\n", password); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if(ftp_get_response(docp, NULL, TRUE) >= 400) { docp->ftp_fatal_err = TRUE; docp->errcode = ERR_FTP_BPASS; return -1; } } } return 0; } #define CLOSE_CONTROL \ bufio_close(docp->ftp_control);\ docp->ftp_control = NULL; static bufio *ftp_open_control_connection(doc * docp, char *host, int port, char *ruser, char *user, char *password) { docp->errcode = ERR_NOERROR; docp->ftp_fatal_err = FALSE; docp->ftp_respc = 0; if(!docp->ftp_control) { if(priv_cfg.ftp_proxy && cfg.ftp_dirtyp) { if(!(docp->datasock = bufio_sock_fdopen(net_connect(priv_cfg.ftp_proxy, cfg.ftp_proxy_port, docp)))) { if(_h_errno_ != 0) xherror(priv_cfg.ftp_proxy); else xperror("net_connect"); docp->errcode = ERR_PROXY_CONNECT; return NULL; } if(http_dumy_proxy_connect(docp, host, port, priv_cfg.ftp_proxy, cfg.ftp_proxy_port)) { docp->errcode = ERR_PROXY_CONNECT; return NULL; } docp->ftp_control = docp->datasock; docp->datasock = NULL; } else { if(!(docp->ftp_control = bufio_sock_fdopen(net_connect(host, port, docp)))) { if(_h_errno_ != 0) xherror(host); else xperror("net_connect"); docp->errcode = ERR_FTP_CONNECT; docp->ftp_fatal_err = TRUE; return NULL; } } if(ftp_get_response(docp, NULL, TRUE) >= 400) { CLOSE_CONTROL; docp->ftp_fatal_err = TRUE; docp->errcode = ERR_FTP_CONNECT; return NULL; } #ifdef USE_SSL if(docp->doc_url->type == URLT_FTPS) { char buf[2048]; int reply; bufio *ssl_sock; sprintf(buf, "AUTH SSL\r\n"); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); reply = ftp_get_response(docp, NULL, TRUE); /*** 234 code is used by SafeGossip ***/ /*** thank to Martijn ... ***/ if(reply != 334 && reply != 234) { CLOSE_CONTROL; docp->ftp_fatal_err = (reply == 600); docp->errcode = ERR_FTPS_UNSUPORTED; return NULL; } ssl_sock = my_ssl_do_connect(docp, docp->ftp_control, NULL); if(!ssl_sock) { if(!docp->errcode) docp->errcode = ERR_FTPS_CONNECT; CLOSE_CONTROL; return NULL; } else { docp->ftp_control = ssl_sock; } } #endif if(ftp_do_login_handshake(docp, ruser, user, password)) { CLOSE_CONTROL; return NULL; } #ifdef IP_TOS #ifdef IPTOS_LOWDELAY if(docp->ftp_control) { int v = IPTOS_LOWDELAY; if(setsockopt(bufio_getfd(docp->ftp_control), IPPROTO_IP, IP_TOS, (char *) &v, sizeof(v))) { perror("ftp: setsockopt TOS - LOWDELAY failed"); } } #endif #endif } #ifdef DEBUG else { if(cfg.debug) xprintf(1, gettext("Re-using established FTP control connection\n")); } #endif return docp->ftp_control; } static int ftp_set_transfer_type(doc * docp, char *type) { char buf[20]; int reply; snprintf(buf, sizeof(buf), "TYPE %s\r\n", type); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if((reply = ftp_get_response(docp, NULL, TRUE)) >= 400) { CLOSE_CONTROL; docp->ftp_fatal_err = (reply == 600); docp->errcode = ERR_FTP_UNKNOWN; return -1; } return 0; } static int ftp_send_list_command(doc * docp, char *filename) { char buf[2148]; int l; l = strlen(filename) - 1; if(l) { if(tl_is_dirname(filename + 1) && strcmp(filename, "//")) l--; } if(cfg.ftp_list) strcpy(buf, "LIST"); else strcpy(buf, "NLST"); if(cfg.ftp_list_options) { strcat(buf, " "); strncat(buf, cfg.ftp_list_options, sizeof(buf) - strlen(buf)); buf[sizeof(buf) - 1] = '\0'; } if(l) { strncat(buf, " ", sizeof(buf) - strlen(buf)); buf[sizeof(buf) - 1] = '\0'; strncat(buf, filename + 1, sizeof(buf) - strlen(buf)); buf[sizeof(buf) - 1] = '\0'; } strncat(buf, "\r\n", sizeof(buf) - strlen(buf)); buf[sizeof(buf) - 1] = '\0'; ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); return 0; } static int ftp_check_directory_existence(doc * docp, char *filename) { int rv = 0; if(cfg.ftp_list && cfg.fix_wuftpd) { int l; char buf[2148]; char *mbuf; l = strlen(filename) - 1; if(l) { if(tl_is_dirname(filename + 1) && strcmp(filename, "//")) l--; } strcpy(buf, "STAT -d1 "); if(l) { strncat(buf, filename + 1, sizeof(buf) - strlen(buf)); buf[sizeof(buf) - 1] = '\0'; strncat(buf, "\r\n", sizeof(buf) - strlen(buf)); buf[sizeof(buf) - 1] = '\0'; } else { /* we can assume that login directory exists */ return 0; } ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); mbuf = NULL; if(ftp_get_response(docp, &mbuf, TRUE) == 213) { char *p; p = mbuf + strcspn(mbuf, "\r\n"); p += strspn(p, "\r\n"); if(strncmp(filename + 1, p, strcspn(p, "\r\n"))) rv = -1; } _free(mbuf); } return rv; } /****************************************************************/ /* otvorenie spojenia na FTP server, prihlasenie + zahajenie */ /* prenosu suboru / adresara */ /* FIXME: Translate me! */ /****************************************************************/ static bufio *ftp_connect(doc * docp, char *host, int port, char *ruser, char *user, char *password, char *filename, bool_t * is_dir) { char buf[2148]; int reply; char *mbuf; docp->errcode = ERR_NOERROR; docp->ftp_fatal_err = FALSE; docp->ftp_respc = 0; if(!(docp->ftp_control = ftp_open_control_connection(docp, host, port, ruser, user, password))) return NULL; if(!tl_is_dirname(filename) && cfg.mode != MODE_FTPDIR) { if(docp->doc_url->extension && ((ftp_url_extension *) docp->doc_url->extension)->size > 0) { docp->totsz = ((ftp_url_extension *) docp->doc_url->extension)->size; reply = 213; DEBUG_PROTOC("taking stored size\n"); } else { snprintf(buf, sizeof(buf), "SIZE %s\r\n", filename + 1); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); mbuf = NULL; if((reply = ftp_get_response(docp, &mbuf, TRUE)) == 213) { int sz; sscanf(mbuf, "%d %d", &reply, &sz); docp->totsz = sz; } else { if(reply == 600) { docp->errcode = ERR_READ; docp->ftp_fatal_err = TRUE; _free(mbuf); return NULL; } } _free(mbuf); } if(reply != 550) /*** file doesn't exist or not plain file == 550 ***/ { if(!cfg.always_mdtm && docp->doc_url->extension && ((ftp_url_extension *) docp->doc_url->extension)->time != 0) { docp->dtime = ((ftp_url_extension *) docp->doc_url->extension)->time; reply = 213; DEBUG_PROTOC("taking stored MDTM %d\n", (int) ((ftp_url_extension *) docp->doc_url->extension)->time); } else { snprintf(buf, sizeof(buf), "MDTM %s\r\n", filename + 1); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); mbuf = NULL; if((reply = ftp_get_response(docp, &mbuf, TRUE)) == 213) { sscanf(mbuf, "%d %2147s", &reply, buf); if(strlen(buf) == 14) { docp->dtime = time_ftp_scn(buf); } } else { if(reply == 600) { docp->ftp_fatal_err = TRUE; docp->errcode = ERR_READ; _free(mbuf); return NULL; } } _free(mbuf); } DEBUG_PROTOC("Size: file %d, remote %d; time: file %d, remote %d\n", docp->origsize, docp->totsz, docp->origtime, docp->dtime); if(docp->origsize && (docp->totsz >= 0) && (docp->origsize != docp->totsz)) { xprintf(1, gettext("Size differs, regeting whole\n")); docp->rest_pos = 0; } else if(docp->origtime && docp->dtime) { if((difftime(docp->dtime, docp->origtime) > 0)) { if(docp->rest_pos) { docp->rest_pos = 0; xprintf(1, gettext("Modified from last download - regeting whole\n")); } } else if((cfg.mode == MODE_SYNC || cfg.mode == MODE_MIRROR) && !docp->rest_pos) { docp->errcode = ERR_FTP_ACTUAL; return NULL; } } if(docp->check_limits) { cond_info_t condp; int r; condp.level = 3; condp.urlnr = docp->doc_nr; condp.size = docp->totsz; condp.time = docp->dtime; condp.mimet = NULL; condp.full_tag = NULL; condp.params = NULL; condp.html_doc = NULL; condp.html_doc_offset = 0; condp.tag = NULL; condp.attrib = NULL; r = url_append_condition(docp->doc_url, &condp); if(!r) { switch (condp.reason) { case CONDT_MAX_SIZE: docp->errcode = ERR_BIGGER; break; case CONDT_MIN_SIZE: docp->errcode = ERR_SMALLER; break; case CONDT_NEWER_THAN: case CONDT_OLDER_THAN: docp->errcode = ERR_OUTTIME; break; case CONDT_USER_CONDITION: docp->errcode = ERR_SCRIPT_DISABLED; break; default: docp->errcode = ERR_RDISABLED; break; } return NULL; } } if(ftp_set_transfer_type(docp, "I")) { docp->ftp_fatal_err = TRUE; docp->errcode = ERR_FTP_DATACON; return NULL; } if(ftp_open_data_init(docp)) { bufio_close(docp->ftp_control); docp->ftp_control = NULL; docp->errcode = ERR_FTP_DATACON; return NULL; } if(docp->rest_pos) { char *rsp; sprintf(buf, "REST %ld\r\n", (long) docp->rest_pos); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); if((reply = ftp_get_response(docp, &rsp, TRUE)) >= 400) { _free(rsp); if(reply == 600) { docp->ftp_fatal_err = TRUE; bufio_close(docp->datasock); docp->datasock = NULL; docp->errcode = ERR_READ; return NULL; } docp->errcode = ERR_FTP_NOREGET; } else { sprintf(buf, "%ld", (long) docp->rest_pos); if(!strstr(rsp + 3, buf)) { xprintf(1, gettext ("Warning: FTP server understands REST command, but can't handle it properly.\n")); docp->errcode = ERR_FTP_NOREGET; } _free(rsp); } } snprintf(buf, sizeof(buf), "RETR %s\r\n", filename + 1); ftp_control_write(docp, buf, strlen(buf)); DEBUG_PROTOC("%s", buf); /** check control connection if there is available **/ /** server response. This is required to properly **/ /** establish support active data connections, also **/ /** in case of error **/ if(!cfg.ftp_activec || tl_selectr(bufio_getfd(docp->ftp_control), 10) == 0) { if(!ftp_open_data_finish(docp)) { docp->ftp_fatal_err = TRUE; if(!docp->errcode) docp->errcode = ERR_FTP_DATACON; return NULL; } } if(!((reply = ftp_get_response(docp, NULL, TRUE)) >= 400)) { docp->errcode = ERR_NOERROR; if(!ftp_open_data_finish(docp)) { docp->ftp_fatal_err = TRUE; if(!docp->errcode) docp->errcode = ERR_FTP_DATACON; return NULL; } return docp->datasock; } if(reply == 600) { docp->ftp_fatal_err = TRUE; bufio_close(docp->datasock); docp->datasock = NULL; docp->errcode = ERR_READ; return NULL; } docp->errcode = ERR_FTP_GET; } else { docp->errcode = ERR_FTP_GET; } } if(((docp->doc_url->extension && ((ftp_url_extension *) docp->doc_url->extension)->type == FTP_TYPE_D) || !docp->doc_url->extension) && ((docp->check_limits && cfg.condition.ftpdir) || !docp->check_limits)) { if(ftp_check_directory_existence(docp, filename)) { docp->errcode = ERR_FTP_NODIR; docp->ftp_respc = 550; if(docp->datasock) { bufio_close(docp->datasock); docp->datasock = NULL; } return NULL; } if(ftp_set_transfer_type(docp, "A")) { return NULL; } if(!docp->datasock) { if(ftp_open_data_init(docp)) { bufio_close(docp->ftp_control); docp->ftp_control = NULL; docp->errcode = ERR_FTP_DATACON; return NULL; } } ftp_send_list_command(docp, filename); /** check control connection if there is available **/ /** server response. This is required to properly **/ /** establish support active data connections, also **/ /** in case of error **/ if(!cfg.ftp_activec || tl_selectr(bufio_getfd(docp->ftp_control), 10) == 0) { if(!ftp_open_data_finish(docp)) { docp->ftp_fatal_err = TRUE; if(!docp->errcode) docp->errcode = ERR_FTP_DATACON; return NULL; } } if(!((reply = ftp_get_response(docp, NULL, TRUE)) >= 400)) { docp->errcode = ERR_NOERROR; *is_dir = TRUE; if(!ftp_open_data_finish(docp)) { docp->ftp_fatal_err = TRUE; if(!docp->errcode) docp->errcode = ERR_FTP_DATACON; return NULL; } return docp->datasock; } docp->ftp_fatal_err = (reply == 600); docp->errcode = *is_dir ? ERR_FTP_NODIR : ERR_FTP_GET; } else if(!cfg.condition.ftpdir && reply == 550 && *is_dir) { docp->errcode = ERR_FTP_DIRNO; } if(docp->datasock) { bufio_close(docp->datasock); docp->datasock = NULL; } return NULL; } /********************************************************/ /* pre dane FTP URL vracia deskriptor datoveho spojenia */ /* FIXME: Translate me! */ /********************************************************/ bufio *ftp_get_data_socket(doc * docp) { char *user, *ruser; char *password; char pom[100]; bufio *s; bool_t sdir; char *tmp_path; user = url_get_user(docp->doc_url, NULL); password = url_get_pass(docp->doc_url, NULL); if(!user) user = "anonymous"; ruser = user; if(!password) password = cfg.send_from ? priv_cfg.from : "pavuk@domain.xx"; if(priv_cfg.ftp_proxy && !cfg.ftp_dirtyp) { snprintf(pom, sizeof(pom), "%s@%s %hu", user, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port); user = pom; } sdir = docp->doc_url->p.ftp.dir; tmp_path = url_decode_str(docp->doc_url->p.ftp.path, strlen(docp->doc_url->p.ftp.path)); s = ftp_connect(docp, priv_cfg.ftp_proxy && !cfg.ftp_dirtyp ? priv_cfg.ftp_proxy : docp->doc_url->p.ftp.host, priv_cfg.ftp_proxy && !cfg.ftp_dirtyp ? priv_cfg.ftp_proxy_port : docp->doc_url->p.ftp.port, ruser, user, password, tmp_path, &sdir); _free(tmp_path); if(sdir != docp->doc_url->p.ftp.dir) { docp->doc_url->p.ftp.dir = sdir; url_changed_filename(docp->doc_url); } return s; } /*******************************/ /* remove document from server */ /*******************************/ int ftp_remove(doc * docp) { char *cmd; char *filename; int reply; if(docp->doc_url->type != URLT_FTP && docp->doc_url->type != URLT_FTPS) return 0; if(docp->doc_url->p.ftp.dir) return 0; xprintf(1, "Deleting remote document ...\n"); filename = url_decode_str(docp->doc_url->p.ftp.path, strlen(docp->doc_url->p.ftp.path)); cmd = tl_str_concat(NULL, "DELE ", filename + 1, "\r\n", NULL); ftp_control_write(docp, cmd, strlen(cmd)); DEBUG_PROTOC("%s", cmd); _free(filename); _free(cmd); if((reply = ftp_get_response(docp, NULL, TRUE)) >= 400) { if(reply == 600) { docp->ftp_fatal_err = TRUE; return -1; } } return 0; } /********************************************************/ /* z FTP adresara urobi HTML dokument */ /* FIXME: Translate me! */ /********************************************************/ static void ftp_nlst_dir_to_html(doc * docp) { char *p, *n, *res = NULL; char pom[8192]; int tsize; bool_t last = 1; int ilen; snprintf(pom, sizeof(pom), gettext("\n" "\n\nDirectory of %s://%s:%hu%s\n\n\n" "

                                                                  List of FTP directory %s://%s:%hu/%s


                                                                    "), prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path, prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path); res = tl_strdup(pom); tsize = strlen(pom); p = docp->contents; while(*p) { ilen = strcspn(p, "\r\n"); if(*(p + ilen)) *(p + ilen) = '\0'; else last = 0; _strtrchr(p, '\\', '/'); n = strrchr(p, '/'); if(n) n++; else n = p; n = url_encode_str(n, URL_PATH_UNSAFE); if(docp->doc_url->p.ftp.user && docp->doc_url->p.ftp.password) { snprintf(pom, sizeof(pom), "
                                                                  • "%s"\n", prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.user, docp->doc_url->p.ftp.password, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path, tl_is_dirname(docp->doc_url->p.ftp.path) ? "" : "/", n, n); } else if(docp->doc_url->p.ftp.user) { snprintf(pom, sizeof(pom), "
                                                                  • "%s"\n", prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.user, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path, tl_is_dirname(docp->doc_url->p.ftp.path) ? "" : "/", n, n); } else snprintf(pom, sizeof(pom), "
                                                                  • "%s"\n", prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path, tl_is_dirname(docp->doc_url->p.ftp.path) ? "" : "/", n, n); _free(n); tsize += strlen(pom); res = _realloc(res, tsize + 1); strcat(res, pom); p += ilen + last; p += strspn(p, "\r\n"); } tsize += 22; res = _realloc(res, tsize + 1); strcat(res, "
                                                                  \n\n\n"); free(docp->contents); docp->contents = res; docp->size = tsize; } static int ftp_list_unix_perm_parse(char *str) { int perm = 0; int i; char *s; if(strlen(str) != 10) return -1; for(s = str + 1, i = 0; i < 3; i++, s += 3) { perm <<= 3; if(s[0] == 'r') perm += 4; if(s[1] == 'w') perm += 2; if(s[2] == 'x') perm += 1; } return perm; } static int ftp_list_unix_perm_type(char *str) { switch (str[0]) { case 'd': return FTP_TYPE_D; case 'l': return FTP_TYPE_L; default: return FTP_TYPE_F; } } static void ftp_list_unix_get_slink(char *str, char **nm, char **ln) { char *p; *ln = NULL; *nm = str; if((p = strstr(str, " -> "))) { *p = '\0'; *ln = p + 4; } } static int ftp_list_get_month_index(char *month) { static const char *months[] = { "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec", NULL }; int i; if(strlen(month) != 3) return -1; /* make lowercase month */ for(i = 0; i < 3; ++i) { month[i] = tolower(month[i]); } i = 0; while(months[i] != NULL) { if(strcmp(month, months[i]) == 0) return i + 1; i++; } return 0; } static time_t ftp_list_get_date(char *date) { int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0; char m[PATH_MAX]; int ok = 0; static int our_year = 0; static int our_month = 0; static char result[32]; time_t t; if(our_year == 0) { time_t t; struct tm *ptm; t = time(NULL); ptm = gmtime(&t); our_year = ptm->tm_year; our_month = ptm->tm_mon; } if(sscanf(date, "%3[a-zA-Z] %2d %02d:%02d", m, &day, &hour, &minute) == 4) { month = ftp_list_get_month_index(m); if(month <= 0) return 0; if(day < 1 || day > 31) return 0; if(hour < 0 || hour > 24) return 0; if(minute < 0 || minute > 60) return 0; year = 0; second = 0; ok = 1; } if(!ok && sscanf(date, "%3[a-zA-Z] %2d %04d", m, &day, &year) == 3) { month = ftp_list_get_month_index(m); if(month <= 0) return 0; if(day < 1 || day > 31) return 0; if(year < 1995 || year > 2100) return 0; hour = 0; second = 0; minute = 0; ok = 1; } if(!ok) return 0; if(year == 0) { year = our_year; if((month - 1) > our_month) year--; } if(year < 1900) year += 1900; sprintf(result, "%04d%02d%02d%02d%02d%02d", year, month, day, hour, minute, second); t = time_ftp_scn(result); /* printf ("Time conversion: %s == %s (%d)\n", date, result, (int) t); */ return t; } static ftp_url_extension *ftp_list_unix_parse_line(char *str, char **fname, ftp_url_extension * ret) { char pom[2000]; char name[2000]; char attrib[2000]; char month[2000]; char rest[2000]; unsigned int pi, day; unsigned long size; char *nm, *sln; *fname = NULL; if(str[0] == 'b' || /* block device */ str[0] == 'u' || /* character device unbuffered */ str[0] == 'c' || /* character device */ str[0] == 'p' || /* FIFO */ str[0] == 's') /* socket */ { /* we don't support devices, FIFOs and sockets creation */ return NULL; } /* for SYS V style ls -l */ else if(sscanf(str, "%1999s %u %1999s %1999s %lu %1999s %u %1999s %1999[^\n\r]", attrib, &pi, pom, pom, &size, month, &day, rest, name) != 9) { /* for old BSD style ls -l */ if(sscanf(str, "%1999s %u %1999s %lu %1999s %u %1999s %1999[^\n\r]", attrib, &pi, pom, &size, month, &day, rest, name) != 8) { return NULL; } } ret->size = size; ret->type = ftp_list_unix_perm_type(attrib); ret->perm = ftp_list_unix_perm_parse(attrib); if(ret->perm == -1) return NULL; ftp_list_unix_get_slink(name, &nm, &sln); ret->slink = tl_strdup(sln); snprintf(pom, sizeof(pom), "%s %d %s", month, day, rest); ret->time = ftp_list_get_date(pom); *fname = tl_strdup(nm); return ret; } static ftp_url_extension *ftp_list_epfl_parse_line(char *str, char **fname, ftp_url_extension * ret) { char *p, *strtokbuf; *fname = NULL; if(*str != '+') { return NULL; } p = strchr(str, '\x09'); if(!p) { return NULL; } *fname = tl_strdup(p + 1); *p = '\0'; ret->type = FTP_TYPE_F; ret->size = 0; p = strtokc_r(str + 1, ',', &strtokbuf); while(p) { switch (*p) { case 'r': ret->type = FTP_TYPE_F; break; case '/': ret->type = FTP_TYPE_D; break; case 's': ret->size = _atoi(p + 1); break; } p = strtokc_r(NULL, ',', &strtokbuf); } ret->slink = NULL; ret->time = 0; ret->perm = (4 << 6) + (2 << 6) + (2 << 3) + 2; return ret; } static ftp_url_extension *ftp_list_novel_parse_line(char *str, char **fname, ftp_url_extension * ret) { char pom[2000]; char name[4000]; char attrib[2000]; unsigned int pi; unsigned long size; *fname = NULL; if(sscanf(str, "%1999s %u %1999s %lu %1999s %u %1999s %3999[^\n\r]", attrib, &pi, pom, &size, pom, &pi, pom, name) != 8) { return NULL; } ret->size = size; ret->type = *attrib == 'd' ? FTP_TYPE_D : FTP_TYPE_F; ret->slink = NULL; ret->time = 0; ret->perm = (4 << 6) + (2 << 6) + (2 << 3) + 2; *fname = tl_strdup(name); return ret; } static ftp_url_extension *ftp_list_vms_parse_line(char *str, char **fname, ftp_url_extension * ret) { int l; char *p = str; *fname = NULL; l = strcspn(p, " "); ret->type = strncmp(p + l - 6, ".DIR;", 5) ? FTP_TYPE_F : FTP_TYPE_D; if(ret->type == FTP_TYPE_D) *fname = tl_strndup(p, l - 6); else *fname = tl_strndup(p, l - 2); lowerstr(*fname); ret->slink = NULL; ret->time = 0; ret->size = 0; ret->perm = (4 << 6) + (2 << 6) + (2 << 3) + 2; return ret; } static ftp_url_extension *ftp_list_windos_parse_line(char *str, char **fname, ftp_url_extension * ret) { char pom[2000]; char pom2[2000]; int ti; *fname = NULL; if(sscanf(str, "%2d-%2d-%2d %2d:%2d%*[AP]M %1999s %1999[^\n\r]", &ti, &ti, &ti, &ti, &ti, pom2, pom) != 7) return NULL; ret->slink = NULL; ret->time = 0; ret->perm = (4 << 6) + (2 << 6) + (2 << 3) + 2; if(strstr(pom2, "")) { ret->type = FTP_TYPE_D; ret->size = 0; } else { ret->type = FTP_TYPE_F; ret->size = atoi(pom2); } *fname = tl_strdup(pom); return ret; } /********************************************************/ /* z vypisu FTP adresara urobi HTML dokument */ /* FIXME: Translate me! */ /********************************************************/ static void ftp_list_unix_dir_to_html(doc * docp) { char *p, *res = NULL; char pom[8192]; char urlstr[4096]; int tsize; ftp_url_extension *ext = NULL; ftp_url_extension exta; char *name, *tmp; int ilen; bool_t last = 1; enum { FTP_DT_UNIXL, FTP_DT_VMS, FTP_DT_WINDOS } type; snprintf(pom, sizeof(pom), gettext("\n" "\n\nDirectory of %s://%s:%hu%s\n\n\n" "

                                                                  List of FTP directory %s://%s:%hu/%s


                                                                    "), prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path, prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path); res = tl_strdup(pom); tsize = strlen(pom); /*** skip first total line ***/ if(!strncmp(docp->contents, "total ", 6)) { type = FTP_DT_UNIXL; p = docp->contents + strcspn(docp->contents, "\r\n"); p += strspn(p, "\r\n"); } else if(!strncmp(docp->contents, "Directory ", 10) || !strncmp(docp->contents + strspn(docp->contents, " \r\n"), "Directory ", 10)) { type = FTP_DT_VMS; p = docp->contents + strspn(docp->contents, " \r\n"); p += strcspn(p, "\r\n"); p += strspn(p, "\r\n"); } else { int ti; if(sscanf(docp->contents, "%2d-%2d-%2d %2d:%2d%*[AP]M %8191s %8191[^\n\r]", &ti, &ti, &ti, &ti, &ti, pom, pom) == 7) { type = FTP_DT_WINDOS; p = docp->contents; } else { type = FTP_DT_UNIXL; p = docp->contents; } } while(*p) { ilen = strcspn(p, "\r\n"); if(*(p + ilen)) *(p + ilen) = '\0'; else last = 0; if(type == FTP_DT_UNIXL) { if(*p == '+') ext = ftp_list_epfl_parse_line(p, &name, &exta); else if(*(p + 1) == '[') ext = ftp_list_novel_parse_line(p, &name, &exta); else ext = ftp_list_unix_parse_line(p, &name, &exta); } else if(type == FTP_DT_VMS) { if(strncmp(p, "Total of ", 9) && *p && *p != ' ') ext = ftp_list_vms_parse_line(p, &name, &exta); } else if(type == FTP_DT_WINDOS) { ext = ftp_list_windos_parse_line(p, &name, &exta); } if(!ext) { xprintf(1, gettext("ERROR: unable to parse FTP list line :\n\t%s\n"), p); p += ilen + last; p += strspn(p, "\r\n"); continue; } if(!name || !strcmp(name, ".") || !strcmp(name, "..")) { p += ilen + last; p += strspn(p, "\r\n"); continue; } tmp = name; name = url_encode_str(name, URL_PATH_UNSAFE); _free(tmp); if(docp->doc_url->p.ftp.user && docp->doc_url->p.ftp.password) { snprintf(urlstr, sizeof(urlstr), "%s://%s:%s@%s:%hu%s%s%s%s", prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.user, docp->doc_url->p.ftp.password, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path, tl_is_dirname(docp->doc_url->p.ftp.path) ? "" : "/", name, (ext->type == FTP_TYPE_D) ? "/" : ""); } else if(docp->doc_url->p.ftp.user) { snprintf(urlstr, sizeof(urlstr), "%s://%s@%s:%hu%s%s%s%s", prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.user, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path, tl_is_dirname(docp->doc_url->p.ftp.path) ? "" : "/", name, (ext->type == FTP_TYPE_D) ? "/" : ""); } else snprintf(urlstr, sizeof(urlstr), "%s://%s:%hu%s%s%s%s", prottable[docp->doc_url->type].urlid, docp->doc_url->p.ftp.host, docp->doc_url->p.ftp.port, docp->doc_url->p.ftp.path, tl_is_dirname(docp->doc_url->p.ftp.path) ? "" : "/", name, (ext->type == FTP_TYPE_D) ? "/" : ""); snprintf(pom, sizeof(pom), "
                                                                  • "%s" (%lub)\n", (unsigned int) ext->type, ext->perm, (long)ext->size, (unsigned int) ext->time, (ext->slink ? ext->slink : ""), urlstr, name, (long)ext->size); _free(name); _free(ext->slink); tsize += strlen(pom); res = _realloc(res, tsize + 1); strcat(res, pom); p += ilen + last; p += strspn(p, "\r\n"); } tsize += 22; res = _realloc(res, tsize + 1); strcat(res, "
                                                                  \n\n\n"); free(docp->contents); docp->contents = res; docp->size = tsize; } void ftp_dir_to_html(doc * docp) { if(!docp->contents) return; if(!cfg.ftp_list) ftp_nlst_dir_to_html(docp); else { ftp_list_unix_dir_to_html(docp); } } void ftp_url_ext_free(ftp_url_extension * fext) { _free(fext->slink); _free(fext); } ftp_url_extension *ftp_url_ext_new(int type, int perm, ssize_t size, char *slink, time_t time) { ftp_url_extension *rv; rv = _malloc(sizeof(ftp_url_extension)); rv->perm = perm; rv->size = size; rv->type = type; rv->slink = slink; rv->time = time; return rv; } ftp_url_extension *ftp_url_ext_dup(ftp_url_extension * ext) { return ftp_url_ext_new(ext->type, ext->perm, ext->size, tl_strdup(ext->slink), ext->time); } ftp_url_extension *ftp_parse_ftpinf_ext(char *str) { char pom[8192]; unsigned int t, p, s, tt; int num; if(strncmp(str, "FTPINF", 6)) return NULL; num = sscanf(str, "FTPINF %u %u %u %u %8191[^\n\r]", &t, &p, &s, &tt, pom); if(num < 4) return NULL; return ftp_url_ext_new(t, p, s, (num == 5) ? tl_strdup(pom) : NULL, tt); } int ftp_make_symlink(url * urlp) /* FIXME: Security */ { char pom[PATH_MAX]; char *frompath, *topath; char *p; ftp_url_extension *ext = (ftp_url_extension *) urlp->extension; int rv; frompath = tl_strdup(url_to_filename(urlp, TRUE)); if(!cfg.preserve_links) { if(ext->slink[0] == '/') { p = urlp->p.ftp.path; urlp->p.ftp.path = ext->slink; topath = tl_strdup(url_get_local_name_real(urlp, NULL, FALSE)); urlp->p.ftp.path = p; } else { strcpy(pom, urlp->p.ftp.path); p = strrchr(pom, '/'); if(p) *(p + 1) = '\0'; strcat(pom, ext->slink); p = urlp->p.ftp.path; urlp->p.ftp.path = pom; topath = tl_strdup(url_get_local_name_real(urlp, NULL, FALSE)); urlp->p.ftp.path = p; } p = topath; topath = get_relative_path(frompath, p); _free(p); } else topath = NULL; /* don't make links to directory index files */ /* but rather to directories */ if(topath && tl_is_dirname(ext->slink)) { p = tl_get_basename(topath); if(p > topath) *(p) = '\0'; } xprintf(1, gettext("Making symlink \"%s\" to \"%s\"\n"), frompath, topath ? topath : ext->slink); if(makealldirs(frompath)) xperror(frompath); if(!access(frompath, F_OK)) { if(unlink(frompath)) xperror(frompath); } rv = symlink(topath ? topath : ext->slink, frompath); if(rv == -1) xperror("topath"); _free(topath); _free(frompath); return rv; } void ftp_handshake_info_free(ftp_handshake_info * fhi) { _free(fhi->host); for(; fhi->infos; fhi->infos = dllist_remove_entry(fhi->infos, fhi->infos)) { ftp_handshake_info_data *d = (ftp_handshake_info_data *) fhi->infos->data; _free(d->cmd); _free(d); } } ftp_handshake_info *ftp_handshake_info_parse(char *host, char *str) { ftp_handshake_info *rv = _malloc(sizeof(ftp_handshake_info)); ftp_handshake_info_data *d; char *p; char **array; int i, ok; rv->infos = NULL; p = strchr(host, ':'); if(p) { rv->host = tl_strndup(host, p - host); rv->port = _atoi(p + 1); if(!rv->port) rv->port = DEFAULT_FTP_PORT; } else { rv->host = tl_strdup(host); rv->port = DEFAULT_FTP_PORT; } array = tl_str_split(str, "\\"); d = NULL; ok = TRUE; if(array) { for(i = 0; array[i]; i++) { if(!ok) { _free(array[i]); continue; } if(!d) { d = _malloc(sizeof(ftp_handshake_info_data)); d->cmd = array[i]; d->response = 0; array[i] = NULL; } else { d->response = _atoi(array[i]); if(!d->response && errno == ERANGE) ok = FALSE; _free(array[i]); rv->infos = dllist_append(rv->infos, (dllist_t) d); d = NULL; } } if(d) { _free(d->cmd); _free(d); ok = FALSE; } _free(array); } else ok = FALSE; if(!ok) { ftp_handshake_info_free(rv); rv = NULL; } return rv; } ftp_handshake_info *ftp_handshake_info_dup(ftp_handshake_info * fhi) { dllist *ptr; ftp_handshake_info *rv = _malloc(sizeof(ftp_handshake_info)); rv->host = tl_strdup(fhi->host); rv->port = fhi->port; rv->infos = NULL; for(ptr = fhi->infos; ptr; ptr = ptr->next) { ftp_handshake_info_data *d1, *d2; d1 = (ftp_handshake_info_data *) ptr->data; d2 = _malloc(sizeof(ftp_handshake_info_data)); d2->response = d1->response; d2->cmd = tl_strdup(d1->cmd); rv->infos = dllist_append(rv->infos, (dllist_t) d2); } return rv; } char *ftp_handshake_info_data_dump(ftp_handshake_info * fhi) { ftp_handshake_info_data *d; dllist *ptr; char pom[512]; char *rv = NULL; if(fhi->infos) { d = (ftp_handshake_info_data *) fhi->infos->data; snprintf(pom, sizeof(pom), "%s\\%d", d->cmd, d->response); rv = tl_strdup(pom); for(ptr = fhi->infos->next; ptr; ptr = ptr->next) { d = (ftp_handshake_info_data *) ptr->data; snprintf(pom, sizeof(pom), "\\%s\\%d", d->cmd, d->response); rv = tl_str_append(rv, pom); } } return rv; } static ftp_handshake_info *ftp_handshake_info_data_find(char *host, int port) { dllist *ptr; for(ptr = priv_cfg.ftp_login_hs; ptr; ptr = ptr->next) { ftp_handshake_info *fhi = (ftp_handshake_info *) ptr->data; if((fhi->port == port || !host[0]) && !strcmp(fhi->host, host)) return fhi; } return NULL; } static char *ftp_handshake_expand_cmd(char *cmd, doc * docp, char *user, char *password) /* FIXME: Security */ { char ocmd[2048]; char *p, *op; p = cmd; op = ocmd; *op = '\0'; while(*p) { if(*p == '%') { p++; switch (*p) { case 'u': strcpy(op, user); break; case 'U': strcpy(op, priv_cfg.ftp_proxy_user); break; case 'p': strcpy(op, password); break; case 'P': strcpy(op, priv_cfg.ftp_proxy_pass); break; case 'h': strcpy(op, docp->doc_url->p.ftp.host); break; case 's': sprintf(op, "%hu", docp->doc_url->p.ftp.port); break; default: *op = '%'; op++; *op = *p; op++; *op = '\0'; break; } p++; while(*op) op++; } else { *op = *p; op++; p++; *op = '\0'; } } strcat(ocmd, "\r\n"); return tl_strdup(ocmd); } static int ftp_do_login_handshake_cust(ftp_handshake_info * fhi, doc * docp, char *user, char *password) { dllist *ptr; for(ptr = fhi->infos; ptr; ptr = ptr->next) { ftp_handshake_info_data *d = (ftp_handshake_info_data *) ptr->data; char *cmd; int response; cmd = ftp_handshake_expand_cmd(d->cmd, docp, user, password); ftp_control_write(docp, cmd, strlen(cmd)); DEBUG_PROTOC("%s", cmd); _free(cmd); response = ftp_get_response(docp, NULL, TRUE); if(response != d->response) return -1; } return 0; } pavuk-0.9.35/src/ftp.h0000644000175000001440000000411610142077737011416 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef __ftp_h__ #define __ftp_h__ #include #include "doc.h" #include "myssl.h" #include "bufio.h" #include "dllist.h" #define DEFAULT_FTP_PORT 21 #define DEFAULT_FTP_PROXY_PORT 22 #define FTP_TYPE_F 0 #define FTP_TYPE_D 1 #define FTP_TYPE_L 2 typedef struct { protocol proto; char *user; char *passwd; char *host; unsigned short port; bufio *control; } ftp_connection; typedef struct _ftp_url_extension { char type; /*** type of file ***/ short int perm; /*** permisions ***/ ssize_t size; /*** size of file ***/ char *slink; /*** where point symlink ***/ time_t time; /*** last modification time ***/ } ftp_url_extension; typedef struct _ftp_handshake_info_data { char *cmd; int response; } ftp_handshake_info_data; typedef struct _ftp_handshake_info { char *host; unsigned short port; dllist *infos; } ftp_handshake_info; extern bufio *ftp_get_data_socket(doc *); extern void ftp_dir_to_html(doc *); extern void ftp_dir_list_to_html(doc *); extern int ftp_get_response(doc *, char **, int); extern int ftp_make_symlink(url *); extern int ftp_remove(doc *); extern ftp_url_extension *ftp_parse_ftpinf_ext(char *); extern ftp_url_extension *ftp_url_ext_new(int, int, ssize_t, char *, time_t); extern ftp_url_extension *ftp_url_ext_dup(ftp_url_extension *); extern void ftp_url_ext_free(ftp_url_extension *); extern void ftp_handshake_info_free(ftp_handshake_info *); extern ftp_handshake_info *ftp_handshake_info_parse(char *, char *); extern char *ftp_handshake_info_data_dump(ftp_handshake_info *); extern ftp_handshake_info *ftp_handshake_info_dup(ftp_handshake_info *); #endif pavuk-0.9.35/src/gui.h0000644000175000001440000003020510151373067011402 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _gui_h_ #define _gui_h_ #ifdef GTK_FACE #include #if !defined(HAVE_MT) #undef GDK_THREADS_ENTER #define GDK_THREADS_ENTER() #undef GDK_THREADS_LEAVE #define GDK_THREADS_LEAVE() #endif typedef struct { GdkPixmap *pixmap; GdkBitmap *shape; } Icon; typedef struct { GtkWidget *list; GtkWidget *entry; } listanfo; #include "icons.h" #include "mode.h" #define GUI_TREE_RTYPE GtkCTreeNode* #define PAVUK_ABOUT 0 #define PAVUK_CFGCOMM 1 #define PAVUK_CFGSCH 2 #define PAVUK_CFGLIM 3 #define PAVUK_TREE 4 #define PAVUK_SCNLD 5 #define PAVUK_SCNSV 6 #define PAVUK_SCNADD 7 #define PAVUK_JSCONS 8 #define GUI_SET_TOOLTIP(w,t) \ gtk_tooltips_set_tip(gui_cfg.help_tooltips, w, t, NULL); typedef struct { GtkWidget *tag_patterns; GtkWidget *rsleep; GtkWidget *ftp_login_hs; GtkWidget *ftp_login_hs_host; GtkWidget *ftp_login_hs_handshake; GtkWidget *default_prefix; GtkWidget *ports; GtkWidget *allow_ports; GtkTooltips *help_tooltips; GtkWidget *info_dir; GtkWidget *post_update; GtkWidget *fix_wuftpd; GtkWidget *ftp_list_options; GtkWidget *limit_inlines; GtkWidget *js_transform; GtkWidget *jst_rewrite; GtkWidget *jst_pattern; GtkWidget *jst_rule; GtkWidget *jst_tag; GtkWidget *jst_attrib; GtkWidget *ftp_proxy_user; GtkWidget *ftp_proxy_pass; GtkWidget *follow_cmd; GtkWidget *retrieve_slink; GtkWidget *js_patterns; GtkWidget *auth_ntlm_domain; GtkWidget *auth_proxy_ntlm_domain; GtkWidget *http_auth_scheme; GtkWidget *http_proxy_auth_scheme; GtkWidget *singlepage; GtkWidget *dont_leave_site_dir; GtkWidget *unique_doc; GtkWidget *del_after; GtkWidget *mini_toolbar; GtkWidget *main_window_hide; GtkWidget *watch_download; GtkWidget *hash_size; GtkWidget *local_ip; GtkWidget *max_time; GtkWidget *use_http11; GtkWidget *site_level; GtkWidget *debug_level_mi; GtkWidget *debug_level_m; GtkWidget *http_headers; /* for fnrules */ GtkWidget *rules_list; GtkWidget *mpt_entry; GtkWidget *rule_entry; GtkWidget *ptrn_fnmatch; GtkWidget *ptrn_regex; GtkWidget *dont_touch_url_pattern; /* end for fnrules */ #ifdef HAVE_REGEX GtkWidget *aip; GtkWidget *skipip; GtkWidget *rpattern; GtkWidget *skip_rpattern; GtkWidget *url_rpattern; GtkWidget *url_skip_rpattern; GtkWidget *dont_touch_url_rpattern; GtkWidget *dont_touch_tag_rpattern; #endif #ifdef HAVE_BDB_18x GtkWidget *ns_cache_dir; GtkWidget *moz_cache_dir; #endif #ifdef HAVE_MOZJS GtkWidget *pjs_console_shell; #endif GtkWidget *show_time; GtkWidget *post_cmd; GtkWidget *gen_logname; GtkWidget *sched_cmd; GtkWidget *send_if_range; GtkWidget *remove_adv; GtkWidget *advert_res; GtkWidget *scheduling_strategie; GtkWidget *auto_referer; GtkWidget *referer; GtkWidget *cookie_check_domain; GtkWidget *remind_cmd; GtkWidget *sel_to_local; GtkWidget *all_to_local; GtkWidget *url_to_local; GtkWidget *all_to_remote; GtkWidget *enable_info; GtkWidget *enable_js; GtkWidget *read_css; GtkWidget *fs_quota; GtkWidget *file_quota; GtkWidget *trans_quota; GtkWidget *minrate; GtkWidget *maxrate; GtkWidget *bufsize; GtkWidget *use_prefs; GtkWidget *acharset_list; GtkWidget *identity; GtkWidget *store_index; GtkWidget *send_from; GtkWidget *check_size; GtkWidget *min_size; GtkWidget *skip_pattern; GtkWidget *skip_url_pattern; GtkWidget *ftp_html; GtkWidget *preserve_links; GtkWidget *preserve_perm; GtkWidget *ftp_list; GtkWidget *index_name; GtkWidget *store_name; GtkAccelGroup *accel_group; GSList *menu_gaccels; GtkWidget *tr_del_chr; GtkWidget *tr_str_s1; GtkWidget *tr_str_s2; GtkWidget *tr_chr_s1; GtkWidget *tr_chr_s2; GtkWidget *en_uexit; GtkWidget *html_tags; GtkWidget *cookie_domain_list; GtkWidget *cookie_domain_entry; GtkWidget *en_cookie_max; GtkWidget *sw_cookie_update; GtkWidget *sw_cookie_recv; GtkWidget *sw_cookie_send; GtkWidget *en_cookie_file; GtkWidget *cb_comcfg; GtkWidget *leave_level; GtkWidget *cfg_menu; GtkWidget *ptime; GtkWidget *leaves_sw; GtkWidget *leaved_sw; GtkWidget *resched; GtkWidget *btime_h_entry; GtkWidget *etime_h_entry; GtkWidget *btime_min_entry; GtkWidget *etime_min_entry; GtkWidget *btime_yentry; GtkWidget *etime_yentry; GtkWidget *btime_mon; GtkWidget *etime_mon; GtkWidget *btime_cal; GtkWidget *etime_cal; GtkWidget *btime_sw; GtkWidget *etime_sw; GtkWidget *selected_node; /*** selected tree node ***/ GUI_TREE_RTYPE root; /*** tree root item ***/ int endloop; /*** end procesing _Xt_Serve ***/ GtkWidget *modegr[NUM_MODES]; /*** radio group for mode selection ***/ GtkWidget *ftpmodegr[2]; GtkWidget *toplevel; /*** jednotlive widgety ktore potrebujeme adresovat ***/ GtkWidget *logw; GtkWidget *logw_menu; GtkWidget *logw_copy_me; GtkWidget *logw_swin; GtkAdjustment *logvadj; GtkWidget *scn_load_shell; GtkWidget *scn_add_shell; GtkWidget *scn_save_shell; GtkWidget *log_label; GtkWidget *slog_label; GtkWidget *base_level_label; GtkWidget *xloglen_label; GtkWidget *maxdoc_label; GtkWidget *maxlev_label; GtkWidget *maxsize_label; GtkWidget *browser_label; GtkWidget *ddays_label; GtkWidget *rollback_label; GtkWidget *oldrm_sw; GtkWidget *mime_sw; GtkWidget *freget_sw; GtkWidget *noreloc_sw; GtkWidget *gopher_sw; GtkWidget *ftp_sw; GtkWidget *ftpd_sw; GtkWidget *ftp_data_sw; GtkWidget *http_sw; GtkWidget *cache_sw; GtkWidget *cgi_sw; GtkWidget *robots_sw; GtkWidget *enc_sw; GtkWidget *auth_sw; GtkWidget *url_entry; GtkWidget *url_list; GtkWidget *formdata_entry; GtkWidget *formdata_list; GtkWidget *cdir_label; GtkWidget *http_proxyh_label; GtkWidget *http_proxyp_label; GtkWidget *http_proxy_list; #ifdef USE_SSL GtkWidget *ftps_sw; GtkWidget *https_sw; GtkWidget *ssl_proxyh_label; GtkWidget *ssl_proxyp_label; GtkWidget *ssl_cipher_list; GtkWidget *ssl_version[4]; GtkWidget *ssl_cert_passwd_en; GtkWidget *unique_sslid; #ifdef USE_SSL_IMPL_OPENSSL GtkWidget *ssl_key_file_en; GtkWidget *ssl_cert_file_en; #ifdef HAVE_RAND_EGD GtkWidget *egd_socket; #endif #endif #ifdef USE_SSL_IMPL_NSS GtkWidget *nss_cert_dir; GtkWidget *nss_accept_unknown_cert; GtkWidget *nss_domestic_policy; #endif #endif GtkWidget *ftp_proxyh_label; GtkWidget *ftp_proxyp_label; GtkWidget *ftp_httpgw; GtkWidget *ftp_dirtyp; GtkWidget *gopher_proxyh_label; GtkWidget *gopher_proxyp_label; GtkWidget *gopher_httpgw; GtkWidget *retry_label; GtkWidget *redir_label; GtkWidget *reget_label; GtkWidget *hour_label; GtkWidget *min_label; GtkWidget *year_label; GtkWidget *month_combo; GtkWidget *auth_label; GtkWidget *pass_label; GtkWidget *auth_reuse_nonce; GtkWidget *proxy_auth_label; GtkWidget *proxy_pass_label; GtkWidget *auth_reuse_proxy_nonce; GtkWidget *proxy_auth_sw; GtkWidget *from_label; GtkWidget *subdir_label; GtkWidget *timeout_label; GtkWidget *config_shell; GtkWidget *about_shell; GtkWidget *calendar; GtkWidget *alanglist; GtkWidget *mimelist; GtkWidget *amimelist; GtkWidget *mimet_entry; GtkWidget *prefixlist; GtkWidget *prefix_label; GtkWidget *prefix_sw; GtkWidget *sufixlist; GtkWidget *sufix_label; GtkWidget *sufix_sw; GtkWidget *domain_sw; GtkWidget *domain_list; GtkWidget *domain_entry; GtkWidget *hosts_sw; GtkWidget *hosts_list; GtkWidget *hosts_entry; GtkWidget *pattern_label; GtkWidget *url_pattern_label; GtkWidget *sleep_label; GtkWidget *cfg_sch; GtkWidget *cfg_limits; GtkWidget *mbb_cfg; GtkWidget *mbb_mode; GtkWidget *bt_cfg; GtkWidget *bt_lim; GtkWidget *bt_bg; GtkWidget *bt_rest; GtkWidget *bt_start; GtkWidget *bt_stop; GtkWidget *bt_break; GtkWidget *bt_exit; GtkWidget *mea_rest; GtkWidget *mea_start; GtkWidget *mea_stop; GtkWidget *mea_break; GtkWidget *mtb_rest; GtkWidget *mtb_start; GtkWidget *mtb_stop; GtkWidget *mtb_break; GtkWidget *toolbar; GtkWidget *minitb_label; GtkWidget *me_debug; GtkWidget *me_quiet; #ifdef WITH_TREE GtkWidget *tree_widget; GtkWidget *tree_shell; GtkWidget *tree_help; GtkWidget *tmenu; GtkWidget *me_disable_url; GtkWidget *me_enable_url; GtkWidget *me_download_url; GtkWidget *me_browse_url; GtkWidget *me_prop_url; #endif #ifdef WITH_TREE urltype_icon icon; /*** icons in URL tree preview ***/ #endif #ifdef HAVE_MT GtkWidget *immessages; GtkWidget *nthr; GtkWidget *status_list; #else GtkWidget *status_size; GtkWidget *status_rate; GtkWidget *status_et; GtkWidget *status_rt; #endif GtkWidget *status_done; GtkWidget *status_queue; GtkWidget *status_fail; GtkWidget *status_rej; GtkWidget *status_msg; bool_t _go_bg; } Gtk_nfo; /*** gui_tools.c ***/ extern GtkWidget *guitl_timesel_new(GtkWidget **, GtkWidget **, GtkWidget **, GtkWidget **, GtkWidget **); extern GtkWidget *guitl_tab_add_entry(GtkWidget *, char *, guint, guint, guint); extern GtkWidget *guitl_tab_add_numentry(GtkWidget *, char *, guint, guint, guint); extern GtkWidget *guitl_tab_add_doubleentry(GtkWidget *, char *, guint, guint, guint, guint); extern GtkWidget *guitl_tab_add_enum(GtkWidget *, char *, guint, guint, const char **, guint); extern GtkWidget *guitl_tab_add_path_entry_full(GtkWidget *, char *, guint, guint, int, char *); extern GtkWidget *guitl_tab_add_path_entry(GtkWidget *, char *, guint, guint, int); extern GtkWidget *guitl_new_edit_list(GtkWidget **, GtkWidget **, char *, GtkWidget **, GtkWidget **, GtkWidget **, GtkWidget **, gboolean, const char **); extern GtkWidget *guitl_pixmap_button(char **, char *, char *); extern Icon *guitl_load_pixmap(char **); extern void guitl_ListDeleteSelected(GtkObject *, gpointer); extern void guitl_ListInsertEntry(GtkObject *, gpointer); extern void guitl_ListModifyEntry(GtkObject *, gpointer); extern void guitl_ListClear(GtkObject *, gpointer); extern void guitl_ListCopyToEntry(GtkObject *, int, int, GdkEvent *, gpointer); extern void guitl_ListInsertList(GtkObject *, gpointer); extern void guitl_PopdownW(GtkObject *, gpointer func_data); extern void guitl_menu_attach(GtkWidget *, GtkWidget *); extern GtkWidget *guitl_menu_parent(GtkWidget *); extern void guitl_set_clipboard_content(char *); extern void guitl_clist_selection_to_clipboard(GtkWidget *, GtkWidget *); extern GtkWidget *guitl_toolbar_button(GtkWidget *, char *, char *, char **, GtkSignalFunc, gpointer, char *); extern GtkWidget *guitl_tab_add_edit_entry(GtkWidget *, char *, char *, guint, guint, guint); /*** gui_tree.c ***/ extern void gui_build_tree_preview(int); extern gint gui_tree_list_events(GtkWidget *, GdkEvent *); extern void gui_SelectTreeNode(GtkObject *, gpointer); /*** gui_sched.c ***/ extern void gui_build_scheduler(int); /*** gui_scenario.c ***/ extern void gui_build_scenario_loader(int); extern void gui_build_scenario_adder(int); extern void gui_build_scenario_saver(int); /*** gui_main.c ***/ extern void gui_set_debug_level_mi(void); extern const GtkTargetEntry dragtypes[3]; extern void gui_window_drop_url(GtkWidget *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint, gpointer); extern void gui_PopdownWC(GtkObject *, gpointer); extern void gui_PopupW(GtkObject *, gpointer); /*** gui_addurl.c ***/ extern void gui_build_addurl(int); /*** gui_common.c ***/ extern void gui_build_config_common(int); /*** gui_limits.c ***/ extern void gui_build_config_limits(int); /*** gui_about.c ***/ extern void gui_build_about(int); /*** gui_jscons.c ***/ extern void gui_pjs_console(int); /******************************************/ /* global GUI configuration structructure */ /******************************************/ extern Gtk_nfo gui_cfg; #endif #endif pavuk-0.9.35/src/icons/0000777000175000001440000000000010567011366011646 500000000000000pavuk-0.9.35/src/icons/break_small.xpm0000644000175000001440000000070707667306551014602 00000000000000/* XPM */ static char * break_small_xpm[] = { "19 16 2 1", " c None", ". c #000000", " . ", " .. ", " .. ", " .. ", " .. ", " .... .. ...", ". .. .. .... ", ". ........... ", " .... .... ", " .. ", " ... ", " . . ", " . . ", " . . ", " ... ", " "}; pavuk-0.9.35/src/icons/clear.xpm0000644000175000001440000000260407667306551013412 00000000000000/* XPM */ static char * clear_xpm[] = { "22 20 56 1", " c None", ". c #000000", "+ c #7C6149", "@ c #BCA189", "# c #D9C9BB", "$ c #7D624A", "% c #7B6049", "& c #BDA28A", "* c #34291F", "= c #362A20", "- c #654F3C", "; c #060503", "> c #0E0B08", ", c #725944", "' c #7A6049", ") c #795F48", "! c #A78363", "~ c #463729", "{ c #070504", "] c #725A43", "^ c #A17E60", "/ c #8B9585", "( c #5A6156", "_ c #030302", ": c #9D7B5D", "< c #403226", "[ c #ACB8A4", "} c #2D231A", "| c #715943", "1 c #84795F", "2 c #EBD8A9", "3 c #AAA07D", "4 c #CFCFCF", "5 c #CFCAA6", "6 c #B0A27F", "7 c #555555", "8 c #9B987C", "9 c #2A2D28", "0 c #80826E", "a c #9A8F71", "b c #C6B890", "c c #8D8870", "d c #BABEA4", "e c #AAAA8D", "f c #85856E", "g c #757764", "h c #65614D", "i c #898166", "j c #DBD0A7", "k c #B1AD8E", "l c #7C765E", "m c #676450", "n c #75735D", "o c #95957B", "p c #8E917B", "q c #6D6F5C", " .. ", ".+@. ", ".@#$. ", ".%#&* ", " =@#+. ", " .-&&; ", " >,&'. ", " .)!~ ... . ", " {]^; ../(. ", " _:<.[[[/. . ", " }|[[[[.1. . ", " .[[[[.23. . ", " .[[[[.2221. . . ", " .[[[[.22145... ", " ./[[.2222.56.. . .", " .7/.22622890a... ", " ..b22bcdef.gh... ", " .i3jk8.lfm.. ", " .9nopq... ", " .... "}; pavuk-0.9.35/src/icons/break.xpm0000644000175000001440000000260607667306551013412 00000000000000/* XPM */ static char * break_xpm[] = { "32 32 14 1", " c None", ". c #040202", "+ c #C80505", "@ c #D60202", "# c #B00606", "$ c #970808", "% c #F10202", "& c #870A0A", "* c #700B0B", "= c #500E0E", "- c #351111", "; c #000000", "> c #FFFFFF", ", c #A0A0A0", " ....... ", " .+@###$$.. ", " ..@@@+###$$$.. ", " .@%@@@@@+#$$$&*. ", " .%%%%%@@+###$$***. ", " .%%%%%%%@@@##$$$***. ", " .%%%%%%%%@@@###$&**=. ", " .%%%%%%%%@@@##$$&&**=. ", " .@@%%%%%%%%@+###$&**==. ", " .@%%%%%%%%@+@##$$$***==. ", ".@+@@%%%%%@@@###$$***===. ", ".#+@@@%@%@@+@##$$$&*=*=-. ", ".##@@@@@@@++#;;;;****==-. ;;;; ", ".####++@#@###;>>>;**==-=.;>>>; ", ".$######+####;>>>>;*==--;>>>>; ", " .$########$$;>>>>>;==-;>>>>>; ", " .$$$$#$#$$$$$;>>>>>;-;>>>>>; ", " .&$$$$$$$$***;>>>>>;>>>>>; ", " .&*&*$*$**$***;>>>>>,>>>; ", " .*$***$*****==;>>>>>,>; ", " *.******=*=====;>>>>>; ", " =.**=*======-;>,>>>>>; ", " -.======--;>>>,>>>>>; ", " ..==---;>>>>>;>>>>>; ", " ....;>>>>>; ;>>>>>; ", " ;>>>>>; ;>>>>>; ", " ;>>>>; ;>>>>; ", " ;>>>; ;>>>; ", " ;;;; ;;;; ", " ", " ", " "}; pavuk-0.9.35/src/icons/apply.xpm0000644000175000001440000000113207667306551013444 00000000000000/* XPM */ static char * apply_xpm[] = { "16 14 18 1", " c None", ". c #000000", "+ c #B3C2A7", "@ c #708C58", "# c #859D71", "$ c #627B4D", "% c #97AB86", "& c #566C43", "* c #A2BD9E", "= c #789774", "- c #88AC84", "; c #5E764A", "> c #698566", ", c #6D8855", "' c #688251", ") c #668050", "! c #6D8956", "~ c #4F633E", " .. ", " .+@. ", " .#$. ", " .%@. ", " .. .#&. ", " .*=. .#@. ", " .--.. .@&. ", " .-=..;@. ", " .-->.,&. ", " .--'). ", " .-!~. ", " .--. ", " .>. ", " . "}; pavuk-0.9.35/src/icons/browse.xpm0000644000175000001440000000151307667306551013623 00000000000000/* XPM */ static char * browse_xpm[] = { "16 14 34 1", " c None", ". c #000000", "+ c #B6BB9A", "@ c #9A9D82", "# c #9DA285", "$ c #858871", "% c #A9AC97", "& c #90937A", "* c #A1A588", "= c #8D9178", "- c #81846F", "; c #696B5A", "> c #595B4C", ", c #313229", "' c #868972", ") c #DBDEC5", "! c #DFE2CD", "~ c #CED3B2", "{ c #505144", "] c #606152", "^ c #E3E5D4", "/ c #C7CDA4", "( c #A5AA85", "_ c #C3C99E", ": c #55574A", "< c #D6D8C9", "[ c #787C61", "} c #353535", "| c #A0A487", "1 c #4D4F44", "2 c #D7DBC0", "3 c #686B54", "4 c #B7BAA3", "5 c #8A8F70", " .... ", " .+@+@. ", " .#$#$#$...... ", " .%&*&*&*=-&-;.", " ...........>,'.", ".)!~!~!~!~!~.{].", ".^/(_(_(_(_(.{:.", " .<_(_(_(_(_[.:.", " }!|_(_(_(_(_.1.", " }2(_(_(_(_(3..", " .4(5(5(5(5(5..", " ............ ", " ", " "}; pavuk-0.9.35/src/icons/save.xpm0000644000175000001440000000141007667306551013254 00000000000000/* XPM */ static char * save_xpm[] = { "24 20 11 1", " c None", ". c #020204", "+ c #6C9AA4", "@ c #C0D2D6", "# c #F0F2F3", "$ c #355157", "% c #CBBB82", "& c #516E74", "* c #283439", "= c #82AFB7", "- c #8B7B40", " . ", " .%. ", " .. .%-. ", " ..+*..%-. ", " ..@@#+.%-. ", " ..@@@##.%-. ", " ..@@@###.%-. ", " ..+@@####.%-.*. ", " .=@@##=##.%-.#+. ", " .+=##+##.%-.##+*. ", " .@##-#%-..##+++. ", " .&=##-..##++$$+*. ", " .@##=##++*$$+$+. ", " .&=##++*=##$=$+*. ", " .=++$@###@%$+$*. ", " .&=+@#$@##@++*.. ", " .=+$#*+@#%$.. ", " .&++@#%@-*. ", " .$+$#+.. ", " ..... "}; pavuk-0.9.35/src/icons/limits.xpm0000644000175000001440000000257007667306551013627 00000000000000/* XPM */ static char * limits_xpm[] = { "32 32 13 1", " c None", ". c #020204", "+ c #FE0204", "@ c #0A0A87", "# c #0505C8", "$ c #0E0E48", "% c #0B0B71", "& c #0202F1", "* c #111135", "= c #0606B0", "- c #080897", "; c #0202D6", "> c #0E0E58", " ....... ", " .#;===--.. ", " ..;;;#===---.. ", " .&;;;;;;#=---@%. ", " .&&&&&;;#===--%%%. ", " .&&&&&&&;;;==---%%%. ", " .&&&&&&&&;;;===-@%%>. ", " .&&&&&&&&;;;==---%%%$. ", " .;&&&&&&&&&;#===-@%%>$. ", " .;;&&&&&&&;;#==---%%%>*. ", ".#;;&&&&&&;;;===--%%%>$*. ", ".=#;;;&;&;;#;==---@%>%>$. ", ".==#;;;;;;#====--%%%%$$*. ", ".====##;=#;===---@%%>>**. ", ".-======#====---%%%>$$$*. ", " .-=======-=.--@%%%%>$**. . ", " .----=-=---..%%%%$$$**. .. ", " .---------.+.%>%>$$**. .+. ", " .@%@%-%@%%.++.%$$$**. .++. ", " .%-%%%@%%.+++.$$**.*.+++. ", " %.%%%%%%%.++++.***..++++. ", " $.%%>>>>.+++++....+++++. ", " *.$>$$.++++++..++++++. ", " ..$$.+++++. .+++++. ", " ...++++. .++++. ", " .+++. .+++. ", " .++. .++. ", " .+. .+. ", " .. .. ", " . . ", " ", " "}; pavuk-0.9.35/src/icons/restart_small.xpm0000644000175000001440000000112107667306551015171 00000000000000/* XPM */ static char * restart_small_xpm[] = { "19 16 11 1", " c None", ". c #000000", "+ c #566B43", "@ c #4C603C", "# c #526741", "$ c #5A7046", "% c #445636", "& c #37452B", "* c #425334", "= c #475937", "- c #5C7449", " . ", " .. ", " .+@... ", " .#$##@%.. ", " .+#...%%. ", " . .. .&. ", " . . .&. ", " .. .. ", " .. .. ", " .*. . . ", " .*. .. . ", " .%@...#=. ", " ..##-#@#. ", " ...@%. ", " .. ", " . "}; pavuk-0.9.35/src/icons/modify.xpm0000644000175000001440000000167007667306551013615 00000000000000/* XPM */ static char * modify_xpm[] = { "22 19 27 1", " c None", ". c #000000", "+ c #D37F71", "@ c #37452B", "# c #CE918A", "$ c #D4897A", "% c #67102D", "& c #C47474", "* c #D69788", "= c #445636", "- c #CB8984", "; c #D79C8D", "> c #526741", ", c #C8807D", "' c #4C603C", ") c #566B43", "! c #5A7046", "~ c #577A4D", "{ c #4C6B43", "] c #76996C", "^ c #9BB594", "/ c #648C58", "( c #DAE3D6", "_ c #67865E", ": c #A7BDA0", "< c #8EAB86", "[ c #425D3A", " . .... ", " .+. ...@.. ", " .#$%. . .@. ", " .&#*%%. .=. ", " .&-#;%%%. .>. ", ".&,-#;%%%%. ..>>'.. ", ".&,-#*%%%. .)!). ", " ..&,$%%. .>. ", " ..+%. . ", " .. ", " ... ", " ..~~{.. ", " .]^^]/. ", " .~^(^]/{. ", " ._:^ c #FFFFFF", " ....... ", " .+@###$$.. ", " ..@@@+###$$$.. ", " .@%@@@@@+#$$$&*. ", " .%%%%%@@+###$$***. ", " .%%%%%%%@@@##$$$***. ", " .%%%%%%%%@@@###$&**=. ", " .%%%%%%%%@@@##$$&&**=. ", " .@@%%%%%%%%@+###$&**==. ", " .@%%%%%%%%@+@##$$$***==. ", ".@+@@%%%%%@@@###$$***===. ", ".#+@@@%@%@@+@##$$$&*=*=-. ", ".##@@@@@@@++###$$****==-. ", ".####++@#@####$$&$**==-=. ", ".$######+####$$$****=;--. ", " .$########$$$&$***==;;-. ", " .$$$$#$#$$$$$$***===;>; ", " .&$$$$$$$$****=====;>>; ", " .&*&*$*$;;;;;;;;;;;;>>>; ", " .*$***$;>>>>>>>>>>>>>>>; ", " *.*****;>>>>>>>>>>>>>>>>; ", " =.**=*;>>>>>>>>>>>>>>>>>; ", " -.==;>>>>>>>>>>>>>>>>; ", " ..;>>>>>>>>>>>>>>>; ", " ;;;;;;;;;;;;>>>; ", " ;>>; ", " ;>; ", " ;; ", " ; ", " ", " ", " "}; pavuk-0.9.35/src/icons/minimize_small.xpm0000644000175000001440000000067007667306551015336 00000000000000/* XPM */ static char * minimize_small_xpm[] = { "16 16 4 1", " c None", ". c #060607", "+ c #82A276", "@ c #E3E3E3", " ", " .............. ", " .@@@@@@@+++++. ", " .@@@@@+++++. ", " .@@@@@+++++. ", " .@@@@++++. ", " .@@@@++++. ", " .@@@+++. ", " .@@@+++. ", " .@@++. ", " .@@++. ", " .++. ", " .++. ", " .. ", " .. ", " "}; pavuk-0.9.35/src/icons/configure.xpm0000644000175000001440000000257307667306551014312 00000000000000/* XPM */ static char * configure_xpm[] = { "32 32 13 1", " c None", ". c #020204", "+ c #FEFEFC", "@ c #6A6A6C", "# c #0A0A87", "$ c #0505C8", "% c #0E0E52", "& c #0B0B70", "* c #10103A", "= c #0606B0", "- c #0202F1", "; c #080897", "> c #0202D6", " ....... ", " .$>===;;.. ", " ..>>>$===;;;.. ", " .>->>>>>$=;;;#&. ", " .----->>$===;;&&&. ", " .------->>>==;;;&&&. ", " .-------->>>===;#&&%. ", " .-------->>>==;;;&&&%. ", " .>>-------->$===;#&&%%. ", " .>-------->>$==;;;&&&%*. ", ".>$>>----->>>===;;&&&%%.. ", ".=$>>>->->>$>==;;;#&%&.+. ", ".==>>>>>>>$$@..;;&#&&.+++. ", ".====$$$$$==.++.;&&&%%.+++. ", ".;==========.+++.&&&%%*.+++. ", " .;========;;.++.&&%%%*.++++. ", " .;;;==;=;=;;#..+.%%**.++.++. ", " .#;;;;;;;;##&&.+.%%.++. .+. ", " .#&#;&;&&&&&&&%.+..++. .. ", " .&&;&&#&&&&%&%%.+.+. ", " &.&&&&&&&%%%%**..+. ", " *.&%&%%&%%%%*.++.+... ", " *.%%%%%***.++. .+++. ", " ..*****.++. .+@++. ", " .....++. .++@++. ", " .++. .++@++. ", " .++. .++@+. ", " .+. .++@. ", " . .... ", " ", " ", " "}; pavuk-0.9.35/src/icons/continue_small.xpm0000644000175000001440000000076607667306551015347 00000000000000/* XPM */ static char * continue_small_xpm[] = { "19 14 8 1", " c None", ". c #000000", "+ c #4C603C", "@ c #566B43", "# c #445636", "$ c #526741", "% c #5A7046", "& c #37452B", " ", " . ", " .. ", " ...+@. ", " ..#+$$%$. ", " .##...$@. ", " .&. .. ", " .&. . ", " .. ", " .. ", " . ", " . ", " ", " "}; pavuk-0.9.35/src/icons/restart.xpm0000644000175000001440000000257107667306551014013 00000000000000/* XPM */ static char * restart_xpm[] = { "32 32 13 1", " c None", ". c #020402", "+ c #05C805", "@ c #02D602", "# c #06B006", "$ c #089708", "% c #02F102", "& c #0A870A", "* c #0B700B", "= c #0E500E", "- c #000000", "; c #FFFFFF", "> c #113511", " ....... ", " .+@###$$.. ", " ..@@@+###$$$.. ", " .@%@@@@@+#$$$&*. ", " .%%%%%@@+###$$***. ", " .%%%%%%%@@@##$$$***. ", " .%%%%%%%%@@@###$&**=. ", " .%%%%%%%%@@@##$$&&**=. ", " .@@%%%%%%%%@+###$&**==. ", " .@%%%%%%%%@+@##$$$***==. ", ".@+@@%%%%%@@@###$$--*===. ", ".#+@@@%@%@@+@##$$$-;-*=>. ", ".##@@@@@@@++###$---;;-=>. ", ".####++@#@####$-;;;;;;-=. ", ".$######+####$-;;;;;;;;-.- ", " .$########$$-;;;;;;;;--;;- ", " .$$$$#$#$$$$-;;---;;-=.;;;- ", " .&$$$$$$$$*---=*-;->>.-;;;- ", " .&*&*$*$**-;-*==-->>. -;;;- ", " .*$***$*-;;;-==>--.---;;;--- ", " *.*****-;;;;;-=-;;--;;;;;;;- ", " =.**=-;;;;;;;--;;- -;;;;;- ", " >.=---;;;--..-- -;;;- ", " ..=-;;;..> -- -;- ", " ..;;;- -;- --- ", " -;;;- -;;---;;- ", " -;;--;;;;;;;;- ", " ---;;;;;;;;- ", " -;;;;;;- ", " -;;--- ", " -;- ", " -- "}; pavuk-0.9.35/src/icons/close_small.xpm0000644000175000001440000000070707667306551014623 00000000000000/* XPM */ static char * close_small_xpm[] = { "19 16 2 1", " c None", ". c #000000", " ", " ", " . .. ", " .. .... ", " .. ... ", " ..... ", " ... ", " .... ", " ...... ", " .. .... ", " .. .... ", " . .. ", " ", " ", " ", " "}; pavuk-0.9.35/src/icons/schedule.xpm0000644000175000001440000000514107667306551014117 00000000000000/* XPM */ static char * schedule_xpm[] = { "22 21 97 2", " c None", ". c #000000", "+ c #D5D5D5", "@ c #FFFFFF", "# c #B1B1B1", "$ c #EBEBE9", "% c #B4B5B0", "& c #A0A29B", "* c #9FA099", "= c #AAACA5", "- c #C6C7C2", "; c #F5F6F4", "> c #D1D2CF", ", c #979890", "' c #9FA199", ") c #A8A9A1", "! c #ADAFA6", "~ c #B2B3AB", "{ c #B6B8B0", "] c #BABCB4", "^ c #11110F", "/ c #ECECEA", "( c #989991", "_ c #A1A39B", ": c #B0B1A9", "< c #BBBCB5", "[ c #BFC0B8", "} c #C2C4BC", "| c #C1C2BA", "1 c #D1D1D0", "2 c #DEDEDE", "3 c #9C9E96", "4 c #C5C7BF", "5 c #CBCCC5", "6 c #CDCEC6", "7 c #C5C7BE", "8 c #DEDFDA", "9 c #939393", "0 c #9E9F98", "a c #A1A29A", "b c #B5B7AF", "c c #CFD1C8", "d c #D0D2CA", "e c #CCCEC6", "f c #D1D3CB", "g c #9A9B93", "h c #A6A8A0", "i c #C8CAC1", "j c #D6D7D0", "k c #D5D7CF", "l c #D4D5CD", "m c #D3D5CD", "n c #A5A69F", "o c #A8A9A2", "p c #BABBB3", "q c #C9CAC2", "r c #94958E", "s c #D6D8D0", "t c #D7D9D1", "u c #DBDCD5", "v c #BFC0BB", "w c #A8AAA2", "x c #C4C5BD", "y c #B0B2AA", "z c #D7D8D0", "A c #E6E7E2", "B c #F2F2F1", "C c #ADAEA6", "D c #B1B3AB", "E c #BCBDB5", "F c #C6C8C0", "G c #CFD0C9", "H c #D4D6CE", "I c #D5D6CE", "J c #D6D7CF", "K c #E4E4E1", "L c #B3B4AC", "M c #B7B8B0", "N c #BCBEB6", "O c #C4C6BE", "P c #C9CBC3", "Q c #CBCCC4", "R c #D0D1C9", "S c #D4D5D2", "T c #B9B9B9", "U c #F5F5F4", "V c #CFD0CB", "W c #C0C2BB", "X c #C0C2BA", "Y c #C8C9C2", "Z c #D9DAD5", "` c #D9D9D8", " . c #7A7A7A", ".. c #6E926D", "+. c #809F7F", "@. c #5A7759", "#. c #496148", " . . . . . ", " . . + @ @ + # . . ", " . + @ @ @ @ @ @ + # . ", " . + @ $ % & * = - ; + + . ", " . # @ > , ' ) ! ~ { ] ^ + # . ", " . + / ( _ : < [ } | . . 1 + . ", " . # 2 % 3 . . 4 5 6 . . 7 8 + 9 . ", " . + @ 0 a b . . c . . d e f + 9 . ", " . 2 @ g h < i . . . j k l m + 9 . ", " . + @ n o p q r . ( s t t u + 9 . ", " . # 2 v w b x e y z s t t A + 9 . ", " . + B C D E F G H I J t 1 + . ", " . # 2 K L M N O P Q R S + # . ", " . T 2 U V W X Y Z ` + # . . ", " . T 2 2 @ @ 2 + # 9 . . . ", " . . # T T # .. . . . . . . ... ", " . . . . . . ..........+.... ", " . @.@.@.@.@...@.. ", " . . . . . . #.. ", " . . ", " . "}; pavuk-0.9.35/src/icons/ok.xpm0000644000175000001440000000224207667306551012733 00000000000000/* XPM */ static char * ok_xpm[] = { "20 18 47 1", " c None", ". c #10120F", "+ c #000000", "@ c #B6C6AA", "# c #ADBBA1", "$ c #9EAB93", "% c #95A28B", "& c #D5E7C7", "* c #9CA992", "= c #7E8875", "- c #94A08A", "; c #7B8572", "> c #636B5C", ", c #838E7A", "' c #616A5B", ") c #707A69", "! c #AAB89E", "~ c #575E51", "{ c #585F52", "] c #687161", "^ c #798371", "/ c #97A48D", "( c #B2C1A6", "_ c #99A68E", ": c #727C6A", "< c #42483E", "[ c #8A9580", "} c #606859", "| c #41473D", "1 c #818C79", "2 c #5B6255", "3 c #40453C", "4 c #4E5549", "5 c #909C87", "6 c #7C8774", "7 c #555D50", "8 c #3E4339", "9 c #929E88", "0 c #52594C", "a c #393E35", "b c #4C5247", "c c #8F9B85", "d c #6A7363", "e c #4F564A", "f c #51574B", "g c #0E0F0D", "h c #383C34", " ....... ", " +@@@#$$%. ", " .@&*%%%=. ", " .@@%%%%=. ", " .@%%-%%=. ", " . .@%$%%%=. ", " .;. .@%%%%%=. ", " .@>....@%%%,'). ", " .@!;~~~{'>]^/({. ", " .@/%%%%////_%:<. ", " .@_%%%%%%%%%[}|. ", ".@*/%%%%%%%%123. ", " .45%%%%%%%678. ", " .49%%%%-60a. ", " .b5c6;dea. ", " .feg.... ", " .h. ", " . "}; pavuk-0.9.35/src/icons/limit.xpm0000644000175000001440000000115307667306551013440 00000000000000/* XPM */ static char * limit_xpm[] = { "24 16 8 1", " c None", ". c #000000", "+ c #D8BF68", "@ c #D4B753", "# c #D0AE3F", "$ c #CCA62A", "% c #C89E15", "& c #C49600", " ", " ", " ", " .. . . .. ", ".+. . . .+. ", ".@. . . . . .@. ", ".##..#. . . .#..##. ", ".$$$$$$. . . .$$$$$$. ", " ..%%%%. . . .%%%%.. ", " ..&. . . .&.. ", " . . . . ", " . . ", " . . ", " ", " ", " "}; pavuk-0.9.35/src/icons/load.xpm0000644000175000001440000000107507667306551013244 00000000000000/* XPM */ static char * load_xpm[] = { "24 16 5 1", " c None", ". c #000000", "+ c #99907B", "@ c #FFFEF7", "# c #FFFFFF", " .. ", " ...++. ", " .. ...++++@@#... ", " .++..++++@@@@..++. ", " .+++++@@@@@..++++. ", " .++@@@@@..++++++. ", " .++@@@..++++++++. ", " .+@@.++++++++++. ", " .++@.++++++++++. ", " .+@.++++++++++. ", " .++.++++++++.. ", " .+.++++++.. ", " .+.+++++. ", " ..+++.. ", " ..+.. ", " .. "}; pavuk-0.9.35/src/icons/gobg.xpm0000644000175000001440000000260507667306551013243 00000000000000/* XPM */ static char * gobg_xpm[] = { "32 32 14 1", " c None", ". c #040404", "+ c #C8C8C8", "@ c #D6D6D6", "# c #B0B0B0", "$ c #979797", "% c #F1F1F1", "& c #878787", "* c #707070", "= c #505050", "- c #353535", "; c #000000", "> c #FFFFFF", ", c #545454", " ....... ", " .+@###$$.. ", " ..@@@+###$$$.. ", " .@%@@@@@+#$$$&*. ", " .%%%%%@@+###$$***. ", " .%%%%%%%@@@##$$$***. ", " .%%%%%%%%@@@###$&**=. ", " .%%%%%%%%@@@##$$&&**=. ", " .@@%%%%%%%%@+###$&**==. ", " .@%%%%%%%%@+@##$$$***==. ", ".@+@@%%%%%@@@###$$***===. ", ".#+@@@%@%@@+@##$$$&*=*=-. ", ".##@@@@@@@++;;;;;;;;;;;;;;;;;;; ", ".####++@#@##>>>>>>>>>>>>>>>>>>; ", ".$######+###>,;;;;;;;;;;;;;;;>; ", " .$########$>,;>;;;;;;;;;;;;;>; ", " .$$$$#$#$$$>,;;>;;;;;;;;;;;;>; ", " .&$$$$$$$$>,;;;>;;;;;;;;;;;>; ", " .&*&*$*$**>,;;>;;;;;;;;;;;;>; ", " .*$***$**>,;>;;;####;;;;;;>; ", " *.******=>,;;;;;;;;;;;;;;;>; ", " =.**=*==>,;;;;;;.;;;;;;;;>; ", " -.====>,;;;;;;;;;;;;;;;>; ", " ..==>,;;;;;;;;;;;;;;;>; ", " ..>,;;;;;;;;;;;;;;;>; ", " >,,,,,,,,,,,,,,,,>; ", " >>>>>>>>>>>>>>>>>>; ", " ", " ", " ", " ", " "}; pavuk-0.9.35/src/icons/delete.xpm0000644000175000001440000000326007667306551013565 00000000000000/* XPM */ static char * delete_xpm[] = { "20 16 85 1", " c None", ". c #000000", "+ c #252525", "@ c #A8BA9E", "# c #B4C1AB", "$ c #E1E7DD", "% c #838A7D", "& c #909F86", "* c #484E43", "= c #A0AD94", "- c #9EAB91", "; c #B6C4AD", "> c #BFCCB7", ", c #A7B69B", "' c #BEC9B5", ") c #656F5E", "! c #2B2E28", "~ c #353931", "{ c #242622", "] c #9BAA8F", "^ c #9AA78E", "/ c #98A58C", "( c #96A58D", "_ c #D7DED2", ": c #A4B398", "< c #A2B196", "[ c #A0B095", "} c #97A38A", "| c #7C9674", "1 c #B0C0AB", "2 c #CED6C8", "3 c #DAE1D6", "4 c #BBC4B1", "5 c #5B6B57", "6 c #637354", "7 c #748C6B", "8 c #94AA8D", "9 c #8FA58A", "0 c #6F8668", "a c #667961", "b c #5D6E58", "c c #4D5A4B", "d c #485245", "e c #738B6E", "f c #687B63", "g c #5E6F5A", "h c #576452", "i c #495345", "j c #4F5B4B", "k c #3F453D", "l c #687D63", "m c #B9C6B4", "n c #65785F", "o c #9BAE97", "p c #525F4F", "q c #728A6D", "r c #4F5C4C", "s c #6E8468", "t c #4D5849", "u c #9BAD96", "v c #6E8368", "w c #080808", "x c #6E8367", "y c #B7C6B4", "z c #9AAD96", "A c #525F4E", "B c #4D5848", "C c #687A63", "D c #B7C5B4", "E c #6D8367", "F c #4C5848", "G c #809A78", "H c #A0B29A", "I c #60725C", "J c #728A6B", "K c #4F5B4C", "L c #586853", "M c #677A61", "N c #7D9775", "O c #7A9472", "P c #788F71", "Q c #748D6E", "R c #6F8568", "S c #6D8267", "T c #697D64", " ........ ", " +.@#$%&*=-.. ", " .;>,')!~{-]^/. ", " .(_':<[=-]^/}. ", " .|1234=-]^/|5. ", " .67899||0abcd. ", " .+effghijk+. ", " .l++++++++f. ", " .lmnopqrstf. ", " .lmnupqrvtf.www ", " .lmnupqrxtf.wwww ", " .lynzAqrxBC.wwww ", " .lDnzAqrEFC.wwww ", " .GHnzIJKELM.www ", " .NOPQJRST.ww ", " ........w "}; pavuk-0.9.35/src/icons/append.xpm0000644000175000001440000000070407667306551013572 00000000000000/* XPM */ static char * append_xpm[] = { "16 14 8 1", " c None", ". c #000000", "+ c #37452B", "@ c #445636", "# c #526741", "$ c #566B43", "% c #4C603C", "& c #5A7046", " ", " . ", " . ", " .. ", " .. ", " .+. . ", " .+. .. ", " .@@...#$. ", " ..@%##&#. ", " ...%$. ", " .. ", " . ", " ", " "}; pavuk-0.9.35/src/icons/maximize_small.xpm0000644000175000001440000000067007667306551015340 00000000000000/* XPM */ static char * maximize_small_xpm[] = { "16 16 4 1", " c None", ". c #030305", "+ c #84A176", "@ c #E3E3E3", " ", " .. ", " .. ", " .@+. ", " .@+. ", " .@@++. ", " .@@++. ", " .@@@+++. ", " .@@@+++. ", " .@@@@++++. ", " .@@@@++++. ", " .@@@@@+++++. ", " .@@@@@+++++. ", " .@+@@@@++++++. ", " .............. ", " "}; pavuk-0.9.35/src/icons/stop.xpm0000644000175000001440000000264307667306551013314 00000000000000/* XPM */ static char * stop_xpm[] = { "32 32 16 1", " c None", ". c #040302", "+ c #C86605", "@ c #D66A02", "# c #B05A06", "$ c #974F08", "% c #F17902", "& c #87470A", "* c #703B0B", "= c #502B0E", "- c #351D11", "; c #000000", "> c #A80000", ", c #FF0000", "' c #FFFFFF", ") c #FF1C1C", " ....... ", " .+@###$$.. ", " ..@@@+###$$$.. ", " .@%@@@@@+#$$$&*. ", " .%%%%%@@+###$$***. ", " .%%%%%%%@@@##$$$***. ", " .%%%%%%%%@@@###$&**=. ", " .%%%%%%%%@@@##$$&&**=. ", " .@@%%%%%%%%@+###$&**==. ", " .@%%%%%%%%@+@##$$$***==. ", ".@+@@%%%%%@@@###$$***===. ", ".#+@@@%@%@@+@##$$$&*=*=-. ", ".##@@@@@@@++###$$;;;;;;;; ", ".####++@#@####$$;>,,,,,,>; ", ".$######+####$$;>,,,,,,,,>; ", " .$########$$$;>,,,,,,,,,,>; ", " .$$$$#$#$$$$;>,,,,,,,,,,,,>; ", " .&$$$$$$$$;>,,,,,''''',,,,>; ", " .&*&*$*$**;,,,,,'''''',,,,,; ", " .*$***$**;,,,,,''',,',,,,,; ", " *.******=;,,,,,,'',,,,,,,,; ", " =.**=*==;,,,,,,,''',,,,,,; ", " -.====;,,,,,,,,''',,,,,; ", " ..==;,,,,,',,''',,,,,; ", " ...>,,,,'''''',,,,>; ", " ;>,,,''''',,,,>; ", " ;>,,,,,,),,,>; ", " ;>,,,,,,,,>; ", " ;>,,,,,,>; ", " ;;;;;;;; ", " ", " "}; pavuk-0.9.35/src/icons/common.xpm0000644000175000001440000000253007667306551013612 00000000000000/* XPM */ static char * common_xpm[] = { "22 20 53 1", " c None", ". c #000000", "+ c #E5E5E5", "@ c #CECECE", "# c #CDCDCD", "$ c #DCCB94", "% c #DCDCDC", "& c #C7C7C7", "* c #8E7D45", "= c #CFCFCF", "- c #C1C1C1", "; c #AB5959", "> c #D9D9D9", ", c #878787", "' c #DBDBDB", ") c #D4D4D4", "! c #A84F4F", "~ c #A7A7A7", "{ c #9B9B9B", "] c #F5F5F5", "^ c #F3F3F3", "/ c #A65757", "( c #6E6E6E", "_ c #DACACA", ": c #AC5757", "< c #C48B8B", "[ c #AA6C6C", "} c #E9DDDD", "| c #A65353", "1 c #C6C6C6", "2 c #D4C38D", "3 c #E4E4E4", "4 c #D6D6D0", "5 c #C0C0BB", "6 c #828279", "7 c #AD8E30", "8 c #756020", "9 c #C5C5BF", "0 c #A7A79A", "a c #818174", "b c #DFE1E1", "c c #D6E1E0", "d c #060605", "e c #A3A395", "f c #C8C8C8", "g c #8B8B7D", "h c #7E7E71", "i c #B2B9B6", "j c #D9D9D2", "k c #D9D9D3", "l c #DADAD4", "m c #DADAD9", "n c #DADADA", " .. ", " ..+@. . ", " ..#+++. .$. ", " ...%+++++&. .$*. ", " ..#++++=+-++. .$*. ", " .%++++;+>+=,+'.$*. ", " .)++++!~+{,++.$*. ", " .++]^/+(+++.$*. ", " .%_:<[++++.$*.>. ", " .+}|/+++.$*.=+1. ", " .)+++++.2*.>3456. ", " .+++]78..90000a. ", " .%+bcd.ee0000f. ", " .+0ghijkl+m.. ", " .)+++++++f. ", " .++++++.. ", " .%+++f. ", " .+n.. ", " .. ", " "}; pavuk-0.9.35/src/icons/exit.xpm0000644000175000001440000000260507667306551013276 00000000000000/* XPM */ static char * exit_xpm[] = { "32 32 14 1", " c None", ". c #040404", "+ c #707070", "@ c #A0A0A0", "# c #909090", "$ c #808080", "% c #C0C0C0", "& c #505050", "* c #404040", "= c #202020", "- c #101010", "; c #000000", "> c #FF0000", ", c #700000", " ....... ", " .+@###$$.. ", " ..@@@+###$$$.. ", " .@%@@@@@+#$$$&*. ", " .%%%%%@@+###$$***. ", " .%%%%%%%@@@##$$$***. ", " .%%%%%%%%@@@###$&**=. ", " .%%%%%%%%@@@##$$&&**=. ", " .@@%%%%%%%%@+###$&**==. ", " .@%%%%%%%%@+@##$$$***==. ", ".@+@@%%%%%@@@###$$***===. ", ".#+@@@%@%@@+@##$$$&*=*=-. ", ".##@@@@@@@++#;;;;****==-. ;;;; ", ".####++@#@###;>>>;**==-=.;>>>; ", ".$######+####;>>>>;*==--;>>>>; ", " .$########$$;>>>>>;==-;>>>>>; ", " .$$$$#$#$$$$$;>>>>>;-;>>>>>; ", " .&$$$$$$$$***;>>>>>;>>>>>; ", " .&*&*$*$**$***;>>>>>,>>>; ", " .*$***$*****==;>>>>>,>; ", " *.******=*=====;>>>>>; ", " =.**=*======-;>,>>>>>; ", " -.======-;;>>>,>>>>>; ", " ..==---;>>>>>;>>>>>; ", " ....;>>>>>; ;>>>>>; ", " ;>>>>>; ;>>>>>; ", " ;>>>>; ;>>>>; ", " ;>>>; ;>>>; ", " ;;;; ;;;; ", " ", " ", " "}; pavuk-0.9.35/src/icons/cancel.xpm0000644000175000001440000000066607667306551013557 00000000000000/* XPM */ static char * cancel_xpm[] = { "15 14 8 1", " c None", ". c #000000", "+ c #C46D74", "@ c #9F3C44", "# c #B5444E", "$ c #BD5A62", "% c #7B2D34", "& c #8C343C", " .. . ", " .+@. .#. ", " .##. .$#. ", " .#@. .$#%. ", " .##..$#&. ", " .####@. ", " .####. ", " .$###. ", " .$####. ", " .$#&..#&. ", " .+#&. .@#. ", " .#&. .#@. ", " .. .@#. ", " .. "}; pavuk-0.9.35/src/log.c0000644000175000001440000002357310327624117011404 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #define _GNU_SOURCE #define __USE_GNU #include "config.h" #include #include #include #include #include #include #include #include #include #include "url.h" #include "doc.h" #include "tools.h" #include "log.h" #include "errcode.h" static void _log_str(char *); #ifndef HAVE_DPRINTF #include static int dprintf(int fd, const char *format, ...) { int n; va_list ap; static char buffer[1024]; va_start(ap, format); n = vsnprintf(buffer, 1024, format, ap); va_end(ap); return write(fd, buffer, n); } #endif static char *errcodetype(int ecode) { switch (ecode) { case ERR_NOERROR: return "OK"; case ERR_STORE_DOC: case ERR_FILE_OPEN: case ERR_DIR_URL: case ERR_UNKNOWN: case ERR_PROXY_CONNECT: case ERR_FTP_UNKNOWN: case ERR_FTP_BUSER: case ERR_FTP_BPASS: case ERR_HTTP_UNKNOWN: case ERR_HTTP_AUTH: case ERR_HTTP_PAY: case ERR_HTTP_BADRQ: case ERR_HTTP_FORB: case ERR_HTTP_SERV: case ERR_GOPHER_UNKNOWN: return "FATAL"; case ERR_LOCKED: case ERR_BIGGER: case ERR_NOMIMET: case ERR_BREAK: case ERR_OUTTIME: case ERR_SCRIPT_DISABLED: case ERR_SMALLER: case ERR_ZERO_SIZE: case ERR_PROCESSED: case ERR_UDISABLED: case ERR_RDISABLED: case ERR_FTP_NOREGET: case ERR_FTP_ACTUAL: case ERR_FTP_NOTRANSFER: case ERR_FTP_NOMDTM: case ERR_FTP_DIRNO: case ERR_HTTP_NOREGET: case ERR_HTTP_REDIR: case ERR_HTTP_ACTUAL: return "WARN"; case ERR_READ: case ERR_FTP_BDIR: case ERR_FTP_CONNECT: case ERR_FTP_DATACON: case ERR_FTP_GET: case ERR_FTP_NODIR: case ERR_FTP_TRUNC: case ERR_HTTP_CONNECT: case ERR_HTTP_SNDREQ: case ERR_HTTP_TRUNC: case ERR_HTTP_CYCLIC: case ERR_HTTP_NFOUND: case ERR_GOPHER_CONNECT: case ERR_HTTPS_CONNECT: return "ERR"; default: return "UNKNOWN"; } } void short_log(doc * docp, url * urlp) { int fd; char pom[1024]; char *p, *p1; time_t t = time(NULL); if(!cfg.short_logfile) return; LOCK_SLOG; fd = open(cfg.short_logfile, O_BINARY | O_CREAT | O_APPEND | O_WRONLY, S_IRUSR | S_IWUSR); if(fd < 0) { xperror("shortlog"); UNLOCK_SLOG; return; } if(_flock(fd, cfg.short_logfile, O_BINARY | O_CREAT | O_APPEND | O_WRONLY, TRUE)) { close(fd); UNLOCK_SLOG; return; } p1 = ctime(&t); p = strchr(p1, '\n'); if(p) *p = '\0'; snprintf(pom, sizeof(pom), "%d %s %d/%ld %s %d ", (int) getpid(), p1, docp->doc_nr, cfg.total_cnt, errcodetype(docp->errcode), docp->errcode); write(fd, pom, strlen(pom)); p = url_to_urlstr(urlp, FALSE); write(fd, p, strlen(p)); _free(p); if(urlp->parent_url) { write(fd, " ", 1); LOCK_URL(urlp); p = url_to_urlstr((url *) urlp->parent_url->data, FALSE); UNLOCK_URL(urlp); write(fd, p, strlen(p)); _free(p); } else { write(fd, " [none]", 7); } p = url_to_filename(urlp, FALSE); write(fd, " ", 1); write(fd, p, strlen(p)); sprintf(pom, " %ld", (long) docp->size); write(fd, pom, strlen(pom)); t = doc_etime(docp, FALSE); sprintf(pom, " %ld.%03ld", t / 1000, t % 1000); write(fd, pom, strlen(pom)); if(docp->mime) { int l = strcspn(docp->mime, "\r\n"); write(fd, " ", 1); write(fd, docp->mime, l); } write(fd, "\n", 1); _funlock(fd); close(fd); UNLOCK_SLOG; } static int time_relative_object(void) { return cfg.time_relative && !strcmp(cfg.time_relative, "object"); } static int time_relative_program(void) { return cfg.time_relative && !strcmp(cfg.time_relative, "program"); } static int log_num(int fd, const char *name, int width, long num) { int rv = -1; /* we print space before the number, but decrease * width to ensure there is always at least * one space before the number */ rv = dprintf(fd, " %*ld", width - 1, num); return rv; } static int log_time(int fd, const char *name, int width, doc * docp, const struct timeval *end, const struct timeval *begin) { long time_diff = -1; const struct timeval *relative = begin; if(time_relative_object()) { relative = &docp->hr_start_time; } else if(time_relative_program()) { relative = &cfg.hr_start_time; } if(timerisset(end) && timerisset(begin) && timerisset(relative)) { time_diff = (end->tv_sec - relative->tv_sec) * 1000 + (end->tv_usec - relative->tv_usec) / 1000.0; return log_num(fd, name, width, time_diff); } else { if(cfg.sdemo_mode) { return log_num(fd, name, width, time_diff); } else { return dprintf(fd, " %*s", width - 1, "*"); } } } /*** Logs timings information. Modelled after short_log() above ***/ void time_log(doc * docp) { int fd = 1; char *p; char pom[1024] = "\0"; static int header_printed = 0; /* The following are not enough in all cases, but the space * is just too precious in common case to care */ int time_width = 6; const int size_width = 8; const int result_width = strlen(" HTTP/1.1 302 Moved Temporarily"); if(!cfg.time_logfile) { return; } LOCK_TLOG; if(strcmp(cfg.time_logfile, "-")) { fd = open(cfg.time_logfile, O_BINARY | O_CREAT | O_APPEND | O_WRONLY, S_IRUSR | S_IWUSR); if(fd < 0) { xperror("timelog"); UNLOCK_TLOG; return; } if(_flock(fd, cfg.time_logfile, O_BINARY | O_CREAT | O_APPEND | O_WRONLY, TRUE)) { close(fd); UNLOCK_TLOG; return; } } if(time_relative_object()) { time_width = 6; } else if(time_relative_program()) { time_width = 7; } /* Log file is locked. No race here */ if(!header_printed) { dprintf(fd, "%*s", time_width, "START"); dprintf(fd, "%*s", time_width, "END"); dprintf(fd, "%*s", time_width, "DNS"); dprintf(fd, "%*s", time_width, "CONN"); dprintf(fd, "%*s", time_width, "FB"); dprintf(fd, "%*s", time_width, "LB"); dprintf(fd, "%*s", time_width, "TOTAL"); dprintf(fd, "%*s", size_width, "SIZE"); dprintf(fd, " %-*s", result_width - 1, "RESULT"); dprintf(fd, " %s\n", "URL"); header_printed = 1; } log_time(fd, "START", time_width, docp, &docp->hr_start_time, &cfg.hr_start_time); log_time(fd, "END", time_width, docp, &docp->end_time, &cfg.hr_start_time); log_time(fd, "DNS", time_width, docp, &docp->dns_time, &docp->hr_start_time); log_time(fd, "CONN", time_width, docp, &docp->connect_time, &docp->dns_time); log_time(fd, "FB", time_width, docp, &docp->first_byte_time, &docp->connect_time); log_time(fd, "LB", time_width, docp, &docp->end_time, &docp->first_byte_time); log_time(fd, "TOTAL", time_width, docp, &docp->end_time, &docp->hr_start_time); log_num(fd, "SIZE", size_width, docp->size); if(docp->mime) { int len = strcspn(docp->mime, "\r\n"); if(len >= result_width) len = result_width - 1; if(len) { strncpy(pom, docp->mime, len); /* FIXME: Security */ *(pom + len) = '\0'; } else { strcat(pom, errcodetype(docp->errcode)); /* FIXME: Security */ } dprintf(fd, " %-*s", result_width - 1, pom); } else { dprintf(fd, " %-*s", result_width - 1, errcodetype(docp->errcode)); } p = url_to_urlstr(docp->doc_url, FALSE); dprintf(fd, " %s\n", p); _free(p); if(fd != 1) { _funlock(fd); close(fd); } UNLOCK_TLOG; } static int log_fd = -1; int log_start(char *filename) { static char *log_filename = NULL; bool_t start_log = FALSE; bool_t stop_log = FALSE; LOCK_LOG; if(!filename) stop_log = TRUE; else { if(log_filename) { if(strcmp(log_filename, filename)) { start_log = TRUE; stop_log = TRUE; } } else start_log = TRUE; } if(stop_log) { if(log_fd >= 0) { char pom[1024]; time_t t = time(NULL); LOCK_TIME; strftime(pom, sizeof(pom), gettext("Ending log : %H:%M:%S %d.%m.%Y\n"), localtime(&t)); UNLOCK_TIME; _log_str(pom); _funlock(log_fd); close(log_fd); } } if(start_log) { int nr = 0; char nfn[PATH_MAX]; strncpy(nfn, filename, sizeof(nfn)); nfn[sizeof(nfn) - 1] = '\0'; while(TRUE) { log_fd = open(nfn, O_BINARY | O_CREAT | O_APPEND | O_WRONLY, 0644); if(log_fd < 0) { xperror(nfn); xprintf(0, gettext("Unable to open log file - disabling logging\n")); break; } if(_flock(log_fd, nfn, O_BINARY | O_CREAT | O_APPEND | O_WRONLY, FALSE)) { close(log_fd); log_fd = -1; xprintf(0, gettext("Log file is locked by another process - ")); if(cfg.gen_logname) { snprintf(nfn, sizeof(nfn), "%s.%04d", filename, nr); xprintf(0, gettext("generating new log filename\n")); nr++; } else { xprintf(0, gettext("disabling logging\n")); break; } } else { break; } } if(nr > 0) { filename = nfn; _free(cfg.logfile); cfg.logfile = tl_strdup(nfn); } if(log_fd >= 0) { char pom[1024]; time_t t = time(NULL); LOCK_TIME; strftime(pom, sizeof(pom), gettext("Starting log : %H:%M:%S %d.%m.%Y\n"), localtime(&t)); UNLOCK_TIME; _log_str(pom); } } _free(log_filename); log_filename = tl_strdup(filename); UNLOCK_LOG; return 0; } static void _log_str(char *str) { if(log_fd >= 0) write(log_fd, str, strlen(str)); } void log_str(char *str) { LOCK_LOG; _log_str(str); UNLOCK_LOG; } pavuk-0.9.35/src/log.h0000644000175000001440000000111710142077741011377 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _log_h_ #define _log_h_ #include "doc.h" #include "url.h" extern int log_start(char *); extern void log_str(char *); extern void short_log(doc *, url *); extern void time_log(doc *); #endif pavuk-0.9.35/src/net.c0000644000175000001440000001627710300054562011404 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #ifdef HAVE_ARPA_INET_H #include #endif #include #include #include #include #include #include #include #include "dns.h" #include "gui_api.h" #include "absio.h" #include "net.h" #include "doc.h" #include "http.h" int net_host_to_in_addr(char *hostname, abs_addr *haddr) { int len; if(dns_gethostbyname(hostname, &len, haddr->addr, &haddr->family)) return -1; return 0; } /*****************************************************************/ /* otvori spojenie na dany port servera s (IP, DNS) adresou */ /* FIXME: Translate me! */ /*****************************************************************/ static int net_connect_helper(char *hostname, int port_no, doc * docp) { struct sockaddr *addr; struct sockaddr_storage saddr; abs_addr haddr; int sock; int rv, l, sas, tcp; int actual_port = port_no; char *actual_hostname = hostname; http_proxy *hp; if(docp->doc_url->type == URLT_HTTPS && cfg.transparent_ssl_proxy) hp = cfg.transparent_ssl_proxy; else hp = cfg.transparent_proxy; /* * Check for transparent redirect * */ if(hp) { actual_hostname = hp->addr; actual_port = hp->port; } _h_errno_ = 0; if(net_host_to_in_addr(actual_hostname, &haddr)) return -2; gettimeofday(&docp->dns_time, NULL); _Xt_Serve; tcp = dns_getprotoid("tcp"); if((sock = socket(haddr.family, SOCK_STREAM, tcp)) == -1) return -1; if(fcntl(sock, F_SETFL, O_NONBLOCK)) { xperror("fcntl() - F_SETFL"); close(sock); return -1; } if(cfg.local_ip) { struct sockaddr_storage sladdr; struct sockaddr *laddr; laddr = dns_setup_sockaddr(&cfg.local_ip_addr, 0, &sladdr, &sas); if(bind(sock, laddr, sas) == -1) { close(sock); return -1; } } addr = dns_setup_sockaddr(&haddr, actual_port, &saddr, &sas); rv = connect(sock, addr, sas); if(rv && (errno != EINPROGRESS) && (errno != EISCONN) && (errno != EAGAIN) && (errno != EWOULDBLOCK)) { close(sock); return -1; } #ifndef HAVE_MT if(cfg.xi_face) { if(rv && (errno == EINPROGRESS)) { rv = gui_wait_io(sock, FALSE); if(!rv) { DEBUG_NET("Async connect - connected\n"); } if(cfg.rbreak || cfg.stop || rv) { close(sock); return -1; } } } else #endif /* !HAVE_MT */ { if(rv && (errno == EINPROGRESS || errno == EAGAIN || errno == EWOULDBLOCK)) { while((rv = tl_selectw(sock, (int) (cfg.ctimeout * 60.0))) == -1 && errno == EINTR); if(rv <= 0) { if(rv == 0) errno = ETIMEDOUT; return -1; } } } #if defined __QNX__ || defined __BEOS__ if(connect(sock, addr, sas) && (errno != EISCONN)) { close(sock); return -1; } #else l = sizeof(rv); if(getsockopt(sock, SOL_SOCKET, SO_ERROR, (void *) &rv, &l) || rv) { close(sock); errno = rv; return -1; } #endif DEBUG_NET("Successfully connected to %s,%d\n", hostname, port_no); return (sock); } int net_connect(char *hostname, int port_no, doc *docp) { int rc = net_connect_helper(hostname, port_no, docp); /* if net_connect_helper() returned -2, this was dns * failure. If -1, it was connect() failure */ if(rc == -2) { rc = -1; } else { gettimeofday(&docp->connect_time, NULL); } return rc; } int net_bindport(abs_addr *haddr, int port_min, int port_max) { int sock; int port; int n, tcp; struct sockaddr *addr; struct sockaddr_storage saddr; char pom[512]; addr = (struct sockaddr *) &saddr; tcp = dns_getprotoid("tcp"); if((sock = socket(haddr->family, SOCK_STREAM, tcp)) == -1) { perror("socket"); return -1; } n = 1; if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &n, sizeof(n))) xperror("net_bind: setsockopt - SO_REUSEADDR"); if(port_min < 0 || port_max < 0) { port = 0; addr = dns_setup_sockaddr(haddr, port, &saddr, &n); if(bind(sock, addr, n) == -1) { snprintf(pom, sizeof(pom), "bind to port(%d)", port); xperror(pom); close(sock); return -1; } } else { /* pro: take a port out of the specified range */ int count = 50; double port_range = port_max - port_min + 1; int success = 0; DEBUG_NET("trying ports in range %d - %d\n", port_min, port_max); while(count >= 0) { if(count == 0) { port = 0; DEBUG_NET("trying system assigned port\n"); } else { port = port_min + (int) (port_range * rand() / (RAND_MAX + 1.0)); assert(port >= port_min && port <= port_max); } addr = dns_setup_sockaddr(haddr, port, &saddr, &n); if(bind(sock, addr, n) == 0) { success = 1; break; } DEBUG_NET("trying new port : port %d failed\n", port); count--; } if(!success) { snprintf(pom, sizeof(pom), "bind to ports (%d-%d)", port_min, port_max); xperror(pom); close(sock); return -1; } } if(getsockname(sock, addr, &n)) { xperror("getsockname"); close(sock); return -1; } DEBUG_NET("BINDING to port : %d\n", dns_get_sockaddr_port(addr)); if(listen(sock, 1) == -1) { xperror("listen"); close(sock); return -1; } return sock; } int net_accept(int sock) { struct sockaddr *caller; struct sockaddr_storage scaller; int p, rsock = -1; int rv; if(fcntl(sock, F_SETFL, O_NONBLOCK)) { xperror("fcntl() - F_SETFL"); close(sock); return -1; } caller = (struct sockaddr *) &scaller; p = sizeof(scaller); rsock = accept(sock, caller, &p); if((rsock < 0) && (errno != EWOULDBLOCK) && (errno != EAGAIN)) { close(sock); return -1; } #ifndef HAVE_MT if(cfg.xi_face) { if((rsock < 0) && (errno == EWOULDBLOCK || errno == EAGAIN)) { rv = gui_wait_io(sock, TRUE); if(rv || cfg.rbreak || cfg.stop) { close(sock); return -1; } } } else #endif /* !HAVE_MT */ { if((rsock < 0) && (errno == EWOULDBLOCK || errno == EAGAIN)) { while((rv = tl_selectr(sock, (int) (cfg.ctimeout * 60.0))) == -1 && errno == EINTR); if(rv <= 0) { if(rv == 0) errno = ETIMEDOUT; close(sock); return -1; } } } if((rsock < 0) && ((rsock = accept(sock, caller, &p)) == -1)) { close(sock); return -1; } #ifdef DEBUG if(cfg.debug) { char *ip = dns_get_sockaddr_ip(caller); DEBUG_NET("ACCEPTING connection from: %s:%d\n", ip, dns_get_sockaddr_port(caller)); _free(ip); } #endif return rsock; } pavuk-0.9.35/src/net.h0000644000175000001440000000116110142077741011403 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef __net_h__ #define __net_h__ #include "dns.h" extern int net_connect(char *, int, doc *); extern int net_bindport(abs_addr *, int, int); extern int net_accept(int); extern int net_host_to_in_addr(char *, abs_addr *); #endif pavuk-0.9.35/src/nls.c0000644000175000001440000000430310251617052011401 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include "tools.h" #include "gui.h" #ifdef GETTEXT_NLS static const struct { const char *name; const char *id; } nls_langcat_tab[] = { {gettext_nop("Czech"), "cs"}, {gettext_nop("German"), "de"}, {gettext_nop("Spanish"), "es"}, {gettext_nop("French"), "fr"}, {gettext_nop("Italian"), "it"}, {gettext_nop("Japanese"), "ja"}, {gettext_nop("Polish"), "pl"}, {gettext_nop("Slovak"), "sk"}, {gettext_nop("Ukrainian"), "uk"}, {gettext_nop("English"), "en"}, {NULL, NULL} }; const char *nls_langcat_name(const char *lang) { int i; for(i = 0; nls_langcat_tab[i].name; i++) { if(!strncmp(lang, nls_langcat_tab[i].id, 2)) break; } return gettext(nls_langcat_tab[i].name); } #endif void init_locale_env(void) { char *lang; char *languages; char *lc_messages; char *lc_all; char *lc_ctype; char *l = NULL; lang = tl_strdup(getenv("LANG")); languages = tl_strdup(getenv("LANGUAGE")); lc_all = tl_strdup(getenv("LC_ALL")); lc_messages = tl_strdup(getenv("LC_MESSAGES")); lc_ctype = tl_strdup(getenv("LC_CTYPE")); if(lc_all) unsetenv("LC_ALL"); if(lang) unsetenv("LANG"); if(languages) unsetenv("LANGUAGE"); if(lc_messages) unsetenv("LC_MESSAGES"); unsetenv("LC_TIME"); unsetenv("LC_NUMERIC"); if(lc_messages) l = lc_messages; else if(lang) l = lang; else if(lc_all) l = lc_all; if(l) setenv("LC_MESSAGES", l, TRUE); if(!lc_ctype) { if(lc_all) setenv("LC_CTYPE", lc_all, TRUE); else if(lang) setenv("LC_CTYPE", lang, TRUE); } setlocale(LC_CTYPE, ""); #ifdef LC_MESSAGES setlocale(LC_MESSAGES, ""); #endif #ifdef GTK_FACE gdk_set_locale(); #endif _free(lang); _free(lc_messages); _free(lc_all); _free(lc_ctype); } pavuk-0.9.35/src/nls.h0000644000175000001440000000275610251617052011420 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _nls_H_ #define _nls_H_ #ifdef GETTEXT_NLS #include #include #ifdef HAVE_CAT_CNTR extern int _nl_msg_cat_cntr; #define _NLS_CHANGE_CAT \ _nl_msg_cat_cntr++; #else #define _NLS_CHANGE_CAT #endif #if defined(LC_MESSAGES) && defined(GTK_FACE) #define __NLS_SL \ setlocale(LC_MESSAGES, cfg.language ? cfg.language : ""); \ gdk_set_locale(); #elif defined(LC_MESSAGES) #define __NLS_SL \ setlocale(LC_MESSAGES, cfg.language ? cfg.language : ""); #elif defined(GTK_FACE) #define __NLS_SL \ gdk_set_locale(); #else #define __NLS_SL #endif #define _INIT_NLS \ { \ if(cfg.language) \ { \ setenv("LC_MESSAGES", cfg.language, 1); \ setenv("LC_CTYPE", cfg.language, 1); \ } \ setlocale(LC_CTYPE, cfg.language ? cfg.language : ""); \ __NLS_SL \ if(cfg.msgcatd) \ bindtextdomain(PACKAGE, cfg.msgcatd);\ textdomain(PACKAGE); \ _NLS_CHANGE_CAT\ } extern const char *nls_langcat_name(const char *); #else /* GETTEXT_NLS */ #define _INIT_NLS #define gettext(str) str #endif /* GETTEXT_NLS */ #define gettext_nop(str) str extern void init_locale_env(void); #endif pavuk-0.9.35/src/url.c0000644000175000001440000021466710436535055011436 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include "gui.h" #include "http.h" #include "ftp.h" #include "gopher.h" #include "url.h" #include "html.h" #include "tools.h" #include "authinfo.h" #include "tr.h" #include "dinfo.h" #include "form.h" #include "gui_api.h" #include "lfname.h" static char *url_decode_html(const char *, int); /* here can you specify characters, */ /* which are unsafe in file names */ #ifdef __CYGWIN__ #define FS_UNSAFE_CHARACTERS "\\:*?\"<>|" #endif /* for hexadecimal encoding */ static const char hexa[] = "0123456789ABCDEF"; #define HEXASC2HEXNR(x) (((x) >= '0' && (x) <= '9') ? \ ((x) - '0') : (tl_ascii_toupper(x) - 'A' + 10)) #define HEX2CHAR(x) (HEXASC2HEXNR(*(x + 1)) << 4) + HEXASC2HEXNR(*(x + 2)) const protinfo prottable[] = { {URLT_UNKNOWN, NULL, "unknown", NULL, 0, FALSE}, {URLT_HTTP, "http", "http", "http://", 80, TRUE}, #ifdef USE_SSL {URLT_HTTPS, "https", "https", "https://", 443, TRUE}, #else {URLT_HTTPS, "https", "https", "https://", 443, FALSE}, #endif {URLT_FTP, "ftp", "ftp", "ftp://", 21, TRUE}, #ifdef USE_SSL {URLT_FTPS, "ftps", "ftps", "ftps://", 21, TRUE}, #else {URLT_FTPS, "ftps", "ftps", "ftps://", 21, FALSE}, #endif {URLT_FILE, NULL, "file", "file://", 0, TRUE}, {URLT_GOPHER, "gopher", "gopher", "gopher://", 70, TRUE}, {URLT_FROMPARENT, NULL, "//", "//", 80, TRUE} }; #define _STRCLS_LOWER "abcdefghijklmnopqrstuvwxyz" #define _STRCLS_UPER "ABCDEFGHIJKLMNOPQRSTUVWXYZ" #define _STRCLS_DIGIT "0123456789" char *url_parse_scheme(char *urlstr) { char *p; char *retv = NULL; if((p = strchr(urlstr, ':')) && tl_ascii_isalpha(*urlstr)) { int l1 = strspn(urlstr, _STRCLS_LOWER _STRCLS_UPER _STRCLS_DIGIT "+-."); if(l1 == (p - urlstr)) { retv = tl_strndup(urlstr, l1); lowerstr(retv); } } else { if(urlstr[0] == '/' && urlstr[1] == '/') retv = strdup("//"); } return retv; } static char *url_parse_authority(char *urlschpart) { char *retv = NULL; if(urlschpart[0] == '/' && urlschpart[1] == '/') { int l1 = strcspn(urlschpart + 2, "/?#;"); retv = tl_strndup(urlschpart + 2, l1); } return retv; } static int url_split_authority(char *authority, char **user, char **password, char **host, unsigned short *port) { char *p, *p2; if(user) *user = NULL; if(password) *password = NULL; *host = NULL; *port = 0; if(user && (p = strrchr(authority, '@'))) { p2 = strchr(authority, ':'); if(p2 && p2 < p) { *user = tl_strndup(authority, p2 - authority); *password = tl_strndup(p2 + 1, p - p2 - 1); } else { *user = tl_strndup(authority, p - authority); } p++; } else p = authority; if((p2 = strrchr(p, ':'))) { *host = tl_strndup(p, p2 - p); *port = _atoi(p2 + 1); } else { *host = tl_strdup(p); } lowerstr(*host); return 0; } static int url_split_path(char *urlpath, char **path, char **query, char **anchor) { char *p = NULL, *p1 = NULL, *p2 = NULL; *path = NULL; if(query) *query = NULL; if(anchor) *anchor = NULL; if(anchor) p1 = strchr(urlpath, '#'); if(query) p2 = strchr(urlpath, '?'); if(p1 && p2) { if(p1 > p2) { *anchor = tl_strdup(p1 + 1); *query = url_decode_html(p2 + 1, p1 - (p2 + 1)); p = p2; } else { *query = url_decode_html(p2 + 1, strlen(p2 + 1)); *anchor = tl_strndup(p1 + 1, p2 - (p1 + 1)); p = p1; } } else if(p1) { *anchor = tl_strdup(p1 + 1); p = p1; } else if(p2) { *query = url_decode_html(p2 + 1, strlen(p2 + 1)); p = p2; } if(p) { if(p - urlpath) { *path = tl_strndup(urlpath, p - urlpath); if(**path == '/') { p = *path; *path = get_abs_file_path(_strtrchr(p, '\\', '/')); free(p); } } } else { if(*urlpath) { *path = tl_strdup(urlpath); if(**path == '/') { p = *path; *path = get_abs_file_path(_strtrchr(p, '\\', '/')); free(p); } } } return 0; } protocol url_scheme_to_schemeid(char *scheme) { int i; for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].urlid && !strcmp(prottable[i].urlid, scheme)) { return prottable[i].id; } } return URLT_UNKNOWN; } /* * If a path is relative and starts // we need to get the type from * the parent, which only the caller can do. This function is called * by the caller of url_parse when url_parse has returned type = URTL_FROMPARENT * and the parent can figure out the path. It basically does all the work * that url_parse would do once it knew the scheme. * however, we start with the urlstr in url->p.unsup.urlstr rather * than as an argument */ static void url_finishpath(url * url) { char *authority = NULL; char *p; if(url->type == URLT_FROMPARENT) url->type = URLT_UNKNOWN; if(url->type == URLT_UNKNOWN) return; /* can't help here */ p = url->p.unsup.urlstr; authority = url_parse_authority(p); if(authority) p += strlen(authority) + 2; if(authority && *authority) { switch (url->type) { case URLT_FROMPARENT: break; case URLT_HTTP: case URLT_HTTPS: url_split_authority(authority, &(url->p.http.user), &(url->p.http.password), &(url->p.http.host), &(url->p.http.port)); if(!url->p.http.port) url->p.http.port = prottable[url->type].default_port; url_split_path(p, &(url->p.http.document), &(url->p.http.searchstr), &(url->p.http.anchor_name)); if(!url->p.http.document) url->p.http.document = tl_strdup("/"); break; case URLT_FTP: case URLT_FTPS: url_split_authority(authority, &(url->p.ftp.user), &(url->p.ftp.password), &(url->p.ftp.host), &(url->p.ftp.port)); if(!url->p.ftp.port) url->p.ftp.port = prottable[url->type].default_port; url_split_path(p, &url->p.ftp.path, NULL, &url->p.ftp.anchor_name); if(!url->p.ftp.path) url->p.ftp.path = tl_strdup("/"); if(p && p[0] == '/' && p[1] == '/') { char *pp = tl_str_concat(NULL, "/", url->p.ftp.path, NULL); _free(url->p.ftp.path); url->p.ftp.path = pp; } if((p = strrchr(url->p.ftp.path, ';')) && !strncasecmp(p, ";type=", 6)) *p = '\0'; url->p.ftp.dir = tl_is_dirname(url->p.ftp.path) != 0; break; case URLT_GOPHER: url_split_authority(authority, NULL, NULL, &(url->p.gopher.host), &(url->p.gopher.port)); if(!url->p.gopher.port) url->p.gopher.port = prottable[url->type].default_port; if(*(p + 1)) url->p.gopher.selector = tl_strdup(p + 1); else url->p.gopher.selector = tl_strdup("1"); break; case URLT_FILE: url_split_path(p, &(url->p.file.filename), &(url->p.file.searchstr), &(url->p.file.anchor_name)); if(!url->p.file.filename) url->p.file.filename = tl_strdup(""); break; default: return; } } if(!authority || !*authority) { switch (url->type) { case URLT_FILE: case URLT_FTP: case URLT_FTPS: case URLT_HTTP: case URLT_HTTPS: url->type = URLT_FILE; url_split_path(p, &(url->p.file.filename), &(url->p.file.searchstr), &(url->p.file.anchor_name)); if(!url->p.file.filename) url->p.file.filename = tl_strdup(""); break; default: url->type = URLT_UNKNOWN; return; break; } } _free(authority); return; } url *url_parse(char *urlstr) { char *scheme = NULL; char *authority = NULL; char *p; url ret_url; ret_url.type = URLT_UNKNOWN; ret_url.status = 0; ret_url.parent_url = NULL; ret_url.moved_to = NULL; ret_url.ref_cnt = 1; ret_url.level = 0; ret_url.extension = NULL; ret_url.local_name = NULL; #ifdef WITH_TREE #ifdef I_FACE ret_url.prop = NULL; ret_url.tree_nfo = NULL; #endif #endif #ifdef HAVE_MT pthread_mutex_init(&ret_url.lock, NULL); #endif p = urlstr; if(p) scheme = url_parse_scheme(urlstr); if(scheme) { ret_url.type = url_scheme_to_schemeid(scheme); /* If the string starts with // then we */ /* don't know the scheme type so we have */ /* to wait for the parent to set it. */ if(ret_url.type == URLT_FROMPARENT) { ret_url.p.unsup.urlstr = tl_strdup(urlstr); authority = url_parse_authority(urlstr); } else { /* We do know the scheme type, so move past it */ /* and get the 'authority' */ p += strlen(scheme) + 1; authority = url_parse_authority(p); } if(authority) p += strlen(authority) + 2; if(authority && *authority) { switch (ret_url.type) { case URLT_FROMPARENT: break; case URLT_HTTP: case URLT_HTTPS: url_split_authority(authority, &ret_url.p.http.user, &ret_url.p.http.password, &ret_url.p.http.host, &ret_url.p.http.port); if(!ret_url.p.http.port) ret_url.p.http.port = prottable[ret_url.type].default_port; url_split_path(p, &ret_url.p.http.document, &ret_url.p.http.searchstr, &ret_url.p.http.anchor_name); if(!ret_url.p.http.document) ret_url.p.http.document = tl_strdup("/"); break; case URLT_FTP: case URLT_FTPS: url_split_authority(authority, &ret_url.p.ftp.user, &ret_url.p.ftp.password, &ret_url.p.ftp.host, &ret_url.p.ftp.port); if(!ret_url.p.ftp.port) ret_url.p.ftp.port = prottable[ret_url.type].default_port; url_split_path(p, &ret_url.p.ftp.path, NULL, &ret_url.p.ftp.anchor_name); if(!ret_url.p.ftp.path) ret_url.p.ftp.path = tl_strdup("/"); if(p && p[0] == '/' && p[1] == '/') { char *pp = tl_str_concat(NULL, "/", ret_url.p.ftp.path, NULL); _free(ret_url.p.ftp.path); ret_url.p.ftp.path = pp; } if((p = strrchr(ret_url.p.ftp.path, ';')) && !strncasecmp(p, ";type=", 6)) *p = '\0'; ret_url.p.ftp.dir = tl_is_dirname(ret_url.p.ftp.path) != 0; break; case URLT_GOPHER: url_split_authority(authority, NULL, NULL, &ret_url.p.gopher.host, &ret_url.p.gopher.port); if(!ret_url.p.gopher.port) ret_url.p.gopher.port = prottable[ret_url.type].default_port; if(*(p + 1)) ret_url.p.gopher.selector = tl_strdup(p + 1); else ret_url.p.gopher.selector = tl_strdup("1"); break; case URLT_FILE: url_split_path(p, &ret_url.p.file.filename, &ret_url.p.file.searchstr, &ret_url.p.file.anchor_name); if(!ret_url.p.file.filename) ret_url.p.file.filename = tl_strdup(""); break; default: ret_url.p.unsup.urlstr = tl_strdup(urlstr); break; } } } if(!scheme || !authority || !*authority) { if(!scheme) ret_url.type = URLT_FILE; switch (ret_url.type) { case URLT_FILE: case URLT_FTP: case URLT_FTPS: case URLT_HTTP: case URLT_HTTPS: case URLT_FROMPARENT: ret_url.type = URLT_FILE; url_split_path(p, &ret_url.p.file.filename, &ret_url.p.file.searchstr, &ret_url.p.file.anchor_name); if(!ret_url.p.file.filename) ret_url.p.file.filename = tl_strdup(""); break; default: ret_url.type = URLT_UNKNOWN; ret_url.p.unsup.urlstr = tl_strdup(urlstr); break; } } _free(authority); _free(scheme); return new_url(&ret_url); } url *url_dup_url(url * src) { url dst; dst.type = src->type; dst.parent_url = NULL; dst.moved_to = NULL; dst.level = src->level; dst.ref_cnt = 1; dst.status = src->status & (URL_INLINE_OBJ | URL_STYLE | URL_ISHTML | URL_NORECURSE | URL_FORM_ACTION | URL_ISSCRIPT | URL_ISSTARTING); dst.extension = NULL; dst.local_name = NULL; #ifdef WITH_TREE #ifdef I_FACE dst.prop = NULL; dst.tree_nfo = NULL; #endif #endif #ifdef HAVE_MT pthread_mutex_init(&dst.lock, NULL); #endif switch (dst.type) { case URLT_FILE: dst.p.file.filename = tl_strdup(src->p.file.filename); dst.p.file.searchstr = tl_strdup(src->p.file.searchstr); dst.p.file.anchor_name = tl_strdup(src->p.file.anchor_name); break; case URLT_FTP: case URLT_FTPS: dst.p.ftp.host = tl_strdup(src->p.ftp.host); dst.p.ftp.user = tl_strdup(src->p.ftp.user); dst.p.ftp.password = tl_strdup(src->p.ftp.password); dst.p.ftp.path = tl_strdup(src->p.ftp.path); dst.p.ftp.anchor_name = tl_strdup(src->p.ftp.anchor_name); dst.p.ftp.port = src->p.ftp.port; dst.p.ftp.dir = src->p.ftp.dir; if(src->extension) dst.extension = ftp_url_ext_dup(src->extension); break; case URLT_HTTP: case URLT_HTTPS: dst.p.http.host = tl_strdup(src->p.http.host); dst.p.http.port = src->p.http.port; dst.p.http.document = tl_strdup(src->p.http.document); dst.p.http.searchstr = tl_strdup(src->p.http.searchstr); dst.p.http.anchor_name = tl_strdup(src->p.http.anchor_name); dst.p.http.user = tl_strdup(src->p.http.user); dst.p.http.password = tl_strdup(src->p.http.password); if(src->extension && (src->status & URL_FORM_ACTION)) dst.extension = form_info_dup(src->extension); break; case URLT_GOPHER: dst.p.gopher.host = tl_strdup(src->p.gopher.host); dst.p.gopher.port = src->p.gopher.port; dst.p.gopher.selector = tl_strdup(src->p.gopher.selector); break; case URLT_FROMPARENT: /* This is a 'can't happen'. */ assert(0); case URLT_UNKNOWN: dst.p.unsup.urlstr = tl_strdup(src->p.unsup.urlstr); break; } return new_url(&dst); } /* convert any URL string to absolute path */ char *url_to_absolute_url(char *base, char *baset, url * parent, char *act) { char *psp = NULL; url *purl; char *pom; int pomlen; if(act[0] == 0) return 0; if(act[0] == '#') return 0; pomlen = strlen(url_to_filename(parent, TRUE)) + strlen(priv_cfg.cache_dir) + strlen(baset) + strlen(act); pom = _malloc(pomlen); if((act[0] == '/' && act[1] == '/') && parent->type != URLT_FILE) { /* we should handle it like net_path */ snprintf(pom, pomlen, "%s:%s", prottable[parent->type].urlid, act); psp = tl_strdup(pom); purl = url_parse(act); } else { purl = url_parse(act); } if(purl->type == URLT_FROMPARENT) { purl->type = parent->type; url_finishpath(purl); } assert(purl->type != URLT_FROMPARENT); if(purl->type == URLT_FILE && (parent->type == URLT_FILE)) { if(!(*purl->p.file.filename)) { strcpy(pom, baset); } else { if(*(purl->p.file.filename) != '/') { strcpy(pom, base); strcat(pom, purl->p.file.filename); free(purl->p.file.filename); purl->p.file.filename = tl_strdup(pom); } else snprintf(pom, pomlen, "%s%s", prottable[purl->type].typestr, purl->p.file.filename); } psp = tl_strdup(pom); } else if((purl->type == URLT_FILE) && (cfg.base_level == 0 || cfg.enable_info) && (parent->status & URL_REDIRECT || parent->status & URL_ISLOCAL)) { char *p1, *p; url *pomurl; if(*purl->p.file.filename == '/') strcpy(pom, purl->p.file.filename); else { int l; p = url_to_filename(parent, TRUE); strcpy(pom, p); if(*purl->p.file.filename) { p1 = strrchr(pom, '/'); if(p1) *(p1 + 1) = '\0'; strcat(pom, purl->p.file.filename); } /* remove any dynamic stuff to get base name */ for(l = strlen(pom); l > 0 && pom[l] != '/' && pom[l] != '?'; --l) ; if(pom[l] == '?') pom[l] = '\0'; /* now fix for index-name files */ l = strlen(pom)-strlen(priv_cfg.index_name); if(l > 0 && !strcmp(pom+l, priv_cfg.index_name) && pom[l-1] == '/') pom[l] = '\0'; } if(purl->p.file.searchstr) { strcat(pom, "?"); strcat(pom, purl->p.file.searchstr); } if(purl->p.file.anchor_name) { strcat(pom, "#"); strcat(pom, purl->p.file.anchor_name); } p = get_abs_file_path(pom); pomurl = filename_to_url(p); _free(p); if(pomurl) { psp = url_to_urlstr(pomurl, TRUE); free_deep_url(pomurl); _free(pomurl); } } if((!psp && purl->type == URLT_FILE) && (parent->type == URLT_HTTP || parent->type == URLT_HTTPS || parent->type == URLT_FTPS || parent->type == URLT_FTP)) { char *ri; if(*(purl->p.file.filename) == '/') { char *idx; strcpy(pom, base); idx = strfindnchr(pom, '/', 3); if(idx) strcpy(idx - 1, purl->p.file.filename); else strcat(pom, purl->p.file.filename); if(purl->p.file.searchstr) { strcat(pom, "?"); strcat(pom, purl->p.file.searchstr); } if(purl->p.file.anchor_name) { strcat(pom, "#"); strcat(pom, purl->p.file.anchor_name); } } else if(!(*purl->p.file.filename) && !purl->p.file.searchstr) { if(purl->p.file.anchor_name) { /* Problem; we just have "#anchor" and unfortunately baset might be the parent directory, not the actual parent. (Nor is that found in "parent" necessarily). */ if(*baset && baset[strlen(baset) - 1] != '/') { strcpy(pom, baset); strcat(pom, "#"); strcat(pom, purl->p.file.anchor_name); } else /* What to do? Just hope to ignore this altogeher */ strcpy(pom, ""); } } else { strcpy(pom, base); if(!*purl->p.file.filename && purl->p.file.searchstr && parent->type == URLT_HTTP) { ri = strrchr(pom, '/'); if(ri) strcpy(ri, parent->p.http.document); else strcat(pom, parent->p.http.document); } else { ri = strrchr(pom, '/'); if(ri) strcpy(ri + 1, purl->p.file.filename); else strcat(pom, purl->p.file.filename); } if((parent->status & URL_REDIRECT) && (strlen(purl->p.file.filename) >= strlen(priv_cfg.index_name)) && !strcmp(priv_cfg.index_name, purl->p.file.filename + strlen(purl->p.file.filename) - strlen(priv_cfg.index_name))) { *(pom + strlen(pom) - strlen(priv_cfg.index_name)) = '\0'; } if(purl->p.file.searchstr) { strcat(pom, "?"); strcat(pom, purl->p.file.searchstr); } if(purl->p.file.anchor_name) { strcat(pom, "#"); strcat(pom, purl->p.file.anchor_name); } } psp = tl_strdup(pom); } else if(!psp) { psp = tl_strdup(act); } free_deep_url(purl); _free(purl); if(psp && *psp) { purl = url_parse(psp); if(purl->type == URLT_FROMPARENT) { purl->type = parent->type; url_finishpath(purl); } url_path_abs(purl); if(prottable[purl->type].supported) { free(psp); psp = url_to_urlstr(purl, TRUE); } free_deep_url(purl); _free(purl); } _free(pom); return psp; } /**************************************/ /* encode unsafe characters with */ /* url-encoded encoding */ /**************************************/ static char *url_encode_str_real(char *urlstr, char *unsafe, int safety) { char *res, *p, *r; if(urlstr == NULL) return NULL; if(cfg.noencode) { return strdup(urlstr); } res = _malloc(strlen(urlstr) * 3 + 1); for(p = urlstr, r = res; *p; p++, r++) { if(safety && *p == '%' && tl_ascii_isxdigit(p[1]) && tl_ascii_isxdigit(p[2])) { *r = *p; } else if(strchr(unsafe, *p) || ((unsigned char) *p > 0x7f) || ((unsigned char) *p < 0x20)) { *r = '%'; r++; *r = hexa[((unsigned char)*p) >> 4]; r++; *r = hexa[((unsigned char)*p) % 16]; } else { *r = *p; } } *r = '\0'; return res; } char *url_encode_str(char *urlstr, char *unsafe) { return url_encode_str_real(urlstr, unsafe, FALSE); } static char *url_encode_str_safe(char *urlstr, char *unsafe) { return url_encode_str_real(urlstr, unsafe, TRUE); } /* Convert the HTML entities to direct characters, size is ignored at the moment, res returns the encoded character, the return value is the number of encoded bytes. Currently only & is handled! */ static int fix_html_entity(const char *str, int size, char *res) { if(size >= 5 && (!strncmp(str, "&", 5) || !strncmp(str, "&", 5))) { *res = '&'; return 5; } return 0; } /*****************************************/ /* dekodovanie zakodovanych znakov z URL */ /* FIXME: Translate me */ /*****************************************/ char *url_decode_str(const char *urlstr, int len) { char *res, *r; int i; if(urlstr == NULL) return NULL; res = tl_strndup(urlstr, len); for(i = 0, r = res; i < len; r++, i++) { if(urlstr[i] == '%' && urlstr[i + 1] && urlstr[i + 2] && tl_ascii_isxdigit(urlstr[i + 1]) && tl_ascii_isxdigit(urlstr[i + 2])) { *r = HEX2CHAR(urlstr + i); i += 2; } else if(urlstr[i] == '&') { int s; if((s = fix_html_entity(urlstr+i, len-i, r))) i += s-1; else *r = urlstr[i]; /* copy the & */ } else { *r = urlstr[i]; } } *r = '\0'; return res; } static char *url_decode_html(const char *urlstr, int len) { char *res, *r; int i; if(urlstr == NULL) return NULL; res = tl_strndup(urlstr, len); for(i = 0, r = res; i < len; r++, i++) { if(urlstr[i] == '&') { int s; if((s = fix_html_entity(urlstr+i, len-i, r))) i += s-1; else *r = urlstr[i]; /* copy the & */ } else { *r = urlstr[i]; } } *r = '\0'; return res; } /*************************************/ /* uvolnenie pamate po strukture URL */ /* FIXME: Translate me! */ /*************************************/ void free_deep_url(url * urlp) { if(urlp->local_name) { url_remove_from_file_hash_tab(urlp); _free(urlp->local_name); } switch (urlp->type) { case URLT_FILE: _free(urlp->p.file.filename); _free(urlp->p.file.searchstr); _free(urlp->p.file.anchor_name); break; case URLT_HTTP: case URLT_HTTPS: _free(urlp->p.http.host); _free(urlp->p.http.document); _free(urlp->p.http.searchstr); _free(urlp->p.http.anchor_name); _free(urlp->p.http.password); _free(urlp->p.http.user); if(urlp->status & URL_FORM_ACTION) { form_info *fi = (form_info *) urlp->extension; dllist *ptr; _free(fi->text); _free(fi->action); ptr = fi->infos; while(ptr) { form_field *ff = (form_field *) ptr->data; _free(ff->value); _free(ff->name); _free(ff); ptr = dllist_remove_entry(ptr, ptr); } } break; case URLT_FTP: case URLT_FTPS: _free(urlp->p.ftp.host); _free(urlp->p.ftp.user); _free(urlp->p.ftp.password); _free(urlp->p.ftp.anchor_name); _free(urlp->p.ftp.path); if(urlp->extension) ftp_url_ext_free(urlp->extension); break; case URLT_GOPHER: _free(urlp->p.gopher.host); _free(urlp->p.gopher.selector); case URLT_FROMPARENT: default: _free(urlp->p.unsup.urlstr); break; } dllist_free_all(urlp->parent_url); #ifdef WITH_TREE #ifdef I_FACE _free(urlp->tree_nfo); if(urlp->prop) { _free(urlp->prop->type); free(urlp->prop); } #endif #endif #ifdef HAVE_MT pthread_mutex_destroy(&urlp->lock); #endif } void cat_links_to_url_list(dllist * l1) { dllist *p = l1; url *same; dllist *reg = NULL, *inl = NULL; int nadd = 0; cond_info_t condp; condp.level = 1; condp.urlnr = 0; condp.size = 0; condp.time = 0L; condp.mimet = NULL; condp.full_tag = NULL; condp.params = NULL; condp.html_doc = NULL; condp.html_doc_offset = 0; condp.tag = NULL; condp.attrib = NULL; while(p) { if(url_append_condition((url *) p->data, &condp)) { url_clear_anchor((url *) p->data); if((same = url_was_befor((url *) p->data))) { link_url_in_list(same, (url *) p->data); free_deep_url((url *) p->data); free((url *)p->data); } else { url *urlp = (url *) p->data; nadd++; LOCK_TCNT; cfg.total_cnt++; UNLOCK_TCNT; urlp->ref_cnt = 1; #ifdef WITH_TREE #ifdef I_FACE if(cfg.xi_face) { urlp->tree_nfo = _malloc(sizeof(GUI_TREE_RTYPE)); urlp->tree_nfo[0] = gui_tree_make_entry(urlp); } #endif #endif url_add_to_url_hash_tab(urlp); switch (cfg.scheduling_strategie) { case SSTRAT_DO_SIRKY: case SSTRAT_DO_HLBKY: reg = dllist_append(reg, (dllist_t)p->data); break; case SSTRAT_DO_SIRKY_I: case SSTRAT_DO_HLBKY_I: if(urlp->status & URL_INLINE_OBJ) inl = dllist_append(inl, (dllist_t)urlp); else reg = dllist_append(reg, (dllist_t)urlp); break; default: break; } if(cfg.hack_add_index && !url_get_search_str(urlp)) { char *pom; char *ustr = url_to_urlstr(urlp, FALSE); pom = strrchr(ustr, '/'); if(pom && pom[1]) { url *nurl; pom[1] = '\0'; nurl = url_parse(ustr); assert(nurl->type != URLT_FROMPARENT); dllist_append(p, (dllist_t) nurl); } _free(ustr); } } } else { LOCK_REJCNT; cfg.reject_cnt++; UNLOCK_REJCNT; free_deep_url((url *) p->data); free((url *)p->data); } p = p->next; } dllist_free_all(l1); LOCK_CFG_URLSTACK; switch (cfg.scheduling_strategie) { case SSTRAT_DO_SIRKY: case SSTRAT_DO_SIRKY_I: if(reg || inl) append_url_list_to_list(dllist_concat(inl, reg), NULL); break; case SSTRAT_DO_HLBKY: case SSTRAT_DO_HLBKY_I: if(reg || inl) append_url_list_to_list(dllist_concat(inl, reg), cfg.urlstack); break; default: break; } UNLOCK_CFG_URLSTACK; #ifdef HAVE_MT /* this is here for signaling sleeping downloading processes which */ /* wait for URL to be queued inside downloading queue */ for(; nadd > 0; nadd--) { mt_semaphore_up(&cfg.urlstack_sem); } #endif } void append_url_to_list(url * urlp) { if(!prottable[urlp->type].supported) { xprintf(1, gettext("unsupported URL type \"%s\"\n"), prottable[urlp->type].urlid ? prottable[urlp->type].urlid : gettext("unknown")); return; } urlp->ref_cnt = 1; #ifdef WITH_TREE #ifdef I_FACE if(cfg.xi_face) { urlp->tree_nfo = _malloc(sizeof(GUI_TREE_RTYPE)); urlp->tree_nfo[0] = gui_tree_make_entry(urlp); } #endif #endif url_add_to_url_hash_tab(urlp); cfg.urlstack = dllist_append(cfg.urlstack, (dllist_t) urlp); cfg.total_cnt++; #ifdef HAVE_MT mt_semaphore_up(&cfg.urlstack_sem); #endif } void append_url_list_to_list(dllist * list, dllist * after) { if(after) cfg.urlstack = dllist_insert_list_after(cfg.urlstack, after, list); else cfg.urlstack = dllist_concat(cfg.urlstack, list); } void link_url_in_list(url * orig, url * copy) { url *cpar; LOCK_URL(copy); if(copy->parent_url) cpar = (url *) copy->parent_url->data; else cpar = NULL; UNLOCK_URL(copy); if(cpar && (orig != cpar)) { dllist *ptr; bool_t found = FALSE; if(copy->parent_url) { LOCK_URL(orig); for(ptr = orig->parent_url; ptr; ptr = ptr->next) if((url *)ptr->data == cpar) found = TRUE; UNLOCK_URL(orig); } if(!found) { LOCK_URL(orig); orig->ref_cnt++; if(cpar) orig->parent_url = dllist_append(orig->parent_url, (dllist_t) cpar); #ifdef WITH_TREE #ifdef I_FACE if(cfg.xi_face) { orig->tree_nfo = _realloc(orig->tree_nfo, orig->ref_cnt * sizeof(GUI_TREE_RTYPE)); orig->tree_nfo[orig->ref_cnt - 1] = gui_tree_make_entry(orig); } #endif #endif UNLOCK_URL(orig); if(cpar && (orig->status & URL_MOVED) && (orig->status & URL_MOVED)) { url *purl = orig; char *fn; while(purl->moved_to) purl = purl->moved_to; if(purl->status & URL_DOWNLOADED) { fn = url_to_filename(purl, TRUE); rewrite_one_parent_links(copy, cpar, fn); } } } } } int url_redirect_to(url * src, url * dst, int is_303) { url *pomurl, *pomurl2; src->status |= URL_MOVED; url_clear_anchor(dst); if((pomurl = url_was_befor(dst))) { free_deep_url(dst); _free(dst); pomurl2 = pomurl; while(pomurl2) { if(src == pomurl2) { src->status &= ~URL_MOVED; return -1; } pomurl2 = pomurl2->moved_to; } LOCK_URL(pomurl); pomurl->parent_url = dllist_append(pomurl->parent_url, (dllist_t) src); pomurl->ref_cnt++; src->moved_to = pomurl; src->status |= URL_MOVED; #ifdef WITH_TREE #ifdef I_FACE if(cfg.xi_face) { pomurl->tree_nfo = _realloc(pomurl->tree_nfo, (pomurl->ref_cnt) * sizeof(GUI_TREE_RTYPE)); pomurl->tree_nfo[pomurl->ref_cnt - 1] = gui_tree_make_entry(pomurl); } #endif #endif UNLOCK_URL(pomurl); if((pomurl->status & URL_MOVED) || (pomurl->status & URL_DOWNLOADED)) { url *purl = pomurl; char *fn; xprintf(1, gettext("Moved to already processed URL.\n")); if(pomurl->status & URL_MOVED) { while(purl->moved_to) purl = purl->moved_to; fn = url_to_filename(purl, TRUE); } else fn = url_to_filename(pomurl, TRUE); if(cfg.rewrite_links && (purl->status & URL_DOWNLOADED)) rewrite_parents_links(src, fn); } } else { dst->parent_url = dllist_append(dst->parent_url, (dllist_t) src); src->moved_to = dst; src->status |= URL_MOVED; if(!is_303 && !dst->extension && (src->status & URL_FORM_ACTION)) dst->extension = form_info_dup(src->extension); #ifdef WITH_TREE #ifdef I_FACE if(cfg.xi_face) { dst->tree_nfo = _malloc(sizeof(GUI_TREE_RTYPE)); dst->tree_nfo[0] = gui_tree_make_entry(dst); } #endif #endif dst->ref_cnt = 1; url_add_to_url_hash_tab(dst); } return 0; } void url_add_to_url_hash_tab(url * urlp) { url_clear_anchor(urlp); LOCK_CFG_URLHASH; dlhash_insert(cfg.url_hash_tbl, (dllist_t) urlp); UNLOCK_CFG_URLHASH; } void url_remove_from_url_hash_tab(url * urlp) { if(!prottable[urlp->type].supported) return; LOCK_CFG_URLHASH; dlhash_exclude(cfg.url_hash_tbl, (dllist_t) urlp); UNLOCK_CFG_URLHASH; } void url_add_to_file_hash_tab(url * urlp) { if(!prottable[urlp->type].supported) return; url_to_filename(urlp, TRUE); } void url_remove_from_file_hash_tab(url * urlp) { if(!prottable[urlp->type].supported) return; if(urlp->local_name) { LOCK_CFG_FILEHASH; dlhash_exclude_exact(cfg.fn_hash_tbl, (dllist_t) urlp); UNLOCK_CFG_FILEHASH; } } /**********************************************/ /* kopirovanie obsahu na nove miesto v pamati */ /* FIXME: Translate me! */ /**********************************************/ url *new_url(url * urlo) { url *res = (url *) _malloc(sizeof(url)); memcpy(res, urlo, sizeof(url)); return res; } #define isforbiddenchar(a) ((a) == '\\' || (a) == '/') static char *encode_forbiddenchars(const char *str) { int size = 1; const char *s; char *res, *r; for(s = str; *s; ++s) { if(isforbiddenchar(*s)) size += 2; } size += (s-str); /* add string length */ r = res = (char *) _malloc(size); for(s = str; *s; ++s) { if(isforbiddenchar(*s)) { /* no buffer overflow possible here, sprintf is save */ sprintf(r, "%%%02x", *s); r += 3; } else { *(r++) = *s; } } *r = '\0'; return res; } static char *url_get_default_local_name_real(url * urlp, int add_index) { char *pom2 = NULL; char pbuf[50]; char *p; snprintf(pbuf, sizeof(pbuf), "_%d", url_get_port(urlp)); switch (urlp->type) { case URLT_HTTP: case URLT_HTTPS: p = url_decode_str(urlp->p.http.document, strlen(urlp->p.http.document)); pom2 = tl_str_concat(pom2, prottable[urlp->type].dirname, "/", urlp->p.http.host, pbuf, p, NULL); _free(p); if(urlp->p.http.searchstr) { /* search strings may have a / or \ inside, which must be encoded */ char *sstr = encode_forbiddenchars(urlp->p.http.searchstr); pom2 = tl_str_concat(pom2, "?", sstr, NULL); _free(sstr); } if(urlp->status & URL_FORM_ACTION) { form_info *fi = (form_info *) urlp->extension; p = form_encode_urlencoded(((form_info *) urlp->extension)->infos); if(p) { pom2 = tl_str_concat(pom2, (fi->method == FORM_M_POST) ? "#" : "?", p, NULL); } _free(p); } if(tl_is_dirname(pom2) && add_index) pom2 = tl_str_append(pom2, priv_cfg.index_name); break; case URLT_FILE: pom2 = url_decode_str(urlp->p.file.filename, strlen(urlp->p.file.filename)); if(urlp->p.file.searchstr) { p = url_decode_str(urlp->p.file.searchstr, strlen(urlp->p.file.searchstr)); pom2 = tl_str_concat(pom2, "?", p, NULL); free(p); } break; case URLT_FTP: case URLT_FTPS: pom2 = tl_str_concat(pom2, prottable[urlp->type].dirname, "/", urlp->p.ftp.host, pbuf, "/", urlp->p.ftp.path, urlp->p.ftp.dir ? "/" : NULL, add_index ? priv_cfg.index_name : NULL, NULL); break; case URLT_GOPHER: pom2 = tl_str_concat(pom2, prottable[URLT_GOPHER].dirname, "/", urlp->p.gopher.host, pbuf, urlp->p.gopher.selector, (urlp->p.gopher.selector[0] == '1' && add_index) ? priv_cfg.index_name : NULL, NULL); break; case URLT_FROMPARENT: default: return NULL; } return pom2; } char *url_get_default_local_name(url * urlp) { return url_get_default_local_name_real(urlp, TRUE); } static char *url_get_local_name_tr(url * urlp, char *local_name, const char *mime_type, int *isdinfo) { dllist *pl = priv_cfg.lfnames; char *ustr = url_to_urlstr(urlp, FALSE); char *trs, *lfstr = NULL; char *pom2 = local_name; char *rv = NULL; while(pl) { if(lfname_match((lfname *) pl->data, ustr)) { lfstr = lfname_get_by_url(urlp, ustr, mime_type, (lfname *) pl->data); pom2 = lfstr; *isdinfo = TRUE; break; } pl = pl->next; } _free(ustr); trs = tr(pom2); if(tl_is_dirname(trs)) rv = tl_str_concat(NULL, priv_cfg.cache_dir, (*trs == '/' ? "" : "/"), trs, priv_cfg.index_name, NULL); else rv = tl_str_concat(NULL, priv_cfg.cache_dir, (*trs == '/' ? "" : "/"), trs, NULL); _free(trs); _free(lfstr); return rv; } /**********************************************/ char *url_get_local_name_real(url * urlp, const char *mime_type, int adj) { char *pom = NULL; char *pom2 = NULL; char *p1, *p2; char *p; int isdinfo = FALSE; struct stat estat; if((urlp->status & URL_ISFIRST) && priv_cfg.store_name /* && cfg.mode == MODE_SINGLE */ ) { return get_abs_file_path_oss(priv_cfg.store_name); } pom = url_get_default_local_name(urlp); if(urlp->type != URLT_FILE) { pom2 = url_get_local_name_tr(urlp, pom, mime_type, &isdinfo); _free(pom); pom = pom2; } #ifdef FS_UNSAFE_CHARACTERS /* This is for automatic handling of windoze */ /* filesystem unsafe characters - \:*?"<>| */ if(urlp->type != URLT_FILE && strlen(pom) != strcspn(pom, FS_UNSAFE_CHARACTERS)) { if(strchr(FS_UNSAFE_CHARACTERS, '_')) p = tr_del_chr(FS_UNSAFE_CHARACTERS, pom); else p = tr_chr_chr(FS_UNSAFE_CHARACTERS, "_", pom); _free(pom); pom = p; } #endif /* adjusting of filename size if required */ if(urlp->type != URLT_FILE && tl_filename_needs_adjust(pom)) { p = tl_adjust_filename(pom); _free(pom); pom = p; } if(!lstat(pom, &estat) && S_ISDIR(estat.st_mode) && adj) { pom = tl_str_concat(pom, "/", priv_cfg.index_name, NULL); } if((urlp->type != URLT_FILE) && cfg.base_level && !isdinfo) { p = get_abs_file_path_oss(pom); _free(pom); pom = p; p1 = pom + strlen(priv_cfg.cache_dir) + (tl_is_dirname(priv_cfg.cache_dir) == 0); if(!(p2 = strfindnchr(p1, '/', cfg.base_level))) { if((p2 = strrchr(pom, '/'))) p2++; } if(p2) memmove(p1, p2, strlen(p2) + 1); } /* this is here for ensure, that we */ /* don't have directory as filename :-) */ if(tl_is_dirname(pom)) pom = tl_str_append(pom, priv_cfg.index_name); p = get_abs_file_path_oss(pom); _free(pom); /* In mode MIRROR we want to use exactly the same filenames as the remove server. Therefore we have to unquote our filename. */ if(cfg.mode == MODE_MIRROR) { /* now we unquote the string */ char *s = p; char *t = p; int hex; while(*s != 0) { if(s[0] == '%' && isxdigit(s[1]) && isxdigit(s[2])) { sscanf(s + 1, "%2x", &hex); *t++ = hex; s += 3; continue; } *t++ = *s++; } *t = 0; } return p; } static char *url_get_local_name(url * urlp, const char *mime_type) { return url_get_local_name_real(urlp, mime_type, TRUE); } /******************************************************/ /* k danemu URL vytvori meno suboru v lokalnom strome */ /* FIXME: Translate me! */ /******************************************************/ static char *url_to_filename_real(url * urlp, const char *mime_type, int lockfn) { char *p; bool_t inserted = FALSE; if(!urlp->local_name && prottable[urlp->type].supported) { p = url_get_local_name(urlp, mime_type); if(cfg.enable_info && urlp->type != URLT_FILE && !(urlp->status & URL_REDIRECT)) { char *di; LOCK_GETLFNAME; di = dinfo_get_unique_name(urlp, p, lockfn); UNLOCK_GETLFNAME; if(di) { _free(p); p = di; } } else if(!cfg.enable_info && cfg.unique_doc && urlp->type != URLT_FILE && !(urlp->status & URL_REDIRECT)) { /*** such filename have already other URL ***/ /*** we need to compute new unique filename ***/ char *f; char *pom; int i; url *inhash; LOCK_CFG_FILEHASH; inhash = (url *) dlhash_find_by_key(cfg.fn_hash_tbl, (dllist_t) p); if(!inhash && !inserted) { urlp->local_name = p; dlhash_insert(cfg.fn_hash_tbl, (dllist_t) urlp); inserted = TRUE; } if(inhash && url_compare(inhash, urlp)) inhash = NULL; UNLOCK_CFG_FILEHASH; if(inhash) { int pomlen = strlen(p) + 9; LOCK_GETLFNAME; pom = _malloc(pomlen); f = strrchr(p, '/'); if(!f) f = ""; else { *f = '\0'; f++; } if (cfg.remove_before_store) { snprintf(pom, pomlen, "%s/%s", p, f); } else { i = 0; do { i++; snprintf(pom, pomlen, "%s/%03d%s", p, i, f); LOCK_CFG_FILEHASH; inhash = (url *) dlhash_find_by_key(cfg.fn_hash_tbl, (dllist_t) pom); if(!inhash && !inserted) { urlp->local_name = pom; dlhash_insert(cfg.fn_hash_tbl, (dllist_t) urlp); inserted = TRUE; } UNLOCK_CFG_FILEHASH; } while(inhash); } UNLOCK_GETLFNAME; _free(p); p = pom; } } if(!inserted) { LOCK_CFG_FILEHASH; urlp->local_name = p; dlhash_insert(cfg.fn_hash_tbl, (dllist_t) urlp); inserted = TRUE; UNLOCK_CFG_FILEHASH; } } return urlp->local_name; } char *url_to_filename(url * urlp, int lockfn) { return url_to_filename_real(urlp, NULL, lockfn); } char *url_to_filename_with_type(url * urlp, const char *mime_type, int lockfn) { return url_to_filename_real(urlp, mime_type, lockfn); } void url_set_filename(url * urlp, char *local_name) { LOCK_CFG_FILEHASH; urlp->local_name = local_name; dlhash_insert(cfg.fn_hash_tbl, (dllist_t) urlp); UNLOCK_CFG_FILEHASH; } /******************************************************/ /* k danemu URL vytvori meno suboru v lokalnom strome */ /* FIXME: Translate me! */ /******************************************************/ void url_changed_filename(url * urlp) { url_remove_from_file_hash_tab(urlp); _free(urlp->local_name); url_add_to_file_hash_tab(urlp); } /****************************************************************/ /* k danemu URL vytvori meno docasneho suboru v lokalnom strome */ /* FIXME: Translate me! */ /****************************************************************/ char *url_to_in_filename(url * urlp) { char *pom; char *p; if(cfg.mode == MODE_NOSTORE || cfg.mode == MODE_FTPDIR || (cfg.dumpfd >= 0)) { int pomlen = strlen(priv_cfg.cache_dir) + 50; pom = _malloc(pomlen); #ifdef HAVE_MT snprintf(pom, pomlen, "%s/.in_pavuk_nostore_%d_%ld", priv_cfg.cache_dir, (int) getpid(), pthread_self()); #else snprintf(pom, pomlen, "%s/.in_pavuk_nostore_%d", priv_cfg.cache_dir, (int) getpid()); #endif return pom; } p = url_to_filename(urlp, TRUE); pom = _malloc(strlen(p) + 5); strcpy(pom, p); p = strrchr(pom, '/'); if(!p) p = pom; else p++; memmove(p + 4, p, strlen(p) + 1); strncpy(p, ".in_", 4); return pom; } /************************************************/ /* make from URL structure URL string */ /************************************************/ char *url_to_urlstr(url * urlp, int wa) { char *p; char portstr[10]; char *retv; snprintf(portstr, sizeof(portstr), ":%d", url_get_port(urlp)); switch (urlp->type) { case URLT_HTTP: case URLT_HTTPS: retv = _malloc(strlen(prottable[urlp->type].typestr) + (urlp->p.http.user ? strlen(urlp->p.http.user) + 1 : 0) + (urlp->p.http.password ? strlen(urlp->p.http.password) + 1 : 0) + strlen(urlp->p.http.host) + (urlp->p.http.port == prottable[urlp->type].default_port ? 0 : strlen(portstr) + 1) + strlen(urlp->p.http.document) + (urlp->p.http.searchstr ? strlen(urlp->p.http.searchstr) + 1 : 0) + (urlp->p.http.anchor_name ? strlen(urlp->p.http.anchor_name) + 1 : 0) + 1); sprintf(retv, "%s%s%s%s%s%s%s%s%s%s%s%s", prottable[urlp->type].typestr, urlp->p.http.user ? urlp->p.http.user : "", urlp->p.http.password ? ":" : "", urlp->p.http.password ? urlp->p.http.password : "", (urlp->p.http.password || urlp->p.http.user) ? "@" : "", urlp->p.http.host, (urlp->p.http.port == prottable[urlp->type].default_port ? "" : portstr), urlp->p.http.document, urlp->p.http.searchstr ? "?" : "", urlp->p.http.searchstr ? urlp->p.http.searchstr : "", wa && urlp->p.http.anchor_name ? "#" : "", wa && urlp->p.http.anchor_name ? urlp->p.http.anchor_name : ""); if(!urlp->p.http.searchstr && (urlp->status & URL_FORM_ACTION) && (((form_info *) urlp->extension)->method == FORM_M_GET)) { char *ss; ss = form_encode_urlencoded(((form_info *) urlp->extension)->infos); if(ss) retv = tl_str_concat(retv, "?", ss, NULL); _free(ss); } return retv; case URLT_FILE: p = get_abs_file_path(urlp->p.file.filename); retv = _malloc(strlen(prottable[URLT_FILE].typestr) + strlen(p) + (urlp->p.file.searchstr ? strlen(urlp->p.file.searchstr) + 1 : 0) + ((wa && urlp->p.file.anchor_name) ? strlen(urlp->p.file.anchor_name) + 1 : 0) + 1); sprintf(retv, "%s%s%s%s%s%s", prottable[URLT_FILE].typestr, p, urlp->p.file.searchstr ? "?" : "", urlp->p.file.searchstr ? urlp->p.file.searchstr : "", urlp->p.file.anchor_name ? "#" : "", urlp->p.file.anchor_name ? urlp->p.file.anchor_name : ""); free(p); return retv; case URLT_FTP: case URLT_FTPS: retv = _malloc(strlen(prottable[urlp->type].typestr) + (urlp->p.ftp.user ? strlen(urlp->p.ftp.user) + 1 : 0) + (urlp->p.ftp.password ? strlen(urlp->p.ftp.password) + 1 : 0) + strlen(urlp->p.ftp.host) + (urlp->p.ftp.port == prottable[urlp->type].default_port ? 0 : strlen(portstr) + 1) + strlen(urlp->p.ftp.path) + (urlp->p.ftp.anchor_name ? strlen(urlp->p.ftp.anchor_name) + 1 : 0) + 1); sprintf(retv, "%s%s%s%s%s%s%s%s%s%s", prottable[urlp->type].typestr, urlp->p.ftp.user ? urlp->p.ftp.user : "", urlp->p.ftp.password ? ":" : "", urlp->p.ftp.password ? urlp->p.ftp.password : "", (urlp->p.ftp.password || urlp->p.ftp.user) ? "@" : "", urlp->p.ftp.host, (urlp->p.ftp.port == prottable[urlp->type].default_port ? "" : portstr), urlp->p.ftp.path, wa && urlp->p.ftp.anchor_name ? "#" : "", wa && urlp->p.ftp.anchor_name ? urlp->p.ftp.anchor_name : ""); return retv; case URLT_GOPHER: retv = _malloc(strlen(prottable[URLT_GOPHER].typestr) + strlen(urlp->p.gopher.host) + (urlp->p.gopher.port == prottable[urlp->type].default_port ? 0 : strlen(portstr) + 1) + strlen(urlp->p.gopher.selector) + 2); sprintf(retv, "%s%s%s/%s", prottable[URLT_GOPHER].typestr, urlp->p.gopher.host, (urlp->p.gopher.port == prottable[urlp->type].default_port ? "" : portstr), urlp->p.gopher.selector); return retv; case URLT_UNKNOWN: return tl_strdup(urlp->p.unsup.urlstr); case URLT_FROMPARENT: default: return NULL; } } char *url_to_request_urlstr(url * urlp, int absolute) { char *p, *s, *w, *u; char portstr[10]; char *retv = NULL; snprintf(portstr, sizeof(portstr), ":%d", url_get_port(urlp)); switch (urlp->type) { case URLT_HTTP: case URLT_HTTPS: p = url_encode_str_safe(urlp->p.http.document, URL_PATH_UNSAFE); s = urlp->p.http.searchstr ? url_encode_str_safe(urlp->p.http.searchstr, URL_QUERY_UNSAFE) : NULL; if(absolute) retv = tl_str_concat(NULL, prottable[urlp->type].typestr, urlp->p.http.host, (urlp->p.http.port == prottable[urlp->type].default_port ? "" : portstr), NULL); retv = tl_str_concat(retv, p ? p : "", s ? "?" : "", s ? s : "", NULL); _free(p); _free(s); if(!urlp->p.http.searchstr && (urlp->status & URL_FORM_ACTION) && (((form_info *) urlp->extension)->method == FORM_M_GET)) { char *ss; ss = form_encode_urlencoded(((form_info *) urlp->extension)->infos); if(ss) retv = tl_str_concat(retv, "?", ss, NULL); _free(ss); } break; case URLT_FTP: case URLT_FTPS: p = url_encode_str_safe(urlp->p.ftp.path, URL_PATH_UNSAFE); if(absolute) { w = urlp->p.ftp.password ? url_encode_str_safe(urlp->p.ftp.password, URL_AUTH_UNSAFE) : NULL; u = urlp->p.ftp.user ? url_encode_str_safe(urlp->p.ftp.user, URL_AUTH_UNSAFE) : NULL; retv = tl_str_concat(NULL, prottable[urlp->type].typestr, u ? u : "", w ? ":" : "", w ? w : "", (w || u) ? "@" : "", urlp->p.ftp.host, (urlp->p.ftp.port == prottable[urlp->type].default_port ? "" : portstr), NULL); _free(u); _free(w); } retv = tl_str_concat(retv, p, NULL); _free(p); break; case URLT_GOPHER: p = url_encode_str_safe(urlp->p.gopher.selector, URL_PATH_UNSAFE); if(absolute) retv = tl_str_concat(NULL, prottable[urlp->type].typestr, urlp->p.gopher.host, (urlp->p.gopher.port == prottable[urlp->type].default_port ? "" : portstr), NULL); retv = tl_str_concat(retv, "/", urlp->p.gopher.selector, NULL); _free(p); break; default: break; } return retv; } /********************************************************/ /* z URL vrati adresu servera pre dokument */ /* FIXME: Translate me! */ /********************************************************/ char *url_get_site(url * urlr) { switch (urlr->type) { case URLT_HTTP: case URLT_HTTPS: return urlr->p.http.host; case URLT_FTP: case URLT_FTPS: return urlr->p.ftp.host; case URLT_GOPHER: return urlr->p.gopher.host; default: return NULL; } } int url_get_port(url * urlr) { switch (urlr->type) { case URLT_HTTP: case URLT_HTTPS: return (int) urlr->p.http.port; case URLT_FTP: case URLT_FTPS: return (int) urlr->p.ftp.port; case URLT_GOPHER: return (int) urlr->p.gopher.port; default: return 0; } } char *url_get_path(url * urlr) { switch (urlr->type) { case URLT_HTTP: case URLT_HTTPS: return urlr->p.http.document; case URLT_FTP: case URLT_FTPS: return urlr->p.ftp.path; case URLT_GOPHER: return urlr->p.gopher.selector; case URLT_FILE: return urlr->p.file.filename; default: return NULL; } } void url_set_path(url * urlr, char *path) { switch (urlr->type) { case URLT_HTTP: case URLT_HTTPS: _free(urlr->p.http.document); urlr->p.http.document = tl_strdup(path); break; case URLT_FTP: case URLT_FTPS: _free(urlr->p.ftp.path); urlr->p.ftp.path = tl_strdup(path); break; case URLT_GOPHER: _free(urlr->p.gopher.selector); urlr->p.gopher.selector = tl_strdup(path); break; case URLT_FILE: _free(urlr->p.file.filename); urlr->p.file.filename = tl_strdup(path); break; default: return; } url_changed_filename(urlr); } char *url_get_full_path(url * urlr) { char *rv = NULL; switch (urlr->type) { case URLT_HTTP: case URLT_HTTPS: if(urlr->p.http.searchstr) { rv = tl_str_concat(NULL, urlr->p.http.document, "?", urlr->p.http.searchstr, NULL); } else rv = tl_strdup(urlr->p.http.document); break; default: rv = tl_strdup(url_get_path(urlr)); break; } return rv; } char *url_get_pass(url * urlr, char *realm) { char *pass = NULL; authinfo *ai; switch (urlr->type) { case URLT_HTTP: case URLT_HTTPS: pass = urlr->p.http.password; break; case URLT_FTP: case URLT_FTPS: pass = urlr->p.ftp.password; break; default: return NULL; } if(!pass) { ai = authinfo_match_entry(urlr->type, url_get_site(urlr), url_get_port(urlr), url_get_path(urlr), realm); if(ai) pass = ai->pass; } if(!pass) { pass = priv_cfg.passwd_auth; } return pass; } char *url_get_user(url * urlr, char *realm) { char *user = NULL; authinfo *ai; switch (urlr->type) { case URLT_HTTP: case URLT_HTTPS: user = urlr->p.http.user; break; case URLT_FTP: case URLT_FTPS: user = urlr->p.ftp.user; break; default: return NULL; } if(!user) { ai = authinfo_match_entry(urlr->type, url_get_site(urlr), url_get_port(urlr), url_get_path(urlr), realm); if(ai) user = ai->user; } if(!user) { user = priv_cfg.name_auth; } return user; } int url_get_auth_scheme(url * urlr, char *realm) { authinfo *ai; int scheme = cfg.auth_scheme; ai = authinfo_match_entry(urlr->type, url_get_site(urlr), url_get_port(urlr), url_get_path(urlr), realm); if(ai) scheme = ai->type; return scheme; } char *url_get_anchor_name(url * urlp) { char *anchor; switch (urlp->type) { case URLT_HTTP: case URLT_HTTPS: anchor = urlp->p.http.anchor_name; break; case URLT_FTP: case URLT_FTPS: anchor = urlp->p.ftp.anchor_name; break; case URLT_FILE: anchor = urlp->p.file.anchor_name; break; default: anchor = NULL; break; } return anchor; } void url_clear_anchor(url * urlp) { switch (urlp->type) { case URLT_HTTP: case URLT_HTTPS: _free(urlp->p.http.anchor_name); break; case URLT_FTP: case URLT_FTPS: _free(urlp->p.ftp.anchor_name); break; case URLT_FILE: _free(urlp->p.file.anchor_name); break; default: break; } } char *url_get_search_str(url * urlp) { char *sstr; switch (urlp->type) { case URLT_HTTP: case URLT_HTTPS: sstr = urlp->p.http.searchstr; break; case URLT_FILE: sstr = urlp->p.file.searchstr; break; default: sstr = NULL; break; } return sstr; } int url_is_dir_index(url * urlp) { return ((urlp->type == URLT_HTTP || urlp->type == URLT_HTTPS) && tl_is_dirname(urlp->p.http.document)) || ((urlp->type == URLT_FTP || urlp->type == URLT_FTPS) && urlp->p.ftp.dir); } /* Check if URL is on same site. Be careful not to disallow protocol changes like HTTP to HTTPS. */ int url_is_same_site(url * urla, url * urlb) { return /* (urla->type == urlb->type) && (url_get_port(urla) == url_get_port(urlb)) && */ !strcmp(url_get_site(urla), url_get_site(urlb)); } /**************************************************/ /* FIXME: Translate me */ /* absolutna cesta k dokumentu z lokalneho stromu */ /* ktory je referencovany relativne */ /**************************************************/ char *get_redirect_abs_path(url * rurl, char *fstr) { char *pom, *p, *p1; pom = tl_strdup(url_to_filename(rurl, TRUE)); p = strrchr(pom, '/'); p1 = realloc(pom, strlen(fstr) + (p - pom) + 2); strcpy(p1 + (p - pom) + 1, fstr); p = get_abs_file_path_oss(p1); free(p1); return p; } void url_path_abs(url * urlp) { char *p; switch (urlp->type) { case URLT_HTTP: case URLT_HTTPS: p = get_abs_file_path(urlp->p.http.document); free(urlp->p.http.document); urlp->p.http.document = p; break; case URLT_FTP: case URLT_FTPS: p = get_abs_file_path(urlp->p.ftp.path); if(urlp->p.ftp.path[0] == '/' && urlp->p.ftp.path[1] == '/') { char *pp = tl_str_concat(NULL, "/", p, NULL); _free(p); p = pp; } free(urlp->p.ftp.path); urlp->p.ftp.path = p; break; case URLT_FILE: p = get_abs_file_path(urlp->p.file.filename); free(urlp->p.file.filename); urlp->p.file.filename = p; break; default: break; } } url *filename_to_url(char *ifn) { int cdln = strlen(priv_cfg.cache_dir); bool_t isok = FALSE; if(*ifn != '/') return NULL; if(cfg.enable_info) { url *nurl = dinfo_get_url_for_filename(ifn); if(nurl) return nurl; } if(!strncmp(ifn, priv_cfg.cache_dir, cdln)) { char *p; int i; url *nurl = _malloc(sizeof(url)); char *fn = tl_strdup(ifn); p = fn + cdln; p += (*p == '/'); if(!strcasecmp(tl_get_extension(fn), "css")) nurl->status = URL_STYLE; else nurl->status = 0; nurl->level = 0; nurl->parent_url = NULL; nurl->moved_to = NULL; nurl->extension = NULL; nurl->local_name = tl_is_dirname(ifn) ? tl_str_concat(NULL, ifn, priv_cfg.index_name, NULL) : tl_strdup(ifn); #ifdef HAVE_MT pthread_mutex_init(&nurl->lock, NULL); #endif #ifdef WITH_TREE #ifdef I_FACE nurl->prop = NULL; nurl->tree_nfo = NULL; #endif #endif if(cfg.base_level && cfg.default_prefix) { char *tfn, *pfn; url *purl = url_parse(priv_cfg.default_prefix); assert(purl->type != URLT_FROMPARENT); pfn = url_get_default_local_name_real(purl, FALSE); tfn = tl_str_concat(NULL, priv_cfg.cache_dir, tl_is_dirname(priv_cfg.cache_dir) ? "" : "/", pfn, tl_is_dirname(pfn) ? "" : "/", p, NULL); _free(pfn); _free(fn); fn = tfn; p = fn + cdln; p += (*p == '/'); free_deep_url(purl); } for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].dirname && !strncmp(p, prottable[i].dirname, strlen(prottable[i].dirname)) && p[strlen(prottable[i].dirname)] == '/') { isok = TRUE; break; } } if(isok) { char *p2, *p3; nurl->type = prottable[i].id; nurl->parent_url = NULL; p += strlen(prottable[i].dirname) + 1; if(!p) { free(nurl); free(fn); return NULL; } switch (nurl->type) { case URLT_HTTP: case URLT_HTTPS: nurl->p.http.password = NULL; nurl->p.http.user = NULL; nurl->p.http.anchor_name = NULL; nurl->p.http.searchstr = NULL; nurl->p.http.port = prottable[i].default_port; if((p2 = strchr(p, '/'))) { int p2_len = strlen(p2); int idx_len = strlen(priv_cfg.index_name); char *query = NULL; if(idx_len <= p2_len && !strcmp((p2 + p2_len - idx_len), priv_cfg.index_name) && ((p2_len > idx_len && *(p2 + p2_len - idx_len - 1) == '/') || idx_len == p2_len)) { *(p2 + p2_len - idx_len) = '\0'; } /* for POST #query */ p3 = strchr(p2, '#'); if(p3) { form_info *fi; *p3 = '\0'; query = p3 + 1; fi = _malloc(sizeof(form_info)); fi->method = FORM_M_POST; fi->encoding = FORM_E_URLENCODED; fi->action = NULL; fi->text = NULL; fi->infos = form_parse_urlencoded_query(query); fi->parent_url = NULL; nurl->extension = fi; nurl->status |= URL_FORM_ACTION; } /* for query part of GET request URL */ p3 = strchr(p2, '?'); if(p3) { *p3 = '\0'; nurl->p.http.searchstr = tl_strdup(p3 + 1); } nurl->p.http.document = tl_strdup(p2); *p2 = '\0'; p2 = strrchr(p, '_'); if(p2) { p2++; nurl->p.http.port = _atoi(p2); if(errno == ERANGE) { nurl->p.http.host = tl_strdup(p); nurl->p.http.port = prottable[i].default_port; } else { nurl->p.http.host = tl_strndup(p, p2 - p - 1); } } else nurl->p.http.host = tl_strdup(p); } else { free(nurl); free(fn); return NULL; } break; case URLT_GOPHER: nurl->p.gopher.port = prottable[i].default_port; if((p2 = strchr(p, '/'))) { int p2_len = strlen(p2); int idx_len = strlen(priv_cfg.index_name); p2++; if(idx_len <= p2_len && !strcmp((p2 + p2_len - idx_len), priv_cfg.index_name) && ((p2_len > idx_len && *(p2 + p2_len - idx_len - 1) == '1') || idx_len == p2_len)) { *(p2 + p2_len - idx_len) = '\0'; } nurl->p.gopher.selector = tl_strdup(p2); *p2 = '\0'; p2 = strrchr(p, '_'); if(p2) { p2++; nurl->p.gopher.port = _atoi(p2); if(errno == ERANGE) { nurl->p.gopher.host = tl_strdup(p); nurl->p.gopher.port = prottable[i].default_port; } else { nurl->p.gopher.host = tl_strndup(p, p2 - p - 1); } } else nurl->p.gopher.host = tl_strdup(p); } else { free(nurl); free(fn); return NULL; } break; case URLT_FTP: case URLT_FTPS: nurl->p.ftp.port = prottable[i].default_port; nurl->p.ftp.password = NULL; nurl->p.ftp.user = NULL; nurl->p.ftp.dir = FALSE; nurl->p.ftp.anchor_name = NULL; if((p2 = strchr(p, '/'))) { int p2_len = strlen(p2); int idx_len = strlen(priv_cfg.index_name); if(idx_len <= p2_len && !strcmp((p2 + p2_len - idx_len), priv_cfg.index_name) && ((p2_len > idx_len && *(p2 + p2_len - idx_len - 1) == '/') || idx_len == p2_len)) { *(p2 + p2_len - idx_len) = '\0'; nurl->p.ftp.dir = TRUE; } nurl->p.ftp.path = tl_strdup(p2); *p2 = '\0'; p2 = strrchr(p, '_'); if(p2) { p2++; nurl->p.ftp.port = _atoi(p2); if(errno == ERANGE) { nurl->p.ftp.host = tl_strdup(p); nurl->p.ftp.port = prottable[i].default_port; } else { nurl->p.ftp.host = tl_strndup(p, p2 - p - 1); } } else nurl->p.ftp.host = tl_strdup(p); } else { free(nurl); free(fn); return NULL; } break; default: free(nurl); nurl = NULL; break; } free(fn); return nurl; } free(nurl); } return NULL; } /****************************************/ /* zisti ci bol dokument referencovany */ /* v predchadzajucich cykloch */ /* FIXME: Translate me! */ /****************************************/ url *url_was_befor(url * urlp) { url *ret; if(!prottable[urlp->type].supported) return NULL; LOCK_CFG_URLHASH; ret = (url *) dlhash_find(cfg.url_hash_tbl, (dllist_t) urlp); UNLOCK_CFG_URLHASH; return ret; } void url_forget_filename(url * urlp) { if(cfg.enable_info && cfg.post_update) dinfo_remove(urlp->local_name); url_remove_from_file_hash_tab(urlp); _free(urlp->local_name); } int dllist_url_compare(dllist_t key1, dllist_t key2) { return url_compare((url *) key1, (url *) key2); } int url_compare(url * u1, url * u2) { int rv; if(u1->type != u2->type) return 0; switch (u1->type) { case URLT_HTTP: case URLT_HTTPS: if((rv = strcmp(u1->p.http.document, u2->p.http.document))) return !rv; if(u1->p.http.searchstr && u2->p.http.searchstr) rv = strcmp(u1->p.http.searchstr, u2->p.http.searchstr); else rv = u1->p.http.searchstr - u2->p.http.searchstr; if(rv) return !rv; if(u1->p.http.user && u2->p.http.user) rv = strcmp(u1->p.http.user, u2->p.http.user); else rv = u1->p.http.user - u2->p.http.user; if(rv) return !rv; if(u1->p.http.password && u2->p.http.password) rv = strcmp(u1->p.http.password, u2->p.http.password); else rv = u1->p.http.password - u2->p.http.password; if(rv) return !rv; if((rv = strcmp(u1->p.http.host, u2->p.http.host))) return !rv; if(u1->p.http.port != u2->p.http.port) return FALSE; if((u1->status & URL_FORM_ACTION) != (u2->status & URL_FORM_ACTION)) return FALSE; if((u1->status & URL_FORM_ACTION) && (u2->status & URL_FORM_ACTION)) { dllist *ptr; form_info *fi1 = (form_info *) u1->extension; form_info *fi2 = (form_info *) u2->extension; if(fi1->method != fi2->method) return FALSE; if(fi1->encoding != fi2->encoding) return FALSE; ptr = fi1->infos; while(ptr) { if(!dllist_find2(fi2->infos, ptr->data, form_field_compare)) return FALSE; ptr = ptr->next; } } return TRUE; break; case URLT_FTP: case URLT_FTPS: if((rv = strcmp(u1->p.ftp.path, u2->p.ftp.path))) return !rv; if(u1->p.ftp.user && u2->p.ftp.user) rv = strcmp(u1->p.ftp.user, u2->p.ftp.user); else rv = u1->p.ftp.user - u2->p.ftp.user; if(rv) return !rv; if(u1->p.ftp.password && u2->p.ftp.password) rv = strcmp(u1->p.ftp.password, u2->p.ftp.password); else rv = u1->p.ftp.password - u2->p.ftp.password; if(rv) return !rv; if((rv = strcmp(u1->p.ftp.host, u2->p.ftp.host))) return !rv; return u1->p.ftp.port == u2->p.ftp.port; break; case URLT_GOPHER: if((rv = strcmp(u1->p.gopher.selector, u2->p.gopher.selector))) return !rv; if((rv = strcmp(u1->p.gopher.host, u2->p.gopher.host))) return !rv; return u1->p.gopher.port == u2->p.gopher.port; break; case URLT_FILE: if((rv = strcmp(u1->p.file.filename, u2->p.file.filename))) return !rv; if(u1->p.file.searchstr && u2->p.file.searchstr) rv = strcmp(u1->p.file.searchstr, u2->p.file.searchstr); else rv = u1->p.file.searchstr - u2->p.file.searchstr; return !rv; break; default: return 0; } return 0; } url_info *url_info_new(char *urlstr) { url_info *ui; ui = _malloc(sizeof(url_info)); ui->urlstr = tl_strdup(urlstr); ui->type = URLI_NORMAL; ui->fields = NULL; ui->encoding = FORM_E_UNKNOWN; ui->method = FORM_M_GET; ui->localname = NULL; return ui; } void url_info_free(url_info * ui) { dllist *ptr; if(!ui) return; _free(ui->urlstr); if(ui->type == URLI_FORM) { for(ptr = ui->fields; ptr; ptr = dllist_remove_entry(ptr, ptr)) { form_field *fi = (form_field *) ptr->data; _free(fi->name); _free(fi->value); _free(fi); } } _free(ui->localname); _free(ui); } static const struct { enum { _RQF_URL, _RQF_METHOD, _RQF_ENCODING, _RQF_FIELD, _RQF_FILE, _RQF_LOCALNAME } type; char *str; } _request_fields[] = { {_RQF_URL, "URL:"}, {_RQF_METHOD, "METHOD:"}, {_RQF_ENCODING, "ENCODING:"}, {_RQF_FIELD, "FIELD:"}, {_RQF_FILE, "FILE:"}, {_RQF_LOCALNAME, "LNAME:"} }; url_info *url_info_parse(char *str) { url_info *ui; char *p, *tp; int l = 0; bool_t err = FALSE; bool_t found = FALSE; int i; ui = url_info_new(NULL); ui->type = URLI_FORM; p = str; while(!err && *p) { p += strspn(p, " \t"); found = FALSE; for(i = 0; i < NUM_ELEM(_request_fields); i++) { if(!strncasecmp(p, _request_fields[i].str, strlen(_request_fields[i].str))) { found = TRUE; p += strlen(_request_fields[i].str); if(*p == '\"') { p++; l = strcspn(p, "\""); } else l = strcspn(p, " \t"); if(!l) err = TRUE; break; } } if(err || !found) { err = TRUE; break; } switch (_request_fields[i].type) { case _RQF_URL: { url *urlp; ui->urlstr = tl_strndup(p, l); urlp = url_parse(ui->urlstr); assert(urlp->type != URLT_FROMPARENT); _free(ui->urlstr); ui->urlstr = url_to_urlstr(urlp, FALSE); free_deep_url(urlp); _free(urlp); } break; case _RQF_LOCALNAME: { char *tmp = tl_strndup(p, l); ui->localname = get_abs_file_path_oss(tmp); _free(tmp); } break; case _RQF_METHOD: if(!strncasecmp(p, "GET", l)) ui->method = FORM_M_GET; else if(!strncasecmp(p, "POST", l)) ui->method = FORM_M_POST; else err = TRUE; break; case _RQF_ENCODING: if(!strncasecmp(p, "m", l)) ui->encoding = FORM_E_MULTIPART; else if(!strncasecmp(p, "u", l)) ui->encoding = FORM_E_URLENCODED; else err = TRUE; break; case _RQF_FIELD: case _RQF_FILE: { form_field *fi; fi = _malloc(sizeof(form_field)); fi->name = NULL; fi->value = NULL; fi->type = (_request_fields[i].type == _RQF_FILE) ? FORM_T_FILE : FORM_T_TEXT; tp = strchr(p, '='); if(!tp || (tp - p) > l) err = TRUE; else { fi->name = form_decode_urlencoded_str(p, tp - p); fi->value = form_decode_urlencoded_str(tp + 1, l - (tp - p + 1)); if(fi->type == FORM_T_TEXT && strchr(fi->value, '\n')) fi->type = FORM_T_TEXTAREA; } if(err || !fi->name || !fi->value) { _free(fi->value); _free(fi->name); _free(fi); } else ui->fields = dllist_append(ui->fields, (dllist_t) fi); } break; } p += l; p += *p == '\"'; } if(!err) { if(!ui->urlstr) { xprintf(1, gettext("Missing specification of URL in request\n")); err = TRUE; } #if 0 /* sometimes we need also empty forms */ if(!ui->fields && ui->method == FORM_M_GET) ui->type = URLI_NORMAL; else if(!ui->fields) { xprintf(1, gettext("Missing request fields specification for POST request\n")); err = TRUE; } #endif if(ui->method == FORM_M_GET && ui->encoding == FORM_E_MULTIPART) { xprintf(1, gettext("Multipart encoding not supported with GET requests\n")); err = TRUE; } } if(err) { url_info_free(ui); ui = NULL; } return ui; } char *url_info_dump(url_info * ui) { char *retv = NULL; retv = tl_str_concat(retv, "URL:\"", ui->urlstr, "\" ", NULL); if(ui->localname) retv = tl_str_concat(retv, "LNAME:\"", ui->localname, "\" ", NULL); if(ui->type == URLI_FORM) { dllist *ptr; if(ui->method == FORM_M_GET) retv = tl_str_append(retv, "METHOD:GET "); else if(ui->method == FORM_M_POST) retv = tl_str_append(retv, "METHOD:POST "); if(ui->encoding == FORM_E_URLENCODED) retv = tl_str_append(retv, "ENCODING:u "); if(ui->encoding == FORM_E_MULTIPART) retv = tl_str_append(retv, "ENCODING:m "); ptr = ui->fields; while(ptr) { char *n, *v; form_field *ff = (form_field *) ptr->data; n = form_encode_urlencoded_str(ff->name); v = form_encode_urlencoded_str(ff->value); if(ff->type == FORM_T_FILE) retv = tl_str_concat(retv, "FILE:\"", n, "=", v, "\" ", NULL); else retv = tl_str_concat(retv, "FIELD:\"", n, "=", v, "\" ", NULL); _free(n); _free(v); ptr = ptr->next; } } return retv; } url_info *url_info_duplicate(url_info * ui) { url_info *cui; dllist *ptr; cui = url_info_new(ui->urlstr); if(ui->localname) cui->localname = tl_strdup(ui->localname); cui->method = ui->method; cui->encoding = ui->encoding; cui->type = ui->type; ptr = ui->fields; while(ptr) { form_field *ff = (form_field *) ptr->data; form_field *cff = (form_field *) _malloc(sizeof(form_field)); cff->type = ff->type; cff->name = tl_strdup(ff->name); cff->value = tl_strdup(ff->value); cui->fields = dllist_append(cui->fields, (dllist_t) cff); ptr = ptr->next; } return cui; } pavuk-0.9.35/src/url.h0000644000175000001440000001754510325717717011443 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _url_h_ #define _url_h_ #include "tools.h" #include "dllist.h" #include "mt.h" typedef struct { char *host; /*** HTTP host address ***/ unsigned short port; /*** HTTP service port number ***/ char *document; /*** document path ***/ char *searchstr; /*** query string ***/ char *anchor_name; /*** anchor name ***/ char *user; /*** username for authorization ***/ char *password; /*** password for authorization ***/ } url_http_t; typedef struct { char *host; /*** FTP host address ***/ unsigned short port; /*** FTP service port number ***/ char *user; /*** username for authorization ***/ char *password; /*** password for authorization ***/ char *path; /*** document path ***/ char *anchor_name; /*** anchor name ***/ bool_t dir; /*** is this FTP directory URL ? ***/ } url_ftp_t; typedef struct { char *filename; /*** file path ***/ char *searchstr; /*** query string ***/ char *anchor_name; /*** anchor name ***/ } url_file_t; typedef struct { char *host; /*** GOPHER host address ***/ unsigned short port; /*** GOPHER service port number ***/ char *selector; /*** document selector ***/ } url_gopher_t; typedef struct { char *urlstr; /*** url string for unsupported type of URLs ***/ } url_unsup_t; typedef enum { /*** id for URL types ***/ URLT_UNKNOWN, URLT_HTTP, URLT_HTTPS, URLT_FTP, URLT_FTPS, URLT_FILE, URLT_GOPHER, URLT_FROMPARENT } protocol; /* refers to RFC 2396 */ #define URL_PATH_UNSAFE " <>\"#%{}|\\^[]`+@=&$?;" #define URL_QUERY_UNSAFE " <>\"#%{}|\\^[]`" #define URL_RQUERY_UNSAFE " ;/?:@&=+$,<>#%\"{}|\\^[]`" #define URL_AUTH_UNSAFE " <>\"#%{}|\\^[]`+@=&:$?;/" #define URL_REDIRECT (unsigned int) (1 << 0) #define URL_INLINE_OBJ (unsigned int) (1 << 1) #define URL_PROCESSED (unsigned int) (1 << 2) #define URL_DOWNLOADED (unsigned int) (1 << 3) #define URL_ERR_UNREC (unsigned int) (1 << 4) #define URL_MOVED (unsigned int) (1 << 5) #define URL_REJECTED (unsigned int) (1 << 6) #define URL_USER_DISABLED (unsigned int) (1 << 7) #define URL_NOT_FOUND (unsigned int) (1 << 8) #define URL_TRUNCATED (unsigned int) (1 << 9) #define URL_ERR_REC (unsigned int) (1 << 10) #define URL_STYLE (unsigned int) (1 << 11) #define URL_INNSCACHE (unsigned int) (1 << 12) #define URL_ISHTML (unsigned int) (1 << 13) #define URL_ISLOCAL (unsigned int) (1 << 14) #define URL_NORECURSE (unsigned int) (1 << 15) #define URL_FORM_ACTION (unsigned int) (1 << 16) #define URL_HAVE_FORMS (unsigned int) (1 << 17) #define URL_ISFIRST (unsigned int) (1 << 18) #define URL_ISSTARTING (unsigned int) (1 << 19) #define URL_ISSCRIPT (unsigned int) (1 << 20) typedef struct _protinfo { protocol id; char *dirname; char *urlid; char *typestr; int default_port; bool_t supported; } protinfo; typedef struct { /*** properties of document ***/ char *type; /*** MIME type of document ***/ ssize_t size; /*** size of document ***/ time_t mdtm; /*** modification time ***/ } url_prop; typedef union { url_http_t http; url_file_t file; url_ftp_t ftp; url_gopher_t gopher; url_unsup_t unsup; } url_union_t; typedef struct _url { protocol type; /*** type of URL ***/ dllist *parent_url; /*** list of parent URLs ***/ struct _url *moved_to; /*** pointer to new URL if document was moved ***/ unsigned short level; /*** tree level of document ***/ unsigned short ref_cnt; /*** number of references to this URL structure ***/ unsigned int status; /*** status flags of URL ***/ url_union_t p; /*** parsed URL infos ***/ char *local_name; /*** assigned local filename ***/ void *extension; /*** posible url extensions ***/ #ifdef WITH_TREE #ifdef I_FACE url_prop *prop; /*** document properties ***/ void **tree_nfo; /*** UI representation of tree nodes ***/ #endif #endif /* WITH_TREE */ #ifdef HAVE_MT pthread_mutex_t lock; /*** mt lock ***/ #endif } url; #define URLI_NORMAL 1 #define URLI_FORM 2 typedef enum { FORM_M_GET, FORM_M_POST, FORM_M_UNKNOWN } form_method; typedef enum { FORM_E_MULTIPART, FORM_E_URLENCODED, FORM_E_UNKNOWN } form_encoding; typedef struct { char *urlstr; int type; form_method method; form_encoding encoding; dllist *fields; char *localname; } url_info; extern url_info *url_info_new(char *); extern url_info *url_info_parse(char *); extern char *url_info_dump(url_info *); extern void url_info_free(url_info *); extern url_info *url_info_duplicate(url_info *); extern url *url_parse(char *); extern url *url_dup_url(url *); extern char *url_parse_scheme(char *); extern protocol url_scheme_to_schemeid(char *); extern int dllist_url_compare(dllist_t key1, dllist_t key2); extern int url_compare(url *, url *); extern char *url_to_absolute_url(char *, char *, url *, char *); extern char *url_encode_str(char *, char *); extern char *url_decode_str(const char *, int); extern url *new_url(url *); extern char *url_to_filename(url *, int); extern char *url_to_filename_with_type(url *, const char *, int); extern char *url_get_default_local_name(url *); extern char *url_get_local_name_real(url *, const char *, int); extern void url_changed_filename(url *); extern char *url_to_in_filename(url *); extern void free_deep_url(url *); extern char *get_redirect_abs_path(url *, char *); extern char *url_to_urlstr(url *, int); extern char *url_to_request_urlstr(url *, int); extern void url_path_abs(url *); extern url *filename_to_url(char *); extern void cat_links_to_url_list(dllist *); extern void append_url_to_list(url *); extern void append_url_list_to_list(dllist *, dllist *); extern char *url_get_site(url *); extern int url_get_port(url *); extern char *url_get_pass(url *, char *); extern char *url_get_user(url *, char *); extern int url_get_auth_scheme(url *, char *); extern char *url_get_path(url *); extern char *url_get_full_path(url *); extern char *url_get_anchor_name(url *); extern void url_clear_anchor(url *); extern char *url_get_search_str(url *); extern void url_set_path(url *, char *); extern int url_is_dir_index(url *); extern int url_is_same_site(url *, url *); extern void url_add_to_url_hash_tab(url *); extern void url_remove_from_url_hash_tab(url *); extern void url_add_to_file_hash_tab(url *); extern void url_remove_from_file_hash_tab(url *); extern url *url_was_befor(url *); extern void replace_url_in_list(url *, int); extern void link_url_in_list(url *, url *); extern int url_redirect_to(url *, url *, int); extern void url_forget_filename(url *); extern void url_set_filename(url *, char *); extern const protinfo prottable[9]; #endif pavuk-0.9.35/src/gui_common.c0000644000175000001440000030434610466673763012776 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef GTK_FACE #include "gui.h" #include #include #include "uconfig.h" #include "lfname.h" #include "lang.h" #include "charset.h" #include "form.h" #include "http.h" #include "ftp.h" #include "html.h" #include "jstrans.h" #include "icons/append.xpm" #include "icons/modify.xpm" #include "icons/clear.xpm" #include "icons/delete.xpm" #include "icons/ok.xpm" #include "icons/apply.xpm" #include "icons/limit.xpm" #include "icons/cancel.xpm" static void CfgCommon(GtkObject * object, gpointer func_data) { if(!xget_cfg_values_comm()) { if(cfg.use_prefs) cfg_dump_pref(); } } /*** URL ***/ struct cfg_url_dlg_t { GtkWidget *url_list; GtkWidget *url_entry; GtkWidget *localname_entry; GtkWidget *ext_sw; GtkWidget *ext_frame; GtkWidget *method; GtkWidget *encoding; GtkWidget *field_list; GtkWidget *field_type; GtkWidget *field_name; GtkWidget *field_value_l; GtkWidget *field_value_t; GtkWidget *field_value_f; GtkWidget *tab; }; static url_info *cfg_url_dlg_get_url_info(struct cfg_url_dlg_t *urldlg) { url_info *ui; char *p; int row; p = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->url_entry)); ui = url_info_new(p); ui->type = URLI_FORM; if(urldlg->localname_entry) { p = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->localname_entry)); if(p && *p) ui->localname = tl_strdup(p); } if(urldlg->method) ui->method = GTK_OPTION_MENU(urldlg->method)->menu_item ? (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(urldlg-> method)->menu_item)) : FORM_M_GET; if(urldlg->encoding) ui->encoding = GTK_OPTION_MENU(urldlg->encoding)->menu_item ? (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(urldlg-> encoding)->menu_item)) : FORM_E_URLENCODED; for(row = 0; row < GTK_CLIST(urldlg->field_list)->rows; row++) { form_field *ff; ff = _malloc(sizeof(form_field)); ff->type = (int) gtk_clist_get_row_data(GTK_CLIST(urldlg->field_list), row); gtk_clist_get_text(GTK_CLIST(urldlg->field_list), row, 1, &p); ff->name = form_decode_urlencoded_str(p, strlen(p)); gtk_clist_get_text(GTK_CLIST(urldlg->field_list), row, 2, &p); ff->value = form_decode_urlencoded_str(p, strlen(p)); ui->fields = dllist_append(ui->fields, (dllist_t) ff); } return ui; } static void cfg_url_dlg_append(GtkWidget * w, struct cfg_url_dlg_t *urldlg) { char *p, *s, *ln; char *pp[2]; bool_t ok = TRUE; int row; p = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->url_entry)); if(p && *p) { url_info *ui = NULL; protocol pt = URLT_UNKNOWN; s = url_parse_scheme(p); if(s) { pt = url_scheme_to_schemeid(s); ok = prottable[pt].supported; _free(s); } else pt = URLT_HTTP; if(!ok) { /* unsupported URL type */ gdk_beep(); return; } if((urldlg->ext_sw && GTK_TOGGLE_BUTTON(urldlg->ext_sw)->active) || !urldlg->ext_sw) { if(pt != URLT_HTTP && pt != URLT_HTTPS) { /* extended request supported only with HTTP */ gdk_beep(); return; } ui = cfg_url_dlg_get_url_info(urldlg); ln = ui->localname; } else ln = NULL; if(!ui && urldlg->localname_entry) { ln = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->localname_entry)); if(ln && *ln) { ui = url_info_new(p); ui->type = URLI_NORMAL; ui->localname = tl_strdup(ln); } } gtk_clist_freeze(GTK_CLIST(urldlg->url_list)); pp[0] = p; pp[1] = ln; row = gtk_clist_append(GTK_CLIST(urldlg->url_list), pp); gtk_clist_set_row_data_full(GTK_CLIST(urldlg->url_list), row, ui, (GtkDestroyNotify) url_info_free); gtk_clist_thaw(GTK_CLIST(urldlg->url_list)); gtk_clist_select_row(GTK_CLIST(urldlg->url_list), row, 0); } else gdk_beep(); } static void cfg_url_dlg_modify(GtkWidget * w, struct cfg_url_dlg_t *urldlg) { char *p, *s, *ln; bool_t ok = TRUE; int row; if(!GTK_CLIST(urldlg->url_list)->selection) { gdk_beep(); return; } row = GPOINTER_TO_INT(GTK_CLIST(urldlg->url_list)->selection->data); p = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->url_entry)); if(p && *p) { url_info *ui = NULL; protocol pt = URLT_UNKNOWN; s = url_parse_scheme(p); if(s) { pt = url_scheme_to_schemeid(s); ok = prottable[pt].supported; _free(s); } else pt = URLT_HTTP; if(!ok) { /* unsupported URL type !!! */ } /* ui = (url_info *) gtk_clist_get_row_data(GTK_CLIST(urldlg->url_list), row); if (ui) url_info_free(ui); ui = NULL; */ if((urldlg->ext_sw && GTK_TOGGLE_BUTTON(urldlg->ext_sw)->active) || !urldlg->ext_sw) { if(pt != URLT_HTTP && pt != URLT_HTTPS) { /* extended request supported only with HTTP */ gdk_beep(); return; } ui = cfg_url_dlg_get_url_info(urldlg); ln = ui->localname; } else ln = NULL; if(!ui && urldlg->localname_entry) { ln = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->localname_entry)); if(ln && *ln) { ui = url_info_new(p); ui->type = URLI_NORMAL; ui->localname = tl_strdup(ln); } gtk_clist_set_text(GTK_CLIST(urldlg->url_list), row, 1, ln); } gtk_clist_set_text(GTK_CLIST(urldlg->url_list), row, 1, ln); gtk_clist_set_text(GTK_CLIST(urldlg->url_list), row, 0, p); gtk_clist_set_row_data_full(GTK_CLIST(urldlg->url_list), row, ui, (GtkDestroyNotify) url_info_free); gtk_clist_select_row(GTK_CLIST(urldlg->url_list), row, 0); } else gdk_beep(); } static void cfg_url_dlg_einfo_clear(struct cfg_url_dlg_t *urldlg) { guitl_ListClear(NULL, urldlg->field_list); } static void cfg_url_dlg_switch(GtkObject * w, int row, int col, GdkEvent * event, struct cfg_url_dlg_t *urldlg) { if(GTK_CLIST(w)->selection) { url_info *ui; char *p; ui = (url_info *) gtk_clist_get_row_data(GTK_CLIST(urldlg->url_list), row); if(urldlg->ext_sw) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(urldlg->ext_sw), ui ? (ui->type != URLI_NORMAL) : FALSE); gtk_widget_set_sensitive(urldlg->ext_frame, ui ? (ui->type != URLI_NORMAL) : FALSE); } gtk_clist_get_text(GTK_CLIST(urldlg->url_list), row, 0, &p); gtk_entry_set_text(GTK_ENTRY(urldlg->url_entry), p); if(urldlg->localname_entry) { p = ""; gtk_clist_get_text(GTK_CLIST(urldlg->url_list), row, 1, &p); gtk_entry_set_text(GTK_ENTRY(urldlg->localname_entry), p); } if(ui && ui->type != URLI_NORMAL) { dllist *ptr; if(urldlg->method) gtk_option_menu_set_history(GTK_OPTION_MENU(urldlg->method), ui->method); if(urldlg->encoding) gtk_option_menu_set_history(GTK_OPTION_MENU(urldlg->encoding), ui->encoding); gtk_clist_clear(GTK_CLIST(urldlg->field_list)); ptr = ui->fields; while(ptr) { char *p3[3]; int row; form_field *ff = (form_field *) ptr->data; switch (ff->type) { case FORM_T_FILE: p3[0] = "FILE"; break; case FORM_T_TEXTAREA: p3[0] = "LONG TEXT"; break; default: p3[0] = "TEXT"; } p3[1] = form_encode_urlencoded_str(ff->name); p3[2] = form_encode_urlencoded_str(ff->value); row = gtk_clist_append(GTK_CLIST(urldlg->field_list), p3); gtk_clist_set_row_data(GTK_CLIST(urldlg->field_list), row, (gpointer) ff->type); _free(p3[1]); _free(p3[2]); ptr = ptr->next; } if(ui->fields) gtk_clist_select_row(GTK_CLIST(urldlg->field_list), 0, 0); } else cfg_url_dlg_einfo_clear(urldlg); } else { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(urldlg->ext_sw), FALSE); gtk_widget_set_sensitive(urldlg->ext_frame, FALSE); gtk_entry_set_text(GTK_ENTRY(urldlg->url_entry), ""); if(urldlg->localname_entry) gtk_entry_set_text(GTK_ENTRY(urldlg->localname_entry), ""); cfg_url_dlg_einfo_clear(urldlg); } } static void cfg_url_dlg_field_append(GtkWidget * w, struct cfg_url_dlg_t *urldlg) { char *p3[3]; int type; type = GTK_OPTION_MENU(urldlg->field_type)->menu_item ? (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(urldlg-> field_type)->menu_item)) : 0; switch (type) { case FORM_T_FILE: p3[0] = "FILE"; p3[2] = form_encode_urlencoded_str( (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->field_value_f))); break; case FORM_T_TEXTAREA: { int len; char *p; p3[0] = "LONG TEXT"; #if GTK_FACE < 2 len = gtk_text_get_length(GTK_TEXT(urldlg->field_value_t)); #else len = gtk_text_buffer_get_char_count( gtk_text_view_get_buffer(GTK_TEXT_VIEW(urldlg->field_value_t))); #endif p = gtk_editable_get_chars(GTK_EDITABLE(urldlg->field_value_t), 0, len); p3[2] = form_encode_urlencoded_str(p); g_free(p); } break; default: p3[0] = "TEXT"; p3[2] = form_encode_urlencoded_str( (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->field_value_l))); } p3[1] = form_encode_urlencoded_str((gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg-> field_name))); if(p3[0] && p3[1] && *p3[0] && *p3[1]) { int row = gtk_clist_append(GTK_CLIST(urldlg->field_list), p3); gtk_clist_set_row_data(GTK_CLIST(urldlg->field_list), row, (gpointer) type); } else gdk_beep(); _free(p3[2]); _free(p3[1]); } static void cfg_url_dlg_field_modify(GtkWidget * w, struct cfg_url_dlg_t *urldlg) { char *p3[3]; int type; int row; if(!GTK_CLIST(urldlg->field_list)->selection) { gdk_beep(); return; } row = GPOINTER_TO_INT(GTK_CLIST(urldlg->field_list)->selection->data); type = GTK_OPTION_MENU(urldlg->field_type)->menu_item ? (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(urldlg-> field_type)->menu_item)) : 0; switch (type) { case FORM_T_FILE: p3[0] = "FILE"; p3[2] = form_encode_urlencoded_str( (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->field_value_f))); break; case FORM_T_TEXTAREA: { int len; char *p; p3[0] = "LONG TEXT"; #if GTK_FACE < 2 len = gtk_text_get_length(GTK_TEXT(urldlg->field_value_t)); #else len = gtk_text_buffer_get_char_count( gtk_text_view_get_buffer(GTK_TEXT_VIEW(urldlg->field_value_t))); #endif p = gtk_editable_get_chars(GTK_EDITABLE(urldlg->field_value_t), 0, len); p3[2] = form_encode_urlencoded_str(p); g_free(p); } break; default: p3[0] = "TEXT"; p3[2] = form_encode_urlencoded_str( (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->field_value_l))); } p3[1] = form_encode_urlencoded_str((gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg-> field_name))); if(p3[0] && p3[1] && *p3[0] && *p3[1]) { gtk_clist_set_text(GTK_CLIST(urldlg->field_list), row, 0, p3[0]); gtk_clist_set_text(GTK_CLIST(urldlg->field_list), row, 1, p3[1]); gtk_clist_set_text(GTK_CLIST(urldlg->field_list), row, 2, p3[2]); gtk_clist_set_row_data(GTK_CLIST(urldlg->field_list), row, (gpointer) type); } else gdk_beep(); _free(p3[2]); _free(p3[1]); } static void cfg_url_dlg_set_type(GtkWidget * w, struct cfg_url_dlg_t *urldlg) { int type; int tab; type = (int) gtk_object_get_user_data(GTK_OBJECT(w)); switch (type) { case FORM_T_FILE: tab = 1; break; case FORM_T_TEXTAREA: tab = 2; break; default: tab = 0; } gtk_notebook_set_page(GTK_NOTEBOOK(urldlg->tab), tab); } static void cfg_url_dlg_field_switch(GtkObject * w, int row, int col, GdkEvent * event, struct cfg_url_dlg_t *urldlg) { if(GTK_CLIST(w)->selection) { char *p; int type; type = (int) gtk_clist_get_row_data(GTK_CLIST(urldlg->field_list), row); gtk_clist_get_text(GTK_CLIST(urldlg->field_list), row, 1, &p); p = form_decode_urlencoded_str(p, strlen(p)); gtk_entry_set_text(GTK_ENTRY(urldlg->field_name), p); _free(p); gtk_clist_get_text(GTK_CLIST(urldlg->field_list), row, 2, &p); p = form_decode_urlencoded_str(p, strlen(p)); switch (type) { case FORM_T_FILE: gtk_option_menu_set_history(GTK_OPTION_MENU(urldlg->field_type), 1); gtk_entry_set_text(GTK_ENTRY(urldlg->field_value_f), p); gtk_notebook_set_page(GTK_NOTEBOOK(urldlg->tab), 1); break; case FORM_T_TEXTAREA: gtk_option_menu_set_history(GTK_OPTION_MENU(urldlg->field_type), 2); #if GTK_FACE < 2 gtk_text_set_point(GTK_TEXT(urldlg->field_value_t), 0); gtk_text_forward_delete(GTK_TEXT(urldlg->field_value_t), gtk_text_get_length(GTK_TEXT(urldlg->field_value_t))); gtk_text_insert(GTK_TEXT(urldlg->field_value_t), NULL, NULL, NULL, p, strlen(p)); #else gtk_text_buffer_set_text(gtk_text_view_get_buffer( GTK_TEXT_VIEW(urldlg->field_value_t)), p, -1); #endif gtk_notebook_set_page(GTK_NOTEBOOK(urldlg->tab), 2); break; default: gtk_option_menu_set_history(GTK_OPTION_MENU(urldlg->field_type), 0); gtk_entry_set_text(GTK_ENTRY(urldlg->field_value_l), p); gtk_notebook_set_page(GTK_NOTEBOOK(urldlg->tab), 0); } _free(p); } else { gtk_entry_set_text(GTK_ENTRY(urldlg->field_name), ""); gtk_entry_set_text(GTK_ENTRY(urldlg->field_value_f), ""); gtk_entry_set_text(GTK_ENTRY(urldlg->field_value_l), ""); #if GTK_FACE < 2 gtk_text_set_point(GTK_TEXT(urldlg->field_value_t), 0); gtk_text_forward_delete(GTK_TEXT(urldlg->field_value_t), gtk_text_get_length(GTK_TEXT(urldlg->field_value_t))); #else gtk_text_buffer_set_text(gtk_text_view_get_buffer( GTK_TEXT_VIEW(urldlg->field_value_t)), "", 0); #endif } } static void cfg_url_dlg_set_sensitive(GtkWidget * w, struct cfg_url_dlg_t *urldlg) { gtk_widget_set_sensitive(urldlg->ext_frame, GTK_TOGGLE_BUTTON(urldlg->ext_sw)->active); } static void cfgtab_url(GtkWidget * notebook) { GtkWidget *label, *box, *tbox, *ptab, *prow, *menu, *mi; GtkWidget *swin, *brow, *button, *pbox; GtkWidget *hsb, *vsb; GtkAdjustment *hadj, *vadj; static struct cfg_url_dlg_t urldlg; tbox = gtk_hbox_new(FALSE, 2); gtk_widget_show(tbox); label = gtk_label_new(gettext("URL")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tbox, label); box = gtk_table_new(3, 1, FALSE); gtk_box_pack_start(GTK_BOX(tbox), box, TRUE, TRUE, 1); gtk_widget_show(box); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_table_attach_defaults(GTK_TABLE(box), swin, 0, 1, 0, 1); gtk_widget_show(swin); gui_cfg.url_list = gtk_clist_new(2); urldlg.url_list = gui_cfg.url_list; gtk_clist_set_selection_mode(GTK_CLIST(gui_cfg.url_list), GTK_SELECTION_BROWSE); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.url_list), 0, gettext("URL")); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.url_list), 1, gettext("Local filename")); gtk_clist_column_titles_show(GTK_CLIST(gui_cfg.url_list)); gtk_clist_set_column_width(GTK_CLIST(gui_cfg.url_list), 0, 200); gtk_clist_set_reorderable(GTK_CLIST(gui_cfg.url_list), TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.url_list), 1, TRUE); gtk_container_add(GTK_CONTAINER(swin), gui_cfg.url_list); gtk_widget_show(gui_cfg.url_list); gtk_signal_connect(GTK_OBJECT(gui_cfg.url_list), "select_row", GTK_SIGNAL_FUNC(cfg_url_dlg_switch), (gpointer) & urldlg); brow = gtk_table_new(2, 2, FALSE); gtk_table_attach(GTK_TABLE(box), brow, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(brow); gui_cfg.url_entry = guitl_tab_add_entry(brow, gettext("Request URL: "), 0, 0, FALSE); urldlg.url_entry = gui_cfg.url_entry; urldlg.localname_entry = guitl_tab_add_path_entry(brow, gettext("Local filename: "), 0, 2, FALSE); brow = gtk_hbutton_box_new(); gtk_table_attach(GTK_TABLE(box), brow, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 5); gtk_hbutton_box_set_spacing_default(1); gtk_widget_show(brow); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cfg_url_dlg_append), (gpointer) & urldlg); gtk_signal_connect(GTK_OBJECT(gui_cfg.url_entry), "activate", GTK_SIGNAL_FUNC(cfg_url_dlg_append), (gpointer) & urldlg); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cfg_url_dlg_modify), (gpointer) & urldlg); button = guitl_pixmap_button(clear_xpm, NULL, gettext("Clear")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListClear), (gpointer) gui_cfg.url_list); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), (gpointer) gui_cfg.url_list); /*** DRAG'N'DROP ***/ gtk_drag_dest_set(box, GTK_DEST_DEFAULT_ALL, dragtypes, NUM_ELEM(dragtypes) - 1, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_signal_connect(GTK_OBJECT(box), "drag_data_received", GTK_SIGNAL_FUNC(gui_window_drop_url), NULL); box = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(tbox), box, TRUE, TRUE, 1); gtk_widget_show(box); urldlg.ext_sw = gtk_check_button_new_with_label(gettext ("Extended informations for HTTP POST request")); gtk_box_pack_start(GTK_BOX(box), urldlg.ext_sw, FALSE, FALSE, 1); gtk_widget_show(urldlg.ext_sw); gtk_signal_connect(GTK_OBJECT(urldlg.ext_sw), "toggled", GTK_SIGNAL_FUNC(cfg_url_dlg_set_sensitive), &urldlg); urldlg.ext_frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(box), urldlg.ext_frame, FALSE, FALSE, 1); gtk_widget_show(urldlg.ext_frame); ptab = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(urldlg.ext_frame), ptab); gtk_widget_show(ptab); prow = gtk_table_new(2, 2, FALSE); gtk_box_pack_start(GTK_BOX(ptab), prow, FALSE, FALSE, 1); gtk_widget_show(prow); label = gtk_label_new(gettext("Request method: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(prow), label, 0, 1, 0, 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); urldlg.method = gtk_option_menu_new(); gtk_table_attach(GTK_TABLE(prow), urldlg.method, 1, 2, 0, 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); menu = gtk_menu_new(); mi = gtk_menu_item_new_with_label("GET"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_M_GET); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); mi = gtk_menu_item_new_with_label("POST"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_M_POST); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_option_menu_set_menu(GTK_OPTION_MENU(urldlg.method), menu); gtk_widget_show(urldlg.method); label = gtk_label_new(gettext("Request encoding: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(prow), label, 0, 1, 1, 2, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); urldlg.encoding = gtk_option_menu_new(); gtk_table_attach(GTK_TABLE(prow), urldlg.encoding, 1, 2, 1, 2, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); menu = gtk_menu_new(); mi = gtk_menu_item_new_with_label("multipart/form-data"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_E_MULTIPART); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); mi = gtk_menu_item_new_with_label("application/x-www-form-urlencoded"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_E_URLENCODED); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_option_menu_set_menu(GTK_OPTION_MENU(urldlg.encoding), menu); gtk_widget_show(urldlg.encoding); label = gtk_label_new(gettext("Query fields: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(ptab), label, FALSE, FALSE, 2); gtk_widget_show(label); swin = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(swin, -1, 100); gtk_box_pack_start(GTK_BOX(ptab), swin, TRUE, TRUE, 2); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(swin); urldlg.field_list = gtk_clist_new(3); gtk_clist_set_selection_mode(GTK_CLIST(urldlg.field_list), GTK_SELECTION_BROWSE); gtk_clist_set_column_title(GTK_CLIST(urldlg.field_list), 0, gettext("Type")); gtk_clist_set_column_title(GTK_CLIST(urldlg.field_list), 1, gettext("Name")); gtk_clist_set_column_title(GTK_CLIST(urldlg.field_list), 2, gettext("Value")); gtk_clist_column_titles_show(GTK_CLIST(urldlg.field_list)); gtk_clist_set_column_auto_resize(GTK_CLIST(urldlg.field_list), 0, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(urldlg.field_list), 1, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(urldlg.field_list), 2, TRUE); gtk_container_add(GTK_CONTAINER(swin), urldlg.field_list); gtk_widget_show(urldlg.field_list); gtk_signal_connect(GTK_OBJECT(urldlg.field_list), "select_row", GTK_SIGNAL_FUNC(cfg_url_dlg_field_switch), (gpointer) & urldlg); prow = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(ptab), prow, FALSE, FALSE, 1); gtk_widget_show(prow); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_add(GTK_CONTAINER(prow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cfg_url_dlg_field_append), &urldlg); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_add(GTK_CONTAINER(prow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cfg_url_dlg_field_modify), &urldlg); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_add(GTK_CONTAINER(prow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), (gpointer) urldlg.field_list); prow = gtk_table_new(2, 3, FALSE); gtk_box_pack_start(GTK_BOX(ptab), prow, FALSE, FALSE, 1); gtk_widget_show(prow); label = gtk_label_new(gettext("Type: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(prow), label, 0, 1, 0, 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); urldlg.field_type = gtk_option_menu_new(); gtk_table_attach(GTK_TABLE(prow), urldlg.field_type, 1, 2, 0, 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); menu = gtk_menu_new(); mi = gtk_menu_item_new_with_label("TEXT"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_T_TEXT); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(cfg_url_dlg_set_type), (gpointer) & urldlg); mi = gtk_menu_item_new_with_label("FILE"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_T_FILE); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(cfg_url_dlg_set_type), (gpointer) & urldlg); mi = gtk_menu_item_new_with_label("LONG TEXT"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_T_TEXTAREA); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(cfg_url_dlg_set_type), (gpointer) & urldlg); gtk_option_menu_set_menu(GTK_OPTION_MENU(urldlg.field_type), menu); gtk_widget_show(urldlg.field_type); urldlg.field_name = guitl_tab_add_entry(prow, gettext("Name: "), 0, 1, FALSE); label = gtk_label_new(gettext("Value: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0); gtk_table_attach(GTK_TABLE(prow), label, 0, 1, 2, 3, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); urldlg.tab = gtk_notebook_new(); gtk_notebook_set_show_border(GTK_NOTEBOOK(urldlg.tab), FALSE); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(urldlg.tab), FALSE); gtk_table_attach(GTK_TABLE(prow), urldlg.tab, 1, 2, 2, 3, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(urldlg.tab); label = gtk_label_new("TEXT"); brow = gtk_vbox_new(FALSE, 1); gtk_widget_show(brow); gtk_notebook_append_page(GTK_NOTEBOOK(urldlg.tab), brow, label); urldlg.field_value_l = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(brow), urldlg.field_value_l, FALSE, FALSE, 1); gtk_widget_show(urldlg.field_value_l); label = gtk_label_new("FILE"); brow = gtk_vbox_new(FALSE, 1); gtk_widget_show(brow); gtk_notebook_append_page(GTK_NOTEBOOK(urldlg.tab), brow, label); pbox = gtk_table_new(1, 2, FALSE); gtk_box_pack_start(GTK_BOX(brow), pbox, FALSE, FALSE, 1); gtk_widget_show(pbox); urldlg.field_value_f = guitl_tab_add_path_entry_full(pbox, NULL, 0, 0, FALSE, gettext("Pavuk: Choose form field file")); label = gtk_label_new("LONG TEXT"); brow = gtk_table_new(2, 2, FALSE); gtk_widget_show(brow); gtk_notebook_append_page(GTK_NOTEBOOK(urldlg.tab), brow, label); hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); hsb = gtk_hscrollbar_new(hadj); gtk_table_attach(GTK_TABLE(brow), hsb, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show(hsb); vadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); vsb = gtk_vscrollbar_new(vadj); gtk_table_attach(GTK_TABLE(brow), vsb, 1, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(vsb); #if GTK_FACE < 2 urldlg.field_value_t = gtk_text_new(hadj, vadj); #else urldlg.field_value_t = gtk_text_view_new(); #endif gtk_widget_set_usize(urldlg.field_value_t, -1, 100); #if GTK_FACE < 2 gtk_text_set_editable(GTK_TEXT(urldlg.field_value_t), TRUE); #else gtk_text_view_set_editable(GTK_TEXT_VIEW(urldlg.field_value_t), TRUE); #endif gtk_table_attach(GTK_TABLE(brow), urldlg.field_value_t, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(urldlg.field_value_t); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(urldlg.ext_sw), FALSE); gtk_widget_set_sensitive(urldlg.ext_frame, FALSE); } /* FORM DATA */ static void cfgtab_formdata(GtkWidget * notebook) { GtkWidget *label, *box, *tbox, *ptab, *prow, *menu, *mi; GtkWidget *swin, *brow, *button, *pbox; GtkWidget *hsb, *vsb; GtkAdjustment *hadj, *vadj; static struct cfg_url_dlg_t urldlg; urldlg.ext_sw = NULL; urldlg.encoding = NULL; urldlg.method = NULL; urldlg.localname_entry = NULL; tbox = gtk_hbox_new(FALSE, 2); gtk_widget_show(tbox); label = gtk_label_new(gettext("Form data")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tbox, label); box = gtk_table_new(3, 1, FALSE); gtk_box_pack_start(GTK_BOX(tbox), box, TRUE, TRUE, 1); gtk_widget_show(box); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_table_attach_defaults(GTK_TABLE(box), swin, 0, 1, 0, 1); gtk_widget_show(swin); gui_cfg.formdata_list = gtk_clist_new(1); urldlg.url_list = gui_cfg.formdata_list; gtk_clist_set_selection_mode(GTK_CLIST(gui_cfg.formdata_list), GTK_SELECTION_BROWSE); gtk_clist_set_reorderable(GTK_CLIST(gui_cfg.formdata_list), TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.formdata_list), 0, TRUE); gtk_container_add(GTK_CONTAINER(swin), gui_cfg.formdata_list); gtk_widget_show(gui_cfg.formdata_list); brow = gtk_table_new(1, 2, FALSE); gtk_table_attach(GTK_TABLE(box), brow, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(brow); gui_cfg.formdata_entry = guitl_tab_add_entry(brow, gettext("Matching action URL: "), 0, 0, FALSE); urldlg.url_entry = gui_cfg.formdata_entry; gtk_signal_connect(GTK_OBJECT(gui_cfg.formdata_list), "select_row", GTK_SIGNAL_FUNC(cfg_url_dlg_switch), (gpointer) & urldlg); brow = gtk_hbutton_box_new(); gtk_table_attach(GTK_TABLE(box), brow, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 5); gtk_hbutton_box_set_spacing_default(1); gtk_widget_show(brow); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cfg_url_dlg_append), (gpointer) & urldlg); gtk_signal_connect(GTK_OBJECT(gui_cfg.formdata_entry), "activate", GTK_SIGNAL_FUNC(cfg_url_dlg_append), (gpointer) & urldlg); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cfg_url_dlg_modify), (gpointer) & urldlg); button = guitl_pixmap_button(clear_xpm, NULL, gettext("Clear")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListClear), (gpointer) gui_cfg.formdata_list); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), (gpointer) gui_cfg.formdata_list); /*** DRAG'N'DROP ***/ gtk_drag_dest_set(box, GTK_DEST_DEFAULT_ALL, dragtypes, NUM_ELEM(dragtypes) - 1, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_signal_connect(GTK_OBJECT(box), "drag_data_received", GTK_SIGNAL_FUNC(gui_window_drop_url), NULL); box = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(tbox), box, TRUE, TRUE, 1); gtk_widget_show(box); urldlg.ext_frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(box), urldlg.ext_frame, FALSE, FALSE, 1); gtk_widget_show(urldlg.ext_frame); ptab = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(urldlg.ext_frame), ptab); gtk_widget_show(ptab); label = gtk_label_new(gettext("Query fields: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(ptab), label, FALSE, FALSE, 2); gtk_widget_show(label); swin = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(swin, -1, 100); gtk_box_pack_start(GTK_BOX(ptab), swin, TRUE, TRUE, 2); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(swin); urldlg.field_list = gtk_clist_new(3); gtk_clist_set_selection_mode(GTK_CLIST(urldlg.field_list), GTK_SELECTION_BROWSE); gtk_clist_set_column_title(GTK_CLIST(urldlg.field_list), 0, gettext("Type")); gtk_clist_set_column_title(GTK_CLIST(urldlg.field_list), 1, gettext("Name")); gtk_clist_set_column_title(GTK_CLIST(urldlg.field_list), 2, gettext("Value")); gtk_clist_column_titles_show(GTK_CLIST(urldlg.field_list)); gtk_clist_set_column_auto_resize(GTK_CLIST(urldlg.field_list), 0, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(urldlg.field_list), 1, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(urldlg.field_list), 2, TRUE); gtk_container_add(GTK_CONTAINER(swin), urldlg.field_list); gtk_widget_show(urldlg.field_list); gtk_signal_connect(GTK_OBJECT(urldlg.field_list), "select_row", GTK_SIGNAL_FUNC(cfg_url_dlg_field_switch), (gpointer) & urldlg); prow = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(ptab), prow, FALSE, FALSE, 1); gtk_widget_show(prow); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_add(GTK_CONTAINER(prow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cfg_url_dlg_field_append), &urldlg); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_add(GTK_CONTAINER(prow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cfg_url_dlg_field_modify), &urldlg); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_add(GTK_CONTAINER(prow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), (gpointer) urldlg.field_list); prow = gtk_table_new(2, 3, FALSE); gtk_box_pack_start(GTK_BOX(ptab), prow, FALSE, FALSE, 1); gtk_widget_show(prow); label = gtk_label_new(gettext("Type: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(prow), label, 0, 1, 0, 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); urldlg.field_type = gtk_option_menu_new(); gtk_table_attach(GTK_TABLE(prow), urldlg.field_type, 1, 2, 0, 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); menu = gtk_menu_new(); mi = gtk_menu_item_new_with_label("TEXT"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_T_TEXT); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(cfg_url_dlg_set_type), (gpointer) & urldlg); mi = gtk_menu_item_new_with_label("FILE"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_T_FILE); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(cfg_url_dlg_set_type), (gpointer) & urldlg); mi = gtk_menu_item_new_with_label("LONG TEXT"); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) FORM_T_TEXTAREA); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(cfg_url_dlg_set_type), (gpointer) & urldlg); gtk_option_menu_set_menu(GTK_OPTION_MENU(urldlg.field_type), menu); gtk_widget_show(urldlg.field_type); urldlg.field_name = guitl_tab_add_entry(prow, gettext("Name: "), 0, 1, FALSE); label = gtk_label_new(gettext("Value: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0); gtk_table_attach(GTK_TABLE(prow), label, 0, 1, 2, 3, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); urldlg.tab = gtk_notebook_new(); gtk_notebook_set_show_border(GTK_NOTEBOOK(urldlg.tab), FALSE); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(urldlg.tab), FALSE); gtk_table_attach(GTK_TABLE(prow), urldlg.tab, 1, 2, 2, 3, GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(urldlg.tab); label = gtk_label_new("TEXT"); brow = gtk_vbox_new(FALSE, 1); gtk_widget_show(brow); gtk_notebook_append_page(GTK_NOTEBOOK(urldlg.tab), brow, label); urldlg.field_value_l = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(brow), urldlg.field_value_l, FALSE, FALSE, 1); gtk_widget_show(urldlg.field_value_l); label = gtk_label_new("FILE"); brow = gtk_vbox_new(FALSE, 1); gtk_widget_show(brow); gtk_notebook_append_page(GTK_NOTEBOOK(urldlg.tab), brow, label); pbox = gtk_table_new(1, 2, FALSE); gtk_box_pack_start(GTK_BOX(brow), pbox, FALSE, FALSE, 1); gtk_widget_show(pbox); urldlg.field_value_f = guitl_tab_add_path_entry_full(pbox, NULL, 0, 0, FALSE, gettext("Pavuk: Choose form field file")); label = gtk_label_new("LONG TEXT"); brow = gtk_table_new(2, 2, FALSE); gtk_widget_show(brow); gtk_notebook_append_page(GTK_NOTEBOOK(urldlg.tab), brow, label); hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); hsb = gtk_hscrollbar_new(hadj); gtk_table_attach(GTK_TABLE(brow), hsb, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show(hsb); vadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); vsb = gtk_vscrollbar_new(vadj); gtk_table_attach(GTK_TABLE(brow), vsb, 1, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(vsb); #if GTK_FACE < 2 urldlg.field_value_t = gtk_text_new(hadj, vadj); #else urldlg.field_value_t = gtk_text_view_new(); #endif gtk_widget_set_usize(urldlg.field_value_t, -1, 100); #if GTK_FACE < 2 gtk_text_set_editable(GTK_TEXT(urldlg.field_value_t), TRUE); #else gtk_text_view_set_editable(GTK_TEXT_VIEW(urldlg.field_value_t), TRUE); #endif gtk_table_attach(GTK_TABLE(brow), urldlg.field_value_t, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(urldlg.field_value_t); } /*** GRABER I ***/ static void cfgtab_graberI(GtkWidget * notebook) { GtkWidget *tbox, *label, *box, *frame, *ptab; const char *sample_index_names[] = { "", "_._.html", "index.html", "index.htm", "default.htm", NULL }; const char *sample_browsers[] = { "", "gnome-moz-remote", "netscape", "xterm -e lynx", "rxvt -e links", NULL, }; const char *sample_identity[] = { "", PACKAGE "/" VERSION " (" HOSTTYPE ")", "Mozilla/4.0 (compatible; " PACKAGE " " VERSION "; Linux 2.2.14 i486; X11)", "Mozilla/4.7 [en] (X11; Linux 2.2.14 i486; I)", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)", "Lynx/2.7 libWWW-FM/2.14", "NCSA_Mosaic/2.7b5 (X11;Linux 2.0.31 i486) libwww/2.12 modified", "Opera/3.0", NULL, }; tbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(tbox); label = gtk_label_new(gettext("Grabber I")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tbox, label); box = gtk_table_new(2, 11, FALSE); gtk_box_pack_start(GTK_BOX(tbox), box, FALSE, FALSE, 0); gtk_widget_show(box); gui_cfg.cdir_label = guitl_tab_add_path_entry(box, gettext("Cache Directory: "), 0, 0, TRUE); gui_cfg.default_prefix = guitl_tab_add_entry(box, gettext("Default URL prefix: "), 0, 1, FALSE); gui_cfg.info_dir = guitl_tab_add_path_entry(box, gettext("Separate info directory: "), 0, 2, TRUE); gui_cfg.index_name = guitl_tab_add_enum(box, gettext("Index file name: "), 0, 3, sample_index_names, TRUE); gui_cfg.store_name = guitl_tab_add_entry(box, gettext("Store file name: "), 0, 4, FALSE); gui_cfg.identity = guitl_tab_add_enum(box, gettext("Identity string: "), 0, 5, sample_identity, TRUE); #ifdef HAVE_BDB_18x gui_cfg.ns_cache_dir = guitl_tab_add_path_entry(box, gettext("Netscape browser cache directory: "), 0, 6, TRUE); gui_cfg.moz_cache_dir = guitl_tab_add_path_entry(box, gettext("Mozilla browser cache directory: "), 0, 7, TRUE); #endif #ifdef WITH_TREE gui_cfg.browser_label = guitl_tab_add_enum(box, gettext("Browser: "), 0, 8, sample_browsers, FALSE); #endif gui_cfg.remind_cmd = guitl_tab_add_entry(box, gettext("Reminder command: "), 0, 9, FALSE); gui_cfg.post_cmd = guitl_tab_add_entry(box, gettext("Post command: "), 0, 10, FALSE); /*********/ box = gtk_table_new(1, 2, TRUE); gtk_box_pack_start(GTK_BOX(tbox), box, FALSE, FALSE, 0); gtk_widget_show(box); frame = gtk_frame_new(NULL); gtk_table_attach(GTK_TABLE(box), frame, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show(frame); ptab = gtk_table_new(6, 3, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.retry_label = guitl_tab_add_numentry(ptab, gettext("How many times retry on fail: "), 0, 0, USHRT_MAX); gui_cfg.redir_label = guitl_tab_add_numentry(ptab, gettext("How many moved links to follow: "), 0, 1, USHRT_MAX); gui_cfg.reget_label = guitl_tab_add_numentry(ptab, gettext("How many times to reget file: "), 0, 2, USHRT_MAX); gui_cfg.ddays_label = guitl_tab_add_numentry(ptab, gettext("Document age before syncing with server: "), 0, 3, USHRT_MAX); label = gtk_label_new(gettext(" days ")); gtk_table_attach(GTK_TABLE(ptab), label, 2, 3, 3, 4, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); gui_cfg.bufsize = guitl_tab_add_numentry(ptab, gettext("Read buffer size: "), 0, 4, 10000); gtk_adjustment_clamp_page(GTK_ADJUSTMENT(GTK_SPIN_BUTTON(gui_cfg.bufsize)-> adjustment), 1.0, 1024.0); label = gtk_label_new(gettext(" kB ")); gtk_table_attach(GTK_TABLE(ptab), label, 2, 3, 4, 5, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); gui_cfg.hash_size = guitl_tab_add_numentry(ptab, gettext("Hash tables size: "), 0, 5, SHRT_MAX); label = gtk_label_new(gettext(" entries ")); gtk_table_attach(GTK_TABLE(ptab), label, 2, 3, 5, 6, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); /*****/ frame = gtk_frame_new(NULL); gtk_table_attach(GTK_TABLE(box), frame, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show(frame); ptab = gtk_table_new(6, 4, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.sleep_label = guitl_tab_add_numentry(ptab, gettext("Sleep time between transfers: "), 0, 0, INT_MAX); label = gtk_label_new(gettext(" sec.")); gtk_table_attach(GTK_TABLE(ptab), label, 2, 3, 0, 1, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); gui_cfg.rsleep = gtk_check_button_new_with_label(gettext("randomize")); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.rsleep, 3, 4, 0, 1, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(gui_cfg.rsleep); gui_cfg.rollback_label = guitl_tab_add_numentry(ptab, gettext("Rollback amount on reget: "), 0, 1, INT_MAX); label = gtk_label_new(gettext(" bytes")); gtk_table_attach(GTK_TABLE(ptab), label, 2, 3, 1, 2, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); gui_cfg.trans_quota = guitl_tab_add_numentry(ptab, gettext("Transfer quota: "), 0, 2, INT_MAX); label = gtk_label_new(gettext(" kB")); gtk_table_attach(GTK_TABLE(ptab), label, 2, 3, 2, 3, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); gui_cfg.file_quota = guitl_tab_add_numentry(ptab, gettext("File size quota: "), 0, 3, INT_MAX); label = gtk_label_new(gettext(" kB")); gtk_table_attach(GTK_TABLE(ptab), label, 2, 3, 3, 4, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); #if defined HAVE_FSTATFS || HAVE_FSTATVFS gui_cfg.fs_quota = guitl_tab_add_numentry(ptab, gettext("Filesystem freespace quota: "), 0, 4, INT_MAX); label = gtk_label_new(gettext(" kB")); gtk_table_attach(GTK_TABLE(ptab), label, 2, 3, 4, 5, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); #endif #ifdef HAVE_MT { int n = 61; #ifdef PTHREAD_THREADS_MAX n = PTHREAD_THREADS_MAX - 3; #elif defined _POSIX_THREADS_THREAD_MAX n = _POSIX_THREADS_THREAD_MAX - 3; #endif gui_cfg.nthr = guitl_tab_add_numentry(ptab, gettext("Number of downloading threads: "), 0, 5, n); } #endif } /*** GRABER II ***/ static void cfgtab_graberII(GtkWidget * notebook) { GtkWidget *brow, *label, *frame, *ptab; GtkWidget *menu, *mi; int i; brow = gtk_hbox_new(FALSE, 5); gtk_widget_show(brow); label = gtk_label_new(gettext("Grabber II")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), brow, label); frame = gtk_frame_new(gettext("Misc settings")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(brow), frame, FALSE, TRUE, 1); brow = gtk_vbox_new(0, 1); gtk_widget_show(brow); gtk_container_add(GTK_CONTAINER(frame), brow); gui_cfg.unique_doc = gtk_check_button_new_with_label(gettext ("Always generate unique name for document")); gtk_widget_show(gui_cfg.unique_doc); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.unique_doc, FALSE, TRUE, 1); gui_cfg.del_after = gtk_check_button_new_with_label(gettext ("Delete FTP document after succesful download")); gtk_widget_show(gui_cfg.del_after); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.del_after, FALSE, TRUE, 1); gui_cfg.ptime = gtk_check_button_new_with_label(gettext ("Preserve document modification time")); gtk_widget_show(gui_cfg.ptime); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.ptime, FALSE, TRUE, 1); gui_cfg.preserve_perm = gtk_check_button_new_with_label(gettext ("Preserve FTP document permissions")); gtk_widget_show(gui_cfg.preserve_perm); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.preserve_perm, FALSE, TRUE, 1); gui_cfg.preserve_links = gtk_check_button_new_with_label(gettext ("Preserve FTP symbolic links paths")); gtk_widget_show(gui_cfg.preserve_links); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.preserve_links, FALSE, TRUE, 1); gui_cfg.retrieve_slink = gtk_check_button_new_with_label(gettext ("Retrieve FTP symbolic links like files")); gtk_widget_show(gui_cfg.retrieve_slink); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.retrieve_slink, FALSE, TRUE, 1); gui_cfg.freget_sw = gtk_check_button_new_with_label(gettext ("Whole reget when partial not supported")); gtk_widget_show(gui_cfg.freget_sw); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.freget_sw, FALSE, TRUE, 1); gui_cfg.enc_sw = gtk_check_button_new_with_label(gettext ("Use gzip encoding for transfer")); gtk_widget_show(gui_cfg.enc_sw); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.enc_sw, FALSE, TRUE, 1); gui_cfg.oldrm_sw = gtk_check_button_new_with_label(gettext("Remove improper documents")); gtk_widget_show(gui_cfg.oldrm_sw); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.oldrm_sw, FALSE, TRUE, 1); gui_cfg.check_size = gtk_check_button_new_with_label(gettext ("Check transferred size of document")); gtk_widget_show(gui_cfg.check_size); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.check_size, FALSE, TRUE, 1); gui_cfg.store_index = gtk_check_button_new_with_label(gettext ("Store directory URLs as index files")); gtk_widget_show(gui_cfg.store_index); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.store_index, FALSE, TRUE, 1); gui_cfg.enable_info = gtk_check_button_new_with_label(gettext ("Store info files with each document")); gtk_widget_show(gui_cfg.enable_info); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.enable_info, FALSE, TRUE, 1); gui_cfg.auto_referer = gtk_check_button_new_with_label(gettext ("Send self URL as Referer for starting URLs")); gtk_widget_show(gui_cfg.auto_referer); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.auto_referer, FALSE, TRUE, 1); gui_cfg.referer = gtk_check_button_new_with_label(gettext ("Send Referer with HTTP requests")); gtk_widget_show(gui_cfg.referer); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.referer, FALSE, TRUE, 1); gui_cfg.read_css = gtk_check_button_new_with_label(gettext ("Fetch objects mentioned in style sheets")); gtk_widget_show(gui_cfg.read_css); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.read_css, FALSE, TRUE, 1); gui_cfg.send_if_range = gtk_check_button_new_with_label(gettext ("Send If-Range header field when regeting")); gtk_widget_show(gui_cfg.send_if_range); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.send_if_range, FALSE, TRUE, 1); gui_cfg.show_time = gtk_check_button_new_with_label(gettext ("Show time of start and end of downloading")); gtk_widget_show(gui_cfg.show_time); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.show_time, FALSE, TRUE, 1); ptab = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(brow), ptab, FALSE, FALSE, 1); gtk_widget_show(ptab); label = gtk_label_new(gettext("URL scheduling strategy: ")); gtk_table_attach(GTK_TABLE(ptab), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show(label); gui_cfg.scheduling_strategie = gtk_option_menu_new(); menu = gtk_menu_new(); for(i = 0; i < SSTRAT_LAST; i++) { mi = gtk_menu_item_new_with_label(get_strategie_label(i)); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) i); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); } gtk_option_menu_set_menu(GTK_OPTION_MENU(gui_cfg.scheduling_strategie), menu); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.scheduling_strategie, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show(gui_cfg.scheduling_strategie); } /*** HTML ***/ static void HtmlswSens(GtkWidget * w, gpointer data) { gboolean act = GTK_TOGGLE_BUTTON(w)->active; gtk_widget_set_sensitive(gui_cfg.all_to_local, act); gtk_widget_set_sensitive(gui_cfg.sel_to_local, act); gtk_widget_set_sensitive(gui_cfg.url_to_local, act); gtk_widget_set_sensitive(gui_cfg.all_to_remote, act); gtk_widget_set_sensitive(gui_cfg.post_update, act); } static void cfgtab_html(GtkWidget * notebook) { GtkWidget *brow, *label, *frame, *ptab, *brow2; GSList *rg; brow = gtk_table_new(2, 2, FALSE); gtk_widget_show(brow); label = gtk_label_new(gettext("HTML")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), brow, label); frame = gtk_frame_new(gettext("HTML document URL rewriting rules")); gtk_widget_show(frame); gtk_table_attach(GTK_TABLE(brow), frame, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 2, 2); brow2 = gtk_vbox_new(0, 1); gtk_widget_show(brow2); gtk_container_add(GTK_CONTAINER(frame), brow2); gui_cfg.noreloc_sw = gtk_check_button_new_with_label(gettext("Rewrite URLs inside HTML doc.")); gtk_widget_show(gui_cfg.noreloc_sw); gtk_box_pack_start(GTK_BOX(brow2), gui_cfg.noreloc_sw, FALSE, TRUE, 2); gtk_signal_connect(GTK_OBJECT(gui_cfg.noreloc_sw), "toggled", GTK_SIGNAL_FUNC(HtmlswSens), NULL); rg = NULL; gui_cfg.url_to_local = gtk_radio_button_new_with_label(rg, gettext("Rewrite URLs to local when stored locally")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(gui_cfg.url_to_local)); gtk_widget_show(gui_cfg.url_to_local); gtk_box_pack_start(GTK_BOX(brow2), gui_cfg.url_to_local, FALSE, TRUE, 1); gui_cfg.sel_to_local = gtk_radio_button_new_with_label(rg, gettext("Rewrite all suitable URLs to local")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(gui_cfg.sel_to_local)); gtk_widget_show(gui_cfg.sel_to_local); gtk_box_pack_start(GTK_BOX(brow2), gui_cfg.sel_to_local, FALSE, TRUE, 1); gui_cfg.all_to_local = gtk_radio_button_new_with_label(rg, gettext("Rewrite all URLs to local immediately")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(gui_cfg.all_to_local)); gtk_widget_show(gui_cfg.all_to_local); gtk_box_pack_start(GTK_BOX(brow2), gui_cfg.all_to_local, FALSE, TRUE, 1); gui_cfg.all_to_remote = gtk_radio_button_new_with_label(rg, gettext("Rewrite all URLs to remote immediately")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(gui_cfg.all_to_remote)); gtk_widget_show(gui_cfg.all_to_remote); gtk_box_pack_start(GTK_BOX(brow2), gui_cfg.all_to_remote, FALSE, TRUE, 1); gui_cfg.post_update = gtk_radio_button_new_with_label(rg, gettext("Rewrite only one currently download URL")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(gui_cfg.post_update)); gtk_widget_show(gui_cfg.post_update); gtk_box_pack_start(GTK_BOX(brow2), gui_cfg.post_update, FALSE, TRUE, 1); /***/ frame = gtk_frame_new(gettext("Tuning of HTML rewriting engine")); gtk_widget_show(frame); gtk_table_attach(GTK_TABLE(brow), frame, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 2, 2); ptab = gtk_table_new(2, 4, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.dont_touch_url_pattern = guitl_tab_add_edit_entry(ptab, gettext("Don't touch URL wildcard pattern: "), NULL, 0, 0, FALSE); #ifdef HAVE_REGEX gui_cfg.dont_touch_url_rpattern = guitl_tab_add_edit_entry(ptab, gettext("Don't touch URL RE pattern: "), NULL, 0, 1, TRUE); gui_cfg.dont_touch_tag_rpattern = guitl_tab_add_edit_entry(ptab, gettext("Don't touch HTML tag RE pattern: "), NULL, 0, 2, TRUE); #endif } /*** NET ***/ static void FTPHSSelectRow(void) { char *p; int row = GPOINTER_TO_INT(GTK_CLIST(gui_cfg.ftp_login_hs)->selection->data); gtk_clist_get_text(GTK_CLIST(gui_cfg.ftp_login_hs), row, 0, &p); gtk_entry_set_text(GTK_ENTRY(gui_cfg.ftp_login_hs_host), p); gtk_clist_get_text(GTK_CLIST(gui_cfg.ftp_login_hs), row, 1, &p); gtk_entry_set_text(GTK_ENTRY(gui_cfg.ftp_login_hs_handshake), p); } static void FTPHSNew(int row) { char *pp[2]; ftp_handshake_info *fhi; pp[0] = (gchar *) gtk_entry_get_text(GTK_ENTRY(gui_cfg.ftp_login_hs_host)); pp[1] = (gchar *) gtk_entry_get_text(GTK_ENTRY(gui_cfg.ftp_login_hs_handshake)); if(!(fhi = ftp_handshake_info_parse(pp[0], pp[1]))) { gdk_beep(); return; } ftp_handshake_info_free(fhi); if(row < 0) gtk_clist_append(GTK_CLIST(gui_cfg.ftp_login_hs), pp); else { int i; for(i = 0; i < 2; i++) gtk_clist_set_text(GTK_CLIST(gui_cfg.ftp_login_hs), row, i, pp[i]); } } static void FTPHSModify(void) { if(!GTK_CLIST(gui_cfg.ftp_login_hs)->selection) { gdk_beep(); return; } FTPHSNew(GPOINTER_TO_INT(GTK_CLIST(gui_cfg.ftp_login_hs)->selection->data)); } static void FTPHSAppend(void) { FTPHSNew(-1); } static void cfgtab_net(GtkWidget * notebook) { GtkWidget *col, *brow, *box, *frame, *label, *rb, *vbox; GtkWidget *swin, *ptab, *bbox, *button; GSList *rg; const char *hssamples[] = { "", "user %u\\331\\pass %p\\230", "user %u@%h %s\\331\\pass %p\\230", "user %U\\331\\pass %P\\230\\user %u@%h %s\\331\\pass %p\\230", NULL, }; box = gtk_hbox_new(0, 5); gtk_widget_show(box); label = gtk_label_new(gettext("Net")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); col = gtk_table_new(11, 3, FALSE); gtk_widget_show(col); gtk_container_add(GTK_CONTAINER(box), col); frame = gtk_frame_new(gettext("Allowed protocols")); gtk_widget_show(frame); gtk_table_attach(GTK_TABLE(col), frame, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = gtk_table_new(3, 2, FALSE); gtk_widget_show(brow); gtk_container_add(GTK_CONTAINER(frame), brow); gui_cfg.http_sw = gtk_check_button_new_with_label(gettext("HTTP")); gtk_widget_show(gui_cfg.http_sw); gtk_table_attach(GTK_TABLE(brow), gui_cfg.http_sw, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); gui_cfg.ftp_sw = gtk_check_button_new_with_label(gettext("FTP")); gtk_widget_show(gui_cfg.ftp_sw); gtk_table_attach(GTK_TABLE(brow), gui_cfg.ftp_sw, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 5); gui_cfg.gopher_sw = gtk_check_button_new_with_label(gettext("Gopher")); gtk_widget_show(gui_cfg.gopher_sw); gtk_table_attach(GTK_TABLE(brow), gui_cfg.gopher_sw, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 5, 5); #ifdef USE_SSL gui_cfg.https_sw = gtk_check_button_new_with_label(gettext("HTTPS")); gtk_widget_show(gui_cfg.https_sw); gtk_table_attach(GTK_TABLE(brow), gui_cfg.https_sw, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 5, 5); gui_cfg.ftps_sw = gtk_check_button_new_with_label(gettext("FTPS")); gtk_widget_show(gui_cfg.ftps_sw); gtk_table_attach(GTK_TABLE(brow), gui_cfg.ftps_sw, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 5, 5); #endif frame = gtk_frame_new(gettext("FTP data connection type ")); gtk_widget_show(frame); gtk_table_attach(GTK_TABLE(col), frame, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = gtk_table_new(2, 1, FALSE); gtk_widget_show(brow); gtk_container_add(GTK_CONTAINER(frame), brow); rb = gtk_radio_button_new_with_label(NULL, gettext("Active")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(rb)); gtk_widget_show(rb); gtk_table_attach(GTK_TABLE(brow), rb, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); gui_cfg.ftpmodegr[1] = rb; rb = gtk_radio_button_new_with_label(rg, gettext("Passive")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(rb)); gtk_widget_show(rb); gtk_table_attach(GTK_TABLE(brow), rb, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 5); gui_cfg.ftpmodegr[0] = rb; label = gtk_label_new(gettext("Communication timeout: ")); gtk_table_attach(GTK_TABLE(col), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gui_cfg.timeout_label = gtk_spin_button_new( (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 9999, 1.0, 10.0, 0.0), 0, 2); gtk_table_attach(GTK_TABLE(col), gui_cfg.timeout_label, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(gui_cfg.timeout_label); label = gtk_label_new(gettext(" min.")); gtk_table_attach(GTK_TABLE(col), label, 2, 3, 1, 2, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); label = gtk_label_new(gettext("Maximal transfer rate: ")); gtk_table_attach(GTK_TABLE(col), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gui_cfg.maxrate = gtk_spin_button_new( (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1000000.0, 1.0, 10.0, 0.0), 0, 3); gtk_table_attach(GTK_TABLE(col), gui_cfg.maxrate, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(gui_cfg.maxrate); label = gtk_label_new(gettext(" kB/s")); gtk_table_attach(GTK_TABLE(col), label, 2, 3, 3, 4, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); label = gtk_label_new(gettext("Minimal transfer rate: ")); gtk_table_attach(GTK_TABLE(col), label, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gui_cfg.minrate = gtk_spin_button_new( (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1000000.0, 1.0, 10.0, 0.0), 0, 3); gtk_table_attach(GTK_TABLE(col), gui_cfg.minrate, 1, 2, 4, 5, GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(gui_cfg.minrate); label = gtk_label_new(gettext(" kB/s")); gtk_table_attach(GTK_TABLE(col), label, 2, 3, 4, 5, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); label = gtk_label_new(gettext("Local interface address: ")); gtk_table_attach(GTK_TABLE(col), label, 0, 1, 5, 6, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gui_cfg.local_ip = gtk_entry_new(); gtk_table_attach(GTK_TABLE(col), gui_cfg.local_ip, 1, 3, 5, 6, GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(gui_cfg.local_ip); label = gtk_label_new(gettext("Additional HTTP headers: ")); gtk_table_attach(GTK_TABLE(col), label, 0, 1, 6, 7, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gui_cfg.http_headers = gtk_entry_new(); gtk_table_attach(GTK_TABLE(col), gui_cfg.http_headers, 1, 3, 6, 7, GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(gui_cfg.http_headers); label = gtk_label_new(gettext("Additional FTP list options: ")); gtk_table_attach(GTK_TABLE(col), label, 0, 1, 7, 8, GTK_FILL, GTK_FILL, 2, 5); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gui_cfg.ftp_list_options = gtk_entry_new(); gtk_table_attach(GTK_TABLE(col), gui_cfg.ftp_list_options, 1, 3, 7, 8, GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(gui_cfg.ftp_list_options); gui_cfg.ftp_list = gtk_check_button_new_with_label(gettext ("Use wide listing of FTP directories")); gtk_widget_show(gui_cfg.ftp_list); gtk_table_attach(GTK_TABLE(col), gui_cfg.ftp_list, 0, 3, 8, 9, GTK_FILL, GTK_FILL, 5, 5); gui_cfg.fix_wuftpd = gtk_check_button_new_with_label(gettext ("Fix detection of nonexisting FTP directories on WuFTPD FTP servers")); gtk_widget_show(gui_cfg.fix_wuftpd); gtk_table_attach(GTK_TABLE(col), gui_cfg.fix_wuftpd, 0, 3, 9, 10, GTK_FILL, GTK_FILL, 5, 5); gui_cfg.use_http11 = gtk_check_button_new_with_label(gettext ("Use HTTP/1.1 protocol for HTTP communication")); gtk_widget_show(gui_cfg.use_http11); gtk_table_attach(GTK_TABLE(col), gui_cfg.use_http11, 0, 3, 10, 11, GTK_FILL, GTK_FILL, 5, 5); /*******/ frame = gtk_frame_new(gettext("FTP login handshake rules")); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 1); gtk_widget_show(frame); vbox = gtk_vbox_new(0, 5); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_widget_show(vbox); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(vbox), swin, TRUE, TRUE, 5); gtk_widget_show(swin); gui_cfg.ftp_login_hs = gtk_clist_new(2); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.ftp_login_hs), 0, gettext("Host")); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.ftp_login_hs), 1, gettext("Login handshake")); gtk_clist_column_titles_show(GTK_CLIST(gui_cfg.ftp_login_hs)); gtk_clist_set_reorderable(GTK_CLIST(gui_cfg.ftp_login_hs), TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.ftp_login_hs), 0, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.ftp_login_hs), 1, TRUE); gtk_signal_connect(GTK_OBJECT(gui_cfg.ftp_login_hs), "select_row", GTK_SIGNAL_FUNC(FTPHSSelectRow), NULL); gtk_container_add(GTK_CONTAINER(swin), gui_cfg.ftp_login_hs); gtk_widget_show(gui_cfg.ftp_login_hs); ptab = gtk_table_new(2, 5, FALSE); gtk_box_pack_start(GTK_BOX(vbox), ptab, FALSE, TRUE, 2); gtk_widget_show(ptab); gui_cfg.ftp_login_hs_host = guitl_tab_add_entry(ptab, gettext("Host: "), 0, 0, FALSE); gui_cfg.ftp_login_hs_handshake = guitl_tab_add_enum(ptab, gettext("Handshake: "), 0, 1, hssamples, TRUE); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 5); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(FTPHSAppend), NULL); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(FTPHSModify), NULL); button = guitl_pixmap_button(clear_xpm, NULL, gettext("Clear")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListClear), gui_cfg.js_transform); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), gui_cfg.js_transform); } /*** PROXY ***/ static void cfgtab_proxy(GtkWidget * notebook) { GtkWidget *col, *brow, *label, *box, *frame; box = gtk_vbox_new(0, 5); gtk_widget_show(box); label = gtk_label_new(gettext("Proxy")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); col = gtk_table_new(3, 2, FALSE); gtk_widget_show(col); gtk_container_add(GTK_CONTAINER(box), col); frame = gtk_frame_new(gettext("Gopher proxy")); gtk_widget_show(frame); gtk_table_attach(GTK_TABLE(col), frame, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = gtk_table_new(3, 2, FALSE); gtk_widget_show(brow); gtk_container_add(GTK_CONTAINER(frame), brow); gui_cfg.gopher_proxyh_label = guitl_tab_add_entry(brow, gettext("Host: "), 0, 0, FALSE); gui_cfg.gopher_proxyp_label = guitl_tab_add_numentry(brow, gettext("Port: "), 0, 1, USHRT_MAX); gui_cfg.gopher_httpgw = gtk_check_button_new_with_label(gettext("Gopher via HTTP proxy")); gtk_widget_show(gui_cfg.gopher_httpgw); gtk_table_attach(GTK_TABLE(brow), gui_cfg.gopher_httpgw, 0, 2, 2, 3, GTK_FILL, GTK_FILL, 5, 5); frame = gtk_frame_new(gettext("FTP proxy")); gtk_widget_show(frame); gtk_table_attach(GTK_TABLE(col), frame, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = gtk_table_new(4, 2, FALSE); gtk_widget_show(brow); gtk_container_add(GTK_CONTAINER(frame), brow); gui_cfg.ftp_proxyh_label = guitl_tab_add_entry(brow, gettext("Host: "), 0, 0, FALSE); gui_cfg.ftp_proxyp_label = guitl_tab_add_numentry(brow, gettext("Port: "), 0, 1, USHRT_MAX); gui_cfg.ftp_httpgw = gtk_check_button_new_with_label(gettext("FTP via HTTP proxy")); gtk_widget_show(gui_cfg.ftp_httpgw); gtk_table_attach(GTK_TABLE(brow), gui_cfg.ftp_httpgw, 0, 2, 2, 3, GTK_FILL, GTK_FILL, 5, 5); gui_cfg.ftp_dirtyp = gtk_check_button_new_with_label(gettext("FTP via HTTP tunneling proxy")); gtk_widget_show(gui_cfg.ftp_dirtyp); gtk_table_attach(GTK_TABLE(brow), gui_cfg.ftp_dirtyp, 0, 2, 3, 4, GTK_FILL, GTK_FILL, 5, 5); #ifdef USE_SSL frame = gtk_frame_new(gettext("SSL proxy")); gtk_widget_show(frame); gtk_table_attach(GTK_TABLE(col), frame, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = gtk_table_new(2, 2, FALSE); gtk_widget_show(brow); gtk_container_add(GTK_CONTAINER(frame), brow); gui_cfg.ssl_proxyh_label = guitl_tab_add_entry(brow, gettext("Host: "), 0, 0, FALSE); gui_cfg.ssl_proxyp_label = guitl_tab_add_numentry(brow, gettext("Port: "), 0, 1, USHRT_MAX); #endif frame = gtk_frame_new(gettext("HTTP proxy")); gtk_widget_show(frame); gtk_table_attach(GTK_TABLE(col), frame, 0, 2, 1, 2, GTK_FILL, GTK_FILL, 5, 5); brow = guitl_new_edit_list(&gui_cfg.http_proxy_list, &gui_cfg.http_proxyh_label, gettext("Proxy: "), NULL, NULL, NULL, NULL, FALSE, NULL); gtk_container_add(GTK_CONTAINER(frame), brow); gui_cfg.cache_sw = gtk_check_button_new_with_label(gettext("Allow caching of documents")); gtk_widget_show(gui_cfg.cache_sw); gtk_table_attach(GTK_TABLE(col), gui_cfg.cache_sw, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 5, 5); } static void LangNewRow(int row, GtkWidget * entry) { char *p; p = (gchar *) gtk_entry_get_text(GTK_ENTRY(entry)); p = tl_strndup(p, strcspn(p, " ")); if(row < 0) gtk_clist_append(GTK_CLIST(gui_cfg.alanglist), &p); else gtk_clist_set_text(GTK_CLIST(gui_cfg.alanglist), row, 0, p); _free(p); } static void LangAppend(GtkWidget * w, GtkWidget * entry) { LangNewRow(-1, entry); } static void LangModify(GtkWidget * w, GtkWidget * entry) { if(!GTK_CLIST(gui_cfg.alanglist)->selection) { gdk_beep(); return; } LangNewRow(GPOINTER_TO_INT(GTK_CLIST(gui_cfg.alanglist)->selection->data), entry); } /*** LANG ***/ static void cfgtab_lang(GtkWidget * notebook) { GtkWidget *col, *box, *label, *frame, *entry; GtkWidget *abtn, *mbtn; box = gtk_hbox_new(0, 5); gtk_widget_show(box); label = gtk_label_new(gettext("Languages")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); frame = gtk_frame_new(gettext("Preffered languages")); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); gtk_widget_show(frame); col = guitl_new_edit_list(&gui_cfg.alanglist, &entry, gettext("Language code: "), NULL, &mbtn, NULL, &abtn, TRUE, iso_lang); gtk_signal_connect(GTK_OBJECT(abtn), "clicked", GTK_SIGNAL_FUNC(LangAppend), entry); gtk_signal_connect(GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(LangAppend), entry); gtk_signal_connect(GTK_OBJECT(mbtn), "clicked", GTK_SIGNAL_FUNC(LangModify), entry); gtk_container_add(GTK_CONTAINER(frame), col); frame = gtk_frame_new(gettext("Preffered character sets")); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); gtk_widget_show(frame); col = guitl_new_edit_list(&gui_cfg.acharset_list, &entry, gettext("Character set code: "), NULL, NULL, NULL, NULL, TRUE, char_sets); gtk_container_add(GTK_CONTAINER(frame), col); } /*** AUTH ***/ static void cfgtab_auth(GtkWidget * notebook) { GtkWidget *label, *box, *frame, *ptab, *smenu, *mi, *pbox, *tbox; int i; struct { char *name; http_auth_type_t id; } authtab[] = { {gettext_nop("User auth. scheme"), HTTP_AUTH_USER}, {gettext_nop("Basic auth. scheme"), HTTP_AUTH_BASIC}, {gettext_nop("Digest auth. scheme"), HTTP_AUTH_DIGEST}, #ifdef ENABLE_NTLM {gettext_nop("NTLM auth. scheme"), HTTP_AUTH_NTLM}, #endif {NULL, HTTP_AUTH_NONE} }; box = gtk_vbox_new(0, 5); gtk_widget_show(box); label = gtk_label_new(gettext("Auth")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); pbox = gtk_table_new(2, 2, FALSE); gtk_box_pack_start(GTK_BOX(box), pbox, FALSE, FALSE, 2); gtk_widget_show(pbox); frame = gtk_frame_new(gettext("User authentification")); gtk_table_attach(GTK_TABLE(pbox), frame, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show(frame); ptab = gtk_table_new(3, 3, FALSE); gtk_widget_show(ptab); gtk_container_add(GTK_CONTAINER(frame), ptab); label = gtk_label_new(gettext("Scheme: ")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(ptab), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 2, 5); gui_cfg.http_auth_scheme = gtk_option_menu_new(); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.http_auth_scheme, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 2, 5); smenu = gtk_menu_new(); gtk_widget_realize(smenu); for(i = 0; authtab[i].name; i++) { mi = gtk_menu_item_new_with_label(gettext(authtab[i].name)); gtk_menu_append(GTK_MENU(smenu), mi); gtk_widget_show(mi); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) authtab[i].id); } gtk_option_menu_set_menu(GTK_OPTION_MENU(gui_cfg.http_auth_scheme), smenu); gtk_widget_show(gui_cfg.http_auth_scheme); gui_cfg.auth_label = guitl_tab_add_entry(ptab, gettext("User name: "), 0, 1, FALSE); gui_cfg.pass_label = guitl_tab_add_entry(ptab, gettext("Password: "), 0, 2, TRUE); gui_cfg.auth_ntlm_domain = guitl_tab_add_entry(ptab, gettext("NTLM domain: "), 0, 3, FALSE); gui_cfg.auth_reuse_nonce = gtk_check_button_new_with_label(gettext ("Reuse HTTP Digest access nonce")); gtk_widget_show(gui_cfg.auth_reuse_nonce); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.auth_reuse_nonce, 0, 2, 4, 5, GTK_FILL, GTK_FILL, 5, 5); frame = gtk_frame_new(gettext("HTTP proxy user authentification")); gtk_table_attach(GTK_TABLE(pbox), frame, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show(frame); ptab = gtk_table_new(2, 5, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); label = gtk_label_new(gettext("Scheme: ")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach(GTK_TABLE(ptab), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(label); gui_cfg.http_proxy_auth_scheme = gtk_option_menu_new(); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.http_proxy_auth_scheme, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 2, 5); smenu = gtk_menu_new(); gtk_widget_realize(smenu); for(i = 0; authtab[i].name; i++) { mi = gtk_menu_item_new_with_label(gettext(authtab[i].name)); gtk_menu_append(GTK_MENU(smenu), mi); gtk_widget_show(mi); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) authtab[i].id); } gtk_option_menu_set_menu(GTK_OPTION_MENU(gui_cfg.http_proxy_auth_scheme), smenu); gtk_widget_show(gui_cfg.http_proxy_auth_scheme); gui_cfg.proxy_auth_label = guitl_tab_add_entry(ptab, gettext("User name: "), 0, 1, FALSE); gui_cfg.proxy_pass_label = guitl_tab_add_entry(ptab, gettext("Password: "), 0, 2, TRUE); gui_cfg.auth_proxy_ntlm_domain = guitl_tab_add_entry(ptab, gettext("NTLM domain: "), 0, 3, FALSE); gui_cfg.auth_reuse_proxy_nonce = gtk_check_button_new_with_label(gettext ("Reuse HTTP Digest access nonce")); gtk_widget_show(gui_cfg.auth_reuse_proxy_nonce); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.auth_reuse_proxy_nonce, 0, 2, 4, 5, GTK_FILL, GTK_FILL, 5, 5); frame = gtk_frame_new(gettext("FTP proxy user authentification")); gtk_table_attach(GTK_TABLE(pbox), frame, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show(frame); ptab = gtk_table_new(2, 5, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.ftp_proxy_user = guitl_tab_add_entry(ptab, gettext("User name: "), 0, 1, FALSE); gui_cfg.ftp_proxy_pass = guitl_tab_add_entry(ptab, gettext("Password: "), 0, 2, TRUE); frame = gtk_frame_new(gettext("Misc")); gtk_table_attach(GTK_TABLE(pbox), frame, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show(frame); tbox = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(frame), tbox); gtk_widget_show(tbox); ptab = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(tbox), ptab, FALSE, FALSE, 2); gtk_widget_show(ptab); gui_cfg.from_label = guitl_tab_add_entry(ptab, gettext("E-mail address: "), 0, 5, FALSE); gui_cfg.send_from = gtk_check_button_new_with_label(gettext ("Send From: header with HTTP request")); gtk_box_pack_start(GTK_BOX(tbox), gui_cfg.send_from, FALSE, FALSE, 2); gtk_widget_show(gui_cfg.send_from); } static void cfgtab_ssl(GtkWidget * notebook) { #ifdef USE_SSL GtkWidget *label, *box, *frame, *ptab, *rb, *hbox; GSList *rg; box = gtk_vbox_new(0, 5); gtk_widget_show(box); label = gtk_label_new(gettext("SSL")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); frame = gtk_frame_new(gettext("SSL client certificate")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 5); ptab = gtk_table_new(5, 2, FALSE); gtk_widget_show(ptab); gtk_container_add(GTK_CONTAINER(frame), ptab); #ifdef USE_SSL_IMPL_OPENSSL gui_cfg.ssl_cert_passwd_en = guitl_tab_add_entry(ptab, gettext("Certificate password: "), 0, 0, TRUE); gui_cfg.ssl_cert_file_en = guitl_tab_add_path_entry(ptab, gettext("Certificate PEM file: "), 0, 1, FALSE); gui_cfg.ssl_key_file_en = guitl_tab_add_path_entry(ptab, gettext("Certificate key file: "), 0, 2, FALSE); #endif #ifdef USE_SSL_IMPL_NSS gui_cfg.nss_cert_dir = guitl_tab_add_path_entry(ptab, gettext("NSS certificate config directory: "), 0, 0, TRUE); gui_cfg.ssl_cert_passwd_en = guitl_tab_add_entry(ptab, gettext("Certificate password: "), 0, 1, TRUE); gui_cfg.nss_accept_unknown_cert = gtk_check_button_new_with_label(gettext("Accept unknown certificates")); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.nss_accept_unknown_cert, 0, 2, 2, 3, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(gui_cfg.nss_accept_unknown_cert); gui_cfg.nss_domestic_policy = gtk_check_button_new_with_label(gettext("Domestic SSL ciphers policy")); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.nss_domestic_policy, 0, 2, 3, 4, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(gui_cfg.nss_domestic_policy); # #endif gui_cfg.ssl_cipher_list = guitl_tab_add_entry(ptab, gettext("List of preffered ciphers: "), 0, 4, FALSE); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 5); gtk_widget_show(hbox); frame = gtk_frame_new(gettext("SSL protocol version")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 5); ptab = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); rb = gtk_radio_button_new_with_label(NULL, gettext("SSLv23")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(rb)); gtk_widget_show(rb); gtk_container_add(GTK_CONTAINER(ptab), rb); gui_cfg.ssl_version[0] = rb; rb = gtk_radio_button_new_with_label(rg, gettext("SSLv2")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(rb)); gtk_widget_show(rb); gtk_container_add(GTK_CONTAINER(ptab), rb); gui_cfg.ssl_version[1] = rb; rb = gtk_radio_button_new_with_label(rg, gettext("SSLv3")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(rb)); gtk_widget_show(rb); gtk_container_add(GTK_CONTAINER(ptab), rb); gui_cfg.ssl_version[2] = rb; #if defined(WITH_SSL_TLS1) || defined(USE_SSL_IMPL_NSS) rb = gtk_radio_button_new_with_label(rg, gettext("TLSv1")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(rb)); gtk_widget_show(rb); gtk_container_add(GTK_CONTAINER(ptab), rb); gui_cfg.ssl_version[3] = rb; #endif frame = gtk_frame_new(gettext("Miscelanous SSL settings")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 5); ptab = gtk_table_new(2, 2, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); #ifdef USE_SSL_IMPL_OPENSSL #ifdef HAVE_RAND_EGD gui_cfg.egd_socket = guitl_tab_add_path_entry(ptab, gettext("EGD daemon socket path: "), 0, 0, FALSE); #endif #endif gui_cfg.unique_sslid = gtk_check_button_new_with_label(gettext ("Unique ID for all SSL sessions")); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.unique_sslid, 0, 2, 1, 2, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(gui_cfg.unique_sslid); #endif } /*** LOG ***/ static void cfgtab_log(GtkWidget * notebook) { GtkWidget *col, *label, *box; box = gtk_vbox_new(0, 5); gtk_widget_show(box); label = gtk_label_new(gettext("Log")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); col = gtk_table_new(2, 4, FALSE); gtk_container_add(GTK_CONTAINER(box), col); gtk_widget_show(col); gui_cfg.gen_logname = gtk_check_button_new_with_label(gettext ("Try to find unique name, when original log file locked")); gtk_table_attach(GTK_TABLE(col), gui_cfg.gen_logname, 0, 2, 0, 1, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show(gui_cfg.gen_logname); gui_cfg.log_label = guitl_tab_add_path_entry(col, gettext("Log file: "), 0, 1, FALSE); gui_cfg.slog_label = guitl_tab_add_path_entry(col, gettext("Shortlog file: "), 0, 2, FALSE); gui_cfg.xloglen_label = guitl_tab_add_numentry(col, gettext("Log window length: "), 0, 3, INT_MAX); } /*** COOKIES ***/ static void cfgtab_cookies(GtkWidget * notebook) { GtkWidget *label, *box, *tbox, *hbox, *pom, *frame; GtkAdjustment *adj; tbox = gtk_hbox_new(0, 5); gtk_widget_show(tbox); label = gtk_label_new(gettext("Cookies")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tbox, label); frame = gtk_frame_new(gettext("Disabled cookie domains")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(tbox), frame, TRUE, TRUE, 5); box = guitl_new_edit_list(&gui_cfg.cookie_domain_list, &gui_cfg.cookie_domain_entry, gettext("Domain: "), NULL, NULL, NULL, NULL, TRUE, NULL); gtk_container_add(GTK_CONTAINER(frame), box); frame = gtk_frame_new(gettext("Cookies settings")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(tbox), frame, TRUE, TRUE, 5); hbox = gtk_vbox_new(0, 5); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); gui_cfg.sw_cookie_update = gtk_check_button_new_with_label(gettext("Update cookies")); gtk_widget_show(gui_cfg.sw_cookie_update); gtk_box_pack_start(GTK_BOX(hbox), gui_cfg.sw_cookie_update, FALSE, FALSE, 0); gui_cfg.sw_cookie_send = gtk_check_button_new_with_label(gettext("Send cookies")); gtk_widget_show(gui_cfg.sw_cookie_send); gtk_box_pack_start(GTK_BOX(hbox), gui_cfg.sw_cookie_send, FALSE, FALSE, 0); gui_cfg.sw_cookie_recv = gtk_check_button_new_with_label(gettext("Accept cookies")); gtk_widget_show(gui_cfg.sw_cookie_recv); gtk_box_pack_start(GTK_BOX(hbox), gui_cfg.sw_cookie_recv, FALSE, FALSE, 0); gui_cfg.cookie_check_domain = gtk_check_button_new_with_label(gettext("Check cookies domain")); gtk_widget_show(gui_cfg.cookie_check_domain); gtk_box_pack_start(GTK_BOX(hbox), gui_cfg.cookie_check_domain, FALSE, FALSE, 0); box = gtk_hbox_new(0, 5); gtk_widget_show(box); gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); pom = gtk_label_new(gettext("Cookies maximal number: ")); gtk_widget_show(pom); gtk_box_pack_start(GTK_BOX(box), pom, FALSE, FALSE, 0); adj = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 10000.0, 1.0, 10.0, 0.0); gui_cfg.en_cookie_max = gtk_spin_button_new(adj, 0, 0); gtk_widget_show(gui_cfg.en_cookie_max); gtk_box_pack_start(GTK_BOX(box), gui_cfg.en_cookie_max, TRUE, FALSE, 0); box = gtk_table_new(2, 1, FALSE); gtk_widget_show(box); gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); gui_cfg.en_cookie_file = guitl_tab_add_path_entry(box, gettext("Cookie file: "), 0, 0, FALSE); } static void RulesSelectRow(GtkWidget * w, gpointer func_data) { gchar *p; int row = GPOINTER_TO_INT(GTK_CLIST(gui_cfg.rules_list)->selection->data); #ifdef HAVE_REGEX gtk_clist_get_text(GTK_CLIST(gui_cfg.rules_list), row, 0, &p); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(gui_cfg.ptrn_fnmatch), (*p == 'F')); #endif gtk_clist_get_text(GTK_CLIST(gui_cfg.rules_list), row, 1, &p); gtk_entry_set_text(GTK_ENTRY(gui_cfg.mpt_entry), p); gtk_clist_get_text(GTK_CLIST(gui_cfg.rules_list), row, 2, &p); gtk_entry_set_text(GTK_ENTRY(gui_cfg.rule_entry), p); } static void RulesNew(int row) { const gchar *p[3]; p[1] = gtk_entry_get_text(GTK_ENTRY(gui_cfg.mpt_entry)); p[2] = gtk_entry_get_text(GTK_ENTRY(gui_cfg.rule_entry)); #ifdef HAVE_REGEX p[0] = GTK_TOGGLE_BUTTON(gui_cfg.ptrn_fnmatch)->active ? "F" : "R"; if(!lfname_check_pattern(GTK_TOGGLE_BUTTON(gui_cfg.ptrn_fnmatch)->active ? LFNAME_FNMATCH : LFNAME_REGEX, p[1])) { gdk_beep(); return; } #else p[0] = "F"; #endif if(p[1] && p[2] && *p[1] && *p[2] && lfname_check_rule(p[2])) { if(row < 0) gtk_clist_append(GTK_CLIST(gui_cfg.rules_list), (gchar **) p); else { gtk_clist_set_text(GTK_CLIST(gui_cfg.rules_list), row, 0, p[0]); gtk_clist_set_text(GTK_CLIST(gui_cfg.rules_list), row, 1, p[1]); gtk_clist_set_text(GTK_CLIST(gui_cfg.rules_list), row, 2, p[2]); } } else gdk_beep(); } static void RulesAppend(void) { RulesNew(-1); } static void RulesModify(void) { if(!GTK_CLIST(gui_cfg.rules_list)->selection) { gdk_beep(); return; } RulesNew(GPOINTER_TO_INT(GTK_CLIST(gui_cfg.rules_list)->selection->data)); } static void cfgtab_filename(GtkWidget * notebook) { GtkWidget *label, *box, *frame, *ptab, *hbox, *swin, *button, *bbox; hbox = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox); label = gtk_label_new(gettext("Filename")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), hbox, label); frame = gtk_frame_new(gettext("Local filename conversion rules")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 5); box = gtk_vbox_new(FALSE, 5); gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(frame), box); frame = gtk_frame_new(gettext("Replace String1 with String2 in filename")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); ptab = gtk_table_new(2, 2, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.tr_str_s1 = guitl_tab_add_entry(ptab, gettext("String1: "), 0, 0, FALSE); gui_cfg.tr_str_s2 = guitl_tab_add_entry(ptab, gettext("String2: "), 0, 1, FALSE); frame = gtk_frame_new(gettext("Delete characters from filename")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); ptab = gtk_table_new(2, 1, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.tr_del_chr = guitl_tab_add_entry(ptab, gettext("Character set: "), 0, 0, FALSE); frame = gtk_frame_new(gettext ("Replace chars from Set1 with chars from Set2 in filename")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); ptab = gtk_table_new(2, 2, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.tr_chr_s1 = guitl_tab_add_entry(ptab, gettext("Character set1: "), 0, 0, FALSE); gui_cfg.tr_chr_s2 = guitl_tab_add_entry(ptab, gettext("Character set2: "), 0, 1, FALSE); ptab = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(box), ptab, FALSE, FALSE, 5); gtk_widget_show(ptab); gui_cfg.base_level_label = guitl_tab_add_numentry(ptab, gettext("Base level of tree: "), 0, 0, USHRT_MAX); frame = gtk_frame_new(gettext("Local filename mapping rules")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 5); box = gtk_vbox_new(0, 5); gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(frame), box); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(box), swin, TRUE, TRUE, 5); gtk_widget_show(swin); gui_cfg.rules_list = gtk_clist_new(3); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.rules_list), 0, gettext("Type")); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.rules_list), 1, gettext("Match pattern")); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.rules_list), 2, gettext("Rule")); gtk_clist_column_titles_show(GTK_CLIST(gui_cfg.rules_list)); gtk_clist_set_reorderable(GTK_CLIST(gui_cfg.rules_list), TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.rules_list), 0, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.rules_list), 1, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.rules_list), 2, TRUE); gtk_signal_connect(GTK_OBJECT(gui_cfg.rules_list), "select_row", GTK_SIGNAL_FUNC(RulesSelectRow), NULL); gtk_container_add(GTK_CONTAINER(swin), gui_cfg.rules_list); gtk_widget_show(gui_cfg.rules_list); #ifdef HAVE_REGEX { GSList *rg = NULL; ptab = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(box), ptab, FALSE, TRUE, 2); gtk_widget_show(ptab); gui_cfg.ptrn_fnmatch = gtk_radio_button_new_with_label(NULL, gettext("wildcard pattern")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(gui_cfg.ptrn_fnmatch)); gtk_widget_show(gui_cfg.ptrn_fnmatch); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.ptrn_fnmatch, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 2, 2); gui_cfg.ptrn_regex = gtk_radio_button_new_with_label(rg, gettext("RE pattern")); gtk_widget_show(gui_cfg.ptrn_regex); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.ptrn_regex, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 2, 2); } #endif ptab = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(box), ptab, FALSE, TRUE, 2); gtk_widget_show(ptab); gui_cfg.mpt_entry = guitl_tab_add_entry(ptab, gettext("Matching pattern: "), 0, 0, FALSE); ptab = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(box), ptab, FALSE, TRUE, 2); gtk_widget_show(ptab); gui_cfg.rule_entry = guitl_tab_add_entry(ptab, gettext("Construction rule: "), 0, 0, FALSE); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); gtk_box_pack_start(GTK_BOX(box), bbox, FALSE, TRUE, 5); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(RulesAppend), NULL); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(RulesModify), NULL); button = guitl_pixmap_button(clear_xpm, NULL, gettext("Clear")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListClear), gui_cfg.rules_list); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), gui_cfg.rules_list); } static void cfgtab_advert(GtkWidget * notebook) { #ifdef HAVE_REGEX GtkWidget *hbox, *vbox, *label, *box, *entry; hbox = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox); label = gtk_label_new(gettext("Advertisement")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), hbox, label); vbox = gtk_vbox_new(FALSE, 1); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 1); gtk_widget_show(vbox); gui_cfg.remove_adv = gtk_check_button_new_with_label(gettext ("Enable removing of advertisement banners")); gtk_box_pack_start(GTK_BOX(vbox), gui_cfg.remove_adv, FALSE, FALSE, 1); gtk_widget_show(gui_cfg.remove_adv); box = guitl_new_edit_list(&gui_cfg.advert_res, &entry, gettext("RE for advertisement URLs: "), NULL, NULL, NULL, NULL, TRUE, NULL); gtk_box_pack_start(GTK_BOX(vbox), box, TRUE, TRUE, 1); #endif } #ifdef HAVE_REGEX static void JSTSelectRow(void) { char *p; int row = GPOINTER_TO_INT(GTK_CLIST(gui_cfg.js_transform)->selection->data); gtk_clist_get_text(GTK_CLIST(gui_cfg.js_transform), row, 0, &p); gtk_entry_set_text(GTK_ENTRY(gui_cfg.jst_pattern), p); gtk_clist_get_text(GTK_CLIST(gui_cfg.js_transform), row, 1, &p); gtk_entry_set_text(GTK_ENTRY(gui_cfg.jst_rule), p); gtk_clist_get_text(GTK_CLIST(gui_cfg.js_transform), row, 2, &p); gtk_entry_set_text(GTK_ENTRY(gui_cfg.jst_tag), p); gtk_clist_get_text(GTK_CLIST(gui_cfg.js_transform), row, 3, &p); gtk_entry_set_text(GTK_ENTRY(gui_cfg.jst_attrib), p); gtk_clist_get_text(GTK_CLIST(gui_cfg.js_transform), row, 4, &p); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(gui_cfg.jst_rewrite), *p == 'X'); } static void JSTNew(int row) { const char *pp[5]; js_transform_t *jt; int type; type = GTK_TOGGLE_BUTTON(gui_cfg.jst_rewrite)->active; pp[0] = gtk_entry_get_text(GTK_ENTRY(gui_cfg.jst_pattern)); pp[1] = gtk_entry_get_text(GTK_ENTRY(gui_cfg.jst_rule)); pp[2] = gtk_entry_get_text(GTK_ENTRY(gui_cfg.jst_tag)); pp[3] = gtk_entry_get_text(GTK_ENTRY(gui_cfg.jst_attrib)); pp[4] = type ? "X" : " "; if(!(jt = js_transform_new(pp[0], pp[1], pp[2], pp[3], type))) { gdk_beep(); return; } js_transform_free(jt); if(row < 0) gtk_clist_append(GTK_CLIST(gui_cfg.js_transform), (gchar **) pp); else { int i; for(i = 0; i < 5; i++) gtk_clist_set_text(GTK_CLIST(gui_cfg.js_transform), row, i, pp[i]); } } static void JSTModify(void) { if(!GTK_CLIST(gui_cfg.js_transform)->selection) { gdk_beep(); return; } JSTNew(GPOINTER_TO_INT(GTK_CLIST(gui_cfg.js_transform)->selection->data)); } static void JSTAppend(void) { JSTNew(-1); } #endif static void cfgtab_js(GtkWidget * notebook) { #ifdef HAVE_REGEX GtkWidget *hbox, *vbox, *label, *box, *entry, *ptab, *bbox, *button; GtkWidget *frame, *swin; int i; char **tags; const char *attribs[] = { "", "onclick", "ondblclick", "onmousedown", "onmouseup", "onmouseover", "onmousemove", "onmouseout", "onkeypress", "onkeydown", "onkeyup", "onfocus", "onblur", "onload", "onunload", "onsubmit", "onreset", "onselect", "onchange", NULL, }; hbox = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox); label = gtk_label_new(gettext("Javascript")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), hbox, label); vbox = gtk_vbox_new(FALSE, 1); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 1); gtk_widget_show(vbox); gui_cfg.enable_js = gtk_check_button_new_with_label(gettext("Processing of javascript")); gtk_box_pack_start(GTK_BOX(vbox), gui_cfg.enable_js, FALSE, TRUE, 1); gtk_widget_show(gui_cfg.enable_js); frame = gtk_frame_new(gettext("Javascript patterns")); gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 1); gtk_widget_show(frame); box = guitl_new_edit_list(&gui_cfg.js_patterns, &entry, gettext("RE for Javascript patterns: "), NULL, NULL, NULL, NULL, TRUE, NULL); gtk_container_add(GTK_CONTAINER(frame), box); /*****/ frame = gtk_frame_new(gettext("Javascript patterns with transform rules")); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 1); gtk_widget_show(frame); vbox = gtk_vbox_new(0, 5); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_widget_show(vbox); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(vbox), swin, TRUE, TRUE, 5); gtk_widget_show(swin); gui_cfg.js_transform = gtk_clist_new(5); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.js_transform), 0, gettext("Pattern")); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.js_transform), 1, gettext("Transform rule")); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.js_transform), 2, gettext("HTML tag")); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.js_transform), 3, gettext("HTML tag attribute")); gtk_clist_set_column_title(GTK_CLIST(gui_cfg.js_transform), 4, gettext("Rewrite")); gtk_clist_column_titles_show(GTK_CLIST(gui_cfg.js_transform)); gtk_clist_set_reorderable(GTK_CLIST(gui_cfg.js_transform), TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.js_transform), 0, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.js_transform), 1, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.js_transform), 2, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.js_transform), 3, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.js_transform), 4, TRUE); gtk_signal_connect(GTK_OBJECT(gui_cfg.js_transform), "select_row", GTK_SIGNAL_FUNC(JSTSelectRow), NULL); gtk_container_add(GTK_CONTAINER(swin), gui_cfg.js_transform); gtk_widget_show(gui_cfg.js_transform); ptab = gtk_table_new(2, 5, FALSE); gtk_box_pack_start(GTK_BOX(vbox), ptab, FALSE, TRUE, 2); gtk_widget_show(ptab); gui_cfg.jst_pattern = guitl_tab_add_entry(ptab, gettext("Pattern: "), 0, 0, FALSE); gui_cfg.jst_rule = guitl_tab_add_entry(ptab, gettext("Tranform rule: "), 0, 1, FALSE); tags = _malloc((html_link_tags_num() + 3) * sizeof(char *)); tags[0] = ""; tags[1] = "*"; for(i = 0; i < html_link_tags_num(); i++) tags[i + 2] = html_link_tags[i].tag; tags[i] = NULL; gui_cfg.jst_tag = guitl_tab_add_enum(ptab, gettext("HTML tag: "), 0, 2, (const char **) tags, TRUE); _free(tags); gui_cfg.jst_attrib = guitl_tab_add_enum(ptab, gettext("HTML tag attribute: "), 0, 3, attribs, TRUE); gui_cfg.jst_rewrite = gtk_check_button_new_with_label(gettext ("Rewrite URL part in HTML document")); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.jst_rewrite, 0, 2, 4, 5, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(gui_cfg.jst_rewrite); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 5); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(JSTAppend), NULL); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(JSTModify), NULL); button = guitl_pixmap_button(clear_xpm, NULL, gettext("Clear")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListClear), gui_cfg.js_transform); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), gui_cfg.js_transform); #endif } /*** COMMON CFG ***/ void gui_build_config_common(int popup) { GtkWidget *col, *brow, *button, *notebook; GtkAccelGroup *accel_group; if(gui_cfg.config_shell) { if(popup) { if(!GTK_WIDGET_VISIBLE(gui_cfg.config_shell)) xset_cfg_values_comm(); gtk_widget_show_all(gui_cfg.config_shell); if(GTK_WIDGET_REALIZED(gui_cfg.config_shell)) gdk_window_raise(gui_cfg.config_shell->window); } return; } gui_cfg.config_shell = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_border_width(GTK_CONTAINER(gui_cfg.config_shell), 3); gtk_window_set_title(GTK_WINDOW(gui_cfg.config_shell), gettext("Pavuk: Common config")); gtk_widget_realize(gui_cfg.config_shell); gtk_signal_connect(GTK_OBJECT(gui_cfg.config_shell), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.config_shell); col = gtk_table_new(2, 1, FALSE); gtk_container_add(GTK_CONTAINER(gui_cfg.config_shell), col); gtk_widget_show(col); gui_cfg.cb_comcfg = notebook = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); gtk_table_attach_defaults(GTK_TABLE(col), notebook, 0, 1, 0, 1); gtk_widget_show(notebook); cfgtab_url(notebook); cfgtab_formdata(notebook); cfgtab_graberI(notebook); cfgtab_graberII(notebook); cfgtab_html(notebook); cfgtab_net(notebook); cfgtab_proxy(notebook); cfgtab_lang(notebook); cfgtab_auth(notebook); cfgtab_ssl(notebook); cfgtab_log(notebook); cfgtab_cookies(notebook); cfgtab_filename(notebook); cfgtab_advert(notebook); cfgtab_js(notebook); brow = gtk_hbutton_box_new(); gtk_table_attach(GTK_TABLE(col), brow, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 5); gtk_hbutton_box_set_spacing_default(1); gtk_widget_show(brow); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); button = guitl_pixmap_button(ok_xpm, NULL, gettext("OK")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gui_PopdownWC), (gpointer) gui_cfg.config_shell); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); button = guitl_pixmap_button(apply_xpm, NULL, gettext("Apply")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(CfgCommon), (gpointer) gui_cfg.config_shell); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); button = guitl_pixmap_button(limit_xpm, NULL, gettext("Limitations ...")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gui_PopupW), (gpointer) PAVUK_CFGLIM); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); button = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel")); accel_group = gtk_accel_group_new(); gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(gui_cfg.config_shell), accel_group); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) gui_cfg.config_shell); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); if(popup) gtk_widget_show(gui_cfg.config_shell); xset_cfg_values_comm(); } #endif /* GTK_FACE */ pavuk-0.9.35/src/nscache.c0000644000175000001440000001055310300054562012211 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include #include #include #include #include #include #include "config.h" #ifdef HAVE_BDB_18x #ifdef HAVE_DB1_H #include #elif defined(HAVE_DB185_H) #include #elif defined(HAVE_DB2_DB185_H) #include #elif defined(HAVE_DB3_DB185_H) #include #elif defined(HAVE_DB4_DB185_H) #include #else #include #endif typedef int int32__t; typedef unsigned int uint32__t; #ifdef WORDS_BIGENDIAN #define COPY_INT32(i1,i2) \ ((char *)(i1))[0] = ((char *)(i2))[3];\ ((char *)(i1))[1] = ((char *)(i2))[2];\ ((char *)(i1))[2] = ((char *)(i2))[1];\ ((char *)(i1))[3] = ((char *)(i2))[0]; #else #define COPY_INT32(i1,i2) *((int32__t *) i1) = *((int32__t *) i2); #endif static char *ns_cache_filename = NULL; static DB *ns_cache_db = NULL; static time_t ns_cache_db_modtime = 0L; static void ns_cache_open_db(char *dirname) { bool_t reopen = FALSE; HASHINFO hash_info = { 4 * 1024, /* bucket size */ 0, /* fill factor */ 0, /* number of elements */ 96 * 1024, /* bytes to cache */ 0, /* hash function */ 0 }; /* byte order */ char pom[PATH_MAX]; LOCK_NSCACHE; if(dirname) { struct stat estat; snprintf(pom, sizeof(pom), "%s/index.db", dirname); if(!ns_cache_filename || strcmp(pom, ns_cache_filename)) reopen = TRUE; if(!reopen && !stat(pom, &estat) && estat.st_mtime != ns_cache_db_modtime) reopen = TRUE; } else { _free(ns_cache_filename); if(ns_cache_db) ns_cache_db->close(ns_cache_db); ns_cache_db = NULL; ns_cache_db_modtime = 0L; } if(reopen && ns_cache_db) { _free(ns_cache_filename); if(ns_cache_db) ns_cache_db->close(ns_cache_db); ns_cache_db = NULL; ns_cache_db_modtime = 0L; } if(reopen) { struct stat estat; ns_cache_db = dbopen(pom, O_RDONLY, 0600, DB_HASH, &hash_info); if(!ns_cache_db) { xprintf(0, gettext("Unable to open Netscape cache index - %s\n"), pom); } if(!stat(pom, &estat)) ns_cache_db_modtime = estat.st_mtime; _free(ns_cache_filename); ns_cache_filename = tl_strdup(pom); } UNLOCK_NSCACHE; } static void ns_cache_gen_key(DBT *key, char *urlstr) { int32__t size, len; char *tmp; size = sizeof(int32__t); /* check sum */ size += sizeof(int32__t); /* size of urlstr */ size += strlen(urlstr) + 1; /* urlstr */ size += sizeof(int32__t); /* post data */ key->size = size; key->data = (void *) malloc(size); tmp = key->data; COPY_INT32(tmp, &size); tmp += sizeof(int32__t); len = strlen(urlstr) + 1; COPY_INT32(tmp, &len); tmp += sizeof(int32__t); strcpy(tmp, urlstr); tmp += strlen(urlstr) + 1; len = 0; COPY_INT32(tmp, &len); tmp += sizeof(int32__t); } static char *ns_cache_get_filename(DBT *data) { char *tmp = data->data; tmp += sizeof(int32__t) /* size */ + sizeof(int32__t) /* version */ + sizeof(time_t) /* last_modified */ + sizeof(time_t) /* last_accessed */ + sizeof(time_t) /* expires */ + sizeof(uint32__t) /* content_length */ + sizeof(bool_t) /* is_netsite */ + sizeof(time_t) /* lock_date */ + sizeof(int32__t) /* size of filename */ ; return tmp; } char *ns_cache_find_localname(char *urlstr) { DBT key, data; char *retv = NULL; ns_cache_open_db(priv_cfg.ns_cache_dir); LOCK_NSCACHE; if(ns_cache_db) { ns_cache_gen_key(&key, urlstr); if(!ns_cache_db->get(ns_cache_db, &key, &data, 0)) { retv = tl_str_concat(NULL, cfg.ns_cache_dir, "/", ns_cache_get_filename(&data), NULL); } _free(key.data); } UNLOCK_NSCACHE; return retv; } #endif pavuk-0.9.35/src/nscache.h0000644000175000001440000000074610142077741012231 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _nscache_h_ #define _nscache_h_ extern char *ns_cache_find_localname(char *); #endif pavuk-0.9.35/src/gui_addurl.c0000644000175000001440000001235510325657142012740 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #ifdef GTK_FACE #include #include #include "ainterface.h" #include "icons/append.xpm" #include "icons/cancel.xpm" /*** DROP SIGNAL HANDLER ***/ static void window_drop_append_url(GtkWidget * widget, GdkDragContext * context, gint x, gint y, GtkSelectionData * seldata, guint info, guint time, gpointer data) { gchar *p; gchar *drag_url; gchar *p_seldata; url_info *ui; if(!seldata || !seldata->data) { gtk_drag_finish(context, FALSE, FALSE, time); return; } p_seldata = (gchar *) seldata->data; /* strip away '\n' */ p = strchr(p_seldata, '\n'); if(p) drag_url = new_n_string(p_seldata, p - p_seldata); else drag_url = new_string(p_seldata); ui = url_info_new(drag_url); if(gui_cfg.config_shell) { url_info *cui; int row = gtk_clist_append(GTK_CLIST(gui_cfg.url_list), &drag_url); cui = url_info_duplicate(ui); gtk_clist_set_row_data_full(GTK_CLIST(gui_cfg.url_list), row, cui, (GtkDestroyNotify) url_info_free); } cfg.request = dllist_append(cfg.request, (dllist_t) ui); if(cfg.mode_started) { if(!append_starting_url(ui, NULL)) { gdk_beep(); } } #ifdef DEBUG if(cfg.debug) xprintf(0, gettext("Dropped URL : %s\n"), drag_url); #endif gtk_entry_set_text(GTK_ENTRY(data), drag_url); gtk_entry_select_region(GTK_ENTRY(data), 0, strlen(drag_url)); _free(drag_url); gtk_drag_finish(context, TRUE, FALSE, time); } static void AppendURLCB(GtkObject * object, gpointer func_data) { url_info *ui; char *p = (gchar *) gtk_entry_get_text(GTK_ENTRY(func_data)); if(!p || !*p) { gdk_beep(); return; } ui = url_info_new(p); if(gui_cfg.config_shell) { url_info *cui; int row = gtk_clist_append(GTK_CLIST(gui_cfg.url_list), &p); cui = url_info_duplicate(ui); gtk_clist_set_row_data_full(GTK_CLIST(gui_cfg.url_list), row, cui, (GtkDestroyNotify) url_info_free); } cfg.request = dllist_append(cfg.request, (dllist_t) ui); if(cfg.mode_started) { if(!append_starting_url(ui, NULL)) { gdk_beep(); } } gtk_entry_select_region(GTK_ENTRY(func_data), 0, strlen(p)); } void gui_build_addurl(int popup) { static GtkWidget *append_url_tl = NULL; GtkAccelGroup *accel_group; if(!append_url_tl) { GtkWidget *label, *box, *ptab, *button, *entry; append_url_tl = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(append_url_tl, 300, -1); gtk_window_set_title(GTK_WINDOW(append_url_tl), gettext("Pavuk: Append URL")); gtk_signal_connect(GTK_OBJECT(append_url_tl), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &append_url_tl); box = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(append_url_tl), box); gtk_widget_show(box); ptab = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(box), ptab, FALSE, FALSE, 2); gtk_widget_show(ptab); label = gtk_label_new(gettext("New URL:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(ptab), label, FALSE, FALSE, 2); gtk_widget_show(label); entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(ptab), entry, TRUE, TRUE, 2); gtk_signal_connect(GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(AppendURLCB), (gpointer) entry); gtk_widget_show(entry); /*** DRAG'N'DROP ***/ gtk_drag_dest_set(append_url_tl, GTK_DEST_DEFAULT_ALL, dragtypes, NUM_ELEM(dragtypes) - 1, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_signal_connect(GTK_OBJECT(append_url_tl), "drag_data_received", GTK_SIGNAL_FUNC(window_drop_append_url), entry); label = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 2); gtk_widget_show(label); ptab = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(box), ptab, FALSE, FALSE, 2); gtk_widget_show(ptab); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_add(GTK_CONTAINER(ptab), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(AppendURLCB), (gpointer) entry); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); button = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel")); accel_group = gtk_accel_group_new(); gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(append_url_tl), accel_group); gtk_container_add(GTK_CONTAINER(ptab), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) append_url_tl); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); } gtk_widget_show(append_url_tl); if(GTK_WIDGET_REALIZED(append_url_tl)) gdk_window_raise(append_url_tl->window); } #endif /* GTK_FACE */ pavuk-0.9.35/src/pavuk_logo.xpm0000644000175000001440000003341707667306551013365 00000000000000/* XPM */ static char * pavuk_logo_xpm[] = { "98 136 11 1", " c None", ". c #16100E", "+ c #8F8885", "@ c #971E14", "# c #564A44", "$ c #492D27", "% c #CAC8C5", "& c #7F6C68", "* c #ABA7A4", "= c #6D675F", "- c #D3190F", " %% ", " % ", " % ", " *% ", " * ", " *% ", " * ", " %* ", " ** ", " &% ", " %+ ", " &% ", " %&% ", " *+ ", " +* ", " +% ", " %+ ", " &% ", " %+ ", " &* ", " *$% ", " *.#% ", "% %=$# ", "%% %#$+ ", " %% %#$* ", " %% +$#% ", " %% &$& ", " %% %$#% ", " %* *$# ", " %% #$* ", " *% %#$* ", " * *.# ", " %+ +.+ ", " ** #$% ", " +* %.$ ", " %+% +.+ ", " *=% %=.* ", " =#% +..% ", " *.#% #.$ ", " %$$+ %..& ", " *$#% +.$% ", " =$&% %$.& ", " %##+ *..+ ", " &#=% #$#% % ", " =$= *#$& % ", " *##* ###% %% ", " *$#% *$#= % ", " =$=% =$$* * ", " %#.# %#$#% ** ", " +.$+ +$#+ %* ", " +..+ =#$% %+ ", " %#.#* +$#= %+% ", " %#$$% =$$+ *+ ", " %=.$* %$$=% %&+ ", " +..+ *$#& %*#$* ", " &.$&% #$#% %+#$& ", " +$$=% %$$= *#$#% ", " % +#=&% =$$* +$$#% ", " %% +#=#* %$$$ *$$#* ", " %% *##=* &.$* %$$$% ", " %% %=##&% %#.$ %#.$* ", " %%% %=#==% % *..+ *$.$* ", " %*% +###* %% %* &..% %+$..+ ", " %*% +###* ** %==%%$.& %&$..$* ", " %+*% %#$#* %$$$.$+=..* %&=$...=% ", " *==* #$#* %..$.....=%%=$..$$$=% ", " %$.+% +.$+%*.$$$....#+#...$$=* ", " *#$=* +$.$$............$#*% ", " +##=% %#.............+ ", " *###=% +............* ", " +#.$&% %%**+++=$...........$+% ", " *=..#==#$$..$..................$$$#$#$##=+% ", " *=....$$$.##&+*+#..............$#$$$$...#*% ", " %*+++**% %#...$.......$=+==#=###$...#+% ", " %#.............$=* %%%%+#$.$=% ", " *#.................$+% *#.$$* ", " %=#$..$.....$.$........#* %&$.$% ", " &###$$...................$+% +#$+% ", " %&##$$##.....................#+% %++% ", " +#$$#+*$.......................$#+% %*%% ", " %+$.$= *..........................$#+% %+% ", " %#..#* #.........................$..$#* %*% ", " %#..=% %$........................#*&$...=% %*% ", " %$..+ +...............@.........# %&$..#* %% ", " %#.$+ =.........@@-----@........$ %#$..+ %% ", " %##$* $........$-------@.........% +$.$=% ", " %&#$+ %$.........@------..........* %=..# ", " %=#$* %.....$$....@----@..........% *#.#% ", " +$$+ %$...$###$...@---@..........* %$.# ", " %..+ =....$#&&#....@--..........$ *..+ ", " +.& %$....$#&&&#...---@.........$ +..% ", " +#% #.....$#++&#..@----.........= $.#% ", " %= %..$$..$#++&#.@------........& *..= ", " *+ %$.#%+...#&&#$.--------......$% #.$% ", " * *..+ #..$#&#.@------@@......# %$.# ", " * =.= *...$#&$@@@@@.@.......$% +$$* ", " * #.+ &...#&&#####$$#$$....# =$$% ", " *% *..% %#..#&&&&&&&&&=#$...$% *##+ ", " %* *$.% %#..$$#=&==##$$....* +#$* ", " * &.#% %#.....$.$$.....$* %=#= ", " %% +.# %+$...........$* *=#+ ", " % =.& %=$.......$+ &&=% ", " % =.= %*=#$$#&* %=#= ", " %#$* %% +#$% ", " %#$* *$= ", " *##% +* ", " %$#* *% ", " +#=% *% ", " *## %* ", " &&& *% ", " +&= * ", " %==& %% ", " %&## %% ", " %&#+ % ", " %&#& %% ", " *##* % ", " %$$+ % ", " *.$% %% ", " %$$% % ", " %#* %%", " + %", " %* ", " %+ ", " %* ", " %* ", " %% ", " %% ", " %% ", " %% ", " % ", " % ", " % ", " % ", " % ", " % ", " % "}; pavuk-0.9.35/src/charset.h0000644000175000001440000000612010142077736012252 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _charset_h_ #define _charset_h_ /*********** this list of character sets was grabed from ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets it includes any of names and aliases registered by IANA ************/ static const char *char_sets[] = { "ascii", "Big5", "euc-jp", "euc-kr", "ucs-2", "ucs-4", "ucs-basic", "utf-1", "iso-10646", "iso-2022-cn", "iso-2022-jp", "iso-2022-kr", "iso-8859-1", "iso-8859-2", "iso-8859-3", "iso-8859-4", "iso-8859-5", "iso-8859-6", "iso-8859-7", "iso-8859-8", "iso-8859-9", "iso646-ca", "iso646-ca2", "iso646-cn", "iso646-cu", "iso646-de", "iso646-dk", "iso646-es", "iso646-es2", "iso646-fi", "iso646-fr", "iso646-fr1", "iso646-gb", "iso646-hu", "iso646-it", "iso646-jp", "iso646-kr", "iso646-no", "iso646-no2", "iso646-pt", "iso646-pt2", "iso646-se", "iso646-se2", "iso646-us", "iso646-yu", "jis_x0201", "jis_x0208-1983", "jis_x0212-1990", "koi8-r", "koi8-u", "us-ascii", "utf-7", "utf-8", "cp037", "cp038", "cp275", "cp281", "cp290", "cp297", "cp367", "cp420", "cp423", "cp424", "cp437", "cp775", "cp850", "cp851", "cp852", "cp855", "cp857", "cp860", "cp861", "cp862", "cp863", "cp864", "cp865", "cp866", "cp869", "cp880", "cp891", "cp903", "cp904", "iso-ir-10", "iso-ir-100", "iso-ir-101", "iso-ir-102", "iso-ir-103", "iso-ir-109", "iso-ir-11", "iso-ir-110", "iso-ir-111", "iso-ir-121", "iso-ir-122", "iso-ir-123", "iso-ir-126", "iso-ir-127", "iso-ir-128", "iso-ir-13", "iso-ir-138", "iso-ir-139", "iso-ir-14", "iso-ir-141", "iso-ir-142", "iso-ir-143", "iso-ir-144", "iso-ir-146", "iso-ir-147", "iso-ir-148", "iso-ir-149", "iso-ir-15", "iso-ir-150", "iso-ir-151", "iso-ir-152", "iso-ir-153", "iso-ir-154", "iso-ir-155", "iso-ir-157", "iso-ir-158", "iso-ir-159", "iso-ir-16", "iso-ir-17", "iso-ir-18", "iso-ir-19", "iso-ir-2", "iso-ir-21", "iso-ir-25", "iso-ir-27", "iso-ir-37", "iso-ir-4", "iso-ir-42", "iso-ir-47", "iso-ir-49", "iso-ir-50", "iso-ir-51", "iso-ir-54", "iso-ir-55", "iso-ir-57", "iso-ir-58", "iso-ir-6", "iso-ir-60", "iso-ir-61", "iso-ir-69", "iso-ir-70", "iso-ir-8-1", "iso-ir-8-2", "iso-ir-84", "iso-ir-85", "iso-ir-86", "iso-ir-87", "iso-ir-88", "iso-ir-89", "iso-ir-9-1", "iso-ir-9-2", "iso-ir-90", "iso-ir-91", "iso-ir-92", "iso-ir-93", "iso-ir-94", "iso-ir-95", "iso-ir-96", "iso-ir-98", "iso-ir-99", "windows-1250", "windows-1251", "windows-1253", "windows-1254", "windows-1255", "windows-1256", "windows-1257", "windows-1258", NULL, }; #endif pavuk-0.9.35/src/gui_api.c0000644000175000001440000003545010327624344012237 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #ifdef GTK_FACE #include #include #include #ifndef __CYGWIN__ #include #include #endif #include "icons.h" #include "gui_api.h" #include "gkeys.h" #include "gaccel.h" void gui_beep(void) { gdk_beep(); } void gui_start_download(int ismain) { #ifdef HAVE_MT if(!ismain) { GDK_THREADS_ENTER(); } #endif gtk_label_set(GTK_LABEL(gui_cfg.status_msg), ""); gtk_widget_set_sensitive(gui_cfg.bt_rest, FALSE); gtk_widget_set_sensitive(gui_cfg.mea_rest, FALSE); gtk_widget_set_sensitive(gui_cfg.mtb_rest, FALSE); gtk_widget_set_sensitive(gui_cfg.bt_start, FALSE); gtk_widget_set_sensitive(gui_cfg.mea_start, FALSE); gtk_widget_set_sensitive(gui_cfg.mtb_start, FALSE); gtk_widget_set_sensitive(gui_cfg.bt_stop, TRUE); gtk_widget_set_sensitive(gui_cfg.mea_stop, TRUE); gtk_widget_set_sensitive(gui_cfg.mtb_stop, TRUE); gtk_widget_set_sensitive(gui_cfg.bt_break, TRUE); gtk_widget_set_sensitive(gui_cfg.mea_break, TRUE); gtk_widget_set_sensitive(gui_cfg.mtb_break, TRUE); #ifdef WITH_TREE gtk_label_set(GTK_LABEL(gui_cfg.tree_help), ""); #endif #ifdef HAVE_MT if(!ismain) { gdk_flush(); GDK_THREADS_LEAVE(); } #endif } void gui_finish_download(int ismain) { cfg.processing = FALSE; #ifdef HAVE_MT if(!ismain) { GDK_THREADS_ENTER(); } #endif gdk_beep(); gtk_widget_set_sensitive(gui_cfg.bt_rest, TRUE); gtk_widget_set_sensitive(gui_cfg.mea_rest, TRUE); gtk_widget_set_sensitive(gui_cfg.mtb_rest, TRUE); if(cfg.urlstack) { gtk_widget_set_sensitive(gui_cfg.bt_start, TRUE); gtk_widget_set_sensitive(gui_cfg.mea_start, TRUE); gtk_widget_set_sensitive(gui_cfg.mtb_start, TRUE); } gtk_widget_set_sensitive(gui_cfg.bt_stop, FALSE); gtk_widget_set_sensitive(gui_cfg.mea_stop, FALSE); gtk_widget_set_sensitive(gui_cfg.mtb_stop, FALSE); gtk_widget_set_sensitive(gui_cfg.bt_break, FALSE); gtk_widget_set_sensitive(gui_cfg.mea_break, FALSE); gtk_widget_set_sensitive(gui_cfg.mtb_break, FALSE); #ifdef HAVE_MT if(!ismain) { gdk_flush(); GDK_THREADS_LEAVE(); } #endif cfg.rbreak = FALSE; cfg.stop = FALSE; } void gui_finish_document(doc * docp) { #ifdef WITH_TREE if(cfg.xi_face && GTK_TOGGLE_BUTTON(gui_cfg.watch_download)->active) { GDK_THREADS_ENTER(); LOCK_GTKTREE; gtk_ctree_select(GTK_CTREE(gui_cfg.tree_widget), docp->doc_url->tree_nfo[0]); gtk_ctree_node_moveto(GTK_CTREE(gui_cfg.tree_widget), docp->doc_url->tree_nfo[0], 0, 0.0, 0.0); UNLOCK_GTKTREE; GDK_THREADS_LEAVE(); } #endif } void gui_start(int *argc, char **argv) { char *p; char gtkrc[PATH_MAX]; #ifdef __CYGWIN__ snprintf(gtkrc, sizeof(gtkrc), "%s/%s-gtkrc", cfg.install_path, PACKAGE); gtk_rc_add_default_file(gtkrc); #endif /* Parse the file ~/.pavuk-gtkrc. This makes Pavuk themeable :) */ if((p = getenv("HOME"))) { snprintf(gtkrc, sizeof(gtkrc), "%s/.%s-gtkrc", p, PACKAGE); gtk_rc_add_default_file(gtkrc); } gtk_init(argc, &argv); gkey_load(); gui_cfg._go_bg = FALSE; gui_cfg.toplevel = NULL; gui_cfg.about_shell = NULL; gui_cfg.scn_load_shell = NULL; gui_cfg.scn_save_shell = NULL; gui_cfg.cfg_limits = NULL; gui_cfg.config_shell = NULL; gui_cfg.cfg_sch = NULL; #ifdef WITH_TREE gui_cfg.tree_shell = NULL; #endif } void gui_set_doccounter(void) { char pom[256]; if(cfg.xi_face) { GDK_THREADS_ENTER(); sprintf(pom, gettext("Processed: %5ld"), cfg.process_cnt); gtk_label_set(GTK_LABEL(gui_cfg.status_done), pom); sprintf(pom, gettext("Queued: %5ld"), cfg.total_cnt); gtk_label_set(GTK_LABEL(gui_cfg.status_queue), pom); sprintf(pom, gettext("Failed: %4ld"), cfg.fail_cnt); gtk_label_set(GTK_LABEL(gui_cfg.status_fail), pom); sprintf(pom, gettext("Rejected: %5ld"), cfg.reject_cnt); gtk_label_set(GTK_LABEL(gui_cfg.status_rej), pom); gdk_flush(); GDK_THREADS_LEAVE(); _Xt_Serve; } } void gui_set_progress(char *sz, char *rate, char *etime, char *rtime) { #ifdef HAVE_MT int thrnr; thrnr = (int) pthread_getspecific(cfg.thrnr_key); GDK_THREADS_ENTER(); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 3, sz); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 4, rate); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 5, etime); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 6, rtime); gdk_flush(); GDK_THREADS_LEAVE(); #else char pom[40]; snprintf(pom, sizeof(pom), "S: %s", sz); gtk_label_set(GTK_LABEL(gui_cfg.status_size), pom); snprintf(pom, sizeof(pom), "R: %s", rate); gtk_label_set(GTK_LABEL(gui_cfg.status_rate), pom); snprintf(pom, sizeof(pom), "ET: %s", etime); gtk_label_set(GTK_LABEL(gui_cfg.status_et), pom); snprintf(pom, sizeof(pom), "RT: %s", rtime); gtk_label_set(GTK_LABEL(gui_cfg.status_rt), pom); _Xt_Serve; #endif } void gui_clear_status(void) { if(cfg.xi_face) { #ifdef HAVE_MT int thrnr; thrnr = (int) pthread_getspecific(cfg.thrnr_key); GDK_THREADS_ENTER(); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 1, ""); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 2, ""); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 3, ""); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 4, ""); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 5, ""); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 6, ""); gdk_flush(); GDK_THREADS_LEAVE(); #else gtk_entry_set_text(GTK_ENTRY(gui_cfg.minitb_label), ""); gtk_label_set(GTK_LABEL(gui_cfg.status_size), ""); gtk_label_set(GTK_LABEL(gui_cfg.status_rate), ""); gtk_label_set(GTK_LABEL(gui_cfg.status_et), ""); gtk_label_set(GTK_LABEL(gui_cfg.status_rt), ""); #endif } } void gui_set_status(char *text) { if(cfg.xi_face) { #ifdef HAVE_MT int thrnr; thrnr = (int) pthread_getspecific(cfg.thrnr_key); GDK_THREADS_ENTER(); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 2, text); gdk_flush(); GDK_THREADS_LEAVE(); #else gtk_label_set(GTK_LABEL(gui_cfg.status_msg), text); _Xt_Serve; #endif } else { DEBUG_USER(" - %s\n", text); } } void gui_set_msg(char *text, int tout) { if(cfg.xi_face) { GDK_THREADS_ENTER(); gtk_label_set(GTK_LABEL(gui_cfg.status_msg), text); gdk_flush(); _Xt_Serve; GDK_THREADS_LEAVE(); } else { DEBUG_USER(" - %s\n", text); } } void gui_set_url(char *str) { if(cfg.xi_face) { #ifdef HAVE_MT int thrnr; thrnr = (int) pthread_getspecific(cfg.thrnr_key); GDK_THREADS_ENTER(); gtk_clist_set_text(GTK_CLIST(gui_cfg.status_list), thrnr, 1, str); gdk_flush(); GDK_THREADS_LEAVE(); #else gtk_entry_set_text(GTK_ENTRY(gui_cfg.minitb_label), str); #endif } } #ifdef WITH_TREE void *gui_tree_make_entry(url * urlp) { GtkCTreeNode *retv; GtkCTreeNode *parent; GdkBitmap *shape; GdkPixmap *pixmap; gchar *text[1]; dllist *par; url *parurl; par = dllist_last(urlp->parent_url); if(par) parurl = (url *) par->data; else parurl = NULL; LOCK_GTKTREE; GDK_THREADS_ENTER(); if(parurl && parurl->tree_nfo && parurl->tree_nfo[0]) parent = (GtkCTreeNode *) parurl->tree_nfo[0]; else parent = (GtkCTreeNode *) gui_cfg.root; g_return_val_if_fail(parent != NULL, NULL); if(urlp->status & URL_PROCESSED) { gchar *text; guint8 sp; GdkPixmap *p; GdkBitmap *m; gboolean il, ex; gtk_ctree_get_node_info(GTK_CTREE(gui_cfg.tree_widget), urlp->tree_nfo[0], &text, &sp, &p, &m, &pixmap, &shape, &il, &ex); } else { pixmap = gui_cfg.icon.notprocessed->pixmap; shape = gui_cfg.icon.notprocessed->shape; } text[0] = url_to_urlstr(urlp, FALSE); retv = gtk_ctree_insert_node(GTK_CTREE(gui_cfg.tree_widget), parent, NULL, text, 8, pixmap, shape, pixmap, shape, FALSE, TRUE); _free(text[0]); gtk_ctree_node_set_row_data(GTK_CTREE(gui_cfg.tree_widget), retv, (gpointer) urlp); _Xt_Serve; GDK_THREADS_LEAVE(); UNLOCK_GTKTREE; return retv; } #endif void gui_create_tree_root_node(void) { #ifdef WITH_TREE if(cfg.xi_face && !gui_cfg.root) { gchar *text[1]; text[0] = gettext("Start"); LOCK_GTKTREE; GDK_THREADS_ENTER(); gui_cfg.root = (GtkCTreeNode *) gtk_ctree_insert_node(GTK_CTREE(gui_cfg.tree_widget), NULL, NULL, text, 8, gui_cfg.icon.notprocessed->pixmap, gui_cfg.icon.notprocessed->shape, gui_cfg.icon.notprocessed->pixmap, gui_cfg.icon.notprocessed->shape, FALSE, TRUE); GDK_THREADS_LEAVE(); UNLOCK_GTKTREE; } #endif /* WITH_TREE */ } void gui_clear_tree(void) { #ifdef WITH_TREE if(cfg.xi_face && gui_cfg.root) { LOCK_GTKTREE; if(!MT_IS_MAIN_THREAD()) { GDK_THREADS_ENTER(); } gtk_clist_freeze(GTK_CLIST(gui_cfg.tree_widget)); gtk_clist_clear(GTK_CLIST(gui_cfg.tree_widget)); gtk_clist_thaw(GTK_CLIST(gui_cfg.tree_widget)); gui_cfg.root = NULL; if(!MT_IS_MAIN_THREAD()) { GDK_THREADS_LEAVE(); } UNLOCK_GTKTREE; } #endif /* WITH_TREE */ } void gui_tree_add_start(void) { #if defined(WITH_TREE) && !defined(HAVE_MT) if(cfg.xi_face) { GDK_THREADS_ENTER(); gtk_clist_freeze(GTK_CLIST(gui_cfg.tree_widget)); GDK_THREADS_LEAVE(); } #endif } void gui_tree_add_end(void) { #if defined(WITH_TREE) && !defined(HAVE_MT) if(cfg.xi_face) { GDK_THREADS_ENTER(); gtk_clist_thaw(GTK_CLIST(gui_cfg.tree_widget)); GDK_THREADS_LEAVE(); } #endif } void gui_tree_set_icon_for_doc(doc * docp) { icons_set_for_doc(docp); } #ifndef HAVE_MT void gui_loop_serve(void) { if(cfg.xi_face) { gui_cfg.endloop = FALSE; while(!gui_cfg.endloop && gdk_events_pending() && !gtk_main_iteration()); if(gui_cfg._go_bg) gui_do_ui_cleanup(); } } void gui_loop_do(void) { if(cfg.xi_face) { gui_cfg.endloop = FALSE; while(!gui_cfg.endloop && !cfg.rbreak) { gtk_main_iteration(); } if(gui_cfg._go_bg) gui_do_ui_cleanup(); } } void gui_loop_escape(void) { if(cfg.xi_face) gui_cfg.endloop = TRUE; } #endif /* HAVE_MT */ #ifdef HAVE_MT void gui_mt_thread_start(int thrnr) { if(cfg.xi_face) { char *ep[7]; char pom[10]; sprintf(pom, "%d", thrnr); ep[0] = pom; ep[1] = ""; ep[2] = gettext("Starting ..."); ep[3] = ""; ep[4] = ""; ep[5] = ""; ep[6] = ""; GDK_THREADS_ENTER(); gtk_clist_append(GTK_CLIST(gui_cfg.status_list), ep); GDK_THREADS_LEAVE(); } } void gui_mt_thread_end(int thrnr) { if(cfg.xi_face) { GDK_THREADS_ENTER(); gtk_clist_clear(GTK_CLIST(gui_cfg.status_list)); GDK_THREADS_LEAVE(); } } #endif static gint TOut(gpointer data) { *(int *) data = 0; _Xt_EscLoop; return FALSE; } void gui_msleep(long msec) { gint inid; inid = gtk_timeout_add(msec, (GtkFunction) TOut, &inid); _Xt_ServeLoop; if(inid) gtk_timeout_remove(inid); } static void rwCB(gpointer data, gint source, GdkInputCondition condition) { gdk_input_remove(*(int *) data); *(int *) data = 0; _Xt_EscLoop; } int gui_wait_io(int sock, int for_read) { int rv = 0; gint iid = 0; gint inid = 0; if(cfg.ctimeout > 0.0) inid = gtk_timeout_add((int) (cfg.ctimeout * 60000.0), (GtkFunction) TOut, &inid); if(cfg.ctimeout > (double) (ULONG_MAX / 60000)) xprintf(0, gettext ("Too high timeout value for GUI interface implementation of timeout\n")); iid = gdk_input_add(sock, for_read ? GDK_INPUT_READ : GDK_INPUT_WRITE, (GdkInputFunction) rwCB, (gpointer) & iid); _Xt_ServeLoop; if(inid) { gtk_timeout_remove(inid); inid = 0; } else if(cfg.ctimeout > 0.0) { errno = ETIMEDOUT; rv = -1; } if(iid) { gdk_input_remove(iid); iid = 0; } return rv; } int gui_xprint(char *str) { char *p; bool_t last = 1; int ilen; char *pline = NULL; int row; LOCK_GTKLOG; GDK_THREADS_ENTER(); gtk_clist_freeze(GTK_CLIST(gui_cfg.logw)); p = str; if(GTK_CLIST(gui_cfg.logw)->rows) { row = GTK_CLIST(gui_cfg.logw)->rows - 1; if(gtk_clist_get_row_data(GTK_CLIST(gui_cfg.logw), row)) { gtk_clist_get_text(GTK_CLIST(gui_cfg.logw), row, 0, &pline); } } while(*p) { ilen = strcspn(p, "\r\n"); if(*(p + ilen)) *(p + ilen) = '\0'; else last = 0; if(pline) { row = GTK_CLIST(gui_cfg.logw)->rows - 1; pline = g_strconcat(pline, p, NULL); gtk_clist_set_text(GTK_CLIST(gui_cfg.logw), row, 0, pline); g_free(pline); pline = NULL; gtk_clist_set_row_data(GTK_CLIST(gui_cfg.logw), row, (gpointer) ! last); } else { row = gtk_clist_append(GTK_CLIST(gui_cfg.logw), &p); if(!last) gtk_clist_set_row_data(GTK_CLIST(gui_cfg.logw), row, (gpointer) ! last); } p += ilen + last; p += strspn(p, "\r\n"); } if(cfg.xlogsize) { while(cfg.xlogsize < GTK_CLIST(gui_cfg.logw)->rows) gtk_clist_remove(GTK_CLIST(gui_cfg.logw), 0); } gtk_clist_thaw(GTK_CLIST(gui_cfg.logw)); if(cfg.log_autoscroll) { gui_cfg.logvadj->value = gui_cfg.logvadj->upper > gui_cfg.logvadj->page_size ? gui_cfg.logvadj->upper - gui_cfg.logvadj->page_size : 0; gtk_signal_emit_by_name(GTK_OBJECT(gui_cfg.logvadj), "value_changed"); } GDK_THREADS_LEAVE(); UNLOCK_GTKLOG; return strlen(str); } int gui_xvaprintf(char *strs, va_list * args) { int rv; char *buf = g_strdup_vprintf(strs, *args); rv = gui_xprint(buf); g_free(buf); return rv; } void gui_do_ui_cleanup(void) { if(cfg.xi_face) { cfg.xi_face = FALSE; #ifdef HAVE_MT if(cfg.processing) { GDK_THREADS_LEAVE(); tl_sleep(2); } #endif if(gui_cfg.cfg_sch) gtk_widget_destroy(gui_cfg.cfg_sch); if(gui_cfg.about_shell) gtk_widget_destroy(gui_cfg.about_shell); if(gui_cfg.scn_load_shell) gtk_widget_destroy(gui_cfg.scn_load_shell); if(gui_cfg.scn_add_shell) gtk_widget_destroy(gui_cfg.scn_add_shell); if(gui_cfg.scn_save_shell) gtk_widget_destroy(gui_cfg.scn_save_shell); if(gui_cfg.cfg_limits) gtk_widget_destroy(gui_cfg.cfg_limits); if(gui_cfg.config_shell) gtk_widget_destroy(gui_cfg.config_shell); #ifdef WITH_TREE if(gui_cfg.tree_shell) gtk_widget_destroy(gui_cfg.tree_shell); #endif if(gui_cfg.toplevel) gtk_widget_destroy(gui_cfg.toplevel); tl_msleep(100); #ifndef __CYGWIN__ XCloseDisplay(gdk_display); #endif #ifndef HAVE_MT dns_server_kill(); #endif } } #endif /* GTK_FACE */ pavuk-0.9.35/src/gui_api.h0000644000175000001440000000444510142077737012247 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include "url.h" #include "doc.h" #include "bufio.h" #ifdef I_FACE extern void gui_beep(void); extern void gui_loop_serve(void); extern void gui_loop_escape(void); extern void gui_loop_do(void); extern void gui_start(int *, char **); extern void gui_main(void); extern void gui_create_tree_root_node(void); extern void gui_clear_tree(void); extern void *gui_tree_make_entry(url *); extern void gui_tree_set_icon(url *); extern void gui_tree_add_start(void); extern void gui_tree_add_end(void); extern void gui_tree_set_icon_for_doc(doc *); extern void gui_start_download(int); extern void gui_finish_download(int); extern void gui_finish_document(doc *); extern void gui_mt_thread_start(int); extern void gui_mt_thread_end(int); extern void gui_set_doccounter(void); extern void gui_set_progress(char *, char *, char *, char *); extern void gui_set_msg(char *, int); extern void gui_set_status(char *); extern void gui_set_url(char *); extern void gui_clear_status(void); extern void gui_msleep(long); extern int gui_wait_io(int, int); extern int gui_xvaprintf(char *, va_list *); extern int gui_xprint(char *); extern void gui_do_ui_cleanup(void); #else #define gui_beep() #define gui_loop_serve() #define gui_loop_escape() #define gui_loop_do() #define gui_start(n,l) #define gui_main() #define gui_create_tree_root_node() #define gui_clear_tree() #define gui_tree_make_entry(u) #define gui_tree_set_icon(u) #define gui_tree_add_start() #define gui_tree_add_end() #define gui_tree_set_icon_for_doc(d) #define gui_start_download(d) #define gui_finish_download(d) #define gui_finish_document(d) #define gui_mt_thread_start(i) #define gui_mt_thread_end(i) #define gui_set_doccounter() #define gui_set_progress(s, p, e, r) #define gui_set_msg(t, n) #define gui_set_status(t) DEBUG_USER(" - %s\n", t) #define gui_set_url(u) #define gui_clear_status() #define gui_msleep(s) #define gui_wait_io(f, s) TRUE #endif pavuk-0.9.35/src/robots.c0000644000175000001440000002222310400623655012120 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include #include #include #include #include #include "config.h" #include "condition.h" #include "mime.h" #include "robots.h" #include "url.h" #include "tools.h" #include "doc.h" #include "abstract.h" #include "tools.h" #include "mode.h" #include "times.h" #include "errcode.h" #include "gcinfo.h" #include "gui_api.h" #ifdef HAVE_MT #define LOCK_ROBOTS_ENTRY(ent) mt_pthread_mutex_lock(&(ent)->lock, "robots entry") #define UNLOCK_ROBOTS_ENTRY(ent) mt_pthread_mutex_unlock(&(ent)->lock, "robots entry") #else #define LOCK_ROBOTS_ENTRY(ent) #define UNLOCK_ROBOTS_ENTRY(ent) #endif static char *get_robots(url * urlp); static void parse_robots(char *, char *, char ***, char ***); static robotlim **robots = NULL; static char *get_max_match(char *str, char **pat) { char *rv = NULL; int maxlen = -1; while(pat && *pat) { if(!strncmp(*pat, str, strlen(*pat))) { int len = strlen(*pat); if(len > maxlen) { rv = *pat; maxlen = len; } } pat++; } return rv; } /***************************************************/ /* kontrola ci URL splna podmienky pre WWW robotov */ /* FIXME: Translate me! */ /***************************************************/ bool_t robots_check(url * urlp) { char *pom, *mdp, *map; int i = 0; int rv = TRUE; robotlim *tmpr = NULL; int dont_have = TRUE; if((urlp->type != URLT_HTTP && urlp->type != URLT_HTTPS) || !cfg.condition.allow_robots) return TRUE; LOCK_ROBOTS; if(robots) { while(robots[i] && !(!strcmp(robots[i]->site, urlp->p.http.host) && (robots[i]->port == urlp->p.http.port))) i++; if(robots[i]) dont_have = FALSE; } if(dont_have) { tmpr = (robotlim *) _malloc(sizeof(robotlim)); tmpr->site = new_string(urlp->p.http.host); tmpr->port = urlp->p.http.port; tmpr->dpat = NULL; tmpr->apat = NULL; #ifdef HAVE_MT pthread_mutex_init(&tmpr->lock, NULL); #endif robots = (robotlim **) _realloc(robots, (i + 2) * sizeof(robotlim *)); robots[i] = tmpr; robots[i + 1] = NULL; /* here is possible to cros enter/leave to critical */ /* sections because no chance that anyone else holds */ /* lock on robots[i]->lock when it is freshly created */ LOCK_ROBOTS_ENTRY(robots[i]); } UNLOCK_ROBOTS; if(dont_have) { pom = get_robots(urlp); if(pom) { parse_robots("pavuk", pom, &tmpr->dpat, &tmpr->apat); _free(pom); } } else { LOCK_ROBOTS_ENTRY(robots[i]); } mdp = get_max_match(urlp->p.http.document, robots[i]->dpat); map = get_max_match(urlp->p.http.document, robots[i]->apat); UNLOCK_ROBOTS_ENTRY(robots[i]); if(map && mdp && (strlen(map) >= strlen(mdp))) rv = TRUE; else if(mdp) rv = FALSE; return rv; } /************************************************/ /* prenos suboru "robots.txt" pre dane URL */ /* FIXME: Translate me! */ /************************************************/ static char *get_robots(url * urlp) { url *purl = _malloc(sizeof(url)); doc docu; int rstat; char *ret = NULL; char *pom; int nredir = 0, nreget = 0; struct stat estat; char *pp; int f; global_connection_info con_info; #ifdef I_FACE if(cfg.xi_face) { gui_set_status(gettext("transfering \"robots.txt\"")); } #endif xprintf(1, gettext("transfering \"robots.txt\"\n")); memset(purl, '\0', sizeof(url)); purl->type = urlp->type; purl->parent_url = NULL; purl->status = URL_INLINE_OBJ; /*** required if -store_name option used ***/ purl->extension = NULL; purl->local_name = NULL; #ifdef HAVE_MT pthread_mutex_init(&purl->lock, NULL); #endif #ifdef WITH_TREE #ifdef I_FACE purl->prop = NULL; purl->tree_nfo = NULL; #endif #endif purl->level = 0; purl->p.http.user = new_string(urlp->p.http.user); purl->p.http.password = new_string(urlp->p.http.password); purl->p.http.host = new_string(urlp->p.http.host); purl->p.http.port = urlp->p.http.port; purl->p.http.document = new_string("/robots.txt"); purl->p.http.anchor_name = NULL; purl->p.http.searchstr = NULL; doc_init(&docu, purl); docu.is_robot = TRUE; docu.save_online = FALSE; docu.report_size = FALSE; docu.check_limits = FALSE; if(cfg.mode == MODE_SYNC || cfg.mode == MODE_MIRROR) { pp = url_to_filename(purl, TRUE); if(!stat(pp, &estat) && !S_ISDIR(estat.st_mode)) { docu.dtime = estat.st_mtime; } } init_global_connection_data(&con_info); while((rstat = doc_download(&docu, TRUE, FALSE)) && ((nredir < cfg.nredir && docu.errcode == ERR_HTTP_REDIR) || (nreget < cfg.nreget && docu.errcode == ERR_HTTP_TRUNC))) { if(docu.errcode) report_error(&docu, "robots.txt"); save_global_connection_data(&con_info, &docu); nredir += docu.errcode == ERR_HTTP_REDIR; nreget += docu.errcode == ERR_HTTP_TRUNC; if(docu.errcode == ERR_HTTP_REDIR) { purl = docu.doc_url->moved_to; pom = url_to_urlstr(purl, FALSE); xprintf(1, gettext("Hmm: redirecting \"robots.txt\" to %s ???\n"), pom); _free(pom); free_deep_url(docu.doc_url); _free(docu.doc_url) docu.doc_url = purl; } _free(docu.contents); _free(docu.mime); _free(docu.type_str); doc_remove_lock(&docu); if(cfg.mode == MODE_SYNC || cfg.mode == MODE_MIRROR) { pp = url_to_filename(purl, TRUE); if(!stat(pp, &estat) && !S_ISDIR(estat.st_mode)) { docu.dtime = estat.st_mtime; } } restore_global_connection_data(&con_info, &docu); } if(docu.errcode) report_error(&docu, "robots.txt"); save_global_connection_data(&con_info, &docu); kill_global_connection_data(&con_info); if(!rstat) { if(cfg.dumpfd < 0) { doc_store(&docu, TRUE); } ret = docu.contents; } else if(docu.errcode == ERR_HTTP_NFOUND || docu.errcode == ERR_HTTP_GONE) { pp = url_to_filename(purl, TRUE); if(cfg.dumpfd < 0) { if((f = open(pp, O_BINARY | O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR)) > 0) close(f); } } else { _free(docu.contents); } doc_remove_lock(&docu); _free(docu.type_str); _free(docu.mime); if(purl && purl->moved_to) { free_deep_url(purl->moved_to); free(purl->moved_to); } if(purl) { free_deep_url(purl); free(purl); } return ret; } /*******************************/ /* analyza suboru "robots.txt" */ /* FIXME: Translate me! */ /*******************************/ static void parse_robots(char *agent, char *file, char ***dpat, char ***apat) { char *p, *p1, *p2; bool_t is_me = FALSE; int n_dret = 0, n_aret = 0; bool_t last = 1; int ilen; *apat = NULL; *dpat = NULL; p = file; while(*p) { ilen = strcspn(p, "\r\n"); if(*(p + ilen)) *(p + ilen) = '\0'; else last = 0; while(*p == ' ' || *p == '\t') p++; if(!*p) { is_me = FALSE; } else if(!strncasecmp("User-Agent: ", p, 12)) { p2 = p + 12; while(*p2 == ' ' || *p2 == '\t') p2++; p1 = p2 + strlen(p2); while(*p1 == ' ' || *p1 == '\t') { *p1 = '\0'; p1--; } if(*p2 == '*') is_me = TRUE; else if(!strncmp(agent, p2, strlen(agent))) is_me = TRUE; } else if(is_me && !strncasecmp("Disallow: ", p, 10)) { p2 = p + 10; while(*p2 == ' ' || *p2 == '\t') p2++; p1 = p2 + strlen(p2); while(*p1 == ' ' || *p1 == '\t') { *p1 = '\0'; p1--; } if(*p2) { *dpat = (char **) _realloc(*dpat, (n_dret + 2) * sizeof(char *)); (*dpat)[n_dret + 1] = NULL; (*dpat)[n_dret] = new_string(p2); n_dret++; } } else if(is_me && !strncasecmp("Allow: ", p, 7)) { p2 = p + 7; while(*p2 == ' ' || *p2 == '\t') p2++; p1 = p2 + strlen(p2); while(*p1 == ' ' || *p1 == '\t') { *p1 = '\0'; p1--; } if(*p2) { *apat = (char **) _realloc(*apat, (n_aret + 2) * sizeof(char *)); (*apat)[n_aret + 1] = NULL; (*apat)[n_aret] = new_string(p2); n_aret++; } } p += ilen + last; p += strspn(p, "\n\r"); } } void robots_do_cleanup(void) { int i, j; for(i = 0; robots && robots[i]; i++) { _free(robots[i]->site); for(j = 0; robots[i]->apat && robots[i]->apat[j]; j++) _free(robots[i]->apat[j]); _free(robots[i]->apat); for(j = 0; robots[i]->dpat && robots[i]->dpat[j]; j++) _free(robots[i]->dpat[j]); _free(robots[i]->dpat); #ifdef HAVE_MT pthread_mutex_destroy(&(robots[i]->lock)); #endif _free(robots[i]); } _free(robots); } pavuk-0.9.35/src/robots.h0000644000175000001440000000174510142077741012135 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _robots_h_ #define _robots_h_ #include "tools.h" #include "mt.h" #include "url.h" typedef struct { char *site; /*** host name of server for "robots.txt" checking ***/ int port; /*** server port ***/ char **dpat; /*** list of disallowed prefixes ***/ char **apat; /*** list of allowed prefixes */ #ifdef HAVE_MT pthread_mutex_t lock; /*** lock to prevent downloading concurrently with multiple threads ***/ #endif } robotlim; extern bool_t robots_check(url *); extern void robots_do_cleanup(void); #endif pavuk-0.9.35/src/tag_pattern.c0000644000175000001440000000546510400623655013131 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include "tag_pattern.h" #include "tools.h" #ifdef HAVE_FNMATCH #include #else #include "fnmatch.h" #endif tag_pattern_t *tag_pattern_new(int type, char *tag, char *attrib, char *urlp) { tag_pattern_t *rv; int r[3]; rv = _malloc(sizeof(tag_pattern_t)); memset(rv, '\0', sizeof(tag_pattern_t)); rv->type = type; if(type == TAGP_WC) { r[0] = fnmatch(tag, "", 0); if(r[0] != 0 && r[0] != FNM_NOMATCH) { xperror(tag); xprintf(0, gettext("Bad -tag_pattern tag wildcard pattern\n")); } r[1] = fnmatch(attrib, "", 0); if(r[1] != 0 && r[1] != FNM_NOMATCH) { xperror(rv->attrib); xprintf(0, gettext("Bad -tag_pattern attribute wildcard pattern\n")); } r[2] = fnmatch(urlp, "", 0); if(r[2] != 0 && r[2] != FNM_NOMATCH) { xperror(rv->attrib); xprintf(0, gettext("Bad -tag_pattern url wildcard pattern\n")); } if((r[0] != 0 && r[0] != FNM_NOMATCH) || (r[1] != 0 && r[1] != FNM_NOMATCH) || (r[2] != 0 && r[2] != FNM_NOMATCH)) { tag_pattern_free(rv); rv = NULL; } } #ifdef HAVE_REGEX else { if(!(rv->tag_re = re_make(tag))) xprintf(0, gettext("Bad -tag_rpattern tag RE pattern\n")); if(!(rv->attrib_re = re_make(attrib))) xprintf(0, gettext("Bad -tag_rpattern attribute RE pattern\n")); if(!(rv->urlp_re = re_make(urlp))) xprintf(0, gettext("Bad -tag_rpattern url RE pattern\n")); if(!rv->tag_re || !rv->attrib_re || !rv->urlp_re) { tag_pattern_free(rv); rv = NULL; } } #endif if(rv) { rv->tag = tl_strdup(tag); rv->attrib = tl_strdup(attrib); rv->urlp = tl_strdup(urlp); } return rv; } void tag_pattern_free(tag_pattern_t *tp) { _free(tp->tag); _free(tp->attrib); _free(tp->urlp); #ifdef HAVE_REGEX if(tp->type == TAGP_RE) { if(tp->tag_re) re_free(tp->tag_re); if(tp->attrib_re) re_free(tp->attrib_re); if(tp->urlp_re) re_free(tp->urlp_re); } #endif _free(tp); } int tag_pattern_match(tag_pattern_t *tp, char *tag, char *attrib, char *urlp) { if(tp->type == TAGP_WC) { return (!fnmatch(tp->tag, tag, 0) && !fnmatch(tp->attrib, attrib, 0) && !fnmatch(tp->urlp, urlp, 0)); } #ifdef HAVE_REGEX else { return (re_pmatch(tp->tag_re, tag) && re_pmatch(tp->attrib_re, attrib) && re_pmatch(tp->urlp_re, urlp)); } #endif return FALSE; } pavuk-0.9.35/src/tag_pattern.h0000644000175000001440000000156010142077741013130 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _tag_pattern_h_ #define _tag_pattern_h_ #include "re.h" typedef struct _tag_pattern_t { enum { TAGP_WC, TAGP_RE, } type; char *tag; char *attrib; char *urlp; #ifdef HAVE_REGEX re_entry *tag_re; re_entry *attrib_re; re_entry *urlp_re; #endif } tag_pattern_t; extern tag_pattern_t *tag_pattern_new(int, char *, char *, char *); extern void tag_pattern_free(tag_pattern_t *); extern int tag_pattern_match(tag_pattern_t *, char *, char *, char *); #endif pavuk-0.9.35/src/authinfo.c0000644000175000001440000001602110325645733012433 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include "authinfo.h" #include "tools.h" #include "url.h" #include "dllist.h" #include "bufio.h" dllist *authdata = NULL; #define AUTHI_UNKNOWN 0 #define AUTHI_PROTO 1 #define AUTHI_HOST 2 #define AUTHI_USER 3 #define AUTHI_PASS 4 #define AUTHI_BASE 5 #define AUTHI_TYPE 6 #define AUTHI_REALM 7 #define AUTHI_NTLM_DOMAIN 8 typedef struct { char *id; int type; } authi_entry; static authi_entry authidef[] = { {"Proto:", AUTHI_PROTO}, {"Host:", AUTHI_HOST}, {"User:", AUTHI_USER}, {"Pass:", AUTHI_PASS}, {"Base:", AUTHI_BASE}, {"Type:", AUTHI_TYPE}, {"Realm:", AUTHI_REALM}, {"NTLMDomain:", AUTHI_NTLM_DOMAIN}, }; http_auth_type_t authinfo_get_type(char *str) { http_auth_type_t type; type = http_get_authorization_type(str); if(type == HTTP_AUTH_NONE) { type = _atoi(str); if(errno == ERANGE || type >= HTTP_AUTH_LAST) type = HTTP_AUTH_NONE; } return type; } int authinfo_load(char *fn) { bufio *fd; int i; char lnbuf[4096]; char *lns; char *p; bool_t new_section = TRUE; bool_t found; authinfo *ap = NULL; LOCK_AUTHINFO; while(authdata) { authinfo *ai = (authinfo *) authdata->data; free_deep_authinfo(ai); authdata = dllist_remove_entry(authdata, authdata); } if(!(fd = bufio_open(fn, O_BINARY | O_RDONLY))) { xperror(fn); UNLOCK_AUTHINFO; return -1; } while(bufio_readln(fd, lnbuf, sizeof(lnbuf)) > 0) { strip_nl(lnbuf); for(lns = lnbuf; *lns && tl_ascii_isspace(*lns); lns++); if(*lns == '#') continue; if(!*lns) { if(ap && ap->prot == URLT_UNKNOWN) { xprintf(0, gettext("Bad section - specify protocol\n")); free_deep_authinfo(ap); } if(ap && !ap->host) { xprintf(0, gettext("Bad section - specify hostname\n")); free_deep_authinfo(ap); } if(ap && ap->port == 0) { ap->port = prottable[ap->prot].default_port; } if(ap) { authdata = dllist_append(authdata, (dllist_t)ap); ap = NULL; } new_section = TRUE; } if(*lns == '#' || !*lns) continue; if(new_section) { new_section = FALSE; ap = (authinfo *) _malloc(sizeof(authinfo)); ap->prot = URLT_UNKNOWN; ap->host = NULL; ap->port = 0; ap->user = NULL; ap->pass = NULL; ap->base = NULL; ap->realm = NULL; ap->ntlm_domain = NULL; ap->type = HTTP_AUTH_BASIC; } found = FALSE; for(i = 0; i < NUM_ELEM(authidef); i++) { if(!strncasecmp(lns, authidef[i].id, strlen(authidef[i].id))) { lns += strlen(authidef[i].id); for(; *lns && tl_ascii_isspace(*lns); lns++); for(p = lns + strlen(lns); *p && tl_ascii_isspace(*p); p--) *p = '\0'; found = TRUE; break; } } if(!found) { xprintf(0, gettext("Unable to parse : \"%s\"\n"), lns); continue; } switch (authidef[i].type) { case AUTHI_PROTO: found = FALSE; for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].urlid && !strcasecmp(lns, prottable[i].urlid)) { found = TRUE; ap->prot = prottable[i].id; break; } } if(!found) { xprintf(0, gettext("Bad protocol - %s\n"), lns); } break; case AUTHI_HOST: p = strrchr(lns, ':'); ap->host = p ? tl_strndup(lns, p - lns) : tl_strdup(lns); if(p) { ap->port = _atoi(p + 1); if(errno == ERANGE) { xprintf(0, gettext("Bad port number %s\n"), p); } } break; case AUTHI_USER: ap->user = tl_strdup(lns); break; case AUTHI_PASS: ap->pass = tl_strdup(lns); break; case AUTHI_BASE: ap->base = tl_strdup(lns); break; case AUTHI_REALM: ap->realm = tl_strdup(lns); break; case AUTHI_TYPE: ap->type = authinfo_get_type(lns); _atoi(lns); if(ap->type == HTTP_AUTH_NONE) { xprintf(0, gettext("Unknown auth type - %s\n"), lns); ap->type = HTTP_AUTH_BASIC; } break; case AUTHI_NTLM_DOMAIN: ap->ntlm_domain = tl_strdup(lns); break; } } bufio_close(fd); UNLOCK_AUTHINFO; return 0; } int authinfo_save(char *fn) { int fd; char pom[4096]; dllist *ptr; LOCK_AUTHINFO; fd = open(fn, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, 0600); if(fd < 0) { xperror(fn); UNLOCK_AUTHINFO; return -1; } ptr = authdata; while(ptr) { authinfo *ai = (authinfo *) ptr->data; snprintf(pom, sizeof(pom), "%s %s\n", authidef[AUTHI_PROTO].id, prottable[ai->prot].urlid); write(fd, pom, strlen(pom)); snprintf(pom, sizeof(pom), "%s %s:%d\n", authidef[AUTHI_HOST].id, ai->host, ai->port); write(fd, pom, strlen(pom)); if(ai->user) { snprintf(pom, sizeof(pom), "%s %s\n", authidef[AUTHI_USER].id, ai->user); write(fd, pom, strlen(pom)); } if(ai->pass) { snprintf(pom, sizeof(pom), "%s %s\n", authidef[AUTHI_PASS].id, ai->pass); write(fd, pom, strlen(pom)); } if(ai->base) { snprintf(pom, sizeof(pom), "%s %s\n", authidef[AUTHI_BASE].id, ai->base); write(fd, pom, strlen(pom)); } if(ai->realm) { snprintf(pom, sizeof(pom), "%s %s\n", authidef[AUTHI_REALM].id, ai->realm); write(fd, pom, strlen(pom)); } if(ai->prot == URLT_HTTP || ai->prot == URLT_HTTPS) { snprintf(pom, sizeof(pom), "%s %s\n", authidef[AUTHI_TYPE].id, http_auths[ai->type].name); write(fd, pom, strlen(pom)); } write(fd, "\n", 1); ptr = ptr->next; } close(fd); UNLOCK_AUTHINFO; return 0; } authinfo *authinfo_match_entry(protocol prot, char *host, int port, char *path, char *realm) { int mlen = -1, len; authinfo *ret = NULL; authinfo *ai = NULL; dllist *ptr; LOCK_AUTHINFO; ptr = authdata; while(ptr) { ai = (authinfo *) ptr->data; if(ai->prot == prot && !strcmp(ai->host, host) && port == ai->port) { if(realm && ai->realm && !strcmp(realm, ai->realm)) { ret = ai; break; } if((ai->base && !strncmp(path, ai->base, strlen(ai->base))) || !ai->base) { if(ai->base) len = strlen(ai->base); else len = 0; if(len > mlen) { ret = ai; mlen = len; } } } ptr = ptr->next; } UNLOCK_AUTHINFO; return ret; } pavuk-0.9.35/src/authinfo.h0000644000175000001440000000214010142077736012434 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _authinfo_h_ #define _authinfo_h_ #include "url.h" #include "http.h" #include "dllist.h" typedef struct { protocol prot; char *host; int port; char *user; char *pass; char *base; char *realm; char *ntlm_domain; http_auth_type_t type; } authinfo; extern dllist *authdata; extern http_auth_type_t authinfo_get_type(char *); extern authinfo *authinfo_match_entry(protocol, char *, int, char *, char *); extern int authinfo_load(char *); extern int authinfo_save(char *); #define free_deep_authinfo(entry)\ _free((entry)->pass);\ _free((entry)->user);\ _free((entry)->host);\ _free((entry)->base);\ _free((entry)->ntlm_domain);\ _free(entry); #endif pavuk-0.9.35/src/stats.c0000644000175000001440000003734210325660711011756 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include "stats.h" #ifdef GTK_FACE #include "gui.h" #include "gui_api.h" #endif int stats_fill_spage(const char *filename, void *lst) { char *pom, *p, p2[8192]; int total = 0, redir = 0, nsredir = 0, dnld = 0, noproc = 0, moved = 0; int brokennr = 0, dexistnr = 0, ferrnr = 0, nferrnr = 0, unsnr = 0; int startnr = 0; int i; dllist *parptr; dllist *broken = NULL, *dexist = NULL, *ferr = NULL; dllist *nferr = NULL, *uns = NULL, *start = NULL; dllist *ptr; url *urlp; pom = p2; if(!cfg.mode_started) return -1; LOCK_CFG_URLHASH; switch (cfg.mode) { case MODE_NORMAL: case MODE_LNUPD: case MODE_SYNC: case MODE_MIRROR: case MODE_SINGLE: case MODE_SREGET: case MODE_RESUME: case MODE_NOSTORE: { for(i = 0; i < cfg.url_hash_tbl->size; i++) { ptr = cfg.url_hash_tbl->nodes[i]; while(ptr) { url *urlp = (url *) ptr->data; total++; if(urlp->status & URL_ISSTARTING) { startnr++; start = dllist_append(start, (dllist_t) urlp); } if(urlp->status & URL_PROCESSED) { if(urlp->status & URL_INNSCACHE) nsredir++; else if(urlp->status & URL_REDIRECT) redir++; else if(urlp->status & URL_DOWNLOADED) dnld++; else if(urlp->status & URL_MOVED) moved++; else if(urlp->status & URL_TRUNCATED) { broken = dllist_append(broken, (dllist_t) urlp); brokennr++; } else if(urlp->status & URL_NOT_FOUND) { dexist = dllist_append(dexist, (dllist_t) urlp); dexistnr++; } else if(urlp->status & URL_ERR_UNREC) { ferr = dllist_append(ferr, (dllist_t) urlp); ferrnr++; } else if(urlp->status & URL_ERR_REC) { nferr = dllist_append(nferr, (dllist_t) urlp); nferrnr++; } else { uns = dllist_append(uns, (dllist_t) urlp); unsnr++; } } else noproc++; ptr = ptr->next; } } } if(filename) { FILE *f; #define DMP_URLLIST(lst)\ ptr = lst;\ while(ptr)\ {\ urlp = (url *)ptr->data;\ p = url_to_urlstr(urlp, FALSE);\ fprintf(f, " %s\n", p);\ _free(p);\ LOCK_URL(urlp);\ for (parptr = urlp->parent_url; parptr ; parptr = parptr->next)\ {\ p = url_to_urlstr((url *)parptr->data, FALSE);\ fprintf(f, " %s\n", p);\ _free(p);\ }\ UNLOCK_URL(urlp);\ ptr = ptr->next;\ }\ f = fopen(filename, "wb+"); if(!f) { UNLOCK_CFG_URLHASH; xperror(filename); return -1; } fprintf(f, gettext("Total number of URLs in queue: %d\n"), total); fprintf(f, gettext("Starting urls: %d\n"), startnr); DMP_URLLIST(start); if(noproc) fprintf(f, gettext("Not processed yet: %d (%3d%%)\n"), noproc, (int) (((float) noproc / (float) total) * 100.0)); i = dnld + nsredir + redir; if(i) fprintf(f, gettext("Processed OK: %d (%3d%%)\n"), i, (int) (((float) i / (float) total) * 100.0)); if(redir) fprintf(f, gettext("Loaded from local tree: %d (%3d%%)\n"), redir, (int) (((float) redir / (float) total) * 100.0)); if(nsredir) fprintf(f, gettext("Loaded from Netscape browser cache dir: %d (%3d%%)\n"), nsredir, (int) (((float) nsredir / (float) total) * 100.0)); if(dnld) fprintf(f, gettext("Downloaded over network: %d (%3d%%)\n"), dnld, (int) (((float) dnld / (float) total) * 100.0)); if(moved) fprintf(f, gettext("Moved to another location: %d (%3d%%)\n"), moved, (int) (((float) moved / (float) total) * 100.0)); if(broken) { fprintf(f, gettext("Downloaded truncated: %d (%3d%%)\n"), brokennr, (int) (((float) brokennr / (float) total) * 100.0)); DMP_URLLIST(broken); } if(nferr) { fprintf(f, gettext("Non fatal errors: %d (%3d%%)\n"), nferrnr, (int) (((float) nferrnr / (float) total) * 100.0)); DMP_URLLIST(nferr); } if(dexist) { fprintf(f, gettext("Not found documents: %d (%3d%%)\n"), dexistnr, (int) (((float) dexistnr / (float) total) * 100.0)); DMP_URLLIST(dexist); } if(ferr) { fprintf(f, gettext("Documents with fatal errors: %d (%3d%%)\n"), ferrnr, (int) (((float) ferrnr / (float) total) * 100.0)); DMP_URLLIST(ferr); } if(uns) { fprintf(f, gettext("Documents with unknown status: %d (%3d%%)\n"), unsnr, (int) (((float) unsnr / (float) total) * 100.0)); DMP_URLLIST(uns); } fclose(f); #undef DMP_URLLIST } #ifdef GTK_FACE /* here will be clist with active URL fields */ else if(cfg.xi_face) { GtkWidget *l = GTK_WIDGET(lst); #define DMP_URLLIST(lst, ajp)\ ptr = lst;\ while(ptr)\ {\ urlp = (url *)ptr->data;\ p = url_to_urlstr(urlp, FALSE);\ sprintf(pom, " %s\n", p);\ _free(p);\ i = gtk_clist_append(GTK_CLIST(l), &pom);\ gtk_clist_set_row_data(GTK_CLIST(l), i, urlp);\ LOCK_URL(urlp);\ for (parptr = urlp->parent_url; ajp && parptr; parptr = parptr->next)\ {\ p = url_to_urlstr((url *)parptr->data, FALSE);\ sprintf(pom, " %s\n", p);\ _free(p);\ gtk_clist_append(GTK_CLIST(l), &pom);\ }\ UNLOCK_URL(urlp);\ ptr = ptr->next;\ }\ sprintf(pom, gettext("Total number of URLs in queue: %d\n"), total); gtk_clist_append(GTK_CLIST(l), &pom); sprintf(pom, gettext("Starting urls: %d\n"), startnr); gtk_clist_append(GTK_CLIST(l), &pom); DMP_URLLIST(start, FALSE); if(noproc) { sprintf(pom, gettext("Not processed yet: %d (%3d%%)\n"), noproc, (int) (((float) noproc / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); } i = dnld + nsredir + redir; if(i) { sprintf(pom, gettext("Processed OK: %d (%3d%%)\n"), i, (int) (((float) i / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); } if(redir) { sprintf(pom, gettext("Loaded from local tree: %d (%3d%%)\n"), redir, (int) (((float) redir / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); } if(nsredir) { sprintf(pom, gettext("Loaded from Netscape browser cache dir: %d (%3d%%)\n"), nsredir, (int) (((float) nsredir / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); } if(dnld) { sprintf(pom, gettext("Downloaded over network: %d (%3d%%)\n"), dnld, (int) (((float) dnld / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); } if(moved) { sprintf(pom, gettext("Moved to another location: %d (%3d%%)\n"), moved, (int) (((float) moved / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); } if(broken) { sprintf(pom, gettext("Downloaded truncated: %d (%3d%%)\n"), brokennr, (int) (((float) brokennr / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); DMP_URLLIST(broken, TRUE); } if(nferr) { sprintf(pom, gettext("Non fatal errors: %d (%3d%%)\n"), nferrnr, (int) (((float) nferrnr / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); DMP_URLLIST(nferr, TRUE); } if(dexist) { sprintf(pom, gettext("Not found documents: %d (%3d%%)\n"), dexistnr, (int) (((float) dexistnr / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); DMP_URLLIST(dexist, TRUE); } if(ferr) { sprintf(pom, gettext("Documents with fatal errors: %d (%3d%%)\n"), ferrnr, (int) (((float) ferrnr / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); DMP_URLLIST(ferr, TRUE); } if(uns) { sprintf(pom, gettext("Documents with unspecific status: %d (%3d%%)\n"), unsnr, (int) (((float) unsnr / (float) total) * 100.0)); gtk_clist_append(GTK_CLIST(l), &pom); DMP_URLLIST(uns, TRUE); } #undef DMP_URLLIST } #endif break; default: UNLOCK_CFG_URLHASH; return -1; break; } UNLOCK_CFG_URLHASH; return 0; } #ifdef GTK_FACE #include #include "gaccel.h" #include "recurse.h" #include "icons/cancel.xpm" #include "icons/save.xpm" #include "icons/restart_small.xpm" static GtkWidget *stat_list, *dmi; static GtkWidget *sstatw = NULL; static void PopdownW(GtkWidget * w, gpointer fdata) { gtk_widget_destroy(GTK_WIDGET(fdata)); } static void Save(GtkWidget * w, gpointer fdata) { const char *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fdata)); if(fn && *fn) { if(stats_fill_spage(fn, NULL)) { gdk_beep(); } else gtk_widget_destroy(GTK_WIDGET(fdata)); } else { gdk_beep(); } } static void SaveDia(void) { static GtkWidget *sw; if(!sw) { sw = gtk_file_selection_new(gettext("Pavuk: save status page")); gtk_signal_connect(GTK_OBJECT(sw), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &sw); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(sw)->ok_button), "clicked", GTK_SIGNAL_FUNC(Save), sw); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(sw)->cancel_button), "clicked", GTK_SIGNAL_FUNC(PopdownW), sw); } gtk_widget_show(sw); if(GTK_WIDGET_REALIZED(sw)) gdk_window_raise(sw->window); } static void Refresh(void) { gtk_clist_freeze(GTK_CLIST(stat_list)); gtk_clist_clear(GTK_CLIST(stat_list)); if(stats_fill_spage(NULL, stat_list)) { char *p = gettext("Not available yet"); gtk_clist_append(GTK_CLIST(stat_list), &p); } gtk_clist_thaw(GTK_CLIST(stat_list)); } static void TryDownload(void) { GList *ptr = GTK_CLIST(stat_list)->selection; url *urlp = (url *) gtk_clist_get_row_data(GTK_CLIST(stat_list), GPOINTER_TO_INT(ptr->data)); if(!urlp || cfg.processing) { gdk_beep(); return; } #ifdef HAVE_MT { pthread_attr_t thrdattr; pthread_attr_init(&thrdattr); pthread_attr_setscope(&thrdattr, PTHREAD_SCOPE_SYSTEM); pthread_attr_setstacksize(&thrdattr, MT_STACK_SIZE); gui_start_download(TRUE); if(pthread_create(&cfg.mainthread, &thrdattr, (void *) download_single_doc, (void *) urlp)) { xperror("Create downloading thread"); gui_finish_download(TRUE); } } #else download_single_doc(urlp); #endif } static gint list_events(GtkWidget * widget, GdkEvent * event, gpointer fdata) { GdkEventButton *bevent; switch (event->type) { case GDK_BUTTON_PRESS: bevent = (GdkEventButton *) event; if(bevent->button == 3) { if(GTK_CLIST(stat_list)->selection) { GList *ptr = GTK_CLIST(stat_list)->selection; url *urlp = (url *) gtk_clist_get_row_data(GTK_CLIST(stat_list), GPOINTER_TO_INT(ptr->data)); gtk_widget_set_sensitive(dmi, (urlp != NULL) && !cfg.processing); gtk_menu_popup(GTK_MENU(fdata), NULL, NULL, NULL, NULL, 3, bevent->time); } } break; default: break; } return FALSE; } void stats_show(void) { if(!sstatw) { GtkWidget *box, *swin, *bbox, *button, *menu; GtkAccelGroup *accel_group; accel_group = gtk_accel_group_new(); sstatw = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(sstatw), gettext("Pavuk: status page")); gtk_signal_connect(GTK_OBJECT(sstatw), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &sstatw); box = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(sstatw), box); gtk_widget_show(box); swin = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(swin, 500, 400); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(swin); gtk_container_add(GTK_CONTAINER(box), swin); stat_list = gtk_clist_new(1); gtk_clist_set_selection_mode(GTK_CLIST(stat_list), GTK_SELECTION_BROWSE); gtk_clist_set_column_title(GTK_CLIST(stat_list), 0, gettext("Status page")); gtk_clist_column_titles_show(GTK_CLIST(stat_list)); gtk_clist_set_column_auto_resize(GTK_CLIST(stat_list), 0, TRUE); gtk_widget_show(stat_list); gtk_container_add(GTK_CONTAINER(swin), stat_list); bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); gtk_box_pack_end(GTK_BOX(box), bbox, FALSE, FALSE, 2); gtk_widget_show(bbox); button = guitl_pixmap_button(save_xpm, NULL, gettext("Save ...")); gtk_container_add(GTK_CONTAINER(bbox), button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(SaveDia), NULL); button = guitl_pixmap_button(restart_small_xpm, NULL, gettext("Refresh")); gtk_container_add(GTK_CONTAINER(bbox), button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Refresh), NULL); button = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel")); gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(sstatw), accel_group); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(PopdownW), sstatw); menu = gtk_menu_new(); guitl_menu_attach(menu, sstatw); gtk_widget_realize(menu); gtk_signal_connect(GTK_OBJECT(stat_list), "button_press_event", GTK_SIGNAL_FUNC(list_events), menu); dmi = gtk_menu_item_new_with_label(gettext("Try download")); gaccel_bind_widget("stat/download", "activate", dmi, accel_group, NULL); gtk_menu_append(GTK_MENU(menu), dmi); gtk_widget_show(dmi); gtk_signal_connect(GTK_OBJECT(dmi), "activate", GTK_SIGNAL_FUNC(TryDownload), (gpointer) NULL); } gtk_clist_freeze(GTK_CLIST(stat_list)); gtk_clist_clear(GTK_CLIST(stat_list)); if(stats_fill_spage(NULL, stat_list)) { char *p = gettext("Not available yet"); gtk_clist_append(GTK_CLIST(stat_list), &p); } gtk_clist_thaw(GTK_CLIST(stat_list)); gtk_widget_show(sstatw); if(GTK_WIDGET_REALIZED(sstatw)) gdk_window_raise(sstatw->window); } void stats_clear(void) { if(sstatw) { if(!MT_IS_MAIN_THREAD()) { GDK_THREADS_ENTER(); } gtk_clist_freeze(GTK_CLIST(stat_list)); gtk_clist_clear(GTK_CLIST(stat_list)); gtk_clist_thaw(GTK_CLIST(stat_list)); if(!MT_IS_MAIN_THREAD()) { GDK_THREADS_LEAVE(); } } } #endif pavuk-0.9.35/src/stats.h0000644000175000001440000000104610151374576011763 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _sstats_h_ #define _sstats_h_ extern int stats_fill_spage(const char *, void *); extern void stats_show(void); extern void stats_clear(void); #endif pavuk-0.9.35/src/times.c0000644000175000001440000001500610400623655011732 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include #include "config.h" #include "tools.h" #include "times.h" typedef struct _dayn { char *name; int dayn; } dayn; static dayn dnames[] = { {"Sun", 0}, {"Mon", 1}, {"Tue", 2}, {"Wed", 3}, {"Thu", 4}, {"Fri", 5}, {"Sat", 6}, {"Sunday", 0}, {"Monday", 1}, {"Tuesday", 2}, {"Wednesday", 3}, {"Thursday", 4}, {"Friday", 5}, {"Saturday", 6}, }; static dayn mnames[] = { {"Jan", 0}, {"Feb", 1}, {"Mar", 2}, {"Apr", 3}, {"May", 4}, {"Jun", 5}, {"Jul", 6}, {"Aug", 7}, {"Sep", 8}, {"Oct", 9}, {"Nov", 10}, {"Dec", 11}, {"January", 0}, {"February", 1}, {"March", 2}, {"April", 3}, {"May", 4}, {"Jun", 5}, {"July", 6}, {"August", 7}, {"September", 8}, {"October", 9}, {"November", 10}, {"December", 11}, }; #ifndef HAVE_GMTOFF static long difftm(struct tm *, struct tm *); #endif /**************************/ /* make copy of struct tm */ /**************************/ struct tm *new_tm(struct tm *t) { struct tm *tn; if(!t) return NULL; tn = _malloc(sizeof(struct tm)); memcpy((char *) tn, (char *) t, sizeof(struct tm)); return tn; } /************************/ /* scan GMT time string */ /************************/ time_t scntime(char *timestr) { char *pom = new_string(timestr); int i; char *p; struct tm otm; time_t rv; int ilen; bool_t last = 1; memset((void *) &otm, '\0', sizeof(otm)); otm.tm_isdst = -1; p = pom; p += strspn(p, ", -:"); ilen = strcspn(p, ", -:"); if(*(p + ilen)) *(p + ilen) = '\0'; else last = 0; if(!*p) return 0L; for(i = 0; i < NUM_ELEM(dnames); i++) { if(!strcasecmp(p, dnames[i].name)) { otm.tm_wday = dnames[i].dayn; break; } } if(!(i < NUM_ELEM(dnames))) return 0L; #define NEXT_TOKEN \ p += ilen+last;\ p += strspn(p , ", -:");\ ilen = strcspn(p , ", -:");\ if (*(p+ilen)) *(p+ilen) = '\0';\ else last = 0;\ NEXT_TOKEN; otm.tm_mday = _atoi(p); if(errno == ERANGE) { for(i = 0; i < NUM_ELEM(mnames); i++) { if(!strcasecmp(p, mnames[i].name)) { otm.tm_mon = mnames[i].dayn; break; } } if(!(i < NUM_ELEM(mnames))) return 0L; NEXT_TOKEN; otm.tm_mday = _atoi(p); if(errno == ERANGE) return 0L; NEXT_TOKEN; otm.tm_hour = _atoi(p); if(errno == ERANGE) return 0L; NEXT_TOKEN; otm.tm_min = _atoi(p); if(errno == ERANGE) return 0L; NEXT_TOKEN; otm.tm_sec = _atoi(p); if(errno == ERANGE) return 0L; NEXT_TOKEN; otm.tm_year = _atoi(p); if(errno == ERANGE) return 0L; otm.tm_year = (otm.tm_year > 1900) ? otm.tm_year - 1900 : otm.tm_year; } else { NEXT_TOKEN; for(i = 0; i < NUM_ELEM(mnames); i++) { if(!strcasecmp(p, mnames[i].name)) { otm.tm_mon = mnames[i].dayn; break; } } if(!(i < NUM_ELEM(mnames))) return 0L; NEXT_TOKEN; otm.tm_year = _atoi(p); if(errno == ERANGE) return 0L; otm.tm_year = (otm.tm_year > 1900) ? otm.tm_year - 1900 : otm.tm_year; NEXT_TOKEN; otm.tm_hour = _atoi(p); if(errno == ERANGE) return 0L; NEXT_TOKEN; otm.tm_min = _atoi(p); if(errno == ERANGE) return 0L; NEXT_TOKEN; otm.tm_sec = _atoi(p); if(errno == ERANGE) return 0L; } rv = mktime(&otm); #ifdef HAVE_GMTOFF rv += otm.tm_gmtoff; #else { struct tm *gt, *lt; LOCK_TIME; lt = new_tm(localtime(&rv)); gt = new_tm(gmtime(&rv)); UNLOCK_TIME; rv += difftm(lt, gt); free(lt); free(gt); } #endif free(pom); return rv; } /**********************************************/ /* parse time string in format YYYYMMDDHHmmss */ /**********************************************/ time_t time_ftp_scn(char *timestr) { char pom[10]; struct tm ftm; time_t rv; memset((void *) &ftm, '\0', sizeof(ftm)); ftm.tm_isdst = -1; strncpy(pom, timestr, 4); *(pom + 4) = '\0'; ftm.tm_year = _atoi(pom) - 1900; strncpy(pom, timestr + 4, 2); *(pom + 2) = '\0'; ftm.tm_mon = _atoi(pom) - 1; strncpy(pom, timestr + 6, 2); *(pom + 2) = '\0'; ftm.tm_mday = _atoi(pom); strncpy(pom, timestr + 8, 2); *(pom + 2) = '\0'; ftm.tm_hour = _atoi(pom); strncpy(pom, timestr + 10, 2); *(pom + 2) = '\0'; ftm.tm_min = _atoi(pom); strncpy(pom, timestr + 12, 2); *(pom + 2) = '\0'; ftm.tm_sec = _atoi(pom); rv = mktime(&ftm); #ifdef HAVE_GMTOFF rv += ftm.tm_gmtoff; #else { struct tm *gt, *lt; LOCK_TIME; lt = new_tm(localtime(&rv)); gt = new_tm(gmtime(&rv)); UNLOCK_TIME; rv += difftm(lt, gt); free(lt); free(gt); } #endif return rv; } time_t time_scn_cmd(char *timestr) { time_t t = 0; struct tm ftm; if(sscanf(timestr, "%d.%d.%d.%d:%d", &ftm.tm_year, &ftm.tm_mon, &ftm.tm_mday, &ftm.tm_hour, &ftm.tm_min) == 5) { ftm.tm_year = ftm.tm_year - 1900; ftm.tm_mon -= 1; ftm.tm_isdst = -1; ftm.tm_sec = 0; t = mktime(&ftm); } return t; } #ifndef HAVE_GMTOFF /************************************************************************/ /* this function I steal from gettext-0.10.35/src/xgettext.c */ /* here is copyright */ /* copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.*/ /* Written by Ulrich Drepper , April 1995. */ /************************************************************************/ #define TM_YEAR_ORIGIN 1900 /* Yield A - B, measured in seconds. */ static long difftm(struct tm *a, struct tm *b) { int ay = a->tm_year + (TM_YEAR_ORIGIN - 1); int by = b->tm_year + (TM_YEAR_ORIGIN - 1); /* Some compilers cannot handle this as a single return statement. */ long days = ( /* difference in day of year */ a->tm_yday - b->tm_yday /* + intervening leap days */ + ((ay >> 2) - (by >> 2)) - (ay / 100 - by / 100) + ((ay / 100 >> 2) - (by / 100 >> 2)) /* + difference in years * 365 */ + (long) (ay - by) * 365l); return 60l * (60l * (24l * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec); } #endif pavuk-0.9.35/src/times.h0000644000175000001440000000112510142077741011736 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _times_h_ #define _times_h_ #include extern time_t scntime(char *); extern struct tm *new_tm(struct tm *); extern time_t time_ftp_scn(char *); extern time_t time_scn_cmd(char *); #endif pavuk-0.9.35/src/gui_sched.c0000644000175000001440000001076010151315554012544 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #ifdef GTK_FACE #include #include "schedule.h" #include "icons/cancel.xpm" #include "icons/schedule.xpm" static void Schedule(GtkObject * object, gpointer func_data) { const char *p; cfg.time->tm_hour = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(gui_cfg.hour_label)); cfg.time->tm_min = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(gui_cfg.min_label)); gtk_calendar_get_date(GTK_CALENDAR(gui_cfg.calendar), &cfg.time->tm_year, &cfg.time->tm_mon, &cfg.time->tm_mday); cfg.time->tm_year -= 1900; _free(cfg.sched_cmd); p = gtk_entry_get_text(GTK_ENTRY(gui_cfg.sched_cmd)); if(p && *p) cfg.sched_cmd = tl_strdup(p); cfg.reschedh = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(gui_cfg.resched)); if(!at_schedule()) { gtk_widget_hide(gui_cfg.cfg_sch); return; } xprintf(1, gettext("Error scheduling\n")); gdk_beep(); } void gui_build_scheduler(int popup) { GtkWidget *col, *brow, *button, *sep, *label, *ptab; GtkAccelGroup *accel_group; if(gui_cfg.cfg_sch) { if(popup) { gtk_widget_show_all(gui_cfg.cfg_sch); if(GTK_WIDGET_REALIZED(gui_cfg.cfg_sch)) gdk_window_raise(gui_cfg.cfg_sch->window); } return; } gui_cfg.cfg_sch = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_border_width(GTK_CONTAINER(gui_cfg.cfg_sch), 3); gtk_window_set_title(GTK_WINDOW(gui_cfg.cfg_sch), gettext("Pavuk: Scheduler")); gtk_widget_realize(gui_cfg.cfg_sch); gtk_signal_connect(GTK_OBJECT(gui_cfg.cfg_sch), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.cfg_sch); col = guitl_timesel_new(&gui_cfg.calendar, &gui_cfg.hour_label, &gui_cfg.min_label, &gui_cfg.month_combo, &gui_cfg.year_label); gtk_container_add(GTK_CONTAINER(gui_cfg.cfg_sch), col); gtk_widget_show(col); sep = gtk_hseparator_new(); gtk_widget_show(sep); gtk_box_pack_start(GTK_BOX(col), sep, FALSE, TRUE, 3); ptab = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(col), ptab, FALSE, TRUE, 1); gtk_widget_show(ptab); gui_cfg.sched_cmd = guitl_tab_add_entry(ptab, gettext("Scheduling command: "), 0, 0, FALSE); sep = gtk_hseparator_new(); gtk_widget_show(sep); gtk_box_pack_start(GTK_BOX(col), sep, FALSE, TRUE, 3); brow = gtk_hbox_new(0, 5); gtk_widget_show(brow); gtk_box_pack_start(GTK_BOX(col), brow, FALSE, TRUE, 1); label = gtk_label_new(gettext("Reschedule after ")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(brow), label, TRUE, TRUE, 4); gui_cfg.resched = gtk_spin_button_new( (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 10000.0, 1.0, 5.0, 0.0), 10.0, 0.0); gtk_widget_show(gui_cfg.resched); gtk_box_pack_start(GTK_BOX(brow), gui_cfg.resched, TRUE, TRUE, 4); label = gtk_label_new(gettext(" hours")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(brow), label, TRUE, TRUE, 4); brow = gtk_hbutton_box_new(); gtk_box_pack_end(GTK_BOX(col), brow, FALSE, TRUE, 4); gtk_hbutton_box_set_spacing_default(1); gtk_widget_show(brow); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); sep = gtk_hseparator_new(); gtk_widget_show(sep); gtk_box_pack_end(GTK_BOX(col), sep, FALSE, TRUE, 4); button = guitl_pixmap_button(schedule_xpm, NULL, gettext("OK")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Schedule), (gpointer) NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); button = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel")); accel_group = gtk_accel_group_new(); gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(gui_cfg.cfg_sch), accel_group); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) gui_cfg.cfg_sch); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); if(popup) gtk_widget_show(gui_cfg.cfg_sch); } #endif pavuk-0.9.35/src/config.c0000644000175000001440000022730510565333122012064 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include "config.h" #include "tools.h" #include "ftp.h" #include "http.h" #include "gopher.h" #include "authinfo.h" #include "times.h" #include "html.h" #include "lfname.h" #include "re.h" #include "mopt.h" #include "jstrans.h" #include "tag_pattern.h" static void cfg_version_info(void); static int cfg_load_scenario(const char *); #include "options.h" struct strategie_mapt { strategie id; char *name; char *label; }; static struct strategie_mapt strategie_map[] = { {SSTRAT_DO_SIRKY, "level", gettext_nop("Level order")}, {SSTRAT_DO_SIRKY_I, "leveli", gettext_nop("Level order, inline first")}, {SSTRAT_DO_HLBKY, "pre", gettext_nop("Pre order")}, {SSTRAT_DO_HLBKY_I, "prei", gettext_nop("Pre order, inline first")}, }; static strategie get_strategie_by_str(char *str) { int i; for(i = 0; i < SSTRAT_LAST; i++) { if(!strcasecmp(str, strategie_map[i].name)) return strategie_map[i].id; } return SSTRAT_LAST; } static char *get_strategie_str(strategie id) { return strategie_map[id].name; } char *get_strategie_label(strategie id) { return gettext(strategie_map[id].label); } static const struct { char *name; int id; } _ssl_versions[] = { {"ssl23", 1}, {"ssl2", 2}, {"ssl3", 3}, {"tls1", 4} }; static strategie get_ssl_version_by_str(char *str) { int i; for(i = 0; i < NUM_ELEM(_ssl_versions); i++) { if(!strcasecmp(str, _ssl_versions[i].name)) return _ssl_versions[i].id; } return -1; } static char *get_ssl_version_str(strategie id) { return _ssl_versions[id - 1].name; } /**********************************/ /* show program usage information */ /**********************************/ void usage(void) { int i; cfg.bgmode = FALSE; xprintf(0, gettext("Usage: %s [options] [any number of URLS]\npavuk-%s %s\n"), cfg.prg_path, VERSION, HOSTTYPE); for(i = 0; i < NUM_ELEM(params); i++) { if(params[i].help) xprintf(0, gettext(params[i].help)); } fflush(stdout); exit(PAVUK_EXIT_OK); } void usage_short(void) { xprintf(0, "%s %s %s %s\n", PACKAGE, VERSION, REVISION, HOSTTYPE); xprintf(0, gettext("Type \"%s --help\" for long help\n"), cfg.prg_path); exit(PAVUK_EXIT_CFG_ERR); } static void cfg_version_info(void) { xprintf(0, "%s %s %s %s\n", PACKAGE, VERSION, REVISION, HOSTTYPE); xprintf(0, gettext("Optional features available :\n")); #ifdef DEBUG xprintf(0, gettext(" - Debug mode\n")); #endif #ifdef GETTEXT_NLS xprintf(0, gettext(" - GNU gettext internationalization of messages\n")); #endif #ifdef HAVE_FLOCK xprintf(0, gettext(" - flock() document locking\n")); #endif #ifdef HAVE_FCNTL_LOCK xprintf(0, gettext(" - fcntl() document locking\n")); #endif #ifdef I_FACE #ifdef GTK_FACE xprintf(0, gettext(" - Gtk GUI interface\n")); #endif #ifdef WITH_TREE xprintf(0, gettext(" - URL tree preview\n")); #endif #endif #ifdef USE_SSL xprintf(0, gettext(" - HTTP and FTP over SSL\n")); #if defined(USE_SSL_IMPL_OPENSSL) && defined(OPENSSL) #define __SSLIMP "OpenSSL" #elif defined(USE_SSL_IMPL_OPENSSL) #define __SSLIMP "SSLeay" #elif defined(USE_SSL_IMPL_NSS) #define __SSLIMP "NSS3" #else #define __SSLIMP "unknown" #endif xprintf(0, gettext(" - SSL layer implemented with %s library\n"), __SSLIMP); #endif #ifdef SOCKS xprintf(0, gettext(" - Socks proxy support\n")); #endif #ifdef HAVE_FSTATFS xprintf(0, gettext(" - filesystem free space checking\n")); #endif #ifdef HAVE_REGEX xprintf(0, gettext (" - optional regex patterns in -fnrules and -*rpattern options\n")); #endif #ifdef HAVE_POSIX_REGEX xprintf(0, gettext(" - POSIX regexp\n")); #endif #ifdef HAVE_V8_REGEX xprintf(0, gettext(" - Bell V8 regexp\n")); #endif #ifdef HAVE_BSD_REGEX xprintf(0, gettext(" - BSD regexp\n")); #endif #ifdef HAVE_GNU_REGEX xprintf(0, gettext(" - GNU regexp\n")); #endif #ifdef HAVE_PCRE_REGEX xprintf(0, gettext(" - PCRE regexp\n")); #endif #ifdef HAVE_BDB_18x xprintf(0, gettext(" - support for loading files from Netscape browser cache\n")); #endif #ifdef HAVE_TERMIOS xprintf(0, gettext (" - support for detecting whether pavuk is running as background job\n")); #endif #ifdef HAVE_MT xprintf(0, gettext(" - multithreading support\n")); #endif #ifdef ENABLE_NTLM xprintf(0, gettext(" - NTLM authorization support\n")); #endif #ifdef HAVE_MOZJS xprintf(0, gettext(" - JavaScript bindings\n")); #endif #ifdef HAVE_INET6 xprintf(0, gettext(" - IPv6 support\n")); #endif exit(PAVUK_EXIT_OK); } static int htmltag_set_disabled(char *tagstr, int disable) { int i, j; bool_t tfound, afound; char *tag; char *attrib; char *pom, *strtokbuf; if(!strcasecmp(tagstr, "all")) { for(i = 0; i < html_link_tags_num(); i++) { for(j = 0; html_link_tags[i].attribs[j].attrib; j++) { if(disable) html_link_tags[i].attribs[j].stat |= LINK_DISABLED; else html_link_tags[i].attribs[j].stat &= ~LINK_DISABLED; } } return -1; } pom = tl_strdup(tagstr); tag = strtokc_r(pom, ',', &strtokbuf); attrib = strtokc_r(NULL, ';', &strtokbuf); while(tag) { tfound = FALSE; afound = FALSE; for(i = 0; i < html_link_tags_num(); i++) { if(!strcasecmp(html_link_tags[i].tag, tag)) { tfound = TRUE; for(j = 0; html_link_tags[i].attribs[j].attrib; j++) { if(attrib && *attrib) { if(!strcasecmp(html_link_tags[i].attribs[j].attrib, attrib)) { afound = TRUE; if(disable) html_link_tags[i].attribs[j].stat |= LINK_DISABLED; else html_link_tags[i].attribs[j].stat &= ~LINK_DISABLED; break; } } else { afound = TRUE; if(disable) html_link_tags[i].attribs[j].stat |= LINK_DISABLED; else html_link_tags[i].attribs[j].stat &= ~LINK_DISABLED; } } break; } } if(!(tfound && afound)) { xprintf(0, gettext("HTML tag not supported : %s.%s\n"), tag, attrib ? attrib : "(null)"); } tag = strtokc_r(NULL, ',', &strtokbuf); attrib = strtokc_r(NULL, ';', &strtokbuf); } _free(pom); return -1; } static void cfg_set_to_default(cfg_param_t * cpar) { char **p; int x, j; if(cpar->type & PARAM_UNSUPPORTED) return; if(cpar->type & PARAM_FOREIGN) return; switch (cpar->type) { case PARAM_NUM: *((long *) cpar->val_adr) = (long) cpar->default_val; break; case PARAM_PBOOL: *((bool_t *) cpar->val_adr) = (bool_t) (long) cpar->default_val; break; case PARAM_NBOOL: *((bool_t *) cpar->val_adr) = (bool_t) (long) cpar->default_val; break; case PARAM_PORT_RANGE: *((long *) cpar->val_adr) = (long) cpar->default_val; *((long *) cpar->mval_adr) = (long) cpar->mdefault_val; break; case PARAM_PATH: case PARAM_STR: case PARAM_PASS: _free(*((char **) cpar->val_adr)); *((char **) cpar->val_adr) = (char *) cpar->default_val; break; case PARAM_STRLIST: for(p = *((char ***) cpar->val_adr); p && *p; p++) _free(*p); _free(*(char ***) cpar->val_adr); *((char ***) cpar->val_adr) = (char **) cpar->default_val; if(cpar->mval_adr) *((bool_t *) cpar->mval_adr) = (bool_t) (long) cpar->mdefault_val; break; case PARAM_CONN: _free(*((char **) cpar->val_adr)); *((char **) cpar->val_adr) = (char *) cpar->default_val; if(cpar->mval_adr) *((long *) cpar->mval_adr) = (long) cpar->mdefault_val; break; case PARAM_AUTHSCH: *((long *) cpar->val_adr) = (long) cpar->default_val; break; case PARAM_MODE: *((long *) cpar->val_adr) = (long) cpar->default_val; break; case PARAM_TIME: *((time_t *) cpar->val_adr) = (time_t) 0; break; case PARAM_HTMLTAG: for(x = 0; x < html_link_tags_num(); x++) for(j = 0; html_link_tags[x].attribs[j].attrib; j++) html_link_tags[x].attribs[j].stat &= ~LINK_DISABLED; break; case PARAM_TWO_QSTR: *((char **) cpar->val_adr) = (char *) cpar->default_val; *((char **) cpar->mval_adr) = (char *) cpar->mdefault_val; break; case PARAM_DOUBLE: *((double *) cpar->val_adr) = *(double *) cpar->default_val; break; case PARAM_LFNAME: while(cfg.lfnames) { lfname_free((lfname *) cfg.lfnames->data); cfg.lfnames = dllist_remove_entry(cfg.lfnames, cfg.lfnames); } break; case PARAM_RE: #ifdef HAVE_REGEX { dllist *ptr = *((dllist **) cpar->val_adr); *((dllist **) cpar->val_adr) = NULL; while(ptr) { re_free((re_entry *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } } #endif break; case PARAM_USTRAT: *((strategie *) cpar->val_adr) = (strategie) cpar->default_val; break; case PARAM_SSLVER: *((long *) cpar->val_adr) = (long) cpar->default_val; break; case PARAM_HTTPHDR: { dllist *ptr = *(dllist **) cpar->val_adr; *(dllist **) cpar->val_adr = NULL; while(ptr) { httphdr_free((httphdr *)ptr->data); ptr = dllist_remove_entry(ptr, ptr); } } break; case PARAM_DEBUGL: *((long *) cpar->val_adr) = (long) cpar->default_val; break; case PARAM_REQUEST: { dllist *ptr = *(dllist **) cpar->val_adr; *(dllist **) cpar->val_adr = NULL; while(ptr) { url_info_free((url_info *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } } break; case PARAM_TRANSPARENT: { if(cpar->val_adr) { http_proxy *pr = *((http_proxy **) cpar->val_adr); if(pr) http_proxy_free(pr); } } break; case PARAM_PROXY: { dllist *ptr = *((dllist **) cpar->val_adr); *((dllist **) cpar->val_adr) = NULL; while(ptr) { http_proxy *pr = (http_proxy *) ptr->data; http_proxy_unref(pr); ptr = dllist_remove_entry(ptr, ptr); } } break; case PARAM_FUNC: break; case PARAM_JSTRANS: #ifdef HAVE_REGEX while(cfg.js_transform) { js_transform_free((js_transform_t *) cfg.js_transform->data); cfg.js_transform = dllist_remove_entry(cfg.js_transform, cfg.js_transform); } #endif break; case PARAM_NUMLIST: { dllist *ptr = *((dllist **) cpar->val_adr); *((dllist **) cpar->val_adr) = NULL; while(ptr) ptr = dllist_remove_entry(ptr, ptr); if(cpar->mval_adr) *((bool_t *) cpar->mval_adr) = (bool_t) (long) cpar->mdefault_val; } break; case PARAM_FTPHS: { dllist *ptr = *((dllist **) cpar->val_adr); *((dllist **) cpar->val_adr) = NULL; for(; ptr; ptr = dllist_remove_entry(ptr, ptr)) ftp_handshake_info_free((ftp_handshake_info *)ptr->data); } break; case PARAM_TAGPAT: { dllist *ptr = *((dllist **) cpar->val_adr); *((dllist **) cpar->val_adr) = NULL; for(; ptr; ptr = dllist_remove_entry(ptr, ptr)) tag_pattern_free((tag_pattern_t *)ptr->data); } break; } } void cfg_set_all_to_default(void) { int i; for(i = 0; i < NUM_ELEM(params); i++) cfg_set_to_default(&(params[i])); } void cfg_setup_default(void) { int i, x, j; for(i = 0; i < NUM_ELEM(params); i++) { if(params[i].type & PARAM_UNSUPPORTED) continue; if(params[i].type & PARAM_FOREIGN) continue; switch (params[i].type) { case PARAM_NUM: *((long *) params[i].val_adr) = (long) params[i].default_val; break; case PARAM_PBOOL: *((bool_t *) params[i].val_adr) = (bool_t) (long) params[i].default_val; break; case PARAM_NBOOL: *((bool_t *) params[i].val_adr) = (bool_t) (long) params[i].default_val; break; case PARAM_PORT_RANGE: *((long *) params[i].val_adr) = (long) params[i].default_val; *((long *) params[i].mval_adr) = (long) params[i].mdefault_val; break; case PARAM_PATH: case PARAM_STR: case PARAM_PASS: *((char **) params[i].val_adr) = (char *) params[i].default_val; break; case PARAM_STRLIST: *((char ***) params[i].val_adr) = (char **) params[i].default_val; if(params[i].mval_adr) *((bool_t *) params[i].mval_adr) = (bool_t) (long) params[i].mdefault_val; break; case PARAM_CONN: *((char **) params[i].val_adr) = (char *) params[i].default_val; if(params[i].mval_adr) *((long *) params[i].mval_adr) = (long) params[i].mdefault_val; break; case PARAM_AUTHSCH: *((long *) params[i].val_adr) = (long) params[i].default_val; break; case PARAM_MODE: *((long *) params[i].val_adr) = (long) params[i].default_val; break; case PARAM_TIME: *((time_t *) params[i].val_adr) = (time_t) 0; break; case PARAM_HTMLTAG: for(x = 0; x < html_link_tags_num(); x++) for(j = 0; html_link_tags[x].attribs[j].attrib; j++) html_link_tags[x].attribs[j].stat &= ~LINK_DISABLED; break; case PARAM_TWO_QSTR: *((char **) params[i].val_adr) = (char *) params[i].default_val; *((char **) params[i].mval_adr) = (char *) params[i].mdefault_val; break; case PARAM_DOUBLE: *((double *) params[i].val_adr) = *(double *) params[i].default_val; break; case PARAM_LFNAME: cfg.lfnames = NULL; break; case PARAM_RE: #ifdef HAVE_REGEX *((dllist **) params[i].val_adr) = NULL; #endif break; case PARAM_USTRAT: *((strategie *) params[i].val_adr) = (strategie) params[i].default_val; break; case PARAM_SSLVER: *((long *) params[i].val_adr) = (long) params[i].default_val; break; case PARAM_HTTPHDR: *((dllist **) params[i].val_adr) = NULL; break; case PARAM_DEBUGL: *((long *) params[i].val_adr) = (long) params[i].default_val; break; case PARAM_REQUEST: *((dllist **) params[i].val_adr) = NULL; break; case PARAM_TRANSPARENT: *((http_proxy **) params[i].val_adr) = NULL; break; case PARAM_PROXY: *((dllist **) params[i].val_adr) = NULL; break; case PARAM_FUNC: break; case PARAM_JSTRANS: #ifdef HAVE_REGEX cfg.js_transform = NULL; #endif break; case PARAM_NUMLIST: *((dllist **) params[i].val_adr) = (dllist *) params[i].default_val; if(params[i].mval_adr) *((bool_t *) params[i].mval_adr) = (bool_t) (long) params[i].mdefault_val; break; case PARAM_FTPHS: *((dllist **) params[i].val_adr) = (dllist *) params[i].default_val; break; case PARAM_TAGPAT: *((dllist **) params[i].val_adr) = (dllist *) params[i].default_val; break; } } } int cfg_get_num_params(cfg_param_t * cpar) { long num; static const struct { par_type_t type; int num_params; } tab[] = { {PARAM_NUM, 1}, {PARAM_PBOOL, 0}, {PARAM_NBOOL, 0}, {PARAM_STR, 1}, {PARAM_PASS, 1}, {PARAM_STRLIST, 1}, {PARAM_CONN, 1}, {PARAM_AUTHSCH, 1}, {PARAM_MODE, 1}, {PARAM_PATH, 1}, {PARAM_TIME, 1}, {PARAM_HTMLTAG, 1}, {PARAM_TWO_QSTR, 2}, {PARAM_DOUBLE, 1}, {PARAM_LFNAME, 3}, {PARAM_RE, 1}, {PARAM_USTRAT, 1}, {PARAM_SSLVER, 1}, {PARAM_HTTPHDR, 1}, {PARAM_DEBUGL, 1}, {PARAM_REQUEST, 1}, {PARAM_PROXY, 1}, {PARAM_TRANSPARENT, 1}, {PARAM_FUNC, 0}, {PARAM_JSTRANS, 4}, {PARAM_NUMLIST, 1}, {PARAM_FTPHS, 2}, {PARAM_TAGPAT, 3}, {PARAM_PORT_RANGE, 1} }; num = tab[cpar->type].num_params; if(cpar->type == PARAM_FUNC) num = (long) cpar->default_val; return num; } static char *cfg_get_option_string(cfg_param_t * param, int type) { switch (type) { case MOPT_OPT_SHORT: return param->short_cmd; case MOPT_OPT_LONG: return param->long_cmd; case MOPT_OPT_COMPAT: return param->long_cmd; default: return ""; } } void cfg_setup_cmdln(int argc, char **argv) { int nr = 0; double dnr = 0.0; char *p = NULL; char **pl = NULL; mopt_t mopt; cfg_param_t *cpar; int moptrv; mopt_init(&mopt, NUM_ELEM(params), params, argc, argv); for(;;) { moptrv = mopt_get_next_param(&mopt, &cpar); if(moptrv == MOPT_END) break; if(moptrv == MOPT_ERR) { xprintf(0, gettext("Error parsing commandline\n")); usage_short(); break; } if(moptrv == MOPT_MISSINGP) { xprintf(0, gettext("Not enough number of parameters for \"-%s\" option\n"), cfg_get_option_string(cpar, mopt.option_type)); usage_short(); break; } if(moptrv == MOPT_UNKNOWN) { xprintf(0, gettext("Unknown option %s\n"), argv[mopt.current]); usage_short(); break; } if(moptrv == MOPT_BAD) { xprintf(0, gettext("Wrong format of option %s\n"), argv[mopt.current]); usage_short(); break; } if(moptrv == MOPT_OK) { if(cpar->type & PARAM_UNSUPPORTED) { xprintf(0, gettext ("WARNING: option \"-%s\" not supported in current configuration!\n"), cfg_get_option_string(cpar, mopt.option_type)); continue; } if(cpar->type & PARAM_FOREIGN) continue; switch (cpar->type) { case PARAM_NUM: nr = _atoi(mopt.args[0]); if(errno == ERANGE) { xprintf(0, gettext("Please specify number with parameter \"-%s\"\n"), cfg_get_option_string(cpar, mopt.option_type)); usage_short(); } *((int *) cpar->val_adr) = nr; break; case PARAM_PBOOL: *((bool_t *) cpar->val_adr) = TRUE; break; case PARAM_NBOOL: *((bool_t *) cpar->val_adr) = FALSE; break; case PARAM_PORT_RANGE: if(sscanf(mopt.args[0], "%ld:%ld", (long *) cpar->val_adr, (long *) cpar->mval_adr) != 2 || *((long *) cpar->val_adr) <= 1023 || *((long *) cpar->mval_adr) > 65535 || *((long *) cpar->val_adr) >= *((long *) cpar->mval_adr)) { xprintf(0, gettext("Invalid port range \"%s\"\n"), mopt.args[0]); usage_short(); } break; case PARAM_PASS: case PARAM_STR: cfg_set_to_default(cpar); if(mopt.args[0][0]) p = tl_strdup(mopt.args[0]); else p = NULL; *((char **) cpar->val_adr) = p; if(cpar->type == PARAM_PASS) { if(mopt.args[0][0]) { memset(mopt.args[0], ' ', strlen(mopt.args[0])); strcpy(mopt.args[0], "*"); } } break; case PARAM_PATH: cfg_set_to_default(cpar); if(mopt.args[0][0]) { #ifdef __CYGWIN__ p = cvt_win32_to_unix_path(mopt.args[0]); #else p = get_abs_file_path_oss(mopt.args[0]); #endif } *((char **) cpar->val_adr) = p; break; case PARAM_STRLIST: cfg_set_to_default(cpar); pl = tl_str_split(mopt.args[0], ","); if(cpar->mval_adr) *((bool_t *) cpar->mval_adr) = (bool_t) (long) cpar->mdefault_val; *((char ***) cpar->val_adr) = pl; break; case PARAM_CONN: cfg_set_to_default(cpar); if(mopt.args[0][0]) { p = strchr(mopt.args[0], ':'); if(p) { nr = _atoi(p + 1); if(errno == ERANGE) { struct servent *se; if((se = getservbyname(p + 1, "tcp"))) { nr = ntohs(se->s_port); } else { xprintf(0, gettext("Unknown port \"%s\"\n"), p + 1); } } if(cpar->mval_adr) *((int *) cpar->mval_adr) = (int) nr; } } else p = NULL; *((char **) cpar->val_adr) = p ? tl_strndup(mopt.args[0], p - mopt.args[0]) : tl_strdup(mopt.args[0]); break; case PARAM_AUTHSCH: nr = authinfo_get_type(mopt.args[0]); if(nr == HTTP_AUTH_NONE) { xprintf(0, gettext("Bad auth scheme \"%s\"\n"), mopt.args[0]); usage_short(); } else *((int *) cpar->val_adr) = nr; break; case PARAM_MODE: cfg.mode = mode_get_by_str(mopt.args[0]); if(cfg.mode == MODE_UNKNOWN) { xprintf(0, gettext("Unknow operation mode \"%s\"\n"), mopt.args[0]); usage_short(); } break; case PARAM_TIME: *((time_t *) cpar->val_adr) = time_scn_cmd(mopt.args[0]); break; case PARAM_HTMLTAG: htmltag_set_disabled(mopt.args[0], (long) cpar->default_val); break; case PARAM_TWO_QSTR: cfg_set_to_default(cpar); p = tl_strdup(mopt.args[0]); *((char **) cpar->val_adr) = p; p = tl_strdup(mopt.args[1]); *((char **) cpar->mval_adr) = p; break; case PARAM_DOUBLE: dnr = _atof(mopt.args[0]); if(errno == ERANGE) { xprintf(0, gettext ("Please specify floating number with parameter \"-%s\"\n"), cfg_get_option_string(cpar, mopt.option_type)); usage_short(); } *((double *) cpar->val_adr) = dnr; break; case PARAM_LFNAME: { lfname_type t; lfname *lfnm; if(!strcasecmp(mopt.args[0], "F")) t = LFNAME_FNMATCH; #ifdef HAVE_REGEX else if(!strcasecmp(mopt.args[0], "R")) t = LFNAME_REGEX; #endif else { t = LFNAME_UNKNOWN; #ifdef HAVE_REGEX #define __CONDITIONS "F or R" #else #define __CONDITIONS "F" #endif xprintf(0, gettext("Please specify proper condition type for -%s (%s)\n"), cfg_get_option_string(cpar, mopt.option_type), __CONDITIONS); #undef __CONDITIONS usage_short(); } lfnm = lfname_new(t, mopt.args[1], mopt.args[2]); if(!lfnm) usage_short(); cfg.lfnames = dllist_append(cfg.lfnames, (dllist_t) lfnm); } break; case PARAM_RE: #ifdef HAVE_REGEX { re_entry *ree = NULL; if(!(ree = re_make(mopt.args[0]))) { xprintf(0, gettext("Please specify valid RE with parameter \"-%s\"\n"), cfg_get_option_string(cpar, mopt.option_type)); usage_short(); } *((dllist **) cpar->val_adr) = dllist_append(*((dllist **) cpar->val_adr), (dllist_t) ree); } #endif break; case PARAM_USTRAT: *(strategie *) cpar->val_adr = get_strategie_by_str(mopt.args[0]); if(*(strategie *) cpar->val_adr == SSTRAT_LAST) { xprintf(0, gettext("Unknown URL scheduling strategy - \"%s\"\n"), mopt.args[0]); usage_short(); } break; case PARAM_SSLVER: *(int *) cpar->val_adr = get_ssl_version_by_str(mopt.args[0]); if(*(int *) cpar->val_adr == -1) { xprintf(0, gettext("Unknown SSL version - \"%s\"\n"), mopt.args[0]); usage_short(); } break; case PARAM_HTTPHDR: { httphdr *hr = httphdr_parse(mopt.args[0]); if(!hr) { xprintf(0, gettext("Invalid additional HTTP header - \"%s\"\n"), mopt.args[0]); usage_short(); } *((dllist **) cpar->val_adr) = dllist_append(*((dllist **) cpar->val_adr), (dllist_t) hr); } break; case PARAM_DEBUGL: #ifdef DEBUG { int dl = debug_level_parse(mopt.args[0]); if(dl == -1) { usage_short(); } *((int *) cpar->val_adr) = dl; } #endif break; case PARAM_REQUEST: { url_info *ui = url_info_parse(mopt.args[0]); if(!ui) { xprintf(0, gettext("Invalid request specification - \"%s\"\n"), mopt.args[0]); usage_short(); } *((dllist **) cpar->val_adr) = dllist_append(*((dllist **) cpar->val_adr), (dllist_t) ui); } break; case PARAM_TRANSPARENT: if(mopt.args[0][0]) { http_proxy *pr = http_proxy_parse(mopt.args[0]); if(!pr) usage_short(); else *((http_proxy **) cpar->val_adr) = pr; } else { cfg_set_to_default(cpar); } break; case PARAM_PROXY: if(mopt.args[0][0]) { http_proxy *pr = http_proxy_parse(mopt.args[0]); if(!pr) usage_short(); else *((dllist **) cpar->val_adr) = dllist_append(*((dllist **) cpar->val_adr), (dllist_t) pr); } else { cfg_set_to_default(cpar); } break; case PARAM_FUNC: { int (*_cfg_func) (char *, char *, char *, char *); _cfg_func = cpar->val_adr; if(_cfg_func) { if(_cfg_func(mopt.args[0], mopt.args[1], mopt.args[2], mopt.args[3])) { usage_short(); } } } break; case PARAM_JSTRANS: #ifdef HAVE_REGEX { js_transform_t *jt; jt = js_transform_new(mopt.args[0], mopt.args[1], mopt.args[2], mopt.args[3], (long) cpar->mdefault_val); if(!jt) { xprintf(0, gettext("Invalid parameters for \"-%s\" option\n"), cfg_get_option_string(cpar, mopt.option_type)); usage_short(); } else { cfg.js_transform = dllist_append(cfg.js_transform, (dllist_t) jt); } } #endif break; case PARAM_NUMLIST: { dllist *ptr = tl_numlist_split(mopt.args[0], ","); if(!ptr && mopt.args[0][0]) { xprintf(0, gettext("Invalid number list \"%s\" for option \"-%s\"\n"), mopt.args[0], cfg_get_option_string(cpar, mopt.option_type)); usage_short(); } cfg_set_to_default(cpar); if(cpar->mval_adr) *((bool_t *) cpar->mval_adr) = (bool_t) (long) cpar->mdefault_val; *((dllist **) cpar->val_adr) = ptr; } break; case PARAM_FTPHS: { ftp_handshake_info *fhi; fhi = ftp_handshake_info_parse(mopt.args[0], mopt.args[1]); if(!fhi) { xprintf(0, gettext ("Invalid FTP login handshake string \"%s\" for option \"-%s\"\n"), mopt.args[1], cfg_get_option_string(cpar, mopt.option_type)); usage_short(); } *((dllist **) cpar->val_adr) = dllist_append(*((dllist **) cpar->val_adr), (dllist_t) fhi); } break; case PARAM_TAGPAT: { tag_pattern_t *tp; tp = tag_pattern_new((long) cpar->mdefault_val, mopt.args[0], mopt.args[1], mopt.args[2]); if(!tp) usage_short(); *((dllist **) cpar->val_adr) = dllist_append(*((dllist **) cpar->val_adr), (dllist_t) tp); } break; } } if(moptrv == MOPT_PARAM) { url_info *ui; ui = url_info_new(mopt.args[0]); cfg.request = dllist_append(cfg.request, (dllist_t) ui); cfg.total_cnt++; } } mopt_destroy(&mopt); } static int cfg_load_fd(bufio * fd) { int i; bool_t found; int nr; double dnr; char *p; char lnbuf[4096]; char *lns; pavuk_mode temp_mode; int rv = 0; while(bufio_readln(fd, lnbuf, sizeof(lnbuf)) > 0) { strip_nl(lnbuf); for(lns = lnbuf; *lns && tl_ascii_isspace(*lns); lns++); if(*lns == '#' || !*lns) continue; found = FALSE; for(i = 0; i < NUM_ELEM(params); i++) { if(!params[i].par_entry) continue; if(!strncasecmp(lns, params[i].par_entry, strlen(params[i].par_entry))) { if(params[i].type & PARAM_UNSUPPORTED) { xprintf(0, gettext ("WARNING: option \"-%s\" not supported in current configuration!\n"), params[i].par_entry); continue; } if(params[i].type & PARAM_FOREIGN) continue; lns += strlen(params[i].par_entry); for(; *lns && tl_ascii_isspace(*lns); lns++); for(p = lns + strlen(lns) - 1; p >= lns && tl_ascii_isspace(*p); p--) *p = '\0'; if(!*lns) { cfg_set_to_default(&(params[i])); continue; } found = TRUE; switch (params[i].type) { case PARAM_NUM: nr = _atoi(lns); if(errno == ERANGE) { xprintf(0, gettext("Please specify number \"%s\"\n"), params[i].par_entry); rv = 1; } else *((int *) params[i].val_adr) = nr; break; case PARAM_PBOOL: case PARAM_NBOOL: if(!strcasecmp(lns, "false")) { *((bool_t *) params[i].val_adr) = FALSE; } else if(!strcasecmp(lns, "true")) { *((bool_t *) params[i].val_adr) = TRUE; } else { xprintf(0, gettext("Only \"true\" & \"false\" is allowed : \"%s\"\n"), lns); rv = 1; } break; case PARAM_PORT_RANGE: if(sscanf(lns, "%ld:%ld", (long *) params[i].val_adr, (long *) params[i].mval_adr) != 2 || *((long *) params[i].val_adr) <= 1023 || *((long *) params[i].mval_adr) > 65535 || *((long *) params[i].val_adr) >= *((long *) params[i].mval_adr)) { xprintf(0, gettext("Invalid port range \"%s\"\n"), lns); rv = 1; } break; case PARAM_STR: case PARAM_PASS: cfg_set_to_default(¶ms[i]); *((char **) params[i].val_adr) = *lns ? tl_strdup(lns) : NULL; break; case PARAM_PATH: cfg_set_to_default(¶ms[i]); #ifdef __CYGWIN__ *((char **) params[i].val_adr) = *lns ? cvt_win32_to_unix_path(lns) : NULL; #else *((char **) params[i].val_adr) = *lns ? get_abs_file_path_oss(lns) : NULL; #endif break; case PARAM_STRLIST: cfg_set_to_default(¶ms[i]); if(params[i].mval_adr) *((bool_t *) params[i].mval_adr) = (bool_t) (long) params[i].mdefault_val; if(*lns) *((char ***) params[i].val_adr) = tl_str_split(lns, ","); break; case PARAM_CONN: cfg_set_to_default(¶ms[i]); p = strchr(lns, ':'); if(p) { nr = _atoi(p + 1); if(errno == ERANGE) { struct servent *se; if((se = getservbyname(p + 1, "tcp"))) { nr = ntohs(se->s_port); } else { xprintf(0, gettext("Unknown port \"%s\"\n"), p + 1); rv = 1; } } if(params[i].mval_adr) *((int *) params[i].mval_adr) = (int) nr; } *((char **) params[i].val_adr) = p ? tl_strndup(lns, p - lns) : tl_strdup(lns); break; case PARAM_AUTHSCH: nr = authinfo_get_type(lns); if(nr == HTTP_AUTH_NONE) { xprintf(0, gettext("Bad auth scheme \"%s\"\n"), lns); rv = 1; } else *((int *) params[i].val_adr) = nr; break; case PARAM_MODE: temp_mode = mode_get_by_str(lns); if(temp_mode == MODE_UNKNOWN) { xprintf(0, gettext("Unknow operation mode \"%s\"\n"), lns); rv = 1; } else *((pavuk_mode *) params[i].val_adr) = temp_mode; break; case PARAM_TIME: { time_t ttm = time_scn_cmd(lns); if(!params[i].val_adr) { xprintf(0, gettext("Bad time parameter \"%s\"\n"), lns); rv = 1; } else *(time_t *) params[i].val_adr = ttm; } break; case PARAM_HTMLTAG: htmltag_set_disabled(lns, (long) params[i].default_val); break; case PARAM_TWO_QSTR: cfg_set_to_default(¶ms[i]); if(lns && *lns) { char *xp = tl_strdup(lns); *(char **) params[i].val_adr = tl_strdup(get_1qstr(xp)); *(char **) params[i].mval_adr = tl_strdup(get_1qstr(NULL)); _free(xp); } else { *(char **) params[i].val_adr = NULL; *(char **) params[i].mval_adr = NULL; } break; case PARAM_DOUBLE: dnr = _atof(lns); if(errno == ERANGE) { xprintf(0, gettext("Please specify floating number \"%s\"\n"), params[i].par_entry); rv = 1; } else *(double *) params[i].val_adr = dnr; break; case PARAM_LFNAME: { char *ps1 = tl_strdup(get_1qstr(lns)); char *ps2 = tl_strdup(get_1qstr(NULL)); char *ps3 = tl_strdup(get_1qstr(NULL)); lfname_type t; lfname *lfnm; if(!ps1 || !ps2 || !ps3) { t = LFNAME_UNKNOWN; xprintf(0, gettext("Please specify proper arguments for %s\n"), params[i].par_entry); rv = 1; } else if(!strcasecmp(ps1, "F")) t = LFNAME_FNMATCH; #ifdef HAVE_REGEX else if(!strcasecmp(ps1, "R")) t = LFNAME_REGEX; #endif else { t = LFNAME_UNKNOWN; xprintf(0, gettext("Please specify proper condition type for %s (%s)\n"), params[i].par_entry, #ifdef HAVE_REGEX "F or R" #else "F" #endif ); rv = 1; } if(t != LFNAME_UNKNOWN) { lfnm = lfname_new(t, ps2, ps3); if(lfnm) cfg.lfnames = dllist_append(cfg.lfnames, (dllist_t) lfnm); else rv = 1; } _free(ps1); _free(ps2); _free(ps3); } break; case PARAM_RE: #ifdef HAVE_REGEX { re_entry *ree; if(!(ree = re_make(lns))) { xprintf(0, gettext("Please specify valid RE \"%s\"\n"), params[i].par_entry); rv = 1; } else *(dllist **) params[i].val_adr = dllist_append(*((dllist **) params[i].val_adr), (dllist_t) ree); } #endif break; case PARAM_USTRAT: { strategie strtg = get_strategie_by_str(lns); if(strtg == SSTRAT_LAST) { xprintf(0, gettext("Unknown URL scheduling strategy - \"%s\"\n"), lns); rv = 1; } else *(strategie *) params[i].val_adr = strtg; } break; case PARAM_SSLVER: { int sslv = get_ssl_version_by_str(lns); if(sslv == -1) { xprintf(0, gettext("Unknown SSL version - \"%s\"\n"), lns); rv = 1; } else *(int *) params[i].val_adr = sslv; } break; case PARAM_HTTPHDR: { httphdr *hr = httphdr_parse(lns); if(!hr) { xprintf(0, gettext("Invalid additional HTTP header - \"%s\"\n"), lns); rv = 1; } else *((dllist **) params[i].val_adr) = dllist_append(*((dllist **) params[i].val_adr), (dllist_t) hr); } break; case PARAM_DEBUGL: #ifdef DEBUG { int dl = debug_level_parse(lns); if(dl != -1) *((int *) params[i].val_adr) = dl; else rv = 1; } #endif break; case PARAM_REQUEST: { url_info *ui = url_info_parse(lns); if(!ui) { xprintf(0, gettext("Invalid request specification - \"%s\"\n"), lns); rv = 1; } else *((dllist **) params[i].val_adr) = dllist_append(*((dllist **) params[i].val_adr), (dllist_t) ui); } break; case PARAM_TRANSPARENT: if(lns) { http_proxy *pr = http_proxy_parse(lns); if(pr) *((http_proxy **) params[i].val_adr) = pr; else rv = 1; } break; case PARAM_PROXY: if(lns) { http_proxy *pr = http_proxy_parse(lns); if(pr) *((dllist **) params[i].val_adr) = dllist_append(*((dllist **) params[i].val_adr), (dllist_t) pr); else rv = 1; } break; case PARAM_FUNC: break; case PARAM_JSTRANS: #ifdef HAVE_REGEX { char *ps1 = tl_strdup(get_1qstr(lns)); char *ps2 = tl_strdup(get_1qstr(NULL)); char *ps3 = tl_strdup(get_1qstr(NULL)); char *ps4 = tl_strdup(get_1qstr(NULL)); js_transform_t *jt; jt = js_transform_new(ps1, ps2, ps3, ps4, (long) params[i].mdefault_val); if(!jt) { xprintf(0, gettext("Invalid js_transform specification - \"%s\"\n"), lns); rv = 1; } else cfg.js_transform = dllist_append(cfg.js_transform, (dllist_t) jt); _free(ps1); _free(ps2); _free(ps3); _free(ps4); } #endif break; case PARAM_NUMLIST: cfg_set_to_default(¶ms[i]); if(params[i].mval_adr) *((bool_t *) params[i].mval_adr) = (bool_t) (long) params[i].mdefault_val; if(*lns) *((dllist **) params[i].val_adr) = tl_numlist_split(lns, ","); if(*lns && !*((dllist **) params[i].val_adr)) { xprintf(0, gettext("Invalid number list specification - \"%s\"\n"), lns); rv = 1; } break; case PARAM_FTPHS: { char *ps1 = tl_strdup(get_1qstr(lns)); char *ps2 = tl_strdup(get_1qstr(NULL)); ftp_handshake_info *fhi = NULL; if(ps1 && ps2) fhi = ftp_handshake_info_parse(ps1, ps2); if(!fhi) { xprintf(0, gettext("Invalid FTP login handshake string \"%s\".\n"), lns); rv = 1; } *((dllist **) params[i].val_adr) = dllist_append(*((dllist **) params[i].val_adr), (dllist_t) fhi); _free(ps1); _free(ps2); } break; case PARAM_TAGPAT: { char *ps1 = tl_strdup(get_1qstr(lns)); char *ps2 = tl_strdup(get_1qstr(NULL)); char *ps3 = tl_strdup(get_1qstr(NULL)); tag_pattern_t *tp = NULL; if(ps1 && ps2 && ps3) { tp = tag_pattern_new((long) params[i].mdefault_val, ps1, ps2, ps3); } if(!tp) rv = 1; *((dllist **) params[i].val_adr) = dllist_append(*((dllist **) params[i].val_adr), (dllist_t) tp); _free(ps1); _free(ps2); _free(ps3); } break; } } } if(!found && !strncasecmp(lns, "URL:", 4)) { url_info *ui; lns += 4; for(; *lns && tl_ascii_isspace(*lns); lns++); for(p = lns + strlen(lns); *p && tl_ascii_isspace(*p); p--) *p = '\0'; if(!*lns) continue; ui = url_info_new(lns); cfg.request = dllist_append(cfg.request, (dllist_t) ui); cfg.total_cnt++; } else if(!found) { xprintf(0, gettext("Unable to parse \"%s\"\n"), lns); rv = 1; } } return rv; } int cfg_load(const char *filename) { int rv; bufio *fd; if(!(fd = bufio_open(filename, O_BINARY | O_RDONLY))) { xperror(filename); return -1; } rv = cfg_load_fd(fd); bufio_close(fd); return rv; } static int cfg_load_scenario(const char *filename) { char *fn; int rv; _free(cfg.scenario); if(strchr(filename, '/') || !cfg.scndir) fn = tl_strdup(filename); else fn = tl_str_concat(tl_strdup(cfg.scndir), "/", filename, NULL); if((rv = cfg_load(fn))) { xprintf(0, gettext("ERROR: Scenario loading failed (%s)\n"), fn); exit(PAVUK_EXIT_CFG_ERR); } cfg.scenario = fn; return rv; } void cfg_load_setup(void) { char pom[PATH_MAX]; char *p; #ifdef DEFAULTRC if(!access(DEFAULTRC, R_OK)) cfg_load(DEFAULTRC); #endif p = getenv("PAVUKRC_FILE"); if(!p) { snprintf(pom, sizeof(pom), "%s/%s", cfg.path_to_home, ".pavukrc"); p = pom; } if(!access(p, R_OK)) cfg_load(p); } static int cfg_dump_fd(int fd) { int i, j; char pom[8192]; char pom2[20]; char **pl; if(cfg.request) { dllist *dptr; for(dptr = cfg.request; dptr; dptr = dptr->next) { url_info *ui = (url_info *) dptr->data; if(ui->type == URLI_NORMAL && !ui->localname) { write(fd, "URL: ", 5); write(fd, ui->urlstr, strlen(ui->urlstr)); write(fd, "\n", 1); } } } for(i = 0; i < NUM_ELEM(params); i++) { if(params[i].type & PARAM_UNSUPPORTED) continue; if(params[i].type & PARAM_FOREIGN) continue; if(!params[i].par_entry) continue; switch (params[i].type) { case PARAM_NUM: snprintf(pom, sizeof(pom), "%s %ld\n", params[i].par_entry, *((long *) params[i].val_adr)); write(fd, pom, strlen(pom)); break; case PARAM_NBOOL: case PARAM_PBOOL: if(*((bool_t *) params[i].val_adr)) snprintf(pom, sizeof(pom), "%s true\n", params[i].par_entry); else snprintf(pom, sizeof(pom), "%s false\n", params[i].par_entry); write(fd, pom, strlen(pom)); break; case PARAM_PORT_RANGE: if(*((long *) params[i].val_adr) >= 0) { snprintf(pom, sizeof(pom), "%s %ld:%ld\n", params[i].par_entry, *((long *) params[i].val_adr), *((long *) params[i].mval_adr)); write(fd, pom, strlen(pom)); } break; case PARAM_PATH: case PARAM_STR: case PARAM_PASS: if(*((char **) params[i].val_adr)) { snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, *((char **) params[i].val_adr)); write(fd, pom, strlen(pom)); } break; case PARAM_STRLIST: if(!params[i].mval_adr || (params[i].mval_adr && (*((bool_t *) params[i].mval_adr) == (bool_t) (long) params[i].mdefault_val))) { pl = *((char ***) params[i].val_adr); if(pl && pl[0]) { snprintf(pom, sizeof(pom), "%s %s", params[i].par_entry, pl[0]); write(fd, pom, strlen(pom)); j = 1; while(pl[j]) { write(fd, ",", 1); write(fd, pl[j], strlen(pl[j])); j++; } write(fd, "\n", 1); } } break; case PARAM_CONN: if(*((char **) params[i].val_adr)) { snprintf(pom, sizeof(pom), "%s %s:%d\n", params[i].par_entry, *((char **) params[i].val_adr), *((int *) params[i].mval_adr)); write(fd, pom, strlen(pom)); } break; case PARAM_AUTHSCH: snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, http_auths[*((long *) params[i].val_adr)].name); write(fd, pom, strlen(pom)); break; case PARAM_MODE: snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, mode_get_str(cfg.mode)); write(fd, pom, strlen(pom)); break; case PARAM_TIME: if(*((time_t *) params[i].val_adr)) { LOCK_TIME; strftime(pom2, sizeof(pom2), "%Y.%m.%d.%H:%M", localtime((time_t *) params[i].val_adr)); UNLOCK_TIME; snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, pom2); write(fd, pom, strlen(pom)); } break; case PARAM_HTMLTAG: { int x, y; bool_t first = TRUE; snprintf(pom, sizeof(pom), "%s ", params[i].par_entry); for(x = 0; x < html_link_tags_num(); x++) { for(y = 0; html_link_tags[x].attribs[y].attrib; y++) { if(!(html_link_tags[x].attribs[y].stat & LINK_DISABLED) == !(params[i].default_val)) { if(!first) { strncat(pom, ";", sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; } strncat(pom, html_link_tags[x].tag, sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; strncat(pom, ",", sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; strncat(pom, html_link_tags[x].attribs[y].attrib, sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; first = FALSE; } } } strncat(pom, "\n", sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; if(!first) write(fd, pom, strlen(pom)); } break; case PARAM_TWO_QSTR: if(*((char **) params[i].val_adr)) { char *p1, *p2; p1 = escape_str(*((char **) params[i].val_adr), "\\\""); p2 = escape_str(*((char **) params[i].mval_adr), "\\\""); snprintf(pom, sizeof(pom), "%s \"%s\" \"%s\"\n", params[i].par_entry, p1, p2); _free(p1); _free(p2); write(fd, pom, strlen(pom)); } break; case PARAM_DOUBLE: snprintf(pom, sizeof(pom), "%s %.3f\n", params[i].par_entry, *((double *) params[i].val_adr)); write(fd, pom, strlen(pom)); break; case PARAM_LFNAME: { dllist *pdl = cfg.lfnames; while(pdl) { lfname *lfnm = (lfname *) pdl->data; char *p1, *p2; p1 = escape_str(lfnm->matchstr, "\\\""); p2 = escape_str(lfnm->transstr, "\\\""); snprintf(pom, sizeof(pom), "%s \"%s\" \"%s\" \"%s\"\n", params[i].par_entry, (lfnm->type == LFNAME_FNMATCH) ? "F" : "R", p1, p2); _free(p1); _free(p2); write(fd, pom, strlen(pom)); pdl = pdl->next; } } break; case PARAM_RE: #ifdef HAVE_REGEX { dllist *ptr = *((dllist **) params[i].val_adr); while(ptr) { re_entry *ree = (re_entry *) ptr->data; snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, ree->pattern); write(fd, pom, strlen(pom)); ptr = ptr->next; } } #endif break; case PARAM_USTRAT: snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, get_strategie_str(*(strategie *) params[i].val_adr)); write(fd, pom, strlen(pom)); break; case PARAM_SSLVER: snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, get_ssl_version_str(*(int *) params[i].val_adr)); write(fd, pom, strlen(pom)); break; case PARAM_HTTPHDR: { dllist *ptr = *((dllist **) params[i].val_adr); while(ptr) { httphdr *hr = (httphdr *) ptr->data; snprintf(pom, sizeof(pom), "%s %s%s %s\n", params[i].par_entry, hr->all ? "+" : "", hr->name, hr->val); write(fd, pom, strlen(pom)); ptr = ptr->next; } } break; case PARAM_DEBUGL: #ifdef DEBUG { char strbuf[1024]; debug_level_construct(*((int *) params[i].val_adr), strbuf); snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, strbuf); write(fd, pom, strlen(pom)); } #endif break; case PARAM_REQUEST: { dllist *ptr = *((dllist **) params[i].val_adr); while(ptr) { url_info *ui = (url_info *) ptr->data; if(ui->type != URLI_NORMAL || ui->localname) { char *p = url_info_dump(ui); snprintf(pom, sizeof(pom), "%s %s\n", params[i].par_entry, p); _free(p); write(fd, pom, strlen(pom)); } ptr = ptr->next; } } break; case PARAM_TRANSPARENT: { http_proxy *pr = *((http_proxy **) params[i].val_adr); if(pr) { snprintf(pom, sizeof(pom), "%s %s:%d\n", params[i].par_entry, pr->addr, pr->port); write(fd, pom, strlen(pom)); } } break; case PARAM_PROXY: { dllist *ptr = *((dllist **) params[i].val_adr); while(ptr) { http_proxy *pr = (http_proxy *) ptr->data; snprintf(pom, sizeof(pom), "%s %s:%hu\n", params[i].par_entry, pr->addr, pr->port); write(fd, pom, strlen(pom)); ptr = ptr->next; } } break; case PARAM_FUNC: break; case PARAM_JSTRANS: #ifdef HAVE_REGEX { dllist *ptr; for(ptr = cfg.js_transform; ptr; ptr = ptr->next) { js_transform_t *jt = (js_transform_t *) ptr->data; char *p[4]; if(jt->type != (long) params[i].mdefault_val) continue; p[0] = escape_str(jt->re->pattern, "\\\""); p[1] = escape_str(jt->transform, "\\\""); p[2] = escape_str(jt->tag, "\\\""); p[3] = escape_str(jt->attrib, "\\\""); snprintf(pom, sizeof(pom), "%s \"%s\" \"%s\" \"%s\" \"%s\"\n", params[i].par_entry, p[0], p[1], p[2], p[3]); _free(p[0]); _free(p[1]); _free(p[2]); _free(p[3]); write(fd, pom, strlen(pom)); } } #endif break; case PARAM_NUMLIST: if(!params[i].mval_adr || (params[i].mval_adr && (*((bool_t *) params[i].mval_adr) == (bool_t) (long) params[i].mdefault_val))) { dllist *ptr = *((dllist **) params[i].val_adr); if(ptr) { snprintf(pom, sizeof(pom), "%s %ld", params[i].par_entry, (long) ptr->data); write(fd, pom, strlen(pom)); j = 1; for(; ptr; ptr = ptr->next) { snprintf(pom, sizeof(pom), ",%ld", (long) ptr->data); write(fd, pom, strlen(pom)); } write(fd, "\n", 1); } } break; case PARAM_FTPHS: { dllist *ptr; for(ptr = *((dllist **) params[i].val_adr); ptr; ptr = ptr->next) { char *p, *p2; ftp_handshake_info *fhi = (ftp_handshake_info *)ptr->data; p = ftp_handshake_info_data_dump(fhi); p2 = escape_str(p, "\\\""); _free(p); p = p2; if(*fhi->host) snprintf(pom, sizeof(pom), "%s \"%s:%hu\" \"%s\"\n", params[i].par_entry, fhi->host, fhi->port, p); else snprintf(pom, sizeof(pom), "%s \"\" \"%s\"\n", params[i].par_entry, p); _free(p); write(fd, pom, strlen(pom)); } } break; case PARAM_TAGPAT: { dllist *ptr; for(ptr = *((dllist **) params[i].val_adr); ptr; ptr = ptr->next) { char *t, *a, *u; tag_pattern_t *tp = (tag_pattern_t *) ptr->data; t = escape_str(tp->tag, "\\\""); a = escape_str(tp->attrib, "\\\""); u = escape_str(tp->urlp, "\\\""); snprintf(pom, sizeof(pom), "%s \"%s\" \"%s\" \"%s\"\n", params[i].par_entry, t, a, u); _free(t); _free(a); _free(u); write(fd, pom, strlen(pom)); } } break; } } return 0; } int cfg_dump(const char *filename) { int fd; if((fd = open(filename, O_BINARY | O_CREAT | O_WRONLY, 0666)) < 0) { xperror(filename); return -1; } ftruncate(fd, 0); cfg_dump_fd(fd); close(fd); return 0; } int cfg_load_pref(void) { bufio *fd; char filename[PATH_MAX]; snprintf(filename, sizeof(filename), "%s/.pavuk_prefs", cfg.path_to_home); if(!(fd = bufio_open(filename, O_BINARY | O_RDONLY))) { return -1; } cfg_set_all_to_default(); cfg_load_fd(fd); bufio_close(fd); return 0; } int cfg_dump_pref(void) { int fd; char filename[PATH_MAX]; snprintf(filename, sizeof(filename), "%s/.pavuk_prefs", cfg.path_to_home); if((fd = open(filename, O_BINARY | O_CREAT | O_WRONLY, 0666)) < 0) { xperror(filename); return -1; } ftruncate(fd, 0); cfg_dump_fd(fd); close(fd); return 0; } int cfg_dump_cmd(const char *filename) { int fd; int rv; if((fd = open(filename, O_BINARY | O_CREAT | O_WRONLY, 0666)) < 0) { xperror(filename); return -1; } rv = cfg_dump_cmd_fd(fd); close(fd); return rv; } int cfg_dump_cmd_fd(int fd) { int i, j; char pom[8192]; char pom2[20]; char **pl; ftruncate(fd, 0); write(fd, cfg.prg_path, strlen(cfg.prg_path)); write(fd, " ", 1); if(cfg.request) { dllist *dptr; for(dptr = cfg.request; dptr; dptr = dptr->next) { url_info *ui = (url_info *) dptr->data; if(ui->type == URLI_NORMAL && !ui->localname) { write(fd, " '", 2); write(fd, ui->urlstr, strlen(ui->urlstr)); write(fd, "' ", 2); } } } for(i = 0; i < NUM_ELEM(params); i++) { if(params[i].type & PARAM_UNSUPPORTED) continue; if(params[i].type & PARAM_FOREIGN) continue; if(!params[i].long_cmd) continue; if(!params[i].par_entry && (params[i].type != PARAM_PBOOL) && (params[i].type != PARAM_NBOOL)) continue; switch (params[i].type) { case PARAM_NUM: snprintf(pom, sizeof(pom), " -%s=%ld ", params[i].long_cmd, *((long *) params[i].val_adr)); write(fd, pom, strlen(pom)); break; case PARAM_NBOOL: if(!*((bool_t *) params[i].val_adr)) { write(fd, " -", 2); write(fd, params[i].long_cmd, strlen(params[i].long_cmd)); write(fd, " ", 1); } break; case PARAM_PBOOL: if(*((bool_t *) params[i].val_adr)) { write(fd, " -", 2); write(fd, params[i].long_cmd, strlen(params[i].long_cmd)); write(fd, " ", 1); } break; case PARAM_PORT_RANGE: if(*((long *) params[i].val_adr) >= 0) { snprintf(pom, sizeof(pom), " -%s=%ld:%ld ", params[i].long_cmd, *((long *) params[i].val_adr), *((long *) params[i].mval_adr)); write(fd, pom, strlen(pom)); } break; case PARAM_PATH: case PARAM_STR: case PARAM_PASS: if(*((char **) params[i].val_adr)) { snprintf(pom, sizeof(pom), " -%s '%s' ", params[i].long_cmd, *((char **) params[i].val_adr)); write(fd, pom, strlen(pom)); } break; case PARAM_STRLIST: if(!params[i].mval_adr || (params[i].mval_adr && (*((bool_t *) params[i].mval_adr) == (bool_t) (long) params[i].mdefault_val))) { pl = *((char ***) params[i].val_adr); if(pl && pl[0]) { snprintf(pom, sizeof(pom), " -%s '%s", params[i].long_cmd, pl[0]); write(fd, pom, strlen(pom)); j = 1; while(pl[j]) { write(fd, ",", 1); write(fd, pl[j], strlen(pl[j])); j++; } write(fd, "' ", 2); } } break; case PARAM_CONN: if(*((char **) params[i].val_adr)) { snprintf(pom, sizeof(pom), "-%s %s:%hu ", params[i].long_cmd, *((char **) params[i].val_adr), *((int *) params[i].mval_adr)); write(fd, pom, strlen(pom)); } break; case PARAM_AUTHSCH: snprintf(pom, sizeof(pom), " -%s %s ", params[i].long_cmd, http_auths[*((long *) params[i].val_adr)].name); write(fd, pom, strlen(pom)); break; case PARAM_MODE: snprintf(pom, sizeof(pom), " -%s %s ", params[i].long_cmd, mode_get_str(cfg.mode)); write(fd, pom, strlen(pom)); break; case PARAM_TIME: if(*((time_t *) params[i].val_adr)) { LOCK_TIME; strftime(pom2, sizeof(pom2), "%Y.%m.%d.%H:%M", localtime((time_t *) params[i].val_adr)); UNLOCK_TIME; snprintf(pom, sizeof(pom), " -%s %s ", params[i].long_cmd, pom2); write(fd, pom, strlen(pom)); } break; case PARAM_HTMLTAG: { int x, y; bool_t first = TRUE; snprintf(pom, sizeof(pom), " -%s '", params[i].long_cmd); for(x = 0; x < html_link_tags_num(); x++) { for(y = 0; html_link_tags[x].attribs[y].attrib; y++) { if(!(html_link_tags[x].attribs[y].stat & LINK_DISABLED) == !(params[i].default_val)) { if(!first) { strncat(pom, ";", sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; } strncat(pom, html_link_tags[x].tag, sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; strncat(pom, ",", sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; strncat(pom, html_link_tags[x].attribs[y].attrib, sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; first = FALSE; } } } strncat(pom, "' ", sizeof(pom) - strlen(pom)); pom[sizeof(pom) - 1] = '\0'; if(!first) write(fd, pom, strlen(pom)); } break; case PARAM_TWO_QSTR: if(*((char **) params[i].val_adr)) { snprintf(pom, sizeof(pom), " -%s '%s' '%s' ", params[i].long_cmd, *((char **) params[i].val_adr), *((char **) params[i].mval_adr)); write(fd, pom, strlen(pom)); } break; case PARAM_DOUBLE: snprintf(pom, sizeof(pom), " -%s=%.3f ", params[i].long_cmd, *((double *) params[i].val_adr)); write(fd, pom, strlen(pom)); break; case PARAM_LFNAME: { dllist *pdl = cfg.lfnames; while(pdl) { lfname *lfnm = (lfname *)pdl->data; snprintf(pom, sizeof(pom), " -%s \'%s\' \'%s\' \'%s\' ", params[i].long_cmd, (lfnm->type == LFNAME_FNMATCH) ? "F" : "R", lfnm->matchstr, lfnm->transstr); write(fd, pom, strlen(pom)); pdl = pdl->next; } } break; case PARAM_RE: #ifdef HAVE_REGEX { dllist *ptr = *((dllist **) params[i].val_adr); while(ptr) { re_entry *ree = (re_entry *)ptr->data; snprintf(pom, sizeof(pom), " -%s \'%s\' ", params[i].long_cmd, ree->pattern); write(fd, pom, strlen(pom)); ptr = ptr->next; } } #endif break; case PARAM_USTRAT: snprintf(pom, sizeof(pom), " -%s=%s ", params[i].long_cmd, get_strategie_str(*(strategie *) params[i].val_adr)); write(fd, pom, strlen(pom)); break; case PARAM_SSLVER: snprintf(pom, sizeof(pom), " -%s=%s ", params[i].long_cmd, get_ssl_version_str(*(int *) params[i].val_adr)); write(fd, pom, strlen(pom)); break; case PARAM_HTTPHDR: { dllist *ptr = *((dllist **) params[i].val_adr); while(ptr) { httphdr *hr = (httphdr *) ptr->data; snprintf(pom, sizeof(pom), " -%s \"%s%s %s\" ", params[i].long_cmd, hr->all ? "+" : "", hr->name, hr->val); write(fd, pom, strlen(pom)); ptr = ptr->next; } } break; case PARAM_DEBUGL: #ifdef DEBUG { char strbuf[1024]; debug_level_construct(*((int *) params[i].val_adr), strbuf); snprintf(pom, sizeof(pom), " -%s \'%s\' ", params[i].long_cmd, strbuf); write(fd, pom, strlen(pom)); } #endif break; case PARAM_REQUEST: { dllist *ptr = *((dllist **) params[i].val_adr); while(ptr) { url_info *ui = (url_info *) ptr->data; if(ui->type != URLI_NORMAL || ui->localname) { char *p = url_info_dump(ui); snprintf(pom, sizeof(pom), " -%s \'%s\' ", params[i].long_cmd, p); _free(p); write(fd, pom, strlen(pom)); } ptr = ptr->next; } } break; case PARAM_TRANSPARENT: { http_proxy *pr = *((http_proxy **) params[i].val_adr); snprintf(pom, sizeof(pom), " -%s=%s:%d ", params[i].long_cmd, pr->addr, pr->port); write(fd, pom, strlen(pom)); } break; case PARAM_PROXY: { dllist *ptr = *((dllist **) params[i].val_adr); while(ptr) { http_proxy *pr = (http_proxy *) ptr->data; snprintf(pom, sizeof(pom), " -%s=%s:%hu ", params[i].long_cmd, pr->addr, pr->port); write(fd, pom, strlen(pom)); ptr = ptr->next; } } break; case PARAM_FUNC: break; case PARAM_JSTRANS: #ifdef HAVE_REGEX { dllist *ptr; for(ptr = cfg.js_transform; ptr; ptr = ptr->next) { js_transform_t *jt = (js_transform_t *) ptr->data; if(jt->type != (long) params[i].mdefault_val) continue; snprintf(pom, sizeof(pom), " -%s \'%s\' \'%s\' \'%s\' \'%s\' ", params[i].long_cmd, jt->re->pattern, jt->transform, jt->tag, jt->attrib); write(fd, pom, strlen(pom)); } } #endif break; case PARAM_NUMLIST: if(!params[i].mval_adr || (params[i].mval_adr && (*((bool_t *) params[i].mval_adr) == (bool_t) (long) params[i].mdefault_val))) { dllist *ptr = *((dllist **) params[i].val_adr); if(ptr) { snprintf(pom, sizeof(pom), "-%s %ld", params[i].long_cmd, (long) ptr->data); write(fd, pom, strlen(pom)); j = 1; for(; ptr; ptr = ptr->next) { snprintf(pom, sizeof(pom), ",%ld", (long) ptr->data); write(fd, pom, strlen(pom)); } write(fd, " ", 1); } } break; case PARAM_FTPHS: { dllist *ptr; for(ptr = *((dllist **) params[i].val_adr); ptr; ptr = ptr->next) { char *p; ftp_handshake_info *fhi = (ftp_handshake_info *) ptr->data; p = ftp_handshake_info_data_dump(fhi); if(*fhi->host) snprintf(pom, sizeof(pom), "-%s \"%s:%hu\" \"%s\" ", params[i].long_cmd, fhi->host, fhi->port, p); else snprintf(pom, sizeof(pom), "-%s \"\" \"%s\" ", params[i].long_cmd, p); _free(p); write(fd, pom, strlen(pom)); } } break; case PARAM_TAGPAT: { dllist *ptr; for(ptr = *((dllist **) params[i].val_adr); ptr; ptr = ptr->next) { tag_pattern_t *tp = (tag_pattern_t *) ptr->data; snprintf(pom, sizeof(pom), "-%s \"%s\" \"%s\" \"%s\" ", params[i].long_cmd, tp->tag, tp->attrib, tp->urlp); write(fd, pom, strlen(pom)); } } break; } } return 0; } void cfg_free_params(void) { int i; for(i = 0; i < NUM_ELEM(params); i++) cfg_set_to_default(&(params[i])); } #if defined(HAVE_MT) && defined(I_FACE) static char **_copy_strnar(char **orig) { int n, i; char **rv; if(!orig) return NULL; for(n = 0; orig[n]; n++); n++; rv = (char **) _malloc(n * sizeof(char **)); for(i = 0; i < n; i++) rv[i] = tl_strdup(orig[i]); return rv; } #ifdef HAVE_REGEX static dllist *_copy_relist(dllist * orig) { dllist *rv, *ptr; if(!orig) return NULL; rv = NULL; ptr = orig; while(ptr) { rv = dllist_append(rv, re_make(((re_entry *) ptr->data)->pattern)); ptr = ptr->next; } return rv; } static dllist *_copy_jstrans(dllist * orig) { dllist *rv, *ptr; if(!orig) return NULL; rv = NULL; ptr = orig; while(ptr) { js_transform_t *jt = ptr->data; rv = dllist_append(rv, js_transform_new(jt->re->pattern, jt->transform, jt->tag, jt->attrib, jt->type)); ptr = ptr->next; } return rv; } #endif static dllist *_copy_lfnames(dllist * orig) { dllist *rv, *ptr; if(!orig) return NULL; rv = NULL; ptr = orig; while(ptr) { lfname *ln = (lfname *) ptr->data; rv = dllist_append(rv, lfname_new(ln->type, ln->matchstr, ln->transstr)); ptr = ptr->next; } return rv; } static dllist *_copy_httphdr(dllist * orig) { dllist *rv, *ptr; if(!orig) return NULL; rv = NULL; ptr = orig; while(ptr) { httphdr *ov, *nv; ov = (httphdr *) ptr->data; nv = _malloc(sizeof(httphdr)); nv->all = ov->all; nv->name = tl_strdup(ov->name); nv->val = tl_strdup(ov->val); rv = dllist_append(rv, nv); ptr = ptr->next; } return rv; } static dllist *_copy_urlinfo(dllist * orig) { dllist *rv, *ptr; if(!orig) return NULL; rv = NULL; ptr = orig; while(ptr) { url_info *ui; ui = url_info_duplicate((url_info *) ptr->data); rv = dllist_append(rv, ui); ptr = ptr->next; } return rv; } static dllist *_copy_numlist(dllist * orig) { dllist *rv = NULL, *ptr; for(ptr = orig; ptr; ptr = ptr->next) rv = dllist_append(rv, ptr->data); return rv; } static dllist *_copy_ftphs(dllist * orig) { dllist *rv = NULL; for(; orig; orig = orig->next) rv = dllist_append(rv, ftp_handshake_info_dup(orig->data)); return rv; } static dllist *_copy_tagpat(dllist * orig) { dllist *rv = NULL; for(; orig; orig = orig->next) { tag_pattern_t *tp = orig->data; rv = dllist_append(rv, tag_pattern_new(tp->type, tp->tag, tp->attrib, tp->urlp)); } return rv; } void privcfg_make_copy(_config_struct_priv_t * pcfg) { LOCK_GCFG; memset(pcfg, '\0', sizeof(_config_struct_priv_t)); pcfg->timestamp = time(NULL); pcfg->default_prefix = tl_strdup(cfg.default_prefix); pcfg->info_dir = tl_strdup(cfg.info_dir); pcfg->subdir = tl_strdup(cfg.subdir); pcfg->cache_dir = tl_strdup(cfg.cache_dir); pcfg->post_cmd = tl_strdup(cfg.post_cmd); pcfg->http_proxy_pass = tl_strdup(cfg.http_proxy_pass); pcfg->http_proxy_user = tl_strdup(cfg.http_proxy_user); pcfg->ftp_proxy_pass = tl_strdup(cfg.ftp_proxy_pass); pcfg->ftp_proxy_user = tl_strdup(cfg.ftp_proxy_user); pcfg->ftp_proxy = tl_strdup(cfg.ftp_proxy); pcfg->ftp_proxy_port = cfg.ftp_proxy_port; pcfg->gopher_proxy = tl_strdup(cfg.gopher_proxy); pcfg->gopher_proxy_port = cfg.gopher_proxy_port; pcfg->name_auth = tl_strdup(cfg.name_auth); pcfg->passwd_auth = tl_strdup(cfg.passwd_auth); pcfg->index_name = tl_strdup(cfg.index_name); pcfg->store_name = tl_strdup(cfg.store_name); pcfg->from = tl_strdup(cfg.from); pcfg->identity = tl_strdup(cfg.identity); pcfg->auth_ntlm_domain = tl_strdup(cfg.auth_ntlm_domain); pcfg->ftp_list_options = tl_strdup(cfg.ftp_list_options); pcfg->accept_lang = _copy_strnar(cfg.accept_lang); pcfg->accept_chars = _copy_strnar(cfg.accept_chars); pcfg->cookies_disabled_domains = _copy_strnar(cfg.cookies_disabled_domains); pcfg->dont_touch_url_pattern = _copy_strnar(cfg.dont_touch_url_pattern); pcfg->lfnames = _copy_lfnames(cfg.lfnames); pcfg->http_headers = _copy_httphdr(cfg.http_headers); pcfg->formdata = _copy_urlinfo(cfg.formdata); pcfg->ftp_login_hs = _copy_ftphs(cfg.ftp_login_hs); pcfg->condition.tag_patterns = _copy_tagpat(cfg.condition.tag_patterns); pcfg->condition.ports = _copy_numlist(cfg.condition.ports); pcfg->condition.sites = _copy_strnar(cfg.condition.sites); pcfg->condition.allow_site = cfg.condition.allow_site; pcfg->condition.sufix = _copy_strnar(cfg.condition.sufix); pcfg->condition.allow_sufix = cfg.condition.allow_sufix; pcfg->condition.dir_prefix = _copy_strnar(cfg.condition.dir_prefix); pcfg->condition.allow_prefix = cfg.condition.allow_prefix; pcfg->condition.domains = _copy_strnar(cfg.condition.domains); pcfg->condition.allow_domain = cfg.condition.allow_domain; pcfg->condition.mime = _copy_strnar(cfg.condition.mime); pcfg->condition.allow_mime = cfg.condition.allow_mime; pcfg->condition.pattern = _copy_strnar(cfg.condition.pattern); pcfg->condition.url_pattern = _copy_strnar(cfg.condition.url_pattern); pcfg->condition.skip_pattern = _copy_strnar(cfg.condition.skip_pattern); pcfg->condition.skip_url_pattern = _copy_strnar(cfg.condition.skip_url_pattern); pcfg->condition.uexit = tl_strdup(cfg.condition.uexit); pcfg->condition.follow_cmd = tl_strdup(cfg.condition.follow_cmd); pcfg->tr_del_chr = tl_strdup(cfg.tr_del_chr); pcfg->tr_str_s1 = tl_strdup(cfg.tr_str_s1); pcfg->tr_str_s2 = tl_strdup(cfg.tr_str_s2); pcfg->tr_chr_s1 = tl_strdup(cfg.tr_chr_s1); pcfg->tr_chr_s2 = tl_strdup(cfg.tr_chr_s2); #ifdef HAVE_BDB_18x pcfg->ns_cache_dir = tl_strdup(cfg.ns_cache_dir); pcfg->moz_cache_dir = tl_strdup(cfg.moz_cache_dir); #endif #ifdef HAVE_REGEX pcfg->advert_res = _copy_relist(cfg.advert_res); pcfg->js_patterns = _copy_relist(cfg.js_patterns); pcfg->dont_touch_url_rpattern = _copy_relist(cfg.dont_touch_url_rpattern); pcfg->dont_touch_tag_rpattern = _copy_relist(cfg.dont_touch_tag_rpattern); pcfg->js_transform = _copy_jstrans(cfg.js_transform); pcfg->condition.rpattern = _copy_relist(cfg.condition.rpattern); pcfg->condition.rskip_pattern = _copy_relist(cfg.condition.rskip_pattern); pcfg->condition.rurl_pattern = _copy_relist(cfg.condition.rurl_pattern); pcfg->condition.rskip_url_pattern = _copy_relist(cfg.condition.rskip_url_pattern); pcfg->condition.aip = _copy_relist(cfg.condition.aip); pcfg->condition.skipip = _copy_relist(cfg.condition.skipip); #endif #ifdef USE_SSL pcfg->ssl_proxy = tl_strdup(cfg.ssl_proxy); pcfg->ssl_proxy_port = cfg.ssl_proxy_port; pcfg->ssl_cipher_list = tl_strdup(cfg.ssl_cipher_list); pcfg->ssl_cert_passwd = tl_strdup(cfg.ssl_cert_passwd); #ifdef USE_SSL_IMPL_OPENSSL pcfg->ssl_cert_file = tl_strdup(cfg.ssl_cert_file); pcfg->ssl_key_file = tl_strdup(cfg.ssl_key_file); pcfg->egd_socket = tl_strdup(cfg.egd_socket); #endif #ifdef USE_SSL_IMPL_NSS pcfg->nss_cert_dir = tl_strdup(cfg.nss_cert_dir); #endif #endif UNLOCK_GCFG; } #define __free_strnar(orig) _free_strnar(orig);orig = NULL; static void _free_strnar(char **orig) { int n; if(!orig) return; for(n = 0; orig[n]; n++) _free(orig[n]); _free(orig); } #ifdef HAVE_REGEX #define __free_relist(orig) _free_relist(orig);orig = NULL; static void _free_relist(dllist * orig) { dllist *rv, *ptr; if(!orig) return; rv = NULL; ptr = orig; while(ptr) { re_free((re_entry *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } } #define __free_jstrans(orig) _free_jstrans(orig);orig = NULL; static void _free_jstrans(dllist * orig) { dllist *rv, *ptr; if(!orig) return; rv = NULL; ptr = orig; while(ptr) { js_transform_free((js_transform_t *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } } #endif #define __free_lfnames(orig) _free_lfnames(orig);orig = NULL; static void _free_lfnames(dllist * orig) { dllist *ptr; if(!orig) return; ptr = orig; while(ptr) { lfname_free((lfname *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } } #define __free_httphdr(orig) _free_httphdr(orig);orig = NULL; static void _free_httphdr(dllist * orig) { dllist *ptr; if(!orig) return; ptr = orig; while(ptr) { httphdr *ov = (httphdr *) ptr->data; _free(ov->name); _free(ov->val); ptr = dllist_remove_entry(ptr, ptr); } } #define __free_urlinfo(orig) _free_urlinfo(orig);orig = NULL; static void _free_urlinfo(dllist * orig) { dllist *ptr; if(!orig) return; ptr = orig; while(ptr) { url_info_free((url_info *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } } #define __free_numlist(orig) _free_numlist(orig);orig = NULL; static void _free_numlist(dllist * orig) { while(orig) orig = dllist_remove_entry(orig, orig); } #define __free_ftphs(orig) _free_ftphs(orig);orig = NULL; static void _free_ftphs(dllist * orig) { for(; orig; orig = dllist_remove_entry(orig, orig)) ftp_handshake_info_free(orig->data); } #define __free_tagpat(orig) _free_tagpat(orig);orig = NULL; static void _free_tagpat(dllist * orig) { for(; orig; orig = dllist_remove_entry(orig, orig)) tag_pattern_free(orig->data); } void privcfg_free(_config_struct_priv_t * pcfg) { _free(pcfg->default_prefix); _free(pcfg->info_dir); _free(pcfg->subdir); _free(pcfg->cache_dir); _free(pcfg->post_cmd); _free(pcfg->http_proxy_pass); _free(pcfg->http_proxy_user); _free(pcfg->ftp_proxy_pass); _free(pcfg->ftp_proxy_user); _free(pcfg->ftp_proxy); _free(pcfg->gopher_proxy); _free(pcfg->name_auth); _free(pcfg->passwd_auth); _free(pcfg->index_name); _free(pcfg->store_name); _free(pcfg->from); _free(pcfg->identity); _free(pcfg->auth_ntlm_domain); _free(pcfg->auth_proxy_ntlm_domain); _free(pcfg->ftp_list_options); __free_strnar(pcfg->accept_lang); __free_strnar(pcfg->accept_chars); __free_strnar(pcfg->cookies_disabled_domains); __free_strnar(pcfg->dont_touch_url_pattern); __free_lfnames(pcfg->lfnames); __free_httphdr(pcfg->http_headers); __free_urlinfo(pcfg->formdata); __free_ftphs(pcfg->ftp_login_hs); __free_tagpat(pcfg->condition.tag_patterns); __free_numlist(pcfg->condition.ports); __free_strnar(pcfg->condition.sites); __free_strnar(pcfg->condition.sufix); __free_strnar(pcfg->condition.dir_prefix); __free_strnar(pcfg->condition.domains); __free_strnar(pcfg->condition.mime); __free_strnar(pcfg->condition.pattern); __free_strnar(pcfg->condition.url_pattern); __free_strnar(pcfg->condition.skip_pattern); __free_strnar(pcfg->condition.skip_url_pattern); _free(pcfg->condition.uexit); _free(pcfg->condition.follow_cmd); _free(pcfg->tr_del_chr); _free(pcfg->tr_str_s1); _free(pcfg->tr_str_s2); _free(pcfg->tr_chr_s1); _free(pcfg->tr_chr_s2); #ifdef HAVE_BDB_18x _free(pcfg->ns_cache_dir); _free(pcfg->moz_cache_dir); #endif #ifdef HAVE_REGEX __free_relist(pcfg->advert_res); __free_relist(pcfg->dont_touch_url_rpattern); __free_relist(pcfg->dont_touch_tag_rpattern); __free_relist(pcfg->js_patterns); __free_jstrans(pcfg->js_transform); __free_relist(pcfg->condition.rpattern); __free_relist(pcfg->condition.rskip_pattern); __free_relist(pcfg->condition.rurl_pattern); __free_relist(pcfg->condition.rskip_url_pattern); __free_relist(pcfg->condition.aip); __free_relist(pcfg->condition.skipip); #endif #ifdef USE_SSL _free(pcfg->ssl_proxy); _free(pcfg->ssl_cipher_list); _free(pcfg->ssl_cert_passwd); #ifdef USE_SSL_IMPL_OPENSSL _free(pcfg->egd_socket); _free(pcfg->ssl_cert_file); _free(pcfg->ssl_key_file); #endif #ifdef USE_SSL_IMPL_NSS _free(pcf->nss_cert_dir); #endif #endif memset(pcfg, '\0', sizeof(_config_struct_priv_t)); } #endif /* HAVE_MT && I_FACE */ pavuk-0.9.35/src/config.h0000644000175000001440000006226610565333217012101 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _config_h_ #define _config_h_ #include "../ac-config.h" typedef DLLISTTYPE dllist_t; #define NeedFunctionPrototypes 1 #ifdef NEED_DECLARE_H_ERRNO extern int h_errno; #endif #if !defined(HAVE_LONG_FILE_NAMES) && defined(__GNUC__) #warning "This program can't run successfuly on machine without long filenames support" #endif #include #include #include #include #include #include #include "mode.h" #if defined(I_FACE) && !defined(HAVE_MT) #define _Xt_Serve gui_loop_serve() #define _Xt_EscLoop gui_loop_escape() #define _Xt_ServeLoop gui_loop_do() #else #define _Xt_Serve #define _Xt_EscLoop #define _Xt_ServeLoop #endif #ifndef O_BINARY #define O_BINARY 0 #endif #include #ifndef PATH_MAX #ifdef FILENAME_MAX #define PATH_MAX FILENAME_MAX #else #define PATH_MAX 2048 #endif #endif #ifndef NAME_MAX #ifdef MAXNAMLEN #define NAME_MAX MAXNAMLEN #else #define NAME_MAX 256 #endif #endif /********************************************************/ /* the folowing is to workaround systems which defines */ /* unreal limits on filenames */ /********************************************************/ #if defined(HAVE_LONG_FILE_NAMES) && NAME_MAX < 16 #undef NAME_MAX #define NAME_MAX 256 #endif #if defined(HAVE_LONG_FILE_NAMES) && NAME_MAX < 1024 #undef PATH_MAX #define PATH_MAX 2048 #endif #ifndef INT_MAX #define INT_MAX 2147483647 #endif #ifndef USHRT_MAX #define USHRT_MAX 65535 #endif #ifdef HAVE_SOCKS_H #include #elif defined(SOCKS) int SOCKSinit (char *); #define connect Rconnect int Rconnect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); #define bind Rbind int Rbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); #define accept Raccept int Raccept(int s, struct sockaddr *addr, socklen_t *addrlen); #define listen Rlisten int Rlisten(int s, int backlog); #define select Rselect int Rselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); #define gethostbyname Rgethostbyname struct hostent *Rgethostbyname(const char *name); #define getsockname Rgetsockname int Rgetsockname(int s, struct sockaddr *name, socklen_t *namelen); #endif /* SOCKS */ #include "mt.h" #include "debugl.h" #include "condition.h" #include "nls.h" #include "dllist.h" #include "dlhash.h" #include "http.h" #include "dns.h" #define HASH_TBL_SIZE 233 typedef enum { SSTRAT_DO_SIRKY, SSTRAT_DO_SIRKY_I, SSTRAT_DO_HLBKY, SSTRAT_DO_HLBKY_I, SSTRAT_LAST } strategie; typedef struct { /*** CMDline parameters ***/ char *default_prefix; /*** default prefix used in filename_to_url when nondefault tree layout is used ***/ char *info_dir; /*** directory where are info files stored instead of regulary to -cdir ***/ char *urls_file; /*** urls will be read from this file ***/ char *cookie_file; /*** cookie file in NS format ***/ char *auth_file; /*** file for authentification informations ***/ char *save_scn; /*** name for scenario saving ***/ char *scndir; /*** directory where scenarios are stored ***/ char *scenario; /*** scenario file to load ***/ char *subdir; /*** subdirectory of cache_dir to focus ***/ char *cache_dir; /*** dir where your local tree is located ***/ char *logfile; /*** logging file ***/ char *short_logfile; /*** newstyle log file name ***/ char *time_logfile; /*** time log file name ***/ bool_t sdemo_mode; /*** sdemo compaible output ***/ bool_t noencode; /*** don't do RFC 2396 character escaping ***/ char *time_relative; /*** what timings are relative to ***/ http_proxy *transparent_proxy; /*** list of transparent proxy servers ***/ http_proxy *transparent_ssl_proxy; /*** list of transparent SSL proxy servers ***/ char *remind_cmd; /*** command for reminding changed URLS ***/ char *sched_cmd; /*** scheduling command ***/ char *post_cmd; /*** command for post downloading processing of files ***/ char *stats_file; /*** status file ***/ long dumpfd; /*** number of filedescriptor for dumping documents ***/ long dump_urlfd; /*** number of filedescriptor for dumping all URLs ***/ long hash_size; /*** hash tables size ***/ long trans_quota; /*** transfer quota ***/ long file_quota; /*** file size quota ***/ long fs_quota; /*** filesystem quota ***/ long bufsize; /*** size of read buffer ***/ long base_level; /*** base tree level from which is built local file tree ***/ long nretry; /*** number of retries on error ***/ long nreget; /*** number of regets ***/ long nredir; /*** max number of redirections ***/ long ddays; /*** delay in days for document reload ***/ long rollback; /*** size to go back when reget-ing ***/ long sleep; /*** sleeptime between transfers ***/ long cookies_max; /*** maximal number of cookies ***/ long reschedh; /*** number of hours for rescheduling ***/ double max_time; /*** maximal time for run ***/ pavuk_mode mode; /*** working mode ***/ struct tm *time; /*** when to schedule execution time ***/ time_t schtime; /*** cmdln param for scheduling time ***/ strategie scheduling_strategie; /*** url downloading scheduling strategie ***/ char *ftp_proxy_pass; /*** password for access to FTP proxy ***/ char *ftp_proxy_user; /*** username for access to FTP proxy ***/ char *http_proxy_pass; /*** password for access to HTTP proxy ***/ char *http_proxy_user; /*** username for access to HTTP proxy ***/ long proxy_auth_scheme; /*** authorization scheme for proxy ***/ char *ftp_proxy; /*** FTP proxy server ***/ long ftp_proxy_port; bool_t ftp_via_http; /*** gatewaying FTP through HTTP proxy ***/ bool_t ftp_dirtyp; /*** dirty FTP proxying via CONNECT request to HTTP proxy ***/ long active_ftp_min_port; /*** minimum port for active ftp ***/ long active_ftp_max_port; /*** minimum port for active ftp ***/ char *gopher_proxy; /*** Gopher proxy ***/ long gopher_proxy_port; bool_t gopher_via_http; /*** gatewaying Gopher trough HTTP proxy ***/ char *name_auth; /*** meno pouzivatela pri HTTP autentifikacii ***/ char *passwd_auth; /*** password for HTTP authorization ***/ long auth_scheme; /*** authorization scheme 1- user, 2- Basic, 3- Digest ***/ bool_t rsleep; /*** randomize sleep period up to -sleep ***/ bool_t hack_add_index; /*** add also directories of all files to queue ***/ bool_t post_update; /*** update in parent documents only curently downloaded URLs ***/ bool_t fix_wuftpd; /*** use STAT -d to test existence of directory when using LIST, because wuftpd does not raise error when listing non existing directory ***/ bool_t retrieve_slink; /*** retrieve symliks like regular files ***/ bool_t dump_resp; /*** when -dumpfd is used, dump also HTTP response header ***/ bool_t dump_after; /*** when -dumpfd is used, dump document just after successfull download and after processing of HTML documents ***/ bool_t xi_face; /*** requested GUI interface ***/ bool_t singlepage; /*** download single HTML page with all inline objecs ***/ bool_t unique_doc; /*** always try to generate unique names for documents ***/ bool_t del_after; /*** delete transfered files after successfull transfer ***/ bool_t use_http11; /*** enable using of HTTP/1.1 protocol version ***/ bool_t gen_logname; /*** generate nummbered log names when original locked ***/ bool_t send_if_range; /*** send If-Range: header in HTTP request ***/ bool_t auto_referer; /*** send own URL as referer with starting URLs ***/ bool_t referer; /*** referer field for requests ***/ bool_t all_to_remote; /*** change all links to remote and don't do any further changes to it ***/ bool_t sel_to_local; /*** change links, which acomplish limits, to local immediately ***/ bool_t all_to_local; /*** change all links to local immediately ***/ bool_t enable_info; /*** enable using and creating info files ***/ bool_t enable_js; /*** enable javascript ***/ bool_t bgmode; /*** run at background ***/ bool_t store_index; /*** store directory URLS as index files ***/ bool_t send_from; /*** send From: header in request ***/ bool_t check_size; /*** some broken HTTP servers send wrong Content-Length: header ***/ bool_t htdig; /*** to dump HTTP response - used by htDig ***/ bool_t send_cookies; /*** send available cookies in HTTP request ***/ bool_t recv_cookies; /*** receive cookie infos ***/ bool_t update_cookies; /*** update cookie file ***/ bool_t cookie_check_domain; /*** check if server sets cookie for own domain ***/ bool_t preserve_time; /*** preserve time of remote document ***/ bool_t preserve_perm; /*** preserve permisions of remote document ***/ bool_t preserve_links; /*** preserve absolute symlinks ***/ bool_t quiet; /*** ? output messages ***/ bool_t auth_reuse_nonce; /*** reuse HTTP Digest authorization nonce ***/ bool_t auth_reuse_proxy_nonce;/*** reuse HTTP proxy Digest authorization nonce ***/ bool_t show_time; /*** show start and end time of download ? */ bool_t remove_old; /*** remove old documents (when not occurrs on remote site) ***/ bool_t remove_before_store; /*** pro: remove document before storing it ***/ bool_t always_mdtm; /*** always use MDTM: no cached values ***/ bool_t progres; /*** show retrieving progres , when on console ***/ bool_t ftp_activec; /*** use active FTP data connection instead of passive ***/ bool_t ftp_list; /*** retrieve FTP directory with LIST cmd insted of NLST ***/ bool_t ftp_html; /*** process HTML files downloaded over FTP protocol ***/ bool_t cache; /*** disallow caching of HTTP documents (on proxy cache) ***/ bool_t rewrite_links; /*** indikacia ci ma maju byt odkazy v HTML dokumentoch prepisovane ***/ bool_t freget; /*** force reget whole file when server doesn't support reget ***/ bool_t use_enc; /*** indikacia ci sa ma pouzivat gzip/compress kodovanie pri prenose ***/ bool_t read_css; /*** fetch objects refed in css ***/ char *ftp_list_options; /*** aditional options to FTP LIST/NLST commands ***/ char *auth_ntlm_domain; /*** domain name for NTLM authorization ***/ char *auth_proxy_ntlm_domain; /*** domain name for NTLM proxy authorization ***/ char *local_ip; /*** address for local network interface ***/ char *index_name; /*** name of directory index file instead of _._.html ***/ char *store_name; /*** filename of document transfered with -mode singlepage ***/ char *from; /*** HTTP request field From: or anonymous FTP password ***/ char *identity; /*** User-agent: field contents ***/ char **accept_lang; /*** list of preffered languages ***/ char **accept_chars; /*** list of preffered character sets ***/ char **cookies_disabled_domains; /*** domains from which cookies are not acceptable ***/ char **dont_touch_url_pattern;/*** to allow preserve some URLs in the original form ***/ cond condition; /*** structure which contains all limiting conditions ***/ dllist *request; /*** list of urls entered by user ***/ dllist *formdata; /*** data for forms found during document tree traversing ***/ dllist *lfnames; /*** list of filename conversion rules ***/ dllist *http_headers; /*** list of additional HTTP headers ***/ dllist *http_proxy; /*** list of HTTP proxy servers ***/ dllist *ftp_login_hs; /*** list for -ftp_login_handshake ***/ char *tr_del_chr; /*** set of characters to delete while doing name transformation ***/ char *tr_str_s1; /*** strfrom in transformation ***/ char *tr_str_s2; /*** strto in transformation ***/ char *tr_chr_s1; /*** setfrom in transformation ***/ char *tr_chr_s2; /*** setto in transformation ***/ double maxrate; /*** maximal transfer rate ***/ double minrate; /*** minimal transfer rate ***/ double ctimeout; /*** timeout for network communication ***/ #ifdef HAVE_MOZJS char *js_script_file; /*** file which contains JavaScript script with functions declarations ***/ #endif #ifdef HAVE_BDB_18x char *ns_cache_dir; /*** directory for Netscape cache ***/ #endif char *moz_cache_dir; /*** directory for Mozilla cache ***/ #ifdef HAVE_MT long nthr; /*** configured number of running threads ***/ bool_t immessages; /*** print messages immediatly when produced not just when it is safe ***/ #endif #ifdef __CYGWIN__ bool_t ie_cache; /*** possibily load files from MSIE cache directory */ bool_t wait_on_exit; /*** this option is for WIN32 CLI version ***/ #endif #ifdef HAVE_TERMIOS bool_t tccheck; /*** checking of we are at foreground ***/ #endif #ifdef HAVE_REGEX dllist *js_patterns; /*** matching patterns for JS URLs ***/ dllist *js_transform; /*** matching patterns for JS with transform **/ dllist *advert_res; /*** list of RE-s for advertisement banners ***/ bool_t remove_adv; /*** enable / disable advertisement banners ***/ dllist *dont_touch_url_rpattern; dllist *dont_touch_tag_rpattern; /*** to allow preserve some URLs in the original form ***/ #endif #ifdef DEBUG bool_t debug; /*** debug mode on/off ***/ long debug_level; /*** debug level ***/ #endif #ifdef USE_SSL long ssl_version; /*** ssl2/ssl3/ssl23/tls1 version of ssl_client_method() ***/ char *ssl_proxy; /*** SSL tuneling proxy ***/ long ssl_proxy_port; char *ssl_cipher_list; char *ssl_cert_passwd; bool_t unique_sslid; /*** use unique SSL IDs with each SSL connection ***/ #ifdef USE_SSL_IMPL_OPENSSL char *ssl_cert_file; char *ssl_key_file; char *egd_socket; /*** path to EGD socket ***/ #endif #ifdef USE_SSL_IMPL_NSS char *nss_cert_dir; /*** certDir for Netscape NSS ***/ bool_t nss_accept_unknown_cert; /*** don't care much about certificates ***/ bool_t nss_domestic_policy; #endif #endif char *language; /*** language for LC_MESSAGES ***/ #ifdef GETTEXT_NLS char *msgcatd; /*** explicit message catalog directory ***/ #endif #ifdef I_FACE char *fontname; /*** default font used in interface ***/ long xlogsize; /*** max number of lines in LOG widget ***/ bool_t log_autoscroll; /*** autoscroll of log window ***/ bool_t run_iface; /*** if immediately run download after start of pavuk in GUI interface ***/ bool_t use_prefs; /*** store & load prefernces from ~/.pavuk_prefs file ***/ /*** alternative icons for GUI ***/ char *bt_icon_cfg; char *bt_icon_cfg_s; char *bt_icon_lim; char *bt_icon_lim_s; char *bt_icon_gobg; char *bt_icon_gobg_s; char *bt_icon_rest; char *bt_icon_rest_s; char *bt_icon_cont; char *bt_icon_cont_s; char *bt_icon_stop; char *bt_icon_stop_s; char *bt_icon_brk; char *bt_icon_brk_s; char *bt_icon_exit; char *bt_icon_exit_s; char *bt_icon_mtb; char *bt_icon_mtb_s; #ifdef WITH_TREE char *browser; /*** command to execute your preffered browser ***/ #endif #endif /*** GLOBALdata ***/ abs_addr local_ip_addr; /*** numeric address for local network interface ***/ time_t start_time; /*** start time of downloading ***/ struct timeval hr_start_time; /*** high-resolution start time of downloading ***/ long trans_size; /*** transfered size in session ***/ char *path_to_home; char *local_host; /*** hostname of local machine ***/ long fail_cnt; /*** counter for failed transfers ---> return code of pavuk ***/ char *prg_path; /*** path to pavuk executable == argv[0] ***/ char *install_path; /*** pavuk install path especialy used in win32 version ***/ long total_cnt; /*** total number of URLs in queue ***/ long process_cnt; /*** number of already processed documents ***/ long reject_cnt; /*** number of rejected URLs ***/ pavuk_mode prev_mode; /*** previous active mode ***/ bool_t mode_started; /*** mode startup finisched ***/ bool_t rbreak; /*** immediately stop transfer ***/ bool_t stop; /*** stop after this document will be processed ***/ dllist *urlstack; /*** list of URLs in processing queue ***/ dllist *urls_in_dir; /*** list of URLs extracted from mirroring directory, for checking for nonexistent document removal ***/ dlhash *url_hash_tbl; /*** hash table for better performance URL lookup ***/ dlhash *fn_hash_tbl; /*** hash table for better performance filename lookup ***/ dllist *last_used_proxy_node; /*** pointer to last used proxy node ***/ long docnr; /*** current number of document ***/ #ifdef HAVE_MT time_t timestamp; time_t cfg_changed; /*** timestamp for cfg struct last change ***/ pthread_key_t currdoc_key; pthread_key_t herrno_key; pthread_key_t thrnr_key; pthread_key_t privcfg_key; mt_semaphore nrunning_sem; mt_semaphore urlstack_sem; pthread_t mainthread; pthread_t *allthreads; long allthreadsnr; #endif #ifdef I_FACE bool_t done; /*** was done startup ? ***/ bool_t processing; /*** some URL is actualy in processing ***/ #endif } _config_struct_t; extern _config_struct_t cfg; #if defined(HAVE_MT) && defined(I_FACE) #if 0 /********************************************************************/ /* this structure contains corresponding field form _config_struct */ /* structure. when I don't want to use mutex(es) for locking of */ /* config structure when running multiple downloading threads, I */ /* I have to make copy of dynamicaly created config parameters to */ /* prevent segfaults when changing configuration from GUI */ /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ /* !!!!!!!!!! Not realy used, only to know which fields !!!!!!!!!!! */ /* !!!!!!!!!! are used from private copy !!!!!!!!!!! */ /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ /********************************************************************/ typedef struct { time_t timestamp; char *default_prefix; char *info_dir; char *subdir; char *cache_dir; char *post_cmd; char *http_proxy_pass; char *http_proxy_user; char *ftp_proxy_pass; char *ftp_proxy_user; char *ftp_proxy; char *gopher_proxy; char *name_auth; char *passwd_auth; char *index_name; char *store_name; char *from; char *identity; char *auth_ntlm_domain; char *auth_proxy_ntlm_domain; char *ftp_list_options; char **accept_lang; char **accept_chars; char **cookies_disabled_domains; char **dont_touch_url_pattern; cond condition; dllist *formdata; dllist *lfnames; dllist *http_headers; dllist *js_patterns; dllist *js_transform; dllist *ftp_login_hs; char *tr_del_chr; char *tr_str_s1; char *tr_str_s2; char *tr_chr_s1; char *tr_chr_s2; #ifdef HAVE_REGEX dllist *advert_res; dllist *js_patterns; dllist *js_transform; dllist *dont_touch_url_rpattern; dllist *dont_touch_tag_rpattern; #endif #ifdef HAVE_MOZJS char *js_script_file; #endif #ifdef HAVE_BDB_18x char *ns_cache_dir; char *moz_cache_dir; #endif #ifdef USE_SSL char *ssl_proxy; char *ssl_cipher_list; char *ssl_cert_file; char *ssl_key_file; char *ssl_cert_passwd; char *egd_socket; #endif } _config_struct_priv_t; #endif /* 0 */ #define _config_struct_priv_t _config_struct_t extern void privcfg_make_copy(_config_struct_priv_t *); extern void privcfg_free(_config_struct_priv_t *); #define priv_cfg (*((_config_struct_priv_t *)pthread_getspecific(cfg.privcfg_key))) #define _MT_CFGSTAMP cfg.cfg_changed = time(NULL) #else #define priv_cfg cfg #define _MT_CFGSTAMP #endif typedef enum { PARAM_NUM, /* integer number */ PARAM_PBOOL, /* positive bool_tean */ PARAM_NBOOL, /* negative bool_tean */ PARAM_STR, /* single string */ PARAM_PASS, /* password string */ PARAM_STRLIST, /* comma separated list of strings */ PARAM_CONN, /* connection - host[:port] */ PARAM_AUTHSCH, /* authorization scheme - 1/2/3 */ PARAM_MODE, /* operation mode - mode.c */ PARAM_PATH, /* file/dir path */ PARAM_TIME, /* time string - YYYY.MM.DD.HH:mm */ PARAM_HTMLTAG, /* HTML tags specification */ PARAM_TWO_QSTR, /* two quoted strings */ PARAM_DOUBLE, /* double number */ PARAM_LFNAME, /* for -fnrules option */ PARAM_RE, /* list of regular expressions */ PARAM_USTRAT, /* url strategie - -strategie */ PARAM_SSLVER, /* ssl version - ssl23/ssl2/ssl3/tls1 */ PARAM_HTTPHDR, /* additional HTTP header */ PARAM_DEBUGL, /* debug level - debugl.c */ PARAM_REQUEST, /* extended request specification */ PARAM_PROXY, /* proxy specification - host:port */ PARAM_TRANSPARENT, /* proxy specification - host:port */ PARAM_FUNC, /* exec function for this param type */ PARAM_JSTRANS, /* for -js_transform option */ PARAM_NUMLIST, /* list of integer numbers -[ad]port */ PARAM_FTPHS, /* for FTP -ftp_login_handshake */ PARAM_TAGPAT, /* for HTML tag patterns */ PARAM_PORT_RANGE /* for TCP/IP port ranges */ } par_type_t; /* this is to support parameters of foreign libraries (like gtk) */ #define PARAM_FOREIGN (1 << 29) /* this is for marking option as unsupported in current compile time */ /* configuration. This will allow to accept unsupported option on */ /* commandline just throwing warning insted of trowing error and exit. */ #define PARAM_UNSUPPORTED (1 << 30) typedef struct _cfg_param { char *short_cmd; char *long_cmd; char *par_entry; par_type_t type; void *default_val; void *val_adr; void *mdefault_val; void *mval_adr; char *help; } cfg_param_t; extern char *get_strategie_label(strategie); extern void usage(void); extern void usage_short(void); extern void cfg_setup_default(void); extern void cfg_set_all_to_default(void); extern void cfg_setup_cmdln(int, char **); extern int cfg_load(const char *); extern void cfg_load_setup(void); extern int cfg_dump(const char *); extern int cfg_dump_cmd(const char *); extern int cfg_dump_cmd_fd(int); extern void cfg_free_params(void); extern int cfg_dump_pref(void); extern int cfg_load_pref(void); extern int cfg_get_num_params(cfg_param_t *); extern void pavuk_do_at_exit(void); #define PAVUK_EXIT_OK 0 /* everything goes as expected */ #define PAVUK_EXIT_CFG_ERR 1 /* configuration error */ #define PAVUK_EXIT_DOC_ERR 2 /* some of documents failed */ #endif pavuk-0.9.35/src/debugl.c0000644000175000001440000001036610142077736012065 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "debugl.h" #include "tools.h" #include "string.h" #ifdef DEBUG debug_level_type cfg_debug_levels[] = { {DLV1, "html", gettext_nop("HTML parsers")}, {DLV2, "protos", gettext_nop("Server responses")}, {DLV3, "protoc", gettext_nop("Client requests")}, {DLV4, "procs", gettext_nop("Procedure calling")}, {DLV5, "locks", gettext_nop("File locking")}, {DLV6, "net", gettext_nop("Networking code")}, {DLV7, "misc", gettext_nop("Miscelanous")}, {DLV8, "user", gettext_nop("Extended user infos")}, {DLV9, "mtlock", gettext_nop("Multithreading - locking")}, {DLV10, "mtthr", gettext_nop("Multithreading - threads")}, {DLV11, "protod", gettext_nop("POST request data")}, {DLV12, "limits", gettext_nop("Limiting conditions")}, {DLV13, "ssl", gettext_nop("SSL informations")}, {0, NULL, NULL} }; int debug_level_parse(char *str) { int dl = 0; char *p = str; int l, i; bool_t found; while(*p) { p += strspn(p, ","); l = strcspn(p, ","); found = FALSE; for(i = 0; cfg_debug_levels[i].id; i++) { if(!strncasecmp(p, cfg_debug_levels[i].option, l) && (l == strlen(cfg_debug_levels[i].option))) { found = TRUE; dl |= cfg_debug_levels[i].id; break; } } if(!found && !strncasecmp(p, "all", l)) { dl = 0x7fffffff; } else if(!found) { char *ep; i = strtol(p, &ep, 0); if((ep - p) != l) { xprintf(0, gettext("Bad debug level selection : %s\n"), str); return -1; } else dl |= i; } p += l; } return dl; } char *debug_level_construct(int level, char *strbuf) { bool_t frst = TRUE; int i; if(!level) { strcpy(strbuf, "0"); return strbuf; } for(i = 0; cfg_debug_levels[i].id; i++) { if(!(cfg_debug_levels[i].id & level)) continue; if(!frst) strcat(strbuf, ","); strcat(strbuf, cfg_debug_levels[i].option); frst = FALSE; } return strbuf; } #endif #ifndef __GNUC__ void DEBUG_HTML(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV1, str, &args); va_end(args); #endif } void DEBUG_PROTOS(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV2, str, &args); va_end(args); #endif } void DEBUG_PROTOC(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV3, str, &args); va_end(args); #endif } void DEBUG_PROCS(char *str) { #ifdef DEBUG xdebug(DLV4, "calling - %s\n", str); #endif } void DEBUG_PROCE(char *str) { #ifdef DEBUG xdebug(DLV4, "exiting - %s\n", str); #endif } void DEBUG_LOCKS(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV5, str, &args); va_end(args); #endif } void DEBUG_NET(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV6, str, &args); va_end(args); #endif } void DEBUG_MISC(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV7, str, &args); va_end(args); #endif } void DEBUG_USER(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV8, str, &args); va_end(args); #endif } void DEBUG_MTLOCK(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV9, str, &args); va_end(args); #endif } void DEBUG_MTTHR(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV10, str, &args); va_end(args); #endif } void DEBUG_PROTOD(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV11, str, &args); va_end(args); #endif } void DEBUG_LIMITS(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV12, str, &args); va_end(args); #endif } void DEBUG_SSL(char *str, ...) { #ifdef DEBUG va_list args; va_start(args, str); xvadebug(DLV13, str, &args); va_end(args); #endif } #endif pavuk-0.9.35/src/debugl.h0000644000175000001440000000775010142077736012075 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _debugl_h_ #define _debugl_h_ #define DLV1 (1U << 0) #define DLV2 (1U << 1) #define DLV3 (1U << 2) #define DLV4 (1U << 3) #define DLV5 (1U << 4) #define DLV6 (1U << 5) #define DLV7 (1U << 6) #define DLV8 (1U << 7) #define DLV9 (1U << 8) #define DLV10 (1U << 9) #define DLV11 (1U << 10) #define DLV12 (1U << 11) #define DLV13 (1U << 12) #define DLV14 (1U << 13) #define DLV15 (1U << 14) #define DLV16 (1U << 15) #define DLV17 (1U << 16) #define DLV18 (1U << 17) #define DLV19 (1U << 18) #define DLV20 (1U << 19) #define DLV21 (1U << 20) #define DLV22 (1U << 21) #define DLV23 (1U << 22) #define DLV24 (1U << 23) #define DLV25 (1U << 24) #define DLV26 (1U << 25) #define DLV27 (1U << 26) #define DLV28 (1U << 27) #define DLV29 (1U << 28) #define DLV30 (1U << 29) #define DLV31 (1U << 30) #ifdef DEBUG #ifdef __GNUC__ /*** for HTML debug messages ***/ #define DEBUG_HTML(s...) xdebug(DLV1 , ## s) /*** for server responses ***/ #define DEBUG_PROTOS(s...) xdebug(DLV2 , ## s) /*** for client requests ***/ #define DEBUG_PROTOC(s...) xdebug(DLV3 , ## s) /*** function start message ***/ #define DEBUG_PROCS(s) xdebug(DLV4 , "calling - %s\n", s) /*** function exit message ***/ #define DEBUG_PROCE(s) xdebug(DLV4 , "exiting - %s\n", s) /*** locking ***/ #define DEBUG_LOCKS(s...) xdebug(DLV5 , ## s) /*** network stuff ***/ #define DEBUG_NET(s...) xdebug(DLV6 , ## s) /*** some misc debug messages ***/ #define DEBUG_MISC(s...) xdebug(DLV7 , ## s) /*** user level infos ***/ #define DEBUG_USER(s...) xdebug(DLV8 , ## s) /*** multithreading ***/ #define DEBUG_MTLOCK(s...) xdebug(DLV9 , ## s) #define DEBUG_MTTHR(s...) xdebug(DLV10 , ## s) #define DEBUG_PROTOD(s...) xdebug(DLV11 , ## s) #define DEBUG_LIMITS(s...) xdebug(DLV12 , ## s) #define DEBUG_SSL(s...) xdebug(DLV13 , ## s) #else extern void DEBUG_HTML(char *, ...); extern void DEBUG_PROTOS(char *, ...); extern void DEBUG_PROTOC(char *, ...); extern void DEBUG_PROCS(char *); extern void DEBUG_PROCE(char *); extern void DEBUG_LOCKS(char *, ...); extern void DEBUG_NET(char *, ...); extern void DEBUG_MISC(char *, ...); extern void DEBUG_USER(char *, ...); extern void DEBUG_MTLOCK(char *, ...); extern void DEBUG_MTTHR(char *, ...); extern void DEBUG_PROTOD(char *, ...); extern void DEBUG_LIMITS(char *, ...); extern void DEBUG_SSL(char *, ...); #endif typedef struct { long id; char *option; char *label; } debug_level_type; extern debug_level_type cfg_debug_levels[]; extern int debug_level_parse(char *); extern char *debug_level_construct(int, char *); #else #ifdef __GNUC__ #define DEBUG_HTML(s...) #define DEBUG_PROTOS(s...) #define DEBUG_PROTOC(s...) #define DEBUG_URL(s...) #define DEBUG_PROCS(s...) #define DEBUG_PROCE(s...) #define DEBUG_LOCKS(s...) #define DEBUG_NET(s...) #define DEBUG_MISC(s...) #define DEBUG_USER(s...) #define DEBUG_MTLOCK(s...) #define DEBUG_MTTHR(s...) #define DEBUG_PROTOD(s...) #define DEBUG_LIMITS(s...) #define DEBUG_SSL(s...) #else extern void DEBUG_HTML(char *, ...); extern void DEBUG_PROTOS(char *, ...); extern void DEBUG_PROTOC(char *, ...); extern void DEBUG_PROCS(char *); extern void DEBUG_PROCE(char *); extern void DEBUG_LOCKS(char *, ...); extern void DEBUG_NET(char *, ...); extern void DEBUG_MISC(char *, ...); extern void DEBUG_USER(char *, ...); extern void DEBUG_MTLOCK(char *, ...); extern void DEBUG_MTTHR(char *, ...); extern void DEBUG_PROTOD(char *, ...); extern void DEBUG_LIMITS(char *, ...); extern void DEBUG_SSL(char *, ...); #endif #endif #endif pavuk-0.9.35/src/recurse.c0000644000175000001440000007325010400623655012266 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "url.h" #include "doc.h" #include "tools.h" #include "html.h" #include "http.h" #include "ftp.h" #include "myssl.h" #include "abstract.h" #include "recurse.h" #include "mime.h" #include "robots.h" #include "mode.h" #include "times.h" #include "stats.h" #include "errcode.h" #include "cookie.h" #include "log.h" #include "gui_api.h" #include "form.h" #include "ainterface.h" #include "gcinfo.h" static void dump_ftp_list(dllist *); static void dump_urls_list(dllist *); #define SETNEXTURL doc_cleanup(docu); \ _free(pstr); \ return docu->errcode; #ifdef HAVE_MT static void _sigintthr(int nr) { #ifdef I_FACE if(!cfg.processing) { exit(0); } #endif errno = EINTR; cfg.stop = TRUE; cfg.rbreak = TRUE; } static void _sigquitthr(int nr) { pthread_exit(NULL); } #endif static void reschedule_url(url * urlp) { DEBUG_MISC(gettext("Rescheduling locked URL as no. %d\n"), cfg.total_cnt); LOCK_CFG_URLSTACK; cfg.urlstack = dllist_append(cfg.urlstack, (dllist_t) urlp); #ifdef HAVE_MT mt_semaphore_up(&cfg.urlstack_sem); #endif cfg.total_cnt++; UNLOCK_CFG_URLSTACK; } static void run_post_command(doc * docp) { char *urlstr; char *cmd; DEBUG_MISC(gettext("Running post-processing command\n")); urlstr = url_to_urlstr(docp->doc_url, TRUE); cmd = tl_str_concat(NULL, priv_cfg.post_cmd, " \'", url_to_filename(docp->doc_url, FALSE), docp->is_parsable ? "\' 1 \'" : "\' 0 \'", urlstr, "\'", NULL); _free(urlstr); tl_system(cmd); _free(cmd); } static void add_matching_form(doc * docp, int nform, url_info * ui) { char *ftext; int flen; form_info *fi; dllist *ptr, *fields, *sfields; url_info *nui; if(!(ftext = form_get_text(nform, docp->contents, docp->size, &flen))) { return; } fi = form_parse(ftext, flen); if(!fi) return; /* copy all fields supplied on cmdln */ fields = NULL; for(ptr = ui->fields; ptr; ptr = ptr->next) { fields = dllist_prepend(fields, (dllist_t) form_field_duplicate((form_field *) ptr->data)); } /* copy all suitable fields from HTML form */ sfields = NULL; form_get_default_successful(NULL, fi->infos, &sfields); for(; sfields; sfields = dllist_remove_entry(sfields, sfields)) { form_field *ff = (form_field *) sfields->data; if(dllist_find2(fields, (dllist_t) ff, form_field_compare_name)) { _free(ff->name); _free(ff->value); _free(ff); } else { fields = dllist_prepend(fields, (dllist_t) ff); } } nui = url_info_new(fi->action); nui->type = URLI_FORM; nui->fields = fields; nui->encoding = fi->encoding; nui->method = fi->method; nui->localname = tl_strdup(ui->localname); form_free(fi); append_starting_url(nui, docp->doc_url); url_info_free(nui); } static void add_matching_forms(doc * docp, dllist * formlist) { dllist *fptr, *uptr; int nform; for(fptr = formlist, nform = 0; fptr; fptr = fptr->next, nform++) { url *urlp; urlp = url_parse((char *) fptr->data); assert(urlp->type != URLT_FROMPARENT); if((urlp->type != URLT_HTTP) && (urlp->type != URLT_HTTPS)) { free_deep_url(urlp); _free(urlp); continue; } free_deep_url(urlp); _free(urlp); for(uptr = priv_cfg.formdata; uptr; uptr = uptr->next) { url_info *ui = (url_info *) uptr->data; if(!strcmp(ui->urlstr, (char *) fptr->data)) { add_matching_form(docp, nform, ui); } } } } int process_document(doc * docu, int check_lim) { url *urlr; int nreget = 0, nredir = 0, pokus = 0; time_t atm; char cpom[64]; char *pstr = NULL; int store_stat; struct stat estat; urlr = docu->doc_url; docu->check_limits = check_lim; _Xt_Serve; if(docu->check_limits) docu->check_limits = (urlr->parent_url != NULL); while(!cfg.stop && !cfg.rbreak) { _free(docu->ftp_pasv_host); docu->errcode = ERR_NOERROR; docu->mime = NULL; docu->type_str = NULL; docu->doc_url = urlr; docu->dtime = 0L; docu->contents = NULL; docu->is_chunked = FALSE; docu->read_chunksize = FALSE; docu->read_trailer = FALSE; docu->ftp_fatal_err = FALSE; pstr = url_to_urlstr(urlr, FALSE); if(pokus) xprintf(1, gettext("retry no. %d\n"), pokus); #ifdef HAVE_MT xprintf(1, gettext("URL[%2d]: %5d(%d) of %5d %s\n"), docu->threadnr + 1, docu->doc_nr, cfg.fail_cnt, cfg.total_cnt, pstr); #else xprintf(1, gettext("URL: %5d(%d) of %5d %s\n"), docu->doc_nr, cfg.fail_cnt, cfg.total_cnt, pstr); #endif #ifdef I_FACE if(cfg.xi_face) { gui_set_doccounter(); gui_set_url(pstr); gui_set_status(gettext("Starting download")); } #endif /*** to be able to revisit moved documents ***/ /*** especially for authorization purposes ***/ if((urlr->status & URL_PROCESSED) && urlr->moved_to && nredir) { urlr->status &= ~URL_PROCESSED; } if(docu->check_limits) { cond_info_t condp; condp.level = 2; condp.urlnr = docu->doc_nr; condp.size = 0; condp.time = 0L; condp.mimet = NULL; condp.full_tag = NULL; condp.params = NULL; condp.html_doc = NULL; condp.html_doc_offset = 0; condp.tag = NULL; condp.attrib = NULL; if(urlr->status & URL_PROCESSED) { xprintf(1, gettext("Already processed\n")); docu->errcode = ERR_PROCESSED; SETNEXTURL; } if(urlr->status & URL_USER_DISABLED) { xprintf(1, gettext("Disallowed by user\n")); docu->errcode = ERR_UDISABLED; SETNEXTURL; } if(!prottable[urlr->type].supported || (urlr->parent_url && (urlr->type == URLT_FTP || urlr->type == URLT_FTPS) && urlr->p.ftp.dir && !cfg.condition.ftpdir) || (urlr->parent_url && !url_append_condition(urlr, &condp))) { xprintf(1, gettext("Disallowed by rules\n")); urlr->status |= URL_REJECTED; docu->errcode = ERR_RDISABLED; SETNEXTURL; } gui_set_status(gettext("Checking \"robots.txt\"")); if(!robots_check(urlr)) { xprintf(1, gettext("Disallowed by \"robots.txt\"\n")); urlr->status |= URL_REJECTED; docu->errcode = ERR_RDISABLED; SETNEXTURL; } } if(cfg.mode == MODE_FTPDIR && (urlr->type != URLT_FTP && urlr->type != URLT_FTPS)) { xprintf(1, gettext("This URL type is not supported with ftpdir mode\n")); urlr->status |= URL_REJECTED; docu->errcode = ERR_RDISABLED; SETNEXTURL; } _Xt_Serve; if(cfg.mode == MODE_SYNC) { char *pp = url_to_filename(urlr, TRUE); if(!stat(pp, &estat) && !S_ISDIR(estat.st_mode)) { atm = time(NULL) - 86400 * cfg.ddays; /* pro: We do not want the message "No transfer - file not expired" if the server's clock is ahead of our clock. If no parameter cfg.ddays is given, then we do not compare the file modification times. */ if(cfg.ddays == 0 || estat.st_mtime < atm) docu->dtime = estat.st_mtime; else { xprintf(1, gettext("No transfer - file not expired\n")); urlr->status |= URL_REJECTED; docu->errcode = ERR_RDISABLED; SETNEXTURL; } urlr->status |= URL_ISLOCAL; docu->origsize = estat.st_size; } } if(cfg.show_time) { atm = time(NULL); LOCK_TIME; strftime(cpom, sizeof(cpom), "%H:%M:%S", localtime(&atm)); UNLOCK_TIME; xprintf(1, gettext("Starting time : %s\n"), cpom); } #ifdef I_FACE if(cfg.stop || cfg.rbreak) { _free(pstr); break; } #endif _Xt_Serve; if((urlr->type == URLT_FTP || urlr->type == URLT_FTP) && urlr->extension && ((ftp_url_extension *) urlr->extension)->type == FTP_TYPE_L && ((ftp_url_extension *) urlr->extension)->slink) { if(cfg.retrieve_slink) { /** need to kill extension, because we must **/ /** guess the file type beside the symlink **/ ftp_url_ext_free(urlr->extension); urlr->extension = NULL; } else { ftp_make_symlink(urlr); urlr->status |= URL_PROCESSED; docu->errcode = ERR_NOERROR; SETNEXTURL; } } gui_set_status(gettext("Starting download")); if(doc_download(docu, FALSE, FALSE)) { if(cfg.show_time) { atm = time(NULL); LOCK_TIME; strftime(cpom, sizeof(cpom), "%H:%M:%S", localtime(&atm)); UNLOCK_TIME; xprintf(1, gettext("Ending time : %s\n"), cpom); } _Xt_Serve; doc_remove_lock(docu); _free(docu->contents); report_error(docu, gettext("download")); DEBUG_USER("Error status code - (%d)\n"); if((nreget < cfg.nreget && (docu->errcode == ERR_HTTP_TRUNC || docu->errcode == ERR_FTP_TRUNC || docu->errcode == ERR_LOW_TRANSFER_RATE || docu->errcode == ERR_HTTP_FAILREGET || docu->errcode == ERR_HTTP_TIMEOUT || docu->errcode == ERR_HTTP_GW_TIMEOUT)) || (nredir < cfg.nredir && docu->errcode == ERR_HTTP_REDIR) || (docu->errcode == ERR_HTTP_AUTH) || (docu->errcode == ERR_HTTP_PROXY_AUTH)) { if(docu->errcode == ERR_HTTP_REDIR) { urlr->status |= URL_PROCESSED; if((urlr->moved_to->status & URL_PROCESSED) && (!urlr->moved_to->moved_to)) { SETNEXTURL; } else { #ifdef I_FACE if(cfg.xi_face) gui_tree_set_icon_for_doc(docu); #endif urlr = urlr->moved_to; } } if(docu->errcode == ERR_HTTP_TRUNC) { urlr->status |= URL_TRUNCATED; _free(docu->etag); docu->etag = get_mime_param_val_str("ETag:", docu->mime); if(!docu->etag) docu->etag = get_mime_param_val_str("Content-Location:", docu->mime); if(!docu->etag) docu->etag = get_mime_param_val_str("Last-Modified", docu->mime); } if(docu->errcode == ERR_HTTP_AUTH) { docu->doc_url->status |= URL_PROCESSED; docu->doc_url->status |= URL_ERR_REC; SETNEXTURL; } if(docu->errcode == ERR_HTTP_PROXY_AUTH) { docu->doc_url->status |= URL_PROCESSED; docu->doc_url->status |= URL_ERR_REC; SETNEXTURL; } _free(docu->mime); _free(docu->type_str); nreget += (docu->errcode == ERR_HTTP_TRUNC || docu->errcode == ERR_FTP_TRUNC) && cfg.mode != MODE_SREGET; nredir += (docu->errcode == ERR_HTTP_REDIR); _free(pstr); continue; } if(docu->errcode == ERR_FTP_UNKNOWN || docu->errcode == ERR_FTP_CONNECT || docu->errcode == ERR_FTP_DATACON || docu->errcode == ERR_FTPS_CONNECT || docu->errcode == ERR_FTPS_DATASSLCONNECT || docu->errcode == ERR_HTTP_UNKNOWN || docu->errcode == ERR_HTTP_CONNECT || docu->errcode == ERR_HTTP_SNDREQ || docu->errcode == ERR_HTTP_SNDREQDATA || docu->errcode == ERR_HTTP_RCVRESP || docu->errcode == ERR_HTTP_SERV || docu->errcode == ERR_HTTP_TIMEOUT || docu->errcode == ERR_HTTP_PROXY_CONN || docu->errcode == ERR_HTTPS_CONNECT || docu->errcode == ERR_READ || docu->errcode == ERR_ZERO_SIZE || docu->errcode == ERR_GOPHER_CONNECT || docu->errcode == ERR_PROXY_CONNECT || docu->errcode == ERR_HTTP_SERV) { urlr->status |= URL_ERR_REC; pokus++; /*** retry only when allowed ***/ if(pokus >= cfg.nretry) { urlr->status |= URL_PROCESSED; SETNEXTURL; } _free(pstr); _free(docu->mime); _free(docu->type_str); continue; } else if(docu->errcode == ERR_LOCKED) { if(!cfg.urlstack) { xprintf(1, gettext("last document locked -> sleeping for 5 seconds\n")); tl_sleep(5); } reschedule_url(urlr); SETNEXTURL; } else if(docu->errcode == ERR_BIGGER || docu->errcode == ERR_SMALLER || docu->errcode == ERR_NOMIMET || docu->errcode == ERR_OUTTIME || docu->errcode == ERR_SCRIPT_DISABLED) { urlr->status |= URL_PROCESSED; urlr->status |= URL_ERR_REC; SETNEXTURL; } else { /*** remove improper documents if required ***/ if((cfg.remove_old && (cfg.mode == MODE_SYNC || cfg.mode == MODE_MIRROR)) && (((docu->errcode == ERR_FTP_GET || docu->errcode == ERR_FTP_BDIR || docu->errcode == ERR_FTP_NODIR) && docu->ftp_respc == 550) || docu->errcode == ERR_HTTP_NFOUND || docu->errcode == ERR_HTTP_GONE)) { doc_remove(docu->doc_url); } urlr->status |= URL_ERR_UNREC; urlr->status |= URL_PROCESSED; SETNEXTURL; } } _Xt_Serve; if(urlr->status & URL_TRUNCATED) urlr->status &= ~URL_TRUNCATED; if(urlr->status & URL_ERR_REC) urlr->status &= ~URL_ERR_REC; if(cfg.show_time) { atm = time(NULL); LOCK_TIME; strftime(cpom, sizeof(cpom), "%H:%M:%S", localtime(&atm)); UNLOCK_TIME; xprintf(1, gettext("Ending time : %s\n"), cpom); } report_error(docu, gettext("download")); _Xt_Serve; if(docu->contents) { if(docu->is_parsable) { dllist *formlist = NULL; dllist *urls; gui_set_status(gettext("Relocating and scanning HTML document")); urls = html_process_document(docu, priv_cfg.formdata ? &formlist : NULL); _Xt_Serve; if(urls && cfg.dump_urlfd >= 0) { dump_urls_list(urls); } if(priv_cfg.formdata && formlist) { add_matching_forms(docu, formlist); while(formlist) { if(formlist->data) free((void *) formlist->data); formlist = dllist_remove_entry(formlist, formlist); } } if(cfg.mode != MODE_SREGET && cfg.mode != MODE_FTPDIR && !(docu->doc_url->status & URL_NORECURSE)) { gui_tree_add_start(); cat_links_to_url_list(urls); gui_tree_add_end(); } else if(cfg.mode == MODE_FTPDIR) { dump_ftp_list(urls); } else { for(; urls; urls = dllist_remove_entry(urls, urls)) { free_deep_url((url *) urls->data); if(urls->data) free((url *)urls->data); } } _Xt_Serve; } store_stat = 0; if(cfg.dumpfd >= 0 && cfg.dump_after) { bufio *fd; gui_set_status(gettext("Dumping processed document")); LOCK_DUMPFD; fd = bufio_dupfd(cfg.dumpfd); if(docu->mime && cfg.dump_resp) bufio_write(fd, docu->mime, strlen(docu->mime)); bufio_write(fd, docu->contents, docu->size); bufio_close(fd); UNLOCK_DUMPFD; } else if((docu->doc_url->type != URLT_FILE) && !(docu->doc_url->status & URL_REDIRECT) && (docu->errcode != ERR_HTTP_ACTUAL) && (docu->errcode != ERR_FTP_ACTUAL) && (cfg.mode != MODE_NOSTORE) && (cfg.dumpfd < 0) && (cfg.mode != MODE_FTPDIR)) { gui_set_status(gettext("Storing document")); store_stat = doc_store(docu, TRUE); if(store_stat) { xprintf(1, gettext("Store failed\n")); urlr->status &= ~URL_ERR_REC; } } _Xt_Serve; if(priv_cfg.post_cmd) run_post_command(docu); doc_remove_lock(docu); doc_update_parent_links(docu); } else { if(priv_cfg.post_cmd) run_post_command(docu); doc_remove_lock(docu); doc_update_parent_links(docu); } urlr->status |= URL_DOWNLOADED; urlr->status |= URL_PROCESSED; SETNEXTURL; } return ERR_UNKNOWN; } #ifdef I_FACE int download_single_doc(url * urlp) { int rv; doc docu; global_connection_info con_info; #if defined(HAVE_MT) && defined(I_FACE) _config_struct_priv_t privcfg; #if defined (__OSF__) || defined (__osf__) #define __builtin_try #define __builtin_finally #endif privcfg_make_copy(&privcfg); pthread_setspecific(cfg.privcfg_key, (void *) (&privcfg)); pthread_cleanup_push((void *) privcfg_free, (void *) (&privcfg)); #endif gui_start_download(FALSE); #ifdef HAVE_MT { sigset_t smask; sigemptyset(&smask); sigaddset(&smask, SIGINT); sigaddset(&smask, SIGQUIT); pthread_sigmask(SIG_UNBLOCK, &smask, NULL); signal(SIGINT, _sigintthr); signal(SIGQUIT, _sigquitthr); } pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_setspecific(cfg.thrnr_key, (void *) 0); DEBUG_MTTHR("starting thread(%ld) %d\n", pthread_self(), 0); cfg.allthreadsnr = 0; gui_mt_thread_start(cfg.allthreadsnr); #endif cfg.rbreak = FALSE; cfg.stop = FALSE; cfg.processing = TRUE; doc_init(&docu, urlp); #ifdef HAVE_MT docu.threadnr = 0; pthread_setspecific(cfg.currdoc_key, (void *) NULL); pthread_setspecific(cfg.herrno_key, (void *) (&(docu.__herrno))); #endif rv = process_document(&docu, FALSE); init_global_connection_data(&con_info); save_global_connection_data(&con_info, &docu); kill_global_connection_data(&con_info); cfg.processing = FALSE; cfg.rbreak = FALSE; cfg.stop = FALSE; #if defined(HAVE_MT) && defined(I_FACE) pthread_cleanup_pop(TRUE); #endif #ifdef HAVE_MT doc_finish_processing(&docu); cfg.allthreadsnr = 0; gui_mt_thread_end(0); #endif gui_beep(); gui_set_msg(gettext("Done"), 0); return rv; } #endif /*********************************************/ /* rekurzivne prechadzanie stromu dokumentov */ /* FIXME: Translate me! */ /*********************************************/ #ifdef HAVE_MT static void _recurse(int thnr) #else void recurse(int thnr) #endif { bool_t rbreaksave, stopsave; global_connection_info con_info; if(cfg.urlstack == NULL) return; init_global_connection_data(&con_info); /**** obsluzenie vsetkych URL v zozname ****/ /**** FIXME: Translate me! ****/ while(cfg.urlstack && !cfg.stop) { doc docu; url *urlp; LOCK_CFG_URLSTACK; if(cfg.urlstack) { urlp = (url *) cfg.urlstack->data; cfg.urlstack = dllist_remove_entry(cfg.urlstack, cfg.urlstack); #ifdef HAVE_MT mt_semaphore_decrement(&cfg.urlstack_sem); #endif UNLOCK_CFG_URLSTACK; } else { UNLOCK_CFG_URLSTACK; break; } doc_init(&docu, urlp); #ifdef HAVE_MT docu.threadnr = thnr; pthread_setspecific(cfg.currdoc_key, (void *) (&docu)); pthread_setspecific(cfg.herrno_key, (void *) (&(docu.__herrno))); #endif LOCK_DCNT; cfg.docnr++; docu.doc_nr = cfg.docnr; UNLOCK_DCNT; restore_global_connection_data(&con_info, &docu); process_document(&docu, TRUE); save_global_connection_data(&con_info, &docu); #ifdef HAVE_MT doc_finish_processing(&docu); #endif if(docu.errcode == ERR_QUOTA_FS || docu.errcode == ERR_QUOTA_TRANS || docu.errcode == ERR_QUOTA_TIME || cfg.rbreak) { LOCK_CFG_URLSTACK; cfg.docnr--; cfg.urlstack = dllist_prepend(cfg.urlstack, (dllist_t) urlp); #ifdef HAVE_MT mt_semaphore_up(&cfg.urlstack_sem); #endif UNLOCK_CFG_URLSTACK; break; } } #if defined(I_FACE) && !defined(HAVE_MT) if(cfg.xi_face) { gui_set_status(gettext("Done")); } #endif #ifdef I_FACE if(cfg.xi_face) gui_set_doccounter(); #endif stopsave = cfg.stop; rbreaksave = cfg.rbreak; cfg.stop = FALSE; cfg.rbreak = FALSE; kill_global_connection_data(&con_info); if(cfg.update_cookies) { cookie_update_file(TRUE); } cfg.stop = stopsave; cfg.rbreak = rbreaksave; if(!cfg.rbreak && !cfg.stop && cfg.stats_file) { stats_fill_spage(cfg.stats_file, NULL); } } #ifdef HAVE_MT static void _recurse_thrd(int thrnr) { bool_t init = (thrnr == 0); #ifdef I_FACE _config_struct_priv_t privcfg; #endif { sigset_t smask; sigemptyset(&smask); sigaddset(&smask, SIGINT); sigaddset(&smask, SIGQUIT); pthread_sigmask(SIG_UNBLOCK, &smask, NULL); signal(SIGINT, _sigintthr); signal(SIGQUIT, _sigquitthr); } pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_setspecific(cfg.currdoc_key, (void *) NULL); pthread_setspecific(cfg.thrnr_key, (void *) thrnr); DEBUG_MTTHR("starting thread(%ld) %d\n", pthread_self(), thrnr); #ifdef I_FACE privcfg_make_copy(&privcfg); pthread_setspecific(cfg.privcfg_key, (void *) (&privcfg)); pthread_cleanup_push((void *) privcfg_free, (void *) (&privcfg)); #endif for(; !cfg.rbreak && !cfg.stop;) { int v; pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); DEBUG_MTTHR("thread %d awaking\n", thrnr); _recurse(thrnr); init = FALSE; gui_clear_status(); DEBUG_MTTHR("thread %d sleeping\n", thrnr); gui_set_status(gettext("Sleeping ...")); pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); mt_semaphore_up(&cfg.nrunning_sem); /* UN-critical section */ while(!cfg.stop && !cfg.rbreak && (v = mt_semaphore_timed_wait(&cfg.urlstack_sem, 400)) < 0); mt_semaphore_decrement(&cfg.nrunning_sem); } #ifdef I_FACE pthread_cleanup_pop(TRUE); #endif DEBUG_MTTHR("thread %d exiting\n", thrnr); gui_set_status(gettext("Exiting ...")); pthread_exit(NULL); } void recurse(int dumb) { pthread_attr_t thrdattr; int i; int num = cfg.nthr; sigset_t smask; sigemptyset(&smask); sigaddset(&smask, SIGINT); sigaddset(&smask, SIGQUIT); pthread_sigmask(SIG_UNBLOCK, &smask, NULL); signal(SIGQUIT, _sigquitthr); pthread_attr_init(&thrdattr); pthread_attr_setscope(&thrdattr, PTHREAD_SCOPE_SYSTEM); pthread_attr_setstacksize(&thrdattr, MT_STACK_SIZE); mt_semaphore_init(&cfg.nrunning_sem); if(num <= 0) num = 1; cfg.allthreadsnr = 0; cfg.allthreads = _malloc(num * sizeof(pthread_t)); mt_semaphore_decrement(&cfg.urlstack_sem); for(i = 0; i < num; i++) { if(!pthread_create(&(cfg.allthreads[cfg.allthreadsnr]), &thrdattr, (void *) _recurse_thrd, (void *) cfg.allthreadsnr)) { cfg.allthreadsnr++; gui_mt_thread_start(cfg.allthreadsnr); mt_semaphore_decrement(&cfg.nrunning_sem); } else { char pom[100]; sprintf(pom, "Create downloading thread %d", i); xperror(pom); } if(cfg.rbreak || cfg.stop) break; } while(!cfg.stop && !cfg.rbreak && mt_semaphore_timed_down(&cfg.nrunning_sem, 500) < 0); cfg.stop = TRUE; tl_msleep(300); for(i = 0; i < cfg.allthreadsnr; i++) { /* pthread_cancel(cfg.allthreads[i]); pthread_kill(cfg.allthreads[i], SIGQUIT); */ pthread_join(cfg.allthreads[i], NULL); } mt_semaphore_destroy(&cfg.nrunning_sem); _free(cfg.allthreads); cfg.allthreadsnr = 0; gui_mt_thread_end(0); } #endif static void dump_ftp_list(dllist * urllst) { dllist *ptr = urllst; while(ptr) { url *urlp = (url *) ptr->data; void *dupl; dupl = dllist_find2(ptr->next, (dllist_t) urlp, dllist_url_compare); if(!dupl && !(urlp->status & URL_INLINE_OBJ) && (urlp->type == URLT_FTP || urlp->type == URLT_FTPS)) { char *p, *pp; p = url_get_path(urlp); pp = strrchr(p, '/'); if(pp) { pp++; if(!*pp) { pp -= 2; while(pp > p && *pp != '/') pp--; pp++; } if(urlp->extension) { ftp_url_extension *fe = urlp->extension; if(fe->type == FTP_TYPE_F) xprintf(1, gettext("\t%s (%d bytes)\n"), pp, fe->size); else if(fe->type == FTP_TYPE_L) xprintf(1, "\t%s -> %s\n", pp, fe->slink); else if(fe->type == FTP_TYPE_D) xprintf(1, "\t%s/\n", pp, fe->slink); } else xprintf(1, "\t%s\n", pp); } } free_deep_url(urlp); free(urlp); ptr = dllist_remove_entry(ptr, ptr); } } static void dump_urls_list(dllist * urls) { dllist *ptr; LOCK_DUMPURLS; for(ptr = urls; ptr; ptr = ptr->next) { void *dupl; dupl = dllist_find2(ptr->next, (dllist_t) ptr->data, dllist_url_compare); if(!dupl) { char *ustr = url_to_urlstr((url *) ptr->data, FALSE); if(ustr) { write(cfg.dump_urlfd, ustr, strlen(ustr)); write(cfg.dump_urlfd, "\n", 1); free(ustr); } } } UNLOCK_DUMPURLS; } void get_urls_to_resume(char *dirname) { DIR *dir; struct dirent *dent; char next_dir[PATH_MAX]; struct stat estat; url *purl; if(!(dir = opendir(dirname))) { xperror(dirname); return; } gui_set_msg(gettext("Searching for files to resume"), 0); while((dent = readdir(dir))) { _Xt_Serve; snprintf(next_dir, sizeof(next_dir), "%s/%s", dirname, dent->d_name); if(!strcmp(dent->d_name, ".")) continue; if(!strcmp(dent->d_name, "..")) continue; if(lstat(next_dir, &estat)) { xperror(next_dir); continue; } if(S_ISDIR(estat.st_mode)) { if(!strcmp(dent->d_name, ".pavuk_info") && cfg.enable_info) continue; get_urls_to_resume(next_dir); } else if(!strncmp(".in_", dent->d_name, 4)) { snprintf(next_dir, sizeof(next_dir), "%s/%s", dirname, dent->d_name + 4); if((purl = filename_to_url(next_dir))) { if(cfg.mode != MODE_MIRROR) { xprintf(1, gettext("Adding %s to resume list\n"), next_dir); } purl->status |= URL_ISSTARTING; url_set_filename(purl, tl_strdup(next_dir)); append_url_to_list(purl); } } #ifdef I_FACE if(cfg.xi_face && (cfg.rbreak || cfg.stop)) break; #endif } closedir(dir); } void get_urls_to_synchronize(char *dirname, dllist ** list) { DIR *dir; struct dirent *dent; char next_dir[PATH_MAX]; struct stat estat; url *purl; if(!(dir = opendir(dirname))) { xperror(dirname); return; } gui_set_msg(gettext("Searching for documents to synchronize"), 0); while((dent = readdir(dir))) { _Xt_Serve; snprintf(next_dir, sizeof(next_dir), "%s/%s", dirname, dent->d_name); if(!strcmp(dent->d_name, ".")) continue; if(!strcmp(dent->d_name, "..")) continue; if(lstat(next_dir, &estat)) { xperror(next_dir); continue; } if(S_ISDIR(estat.st_mode)) { if(!strcmp(dent->d_name, ".pavuk_info") && cfg.enable_info) continue; strcat(next_dir, "/"); if((purl = filename_to_url(next_dir)) && purl->type == URLT_FTP && !cfg.store_index) { purl->status |= URL_ISSTARTING; purl->extension = ftp_url_ext_new(FTP_TYPE_D, -1, -1, NULL, 0); url_set_filename(purl, tl_str_concat(NULL, next_dir, priv_cfg.index_name, NULL)); *list = dllist_prepend(*list, (dllist_t) purl); } else if(purl) { free_deep_url(purl); _free(purl); } next_dir[strlen(next_dir) - 1] = '\0'; get_urls_to_synchronize(next_dir, list); } else if(cfg.enable_info && !strcmp(dent->d_name, ".lock")) { /* do nothing */ continue; } else if(!strncmp(".in_", dent->d_name, 4)) { snprintf(next_dir, sizeof(next_dir), "%s/%s", dirname, dent->d_name + 4); if((purl = filename_to_url(next_dir))) { char *ustr; ustr = url_to_urlstr(purl, FALSE); if(cfg.mode != MODE_MIRROR) { xprintf(1, gettext("Adding file %s to sync list as URL %s\n"), next_dir, ustr); } _free(ustr); if(purl->type == URLT_FTP) { int tp; if(purl->p.ftp.dir) tp = FTP_TYPE_D; else tp = FTP_TYPE_F; purl->extension = ftp_url_ext_new(tp, -1, -1, NULL, 0); } purl->status |= URL_ISSTARTING; url_set_filename(purl, tl_strdup(next_dir)); *list = dllist_prepend(*list, (dllist_t) purl); } } else { if((purl = filename_to_url(next_dir))) { char *ustr; ustr = url_to_urlstr(purl, FALSE); if(cfg.mode != MODE_MIRROR) { xprintf(1, gettext("Adding file %s to sync list as URL %s\n"), next_dir, ustr); } _free(ustr); if(purl->type == URLT_FTP) { int tp; if(purl->p.ftp.dir) tp = FTP_TYPE_D; #ifdef S_ISLNK else if(S_ISLNK(estat.st_mode)) tp = FTP_TYPE_L; #endif else tp = FTP_TYPE_F; purl->extension = ftp_url_ext_new(tp, -1, -1, NULL, 0); } purl->status |= URL_ISSTARTING; url_set_filename(purl, tl_strdup(next_dir)); *list = dllist_prepend(*list, (dllist_t) purl); } } #ifdef I_FACE if(cfg.xi_face && (cfg.rbreak || cfg.stop)) break; #endif } closedir(dir); } pavuk-0.9.35/src/recurse.h0000644000175000001440000000125010142077741012264 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _recurse_h_ #define _recurse_h_ #include "doc.h" #include "dllist.h" extern int process_document(doc *, int); extern int download_single_doc(url *); extern void recurse(int); extern void get_urls_to_resume(char *); extern void get_urls_to_synchronize(char *, dllist **); #endif pavuk-0.9.35/src/decode.c0000644000175000001440000001403010330157355012031 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include "config.h" #include "decode.h" #include "tools.h" #ifdef HAVE_ZLIB #include #endif #define BUFSIZE PATH_MAX /********************************************************/ /* zapise obsah pamete na adrese buf s dlzkou len */ /* na deskriptor fd */ /* FIXME: Translate me! */ /********************************************************/ static int writerm(int len, char *buf, int fd) { char *p = buf; int fsize = BUFSIZE; while(p < (buf + len)) { if((p + BUFSIZE) > (buf + len)) fsize = buf + len - p; if(write(fd, p, fsize) < 0) { return -1; } p += BUFSIZE; } return 0; } /********************************************************/ /* vypis subor do deskriptora fd */ /* FIXME: Translate me! */ /********************************************************/ static int writerf(char *fname, int fd) { char buf[BUFSIZE]; int len; int fnfd; fnfd = open(fname, O_BINARY | O_RDONLY); if(fnfd < 0) { perror(fname); return -1; } while((len = read(fnfd, buf, sizeof(buf))) > 0 || errno == EWOULDBLOCK) { if(write(fd, buf, len) != len) { close(fnfd); return -1; } } close(fnfd); return 0; } static char inflate_buffer[1024 * 1024]; int inflate_decode(char *inbuf, int insize, char **outbuf, ssize_t *outsize, char *fname) { #ifdef HAVE_ZLIB int i; unsigned long retlen; char *ret = 0; z_streamp zp; /* "deflate" inflation is tricky because there are two possible */ /* encodings. We try one, if that fails, we try the other. If */ /* that fails, we give up. */ retlen = sizeof(inflate_buffer); i = uncompress(inflate_buffer, &retlen, inbuf, insize); if(i == Z_OK) { ret = malloc(retlen); if(ret == 0) { fprintf(stderr, "inflate: out of memory\n"); } else { memcpy(ret, inflate_buffer, retlen); } *outbuf = ret; *outsize = retlen; return 0; } else if(i != Z_DATA_ERROR) { fprintf(stderr, "inflate: uncompress error %s\n", zError(i)); return -1; } zp = alloca(sizeof(z_stream)); assert(zp); /* If alloca fails we're doomed anyway */ zp->next_in = inbuf; zp->next_out = &inflate_buffer[0]; zp->avail_in = insize; zp->avail_out = sizeof(inflate_buffer); zp->zalloc = 0; zp->zfree = 0; zp->opaque = 0; *outbuf = 0; i = inflateInit(zp); if(i != Z_OK) { fprintf(stderr, "inflate: inflateInit error %s\n", zError(i)); if(zp->msg) fprintf(stderr, "zlib: %s\n", zp->msg); return -1; } if((i = inflate(zp, Z_FINISH)) == Z_STREAM_END) { ret = malloc(zp->avail_out); if(ret == 0) { fprintf(stderr, "Can't copy inflated file.\n"); } else { memcpy(ret, zp->next_out, zp->avail_out); } *outbuf = ret; *outsize = zp->avail_out; inflateEnd(zp); return 0; } else { if(i == Z_OK) { fprintf(stderr, "Whoops, coding problem.\n"); } else { fprintf(stderr, "inflate: inflate error %s\n", zError(i)); if(zp->msg) fprintf(stderr, "zlib: %s\n", zp->msg); } inflateEnd(zp); return -1; } #else fprintf(stderr, "inflate mode not supported.\n"); return -1; #endif } int gzip_decode(char *inbuf, int insize, char **outbuf, ssize_t *outsize, char *fname) { int writepipe[2]; pid_t pidg; char *out = NULL; int outcnt = 0, len; char buf[BUFSIZE]; bool_t err = TRUE; int outf; if(cfg.cache_dir) { snprintf(buf, sizeof(buf), "%s/pavuk_decoder.tmp.XXXXXX", cfg.cache_dir); } else { strncpy(buf, "pavuk_decoder.tmp.XXXXXX", sizeof(buf)); buf[sizeof(buf) - 1] = '\0'; } outf = tl_mkstemp(buf); if(outf == -1) { xperror("tl_mkstemp"); return -1; } unlink(buf); *outsize = 0; *outbuf = NULL; if(pipe(writepipe)) { xperror("pipe"); return -1; } pidg = fork(); if(pidg < 0) { xperror("fork"); close(writepipe[0]); close(writepipe[1]); return -1; } if(pidg == 0) { close(0); dup(writepipe[0]); close(writepipe[0]); close(writepipe[1]); #ifdef HAVE_ZLIB { gzFile gzfd; int ilen, olen; if(!(gzfd = gzdopen(0, "rb"))) { perror("gzdopen"); exit(1); } while((ilen = gzread(gzfd, buf, sizeof(buf))) > 0) { olen = write(outf, buf, ilen); if(olen != ilen) break; } if(ilen < 0) { int err; printf("decode: %s\n", gzerror(gzfd, &err)); exit(1); } else if(ilen) { perror("decode"); exit(1); } gzclose(gzfd); close(outf); exit(0); } exit(0); #else close(1); dup(outf); close(outf); execlp(GZIP_CMD, "gunzip", "-cf", NULL); xperror("gunzip exec"); exit(1); #endif } close(writepipe[0]); err = fname ? writerf(fname, writepipe[1]) : writerm(insize, inbuf, writepipe[1]); if(err) xperror(gettext("decode")); close(writepipe[1]); waitpid(pidg, NULL, 0); if((off_t) - 1 == lseek(outf, 0, SEEK_SET)) { close(outf); return -1; } while((len = read(outf, buf, sizeof(buf))) > 0) { out = (char *) _realloc(out, outcnt + len + 1); memcpy(out + outcnt, buf, len); outcnt += len; *(out + outcnt) = '\0'; } close(outf); *outsize = outcnt; *outbuf = out; return 0; } pavuk-0.9.35/src/decode.h0000644000175000001440000000127010327355341012041 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _decode_h_ #define _decode_h_ #define GZIP_CMD "gunzip" #ifdef NeedFunctionPrototypes extern int gzip_decode(char *, int, char **, ssize_t *, char *); extern int inflate_decode(char *, int, char **, ssize_t *, char *); #else extern int gzip_decode(); extern int inflate_decode(); #endif #endif pavuk-0.9.35/src/file.c0000644000175000001440000000246010142077737011537 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include #include "config.h" #include "stdio.h" #include "file.h" #include "url.h" #include "errcode.h" /********************************************************/ /* otvory subor pre dane FILE URL */ /* FIXME: Translate me! */ /********************************************************/ bufio *get_file_data_socket(doc *docp) { struct stat estat; if(stat(docp->doc_url->p.file.filename, &estat) == 0) { if(S_ISDIR(estat.st_mode)) { xprintf(1, gettext("Can't open directory\n")); docp->errcode = ERR_DIR_URL; return NULL; } docp->totsz = estat.st_size; } if(!(docp->datasock = bufio_open(docp->doc_url->p.file.filename, O_BINARY | O_RDONLY))) { docp->errcode = ERR_FILE_OPEN; xperror(docp->doc_url->p.file.filename); } return docp->datasock; } pavuk-0.9.35/src/file.h0000644000175000001440000000100410142077737011535 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef __file_h_ #define __file_h_ #include "doc.h" #include "bufio.h" extern bufio *get_file_data_socket(doc *); #endif pavuk-0.9.35/src/cookie.c0000644000175000001440000003467110170757105012075 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include "tools.h" #include "url.h" #include "times.h" #include "cookie.h" #include "bufio.h" static int cookies_num = 0; static cookie_entry *cookies = NULL; static cookie_entry *last_cookie = NULL; static int cookie_changed = 0; static time_t cookie_updated = 0L; enum CookieFileType { COOKIEFILETYPE_NS = 0, COOKIEFILETYPE_KDE2 = 1 }; enum CookieFileType cookiefiletype = COOKIEFILETYPE_NS; static void cookie_deep_free(cookie_entry * centry) { _free(centry->domain); _free(centry->path); _free(centry->name); _free(centry->value); _free(centry); } static void cookie_free_all(cookie_entry * centry) { cookie_entry *pce; for(pce = centry; pce; pce = pce->next) cookie_deep_free(pce); } static cookie_entry *cookie_get_last_entry(cookie_entry * centry, int *num) { if(num) *num = 0; if(!centry) return NULL; if(num) (*num)++; while(centry->next) { centry = centry->next; if(num) (*num)++; } return centry; } static void cookie_remove_oldest_entry(cookie_entry ** centry, cookie_entry ** lastentry, int *num) { cookie_entry *last = NULL; if(*lastentry) last = *lastentry; else last = cookie_get_last_entry(*centry, NULL); if(last && last->prev) { if(*centry == last) (*centry) = last->next; if(last->prev) last->prev->next = last->next; if(last->next) last->next->prev = last->prev; if(*lastentry) (*lastentry) = last->prev; cookie_deep_free(last); if(num) (*num)--; } } static int cookie_match(url * urlp, cookie_entry * cookiep) { int retv = TRUE; int cl, hl; char *c, *h; retv &= (urlp->type == URLT_HTTP) || (urlp->type == URLT_HTTPS); if(cookiep->secure) retv &= (urlp->type == URLT_HTTPS); retv &= !strncmp(urlp->p.http.document, cookiep->path, strlen(cookiep->path)); c = cookiep->domain; h = urlp->p.http.host; cl = strlen(c); hl = strlen(h); if(cl == hl+1 && cookiep->domain[0] == '.') ++c; else if(hl > cl) h += hl-cl; retv &= !strcasecmp(c, h); return retv; } static int cookie_eq(cookie_entry * c1, cookie_entry * c2) { return (!strcmp(c1->name, c2->name) && !strcmp(c1->domain, c2->domain) && !strcmp(c1->path, c2->path)); } static cookie_entry *cookie_parse_ns(char *line) { cookie_entry *centry; char *p, *strtokbuf; int i; char *ln; if(!line) return NULL; ln = tl_strdup(line); centry = _malloc(sizeof(cookie_entry)); centry->loaded = TRUE; centry->next = NULL; centry->prev = NULL; centry->path = NULL; centry->domain = NULL; centry->name = NULL; centry->value = NULL; centry->host = NULL; p = strtokc_r(ln, '\t', &strtokbuf); for(i = 0; i < 7; i++) { if(!p) { cookie_deep_free(centry); _free(ln); return NULL; } switch (i) { case 0: centry->domain = tl_strdup(p); break; case 1: centry->flag = (bool_t) strcasecmp(p, "FALSE"); break; case 2: centry->path = tl_strdup(p); break; case 3: centry->secure = (bool_t) strcasecmp(p, "FALSE"); break; case 4: centry->expires = _atoi(p); break; case 5: centry->name = tl_strdup(p); break; case 6: centry->value = tl_strdup(p); break; } p = strtokc_r(NULL, '\t', &strtokbuf); } _free(ln); return centry; } static cookie_entry *cookie_parse_kde2(char *line) { cookie_entry *centry; int i; char *p, *ln, *next; if(!line) return NULL; next = ln = tl_strdup(line); centry = _malloc(sizeof(cookie_entry)); centry->loaded = TRUE; centry->next = NULL; centry->prev = NULL; centry->path = NULL; centry->domain = NULL; centry->name = NULL; centry->value = NULL; centry->host = NULL; for(i = 0; i < 8 && *next; ++i) { p = next; while(*p == ' ' || *p == '\t') ++p; /* skip white space */ if(*p == '\"') { next = ++p; while(*next && *next != '\"') ++next; } else { next = p; while(*next && *next != ' ' && *next != '\t') ++next; } if(*next) { *(next++) = 0; } if(p == next) { break; } switch (i) { case 0: centry->host = tl_strdup(p); break; case 1: centry->domain = tl_strdup(p); break; case 2: centry->path = tl_strdup(p); break; case 3: centry->expires = _atoi(p); break; case 4: centry->flag = _atoi(p); break; case 5: centry->name = tl_strdup(p); break; case 6: centry->secure = _atoi(p) ^ 4; break; case 7: centry->value = tl_strdup(p); break; } } if(i < 7 || *next) { cookie_deep_free(centry); centry = NULL; } _free(ln); return centry; } static cookie_entry *cookie_read_file_real(bufio * fd) { char line[5000]; cookie_entry *centry; cookie_entry *retv = NULL; cookie_entry *prev = NULL; while(bufio_readln(fd, line, sizeof(line)) > 0) { if(line[0] == '#') { if(!strncmp("# KDE Cookie File v2", line, 20)) { cookiefiletype = COOKIEFILETYPE_KDE2; } continue; } if(cookiefiletype == COOKIEFILETYPE_KDE2 && line[0] == '[') continue; strip_nl(line); if(*line) { switch(cookiefiletype) { case COOKIEFILETYPE_NS: centry = cookie_parse_ns(line); break; case COOKIEFILETYPE_KDE2: centry = cookie_parse_kde2(line); break; } if(centry) { if(!retv) retv = centry; else { prev->next = centry; centry->prev = prev; } prev = centry; } else xprintf(1, gettext("Unable to parse : %s\n"), line); } } return retv; } int cookie_read_file(const char *filename) { bufio *fd; cookie_entry *retv = NULL; LOCK_COOKIES; cookie_free_all(cookies); if(!(fd = bufio_open(filename, O_BINARY | O_RDONLY))) { xperror(filename); UNLOCK_COOKIES; return -1; } if(_flock(bufio_getfd(fd), filename, O_BINARY | O_RDONLY, FALSE)) { xperror(filename); UNLOCK_COOKIES; return -2; } retv = cookie_read_file_real(fd); cookie_updated = time(NULL); _funlock(bufio_getfd(fd)); bufio_close(fd); cookies = retv; last_cookie = cookie_get_last_entry(cookies, &cookies_num); UNLOCK_COOKIES; return 0; } static int cookie_write_file(bufio * fd) { char line[5000]; cookie_entry *centry; time_t t = time(NULL); ftruncate(bufio_getfd(fd), 0); lseek(bufio_getfd(fd), 0, SEEK_SET); bufio_reset(fd); for(centry = cookies; centry; centry = centry->next) { if(!centry->expires || centry->expires > t) { snprintf(line, sizeof(line), "%s\t%s\t%s\t%s\t%ld\t%s\t%s\n", centry->domain, centry->flag ? "TRUE" : "FALSE", centry->path, centry->secure ? "TRUE" : "FALSE", centry->expires, centry->name, centry->value); bufio_write(fd, line, strlen(line)); } } return 0; } static void cookie_sync(cookie_entry * centry) { cookie_entry *cmem; cookie_entry *cfile; cookie_entry **uentry; cookie_entry *p; bool_t found; time_t t = time(NULL); for(cfile = centry; cfile; cfile = p) { found = FALSE; p = cfile->next; for(cmem = cookies, uentry = &cookies; cmem; uentry = &cmem->next, cmem = cmem->next) { if(cookie_eq(cfile, cmem)) { found = TRUE; if((cmem->expires && cmem->expires < t && !cmem->loaded) || (cmem->loaded && !strcmp(cmem->value, cfile->value))) { cookie_deep_free(cfile); } else { *uentry = cfile; cfile->next = cmem->next; cfile->prev = cmem->prev; if(cmem->next) cmem->next->prev = cfile; cookie_deep_free(cmem); } break; } } if(!found) { cfile->next = cookies; cfile->prev = NULL; if(cookies) cookies->prev = cfile; cookies = cfile; cookies_num++; if(cookies_num && cookies_num > cfg.cookies_max) { cookie_remove_oldest_entry(&cookies, &last_cookie, &cookies_num); } } } } int cookie_update_file(int force) { struct stat estat; cookie_entry *centry = NULL; bufio *fd; if(!cookie_changed) return 0; if(!force && cookie_changed < 10) return 0; if(!cfg.cookie_file) return -1; if(cookiefiletype != COOKIEFILETYPE_NS) { xprintf(1, gettext("Cookie file format not supported for writing.\n")); return -2; } LOCK_COOKIES; xprintf(1, gettext("Updating cookie file\n")); if(!(fd = bufio_copen(cfg.cookie_file, O_BINARY | O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR))) { xperror(cfg.cookie_file); UNLOCK_COOKIES; return -1; } if(_flock(bufio_getfd(fd), cfg.cookie_file, O_BINARY | O_WRONLY | O_CREAT, FALSE)) { xperror(cfg.cookie_file); bufio_close(fd); UNLOCK_COOKIES; return -1; } if(fstat(bufio_getfd(fd), &estat)) { xperror(cfg.cookie_file); _funlock(bufio_getfd(fd)); bufio_close(fd); UNLOCK_COOKIES; return -1; } if(estat.st_mtime > cookie_updated) { xprintf(1, gettext("Cookie file has changed - > synchronizing\n")); centry = cookie_read_file_real(fd); cookie_sync(centry); } cookie_write_file(fd); cookie_changed = 0; cookie_updated = time(NULL); _funlock(bufio_getfd(fd)); bufio_close(fd); UNLOCK_COOKIES; return 0; } char *cookie_get_field(url * urlp) { int sel = 0; char *retv; cookie_entry *centry; time_t t = time(NULL); if(urlp->type != URLT_HTTP && urlp->type != URLT_HTTPS) return NULL; retv = tl_strdup("Cookie:"); LOCK_COOKIES; for(centry = cookies; centry; centry = centry->next) { if((!centry->expires || centry->expires > t) && cookie_match(urlp, centry)) { retv = _realloc(retv, strlen(retv) + strlen(centry->name) + strlen(centry->value) + 6); if(!sel) strcat(retv, " "); else strcat(retv, "; "); strcat(retv, centry->name); strcat(retv, "="); strcat(retv, centry->value); sel++; } } UNLOCK_COOKIES; if(sel) strcat(retv, "\r\n"); else _free(retv); return retv; } void cookie_insert_field(char *field, url * urlp) { int slen, plen; char *p, *p1, *strtokbuf; char *pom = tl_strdup(field); cookie_entry *centry; cookie_entry *pcentry; cookie_entry *uentry; bool_t found = FALSE; char **pp; centry = _malloc(sizeof(cookie_entry)); centry->next = NULL; centry->prev = NULL; centry->loaded = FALSE; centry->domain = NULL; centry->flag = TRUE; centry->path = NULL; centry->expires = 0; centry->secure = FALSE; centry->name = NULL; centry->value = NULL; p = strtokc_r(pom, ';', &strtokbuf); while(p) { while(tl_ascii_isspace(*p)) p++; if(!strncasecmp(p, "expires=", 8)) { centry->expires = scntime(p + 8); } else if(!strncasecmp(p, "path=", 5)) { centry->path = tl_strdup(p + 5); } else if(!strncasecmp(p, "domain=", 7)) { centry->domain = tl_strdup(p + 7); } else if(!strcasecmp(p, "secure")) { centry->secure = TRUE; } else { p1 = strchr(p, '='); if(p1) { /* FIXME: multiple assignment -- memory leak */ centry->name = tl_strndup(p, (p1 - p)); centry->value = tl_strdup(p1 + 1); } } p = strtokc_r(NULL, ';', &strtokbuf); } _free(pom); if(!centry->value || !centry->name) { cookie_deep_free(centry); centry = NULL; } if(centry) { if(!centry->path) centry->path = tl_strdup(url_get_path(urlp)); if(!centry->domain) centry->domain = tl_strdup(url_get_site(urlp)); lowerstr(centry->domain); /*** check if cookie is set for source domain ***/ if(cfg.cookie_check_domain) { p = url_get_site(urlp); plen = strlen(p); slen = strlen(centry->domain); if(plen < slen || strcmp(centry->domain, p + (plen - slen))) { xprintf(1, gettext("Server %s is trying to set cookie for %s domain\n"), p, centry->domain); cookie_deep_free(centry); UNLOCK_COOKIES; return; } } for(pp = priv_cfg.cookies_disabled_domains; pp && *pp; pp++) { if(!strcasecmp(*pp, centry->domain)) { xprintf(1, gettext("Removing cookie from disabled domain %s\n"), centry->domain); cookie_deep_free(centry); return; } } LOCK_COOKIES; for(pcentry = cookies, uentry = NULL; pcentry; uentry = pcentry, pcentry = pcentry->next) { if(cookie_eq(centry, pcentry)) { found = TRUE; if(centry->expires && centry->expires < time(NULL)) { pcentry->expires = centry->expires; cookie_deep_free(centry); cookie_changed++; centry = NULL; break; } else { if(centry->expires != pcentry->expires || strcmp(centry->value, pcentry->value)) { if(uentry) uentry->next = centry; else cookies = centry; centry->next = pcentry->next; centry->prev = uentry; if(centry->next) centry->next->prev = centry; if(last_cookie == pcentry) last_cookie = centry; cookie_deep_free(pcentry); cookie_changed++; break; } } } } if(!found) { if(centry->expires && centry->expires < time(NULL)) cookie_deep_free(centry); else { centry->next = cookies; if(cookies) cookies->prev = centry; if(!last_cookie) last_cookie = centry; cookies = centry; cookie_changed++; cookies_num++; if(cfg.cookies_max && cookies_num > cfg.cookies_max) { cookie_remove_oldest_entry(&cookies, &last_cookie, &cookies_num); } } } UNLOCK_COOKIES; } } pavuk-0.9.35/src/cookie.h0000644000175000001440000000157710170706105012073 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _cookie_h_ #define _cookie_h_ #include #include "url.h" /* private */ typedef struct _cookie_entry { struct _cookie_entry *next; struct _cookie_entry *prev; char *domain; char *host; char *path; time_t expires; int secure; int flag; char *name; char *value; bool_t loaded; } cookie_entry; extern int cookie_read_file(const char *); extern int cookie_update_file(int); extern char *cookie_get_field(url *); extern void cookie_insert_field(char *, url *); #endif pavuk-0.9.35/src/form.c0000644000175000001440000012546310466673652011603 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #ifdef GTK_FACE #include #include "icons/cancel.xpm" #include "icons/load.xpm" #include "icons/restart_small.xpm" #endif #include "ainterface.h" #include "form.h" #include "gui.h" #include "html.h" #include "tools.h" #define NARAZNIK 512 /* FIXME: Translate me (NARAZNIK)! */ #define SEXPAND(sv) \ if((ssz - (sv + sr + NARAZNIK)) < 0) \ { \ stack = realloc(stack, ssz + sv + NARAZNIK); \ ssz += NARAZNIK + sv; \ } #define TEXPAND(sv) \ if((tsz - (sv + tr + NARAZNIK)) < 0) \ { \ text = realloc(text, tsz + sv + NARAZNIK); \ tsz += NARAZNIK + sv; \ } char *form_get_text(int num, char *html_text, int html_len, int *form_len) { char *stack = NULL; int i, sr, ssz; int formstart = FALSE; int commentstart = FALSE; int scriptstart = FALSE; int formnum = 0; ssz = 0; sr = 0; for(i = 0; i < html_len; i++) { if(commentstart) { if(!strncmp(html_text + i, "-->", 3)) { commentstart = FALSE; i += 2; } continue; } if(scriptstart) { if(!strncasecmp(html_text + i, "", 9)) { scriptstart = FALSE; i += 8; } continue; } if(html_text[i] == '<') { if(!strncasecmp(html_text + i + 1, "SCRIPT", 6) && (i + 7) < html_len && (tl_ascii_isspace(html_text[i + 7]) || html_text[i + 7] == '>')) { scriptstart = TRUE; continue; } else if(!strncasecmp(html_text + i + 1, "!--", 3)) { commentstart = TRUE; continue; } } if(formstart) { if(!strncasecmp(html_text + i, "", 7)) { stack[sr] = '\0'; break; } else { SEXPAND(1); stack[sr] = html_text[i]; sr++; } continue; } if(!strncasecmp(html_text + i, "name, ff2->name)) return FALSE; if(strcmp(ff1->value, ff2->value)) return FALSE; return TRUE; } int form_field_compare_name(dllist_t dl1, dllist_t dl2) { form_field * ff1 = (form_field *)dl1; form_field * ff2 = (form_field *)dl2; if(!ff1->name || !ff2->name) return FALSE; if(strcmp(ff1->name, ff2->name)) return FALSE; return TRUE; } form_field *form_field_new(char *name, char *value) { form_field *rv; rv = _malloc(sizeof(form_field)); rv->type = FORM_T_TEXT; rv->name = tl_strdup(name); rv->value = tl_strdup(value); return rv; } form_field *form_field_duplicate(form_field * ff) { form_field *rv; rv = _malloc(sizeof(form_field)); rv->type = ff->type; rv->name = tl_strdup(ff->name); rv->value = tl_strdup(ff->value); return rv; } static form_field_types form_input_type(char *str) { int i; struct { char *str; form_field_types id; } it[] = { {"text", FORM_T_TEXT}, {"password", FORM_T_PASSWORD}, {"checkbox", FORM_T_CHECKBOX}, {"radio", FORM_T_RADIO}, {"submit", FORM_T_SUBMIT}, {"reset", FORM_T_RESET}, {"file", FORM_T_FILE}, {"hidden", FORM_T_HIDDEN}, {"image", FORM_T_IMAGE}, {"button", FORM_T_BUTTON} }; for(i = 0; i < (sizeof(it) / sizeof(it[0])); i++) { if(!strcasecmp(str, it[i].str)) return it[i].id; } return FORM_T_UNKNOWN; } static form_field_info *form_field_info_new(void) { form_field_info *retv = malloc(sizeof(form_field_info)); retv->type = FORM_T_TEXT; retv->name = NULL; retv->default_value = NULL; retv->text = NULL; retv->width = 0; retv->height = 0; retv->maxlen = 0; retv->readonly = FALSE; retv->checked = FALSE; retv->disabled = FALSE; retv->multiple = FALSE; retv->selected = FALSE; retv->infos = NULL; #if GTK_FACE retv->rg = NULL; retv->widget = NULL; retv->idx = -1; #endif return retv; } static form_field_info *form_parse_inputtag(char *tag) { char *p; form_field_info *retv; retv = form_field_info_new(); if((p = html_get_attrib_from_tag(tag, "type"))) { retv->type = form_input_type(p); free(p); } if((p = html_get_attrib_from_tag(tag, "size"))) { retv->width = atoi(p); free(p); } if((p = html_get_attrib_from_tag(tag, "maxlength"))) { retv->maxlen = atoi(p); free(p); } retv->name = html_get_attrib_from_tag(tag, "name"); retv->default_value = html_get_attrib_from_tag(tag, "value"); retv->readonly = html_tag_co_elem(tag, "readonly"); retv->checked = html_tag_co_elem(tag, "checked"); retv->disabled = html_tag_co_elem(tag, "disabled"); return retv; } static form_field_info *form_parse_buttontag(char *tag) { char *p; form_field_info *retv; retv = form_field_info_new(); retv->type = FORM_T_BUTTON; if((p = html_get_attrib_from_tag(tag, "type"))) { retv->type = form_input_type(p); free(p); } retv->name = html_get_attrib_from_tag(tag, "name"); retv->default_value = html_get_attrib_from_tag(tag, "value"); retv->disabled = html_tag_co_elem(tag, "disabled"); return retv; } static form_field_info *form_parse_selecttag(char *tag) { char *p; form_field_info *retv; retv = form_field_info_new(); retv->type = FORM_T_SELECT; retv->name = html_get_attrib_from_tag(tag, "name"); if((p = html_get_attrib_from_tag(tag, "size"))) { retv->height = atoi(p); free(p); } retv->disabled = html_tag_co_elem(tag, "disabled"); retv->multiple = html_tag_co_elem(tag, "multiple"); return retv; } static form_field_info *form_parse_optgrouptag(char *tag) { form_field_info *retv; retv = form_field_info_new(); retv->type = FORM_T_OPTGROUP; retv->disabled = html_tag_co_elem(tag, "disabled"); retv->text = html_get_attrib_from_tag(tag, "label"); return retv; } static form_field_info *form_parse_optiontag(char *tag) { form_field_info *retv; retv = form_field_info_new(); retv->type = FORM_T_OPTION; retv->disabled = html_tag_co_elem(tag, "disabled"); retv->selected = html_tag_co_elem(tag, "selected"); retv->text = html_get_attrib_from_tag(tag, "label"); retv->default_value = html_get_attrib_from_tag(tag, "value"); return retv; } static form_field_info *form_parse_textareatag(char *tag) { char *p; form_field_info *retv; retv = form_field_info_new(); retv->type = FORM_T_TEXTAREA; if((p = html_get_attrib_from_tag(tag, "cols"))) { retv->width = _atoi(p); free(p); } if((p = html_get_attrib_from_tag(tag, "rows"))) { retv->height = _atoi(p); free(p); } retv->name = html_get_attrib_from_tag(tag, "name"); retv->disabled = html_tag_co_elem(tag, "disabled"); retv->readonly = html_tag_co_elem(tag, "readonly"); return retv; } static form_info *form_parse_formtag(char *tag) { char *p; form_info *retv = malloc(sizeof(form_info)); retv->method = FORM_M_GET; retv->encoding = FORM_E_URLENCODED; retv->action = NULL; retv->infos = NULL; retv->text = NULL; retv->parent_url = NULL; if((p = html_get_attrib_from_tag(tag, "method"))) { if(!strcasecmp(p, "GET")) retv->method = FORM_M_GET; else if(!strcasecmp(p, "POST")) retv->method = FORM_M_POST; else retv->method = FORM_M_UNKNOWN; free(p); } if((p = html_get_attrib_from_tag(tag, "enctype"))) { if(!strcasecmp(p, "multipart/form-data")) retv->encoding = FORM_E_MULTIPART; else if(!strcasecmp(p, "application/x-www-form-urlencoded")) retv->encoding = FORM_E_URLENCODED; else retv->encoding = FORM_E_UNKNOWN; _free(p); } retv->action = html_get_attrib_from_tag(tag, "action"); return retv; } static void form_field_info_free(form_field_info * ffi) { dllist *ptr; _free(ffi->name); _free(ffi->default_value); _free(ffi->text); ptr = ffi->infos; while(ptr) { form_field_info_free((form_field_info *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } free(ffi); } void form_free(form_info * formi) { dllist *ptr; _free(formi->action); _free(formi->text); ptr = formi->infos; while(ptr) { form_field_info_free((form_field_info *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } free(formi); } form_info *form_info_dup(form_info * formi) { dllist *ptr; form_info *retv = malloc(sizeof(form_info)); retv->method = formi->method; retv->encoding = formi->encoding; retv->action = tl_strdup(formi->action); retv->text = NULL; retv->parent_url = NULL; retv->infos = NULL; for(ptr = formi->infos; ptr; ptr = ptr->next) { retv->infos = dllist_append(retv->infos, (dllist_t) form_field_duplicate((form_field *)ptr->data)); } return retv; } form_info *form_parse(char *form_text, int form_len) { char *stack; int i, sr, ssz; int tagstart = FALSE; form_info *retv = NULL; form_field_info *selectgroup = NULL; dllist *optgroups = NULL; form_field_info *optgroup = NULL; form_field_info *lastformtag = NULL; form_field_info *plastformtag = NULL; int tsz, tr; char *text; bool_t fstag; char *sp; ssz = 2 * NARAZNIK; stack = malloc(ssz); sr = 0; tsz = 2 * NARAZNIK; text = malloc(tsz); tr = 0; for(i = 0; i < form_len; i++) { if(form_text[i] == '<') { tagstart = TRUE; sr = 0; } else if(form_text[i] == '>' && tagstart) { tagstart = FALSE; stack[sr] = '\0'; fstag = FALSE; #define IS_TAG(s) (!strncasecmp(stack, s, strlen(s)) && \ sr >= strlen(s) && \ (tl_ascii_isspace(stack[strlen(s)]) || \ stack[strlen(s)] == '\0')) if(IS_TAG("FORM")) { retv = form_parse_formtag(stack); } else if(retv && IS_TAG("INPUT")) { fstag = TRUE; plastformtag = lastformtag; lastformtag = form_parse_inputtag(stack); retv->infos = dllist_append(retv->infos, (dllist_t)lastformtag); } else if(retv && lastformtag && IS_TAG("/INPUT")) { if(tr) { text[tr] = '\0'; sp = text; while(*sp && tl_ascii_isspace(*sp)) sp++; if(!lastformtag->text && *sp) { int l = strcspn(sp, "\r\n"); lastformtag->text = tl_strndup(sp, l); memmove(text, sp + l, strlen(sp + l + 1)); tr = strlen(text); } else tr = 0; } } else if(retv && IS_TAG("BUTTON")) { fstag = TRUE; plastformtag = lastformtag; lastformtag = form_parse_buttontag(stack); retv->infos = dllist_append(retv->infos, (dllist_t)lastformtag); } else if(retv && lastformtag && IS_TAG("/BUTTON")) { if(tr) { text[tr] = '\0'; sp = text; while(*sp && tl_ascii_isspace(*sp)) sp++; if(!lastformtag->text && *sp) { int l = strcspn(sp, "\r\n"); lastformtag->text = tl_strndup(sp, l); memmove(text, sp + l, strlen(sp + l + 1)); tr = strlen(text); } else tr = 0; } } else if(retv && IS_TAG("SELECT")) { fstag = TRUE; plastformtag = lastformtag; lastformtag = form_parse_selecttag(stack); selectgroup = lastformtag; retv->infos = dllist_append(retv->infos, (dllist_t)lastformtag); } else if(selectgroup && IS_TAG("/SELECT")) { selectgroup = NULL; } else if(selectgroup && IS_TAG("OPTGROUP")) { fstag = TRUE; plastformtag = lastformtag; lastformtag = form_parse_optgrouptag(stack); optgroup = lastformtag; optgroups = dllist_prepend(optgroups, (dllist_t) lastformtag); selectgroup->infos = dllist_append(selectgroup->infos, (dllist_t) lastformtag); } else if(optgroups && IS_TAG("/OPTGROUP")) { optgroups = dllist_remove_entry(optgroups, optgroups); if(optgroups) optgroup = (form_field_info *) optgroups->data; else optgroup = NULL; } else if(selectgroup && IS_TAG("OPTION")) { fstag = TRUE; plastformtag = lastformtag; lastformtag = form_parse_optiontag(stack); lastformtag->multiple = selectgroup->multiple; if(optgroup) { optgroup->infos = dllist_append(optgroup->infos, (dllist_t)lastformtag); } else { selectgroup->infos = dllist_append(selectgroup->infos, (dllist_t) lastformtag); } } else if(selectgroup && lastformtag && IS_TAG("/OPTION")) { if(tr && lastformtag->type == FORM_T_OPTION) { text[tr] = '\0'; sp = text; while(*sp && tl_ascii_isspace(*sp)) sp++; if(!lastformtag->text && *sp) { int l = strcspn(sp, "\r\n"); lastformtag->text = tl_strndup(sp, l); memmove(text, sp + l, strlen(sp + l + 1)); tr = strlen(text); } else tr = 0; /* If no value given, then take value from text - PJS */ if(!lastformtag->default_value) { lastformtag->default_value = tl_strdup(lastformtag->text); } } } else if(retv && IS_TAG("TEXTAREA")) { fstag = TRUE; plastformtag = lastformtag; lastformtag = form_parse_textareatag(stack); retv->infos = dllist_append(retv->infos, (dllist_t)lastformtag); } else if(retv && lastformtag && IS_TAG("/TEXTAREA")) { if(tr && lastformtag->type == FORM_T_TEXTAREA) { text[tr] = '\0'; sp = text; while(*sp && tl_ascii_isspace(*sp)) sp++; if(!lastformtag->default_value && *sp) lastformtag->default_value = tl_strdup(sp); tr = 0; } } else if(IS_TAG("BR")) { TEXPAND(1); text[tr] = '\n'; tr++; } if(fstag && tr) { char *sp; text[tr] = '\0'; sp = text; while(*sp && tl_ascii_isspace(*sp)) sp++; if(*sp && plastformtag) { if(plastformtag->type == FORM_T_RADIO || plastformtag->type == FORM_T_CHECKBOX || plastformtag->type == FORM_T_OPTION) { int ln = strcspn(sp, "\r\n"); if(!plastformtag->text) plastformtag->text = tl_strndup(sp, ln); sp += ln; sp += strspn(sp, "\r\n \t"); } } if(*sp) { form_field_info *ffi; dllist *last; ffi = form_field_info_new(); ffi->type = FORM_T_NONFORM; ffi->text = tl_strdup(sp); if(optgroup) { last = dllist_last(optgroup->infos); optgroup->infos = dllist_insert_before(optgroup->infos, last, (dllist_t) ffi); } else if(selectgroup) { last = dllist_last(selectgroup->infos); selectgroup->infos = dllist_insert_before(selectgroup->infos, last, (dllist_t) ffi); } else { last = dllist_last(retv->infos); retv->infos = dllist_insert_before(retv->infos, last, (dllist_t) ffi); } } tr = 0; } } else if(tagstart) { SEXPAND(1); stack[sr] = form_text[i]; sr++; } else { TEXPAND(1); text[tr] = form_text[i]; tr++; } } if(retv) { retv->text = form_text; if(tr) { text[tr] = '\0'; sp = text; while(*sp && tl_ascii_isspace(*sp)) sp++; if(*sp) { form_field_info *ffi; ffi = form_field_info_new(); ffi->type = FORM_T_NONFORM; ffi->text = tl_strdup(sp); retv->infos = dllist_append(retv->infos, (dllist_t)ffi); } } } _free(stack); _free(text); return retv; } void form_get_default_successful(char *name, dllist * fields, dllist ** retv) { dllist *ptr; ptr = fields; while(ptr) { form_field_info *ffi = (form_field_info *) ptr->data; char *n, *v; n = NULL; v = NULL; switch (ffi->type) { case FORM_T_TEXT: case FORM_T_PASSWORD: case FORM_T_FILE: case FORM_T_TEXTAREA: case FORM_T_HIDDEN: n = ffi->name; v = tl_strdup(ffi->default_value); break; case FORM_T_RADIO: case FORM_T_CHECKBOX: if(ffi->checked) { n = ffi->name; v = tl_strdup(ffi->default_value); } break; case FORM_T_OPTION: if(ffi->selected) { n = ffi->name ? ffi->name : name; v = tl_strdup(ffi->default_value); } break; case FORM_T_OPTGROUP: form_get_default_successful(name, ffi->infos, retv); break; case FORM_T_SELECT: form_get_default_successful(ffi->name, ffi->infos, retv); break; default: /* nothing to do */ break; } if(n) { form_field *ff = _malloc(sizeof(form_field)); ff->type = ffi->type; ff->name = tl_strdup(n); ff->value = v ? v : tl_strdup(""); *retv = dllist_append(*retv, (dllist_t)ff); } ptr = ptr->next; } } #if GTK_FACE static void form_get_successful(char *name, dllist * fields, dllist ** retv) { dllist *ptr; for(ptr = fields; ptr; ptr = ptr->next) { form_field_info *ffi = (form_field_info *) ptr->data; char *n, *v; if(!ffi->widget && (ffi->type != FORM_T_HIDDEN)) continue; n = NULL; v = NULL; switch (ffi->type) { case FORM_T_TEXT: case FORM_T_PASSWORD: n = ffi->name; v = tl_strdup(gtk_entry_get_text(GTK_ENTRY(ffi->widget))); break; case FORM_T_FILE: n = ffi->name; v = tl_strdup(gtk_entry_get_text(GTK_ENTRY(ffi->widget))); break; case FORM_T_RADIO: case FORM_T_CHECKBOX: if(GTK_TOGGLE_BUTTON(ffi->widget)->active) { n = ffi->name; v = tl_strdup(ffi->default_value); } break; case FORM_T_TEXTAREA: { int len; char *p; #if GTK_FACE < 2 len = gtk_text_get_length(GTK_TEXT(ffi->widget)); #else len = gtk_text_buffer_get_char_count( gtk_text_view_get_buffer(GTK_TEXT_VIEW(ffi->widget))); #endif p = gtk_editable_get_chars(GTK_EDITABLE(ffi->widget), 0, len); v = tl_strdup(p); g_free(p); n = ffi->name; } break; case FORM_T_OPTION: if(GTK_IS_CLIST(ffi->widget)) { if(g_list_find(GTK_CLIST(ffi->widget)->selection, (void *) ffi->idx)) { n = ffi->name ? ffi->name : name; v = tl_strdup(ffi->default_value); } } else { if(GTK_CHECK_MENU_ITEM(ffi->widget)->active) { n = ffi->name ? ffi->name : name; v = tl_strdup(ffi->default_value); } } break; case FORM_T_HIDDEN: n = ffi->name; v = tl_strdup(ffi->default_value); break; case FORM_T_OPTGROUP: form_get_successful(name, ffi->infos, retv); break; case FORM_T_SELECT: form_get_successful(ffi->name, ffi->infos, retv); break; default: /* nothing to do */ break; } if(n) { form_field *ff = _malloc(sizeof(form_field)); ff->type = ffi->type; ff->name = tl_strdup(n); ff->value = v ? v : tl_strdup(""); *retv = dllist_append(*retv, (dllist_t)ff); } } } static void form_submit_cb(GtkWidget * w, form_info * fi) { form_field_info *ffi = NULL; dllist *fields = NULL; url_info *ui; if(w) ffi = (form_field_info *) gtk_object_get_user_data(GTK_OBJECT(w)); form_get_successful(NULL, fi->infos, &fields); if(ffi && ffi->name) { form_field *ff = _malloc(sizeof(form_field)); ff->type = ffi->type; ff->name = tl_strdup(ffi->name); ff->value = ffi->default_value ? tl_strdup(ffi->default_value) : tl_strdup(""); fields = dllist_prepend(fields, (dllist_t) ff); } ui = url_info_new(fi->action); ui->type = URLI_FORM; ui->method = fi->method; ui->encoding = fi->encoding; ui->fields = fields; if(gui_cfg.config_shell) { url_info *cui; int row = gtk_clist_append(GTK_CLIST(gui_cfg.url_list), &fi->action); cui = url_info_duplicate(ui); gtk_clist_set_row_data_full(GTK_CLIST(gui_cfg.url_list), row, cui, (GtkDestroyNotify) url_info_free); } cfg.request = dllist_append(cfg.request, (dllist_t)ui); if(cfg.mode_started) { if(!append_starting_url(ui, fi->parent_url)) { gdk_beep(); } } } static void form_reset(dllist * fields) { while(fields) { form_field_info *ffi = (form_field_info *) fields->data; switch (ffi->type) { case FORM_T_TEXT: case FORM_T_PASSWORD: gtk_entry_set_text(GTK_ENTRY(ffi->widget), ffi->default_value); break; case FORM_T_FILE: gtk_entry_set_text(GTK_ENTRY(ffi->widget), ffi->default_value); break; case FORM_T_RADIO: case FORM_T_CHECKBOX: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(ffi->widget), ffi->checked); break; case FORM_T_OPTGROUP: case FORM_T_SELECT: form_reset(ffi->infos); break; case FORM_T_OPTION: gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(ffi->widget), ffi->selected); break; case FORM_T_TEXTAREA: #if GTK_FACE < 2 gtk_text_set_point(GTK_TEXT(ffi->widget), 0); gtk_text_forward_delete(GTK_TEXT(ffi->widget), gtk_text_get_length(GTK_TEXT(ffi->widget))); if(ffi->default_value) gtk_text_insert(GTK_TEXT(ffi->widget), NULL, NULL, NULL, ffi->default_value, strlen(ffi->default_value)); #else gtk_text_buffer_set_text(gtk_text_view_get_buffer( GTK_TEXT_VIEW(ffi->widget)), ffi->default_value ? ffi->default_value : "", -1); #endif break; default: break; } fields = fields->next; } } static void form_reset_cb(GtkWidget * w, form_info * fi) { form_reset(fi->infos); } static GtkWidget *form_render_optgroup(form_field_info * sel, dllist * dl) { GtkWidget *menu, *mi; char *p; dllist *ptr; menu = gtk_menu_new(); gtk_widget_realize(menu); ptr = dl; while(ptr) { form_field_info *ffi = (form_field_info *) ptr->data; mi = NULL; switch (ffi->type) { case FORM_T_OPTION: if(ptr->next && (((form_field_info *) ptr->next->data)->type == FORM_T_NONFORM)) { if(ffi->text) p = ffi->text; else p = ((form_field_info *) ptr->next->data)->text; ptr = ptr->next; } else if(ffi->text) p = ffi->text; else if(ffi->default_value) p = ffi->default_value; else p = "option"; if(ffi->multiple) mi = gtk_check_menu_item_new_with_label(p); else { mi = gtk_radio_menu_item_new_with_label(sel->rg, p); sel->rg = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(mi)); } break; case FORM_T_OPTGROUP: if(ptr->next && (((form_field_info *) ptr->next->data)->type == FORM_T_NONFORM)) { if(ffi->text) p = ffi->text; else p = ((form_field_info *) ptr->next->data)->text; ptr = ptr->next; } else if(ffi->text) p = ffi->text; else p = "optgroup"; mi = gtk_menu_item_new_with_label(p); gtk_menu_item_set_submenu(GTK_MENU_ITEM(mi), form_render_optgroup(sel, ffi->infos)); break; default: xprintf(0, gettext("Unsupported form type in context: %d\n"), ffi->type); break; } if(mi) { gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); gtk_object_set_user_data(GTK_OBJECT(mi), ffi); gtk_widget_set_sensitive(mi, !ffi->disabled); } ffi->widget = mi; ptr = ptr->next; } return menu; } static GtkWidget *form_render_selection(form_field_info * ffi) { GtkWidget *w, *menu; if(ffi->height > 1) { dllist *ptr; GtkWidget *swin = NULL; w = gtk_clist_new(1); if(ffi->multiple) { gtk_clist_set_selection_mode(GTK_CLIST(w), GTK_SELECTION_MULTIPLE); } else { gtk_clist_set_selection_mode(GTK_CLIST(w), GTK_SELECTION_SINGLE); } gtk_object_set_user_data(GTK_OBJECT(w), ffi); gtk_widget_set_sensitive(w, !ffi->disabled); for(ptr = ffi->infos; ptr; ptr = ptr->next) { form_field_info *offi = (form_field_info *) ptr->data; if(offi->type == FORM_T_OPTION) { char *p; if(offi->text) p = offi->text; else if(offi->default_value) p = offi->default_value; else p = "option"; offi->idx = gtk_clist_append(GTK_CLIST(w), &p); gtk_clist_set_selectable(GTK_CLIST(w), offi->idx, !offi->disabled); if(offi->selected) gtk_clist_select_row(GTK_CLIST(w), offi->idx, 0); offi->widget = w; } else { xprintf(0, gettext("Unsupported form type in context: %d\n"), ffi->type); } } ffi->widget = w; swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(swin); gtk_container_add(GTK_CONTAINER(swin), w); gtk_widget_show(w); if(swin) w = swin; } else { w = gtk_option_menu_new(); menu = form_render_optgroup(ffi, ffi->infos); gtk_option_menu_set_menu(GTK_OPTION_MENU(w), menu); gtk_object_set_user_data(GTK_OBJECT(w), ffi); gtk_widget_set_sensitive(w, !ffi->disabled); } return w; } static GtkWidget *form_render(form_info * fi, GtkWidget * pbox) { GtkWidget *box, *w; dllist *ptr, *ptr2; char *p; box = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(pbox), box, FALSE, FALSE, 1); gtk_widget_show(box); for(ptr = fi->infos; ptr; ptr = ptr->next) { form_field_info *ffi; ffi = (form_field_info *) ptr->data; w = NULL; switch (ffi->type) { case FORM_T_TEXT: w = gtk_entry_new(); if(ffi->maxlen) gtk_entry_set_max_length(GTK_ENTRY(w), ffi->maxlen); if(ffi->width) gtk_widget_set_usize(w, ffi->width * 10 /*gdk_string_width(w->style->font, "xxx") */ , -1); break; case FORM_T_PASSWORD: w = gtk_entry_new(); if(ffi->maxlen) gtk_entry_set_max_length(GTK_ENTRY(w), ffi->maxlen); if(ffi->width) gtk_widget_set_usize(w, ffi->width * 10 /*gdk_string_width(w->style->font, "xxx") */ , -1); gtk_entry_set_visibility(GTK_ENTRY(w), FALSE); break; case FORM_T_CHECKBOX: if(ffi->text) p = ffi->text; else if(ptr->next && (((form_field_info *) ptr->next->data)->type == FORM_T_NONFORM)) { p = ((form_field_info *) ptr->next->data)->text; ptr = ptr->next; } else p = "check"; w = gtk_check_button_new_with_label(p); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w), ffi->checked); break; case FORM_T_RADIO: { GSList *rg = NULL; ptr2 = ptr->prev; while(ptr2) { form_field_info *tffi = (form_field_info *) ptr2->data; if(ffi->type == tffi->type && tffi->name && ffi->name && !strcmp(tffi->name, ffi->name)) { rg = gtk_radio_button_group(GTK_RADIO_BUTTON(tffi->widget)); break; } ptr2 = ptr2->prev; } if(ffi->text) p = ffi->text; else if(ptr->next && (((form_field_info *) ptr->next->data)->type == FORM_T_NONFORM)) { p = ((form_field_info *) ptr->next->data)->text; ptr = ptr->next; } else p = "radio"; w = gtk_radio_button_new_with_label(rg, p); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w), ffi->checked); } break; case FORM_T_SUBMIT: case FORM_T_IMAGE: if(ffi->name) p = ffi->name; else p = "Submit"; w = gtk_button_new_with_label(p); gtk_signal_connect(GTK_OBJECT(w), "clicked", GTK_SIGNAL_FUNC(form_submit_cb), fi); break; case FORM_T_RESET: if(ffi->name) p = ffi->name; else p = "Reset"; w = gtk_button_new_with_label(p); gtk_signal_connect(GTK_OBJECT(w), "clicked", GTK_SIGNAL_FUNC(form_reset_cb), fi); break; case FORM_T_FILE: w = gtk_entry_new(); break; case FORM_T_HIDDEN: break; case FORM_T_BUTTON: if(ffi->default_value) p = ffi->default_value; else p = "Button"; w = gtk_button_new_with_label(p); break; case FORM_T_SELECT: w = form_render_selection(ffi); break; case FORM_T_TEXTAREA: #if GTK_FACE < 2 w = gtk_text_new(NULL, NULL); #else w = gtk_text_view_new(); #endif gtk_widget_set_usize(w, 250, 150); #if GTK_FACE < 2 gtk_text_set_editable(GTK_TEXT(w), ffi->readonly); #else gtk_text_view_set_editable(GTK_TEXT_VIEW(w), ffi->readonly); #endif break; case FORM_T_UNKNOWN: case FORM_T_OPTGROUP: case FORM_T_OPTION: xprintf(0, gettext("Unsupported form type in context: %d\n"), ffi->type); break; case FORM_T_NONFORM: w = gtk_label_new(ffi->text); break; } if(w) { gtk_box_pack_start(GTK_BOX(box), w, FALSE, FALSE, 1); gtk_widget_show(w); gtk_object_set_user_data(GTK_OBJECT(w), ffi); gtk_widget_set_sensitive(w, !ffi->disabled); if(!ffi->widget) ffi->widget = w; } } return box; } struct form_edit_dlg_t { GtkWidget *top; GtkWidget *tab; GtkWidget *url_list; GtkWidget *action; GtkWidget *method; GtkWidget *encoding; GtkWidget *swin; GtkWidget *form; GtkWidget *formnr; GtkWidget *fs; form_info *formdata; char *docdata; int doclen; long formsnum; url *parent_url; }; static void PopdownW(GtkObject * object, gpointer func_data) { gtk_widget_hide(GTK_WIDGET(func_data)); } static void form_edit_dlg_refresh_list(GtkWidget * w, struct form_edit_dlg_t *fedlg) { int i; gtk_clist_freeze(GTK_CLIST(fedlg->url_list)); gtk_clist_clear(GTK_CLIST(fedlg->url_list)); LOCK_CFG_URLHASH; for(i = 0; i < cfg.url_hash_tbl->size; i++) { dllist *ptr = cfg.url_hash_tbl->nodes[i]; while(ptr) { url *urlp = (url *) ptr->data; if(urlp->status & URL_HAVE_FORMS) { char *urlstr; int row; urlstr = url_to_urlstr(urlp, FALSE); row = gtk_clist_append(GTK_CLIST(fedlg->url_list), &urlstr); gtk_clist_set_row_data(GTK_CLIST(fedlg->url_list), row, urlp); _free(urlstr); } ptr = ptr->next; } } UNLOCK_CFG_URLHASH; gtk_clist_thaw(GTK_CLIST(fedlg->url_list)); } static void form_edit_dlg_browse(struct form_edit_dlg_t *fedlg) { GtkWidget *hbox, *vbox, *label, *swin, *button; hbox = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox); label = gtk_label_new(gettext("Browse")); gtk_notebook_append_page(GTK_NOTEBOOK(fedlg->tab), hbox, label); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(hbox), swin, TRUE, TRUE, 2); gtk_widget_show(swin); fedlg->url_list = gtk_clist_new(1); gtk_clist_set_column_auto_resize(GTK_CLIST(fedlg->url_list), 0, TRUE); gtk_clist_set_selection_mode(GTK_CLIST(fedlg->url_list), GTK_SELECTION_BROWSE); gtk_clist_set_column_title(GTK_CLIST(fedlg->url_list), 0, gettext("URLs with forms")); gtk_clist_column_titles_show(GTK_CLIST(fedlg->url_list)); gtk_container_add(GTK_CONTAINER(swin), fedlg->url_list); gtk_widget_show(fedlg->url_list); vbox = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 2); gtk_widget_show(vbox); button = guitl_pixmap_button(restart_small_xpm, NULL, gettext("Refresh URL list")); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 10); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(form_edit_dlg_refresh_list), fedlg); } static void form_edit_dlg_switch_form(GtkWidget * w, struct form_edit_dlg_t *fedlg) { char *formdata; int formlen; long nr = (long) gtk_object_get_user_data(GTK_OBJECT(w)); if(fedlg->formdata) { form_free(fedlg->formdata); fedlg->formdata = NULL; gtk_widget_destroy(fedlg->form); gtk_label_set(GTK_LABEL(fedlg->method), ""); gtk_label_set(GTK_LABEL(fedlg->encoding), ""); gtk_label_set(GTK_LABEL(fedlg->action), ""); } formdata = form_get_text(nr, fedlg->docdata, fedlg->doclen, &formlen); if(!formdata) return; fedlg->formdata = form_parse(formdata, formlen); fedlg->formdata->parent_url = fedlg->parent_url; gtk_label_set(GTK_LABEL(fedlg->method), (fedlg->formdata->method == FORM_M_GET) ? "GET" : (fedlg->formdata->method == FORM_M_POST) ? "POST" : gettext("unknown")); gtk_label_set(GTK_LABEL(fedlg->encoding), (fedlg->formdata->encoding == FORM_E_URLENCODED) ? "application/x-www-form-urlencoded" : (fedlg-> formdata->encoding == FORM_E_MULTIPART) ? "multipart/form-data" : gettext("unknown")); gtk_label_set(GTK_LABEL(fedlg->action), fedlg->formdata->action); fedlg->form = gtk_vbox_new(FALSE, 2); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(fedlg->swin), fedlg->form); gtk_widget_show(fedlg->form); form_render(fedlg->formdata, fedlg->form); /* FIXME: The following line showed up to be wrong after ansification, thought I have no idea what to do with it. form_reset(NULL, fedlg); */ } static char *form_load_doc(char *docfile, int *doclen) { char *retv = NULL; char buf[1024]; int fd; int len; *doclen = 0; if(!docfile) return NULL; if((fd = open(docfile, O_BINARY | O_RDONLY)) < 0) { xperror(docfile); return NULL; } while((len = read(fd, buf, sizeof(buf))) > 0) { retv = _realloc(retv, *doclen + len + 1); memmove(retv + *doclen, buf, len); *doclen += len; } if(len < 0) xperror(docfile); close(fd); return retv; } static int form_edit_dlg_load_html_file(char *filename, struct form_edit_dlg_t *fedlg) { GtkWidget *menu, *fmi = NULL; if(fedlg->formdata) { form_free(fedlg->formdata); fedlg->formdata = NULL; gtk_widget_destroy(fedlg->form); gtk_label_set(GTK_LABEL(fedlg->method), ""); gtk_label_set(GTK_LABEL(fedlg->encoding), ""); gtk_label_set(GTK_LABEL(fedlg->action), ""); } if(filename) fedlg->docdata = form_load_doc(filename, &fedlg->doclen); if(!fedlg->docdata) return -1; menu = gtk_menu_new(); for(fedlg->formsnum = 0;; fedlg->formsnum++) { int formlen; char *formdata; GtkWidget *mi; char pom[10]; formdata = form_get_text(fedlg->formsnum, fedlg->docdata, fedlg->doclen, &formlen); if(!formdata) break; _free(formdata); sprintf(pom, "%ld", fedlg->formsnum); mi = gtk_menu_item_new_with_label(pom); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) fedlg->formsnum); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(form_edit_dlg_switch_form), fedlg); gtk_widget_show(mi); gtk_menu_append(GTK_MENU(menu), mi); if(!fedlg->formsnum) fmi = mi; } gtk_option_menu_set_menu(GTK_OPTION_MENU(fedlg->formnr), menu); if(!fedlg->formsnum) return -1; gtk_option_menu_set_history(GTK_OPTION_MENU(fedlg->formnr), 0); form_edit_dlg_switch_form(fmi, fedlg); return 0; } static void form_edit_dlg_switch_page(GtkWidget * w, GtkNotebookPage * pg, gint pgnr, struct form_edit_dlg_t *fedlg) { if(pgnr == 1) { if(fedlg->docdata) { _free(fedlg->docdata); gtk_widget_destroy(GTK_OPTION_MENU(fedlg->formnr)->menu); } if(GTK_CLIST(fedlg->url_list)->selection) { url *urlp; urlp = (url *) gtk_clist_get_row_data(GTK_CLIST(fedlg->url_list), GPOINTER_TO_INT(GTK_CLIST(fedlg->url_list)->selection->data)); fedlg->parent_url = urlp; form_edit_dlg_load_html_file(url_to_filename(urlp, FALSE), fedlg); } } } static void form_edit_dlg_load_file_ok(GtkWidget * w, struct form_edit_dlg_t *fedlg) { char *p = (gchar *) gtk_file_selection_get_filename(GTK_FILE_SELECTION(fedlg->fs)); fedlg->parent_url = NULL; form_edit_dlg_load_html_file(p, fedlg); gtk_widget_destroy(fedlg->fs); } static void form_edit_dlg_load_file(GtkWidget * w, struct form_edit_dlg_t *fedlg) { if(!fedlg->fs) { fedlg->fs = gtk_file_selection_new(gettext("Pavuk: load form file")); gtk_signal_connect(GTK_OBJECT(fedlg->fs), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fedlg->fs); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fedlg->fs)->ok_button), "clicked", GTK_SIGNAL_FUNC(form_edit_dlg_load_file_ok), fedlg); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fedlg->fs)-> cancel_button), "clicked", GTK_SIGNAL_FUNC(PopdownW), fedlg->fs); } gtk_widget_show(fedlg->fs); if(GTK_WIDGET_REALIZED(fedlg->fs)) gdk_window_raise(fedlg->fs->window); } static void form_edit_dlg_fill(struct form_edit_dlg_t *fedlg) { GtkWidget *label, *button, *vbox, *pbox, *frame; GtkWidget *menu; vbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(vbox); label = gtk_label_new(gettext("Fill forms")); gtk_notebook_append_page(GTK_NOTEBOOK(fedlg->tab), vbox, label); pbox = gtk_table_new(2, 4, FALSE); gtk_box_pack_start(GTK_BOX(vbox), pbox, FALSE, FALSE, 2); gtk_widget_show(pbox); label = gtk_label_new(gettext("Form number: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(pbox), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); fedlg->formnr = gtk_option_menu_new(); gtk_widget_set_usize(fedlg->formnr, 45, -1); gtk_table_attach(GTK_TABLE(pbox), fedlg->formnr, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 2, 2); menu = gtk_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(fedlg->formnr), menu); gtk_widget_show(fedlg->formnr); label = gtk_label_new(gettext("Action URL: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(pbox), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); fedlg->action = gtk_label_new(""); gtk_table_attach(GTK_TABLE(pbox), fedlg->action, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(fedlg->action); label = gtk_label_new(gettext("Request method: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(pbox), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); fedlg->method = gtk_label_new(""); gtk_table_attach(GTK_TABLE(pbox), fedlg->method, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(fedlg->method); label = gtk_label_new(gettext("Request encoding: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(pbox), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); fedlg->encoding = gtk_label_new(""); gtk_table_attach(GTK_TABLE(pbox), fedlg->encoding, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(fedlg->encoding); frame = gtk_frame_new(gettext("HTML form content")); gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 2); gtk_widget_show(frame); fedlg->swin = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(fedlg->swin, 400, 200); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fedlg->swin), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_container_add(GTK_CONTAINER(frame), fedlg->swin); gtk_widget_show(fedlg->swin); pbox = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(vbox), pbox, FALSE, FALSE, 2); gtk_widget_show(pbox); button = guitl_pixmap_button(load_xpm, NULL, gettext("Load HTML file ...")); gtk_container_add(GTK_CONTAINER(pbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(form_edit_dlg_load_file), fedlg); } static void form_edit_dlg_close(GtkWidget * w, struct form_edit_dlg_t *fedlg) { gtk_widget_hide(fedlg->top); _free(fedlg->docdata); if(fedlg->formdata) { form_free(fedlg->formdata); fedlg->formdata = NULL; gtk_widget_destroy(fedlg->form); } gtk_notebook_set_page(GTK_NOTEBOOK(fedlg->tab), 0); } static struct form_edit_dlg_t fedlg_info = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; void form_edit_dlg_clear(void) { if(!fedlg_info.top) return; if(!MT_IS_MAIN_THREAD()) { GDK_THREADS_ENTER(); } form_edit_dlg_refresh_list(NULL, &fedlg_info); fedlg_info.parent_url = NULL; form_edit_dlg_load_html_file(NULL, &fedlg_info); if(!MT_IS_MAIN_THREAD()) { GDK_THREADS_LEAVE(); } } void form_edit_dlg(void) { if(!fedlg_info.top) { GtkWidget *tbox, *bbox, *button; fedlg_info.top = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fedlg_info.top), gettext("Pavuk: HTML forms editor")); gtk_signal_connect(GTK_OBJECT(fedlg_info.top), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fedlg_info.top); tbox = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(fedlg_info.top), tbox); gtk_widget_show(tbox); fedlg_info.tab = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(tbox), fedlg_info.tab, TRUE, TRUE, 2); gtk_widget_show(fedlg_info.tab); form_edit_dlg_browse(&fedlg_info); form_edit_dlg_fill(&fedlg_info); gtk_signal_connect(GTK_OBJECT(fedlg_info.tab), "switch_page", GTK_SIGNAL_FUNC(form_edit_dlg_switch_page), &fedlg_info); bbox = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(tbox), bbox, FALSE, FALSE, 2); gtk_widget_show(bbox); button = guitl_pixmap_button(cancel_xpm, NULL, gettext("Close")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(form_edit_dlg_close), &fedlg_info); } form_edit_dlg_refresh_list(NULL, &fedlg_info); gtk_widget_show(fedlg_info.top); if(GTK_WIDGET_REALIZED(fedlg_info.top)) gdk_window_raise(fedlg_info.top->window); } #endif /* GTK_FACE */ pavuk-0.9.35/src/form.h0000644000175000001440000000436610325720716011572 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _form_h_ #define _form_h_ #include "dllist.h" typedef enum { FORM_T_TEXT, FORM_T_PASSWORD, FORM_T_CHECKBOX, FORM_T_RADIO, FORM_T_SUBMIT, FORM_T_RESET, FORM_T_FILE, FORM_T_HIDDEN, FORM_T_IMAGE, FORM_T_BUTTON, FORM_T_SELECT, FORM_T_OPTION, FORM_T_OPTGROUP, FORM_T_TEXTAREA, FORM_T_NONFORM, FORM_T_UNKNOWN } form_field_types; typedef struct { form_method method; form_encoding encoding; char *action; dllist *infos; char *text; void *parent_url; } form_info; typedef struct { form_field_types type; char *name; char *value; } form_field; extern dllist *form_parse_urlencoded_query(char *); extern char *form_decode_urlencoded_str(char *, int); extern char *form_encode_urlencoded_str(char *); extern char *form_encode_urlencoded(dllist *); extern char *form_encode_multipart_boundary(void); extern char *form_encode_multipart(dllist *, char *, int *); extern char *form_encode_query(form_info *, int *); extern form_field *form_field_new(char *, char *); extern form_field *form_field_duplicate(form_field *); extern int form_field_compare(dllist_t, dllist_t); extern int form_field_compare_name(dllist_t, dllist_t); extern form_info *form_info_dup(form_info *); #ifdef GTK_FACE #include #endif typedef struct { form_field_types type; char *name; char *default_value; char *text; int width; int height; int maxlen; int readonly; int checked; int disabled; int multiple; int selected; dllist *infos; #ifdef GTK_FACE GtkWidget *widget; GSList *rg; int idx; #endif } form_field_info; extern char *form_get_text(int, char *, int, int *); extern void form_free(form_info *); extern form_info *form_parse(char *, int); extern void form_get_default_successful(char *, dllist *, dllist **); #ifdef GTK_FACE extern void form_edit_dlg(void); extern void form_edit_dlg_clear(void); #endif #endif pavuk-0.9.35/src/Makefile.am0000644000175000001440000000667410565110634012514 00000000000000AM_CPPFLAGS = -DGETTEXT_DEFAULT_CATALOG_DIR="\"$(localedir)\"" \ -DDEFAULTRC="\"${sysconfdir}/pavukrc\"" EXTRA_DIST = pavuk_logo.xpm \ icons/append.xpm \ icons/apply.xpm \ icons/break.xpm \ icons/break_small.xpm \ icons/browse.xpm \ icons/cancel.xpm \ icons/clear.xpm \ icons/close_small.xpm \ icons/common.xpm \ icons/configure.xpm \ icons/continue.xpm \ icons/continue_small.xpm \ icons/delete.xpm \ icons/exit.xpm \ icons/gobg.xpm \ icons/limit.xpm \ icons/limits.xpm \ icons/load.xpm \ icons/maximize_small.xpm \ icons/minimize_small.xpm \ icons/modify.xpm \ icons/ok.xpm \ icons/restart.xpm \ icons/restart_small.xpm \ icons/save.xpm \ icons/schedule.xpm \ icons/stop.xpm \ icons/stop_small.xpm \ xpm/audio.xpm \ xpm/binary.xpm \ xpm/broken.xpm \ xpm/cantaccess.xpm \ xpm/compressed.xpm \ xpm/ftpdir.xpm \ xpm/gopherdir.xpm \ xpm/html.xpm \ xpm/image.xpm \ xpm/incomplete.xpm \ xpm/local.xpm \ xpm/notprocessed.xpm \ xpm/redirected.xpm \ xpm/rejected.xpm \ xpm/text.xpm \ xpm/video.xpm \ pavukrc.rc \ pavukrc.h \ pavuk.ico DISTCLEANFILES = ../po/pavuk.pot CLEANFILES = pavukrc.ro bin_PROGRAMS = pavuk pavuk_SOURCES = \ absio.c \ absio.h \ abstract.c \ abstract.h \ ainterface.c \ ainterface.h \ authinfo.c \ authinfo.h \ base64.c \ base64.h \ bufio.c \ bufio.h \ charset.h \ cleanup.c \ cmdparse.c \ condition.c \ condition.h \ config.c \ config.h \ cookie.c \ cookie.h \ css.c \ css.h \ debugl.h \ debugl.c \ decode.c \ decode.h \ digest_auth.c \ digest_auth.h \ dinfo.h \ dinfo.c \ dlhash.c \ dlhash.h \ dlhash_tools.c \ dlhash_tools.h \ dllist.c \ dllist.h \ dns.c \ dns.h \ doc.c \ doc.h \ errcode.c \ errcode.h \ file.c \ file.h \ fnmatch.c \ fnmatch.h \ form.c \ form.h \ form_encode.c \ ftp.c \ ftp.h \ gaccel.c \ gaccel.h \ gauthinfo.c \ gauthinfo.h \ gcinfo.c \ gcinfo.h \ gkeys.c \ gkeys.h \ gopher.c \ gopher.h \ gprop.c \ gprop.h \ gtkmulticol.c \ gtkmulticol.h \ gui.h \ gui_about.c \ gui_api.c \ gui_api.h \ gui_addurl.c \ gui_common.c \ gui_jscons.c \ gui_limits.c \ gui_main.c \ gui_scenario.c \ gui_sched.c \ gui_tools.c \ gui_tree.c \ html.c \ html.h \ htmlparser.c \ htmlparser.h \ htmltags.c \ http.c \ http.h \ http_proxy.c \ iecache.c \ iecache.h \ icons.c \ icons.h \ jsbind.c \ jsbind.h \ jstrans.c \ jstrans.h \ lang.h \ lfname.c \ lfname.h \ log.c \ log.h \ md5c.c \ md5c.h \ md4c.c \ md4c.h \ mime.c \ mime.h \ mimetype.c \ mimetype.h \ mode.c \ mode.h \ mopt.c \ mopt.h \ mozcache.c \ mozcache.h \ mt.h \ mt.c \ myssl_nss.c \ myssl_nss.h \ myssl_openssl.c \ myssl_openssl.h \ myssl.h \ net.c \ net.h \ nls.c \ nls.h \ nscache.c \ nscache.h \ ntlm_auth.c \ ntlm_auth.h \ options.h \ pavuk.c \ re.c \ re.h \ recurse.c \ recurse.h \ remind.c \ remind.h \ robots.c \ robots.h \ schedule.c \ schedule.h \ stats.c \ stats.h \ tag_pattern.c \ tag_pattern.h \ times.c \ times.h \ tools.c \ tools.h \ tr.h \ tr.c \ uconfig.h \ uconfig.c \ uexit.c \ uexit.h \ update_links.c \ update_links.h \ url.c \ url.h LDADD = @x_libs@ INCLUDES = $(x_cflags) ../po/pavuk.pot: $(pavuk_SOURCES) xgettext --default-domain=pavuk --keyword=gettext_nop -n -E $(pavuk_SOURCES) -o $@ pot: ../po/pavuk.pot reindent: indent -npcs -nprs -npsl -nsaf -nsai -nsaw -nut -bli0 -nlp *.c *.h @DEPS@ pavukrc.ro: pavukrc.rc pavukrc.h pavuk.ico SUFFIXES = .rc .ro .rc.ro: @WINDRES@ $< $@ pavuk-0.9.35/src/Makefile.in0000644000175000001440000005763310567010741012526 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = pavuk$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ac-config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_pavuk_OBJECTS = absio.$(OBJEXT) abstract.$(OBJEXT) \ ainterface.$(OBJEXT) authinfo.$(OBJEXT) base64.$(OBJEXT) \ bufio.$(OBJEXT) cleanup.$(OBJEXT) cmdparse.$(OBJEXT) \ condition.$(OBJEXT) config.$(OBJEXT) cookie.$(OBJEXT) \ css.$(OBJEXT) debugl.$(OBJEXT) decode.$(OBJEXT) \ digest_auth.$(OBJEXT) dinfo.$(OBJEXT) dlhash.$(OBJEXT) \ dlhash_tools.$(OBJEXT) dllist.$(OBJEXT) dns.$(OBJEXT) \ doc.$(OBJEXT) errcode.$(OBJEXT) file.$(OBJEXT) \ fnmatch.$(OBJEXT) form.$(OBJEXT) form_encode.$(OBJEXT) \ ftp.$(OBJEXT) gaccel.$(OBJEXT) gauthinfo.$(OBJEXT) \ gcinfo.$(OBJEXT) gkeys.$(OBJEXT) gopher.$(OBJEXT) \ gprop.$(OBJEXT) gtkmulticol.$(OBJEXT) gui_about.$(OBJEXT) \ gui_api.$(OBJEXT) gui_addurl.$(OBJEXT) gui_common.$(OBJEXT) \ gui_jscons.$(OBJEXT) gui_limits.$(OBJEXT) gui_main.$(OBJEXT) \ gui_scenario.$(OBJEXT) gui_sched.$(OBJEXT) gui_tools.$(OBJEXT) \ gui_tree.$(OBJEXT) html.$(OBJEXT) htmlparser.$(OBJEXT) \ htmltags.$(OBJEXT) http.$(OBJEXT) http_proxy.$(OBJEXT) \ iecache.$(OBJEXT) icons.$(OBJEXT) jsbind.$(OBJEXT) \ jstrans.$(OBJEXT) lfname.$(OBJEXT) log.$(OBJEXT) \ md5c.$(OBJEXT) md4c.$(OBJEXT) mime.$(OBJEXT) \ mimetype.$(OBJEXT) mode.$(OBJEXT) mopt.$(OBJEXT) \ mozcache.$(OBJEXT) mt.$(OBJEXT) myssl_nss.$(OBJEXT) \ myssl_openssl.$(OBJEXT) net.$(OBJEXT) nls.$(OBJEXT) \ nscache.$(OBJEXT) ntlm_auth.$(OBJEXT) pavuk.$(OBJEXT) \ re.$(OBJEXT) recurse.$(OBJEXT) remind.$(OBJEXT) \ robots.$(OBJEXT) schedule.$(OBJEXT) stats.$(OBJEXT) \ tag_pattern.$(OBJEXT) times.$(OBJEXT) tools.$(OBJEXT) \ tr.$(OBJEXT) uconfig.$(OBJEXT) uexit.$(OBJEXT) \ update_links.$(OBJEXT) url.$(OBJEXT) pavuk_OBJECTS = $(am_pavuk_OBJECTS) pavuk_LDADD = $(LDADD) pavuk_DEPENDENCIES = DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(pavuk_SOURCES) DIST_SOURCES = $(pavuk_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AT = @AT@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPS = @DEPS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GNOME_CONFIG = @GNOME_CONFIG@ GNOME_PREFIX = @GNOME_PREFIX@ GREP = @GREP@ GTK_CONFIG = @GTK_CONFIG@ GTK_CONFIG2 = @GTK_CONFIG2@ GZIP = @GZIP@ ICONV = @ICONV@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MSGFMT = @MSGFMT@ MSGFMTSTATS = @MSGFMTSTATS@ MSUBDIRS = @MSUBDIRS@ NSPR_CONFIG = @NSPR_CONFIG@ NWSMAKEFILE = @NWSMAKEFILE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PAVUK_ALLMO = @PAVUK_ALLMO@ PAVUK_ALLPO = @PAVUK_ALLPO@ PAVUK_LANG = @PAVUK_LANG@ PAVUK_MO = @PAVUK_MO@ PAVUK_PO = @PAVUK_PO@ PAVUK_POX = @PAVUK_POX@ PAVUK_UMO = @PAVUK_UMO@ PAVUK_UPO = @PAVUK_UPO@ PAVUK_UTFMODE = @PAVUK_UTFMODE@ PCRE_CONFIG = @PCRE_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ REVISION = @REVISION@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ x_cflags = @x_cflags@ x_libs = @x_libs@ AM_CPPFLAGS = -DGETTEXT_DEFAULT_CATALOG_DIR="\"$(localedir)\"" \ -DDEFAULTRC="\"${sysconfdir}/pavukrc\"" EXTRA_DIST = pavuk_logo.xpm \ icons/append.xpm \ icons/apply.xpm \ icons/break.xpm \ icons/break_small.xpm \ icons/browse.xpm \ icons/cancel.xpm \ icons/clear.xpm \ icons/close_small.xpm \ icons/common.xpm \ icons/configure.xpm \ icons/continue.xpm \ icons/continue_small.xpm \ icons/delete.xpm \ icons/exit.xpm \ icons/gobg.xpm \ icons/limit.xpm \ icons/limits.xpm \ icons/load.xpm \ icons/maximize_small.xpm \ icons/minimize_small.xpm \ icons/modify.xpm \ icons/ok.xpm \ icons/restart.xpm \ icons/restart_small.xpm \ icons/save.xpm \ icons/schedule.xpm \ icons/stop.xpm \ icons/stop_small.xpm \ xpm/audio.xpm \ xpm/binary.xpm \ xpm/broken.xpm \ xpm/cantaccess.xpm \ xpm/compressed.xpm \ xpm/ftpdir.xpm \ xpm/gopherdir.xpm \ xpm/html.xpm \ xpm/image.xpm \ xpm/incomplete.xpm \ xpm/local.xpm \ xpm/notprocessed.xpm \ xpm/redirected.xpm \ xpm/rejected.xpm \ xpm/text.xpm \ xpm/video.xpm \ pavukrc.rc \ pavukrc.h \ pavuk.ico DISTCLEANFILES = ../po/pavuk.pot CLEANFILES = pavukrc.ro pavuk_SOURCES = \ absio.c \ absio.h \ abstract.c \ abstract.h \ ainterface.c \ ainterface.h \ authinfo.c \ authinfo.h \ base64.c \ base64.h \ bufio.c \ bufio.h \ charset.h \ cleanup.c \ cmdparse.c \ condition.c \ condition.h \ config.c \ config.h \ cookie.c \ cookie.h \ css.c \ css.h \ debugl.h \ debugl.c \ decode.c \ decode.h \ digest_auth.c \ digest_auth.h \ dinfo.h \ dinfo.c \ dlhash.c \ dlhash.h \ dlhash_tools.c \ dlhash_tools.h \ dllist.c \ dllist.h \ dns.c \ dns.h \ doc.c \ doc.h \ errcode.c \ errcode.h \ file.c \ file.h \ fnmatch.c \ fnmatch.h \ form.c \ form.h \ form_encode.c \ ftp.c \ ftp.h \ gaccel.c \ gaccel.h \ gauthinfo.c \ gauthinfo.h \ gcinfo.c \ gcinfo.h \ gkeys.c \ gkeys.h \ gopher.c \ gopher.h \ gprop.c \ gprop.h \ gtkmulticol.c \ gtkmulticol.h \ gui.h \ gui_about.c \ gui_api.c \ gui_api.h \ gui_addurl.c \ gui_common.c \ gui_jscons.c \ gui_limits.c \ gui_main.c \ gui_scenario.c \ gui_sched.c \ gui_tools.c \ gui_tree.c \ html.c \ html.h \ htmlparser.c \ htmlparser.h \ htmltags.c \ http.c \ http.h \ http_proxy.c \ iecache.c \ iecache.h \ icons.c \ icons.h \ jsbind.c \ jsbind.h \ jstrans.c \ jstrans.h \ lang.h \ lfname.c \ lfname.h \ log.c \ log.h \ md5c.c \ md5c.h \ md4c.c \ md4c.h \ mime.c \ mime.h \ mimetype.c \ mimetype.h \ mode.c \ mode.h \ mopt.c \ mopt.h \ mozcache.c \ mozcache.h \ mt.h \ mt.c \ myssl_nss.c \ myssl_nss.h \ myssl_openssl.c \ myssl_openssl.h \ myssl.h \ net.c \ net.h \ nls.c \ nls.h \ nscache.c \ nscache.h \ ntlm_auth.c \ ntlm_auth.h \ options.h \ pavuk.c \ re.c \ re.h \ recurse.c \ recurse.h \ remind.c \ remind.h \ robots.c \ robots.h \ schedule.c \ schedule.h \ stats.c \ stats.h \ tag_pattern.c \ tag_pattern.h \ times.c \ times.h \ tools.c \ tools.h \ tr.h \ tr.c \ uconfig.h \ uconfig.c \ uexit.c \ uexit.h \ update_links.c \ update_links.h \ url.c \ url.h LDADD = @x_libs@ INCLUDES = $(x_cflags) SUFFIXES = .rc .ro all: all-am .SUFFIXES: .SUFFIXES: .rc .ro .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) pavuk$(EXEEXT): $(pavuk_OBJECTS) $(pavuk_DEPENDENCIES) @rm -f pavuk$(EXEEXT) $(LINK) $(pavuk_LDFLAGS) $(pavuk_OBJECTS) $(pavuk_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/absio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abstract.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ainterface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/authinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bufio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmdparse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/condition.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/css.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digest_auth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlhash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlhash_tools.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dllist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dns.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/doc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errcode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/form.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/form_encode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gaccel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gauthinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gkeys.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gopher.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gprop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkmulticol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_about.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_addurl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_api.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_jscons.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_limits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_scenario.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_sched.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_tools.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_tree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/html.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmlparser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmltags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_proxy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icons.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iecache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jsbind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jstrans.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lfname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md4c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mimetype.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mopt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mozcache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myssl_nss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myssl_openssl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nscache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntlm_auth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pavuk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/re.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recurse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/robots.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/schedule.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stats.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag_pattern.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/times.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tools.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uconfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uexit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update_links.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/icons $(distdir)/xpm @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-info-am ../po/pavuk.pot: $(pavuk_SOURCES) xgettext --default-domain=pavuk --keyword=gettext_nop -n -E $(pavuk_SOURCES) -o $@ pot: ../po/pavuk.pot reindent: indent -npcs -nprs -npsl -nsaf -nsai -nsaw -nut -bli0 -nlp *.c *.h @DEPS@ pavukrc.ro: pavukrc.rc pavukrc.h pavuk.ico .rc.ro: @WINDRES@ $< $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pavuk-0.9.35/src/tools.c0000644000175000001440000007317210400623655011761 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #ifdef HAVE_FLOCK #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_TERMIOS #include #endif #ifdef HAVE_FNMATCH #include #else #include "fnmatch.h" #endif #ifdef __CYGWIN__ #include #endif #ifdef GTK_FACE #include #endif #include "gui_api.h" #include "url.h" #include "doc.h" #include "ftp.h" #include "dinfo.h" #include "log.h" void strip_nl(char *str) { char *p; p = strchr(str, '\n'); if(p) *p = '\0'; p = strchr(str, '\r'); if(p) *p = '\0'; } void omit_chars(char *str, char *chars) { int src, dst; for(src = 0, dst = 0; str[src]; src++) { if(strchr(chars, str[src])) continue; str[dst] = str[src]; dst++; } str[dst] = '\0'; } #ifndef HAVE_SETENV int tl_setenv(const char *var, const char *val, int ovr) { char *pom = _malloc(strlen(var) + strlen(val) + 2); sprintf(pom, "%s=%s", var, val); return putenv(pom); } #endif #ifndef HAVE_INET6 static char *xstrherror(int enr) { char *p; switch (enr) { #ifdef NETDB_INTERNAL case NETDB_INTERNAL: p = strerror(errno); break; #endif #ifdef NETDB_SUCCESS case NETDB_SUCCESS: p = gettext("no error"); break; #endif #ifdef HOST_NOT_FOUND case HOST_NOT_FOUND: p = gettext("host not found"); break; #endif #ifdef TRY_AGAIN case TRY_AGAIN: p = gettext("temporary error (try again later)"); break; #endif #ifdef NO_RECOVERY case NO_RECOVERY: p = gettext("non recoverable error"); break; #endif #ifdef NO_ADDRESS case NO_ADDRESS: p = gettext("name is valid, but doesn't have an IP address"); break; #endif default: p = gettext("unknown hostname translation error"); } return p; } #endif void xherror(const char *str) { #ifdef HAVE_INET6 xprintf(1, "%s: %s\n", str, gai_strerror(_h_errno_)); #else xprintf(1, "%s: %s\n", str, xstrherror(_h_errno_)); #endif } void xperror(const char *str) { xprintf(1, "%s: %s\n", str, strerror(errno)); } #ifdef HAVE_MT static void st_xvaprintf(int log, const char *strs, va_list * args) #else void xvaprintf(int log, const char *strs, va_list * args) #endif { #ifdef GTK_FACE char *buf = g_strdup_vprintf(strs, *args); #else char buf[4096]; #ifdef HAVE_VSNPRINTF int l = vsnprintf(buf, sizeof(buf), strs, *args); if(TL_BETWEEN(l, 0, sizeof(buf) - 1)) buf[l] = '\0'; #else vsprintf(buf, strs, *args); #endif #endif if(log && cfg.logfile) log_str(buf); #ifdef I_FACE if(cfg.xi_face && cfg.done && !cfg.quiet) { gui_xprint(buf); } else #endif { if(!cfg.quiet && !cfg.bgmode) { bool_t wout = TRUE; #ifdef HAVE_TERMIOS if(cfg.tccheck) { static int _istty = -1; static pid_t _pgrp; if(_istty == -1) { _istty = isatty(1); #ifdef GETPGRP_NEED_PID _pgrp = getpgrp(getpid()); #else _pgrp = getpgrp(); #endif } if(_istty && tcgetpgrp(1) != _pgrp) wout = FALSE; } #endif if(wout) { fwrite(buf, sizeof(char), strlen(buf), stdout); fflush(stdout); } } } #ifdef GTK_FACE g_free(buf); #endif } #ifdef HAVE_MT void xvaprintf(int log, const char *strs, va_list * args) { doc *cdoc; cdoc = (doc *) pthread_getspecific(cfg.currdoc_key); if(!cdoc || (cfg.nthr == 1) || cfg.immessages) st_xvaprintf(log, strs, args); else if(cdoc) { doc_msg *dm = _malloc(sizeof(doc_msg)); char buf[4096]; buf[0] = '\0'; vsprintf(buf, strs, *args); dm->log = log; dm->msg = tl_strdup(buf); cdoc->msgbuf = dllist_append(cdoc->msgbuf, dm); } else st_xvaprintf(log, strs, args); } #endif void xprintf(int log, const char *strs, ...) { va_list args; va_start(args, strs); xvaprintf(log, strs, &args); va_end(args); } void xdebug(int level, const char *strs, ...) { #ifdef HAVE_MT static pthread_mutex_t unique_lock = PTHREAD_MUTEX_INITIALIZER; static volatile int unique = 0; #endif #ifdef DEBUG if(cfg.debug && (level & cfg.debug_level)) { va_list args; va_start(args, strs); #ifdef HAVE_MT pthread_mutex_lock(&unique_lock); printf("%4d ", unique++); st_xvaprintf(1, strs, &args); pthread_mutex_unlock(&unique_lock); #else xvaprintf(1, strs, &args); #endif va_end(args); } #endif /* DEBUG */ } void xvadebug(int level, const char *strs, va_list * args) { #ifdef DEBUG if(cfg.debug && (level & cfg.debug_level)) { xvaprintf(1, strs, args); } #endif } unsigned int hash_func(const char *str, int num) { const char *p = str; unsigned int rv = 0; while(*p) { rv = (rv + (unsigned char) *p) % num; p++; } rv = rv % num; return rv; } static void report_unsup_locking(void) { static int visited = FALSE; if(!visited) { visited = TRUE; xprintf(1, "------------------------------------------------------------------------------\n"); xprintf(1, gettext ("Warning: locking not supported ... don't run multiple processes or threads!\n")); xprintf(1, "------------------------------------------------------------------------------\n"); } } int tl_flock(int *fd, const char *filename, int opt, int b_lock) { int i = 0; /* currently it seemds to me that BeOS */ /* doesn't support file locking :-( */ /* so just without real locking, report */ /* successfully acquired lock */ #ifdef __BEOS__ report_unsup_locking(); return 0; #endif DEBUG_LOCKS("Locking file - %s\n", filename); if(b_lock) { bool_t ready = FALSE; while(!ready) { #ifdef HAVE_FLOCK if(flock(*fd, LOCK_EX | LOCK_NB)) { if(errno == EWOULDBLOCK) { xprintf(1, gettext("waiting to release lock on FD : %d\n"), *fd); i = flock(*fd, LOCK_EX); } else if(errno == ENOSYS || #ifdef ENOTSUP errno == ENOTSUP || #endif errno == EOPNOTSUPP) { report_unsup_locking(); break; } else perror(filename); } else { i = 0; } #else #ifdef HAVE_FCNTL_LOCK struct flock fl; memset(&fl, '\0', sizeof(fl)); fl.l_type = F_WRLCK; if(fcntl(*fd, F_SETLK, &fl)) { if(errno == EWOULDBLOCK) { xprintf(1, gettext("waiting to release lock on FD : %d\n"), *fd); memset(&fl, '\0', sizeof(fl)); fl.l_type = F_WRLCK; i = fcntl(*fd, F_SETLKW, &fl); } else if(errno == ENOSYS || #ifdef ENOTSUP errno == ENOTSUP || #endif errno == EOPNOTSUPP) { report_unsup_locking(); break; } else perror(filename); } else { i = 0; } #endif #endif if(access(filename, F_OK)) { DEBUG_LOCKS("Lock file was removed - creating new one.\n"); close(*fd); if(!makealldirs(filename)) { *fd = open(filename, opt, 0644); if(*fd < 0) { i = -1; ready = TRUE; } } else { i = -1; ready = TRUE; } } else ready = TRUE; } } else { #ifdef HAVE_FLOCK i = flock(*fd, LOCK_EX | LOCK_NB); #else #ifdef HAVE_FCNTL_LOCK struct flock fl; memset(&fl, '\0', sizeof(fl)); fl.l_type = F_WRLCK; i = fcntl(*fd, b_lock ? F_SETLKW : F_SETLK, &fl); #endif #endif if(i < 0 && (errno == ENOSYS || #ifdef ENOTSUP errno == ENOTSUP || #endif errno == EOPNOTSUPP)) { report_unsup_locking(); i = 0; } else if(i < 0) perror(filename); } return i; } #ifdef HAVE_FCNTL_LOCK int tl_funlock(int fd) { struct flock fl; int i; memset(&fl, '\0', sizeof(fl)); fl.l_type = F_UNLCK; i = fcntl(fd, F_SETLK, &fl); return i; } #endif int tl_mkstemp(char *pattern) { #ifdef HAVE_MKSTEMP return mkstemp(pattern); #else tmpnam(pattern); return open(pattern, O_CREAT | O_RDWR | O_TRUNC | O_EXCL | O_BINARY, 0600); #endif } long int _atoi(char *str) { char *__eptr__; long int rv; if(!*str) { errno = ERANGE; rv = 0; } else { errno = 0; rv = strtol(str, (char **) &__eptr__, 10); if(*__eptr__ != '\0') errno = ERANGE; else errno = 0; } return rv; } double _atof(char *str) { char *__eptr__; double rv; if(!*str) { errno = ERANGE; rv = 0.0; } else { errno = 0; rv = strtod(str, (char **) &__eptr__); if(*__eptr__ != '\0') errno = ERANGE; else errno = 0; } return rv; } char *_strtrchr(char *str, int cfrom, int cto) { char *p = str; while((p = strchr(p, cfrom))) *p = cto; return str; } void *_malloc(int sz) { void *ret = malloc(sz); if(!ret) { perror("malloc"); } return ret; } void *_realloc(void *from, int sz) { void *ret = from ? realloc(from, sz) : malloc(sz); if(!ret) { perror("realloc"); } return ret; } char *get_1qstr(const char *str) { static const char *p = 0; static char pom[4096]; const char *pom1 = NULL, *pom2 = NULL; int found; bool_t wasesc = FALSE; if(str) p = str; for(; p && *p && (!pom1 || !pom2); p++) { found = FALSE; if(!wasesc && *p == '\"') found = TRUE; if(!wasesc && *p == '\\') wasesc = TRUE; else wasesc = FALSE; if(!pom1 && found) pom1 = p + 1; else if(!pom2 && found) pom2 = p; } if(pom1 && pom2) { char *p2; p2 = pom; while(pom1 < pom2) { if(*pom1 == '\\') { pom1++; *p2 = *pom1; } else { *p2 = *pom1; } p2++; pom1++; } *p2 = '\0'; return pom; } else { p = NULL; return NULL; } } char *escape_str(char *str, char *unsafe) { char sbuf[4096]; char *p, *r; for(p = str, r = sbuf; *p; p++) { if(strchr(unsafe, *p)) { *r = '\\'; r++; *r = *p; r++; } else { *r = *p; r++; } } *r = '\0'; return tl_strdup(sbuf); } /**************************************************************/ /* implementation of standard function strtok */ /* split string at occurence of by setting \0-character */ /* store next element (one behind \0) pointer for next call */ /* calling with str equal to zero uses stored pointer */ /**************************************************************/ char *strtokc_r(char *str, int chr, char **save) { char *ret; if(str) *save = str; if((ret = *save)) { char *pom; if((pom = strchr(*save, chr))) { *pom = '\0'; *save = pom + 1; } else *save = NULL; } return ret; } /**************************************/ /* najdi poziciu n-teho vyskytu znaku */ /* FIXME: Translate me! */ /**************************************/ char *strfindnchr(char *str, int chr, int n) { int cnt; char *p; for(p = str, cnt = 0; *p && cnt < n; p++) { if(*p == chr) cnt++; } if(cnt != n) return NULL; else return p; } /********************************************/ /* search in list for string occurrence */ /********************************************/ bool_t is_in_list(char *str, char **list) { char **p = list; while(*p) { if(!strcasecmp(*p, str)) return TRUE; p++; } return FALSE; } bool_t is_in_dllist(char *str, dllist * list) { dllist *p; for(p = list; p; p = p->next) { if(!strcasecmp((char *) p->data, str)) return TRUE; } return FALSE; } /****************************************************/ /* match string again list of wildcard patterns */ /****************************************************/ bool_t is_in_pattern_list(char *str, char **list) { char **p = list; while(*p) { if(!fnmatch(*p, str, 0)) return TRUE; p++; } return FALSE; } bool_t is_in_pattern_dllist(char *str, dllist * list) { dllist *p; for(p = list; p; p = p->next) { if(!fnmatch((char *) p->data, str, 0)) return TRUE; } return FALSE; } /*******************************************************/ /* split string to NULL terminated array of strings */ /* separated with some of characters in sep */ /*******************************************************/ char **tl_str_split(const char *liststr, const char *sep) { const char *p; int i = 0; char **ret_val = NULL; int ilen; if(!liststr || !*liststr) return NULL; ret_val = _malloc(sizeof(char **)); ret_val[0] = NULL; p = liststr; while(*p) { ilen = strcspn(p, sep); ret_val = _realloc(ret_val, sizeof(char **) * (i + 2)); ret_val[i] = tl_strndup(p, ilen); ret_val[i + 1] = NULL; p += ilen; if(*p) p++; i++; } return ret_val; } dllist *tl_numlist_split(char *str, char *sep) { dllist *rv = NULL; char **v; int i; v = tl_str_split(str, sep); for(i = 0; v && v[i]; i++) { long n = _atoi(v[i]); if(errno == ERANGE) { while(rv) rv = dllist_remove_entry(rv, rv); break; } rv = dllist_append(rv, (dllist_t) n); } tl_strv_free(v); return rv; } /* free null terminated string vector */ void tl_strv_free(char **v) { int i; for(i = 0; v && v[i]; i++) _free(v[i]); _free(v); } /* count length of null terminated string vector */ int tl_strv_length(char **v) { int i; for(i = 0; v && v[i]; i++); return i; } int tl_strv_find(char **v, char *s) { int i; for(i = 0; v && v[i]; i++) { if(!strcmp(v[i], s)) return i; } return -1; } static int sort_strcmp(const char **s1, const char **s2) { return strcmp(*s1, *s2); } void tl_strv_sort(char **v) { if(v) { qsort((void *) v, tl_strv_length(v), sizeof(char *), (int (*)(const void *, const void *)) sort_strcmp); } } /*************************************************/ /* change all characters in string to upper case */ /*************************************************/ char *upperstr(char *s) { char *p; for(p = s; *p != '\0'; p++) *p = tl_ascii_toupper(*p); return s; } /*************************************************/ /* change all characters in string to lower case */ /*************************************************/ char *lowerstr(char *s) { char *p; for(p = s; *p != '\0'; p++) *p = tl_ascii_tolower(*p); return s; } /**********************/ /* duplicate string */ /**********************/ char *tl_strdup(const char *s) { char *p; if(s) { p = (char *) _malloc(strlen(s) + 1); strcpy(p, s); } else p = NULL; return p; } /****************************************/ /* duplicate n characters from string */ /****************************************/ char *tl_strndup(const char *s, int n) { char *p; if(!s) return NULL; p = (char *) _malloc(n + 1); if(n) strncpy(p, s, n); *(p + n) = '\0'; return p; } /***************************************************/ /* create all directories in path specification */ /***************************************************/ int makealldirs(const char *path) { char pom[PATH_MAX]; const char *p; pom[0] = '\0'; if(path) { p = path; #ifdef __CYGWIN__ /* we can't create new drive on WIN32, so the drive */ /* specification part of path must be skipped */ #ifdef HAVE_NEWSTYLE_CYGWIN if(p[0] == '/' && p[1] == '/') { char *sp; if((sp = strchr(p + 2, '/')) && (sp = strchr(sp + 1, '/'))) { strncpy(pom, p, sp - p); pom[sp - p] = '\0'; p = sp; } } else if(!strncmp(p, "/cygdrive/", 10) && (strlen(p) > 10) && tl_ascii_isalpha(p[10])) { strncpy(pom, p, 11); pom[11] = '\0'; p += 11; } p += strspn(p, "/"); #else if(strlen(p) > 2 && p[0] == '/' && p[1] == '/' && tl_ascii_isalpha(p[2]) && (p[3] == '\0' || p[3] == '/')) { strncpy(pom, p, 3); pom[3] = '\0'; p += 3; } p += strspn(p, "/"); #endif #endif while(*p) { int ilen = strcspn(p, "/"); strcat(pom, "/"); strncat(pom, p, ilen); p += ilen; p += strspn(p, "/"); if(*p && access(pom, F_OK)) { if(mkdir(pom, S_IRWXU | S_IRGRP | S_IROTH | S_IXGRP | S_IXOTH)) return -1; } } } return 0; } /***********************************************/ /* z relativnej cesty urobi absolutnu a vyhodi */ /* vsetky "." a ".." adresare */ /* FIXME: Translate me! */ /***********************************************/ char *get_abs_file_path_oss(char *path) { char *p, pom[PATH_MAX], *tmp, result[PATH_MAX] = "/"; int ilen; bool_t last = 1; for(p = path; tl_ascii_isspace(*p) && *p; p++); if(*p != '/') { tmp = (char *) getcwd(NULL, PATH_MAX); if(priv_cfg.cache_dir) sprintf(pom, "%s/%s", priv_cfg.cache_dir, p); else sprintf(pom, "%s/%s", tmp, p); _free(tmp); } else { sprintf(pom, "%s", p); } p = pom; #ifdef __CYGWIN__ #ifndef HAVE_NEWSTYLE_CYGWIN /* workaround to allow //[drive]/... paths on WIN32 */ if(strlen(pom) > 2 && pom[0] == '/' && pom[1] == '/' && tl_ascii_isalpha(pom[2]) && (pom[3] == '\0' || pom[3] == '/')) { strncpy(result, pom, 3); result[3] = '\0'; p = pom + 3; } #else /* workaround to allow //host/share/... paths on WIN32 */ /* AFAIK this type of paths work with cygwin-1.1 =< */ if(pom[0] == '/' && pom[1] == '/') { strcpy(result, "//"); p++; } #endif #endif if(!*p) strcpy(result, "/"); while(*p) { ilen = strcspn(p, "/"); if(*(p + ilen)) *(p + ilen) = '\0'; else last = 0; if(strcmp(p, ".")) { if(strcmp(p, "..")) { if(!tl_is_dirname(result)) strcat(result, "/"); strcat(result, p); } else { tmp = strrchr(result, '/'); *(tmp + 1 - (tmp != result)) = '\0'; } } p += ilen + last; p += strspn(p, "/"); } ilen = strlen(path); p = path + ilen - 1; if(ilen && *p != '/' && tl_is_dirname(result)) { result[strlen(result) - 1] = '\0'; } if((tl_is_dirname(path) && !tl_is_dirname(result)) || (strlen(result) == 0)) { result[strlen(result) + 1] = '\0'; result[strlen(result)] = '/'; } return tl_strdup(result); } /***********************************************/ /* z relativnej cesty urobi absolutnu a vyhodi */ /* vsetky "." a ".." adresare */ /* FIXME: Translate me! */ /***********************************************/ char *get_abs_file_path(char *path) { char *p, pom[PATH_MAX], *tmp, result[PATH_MAX] = "/"; int ilen; bool_t last = 1; for(p = path; tl_ascii_isspace(*p) && *p; p++); if(*p != '/') { tmp = (char *) getcwd(NULL, PATH_MAX); sprintf(pom, "%s/%s", tmp ? tmp : "", p); _free(tmp); } else { sprintf(pom, "%s", p); } p = pom; if(!*p) strcpy(result, "/"); while(*p) { ilen = strcspn(p, "/"); if(*(p + ilen)) *(p + ilen) = '\0'; else last = 0; if(strcmp(p, ".")) { if(strcmp(p, "..")) { if(!tl_is_dirname(result)) strcat(result, "/"); strcat(result, p); } else { tmp = strrchr(result, '/'); *(tmp + 1 - (tmp != result)) = '\0'; } } p += ilen + last; p += strspn(p, "/"); } ilen = strlen(path); p = path + ilen - 1; if(ilen && *p != '/' && tl_is_dirname(result) == '/') { result[strlen(result) - 1] = '\0'; } if((tl_is_dirname(path) && !tl_is_dirname(result)) || (strlen(result) == 0)) { result[strlen(result) + 1] = '\0'; result[strlen(result)] = '/'; } return tl_strdup(result); } #ifdef __CYGWIN__ char *cvt_win32_to_unix_path(char *path) { char pom[PATH_MAX]; char *p = tl_strdup(path); char *p1; pom[0] = '\0'; p1 = p; if(strlen(p) >= 2 && tl_ascii_isalpha(p[0]) && p[1] == ':') { #ifdef HAVE_NEWSTYLE_CYGWIN sprintf(pom, "/cygdrive/%c", p[0]); p += 2; #else sprintf(pom, "//%c", p[0]); p += 2; #endif } _strtrchr(p, '\\', '/'); strcat(pom, p); _free(p1); return get_abs_file_path_oss(pom); } char *cvt_unix_to_win32_path(char *path) { char res[PATH_MAX]; cygwin32_conv_to_win32_path(path, res); return tl_strdup(res); } #endif /**********************************/ /* spocita vyskyt znaku v retazci */ /* FIXME: Translate me! */ /**********************************/ static int str_cnt_chr(char *s, int c) { char *p = s; int ret = 0; while(*p) { if(*p == c) ret++; p++; } return ret; } /********************************************/ /* urci relativnu cestu z adresara v ktorom */ /* sa nachadza prvy subor na druhy subor */ /* FIXME: Translate me! */ /********************************************/ char *get_relative_path(char *fromabs, char *toabs) { char *p1, *p2, *pom1, *pom2; int offset = 0, i, plom; char *rv = NULL; pom1 = p1 = get_abs_file_path_oss(fromabs); pom2 = p2 = get_abs_file_path_oss(toabs); while(*p1 && *p2 && *p1 == *p2) { p1++; p2++; } #if 0 /* this is not good behaviour, as lynx and netscape behaves */ /* differently on empty HREFs */ if(!strcmp(p1, p2)) { free(pom1); free(pom2); return tl_strdup(""); } #endif if(*p1) p1--; while((p1 >= pom1) && *p1 != '/') p1--; if(*p1 != '/') { free(pom1); free(pom2); return NULL; } offset = p1 - pom1; plom = str_cnt_chr(p1 + 1, '/'); for(i = 0; i < plom; i++) { rv = tl_str_concat(rv, "../", NULL); } rv = tl_str_concat(rv, pom2 + offset + 1, NULL); free(pom1); free(pom2); return rv; } /********************************/ /* vrati poziciu pripony suboru */ /* FIXME: Translate me! */ /********************************/ char *tl_get_extension(char *fname) { char *p1, *p2; p1 = strrchr(fname, '.'); p2 = strrchr(fname, '/'); if(p1 > p2) { return (p1 + 1); } else return ""; } char *tl_get_basename(char *fname) { char *p; if((p = strrchr(fname, '/'))) p++; else p = fname; return p; } static const char *html_tag_tab[] = { " 0) { for(i = 0; i < NUM_ELEM(html_tag_tab); i++) if(strstr(pom, html_tag_tab[i])) { bufio_close(fd); return TRUE; } } else { if(len < 0) xperror("file_is_html"); bufio_close(fd); return FALSE; } } bufio_close(fd); } return FALSE; } void tl_sleep(unsigned int s) { /* if we measure timings, we don't sleep */ if(cfg.time_logfile) { return; } #ifndef HAVE_MT if(cfg.xi_face) { gui_msleep(s * 1000); } else #endif { #ifdef HAVE_MT struct timeval tout; tout.tv_sec = s; tout.tv_usec = 0; select(0, NULL, NULL, NULL, &tout); #else sleep(s); #endif } } void tl_msleep(unsigned int ms) { /* if we measure timings, we don't sleep */ if(cfg.time_logfile) { return; } #ifndef HAVE_MT if(cfg.xi_face) { gui_msleep(ms); } else #endif #if defined HAVE_USLEEP && !defined HAVE_MT usleep(ms * 1000); #else { struct timeval tout; tout.tv_sec = ms / 1000; tout.tv_usec = (ms % 1000) * 1000; select(0, NULL, NULL, NULL, &tout); } #endif } int unlink_recursive(char *fn) { struct stat estat; if(lstat(fn, &estat)) { xperror(fn); return -1; } if(!S_ISDIR(estat.st_mode)) { if(unlink(fn)) { xperror(fn); return (-1); } } else { DIR *dir; struct dirent *dent; char next_dir[PATH_MAX]; if(!(dir = opendir(fn))) { xperror(fn); return -1; } while((dent = readdir(dir))) { sprintf(next_dir, "%s/%s", fn, dent->d_name); if(!strcmp(dent->d_name, ".")) continue; if(!strcmp(dent->d_name, "..")) continue; unlink_recursive(next_dir); } closedir(dir); if(rmdir(fn)) { xperror(next_dir); return -1; } } return 0; } int str_is_in_list(int casesensitive, char *str, ...) { char *which; va_list args; int found = FALSE; va_start(args, str); for(which = va_arg(args, char *); which; which = va_arg(args, char *)) { if(casesensitive ? !strcmp(str, which) : !strcasecmp(str, which)) { found = TRUE; break; } } va_end(args); return found; } int copy_fd_to_file(int fd, char *filename) { char pom[32768]; int len; int dfd; if((dfd = open(filename, O_BINARY | O_WRONLY | O_CREAT, 0644)) < 0) { xperror(filename); return -1; } lseek(fd, 0, SEEK_SET); while((len = read(fd, pom, sizeof(pom))) > 0) { if(len != write(dfd, pom, len)) return -1; } close(dfd); lseek(fd, 0, SEEK_END); return len; } char *tl_adjust_filename(char *path) { char *pom; char *p, *p2; int l, n; pom = _malloc(strlen(path) + 1); p = pom; #ifdef __CYGWIN__ #ifndef HAVE_NEWSTYLE_CYGWIN l = strspn(path, "/"); strncpy(p, path, l); p += l; *p = '\0'; path += l; #endif #endif while(*path) { n = strspn(path, "/"); path += n; l = strcspn(path, "/"); if(n) { *p = '/'; p++; } if(!*(path + l) && ((NAME_MAX - 4) < l)) { strncpy(p, path + l - (NAME_MAX - 4), NAME_MAX - 4); p += NAME_MAX - 4; } else if(l > NAME_MAX) { strncpy(p, path, NAME_MAX); p += NAME_MAX; } else { strncpy(p, path, l); p += l; } path += l; } *p = '\0'; n = strlen(pom); p = strrchr(pom, '/'); while(p && (n > PATH_MAX)) { *p = '\0'; p2 = strrchr(pom, '/'); if(p2) { strcpy(p2 + 1, p + 1); n -= p - p2; } p = p2; } return pom; } int tl_filename_needs_adjust(char *path) { int l; if(strlen(path) > PATH_MAX) return TRUE; while(*path) { path += strspn(path, "/"); l = strcspn(path, "/"); if(!*(path + l) && ((NAME_MAX - 4) < l)) return TRUE; else if(l > NAME_MAX) return TRUE; path += l; } return FALSE; } int tl_is_dirname(const char *path) { const char *p = strrchr(path, '/'); return (p && (*(p + 1) == '\0')); } char *tl_str_append(char *str1, char *str2) { int l1, l2; char *rv; l1 = str1 ? strlen(str1) : 0; l2 = strlen(str2); rv = _realloc(str1, l1 + l2 + 1); strcpy(rv + l1, str2); return rv; } char *tl_str_nappend(char *str1, const char *str2, int n) { int l1; char *rv; l1 = str1 ? strlen(str1) : 0; rv = _realloc(str1, l1 + n + 1); strncpy(rv + l1, str2, n); rv[l1 + n] = '\0'; return rv; } char *tl_str_concat(char *str1, ...) { char *p; va_list args; int len; char *rv = str1; len = str1 ? strlen(str1) : 0; va_start(args, str1); for(p = va_arg(args, char *); p; p = va_arg(args, char *)) { int slen = strlen(p); rv = _realloc(rv, len + slen + 1); strcpy(rv + len, p); len += slen; } va_end(args); return rv; } char *tl_data_concat_str(int *len, char *data, ...) { char *p; va_list args; char *rv = data; va_start(args, data); for(p = va_arg(args, char *); p; p = va_arg(args, char *)) { int slen = strlen(p); rv = _realloc(rv, *len + slen + 1); strcpy(rv + *len, p); *len += slen; } va_end(args); return rv; } char *tl_data_concat_data(int *tlen, char *tdata, int len, char *data) { tdata = _realloc(tdata, *tlen + len); memcpy(tdata + *tlen, data, len); *tlen += len; return tdata; } char *tl_load_text_file(char *filename) { char pom[1024]; int tlen, len, fd; char *rv = NULL; if((fd = open(filename, O_RDONLY | O_BINARY)) < 0) { xperror(filename); return NULL; } tlen = 0; while((len = read(fd, pom, sizeof(pom))) > 0) { rv = tl_data_concat_data(&tlen, rv, len, pom); } close(fd); if(rv) { rv = _realloc(rv, tlen + 1); rv[tlen] = '\0'; } return rv; } int tl_save_text_file(char *filename, char *content, int length) { int fd; int rv = 0; if(length < 0) length = strlen(content); if((fd = open(filename, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC), 0644) < 0) { xperror(filename); return -1; } if(write(fd, content, length) != length) { xperror(filename); rv = -1; } close(fd); return rv; } pavuk-0.9.35/src/tools.h0000644000175000001440000001277710170706111011763 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _tools_h_ #define _tools_h_ #include #include #include #include "dllist.h" typedef unsigned char bool_t; #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #define TL_MAX(x,y) ((x) > (y) ? (x) : (y)) #define TL_MIN(x,y) ((x) < (y) ? (x) : (y)) #define TL_BETWEEN(c,a,b) ((c) >= (a) && (c) <= (b)) #define NUM_ELEM(x) ((unsigned int) (sizeof(x) / sizeof(x[0]))) #define _free(ptr) if (ptr) {free(ptr); ptr = NULL;} extern char *tl_strdup(const char *); extern char *tl_strndup(const char *, int); extern char **tl_str_split(const char *, const char *); extern dllist *tl_numlist_split(char *, char *); extern void tl_strv_free(char **); extern int tl_strv_find(char **, char *); extern int tl_strv_length(char **); extern void tl_strv_sort(char **); extern char *tl_str_append(char *, char *); extern char *tl_str_nappend(char *, const char *, int); extern char *tl_str_concat(char *, ...); extern char *tl_data_concat_data(int *, char *, int, char *); extern char *tl_data_concat_str(int *, char *, ...); extern void tl_msleep(unsigned int); extern void tl_sleep(unsigned int); extern char *tl_adjust_filename(char *); extern int tl_filename_needs_adjust(char *); extern int tl_is_dirname(const char *); extern char *tl_get_extension(char *); extern char *tl_get_basename(char *); extern int tl_flock(int *, const char *, int, int); extern int tl_mkstemp(char *); extern char *tl_load_text_file(char *); extern int tl_save_text_file(char *, char *, int); extern void strip_nl(char *); extern void omit_chars(char *, char *); extern char *upperstr(char *); extern char *lowerstr(char *); extern int makealldirs(const char *); extern char *get_abs_file_path(char *); extern char *get_abs_file_path_oss(char *); extern char *get_relative_path(char *, char *); extern bool_t is_in_list(char *, char **); extern bool_t is_in_dllist(char *, dllist *); extern bool_t is_in_pattern_list(char *, char **); extern bool_t is_in_pattern_dllist(char *, dllist *); extern char *get_1qstr(const char *); extern char *strtokc_r(char *, int, char **); extern char *strfindnchr(char *, int, int); extern void *_malloc(int); extern void *_realloc(void *, int); extern int get_line(char *, int, int); extern bool_t file_is_html(char *); extern bool_t ext_is_html(char *); extern long int _atoi(char *); extern double _atof(char *); extern char *_strtrchr(char *, int, int); extern void xprintf(int, const char *, ...); extern void xvaprintf(int, const char *, va_list *); extern void xdebug(int, const char *, ...); extern void xvadebug(int, const char *, va_list *); extern void xperror(const char *); extern void xherror(const char *); extern int unlink_recursive(char *); extern unsigned int hash_func(const char *, int); extern int str_is_in_list(int, char *, ...); extern int copy_fd_to_file(int, char *); extern char *escape_str(char *, char *); #ifdef __CYGWIN__ extern char *cvt_win32_to_unix_path(char *); extern char *cvt_unix_to_win32_path(char *); extern int tl_win32_system(char *); #define tl_system(cmd) tl_win32_system(cmd) #else #define tl_system(cmd) system(cmd) #endif #ifndef HAVE_SETENV extern int tl_setenv(const char *, const char *, int); #define setenv tl_setenv #define unsetenv(var) tl_setenv(var, "", 1) #endif #ifdef HAVE_FLOCK #include #define _flock(fd, fname, opt, blk) tl_flock(&fd, fname, opt, blk) #define _funlock(fd) flock(fd, LOCK_UN) #else #ifdef HAVE_FCNTL_LOCK extern int tl_funlock(int); #define _flock(fd, fname, opt, blk) tl_flock(&fd, fname, opt, blk) #define _funlock(fd) tl_funlock(fd) #else #define _flock(fd, fname, opt, blk) 0 #define _funlock(fd) 0 #endif #endif #define new_string tl_strdup #define new_n_string tl_strndup #define tl_ascii_isalnum(c) \ (TL_BETWEEN((c),'a','z') || TL_BETWEEN((c),'A','Z') || \ TL_BETWEEN((c),'0','9')) #define tl_ascii_isalpha(c) \ (TL_BETWEEN((c),'a','z') || TL_BETWEEN((c),'A','Z')) #define tl_ascii_isascii(c) \ (TL_BETWEEN((c),0,127)) #define tl_ascii_isblank(c) \ (((c) == ' ') || ((c) == '\t')) #define tl_ascii_iscntrl(c) \ (TL_BETWEEN((c),0,31) || ((c) == 127)) #define tl_ascii_isdigit(c) \ (TL_BETWEEN((c),'0','9')) #define tl_ascii_isgraph(c) \ (TL_BETWEEN((c),33,126)) #define tl_ascii_islower(c) \ (TL_BETWEEN((c),'a','z')) #define tl_ascii_isprint(c) \ (TL_BETWEEN((c),32,126)) #define tl_ascii_ispunct(c) \ (TL_BETWEEN((c),33,47) || TL_BETWEEN((c),58,64) || \ TL_BETWEEN((c),91,96) || TL_BETWEEN((c),123,126)) #define tl_ascii_isspace(c) \ (((c) == ' ') || ((c) == '\f') || ((c) == '\n') || ((c) == '\r') || \ ((c) == '\t') || ((c) == '\v')) #define tl_ascii_isupper(c) \ (TL_BETWEEN((c),'A','Z')) #define tl_ascii_isxdigit(c) \ (TL_BETWEEN((c),'0','9') || TL_BETWEEN((c),'a','f') || \ TL_BETWEEN((c),'A','F')) #define tl_ascii_tolower(c) \ (tl_ascii_isupper(c) ? ('a' + (c - 'A')) : c) #define tl_ascii_toupper(c) \ (tl_ascii_islower(c) ? ('A' + (c - 'a')) : c) #endif pavuk-0.9.35/src/html.c0000644000175000001440000004114310466617750011571 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include "url.h" #include "doc.h" #include "html.h" #include "htmlparser.h" #include "gui_api.h" #include "mime.h" #include "errcode.h" #include "uexit.h" /*****************************************/ /* get requested attribute from HTML tag */ /*****************************************/ char *html_get_attrib_from_tag(char *tag, char *link_attrib) { char *p; char *retval = NULL; char *attrstart = NULL; char *attrend = NULL; int llen = strlen(link_attrib); bool_t was_sep = TRUE; for(p = tag; *p; p++) { if(was_sep && !attrstart && !strncasecmp(link_attrib, p, llen) && (tl_ascii_isspace(*(p + llen)) || (*(p + llen) == '='))) { attrstart = p + llen; while(*attrstart) { if(tl_ascii_isspace(*attrstart) || (*attrstart == '=')) attrstart++; else break; } if(*attrstart == '\"' || *attrstart == '\'') { if(!(attrend = strchr(attrstart + 1, *attrstart))) attrend = attrstart + strcspn(attrstart, " \t\r\n>"); attrstart++; } else { attrend = attrstart + strcspn(attrstart, " \t\r\n\"\'>"); } break; } was_sep = tl_ascii_isspace(*p) != 0; if(!attrend && !was_sep) was_sep = (*p == ';'); if(*p == '\"' || *p == '\'') { if(!(p = strchr(p + 1, *p))) break; } } if(attrstart) { /* strip leading/trailing spaces */ while(tl_ascii_isspace(*attrstart)) attrstart++; while(attrend > attrstart && tl_ascii_isspace(*(attrend - 1))) attrend--; /* to workaround broken tags which are missing closing */ /* quotes and contain leading space characters */ if(attrstart > attrend) attrend = attrstart + strcspn(attrstart, "> "); retval = tl_strndup(attrstart, attrend - attrstart); omit_chars(retval, "\t\n\r"); } return retval; } /********************************************************/ /* overwrite content of specified attribute in HTML tag */ /********************************************************/ void html_replace_url_in_stack(char *tag, char *link_attrib, char *urlin, int pare) { char *pom; char *p; char *attrstart = NULL; char *pattrstart = NULL; char *attrend = NULL; int llen = strlen(link_attrib); bool_t was_sep = TRUE; for(p = tag; *p; p++) { if(was_sep && !attrstart && !strncasecmp(link_attrib, p, llen) && (tl_ascii_isspace(*(p + llen)) || (*(p + llen) == '='))) { pattrstart = attrstart = p + llen; while(*attrstart) { if(tl_ascii_isspace(*attrstart) || (*attrstart == '=')) attrstart++; else break; } if(*attrstart == '\"' || *attrstart == '\'') { if(!(attrend = strchr(attrstart + 1, *attrstart))) attrend = attrstart + strcspn(attrstart, " \r\n\t>"); attrstart++; } else { attrend = attrstart + strcspn(attrstart, " \t\r\n\"\'>"); } break; } was_sep = tl_ascii_isspace(*p) != 0; if(*p == '\"' || *p == '\'') { if(!(p = strchr(p + 1, *p))) break; } } if(attrstart) { /* to workaround broken tags which are missing closing */ /* quotes and contain leading space characters */ if(attrstart > attrend) attrend = attrstart + strcspn(attrstart, "> "); pom = (*attrend == '\'' || *attrend == '\"') ? tl_strdup(attrend + 1) : tl_strdup(attrend); if(!pare) strcpy(pattrstart, "=\""); else strcpy(pattrstart, "="); strcat(pattrstart, urlin); if(!pare) strcat(pattrstart, "\""); strcat(pattrstart, pom); _free(pom); } return; } /******************************************/ /* look if tag contains specified element */ /******************************************/ int html_tag_co_elem(char *tag, char *elem) { char *p; int llen = strlen(elem); bool_t was_sep = TRUE; for(p = tag; *p; p++) { if(was_sep && !strncasecmp(elem, p, llen) && (tl_ascii_isspace(*(p + llen)) || (*(p + llen) == '=') || (!*(p + llen)))) { return TRUE; } was_sep = tl_ascii_isspace(*p) != 0; if(!was_sep) was_sep = (*p == ';'); if(*p == '\"' || *p == '\'') { if(!(p = strchr(p + 1, *p))) break; } } return FALSE; } /**********************************************************/ /* determine base URL for document looking at request URL */ /**********************************************************/ static void html_get_init_base_url(url * urlp, char **base, char **baset) { char *p; *baset = url_to_urlstr(urlp, FALSE); *base = tl_strdup(*baset); if((p = strrchr(*baset, '#'))) *p = '\0'; DEBUG_HTML("BASE URL - %s\n", *base); if((p = strrchr(*base, '?'))) *p = '\0'; if(!tl_is_dirname(*base)) { p = strrchr(*base, '/'); if(p) *(p + 1) = '\0'; } } /********************************************************************/ /* determine base URL for document looking on request URL && server */ /* response header fields Content-Location: & Content-Base: & Base: */ /********************************************************************/ static void html_get_base_url(doc * docp, char **base, char **baset) { char *p; html_get_init_base_url(docp->doc_url, base, baset); /* get possible base URL from server response header */ if(docp->mime && ((p = get_mime_param_val_str("Content-Location:", docp->mime)) || (p = get_mime_param_val_str("Content-Base:", docp->mime)) || (p = get_mime_param_val_str("Base:", docp->mime))) && p) { char *p2; url *urlp; p2 = url_to_absolute_url(*base, *baset, docp->doc_url, p); urlp = url_parse(p2); assert(urlp->type != URLT_FROMPARENT); if(!prottable[urlp->type].supported) { xprintf(1, gettext("Unsupported BASE URL - %s (probably bad handled)\n"), p); _free(*base); *base = tl_strdup(p); } else { _free(p); _free(*base); html_get_init_base_url(urlp, base, &p); _free(p); } free_deep_url(urlp); _free(urlp); _free(p2); } } /*******************************************************/ /* parse HTML document and extract URLs from it and if */ /* requested, also adjust content of document */ /*******************************************************/ dllist *html_process_document(doc * html_doc, dllist ** formlist) { char *base, *baset; html_parser_t *hp; html_extract_info_t einfo; html_rewrite_info_t rinfo; html_robots_info_t oinfo; int rewrite; int purestyle; int purescript; int follow = TRUE; /** call the -follow_cmd script **/ if(priv_cfg.condition.follow_cmd) { int rv = uexit_follow_cmd(html_doc); if(rv == 0) follow = FALSE; } purestyle = (html_doc->doc_url->status & URL_STYLE); purescript = (html_doc->doc_url->status & URL_ISSCRIPT); einfo.prev_a = NULL; einfo.urls = NULL; einfo.no_limits = (cfg.mode == MODE_FTPDIR) || (cfg.dump_urlfd >= 0); einfo.only_inline = (cfg.mode == MODE_SINGLE) || cfg.singlepage; einfo.enable_js = cfg.enable_js; rinfo.einfo = &einfo; rinfo.all_to_local = cfg.all_to_local; rinfo.selected_to_local = cfg.sel_to_local; rinfo.all_to_remote = cfg.all_to_remote; oinfo.index = TRUE; oinfo.follow = TRUE; oinfo.images = TRUE; rewrite = cfg.rewrite_links && cfg.mode != MODE_FTPDIR; hp = html_parser_init(html_link_tags, html_link_tags_num(), rewrite, purestyle, purescript); /** urls in script are relative to HTML document **/ /** where it is called not relative to script itself **/ if(purescript && html_doc->doc_url->parent_url) html_get_init_base_url((url *) html_doc->doc_url->parent_url->data, &base, &baset); else html_get_base_url(html_doc, &base, &baset); html_parser_set_base(hp, base, baset); html_parser_set_document(hp, html_doc->doc_url, html_doc->contents, html_doc->size); html_parser_add_tag_func(hp, html_parser_parse_tag, NULL); html_parser_add_tag_func(hp, (html_parser_func_t) html_parser_parse_tag_slash_a, &einfo); html_parser_add_tag_func(hp, html_parser_parse_tag_meta_refresh, NULL); if(cfg.condition.allow_robots) html_parser_add_tag_func(hp, (html_parser_func_t) html_parser_parse_tag_meta_robots, &oinfo); html_parser_add_attrib_func(hp, html_parser_url_to_absolute_url, NULL); #ifdef HAVE_REGEX if(rewrite && cfg.remove_adv && priv_cfg.advert_res) html_parser_add_attrib_func(hp, html_parser_remove_advertisement, NULL); #endif html_parser_add_attrib_func(hp, html_parser_process_base, NULL); html_parser_add_attrib_func(hp, (html_parser_func_t) html_parser_process_form, formlist); if(follow) html_parser_add_attrib_func(hp, (html_parser_func_t) html_parser_get_url, &einfo); if(rewrite && !cfg.post_update) html_parser_add_attrib_func(hp, (html_parser_func_t) html_parser_url_to_local, &rinfo); html_parser_add_style_func(hp, html_parser_style_to_absolute_urls, NULL); if(follow) html_parser_add_style_func(hp, (html_parser_func_t) html_parser_get_style_urls, &einfo); if(rewrite && !cfg.post_update) html_parser_add_style_func(hp, (html_parser_func_t) html_parser_style_to_local_urls, &rinfo); if(cfg.enable_js) { html_parser_add_script_func(hp, html_parser_parse_jspatterns, NULL); html_parser_add_script_func(hp, html_parser_parse_body_jspatterns, NULL); #ifdef HAVE_REGEX if(priv_cfg.js_transform) { html_parser_add_tag_func(hp, html_parser_parse_tag_jstransform, NULL); html_parser_add_script_func(hp, html_parser_parse_body_jstransform, NULL); } #endif } html_parser_parse(hp); if(rewrite) { _free(html_doc->contents); html_parser_take_document(hp, &html_doc->contents, &html_doc->size); } html_parser_kill(hp); /*** support for robots limits in META only ***/ /*** nofollow supported, rest doesn't have ***/ /*** any real meaning in pavuk ***/ if(!oinfo.follow) { DEBUG_HTML("NOFOLLOW attribute in meta data found\n"); while(einfo.urls) { free_deep_url((url *) einfo.urls->data); free((url *)einfo.urls->data); einfo.urls = dllist_remove_entry(einfo.urls, einfo.urls); } } return einfo.urls; } /*****************************************/ /* adjust URLs inside document to point */ /* to present local documents */ /*****************************************/ void html_process_parent_document(doc * html_doc, url * url_old, char *url_new) { char *base, *baset; html_parser_t *hp; html_extract_info_t einfo; html_rewrite_info_t rinfo; html_change_info_t chinfo; int purestyle; int purescript; char *relfn = NULL; purestyle = (html_doc->doc_url->status & URL_STYLE); purescript = (html_doc->doc_url->status & URL_ISSCRIPT); if(cfg.all_to_local || cfg.sel_to_local || cfg.all_to_remote) return; einfo.prev_a = NULL; einfo.urls = NULL; einfo.no_limits = FALSE; einfo.only_inline = FALSE; einfo.enable_js = cfg.enable_js; rinfo.einfo = &einfo; rinfo.all_to_local = cfg.all_to_local; rinfo.selected_to_local = cfg.sel_to_local; rinfo.all_to_remote = cfg.all_to_remote; chinfo.url_old = url_old; if(url_new) chinfo.url_new = url_new; else if(cfg.post_update) { relfn = get_relative_path(url_to_filename(html_doc->doc_url, FALSE), url_to_filename(url_old, FALSE)); chinfo.url_new = relfn; } else chinfo.url_new = NULL; hp = html_parser_init(html_link_tags, html_link_tags_num(), TRUE, purestyle, purescript); html_get_base_url(html_doc, &base, &baset); html_parser_set_base(hp, base, baset); html_parser_set_document(hp, html_doc->doc_url, html_doc->contents, html_doc->size); html_parser_add_tag_func(hp, html_parser_parse_tag, NULL); html_parser_add_tag_func(hp, html_parser_parse_tag_meta_refresh, NULL); if(chinfo.url_new) html_parser_add_attrib_func(hp, (html_parser_func_t) html_parser_change_url, &chinfo); if(!cfg.post_update) html_parser_add_attrib_func(hp, (html_parser_func_t) html_parser_url_to_local, &rinfo); if(chinfo.url_new) html_parser_add_style_func(hp, (html_parser_func_t) html_parser_style_change_url, &chinfo); if(!cfg.post_update) html_parser_add_style_func(hp, (html_parser_func_t) html_parser_style_to_local_urls, &rinfo); if(cfg.enable_js) { html_parser_add_script_func(hp, html_parser_parse_jspatterns, NULL); html_parser_add_script_func(hp, html_parser_parse_body_jspatterns, NULL); } html_parser_parse(hp); _free(html_doc->contents); html_parser_take_document(hp, &html_doc->contents, &html_doc->size); html_parser_kill(hp); _free(relfn); } /*************************************************/ /* load parent document adjust it and store back */ /* with locking and modification time preserving */ /*************************************************/ void rewrite_one_parent_links(url * doc_url, url * parent_url, char *dst_name) { char pom[PATH_MAX]; char *fnamep; char *rfn = NULL; char *savetmp, *p; int fd; doc pdoc; struct stat estat; struct utimbuf ut; int perm; url dum; DEBUG_PROCS("rewrite_one_parent_links()"); if(!parent_url || !(parent_url->status & URL_DOWNLOADED)) return; /*** parent document was not stored ***/ if(!cfg.store_index && url_is_dir_index(parent_url)) return; fnamep = url_to_filename(parent_url, FALSE); if(stat(fnamep, &estat) == 0) { if(S_ISDIR(estat.st_mode)) { xprintf(1, gettext("Can't work on directory\n")); return; } } else { xperror("stat"); return; } perm = estat.st_mode; ut.actime = estat.st_atime; ut.modtime = estat.st_mtime; memset(&dum, 0, sizeof(url)); dum.type = URLT_FILE; dum.p.file.filename = fnamep; dum.local_name = fnamep; dum.status = parent_url->status & URL_STYLE; dum.status &= ~URL_REDIRECT; doc_init(&pdoc, &dum); pdoc.report_size = FALSE; if(doc_download(&pdoc, TRUE, TRUE)) { doc_remove_lock(&pdoc); if(pdoc.errcode) report_error(&pdoc, gettext("rewrite parent")); return; } if(pdoc.errcode) report_error(&pdoc, gettext("rewrite parent")); _free(pdoc.mime); /* dst_name != NULL means child document was moved */ if(dst_name && !access(dst_name, R_OK) && !stat(dst_name, &estat) && !S_ISDIR(estat.st_mode)) { rfn = get_relative_path(fnamep, dst_name); } html_process_parent_document(&pdoc, doc_url, rfn); _free(rfn); strncpy(pom, fnamep, sizeof(pom) - 20); pom[sizeof(pom) - 21] = '\0'; p = strrchr(pom, '/'); if(p) sprintf(p + 1, "_*%d", (int) getpid()); else snprintf(pom, sizeof(pom), "%s/_*%d", pom, (int) getpid()); savetmp = tl_strdup(pom); rename(fnamep, savetmp); if((fd = open(fnamep, O_BINARY | O_CREAT | O_TRUNC | O_WRONLY, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH)) < 0) { xperror(fnamep); rename(savetmp, fnamep); doc_remove_lock(&pdoc); free(savetmp); free(pdoc.contents); return; } if(write(fd, pdoc.contents, pdoc.size) != pdoc.size) { xperror(fnamep); close(fd); rename(savetmp, fnamep); doc_remove_lock(&pdoc); free(savetmp); free(pdoc.contents); return; } close(fd); doc_remove_lock(&pdoc); utime(fnamep, &ut); chmod(fnamep, perm); unlink(savetmp); free(savetmp); free(pdoc.contents); DEBUG_PROCE("rewrite_one_parent_links()"); } /*************************************************/ /* take all parent documents and adjust inside */ /* all URLs, recurse up when document was moved */ /*************************************************/ void rewrite_parents_links(url * doc_url, char *dst_name) { char *fn = NULL; dllist *ptr; if((doc_url->status & URL_MOVED) && !dst_name) return; LOCK_URL(doc_url); for(ptr = doc_url->parent_url; ptr; ptr = ptr->next) { url *parent_url = (url *) ptr->data; if(cfg.rbreak) break; if(parent_url->status & URL_MOVED) { fn = dst_name ? dst_name : url_to_filename(doc_url, FALSE); rewrite_parents_links(parent_url, fn); } else { rewrite_one_parent_links(doc_url, parent_url, dst_name); } } UNLOCK_URL(doc_url); } pavuk-0.9.35/src/html.h0000644000175000001440000000707610142077740011573 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _html_h_ #define _html_h_ #include "dllist.h" #include "doc.h" extern char *html_get_attrib_from_tag(char *, char *); extern void rewrite_parents_links(url *, char *); extern void rewrite_one_parent_links(url *, url *, char *); extern int html_tag_co_elem(char *, char *); extern void html_replace_url_in_stack(char *, char *, char *, int); extern dllist *html_process_document(doc *, dllist **); extern void html_process_parent_document(doc *, url *, char *); typedef enum { HTML_TAG_HEAD, HTML_TAG_BODY, HTML_TAG_TABLE, HTML_TAG_TH, HTML_TAG_TD, HTML_TAG_IMG, HTML_TAG_INPUT, HTML_TAG_FRAME, HTML_TAG_IFRAME, HTML_TAG_APPLET, HTML_TAG_SCRIPT, HTML_TAG_SOUND, HTML_TAG_BGSOUND, HTML_TAG_EMBED, HTML_TAG_AREA, HTML_TAG_BASE, HTML_TAG_FIG, HTML_TAG_OVERLAY, HTML_TAG_A, HTML_TAG_LINK, HTML_TAG_FORM, HTML_TAG_LAYER, HTML_TAG_META, HTML_TAG_INS, HTML_TAG_DEL, HTML_TAG_Q, HTML_TAG_SPAN, HTML_TAG_DIV, HTML_TAG_OBJECT, HTML_TAG_ADDRESS, HTML_TAG_BLOCKQUOTE, HTML_TAG_CENTER, HTML_TAG_H1, HTML_TAG_H2, HTML_TAG_H3, HTML_TAG_H4, HTML_TAG_H5, HTML_TAG_H6, HTML_TAG_HR, HTML_TAG_ISINDEX, HTML_TAG_P, HTML_TAG_PRE, HTML_TAG_NOSCRIPT, HTML_TAG_DIR, HTML_TAG_DL, HTML_TAG_DT, HTML_TAG_DD, HTML_TAG_LI, HTML_TAG_MENU, HTML_TAG_OL, HTML_TAG_UL, HTML_TAG_CAPTION, HTML_TAG_COLGROUP, HTML_TAG_COL, HTML_TAG_THEAD, HTML_TAG_TFOOT, HTML_TAG_TBODY, HTML_TAG_FIELDSET, HTML_TAG_BUTTON, HTML_TAG_LEGEND, HTML_TAG_LABEL, HTML_TAG_SELECT, HTML_TAG_OPTGROUP, HTML_TAG_OPTION, HTML_TAG_TEXTAREA, HTML_TAG_BDO, HTML_TAG_BR, HTML_TAG_FONT, HTML_TAG_MAP, HTML_TAG_SUB, HTML_TAG_SUP, HTML_TAG_ABBR, HTML_TAG_ACRONYM, HTML_TAG_CITE, HTML_TAG_CODE, HTML_TAG_DFN, HTML_TAG_EM, HTML_TAG_KBD, HTML_TAG_SAMP, HTML_TAG_STRONG, HTML_TAG_VAR, HTML_TAG_B, HTML_TAG_BIG, HTML_TAG_I, HTML_TAG_S, HTML_TAG_SMALL, HTML_TAG_STRIKE, HTML_TAG_TT, HTML_TAG_U, HTML_TAG_FRAMESET, HTML_TAG_NOFRAMES, HTML_TAG_CSOBJ, HTML_TAG_HACK } html_tag_type_t; typedef enum { HTML_ATTRIB_PROFILE, HTML_ATTRIB_BACKGROUND, HTML_ATTRIB_STYLE, HTML_ATTRIB_SRC, HTML_ATTRIB_LOWSRC, HTML_ATTRIB_LONGDESC, HTML_ATTRIB_USEMAP, HTML_ATTRIB_CODEBASE, HTML_ATTRIB_HREF, HTML_ATTRIB_ACTION, HTML_ATTRIB_CONTENT, HTML_ATTRIB_CITE, HTML_ATTRIB_DATA, HTML_ATTRIB_HT, HTML_ATTRIB_JSEVENT, HTML_ATTRIB_HACK, HTML_ATTRIB_NULL } html_tag_attrib_type_t; typedef enum { WML_TAG_GO, WML_TAG_A, WML_TAG_IMG, WML_TAG_OPTION } wml_tag_type_t; typedef enum { WML_ATTRIB_HREF, WML_ATTRIB_SRC } wml_tag_attrib_type_t; typedef struct { html_tag_attrib_type_t type; char *attrib; int stat; } html_tag_atrib_t; typedef struct { html_tag_type_t type; char *tag; html_tag_atrib_t attribs[9]; } html_tag_t; #define LINK_INLINE (1 << 0) #define LINK_DOWNLD (1 << 1) #define LINK_REMOVE (1 << 2) #define LINK_DISABLED (1 << 3) #define LINK_STYLE (1 << 4) #define LINK_SCRIPT (1 << 5) #define LINK_FORM (1 << 6) #define LINK_JS (1 << 7) extern char *html_js_patterns[]; extern html_tag_t html_link_tags[]; extern int html_link_tags_num(void); #endif pavuk-0.9.35/src/http.c0000644000175000001440000011325310436535221011573 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include "url.h" #include "form.h" #include "http.h" #include "net.h" #include "base64.h" #include "tools.h" #include "cookie.h" #include "mime.h" #include "errcode.h" #include "abstract.h" #include "myssl.h" #include "authinfo.h" #include "gui_api.h" #include "times.h" #include "uexit.h" #include "cookie.h" #include "ntlm_auth.h" #include "digest_auth.h" #include "doc.h" static void http_process_response_11flags(doc *, http_response *); const http_auth_type_info_t http_auths[] = { {"", HTTP_AUTH_NONE}, {"user", HTTP_AUTH_USER}, {"Basic", HTTP_AUTH_BASIC}, {"Digest", HTTP_AUTH_DIGEST}, {"NTLM", HTTP_AUTH_NTLM}, {NULL, HTTP_AUTH_NONE}, }; httphdr *httphdr_parse(char *str) { char *p; httphdr *rv = _malloc(sizeof(httphdr)); rv->all = FALSE; if(*str == '+') { rv->all = TRUE; str++; } p = strchr(str, ':'); if(!p) { free(rv); return NULL; } rv->name = tl_strndup(str, p - str + 1); p++; rv->val = (*p == ' ') ? tl_strdup(p + 1) : tl_strdup(p); return rv; } void httphdr_free(httphdr * hdr) { _free(hdr->val); _free(hdr->name); _free(hdr); } static char *http_get_additional_headers(url * urlp) { char pom[2048]; char *req = NULL; if(priv_cfg.http_headers) { dllist *ptr; ptr = priv_cfg.http_headers; while(ptr) { httphdr *hdr = (httphdr *) ptr->data; if(!urlp->parent_url || (urlp->parent_url && hdr->all)) { snprintf(pom, sizeof(pom), "%s %s\r\n", hdr->name, hdr->val); req = tl_str_append(req, pom); } ptr = ptr->next; } } return req; } static char *http_get_auth_str(doc * docp, char *method) { char auth[2048]; char pom[1024]; char *user, *pass, *p; int auth_scheme; http_digest_info *auth_digest; auth[0] = '\0'; if(docp->doc_url->type == URLT_FTP) return NULL; auth_digest = (http_digest_info *) docp->auth_digest; user = url_get_user(docp->doc_url, auth_digest ? auth_digest->realm : NULL); pass = url_get_pass(docp->doc_url, auth_digest ? auth_digest->realm : NULL); auth_scheme = url_get_auth_scheme(docp->doc_url, auth_digest ? auth_digest->realm : NULL); if(user) { if(pass) { if(auth_scheme == HTTP_AUTH_DIGEST && auth_digest) { http_get_digest_auth_str(auth_digest, method, user, pass, docp->doc_url, auth, sizeof(auth)); } else if(auth_scheme == HTTP_AUTH_USER) { snprintf(auth, sizeof(auth), "user %s:%s", user, pass); } else if(auth_scheme == HTTP_AUTH_BASIC) { snprintf(pom, sizeof(pom), "%s:%s", user, pass); p = base64_encode(pom); snprintf(auth, sizeof(auth), "Basic %s", p); free(p); } } else { strncpy(auth, user, sizeof(auth)); auth[sizeof(auth) - 1] = '\0'; } } return auth[0] ? tl_strdup(auth) : NULL; } static char *http_get_proxy_auth_str(doc * docp, char *method) { char auth[2048]; char pom[1024]; char *proxy_user, *proxy_pass, *p; int proxy_auth_scheme; http_digest_info *auth_proxy_digest; auth_proxy_digest = (http_digest_info *) docp->auth_proxy_digest; auth[0] = '\0'; proxy_user = priv_cfg.http_proxy_user; proxy_pass = priv_cfg.http_proxy_pass; proxy_auth_scheme = cfg.proxy_auth_scheme; if(docp->http_proxy_port) { authinfo *ai; ai = authinfo_match_entry(docp->doc_url->type, docp->http_proxy, docp->http_proxy_port, NULL, NULL); if(ai) { proxy_user = ai->user; proxy_pass = ai->pass; proxy_auth_scheme = ai->type; } } if(proxy_user) { if(proxy_pass) { if(auth_proxy_digest && proxy_auth_scheme == HTTP_AUTH_DIGEST) { http_get_digest_auth_str(auth_proxy_digest, method, proxy_user, proxy_pass, docp->doc_url, auth, sizeof(auth)); } else if(proxy_auth_scheme == HTTP_AUTH_USER) { snprintf(auth, sizeof(auth), "user %s:%s", proxy_user, proxy_pass); } else if(proxy_auth_scheme == HTTP_AUTH_BASIC) { snprintf(pom, sizeof(pom), "%s:%s", proxy_user, proxy_pass); p = base64_encode(pom); snprintf(auth, sizeof(auth), "Basic %s", p); free(p); } } else { snprintf(auth, sizeof(auth), "user %s", proxy_user); } } return auth[0] ? tl_strdup(auth) : NULL; } http_auth_type_t http_get_authorization_type(char *auth_field) { char *p = auth_field; int l, i; while(tl_ascii_isspace(*p)) p++; l = strcspn(p, " \t"); for(i = 0; http_auths[i].name; i++) { if(!strncasecmp(p, http_auths[i].name, l)) return http_auths[i].id; } return HTTP_AUTH_NONE; } int http_handle_site_auth_info(doc * docu) { int rv = -1; char *authtag = ""; int is_digest = -1; #ifdef ENABLE_NTLM int is_ntlm = -1; #endif int i; for(i = 0; authtag; i++) { authtag = get_mime_n_param_val_str("WWW-Authenticate:", docu->mime, i); if(authtag) { switch (http_get_authorization_type(authtag)) { case HTTP_AUTH_DIGEST: is_digest = i; break; #ifdef ENABLE_NTLM case HTTP_AUTH_NTLM: is_ntlm = i; break; #endif default: break; } free(authtag); } } if(is_digest >= 0) { authtag = get_mime_n_param_val_str("WWW-Authenticate:", docu->mime, is_digest); rv = http_digest_do_auth(docu, authtag); _free(authtag); } #ifdef ENABLE_NTLM else if(is_ntlm >= 0) { authtag = get_mime_n_param_val_str("WWW-Authenticate:", docu->mime, is_ntlm); rv = ntlm_negotiate_connection(docu, authtag); _free(authtag); } #endif return rv; } int http_handle_proxy_auth_info(doc * docu) { int rv = -1; char *authtag = ""; int is_digest = -1; #ifdef ENABLE_NTLM int is_ntlm = -1; #endif int i; for(i = 0; authtag; i++) { authtag = get_mime_n_param_val_str("Proxy-Authenticate:", docu->mime, i); if(authtag) { switch (http_get_authorization_type(authtag)) { case HTTP_AUTH_DIGEST: is_digest = i; break; #ifdef ENABLE_NTLM case HTTP_AUTH_NTLM: is_ntlm = i; break; #endif default: break; } free(authtag); } } if(is_digest >= 0) { authtag = get_mime_n_param_val_str("Proxy-Authenticate:", docu->mime, is_digest); rv = http_digest_do_proxy_auth(docu, authtag); _free(authtag); } #ifdef ENABLE_NTLM else if(is_ntlm >= 0) { authtag = get_mime_n_param_val_str("Proxy-Authenticate:", docu->mime, is_ntlm); rv = ntlm_negotiate_proxy_connection(docu, authtag); _free(authtag); } #endif return rv; } static int http_dumy_proxy_send_connect(doc * docp, char *host, int port) { char pom[1024]; char *req, *p; if(cfg.use_http11) snprintf(pom, sizeof(pom), "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n", host, port, host, port); else snprintf(pom, sizeof(pom), "CONNECT %s:%d HTTP/1.0\r\n", host, port); req = tl_strdup(pom); /**** information for HTTP proxy authorization ****/ p = http_get_proxy_auth_str(docp, "CONNECT"); if(p) { req = tl_str_concat(req, "Proxy-Authorization: ", p, "\r\n", NULL); _free(p); } if(docp->additional_headers) req = tl_str_concat(req, docp->additional_headers, NULL); /**** additional headers via -httpadd ****/ if((p = http_get_additional_headers(docp->doc_url))) { req = tl_str_append(req, p); _free(p); } req = tl_str_concat(req, "\r\n", NULL); DEBUG_PROTOC(gettext ("****************** Proxy connect request *****************\n")); DEBUG_PROTOC("%s", req); DEBUG_PROTOC ("**********************************************************\n"); if(abs_write(docp->datasock, req, strlen(req)) != strlen(req)) { xperror("Proxy connect request"); _free(req); return -1; } _free(req); return 0; } int http_dumy_proxy_connect_real(doc * docp, char *host, int port, char *proxy_host, int proxy_port) { char *p; int len; bool_t rem_proxy = FALSE; int rv = 0; docp->request_type = HTTP_REQ_CONNECT; docp->connect_host = host; docp->connect_port = port; if(!docp->http_proxy && proxy_host) { rem_proxy = TRUE; docp->http_proxy = tl_strdup(proxy_host); docp->http_proxy_port = proxy_port; } if(http_dumy_proxy_send_connect(docp, host, port)) return -1; p = NULL; if(http_read_mime_header(docp, &p, &len) > 0) { http_response *resp; DEBUG_PROTOS(gettext ("***************** Proxy connect response *****************\n")); DEBUG_PROTOS("%s", p); DEBUG_PROTOS ("**********************************************************\n"); docp->mime = p; resp = http_get_response_info(p); http_process_response_11flags(docp, resp); /*** proxy authorization required ***/ if(resp->ret_code == 407) { int nauth = docp->num_proxy_auth; rv = http_handle_proxy_auth_info(docp); if(rv >= 0) { _free(docp->mime); http_response_free(resp); return rv ? -1 : 0; } else if(nauth) { rv = 0; } } else if(resp->ret_code >= 400) rv = -1; http_response_free(resp); } else rv = -1; if(rem_proxy) docp->http_proxy = NULL; return rv; } int http_dumy_proxy_connect(doc * docp, char *host, int port, char *proxy_host, int proxy_port) { int rv; doc docs; /* quick save of values */ memcpy(&docs, docp, sizeof(doc)); rv = http_dumy_proxy_connect_real(docp, host, port, proxy_host, proxy_port); /* restore some of affected values */ docp->is_parsable = docs.is_parsable; docp->size = docs.size; docp->totsz = docs.totsz; docp->origsize = docs.origsize; docp->rest_pos = docs.rest_pos; docp->rest_end_pos = docs.rest_end_pos; docp->is_http11 = docs.is_http11; docp->chunk_size = docs.chunk_size; docp->is_chunked = docs.is_chunked; docp->read_chunksize = docs.read_chunksize; docp->read_trailer = docs.read_trailer; docp->is_persistent = docs.is_persistent; docp->current_size = docs.current_size; docp->adj_sz = docs.adj_sz; /* reset errcode */ if(!rv) docp->errcode = ERR_NOERROR; return rv; } /************************************************/ /* create and send whole HTTP request with */ /* respective document body (POST req) */ /************************************************/ static int http_request(doc * docp, char *method, char *data, int datalen, char *conttype) { char *req = NULL; char pom[2048]; char *p; char **al; int len, wlen; url *urlp = docp->doc_url; gui_set_status(gettext("Sending request ...")); if((!cfg.http_proxy && urlp->type == URLT_HTTP) || urlp->type == URLT_HTTPS) { p = url_to_request_urlstr(urlp, FALSE); } else { /* authorization of nonanonymous FTP access */ /* via HTTP gateways is done different way */ /* use ftp://user:password@server/... in */ /* request instead of Authorization: ... */ if(urlp->type == URLT_FTP) { char *user; char *pass; user = url_get_user(urlp, NULL); pass = url_get_pass(urlp, NULL); if(user && !urlp->p.ftp.user) urlp->p.ftp.user = user; else user = NULL; if(pass && !urlp->p.ftp.password) urlp->p.ftp.password = pass; else pass = NULL; p = url_to_request_urlstr(urlp, TRUE); if(user) urlp->p.ftp.user = NULL; if(pass) urlp->p.ftp.password = NULL; } else p = url_to_request_urlstr(urlp, TRUE); } if(cfg.use_http11) req = tl_str_concat(req, method, " ", p, " HTTP/1.1\r\n", NULL); else req = tl_str_concat(req, method, " ", p, " HTTP/1.0\r\n", NULL); _free(p); if(priv_cfg.identity) { snprintf(pom, sizeof(pom), "User-Agent: %s\r\n", priv_cfg.identity); } else { snprintf(pom, sizeof(pom), "User-Agent: %s/%s %s\r\n", PACKAGE, VERSION, HOSTTYPE); } req = tl_str_append(req, pom); if(url_get_port(urlp) != prottable[urlp->type].default_port) snprintf(pom, sizeof(pom), "Host: %s:%d\r\n", url_get_site(urlp), url_get_port(urlp)); else snprintf(pom, sizeof(pom), "Host: %s\r\n", url_get_site(urlp)); req = tl_str_append(req, pom); if(cfg.send_from && priv_cfg.from) { snprintf(pom, sizeof(pom), "From: %s\r\n", priv_cfg.from); req = tl_str_append(req, pom); } if(cfg.send_cookies && (p = cookie_get_field(urlp))) { req = tl_str_append(req, p); _free(p); } /*** HTTP authorization field ****/ p = http_get_auth_str(docp, method); if(p) { req = tl_str_concat(req, "Authorization: ", p, "\r\n", NULL); _free(p); } /**** information for HTTP proxy authorization ****/ p = http_get_proxy_auth_str(docp, method); if(p) { req = tl_str_concat(req, "Proxy-Authorization: ", p, "\r\n", NULL); _free(p); } /**** prefered language ****/ if(priv_cfg.accept_lang) { bool_t f = FALSE; al = priv_cfg.accept_lang; if(*al) { snprintf(pom, sizeof(pom), "Accept-Language: %s", *al); al++; f = TRUE; } while(*al) { strcat(pom, ","); /* FIXME: Security */ strcat(pom, *al); al++; } if(f) { strcat(pom, "\r\n"); req = tl_str_append(req, pom); } } /*** preffered character sets ***/ if(priv_cfg.accept_chars) { bool_t f = FALSE; al = priv_cfg.accept_chars; if(*al) { snprintf(pom, sizeof(pom), "Accept-Charset: %s", *al); al++; f = TRUE; } while(*al) { strcat(pom, ","); strcat(pom, *al); al++; } if(f) { strcat(pom, "\r\n"); req = tl_str_append(req, pom); } } /**** referer URL ****/ if(cfg.referer) { if(urlp->parent_url) { url *par_url; LOCK_URL(urlp); par_url = (url *) urlp->parent_url->data; UNLOCK_URL(urlp); if(par_url->type != URLT_FILE) { p = url_to_urlstr(par_url, FALSE); req = tl_str_concat(req, "Referer: ", p, "\r\n", NULL); _free(p); } } else if(cfg.auto_referer) { p = url_to_urlstr(urlp, FALSE); req = tl_str_concat(req, "Referer: ", p, "\r\n", NULL); _free(p); } } /**** allow transfer encoding with gzip, compress ****/ if(cfg.use_enc) { #ifdef HAVE_ZLIB #if 0 /*MJF: Horrible workaround hack until deflate code works */ req = tl_str_append(req, "Accept-Encoding: x-gzip, gzip, x-compress, compress, deflate\r\n"); #else req = tl_str_append(req, "Accept-Encoding: x-gzip, gzip\r\n"); #endif #else req = tl_str_append(req, "Accept-Encoding: x-gzip, gzip, x-compress, compress\r\n"); #endif } /**** reget (not supported by all servers) ****/ if(docp->rest_pos || docp->rest_end_pos > 0) { if(docp->rest_end_pos > 0) { snprintf(pom, sizeof(pom), "Range: bytes=%ld-%ld\r\n", (long) docp->rest_pos, (long) docp->rest_end_pos); } else { snprintf(pom, sizeof(pom), "Range: bytes=%ld-\r\n", (long) docp->rest_pos); } req = tl_str_append(req, pom); if(cfg.send_if_range && docp->etag) { snprintf(pom, sizeof(pom), "If-Range: %s\r\n", docp->etag); req = tl_str_append(req, pom); } } /*** conditional GET for sync mode ***/ if(docp->origtime && !docp->rest_pos) { LOCK_TIME; strftime(pom, sizeof(pom), "If-Modified-Since: %a, %d %b %Y %H:%M:%S GMT\r\n", gmtime(&docp->origtime)); UNLOCK_TIME; req = tl_str_append(req, pom); } /**** no caching ****/ if(!cfg.cache) { req = tl_str_append(req, "Pragma: no-cache\r\nCache-Control: no-cache\r\n"); } /**** additional headers via -httpadd ****/ if((p = http_get_additional_headers(urlp))) { req = tl_str_append(req, p); _free(p); } if(conttype) { snprintf(pom, sizeof(pom), "Content-type: %s\r\n", conttype); req = tl_str_append(req, pom); } if(datalen) { snprintf(pom, sizeof(pom), "Content-length: %d\r\n", datalen); req = tl_str_append(req, pom); } if(docp->additional_headers) { req = tl_str_append(req, docp->additional_headers); } req = tl_str_append(req, "\r\n"); DEBUG_PROTOC(gettext ("************ Client HTTP MIME header ***************\n")); DEBUG_PROTOC("%s", req); DEBUG_PROTOC("****************************************************\n"); /**** send request ****/ len = strlen(req); if((wlen = abs_write(docp->datasock, req, len)) != len) { xperror("abs_write"); _free(req); docp->errcode = ERR_HTTP_SNDREQ; return -1; } _free(req); if(data) { gui_set_status(gettext("Sending data ...")); DEBUG_PROTOD(gettext("************ HTTP request data ***************\n")); DEBUG_PROTOD("%s\n", data); DEBUG_PROTOD("*************************************************\n"); if(abs_write(docp->datasock, data, datalen) != datalen) { docp->errcode = ERR_HTTP_SNDREQDATA; return -1; } } gui_set_status(gettext("Waiting for response ...")); /*** handling of 1xx response codes ***/ while((wlen = abs_readln(docp->datasock, pom, sizeof(pom) - 1)) > 0) { http_response *resp; if(!timerisset(&docp->first_byte_time)) { gettimeofday(&docp->first_byte_time, NULL); } resp = http_get_response_info(pom); if(resp) _free(resp->text); bufio_unread(docp->datasock, pom, wlen); if(resp && (resp->ret_code < 200)) { _free(resp); if(http_read_mime_header(docp, &p, &len) <= 0) { xprintf(1, gettext("Error reading HTTP 1xx class response\n")); break; } else { DEBUG_PROTOS(gettext ("***************** class 1xx HTTP response ****************\n")); DEBUG_PROTOS("%s", p); DEBUG_PROTOS ("***********************************************************\n"); } } else { _free(resp); break; } } if(docp->is_http11 && docp->is_persistent && (!wlen || wlen < 0)) { docp->is_persistent = FALSE; docp->errcode = ERR_HTTP_CLOSURE; abs_close_socket(docp, FALSE); return -1; } if(wlen < 0) { docp->errcode = ERR_HTTP_RCVRESP; return -1; } return 0; } int http_get_request(doc * docp) { docp->request_type = HTTP_REQ_GET; return http_request(docp, "GET", 0, 0, 0); } int http_head_request(doc * docp) { docp->request_type = HTTP_REQ_HEAD; return http_request(docp, "HEAD", 0, 0, 0); } int http_post_request(doc * docp) { form_info *fi = (form_info *) docp->doc_url->extension; char *data = NULL; int datalen = 0; char *type = NULL; int rv; docp->request_type = HTTP_REQ_POST; if(fi->encoding == FORM_E_MULTIPART) { fi->text = form_encode_multipart_boundary(); type = tl_str_concat(type, "multipart/form-data; boundary=", fi->text, NULL); } else /*if (fi->encoding == FORM_E_URLENCODED) */ type = tl_strdup("application/x-www-form-urlencoded"); data = form_encode_query(fi, &datalen); if(!data && fi->infos) { _free(data); _free(type); _free(fi->text); docp->errcode = ERR_HTTP_BADRQ; return -1; } rv = http_request(docp, "POST", data, datalen, type); _free(data); _free(type); _free(fi->text); return rv; } static bufio *http_open_socket(doc * docp) { char *host = NULL; int port = 0; #define PENAULT_VAL 10 docp->errcode = ERR_NOERROR; if(docp->http_proxy) { host = docp->http_proxy; port = docp->http_proxy_port; } else { host = url_get_site(docp->doc_url); port = url_get_port(docp->doc_url); } if(!docp->datasock) { gui_set_status(gettext("Connecting ...")); docp->datasock = bufio_sock_fdopen(net_connect(host, port, docp)); #ifdef USE_SSL if(docp->datasock && docp->doc_url->type == URLT_HTTPS) { bufio *ssl_sock; ssl_sock = my_ssl_do_connect(docp, docp->datasock, NULL); if(!ssl_sock) { if(!docp->errcode) docp->errcode = ERR_HTTPS_CONNECT; bufio_close(docp->datasock); docp->datasock = NULL; return NULL; } else { docp->datasock = ssl_sock; } } #endif } if(!docp->datasock) { if(_h_errno_ != 0) xherror(host); else xperror("net_connect"); if(docp->http_proxy) { docp->errcode = ERR_HTTP_PROXY_CONN; /*** for penaulting failed HTTP proxy servers ***/ if(docp->doc_url->type == URLT_HTTP) { http_proxy *pr; LOCK_PROXY; pr = http_proxy_find(docp->http_proxy, docp->http_proxy_port); if(pr) { pr->penault = PENAULT_VAL + pr->fails; pr->fails++; } UNLOCK_PROXY; } _free(docp->http_proxy); } else docp->errcode = ERR_HTTP_CONNECT; return NULL; } return docp->datasock; } void http_handle_redirect(doc * docu, int redir_code) { url *pomurl; char *pomcr = NULL; pomcr = get_mime_param_val_str("Location:", docu->mime); if(!pomcr) { pomcr = get_mime_param_val_str("URI:", docu->mime); if(pomcr) { char *p; p = strchr(pomcr, ';'); if(p) *p = '\0'; p = strchr(pomcr, '>'); if(p) *p = '\0'; if(pomcr[0] == '<') { p = pomcr; pomcr = tl_strdup(pomcr + 1); _free(p); } } else { docu->errcode = ERR_HTTP_BADREDIRECT; } } if(pomcr) { pomurl = url_parse(pomcr); assert(pomurl->type != URLT_FROMPARENT); if(pomurl->type == URLT_FILE) { char *base; char *baset; char *xp; baset = url_to_urlstr(docu->doc_url, FALSE); if((xp = strrchr(baset, '#'))) *xp = '\0'; if((xp = strrchr(baset, '?'))) *xp = '\0'; base = url_to_urlstr(docu->doc_url, FALSE); if(!tl_is_dirname(base)) { xp = strrchr(base, '/'); if(xp) *(xp + 1) = '\0'; } xp = url_to_absolute_url(base, baset, docu->doc_url, pomcr); free_deep_url(pomurl); _free(pomurl); pomurl = url_parse(xp); _free(xp); _free(base); _free(baset); } _free(pomcr); if(pomurl && prottable[pomurl->type].supported) { if(docu->is_robot) { docu->doc_url->moved_to = pomurl; docu->errcode = ERR_HTTP_REDIR; } else { if(url_redirect_to(docu->doc_url, pomurl, (redir_code == 303))) docu->errcode = ERR_HTTP_CYCLIC; else docu->errcode = ERR_HTTP_REDIR; } } else { if(pomurl) { free_deep_url(pomurl); _free(pomurl); docu->errcode = ERR_HTTP_UNSUPREDIR; } else docu->errcode = ERR_HTTP_BADREDIRECT; } } else docu->errcode = ERR_HTTP_BADREDIRECT; } static void http_process_response_11flags(doc * docu, http_response * resp) { char *p; if(cfg.use_http11 && !docu->http_proxy_10 && resp->ver_maj == 1 && resp->ver_min == 1) { docu->is_http11 = TRUE; docu->is_persistent = TRUE; docu->is_chunked = FALSE; docu->read_trailer = FALSE; } else { docu->is_http11 = FALSE; docu->is_persistent = FALSE; docu->is_chunked = FALSE; docu->read_trailer = FALSE; } p = get_mime_param_val_str("Content-Length:", docu->mime); if(p) { docu->totsz = _atoi(p); if(errno == ERANGE) docu->totsz = -1; _free(p); } p = get_mime_param_val_str("Transfer-Encoding:", docu->mime); if(p) { if(!strcasecmp(p, "chunked") || !strncasecmp(p, "chunked;", 8)) { docu->is_chunked = TRUE; docu->read_chunksize = TRUE; docu->read_trailer = FALSE; } _free(p); } p = get_mime_param_val_str("Connection:", docu->mime); if(p) { if(!strcasecmp(p, "close")) docu->is_persistent = FALSE; _free(p); } if(docu->http_proxy) { p = get_mime_param_val_str("Proxy-Connection:", docu->mime); if(p) { if(!strcasecmp(p, "close")) docu->is_persistent = FALSE; else if(!strcasecmp(p, "keep-alive")) docu->is_persistent = TRUE; _free(p); } } } /* * -1 - failure before sending auth data - http_process_response() can * continue safely * 0 - OK - http_process_response() must return immediately * 1 - failure after sending auth data - http_process_response() must * return immediately */ static int http_do_proxy_redirect(doc * docp) { char *loc; int port; char proxy[256]; int rv = 0; loc = get_mime_param_val_str("Location:", docp->mime); if(!loc) return -1; if(sscanf(loc, "http://%255[.0-9A-Za-z_-]:%d", proxy, &port) < 1) if(sscanf(loc, "%255[.0-9A-Za-z_-]:%d", proxy, &port) != 2) return -1; _free(docp->http_proxy); docp->http_proxy = tl_strdup(proxy); docp->http_proxy_port = port; /*** read body of the 305 response ***/ rv = http_throw_message_body(docp); /*** we need to establish total new connection ***/ docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); _free(docp->mime); _free(docp->type_str); if(rv) return 1; /*** send new request through new proxy ***/ if(http_repeat_request(docp)) rv = 1; return rv; } static void http_process_response(doc * docu) { int len; char *p; int mres; if((mres = http_read_mime_header(docu, &p, &len)) > 0) { http_response *resp; docu->mime = p; docu->adj_sz = len; if(cfg.htdig) printf("%s", docu->mime); DEBUG_PROTOS(gettext ("*********** HTTP Server response MIME header **********\n")); DEBUG_PROTOS("%s", docu->mime); DEBUG_PROTOS("*******************************************************\n"); resp = http_get_response_info(docu->mime); http_process_response_11flags(docu, resp); docu->type_str = get_mime_param_val_str("Content-type:", docu->mime); if(cfg.recv_cookies) { int i; char *cookie_field; for(i = 0; (cookie_field = get_mime_n_param_val_str("Set-Cookie:", docu->mime, i)); i++) { cookie_insert_field(cookie_field, docu->doc_url); _free(cookie_field); } if(cfg.update_cookies) cookie_update_file(FALSE); } if(docu->type_str && (!strncasecmp("text/html", docu->type_str, 9) || !strncasecmp("text/css", docu->type_str, 8))) { if(!strncasecmp("text/css", docu->type_str, 8)) docu->doc_url->status |= URL_STYLE; docu->is_parsable = TRUE; /* dirty hack to detect that FTP document downloaded */ /* through HTTP gateway is directory content */ if(docu->doc_url->type == URLT_FTP && !docu->doc_url->p.ftp.dir) { if(resp->ret_code == 200) { docu->doc_url->p.ftp.dir = TRUE; url_changed_filename(docu->doc_url); } } } else { docu->is_parsable = (docu->doc_url->status & URL_ISSCRIPT) != 0; } /* use proxy to request resource ! */ if(resp->ret_code == 305) { int retv = http_do_proxy_redirect(docu); if(retv >= 0) { http_response_free(resp); return; } } /* document not found on server */ if(resp->ret_code == 404) docu->doc_url->status |= URL_NOT_FOUND; /* proxy authorization required */ /* try to authenticate immediately */ if(resp->ret_code == 407) { int retv = http_handle_proxy_auth_info(docu); if(retv >= 0) { http_response_free(resp); return; } } /* authorization required */ /* try to authenticate immediately */ if(resp->ret_code == 401) { int retv = http_handle_site_auth_info(docu); if(retv >= 0) { http_response_free(resp); return; } } if(docu->rest_pos && (resp->ret_code == 200 || resp->ret_code == 206)) { p = get_mime_param_val_str("Content-Range:", docu->mime); if(!p) { if(cfg.freget) { xprintf(1, gettext("Regeting whole file\n")); docu->rest_pos = 0; } else { docu->errcode = ERR_HTTP_NOREGET; docu->is_persistent = FALSE; http_response_free(resp); return; } } else { if(resp->ret_code != 206) { docu->rest_pos = 0; xprintf(1, gettext("Modified from last download - regeting whole\n")); } else { if(docu->totsz < 0) { char *p4 = get_mime_param_val_str("Content-Range:", docu->mime); if(p4) { int n1, n2, n3, r; r = sscanf(p4, "%*[^0-9]%d-%d/%d", &n1, &n2, &n3); _free(p4); if(r == 3) docu->totsz = n3; if(r == 2) docu->totsz = n2 + 1; } } else docu->totsz += docu->rest_pos; } _free(p); } } if(docu->rest_pos && (resp->ret_code != 200 && resp->ret_code != 206)) { docu->rest_pos = 0; docu->errcode = ERR_HTTP_FAILREGET; xprintf(1, gettext("Unexpected response \"%d %s\" when trying to reget!\n"), resp->ret_code, resp->text ? resp->text : ""); } /**** get document creation time ****/ p = get_mime_param_val_str("Last-Modified:", docu->mime); if(p) { docu->dtime = scntime(p); _free(p); } else if(cfg.mode == MODE_SYNC || cfg.mode == MODE_MIRROR) docu->dtime = 0; if(docu->check_limits && resp->ret_code == 200) { cond_info_t condp; int r; condp.level = 3; condp.urlnr = docu->doc_nr; condp.size = docu->totsz; condp.time = docu->dtime; condp.mimet = docu->type_str; condp.full_tag = NULL; condp.params = NULL; condp.html_doc = NULL; condp.html_doc_offset = 0; condp.tag = NULL; condp.attrib = NULL; r = url_append_condition(docu->doc_url, &condp); if(!r) { switch (condp.reason) { case CONDT_MAX_SIZE: docu->errcode = ERR_BIGGER; break; case CONDT_MIN_SIZE: docu->errcode = ERR_SMALLER; break; case CONDT_NEWER_THAN: case CONDT_OLDER_THAN: docu->errcode = ERR_OUTTIME; break; case CONDT_USER_CONDITION: docu->errcode = ERR_SCRIPT_DISABLED; break; case CONDT_AMIME_TYPE: case CONDT_DMIME_TYPE: docu->errcode = ERR_NOMIMET; break; default: docu->errcode = ERR_RDISABLED; break; } docu->is_persistent = FALSE; http_response_free(resp); return; } } /**************/ if((cfg.mode == MODE_SYNC || cfg.mode == MODE_MIRROR) && !docu->doreget && (resp->ret_code == 304 || resp->ret_code == 200)) { if(resp->ret_code == 304) { docu->errcode = ERR_HTTP_ACTUAL; docu->remove_lock = TRUE; if(!docu->is_parsable) { docu->is_parsable = file_is_html(url_to_filename(docu->doc_url, TRUE)); } http_response_free(resp); return; } else if(!docu->is_parsable && docu->origsize && (docu->totsz >= 0) && (docu->origsize != docu->totsz)) { xprintf(1, gettext("Size differs, regeting whole\n")); } else if(docu->origtime) { if(!docu->dtime || difftime(docu->dtime, docu->origtime) > 0) { if(docu->rest_pos) { docu->rest_pos = 0; xprintf(1, gettext("Modified from last download - regeting whole\n")); } } else { docu->errcode = ERR_HTTP_ACTUAL; docu->remove_lock = TRUE; docu->is_persistent = FALSE; http_response_free(resp); return; } } } p = NULL; len = 0; http_response_free(resp); } else if(!mres) { /* at least in case of reget we */ /* can reject HTTP/0.9 response */ if(docu->rest_pos) { docu->is_persistent = FALSE; docu->errcode = ERR_HTTP_RCVRESP; return; } else if(p) { bufio_unread(docu->datasock, p, len); docu->is_parsable = TRUE; } else { docu->errcode = ERR_HTTP_RCVRESP; } } else { docu->is_persistent = FALSE; if(!docu->doreget) docu->remove_lock = FALSE; docu->errcode = ERR_HTTP_RCVRESP; return; } return; } bufio *http_get_data_socket(doc * docp) { int rv = -1; do { if(!(docp->datasock = http_open_socket(docp))) return NULL; if(docp->request_type == HTTP_REQ_HEAD) { rv = http_head_request(docp); if(rv) xperror("http_head_request"); } else { if((docp->doc_url->status & URL_FORM_ACTION)) { form_info *fi = (form_info *) docp->doc_url->extension; if((fi->method == FORM_M_POST) || (fi->method == FORM_M_UNKNOWN)) { rv = http_post_request(docp); if(rv) xperror("http_post_request"); } else if(fi->method == FORM_M_GET) { int l; docp->doc_url->p.http.searchstr = form_encode_query((form_info *) docp->doc_url->extension, &l); rv = http_get_request(docp); if(rv) xperror("http_get_request"); _free(docp->doc_url->p.http.searchstr); } } else { rv = http_get_request(docp); if(rv) xperror("http_get_request"); } } if(rv) { if(docp->datasock) { #ifdef USE_SSL if(docp->doc_url->type == URLT_HTTPS) { my_ssl_print_last_error(); } #endif bufio_close(docp->datasock); docp->datasock = NULL; } } else { http_process_response(docp); } } while(docp->errcode == ERR_HTTP_CLOSURE); return docp->datasock; } int http_repeat_request(doc * docp) { int rv; if(docp->request_type == HTTP_REQ_CONNECT) { if(!docp->datasock) docp->datasock = bufio_sock_fdopen(net_connect(docp->http_proxy, docp->http_proxy_port, docp)); if(!docp->datasock) { if(_h_errno_ != 0) xherror(docp->http_proxy); else xperror("net_connect"); docp->errcode = ERR_PROXY_CONNECT; rv = -1; } else rv = http_dumy_proxy_connect_real(docp, docp->connect_host, docp->connect_port, docp->http_proxy, docp->http_proxy_port); } else rv = http_get_data_socket(docp) ? 0 : -1; return rv; } /**********************************************/ /* parse HTTP server response status line */ /**********************************************/ http_response *http_get_response_info(char *doc_txt) { char *p; char pom[1024]; int len; if(!doc_txt) return NULL; len = strcspn(doc_txt, "\r\n"); if(len) { if (len >= sizeof(pom)) len = sizeof(pom) - 1; strncpy(pom, doc_txt, len); *(pom + len) = '\0'; if(!strncmp(pom, "HTTP/", 5)) { http_response *ret_val = (http_response *) _malloc(sizeof(http_response)); p = pom + 5; ret_val->ver_maj = atoi(p); p += strspn(p, "0123456789"); ret_val->ver_min = 0; if(*p == '.'); { p++; ret_val->ver_min = atoi(p); } p += strspn(p, "0123456789"); p += strspn(p, " "); ret_val->ret_code = atoi(p); p += strspn(p, "0123456789"); p += strspn(p, " "); ret_val->text = tl_strdup(p); return ret_val; } } return NULL; } void http_response_free(http_response * resp) { _free(resp->text); _free(resp); } /****************************************/ /* just read document body and throw it */ /****************************************/ int http_throw_message_body(doc * docp) { char buf[256]; int len; int sr; sr = docp->rest_pos; docp->rest_pos = 0; docp->size = 0; while((len = abs_read_data(docp, docp->datasock, buf, sizeof(buf))) > 0) docp->size += len; docp->size = 0; docp->rest_pos = sr; return len; } /************************************************/ /* read whole HTTP server response into buf */ /************************************************/ int http_read_mime_header(doc * docp, char **buf, int *len) { char pom[4096]; char *rb; int alen, tlen = 0; rb = NULL; *buf = NULL; if((alen = abs_readln(docp->datasock, pom, sizeof(pom))) > 0) { if(!strncmp(pom, "HTTP/", 5)) { rb = _malloc(alen + 1); tlen += alen; memmove(rb, pom, alen + 1); while((alen = abs_readln(docp->datasock, pom, sizeof(pom))) > 0) { tlen += alen; rb = _realloc(rb, tlen + 1); memmove(rb + tlen - alen, pom, alen + 1); *(rb + tlen) = '\0'; if(pom[0] == '\r' || pom[0] == '\n') break; } if(alen < 0) { docp->errcode = ERR_READ; xperror("http_response"); _free(rb); *len = 0; *buf = NULL; return -1; } else { *len = tlen; *buf = rb; return 1; } } else { *len = tlen; *buf = rb; return 0; } } else { *buf = NULL; *len = 0; if(alen < 0) { docp->errcode = ERR_READ; xperror("http_response"); return -1; } return 0; } } pavuk-0.9.35/src/http.h0000644000175000001440000000741010142077740011576 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _http_h_ #define _http_h_ #include #include "bufio.h" #include "doc.h" #include "dllist.h" #include "digest_auth.h" #define DEFAULT_HTTP_PORT 80 #define DEFAULT_HTTP_PROXY_PORT 8080 #define DEFAULT_SSL_PORT 443 #define DEFAULT_SSL_PROXY_PORT 8080 typedef struct { char *addr; /* proxy host */ unsigned short port; /* proxy port */ int penault; /* penault to reject failing proxies */ unsigned int fails; /* number of fails for proxy */ int is_10; /* this is HTTP/1.0 proxy */ int ref; /* reference counting */ } http_proxy; typedef struct { short ver_maj; /*** major version of HTTP protocol ***/ short ver_min; /*** minor version of HTTP protocol ***/ int ret_code; /*** HTTP response code ***/ char *text; /*** HTTP response code description ***/ } http_response; typedef struct { bool_t all; char *name; char *val; } httphdr; typedef struct { protocol proto; /*** protocol ***/ char *host; /*** hostname ***/ unsigned short port; /*** port ***/ bufio *connection; /*** socket for persistent connection ***/ http_digest_info *auth_digest; /*** HTTP digest access authentification info ***/ http_digest_info *auth_proxy_digest; /*** HTTP digest access proxy authentification info ***/ char *http_proxy; /*** HTTP proxy address ***/ unsigned short http_proxy_port; /*** HTTP proxy port ***/ } http_connection; typedef struct { dllist *form_data; } http_url_extension; typedef enum { HTTP_AUTH_NONE = 0, HTTP_AUTH_USER = 1, HTTP_AUTH_BASIC = 2, HTTP_AUTH_DIGEST = 3, HTTP_AUTH_NTLM = 4, HTTP_AUTH_LAST = 5 } http_auth_type_t; typedef enum { HTTP_REQ_UNKNOWN, HTTP_REQ_GET, HTTP_REQ_POST, HTTP_REQ_HEAD, HTTP_REQ_CONNECT } http_request_type_t; typedef struct { char *name; http_auth_type_t id; } http_auth_type_info_t; extern char *_md5(unsigned char *); extern int http_connect(char *, int); extern int http_dumy_proxy_connect(doc *, char *, int, char *, int); extern int http_dumy_proxy_connect_real(doc *, char *, int, char *, int); extern bufio *http_get_data_socket(doc *); extern int http_repeat_request(doc *); extern int http_get_request(doc *); extern int http_head_request(doc *); extern int http_post_request(doc *); extern int http_read_mime_header(doc *, char **, int *); extern int http_throw_message_body(doc *); extern void http_handle_redirect(doc *, int); extern http_response *http_get_response_info(char *); extern void http_response_free(http_response *); extern http_auth_type_t http_get_authorization_type(char *); extern int http_handle_site_auth_info(doc *); extern int http_handle_proxy_auth_info(doc *); extern httphdr *httphdr_parse(char *); extern void httphdr_free(httphdr *); extern int http_proxy_ref(http_proxy *); extern int http_proxy_unref(http_proxy *); extern void http_proxy_free(http_proxy *); extern http_proxy *http_proxy_parse(char *); extern http_proxy *http_proxy_get(void); extern http_proxy *http_proxy_find(char *, int); extern void http_proxy_check(http_proxy *, doc *); extern const http_auth_type_info_t http_auths[]; #endif pavuk-0.9.35/src/lfname.c0000644000175000001440000010303110362662067012056 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #ifdef HAVE_FNMATCH #include #else #include "fnmatch.h" #endif #include "lfname.h" #include "url.h" #include "tools.h" #include "tr.h" #include "dlhash_tools.h" #include "http.h" #include "form.h" #include "mime.h" #include "jsbind.h" enum lfname_lsp_type { LF_LSP_UNKNOWN, /*** unknown ***/ LF_LSP_STR, /*** string variable ***/ LF_LSP_NUM, /*** number variable ***/ LF_LSP_MACRO, /*** macro variable ***/ LF_LSP_SUB, /*** subpart from regex ***/ LF_LSP_SC, /*** strcat function ***/ LF_LSP_SS, /*** substr function ***/ LF_LSP_HASH, /*** hash function ***/ LF_LSP_MD5, /*** md5 function ***/ LF_LSP_LOWER, /*** lowerstr function ***/ LF_LSP_UPPER, /*** upperstr function ***/ LF_LSP_UENC, /*** urlencode function ***/ LF_LSP_UDEC, /*** urldecode function ***/ LF_LSP_DELCHR, /*** delchr function ***/ LF_LSP_TRCHR, /*** trchr function ***/ LF_LSP_TRSTR, /*** trstr function ***/ LF_LSP_STRSPN, /*** strspn function ***/ LF_LSP_STRCSPN, /*** strcspn function ***/ LF_LSP_STRLEN, /*** strlen function ***/ LF_LSP_NRSTR, /*** nrtostr function ***/ LF_LSP_LCHR, /*** last character offset ***/ LF_LSP_PLS, /*** plus ***/ LF_LSP_MNS, /*** minus ***/ LF_LSP_MOD, /*** mod ***/ LF_LSP_MUL, /*** multiply ***/ LF_LSP_DIV, /*** divide ***/ LF_LSP_REMOVEPARAMETER, /*** removes a parameter from an url string */ LF_LSP_GETVALUE,/*** reads a value from a parameter of an url string */ LF_LSP_SIF, /*** if condition ***/ LF_LSP_NOT, /*** logical not ***/ LF_LSP_AND, /*** logical and ***/ LF_LSP_OR, /*** logical or ***/ LF_LSP_GETEXT, /*** get extension from path ***/ #ifdef HAVE_MOZJS LF_LSP_JSF, /*** result of JavaScript function ***/ #endif LF_LSP_SEQ /*** string equal ***/ }; struct lfname_lsp_var { enum lfname_lsp_type type; union { char *str; int num; char macro; } val; enum lfname_lsp_type rettype; union { char *str; int num; } ret_val; struct lfname_lsp_var *param1; struct lfname_lsp_var *param2; struct lfname_lsp_var *param3; }; static char *lfname_lsp_get_by_url(struct lfname_lsp_interp *); static struct lfname_lsp_var *lfname_lsp_analyze(const char **); static void lfname_lsp_var_free(struct lfname_lsp_var *); static char *_strfindnchr(char *str, int chr, int n) { int cnt; char *p; for(p = str, cnt = 0; *p && cnt < n; p++) { if(*p == chr) cnt++; } if(cnt != n) return NULL; else return p - 1; } static char *_strrfindnchr(char *str, int chr, int n) { int cnt; char *p; for(p = str + strlen(str) - 1, cnt = 0; p >= str && cnt < n; p--) { if(*p == chr) cnt++; } if(cnt != n) return NULL; else return p + 1; } #ifdef HAVE_REGEX char *lfname_re_sub(lfname * lfnamep, const char *urlstr, int nr) { char pom[4096]; pom[0] = '\0'; if(lfnamep->type != LFNAME_REGEX) return tl_strdup(pom); #ifdef HAVE_POSIX_REGEX { regmatch_t *pmatch = lfnamep->pmatch; if(nr >= 0 && nr <= lfnamep->preg.re_nsub) { strncpy(pom, urlstr + pmatch[nr].rm_so, pmatch[nr].rm_eo - pmatch[nr].rm_so); /* FIXME: Security */ pom[pmatch[nr].rm_eo - pmatch[nr].rm_so] = '\0'; } } #elif defined(HAVE_V8_REGEX) #ifdef HAVE_V8_REGSUB { char ssect[10]; if(nr) sprintf(ssect, "\\%d", nr); else strcpy(ssect, "&"); regsub(lfnamep->preg, ssect, pom); } #endif #elif defined(HAVE_GNU_REGEX) if(nr >= 0 && nr < lfnamep->preg.re_nsub) { strncpy(pom, urlstr + lfnamep->pmatch.start[nr], lfnamep->pmatch.end[nr] - lfnamep->pmatch.start[nr]); /* FIXME: Security */ pom[lfnamep->pmatch.end[nr] - lfnamep->pmatch.start[nr]] = '\0'; } #elif defined(HAVE_PCRE_REGEX) if(nr >= 0 && nr < lfnamep->pmatch_nr) { strncpy(pom, urlstr + lfnamep->pmatch[2 * nr], lfnamep->pmatch[2 * nr + 1] - lfnamep->pmatch[2 * nr]); /* FIXME: Security */ pom[lfnamep->pmatch[2 * nr + 1] - lfnamep->pmatch[2 * nr]] = '\0'; } #endif return tl_strdup(pom); } #endif /* $x - x-th match section */ /* %i - protocol id */ /* %p - password */ /* %u - user name */ /* %h - host name */ /* %m - domain name */ /* %r - port number */ /* %d - doc path */ /* %n - doc name */ /* %b - base name of document */ /* %e - extension */ /* %s - search string */ /* %q - POST query string */ /* %M - mime type */ /* %E - extension by mime type */ /* %o - default doc name */ /* %-x - x-th dirname from end */ /* %x - x-th dirname from start */ char *lfname_get_by_url(url * urlp, const char *urlstr, const char *mime_type, lfname * lfnamep) { char *ps, *pd, *pp, *p1, *p2; char pom[4096]; char pstr[4096]; int nr; char *n, *d, *t, *e, *b, *m, *q, *o; const char *mimeext; char *retv = NULL; p1 = url_get_path(urlp); if(urlp->type == URLT_GOPHER) { if(urlp->p.gopher.selector[0] == '1') snprintf(pstr, sizeof(pstr), "/%s/%s", urlp->p.gopher.selector, priv_cfg.index_name); else snprintf(pstr, sizeof(pstr), "/%s", urlp->p.gopher.selector); } else if(tl_is_dirname(p1) || ((urlp->type == URLT_FTP || urlp->type == URLT_FTPS) && urlp->p.ftp.dir)) { snprintf(pstr, sizeof(pstr), "%s/%s", p1, priv_cfg.index_name); } else { strncpy(pstr, p1, sizeof(pstr)); pstr[sizeof(pstr) - 1] = '\0'; } t = get_abs_file_path(pstr); strncpy(pstr, t, sizeof(pstr)); pstr[sizeof(pstr) - 1] = '\0'; p1 = strrchr(pstr, '/'); d = p1 ? tl_strndup(pstr, p1 - pstr) : tl_strdup(""); n = p1 ? tl_strdup(p1 + 1) : tl_strdup(pstr); e = tl_strdup(tl_get_extension(pstr)); p1 = strrchr(n, '.'); if(p1) b = tl_strndup(n, p1 - n); else b = tl_strdup(n); m = url_get_site(urlp); p1 = strchr(m, '.'); if(p1) m = p1 + 1; q = NULL; if(urlp->status & URL_FORM_ACTION) { form_info *fi = (form_info *) urlp->extension; p1 = form_encode_urlencoded(fi->infos); if(p1) { strncpy(pstr, p1, sizeof(pstr) - 1); pstr[sizeof(pstr) - 1] = '\0'; q = tl_strdup(pstr); } _free(p1); } if(!q) q = tl_strdup(""); o = url_get_default_local_name(urlp); mimeext = mime_get_type_ext(mime_type); pom[0] = '\0'; if(lfnamep->transstr[0] == '(') { struct lfname_lsp_interp interp; char port[10]; interp.urlp = urlp; interp.urlstr = urlstr; interp.scheme = prottable[urlp->type].dirname; interp.passwd = url_get_pass(urlp, NULL) ? url_get_pass(urlp, NULL) : ""; interp.user = url_get_user(urlp, NULL) ? url_get_user(urlp, NULL) : ""; interp.host = url_get_site(urlp) ? url_get_site(urlp) : ""; interp.domain = m; sprintf(port, "%d", url_get_port(urlp)); interp.port = port; interp.path = d; interp.name = n; interp.basename = b; interp.extension = e; interp.query = url_get_search_str(urlp) ? url_get_search_str(urlp) : ""; interp.post_query = q; interp.deflt = o; interp.mime_type = mime_type; interp.mime_type_ext = mimeext; interp.orig = lfnamep; retv = lfname_lsp_get_by_url(&interp); } else { for(ps = lfnamep->transstr, pd = pom; *ps; ps++) { if(!*(ps + 1)) { *pd = *ps; pd++; *pd = '\0'; continue; } switch (*ps) { case '\\': ps++; *pd = *ps; pd++; *pd = '\0'; break; #ifdef HAVE_REGEX case '$': ps++; nr = strtol(ps, &pp, 10); p1 = lfname_re_sub(lfnamep, urlstr, nr); strncpy(pd, p1, sizeof(pom)-(pd-pom)); pd[sizeof(pom) - (pd-pom) - 1] = '\0'; _free(p1); while(*pd) pd++; ps = pp - 1; break; #endif case '%': ps++; pstr[0] = '\0'; switch (*ps) { case 'i': strncpy(pstr, prottable[urlp->type].dirname, sizeof(pstr)); break; case 'p': strncpy(pstr, url_get_pass(urlp, NULL) ? url_get_pass(urlp, NULL) : "", sizeof(pstr)); break; case 'u': strncpy(pstr, url_get_user(urlp, NULL) ? url_get_user(urlp, NULL) : "", sizeof(pstr)); break; case 'h': strncpy(pstr, url_get_site(urlp) ? url_get_site(urlp) : "", sizeof(pstr)); break; case 'm': strncpy(pstr, m, sizeof(pstr)); break; case 'r': sprintf(pstr, "%d", url_get_port(urlp)); break; case 't': strncpy(pstr, t, sizeof(pstr)); break; case 'd': strncpy(pstr, d, sizeof(pstr)); break; case 'n': strncpy(pstr, n, sizeof(pstr)); break; case 'b': strncpy(pstr, b, sizeof(pstr)); break; case 'e': strncpy(pstr, e, sizeof(pstr)); break; case 's': strncpy(pstr, url_get_search_str(urlp) ? url_get_search_str(urlp) : "", sizeof(pstr)); break; case 'q': strncpy(pstr, q, sizeof(pstr)); break; case 'M': strncpy(pstr, mime_type ? mime_type : "", sizeof(pstr)); break; case 'E': strncpy(pstr, mimeext ? mimeext : "", sizeof(pstr)); break; case 'o': strncpy(pstr, o, sizeof(pstr)); break; case '-': nr = strtol(ps + 1, &pp, 10); p1 = _strrfindnchr(d, '/', nr); p2 = _strrfindnchr(d, '/', nr + 1); if(!p1) pstr[0] = '\0'; else if(p2) { strncpy(pstr, p2 + 1, p1 - 1 - p2); /* FIXME: Security */ *(pstr + (p1 - 1 - p2)) = '\0'; } else pstr[0] = '\0'; ps = pp - 1; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': nr = strtol(ps, &pp, 10); p1 = _strfindnchr(d, '/', nr); p2 = _strfindnchr(d, '/', nr + 1); if(!p1) pstr[0] = '\0'; else if(p2) { strncpy(pstr, p1 + 1, p2 - 1 - p1); /* FIXME: Security */ *(pstr + (p2 - 1 - p1)) = '\0'; } else strncpy(pstr, p1 + 1, sizeof(pstr)); ps = pp - 1; break; default: pstr[0] = *(ps - 1); pstr[1] = *ps; pstr[2] = '\0'; } pstr[sizeof(pstr) - 1] = '\0'; strcat(pd, pstr); /* FIXME: Security */ while(*pd) pd++; break; default: *pd = *ps; pd++; *pd = '\0'; } } retv = tl_strdup(pom); } free(e); free(n); free(t); free(d); free(q); free(o); return retv; } void lfname_free(lfname * lfnamep) { #ifdef HAVE_REGEX if(lfnamep->type == LFNAME_REGEX) { #ifdef HAVE_POSIX_REGEX regfree(&(lfnamep->preg)); _free(lfnamep->pmatch); #elif defined(HAVE_V8_REGEX) _free(lfnamep->preg); #elif defined(HAVE_GNU_REGEX) regfree(&lfnamep->preg); _free(lfnamep->pmatch.start); _free(lfnamep->pmatch.end); #elif defined(HAVE_PCRE_REGEX) _free(lfnamep->preg); _free(lfnamep->preg_extra); _free(lfnamep->pmatch); #endif } #endif _free(lfnamep->matchstr); _free(lfnamep->transstr); _free(lfnamep); } lfname *lfname_new(lfname_type type, const char *mpt, const char *str) { lfname *rv; const char *p; rv = _malloc(sizeof(lfname)); rv->type = type; rv->matchstr = NULL; rv->transstr = NULL; #ifdef HAVE_REGEX if(type == LFNAME_REGEX) { #ifdef HAVE_POSIX_REGEX int ec; if((ec = regcomp(&(rv->preg), mpt, REG_EXTENDED))) { char pom[PATH_MAX]; xprintf(0, gettext("Error compiling regular expression : %s\n"), mpt); regerror(ec, &(rv->preg), pom, sizeof(pom)); xprintf(0, "%s\n", pom); regfree(&(rv->preg)); free(rv); return NULL; } rv->pmatch = _malloc((rv->preg.re_nsub + 1) * sizeof(regmatch_t)); #elif defined(HAVE_V8_REGEX) if(!(rv->preg = regcomp(mpt))) { xprintf(0, gettext("Error compiling regular expression : %s\n"), mpt); free(rv->preg); free(rv); return NULL; } #elif defined(HAVE_BSD_REGEX) if((p = re_comp(mpt))) { xprintf(0, gettext("Error compiling regular expression : %s\n"), mpt); xprintf(0, "%s", p); free(rv); return NULL; } #elif defined(HAVE_GNU_REGEX) rv->preg.allocated = 0; rv->preg.buffer = NULL; rv->preg.fastmap = NULL; re_set_syntax(r_2phase_star); if((p = re_compile_pattern(mpt, strlen(mpt), &rv->preg))) { xprintf(0, gettext("Error compiling regular expression : %s\n"), mpt); xprintf(0, "%s\n", p); regfree(&(rv->preg)); free(rv); return NULL; } rv->pmatch.start = _malloc((rv->preg.re_nsub + 1) * sizeof(*rv->pmatch.start)); rv->pmatch.end = _malloc((rv->preg.re_nsub + 1) * sizeof(*rv->pmatch.end)); rv->pmatch.num_regs = rv->preg.re_nsub + 1; rv->preg.regs_allocated = REGS_FIXED; #elif defined(HAVE_PCRE_REGEX) int errcode = 0; if((rv->preg = pcre_compile(mpt, 0, (const char **) &p, &errcode, NULL))) { rv->preg_extra = pcre_study(rv->preg, 0, (const char **) &p); pcre_fullinfo(rv->preg, rv->preg_extra, PCRE_INFO_CAPTURECOUNT, &rv->pmatch_nr); rv->pmatch_nr++; rv->pmatch = (int *) _malloc(rv->pmatch_nr * 3 * sizeof(int)); } else { xprintf(0, gettext("Error compiling regular expression : %s\n"), mpt); xprintf(0, "%s\n", p); _free(rv); return NULL; } #endif } #endif if(str[0] == '(') { struct lfname_lsp_var *variant; p = str; if((variant = lfname_lsp_analyze(&p))) { lfname_lsp_var_free(variant); if(*p) { xprintf(0, gettext("LSP analyze error: bad token at - %s\n"), p); lfname_free(rv); return NULL; } else { rv->transstr = tl_strdup(str); } } else { lfname_free(rv); return NULL; } } else rv->transstr = tl_strdup(str); rv->matchstr = tl_strdup(mpt); return rv; } int lfname_match(lfname * lfnamep, const char *urlstr) { #ifdef HAVE_REGEX if(lfnamep->type == LFNAME_REGEX) { #ifdef HAVE_POSIX_REGEX return !regexec(&(lfnamep->preg), urlstr, lfnamep->preg.re_nsub + 1, lfnamep->pmatch, 0); #elif defined(HAVE_V8_REGEX) return regexec(lfnamep->preg, urlstr); #elif defined(HAVE_BSD_REGEX) re_comp(lfnamep->matchstr); return re_exec(urlstr); #elif defined(HAVE_GNU_REGEX) return re_match(&(lfnamep->preg), urlstr, strlen(urlstr), 0, &lfnamep->pmatch) >= 0; #elif defined(HAVE_PCRE_REGEX) return pcre_exec(lfnamep->preg, lfnamep->preg_extra, urlstr, strlen(urlstr), 0, 0, lfnamep->pmatch, 3 * lfnamep->pmatch_nr) >= 0; #endif } else #endif return !fnmatch(lfnamep->matchstr, urlstr, 0); } int lfname_check_rule(const char *str) { if(str[0] == '(') { const char *p = str; struct lfname_lsp_var *variant; if((variant = lfname_lsp_analyze(&p))) { lfname_lsp_var_free(variant); if(*p) { xprintf(0, gettext("LSP analyze error: bad token at - %s\n"), p); return FALSE; } else return TRUE; } else return FALSE; } return TRUE; } int lfname_check_pattern(lfname_type type, const char *str) { #ifdef HAVE_REGEX if(type == LFNAME_REGEX) { #ifdef HAVE_POSIX_REGEX int ec; char pom[PATH_MAX]; regex_t preg; ec = regcomp(&preg, str, REG_EXTENDED); if(ec) { xprintf(0, gettext("Error compiling regular expression : %s\n"), str); regerror(ec, &preg, pom, sizeof(pom)); xprintf(0, "%s\n", pom); } regfree(&preg); return !ec; #elif defined(HAVE_V8_REGEX) regexp *preg; preg = regcomp(str); if(!preg) xprintf(0, gettext("Error compiling regular expression : %s\n"), str); else free(preg); return preg != NULL; #elif defined(HAVE_BSD_REGEX) char *p; p = re_comp(str); if(p) { xprintf(0, gettext("Error compiling regular expression : %s\n"), str); xprintf(0, "%s", p); } return p == NULL; #elif defined(HAVE_GNU_REGEX) char *p; struct re_pattern_buffer preg; preg.allocated = 0; preg.buffer = NULL; preg.fastmap = NULL; if((p = re_compile_pattern(str, strlen(str), &preg))) { xprintf(0, gettext("Error compiling regular expression : %s\n"), str); xprintf(0, "%s\n", p); } regfree(&preg); return p == NULL; #elif defined(HAVE_PCRE_REGEX) pcre *re; const char *errmsg = NULL; int errcode = 0; if(!(re = pcre_compile(str, 0, &errmsg, &errcode, NULL))) { xprintf(0, gettext("Error compiling regular expression : %s\n"), str); xprintf(0, "%s\n", errmsg); return -1; } else free(re); return re != NULL; #endif } else #endif return TRUE; } const char *lfname_interp_get_macro(struct lfname_lsp_interp *interp, int macro) { switch (macro) { case 'i': return interp->scheme; case 'p': return interp->passwd; case 'u': return interp->user; case 'h': return interp->host; case 'm': return interp->domain; case 'r': return interp->port; case 'd': return interp->path; case 'n': return interp->name; case 'b': return interp->basename; case 'e': return interp->extension; case 's': return interp->query; case 'q': return interp->post_query; case 'U': return interp->urlstr; case 'o': return interp->deflt; case 'M': return interp->mime_type; case 'E': return interp->mime_type_ext; } return NULL; } int lfname_check_macro(int macro) { return strchr("ipuhmrdnbesUoqEM", macro) != NULL; } static const struct { enum lfname_lsp_type type; enum lfname_lsp_type rettype; char *name; short params; enum lfname_lsp_type p1type; enum lfname_lsp_type p2type; enum lfname_lsp_type p3type; } lfname_lsp_ftbl[] = { {LF_LSP_UNKNOWN, LF_LSP_UNKNOWN, NULL, 0, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_STR, LF_LSP_STR, NULL, 0, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_NUM, LF_LSP_NUM, NULL, 0, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_MACRO, LF_LSP_STR, NULL, 0, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_SUB, LF_LSP_STR, "sp ", 1, LF_LSP_NUM, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_SC, LF_LSP_STR, "sc ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN}, {LF_LSP_SS, LF_LSP_STR, "ss ", 3, LF_LSP_STR, LF_LSP_NUM, LF_LSP_NUM}, {LF_LSP_HASH, LF_LSP_NUM, "hsh ", 2, LF_LSP_STR, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_MD5, LF_LSP_STR, "md5 ", 1, LF_LSP_STR, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_LOWER, LF_LSP_STR, "lo ", 1, LF_LSP_STR, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_UPPER, LF_LSP_STR, "up ", 1, LF_LSP_STR, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_UENC, LF_LSP_STR, "ue ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN}, {LF_LSP_UDEC, LF_LSP_STR, "ud ", 1, LF_LSP_STR, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_DELCHR, LF_LSP_STR, "dc ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN}, {LF_LSP_TRCHR, LF_LSP_STR, "tc ", 3, LF_LSP_STR, LF_LSP_STR, LF_LSP_STR}, {LF_LSP_TRSTR, LF_LSP_STR, "ts ", 3, LF_LSP_STR, LF_LSP_STR, LF_LSP_STR}, {LF_LSP_STRSPN, LF_LSP_NUM, "spn ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN}, {LF_LSP_STRCSPN, LF_LSP_NUM, "cspn ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN}, {LF_LSP_STRLEN, LF_LSP_NUM, "sl ", 1, LF_LSP_STR, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_NRSTR, LF_LSP_STR, "ns ", 2, LF_LSP_STR, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_LCHR, LF_LSP_NUM, "lc ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN}, {LF_LSP_PLS, LF_LSP_NUM, "+ ", 2, LF_LSP_NUM, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_MNS, LF_LSP_NUM, "- ", 2, LF_LSP_NUM, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_MOD, LF_LSP_NUM, "% ", 2, LF_LSP_NUM, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_MUL, LF_LSP_NUM, "* ", 2, LF_LSP_NUM, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_DIV, LF_LSP_NUM, "/ ", 2, LF_LSP_NUM, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_REMOVEPARAMETER, LF_LSP_STR, "rmpar ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN}, {LF_LSP_GETVALUE, LF_LSP_STR, "getval ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN}, {LF_LSP_SIF, LF_LSP_STR, "sif ", 3, LF_LSP_NUM, LF_LSP_STR, LF_LSP_STR}, {LF_LSP_NOT, LF_LSP_NUM, "! ", 1, LF_LSP_NUM, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, {LF_LSP_AND, LF_LSP_NUM, "& ", 2, LF_LSP_NUM, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_OR, LF_LSP_NUM, "| ", 2, LF_LSP_NUM, LF_LSP_NUM, LF_LSP_UNKNOWN}, {LF_LSP_GETEXT, LF_LSP_STR, "getext ", 1, LF_LSP_STR, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, #ifdef HAVE_MOZJS {LF_LSP_JSF, LF_LSP_STR, "jsf ", 1, LF_LSP_STR, LF_LSP_UNKNOWN, LF_LSP_UNKNOWN}, #endif {LF_LSP_SEQ, LF_LSP_NUM, "seq ", 2, LF_LSP_STR, LF_LSP_STR, LF_LSP_UNKNOWN} }; static enum lfname_lsp_type lfname_lsp_token_type(const char **pstr) { const char *p = *pstr; enum lfname_lsp_type retv = LF_LSP_UNKNOWN; while(*p == ' ') p++; if(*p == '(') { int i; for(i = 0; i < NUM_ELEM(lfname_lsp_ftbl); i++) { if(lfname_lsp_ftbl[i].name && !strncmp(p + 1, lfname_lsp_ftbl[i].name, strlen(lfname_lsp_ftbl[i].name))) { retv = lfname_lsp_ftbl[i].type; p += 1 + strlen(lfname_lsp_ftbl[i].name); break; } } } else if(*p == '\"') { retv = LF_LSP_STR; p++; } else if(*p == '%') { retv = LF_LSP_MACRO; p++; } else if(tl_ascii_isdigit(*p) || *p == '-') retv = LF_LSP_NUM; *pstr = p; return retv; } static struct lfname_lsp_var *lfname_lsp_var_new(enum lfname_lsp_type type) { struct lfname_lsp_var *retv = NULL; retv = _malloc(sizeof(struct lfname_lsp_var)); retv->type = type; retv->val.str = NULL; retv->rettype = lfname_lsp_ftbl[type].rettype; retv->ret_val.str = NULL; retv->param1 = NULL; retv->param2 = NULL; retv->param3 = NULL; return retv; } static void lfname_lsp_var_ret_free(struct lfname_lsp_var *var) { if(!var) return; lfname_lsp_var_ret_free(var->param1); lfname_lsp_var_ret_free(var->param2); lfname_lsp_var_ret_free(var->param3); if(var->rettype == LF_LSP_STR) _free(var->ret_val.str); } static void lfname_lsp_var_free(struct lfname_lsp_var *var) { if(!var) return; lfname_lsp_var_free(var->param1); lfname_lsp_var_free(var->param2); lfname_lsp_var_free(var->param3); if(var->type == LF_LSP_STR) _free(var->val.str); _free(var); } static struct lfname_lsp_var *lfname_lsp_analyze(const char **pstr) { struct lfname_lsp_var *retv = NULL; enum lfname_lsp_type type; char *p; const char *cp; type = lfname_lsp_token_type(pstr); switch (type) { case LF_LSP_UNKNOWN: xprintf(0, gettext("LSP analyze error: bad token at - %s\n"), *pstr); break; case LF_LSP_NUM: { int nval; errno = 0; nval = strtol(*pstr, &p, 0); if((errno == ERANGE) || (*p != '\0' && *p != ')' && *p != ' ')) { xprintf(0, gettext("LSP analyze error: bad numeric value at - %s\n"), *pstr); break; } retv = lfname_lsp_var_new(type); retv->val.num = nval; *pstr = p; } break; case LF_LSP_MACRO: { if(!lfname_check_macro(**pstr) || (*(*pstr + 1) != '\0' && *(*pstr + 1) != ')' && *(*pstr + 1) != ' ')) { xprintf(0, gettext("LSP analyze error: bad macro at - %s\n"), *pstr - 1); break; } retv = lfname_lsp_var_new(type); retv->val.macro = **pstr; *pstr += 1; } break; case LF_LSP_STR: { char *tmp = _malloc(strlen(*pstr) + 1); char *tp; cp = *pstr; tp = tmp; while(*cp) { if(*cp == '\"') break; if(*cp == '\\') cp++; *tp = *cp; tp++; if(*cp) cp++; } *tp = '\0'; if(*cp != '\"') { xprintf(0, gettext("LSP analyze error: unterminated string at - %s\n"), *pstr - 1); break; } retv = lfname_lsp_var_new(type); retv->val.str = tl_strdup(tmp); _free(tmp); *pstr = cp + 1; } break; default: { struct lfname_lsp_var *p1 = NULL; struct lfname_lsp_var *p2 = NULL; struct lfname_lsp_var *p3 = NULL; if(lfname_lsp_ftbl[type].params >= 1) { cp = *pstr; p1 = lfname_lsp_analyze(pstr); if(!p1) break; if(p1->rettype != lfname_lsp_ftbl[type].p1type) { xprintf(0, gettext("LSP analyze error: bad parameter type at - %s\n"), cp); lfname_lsp_var_free(p1); break; } } if(p1 && lfname_lsp_ftbl[type].params >= 2) { cp = *pstr; p2 = lfname_lsp_analyze(pstr); if(!p2) { lfname_lsp_var_free(p1); break; } if(p2->rettype != lfname_lsp_ftbl[type].p2type) { xprintf(0, gettext("LSP analyze error: bad parameter type at - %s\n"), cp); lfname_lsp_var_free(p1); lfname_lsp_var_free(p2); break; } } if(p2 && lfname_lsp_ftbl[type].params >= 3) { cp = *pstr; p3 = lfname_lsp_analyze(pstr); if(!p3) { lfname_lsp_var_free(p1); lfname_lsp_var_free(p2); break; } if(p3->rettype != lfname_lsp_ftbl[type].p3type) { xprintf(0, gettext("LSP analyze error: bad parameter type at - %s\n"), cp); lfname_lsp_var_free(p1); lfname_lsp_var_free(p2); lfname_lsp_var_free(p3); break; } } while(**pstr == ' ') (*pstr)++; if(**pstr != ')') { xprintf(0, gettext("LSP analyze error: bad token at - %s\n"), *pstr); if(p1) lfname_lsp_var_free(p1); if(p2) lfname_lsp_var_free(p2); if(p3) lfname_lsp_var_free(p3); } else { (*pstr)++; retv = lfname_lsp_var_new(type); retv->param1 = p1; retv->param2 = p2; retv->param3 = p3; } } break; } return retv; } /* Removes a parameter from an URL-String. e.g. removeparameter("myurl.php3?var=something","var") will convert the URL to "myurl.php3?" */ static char *lfname_fn_removeparameter(char *urlstr, char *var) { char *p, *found; int pos1; int parlen; /* &var= */ p = tl_str_concat(NULL, "&", var, "=", NULL); parlen = strlen(p); found = strstr(urlstr, p); if(!found) { /* ?var= */ *p = '?'; found = strstr(urlstr, p); if(!found) { /* var= */ if((parlen > 1) && !strncmp(urlstr, p + 1, parlen - 1)) { found = urlstr; } } } _free(p); if(!found) return tl_strdup(urlstr); pos1 = found - urlstr + 1; found = strstr((urlstr + pos1 + 1), "&"); if(!found) { return tl_strndup(urlstr, pos1 - 1); } urlstr = tl_strndup(urlstr, pos1); return tl_str_concat(urlstr, found + 1, NULL); } /* reads a value from parameter of an URL-String. e.g. lfname_fn_getvalue("myurl.php3?var=value","var") results in value */ static char *lfname_fn_getvalue(char *urlstr, char *var) { char *p, *found; int parlen; /* &var= */ p = tl_str_concat(NULL, "&", var, "=", NULL); parlen = strlen(p); found = strstr(urlstr, p); if(!found) { /* ?var= */ *p = '?'; found = strstr(urlstr, p); if(!found) { /* var= */ if((parlen > 1) && !strncmp(urlstr, p + 1, parlen - 1)) { parlen--; found = urlstr; } } } _free(p); if(!found) return tl_strdup(""); return tl_strndup(found + parlen, strcspn(found + parlen, "&")); } static int lfname_lsp_eval(struct lfname_lsp_interp *interp, struct lfname_lsp_var *var) { if(var->param1) lfname_lsp_eval(interp, var->param1); if(var->param2) lfname_lsp_eval(interp, var->param2); if(var->param3) lfname_lsp_eval(interp, var->param3); var->ret_val.str = NULL; switch (var->type) { case LF_LSP_UNKNOWN: break; case LF_LSP_STR: var->ret_val.str = tl_strdup(var->val.str); break; case LF_LSP_NUM: var->ret_val.num = var->val.num; break; case LF_LSP_MACRO: var->ret_val.str = tl_strdup(lfname_interp_get_macro(interp, var->val.macro)); break; case LF_LSP_SUB: #ifdef HAVE_REGEX var->ret_val.str = lfname_re_sub(interp->orig, interp->urlstr, var->param1->ret_val.num); #endif break; case LF_LSP_SC: { char *p; p = _malloc(strlen(var->param1->ret_val.str) + strlen(var->param2->ret_val.str) + 1); strcpy(p, var->param1->ret_val.str); strcat(p, var->param2->ret_val.str); var->ret_val.str = p; } break; case LF_LSP_SS: { char *p; p = var->param1->ret_val.str; if(var->param2->ret_val.num > 0) p += (strlen(p) >= var->param2->ret_val.num) ? var->param2->ret_val.num : strlen(p); if(var->param3->ret_val.num > 0) var->ret_val.str = tl_strndup(p, var->param3->ret_val.num); else var->ret_val.str = tl_strdup(p); } break; case LF_LSP_HASH: var->ret_val.num = str_hash_func(var->param2->ret_val.num, (dllist_t) var->param1->ret_val.str); break; case LF_LSP_MD5: var->ret_val.str = _md5(var->param1->ret_val.str); break; case LF_LSP_LOWER: var->ret_val.str = lowerstr(var->param1->ret_val.str); break; case LF_LSP_UPPER: var->ret_val.str = upperstr(var->param1->ret_val.str); break; case LF_LSP_UENC: var->ret_val.str = url_encode_str(var->param1->ret_val.str, var->param2->ret_val.str); break; case LF_LSP_UDEC: var->ret_val.str = url_decode_str(var->param1->ret_val.str, strlen(var->param1->ret_val.str)); break; case LF_LSP_DELCHR: var->ret_val.str = tr_del_chr(var->param2->ret_val.str, var->param1->ret_val.str); break; case LF_LSP_TRCHR: var->ret_val.str = tr_chr_chr(var->param2->ret_val.str, var->param3->ret_val.str, var->param1->ret_val.str); break; case LF_LSP_TRSTR: var->ret_val.str = tr_str_str(var->param2->ret_val.str, var->param3->ret_val.str, var->param1->ret_val.str); break; case LF_LSP_STRSPN: var->ret_val.num = strspn(var->param1->ret_val.str, var->param2->ret_val.str); break; case LF_LSP_STRCSPN: var->ret_val.num = strcspn(var->param1->ret_val.str, var->param2->ret_val.str); break; case LF_LSP_STRLEN: var->ret_val.num = strlen(var->param1->ret_val.str); break; case LF_LSP_NRSTR: { char pom[1024]; snprintf(pom, sizeof(pom), var->param1->ret_val.str, var->param2->ret_val.num); var->ret_val.str = tl_strdup(pom); } break; case LF_LSP_LCHR: { char *p; p = strrchr(var->param1->ret_val.str, *var->param2->ret_val.str); var->ret_val.num = p ? p - var->param1->ret_val.str : 0; } break; case LF_LSP_PLS: var->ret_val.num = var->param1->ret_val.num + var->param2->ret_val.num; break; case LF_LSP_MNS: var->ret_val.num = var->param1->ret_val.num - var->param2->ret_val.num; break; case LF_LSP_MOD: var->ret_val.num = var->param1->ret_val.num % var->param2->ret_val.num; break; case LF_LSP_MUL: var->ret_val.num = var->param1->ret_val.num * var->param2->ret_val.num; break; case LF_LSP_DIV: var->ret_val.num = var->param1->ret_val.num / var->param2->ret_val.num; break; case LF_LSP_REMOVEPARAMETER: var->ret_val.str = lfname_fn_removeparameter(var->param1->ret_val.str, var->param2->ret_val.str); break; case LF_LSP_GETVALUE: var->ret_val.str = lfname_fn_getvalue(var->param1->ret_val.str, var->param2->ret_val.str); break; case LF_LSP_SIF: var->ret_val.str = var->param1->ret_val.num ? tl_strdup(var->param2->ret_val.str) : tl_strdup(var->param3->ret_val.str); break; case LF_LSP_NOT: var->ret_val.num = !var->param1->ret_val.num; break; case LF_LSP_AND: var->ret_val.num = var->param1->ret_val.num && var->param2->ret_val.num; break; case LF_LSP_OR: var->ret_val.num = var->param1->ret_val.num || var->param2->ret_val.num; break; case LF_LSP_GETEXT: var->ret_val.str = tl_strdup(tl_get_extension(var->param1->ret_val.str)); break; case LF_LSP_SEQ: var->ret_val.num = !strcmp(var->param1->ret_val.str, var->param2->ret_val.str); break; #ifdef HAVE_MOZJS case LF_LSP_JSF: var->ret_val.str = pjs_run_fnrules_func(var->param1->ret_val.str, interp); break; #endif } if(var->rettype == LF_LSP_STR && !var->ret_val.str) var->ret_val.str = tl_strdup(""); return 0; } static char *lfname_lsp_get_by_url(struct lfname_lsp_interp *interp) { char *retv = NULL; struct lfname_lsp_var *variant; const char *p; p = interp->orig->transstr; variant = lfname_lsp_analyze(&p); if(variant) { lfname_lsp_eval(interp, variant); if(variant->rettype == LF_LSP_NUM) { char nr[10]; sprintf(nr, "%d", variant->ret_val.num); retv = tl_strdup(nr); } else { retv = tl_strdup(variant->ret_val.str); } lfname_lsp_var_free(variant); } return retv; } pavuk-0.9.35/src/lfname.h0000644000175000001440000000375610151324264012066 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _lfname_h_ #define _lfname_h_ #ifdef HAVE_REGEX #ifdef HAVE_PCRE_REGEX #include #endif #ifdef HAVE_REGEX_H #include #else #ifdef HAVE_V8_REGEX #ifndef NSUBEXP #include #endif #endif #endif #endif #include "url.h" typedef enum { LFNAME_UNKNOWN, #ifdef HAVE_REGEX LFNAME_REGEX, #endif LFNAME_FNMATCH } lfname_type; typedef struct { lfname_type type; #ifdef HAVE_POSIX_REGEX regex_t preg; regmatch_t *pmatch; #endif #ifdef HAVE_V8_REGEX regexp *preg; #endif #ifdef HAVE_GNU_REGEX struct re_pattern_buffer preg; struct re_registers pmatch; #endif #ifdef HAVE_PCRE_REGEX pcre *preg; pcre_extra *preg_extra; int pmatch_nr; int *pmatch; #endif char *matchstr; char *transstr; } lfname; /* need to export for jsbind.c */ struct lfname_lsp_interp { url *urlp; const char *urlstr; char *scheme; char *passwd; char *user; char *host; char *domain; char *port; char *path; char *name; char *basename; char *extension; char *query; char *post_query; char *deflt; const char *mime_type; const char *mime_type_ext; lfname *orig; }; extern lfname *lfname_new(lfname_type, const char *, const char *); extern void lfname_free(lfname *); extern char *lfname_get_by_url(url *, const char *, const char *, lfname *); extern int lfname_match(lfname *, const char *); extern int lfname_check_pattern(lfname_type, const char *); extern int lfname_check_rule(const char *); extern const char *lfname_interp_get_macro(struct lfname_lsp_interp *, int); extern int lfname_check_macro(int); extern char *lfname_re_sub(lfname *, const char *, int); #endif pavuk-0.9.35/src/gauthinfo.c0000644000175000001440000004156410325646535012615 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef GTK_FACE #include #include #include "authinfo.h" #include "gauthinfo.h" #include "gui.h" #include "icons/ok.xpm" #include "icons/cancel.xpm" #include "icons/append.xpm" #include "icons/apply.xpm" #include "icons/clear.xpm" #include "icons/delete.xpm" #include "icons/modify.xpm" #include "icons/save.xpm" #include "icons/load.xpm" static GtkWidget *list; static GtkWidget *topl = NULL; static GtkWidget *w_prot; static GtkWidget *w_host; static GtkWidget *w_user; static GtkWidget *w_pass; static GtkWidget *w_base; static GtkWidget *w_realm; static GtkWidget *w_type[4]; static void fill_list(GtkWidget * clist) { dllist *ptr; LOCK_AUTHINFO; ptr = authdata; while(ptr) { authinfo *ai = (authinfo *) ptr->data; char *ad[7]; char pom[10]; char host[100]; ad[0] = prottable[ai->prot].urlid; snprintf(host, sizeof(host), "%s:%d", ai->host, ai->port); ad[1] = host; ad[2] = ai->user ? ai->user : ""; ad[3] = ai->pass ? ai->pass : ""; ad[4] = ai->base ? ai->base : ""; ad[5] = ai->realm ? ai->realm : ""; sprintf(pom, "%d", ai->type); ad[6] = pom; gtk_clist_append(GTK_CLIST(clist), ad); ptr = ptr->next; } UNLOCK_AUTHINFO; } static void PopdownW(GtkObject * object, gpointer func_data) { gtk_widget_destroy(GTK_WIDGET(func_data)); } static void SaveAI(GtkWidget * w, gpointer data) { char *fn = (gchar *) gtk_file_selection_get_filename(GTK_FILE_SELECTION(data)); if(authinfo_save(fn)) { gdk_beep(); } else gtk_widget_destroy(GTK_WIDGET(data)); } static void Save(GtkWidget * w, gpointer data) { static GtkWidget *fn = NULL; if(fn) { gtk_widget_show_all(fn); if(GTK_WIDGET_REALIZED(fn)) gdk_window_raise(fn->window); return; } fn = gtk_file_selection_new(gettext("Pavuk: Save auth. info file")); gtk_signal_connect(GTK_OBJECT(fn), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fn); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fn)->ok_button), "clicked", GTK_SIGNAL_FUNC(SaveAI), fn); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fn)->cancel_button), "clicked", GTK_SIGNAL_FUNC(PopdownW), fn); if(cfg.auth_file) gtk_file_selection_set_filename(GTK_FILE_SELECTION(fn), cfg.auth_file); gtk_widget_show_all(fn); } static void LoadAI(GtkWidget * w, gpointer data) { char *fn = (gchar *) gtk_file_selection_get_filename(GTK_FILE_SELECTION(data)); if(authinfo_load(fn)) { gdk_beep(); } else { gtk_clist_freeze(GTK_CLIST(list)); gtk_clist_clear(GTK_CLIST(list)); fill_list(list); gtk_clist_thaw(GTK_CLIST(list)); gtk_widget_destroy(GTK_WIDGET(data)); } } static void Load(GtkWidget * w, gpointer data) { static GtkWidget *fn = NULL; if(fn) { gtk_widget_show_all(fn); if(GTK_WIDGET_REALIZED(fn)) gdk_window_raise(fn->window); return; } fn = gtk_file_selection_new(gettext("Pavuk: Load auth. info file")); gtk_signal_connect(GTK_OBJECT(fn), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fn); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fn)->ok_button), "clicked", GTK_SIGNAL_FUNC(LoadAI), fn); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fn)->cancel_button), "clicked", GTK_SIGNAL_FUNC(PopdownW), fn); if(cfg.auth_file) gtk_file_selection_set_filename(GTK_FILE_SELECTION(fn), cfg.auth_file); gtk_widget_show_all(fn); } static void Apply(GtkObject * object, gpointer func_data) { int i, j; LOCK_AUTHINFO; while(authdata) { authinfo *ai = (authinfo *) authdata->data; free_deep_authinfo(ai); authdata = dllist_remove_entry(authdata, authdata); } for(i = 0; i < GTK_CLIST(func_data)->rows; i++) { char *ld[7]; char *p; authinfo *ai; for(j = 0; j < 7; j++) gtk_clist_get_text(GTK_CLIST(func_data), i, j, &ld[j]); ai = _malloc(sizeof(authinfo)); for(j = 0; j < NUM_ELEM(prottable); j++) { if(prottable[j].urlid && !strcmp(ld[0], prottable[j].urlid)) { ai->prot = j; break; } } p = strchr(ld[1], ':'); ai->host = p ? new_n_string(ld[1], p - ld[1]) : new_string(ld[1]); ai->port = p ? atoi(p + 1) : prottable[ai->prot].default_port; ai->user = new_string(ld[2]); ai->pass = new_string(ld[3]); ai->base = ld[4] && *ld[4] ? new_string(ld[4]) : NULL; ai->realm = ld[5] && *ld[5] ? new_string(ld[5]) : NULL; ai->type = atoi(ld[6]); authdata = dllist_append(authdata, (dllist_t)ai); } UNLOCK_AUTHINFO; } static void CopyFromList(GtkObject * object, int row, int col, GdkEvent * event, gpointer data) { char *p; int i, j; if(GTK_CLIST(object)->selection) { gtk_clist_get_text(GTK_CLIST(object), row, 0, &p); for(i = 0, j = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].urlid && !strcmp(p, prottable[i].urlid)) { gtk_option_menu_set_history(GTK_OPTION_MENU(w_prot), j); break; } if(prottable[i].supported) j++; } gtk_clist_get_text(GTK_CLIST(object), row, 1, &p); gtk_entry_set_text(GTK_ENTRY(w_host), p); gtk_clist_get_text(GTK_CLIST(object), row, 2, &p); gtk_entry_set_text(GTK_ENTRY(w_user), p); gtk_clist_get_text(GTK_CLIST(object), row, 3, &p); gtk_entry_set_text(GTK_ENTRY(w_pass), p); gtk_clist_get_text(GTK_CLIST(object), row, 4, &p); gtk_entry_set_text(GTK_ENTRY(w_base), p); gtk_clist_get_text(GTK_CLIST(object), row, 5, &p); gtk_entry_set_text(GTK_ENTRY(w_realm), p); gtk_clist_get_text(GTK_CLIST(object), row, 6, &p); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w_type[atoi(p) ? atoi(p) - 1 : 1]), TRUE); } } static void NewRow(int row, GtkWidget * list) { char *ad[7]; char pom[10]; ad[0] = prottable[(long) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(w_prot)->menu_item))]. urlid; ad[1] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_host)); ad[2] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_user)); ad[3] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_pass)); ad[4] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_base)); ad[5] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_realm)); #ifdef ENABLE_NTLM sprintf(pom, "%d", GTK_TOGGLE_BUTTON(w_type[0])->active ? 1 : (GTK_TOGGLE_BUTTON(w_type[1])-> active ? 2 : (GTK_TOGGLE_BUTTON(w_type[2])->active ? 3 : 4))); #else sprintf(pom, "%d", GTK_TOGGLE_BUTTON(w_type[0])->active ? 1 : (GTK_TOGGLE_BUTTON(w_type[1])-> active ? 2 : 3)); #endif ad[6] = pom; if(ad[1] && *ad[1] && ad[2] && *ad[2] && ad[3] && *ad[3]) { if(row < 0) gtk_clist_append(GTK_CLIST(list), ad); else { int i; for(i = 0; i < 7; i++) gtk_clist_set_text(GTK_CLIST(list), row, i, ad[i]); } } else { gdk_beep(); } } static void Append(GtkObject * object, gpointer func_data) { NewRow(-1, func_data); } static void Modify(GtkObject * object, gpointer func_data) { if(!GTK_CLIST(func_data)->selection) { gdk_beep(); return; } NewRow(GPOINTER_TO_INT(GTK_CLIST(func_data)->selection->data), func_data); } void gauthinfo_run(void) { GtkWidget *box, *swin, *tbox, *frame, *label, *pbox; GtkWidget *menu, *mi, *brow, *button; GSList *rg; int i; if(!topl) { topl = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_border_width(GTK_CONTAINER(topl), 3); gtk_window_set_title(GTK_WINDOW(topl), gettext("Pavuk: Authorization info editor")); gtk_signal_connect(GTK_OBJECT(topl), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &topl); box = gtk_vbox_new(FALSE, 4); gtk_container_add(GTK_CONTAINER(topl), box); gtk_widget_show(box); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_usize(swin, 550, 300); gtk_box_pack_start(GTK_BOX(box), swin, TRUE, TRUE, 2); gtk_widget_show(swin); list = gtk_clist_new(7); gtk_clist_set_column_title(GTK_CLIST(list), 0, gettext("Protocol")); gtk_clist_set_column_title(GTK_CLIST(list), 1, gettext("Host")); gtk_clist_set_column_title(GTK_CLIST(list), 2, gettext("User")); gtk_clist_set_column_title(GTK_CLIST(list), 3, gettext("Password")); gtk_clist_set_column_title(GTK_CLIST(list), 4, gettext("Base dir.")); gtk_clist_set_column_title(GTK_CLIST(list), 5, gettext("Realm")); gtk_clist_set_column_title(GTK_CLIST(list), 6, gettext("Scheme")); gtk_clist_column_titles_show(GTK_CLIST(list)); gtk_clist_set_column_auto_resize(GTK_CLIST(list), 0, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(list), 1, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(list), 2, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(list), 3, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(list), 4, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(list), 5, TRUE); gtk_container_add(GTK_CONTAINER(swin), list); fill_list(list); gtk_widget_show(list); gtk_signal_connect(GTK_OBJECT(list), "select_row", GTK_SIGNAL_FUNC(CopyFromList), NULL); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 1); gtk_widget_show(frame); tbox = gtk_table_new(4, 5, FALSE); gtk_container_add(GTK_CONTAINER(frame), tbox); gtk_widget_show(tbox); label = gtk_label_new(gettext("Protocol: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(tbox), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 2); gtk_widget_show(label); w_prot = gtk_option_menu_new(); menu = gtk_menu_new(); gtk_widget_realize(menu); for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].supported) { mi = gtk_menu_item_new_with_label(prottable[i].urlid); gtk_menu_append(GTK_MENU(menu), mi); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) prottable[i].id); gtk_widget_show(mi); } } gtk_option_menu_set_menu(GTK_OPTION_MENU(w_prot), menu); gtk_table_attach(GTK_TABLE(tbox), w_prot, 1, 2, 0, 1, GTK_EXPAND, GTK_FILL, 5, 2); gtk_widget_show(w_prot); label = gtk_label_new(gettext("Host: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(tbox), label, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 5, 2); gtk_widget_show(label); w_host = gtk_entry_new(); gtk_table_attach(GTK_TABLE(tbox), w_host, 3, 4, 0, 1, GTK_EXPAND, GTK_FILL, 5, 2); gtk_widget_show(w_host); label = gtk_label_new(gettext("User: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(tbox), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 2); gtk_widget_show(label); w_user = gtk_entry_new(); gtk_table_attach(GTK_TABLE(tbox), w_user, 1, 2, 1, 2, GTK_EXPAND, GTK_FILL, 5, 2); gtk_widget_show(w_user); label = gtk_label_new(gettext("Password: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(tbox), label, 2, 3, 1, 2, GTK_FILL, GTK_FILL, 5, 2); gtk_widget_show(label); w_pass = gtk_entry_new(); gtk_table_attach(GTK_TABLE(tbox), w_pass, 3, 4, 1, 2, GTK_EXPAND, GTK_FILL, 5, 2); gtk_widget_show(w_pass); label = gtk_label_new(gettext("Base directory: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(tbox), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 5, 2); gtk_widget_show(label); w_base = gtk_entry_new(); gtk_table_attach(GTK_TABLE(tbox), w_base, 1, 2, 2, 3, GTK_EXPAND, GTK_FILL, 5, 2); gtk_widget_show(w_base); label = gtk_label_new(gettext("Realm: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(tbox), label, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 5, 2); gtk_widget_show(label); w_realm = gtk_entry_new(); gtk_table_attach(GTK_TABLE(tbox), w_realm, 3, 4, 2, 3, GTK_EXPAND, GTK_FILL, 5, 2); gtk_widget_show(w_realm); frame = gtk_frame_new("Scheme"); gtk_table_attach(GTK_TABLE(tbox), frame, 0, 4, 3, 4, GTK_FILL, GTK_FILL, 5, 2); gtk_widget_show(frame); pbox = gtk_hbox_new(TRUE, 5); gtk_container_add(GTK_CONTAINER(frame), pbox); gtk_widget_show(pbox); w_type[0] = gtk_radio_button_new_with_label(NULL, gettext("User auth. scheme")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(w_type[0])); gtk_widget_show(w_type[0]); gtk_container_add(GTK_CONTAINER(pbox), w_type[0]); w_type[1] = gtk_radio_button_new_with_label(rg, gettext("Base auth. scheme")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(w_type[1])); gtk_widget_show(w_type[1]); gtk_container_add(GTK_CONTAINER(pbox), w_type[1]); w_type[2] = gtk_radio_button_new_with_label(rg, gettext("Digest auth. scheme")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(w_type[2])); gtk_widget_show(w_type[2]); gtk_container_add(GTK_CONTAINER(pbox), w_type[2]); #ifdef ENABLE_NTLM w_type[3] = gtk_radio_button_new_with_label(rg, gettext("NTLM auth. scheme")); rg = gtk_radio_button_group(GTK_RADIO_BUTTON(w_type[3])); gtk_widget_show(w_type[3]); gtk_container_add(GTK_CONTAINER(pbox), w_type[3]); #endif brow = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); gtk_table_attach(GTK_TABLE(tbox), brow, 0, 4, 4, 5, GTK_EXPAND, GTK_FILL, 5, 5); gtk_widget_show(brow); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Append), list); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Modify), list); button = guitl_pixmap_button(clear_xpm, NULL, gettext("Clear")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListClear), list); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), list); brow = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); gtk_box_pack_start(GTK_BOX(box), brow, FALSE, TRUE, 5); gtk_widget_show(brow); button = guitl_pixmap_button(ok_xpm, NULL, gettext("OK")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Apply), list); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(PopdownW), topl); button = guitl_pixmap_button(apply_xpm, NULL, gettext("Apply")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Apply), list); button = guitl_pixmap_button(load_xpm, NULL, gettext("Load")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Load), NULL); button = guitl_pixmap_button(save_xpm, NULL, gettext("Save")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Apply), list); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(Save), NULL); button = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(PopdownW), topl); } gtk_widget_show(topl); if(GTK_WIDGET_REALIZED(topl)) gdk_window_raise(topl->window); } #endif pavuk-0.9.35/src/gauthinfo.h0000644000175000001440000000073510131502267012601 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _gauthinfo_h_ #define _gauthinfo_h_ extern void gauthinfo_run(void); #endif pavuk-0.9.35/src/uexit.c0000644000175000001440000000426710142077742011761 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include "uexit.h" #include "tools.h" #include "doc.h" static int uexit_run_cmd(char *cmd) { int retv; retv = tl_system(cmd); #ifdef WIFEXITED if(retv < 0 || !WIFEXITED(retv)) #else if(retv < 0 || (retv & 0x00FF) > 127) #endif { xperror(gettext("Error occured while executing user-exit script")); return -1; } #ifdef WEXITSTATUS return WEXITSTATUS(retv); #else return (retv & 0xFF00) >> 8; #endif } int uexit_condition(url * urlp, int *size, time_t date) { char *cmd; char pom[256]; char *urlstr; int retv; dllist *ptr; urlstr = url_to_urlstr(urlp, FALSE); cmd = tl_str_concat(NULL, priv_cfg.condition.uexit, " -url '", urlstr, "'", NULL); _free(urlstr); LOCK_URL(urlp); for(ptr = urlp->parent_url; ptr; ptr = ptr->next) { urlstr = url_to_urlstr((url *) ptr->data, FALSE); cmd = tl_str_concat(cmd, " -parent '", urlstr, "'", NULL); _free(urlstr); } UNLOCK_URL(urlp); sprintf(pom, "-level %hu ", urlp->level); cmd = tl_str_concat(cmd, pom, NULL); if(size) { strcat(cmd, "-size "); sprintf(pom, "%d ", *size); cmd = tl_str_concat(cmd, pom, NULL); } if(date) { LOCK_TIME; strftime(pom, sizeof(pom), "-date %Y%m%d%H%M%S ", gmtime(&date)); UNLOCK_TIME; cmd = tl_str_concat(cmd, pom, NULL); } retv = uexit_run_cmd(cmd); _free(cmd); return retv; } int uexit_follow_cmd(doc * docp) { char *cmd; char *p; int retv; p = url_to_urlstr(docp->doc_url, FALSE); cmd = tl_str_concat(NULL, priv_cfg.condition.follow_cmd, " -url '", p, "'", NULL); _free(p); p = url_to_in_filename(docp->doc_url); cmd = tl_str_concat(cmd, " -infile '", p, "'", NULL); _free(p); retv = uexit_run_cmd(cmd); _free(cmd); return retv; } pavuk-0.9.35/src/uexit.h0000644000175000001440000000105610142077742011757 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _uexit_h_ #define _uexit_h_ #include #include "doc.h" extern int uexit_condition(url *, int *, time_t); extern int uexit_follow_cmd(doc *); #endif pavuk-0.9.35/src/dlhash.c0000644000175000001440000001223310325725323012054 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include "config.h" #include "dlhash.h" dlhash *dlhash_new(unsigned int size, dlkey_func key_func, dlhash_func hash_func, dlcomp_func comp_func) { dlhash *retv = malloc(sizeof(dlhash)); assert(retv != NULL); retv->size = size; retv->key_func = key_func; retv->hash_func = hash_func; retv->comp_func = comp_func; retv->free_func = NULL; retv->keyfree_func = NULL; retv->nodes = (dllist **) calloc(size, sizeof(dllist *)); assert(retv->nodes != NULL); memset(retv->nodes, '\0', size * sizeof(dllist *)); return retv; } void dlhash_set_free_func(dlhash * hash, dlfree_func free_func, dlkeyfree_func keyfree_func) { hash->free_func = free_func; hash->keyfree_func = keyfree_func; } void dlhash_empty(dlhash * hash) { unsigned int i = 0; for(i = 0; i < hash->size; i++) { while(hash->nodes[i]) { if(hash->free_func) hash->free_func(hash->nodes[i]->data); hash->nodes[i] = dllist_remove_entry(hash->nodes[i], hash->nodes[i]); } } } void dlhash_free(dlhash * hash) { dlhash_empty(hash); free(hash->nodes); free(hash); } void dlhash_insert(dlhash * hash, dllist_t key_data) { dllist_t key; unsigned int key_class; key = hash->key_func(key_data); key_class = hash->hash_func(hash->size, key); hash->nodes[key_class] = dllist_append(hash->nodes[key_class], key_data); if(hash->keyfree_func) hash->keyfree_func(key); } void dlhash_remove(dlhash * hash, dllist_t key_data) { dllist_t key1, key2; unsigned int key_class; dllist *ptr; key1 = hash->key_func(key_data); key_class = hash->hash_func(hash->size, key1); ptr = hash->nodes[key_class]; while(ptr) { key2 = hash->key_func(ptr->data); if(hash->comp_func(key1, key2)) { dllist *tptr; if(hash->free_func) hash->free_func(ptr->data); tptr = ptr->next; hash->nodes[key_class] = dllist_remove_entry(hash->nodes[key_class], ptr); ptr = tptr; } else ptr = ptr->next; if(hash->keyfree_func) hash->keyfree_func(key2); } if(hash->keyfree_func) hash->keyfree_func(key1); } void dlhash_exclude(dlhash * hash, dllist_t key_data) { dllist_t key1, key2; unsigned int key_class; dllist *ptr; key1 = hash->key_func(key_data); key_class = hash->hash_func(hash->size, key1); ptr = hash->nodes[key_class]; while(ptr) { key2 = hash->key_func(ptr->data); if(hash->comp_func(key1, key2)) { dllist *tptr; tptr = ptr->next; hash->nodes[key_class] = dllist_remove_entry(hash->nodes[key_class], ptr); ptr = tptr; } else ptr = ptr->next; if(hash->keyfree_func) hash->keyfree_func(key2); } if(hash->keyfree_func) hash->keyfree_func(key1); } dllist *dlhash_get_class(dlhash * hash, dllist_t key_data) { dllist_t key; unsigned int key_class; key = hash->key_func(key_data); key_class = hash->hash_func(hash->size, key); if(hash->keyfree_func) hash->keyfree_func(key); return hash->nodes[key_class]; } void dlhash_exclude_exact(dlhash * hash, dllist_t key_data) { dllist_t key; unsigned int key_class; dllist *ptr; key = hash->key_func(key_data); key_class = hash->hash_func(hash->size, key); if(hash->keyfree_func) hash->keyfree_func(key); if((ptr = dllist_find(hash->nodes[key_class], key_data))) hash->nodes[key_class] = dllist_remove_entry(hash->nodes[key_class], ptr); } dllist_t dlhash_find_by_key(dlhash * hash, dllist_t key1) { dllist_t key2; dllist_t retv = 0; unsigned int key_class; dllist *ptr; key_class = hash->hash_func(hash->size, key1); ptr = hash->nodes[key_class]; while(ptr) { key2 = hash->key_func(ptr->data); if(hash->comp_func(key1, key2)) { retv = ptr->data; if(hash->keyfree_func) hash->keyfree_func(key2); break; } ptr = ptr->next; if(hash->keyfree_func) hash->keyfree_func(key2); } return retv; } dllist_t dlhash_find(dlhash * hash, dllist_t key_data) { dllist_t key; dllist_t retv = 0; key = hash->key_func(key_data); retv = dlhash_find_by_key(hash, key); if(hash->keyfree_func) hash->keyfree_func(key); return retv; } void dlhash_resize(dlhash * hash, unsigned int new_size) { unsigned int i, old_size; dllist **old_nodes; if(hash->size == new_size) return; old_nodes = hash->nodes; old_size = hash->size; hash->size = new_size; hash->nodes = (dllist **) calloc(new_size, sizeof(dllist *)); assert(hash->nodes != NULL); memset(hash->nodes, '\0', new_size * sizeof(dllist *)); for(i = 0; i < old_size; i++) { while(old_nodes[i]) { dlhash_insert(hash, old_nodes[i]->data); old_nodes[i] = dllist_remove_entry(old_nodes[i], old_nodes[i]); } } free(old_nodes); } pavuk-0.9.35/src/dlhash.h0000644000175000001440000000275310325662705012073 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _dlhash_h_ #define _dlhash_h_ #include "dllist.h" typedef unsigned int (*dlhash_func) (unsigned int, dllist_t key); typedef dllist_t (*dlkey_func) (dllist_t key_data); typedef void (*dlkeyfree_func) (dllist_t key); typedef struct _dlhash { unsigned int size; dllist **nodes; dlkey_func key_func; dlkeyfree_func keyfree_func; dlhash_func hash_func; dlcomp_func comp_func; dlfree_func free_func; } dlhash; extern dlhash *dlhash_new(unsigned int, dlkey_func, dlhash_func, dlcomp_func); extern void dlhash_set_free_func(dlhash *, dlfree_func, dlkeyfree_func); extern void dlhash_empty(dlhash *); extern void dlhash_free(dlhash *); extern void dlhash_insert(dlhash *, dllist_t key_data); extern void dlhash_remove(dlhash *, dllist_t key_data); extern void dlhash_exclude(dlhash *, dllist_t key_data); extern void dlhash_exclude_exact(dlhash *, dllist_t key_data); extern dllist *dlhash_get_class(dlhash *, dllist_t key_data); extern dllist_t dlhash_find(dlhash *, dllist_t key_data); extern dllist_t dlhash_find_by_key(dlhash *, dllist_t key); extern void dlhash_resize(dlhash *, unsigned int); #endif pavuk-0.9.35/src/lang.h0000644000175000001440000000525710142077741011550 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _lang_h_ #define _lang_h_ /* refers to ISO639 */ static const char *iso_lang[] = { "aa Afar", "ab Abkhazian", "af Afrikaans", "am Amharic", "ar Arabic", "as Assamese", "ay Aymara", "az Azerbaijani", "ba Bashkir", "be Byelorussian", "bg Bulgarian", "bh Bihari", "bi Bislama", "bn Bengali; Bangla", "bo Tibetan", "br Breton", "ca Catalan", "co Corsican", "cs Czech", "cy Welsh", "da Danish", "de German", "dz Bhutani", "el Greek", "en English", "eo Esperanto", "es Spanish", "et Estonian", "eu Basque", "fa Persian", "fi Finnish", "fj Fiji", "fo Faeroese", "fr French", "fy Frisian", "ga Irish", "gd Scots Gaelic", "gl Galician", "gn Guarani", "gu Gujarati", "ha Hausa", "hi Hindi", "hr Croatian", "hu Hungarian", "hy Armenian", "ia Interlingua", "ie Interlingue", "ik Inupiak", "in Indonesian", "is Icelandic", "it Italian", "iw Hebrew", "ja Japanese", "ji Yiddish", "jw Javanese", "ka Georgian", "kk Kazakh", "kl Greenlandic", "km Cambodian", "kn Kannada", "ko Korean", "ks Kashmiri", "ku Kurdish", "ky Kirghiz", "la Latin", "ln Lingala", "lo Laothian", "lt Lithuanian", "lv Latvian, Lettish", "mg Malagasy", "mi Maori", "mk Macedonian", "ml Malayalam", "mn Mongolian", "mo Moldavian", "mr Marathi", "ms Malay", "mt Maltese", "my Burmese", "na Nauru", "ne Nepali", "nl Dutch", "no Norwegian", "oc Occitan", "om (Afan) Oromo", "or Oriya", "pa Punjabi", "pl Polish", "ps Pashto, Pushto", "pt Portuguese", "qu Quechua", "rm Rhaeto-Romance", "rn Kirundi", "ro Romanian", "ru Russian", "rw Kinyarwanda", "sa Sanskrit", "sd Sindhi", "sg Sangro", "sh Serbo-Croatian", "si Singhalese", "sk Slovak", "sl Slovenian", "sm Samoan", "sn Shona", "so Somali", "sq Albanian", "sr Serbian", "ss Siswati", "st Sesotho", "su Sundanese", "sv Swedish", "sw Swahili", "ta Tamil", "te Tegulu", "tg Tajik", "th Thai", "ti Tigrinya", "tk Turkmen", "tl Tagalog", "tn Setswana", "to Tonga", "tr Turkish", "ts Tsonga", "tt Tatar", "tw Twi", "uk Ukrainian", "ur Urdu", "uz Uzbek", "vi Vietnamese", "vo Volapuk", "wo Wolof", "xh Xhosa", "yo Yoruba", "zh Chinese", "zu Zulu", NULL }; #endif pavuk-0.9.35/src/gkeys.c0000644000175000001440000000506610146657462011752 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #ifdef GTK_FACE #include "gaccel.h" #include "gkeys.h" #include "gprop.h" #include "gui.h" struct rc_terms { char *name; enum { GKEY_MENUACCEL, GKEY_PROP, GKEY_LAST } id; }; static const struct rc_terms gkey_rc[] = { {"MenuAccel:", GKEY_MENUACCEL}, {"Property:", GKEY_PROP} }; void gkey_load(void) { char pom[2048]; FILE *f; char *line; int found = FALSE; int i; snprintf(pom, sizeof(pom), "%s/.pavuk_keys", cfg.path_to_home); f = fopen(pom, "rb"); if(!f) return; while((line = fgets(pom, sizeof(pom), f))) { if(*line == '#') continue; if(!strcspn(line, " \t\r\n")) continue; found = FALSE; for(i = 0; i < GKEY_LAST; i++) { if(!strncasecmp(gkey_rc[i].name, line, strlen(gkey_rc[i].name))) { found = TRUE; break; } } if(!found) fprintf(stderr, gettext("Unable to parse: %s\n"), line); else { line += strlen(gkey_rc[i].name); line += strspn(line, "\t "); *(line + strcspn(line, "\n\r")) = '\0'; switch (gkey_rc[i].id) { case GKEY_MENUACCEL: { gaccel *ga; if((ga = gaccel_parse_str((guchar *) line))) { gaccel_add(ga); } else xprintf(0, gettext("Unable to parse: %s\n"), line); } break; case GKEY_PROP: { gprop *gp; if((gp = gprop_parse(line))) { gprop_add(gp); } else xprintf(0, gettext("Unable to parse: %s\n"), line); } break; default: break; } } } fclose(f); } void gkey_save(void) { char pom[2048]; FILE *f; snprintf(pom, sizeof(pom), "%s/.pavuk_keys", cfg.path_to_home); f = fopen(pom, "w+b"); if(!f) { xprintf(0, gettext("Unable to create ~/.pavuk_keys file\n")); return; } fprintf(f, gettext ("# This file was generated by %s\n# You may edit it if you're careful!\n\n"), PACKAGE); gaccel_save_keys(f); gprop_save(f); fclose(f); } #endif pavuk-0.9.35/src/gkeys.h0000644000175000001440000000075610142077737011755 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _gkeys_h_ #define _gkeys_h_ extern void gkey_load(void); extern void gkey_save(void); #endif pavuk-0.9.35/src/md4c.c0000644000175000001440000002125410142077741011444 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ /* MD4C.C - RSA Data Security, Inc., MD4 message-digest algorithm */ /* Copyright (C) 1990-2, RSA Data Security, Inc. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD4 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD4 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ #include "config.h" #if defined ENABLE_NTLM && !defined HAVE_OPENSSL_MD4 #include "md4c.h" /* Constants for MD4Transform routine. */ #define S11 3 #define S12 7 #define S13 11 #define S14 19 #define S21 3 #define S22 5 #define S23 9 #define S24 13 #define S31 3 #define S32 9 #define S33 11 #define S34 15 #define POINTER unsigned char * static void MD4Transform(UINT4[4], unsigned char[64]); static void Encode(unsigned char *, UINT4 *, unsigned int); static void Decode(UINT4 *, unsigned char *, unsigned int); static void MD4_memcpy(POINTER, POINTER, unsigned int); static void MD4_memset(POINTER, int, unsigned int); static unsigned char PADDING[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* F, G and H are basic MD4 functions. */ #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) /* ROTATE_LEFT rotates x left n bits. */ #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) /* FF, GG and HH are transformations for rounds 1, 2 and 3 */ /* Rotation is separate from addition to prevent recomputation */ #define FF(a, b, c, d, x, s) { \ (a) += F ((b), (c), (d)) + (x); \ (a) = ROTATE_LEFT ((a), (s)); \ } #define GG(a, b, c, d, x, s) { \ (a) += G ((b), (c), (d)) + (x) + (UINT4)0x5a827999; \ (a) = ROTATE_LEFT ((a), (s)); \ } #define HH(a, b, c, d, x, s) { \ (a) += H ((b), (c), (d)) + (x) + (UINT4)0x6ed9eba1; \ (a) = ROTATE_LEFT ((a), (s)); \ } /* MD4 initialization. Begins an MD4 operation, writing a new context. */ void MD4Init(MD4_CTX * context) { context->count[0] = context->count[1] = 0; /* Load magic initialization constants. */ context->state[0] = 0x67452301; context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; } /* MD4 block update operation. Continues an MD4 message-digest operation, processing another message block, and updating the context. */ void MD4Update(MD4_CTX * context, unsigned char *input, unsigned int inputLen) { unsigned int i, index, partLen; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); /* Update number of bits */ if((context->count[0] += ((UINT4) inputLen << 3)) < ((UINT4) inputLen << 3)) context->count[1]++; context->count[1] += ((UINT4) inputLen >> 29); partLen = 64 - index; /* Transform as many times as possible. */ if(inputLen >= partLen) { MD4_memcpy((POINTER) & context->buffer[index], (POINTER) input, partLen); MD4Transform(context->state, context->buffer); for(i = partLen; i + 63 < inputLen; i += 64) MD4Transform(context->state, &input[i]); index = 0; } else i = 0; /* Buffer remaining input */ MD4_memcpy ((POINTER) & context->buffer[index], (POINTER) & input[i], inputLen - i); } /* MD4 finalization. Ends an MD4 message-digest operation, writing the the message digest and zeroizing the context. */ void MD4Final(unsigned char digest[16], MD4_CTX * context) { unsigned char bits[8]; unsigned int index, padLen; /* Save number of bits */ Encode(bits, context->count, 8); /* Pad out to 56 mod 64. */ index = (unsigned int) ((context->count[0] >> 3) & 0x3f); padLen = (index < 56) ? (56 - index) : (120 - index); MD4Update(context, PADDING, padLen); /* Append length (before padding) */ MD4Update(context, bits, 8); /* Store state in digest */ Encode(digest, context->state, 16); /* Zeroize sensitive information. */ MD4_memset((POINTER) context, 0, sizeof(*context)); } /* MD4 basic transformation. Transforms state based on block. */ static void MD4Transform(UINT4 state[4], unsigned char block[64]) { UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; Decode(x, block, 64); /* Round 1 */ FF(a, b, c, d, x[0], S11); /* 1 */ FF(d, a, b, c, x[1], S12); /* 2 */ FF(c, d, a, b, x[2], S13); /* 3 */ FF(b, c, d, a, x[3], S14); /* 4 */ FF(a, b, c, d, x[4], S11); /* 5 */ FF(d, a, b, c, x[5], S12); /* 6 */ FF(c, d, a, b, x[6], S13); /* 7 */ FF(b, c, d, a, x[7], S14); /* 8 */ FF(a, b, c, d, x[8], S11); /* 9 */ FF(d, a, b, c, x[9], S12); /* 10 */ FF(c, d, a, b, x[10], S13); /* 11 */ FF(b, c, d, a, x[11], S14); /* 12 */ FF(a, b, c, d, x[12], S11); /* 13 */ FF(d, a, b, c, x[13], S12); /* 14 */ FF(c, d, a, b, x[14], S13); /* 15 */ FF(b, c, d, a, x[15], S14); /* 16 */ /* Round 2 */ GG(a, b, c, d, x[0], S21); /* 17 */ GG(d, a, b, c, x[4], S22); /* 18 */ GG(c, d, a, b, x[8], S23); /* 19 */ GG(b, c, d, a, x[12], S24); /* 20 */ GG(a, b, c, d, x[1], S21); /* 21 */ GG(d, a, b, c, x[5], S22); /* 22 */ GG(c, d, a, b, x[9], S23); /* 23 */ GG(b, c, d, a, x[13], S24); /* 24 */ GG(a, b, c, d, x[2], S21); /* 25 */ GG(d, a, b, c, x[6], S22); /* 26 */ GG(c, d, a, b, x[10], S23); /* 27 */ GG(b, c, d, a, x[14], S24); /* 28 */ GG(a, b, c, d, x[3], S21); /* 29 */ GG(d, a, b, c, x[7], S22); /* 30 */ GG(c, d, a, b, x[11], S23); /* 31 */ GG(b, c, d, a, x[15], S24); /* 32 */ /* Round 3 */ HH(a, b, c, d, x[0], S31); /* 33 */ HH(d, a, b, c, x[8], S32); /* 34 */ HH(c, d, a, b, x[4], S33); /* 35 */ HH(b, c, d, a, x[12], S34); /* 36 */ HH(a, b, c, d, x[2], S31); /* 37 */ HH(d, a, b, c, x[10], S32); /* 38 */ HH(c, d, a, b, x[6], S33); /* 39 */ HH(b, c, d, a, x[14], S34); /* 40 */ HH(a, b, c, d, x[1], S31); /* 41 */ HH(d, a, b, c, x[9], S32); /* 42 */ HH(c, d, a, b, x[5], S33); /* 43 */ HH(b, c, d, a, x[13], S34); /* 44 */ HH(a, b, c, d, x[3], S31); /* 45 */ HH(d, a, b, c, x[11], S32); /* 46 */ HH(c, d, a, b, x[7], S33); /* 47 */ HH(b, c, d, a, x[15], S34); /* 48 */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; /* Zeroize sensitive information. */ MD4_memset((POINTER) x, 0, sizeof(x)); } /* Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4. */ static void Encode(unsigned char *output, UINT4 * input, unsigned int len) { unsigned int i, j; for(i = 0, j = 0; j < len; i++, j += 4) { output[j] = (unsigned char) (input[i] & 0xff); output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff); output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff); output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff); } } /* Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4. */ static void Decode(UINT4 * output, unsigned char *input, unsigned int len) { unsigned int i, j; for(i = 0, j = 0; j < len; i++, j += 4) output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) | (((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) << 24); } /* Note: Replace "for loop" with standard memcpy if possible. */ static void MD4_memcpy(POINTER output, POINTER input, unsigned int len) { unsigned int i; for(i = 0; i < len; i++) output[i] = input[i]; } /* Note: Replace "for loop" with standard memset if possible. */ static void MD4_memset(POINTER output, int value, unsigned int len) { unsigned int i; for(i = 0; i < len; i++) ((char *) output)[i] = (char) value; } #endif /* ENABLE_NTLM */ pavuk-0.9.35/src/md4c.h0000644000175000001440000000335610142077741011454 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ /* MD4.H - header file for MD4C.C */ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD4 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD4 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* UINT4 defines a four byte word */ typedef unsigned int UINT4; /* MD4 context. */ typedef struct { UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } MD4_CTX; void MD4Init(MD4_CTX *); void MD4Update(MD4_CTX *, unsigned char *, unsigned int); void MD4Final(unsigned char[16], MD4_CTX *); pavuk-0.9.35/src/md5c.c0000644000175000001440000003143710300054562011441 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ /* * This work is derived from material Copyright RSA Data Security, Inc. * * The RSA copyright statement and Licence for that original material is * included below. This is followed by the Apache copyright statement and * licence for the modifications made to that material. */ /* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm */ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* ==================================================================== * Copyright (c) 1996,1997 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. * * 5. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group and was originally based * on public domain software written at the National Center for * Supercomputing Applications, University of Illinois, Urbana-Champaign. * For more information on the Apache Group and the Apache HTTP server * project, please see . * */ #include "config.h" #if !defined(USE_SSL_IMPL_OPENSSL) #include #include "md5c.h" /* Constants for MD5Transform routine. */ #define S11 7 #define S12 12 #define S13 17 #define S14 22 #define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10 #define S43 15 #define S44 21 static void MD5Transform(UINT4 state[4], const unsigned char block[64]); static void Encode(unsigned char *output, const UINT4 * input, unsigned int len); static void Decode(UINT4 * output, const unsigned char *input, unsigned int len); static unsigned char PADDING[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* F, G, H and I are basic MD5 functions. */ #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) /* ROTATE_LEFT rotates x left n bits. */ #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is separate from addition to prevent recomputation. */ #define FF(a, b, c, d, x, s, ac) { \ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define GG(a, b, c, d, x, s, ac) { \ (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define HH(a, b, c, d, x, s, ac) { \ (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define II(a, b, c, d, x, s, ac) { \ (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } /* MD5 initialization. Begins an MD5 operation, writing a new context. */ void _MD5Init(_MD5_CTX * context) { context->count[0] = context->count[1] = 0; /* Load magic initialization constants. */ context->state[0] = 0x67452301; context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; } /* MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context. */ void _MD5Update(_MD5_CTX * context, const unsigned char *input, unsigned int inputLen) { unsigned int i, index, partLen; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); /* Update number of bits */ if((context->count[0] += ((UINT4) inputLen << 3)) < ((UINT4) inputLen << 3)) context->count[1]++; context->count[1] += (UINT4) inputLen >> 29; partLen = 64 - index; /* Transform as many times as possible. */ if(inputLen >= partLen) { memcpy(&context->buffer[index], input, partLen); MD5Transform(context->state, context->buffer); for(i = partLen; i + 63 < inputLen; i += 64) MD5Transform(context->state, &input[i]); index = 0; } else i = 0; /* Buffer remaining input */ memcpy(&context->buffer[index], &input[i], inputLen - i); } /* MD5 finalization. Ends an MD5 message-digest operation, writing the the message digest and zeroizing the context. */ void _MD5Final(unsigned char digest[16], _MD5_CTX * context) { unsigned char bits[8]; unsigned int index, padLen; /* Save number of bits */ Encode(bits, context->count, 8); /* Pad out to 56 mod 64. */ index = (unsigned int) ((context->count[0] >> 3) & 0x3f); padLen = (index < 56) ? (56 - index) : (120 - index); _MD5Update(context, PADDING, padLen); /* Append length (before padding) */ _MD5Update(context, bits, 8); /* Store state in digest */ Encode(digest, context->state, 16); /* Zeroize sensitive information. */ memset(context, 0, sizeof(*context)); } /* MD5 basic transformation. Transforms state based on block. */ static void MD5Transform(UINT4 state[4], const unsigned char block[64]) { UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; Decode(x, block, 64); /* Round 1 */ FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */ FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */ FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */ FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */ FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */ FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */ FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */ FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */ FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */ FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */ FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ /* Round 2 */ GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */ GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */ GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */ GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */ GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */ GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */ GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */ GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */ GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */ GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */ GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */ HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */ HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */ HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */ HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */ HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */ HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */ HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */ HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */ HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */ HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */ /* Round 4 */ II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */ II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */ II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */ II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */ II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */ II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */ II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */ II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */ II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */ II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; /* Zeroize sensitive information. */ memset(x, 0, sizeof(x)); } /* Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4. */ static void Encode(unsigned char *output, const UINT4 * input, unsigned int len) { unsigned int i, j; UINT4 k; for(i = 0, j = 0; j < len; i++, j += 4) { k = input[i]; output[j] = (unsigned char) (k & 0xff); output[j + 1] = (unsigned char) ((k >> 8) & 0xff); output[j + 2] = (unsigned char) ((k >> 16) & 0xff); output[j + 3] = (unsigned char) ((k >> 24) & 0xff); } } /* Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4. */ static void Decode(UINT4 * output, const unsigned char *input, unsigned int len) { unsigned int i, j; for(i = 0, j = 0; j < len; i++, j += 4) output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) | (((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) << 24); } #endif pavuk-0.9.35/src/md5c.h0000644000175000001440000001107110142077741011446 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ /* * This is work is derived from material Copyright RSA Data Security, Inc. * * The RSA copyright statement and Licence for that original material is * included below. This is followed by the Apache copyright statement and * licence for the modifications made to that material. */ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* ==================================================================== * Copyright (c) 1996,1997 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. * * 5. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group and was originally based * on public domain software written at the National Center for * Supercomputing Applications, University of Illinois, Urbana-Champaign. * For more information on the Apache Group and the Apache HTTP server * project, please see . * */ /* UINT4 defines a four byte word */ typedef unsigned int UINT4; /* MD5 context. */ typedef struct { UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } _MD5_CTX; extern void _MD5Init(_MD5_CTX * context); extern void _MD5Update(_MD5_CTX * context, const unsigned char *input, unsigned int inputLen); extern void _MD5Final(unsigned char digest[16], _MD5_CTX * context); pavuk-0.9.35/src/form_encode.c0000644000175000001440000001202410434337633013073 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include "form.h" #include "url.h" #include "tools.h" /* for hexadecimal encoding */ #define HEXASC2HEXNR(x) (((x) >= '0' && (x) <= '9') ? \ ((x) - '0') : (tl_ascii_toupper(x) - 'A' + 10)) #define HEX2CHAR(x) (HEXASC2HEXNR(*(x + 1)) << 4) + HEXASC2HEXNR(*(x + 2)) dllist *form_parse_urlencoded_query(char *str) { char *p, *p2, *p3; char *name, *value; dllist *rv = NULL; p = str; for(p2 = str, p = strchr(str, '&');; p = strchr(p2, '&')) { name = NULL; value = NULL; if(p) *p = '\0'; p3 = strchr(p2, '='); if(p3) { *p3 = '\0'; p3++; value = form_decode_urlencoded_str(p3, strlen(p3)); } name = form_decode_urlencoded_str(p2, strlen(p2)); rv = dllist_append(rv, (dllist_t) form_field_new(name, value)); _free(name); _free(value); if(p) p2 = p + 1; else break; } return rv; } char *form_decode_urlencoded_str(char *str, int len) { char *res, *r; int i; if(str == NULL) return NULL; res = tl_strndup(str, len); for(i = 0, r = res; i < len; r++, i++) { if(str[i] == '+') { *r = ' '; } else if(str[i] == '%' && str[i + 1] && str[i + 2] && tl_ascii_isxdigit(str[i + 1]) && tl_ascii_isxdigit(str[i + 2])) { *r = HEX2CHAR(str + i); i += 2; } else { *r = str[i]; } } *r = '\0'; return res; } char *form_encode_urlencoded_str(char *str) { unsigned char *retv, *r, *p; char hexa[] = "0123456789ABCDEF"; if(!str) return NULL; retv = malloc(3 * strlen(str) + 1); for(p = (unsigned char *) str, r = retv; *p; p++, r++) { if(*p == ' ') { *r = '+'; } else if(strchr(URL_RQUERY_UNSAFE, *p) || (*p > 0x7f) || (*p < 0x20)) { *r = '%'; r++; *r = hexa[*p >> 4]; r++; *r = hexa[*p % 16]; } else { *r = *p; } } *r = '\0'; return (char *) retv; } char *form_encode_urlencoded(dllist *fdata) { char *retv = NULL; dllist *ptr = fdata; form_field *f; char *n, *v; while(ptr) { f = (form_field *) ptr->data; n = form_encode_urlencoded_str(f->name); v = form_encode_urlencoded_str(f->value); if(!retv) retv = tl_str_concat(retv, n, "=", v, NULL); else retv = tl_str_concat(retv, "&", n, "=", v, NULL); _free(n); _free(v); ptr = ptr->next; } return retv; } #define BOUNDARY_LEN 128 static char boundaryset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; char *form_encode_multipart_boundary() { char boundarystr[BOUNDARY_LEN + 1]; int i; memset(boundarystr, '\0', BOUNDARY_LEN + 1); strcpy(boundarystr, PACKAGE); for(i = strlen(boundarystr); i < BOUNDARY_LEN; i++) { boundarystr[i] = boundaryset[rand() % (sizeof(boundaryset) - 1)]; } return tl_strdup(boundarystr); } char *form_encode_multipart(dllist *fdata, char *boundary, int *len) { char *retv = NULL; dllist *ptr = fdata; form_field *f; *len = 0; while(ptr) { f = (form_field *) ptr->data; if(f->type == FORM_T_FILE) { int fd; char buf[512]; int tmplen; char *tp; tp = strrchr(f->value, '/'); if(!tp) tp = f->value; retv = tl_data_concat_str(len, retv, "--", boundary, "\r\nContent-Disposition: form-data; name=\"", f->name, "\"; filename=\"", tp, "\"\r\nContent-Type: application/octet-stream\r\n" "Content-Transfer-Encoding: binary\r\n\r\n", NULL); if((fd = open(f->value, O_BINARY | O_RDONLY)) != -1) { while((tmplen = read(fd, buf, sizeof(buf))) > 0) { retv = tl_data_concat_data(len, retv, tmplen, buf); } close(fd); if(*len < 0) { xperror(f->value); _free(retv); *len = 0; break; } retv = tl_data_concat_str(len, retv, "\r\n", NULL); } else { xperror(f->value); _free(retv); *len = 0; break; } } else { retv = tl_data_concat_str(len, retv, "--", boundary, "\r\nContent-Disposition: form-data; name=\"", f->name, "\"\r\n\r\n", f->value, "\r\n", NULL); } ptr = ptr->next; if(!ptr) retv = tl_data_concat_str(len, retv, "--", boundary, "--\r\n", NULL); } return retv; } char *form_encode_query(form_info *finfo, int *len) { char *retv; *len = 0; if(finfo->encoding == FORM_E_MULTIPART) { retv = form_encode_multipart(finfo->infos, finfo->text, len); } else { retv = form_encode_urlencoded(finfo->infos); *len = strlen(retv); } return retv; } pavuk-0.9.35/src/mime.c0000644000175000001440000000543110300054562011533 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include "doc.h" #include "mime.h" #include "mimetype.h" #include "tools.h" #ifdef HAVE_FNMATCH #include #else #include "fnmatch.h" #endif /*********************************************/ /* oddelenie MIME hlavicky od tela dokumentu */ /* FIXME: Translate me! */ /*********************************************/ void split_mime_doc(doc * docp) { char *p1, *p2; char *doc_c; int mime_size; p1 = strstr(docp->contents, "\n\n"); p2 = strstr(docp->contents, "\r\n\r\n"); if(p2 && ((p2 < p1) || !p1)) { doc_c = p2 + 4; mime_size = p2 - docp->contents; } else if(p1) { doc_c = p1 + 2; mime_size = p1 - docp->contents; } else { doc_c = docp->contents; mime_size = 0; } p1 = docp->contents; docp->size = docp->size - (doc_c - docp->contents); docp->contents = (char *) _malloc(docp->size); memcpy(docp->contents, doc_c, docp->size); docp->mime = NULL; if(mime_size) { docp->mime = (char *) _malloc(mime_size + 3); strncpy(docp->mime, p1, mime_size + 2); *(docp->mime + mime_size + 2) = '\0'; } free(p1); } /************************************************/ /* vrati n-tu hodnotu atributu z MIME hlavicky */ /* FIXME: Translate me! */ /************************************************/ char *get_mime_n_param_val_str(char *param_id, char *mimet, int n) { char *p; int i = 0; int ilen; if(!mimet) return NULL; p = mimet; while(*p) { ilen = strcspn(p, "\r\n"); if(!strncasecmp(p, param_id, strlen(param_id))) { if(i == n) { char *p1; p1 = p + strlen(param_id); while(tl_ascii_isspace(*p1)) p1++; p += ilen; while(*p) { p += strspn(p, "\n\r"); ilen = strcspn(p, "\r\n"); if((*p == ' ' || *p == '\t')) { p += ilen; } else break; } p1 = tl_strndup(p1, p - p1); omit_chars(p1, "\r\n"); return p1; } i++; } p += ilen; p += strspn(p, "\n\r"); } return NULL; } const char *mime_get_type_ext(const char *type) { const struct mime_type_ext *p; if(!type) return NULL; for(p = mime_type_exts; p->mimet; ++p) { if(!fnmatch(p->mimet, type, 0)) { return p->ext; } } return NULL; } pavuk-0.9.35/src/mime.h0000644000175000001440000000127310151322635011543 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _mime_h_ #define _mime_h_ #include "doc.h" extern const char *mime_get_type_ext(const char *); extern void split_mime_doc(doc *); extern char *get_mime_n_param_val_str(char *, char *, int); #define get_mime_param_val_str(param_id , mimet) \ get_mime_n_param_val_str(param_id , mimet , 0) #endif pavuk-0.9.35/src/absio.c0000644000175000001440000001117010142077736011712 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include "absio.h" #include "myssl.h" #include "gui_api.h" int tl_selectr(int sock, int timeout) { fd_set readfds, exceptfds; struct timeval tout, *toutptr = NULL; int rv; FD_ZERO(&readfds); FD_SET(sock, &readfds); FD_ZERO(&exceptfds); FD_SET(sock, &exceptfds); if(timeout) { tout.tv_sec = timeout; tout.tv_usec = 0; toutptr = &tout; } rv = select(sock + 1, &readfds, NULL, &exceptfds, toutptr); return rv; } int tl_selectw(int sock, int timeout) { fd_set writefds, exceptfds; struct timeval tout, *toutptr = NULL; int rv; FD_ZERO(&writefds); FD_SET(sock, &writefds); FD_ZERO(&exceptfds); FD_SET(sock, &exceptfds); if(timeout) { tout.tv_sec = timeout; tout.tv_usec = 0; toutptr = &tout; } rv = select(sock + 1, NULL, &writefds, &exceptfds, toutptr); return rv; } int tl_unix_read(int sock, char *buf, size_t len, void *ssl_con) { int rv = 0; do { #ifdef USE_SSL if(!ssl_con || (ssl_con && (my_ssl_data_pending(ssl_con) == 0))) #endif { #if defined I_FACE && !defined HAVE_MT if(cfg.xi_face && cfg.done) { rv = gui_wait_io(sock, TRUE); } else #endif { while((rv = tl_selectr(sock, (int) (cfg.ctimeout * 60.0))) == -1 && errno == EINTR); if(rv == 0) { errno = ETIMEDOUT; rv = -1; } } if(rv < 0) return -1; } if(cfg.rbreak) { errno = EINTR; rv = -1; cfg.stop = TRUE; break; } #ifdef USE_SSL if(ssl_con) { rv = my_ssl_read(ssl_con, buf, len); } else #endif rv = read(sock, buf, len); } while(rv == -1 && errno == EINTR && !cfg.rbreak); return rv; } int tl_unix_write(int sock, char *buf, size_t len, void *ssl_con) { int rv = 0; do { #if defined I_FACE && !defined HAVE_MT if(cfg.xi_face && cfg.done) { rv = gui_wait_io(sock, FALSE); } else #endif { while((rv = tl_selectw(sock, (int) (cfg.ctimeout * 60.0))) == -1 && errno == EINTR); if(rv == 0) { errno = ETIMEDOUT; rv = -1; } } if(rv < 0) return -1; if(cfg.rbreak) { errno = EINTR; rv = -1; cfg.stop = TRUE; break; } #ifdef USE_SSL if(ssl_con) { rv = my_ssl_write(ssl_con, buf, len); } else #endif rv = write(sock, buf, len); } while(rv == -1 && errno == EINTR && !cfg.rbreak); return rv; } #ifdef __BEOS__ int tl_beos_recv(int sock, char *buf, int len, void *ssl_con) { int rv = 0; do { #ifdef USE_SSL if(!ssl_con || (ssl_con && (my_ssl_data_pending(ssl_con) == 0))) #endif { #if defined I_FACE && !defined HAVE_MT if(cfg.xi_face && cfg.done) { rv = gui_wait_io(sock, TRUE); } else #endif { while((rv = tl_selectr(sock, (int) (cfg.ctimeout * 60.0))) == -1 && errno == EINTR); if(rv == 0) { errno = ETIMEDOUT; rv = -1; } } if(rv < 0) return -1; } if(cfg.rbreak) { errno = EINTR; rv = -1; cfg.stop = TRUE; break; } #ifdef USE_SSL if(ssl_con) { rv = my_ssl_read(ssl_con, buf, len); } else #endif rv = recv(sock, buf, len, 0); } while(rv == -1 && errno == EINTR && !cfg.rbreak); return rv; } int tl_beos_send(int sock, char *buf, int len, void *ssl_con) { int rv = 0; do { #if defined I_FACE && !defined HAVE_MT if(cfg.xi_face && cfg.done) { rv = gui_wait_io(sock, FALSE); } else #endif { while((rv = tl_selectw(sock, (int) (cfg.ctimeout * 60.0))) == -1 && errno == EINTR); if(rv == 0) { errno = ETIMEDOUT; rv = -1; } } if(rv < 0) return -1; if(cfg.rbreak) { errno = EINTR; rv = -1; cfg.stop = TRUE; break; } #ifdef USE_SSL if(ssl_con) { rv = my_ssl_write(ssl_con, buf, len); } else #endif rv = send(sock, buf, len, 0); } while(rv == -1 && errno == EINTR && !cfg.rbreak); return rv; } #endif /* __BEOS__ */ pavuk-0.9.35/src/absio.h0000644000175000001440000000307410142077736011723 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _absio_h_ #define _absio_h_ #ifdef __QNX__ #define tl_sock_read(fd, buf, size, ssld) tl_unix_read(fd, buf, size, ssld) #define tl_sock_write(fd, buf, size, ssld) tl_unix_write(fd, buf, size, ssld) #define tl_file_read(fd, buf, size) read(fd, buf, size) #define tl_file_write(fd, buf, size) write(fd, buf, size) #elif defined __BEOS__ #define tl_sock_read(fd, buf, size, ssld) tl_beos_recv(fd, buf, size, ssld) #define tl_sock_write(fd, buf, size, ssld) tl_beos_send(fd, buf, size, ssld) #define tl_file_read(fd, buf, size) read(fd, buf, size) #define tl_file_write(fd, buf, size) write(fd, buf, size) #else #define tl_sock_read(fd, buf, size, ssld) tl_unix_read(fd, buf, size, ssld) #define tl_sock_write(fd, buf, size, ssld) tl_unix_write(fd, buf, size, ssld) #define tl_file_read(fd, buf, size) tl_unix_read(fd, buf, size, NULL) #define tl_file_write(fd, buf, size) tl_unix_write(fd, buf, size, NULL) #endif extern int tl_unix_read(int, char *, size_t, void *); extern int tl_unix_write(int, char *, size_t, void *); extern int tl_beos_recv(int, char *, int, void *); extern int tl_beos_send(int, char *, int, void *); extern int tl_selectr(int, int); extern int tl_selectw(int, int); #endif pavuk-0.9.35/src/mode.c0000644000175000001440000000205510142077741011537 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "mode.h" #include static const pavuk_modes pavuk_all_modes[] = { {MODE_NORMAL, "normal"}, {MODE_LNUPD, "linkupdate"}, {MODE_SYNC, "sync"}, {MODE_MIRROR, "mirror"}, {MODE_SINGLE, "singlepage"}, {MODE_SREGET, "singlereget"}, {MODE_RESUME, "resumeregets"}, {MODE_NOSTORE, "dontstore"}, {MODE_REMIND, "reminder"}, {MODE_FTPDIR, "ftpdir"}, }; pavuk_mode mode_get_by_str(char *str) { int i; for(i = 0; i < NUM_MODES; i++) { if(!strcasecmp(pavuk_all_modes[i].mode_name, str)) return pavuk_all_modes[i].mode; } return MODE_UNKNOWN; } const char *mode_get_str(pavuk_mode mode) { return pavuk_all_modes[mode].mode_name; } pavuk-0.9.35/src/mode.h0000644000175000001440000000146310142077741011546 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _mode_h_ #define _mode_h_ typedef enum { MODE_NORMAL, MODE_LNUPD, MODE_SYNC, MODE_SINGLE, MODE_SREGET, MODE_RESUME, MODE_NOSTORE, MODE_REMIND, MODE_FTPDIR, MODE_MIRROR, /*MODE_DNLDR , */ NUM_MODES, MODE_UNKNOWN } pavuk_mode; typedef struct { pavuk_mode mode; char *mode_name; } pavuk_modes; extern pavuk_mode mode_get_by_str(char *); extern const char *mode_get_str(pavuk_mode); #endif pavuk-0.9.35/src/mopt.c0000644000175000001440000001343410325714625011577 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include "mopt.h" #include "dlhash.h" #include "tools.h" static unsigned int mopt_long_hash_func(unsigned int size, dllist_t key) { unsigned char *p = (unsigned char *) key; unsigned int retv = 0; while(*p) { retv = (retv + tl_ascii_tolower(*p)) % size; p++; } return retv; } static unsigned int mopt_short_hash_func(unsigned int size, dllist_t key) { unsigned char *p = (unsigned char *) key; unsigned int retv = 0; while(*p) { retv = (retv + *p) % size; p++; } return retv; } static int mopt_long_comp_func(dllist_t key1, dllist_t key2) { return (!strcasecmp((void *) key1, (void *) key2)); } static int mopt_short_comp_func(dllist_t key1, dllist_t key2) { return (!strcmp((void *) key1, (void *) key2)); } static dllist_t mopt_short_key_func(dllist_t data) { return (dllist_t) ((cfg_param_t *) data)->short_cmd; } static dllist_t mopt_long_key_func(dllist_t data) { return (dllist_t) ((cfg_param_t *) data)->long_cmd; } void mopt_init(mopt_t * mopt, int nparams, cfg_param_t * params, int argc, char **argv) { int s_size, l_size; int i; l_size = 42; s_size = 10; memset(mopt, '\0', sizeof(mopt_t)); mopt->argc = argc; mopt->argv = argv; mopt->nparams = nparams; mopt->params = params; mopt->option_type = MOPT_OPT_NONE; mopt->short_hash = dlhash_new(s_size, mopt_short_key_func, mopt_short_hash_func, mopt_short_comp_func); mopt->long_hash = dlhash_new(l_size, mopt_long_key_func, mopt_long_hash_func, mopt_long_comp_func); for(i = 0; i < nparams; i++) { if(params[i].short_cmd) dlhash_insert(mopt->short_hash, (dllist_t) ¶ms[i]); if(params[i].long_cmd) dlhash_insert(mopt->long_hash, (dllist_t) ¶ms[i]); } mopt->short_offset = 0; mopt->current = 0; } void mopt_destroy(mopt_t * mopt) { dlhash_free(mopt->short_hash); dlhash_free(mopt->long_hash); memset(mopt, '\0', sizeof(mopt_t)); } /* on success - 0 on end - 1 on no option param - 2 on bad number of params - -1 on unknown param - -2 on wrong formated param - -3 */ int mopt_get_next_param(mopt_t * mopt, cfg_param_t ** pparam) { cfg_param_t *param = NULL; char *cpar; int i, np; if(!mopt->current) { if(mopt->argc == 1) return MOPT_END; else mopt->current = 1; } if(mopt->argc <= mopt->current) return MOPT_END; cpar = mopt->argv[mopt->current]; if(mopt->short_offset) { mopt->option_type = MOPT_OPT_SHORT; cpar += mopt->short_offset; if(mopt->short_offset == 1) { param = (cfg_param_t *) dlhash_find_by_key(mopt->short_hash, (dllist_t) cpar); } if(param) { mopt->short_offset = 0; mopt->current++; cpar = NULL; } else { char pom[2]; pom[0] = *cpar; pom[1] = '\0'; param = (cfg_param_t *) dlhash_find_by_key(mopt->short_hash, (dllist_t) pom); if(param) { mopt->short_offset++; cpar++; if(!*cpar) { cpar = NULL; mopt->short_offset = 0; mopt->current++; } } } if(!param) { if(mopt->short_offset == 1) return MOPT_UNKNOWN; else return MOPT_BAD; } np = cfg_get_num_params(param); *pparam = param; if(np + mopt->current > mopt->argc) return MOPT_MISSINGP; if(np) { if(cpar) { mopt->args[0] = cpar; mopt->short_offset = 0; mopt->current++; } for(i = (cpar ? 1 : 0); i < np; i++) mopt->args[i] = mopt->argv[mopt->current + i]; mopt->current += np - (cpar ? 1 : 0); } return MOPT_OK; } else { param = (cfg_param_t *) dlhash_find_by_key(mopt->long_hash, (dllist_t) (cpar + ((cpar[0] == '-' && cpar[1] == '-') ? 1 : 0))); if(param) { mopt->option_type = MOPT_OPT_LONG; np = cfg_get_num_params(param); mopt->current++; *pparam = param; if(np + mopt->current > mopt->argc) return MOPT_MISSINGP; for(i = 0; i < np; i++) mopt->args[i] = mopt->argv[mopt->current + i]; mopt->current += np; return MOPT_OK; } else if(cpar[0] == '-' && cpar[1] == '-' && strchr(cpar, '=')) { char *tpar; char *p; mopt->option_type = MOPT_OPT_LONG; p = strchr(cpar, '='); tpar = tl_strndup(cpar, p - cpar); param = (cfg_param_t *) dlhash_find_by_key(mopt->long_hash, (dllist_t) (tpar + 1)); _free(tpar); if(param) { cpar = p + 1; np = cfg_get_num_params(param); *pparam = param; if(np + mopt->current - 1 > mopt->argc) return MOPT_MISSINGP; if(!np) return MOPT_BAD; else { mopt->args[0] = cpar; mopt->short_offset = 0; mopt->current++; for(i = 1; i < np; i++) mopt->args[i] = mopt->argv[mopt->current + i]; mopt->current += np - 1; } return MOPT_OK; } } if(!param) { if(cpar[0] == '-' && cpar[1] == '-') { return MOPT_UNKNOWN; } if(*cpar == '-') { mopt->short_offset = 1; return mopt_get_next_param(mopt, pparam); } else { mopt->args[0] = cpar; mopt->current++; return MOPT_PARAM; } } } return MOPT_ERR; } pavuk-0.9.35/src/mopt.h0000644000175000001440000000261010142077741011574 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _mopt_h_ #define _mopt_h_ #include "dlhash.h" #include "config.h" typedef struct { int argc; char **argv; int nparams; cfg_param_t *params; dlhash *short_hash; dlhash *long_hash; int current; int short_offset; int option_type; char *args[4]; } mopt_t; #define MOPT_OK 0 /* on success */ #define MOPT_END 1 /* on end */ #define MOPT_PARAM 2 /* on no option param */ #define MOPT_MISSINGP -1 /* on bad number of params */ #define MOPT_UNKNOWN -2 /* on unknown param */ #define MOPT_BAD -3 /* on wrong formated param */ #define MOPT_ERR -4 /* on parser error */ #define MOPT_OPT_NONE 0 #define MOPT_OPT_SHORT 1 #define MOPT_OPT_LONG 2 #define MOPT_OPT_COMPAT 3 extern void mopt_init(mopt_t *, int, cfg_param_t *, int, char **); extern void mopt_destroy(mopt_t *); extern int mopt_get_next_param(mopt_t *, cfg_param_t **); #endif pavuk-0.9.35/src/ntlm_auth.c0000644000175000001440000005212210330157355012605 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" /****************************************************************/ /* based on the document "NTLM Athentication Scheme for HTTP" */ /* http://www.innovation.ch/java/ntlm.html */ /* by Ronald Tschaler */ /****************************************************************/ /* and http://www.opengroup.org/comsource/techref2/NCH1222X.HTM */ /****************************************************************/ #ifdef ENABLE_NTLM #include #include "base64.h" #include "tools.h" #include "mime.h" #include "doc.h" #include "http.h" #include "tools.h" #include "abstract.h" #include "authinfo.h" #include "errcode.h" #include "ntlm_auth.h" #ifdef HAVE_MCRYPT #include #elif defined(HAVE_GCRYPT) #include #else #ifdef OPENSSL #include #else #include #endif #endif #ifdef HAVE_OPENSSL_MD4 #include #define _MD4Init MD4_Init #define _MD4Update MD4_Update #define _MD4Final MD4_Final #else #include "md4c.h" #define _MD4Init MD4Init #define _MD4Update MD4Update #define _MD4Final MD4Final #endif #ifdef WORDS_BIGENDIAN static unsigned short ntlm_do_litle_endian_short(short v) { short sh; ((char *) &sh)[0] = v && 0xFF; ((char *) &sh)[1] = v >> 8; return sh; } static unsigned short ntlm_get_litle_endian_short(short v) { short sh; sh = ((char *) &v)[0] + (((char *) &v)[1] << 8); return sh; } #else #define ntlm_do_litle_endian_short(v) ((unsigned short)(v)) #define ntlm_get_litle_endian_short(v) ((unsigned short)(v)) #endif #define _LB(nr) ((nr) & 0xff) #define _HB(nr) (((nr) & 0xff00) >> 8) char *ntlm_get_t1msg_str(char *domain, char *host) { int msgtk_size; int dlen, hlen; #ifndef NTLM_UNPACKED_STRUCT ntlm_type_1_msg_t msg; #else unsigned char msg[NTLM_MSG1_SIZE]; #endif dlen = strlen(domain); hlen = strlen(host); memset(&msg, '\0', sizeof(msg)); #ifndef NTLM_UNPACKED_STRUCT strcpy(msg.protocol, "NTLMSSP"); msg.type = 0x01; msg.flags = ntlm_do_litle_endian_short(0xb203); msg.dom_len2 = msg.dom_len = ntlm_do_litle_endian_short(dlen); msg.host_len2 = msg.host_len = ntlm_do_litle_endian_short(hlen); msg.host_off = ntlm_do_litle_endian_short(32); msg.dom_off = ntlm_do_litle_endian_short(32 + hlen); #else strcpy(msg, "NTLMSSP"); msg[8] = 0x01; msg[12] = 0x03; msg[13] = 0xb2; msg[16] = msg[18] = _LB(dlen); msg[17] = msg[19] = _HB(dlen); msg[20] = _LB(32 + hlen); msg[21] = _HB(32 + hlen); msg[24] = msg[26] = _LB(hlen); msg[25] = msg[27] = _HB(hlen); msg[28] = 32; msg[29] = 0x0; #endif strcpy(((char *) &msg) + 32, host); upperstr(((char *) &msg) + 32); strcpy(((char *) &msg) + 32 + hlen, domain); upperstr(((char *) &msg) + 32 + hlen); msgtk_size = 32 + hlen + dlen; return base64_encode_data((char *) &msg, msgtk_size); } char *ntlm_get_nonce(char *t2msg, unsigned short *t2flags) { char *rv; int st; #ifndef NTLM_UNPACKED_STRUCT ntlm_type_2_msg_t *msg; #else char *msg; #endif msg = NULL; st = base64_decode_data(t2msg, (char **) &msg); #ifndef NTLM_UNPACKED_STRUCT if(st < 0 || st < sizeof(ntlm_type_2_msg_t) || strcmp(msg->protocol, "NTLMSSP") || msg->type != 0x02) { rv = NULL; } else { rv = _malloc(9); memcpy(rv, msg->nonce, 8); rv[8] = '\0'; *t2flags = ntlm_do_litle_endian_short(msg->flags); } #else if(st < 0 || st < NTLM_MSG2_SIZE || strcmp(msg, "NTLMSSP") || msg[8] != 0x02) { rv = NULL; } else { rv = _malloc(9); memcpy(rv, msg + 24, 8); rv[8] = '\0'; *t2flags = ntlm_do_litle_endian_short(*((unsigned short *) (((char *) msg) + 20))); } #endif _free(msg); return rv; } static void ntlm_copy_str_to_wcstr(char *wcstr, char *str) { while(*str) { wcstr[0] = *str; wcstr[1] = '\0'; wcstr += 2; str++; } } static void ntlm_copy_str_to_uwcstr(char *wcstr, char *str) { while(*str) { wcstr[0] = tl_ascii_toupper(*str); wcstr[1] = '\0'; wcstr += 2; str++; } } /* turns a 56 bit key into the 64 bit */ static void ntlm_setup_des_key(unsigned char *key_56, unsigned char *key_64) { key_64[0] = key_56[0]; key_64[1] = ((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1); key_64[2] = ((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2); key_64[3] = ((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3); key_64[4] = ((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4); key_64[5] = ((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5); key_64[6] = ((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6); key_64[7] = (key_56[6] << 1) & 0xFF; } #ifdef HAVE_MCRYPT static void ntlm_des_enc(unsigned char *key, unsigned char *plaintext, unsigned char *result) { MCRYPT ctx; unsigned char res[8]; unsigned char key64[8]; ntlm_setup_des_key(key, key64); memcpy(res, plaintext, 8); ctx = mcrypt_module_open(MCRYPT_DES, NULL, MCRYPT_ECB, NULL); mcrypt_generic_init(ctx, key64, 8, NULL); mcrypt_generic(ctx, res, 8); memcpy(result, res, 8); mcrypt_generic_end(ctx); mcrypt_module_close(ctx); } #elif defined(HAVE_GCRYPT) static void ntlm_des_enc(unsigned char *key, unsigned char *plaintext, unsigned char *result) { gcry_cipher_hd_t ctx; unsigned char key64[8]; ntlm_setup_des_key(key, key64); gcry_cipher_open(&ctx, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0); gcry_cipher_setkey(ctx, key64, 8); gcry_cipher_encrypt(ctx, result, 8, plaintext, 8); gcry_cipher_close(ctx); } #else static void ntlm_des_enc(unsigned char *key, unsigned char *plaintext, unsigned char *result) { des_key_schedule ks; #ifdef OPENSSL const_des_cblock _plaintext; #else const des_cblock _plaintext; #endif des_cblock _result; des_cblock key64; unsigned char skey[8]; memcpy(&_plaintext, plaintext, sizeof(_plaintext)); ntlm_setup_des_key(key, skey); memcpy(key64, skey, 8); #ifdef OPENSSL des_set_odd_parity(&key64); des_set_key(&key64, ks); des_ecb_encrypt(&_plaintext, &_result, ks, DES_ENCRYPT); #else des_set_odd_parity(key64); des_set_key(key64, ks); des_ecb_encrypt(_plaintext, _result, ks, DES_ENCRYPT); #endif memcpy(result, &_result, sizeof(_result)); } #endif /* * takes a 21 byte array and treats it as 3 56-bit DES keys. The * 8 byte plaintext is encrypted with each key and the resulting 24 * bytes are stored in the results array. */ static void ntlm_calc_resp(unsigned char *keys, unsigned char *plaintext, unsigned char *results) { ntlm_des_enc(keys, plaintext, results); ntlm_des_enc(keys + 7, plaintext, results + 8); ntlm_des_enc(keys + 14, plaintext, results + 16); } static void ntlm_gen_lm_resp(char *pass, char *nonce, char *buf) { unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 }; unsigned char lm_hpw[21]; unsigned char lm_pw[14]; memset(lm_pw, '\0', sizeof(lm_pw)); strncpy(lm_pw, pass, 14); lm_pw[13] = '\0'; upperstr(lm_pw); ntlm_des_enc(lm_pw, magic, lm_hpw); ntlm_des_enc(lm_pw + 7, magic, lm_hpw + 8); memset(lm_hpw + 16, '\0', 5); ntlm_calc_resp(lm_hpw, nonce, buf); } static void ntlm_gen_nt_resp(char *pass, char *nonce, char *buf) { MD4_CTX md4ctx; char *nt_pw; unsigned char nt_hpw[21]; int len = strlen(pass); nt_pw = _malloc(2 * len); ntlm_copy_str_to_wcstr(nt_pw, pass); _MD4Init(&md4ctx); _MD4Update(&md4ctx, nt_pw, 2 * len); _MD4Final(nt_hpw, &md4ctx); memset(nt_hpw + 16, '\0', 5); ntlm_calc_resp(nt_hpw, nonce, buf); _free(nt_pw); } static char *ntlm_get_t3msg_wcstr(char *domain, char *host, char *user, char *pass, char *nonce) { int dlen, hlen, ulen, lm_len, nt_len; int dofs, hofs, uofs, lm_ofs, nt_ofs; int msgtk_size; #ifndef NTLM_UNPACKED_STRUCT ntlm_type_3_msg_t msg; #else char msg[NTLM_MSG3_SIZE]; #endif dlen = strlen(domain); hlen = strlen(host); ulen = strlen(user); lm_len = 0x18; nt_len = 0x18; dofs = 64; uofs = dofs + 2 * dlen; hofs = uofs + 2 * ulen; lm_ofs = hofs + 2 * hlen; nt_ofs = lm_ofs + lm_len; msgtk_size = 64 + 2 * dlen + 2 * ulen + 2 * hlen + lm_len + nt_len; memset(&msg, '\0', sizeof(msg)); #ifndef NTLM_UNPACKED_STRUCT strcpy(msg.protocol, "NTLMSSP"); msg.type = 0x03; msg.flags = 0x8201; msg.dom_len = msg.dom_len2 = ntlm_do_litle_endian_short(2 * dlen); msg.dom_off = ntlm_do_litle_endian_short(dofs); msg.user_len = msg.user_len2 = ntlm_do_litle_endian_short(2 * ulen); msg.user_off = ntlm_do_litle_endian_short(uofs); msg.host_len = msg.host_len2 = ntlm_do_litle_endian_short(2 * hlen); msg.host_off = ntlm_do_litle_endian_short(hofs); msg.lm_resp_len = msg.lm_resp_len2 = ntlm_do_litle_endian_short(lm_len); msg.lm_resp_off = ntlm_do_litle_endian_short(lm_ofs); msg.nt_resp_len = msg.nt_resp_len2 = ntlm_do_litle_endian_short(nt_len); msg.nt_resp_off = ntlm_do_litle_endian_short(nt_ofs); msg.msg_len = ntlm_do_litle_endian_short(msgtk_size); #else strcpy(msg, "NTLMSSP"); msg[8] = 0x3; msg[12] = msg[14] = _LB(lm_len); msg[13] = msg[15] = _HB(lm_len); msg[16] = _LB(lm_ofs); msg[17] = _HB(lm_ofs); msg[20] = msg[22] = _LB(nt_len); msg[21] = msg[23] = _HB(nt_len); msg[24] = _LB(nt_ofs); msg[25] = _HB(nt_ofs); msg[28] = msg[30] = _LB(2 * dlen); msg[29] = msg[31] = _HB(2 * dlen); msg[32] = _LB(dofs); msg[33] = _HB(dofs); msg[36] = msg[38] = _LB(2 * ulen); msg[37] = msg[39] = _HB(2 * ulen); msg[40] = _LB(uofs); msg[41] = _HB(uofs); msg[44] = msg[46] = _LB(2 * hlen); msg[45] = msg[47] = _HB(2 * hlen); msg[48] = _LB(hofs); msg[49] = _HB(hofs); msg[56] = _LB(msgtk_size); msg[57] = _HB(msgtk_size); msg[60] = 0x1; msg[61] = 0x82; #endif ntlm_copy_str_to_uwcstr(((char *) &msg) + dofs, domain); ntlm_copy_str_to_wcstr(((char *) &msg) + uofs, user); ntlm_copy_str_to_uwcstr(((char *) &msg) + hofs, host); ntlm_gen_lm_resp(pass, nonce, ((char *) &msg) + lm_ofs); ntlm_gen_nt_resp(pass, nonce, ((char *) &msg) + nt_ofs); return base64_encode_data((char *) &msg, msgtk_size); } static char *ntlm_get_t3msg_asciistr(char *domain, char *host, char *user, char *pass, char *nonce) { int dlen, hlen, ulen, lm_len, nt_len; int dofs, hofs, uofs, lm_ofs, nt_ofs; int msgtk_size; #ifndef NTLM_UNPACKED_STRUCT ntlm_type_3_msg_t msg; #else char msg[NTLM_MSG3_SIZE]; #endif dlen = strlen(domain); hlen = strlen(host); ulen = strlen(user); lm_len = 0x18; nt_len = 0x18; dofs = 64; uofs = dofs + dlen; hofs = uofs + ulen; lm_ofs = hofs + hlen; nt_ofs = lm_ofs + lm_len; msgtk_size = 64 + dlen + ulen + hlen + lm_len + nt_len; memset(&msg, '\0', sizeof(msg)); #ifndef NTLM_UNPACKED_STRUCT strcpy(msg.protocol, "NTLMSSP"); msg.type = 0x03; msg.flags = 0x8201; msg.dom_len = msg.dom_len2 = ntlm_do_litle_endian_short(dlen); msg.dom_off = ntlm_do_litle_endian_short(dofs); msg.user_len = msg.user_len2 = ntlm_do_litle_endian_short(ulen); msg.user_off = ntlm_do_litle_endian_short(uofs); msg.host_len = msg.host_len2 = ntlm_do_litle_endian_short(hlen); msg.host_off = ntlm_do_litle_endian_short(hofs); msg.lm_resp_len = msg.lm_resp_len2 = ntlm_do_litle_endian_short(lm_len); msg.lm_resp_off = ntlm_do_litle_endian_short(lm_ofs); msg.nt_resp_len = msg.nt_resp_len2 = ntlm_do_litle_endian_short(nt_len); msg.nt_resp_off = ntlm_do_litle_endian_short(nt_ofs); msg.msg_len = ntlm_do_litle_endian_short(msgtk_size); #else strcpy(msg, "NTLMSSP"); msg[8] = 0x3; msg[12] = msg[14] = _LB(lm_len); msg[13] = msg[15] = _HB(lm_len); msg[16] = _LB(lm_ofs); msg[17] = _HB(lm_ofs); msg[20] = msg[22] = _LB(nt_len); msg[21] = msg[23] = _HB(nt_len); msg[24] = _LB(nt_ofs); msg[25] = _HB(nt_ofs); msg[28] = msg[30] = _LB(dlen); msg[29] = msg[31] = _HB(dlen); msg[32] = _LB(dofs); msg[33] = _HB(dofs); msg[36] = msg[38] = _LB(ulen); msg[37] = msg[39] = _HB(ulen); msg[40] = _LB(uofs); msg[41] = _HB(uofs); msg[44] = msg[46] = _LB(hlen); msg[45] = msg[47] = _HB(hlen); msg[48] = _LB(hofs); msg[49] = _HB(hofs); msg[56] = _LB(msgtk_size); msg[57] = _HB(msgtk_size); msg[60] = 0x1; msg[61] = 0x82; #endif strcpy(((char *) &msg) + dofs, domain); upperstr(((char *) &msg) + dofs); strcpy(((char *) &msg) + uofs, user); strcpy(((char *) &msg) + hofs, host); upperstr(((char *) &msg) + hofs); ntlm_gen_lm_resp(pass, nonce, ((char *) &msg) + lm_ofs); ntlm_gen_nt_resp(pass, nonce, ((char *) &msg) + nt_ofs); return base64_encode_data((char *) &msg, msgtk_size); } char *ntlm_get_t3msg_str(char *domain, char *host, char *user, char *pass, char *nonce, unsigned short t2flags) { return (t2flags & 0x01) ? ntlm_get_t3msg_wcstr(domain, host, user, pass, nonce) : ntlm_get_t3msg_asciistr(domain, host, user, pass, nonce); } /* * -1 - failure before sending auth data - http_process_response() can * continue safely * 0 - OK - http_process_response() must return immediately * 1 - failure after sending auth data - http_process_response() must * return immediately */ int ntlm_negotiate_connection(doc * docp, char *authtag) { char *ntlm_msg, *nonce; unsigned short t2_flags; http_response *resp; char *user, *pass, *domain, *host; authinfo *ai; char shost[128]; int l; if(docp->num_auth) return -1; docp->num_auth++; xprintf(1, gettext("Trying to do NTLM authorization\n")); /*** it seems we should allow the first response ***/ /*** to be sent via non persistent connection ***/ #if 0 /*** supported only when persistant connections are ***/ /*** supported by server and we are talking HTTP/1.1 ***/ if(!docp->is_persistent) { xprintf(1, gettext ("NTLM authorization supported only on persistent connections!\n")); docp->errcode = ERR_HTTP_AUTH_NTLM; return -1; } #endif /*** get authorization infos (all mandatory) ***/ ai = authinfo_match_entry(docp->doc_url->type, url_get_site(docp->doc_url), url_get_port(docp->doc_url), url_get_path(docp->doc_url), NULL); domain = (ai && ai->ntlm_domain) ? ai->ntlm_domain : priv_cfg.auth_ntlm_domain; l = strcspn(cfg.local_host, "."); if (l > 127) { l = 127; } strncpy(shost, cfg.local_host, l); shost[l] = '\0'; host = shost; user = url_get_user(docp->doc_url, NULL); pass = url_get_pass(docp->doc_url, NULL); if(!domain || !user || !pass || !host) { xprintf(1, gettext("Not enough data for NTLM authorization!\n")); xprintf(1, gettext("Missing:\n")); if(!domain) xprintf(1, gettext(" domain\n")); if(!user) xprintf(1, gettext(" username\n")); if(!pass) xprintf(1, gettext(" password\n")); if(!host) xprintf(1, gettext(" local hostname\n")); return -1; } /*** read body of 401 response ***/ if(http_throw_message_body(docp)) { docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); return 1; } abs_close_socket(docp, FALSE); /*** prepare and send NTLM msg type 1 to ***/ /*** start NTLM negotiation with server ***/ ntlm_msg = ntlm_get_t1msg_str(domain, host); docp->additional_headers = tl_str_concat(NULL, "Authorization: NTLM ", ntlm_msg, "\r\n", NULL); _free(ntlm_msg); _free(docp->mime); _free(docp->type_str); l = http_repeat_request(docp); _free(docp->additional_headers); if(l) return -1; /*** now we expect 401 server response with ***/ /*** NTLM msg type 2 which contains nonce ***/ resp = http_get_response_info(docp->mime); if(!resp) { xprintf(1, gettext("Got unexpected response\n")); if(!docp->errcode) docp->errcode = ERR_HTTP_AUTH_NTLM; return -1; } if(resp->ret_code != 401) { xprintf(1, gettext("Got unexpected response\n")); docp->errcode = ERR_HTTP_AUTH_NTLM; http_response_free(resp); return -1; } http_response_free(resp); if(!docp->is_persistent) { xprintf(1, gettext ("NTLM authorization supported only on persistent connections!\n")); docp->errcode = ERR_HTTP_AUTH_NTLM; return -1; } if(http_throw_message_body(docp)) { docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); return 1; } authtag = get_mime_param_val_str("WWW-Authenticate: NTLM ", docp->mime); if(!authtag) { xprintf(1, gettext("Got unexpected response\n")); docp->errcode = ERR_HTTP_AUTH_NTLM; return -1; } nonce = ntlm_get_nonce(authtag, &t2_flags); _free(authtag); if(!nonce) { xprintf(1, gettext("Failed NTLM nonce negotiation\n")); docp->errcode = ERR_HTTP_AUTH_NTLM; return -1; } /*** final step of NTLM authorization - prepare ***/ /*** and send NTLM msg type 3 with all auth. infos ***/ ntlm_msg = ntlm_get_t3msg_str(domain, host, user, pass, nonce, t2_flags); docp->additional_headers = tl_str_concat(NULL, "Authorization: NTLM ", ntlm_msg, "\r\n", NULL); _free(ntlm_msg); _free(nonce); _free(docp->mime); _free(docp->type_str); l = http_repeat_request(docp); _free(docp->additional_headers); if(l) return -1; return 0; } int ntlm_negotiate_proxy_connection(doc * docp, char *authtag) { char *ntlm_msg, *nonce; unsigned short t2_flags; http_response *resp; char *user, *pass, *domain, *host; authinfo *ai; char shost[128]; int l; if(docp->num_proxy_auth) return -1; if(!docp->http_proxy) return -1; xprintf(1, gettext("Trying to do proxy NTLM authorization\n")); docp->num_proxy_auth++; docp->errcode = ERR_HTTP_PROAUTH_NTLM; /*** it seems we should allow the first response ***/ /*** to be sent via non persistent connection ***/ #if 0 /*** supported only when persistant connections are ***/ /*** supported by server and we are talking HTTP/1.1 ***/ if(!docp->is_persistent) { xprintf(1, gettext ("NTLM authorization supported only on persistent connections!\n")); return -1; } #endif /*** get authorization infos (all mandatory) ***/ ai = authinfo_match_entry(docp->doc_url->type, docp->http_proxy, docp->http_proxy_port, NULL, NULL); domain = (ai && ai->ntlm_domain) ? ai->ntlm_domain : priv_cfg.auth_proxy_ntlm_domain; l = strcspn(cfg.local_host, "."); if (l > 127) { l = 127; } strncpy(shost, cfg.local_host, l); shost[l] = '\0'; host = shost; user = priv_cfg.http_proxy_user; pass = priv_cfg.http_proxy_pass; if(!domain || !user || !pass || !host) { xprintf(1, gettext("Not enough data for NTLM authorization!\n")); xprintf(1, gettext("Missing:\n")); if(!domain) xprintf(1, gettext(" domain\n")); if(!user) xprintf(1, gettext(" username\n")); if(!pass) xprintf(1, gettext(" password\n")); if(!host) xprintf(1, gettext(" local hostname\n")); return -1; } /*** read body of 407 response ***/ if(http_throw_message_body(docp)) { docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); return 1; } abs_close_socket(docp, FALSE); /*** prepare and send NTLM msg type 1 to ***/ /*** start NTLM negotiation with server ***/ ntlm_msg = ntlm_get_t1msg_str(domain, host); docp->additional_headers = tl_str_concat(NULL, "Proxy-Authorization: NTLM ", ntlm_msg, "\r\n", NULL); _free(ntlm_msg); _free(docp->mime); _free(docp->type_str); l = http_repeat_request(docp); _free(docp->additional_headers); if(l) return -1; /*** now we expect 407 server response with ***/ /*** NTLM msg type 2 which contains nonce ***/ resp = http_get_response_info(docp->mime); if(!resp) { xprintf(1, gettext("Got unexpected response\n")); if(!docp->errcode) docp->errcode = ERR_HTTP_PROAUTH_NTLM; return -1; } if(resp->ret_code != 407) { xprintf(1, gettext("Got unexpected response\n")); docp->errcode = ERR_HTTP_PROAUTH_NTLM; http_response_free(resp); return -1; } http_response_free(resp); if(!docp->is_persistent) { xprintf(1, gettext ("NTLM authorization supported only on persistent connections!\n")); docp->errcode = ERR_HTTP_PROAUTH_NTLM; return -1; } if(http_throw_message_body(docp)) { docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); return 1; } authtag = get_mime_param_val_str("Proxy-Authenticate: NTLM ", docp->mime); if(!authtag) { xprintf(1, gettext("Got unexpected response\n")); docp->errcode = ERR_HTTP_PROAUTH_NTLM; return -1; } nonce = ntlm_get_nonce(authtag, &t2_flags); _free(authtag); if(!nonce) { xprintf(1, gettext("Failed NTLM proxy nonce negotiation\n")); docp->errcode = ERR_HTTP_PROAUTH_NTLM; return -1; } /*** final step of NTLM authorization - prepare ***/ /*** and send NTLM msg type 3 with all auth. infos ***/ ntlm_msg = ntlm_get_t3msg_str(domain, host, user, pass, nonce, t2_flags); docp->additional_headers = tl_str_concat(NULL, "Proxy-Authorization: NTLM ", ntlm_msg, "\r\n", NULL); _free(ntlm_msg); _free(nonce); _free(docp->mime); _free(docp->type_str); l = http_repeat_request(docp); if(l) return -1; return 0; } #endif /* ENABLE_NTLM */ pavuk-0.9.35/src/ntlm_auth.h0000644000175000001440000001335010142077741012613 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _ntlm_auth_h_ #define _ntlm_auth_h_ /****************************************************************/ /* based on document "NTLM Athentication Scheme for HTTP" */ /* http://www.innovation.ch/java/ntlm.html */ /* by Ronald Tschaler */ /****************************************************************/ typedef unsigned char byte_t; #ifdef __GNUC__ #define _PACKED __attribute__((packed)) #else #define _PACKED #endif #define NTLM_MSG1_SIZE 32+128 #define NTLM_MSG2_SIZE 40 #define NTLM_MSG3_SIZE 64+512 typedef struct { byte_t protocol[8]; /* "NTLMSSP\0" */ byte_t type; /* 0x01 */ byte_t zero[3]; /* \0\0\0 */ unsigned short flags; /* 0xb203 */ byte_t zero2[2]; /* \0\0 */ short dom_len; /* length of domainname */ short dom_len2; /* length of domainname */ short dom_off; /* offset of domainname in structure */ byte_t zero3[2]; /* \0\0 */ short host_len; /* length of hostname */ short host_len2; /* length of hostname */ short host_off; /* offset of hostname in structure */ byte_t zero4[2]; /* \0\0 */ byte_t padding[128]; /* space for hostname and domainname */ #if 0 byte_t host[*]; /* hostname */ byte_t dom[*]; /* domainname */ #endif } _PACKED ntlm_type_1_msg_t; typedef struct { byte_t protocol[8]; /* "NTLMSSP\0" */ byte_t type; /* 0x02 */ byte_t zero[7]; /* \0\0\0\0\0\0\0 */ short msg_len; /* 0x28 */ byte_t zero2[2]; /* \0\0 */ unsigned short flags; /* 0x8201 */ byte_t zero3[2]; /* \0\0 */ byte_t nonce[8]; /* server nonce */ byte_t zero4[8]; /* \0\0\0\0\0\0\0\0 */ } _PACKED ntlm_type_2_msg_t; typedef struct { byte_t protocol[8]; /* "NTLMSSP\0" */ byte_t type; /* 0x03 */ byte_t zero[3]; /* \0\0\0 */ short lm_resp_len; /* LM response length (0x18) */ short lm_resp_len2; /* LM response length (0x18) */ short lm_resp_off; /* offset of LM response in structure */ byte_t zero2[2]; /* \0\0 */ short nt_resp_len; /* NT response length (0x18) */ short nt_resp_len2; /* NT response length (0x18) */ short nt_resp_off; /* offset of NT response in structure */ byte_t zero3[2]; /* \0\0 */ short dom_len; /* length of domainname */ short dom_len2; /* length of domainname */ short dom_off; /* offset of domainname in structure */ byte_t zero4[2]; /* \0\0 */ short user_len; /* length of username */ short user_len2; /* length of username */ short user_off; /* offset of username in structure */ byte_t zero5[2]; /* \0\0 */ short host_len; /* length of hostname */ short host_len2; /* length of hostname */ short host_off; /* offset of hostname in structure */ byte_t zero6[6]; /* \0\0\0\0\0\0 */ short msg_len; /* message length */ byte_t zero7[2]; /* \0\0 */ unsigned short flags; /* 0x8201 */ byte_t zero8[2]; /* \0\0 */ byte_t padding[512]; /* space for hostname and domainname */ #if 0 byte_t host[*]; /* hostname */ byte_t user[*]; /* username */ byte_t dom[*]; /* domainname */ byte_t lm_resp[*]; /* LM response */ byte_t nt_resp[*]; /* NT response */ #endif } _PACKED ntlm_type_3_msg_t; extern char *ntlm_get_t1msg_str(char *, char *); extern char *ntlm_get_nonce(char *, unsigned short *); extern char *ntlm_get_t3msg_str(char *, char *, char *, char *, char *, unsigned short); #ifndef ____ACCONFIG_TEST___ extern int ntlm_negotiate_connection(doc *, char *); extern int ntlm_negotiate_proxy_connection(doc *, char *); #endif #endif pavuk-0.9.35/src/dllist.c0000644000175000001440000001203010325725341012077 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include "config.h" #include "dllist.h" dllist *dllist_new_entry(dllist_t data) { dllist *retv = (dllist *) malloc(sizeof(dllist)); if(retv) { retv->data = data; retv->next = NULL; retv->prev = NULL; } return retv; } dllist *dllist_append(dllist * list, dllist_t data) { dllist *nentry = dllist_new_entry(data); if(list) { dllist *last = dllist_last(list); last->next = nentry; nentry->prev = last; return list; } else return nentry; } dllist *dllist_prepend(dllist * list, dllist_t data) { dllist *nentry = dllist_new_entry(data); if(list) { dllist *first = dllist_first(list); first->prev = nentry; nentry->next = first; } return nentry; } dllist *dllist_insert(dllist * list, int position, dllist_t data) { if(!list) return dllist_new_entry(data); if(position <= 0) return dllist_prepend(list, data); else { dllist *nth = dllist_nth(list, position); if(!nth) return dllist_append(list, data); else { dllist *prev_nth; dllist *nentry = dllist_new_entry(data); prev_nth = nth->prev; nentry->next = nth; nth->prev = nentry; if(prev_nth) { prev_nth->next = nentry; nentry->prev = prev_nth; return list; } else return nentry; } } } dllist *dllist_insert_after(dllist * list, dllist * node, dllist_t data) { if(!list) return dllist_new_entry(data); if(!node) return dllist_append(list, data); else { dllist *next_node; dllist *nentry = dllist_new_entry(data); next_node = node->next; nentry->prev = node; nentry->next = next_node; if(next_node) next_node->prev = nentry; return list; } } dllist *dllist_insert_before(dllist * list, dllist * node, dllist_t data) { if(!list) return dllist_new_entry(data); if(!node) return dllist_append(list, data); if(!node->prev) return dllist_prepend(list, data); else { dllist *prev_node; dllist *nentry = dllist_new_entry(data); prev_node = node->prev; prev_node->next = nentry; nentry->next = node; nentry->prev = prev_node; node->prev = nentry; return list; } } dllist *dllist_insert_list_after(dllist * list1, dllist * node, dllist * list2) { dllist *last; if(!list1) return list2; last = dllist_last(list2); if(!last) return list1; if(!node) { last->next = list1; list1->prev = last; return list2; } else { dllist *next_node; next_node = node->next; if(next_node) next_node->prev = last; last->next = next_node; node->next = list2; list2->prev = node; return list1; } } dllist *dllist_first(dllist * list) { if(list) while(list->prev) list = list->prev; return list; } dllist *dllist_last(dllist * list) { if(list) while(list->next) list = list->next; return list; } dllist *dllist_nth(dllist * list, int n) { while(n > 0 && list) { n--; list = list->next; } return list; } dllist *dllist_find(dllist * list, dllist_t data) { while(list) { if(list->data == data) { break; } list = list->next; } return list; } dllist *dllist_find2(dllist * list, dllist_t data, dlcomp_func comp_func) { while(list) { if(comp_func(list->data, data)) { break; } list = list->next; } return list; } unsigned int dllist_count(dllist * list) { unsigned int retv = 0; while(list) { retv++; list = list->next; } return retv; } dllist *dllist_remove_entry(dllist * list, dllist * entry) { if(entry) { dllist *next_node, *prev_node; next_node = entry->next; prev_node = entry->prev; if(prev_node) prev_node->next = next_node; if(next_node) next_node->prev = prev_node; if(entry == list) list = next_node; free(entry); } return list; } dllist *dllist_remove_data(dllist * list, dllist_t data) { dllist *pom; while((pom = dllist_find(list, data))) { list = dllist_remove_entry(list, pom); } return list; } void dllist_free_all(dllist * list) { dllist *pom; while(list) { pom = list; list = list->next; free(pom); } } void dllist_free_all_custom(dllist * list, dlfree_func free_func) { dllist *pom; while(list) { pom = list; list = list->next; free_func(pom->data); free(pom); } } dllist *dllist_concat(dllist * list1, dllist * list2) { dllist *retv = list1; if(list2) { dllist *last = dllist_last(list1); if(last) last->next = list2; else retv = list2; list2->prev = last; } return retv; } pavuk-0.9.35/src/dllist.h0000644000175000001440000000313010325725254012110 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _dllist_h_ #define _dllist_h_ /* dllist_t is defined in config.h */ typedef int (*dlcomp_func) (dllist_t key1, dllist_t key2); typedef void (*dlfree_func) (dllist_t key_data); typedef struct _dllist dllist; struct _dllist { dllist_t data; dllist *next; dllist *prev; }; extern dllist *dllist_new_entry(dllist_t); extern dllist *dllist_append(dllist *, dllist_t); extern dllist *dllist_prepend(dllist *, dllist_t); extern dllist *dllist_insert(dllist *, int, dllist_t); extern dllist *dllist_insert_after(dllist *, dllist *, dllist_t); extern dllist *dllist_insert_before(dllist *, dllist *, dllist_t); extern dllist *dllist_insert_list_after(dllist *, dllist *, dllist *); extern dllist *dllist_first(dllist *); extern dllist *dllist_last(dllist *); extern dllist *dllist_nth(dllist *, int); extern dllist *dllist_find(dllist *, dllist_t); extern dllist *dllist_find2(dllist *, dllist_t , dlcomp_func); extern unsigned int dllist_count(dllist *); extern dllist *dllist_remove_entry(dllist *, dllist *); extern dllist *dllist_remove_data(dllist *, dllist_t); extern void dllist_free_all(dllist *); extern void dllist_free_all_custom(dllist *, dlfree_func); extern dllist *dllist_concat(dllist *, dllist *); #endif pavuk-0.9.35/src/uconfig.c0000644000175000001440000011253710325715672012261 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #include #include #include #include #include #include #ifdef I_FACE #include "authinfo.h" #include "cookie.h" #include "ftp.h" #include "html.h" #include "http.h" #include "jstrans.h" #include "lfname.h" #include "log.h" #include "net.h" #include "re.h" #include "times.h" #include "tools.h" #include "uconfig.h" #ifdef GTK_FACE /*****************************************************************************/ /* GTK GUI abstracion macros */ /*****************************************************************************/ #define SET_FTPHSLIST(w, l)\ {\ dllist *ptr;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ for (ptr = l; ptr; ptr = ptr->next)\ {\ char *pp[2];\ char pom[512];\ ftp_handshake_info *fhi = (ftp_handshake_info *) ptr->data;\ if (*fhi->host) sprintf(pom, "%s:%hu", fhi->host, fhi->port);\ else pom[0] = '\0';\ pp[0] = pom;\ pp[1] = ftp_handshake_info_data_dump(fhi);\ gtk_clist_append(GTK_CLIST(w), pp);\ _free(pp[1]);\ }\ gtk_clist_thaw(GTK_CLIST(w));\ } #define SET_URLLIST(w, l)\ {\ dllist *p = l;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ while(p)\ {\ url_info *ui = (url_info *)p->data;\ int row;\ char *pp[2];\ pp[0] = ui->urlstr;\ pp[1] = ui->localname;\ row = gtk_clist_append(GTK_CLIST(w), pp);\ if (ui->type == URLI_FORM || ui->localname)\ {\ ui = url_info_duplicate(ui);\ gtk_clist_set_row_data_full(GTK_CLIST(w), row, ui,\ (GtkDestroyNotify)url_info_free);\ }\ p = p->next;\ }\ gtk_clist_thaw(GTK_CLIST(w));\ } #define SET_PROXYLIST(w, l)\ {\ dllist *p = l;\ char pm[1024];\ char *xp = pm;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ while(p)\ {\ int row;\ http_proxy *pr = (http_proxy *)p->data;\ sprintf(pm, "%s:%hu", pr->addr, pr->port);\ row = gtk_clist_append(GTK_CLIST(w), &xp);\ http_proxy_ref(pr);\ gtk_clist_set_row_data_full(GTK_CLIST(w), row, pr,\ (GtkDestroyNotify) http_proxy_unref);\ p = p->next;\ }\ gtk_clist_thaw(GTK_CLIST(w));\ } #define SET_LIST(w,l) \ {\ char **p = l;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ if (p) while(*p)\ {\ gtk_clist_append(GTK_CLIST(w), p);\ p++;\ }\ gtk_clist_thaw(GTK_CLIST(w));\ } #define SET_DLLIST(w,l) \ {\ dllist *p = l;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ while(p)\ {\ gtk_clist_append(GTK_CLIST(w), (char **)&p->data);\ p = p->next;\ }\ gtk_clist_thaw(GTK_CLIST(w));\ } #define SET_DOUBLE SET_NUM #define SET_NUM(w,v) \ gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), (gfloat)v);\ gtk_signal_emit_by_name(GTK_OBJECT(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(w))), "value_changed"); #define SET_TEXT(w,t) \ if (t) gtk_entry_set_text(GTK_ENTRY(w), t);\ else gtk_entry_set_text(GTK_ENTRY(w), ""); #ifdef NO__CYGWIN__ #define SET_PATH(w,t) \ if (t) \ { \ char *p = cvt_unix_to_win32_path(t); \ gtk_entry_set_text(GTK_ENTRY(w), p); \ _free(p); \ } \ else gtk_entry_set_text(GTK_ENTRY(w), ""); #else #define SET_PATH SET_TEXT #endif #define SET_BOOL(w,v) \ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w), v); #define SET_HTML_TAGS \ {\ GList *chlist;\ int *statpointer;\ \ for(chlist = GTK_BOX(gui_cfg.html_tags)->children ; chlist ; chlist = chlist->next)\ {\ statpointer = gtk_object_get_user_data(\ GTK_OBJECT(((struct _GtkBoxChild *)chlist->data)->widget));\ \ SET_BOOL(((struct _GtkBoxChild *)chlist->data)->widget ,\ !(*statpointer & LINK_DISABLED));\ }\ } #define SET_COMBO_IDX(w, i) \ gtk_option_menu_set_history(GTK_OPTION_MENU(w), i); #define SET_ENUM(w, v) \ {\ GList *ch;\ int i;\ for (i = 0, ch = GTK_MENU_SHELL(GTK_OPTION_MENU(w)->menu)->children; ch; i++, ch = ch->next)\ if (v == (int)gtk_object_get_user_data(GTK_OBJECT(ch->data)))\ {\ gtk_option_menu_set_history(GTK_OPTION_MENU(w), i);\ break;\ }\ } #define SET_CALENDAR(w, ltime) \ gtk_calendar_select_month(GTK_CALENDAR(w), \ ltime->tm_mon, ltime->tm_year);\ gtk_calendar_select_day(GTK_CALENDAR(w), \ ltime->tm_mday); #define SET_C_EXTRAS \ SET_BOOL(gui_cfg.ftpmodegr[(int)cfg.ftp_activec], TRUE); #ifdef USE_SSL #define SET_SSL_VER \ if (gui_cfg.ssl_version[0]) SET_BOOL(gui_cfg.ssl_version[cfg.ssl_version - 1], TRUE); #else #define SET_SSL_VER #endif #ifdef HAVE_REGEX #define SET_JST(w, l) \ { \ dllist *ptr; \ gtk_clist_clear(GTK_CLIST(w));\ for (ptr = l; ptr; ptr = ptr->next) \ { \ char *pp[5]; \ js_transform_t *jt = (js_transform_t *) ptr->data; \ pp[0] = jt->re->pattern; \ pp[1] = jt->transform; \ pp[2] = jt->tag; \ pp[3] = jt->attrib; \ pp[4] = jt->type ? "X" : " "; \ gtk_clist_append(GTK_CLIST(w), pp); \ } \ } #else #define SET_JST(w, l) #endif #define SET_NUMLIST(w, l)\ { \ dllist *ptr; \ char *p = NULL; \ char pom[16]; \ for (ptr = l; ptr; ptr = ptr->next) \ { \ if (p) sprintf(pom, ",%d", (int)ptr->data); \ else sprintf(pom, "%d", (int)ptr->data); \ p = tl_str_concat(p, pom, NULL); \ } \ gtk_entry_set_text(GTK_ENTRY(w), p ? p : ""); \ _free(p); \ } #define SET_PAT(w,l)\ {\ char pom[4096];\ char **pp;\ pom[0] = '\0';\ for (pp = l ; pp && *pp ; pp++)\ {\ if (pp != l)\ {\ strcat(pom, ",");\ strcat(pom, *pp);\ }\ else strcpy(pom, *pp);\ }\ SET_TEXT(w, pom);\ } #define SET_REPAT(w,l)\ {\ dllist *ptr;\ char pom2[PATH_MAX];\ pom[0] = '\0';\ for (ptr = l ; ptr ; ptr = ptr->next)\ {\ char *p = escape_str(((re_entry *)ptr->data)->pattern, "\\\"");\ sprintf(pom2, "\"%s\" ", p);\ strcat(pom, pom2);\ _free(p);\ }\ SET_TEXT (w, pom);\ } #define GETFTPHS_LIST(w,l) \ {\ int n;\ for (; l; l = dllist_remove_entry(l,l))\ ftp_handshake_info_free((ftp_handshake_info *) l->data);\ l = NULL;\ for (n = 0; n < GTK_CLIST(w)->rows ; n++)\ {\ char *pp[2];\ ftp_handshake_info *fhi;\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &pp[0]);\ gtk_clist_get_text(GTK_CLIST(w), n, 1, &pp[1]);\ fhi = ftp_handshake_info_parse(pp[0], pp[1]);\ if (fhi)\ l = dllist_append(l, (dllist_t) fhi);\ }\ } #define GET_LIST(w,l) \ {\ char **p=l;\ int n;\ \ while(l && *p) _free(*p);\ _free(l);\ l = NULL;\ for (n = 0 ; n < GTK_CLIST(w)->rows ; n++)\ {\ char *xp;\ l = (char **)_realloc(l, (n + 2) * sizeof(char *));\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &xp);\ l[n] = tl_strdup(xp);\ l[n+1] = NULL;\ }\ } #define GET_URLLIST(w,l) \ {\ int n;\ \ while(l) {url_info_free((url_info *)l->data) ; l = dllist_remove_entry(l, l);}\ for (n = 0 ; n < GTK_CLIST(w)->rows ; n++)\ {\ char *xp;\ url_info *ui = (url_info *)gtk_clist_get_row_data(GTK_CLIST(w), n);\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &xp);\ if (ui) ui = url_info_duplicate(ui);\ else ui = url_info_new(xp);\ l = dllist_append(l, (dllist_t) ui);\ }\ } #define GET_PROXYLIST(w,ol) \ {\ int n;\ dllist *l = NULL;\ \ cfg.last_used_proxy_node = NULL;\ for (n = 0 ; n < GTK_CLIST(w)->rows ; n++)\ {\ char *xp;\ http_proxy *pr;\ http_proxy *pro;\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &xp);\ pro = (http_proxy *)gtk_clist_get_row_data(GTK_CLIST(w), n);\ pr = http_proxy_parse(xp);\ if (pro)\ {\ pr->penault = pro->penault;\ pr->fails = pro->fails;\ pr->is_10 = pro->is_10;\ }\ l = dllist_append(l, (dllist_t) pr);\ }\ LOCK_PROXY;\ while (ol) {http_proxy_free((http_proxy *)ol->data);\ ol = dllist_remove_entry(ol, ol);}\ ol = l;\ UNLOCK_PROXY;\ } #define GET_DLLIST(w,l) \ {\ int n;\ \ while(l) {if(l->data) free((void *)l->data); l = dllist_remove_entry(l, l);}\ for (n = 0 ; n < GTK_CLIST(w)->rows ; n++)\ {\ char *xp;\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &xp);\ l = dllist_append(l, (dllist_t) tl_strdup(xp));\ }\ } #define GET_BOOL(w,v) \ (v = GTK_TOGGLE_BUTTON(w)->active) #define GET_NUM(w,v) \ (v = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w))) #define GET_DOUBLE(w,v) \ (v = (double) gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(w))) #define GET_STR(w,s) \ _free(s);\ s = tl_strdup(gtk_entry_get_text (GTK_ENTRY(w)));\ if (!(s && *s))\ {\ _free(s);\ } #ifdef NO__CYGWIN__ #define GET_PATH(w,s) \ _free(s);\ s = cvt_win32_to_unix_path(gtk_entry_get_text (GTK_ENTRY(w)));\ if (!(s && *s))\ {\ _free(s);\ } #else #define GET_PATH GET_STR #endif #define GET_S_STR(w,s) \ s = tl_strdup(gtk_entry_get_text (GTK_ENTRY(w)));\ if (!(s && *s))\ {\ _free(s);\ } #ifdef NO__CYGWIN__ #define GET_S_PATH(w,s) \ s = cvt_win32_to_unix_path(gtk_entry_get_text (GTK_ENTRY(w)));\ if (!(s && *s))\ {\ _free(s);\ } #else #define GET_S_PATH GET_S_STR #endif #define GET_HTML_TAGS \ {\ GList *chlist;\ int *statpointer;\ \ for(chlist = GTK_BOX(gui_cfg.html_tags)->children ; chlist ; chlist = chlist->next)\ {\ statpointer = gtk_object_get_user_data(\ GTK_OBJECT(((struct _GtkBoxChild *)chlist->data)->widget));\ \ if (GET_BOOL(((struct _GtkBoxChild *)chlist->data)->widget, b))\ *statpointer &= ~LINK_DISABLED;\ else\ *statpointer |= LINK_DISABLED;\ }\ } #define GET_COMBO_IDX(w, i) \ i = GTK_OPTION_MENU(w)->menu_item ? \ (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(w)->menu_item)) : 0; #define GET_ENUM(w, v) \ v = (gint)(GTK_OPTION_MENU(w)->menu_item ? \ (gint) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(w)->menu_item)) : 0); #define GET_DATE(w, ftm) \ gtk_calendar_get_date(GTK_CALENDAR(w) ,\ &ftm.tm_year, &ftm.tm_mon, &ftm.tm_mday);\ ftm.tm_year -= 1900; #define GET_C_EXTRAS \ GET_BOOL(gui_cfg.ftpmodegr[1], cfg.ftp_activec); #ifdef USE_SSL #define GET_SSL_VER \ if (gui_cfg.ssl_version[0])\ {\ if (GET_BOOL(gui_cfg.ssl_version[0], cfg.ssl_version))\ cfg.ssl_version = 1;\ else if (GET_BOOL(gui_cfg.ssl_version[1], cfg.ssl_version))\ cfg.ssl_version = 2;\ else if (GET_BOOL(gui_cfg.ssl_version[2], cfg.ssl_version))\ cfg.ssl_version = 3;\ else if (GET_BOOL(gui_cfg.ssl_version[3], cfg.ssl_version))\ cfg.ssl_version = 4;\ } #else #define GET_SSL_VER #endif #ifdef HAVE_REGEX #define GET_JST(w, l) \ { \ js_transform_t *jt; \ int i,j; \ char *pp[5]; \ while (l) {js_transform_free((js_transform_t *) l->data); \ l = dllist_remove_entry(l,l);} \ for (i = 0; i < GTK_CLIST(w)->rows; i++) \ { \ for (j = 0; j < 5; j++) \ gtk_clist_get_text(GTK_CLIST(w), i, j, &pp[j]); \ jt = js_transform_new(pp[0], pp[1], pp[2], pp[3], pp[4][0] == 'X'); \ if (jt) \ l = dllist_append(l, (dllist_t) jt); \ } \ } #else #define GET_JST(w, l) #endif #define GET_NUMLIST(w, l) \ { \ char *p; \ l = dllist_remove_entry(l, l); \ GET_S_STR(w, p); \ if (p) l = tl_numlist_split(p, ","); \ _free(p); \ } #define GET_PAT(w,l)\ { \ char *p = NULL;\ int i;\ GET_STR(w, p);\ for(i = 0; l && l[i] ; i++)\ _free(l[i]);\ _free(l);\ l = tl_str_split(p, ",");\ _free(p);\ } #define GET_REPAT(w,l)\ {\ dllist *ptr;\ char *p;\ p = NULL;\ GET_STR(w, p);\ ptr = NULL;\ if (p && *p)\ {\ if (*p == '\"')\ {\ ptr = make_re_list(p);\ if (!ptr)\ {\ _free(p);\ _MT_CFGSTAMP;\ UNLOCK_GCFG;\ return -1;\ }\ }\ else\ {\ re_entry *ree = re_make(p);\ if (ree)\ {\ ptr = dllist_append(ptr, (dllist_t) ree);\ }\ else\ {\ _free(p);\ _MT_CFGSTAMP;\ UNLOCK_GCFG;\ return -1;\ }\ }\ }\ while(l)\ {\ re_free((re_entry *)l->data);\ l = dllist_remove_entry(l, l);\ }\ l = ptr;\ _free(p);\ } #endif /* GTK_FACE */ void xset_cfg_values_lim(void) { char pom[2048]; struct tm *ltime; time_t t; SET_HTML_TAGS; SET_BOOL(gui_cfg.ftp_html, cfg.ftp_html); SET_BOOL(gui_cfg.leaved_sw, cfg.condition.dont_leave_dir); SET_BOOL(gui_cfg.leaves_sw, cfg.condition.dont_leave_site); SET_BOOL(gui_cfg.dont_leave_site_dir, cfg.condition.dont_leave_site_dir); SET_BOOL(gui_cfg.singlepage, cfg.singlepage); SET_BOOL(gui_cfg.limit_inlines, cfg.condition.limit_inlines); SET_BOOL(gui_cfg.ftpd_sw, cfg.condition.ftpdir); SET_BOOL(gui_cfg.cgi_sw, cfg.condition.cgi); SET_BOOL(gui_cfg.allow_ports, cfg.condition.allow_ports); SET_BOOL(gui_cfg.hosts_sw, cfg.condition.allow_site); SET_BOOL(gui_cfg.domain_sw, cfg.condition.allow_domain); SET_BOOL(gui_cfg.mime_sw, cfg.condition.allow_mime); SET_BOOL(gui_cfg.prefix_sw, cfg.condition.allow_prefix); SET_BOOL(gui_cfg.sufix_sw, cfg.condition.allow_sufix); SET_BOOL(gui_cfg.robots_sw, cfg.condition.allow_robots); SET_NUM(gui_cfg.maxlev_label, cfg.condition.max_levels); SET_NUM(gui_cfg.maxdoc_label, cfg.condition.max_documents); SET_NUM(gui_cfg.leave_level, cfg.condition.leave_level); SET_NUM(gui_cfg.site_level, cfg.condition.site_level); SET_NUM(gui_cfg.maxsize_label, cfg.condition.max_size); SET_NUM(gui_cfg.min_size, cfg.condition.min_size); SET_NUMLIST(gui_cfg.ports, cfg.condition.ports); SET_PAT(gui_cfg.pattern_label, cfg.condition.pattern); SET_PAT(gui_cfg.skip_pattern, cfg.condition.skip_pattern); SET_PAT(gui_cfg.url_pattern_label, cfg.condition.url_pattern); SET_PAT(gui_cfg.skip_url_pattern, cfg.condition.skip_url_pattern); #ifdef HAVE_REGEX SET_REPAT(gui_cfg.rpattern, cfg.condition.rpattern); SET_REPAT(gui_cfg.skip_rpattern, cfg.condition.rskip_pattern); SET_REPAT(gui_cfg.url_rpattern, cfg.condition.rurl_pattern); SET_REPAT(gui_cfg.url_skip_rpattern, cfg.condition.rskip_url_pattern); #endif SET_TEXT(gui_cfg.en_uexit, cfg.condition.uexit); SET_TEXT(gui_cfg.follow_cmd, cfg.condition.follow_cmd); SET_LIST(gui_cfg.hosts_list, cfg.condition.sites); SET_LIST(gui_cfg.domain_list, cfg.condition.domains); SET_LIST(gui_cfg.sufixlist, cfg.condition.sufix); SET_LIST(gui_cfg.prefixlist, cfg.condition.dir_prefix); SET_LIST(gui_cfg.amimelist, cfg.condition.mime); SET_DOUBLE(gui_cfg.max_time, cfg.max_time); SET_BOOL(gui_cfg.btime_sw, !(cfg.condition.btime == 0)); t = time(NULL); LOCK_TIME; if(cfg.condition.btime) ltime = new_tm(localtime(&cfg.condition.btime)); else ltime = new_tm(localtime(&t)); UNLOCK_TIME; ltime->tm_year += 1900; SET_CALENDAR(gui_cfg.btime_cal, ltime); SET_NUM(gui_cfg.btime_h_entry, ltime->tm_hour); SET_NUM(gui_cfg.btime_min_entry, ltime->tm_min); _free(ltime); SET_BOOL(gui_cfg.etime_sw, !(cfg.condition.etime == 0)); LOCK_TIME; if(cfg.condition.etime) ltime = new_tm(localtime(&cfg.condition.etime)); else ltime = new_tm(localtime(&t)); UNLOCK_TIME; ltime->tm_year += 1900; SET_CALENDAR(gui_cfg.etime_cal, ltime); SET_NUM(gui_cfg.etime_h_entry, ltime->tm_hour); SET_NUM(gui_cfg.etime_min_entry, ltime->tm_min); _free(ltime); SET_PATH(gui_cfg.subdir_label, cfg.subdir); } void xset_cfg_values_comm(void) { dllist *ptr; char pom[PATH_MAX]; SET_PATH(gui_cfg.cdir_label, cfg.cache_dir); SET_TEXT(gui_cfg.default_prefix, cfg.default_prefix); SET_PATH(gui_cfg.info_dir, cfg.info_dir); #ifdef HAVE_BDB_18x SET_PATH(gui_cfg.ns_cache_dir, cfg.ns_cache_dir); SET_PATH(gui_cfg.moz_cache_dir, cfg.moz_cache_dir); #endif SET_PATH(gui_cfg.en_cookie_file, cfg.cookie_file); SET_TEXT(gui_cfg.index_name, cfg.index_name); SET_TEXT(gui_cfg.store_name, cfg.store_name); SET_BOOL(gui_cfg.check_size, cfg.check_size); SET_BOOL(gui_cfg.store_index, cfg.store_index); SET_BOOL(gui_cfg.unique_doc, cfg.unique_doc); SET_BOOL(gui_cfg.del_after, cfg.del_after); SET_BOOL(gui_cfg.preserve_perm, cfg.preserve_perm); SET_BOOL(gui_cfg.preserve_links, cfg.preserve_links); SET_BOOL(gui_cfg.retrieve_slink, cfg.retrieve_slink); SET_BOOL(gui_cfg.ftp_list, cfg.ftp_list); SET_BOOL(gui_cfg.fix_wuftpd, cfg.fix_wuftpd); SET_BOOL(gui_cfg.use_http11, cfg.use_http11); SET_FTPHSLIST(gui_cfg.ftp_login_hs, cfg.ftp_login_hs); SET_BOOL(gui_cfg.sw_cookie_send, cfg.send_cookies); SET_BOOL(gui_cfg.sw_cookie_recv, cfg.recv_cookies); SET_BOOL(gui_cfg.sw_cookie_update, cfg.update_cookies); SET_BOOL(gui_cfg.cookie_check_domain, cfg.cookie_check_domain); SET_BOOL(gui_cfg.ptime, cfg.preserve_time); SET_BOOL(gui_cfg.oldrm_sw, cfg.remove_old); SET_BOOL(gui_cfg.cache_sw, cfg.cache); SET_BOOL(gui_cfg.ftp_sw, cfg.condition.ftp); SET_BOOL(gui_cfg.http_sw, cfg.condition.http); #ifdef USE_SSL SET_BOOL(gui_cfg.https_sw, cfg.condition.https); SET_BOOL(gui_cfg.ftps_sw, cfg.condition.ftps); #endif SET_BOOL(gui_cfg.gopher_sw, cfg.condition.gopher); SET_BOOL(gui_cfg.gopher_httpgw, cfg.gopher_via_http); SET_BOOL(gui_cfg.ftp_httpgw, cfg.ftp_via_http); SET_BOOL(gui_cfg.ftp_dirtyp, cfg.ftp_dirtyp); SET_BOOL(gui_cfg.freget_sw, cfg.freget); SET_BOOL(gui_cfg.noreloc_sw, cfg.rewrite_links); SET_BOOL(gui_cfg.url_to_local, TRUE); SET_BOOL(gui_cfg.all_to_local, cfg.all_to_local); SET_BOOL(gui_cfg.all_to_remote, cfg.all_to_remote); SET_BOOL(gui_cfg.sel_to_local, cfg.sel_to_local); SET_BOOL(gui_cfg.post_update, cfg.post_update); SET_BOOL(gui_cfg.read_css, cfg.read_css); SET_BOOL(gui_cfg.enable_js, cfg.enable_js); SET_BOOL(gui_cfg.enable_info, cfg.enable_info); SET_BOOL(gui_cfg.auto_referer, cfg.auto_referer); SET_BOOL(gui_cfg.referer, cfg.referer); SET_BOOL(gui_cfg.enc_sw, cfg.use_enc); SET_BOOL(gui_cfg.auth_reuse_nonce, cfg.auth_reuse_nonce); SET_BOOL(gui_cfg.auth_reuse_proxy_nonce, cfg.auth_reuse_proxy_nonce); SET_BOOL(gui_cfg.send_if_range, cfg.send_if_range); SET_BOOL(gui_cfg.show_time, cfg.show_time); SET_ENUM(gui_cfg.http_auth_scheme, cfg.auth_scheme); SET_ENUM(gui_cfg.http_proxy_auth_scheme, cfg.proxy_auth_scheme); #ifdef ENABLE_NTLM SET_TEXT(gui_cfg.auth_ntlm_domain, cfg.auth_ntlm_domain); SET_TEXT(gui_cfg.auth_proxy_ntlm_domain, cfg.auth_proxy_ntlm_domain); #endif SET_C_EXTRAS; SET_SSL_VER; #ifdef WITH_TREE SET_TEXT(gui_cfg.browser_label, cfg.browser); #endif SET_TEXT(gui_cfg.remind_cmd, cfg.remind_cmd); SET_TEXT(gui_cfg.post_cmd, cfg.post_cmd); SET_TEXT(gui_cfg.identity, cfg.identity); SET_TEXT(gui_cfg.ftp_proxyh_label, cfg.ftp_proxy); SET_NUM(gui_cfg.ftp_proxyp_label, cfg.ftp_proxy_port); SET_TEXT(gui_cfg.gopher_proxyh_label, cfg.gopher_proxy); SET_NUM(gui_cfg.gopher_proxyp_label, cfg.gopher_proxy_port); #ifdef USE_SSL SET_TEXT(gui_cfg.ssl_proxyh_label, cfg.ssl_proxy); SET_NUM(gui_cfg.ssl_proxyp_label, cfg.ssl_proxy_port); SET_TEXT(gui_cfg.ssl_cert_passwd_en, cfg.ssl_cert_passwd); SET_TEXT(gui_cfg.ssl_cipher_list, cfg.ssl_cipher_list); SET_BOOL(gui_cfg.unique_sslid, cfg.unique_sslid); #ifdef USE_SSL_IMPL_OPENSSL SET_PATH(gui_cfg.ssl_cert_file_en, cfg.ssl_cert_file); SET_PATH(gui_cfg.ssl_key_file_en, cfg.ssl_key_file); #ifdef HAVE_RAND_EGD SET_PATH(gui_cfg.egd_socket, cfg.egd_socket); #endif #endif #ifdef USE_SSL_IMPL_NSS SET_PATH(gui_cfg.nss_cert_dir, cfg.nss_cert_dir); SET_BOOL(gui_cfg.nss_accept_unknown_cert, cfg.nss_accept_unknown_cert); SET_BOOL(gui_cfg.nss_domestic_policy, cfg.nss_domestic_policy); #endif #endif SET_TEXT(gui_cfg.local_ip, cfg.local_ip); memset(&cfg.local_ip_addr, '\0', sizeof(cfg.local_ip_addr)); if(cfg.local_ip && net_host_to_in_addr(cfg.local_ip, &cfg.local_ip_addr)) { xherror(cfg.local_ip); } ptr = cfg.http_headers; pom[0] = '\0'; while(ptr) { httphdr *hdr = (httphdr *) ptr->data; char pom2[PATH_MAX]; char *p1, *p2; p1 = escape_str(hdr->name, "\\\""); p2 = escape_str(hdr->val, "\\\""); sprintf(pom2, "\"%s%s %s\" ", hdr->all ? "+" : "", p1, p2); _free(p1); _free(p2); strcat(pom, pom2); ptr = ptr->next; } SET_TEXT(gui_cfg.http_headers, pom); SET_TEXT(gui_cfg.ftp_list_options, cfg.ftp_list_options); SET_NUM(gui_cfg.en_cookie_max, cfg.cookies_max); SET_NUM(gui_cfg.base_level_label, cfg.base_level); SET_DOUBLE(gui_cfg.timeout_label, cfg.ctimeout); SET_NUM(gui_cfg.retry_label, cfg.nretry); SET_NUM(gui_cfg.redir_label, cfg.nredir); SET_NUM(gui_cfg.reget_label, cfg.nreget); SET_NUM(gui_cfg.sleep_label, cfg.sleep); SET_BOOL(gui_cfg.rsleep, cfg.rsleep); SET_NUM(gui_cfg.xloglen_label, cfg.xlogsize); SET_NUM(gui_cfg.bufsize, cfg.bufsize); #ifdef HAVE_MT SET_NUM(gui_cfg.nthr, cfg.nthr); #endif #ifdef HAVE_FSTATFS SET_NUM(gui_cfg.fs_quota, cfg.fs_quota); #endif SET_NUM(gui_cfg.file_quota, cfg.file_quota); SET_NUM(gui_cfg.trans_quota, cfg.trans_quota); SET_DOUBLE(gui_cfg.maxrate, cfg.maxrate); SET_DOUBLE(gui_cfg.minrate, cfg.minrate); SET_BOOL(gui_cfg.gen_logname, cfg.gen_logname); SET_PATH(gui_cfg.log_label, cfg.logfile); SET_PATH(gui_cfg.slog_label, cfg.short_logfile); SET_TEXT(gui_cfg.auth_label, cfg.name_auth); SET_TEXT(gui_cfg.pass_label, cfg.passwd_auth); SET_TEXT(gui_cfg.proxy_auth_label, cfg.http_proxy_user); SET_TEXT(gui_cfg.proxy_pass_label, cfg.http_proxy_pass); SET_TEXT(gui_cfg.ftp_proxy_user, cfg.ftp_proxy_user); SET_TEXT(gui_cfg.ftp_proxy_pass, cfg.ftp_proxy_pass); SET_BOOL(gui_cfg.send_from, cfg.send_from); SET_TEXT(gui_cfg.from_label, cfg.from); SET_NUM(gui_cfg.rollback_label, cfg.rollback); SET_NUM(gui_cfg.ddays_label, cfg.ddays); SET_NUM(gui_cfg.hash_size, cfg.hash_size); SET_LIST(gui_cfg.alanglist, cfg.accept_lang); SET_LIST(gui_cfg.acharset_list, cfg.accept_chars); SET_LIST(gui_cfg.cookie_domain_list, cfg.cookies_disabled_domains); SET_TEXT(gui_cfg.tr_del_chr, cfg.tr_del_chr); SET_TEXT(gui_cfg.tr_str_s1, cfg.tr_str_s1); SET_TEXT(gui_cfg.tr_str_s2, cfg.tr_str_s2); SET_TEXT(gui_cfg.tr_chr_s1, cfg.tr_chr_s1); SET_TEXT(gui_cfg.tr_chr_s2, cfg.tr_chr_s2); SET_COMBO_IDX(gui_cfg.scheduling_strategie, cfg.scheduling_strategie); SET_PAT(gui_cfg.dont_touch_url_pattern, cfg.dont_touch_url_pattern); #ifdef HAVE_REGEX SET_REPAT(gui_cfg.dont_touch_url_rpattern, cfg.dont_touch_url_rpattern); SET_REPAT(gui_cfg.dont_touch_tag_rpattern, cfg.dont_touch_tag_rpattern); SET_BOOL(gui_cfg.remove_adv, cfg.remove_adv); { dllist *ptr2 = cfg.advert_res; ptr = NULL; while(ptr2) { ptr = dllist_append(ptr, (dllist_t) ((re_entry *) ptr2->data)->pattern); ptr2 = ptr2->next; } SET_DLLIST(gui_cfg.advert_res, ptr); while(ptr) ptr = dllist_remove_entry(ptr, ptr); ptr2 = cfg.js_patterns; ptr = NULL; while(ptr2) { ptr = dllist_append(ptr, (dllist_t) ((re_entry *) ptr2->data)->pattern); ptr2 = ptr2->next; } SET_DLLIST(gui_cfg.js_patterns, ptr); while(ptr) ptr = dllist_remove_entry(ptr, ptr); } #endif #ifdef GTK_FACE { char *ld[3]; ptr = cfg.lfnames; gtk_clist_freeze(GTK_CLIST(gui_cfg.rules_list)); gtk_clist_clear(GTK_CLIST(gui_cfg.rules_list)); while(ptr) { lfname *lf = (lfname *) ptr->data; ld[0] = (lf->type == LFNAME_FNMATCH) ? "F" : "R"; ld[1] = lf->matchstr; ld[2] = lf->transstr; gtk_clist_append(GTK_CLIST(gui_cfg.rules_list), ld); ptr = ptr->next; } gtk_clist_thaw(GTK_CLIST(gui_cfg.rules_list)); } #endif SET_URLLIST(gui_cfg.url_list, cfg.request); SET_URLLIST(gui_cfg.formdata_list, cfg.formdata); SET_PROXYLIST(gui_cfg.http_proxy_list, cfg.http_proxy); SET_JST(gui_cfg.js_transform, cfg.js_transform); } #ifdef HAVE_REGEX static dllist *make_re_list(char *str) { dllist *retv = NULL; char *p; bool_t err = FALSE; for(p = get_1qstr(str); p; p = get_1qstr(NULL)) { re_entry *ree; ree = re_make(p); if(!ree) { err = TRUE; break; } else { retv = dllist_append(retv, (dllist_t) ree); } } if(err) { while(retv) { re_free((re_entry *) retv->data); retv = dllist_remove_entry(retv, retv); } } return retv; } #endif int xget_cfg_values_lim(void) { struct tm ftm; char *p = NULL; bool_t b; struct stat estat; LOCK_GCFG; GET_HTML_TAGS; GET_PATH(gui_cfg.subdir_label, p); if(p && !((stat(p, &estat) >= 0) && S_ISDIR(estat.st_mode))) { _free(p); xprintf(0, gettext("Bad parameter - Working subdirectory")); _MT_CFGSTAMP; UNLOCK_GCFG; return -1; } else { _free(cfg.subdir); if(p) cfg.subdir = get_abs_file_path_oss(p); _free(p); } GET_BOOL(gui_cfg.ftp_html, cfg.ftp_html); GET_BOOL(gui_cfg.leaves_sw, cfg.condition.dont_leave_site); GET_BOOL(gui_cfg.leaved_sw, cfg.condition.dont_leave_dir); GET_BOOL(gui_cfg.dont_leave_site_dir, cfg.condition.dont_leave_site_dir); GET_BOOL(gui_cfg.singlepage, cfg.singlepage); GET_BOOL(gui_cfg.limit_inlines, cfg.condition.limit_inlines); GET_BOOL(gui_cfg.cgi_sw, cfg.condition.cgi); GET_BOOL(gui_cfg.ftpd_sw, cfg.condition.ftpdir); GET_BOOL(gui_cfg.allow_ports, cfg.condition.allow_ports); GET_BOOL(gui_cfg.hosts_sw, cfg.condition.allow_site); GET_BOOL(gui_cfg.domain_sw, cfg.condition.allow_domain); GET_BOOL(gui_cfg.mime_sw, cfg.condition.allow_mime); GET_BOOL(gui_cfg.prefix_sw, cfg.condition.allow_prefix); GET_BOOL(gui_cfg.sufix_sw, cfg.condition.allow_sufix); GET_BOOL(gui_cfg.robots_sw, cfg.condition.allow_robots); GET_NUMLIST(gui_cfg.ports, cfg.condition.ports); GET_PAT(gui_cfg.pattern_label, cfg.condition.pattern); GET_PAT(gui_cfg.skip_pattern, cfg.condition.skip_pattern); GET_PAT(gui_cfg.url_pattern_label, cfg.condition.url_pattern); GET_PAT(gui_cfg.skip_url_pattern, cfg.condition.skip_url_pattern); #ifdef HAVE_REGEX GET_REPAT(gui_cfg.rpattern, cfg.condition.rpattern); GET_REPAT(gui_cfg.skip_rpattern, cfg.condition.rskip_pattern); GET_REPAT(gui_cfg.url_rpattern, cfg.condition.rurl_pattern); GET_REPAT(gui_cfg.url_skip_rpattern, cfg.condition.rskip_url_pattern); GET_REPAT(gui_cfg.aip, cfg.condition.aip); GET_REPAT(gui_cfg.skipip, cfg.condition.skipip); #endif GET_STR(gui_cfg.en_uexit, cfg.condition.uexit); GET_STR(gui_cfg.follow_cmd, cfg.condition.follow_cmd); GET_LIST(gui_cfg.hosts_list, cfg.condition.sites); GET_LIST(gui_cfg.amimelist, cfg.condition.mime); GET_LIST(gui_cfg.domain_list, cfg.condition.domains); GET_NUM(gui_cfg.maxlev_label, cfg.condition.max_levels); GET_NUM(gui_cfg.leave_level, cfg.condition.leave_level); GET_NUM(gui_cfg.site_level, cfg.condition.site_level); GET_NUM(gui_cfg.maxdoc_label, cfg.condition.max_documents); GET_NUM(gui_cfg.maxsize_label, cfg.condition.max_size); GET_NUM(gui_cfg.min_size, cfg.condition.min_size); GET_LIST(gui_cfg.sufixlist, cfg.condition.sufix); GET_LIST(gui_cfg.prefixlist, cfg.condition.dir_prefix); GET_DOUBLE(gui_cfg.max_time, cfg.max_time); GET_BOOL(gui_cfg.btime_sw, b); if(b) { GET_DATE(gui_cfg.btime_cal, ftm); ftm.tm_sec = 0; ftm.tm_isdst = -1; GET_NUM(gui_cfg.btime_h_entry, ftm.tm_hour); GET_NUM(gui_cfg.btime_min_entry, ftm.tm_min); cfg.condition.btime = mktime(&ftm); } else cfg.condition.btime = (time_t) 0; GET_BOOL(gui_cfg.etime_sw, b); if(b) { GET_DATE(gui_cfg.etime_cal, ftm); ftm.tm_sec = 0; ftm.tm_isdst = -1; GET_NUM(gui_cfg.etime_h_entry, ftm.tm_hour); GET_NUM(gui_cfg.etime_min_entry, ftm.tm_min); cfg.condition.etime = mktime(&ftm); } else cfg.condition.etime = (time_t) 0; _MT_CFGSTAMP; UNLOCK_GCFG; return 0; } int xget_cfg_values_comm(void) { char *tp, *p = NULL; struct stat estat; dllist *ptr; LOCK_GCFG; GET_PATH(gui_cfg.cdir_label, p); if(p && !((stat(p, &estat) >= 0) && S_ISDIR(estat.st_mode))) { xprintf(0, gettext("Bad parameter - Cache directory")); _MT_CFGSTAMP; UNLOCK_GCFG; return -1; } else { _free(cfg.cache_dir); if(p) cfg.cache_dir = get_abs_file_path_oss(p); _free(p); } GET_PATH(gui_cfg.info_dir, cfg.info_dir); #ifdef HAVE_BDB_18x GET_PATH(gui_cfg.ns_cache_dir, cfg.ns_cache_dir); GET_PATH(gui_cfg.moz_cache_dir, cfg.moz_cache_dir); #endif p = cfg.cookie_file; GET_S_PATH(gui_cfg.en_cookie_file, cfg.cookie_file); if(!((cfg.cookie_file && p && !strcmp(p, cfg.cookie_file)) || !cfg.cookie_file)) { cookie_read_file(cfg.cookie_file); } _free(p); GET_STR(gui_cfg.default_prefix, cfg.default_prefix); GET_BOOL(gui_cfg.check_size, cfg.check_size); GET_BOOL(gui_cfg.store_index, cfg.store_index); GET_BOOL(gui_cfg.unique_doc, cfg.unique_doc); GET_BOOL(gui_cfg.del_after, cfg.del_after); GET_BOOL(gui_cfg.preserve_perm, cfg.preserve_perm); GET_BOOL(gui_cfg.preserve_links, cfg.preserve_links); GET_BOOL(gui_cfg.retrieve_slink, cfg.retrieve_slink); GET_BOOL(gui_cfg.ftp_list, cfg.ftp_list); GET_BOOL(gui_cfg.fix_wuftpd, cfg.fix_wuftpd); GET_BOOL(gui_cfg.use_http11, cfg.use_http11); GETFTPHS_LIST(gui_cfg.ftp_login_hs, cfg.ftp_login_hs); GET_STR(gui_cfg.index_name, cfg.index_name); GET_STR(gui_cfg.store_name, cfg.store_name); GET_BOOL(gui_cfg.sw_cookie_send, cfg.send_cookies); GET_BOOL(gui_cfg.sw_cookie_recv, cfg.recv_cookies); GET_BOOL(gui_cfg.sw_cookie_update, cfg.update_cookies); GET_BOOL(gui_cfg.cookie_check_domain, cfg.cookie_check_domain); GET_BOOL(gui_cfg.ptime, cfg.preserve_time); GET_BOOL(gui_cfg.cache_sw, cfg.cache); GET_BOOL(gui_cfg.oldrm_sw, cfg.remove_old); GET_BOOL(gui_cfg.ftp_sw, cfg.condition.ftp); GET_BOOL(gui_cfg.http_sw, cfg.condition.http); #ifdef USE_SSL GET_BOOL(gui_cfg.https_sw, cfg.condition.https); GET_BOOL(gui_cfg.ftps_sw, cfg.condition.ftps); #endif GET_BOOL(gui_cfg.gopher_sw, cfg.condition.gopher); GET_BOOL(gui_cfg.gopher_httpgw, cfg.gopher_via_http); GET_BOOL(gui_cfg.ftp_httpgw, cfg.ftp_via_http); GET_BOOL(gui_cfg.ftp_dirtyp, cfg.ftp_dirtyp); GET_BOOL(gui_cfg.freget_sw, cfg.freget); GET_BOOL(gui_cfg.noreloc_sw, cfg.rewrite_links); GET_BOOL(gui_cfg.all_to_local, cfg.all_to_local); GET_BOOL(gui_cfg.all_to_remote, cfg.all_to_remote); GET_BOOL(gui_cfg.sel_to_local, cfg.sel_to_local); GET_BOOL(gui_cfg.post_update, cfg.post_update); GET_BOOL(gui_cfg.enable_js, cfg.enable_js); GET_BOOL(gui_cfg.auto_referer, cfg.auto_referer); GET_BOOL(gui_cfg.referer, cfg.referer); GET_BOOL(gui_cfg.enable_info, cfg.enable_info); GET_BOOL(gui_cfg.enc_sw, cfg.use_enc); GET_BOOL(gui_cfg.auth_reuse_nonce, cfg.auth_reuse_nonce); GET_BOOL(gui_cfg.auth_reuse_proxy_nonce, cfg.auth_reuse_proxy_nonce); GET_BOOL(gui_cfg.send_if_range, cfg.send_if_range); GET_BOOL(gui_cfg.show_time, cfg.show_time); GET_ENUM(gui_cfg.http_auth_scheme, cfg.auth_scheme); GET_ENUM(gui_cfg.http_proxy_auth_scheme, cfg.proxy_auth_scheme); #ifdef ENABLE_NTLM GET_STR(gui_cfg.auth_ntlm_domain, cfg.auth_ntlm_domain); GET_STR(gui_cfg.auth_proxy_ntlm_domain, cfg.auth_proxy_ntlm_domain); #endif GET_C_EXTRAS; GET_SSL_VER; #ifdef WITH_TREE GET_STR(gui_cfg.browser_label, cfg.browser); #endif GET_STR(gui_cfg.remind_cmd, cfg.remind_cmd); GET_STR(gui_cfg.post_cmd, cfg.post_cmd); GET_STR(gui_cfg.identity, cfg.identity); GET_STR(gui_cfg.ftp_proxyh_label, cfg.ftp_proxy); GET_NUM(gui_cfg.ftp_proxyp_label, cfg.ftp_proxy_port); GET_STR(gui_cfg.gopher_proxyh_label, cfg.gopher_proxy); GET_NUM(gui_cfg.gopher_proxyp_label, cfg.gopher_proxy_port); GET_BOOL(gui_cfg.read_css, cfg.read_css); #ifdef USE_SSL GET_STR(gui_cfg.ssl_proxyh_label, cfg.ssl_proxy); GET_NUM(gui_cfg.ssl_proxyp_label, cfg.ssl_proxy_port); GET_STR(gui_cfg.ssl_cert_passwd_en, cfg.ssl_cert_passwd); GET_STR(gui_cfg.ssl_cipher_list, cfg.ssl_cipher_list); GET_BOOL(gui_cfg.unique_sslid, cfg.unique_sslid); #ifdef USE_SSL_IMPL_OPENSSL GET_PATH(gui_cfg.ssl_cert_file_en, cfg.ssl_cert_file); GET_PATH(gui_cfg.ssl_key_file_en, cfg.ssl_key_file); #ifdef HAVE_RAND_EGD GET_PATH(gui_cfg.egd_socket, cfg.egd_socket); #endif #endif #ifdef USE_SSL_IMPL_NSS GET_PATH(gui_cfg.nss_cert_dir, cfg.nss_cert_dir); GET_BOOL(gui_cfg.nss_accept_unknown_cert, cfg.nss_accept_unknown_cert); GET_BOOL(gui_cfg.nss_domestic_policy, cfg.nss_domestic_policy); #endif #endif GET_STR(gui_cfg.local_ip, cfg.local_ip); memset(&cfg.local_ip_addr, '\0', sizeof(cfg.local_ip_addr)); if(cfg.local_ip && net_host_to_in_addr(cfg.local_ip, &cfg.local_ip_addr)) { xherror(cfg.local_ip); } GET_S_STR(gui_cfg.http_headers, tp); p = tp; while(cfg.http_headers) { httphdr_free((httphdr *) cfg.http_headers->data); cfg.http_headers = dllist_remove_entry(cfg.http_headers, cfg.http_headers); } if(p && *p) { while((p = get_1qstr(p))) { httphdr *hdr = httphdr_parse(p); if(hdr) cfg.http_headers = dllist_append(cfg.http_headers, (dllist_t) hdr); else xprintf(0, "Bad HTTP headers entry - %s\n", p); p = NULL; } } _free(tp); GET_STR(gui_cfg.ftp_list_options, cfg.ftp_list_options); GET_NUM(gui_cfg.en_cookie_max, cfg.cookies_max); GET_NUM(gui_cfg.base_level_label, cfg.base_level); GET_DOUBLE(gui_cfg.timeout_label, cfg.ctimeout); GET_NUM(gui_cfg.retry_label, cfg.nretry); GET_NUM(gui_cfg.redir_label, cfg.nredir); GET_NUM(gui_cfg.reget_label, cfg.nreget); GET_NUM(gui_cfg.sleep_label, cfg.sleep); GET_BOOL(gui_cfg.rsleep, cfg.rsleep); GET_NUM(gui_cfg.xloglen_label, cfg.xlogsize); GET_NUM(gui_cfg.bufsize, cfg.bufsize); #ifdef HAVE_MT GET_NUM(gui_cfg.nthr, cfg.nthr); #endif #ifdef HAVE_FSTATFS GET_NUM(gui_cfg.fs_quota, cfg.fs_quota); #endif GET_NUM(gui_cfg.file_quota, cfg.file_quota); GET_NUM(gui_cfg.trans_quota, cfg.trans_quota); GET_DOUBLE(gui_cfg.maxrate, cfg.maxrate); GET_DOUBLE(gui_cfg.minrate, cfg.minrate); GET_PATH(gui_cfg.slog_label, cfg.short_logfile); GET_BOOL(gui_cfg.gen_logname, cfg.gen_logname); GET_PATH(gui_cfg.log_label, cfg.logfile); log_start(cfg.logfile); GET_STR(gui_cfg.auth_label, cfg.name_auth); GET_STR(gui_cfg.pass_label, cfg.passwd_auth); GET_STR(gui_cfg.proxy_auth_label, cfg.http_proxy_user); GET_STR(gui_cfg.proxy_pass_label, cfg.http_proxy_pass); GET_STR(gui_cfg.ftp_proxy_user, cfg.ftp_proxy_user); GET_STR(gui_cfg.ftp_proxy_pass, cfg.ftp_proxy_pass); GET_BOOL(gui_cfg.send_from, cfg.send_from); GET_STR(gui_cfg.from_label, cfg.from); GET_NUM(gui_cfg.rollback_label, cfg.rollback); GET_NUM(gui_cfg.ddays_label, cfg.ddays); GET_NUM(gui_cfg.hash_size, cfg.hash_size); dlhash_resize(cfg.url_hash_tbl, cfg.hash_size); dlhash_resize(cfg.fn_hash_tbl, cfg.hash_size); GET_LIST(gui_cfg.alanglist, cfg.accept_lang); GET_LIST(gui_cfg.acharset_list, cfg.accept_chars); GET_LIST(gui_cfg.cookie_domain_list, cfg.cookies_disabled_domains); GET_STR(gui_cfg.tr_del_chr, cfg.tr_del_chr); GET_STR(gui_cfg.tr_str_s1, cfg.tr_str_s1); GET_STR(gui_cfg.tr_str_s2, cfg.tr_str_s2); GET_STR(gui_cfg.tr_chr_s1, cfg.tr_chr_s1); GET_STR(gui_cfg.tr_chr_s2, cfg.tr_chr_s2); GET_COMBO_IDX(gui_cfg.scheduling_strategie, cfg.scheduling_strategie); GET_PAT(gui_cfg.dont_touch_url_pattern, cfg.dont_touch_url_pattern); #ifdef HAVE_REGEX GET_REPAT(gui_cfg.dont_touch_url_rpattern, cfg.dont_touch_url_rpattern); GET_REPAT(gui_cfg.dont_touch_tag_rpattern, cfg.dont_touch_tag_rpattern); GET_BOOL(gui_cfg.remove_adv, cfg.remove_adv); ptr = cfg.advert_res; while(ptr) { re_free((re_entry *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } cfg.advert_res = NULL; GET_DLLIST(gui_cfg.advert_res, ptr); while(ptr) { re_entry *ree; ree = re_make((char *) ptr->data); if(ree) cfg.advert_res = dllist_append(cfg.advert_res, (dllist_t) ree); if(ptr->data) free((char *)ptr->data); ptr = dllist_remove_entry(ptr, ptr); } ptr = cfg.js_patterns; while(ptr) { re_free((re_entry *) ptr->data); ptr = dllist_remove_entry(ptr, ptr); } cfg.advert_res = NULL; GET_DLLIST(gui_cfg.js_patterns, ptr); while(ptr) { re_entry *ree; ree = re_make((char *) ptr->data); if(ree) cfg.js_patterns = dllist_append(cfg.js_patterns, (dllist_t) ree); if(ptr->data) free((char *)ptr->data); ptr = dllist_remove_entry(ptr, ptr); } #endif #ifdef GTK_FACE { int i; while(cfg.lfnames) { lfname_free((lfname *) cfg.lfnames->data); cfg.lfnames = dllist_remove_entry(cfg.lfnames, cfg.lfnames); } for(i = 0; i < GTK_CLIST(gui_cfg.rules_list)->rows; i++) { lfname *lfn; lfname_type tp; char *ld[3]; gtk_clist_get_text(GTK_CLIST(gui_cfg.rules_list), i, 0, &ld[0]); gtk_clist_get_text(GTK_CLIST(gui_cfg.rules_list), i, 1, &ld[1]); gtk_clist_get_text(GTK_CLIST(gui_cfg.rules_list), i, 2, &ld[2]); #ifdef HAVE_REGEX tp = (*ld[0] == 'F') ? LFNAME_FNMATCH : LFNAME_REGEX; #else tp = LFNAME_FNMATCH; #endif if((lfn = lfname_new(tp, ld[1], ld[2]))) cfg.lfnames = dllist_append(cfg.lfnames, (dllist_t) lfn); else { _MT_CFGSTAMP; UNLOCK_GCFG; return -1; } } } #endif GET_URLLIST(gui_cfg.url_list, cfg.request); GET_URLLIST(gui_cfg.formdata_list, cfg.formdata); GET_PROXYLIST(gui_cfg.http_proxy_list, cfg.http_proxy); GET_JST(gui_cfg.js_transform, cfg.js_transform); _MT_CFGSTAMP; UNLOCK_GCFG; return 0; } #endif /* I_FACE */ pavuk-0.9.35/src/uconfig.h0000644000175000001440000000112410142077742012247 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _gconfig_h_ #define _gconfig_h_ extern int xget_cfg_values_lim(void); extern int xget_cfg_values_comm(void); extern void xset_cfg_values_lim(void); extern void xset_cfg_values_comm(void); #endif pavuk-0.9.35/src/condition.c0000644000175000001440000011027010327674364012611 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #ifdef HAVE_ARPA_INET_H #include #endif #include #include #include #include #ifdef HAVE_FNMATCH #include #else #include "fnmatch.h" #endif #include "url.h" #include "condition.h" #include "tools.h" #include "uexit.h" #include "re.h" #include "dns.h" #include "debugl.h" #include "jsbind.h" #include "tag_pattern.h" #include "dlhash_tools.h" static int cond_unsupported(url *, cond_info_t *); static int cond_lmax(url *, cond_info_t *); static int cond_dmax(url *, cond_info_t *); static int cond_noftp(url *, cond_info_t *); static int cond_nhttp(url *, cond_info_t *); static int cond_nossl(url *, cond_info_t *); static int cond_nogopher(url *, cond_info_t *); static int cond_noftps(url *, cond_info_t *); static int cond_nocgi(url *, cond_info_t *); static int cond_asite(url *, cond_info_t *); static int cond_dsite(url *, cond_info_t *); static int cond_adomain(url *, cond_info_t *); static int cond_ddomain(url *, cond_info_t *); static int cond_aprefix(url *, cond_info_t *); static int cond_dprefix(url *, cond_info_t *); static int cond_asfx(url *, cond_info_t *); static int cond_dsfx(url *, cond_info_t *); static int cond_pattern(url *, cond_info_t *); static int cond_rpattern(url *, cond_info_t *); static int cond_skip_pattern(url *, cond_info_t *); static int cond_skip_rpattern(url *, cond_info_t *); static int cond_url_pattern(url *, cond_info_t *); static int cond_url_rpattern(url *, cond_info_t *); static int cond_skip_url_pattern(url *, cond_info_t *); static int cond_skip_url_rpattern(url *, cond_info_t *); static int cond_dont_leave_site(url *, cond_info_t *); static int cond_dont_leave_dir(url *, cond_info_t *); static int cond_user_condition(url *, cond_info_t *); static int cond_aip_pattern(url *, cond_info_t *); static int cond_dip_pattern(url *, cond_info_t *); static int cond_site_level(url *, cond_info_t *); static int cond_dont_leave_site_enter_dir(url *, cond_info_t *); static int cond_leave_level(url *, cond_info_t *); static int cond_aport(url *, cond_info_t *); static int cond_dport(url *, cond_info_t *); static int cond_max_size(url *, cond_info_t *); static int cond_min_size(url *, cond_info_t *); static int cond_amime_type(url *, cond_info_t *); static int cond_dmime_type(url *, cond_info_t *); static int cond_newer_than(url *, cond_info_t *); static int cond_older_than(url *, cond_info_t *); static int cond_tag_pattern(url *, cond_info_t *); static int cond_tag_rpattern(url *, cond_info_t *); #define CL0 (1 << 0) #define CL1 (1 << 1) #define CL2 (1 << 2) #define CL3 (1 << 3) #define CLALL (CL0 | CL1 | CL2 | CL3) struct cond_type_info_t { cond_type_t type; char *name; int (*cond_func) (url *, cond_info_t *); bool_t standard; int level; }; static const struct cond_type_info_t cond_type_info[] = { {CONDT_UNSUP, "unsupported", cond_unsupported, TRUE, CLALL}, {CONDT_NOFTP, "-noftp", cond_noftp, TRUE, CL0 | CL2}, {CONDT_NOHTTP, "-nohttp", cond_nhttp, TRUE, CL0 | CL2}, {CONDT_NOSSL, "-nossl", cond_nossl, TRUE, CL0 | CL2}, {CONDT_NOGOPHER, "-nogopher", cond_nogopher, TRUE, CL0 | CL2}, {CONDT_NOFTPS, "-noftps", cond_noftps, TRUE, CL0 | CL2}, {CONDT_NOCGI, "-nocgi", cond_nocgi, TRUE, CL0 | CL2}, {CONDT_LMAX, "-lmax", cond_lmax, TRUE, CL0 | CL2}, {CONDT_DMAX, "-dmax", cond_dmax, TRUE, CL1 | CL2}, {CONDT_ASITE, "-asite", cond_asite, TRUE, CL0 | CL2}, {CONDT_DSITE, "-dsite", cond_dsite, TRUE, CL0 | CL2}, {CONDT_ADOMAIN, "-adomain", cond_adomain, TRUE, CL0 | CL2}, {CONDT_DDOMAIN, "-ddomain", cond_ddomain, TRUE, CL0 | CL2}, {CONDT_APREFIX, "-aprefix", cond_aprefix, TRUE, CL0 | CL2}, {CONDT_DPREFIX, "-dprefix", cond_dprefix, TRUE, CL0 | CL2}, {CONDT_ASFX, "-asfx", cond_asfx, TRUE, CL0 | CL2}, {CONDT_DSFX, "-dsfx", cond_dsfx, TRUE, CL0 | CL2}, {CONDT_DONT_LEAVE_SITE, "-dont_leave_site", cond_dont_leave_site, TRUE, CL0 | CL2}, {CONDT_DONT_LEAVE_DIR, "-dont_leave_dir", cond_dont_leave_dir, TRUE, CL0 | CL2}, {CONDT_SITE_LEVEL, "-site_level", cond_site_level, TRUE, CL0 | CL2}, {CONDT_LEAVE_LEVEL, "-leave_level", cond_leave_level, TRUE, CL0 | CL2}, {CONDT_DONT_LEAVE_SITE_ENTER_DIR, "-dont_leave_site_enter_dir", cond_dont_leave_site_enter_dir, TRUE, CL0 | CL2}, {CONDT_APORTS, "-aport", cond_aport, TRUE, CL0 | CL2}, {CONDT_DPORTS, "-dport", cond_dport, TRUE, CL0 | CL2}, {CONDT_MAX_SIZE, "-max_size", cond_max_size, TRUE, CL3}, {CONDT_MIN_SIZE, "-min_size", cond_min_size, TRUE, CL3}, {CONDT_AMIME_TYPE, "-amimet", cond_amime_type, TRUE, CL3}, {CONDT_DMIME_TYPE, "-dmimet", cond_dmime_type, TRUE, CL3}, {CONDT_NEWER_THAN, "-newer_than", cond_newer_than, TRUE, CL3}, {CONDT_OLDER_THAN, "-older_than", cond_older_than, TRUE, CL3}, {CONDT_AIP_PATTERN, "-aip_pattern", cond_aip_pattern, TRUE, CL0 | CL2}, {CONDT_DIP_PATTERN, "-dip_pattern", cond_dip_pattern, TRUE, CL0 | CL2}, {CONDT_PATTERN, "-pattern", cond_pattern, FALSE, CL0 | CL2}, {CONDT_RPATTERN, "-rpattern", cond_rpattern, FALSE, CL0 | CL2}, {CONDT_SKIP_PATTERN, "-skip_pattern", cond_skip_pattern, FALSE, CL0 | CL2}, {CONDT_SKIP_RPATTERN, "-skip_rpattern", cond_skip_rpattern, FALSE, CL0 | CL2}, {CONDT_URL_PATTERN, "-url_pattern", cond_url_pattern, FALSE, CL0 | CL2}, {CONDT_URL_RPATTERN, "-url_rpattern", cond_url_rpattern, FALSE, CL0 | CL2}, {CONDT_SKIP_URL_PATTERN, "-skip_url_pattern", cond_skip_url_pattern, FALSE, CL0 | CL2}, {CONDT_SKIP_URL_RPATTERN, "-skip_url_rpattern", cond_skip_url_rpattern, FALSE, CL0 | CL2}, {CONDT_TAG_PATTERN, "-tag_pattern", cond_tag_pattern, TRUE, CL0}, {CONDT_TAG_RPATTERN, "-tag_rpattern", cond_tag_rpattern, TRUE, CL0}, {CONDT_USER_CONDITION, "-user_condition", cond_user_condition, FALSE, CL1 | CL3}, }; static const struct cond_type_info_t *cond_type_info_find(char *name) { int i; for(i = 0; i < NUM_ELEM(cond_type_info); i++) { if(!strcasecmp(cond_type_info[i].name, name)) return &(cond_type_info[i]); } return NULL; } int url_append_one_condition(char *name, url * urlp, cond_info_t * condp) { const struct cond_type_info_t *cond; if((cond = cond_type_info_find(name))) { condp->reason = cond->type; return (cond->cond_func(urlp, condp) == TRUE); } else return -1; } #define DLMSG(i) \ { \ char *urlstr = url_to_urlstr(urlp, FALSE); \ DEBUG_LIMITS("Failed URL condition (%s) -> %s\n", cond_type_info[i].name, \ urlstr); \ _free(urlstr); \ condp->reason = cond_type_info[i].type; \ } #ifdef HAVE_REGEX static int url_append_condition_patterns_default(url * urlp, cond_info_t * condp) { int pm1, pm2, pm3, pm4; pm1 = cond_pattern(urlp, condp); pm3 = cond_rpattern(urlp, condp); if(priv_cfg.condition.pattern && priv_cfg.condition.rpattern) { if(!pm1 && !pm3) { if(!pm1) { DLMSG(CONDT_PATTERN); } else { DLMSG(CONDT_RPATTERN); } return FALSE; } } else if(priv_cfg.condition.pattern) { if(!pm1) { DLMSG(CONDT_PATTERN); return FALSE; } } else if(priv_cfg.condition.rpattern) { if(!pm3) { DLMSG(CONDT_RPATTERN); return FALSE; } } pm2 = cond_skip_pattern(urlp, condp); pm4 = cond_skip_rpattern(urlp, condp); if(priv_cfg.condition.skip_pattern && priv_cfg.condition.rskip_pattern) { if(!pm2 && !pm4) { if(!pm2) { DLMSG(CONDT_SKIP_PATTERN); } else { DLMSG(CONDT_SKIP_RPATTERN); } return FALSE; } } else if(priv_cfg.condition.skip_pattern) { if(!pm2) { DLMSG(CONDT_SKIP_PATTERN); return FALSE; } } else if(priv_cfg.condition.rskip_pattern) { if(!pm4) { DLMSG(CONDT_SKIP_RPATTERN); return FALSE; } } pm1 = cond_url_pattern(urlp, condp); pm3 = cond_url_rpattern(urlp, condp); if(priv_cfg.condition.url_pattern && priv_cfg.condition.rurl_pattern) { if(!pm1 && !pm3) { if(!pm1) { DLMSG(CONDT_URL_PATTERN); } else { DLMSG(CONDT_URL_RPATTERN); } return FALSE; } } else if(priv_cfg.condition.url_pattern) { if(!pm1) { DLMSG(CONDT_URL_PATTERN); return FALSE; } } else if(priv_cfg.condition.rurl_pattern) { if(!pm3) { DLMSG(CONDT_URL_RPATTERN); return FALSE; } } pm2 = cond_skip_url_pattern(urlp, condp); pm4 = cond_skip_url_rpattern(urlp, condp); if(priv_cfg.condition.skip_url_pattern && priv_cfg.condition.rskip_url_pattern) { if(!pm2 && !pm4) { if(!pm2) { DLMSG(CONDT_SKIP_URL_PATTERN); } else { DLMSG(CONDT_SKIP_URL_RPATTERN); } return FALSE; } } else if(priv_cfg.condition.skip_url_pattern) { if(!pm2) { DLMSG(CONDT_SKIP_URL_PATTERN); return FALSE; } } else if(priv_cfg.condition.rskip_url_pattern) { if(!pm4) { DLMSG(CONDT_SKIP_URL_RPATTERN); return FALSE; } } return TRUE; } #else static int url_append_condition_patterns_default(url * urlp, cond_info_t * condp) { int pm1; pm1 = cond_pattern(urlp, condp); if(cfg.condition.pattern && !pm1) { DLMSG(CONDT_PATTERN); return FALSE; } pm1 = cond_skip_pattern(urlp, condp); if(cfg.condition.skip_pattern && !pm1) { DLMSG(CONDT_SKIP_PATTERN); return FALSE; } pm1 = cond_url_pattern(urlp, condp); if(cfg.condition.url_pattern && !pm1) { DLMSG(CONDT_URL_PATTERN); return FALSE; } pm1 = cond_skip_url_pattern(urlp, condp); if(cfg.condition.skip_url_pattern && !pm1) { DLMSG(CONDT_SKIP_URL_PATTERN); return FALSE; } return TRUE; } #endif /********************************************************/ /* check wheter URL match given limiting conditions */ /* following default pavuk rules */ /********************************************************/ static int url_append_condition_default(url * urlp, cond_info_t * condp) { int i; int level; level = (1 << condp->level); if(!cfg.condition.limit_inlines && (urlp->status & URL_INLINE_OBJ)) return TRUE; for(i = 0; i < NUM_ELEM(cond_type_info); i++) { if(cond_type_info[i].standard && (cond_type_info[i].level & level) && !cond_type_info[i].cond_func(urlp, condp)) { DLMSG(i); return FALSE; } } if((cond_type_info[CONDT_PATTERN].level & level)) { if(!url_append_condition_patterns_default(urlp, condp)) return FALSE; } if((cond_type_info[CONDT_USER_CONDITION].level & level)) { if(!cond_user_condition(urlp, condp)) { DLMSG(CONDT_USER_CONDITION); return FALSE; } } return TRUE; } /********************************************************/ /* check wheter URL match given limiting conditions */ /********************************************************/ int url_append_condition(url * urlp, cond_info_t * condp) { #ifdef HAVE_MOZJS int rv; if(!cond_unsupported(urlp, condp)) return FALSE; rv = pjs_run_cond_check_func(urlp, condp); return (rv < 0) ? url_append_condition_default(urlp, condp) : rv; #else return url_append_condition_default(urlp, condp); #endif } /********************************************************/ /* check wheter site is from one of domains from aray */ /********************************************************/ static bool_t domain_condition(char *site, char **l) { char **p = l; int sl = strlen(site); while(*p) { int dl = strlen(*p); if(dl <= sl) { if(!strcasecmp(*p, site + sl - dl)) return TRUE; } p++; } return FALSE; } /********************************************************/ /* check wheter up have suffix sfx */ /********************************************************/ static bool_t cmp_sfx(char *up, char *sfx) { char *pom = NULL; int nlen, slen; int rv; slen = strlen(sfx); nlen = strlen(up); if(nlen < slen) return FALSE; rv = (!strcmp(sfx, up + nlen - slen)); _free(pom); return rv; } /********************************************************/ /* check wheter url have match one of sufixes from aray */ /********************************************************/ static bool_t sfx_condition(url * urlr, char **l) { char **pp = l; char *p = url_get_full_path(urlr); int rv = FALSE; while(*pp) { if(cmp_sfx(p, *pp)) { rv = TRUE; break; } pp++; } _free(p); return rv; } /********************************************************/ /* check wheter url path have one of prefixes from */ /* priv_cfg.condition.dir_prefix */ /********************************************************/ static bool_t prefix_condition(url * urlr, char **l) { char **pp = l; char *p = url_get_full_path(urlr); int rv = FALSE; while(*pp) { if(!strncmp(*pp, p, strlen(*pp))) { rv = TRUE; break; } pp++; } _free(p); return rv; } /********************************************************/ /* check wheter string is mattached by at least one */ /* wildcard pattern from list */ /********************************************************/ static bool_t cmp_pattern(char *str, char **pattern) { char **pp; for(pp = pattern; pp && *pp; pp++) { if(!fnmatch(*pp, str, 0)) return FALSE; } return (pattern != NULL); } static bool_t cmp_dlpattern(char *str, dllist * pattern) { for(; pattern; pattern = pattern->next) { if(!fnmatch((char *) pattern->data, str, 0)) return FALSE; } return (pattern != NULL); } static char **str_list_to_array(dllist * sl) { char **rv; int i; rv = _malloc(sizeof(char *) * (dllist_count(sl) + 1)); for(i = 0; sl; i++, sl = sl->next) rv[i] = (char *)sl->data; rv[i] = NULL; return rv; } #ifdef HAVE_REGEX /********************************************************/ /* check wheter string is mattached by at least one */ /* regular pattern from list */ /********************************************************/ static bool_t cmp_rpattern(char *str, dllist * pattern) { dllist *pp; for(pp = pattern; pp; pp = pp->next) { if(re_pmatch((re_entry *) pp->data, str)) { return FALSE; } } return (pattern != NULL); } static dllist *str_list_to_re_list(dllist * sl) { dllist *rv = NULL; for(; sl; sl = sl->next) { re_entry *re = re_make((char *) sl->data); if(re) rv = dllist_append(rv, (dllist_t)re); } return rv; } /********************************************************/ /* check wheter site of URL matches one of listed IP */ /* adress regular patterns */ /* */ /* TRUE = match */ /* FALSE = don't match */ /* -1 = error resolving hostname */ /********************************************************/ static int check_ip_list(url * urlp, dllist * iplist) { int retv = -1; char *site = url_get_site(urlp); if(site && iplist) { char *ip = NULL; int rv, f; int is_valid = TRUE; char raddr[64]; _h_errno_ = 0; memset(&raddr, '\0', sizeof(raddr)); if(dns_gethostbyname(site, &rv, raddr, &f)) is_valid = FALSE; #ifdef HAVE_INET6 if(is_valid) { char buf[64]; inet_ntop(f, raddr, buf, sizeof(buf)); ip = tl_strdup(buf); } #else if(is_valid) { struct in_addr ia; memcpy(&ia, raddr, TL_MIN(rv, sizeof(ia))); LOCK_INETNTOA; ip = tl_strdup(inet_ntoa(ia)); UNLOCK_INETNTOA; } #endif if(is_valid) retv = !cmp_rpattern(ip, iplist); _free(ip); } return retv; } #endif /********************************************************/ /* below are functions for implementing particular */ /* limiting options */ /********************************************************/ static int cond_unsupported(url * urlp, cond_info_t * condp) { /* 0 - file x 1 - directory x 2 - CSO index x 3 - error 4 - macbinhex x 5 - dosbin x 6 - uuencoded x 7 - index 8 - telnet 9 - bin x + - redundant server T - t3270 g - GIF x I - image x h - HTML x i - info w - WWW address s - sound x : - image x ; - movie x < - sound x */ if((urlp->type == URLT_GOPHER) && strchr("0124569gIhs:;<", urlp->p.gopher.selector[0])) return TRUE; return prottable[urlp->type].supported; } static int cond_lmax(url * urlp, cond_info_t * condp) { if(condp->params) { int n = _atoi((char *) condp->params->data); return (urlp->level - ((urlp->status & URL_INLINE_OBJ) ? 1 : 0)) <= n; } else if(cfg.condition.max_levels) return (urlp->level - ((urlp->status & URL_INLINE_OBJ) ? 1 : 0)) <= cfg.condition.max_levels; else return TRUE; } static int cond_dmax(url * urlp, cond_info_t * condp) { int n; if(condp->params) n = _atoi((char *) condp->params->data); else n = cfg.condition.max_documents; if(n) return !((!condp->urlnr && (cfg.total_cnt + 1) > n) || (condp->urlnr && condp->urlnr > n)); else return TRUE; } static int cond_noftp(url * urlp, cond_info_t * condp) { return cfg.condition.ftp ? TRUE : (urlp->type != URLT_FTP); } static int cond_nhttp(url * urlp, cond_info_t * condp) { return cfg.condition.http ? TRUE : (urlp->type != URLT_HTTP); } static int cond_nossl(url * urlp, cond_info_t * condp) { #ifdef USE_SSL return cfg.condition.https ? TRUE : (urlp->type != URLT_HTTPS); #else return TRUE; #endif } static int cond_nogopher(url * urlp, cond_info_t * condp) { return cfg.condition.gopher ? TRUE : (urlp->type != URLT_GOPHER); } static int cond_noftps(url * urlp, cond_info_t * condp) { #ifdef USE_SSL return cfg.condition.ftps ? TRUE : (urlp->type != URLT_FTPS); #else return TRUE; #endif } static int cond_nocgi(url * urlp, cond_info_t * condp) { if((urlp->type == URLT_HTTP || urlp->type == URLT_HTTPS) && !cfg.condition.cgi) return (urlp->p.http.searchstr == NULL); else return TRUE; } static int cond_asite(url * urlp, cond_info_t * condp) { char *site = url_get_site(urlp); if(!site) return TRUE; if(condp->params) return is_in_dllist(site, condp->params); else if(priv_cfg.condition.sites && priv_cfg.condition.sites[0] && site && priv_cfg.condition.allow_site) return is_in_list(site, priv_cfg.condition.sites); else return TRUE; } static int cond_dsite(url * urlp, cond_info_t * condp) { char *site = url_get_site(urlp); if(!site) return TRUE; if(condp->params) return !is_in_dllist(site, condp->params); if(priv_cfg.condition.sites && priv_cfg.condition.sites[0] && site && !priv_cfg.condition.allow_site) return !is_in_list(site, priv_cfg.condition.sites); else return TRUE; } static int cond_adomain(url * urlp, cond_info_t * condp) { char *site = url_get_site(urlp); if(!site) return TRUE; if(condp->params) { char **sa = str_list_to_array(condp->params); int rv = domain_condition(site, sa); _free(sa); return rv; } else if(priv_cfg.condition.domains && priv_cfg.condition.domains[0] && site && priv_cfg.condition.allow_domain) return domain_condition(site, priv_cfg.condition.domains); else return TRUE; } static int cond_ddomain(url * urlp, cond_info_t * condp) { char *site = url_get_site(urlp); if(!site) return TRUE; if(condp->params) { char **sa = str_list_to_array(condp->params); int rv = !domain_condition(site, sa); _free(sa); return rv; } else if(priv_cfg.condition.domains && priv_cfg.condition.domains[0] && site && !priv_cfg.condition.allow_domain) return !domain_condition(site, priv_cfg.condition.domains); else return TRUE; } static int cond_aprefix(url * urlp, cond_info_t * condp) { if(condp->params) { char **sa = str_list_to_array(condp->params); int rv = prefix_condition(urlp, sa); _free(sa); return rv; } else if(priv_cfg.condition.dir_prefix && priv_cfg.condition.dir_prefix[0] && (urlp->type != URLT_FILE) && priv_cfg.condition.allow_prefix) return prefix_condition(urlp, priv_cfg.condition.dir_prefix); else return TRUE; } static int cond_dprefix(url * urlp, cond_info_t * condp) { if(condp->params) { char **sa = str_list_to_array(condp->params); int rv = !prefix_condition(urlp, sa); _free(sa); return rv; } else if(priv_cfg.condition.dir_prefix && priv_cfg.condition.dir_prefix[0] && (urlp->type != URLT_FILE) && !priv_cfg.condition.allow_prefix) return !prefix_condition(urlp, priv_cfg.condition.dir_prefix); else return TRUE; } static int cond_asfx(url * urlp, cond_info_t * condp) { if(condp->params) { char **sa = str_list_to_array(condp->params); int rv = sfx_condition(urlp, sa); _free(sa); return rv; } else if(priv_cfg.condition.sufix && priv_cfg.condition.sufix[0] && (urlp->type != URLT_FILE) && priv_cfg.condition.allow_sufix) return sfx_condition(urlp, priv_cfg.condition.sufix); else return TRUE; } static int cond_dsfx(url * urlp, cond_info_t * condp) { if(condp->params) { char **sa = str_list_to_array(condp->params); int rv = !sfx_condition(urlp, sa); _free(sa); return rv; } else if(priv_cfg.condition.sufix && priv_cfg.condition.sufix[0] && (urlp->type != URLT_FILE) && !priv_cfg.condition.allow_sufix) return !sfx_condition(urlp, priv_cfg.condition.sufix); else return TRUE; } static int cond_pattern(url * urlp, cond_info_t * condp) { int rv = TRUE; if(condp->params) { char *p = url_get_full_path(urlp); rv = !cmp_dlpattern(p, condp->params); _free(p); } else if(urlp->type != URLT_FILE && priv_cfg.condition.pattern) { char *p = url_get_full_path(urlp); rv = !cmp_pattern(p, priv_cfg.condition.pattern); _free(p); } return rv; } static int cond_rpattern(url * urlp, cond_info_t * condp) { int rv = TRUE; #ifdef HAVE_REGEX if(condp->params) { dllist *pl = str_list_to_re_list(condp->params); if(pl) { char *p = url_get_full_path(urlp); rv = !cmp_rpattern(p, pl); _free(p); } for(; pl; pl = dllist_remove_entry(pl, pl)) re_free((re_entry *) pl->data); } else if(urlp->type != URLT_FILE && priv_cfg.condition.rpattern) { char *p = url_get_full_path(urlp); rv = !cmp_rpattern(p, priv_cfg.condition.rpattern); _free(p); } #endif return rv; } static int cond_skip_pattern(url * urlp, cond_info_t * condp) { int rv = TRUE; if(condp->params) { char *p = url_get_full_path(urlp); rv = cmp_dlpattern(p, condp->params); _free(p); } else if(urlp->type != URLT_FILE && priv_cfg.condition.skip_pattern) { char *p = url_get_full_path(urlp); rv = cmp_pattern(p, priv_cfg.condition.skip_pattern); _free(p); } return rv; } static int cond_skip_rpattern(url * urlp, cond_info_t * condp) { int rv = TRUE; #ifdef HAVE_REGEX if(condp->params) { dllist *pl = str_list_to_re_list(condp->params); if(pl) { char *p = url_get_full_path(urlp); rv = cmp_rpattern(p, pl); _free(p); } for(; pl; pl = dllist_remove_entry(pl, pl)) re_free((re_entry *) pl->data); } else if(urlp->type != URLT_FILE && priv_cfg.condition.rskip_pattern) { char *p = url_get_full_path(urlp); rv = cmp_rpattern(p, priv_cfg.condition.rskip_pattern); _free(p); } #endif return rv; } static int cond_url_pattern(url * urlp, cond_info_t * condp) { int rv = TRUE; if(condp->params) { char *p = url_to_urlstr(urlp, FALSE); rv = !cmp_dlpattern(p, condp->params); _free(p); } else if(urlp->type != URLT_FILE && priv_cfg.condition.url_pattern) { char *p = url_to_urlstr(urlp, FALSE); rv = !cmp_pattern(p, priv_cfg.condition.url_pattern); _free(p); } return rv; } static int cond_url_rpattern(url * urlp, cond_info_t * condp) { int rv = TRUE; #ifdef HAVE_REGEX if(condp->params) { dllist *pl = str_list_to_re_list(condp->params); if(pl) { char *p = url_to_urlstr(urlp, FALSE); rv = !cmp_rpattern(p, pl); _free(p); } for(; pl; pl = dllist_remove_entry(pl, pl)) re_free((re_entry *) pl->data); } else if(urlp->type != URLT_FILE && priv_cfg.condition.rurl_pattern) { char *p = url_to_urlstr(urlp, FALSE); rv = !cmp_rpattern(p, priv_cfg.condition.rurl_pattern); _free(p); } #endif return rv; } static int cond_skip_url_pattern(url * urlp, cond_info_t * condp) { int rv = TRUE; if(condp->params) { char *p = url_to_urlstr(urlp, FALSE); rv = cmp_dlpattern(p, condp->params); _free(p); } else if(urlp->type != URLT_FILE && priv_cfg.condition.skip_url_pattern) { char *p = url_to_urlstr(urlp, FALSE); rv = cmp_pattern(p, priv_cfg.condition.skip_url_pattern); _free(p); } return rv; } static int cond_skip_url_rpattern(url * urlp, cond_info_t * condp) { int rv = TRUE; #ifdef HAVE_REGEX if(condp->params) { dllist *pl = str_list_to_re_list(condp->params); if(pl) { char *p = url_to_urlstr(urlp, FALSE); rv = cmp_rpattern(p, pl); _free(p); } for(; pl; pl = dllist_remove_entry(pl, pl)) re_free((re_entry *) pl->data); } else if(urlp->type != URLT_FILE && priv_cfg.condition.rskip_url_pattern) { char *p = url_to_urlstr(urlp, FALSE); rv = cmp_rpattern(p, priv_cfg.condition.rskip_url_pattern); _free(p); } #endif return rv; } static int cond_dont_leave_site(url * urlp, cond_info_t * condp) { url *gparent = urlp; if(urlp->type != URLT_FILE && cfg.condition.dont_leave_site) { bool_t isgp = FALSE; while(!isgp) { #ifdef HAVE_MT url *ogp = gparent; #endif if(gparent->status & URL_ISSTARTING) { isgp = TRUE; break; } LOCK_URL(ogp); if(gparent->parent_url) gparent = (url *) gparent->parent_url->data; else isgp = TRUE; UNLOCK_URL(ogp); } return url_is_same_site(urlp, gparent); } else return TRUE; } static int cond_dont_leave_dir(url * urlp, cond_info_t * condp) { if(urlp->type != URLT_FILE && cfg.condition.dont_leave_dir) { url *gparent = urlp; char *p1, *p2, *p; int len = 0; bool_t isgp = FALSE; while(!isgp) { #ifdef HAVE_MT url *ogp = gparent; #endif if(gparent->status & URL_ISSTARTING) { isgp = TRUE; break; } LOCK_URL(ogp); if(gparent->parent_url) gparent = (url *) gparent->parent_url->data; else isgp = TRUE; UNLOCK_URL(ogp); } p1 = url_get_path(urlp); p2 = url_get_path(gparent); p = strrchr(p2, '/'); if(p) len = p - p2; return url_is_same_site(urlp, gparent) && !strncmp(p1, p2, len); } else return TRUE; } static int cond_user_condition(url * urlp, cond_info_t * condp) { return priv_cfg.condition.uexit ? uexit_condition(urlp, NULL, 0L) : TRUE; } static int cond_aip_pattern(url * urlp, cond_info_t * condp) { #ifdef HAVE_REGEX if(condp->params) { int rv = TRUE; dllist *p = str_list_to_re_list(condp->params); if(p) rv = check_ip_list(urlp, p); for(; p; p = dllist_remove_entry(p, p)) re_free((re_entry *) p->data); return rv; } else if(priv_cfg.condition.aip) return check_ip_list(urlp, priv_cfg.condition.aip); #endif return TRUE; } static int cond_dip_pattern(url * urlp, cond_info_t * condp) { #ifdef HAVE_REGEX if(condp->params) { int rv = TRUE; dllist *p = str_list_to_re_list(condp->params); if(p) { rv = check_ip_list(urlp, p); if(rv == 0 || rv == -1) rv = TRUE; else rv = FALSE; } for(; p; p = dllist_remove_entry(p, p)) re_free((re_entry *) p->data); return rv; } else if(priv_cfg.condition.skipip) { int rv = check_ip_list(urlp, priv_cfg.condition.skipip); if(rv == 0 || rv == -1) return TRUE; else return FALSE; } #endif return TRUE; } static int cond_site_level(url * urlp, cond_info_t * condp) { int lvl; if(condp->params) lvl = _atoi((char *) condp->params->data); else lvl = cfg.condition.site_level; if(urlp->type != URLT_FILE && lvl) { url *curl = urlp; url *parent; int level = 0; int slevel = 0; LOCK_URL(urlp); if(urlp->parent_url) parent = (url *) urlp->parent_url->data; else parent = NULL; UNLOCK_URL(urlp); while(parent) { if(parent->status & URL_ISSTARTING) break; if((curl->type != parent->type) || (url_get_port(curl) != url_get_port(parent)) || strcmp(url_get_site(curl), url_get_site(parent))) { if(!curl->moved_to || slevel) level++; slevel = 0; } else if(!curl->moved_to) slevel++; curl = parent; LOCK_URL(curl); if(urlp->parent_url) parent = (url *) parent->parent_url->data; else parent = NULL; UNLOCK_URL(curl); } return level <= lvl; } else return TRUE; } static int cond_dont_leave_site_enter_dir(url * urlp, cond_info_t * condp) { if(urlp->type != URLT_FILE && cfg.condition.dont_leave_site_dir) { url *gparent = urlp; char *p1, *p2, *p; int len = 0; bool_t isgp = FALSE; while(!isgp) { url *ogp = gparent; if(gparent->status & URL_ISSTARTING) { isgp = TRUE; } else { LOCK_URL(ogp); if(gparent->parent_url) gparent = (url *) gparent->parent_url->data; else isgp = TRUE; UNLOCK_URL(ogp); } if((ogp->type != gparent->type) || (url_get_port(urlp) != url_get_port(gparent)) || strcmp(url_get_site(urlp), url_get_site(gparent))) { gparent = ogp; break; } } while(gparent->moved_to) { if(gparent == urlp) break; gparent = gparent->moved_to; } if(!isgp) { p1 = url_get_path(urlp); p2 = url_get_path(gparent); p = strrchr(p2, '/'); if(p) len = p - p2; return url_is_same_site(urlp, gparent) && !strncmp(p1, p2, len); } } return TRUE; } static int cond_leave_level(url * urlp, cond_info_t * condp) { int lvl; if(condp->params) lvl = _atoi((char *) condp->params->data); else lvl = cfg.condition.leave_level; if(urlp->type != URLT_FILE && lvl) { url *gparent = urlp; url *pomurl = urlp; int level = -1; bool_t isgp = FALSE; while(!isgp) { #ifdef HAVE_MT url *ogp = gparent; #endif if(gparent->status & URL_ISSTARTING) { isgp = TRUE; break; } LOCK_URL(ogp); if(gparent->parent_url) gparent = (url *) gparent->parent_url->data; else isgp = TRUE; UNLOCK_URL(ogp); } while(pomurl) { #ifdef HAVE_MT url *tempurl = pomurl; #endif if((pomurl->type == gparent->type) && (url_get_port(pomurl) == url_get_port(gparent)) && !strcmp(url_get_site(pomurl), url_get_site(gparent))) { break; } if(!pomurl->moved_to) level++; if((level - ((urlp->status & URL_INLINE_OBJ) ? 1 : 0)) >= lvl) { return FALSE; } if(pomurl->status & URL_ISSTARTING) { pomurl = NULL; } else { LOCK_URL(tempurl); if(pomurl->parent_url) pomurl = (url *) pomurl->parent_url->data; else pomurl = NULL; UNLOCK_URL(tempurl); } } } return TRUE; } static int cond_aport(url * urlp, cond_info_t * condp) { long port = url_get_port(urlp); if(condp->params) { char pom[10]; sprintf(pom, "%ld", port); return !dllist_find2(condp->params, (dllist_t)pom, str_comp_func); } else if(priv_cfg.condition.ports && port && priv_cfg.condition.allow_ports) { return (dllist_find(priv_cfg.condition.ports, (dllist_t) port) ? TRUE : FALSE); } else return TRUE; } static int cond_dport(url * urlp, cond_info_t * condp) { long port = url_get_port(urlp); if(condp->params) { char pom[10]; sprintf(pom, "%ld", port); return !dllist_find2(condp->params, (dllist_t)pom, str_comp_func); } else if(priv_cfg.condition.ports && port && !priv_cfg.condition.allow_ports) { return ((!dllist_find(priv_cfg.condition.ports, (dllist_t) port)) ? TRUE : FALSE); } else return TRUE; } static int cond_max_size(url * urlp, cond_info_t * condp) { if(condp->params) { int n = _atoi((char *) condp->params->data); if(n) return (n >= condp->size); } else if(cfg.condition.max_size && condp->size) return (cfg.condition.max_size >= condp->size); return TRUE; } static int cond_min_size(url * urlp, cond_info_t * condp) { if(condp->params) { int n = _atoi((char *) condp->params->data); if(n) return (n <= condp->size); } else if(cfg.condition.min_size && condp->size) return (cfg.condition.min_size <= condp->size); return TRUE; } static int cond_amime_type(url * urlp, cond_info_t * condp) { if(condp->params) { return !is_in_pattern_dllist(condp->mimet, condp->params); } else if(priv_cfg.condition.mime && priv_cfg.condition.allow_mime && condp->mimet) { return is_in_pattern_list(condp->mimet, priv_cfg.condition.mime); } else return TRUE; } static int cond_dmime_type(url * urlp, cond_info_t * condp) { if(condp->params) { return !is_in_pattern_dllist(condp->mimet, condp->params); } else if(priv_cfg.condition.mime && !priv_cfg.condition.allow_mime && condp->mimet) { return !is_in_pattern_list(condp->mimet, priv_cfg.condition.mime); } else return TRUE; } static int cond_newer_than(url * urlp, cond_info_t * condp) { if(condp->params) { time_t t = _atoi((char *) condp->params->data); if(t) return difftime(condp->time, t) <= 0; } else if(cfg.condition.etime && condp->time) return difftime(condp->time, cfg.condition.etime) <= 0; return TRUE; } static int cond_older_than(url * urlp, cond_info_t * condp) { if(condp->params) { time_t t = _atoi((char *) condp->params->data); if(t) return difftime(condp->time, t) >= 0; } else if(cfg.condition.etime && condp->time) return difftime(condp->time, cfg.condition.btime) >= 0; return TRUE; } static int cond_tag_pattern(url * urlp, cond_info_t * condp) { tag_pattern_t *tp; char *p = NULL; if(!condp->tag || !condp->attrib) return TRUE; if(condp->params) { if(dllist_count(condp->params) != 3) return FALSE; else tp = tag_pattern_new(TAGP_WC, (char *) dllist_nth(condp->params, 0), (char *) dllist_nth(condp->params, 1), (char *) dllist_nth(condp->params, 2)); if(tp) { int r; p = url_to_urlstr(urlp, FALSE); r = tag_pattern_match(tp, condp->tag, condp->attrib, p); tag_pattern_free(tp); _free(p); return r; } else return FALSE; } else { dllist *ptr; if(priv_cfg.condition.tag_patterns) p = url_to_urlstr(urlp, FALSE); for(ptr = priv_cfg.condition.tag_patterns; ptr; ptr = ptr->next) { tp = (tag_pattern_t *) ptr->data; if(tag_pattern_match(tp, condp->tag, condp->attrib, p)) { _free(p); return TRUE; } } _free(p); return priv_cfg.condition.tag_patterns == NULL; } } static int cond_tag_rpattern(url * urlp, cond_info_t * condp) { if(!condp->tag || !condp->attrib) return TRUE; if(condp->params) { tag_pattern_t *tp; if(dllist_count(condp->params) != 3) return FALSE; else tp = tag_pattern_new(TAGP_RE, (char *) dllist_nth(condp->params, 0), (char *) dllist_nth(condp->params, 1), (char *) dllist_nth(condp->params, 2)); if(tp) { int r; char *p; p = url_to_urlstr(urlp, FALSE); r = tag_pattern_match(tp, condp->tag, condp->attrib, p); tag_pattern_free(tp); _free(p); return r; } else return FALSE; } else { /* always return TRUE standard is handled by cond_tag_pattern */ return TRUE; } } pavuk-0.9.35/src/condition.h0000644000175000001440000001300710142077736012611 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _condition_h_ #define _condition_h_ #include #include "url.h" #include "tools.h" #include "dllist.h" typedef struct { dllist *ports; /*** list of allowed/denied ports ***/ bool_t allow_ports; bool_t limit_inlines; /*** == FALSE used to disable checking of limiting rules on inline objects ***/ int leave_level; /*** how many levels leave from starting site ***/ bool_t dont_leave_site_dir; /*** don't leave dir which we entered first on this site ***/ bool_t dont_leave_site; /*** dont leave site of starting URL ***/ bool_t dont_leave_dir; /*** dont leave directory of starting URL ***/ time_t btime; /*** file never than ***/ time_t etime; /*** file older than ***/ int max_size; /*** maximal size of document to exclude big documents ***/ int min_size; /*** minimal size of document to exclude small documents ***/ int max_levels; /*** obmedzenie na maximalnu hlbku vnorenia sa do stromu - 0 neobmedzene ****/ int max_documents; /*** obmedzenie na maximalny pocet dokumentov - 0 neobmedzene ***/ bool_t cgi; /*** povolenie / zakazanie prenosu dokumentov enerovanych cez CGI ***/ char **sites; /*** zoznam povolenych / zakazanych serverov ***/ bool_t allow_site; /*** indikacia ci v "sites" su povolene alebo zakazane servery ***/ char **sufix; /*** zoznam povolenych / zakazanych pripon dokumentov ***/ bool_t allow_sufix; /*** indikacia ci v zozname "sufix" su povolene alebo zakazane pripony ***/ char **dir_prefix; /*** zozname povolenych / zakazanych prefixov dokumentov ***/ bool_t allow_prefix; /*** indikacia ci v zozname "dir_prefix" su povolene alebo zakazane prefixy ***/ char **domains; /*** list of domains to check in URLs ***/ bool_t allow_domain; /*** domains in list are allowed ***/ char **mime; /*** list of mime types to check ***/ bool_t allow_mime; /*** allowed/disallowed mime types ***/ bool_t ftp; /*** povolenie / zakazanie protokolu FTP ***/ bool_t ftpdir; /*** povolenie / zakazanie rekurzivneho prenosu FTP adresarov ***/ bool_t http; /*** povolenie / zakazanie protokolu HTTP ***/ bool_t gopher; /*** povolenie / zakazanie protokolu Gopher ***/ bool_t allow_robots; /*** povolenie / zakazanie pouzitia suborov "robots.txt" pri kontrole pristupu k dokumentu ***/ char **pattern; /*** fnmatch patterns for matching document names ***/ char **url_pattern; /*** fnmatch patterns for matching url ***/ char **skip_pattern; /*** fnmatch patterns to exclude matching document names ***/ char **skip_url_pattern; /*** fnmatch patterns to exclude matching url ***/ char *uexit; /*** user exit script ***/ char *follow_cmd; /*** user exit script to allow/disallow following links of current doc ***/ int site_level; /*** maximum site level to leave ***/ #ifdef USE_SSL bool_t https; /*** povolenie / zakazanie protokolu HTTPS (HTTP nad SSL) ***/ bool_t ftps; /*** povolenie / zakazanie protokolu FTPS ***/ bool_t verify; /*** Verify SSL certs */ #endif #ifdef HAVE_REGEX dllist *rpattern; /*** regular patterns for matching document names ***/ dllist *rurl_pattern; /*** regular patterns for matching url ***/ dllist *rskip_pattern; /*** regular patterns to exclude matching document names ***/ dllist *rskip_url_pattern; /*** regular patterns to exclude matching url ***/ dllist *aip; /*** allowed IP addresses ***/ dllist *skipip; /*** disalloved IP addreses ***/ #endif dllist *tag_patterns; /*** tag attrib url (RE,WC) patterns ***/ } cond; typedef enum { CONDT_UNSUP, CONDT_NOFTP, CONDT_NOHTTP, CONDT_NOSSL, CONDT_NOGOPHER, CONDT_NOFTPS, CONDT_NOCGI, CONDT_LMAX, CONDT_DMAX, CONDT_ASITE, CONDT_DSITE, CONDT_ADOMAIN, CONDT_DDOMAIN, CONDT_APREFIX, CONDT_DPREFIX, CONDT_ASFX, CONDT_DSFX, CONDT_DONT_LEAVE_SITE, CONDT_DONT_LEAVE_DIR, CONDT_SITE_LEVEL, CONDT_LEAVE_LEVEL, CONDT_DONT_LEAVE_SITE_ENTER_DIR, CONDT_APORTS, CONDT_DPORTS, CONDT_MAX_SIZE, CONDT_MIN_SIZE, CONDT_AMIME_TYPE, CONDT_DMIME_TYPE, CONDT_NEWER_THAN, CONDT_OLDER_THAN, CONDT_AIP_PATTERN, CONDT_DIP_PATTERN, CONDT_PATTERN, CONDT_RPATTERN, CONDT_SKIP_PATTERN, CONDT_SKIP_RPATTERN, CONDT_URL_PATTERN, CONDT_URL_RPATTERN, CONDT_SKIP_URL_PATTERN, CONDT_SKIP_URL_RPATTERN, CONDT_TAG_PATTERN, CONDT_TAG_RPATTERN, CONDT_USER_CONDITION } cond_type_t; typedef struct { int level; int urlnr; int size; time_t time; char *mimet; char *full_tag; dllist *params; cond_type_t reason; char *html_doc; int html_doc_offset; char *tag; char *attrib; } cond_info_t; extern int url_append_condition(url *, cond_info_t *); extern int url_append_one_condition(char *, url *, cond_info_t *); #endif pavuk-0.9.35/src/mozcache.c0000644000175000001440000002631210325720560012403 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include "dlhash.h" #include "dlhash_tools.h" #include "mozcache.h" #include "tools.h" typedef int int32__t; typedef unsigned int uint32__t; #ifdef HAVE_BDB_18x #ifdef HAVE_DB1_H #include #elif defined(HAVE_DB185_H) #include #elif defined(HAVE_DB2_DB185_H) #include #elif defined(HAVE_DB3_DB185_H) #include #elif defined(HAVE_DB4_DB185_H) #include #else #include #endif #ifdef WORDS_BIGENDIAN #define COPY_INT32(i1,i2) \ ((char *)(i1))[0] = ((char *)(i2))[3]; \ ((char *)(i1))[1] = ((char *)(i2))[2]; \ ((char *)(i1))[2] = ((char *)(i2))[1]; \ ((char *)(i1))[3] = ((char *)(i2))[0]; #else #define COPY_INT32(i1,i2) *((int32__t *) i1) = *((int32__t *) i2); #endif #endif /* HAVE_BDB_18x */ static char *moz_cache_filename = NULL; static time_t moz_cache_db_modtime = 0L; static dlhash *moz_hash = NULL; typedef struct { char *urlstr; char *filename; } moz_pair_t; static moz_pair_t *moz_pair_new(char *f, char *u) { moz_pair_t *rv = NULL; if(f && u) { rv = _malloc(sizeof(moz_pair_t)); rv->filename = tl_strdup(f); rv->urlstr = tl_strdup(u); } return rv; } static void moz_pair_free(dllist_t dl) { moz_pair_t * mp = (moz_pair_t *)dl; _free(mp->filename); _free(mp->urlstr); _free(mp); } static dllist_t moz_pair_get_urlstr(dllist_t mp) { return (dllist_t) ((moz_pair_t *)mp)->urlstr; } #ifdef HAVE_BDB_18x static char *moz_old_cache_get_filename(DBT * data) { char *tmp = data->data; uint32__t size; COPY_INT32(&size, tmp); if(size != data->size || data->size < 20) return NULL; tmp += sizeof(uint32__t) /* size */ + sizeof(int32__t); /* recordid */ COPY_INT32(&size, tmp); tmp += sizeof(uint32__t) + size; /* key_len + key */ COPY_INT32(&size, tmp); tmp += sizeof(uint32__t) + size; /* meta_len + meta */ tmp += sizeof(uint32__t); /* filename_len */ return tmp; } static char *moz_old_cache_get_urlstr(DBT * data) { char *tmp = data->data; uint32__t size; COPY_INT32(&size, tmp); if(size != data->size || data->size < 20) return NULL; tmp += sizeof(uint32__t) /* size */ + sizeof(int32__t); /* recordid */ COPY_INT32(&size, tmp); tmp += sizeof(uint32__t); /* key_len */ return tmp; } static void moz_old_cache_read_db(char *dirname) { bool_t reopen = FALSE; HASHINFO hash_info = { 4 * 1024, /* bucket size */ 0, /* fill factor */ 0, /* number of elements */ 96 * 1024, /* bytes to cache */ 0, /* hash function */ 0 }; /* byte order */ char pom[PATH_MAX]; if(dirname) { struct stat estat; snprintf(pom, sizeof(pom), "%s/cache.db", dirname); if(!moz_cache_filename || strcmp(pom, moz_cache_filename)) reopen = TRUE; if(!reopen && !stat(pom, &estat) && estat.st_mtime != moz_cache_db_modtime) reopen = TRUE; } if(reopen || !dirname) { _free(moz_cache_filename); moz_cache_db_modtime = 0L; dlhash_empty(moz_hash); } if(reopen) { struct stat estat; DB *moz_cache_db; DBT key, data; moz_cache_db = dbopen(pom, O_RDONLY, 0600, DB_HASH, &hash_info); if(!moz_cache_db) { xprintf(0, gettext("Unable to open Mozilla cache index - %s\n"), pom); } else { if(!stat(pom, &estat)) moz_cache_db_modtime = estat.st_mtime; _free(moz_cache_filename); moz_cache_filename = tl_strdup(pom); while(!moz_cache_db->seq(moz_cache_db, &key, &data, R_NEXT)) { moz_pair_t *mp; mp = moz_pair_new(moz_old_cache_get_filename(&data), moz_old_cache_get_urlstr(&data)); if(mp) dlhash_insert(moz_hash, mp); } moz_cache_db->close(moz_cache_db); } } } #endif /* HAVE_BDB_18x */ #define MOZ2_REC_PER_BUCKET 256 #define MOZ2_REC_SIZE 16 #define MOZ2_BITMAP_SIZE 4096 typedef struct { uint32__t version; int32__t size; int32__t nentries; uint32__t dirty; } moz2_cache_map_head; typedef struct { uint32__t hashnr; uint32__t erank; uint32__t data_loc; uint32__t meta_loc; } moz2_cache_map_record; typedef struct { uint32__t version; uint32__t meta_loc; uint32__t fetch_count; uint32__t last_fetched; uint32__t last_modified; uint32__t expiration; uint32__t data_size; uint32__t key_size; uint32__t meta_size; } moz2_cache_record_header; static char *moz2_db_dir = NULL; static struct { enum { MOZ2_MAP_FILE, MOZ2_B1_FILE, MOZ2_B2_FILE, MOZ2_B3_FILE, MOZ2_LAST } id; int fd; int block_size; char *name; } moz2_files[] = { {MOZ2_MAP_FILE, -1, 0, "_CACHE_MAP_"}, {MOZ2_B1_FILE, -1, 256, "_CACHE_001_"}, {MOZ2_B2_FILE, -1, 1024, "_CACHE_002_"}, {MOZ2_B3_FILE, -1, 4096, "_CACHE_003_"} }; #define MOZ2_LOC_INITED(v) ((v) & 0x80000000) #define MOZ2_LOC_FILE(v) (((v) & 0x30000000) >> 28) #define MOZ2_LOC_BLOCKS(v) (((v) & 0x03000000) >> 24) #define MOZ2_LOC_BLOCKNR(v) ((v) & 0x00FFFFFF) #define MOZ2_LOC_GENERATION(v) ((v) & 0xFF) static int moz2_open_db(char *name) { char *p; char pom[PATH_MAX]; int i, len, rv = 0; if(!name) return -1; strncpy(pom, name, PATH_MAX); pom[PATH_MAX - 1] = '\0'; p = pom + strlen(pom); len = PATH_MAX - strlen(pom); for(i = 0; i < MOZ2_LAST; i++) { strncpy(p, moz2_files[i].name, len); pom[PATH_MAX - 1] = '\0'; moz2_files[i].fd = open(pom, O_RDWR); if(moz2_files[i].fd < 0) moz2_files[i].fd = open(pom, O_RDONLY); if(moz2_files[i].fd < 0) { xprintf(1, gettext("Error opening cache index file %s\n")); xperror(pom); rv = -1; break; } } if(!rv) { char bucket[MOZ2_REC_SIZE * MOZ2_REC_PER_BUCKET]; moz2_cache_map_head *cmh; cmh = (moz2_cache_map_head *) bucket; if((read(moz2_files[MOZ2_MAP_FILE].fd, bucket, sizeof(bucket)) != sizeof(bucket)) || (ntohl(cmh->version) != 0x00010003)) { xprintf(1, gettext("Mozilla new cache map file format not recognized")); rv = -1; } } if(!rv) { *p = '\0'; moz2_db_dir = tl_strdup(pom); } return rv; } static void moz2_close_db(void) { int i; for(i = 0; i < MOZ2_LAST; i++) { if(moz2_files[i].fd >= 0) { close(moz2_files[i].fd); moz2_files[i].fd = -1; } } } static char *moz2_get_filename(int type, uint32__t hashnr, uint32__t generation) { char pom[PATH_MAX]; snprintf(pom, sizeof(pom), "%s%08X%c%02X", moz2_db_dir, hashnr, (char) type, generation); return tl_strdup(pom); } static char *load_blocks(int id, uint32__t blocknr, uint32__t blocks) { int ofs, sz; char *rv; ofs = MOZ2_BITMAP_SIZE + moz2_files[id].block_size * blocknr; if(lseek(moz2_files[id].fd, ofs, SEEK_SET) != ofs) { xprintf(1, gettext("Corrupted Mozilla cache blockfile!")); return NULL; } sz = moz2_files[id].block_size * (blocks + 1); rv = _malloc(sz); if(read(moz2_files[id].fd, rv, sz) != sz) { xprintf(1, gettext("Corrupted Mozilla cache blockfile!")); _free(rv); return NULL; } return rv; } static moz2_cache_record_header *moz2_load_record_data(moz2_cache_map_record * rec) { char *p; if(!MOZ2_LOC_FILE(rec->meta_loc)) { /* load from file */ char *fn; fn = moz2_get_filename('m', rec->hashnr, MOZ2_LOC_GENERATION(rec->meta_loc)); p = tl_load_text_file(fn); _free(fn); } else { p = load_blocks(moz2_files[MOZ2_LOC_FILE(rec->meta_loc)].id, MOZ2_LOC_BLOCKNR(rec->meta_loc), MOZ2_LOC_BLOCKS(rec->meta_loc)); } return (moz2_cache_record_header *) p; } static moz_pair_t *moz2_compose_record(moz2_cache_map_record * rec, moz2_cache_record_header * meta) { moz_pair_t *ret = NULL; char *u, *p; p = moz2_get_filename('d', rec->hashnr, MOZ2_LOC_GENERATION(rec->data_loc)); u = (char *) meta; u += sizeof(moz2_cache_record_header); u = strchr(u, ':') + 1; ret = moz_pair_new(p, u); return ret; } static moz_pair_t *moz2_get_record_info(moz2_cache_map_record * rec) { moz2_cache_record_header *meta; moz_pair_t *rv = NULL; if(!rec->hashnr) return NULL; if(!MOZ2_LOC_INITED(rec->data_loc) || !MOZ2_LOC_INITED(rec->meta_loc)) return NULL; /* don't know how to handle data file in block files */ if(MOZ2_LOC_FILE(rec->data_loc)) return NULL; meta = moz2_load_record_data(rec); if(meta && (ntohl(meta->version) == 0x00010003)) rv = moz2_compose_record(rec, meta); _free(meta); return rv; } static void moz2_read_db(char *dbname) { int l, i; char bucket[MOZ2_REC_SIZE * MOZ2_REC_PER_BUCKET]; char *p; if(moz2_open_db(dbname)) return; lseek(moz2_files[MOZ2_MAP_FILE].fd, sizeof(bucket), SEEK_SET); for(;;) { l = read(moz2_files[MOZ2_MAP_FILE].fd, bucket, sizeof(bucket)); if(!l) break; if(l != sizeof(bucket)) { xprintf(1, gettext("Corrupted Mozilla cache map file!")); break; } p = bucket; for(i = 0; i < MOZ2_REC_PER_BUCKET; i++, p += MOZ2_REC_SIZE) { moz2_cache_map_record *cmr = (moz2_cache_map_record *) p; moz_pair_t *mp; mp = moz2_get_record_info(cmr); if(mp) dlhash_insert(moz_hash, (dllist_t) mp); } } moz2_close_db(); } static void moz_new_cache_read_db(char *dirname) { bool_t reopen = FALSE; char pom[PATH_MAX]; if(dirname) { struct stat estat; if(!moz_cache_filename || strcmp(dirname, moz_cache_filename)) reopen = TRUE; snprintf(pom, sizeof(pom), "%s/_CACHE_MAP_", dirname); if(!reopen && !stat(pom, &estat) && estat.st_mtime != moz_cache_db_modtime) { reopen = TRUE; moz_cache_db_modtime = estat.st_mtime; } } if(reopen || !dirname) { _free(moz_cache_filename); moz_cache_db_modtime = 0L; dlhash_empty(moz_hash); } if(reopen) { moz2_read_db(dirname); } } static void moz_cache_read_db(char *dirname) { char pom[PATH_MAX]; if(!moz_hash) { moz_hash = dlhash_new(256, moz_pair_get_urlstr, str_hash_func, str_comp_func); dlhash_set_free_func(moz_hash, moz_pair_free, NULL); } snprintf(pom, sizeof(pom), "%s/_CACHE_MAP_", dirname); #ifdef HAVE_BDB_18x if(access(pom, F_OK)) moz_old_cache_read_db(dirname); else #endif /* HAVE_BDB_18x */ moz_new_cache_read_db(dirname); } char *moz_cache_find_localname(char *urlstr) { char *retv = NULL; LOCK_NSCACHE; moz_cache_read_db(priv_cfg.moz_cache_dir); if(moz_hash) { moz_pair_t *mp; mp = (moz_pair_t *) dlhash_find_by_key(moz_hash, (dllist_t) urlstr); if(mp) retv = tl_strdup(mp->filename); } UNLOCK_NSCACHE; return retv; } pavuk-0.9.35/src/mozcache.h0000644000175000001440000000075110142077741012412 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _mozcache_h_ #define _mozcache_h_ extern char *moz_cache_find_localname(char *); #endif pavuk-0.9.35/src/myssl.h0000644000175000001440000000206110142077741011764 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _myssl_h_ #define _myssl_h_ #ifdef USE_SSL #include "bufio.h" #include "doc.h" #include "myssl_openssl.h" #include "myssl_nss.h" extern void my_ssl_init(void); extern void my_ssl_init_once(void); extern void my_ssl_init_start(void); extern void my_ssl_cleanup(void); extern bufio *my_ssl_do_connect(doc *, bufio *, ssl_connection *); extern int my_ssl_read(ssl_connection *, char *, size_t); extern int my_ssl_write(ssl_connection *, char *, size_t); extern void my_ssl_connection_close(ssl_connection *); extern void my_ssl_connection_destroy(ssl_connection *); extern int my_ssl_data_pending(ssl_connection *); extern void my_ssl_print_last_error(void); #endif #endif pavuk-0.9.35/src/gtkmulticol.c0000644000175000001440000002155010142077737013157 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef GTK_FACE /* GTK - The GIMP Toolkit * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * GtkMultiCol Copyright (C) 1998 Stefan Ondrejicka * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "gtkmulticol.h" #include #include enum { ARG_0, ARG_VSPACING, ARG_HSPACING }; static void gtk_multicol_class_init(GtkMultiColClass * klass); static void gtk_multicol_init(GtkMultiCol * multicol); static void gtk_multicol_get_arg(GtkObject * object, GtkArg * arg, guint arg_id); static void gtk_multicol_set_arg(GtkObject * object, GtkArg * arg, guint arg_id); static void gtk_multicol_size_request(GtkWidget * widget, GtkRequisition * requisition); static void gtk_multicol_size_allocate(GtkWidget * widget, GtkAllocation * allocation); guint gtk_multicol_get_type() { static guint multicol_type = 0; if(!multicol_type) { GtkTypeInfo multicol_info = { "GtkMultiCol", sizeof(GtkMultiCol), sizeof(GtkMultiColClass), (GtkClassInitFunc) gtk_multicol_class_init, (GtkObjectInitFunc) gtk_multicol_init, NULL, NULL, }; multicol_type = gtk_type_unique(gtk_box_get_type(), &multicol_info); } return multicol_type; } static void gtk_multicol_class_init(GtkMultiColClass * class) { GtkWidgetClass *widget_class; GtkObjectClass *object_class; widget_class = (GtkWidgetClass *) class; object_class = (GtkObjectClass *) class; widget_class->size_request = gtk_multicol_size_request; widget_class->size_allocate = gtk_multicol_size_allocate; gtk_object_add_arg_type("GtkBox::hspacing", GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_HSPACING); gtk_object_add_arg_type("GtkBox::vspacing", GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_VSPACING); #if defined(GTK_CHECK_VERSION) #if GTK_CHECK_VERSION(1 , 2 , 0) object_class->set_arg = gtk_multicol_set_arg; object_class->get_arg = gtk_multicol_get_arg; #endif #endif } static void gtk_multicol_init(GtkMultiCol * multicol) { multicol->vspacing = 3; multicol->hspacing = 3; } static void gtk_multicol_get_arg(GtkObject * object, GtkArg * arg, guint arg_id) { GtkMultiCol *multicol = GTK_MULTICOL(object); switch (arg_id) { case ARG_VSPACING: GTK_VALUE_INT(*arg) = multicol->vspacing; break; case ARG_HSPACING: GTK_VALUE_INT(*arg) = multicol->hspacing; break; default: arg->type = GTK_TYPE_INVALID; break; } } static void gtk_multicol_set_arg(GtkObject * object, GtkArg * arg, guint arg_id) { GtkMultiCol *multicol = GTK_MULTICOL(object); switch (arg_id) { case ARG_VSPACING: gtk_multicol_set_spacing(multicol, multicol->hspacing, GTK_VALUE_INT(*arg)); break; case ARG_HSPACING: gtk_multicol_set_spacing(multicol, GTK_VALUE_INT(*arg), multicol->vspacing); break; default: arg->type = GTK_TYPE_INVALID; break; } } GtkWidget *gtk_multicol_new(gint nrows) { GtkMultiCol *multicol; multicol = gtk_type_new(gtk_multicol_get_type()); multicol->nrows = nrows; return GTK_WIDGET(multicol); } static void gtk_multicol_size_request(GtkWidget * widget, GtkRequisition * requisition) { GtkBox *box; GtkMultiCol *multicol; GtkBoxChild *child; GList *children; gint maxwidth, maxheight, nm, ncol, diff, diffp; g_return_if_fail(widget != NULL); g_return_if_fail(GTK_IS_MULTICOL(widget)); g_return_if_fail(requisition != NULL); box = GTK_BOX(widget); multicol = GTK_MULTICOL(widget); maxwidth = 0; maxheight = 0; nm = 0; children = box->children; while(children) { child = children->data; children = children->next; if(GTK_WIDGET_VISIBLE(child->widget)) { gtk_widget_size_request(child->widget, &child->widget->requisition); maxwidth = MAX(maxwidth, (child->widget->requisition.width + child->padding * 2)); maxheight = MAX(maxheight, child->widget->requisition.height + child->padding * 2); nm++; } } if(multicol->nrows) ncol = nm / multicol->nrows + (nm % multicol->nrows != 0); else { ncol = 0; diff = 20000000; do { diffp = diff; ncol++; diff = abs((nm / ncol + (nm % ncol != 0)) * maxheight - ncol * maxwidth); } while(diffp > diff); ncol--; } if(nm) { requisition->width = ncol * (maxwidth + multicol->hspacing) + multicol->hspacing; requisition->height = (nm / ncol + (nm % ncol != 0)) * (maxheight + multicol->vspacing) + multicol->vspacing; } requisition->width += GTK_CONTAINER(box)->border_width * 2; requisition->height += GTK_CONTAINER(box)->border_width * 2; } static void gtk_multicol_size_allocate(GtkWidget * widget, GtkAllocation * allocation) { GtkBox *box; GtkMultiCol *multicol; GtkBoxChild *child; GList *children; GList *pchildren; GtkAllocation child_allocation; gint maxwidth, maxheight, nrow, nm, col, row; g_return_if_fail(widget != NULL); g_return_if_fail(GTK_IS_MULTICOL(widget)); g_return_if_fail(allocation != NULL); box = GTK_BOX(widget); multicol = GTK_MULTICOL(widget); widget->allocation = *allocation; maxwidth = 0; maxheight = 0; nm = 0; children = box->children; while(children) { child = children->data; children = children->next; if(GTK_WIDGET_VISIBLE(child->widget)) { gtk_widget_size_request(child->widget, &child->widget->requisition); maxwidth = MAX(maxwidth, (child->widget->requisition.width + child->padding * 2)); maxheight = MAX(maxheight, child->widget->requisition.height + child->padding * 2); nm++; } } children = box->children; if(nm) { if(multicol->nrows) nrow = multicol->nrows; else nrow = (allocation->height - multicol->hspacing) / (maxheight + multicol->hspacing); col = 0; row = 0; pchildren = children; while(children) { child = children->data; pchildren = children; children = children->next; if((child->pack == GTK_PACK_START) && GTK_WIDGET_VISIBLE(child->widget)) { child_allocation.x = allocation->x + multicol->hspacing + col * (maxwidth + multicol->hspacing); child_allocation.y = allocation->y + multicol->vspacing + row * (maxheight + multicol->vspacing); child_allocation.width = maxwidth; child_allocation.height = maxheight; gtk_widget_size_allocate(child->widget, &child_allocation); row++; if(row >= nrow) { row = 0; col++; } } } children = pchildren; while(children) { child = children->data; children = children->prev; if((child->pack == GTK_PACK_END) && GTK_WIDGET_VISIBLE(child->widget)) { child_allocation.x = allocation->x + multicol->hspacing + col * (maxwidth + multicol->hspacing); child_allocation.y = allocation->y + multicol->vspacing + row * (maxheight + multicol->vspacing); child_allocation.width = maxwidth; child_allocation.height = maxheight; gtk_widget_size_allocate(child->widget, &child_allocation); row++; if(row >= nrow) { row = 0; col++; } } } } } void gtk_multicol_set_spacing(GtkMultiCol * multicol, gint hspacing, gint vspacing) { if(multicol->hspacing == hspacing && multicol->vspacing == vspacing) return; multicol->hspacing = hspacing; multicol->vspacing = vspacing; if(GTK_WIDGET_VISIBLE(multicol)) gtk_widget_queue_resize(GTK_WIDGET(multicol)); } void gtk_multicol_set_number_of_rows(GtkMultiCol * multicol, gint nrows) { if(multicol->nrows == nrows) return; multicol->nrows = nrows; if(GTK_WIDGET_VISIBLE(multicol)) gtk_widget_queue_resize(GTK_WIDGET(multicol)); } #endif /*** GTK_FACE ***/ pavuk-0.9.35/src/gtkmulticol.h0000644000175000001440000000274710142077737013173 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef __GTK_MULTICOL_H__ #define __GTK_MULTICOL_H__ #include #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define GTK_MULTICOL(obj) GTK_CHECK_CAST (obj, gtk_multicol_get_type (), GtkMultiCol) #define GTK_MULTICOL_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_multicol_get_type (), GtkMultiColClass) #define GTK_IS_MULTICOL(obj) GTK_CHECK_TYPE (obj, gtk_multicol_get_type ()) typedef struct _GtkMultiCol GtkMultiCol; typedef struct _GtkMultiColClass GtkMultiColClass; struct _GtkMultiCol { GtkBox box; gint nrows; gint vspacing; gint hspacing; }; struct _GtkMultiColClass { GtkBoxClass parent_class; }; guint gtk_multicol_get_type(void); GtkWidget *gtk_multicol_new(gint nrows); void gtk_multicol_set_number_of_rows(GtkMultiCol * multicol, gint nrows); void gtk_multicol_set_spacing(GtkMultiCol * multicol, gint hspacing, gint vspacing); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __GTK_MULTICOL_H__ */ pavuk-0.9.35/src/gprop.c0000644000175000001440000001066710325717610011751 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef GTK_FACE #include #include #include #include "dllist.h" #include "gprop.h" #include "tools.h" static struct { char *id; int type; } typetab[] = { {"str.", GPROP_STR}, {"int.", GPROP_INT}, {"bool.", GPROP_BOOL} }; static dllist *gprop_list = NULL; gprop *gprop_parse(char *str) { gprop *gp; int i; char *p = NULL; gp = _malloc(sizeof(gprop)); for(i = 0; i < (sizeof(typetab) / sizeof(typetab[0])); i++) { if(!strncmp(str, typetab[i].id, strlen(typetab[i].id))) { gp->type = typetab[i].type; p = str + strlen(typetab[i].id); } } if(!p) { _free(gp); return NULL; } i = strcspn(p, "="); if(!i) { _free(gp); return NULL; } gp->name = tl_strndup(p, i); p += i; p += strspn(p, "="); switch (gp->type) { case GPROP_STR: gp->value = g_strdup(p); break; case GPROP_INT: gp->value = (void *) atoi(p); break; case GPROP_BOOL: gp->value = (void *) (!strcmp(p, "true")); break; } return gp; } char *gprop_dump(gprop * gp) { static char pom[256]; char *p = pom; switch (gp->type) { case GPROP_STR: snprintf(pom, sizeof(pom), "%s%s=%s", typetab[gp->type].id, gp->name, (char *) gp->value); break; case GPROP_INT: snprintf(pom, sizeof(pom), "%s%s=%d", typetab[gp->type].id, gp->name, (int) gp->value); break; case GPROP_BOOL: snprintf(pom, sizeof(pom), "%s%s=%s", typetab[gp->type].id, gp->name, gp->value ? "true" : "false"); break; } return p; } void gprop_add(gprop * gp) { gprop_list = dllist_append(gprop_list, (dllist_t) gp); } static int gprop_find(dllist_t gp, dllist_t name) { return !strcmp((char *) name, ((gprop *)gp)->name); } void gprop_set_str(char *name, char *value) { dllist *node; gprop *gp; node = dllist_find2(gprop_list, (dllist_t) name, gprop_find); if(node) { gp = (gprop *) node->data; g_free(gp->value); gp->type = GPROP_STR; gp->value = tl_strdup(value); } else { gp = _malloc(sizeof(gprop)); gp->type = GPROP_STR; gp->name = tl_strdup(name); gp->value = tl_strdup(value); gprop_list = dllist_append(gprop_list, (dllist_t) gp); } } void gprop_set_int(char *name, int value) { dllist *node; gprop *gp; node = dllist_find2(gprop_list, (dllist_t) name, gprop_find); if(node) { gp = (gprop *) node->data; gp->type = GPROP_INT; gp->value = (void *) value; } else { gp = _malloc(sizeof(gprop)); gp->type = GPROP_INT; gp->name = tl_strdup(name); gp->value = (void *) value; gprop_list = dllist_append(gprop_list, (dllist_t) gp); } } void gprop_set_bool_t(char *name, int value) { dllist *node; gprop *gp; node = dllist_find2(gprop_list, (dllist_t) name, gprop_find); if(node) { gp = (gprop *) node->data; gp->type = GPROP_BOOL; gp->value = (void *) value; } else { gp = _malloc(sizeof(gprop)); gp->type = GPROP_BOOL; gp->name = tl_strdup(name); gp->value = (void *) value; gprop_list = dllist_append(gprop_list, (dllist_t) gp); } } int gprop_get_str(char *name, char **valp) { dllist *node; gprop *gp; node = dllist_find2(gprop_list, (dllist_t) name, gprop_find); if(node) { gp = (gprop *) node->data; *valp = (char *) gp->value; } return (node != NULL); } int gprop_get_int(char *name, int *valp) { dllist *node; gprop *gp; node = dllist_find2(gprop_list, (dllist_t) name, gprop_find); if(node) { gp = (gprop *) node->data; *valp = (int) gp->value; } return (node != NULL); } int gprop_get_bool_t(char *name, int *valp) { dllist *node; gprop *gp; node = dllist_find2(gprop_list, (dllist_t) name, gprop_find); if(node) { gp = (gprop *) node->data; *valp = (int) gp->value; } return (node != NULL); } void gprop_save(FILE * f) { dllist *lst = gprop_list; char *p; while(lst) { p = (char *) gprop_dump((gprop *) lst->data); if(p) { fprintf(f, "Property: %s\n", p); } lst = lst->next; } } #endif pavuk-0.9.35/src/gprop.h0000644000175000001440000000170510142077737011755 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _gprop_h_ #define _gprop_h_ #include typedef struct { enum { GPROP_STR, GPROP_INT, GPROP_BOOL } type; char *name; void *value; } gprop; extern gprop *gprop_parse(char *); extern char *gprop_dump(gprop *); extern void gprop_add(gprop *); extern void gprop_set_str(char *, char *); extern void gprop_set_int(char *, int); extern void gprop_set_bool_t(char *, int); extern int gprop_get_str(char *, char **); extern int gprop_get_int(char *, int *); extern int gprop_get_bool_t(char *, int *); extern void gprop_save(FILE *); #endif pavuk-0.9.35/src/options.h0000644000175000001440000026072610303352514012317 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ static double _default_maxrate = 0.0f; static double _default_minrate = 0.0f; static double _default_timeout = 0.0f; static double _default_maxtime = 0.0f; static cfg_param_t params[] = { #ifdef GTK_FACE /* internal gtk options which we must accept without complaining */ /* because we are going to parse commandline before gtk_init() */ { NULL, "-gtk-module", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-g-fatal-warnings", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 0, NULL, NULL, NULL, NULL }, { NULL, "-gtk-debug", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-gtk-no-debug", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-gdk-debug", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-gdk-no-debug", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-display", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-sync", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 0, NULL, NULL, NULL, NULL }, { NULL, "-no-xshm", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 0, NULL, NULL, NULL, NULL }, { NULL, "-name", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-class", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-gxid_host", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-gxid_port", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-xim-preedit", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, { NULL, "-xim-status", NULL, PARAM_FUNC | PARAM_FOREIGN, (void *) 1, NULL, NULL, NULL, NULL }, #endif { "v", "-version", NULL, PARAM_FUNC, (void *) 0, cfg_version_info, NULL, NULL, gettext_nop( "\t-v - print version number\n") }, { "h", "-help", NULL, PARAM_FUNC, (void *) 0, usage, NULL, NULL, gettext_nop( "\t-h - help\n") }, { "X", "-with_gui", NULL, #ifndef I_FACE PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.xi_face, NULL, NULL, gettext_nop( "\t-X - start GUI interface\n") #endif }, { "x", NULL, NULL, #ifndef I_FACE PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.xi_face, NULL, NULL, NULL #endif }, { NULL, "-runX", "RunX:", #ifndef I_FACE PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.run_iface, NULL, NULL, gettext_nop( "\t-runX - after start of GUI interface, immediately\n" "\t start processing of entered URLs\n") #endif }, { NULL, "-prefs", "UsePreferences:", #ifndef I_FACE PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.use_prefs, NULL, NULL, gettext_nop( "\t-prefs/-noprefs - load preferences from ~/.pavuk_prefs file\n") #endif }, { NULL, "-noprefs", NULL, #ifndef I_FACE PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) FALSE, &cfg.use_prefs, NULL, NULL, NULL #endif }, #ifdef I_FACE #ifdef GTK_FACE { NULL, NULL, "BtnConfigureIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_cfg, NULL, NULL, NULL }, { NULL, NULL, "BtnConfigureIcon_s:", PARAM_STR, (void *) NULL, &cfg.bt_icon_cfg_s, NULL, NULL, NULL }, { NULL, NULL, "BtnLimitsIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_lim, NULL, NULL, NULL }, { NULL, NULL, "BtnLimitsIcon_s:", PARAM_STR, (void *) NULL, &cfg.bt_icon_lim_s, NULL, NULL, NULL }, { NULL, NULL, "BtnGoBgIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_gobg, NULL, NULL, NULL }, { NULL, NULL, "BtnGoBgIcon_s:", PARAM_STR, (void *) NULL, &cfg.bt_icon_gobg_s, NULL, NULL, NULL }, { NULL, NULL, "BtnRestartIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_rest, NULL, NULL, NULL }, { NULL, NULL, "BtnRestartIcon_s:", PARAM_STR, (void *) NULL, &cfg.bt_icon_rest_s, NULL, NULL, NULL }, { NULL, NULL, "BtnContinueIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_cont, NULL, NULL, NULL }, { NULL, NULL, "BtnContinueIcon_s:", PARAM_STR, (void *) NULL, &cfg.bt_icon_cont_s, NULL, NULL, NULL }, { NULL, NULL, "BtnStopIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_stop, NULL, NULL, NULL }, { NULL, NULL, "BtnStopIcon_s:", PARAM_STR, (void *) NULL, &cfg.bt_icon_stop_s, NULL, NULL, NULL }, { NULL, NULL, "BtnBreakIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_brk, NULL, NULL, NULL }, { NULL, NULL, "BtnBreakIcon_s:", PARAM_STR, (void *) NULL, &cfg.bt_icon_brk_s, NULL, NULL, NULL }, { NULL, NULL, "BtnExitIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_exit, NULL, NULL, NULL }, { NULL, NULL, "BtnExitIcon_s:", PARAM_STR, (void *) NULL, &cfg.bt_icon_exit_s, NULL, NULL, NULL }, { NULL, NULL, "BtnMinimizeIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_mtb, NULL, NULL, NULL }, { NULL, NULL, "BtnMaximizeIcon:", PARAM_STR, (void *) NULL, &cfg.bt_icon_mtb_s, NULL, NULL, NULL }, #endif #endif { NULL, "-progress", "ShowProgress:", PARAM_PBOOL, (void *) FALSE, &cfg.progres, NULL, NULL, gettext_nop( "\t-progress/-noprogress\n" "\t - show retrieving progress while running on terminal\n") }, { NULL, "-noprogress", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.progres, NULL, NULL, NULL }, { "l", "-lmax", "MaxLevel:", PARAM_NUM, (void *) 0, &cfg.condition.max_levels, NULL, NULL, gettext_nop( "\t-lmax $nr - allowed depth of tree\n") }, { NULL, "-dmax", "MaxDocs:", PARAM_NUM, (void *) 0, &cfg.condition.max_documents, NULL, NULL, gettext_nop( "\t-dmax $nr - maximal number of downloaded documents\n") }, { NULL, "-sleep", "SleepBetween:", PARAM_NUM, (void *) 0, &cfg.sleep, NULL, NULL, gettext_nop( "\t-sleep $nr - sleep for $nr seconds between transfers,\n" "\t default 0 seconds\n") }, { NULL, "-rsleep", "RandomizeSleepPeriod:", PARAM_PBOOL, (void *) FALSE, &cfg.rsleep, NULL, NULL, gettext_nop( "\t-rsleep/-norsleep - randomize sleeping time between transfers\n" "\t from 0 to -sleep time\n") }, { NULL, "-norsleep", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.rsleep, NULL, NULL, NULL }, { NULL, "-retry", "MaxRetry:", PARAM_NUM, (void *) 2, &cfg.nretry, NULL, NULL, gettext_nop( "\t-retry $nr - number of retries if anything failed\n") }, { NULL, "-nregets", "MaxRegets:", PARAM_NUM, (void *) 2, &cfg.nreget, NULL, NULL, gettext_nop( "\t-nregets $nr - max number of regets on single file, default 2\n") }, { NULL, "-nredirs", "MaxRedirections:", PARAM_NUM, (void *) 5, &cfg.nredir, NULL, NULL, gettext_nop( "\t-nredirs $nr - max number of followed HTTP redirections, default 5\n") }, { NULL, "-timeout", "CommTimeout:", PARAM_DOUBLE, (void *) &_default_timeout, &cfg.ctimeout, NULL, NULL, gettext_nop( "\t-timeout $nr - timeout for network communications (min).\n" "\t 0 == no timeout, default = 0\n") }, { NULL, "-rollback", "RegetRollbackAmount:", PARAM_NUM, (void *) 0, &cfg.rollback, NULL, NULL, gettext_nop( "\t-rollback $nr - number of bytes to discard (counted from end\n" "\t of file) if regetting, default 0\n") }, { NULL, "-ddays", "DocExpiration:", PARAM_NUM, (void *) 0, &cfg.ddays, NULL, NULL, gettext_nop( "\t-ddays $nr - number of days since last access when document is\n" "\t checked in sync mode\n") }, { NULL, "-nocache", "UseCache:", PARAM_NBOOL, (void *) TRUE, &cfg.cache, NULL, NULL, gettext_nop( "\t-nocache/-cache - disallow caching of HTTP documents (on proxy cache)\n") }, { NULL, "-cache", NULL, PARAM_PBOOL, (void *) TRUE, &cfg.cache, NULL, NULL, NULL }, { NULL, "-noRobots", "UseRobots:", PARAM_NBOOL, (void *) TRUE, &cfg.condition.allow_robots, NULL, NULL, gettext_nop( "\t-noRobots/-Robots - care about \"robots.txt\" file ?\n") }, { NULL, "-Robots", NULL, PARAM_PBOOL, (void *) TRUE, &cfg.condition.allow_robots, NULL, NULL, NULL }, { NULL, "-noFTP", "AllowFTP:", PARAM_NBOOL, (void *) TRUE, &cfg.condition.ftp, NULL, NULL, gettext_nop( "\t-noFTP/-FTP - don't download FTP files\n") }, { NULL, "-FTP", NULL, PARAM_PBOOL, (void *) TRUE, &cfg.condition.ftp, NULL, NULL, NULL }, { NULL, "-noHTTP", "AllowHTTP:", PARAM_NBOOL, (void *) TRUE, &cfg.condition.http, NULL, NULL, gettext_nop( "\t-noHTTP/-HTTP - don't download HTTP files\n") }, { NULL, "-HTTP", NULL, PARAM_PBOOL, (void *) TRUE, &cfg.condition.http, NULL, NULL, NULL }, { NULL, "-noSSL", "AllowSSL:", #ifndef USE_SSL PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) TRUE, &cfg.condition.https, NULL, NULL, gettext_nop( "\t-noSSL/-SSL - don't download (HTTPS) SSL files\n") #endif }, { NULL, "-SSL", NULL, #ifndef USE_SSL PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) TRUE, &cfg.condition.https, NULL, NULL, NULL #endif }, { NULL, "-verify", "Verify CERT:", #ifndef USE_SSL PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) TRUE, &cfg.condition.verify, NULL, NULL, gettext_nop( "\t-noverify/-verify - don't verify SSL certificates\n") #endif }, { NULL, "-noverify", "Verify CERT:", #ifndef USE_SSL PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) TRUE, &cfg.condition.verify, NULL, NULL, gettext_nop( "\t-noverify/-verify - don't verify SSL certificates\n") #endif }, { NULL, "-noFTPS", "AllowFTPS:", #ifndef USE_SSL PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) TRUE, &cfg.condition.ftps, NULL, NULL, gettext_nop( "\t-noFTPS/-FTPS - don't download FTPS files\n") #endif }, { NULL, "-FTPS", NULL, #ifndef USE_SSL PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) TRUE, &cfg.condition.ftps, NULL, NULL, NULL #endif }, { NULL, "-noGopher", "AllowGopher:", PARAM_NBOOL, (void *) TRUE, &cfg.condition.gopher, NULL, NULL, gettext_nop( "\t-noGopher/-Gopher - download Gopher files ?\n") }, { NULL, "-Gopher", NULL, PARAM_PBOOL, (void *) TRUE, &cfg.condition.gopher, NULL, NULL, NULL }, { NULL, "-noCGI", "AllowCGI:", PARAM_NBOOL, (void *) TRUE, &cfg.condition.cgi, NULL, NULL, gettext_nop( "\t-noCGI/-CGI - download parametric CGI pages ?\n") }, { NULL, "-CGI", NULL, PARAM_PBOOL, (void *) TRUE, &cfg.condition.cgi, NULL, NULL, NULL }, { NULL, "-noEnc", "AllowGZEncoding:", PARAM_NBOOL, (void *) TRUE, &cfg.use_enc, NULL, NULL, gettext_nop( "\t-noEnc/-Enc - allow transfer of encoded files ?\n") }, { NULL, "-Enc", NULL, PARAM_PBOOL, (void *) TRUE, &cfg.use_enc, NULL, NULL, NULL }, { NULL, "-noRelocate", "AllowRelocation:", PARAM_NBOOL, (void *) TRUE, &cfg.rewrite_links, NULL, NULL, gettext_nop( "\t-noRelocate/-Relocate\n" "\t - don't rewrite links\n") }, { NULL, "-Relocate", NULL, PARAM_PBOOL, (void *) TRUE, &cfg.rewrite_links, NULL, NULL, NULL }, { NULL, "-FTPhtml", "FTPhtml:", PARAM_PBOOL, (void *) FALSE, &cfg.ftp_html, NULL, NULL, gettext_nop( "\t-FTPhtml/-noFTPhtml\n" "\t - process HTML files downloaded over FTP\n") }, { NULL, "-noFTPhtml", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.ftp_html, NULL, NULL, NULL }, { NULL, "-FTPlist", "FTPListCMD:", PARAM_PBOOL, (void *) FALSE, &cfg.ftp_list, NULL, NULL, gettext_nop( "\t-FTPlist/-noFTPlist\n" "\t - use wide FTP directory listing\n") }, { NULL, "-noFTPlist", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.ftp_list, NULL, NULL, NULL }, { NULL, "-FTPdir", "AllowFTPRecursion:", PARAM_PBOOL, (void *) FALSE, &cfg.condition.ftpdir, NULL, NULL, gettext_nop( "\t-FTPdir/-noFTPdir - recurse FTP directory\n") }, { NULL, "-noFTPdir", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.condition.ftpdir, NULL, NULL, NULL }, { NULL, "-store_index", "StoreDirIndexFile:", PARAM_PBOOL, (void *) TRUE, &cfg.store_index, NULL, NULL, gettext_nop( "\t-store_index/-nostore_index\n" "\t - store directory URLs as index files\n") }, { NULL, "-nostore_index", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.store_index, NULL, NULL, NULL }, { NULL, "-force_reget", "ForceReget:", PARAM_PBOOL, (void *) FALSE, &cfg.freget, NULL, NULL, gettext_nop( "\t-force_reget/-noforce_reget\n" "\t - force reget of whole file when server doesn't\n" "\t support reget\n") }, { NULL, "-noforce_reget", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.freget, NULL, NULL, NULL }, { NULL, "-debug", "Debug:", #ifndef DEBUG PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.debug, NULL, NULL, gettext_nop( "\t-debug - turn on debug mode\n") #endif }, { NULL, "-nodebug", NULL, #ifndef DEBUG PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) FALSE, &cfg.debug, NULL, NULL, NULL #endif }, { NULL, "-debug_level", "DebugLevel:", #ifndef DEBUG PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_DEBUGL, (void *) 0, &cfg.debug_level, NULL, NULL, gettext_nop( "\t-debug_level $l - debug level number, see manual for $l description\n") #endif }, { NULL, "-asite", "AllowedSites:", PARAM_STRLIST, (void *) NULL, &cfg.condition.sites, (void *) TRUE, &cfg.condition.allow_site, gettext_nop( "\t-asite $list - comma-separated list of allowed sites\n") }, { NULL, "-dsite", "DisallowedSites:", PARAM_STRLIST, (void *) NULL, &cfg.condition.sites, (void *) FALSE, &cfg.condition.allow_site, gettext_nop( "\t-dsite $list - comma-separated list of disallowed sites\n") }, { NULL, "-adomain", "AllowedDomains:", PARAM_STRLIST, (void *) NULL, &cfg.condition.domains, (void *) TRUE, &cfg.condition.allow_domain, gettext_nop( "\t-adomain $list - list of allowed domains\n") }, { NULL, "-ddomain", "DisallowedDomains:", PARAM_STRLIST, (void *) NULL, &cfg.condition.domains, (void *) FALSE, &cfg.condition.allow_domain, gettext_nop( "\t-ddomain $list - list of disallowed domains\n") }, { NULL, "-aprefix", "AllowedPrefixes:", PARAM_STRLIST, (void *) NULL, &cfg.condition.dir_prefix, (void *) TRUE, &cfg.condition.allow_prefix, gettext_nop( "\t-aprefix $list - list of allowed directory/file prefixes\n") }, { NULL, "-dprefix", "DisallowedPrefixes:", PARAM_STRLIST, (void *) NULL, &cfg.condition.dir_prefix, (void *) FALSE, &cfg.condition.allow_prefix, gettext_nop( "\t-dprefix $list - list of disallowed directory/file prefixes\n") }, { NULL, "-asfx", "AllowedSuffixes:", PARAM_STRLIST, (void *) NULL, &cfg.condition.sufix, (void *) TRUE, &cfg.condition.allow_sufix, gettext_nop( "\t-asfx $list - list of allowed suffixes\n") }, { NULL, "-dsfx", "DisallowedSuffixes:", PARAM_STRLIST, (void *) NULL, &cfg.condition.sufix, (void *) FALSE, &cfg.condition.allow_sufix, gettext_nop( "\t-dsfx $list - list of disallowed suffixes\n") }, { NULL, "-amimet", "AllowedMIMETypes:", PARAM_STRLIST, (void *) NULL, &cfg.condition.mime, (void *) TRUE, &cfg.condition.allow_mime, gettext_nop( "\t-amimet $list - list of alloved MIME types\n") }, { NULL, "-dmimet", "DisallowedMIMETypes:", PARAM_STRLIST, (void *) NULL, &cfg.condition.mime, (void *) FALSE, &cfg.condition.allow_mime, gettext_nop( "\t-dmimet $list - list of disallowed MIME types\n") }, { NULL, "-alang", "PreferredLanguages:", PARAM_STRLIST, (void *) NULL, &cfg.accept_lang, NULL, NULL, gettext_nop( "\t-alang $list - list of preferred languages (only via HTTP)\n") }, { NULL, "-acharset", "PreferredCharset:", PARAM_STRLIST, (void *) NULL, &cfg.accept_chars, NULL, NULL, gettext_nop( "\t-acharset $list - list of preferred character sets (only via HTTP)\n") }, { NULL, "-scnDir", "ScenarioDirectory:", PARAM_PATH, (void *) NULL, &cfg.scndir, NULL, NULL, gettext_nop( "\t-scndir $dir - directory ,where are stored your scenarios\n" "\t (config files)\n") }, { NULL, "-cdir", "WorkingDir:", PARAM_PATH, (void *) NULL, &cfg.cache_dir, NULL, NULL, gettext_nop( "\t-cdir $dir - directory for storing documents\n") }, { NULL, "-subdir", "WorkingSubDir:", PARAM_PATH, (void *) NULL, &cfg.subdir, NULL, NULL, gettext_nop( "\t-subdir $dir - subdirectory of cdir to operate on\n") }, { NULL, "-scenario", NULL, PARAM_FUNC, (void *) 1, cfg_load_scenario, NULL, NULL, gettext_nop( "\t-scenario $str - name of scenario from scenario directory to load\n" "\t and or run\n") }, { NULL, "-auth_scheme", "HTTPAuthorizationScheme:", PARAM_AUTHSCH, (void *) 2, &cfg.auth_scheme, NULL, NULL, gettext_nop( "\t-auth_scheme 1/2/3 - HTTP authorization scheme 1-user 2-Basic 3-Digest,\n" "\t default 2\n") }, { NULL, "-auth_name", "HTTPAuthorizationName:", PARAM_STR, (void *) NULL, &cfg.name_auth, NULL, NULL, gettext_nop( "\t-auth_name $str - name for Authorization (only via HTTP)\n") }, { NULL, "-auth_passwd", "HTTPAuthorizationPassword:", PARAM_PASS, (void *) NULL, &cfg.passwd_auth, NULL, NULL, gettext_nop( "\t-auth_passwd $str - password for Authorization (only via HTTP)\n") }, { NULL, "-auth_reuse_nonce", "AuthReuseDigestNonce:", PARAM_PBOOL, (void *) FALSE, &cfg.auth_reuse_nonce, NULL, NULL, gettext_nop( "\t-auth_reuse_nonce/-noauth_reuse_nonce\n" "\t - reuse one HTTP digest access authorization\n" "\t nonce for more requests\n") }, { NULL, "-noauth_reuse_nonce", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.auth_reuse_nonce, NULL, NULL, NULL }, { NULL, "-auth_reuse_proxy_nonce", "AuthReuseProxyDigestNonce:", PARAM_PBOOL, (void *) FALSE, &cfg.auth_reuse_proxy_nonce, NULL, NULL, gettext_nop( "\t-auth_reuse_proxy_nonce/-noauth_reuse_proxy_nonce\n" "\t - reuse one HTTP proxy digest access\n" "\t authorization nonce for more requests\n") }, { NULL, "-noauth_reuse_proxy_nonce", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.auth_reuse_proxy_nonce, NULL, NULL, NULL }, { NULL, "-ssl_cert_passwd", "SSLCertPassword:", #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_OPENSSL) PARAM_PASS | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PASS, (void *) NULL, &cfg.ssl_cert_passwd, NULL, NULL, gettext_nop( "\t-ssl_cert_passwd $str\n" "\t - password for SSL certification file\n") #endif }, { NULL, "-ssl_cert_file", "SSLCertFile:", #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_OPENSSL) PARAM_PATH | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PATH, (void *) NULL, &cfg.ssl_cert_file, NULL, NULL, gettext_nop( "\t-ssl_cert_file $str\n" "\t - SSL certification file\n") #endif }, { NULL, "-ssl_key_file", "SSLKeyFile:", #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_OPENSSL) PARAM_PATH | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PATH, (void *) NULL, &cfg.ssl_key_file, NULL, NULL, gettext_nop( "\t-ssl_key_file $str - SSL certification key file\n") #endif }, { NULL, "-ssl_cipher_list", "SSLCipherList:", #ifndef USE_SSL PARAM_STR | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_STR, (void *) NULL, &cfg.ssl_cipher_list, NULL, NULL, gettext_nop( "\t-ssl_cipher_list $str\n" "\t - list of prefered SSL ciphers in SSL communication\n") #endif }, { NULL, "-egd_socket", "EGDSocket:", #ifndef HAVE_RAND_EGD PARAM_STR | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_STR, (void *) NULL, &cfg.egd_socket, NULL, NULL, gettext_nop( "\t-egd_socket $file - path to EGD listening socket\n") #endif }, { NULL, "-from", "EmailAddress:", PARAM_STR, (void *) NULL, &cfg.from, NULL, NULL, gettext_nop( "\t-from $str - e-mail address used for user identification\n") }, { NULL, "-send_from", "SendFromHeader:", PARAM_PBOOL, (void *) FALSE, &cfg.send_from, NULL, NULL, gettext_nop( "\t-send_from/-nosend_from\n" "\t - send From: header in HTTP request with your\n" "\t e-mail address\n") }, { NULL, "-nosend_from", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.send_from, NULL, NULL, NULL }, { NULL, "-identity", "Identity:", PARAM_STR, (void *) NULL, &cfg.identity, NULL, NULL, gettext_nop( "\t-identity $str - contents of User-agent: field in HTTP request\n") }, { NULL, "-pattern", "MatchPattern:", PARAM_STRLIST, (void *) NULL, &cfg.condition.pattern, NULL, NULL, gettext_nop( "\t-pattern $list - list of wildcard patterns for files\n") }, { NULL, "-rpattern", "REMatchPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_RE, (void *) NULL, &cfg.condition.rpattern, NULL, NULL, gettext_nop( "\t-rpattern $re - RE matching pattern for files\n") #endif }, { NULL, "-skip_pattern", "SkipMatchPattern:", PARAM_STRLIST, (void *) NULL, &cfg.condition.skip_pattern, NULL, NULL, gettext_nop( "\t-skip_pattern $list\n" "\t - list of skip wildcard patterns for files\n") }, { NULL, "-skip_rpattern", "SkipREMatchPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_RE, (void *) NULL, &cfg.condition.rskip_pattern, NULL, NULL, gettext_nop( "\t-skip_rpattern $re\n" "\t - skip RE matching pattern for files\n") #endif }, { NULL, "-url_pattern", "URLMatchPattern:", PARAM_STRLIST, (void *) NULL, &cfg.condition.url_pattern, NULL, NULL, gettext_nop( "\t-url_pattern $list - list of wildcard patterns for urls\n") }, { NULL, "-url_rpattern", "URLREMatchPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_RE, (void *) NULL, &cfg.condition.rurl_pattern, NULL, NULL, gettext_nop( "\t-url_rpattern $re - RE matching pattern for urls\n") #endif }, { NULL, "-skip_url_pattern", "SkipURLMatchPattern:", PARAM_STRLIST, (void *) NULL, &cfg.condition.skip_url_pattern, NULL, NULL, gettext_nop( "\t-skip_url_pattern $list\n" "\t - list of wildcard patterns for urls\n") }, { NULL, "-skip_url_rpattern", "SkipURLREMatchPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL, #else PARAM_RE, (void *) NULL, &cfg.condition.rskip_url_pattern, NULL, NULL, gettext_nop( "\t-skip_url_rpattern $re\n" "\t - RE matching patterns for urls\n") #endif }, { NULL, "-mode", "DefaultMode:", PARAM_MODE, (void *) MODE_NORMAL, &cfg.mode, NULL, NULL, gettext_nop( "\t-mode $mode - set operation mode\n" "\t normal - recurse throught WWW (default)\n" "\t linkupdate - update remote links in local tree\n" "\t sync - synchronize local tree with remote WWW\n" "\t servers\n" "\t singlepage - single page with inline objects\n" "\t singlereget - reget file until not whole\n" "\t resumeregets - reget all files which are broken\n" "\t dontstore - transfer documents, but don't store\n" "\t reminder - checks URLs if they are changed\n" "\t ftpdir - list content of FTP directory\n" "\t mirror - make exact copy of remote site\n") }, { NULL, "-ftp_proxy", "FTPProxy:", PARAM_CONN, (void *) NULL, &cfg.ftp_proxy, (void *) DEFAULT_FTP_PROXY_PORT, &cfg.ftp_proxy_port, gettext_nop( "\t-ftp_proxy $site[:$port]\n" "\t - ftp proxy/cache server\n") }, { NULL, "-http_proxy", "HTTPProxy:", PARAM_PROXY, (void *) NULL, &cfg.http_proxy, NULL, NULL, gettext_nop( "\t-http_proxy $site[:$port]\n" "\t - http proxy/cache server\n") }, { NULL, "-gopher_proxy", "GopherProxy:", PARAM_CONN, (void *) NULL, &cfg.gopher_proxy, (void *) DEFAULT_GOPHER_PROXY_PORT, &cfg.gopher_proxy_port, gettext_nop( "\t-gopher_proxy $site[:$port]\n" "\t - gopher proxy/cache server\n") }, { NULL, "-ssl_proxy", "SSLProxy:", #ifndef USE_SSL PARAM_CONN | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_CONN, (void *) NULL, &cfg.ssl_proxy, (void *) DEFAULT_SSL_PROXY_PORT, &cfg.ssl_proxy_port, gettext_nop( "\t-ssl_proxy $site[:$port]\n" "\t - ssl proxy server\n") #endif }, { NULL, "-gopher_httpgw", "GopherViaHTTPProxy:", PARAM_PBOOL, (void *) FALSE, &cfg.gopher_via_http, NULL, NULL, gettext_nop( "\t-gopher_httpgw/-nogopher_httpgw\n" "\t - specified gopher proxy is HTTP gateway for Gopher\n") }, { NULL, "-nogopher_httpgw", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.gopher_via_http, NULL, NULL, NULL }, { NULL, "-ftp_httpgw", "FTPViaHTTPProxy:", PARAM_PBOOL, (void *) FALSE, &cfg.ftp_via_http, NULL, NULL, gettext_nop( "\t-ftp_httpgw/-noftp_httpgw\n" "\t - specified ftp proxy is HTTP gateway for FTP\n") }, { NULL, "-noftp_httpgw", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.ftp_via_http, NULL, NULL, NULL }, { NULL, "-ftp_dirtyproxy", "FTPDirtyProxy:", PARAM_PBOOL, (void *) FALSE, &cfg.ftp_dirtyp, NULL, NULL, gettext_nop( "\t-ftp_dirtyproxy/-noftp_dirtyproxy\n" "\t - use CONNECT request to HTTP proxy for FTP\n" "\t connections\n") }, { NULL, "-noftp_dirtyproxy", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.ftp_dirtyp, NULL, NULL, NULL }, { NULL, "-browser", "Browser:", #if !defined(I_FACE) || !defined(WITH_TREE) PARAM_STR | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_STR, (void *) NULL, &cfg.browser, NULL, NULL, gettext_nop( "\t-browser $str - your preferred browser programm\n") #endif }, { NULL, "-xmaxlog", "XMaxLogSize:", #ifndef I_FACE PARAM_NUM | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NUM, (void *) NULL, &cfg.xlogsize, NULL, NULL, gettext_nop( "\t-xmaxlog - maximal length of log window\n") #endif }, { NULL, "-dumpscn", NULL, PARAM_STR, (void *) NULL, &cfg.save_scn, NULL, NULL, gettext_nop( "\t-dumpscn $str - save scenario in scndir with name $str\n") }, { NULL, "-maxsize", "MaxSize:", PARAM_NUM, (void *) 0, &cfg.condition.max_size, NULL, NULL, gettext_nop( "\t-maxsize $nr - maximal allowed size of document in bytes\n") }, { NULL, "-minsize", "MinSize:", PARAM_NUM, (void *) 0, &cfg.condition.min_size, NULL, NULL, gettext_nop( "\t-minsize $nr - minimal allowed size of document in bytes\n") }, { NULL, "-http_proxy_pass", "HTTPProxyPass:", PARAM_PASS, (void *) NULL, &cfg.http_proxy_pass, NULL, NULL, gettext_nop( "\t-http_proxy_pass $str\n" "\t - password for HTTP proxy authorization\n") }, { NULL, "-http_proxy_user", "HTTPProxyUser:", PARAM_STR, (void *) NULL, &cfg.http_proxy_user, NULL, NULL, gettext_nop( "\t-http_proxy_user $str\n" "\t - user name for HTTP proxy authorization\n") }, { NULL, "-http_proxy_auth", "HTTPProxyAuth:", PARAM_AUTHSCH, (void *) 2, &cfg.proxy_auth_scheme, NULL, NULL, gettext_nop( "\t-http_proxy_auth 1/2/3\n" "\t - authorization scheme for HTTP proxy authorization\n") }, { NULL, "-logfile", "LogFile:", PARAM_PATH, (void *) NULL, &cfg.logfile, NULL, NULL, gettext_nop( "\t-logfile $file - name of file where mesages are stored\n") }, { NULL, "-slogfile", "SLogFile:", PARAM_PATH, (void *) NULL, &cfg.short_logfile, NULL, NULL, gettext_nop( "\t-slogfile $file - name of file where short log will be stored\n") }, { NULL, "-tlogfile", "TLogFile:", PARAM_STR, (void *) NULL, &cfg.time_logfile, NULL, NULL, gettext_nop( "\t-tlogfile $file - name of file where time log will be stored\n") }, { NULL, "-trelative", "Relative:", PARAM_STR, (void *) NULL, &cfg.time_relative, NULL, NULL, gettext_nop( "\t-trelative $str (object/program)\n" "\t - what timings are relative to\n") }, { "-tp", "-transparent_proxy", "TransparentProxy:", PARAM_TRANSPARENT, (void *) NULL, &cfg.transparent_proxy, NULL, NULL, gettext_nop( "\t-transparent_proxy $site[:$port]\n" "\t - transparent proxy\n") }, { "-tsp", "-transparent_ssl_proxy", "TransparentSSLProxy:", PARAM_TRANSPARENT, (void *) NULL, &cfg.transparent_ssl_proxy, NULL, NULL, gettext_nop( "\t-transparent_ssl_proxy $site[:$port]\n" "\t - transparent SSL proxy\n") }, { NULL, "-sdemo", "SdemoMode:", PARAM_PBOOL, (void *) FALSE, &cfg.sdemo_mode, NULL, NULL, gettext_nop( "\t-sdemo_mode/-notsdemo_mode\n" "\t - sdemo compatible output\n") }, { NULL, "-noencode", "NoEncode:", PARAM_PBOOL, (void *) FALSE, &cfg.noencode, NULL, NULL, gettext_nop( "\t-noencode - do not perform rfc 2396 character encoding\n") }, { NULL, "-stime", "ShowDownloadTime:", PARAM_PBOOL, (void *) FALSE, &cfg.show_time, NULL, NULL, gettext_nop( "\t-stime/-nostime - write starting and ending time of transfer\n") }, { NULL, "-nostime", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.show_time, NULL, NULL, NULL }, { NULL, "-remove_old", "RemoveOldDocuments:", PARAM_PBOOL, (void *) FALSE, &cfg.remove_old, NULL, NULL, gettext_nop( "\t-remove_old/-noremove_old\n" "\t - remove improper files or directories while running\n" "\t in sync mode\n") }, { NULL, "-noremove_old", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.remove_old, NULL, NULL, NULL }, { NULL, "-remove_before_store", "RemoveBeforeStore:", PARAM_PBOOL, (void *) FALSE, &cfg.remove_before_store, NULL, NULL, gettext_nop( "\t-remove_before_store/-noremove_before_store\n" "\t - remove file before storing new content\n") }, { NULL, "-noremove_before_store", "RemoveBeforeStore:", PARAM_NBOOL, (void *) FALSE, &cfg.remove_before_store, NULL, NULL, NULL }, { NULL, "-always_mdtm", "AlwaysMDTM:", PARAM_PBOOL, (void *) FALSE, &cfg.always_mdtm, NULL, NULL, gettext_nop( "\t-always_mdtm/-noalways_mdtm\n" "\t - always use MDTM to determine modifictaion time\n" "\t of remote file; never use values from file listing\n") }, { NULL, "-noalways_mdtm", "AlwaysMDTM:", PARAM_NBOOL, (void *) FALSE, &cfg.always_mdtm, NULL, NULL, NULL }, { NULL, "-auth_file", "AuthFile:", PARAM_PATH, (void *) NULL, &cfg.auth_file, NULL, NULL, gettext_nop( "\t-auth_file $file - file where you have stored your auth infos\n" "\t see manual for format description\n") }, { NULL, "-base_level", "BaseLevel:", PARAM_NUM, (void *) 0, &cfg.base_level, NULL, NULL, gettext_nop( "\t-base_level $nr - number of levels of directory tree to omit from top\n") }, { NULL, "-ftp_active", "ActiveFTPData:", PARAM_PBOOL, (void *) FALSE, &cfg.ftp_activec, NULL, NULL, gettext_nop( "\t-ftp_active - select active FTP data connection\n") }, { NULL, "-ftp_passive", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.ftp_activec, NULL, NULL, gettext_nop( "\t-ftp_passive - select passive FTP data connection\n") }, { NULL, "-active_ftp_port_range", "ActiveFTPPortRange:", PARAM_PORT_RANGE, (void *) -1, &cfg.active_ftp_min_port, (void *) -1, &cfg.active_ftp_max_port, gettext_nop( "\t-active_ftp_port_range $min:$max\n" "\t - range of FTP data connection ports used\n" "\t for active ftp\n") }, { NULL, "-msgcat", "NLSMessageCatalogDir:", #ifndef GETTEXT_NLS PARAM_PATH | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PATH, (void *) NULL, &cfg.msgcatd, NULL, NULL, gettext_nop( "\t-msgcat $dir - directory where message catalogs are stored\n") #endif }, { NULL, "-language", "Language:", #ifndef GETTEXT_NLS PARAM_STR | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_STR, (void *) NULL, &cfg.language, NULL, NULL, gettext_nop( "\t-language $str - set language for messages\n") #endif }, { NULL, "-quiet", "Quiet:", PARAM_PBOOL, (void *) FALSE, &cfg.quiet, NULL, NULL, gettext_nop( "\t-quiet - don't show output messages\n") }, { NULL, "-verbose", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.quiet, NULL, NULL, gettext_nop( "\t-verbose - show output messages (default)\n") }, { NULL, "-newer_than", "NewerThan:", PARAM_TIME, (void *) 0, &cfg.condition.btime, NULL, NULL, gettext_nop( "\t-newer_than $time - download only documents newer than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n") }, { NULL, "-older_than", "OlderThan:", PARAM_TIME, (void *) 0, &cfg.condition.etime, NULL, NULL, gettext_nop( "\t-older_than $time - download only documents older than $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n") }, { NULL, "-schedule", NULL, PARAM_TIME, (void *) 0, &cfg.schtime, NULL, NULL, gettext_nop( "\t-schedule $time - schedule pavuk start at $time\n" "\t format of $time: YYYY.MM.DD.hh:mm\n") }, { NULL, "-reschedule", "Reschedule:", PARAM_NUM, (void *) 0, &cfg.reschedh, NULL, NULL, gettext_nop( "\t-reschedule $nr - number of hours between two runs\n" "\t for cyclic scheduling\n") }, { NULL, "-dont_leave_site", "DontLeaveSite:", PARAM_PBOOL, (void *) FALSE, &cfg.condition.dont_leave_site, NULL, NULL, gettext_nop( "\t-dont_leave_site/-leave_site\n" "\t - don't/leave site of starting URL\n") }, { NULL, "-leave_site", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.condition.dont_leave_site, NULL, NULL, NULL }, { NULL, "-dont_leave_dir", "DontLeaveDir:", PARAM_PBOOL, (void *) FALSE, &cfg.condition.dont_leave_dir, NULL, NULL, gettext_nop( "\t-dont_leave_dir/-leave_dir\n" "\t - don't/leave directory of starting URL\n") }, { NULL, "-leave_dir", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.condition.dont_leave_dir, NULL, NULL, NULL }, { NULL, "-preserve_time", "PreserveTime:", PARAM_PBOOL, (void *) FALSE, &cfg.preserve_time, NULL, NULL, gettext_nop( "\t-preserve_time/-nopreserve_time\n" "\t - preserve document modification time\n") }, { NULL, "-nopreserve_time", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.preserve_time, NULL, NULL, NULL }, { NULL, "-preserve_perm", "PreservePermisions:", PARAM_PBOOL, (void *) FALSE, &cfg.preserve_perm, NULL, NULL, gettext_nop( "\t-preserve_perm/-nopreserve_perm\n" "\t - preserve document permissions\n") }, { NULL, "-nopreserve_perm", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.preserve_perm, NULL, NULL, NULL }, { NULL, "-preserve_slinks", "PreserveAbsoluteSymlinks:", PARAM_PBOOL, (void *) FALSE, &cfg.preserve_links, NULL, NULL, gettext_nop( "\t-preserve_slinks/-nopreserve_slinks\n" "\t - preserve absolute symlinks\n") }, { NULL, "-nopreserve_slinks", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.preserve_links, NULL, NULL, NULL }, { NULL, "-leave_level", "LeaveLevel:", PARAM_NUM, (void *) 0, &cfg.condition.leave_level, NULL, NULL, gettext_nop( "\t-leave_level $nr - how many tree levels leave from starting\n" "\t site , (0 == don't care) default 0\n") }, { NULL, "-cookie_file", "CookieFile:", PARAM_PATH, (void *) NULL, &cfg.cookie_file, NULL, NULL, gettext_nop( "\t-cookie_file $file - file where are stored cookie infos\n") }, { NULL, "-cookie_send", "CookieSend:", PARAM_PBOOL, (void *) FALSE, &cfg.send_cookies, NULL, NULL, gettext_nop( "\t-cookie_send/-nocookie_send\n" "\t - send cookie info in HTTP request\n") }, { NULL, "-nocookie_send", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.send_cookies, NULL, NULL, NULL }, { NULL, "-cookie_recv", "CookieRecv:", PARAM_PBOOL, (void *) FALSE, &cfg.recv_cookies, NULL, NULL, gettext_nop( "\t-cookie_recv/-nocookie_recv\n" "\t - accept cookies from HTTP response\n") }, { NULL, "-nocookie_recv", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.recv_cookies, NULL, NULL, NULL }, { NULL, "-cookie_update", "CookieUpdate:", PARAM_PBOOL, (void *) FALSE, &cfg.update_cookies, NULL, NULL, gettext_nop( "\t-cookie_update/-nocookie_update\n" "\t - update cookies in cookies file\n") }, { NULL, "-nocookie_update", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.update_cookies, NULL, NULL, NULL }, { NULL, "-cookie_check", "CookieCheckDomain:", PARAM_PBOOL, (void *) TRUE, &cfg.cookie_check_domain, NULL, NULL, gettext_nop( "\t-cookie_check/-nocookie_check\n" "\t - check if cookies are set for source domain\n") }, { NULL, "-nocookie_check", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.cookie_check_domain, NULL, NULL, NULL }, { NULL, "-cookies_max", "CookiesMax:", PARAM_NUM, (void *) 0, &cfg.cookies_max, NULL, NULL, gettext_nop( "\t-cookies_max $nr - maximal number of cookies in cookie cache\n") }, { NULL, "-disabled_cookie_domains", "DisabledCookieDomains:", PARAM_STRLIST, (void *) NULL, &cfg.cookies_disabled_domains, (void *) NULL, NULL, gettext_nop( "\t-disabled_cookie_domains $list\n" "\t - comma-separated list of disabled cookie domains\n") }, { NULL, "-disable_html_tag", "DisableHTMLTag:", PARAM_HTMLTAG, (void *) TRUE, NULL, NULL, NULL, gettext_nop( "\t-disable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - disable processing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n") }, { NULL, "-enable_html_tag", "EnableHTMLTag:", PARAM_HTMLTAG, (void *) FALSE, NULL, NULL, NULL, gettext_nop( "\t-enable_html_tag $TAG,[$ATTRIB][;...]\n" "\t - enable proccessing of URLs from\n" "\t attribute $ATTRIB of HTML tag $TAG\n") }, { NULL, "-gui_font", "GUIFont:", #ifndef I_FACE PARAM_STR | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_STR, (void *) NULL, &cfg.fontname, NULL, NULL, gettext_nop( "\t-gui_font $font - font name used in GUI interface\n") #endif }, { NULL, "-user_condition", "UserCondition:", PARAM_STR, (void *) NULL, &cfg.condition.uexit, NULL, NULL, gettext_nop( "\t-user_condition $str\n" "\t - user exit script used to restrict some URLs\n" "\t for more informations see manpage\n") }, { NULL, "-tr_del_chr", "TrDeleteChar:", PARAM_STR, (void *) NULL, &cfg.tr_del_chr, NULL, NULL, gettext_nop( "\t-tr_del_chr $str - characters that will be deleted from\n" "\t local filename\n") }, { NULL, "-tr_str_str", "TrStrToStr:", PARAM_TWO_QSTR, (void *) NULL, &cfg.tr_str_s1, (void *) NULL, &cfg.tr_str_s2, gettext_nop( "\t-tr_str_str $str1 $str2\n" "\t - translate $str1 to $str2 in local filename\n") }, { NULL, "-tr_chr_chr", "TrChrToChr:", PARAM_TWO_QSTR, (void *) NULL, &cfg.tr_chr_s1, (void *) NULL, &cfg.tr_chr_s2, gettext_nop( "\t-tr_chr_chr $chrset1 $chrset2\n" "\t - translate $chrset1 to $chrset2 in local filename\n") }, { NULL, "-index_name", "IndexName:", PARAM_STR, (void *) NULL, &cfg.index_name, NULL, NULL, gettext_nop( "\t-index_name $str - name of directory index instead of _._.html\n") }, { NULL, "-store_name", "StoreName:", PARAM_STR, (void *) NULL, &cfg.store_name, NULL, NULL, gettext_nop( "\t-store_name $str - filename for first downloaded document\n") }, { NULL, "-htDig", NULL, PARAM_PBOOL, (void *) FALSE, &cfg.htdig, NULL, NULL, NULL }, { NULL, "-check_size", "CheckSize:", PARAM_PBOOL, (void *) TRUE, &cfg.check_size, NULL, NULL, gettext_nop( "\t-check_size/-nocheck_size\n" "\t - compare received size of file with\n" "\t that provided by remote server\n") }, { NULL, "-nocheck_size", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.check_size, NULL, NULL, NULL }, { NULL, "-urls_file", "URLsFile:", PARAM_STR, (void *) NULL, &cfg.urls_file, NULL, NULL, gettext_nop( "\t-urls_file $file - URLs should be read from file, until\n" "\t line with single \".\" occurs in input\n") }, { NULL, "-bg", "BgMode:", PARAM_PBOOL, (void *) FALSE, &cfg.bgmode, NULL, NULL, gettext_nop( "\t-bg/-nobg - detach pavuk proces from terminal and\n" "\t don't output any messages on screen\n") }, { NULL, "-nobg", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.bgmode, NULL, NULL, NULL }, { NULL, "-maxrate", "MaxRate:", PARAM_DOUBLE, (void *) &_default_maxrate, &cfg.maxrate, NULL, NULL, gettext_nop( "\t-maxrate $nr - limit to maximal speed of transfer (kB/s)\n") }, { NULL, "-minrate", "MinRate:", PARAM_DOUBLE, (void *) &_default_minrate, &cfg.minrate, NULL, NULL, gettext_nop( "\t-minrate $nr - limit to minimal speed of transfer (kB/s)\n") }, { NULL, "-bufsize", "ReadBufferSize:", PARAM_NUM, (void *) 32, &cfg.bufsize, NULL, NULL, gettext_nop( "\t-bufsize $nr - size of read buffer (kB)\n") }, { NULL, "-file_quota", "FileSizeQuota:", PARAM_NUM, (void *) 0, &cfg.file_quota, NULL, NULL, gettext_nop( "\t-file_quota $nr - maximal size of file to transfer (kB)\n") }, { NULL, "-trans_quota", "TransferQuota:", PARAM_NUM, (void *) 0, &cfg.trans_quota, NULL, NULL, gettext_nop( "\t-trans_quota $nr - maximal amount of transfer per session (kB)\n") }, { NULL, "-fs_quota", "FSQuota:", PARAM_NUM, (void *) 0, &cfg.fs_quota, NULL, NULL, gettext_nop( "\t-fs_quota $nr - disk free space quota (kB)\n") }, { NULL, "-enable_js", "EnableJS:", PARAM_PBOOL, (void *) FALSE, &cfg.enable_js, NULL, NULL, gettext_nop( "\t-enable_js/-disable_js\n" "\t - enable downloading of javascript source files\n") }, { NULL, "-disable_js", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.enable_js, NULL, NULL, NULL }, { NULL, "-fnrules", "FnameRules:", PARAM_LFNAME, (void *) NULL, &cfg.lfnames, NULL, NULL, gettext_nop( "\t-fnrules $t $m $r - local filename construction rules\n" "\t (for better description see manual)\n") }, { NULL, "-store_info", "StoreDocInfoFiles:", PARAM_PBOOL, (void *) FALSE, &cfg.enable_info, NULL, NULL, gettext_nop( "\t-store_info/-nostore_info\n" "\t - store document info files with each document\n") }, { NULL, "-nostore_info", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.enable_info, NULL, NULL, NULL }, { NULL, "-all_to_local", "AllLinksToLocal:", PARAM_PBOOL, (void *) FALSE, &cfg.all_to_local, NULL, NULL, gettext_nop( "\t-all_to_local/-noall_to_local\n" "\t - change all links inside HTML document to\n" "\t local immediately after download\n") }, { NULL, "-noall_to_local", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.all_to_local, NULL, NULL, NULL }, { NULL, "-sel_to_local", "SelectedLinksToLocal:", PARAM_PBOOL, (void *) FALSE, &cfg.sel_to_local, NULL, NULL, gettext_nop( "\t-sel_to_local/-nosel_to_local\n" "\t - change all links inside HTML document\n" "\t which acomplish the limits, to\n" "\t local immediately after download\n") }, { NULL, "-nosel_to_local", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.sel_to_local, NULL, NULL, NULL }, { NULL, "-all_to_remote", "AllLinksToRemote:", PARAM_PBOOL, (void *) FALSE, &cfg.all_to_remote, NULL, NULL, gettext_nop( "\t-all_to_remote/-noall_to_remote\n" "\t - change all links inside HTML document to\n" "\t remote immediately after download and\n" "\t don't do any further changes to it\n") }, { NULL, "-noall_to_remote", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.all_to_remote, NULL, NULL, NULL }, { NULL, "-remind_cmd", "ReminderCMD:", PARAM_STR, (void *) NULL, &cfg.remind_cmd, NULL, NULL, gettext_nop( "\t-remind_cmd $str - command which sends result from reminder mode\n") }, { NULL, "-auto_referer", "AutoReferer:", PARAM_PBOOL, (void *) FALSE, &cfg.auto_referer, NULL, NULL, gettext_nop( "\t-auto_referer/-noauto_referer\n" "\t - in HTTP request send for each starting URL\n" "\t Referer: field which contains its own URL\n") }, { NULL, "-noauto_referer", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.auto_referer, NULL, NULL, NULL }, { NULL, "-referer", "Referer:", PARAM_PBOOL, (void *) TRUE, &cfg.referer, NULL, NULL, gettext_nop( "\t-referer/-noreferer\n" "\t - send Referer: field in HTTP request\n") }, { NULL, "-noreferer", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.referer, NULL, NULL, NULL }, { NULL, "-url_strategy", "UrlSchedulingStrategy:", PARAM_USTRAT, (void *) SSTRAT_DO_SIRKY, &cfg.scheduling_strategie, NULL, NULL, gettext_nop( "\t-url_strategy $strategy\n" "\t - scheduling strategy for URLs\n" "\t (this means order how URLs will be downloaded)\n" "\t $strategy is one of :\n" "\t level - level order in URL tree\n" "\t leveli - level order in URL tree,\n" "\t but inline objects go first\n" "\t pre - pre-order in URL tree\n" "\t prei - pre-order in URL tree,\n" "\t but inline objects go first\n") }, { NULL, "-nscache_dir", "NetscapeCacheDir:", #ifndef HAVE_BDB_18x PARAM_PATH | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PATH, (void *) NULL, &cfg.ns_cache_dir, NULL, NULL, gettext_nop( "\t-nscache_dir $dir - path to Netcape browser cache directory\n") #endif }, { NULL, "-ie_cache", "UseMSIECache:", #ifndef __CYGWIN__ PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.ie_cache, NULL, NULL, gettext_nop( "\t-ie_cache - allow loading of files from MSIE browser cache\n") #endif }, { NULL, "-noie_cache", NULL, #ifndef __CYGWIN__ PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) FALSE, &cfg.ie_cache, NULL, NULL, NULL #endif }, { NULL, "-remove_adv", "RemoveAdvertisement:", #ifndef HAVE_REGEX PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) TRUE, &cfg.remove_adv, NULL, NULL, gettext_nop( "\t-remove_adv/-noremove_adv\n" "\t - enable removing of advertisement banners\n" "\t assumes you have setup regular expresions\n" "\t for matching adv banners with -adv_re option\n") #endif }, { NULL, "-noremove_adv", NULL, #ifndef HAVE_REGEX PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) TRUE, &cfg.remove_adv, NULL, NULL, NULL #endif }, { NULL, "-adv_re", "AdvBannerRE:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_RE, (void *) NULL, &cfg.advert_res, NULL, NULL, gettext_nop( "\t-adv_re $RE - regular expressions for matching advertisement\n" "\t banner URLs\n") #endif }, { NULL, "-check_bg", "CheckIfRunnigAtBackground:", #ifndef HAVE_TERMIOS PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.tccheck, NULL, NULL, gettext_nop( "\t-check_bg/-nocheck_bg\n" "\t - if running at background, don't write any\n" "\t messages to screen\n") #endif }, { NULL, "-nocheck_bg", NULL, #ifndef HAVE_TERMIOS PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) FALSE, &cfg.tccheck, NULL, NULL, NULL #endif }, { NULL, "-send_if_range", "SendIfRange:", PARAM_PBOOL, (void *) TRUE, &cfg.send_if_range, NULL, NULL, gettext_nop( "\t-send_if_range/-nosend_if_range\n" "\t - send If-Range header in HTTP request\n" "\t turn this of when server support reget, but\n" "\t generates different Etags for two requests\n") }, { NULL, "-nosend_if_range", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.send_if_range, NULL, NULL, NULL }, { NULL, "-sched_cmd", "SchedulingCommand:", PARAM_STR, (void *) NULL, &cfg.sched_cmd, NULL, NULL, gettext_nop( "\t-sched_cmd $str - command for scheduling\n") }, { NULL, "-unique_log", "UniqueLogName:", PARAM_PBOOL, (void *) FALSE, &cfg.gen_logname, NULL, NULL, gettext_nop( "\t-unique_log/-nounique_log\n" "\t - when original log file locked try to find other\n" "\t with numbering extension which is not locked\n") }, { NULL, "-nounique_log", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.gen_logname, NULL, NULL, NULL }, { NULL, "-read_css", "ReadCSS:", PARAM_PBOOL, (void *) TRUE, &cfg.read_css, NULL, NULL, gettext_nop( "\t-read_css/-noread_css\n" "\t - fetch objects mentioned in style sheets\n") }, { NULL, "-noread_css", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.read_css, NULL, NULL, NULL }, { NULL, "-post_cmd", "PostCommand:", PARAM_STR, (void *) NULL, &cfg.post_cmd, NULL, NULL, gettext_nop( "\t-post_cmd $str - postprocessing command, which will be invoked\n" "\t after document will be successfully downloaded\n") }, { NULL, "-ssl_version", "SSLVersion:", #ifndef USE_SSL PARAM_SSLVER | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_SSLVER, (void *) 1, &cfg.ssl_version, NULL, NULL, #if defined(WITH_SSL_TLS1) || defined(USE_SSL_IMPL_NSS) gettext_nop( "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3,tls1\n") #else gettext_nop( "\t-ssl_version $v - version of SSL protocol used for communication,\n" "\t valid values: ssl23,ssl2,ssl3\n") #endif #endif }, { NULL, "-unique_sslid", "UniqueSSLID:", #if !defined(USE_SSL) PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.unique_sslid, NULL, NULL, gettext_nop( "\t-unique_sslid/-nounique_sslid\n" "\t - use unique SSL ID with each SSL session\n") #endif }, { NULL, "-nounique_sslid", NULL, #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_OPENSSL) PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) FALSE, &cfg.unique_sslid, NULL, NULL, NULL #endif }, { NULL, "-httpad", "AddHTTPHeader:", PARAM_HTTPHDR, (void *) NULL, &cfg.http_headers, NULL, NULL, gettext_nop( "\t-httpad $hdr - additional HTTP header\n") }, { NULL, "-statfile", "StatisticsFile:", PARAM_PATH, (void *) NULL, &cfg.stats_file, NULL, NULL, gettext_nop( "\t-statfile $str - statistical report from downloading progress\n") }, { NULL, "-ewait", "WaitOnExit:", #ifndef __CYGWIN__ PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.wait_on_exit, NULL, NULL, gettext_nop( "\t-ewait - wait to finish program after downloading progress\n" "\t is done\n") #endif }, { NULL, "-noewait", NULL, #ifndef __CYGWIN__ PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) FALSE, &cfg.wait_on_exit, NULL, NULL, NULL #endif }, { NULL, "-aip_pattern", "AllowedIPAdrressPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_RE, (void *) NULL, &cfg.condition.aip, NULL, NULL, gettext_nop( "\t-aip_pattern $re - pattern for allowed IP addresses of servers\n") #endif }, { NULL, "-dip_pattern", "DisallowedIPAdrressPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_RE, (void *) NULL, &cfg.condition.skipip, NULL, NULL, gettext_nop( "\t-dip_pattern $re - pattern for disallowed IP addresses of servers\n") #endif }, { NULL, "-site_level", "SiteLevel:", PARAM_NUM, (void *) 0, &cfg.condition.site_level, NULL, NULL, gettext_nop( "\t-site_level $nr - maximum allowed number of sites to leave from\n" "\t starting site\n") }, { NULL, "-use_http11", "UseHTTP11:", PARAM_PBOOL, (void *) TRUE, &cfg.use_http11, NULL, NULL, gettext_nop( "\t-use_http11/-nouse_http11\n" "\t - enable or disable using of HTTP/1.1 protocol\n" "\t features, default is off now\n") }, { NULL, "-nouse_http11", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.use_http11, NULL, NULL, NULL }, { NULL, "-max_time", "MaxRunTime:", PARAM_DOUBLE, (void *) &_default_maxtime, &cfg.max_time, NULL, NULL, gettext_nop( "\t-max_time $nr - set maximal amount of time for program run\n" "\t in minutes, default 0 == no limit\n" "\t you can use floating point numbers, to\n" "\t specify subminute times\n") }, { NULL, "-local_ip", "LocalIP:", PARAM_STR, NULL, &cfg.local_ip, NULL, NULL, gettext_nop( "\t-local_ip $str - use this local ip address of network interface.\n" "\t This option is for multihomed machines.\n") }, { NULL, "-request", "RequestInfo:", PARAM_REQUEST, NULL, &cfg.request, NULL, NULL, gettext_nop( "\t-request $req - extended request informations, used to specify\n" "\t information for GET or POST requests.\n" "\t format of $req :\n" "\t \"URL:$url METHOD:[GET|POST] ENCODING:[m|u]\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\n" "\t LNAME:$local_filename\"\n" "\t (for more informations see manual page)\n") }, { NULL, "-hash_size", "HashSize:", PARAM_NUM, (void *) HASH_TBL_SIZE, &cfg.hash_size, NULL, NULL, gettext_nop( "\t-hash_size $nr - size of internal hash tables for performance tuning\n") }, { NULL, "-nthreads", "NumberOfThreads:", #ifndef HAVE_MT PARAM_NUM | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NUM, (void *) 3, &cfg.nthr, NULL, NULL, gettext_nop( "\t-nthreads $nr - set number of concurent downloading threads\n") #endif }, { NULL, "-immesg", "ImmediateMessages:", #ifndef HAVE_MT PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.immessages, NULL, NULL, gettext_nop( "\t-immesg/-noimmesg - write messages immediately after produced, not\n" "\t just when safe (from MT point of view)\n") #endif }, { NULL, "-noimmesg", NULL, #ifndef HAVE_MT PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL, #else PARAM_NBOOL, (void *) FALSE, &cfg.immessages, NULL, NULL, NULL #endif }, { NULL, "-formdata", "HTMLFormData:", PARAM_REQUEST, NULL, &cfg.formdata, NULL, NULL, gettext_nop( "\t-formdata $data - used to specify HTML form fields, for HTML\n" "\t forms found during traversing document tree.\n" "\t Only forms mentiond in this option will be\n" "\t processed automaticaly.\n" "\t \"URL:$url\n" "\t FIELD:$variable=$value\n" "\t FILE:$variable=$filename\"\n" "\t (for more informations see manual page)\n") }, { NULL, "-dumpfd", "DumpFD:", PARAM_NUM, (void *) -1, &cfg.dumpfd, NULL, NULL, gettext_nop( "\t-dumpfd $nr - number of filedescriptor where to output\n" "\t document contents instead to file\n") }, { NULL, "-dump_urlfd", "DumpUrlFD:", PARAM_NUM, (void *) -1, &cfg.dump_urlfd, NULL, NULL, gettext_nop( "\t-dump_urlfd $nr - number of filedescriptor where to output\n" "\t all URLs found in documents\n") }, { NULL, "-del_after", "DeleteAfterTransfer:", PARAM_PBOOL, (void *) FALSE, &cfg.del_after, NULL, NULL, gettext_nop( "\t-del_after/-nodel_after\n" "\t - delete FTP document after succesfull transfer\n") }, { NULL, "-nodel_after", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.del_after, NULL, NULL, NULL }, { NULL, "-unique_name", "UniqueDocName:", PARAM_PBOOL, (void *) TRUE, &cfg.unique_doc, NULL, NULL, gettext_nop( "\t-unique_name/-nounique_name\n" "\t - always generate unique name for each document\n") }, { NULL, "-nounique_name", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.unique_doc, NULL, NULL, NULL }, { NULL, "-leave_site_enter_dir", "LeaveSiteEnterDirectory:", PARAM_NBOOL, (void *) FALSE, &cfg.condition.dont_leave_site_dir, NULL, NULL, gettext_nop( "\t-leave_site_enter_dir/-dont_leave_site_enter_dir\n" "\t - leave directory which we first entered on site\n") }, { NULL, "-dont_leave_site_enter_dir", NULL, PARAM_PBOOL, (void *) FALSE, &cfg.condition.dont_leave_site_dir, NULL, NULL, NULL }, { NULL, "-singlepage", "SinglePage:", PARAM_PBOOL, (void *) FALSE, &cfg.singlepage, NULL, NULL, gettext_nop( "\t-singlepage/-nosinglepage\n" "\t - donwload single HTML page with all inline objects\n") }, { NULL, "-nosinglepage", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.singlepage, NULL, NULL, NULL }, { NULL, "-dump_after", NULL, PARAM_PBOOL, (void *) FALSE, &cfg.dump_after, NULL, NULL, gettext_nop( "\t-dump_after/-nodump_after\n" "\t - when used with option -dumpfd, dump document after\n" "\t successful download and processing of HTML\n" "\t documents\n") }, { NULL, "-nodump_after", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.dump_after, NULL, NULL, NULL }, { NULL, "-dump_response", NULL, PARAM_PBOOL, (void *) FALSE, &cfg.dump_resp, NULL, NULL, gettext_nop( "\t-dump_response/-nodump_response\n" "\t - when used with option -dumpfd, also responses\n" "\t from HTTP servers will be dumped\n") }, { NULL, "-nodump_response", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.dump_resp, NULL, NULL, NULL }, { NULL, "-auth_ntlm_domain", "NTLMAuthorizationDomain:", #ifndef ENABLE_NTLM PARAM_STR | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_STR, (void *) NULL, &cfg.auth_ntlm_domain, NULL, NULL, gettext_nop( "\t-auth_ntlm_domain $str\n" "\t - SMB domain name for HTTP NTLM authorization\n") #endif }, { NULL, "-auth_proxy_ntlm_domain", "NTLMProxyAuthorizationDomain:", #ifndef ENABLE_NTLM PARAM_STR | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_STR, (void *) NULL, &cfg.auth_proxy_ntlm_domain, NULL, NULL, gettext_nop( "\t-auth_proxy_ntlm_domain $str\n" "\t - SMB domain name for HTTP proxy NTLM authorization\n") #endif }, { NULL, "-js_pattern", "JavascriptPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL, #else PARAM_RE, (void *) NULL, &cfg.js_patterns, NULL, NULL, gettext_nop( "\t-js_pattern $re - additional RE patterns for matching URLs in DOM\n" "\t event attributes of HTML tags\n") #endif }, { NULL, "-follow_cmd", "FollowCommand:", PARAM_STR, (void *) NULL, &cfg.condition.follow_cmd, NULL, NULL, gettext_nop( "\t-follow_cmd $str - user exit script used tell if you want to follow\n" "\t any link from current HTML document\n") }, { NULL, "-retrieve_symlink", "RetrieveSymlinks:", PARAM_PBOOL, (void *) FALSE, &cfg.retrieve_slink, NULL, NULL, gettext_nop( "\t-retrieve_symlink/-noretrieve_symlink\n" "\t - retrieve symliks like regular files or directories\n") }, { NULL, "-noretrieve_symlink", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.retrieve_slink, NULL, NULL, NULL }, { NULL, "-js_transform", "JSTransform:", #ifndef HAVE_REGEX PARAM_JSTRANS | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_JSTRANS, (void *) NULL, &cfg.js_transform, (void *) 0, NULL, gettext_nop( "\t-js_transform $p $t $h $a\n" "\t - custom JS pattern with transformation\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n") #endif }, { NULL, "-js_transform2", "JSTransform2:", #ifndef HAVE_REGEX PARAM_JSTRANS | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_JSTRANS, (void *) NULL, &cfg.js_transform, (void *) 1, NULL, gettext_nop( "\t-js_transform2 $p $t $h $a\n" "\t - custom JS pattern with transformation and\n" "\t rewriting of URLs in first subpattern\n" "\t $p - pattern\n" "\t $t - transfomation\n" "\t $h - HTML tag or * or \"\"\n" "\t $a - HTML attrib\n") #endif }, { NULL, "-ftp_proxy_user", "FTPProxyUser:", PARAM_STR, NULL, &cfg.ftp_proxy_user, NULL, NULL, gettext_nop( "\t-ftp_proxy_user $str\n" "\t - username for access authorization to FTP proxy\n") }, { NULL, "-ftp_proxy_pass", "FTPProxyPassword:", PARAM_PASS, NULL, &cfg.ftp_proxy_pass, NULL, NULL, gettext_nop( "\t-ftp_proxy_pass $str\n" "\t - password for access authorization to FTP proxy\n") }, { NULL, "-limit_inlines", "LimitInlineObjects:", PARAM_PBOOL, (void *) TRUE, &cfg.condition.limit_inlines, NULL, NULL, gettext_nop( "\t-limit_inlines/-dont_limit_inlines\n" "\t - apply limiting options on page inline objects?\n") }, { NULL, "-dont_limit_inlines", NULL, PARAM_NBOOL, (void *) TRUE, &cfg.condition.limit_inlines, NULL, NULL, NULL }, { NULL, "-ftp_list_options", "FTPListOptions:", PARAM_STR, NULL, &cfg.ftp_list_options, NULL, NULL, gettext_nop( "\t-ftp_list_options $str\n" "\t - additional options or parameters to FTP LIST or\n" "\t NLST commands\n") }, { NULL, "-fix_wuftpd_list", "FixWuFTPDBrokenLISTcmd:", PARAM_PBOOL, (void *) FALSE, &cfg.fix_wuftpd, NULL, NULL, gettext_nop( "\t-fix_wuftpd_list/-nofix_wuftpd_list\n" "\t - do extensive checking of FTP directory presence to\n" "\t workaround WuFTPD broken responses when trying\n" "\t to list nonexisting directory\n") }, { NULL, "-nofix_wuftpd_list", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.fix_wuftpd, NULL, NULL, NULL }, { NULL, "-post_update", "PostUpdate:", PARAM_PBOOL, (void *) FALSE, &cfg.post_update, NULL, NULL, gettext_nop( "\t-post_update/-nopost_update\n" "\t - update in parent documents only links pointing\n" "\t to current document\n") }, { NULL, "-nopost_update", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.post_update, NULL, NULL, NULL }, { NULL, "-info_dir", "SeparateInfoDir:", PARAM_PATH, (void *) NULL, &cfg.info_dir, NULL, NULL, gettext_nop( "\t-info_dir $dir - separate directory where will stored info files\n" "\t instead of directly into document tree\n") }, { NULL, "-mozcache_dir", "MozillaCacheDir:", PARAM_PATH, (void *) NULL, &cfg.moz_cache_dir, NULL, NULL, gettext_nop( "\t-mozcache_dir $dir - path to Mozilla browser cache directory\n") }, { NULL, "-aport", "AllowedPorts:", PARAM_NUMLIST, (void *) NULL, &cfg.condition.ports, (void *) TRUE, &cfg.condition.allow_ports, gettext_nop( "\t-aport $list - allow downloading of documents from servers\n" "\t siting on listed ports\n") }, { NULL, "-dport", "DisallowedPorts:", PARAM_NUMLIST, (void *) NULL, &cfg.condition.ports, (void *) FALSE, &cfg.condition.allow_ports, gettext_nop( "\t-dport $list - deny downloading of documents from servers\n" "\t siting on listed ports\n") }, { NULL, "-hack_add_index", "HackAddIndex:", PARAM_PBOOL, (void *) FALSE, &cfg.hack_add_index, NULL, NULL, gettext_nop( "\t-hack_add_index/-nohack_add_index\n" "\t - this is hack to allow adding of also directories\n" "\t of all queued files\n") }, { NULL, "-nohack_add_index", NULL, PARAM_NBOOL, (void *) FALSE, &cfg.hack_add_index, NULL, NULL, NULL }, { NULL, "-default_prefix", "DefaultURLPrefix:", PARAM_STR, (void *) NULL, &cfg.default_prefix, NULL, NULL, gettext_nop( "\t-default_prefix $str\n" "\t - default URL prefix for subdirectory of\n" "\t mirrored files\n") }, { NULL, "-js_script_file", "JavaScriptFile:", #ifndef HAVE_MOZJS PARAM_PATH | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PATH, (void *) NULL, &cfg.js_script_file, NULL, NULL, gettext_nop( "\t-js_script_file $file\n" "\t - script file with JavaScript functions\n") #endif }, { NULL, "-ftp_login_handshake", "FtpLoginHandshake:", PARAM_FTPHS, (void *) NULL, &cfg.ftp_login_hs, NULL, NULL, gettext_nop( "\t-ftp_login_handshake $host $handshake\n" "\t - customize login handshake for FTP server\n") }, { NULL, "-nss_cert_dir", "NSSCertDir:", #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_NSS) PARAM_PATH | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PATH, (void *) FALSE, &cfg.nss_cert_dir, NULL, NULL, gettext_nop( "\t-nss_cert_dir $dir - set certificate config directory for Netscape NSS\n") #endif }, { NULL, "-nss_accept_unknown_cert", "NSSAcceptUnknownCert:", #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_NSS) PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.nss_accept_unknown_cert, NULL, NULL, gettext_nop( "\t-nss_accept_unknown_cert/-nonss_accept_unknown_cert\n" "\t - accept SSL server certificates not listed in\n" "\t certificate database\n") #endif }, { NULL, "-nonss_accept_unknown_cert", NULL, #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_NSS) PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) FALSE, &cfg.nss_accept_unknown_cert, NULL, NULL, NULL #endif }, { NULL, "-nss_domestic_policy", "NSSDomesticPolicy:", #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_NSS) PARAM_PBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_PBOOL, (void *) FALSE, &cfg.nss_domestic_policy, NULL, NULL, gettext_nop( "\t-nss_domestic_policy/-nss_export_policy\n" "\t - set policy for SSL ciphers in NSS\n") #endif }, { NULL, "-nss_export_policy", NULL, #if !defined(USE_SSL) || !defined(USE_SSL_IMPL_NSS) PARAM_NBOOL | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_NBOOL, (void *) FALSE, &cfg.nss_domestic_policy, NULL, NULL, NULL #endif }, { NULL, "-dont_touch_url_rpattern", "DontTouchUrlREPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_RE, (void *) NULL, &cfg.dont_touch_url_rpattern, NULL, NULL, gettext_nop( "\t-dont_touch_url_rpattern $re\n" "\t - RE pattern of URL which should not be touched\n" "\t by URL rewriting engine\n") #endif }, { NULL, "-dont_touch_url_pattern", "DontTouchUrlPattern:", PARAM_STRLIST, (void *) NULL, &cfg.dont_touch_url_pattern, NULL, NULL, gettext_nop( "\t-dont_touch_url_pattern $list\n" "\t - wilcard patterns of URLs which should not\n" "\t be touched by URL rewriting engine\n") }, { NULL, "-dont_touch_tag_rpattern", "DontTouchTagREPattern:", #ifndef HAVE_REGEX PARAM_RE | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_RE, (void *) NULL, &cfg.dont_touch_tag_rpattern, NULL, NULL, gettext_nop( "\t-dont_touch_tag_rpattern $re\n" "\t - RE pattern of HTML tag in which URLs should\n" "\t not be touched by URL rewriting engine\n") #endif }, { NULL, "-tag_pattern", "HTMLTagPattern:", PARAM_TAGPAT, (void *) NULL, &cfg.condition.tag_patterns, (void *) TAGP_WC, NULL, gettext_nop( "\t-tag_pattern $tag $attrib $url\n" "\t - wilcard patterns for precise matching of URLs\n" "\t inside HTML tags\n") }, { NULL, "-tag_rpattern", "HTMLTagREPattern:", #ifndef HAVE_REGEX PARAM_TAGPAT | PARAM_UNSUPPORTED, NULL, NULL, NULL, NULL, NULL #else PARAM_TAGPAT, (void *) NULL, &cfg.condition.tag_patterns, (void *) TAGP_RE, NULL, gettext_nop( "\t-tag_rpattern $tag $attrib $url\n" "\t - RE patterns for precise matching of URLs\n" "\t inside HTML tags\n") #endif } }; pavuk-0.9.35/src/gaccel.c0000644000175000001440000001213210557333101012021 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #ifdef GTK_FACE #include #include #include #include "gaccel.h" #include "tools.h" GSList *gaccel_list = NULL; static gaccel *gaccel_new(gchar * name, gchar * sigid) { gaccel *retv = g_malloc(sizeof(gaccel)); retv->name = g_strdup(name); retv->sigid = g_strdup(sigid); retv->widget = NULL; retv->modifier_mask = 0; retv->accelerator_key = 0; retv->accel_group = NULL; gaccel_list = g_slist_append(gaccel_list, retv); return retv; } gaccel *gaccel_parse_str(guchar * str) { gaccel *retv = NULL; char *p1, *p2, *p3, *p; GdkModifierType modifier_mask = 0; guint accelerator_key = 0; if(!str) return NULL; p = g_strdup((char *) str); p1 = g_strdup(get_1qstr(p)); p2 = g_strdup(get_1qstr(NULL)); p3 = g_strdup(get_1qstr(NULL)); if(p3) gtk_accelerator_parse(p3, &accelerator_key, &modifier_mask); if(p1 && p2 && p3 && accelerator_key != 0) { retv = g_malloc(sizeof(gaccel)); retv->widget = NULL; retv->name = p1; retv->sigid = p2; retv->modifier_mask = modifier_mask; retv->accelerator_key = accelerator_key; retv->accel_group = NULL; g_free(p3); } else { g_free(p1); g_free(p2); g_free(p3); } g_free(p); return retv; } guchar *gaccel_to_str(gaccel * gaccelp) { static gchar pom[256]; gchar *p; if(!gaccelp->accelerator_key && !gaccelp->modifier_mask) return NULL; p = gtk_accelerator_name(gaccelp->accelerator_key, gaccelp->modifier_mask); snprintf(pom, sizeof(pom), "\"%s\" \"%s\" \"%s\"", gaccelp->name, gaccelp->sigid, p); p = pom; return (guchar *) p; } static void gaccel_widget_destroy(GtkWidget * widget, gaccel * gaccelp) { gaccelp->widget = NULL; } #if GTK_FACE < 2 /* FIXME - This does not work for GTK2 */ static void gaccel_widget_add_accel(GtkWidget * widget, guint sigid, GtkAccelGroup * agroup, guint akey, GdkModifierType amod, GtkAccelFlags aflag, gaccel * gaccelp) { if((aflag & GTK_ACCEL_VISIBLE) && (sigid == gtk_signal_lookup(gaccelp->sigid, GTK_OBJECT_TYPE(widget)))) { gaccelp->accelerator_key = akey; gaccelp->modifier_mask = amod; } } static void gaccel_widget_remove_accel(GtkWidget * widget, GtkAccelGroup * agroup, guint akey, GdkModifierType amod, gaccel * gaccelp) { if((gaccelp->accelerator_key == akey) && (gaccelp->modifier_mask == amod)) { gaccelp->accelerator_key = 0; gaccelp->modifier_mask = 0; } } #endif void gaccel_bind_widget(gchar * name, gchar * sigid, GtkWidget * widget, GtkAccelGroup * accel_group, GtkWidget * parent) { static GtkAccelGroup *daccel_group = NULL; gaccel *gaccelp; if(!widget) return; /* if (!daccel_group) daccel_group = gtk_accel_group_get_default(); */ if(!daccel_group) daccel_group = gtk_accel_group_new(); if(!accel_group && parent) { accel_group = (GtkAccelGroup *) gtk_object_get_data(GTK_OBJECT(parent), "gaccel_accel_group"); if(!accel_group) { accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(gtk_widget_get_toplevel(parent)), accel_group); gtk_object_set_data_full(GTK_OBJECT(parent), "gaccel_accel_group", accel_group, (GtkDestroyNotify) gtk_accel_group_unref); } } if(!accel_group) accel_group = daccel_group; gaccelp = gaccel_find_by_name(name); if(!gaccelp) { gaccelp = gaccel_new(name, sigid); } gaccelp->widget = widget; gaccelp->accel_group = accel_group; if(gaccelp->accelerator_key || gaccelp->modifier_mask) gtk_widget_add_accelerator(widget, gaccelp->sigid, accel_group, gaccelp->accelerator_key, gaccelp->modifier_mask, GTK_ACCEL_VISIBLE); gtk_signal_connect(GTK_OBJECT(widget), "destroy", GTK_SIGNAL_FUNC(gaccel_widget_destroy), gaccelp); #if GTK_FACE < 2 gtk_signal_connect(GTK_OBJECT(widget), "add_accelerator", GTK_SIGNAL_FUNC(gaccel_widget_add_accel), gaccelp); gtk_signal_connect(GTK_OBJECT(widget), "remove_accelerator", GTK_SIGNAL_FUNC(gaccel_widget_remove_accel), gaccelp); #endif } gaccel *gaccel_find_by_name(gchar * name) { GSList *lst = gaccel_list; while(lst) { if(!strcmp(((gaccel *) lst->data)->name, name)) return (gaccel *) lst->data; lst = lst->next; } return NULL; } void gaccel_add(gaccel * gaccelp) { gaccel_list = g_slist_append(gaccel_list, gaccelp); } void gaccel_window_activate(GtkAccelGroup * accelp, GtkWidget * widget) { gtk_window_add_accel_group(GTK_WINDOW(widget), accelp); } void gaccel_save_keys(FILE * f) { GSList *lst = gaccel_list; char *p; while(lst) { p = (char *) gaccel_to_str(lst->data); if(p) { fprintf(f, "MenuAccel: %s\n", p); g_free(p); } lst = lst->next; } } #endif /* GTK_FACE */ pavuk-0.9.35/src/gaccel.h0000644000175000001440000000201710142077737012041 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _gaccel_h_ #define _gaccel_h_ #include #include typedef struct { GtkWidget *widget; gchar *sigid; gchar *name; GdkModifierType modifier_mask; guint accelerator_key; GtkAccelGroup *accel_group; } gaccel; extern void gaccel_window_activate(GtkAccelGroup *, GtkWidget *); extern gaccel *gaccel_parse_str(guchar *); extern guchar *gaccel_to_str(gaccel *); extern void gaccel_bind_widget(gchar *, gchar *, GtkWidget *, GtkAccelGroup *, GtkWidget *); extern gaccel *gaccel_find_by_name(gchar *); extern void gaccel_add(gaccel *); extern void gaccel_save_keys(FILE * f); extern GSList *gaccel_list; #endif pavuk-0.9.35/src/cmdparse.c0000644000175000001440000000621210142077736012414 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #ifdef __CYGWIN__ #include #include #include #include #include #include "tools.h" static char *tl_cmdln_parse_unescape_str(char *str, int len) { char *rv; char *p; int i; rv = _malloc(len + 1); p = rv; for(i = 0; i < len; i++) { if(str[i] == '\\') i++; *p = str[i]; p++; } *p = '\0'; return rv; } static int tl_cmdln_parse_get_param(char *str, char **param) { int i, j; int was_start = FALSE; char delim = -1; char *p; p = str; i = 0; while(p[i]) { if(!was_start && tl_ascii_isspace(p[i])) { i++; continue; } else if(!was_start) { was_start = TRUE; if(p[i] == '\"' || p[i] == '\'') { delim = p[i]; i++; } else delim = '\0'; break; } } if(delim < 0) return 0; p += i; j = 0; while(p[j]) { if(p[j] == '\\') { if(p[j + 1]) j += 2; else return -1; continue; } if(delim && p[j] == delim && (tl_ascii_isspace(p[j + 1]) || !p[j + 1])) { break; } if(!delim && tl_ascii_isspace(p[j])) { break; } j++; } if(delim && !p[j]) return -1; *param = (delim == '\'') ? tl_strndup(p, j) : tl_cmdln_parse_unescape_str(p, j); return i + j + (delim ? 1 : 0); } char **tl_cmdln_parse(char *cmdln) { char *p, *param; char **rv = NULL; int nr = 0, l; p = cmdln; while(*p) { l = tl_cmdln_parse_get_param(p, ¶m); if(l < 0) { char **pp; for(pp = rv; pp && *pp; pp++) _free(*pp); _free(rv); printf(gettext("Error parsing commandline at: %s\n"), p); return NULL; } if(!l) break; nr++; rv = _realloc(rv, sizeof(char *) * (nr + 1)); rv[nr - 1] = param; rv[nr] = NULL; p += l; } return rv; } int tl_win32_system(char *cmd) { if(!access("/bin/sh", X_OK)) { return system(cmd); } else { int rv = -1; int pid; char **params; params = tl_cmdln_parse(cmd); if(params) { char **pp; #if 0 rv = spawnvp(_P_WAIT, params[0], params + 1); #else pid = spawnvp(_P_NOWAIT, params[0], params + 1); if(pid >= 0) { if(_cwait(&rv, pid, WAIT_CHILD) < 0) rv = -1; } else rv = -1; #endif pp = params; while(pp && *pp) { _free(*pp); pp++; } _free(params); } else { xprintf(1, gettext("Unable to parse commandline: %s\n"), cmd); } return rv; } } #if 0 int main(int argc, char **argv) { char **pp; pp = tl_cmdln_parse(argv[1]); while(pp && *pp) { printf("%s\n", *pp); pp++; } return 0; } #endif #endif pavuk-0.9.35/src/gui_limits.c0000644000175000001440000006102410146657462012771 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #ifdef GTK_FACE #include #include #include "gtkmulticol.h" #include "html.h" #include "uconfig.h" #include "mimetype.h" #include "tag_pattern.h" #include "icons/append.xpm" #include "icons/modify.xpm" #include "icons/clear.xpm" #include "icons/delete.xpm" #include "icons/ok.xpm" #include "icons/apply.xpm" #include "icons/common.xpm" #include "icons/cancel.xpm" static void CfgLimits(GtkObject * object, gpointer func_data) { if(!xget_cfg_values_lim()) { if(cfg.use_prefs) cfg_dump_pref(); } } static void limtab_tree(GtkWidget * notebook) { GtkWidget *label, *box, *ptab, *frame; box = gtk_vbox_new(FALSE, 2); gtk_widget_show(box); label = gtk_label_new(gettext("Tree")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 2); gtk_widget_show(frame); ptab = gtk_table_new(2, 4, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.cgi_sw = gtk_check_button_new_with_label(gettext("Download cgi-generated pages")); gtk_widget_show(gui_cfg.cgi_sw); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.cgi_sw, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 0); gui_cfg.ftpd_sw = gtk_check_button_new_with_label(gettext("Recurse through FTP directory")); gtk_widget_show(gui_cfg.ftpd_sw); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.ftpd_sw, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 0); gui_cfg.robots_sw = gtk_check_button_new_with_label(gettext("Allow \"robots.txt\"")); gtk_widget_show(gui_cfg.robots_sw); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.robots_sw, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 5, 0); gui_cfg.ftp_html = gtk_check_button_new_with_label(gettext ("Process HTML files downloaded over FTP")); gtk_widget_show(gui_cfg.ftp_html); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.ftp_html, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 5, 0); gui_cfg.leaves_sw = gtk_check_button_new_with_label(gettext("Don't leave starting site")); gtk_widget_show(gui_cfg.leaves_sw); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.leaves_sw, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 5, 0); gui_cfg.leaved_sw = gtk_check_button_new_with_label(gettext ("Don't leave starting directory")); gtk_widget_show(gui_cfg.leaved_sw); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.leaved_sw, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 5, 0); gui_cfg.dont_leave_site_dir = gtk_check_button_new_with_label(gettext ("Don't leave site enter directory")); gtk_widget_show(gui_cfg.dont_leave_site_dir); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.dont_leave_site_dir, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 5, 0); gui_cfg.singlepage = gtk_check_button_new_with_label(gettext("Download just single page")); gtk_widget_show(gui_cfg.singlepage); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.singlepage, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 5, 0); gui_cfg.limit_inlines = gtk_check_button_new_with_label(gettext ("Apply limiting options on inline objects")); gtk_widget_show(gui_cfg.limit_inlines); gtk_table_attach(GTK_TABLE(ptab), gui_cfg.limit_inlines, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 5, 0); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 2); gtk_widget_show(frame); ptab = gtk_table_new(4, 3, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.maxdoc_label = guitl_tab_add_numentry(ptab, gettext("Max. count of documents: "), 0, 4, INT_MAX); gui_cfg.maxlev_label = guitl_tab_add_numentry(ptab, gettext("Max. depth of tree: "), 0, 5, USHRT_MAX); gui_cfg.leave_level = guitl_tab_add_numentry(ptab, gettext("Max. levels to leave from starting site: "), 0, 6, USHRT_MAX); gui_cfg.maxsize_label = guitl_tab_add_numentry(ptab, gettext("Max. document size: "), 2, 4, INT_MAX); gui_cfg.min_size = guitl_tab_add_numentry(ptab, gettext("Min. document size: "), 2, 5, INT_MAX); gui_cfg.site_level = guitl_tab_add_numentry(ptab, gettext("Max. site levels to leave from starting site: "), 2, 6, INT_MAX); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 2); gtk_widget_show(frame); ptab = gtk_table_new(2, 3, FALSE); gtk_container_add(GTK_CONTAINER(frame), ptab); gtk_widget_show(ptab); gui_cfg.subdir_label = guitl_tab_add_path_entry(ptab, gettext("Working subdirectory :"), 0, 0, TRUE); gui_cfg.en_uexit = guitl_tab_add_entry(ptab, gettext("User condition script: "), 0, 1, FALSE); gui_cfg.follow_cmd = guitl_tab_add_entry(ptab, gettext("Follow command: "), 0, 2, FALSE); } static void limtab_patterns(GtkWidget * notebook) { GtkWidget *label, *box, *col, *ptab; box = gtk_vbox_new(FALSE, 2); gtk_widget_show(box); label = gtk_label_new(gettext("Patterns")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); ptab = gtk_frame_new(gettext("Wildcard patterns")); gtk_box_pack_start(GTK_BOX(box), ptab, FALSE, FALSE, 2); gtk_widget_show(ptab); col = gtk_table_new(4, 2, FALSE); gtk_container_add(GTK_CONTAINER(ptab), col); gtk_widget_show(col); gui_cfg.pattern_label = guitl_tab_add_edit_entry(col, gettext("Documents matching pattern: "), NULL, 0, 0, FALSE); gui_cfg.skip_pattern = guitl_tab_add_edit_entry(col, gettext("skip: "), gettext("Pavuk: edit Documents matching skip pattern"), 2, 0, FALSE); gui_cfg.url_pattern_label = guitl_tab_add_edit_entry(col, gettext("URL matching pattern: "), NULL, 0, 1, FALSE); gui_cfg.skip_url_pattern = guitl_tab_add_edit_entry(col, gettext("skip: "), gettext("Pavuk: edit URL matching skip pattern"), 2, 1, FALSE); #ifdef HAVE_REGEX ptab = gtk_frame_new(gettext("RE patterns")); gtk_box_pack_start(GTK_BOX(box), ptab, FALSE, FALSE, 2); gtk_widget_show(ptab); col = gtk_table_new(4, 2, FALSE); gtk_container_add(GTK_CONTAINER(ptab), col); gtk_widget_show(col); gui_cfg.rpattern = guitl_tab_add_edit_entry(col, gettext("Documents matching pattern: "), NULL, 0, 0, TRUE); gui_cfg.skip_rpattern = guitl_tab_add_edit_entry(col, gettext("skip: "), gettext("Pavuk: edit Documents matching skip pattern"), 2, 0, TRUE); gui_cfg.url_rpattern = guitl_tab_add_edit_entry(col, gettext("URL matching pattern: "), NULL, 0, 1, TRUE); gui_cfg.url_skip_rpattern = guitl_tab_add_edit_entry(col, gettext("skip: "), gettext("Pavuk: edit URL matching skip pattern"), 2, 1, TRUE); #endif } static void limtab_hosts(GtkWidget * notebook) { GtkWidget *brow, *label, *box, *col, *ptab; box = gtk_table_new(2, 3, FALSE); gtk_widget_show(box); label = gtk_label_new(gettext("Hosts")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); col = gtk_table_new(2, 1, FALSE); gtk_widget_show(col); gtk_table_attach(GTK_TABLE(box), col, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); gui_cfg.hosts_sw = gtk_check_button_new_with_label(gettext("Allow / Disallow sites")); gtk_widget_show(gui_cfg.hosts_sw); gtk_table_attach(GTK_TABLE(col), gui_cfg.hosts_sw, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = guitl_new_edit_list(&gui_cfg.hosts_list, &gui_cfg.hosts_entry, gettext("Site: "), NULL, NULL, NULL, NULL, TRUE, NULL); gtk_table_attach(GTK_TABLE(col), brow, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); col = gtk_table_new(2, 1, FALSE); gtk_widget_show(col); gtk_table_attach(GTK_TABLE(box), col, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); gui_cfg.domain_sw = gtk_check_button_new_with_label(gettext("Allow / Disallow domains")); gtk_widget_show(gui_cfg.domain_sw); gtk_table_attach(GTK_TABLE(col), gui_cfg.domain_sw, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = guitl_new_edit_list(&gui_cfg.domain_list, &gui_cfg.domain_entry, gettext("Domain: "), NULL, NULL, NULL, NULL, TRUE, NULL); gtk_table_attach(GTK_TABLE(col), brow, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); #ifdef HAVE_REGEX ptab = gtk_frame_new(gettext("IP address RE patterns")); gtk_table_attach(GTK_TABLE(box), ptab, 0, 2, 1, 2, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show(ptab); col = gtk_table_new(4, 1, FALSE); gtk_container_add(GTK_CONTAINER(ptab), col); gtk_widget_show(col); gui_cfg.aip = guitl_tab_add_edit_entry(col, gettext("Server IP address matching pattern: "), NULL, 0, 0, TRUE); gui_cfg.skipip = guitl_tab_add_edit_entry(col, gettext("skip: "), gettext("Pavuk: edit Server IP address matching skip pattern"), 2, 0, TRUE); #endif ptab = gtk_frame_new(gettext("Server ports")); gtk_table_attach(GTK_TABLE(box), ptab, 0, 2, 2, 3, GTK_FILL, GTK_FILL, 5, 5); gtk_widget_show(ptab); col = gtk_table_new(3, 1, FALSE); gtk_container_add(GTK_CONTAINER(ptab), col); gtk_widget_show(col); gui_cfg.allow_ports = gtk_check_button_new_with_label(gettext("Allow/deny")); gtk_table_attach(GTK_TABLE(col), gui_cfg.allow_ports, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 1, 1); gtk_widget_show(gui_cfg.allow_ports); gui_cfg.ports = guitl_tab_add_edit_entry(col, gettext("Ports: "), NULL, 1, 0, FALSE); } static void limtab_docs(GtkWidget * notebook) { GtkWidget *brow, *label, *box, *col; box = gtk_table_new(1, 2, FALSE); gtk_widget_show(box); label = gtk_label_new(gettext("Documents")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); col = gtk_table_new(2, 1, FALSE); gtk_widget_show(col); gtk_table_attach(GTK_TABLE(box), col, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); gui_cfg.sufix_sw = gtk_check_button_new_with_label(gettext("Allow / Disallow suffix")); gtk_widget_show(gui_cfg.sufix_sw); gtk_table_attach(GTK_TABLE(col), gui_cfg.sufix_sw, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = guitl_new_edit_list(&gui_cfg.sufixlist, &gui_cfg.sufix_label, gettext("Suffix: "), NULL, NULL, NULL, NULL, TRUE, NULL); gtk_table_attach(GTK_TABLE(col), brow, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); col = gtk_table_new(2, 1, FALSE); gtk_widget_show(col); gtk_table_attach(GTK_TABLE(box), col, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); gui_cfg.prefix_sw = gtk_check_button_new_with_label(gettext("Allow / Disallow prefix")); gtk_widget_show(gui_cfg.prefix_sw); gtk_table_attach(GTK_TABLE(col), gui_cfg.prefix_sw, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); brow = guitl_new_edit_list(&gui_cfg.prefixlist, &gui_cfg.prefix_label, gettext("Prefix: "), NULL, NULL, NULL, NULL, TRUE, NULL); gtk_table_attach(GTK_TABLE(col), brow, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); } static void limtab_mime(GtkWidget * notebook) { GtkWidget *col, *box, *label, *frame, *entry, *pbox; box = gtk_hbox_new(0, 5); gtk_widget_show(box); label = gtk_label_new(gettext("MIME types")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); pbox = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(box), pbox, FALSE, FALSE, 5); gtk_widget_show(pbox); gui_cfg.mime_sw = gtk_check_button_new_with_label(gettext("Allow / Disallow MIME type")); gtk_box_pack_start(GTK_BOX(pbox), gui_cfg.mime_sw, FALSE, FALSE, 5); gtk_widget_show(gui_cfg.mime_sw); frame = gtk_frame_new(gettext("MIME types")); gtk_box_pack_start(GTK_BOX(pbox), frame, TRUE, TRUE, 5); gtk_widget_show(frame); col = guitl_new_edit_list(&gui_cfg.amimelist, &entry, gettext("MIME type: "), NULL, NULL, NULL, NULL, TRUE, mimetypes); gtk_container_add(GTK_CONTAINER(frame), col); } static void limtab_time(GtkWidget * notebook) { GtkWidget *tbox, *box, *col, *label, *frame; tbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(tbox); label = gtk_label_new(gettext("Time")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tbox, label); box = gtk_hbox_new(FALSE, 5); gtk_widget_show(box); gtk_box_pack_start(GTK_BOX(tbox), box, FALSE, FALSE, 4); frame = gtk_frame_new(gettext("Lower document time limit")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 4); col = guitl_timesel_new(&gui_cfg.btime_cal, &gui_cfg.btime_h_entry, &gui_cfg.btime_min_entry, &gui_cfg.btime_mon, &gui_cfg.btime_yentry); gtk_container_add(GTK_CONTAINER(frame), col); gui_cfg.btime_sw = gtk_check_button_new_with_label(gettext ("Check if doc. time newer than this")); gtk_widget_show(gui_cfg.btime_sw); gtk_box_pack_start(GTK_BOX(col), gui_cfg.btime_sw, FALSE, FALSE, 4); frame = gtk_frame_new(gettext("Upper document time limit")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 4); col = guitl_timesel_new(&gui_cfg.etime_cal, &gui_cfg.etime_h_entry, &gui_cfg.etime_min_entry, &gui_cfg.etime_mon, &gui_cfg.etime_yentry); gtk_container_add(GTK_CONTAINER(frame), col); gui_cfg.etime_sw = gtk_check_button_new_with_label(gettext ("Check if doc. time older than this")); gtk_widget_show(gui_cfg.etime_sw); gtk_box_pack_start(GTK_BOX(col), gui_cfg.etime_sw, FALSE, FALSE, 4); frame = gtk_table_new(3, 1, FALSE); gtk_box_pack_start(GTK_BOX(tbox), frame, FALSE, FALSE, 4); gtk_widget_show(frame); gui_cfg.max_time = guitl_tab_add_doubleentry(frame, gettext("Maximal allowed time of downloading: "), 0, 0, INT_MAX, 2); label = gtk_label_new(gettext(" min")); gtk_table_attach(GTK_TABLE(frame), label, 2, 3, 0, 1, GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(label); } static void limtab_html(GtkWidget * notebook) { GtkWidget *box, *label, *frame, *check; int i, j; char pom[100]; frame = gtk_frame_new(gettext("Select allowed HTML tags and attributes")); gtk_widget_show(frame); label = gtk_label_new(gettext("HTML")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, label); gui_cfg.html_tags = box = gtk_multicol_new(10); gtk_multicol_set_number_of_rows(GTK_MULTICOL(gui_cfg.html_tags), 14); gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(frame), box); for(i = 0; i < html_link_tags_num(); i++) { for(j = 0; html_link_tags[i].attribs[j].attrib; j++) { if(!(html_link_tags[i].attribs[j].stat & LINK_STYLE)) { snprintf(pom, sizeof(pom), gettext("%s of %s"), html_link_tags[i].attribs[j].attrib, html_link_tags[i].tag); check = gtk_check_button_new_with_label(pom); gtk_object_set_user_data(GTK_OBJECT(check), (gpointer) & html_link_tags[i].attribs[j].stat); gtk_widget_show(check); gtk_container_add(GTK_CONTAINER(box), check); } } } } struct cfg_tag_patterns_t { GtkWidget *list; GtkWidget *tag; GtkWidget *attrib; GtkWidget *urlp; GtkWidget *re_wc; }; static struct cfg_tag_patterns_t tagpat; static void TagPatSelectRow(void) { char *p; int type; int row = GPOINTER_TO_INT(GTK_CLIST(tagpat.list)->selection->data); type = (int) gtk_clist_get_row_data(GTK_CLIST(tagpat.list), row); gtk_option_menu_set_history(GTK_OPTION_MENU(tagpat.re_wc), type); gtk_clist_get_text(GTK_CLIST(tagpat.list), row, 1, &p); gtk_entry_set_text(GTK_ENTRY(tagpat.tag), p); gtk_clist_get_text(GTK_CLIST(tagpat.list), row, 2, &p); gtk_entry_set_text(GTK_ENTRY(tagpat.attrib), p); gtk_clist_get_text(GTK_CLIST(tagpat.list), row, 2, &p); gtk_entry_set_text(GTK_ENTRY(tagpat.urlp), p); } static void TagPatNew(int row) { char *pp[4]; tag_pattern_t *tp; int type; type = GTK_OPTION_MENU(tagpat.re_wc)->menu_item ? (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(tagpat.re_wc)-> menu_item)) : TAGP_WC; pp[0] = type == TAGP_WC ? "WC" : "RE"; pp[1] = (char *) gtk_entry_get_text(GTK_ENTRY(tagpat.tag)); pp[2] = (char *) gtk_entry_get_text(GTK_ENTRY(tagpat.attrib)); pp[3] = (char *) gtk_entry_get_text(GTK_ENTRY(tagpat.urlp)); if(!(tp = tag_pattern_new(type, pp[1], pp[2], pp[3]))) { gdk_beep(); return; } tag_pattern_free(tp); if(row < 0) row = gtk_clist_append(GTK_CLIST(tagpat.list), pp); else { int i; for(i = 0; i < 4; i++) gtk_clist_set_text(GTK_CLIST(tagpat.list), row, i, pp[i]); } gtk_clist_set_row_data(GTK_CLIST(tagpat.list), row, (gpointer) type); } static void TagPatModify(void) { if(!GTK_CLIST(tagpat.list)->selection) { gdk_beep(); return; } TagPatNew(GPOINTER_TO_INT(GTK_CLIST(tagpat.list)->selection->data)); } static void TagPatAppend(void) { TagPatNew(-1); } static void limtab_tags(GtkWidget * notebook) { GtkWidget *pbox, *label, *frame, *box, *smenu, *mi, *ptab, *bbox; GtkWidget *button; int i, j, k; char **pp1, **pp2; box = gtk_hbox_new(FALSE, 2); gtk_widget_show(box); label = gtk_label_new(gettext("Tag patterns")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 2); gtk_widget_show(frame); pbox = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(frame), pbox); gtk_widget_show(pbox); gui_cfg.tag_patterns = tagpat.list = gtk_clist_new(4); gtk_clist_set_column_title(GTK_CLIST(tagpat.list), 0, gettext("Type")); gtk_clist_set_column_title(GTK_CLIST(tagpat.list), 1, gettext("Tag pattern")); gtk_clist_set_column_title(GTK_CLIST(tagpat.list), 2, gettext("Attribute pattern")); gtk_clist_set_column_title(GTK_CLIST(tagpat.list), 3, gettext("URL pattern")); gtk_clist_set_column_auto_resize(GTK_CLIST(tagpat.list), 0, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(tagpat.list), 1, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(tagpat.list), 2, TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(tagpat.list), 3, TRUE); gtk_clist_column_titles_show(GTK_CLIST(tagpat.list)); gtk_signal_connect(GTK_OBJECT(tagpat.list), "select_row", GTK_SIGNAL_FUNC(TagPatSelectRow), NULL); gtk_container_add(GTK_CONTAINER(pbox), tagpat.list); gtk_widget_show(tagpat.list); ptab = gtk_table_new(2, 2, FALSE); gtk_box_pack_start(GTK_BOX(pbox), ptab, FALSE, FALSE, 2); gtk_widget_show(ptab); label = gtk_label_new(gettext("Pattern type: ")); gtk_table_attach(GTK_TABLE(ptab), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show(label); tagpat.re_wc = gtk_option_menu_new(); gtk_table_attach(GTK_TABLE(ptab), tagpat.re_wc, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 2, 2); smenu = gtk_menu_new(); gtk_widget_realize(smenu); mi = gtk_menu_item_new_with_label(gettext("Wildcard patterns")); gtk_menu_append(GTK_MENU(smenu), mi); gtk_widget_show(mi); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) TAGP_WC); #ifdef HAVE_REGEX mi = gtk_menu_item_new_with_label(gettext("RE patterns")); gtk_menu_append(GTK_MENU(smenu), mi); gtk_widget_show(mi); gtk_object_set_user_data(GTK_OBJECT(mi), (gpointer) TAGP_RE); #endif gtk_option_menu_set_menu(GTK_OPTION_MENU(tagpat.re_wc), smenu); gtk_widget_show(tagpat.re_wc); /* tagpat.tag = guitl_tab_add_entry(ptab, gettext("Tag pattern"), 0, 1, FALSE); tagpat.attrib = guitl_tab_add_entry(ptab, gettext("Attribute pattern"), 0, 2, FALSE); */ pp2 = NULL; k = 0; pp1 = _malloc((html_link_tags_num() + 2) * sizeof(char *)); for(i = 0; i < html_link_tags_num(); i++) { pp1[i] = html_link_tags[i].tag; pp1[i + 1] = NULL; for(j = 0; html_link_tags[i].attribs[j].attrib; j++) { if(0 > tl_strv_find(pp2, html_link_tags[i].attribs[j].attrib)) { pp2 = _realloc(pp2, sizeof(char *) * (3 + k)); pp2[k] = html_link_tags[i].attribs[j].attrib; pp2[k + 1] = NULL; k++; } } } pp1[i] = ""; pp1[i + 1] = NULL; tl_strv_sort(pp1); pp2[k] = ""; pp2[k + 1] = NULL; tl_strv_sort(pp2); tagpat.tag = guitl_tab_add_enum(ptab, gettext("Tag pattern"), 0, 1, (const char **) pp1, TRUE); _free(pp1); tagpat.attrib = guitl_tab_add_enum(ptab, gettext("Attribute pattern"), 0, 2, (const char **) pp2, TRUE); _free(pp2); tagpat.urlp = guitl_tab_add_entry(ptab, gettext("URL pattern"), 0, 3, FALSE); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); gtk_box_pack_start(GTK_BOX(pbox), bbox, FALSE, FALSE, 5); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(TagPatAppend), &tagpat); button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(TagPatModify), &tagpat); button = guitl_pixmap_button(clear_xpm, NULL, gettext("Clear")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListClear), tagpat.list); button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), tagpat.list); } /*** LIMITS CFG ***/ void gui_build_config_limits(int popup) { GtkWidget *col, *brow, *button, *notebook; GtkAccelGroup *accel_group; if(gui_cfg.cfg_limits) { if(popup) { if(!GTK_WIDGET_VISIBLE(gui_cfg.cfg_limits)) xset_cfg_values_lim(); gtk_widget_show_all(gui_cfg.cfg_limits); if(GTK_WIDGET_REALIZED(gui_cfg.cfg_limits)) gdk_window_raise(gui_cfg.cfg_limits->window); } return; } gui_cfg.cfg_limits = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_border_width(GTK_CONTAINER(gui_cfg.cfg_limits), 3); gtk_window_set_title(GTK_WINDOW(gui_cfg.cfg_limits), gettext("Pavuk: Limits config")); gtk_widget_realize(gui_cfg.cfg_limits); gtk_signal_connect(GTK_OBJECT(gui_cfg.cfg_limits), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.cfg_limits); col = gtk_table_new(2, 1, FALSE); gtk_container_add(GTK_CONTAINER(gui_cfg.cfg_limits), col); gtk_widget_show(col); notebook = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); gtk_table_attach_defaults(GTK_TABLE(col), notebook, 0, 1, 0, 1); gtk_widget_show(notebook); limtab_tree(notebook); limtab_patterns(notebook); limtab_hosts(notebook); limtab_docs(notebook); limtab_mime(notebook); limtab_time(notebook); limtab_html(notebook); limtab_tags(notebook); brow = gtk_hbutton_box_new(); gtk_table_attach(GTK_TABLE(col), brow, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 5); gtk_hbutton_box_set_spacing_default(1); gtk_widget_show(brow); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); button = guitl_pixmap_button(ok_xpm, NULL, gettext("OK")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gui_PopdownWC), (gpointer) gui_cfg.cfg_limits); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); button = guitl_pixmap_button(apply_xpm, NULL, gettext("Apply")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(CfgLimits), (gpointer) gui_cfg.config_shell); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); button = guitl_pixmap_button(common_xpm, NULL, gettext("Common ...")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gui_PopupW), (gpointer) PAVUK_CFGCOMM); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); button = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel")); accel_group = gtk_accel_group_new(); gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(gui_cfg.cfg_limits), accel_group); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) gui_cfg.cfg_limits); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); if(popup) gtk_widget_show(gui_cfg.cfg_limits); xset_cfg_values_lim(); } #endif pavuk-0.9.35/src/pavuk.ico0000644000175000001440000000206607667306551012307 00000000000000 è&(( @€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ™™™™™ˆˆˆˆˆ À À¿ÿÿý¿ÿÿý¿ÿÿý¿ðý¿€ýŸýÞûîûòçøŸ~ÿÆüðüÿþÿøÿÆÿÿøþÿüàsÿùàyÿûà~?óàßçàïÏïïŸÿÿ÷¿ÿÿó?ÿÿùÿÿýÿÿÿ( €€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆ˜‰ˆ€™™€ˆ˜€‰ˆ€ˆˆ¿ý¿ý¿ýÜ;h° Ð àÀ¸t.îwÜ;¿ý¿ýÿÿpavuk-0.9.35/src/ainterface.c0000644000175000001440000003072510325645710012721 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include "ainterface.h" #include "recurse.h" #include "update_links.h" #include "tools.h" #include "remind.h" #include "form.h" #include "stats.h" #include "gui_api.h" #include "jsbind.h" #include "myssl.h" void free_all(void) { while(cfg.urlstack) cfg.urlstack = dllist_remove_entry(cfg.urlstack, cfg.urlstack); while(cfg.urls_in_dir) cfg.urls_in_dir = dllist_remove_entry(cfg.urls_in_dir, cfg.urls_in_dir); if(cfg.url_hash_tbl) dlhash_empty(cfg.url_hash_tbl); if(cfg.fn_hash_tbl) dlhash_empty(cfg.fn_hash_tbl); cfg.urlstack = NULL; cfg.docnr = 0; #ifdef GTK_FACE gui_clear_tree(); form_edit_dlg_clear(); stats_clear(); #endif } url *append_starting_url(url_info * ui, url * parent) { url *urlp; urlp = url_parse(ui->urlstr); assert(urlp->type != URLT_FROMPARENT); if((urlp->type == URLT_FILE) && access(urlp->p.file.filename, F_OK) && (*ui->urlstr != '/') && prottable[urlp->type].supported) { char *p = NULL; free_deep_url(urlp); _free(urlp); if(!strncasecmp(ui->urlstr, "gopher.", 7)) p = tl_str_concat(p, "gopher://", ui->urlstr, NULL); else if(!strncasecmp(ui->urlstr, "ftp.", 4)) p = tl_str_concat(p, "ftp://", ui->urlstr, NULL); else if(!strncasecmp(ui->urlstr, "ssl.", 4)) p = tl_str_concat(p, "https://", ui->urlstr, NULL); else p = tl_str_concat(p, "http://", ui->urlstr, NULL); urlp = url_parse(p); assert(urlp->type != URLT_FROMPARENT); _free(p); } if(!cfg.urlstack) urlp->status |= URL_ISFIRST; if(ui->localname) url_set_filename(urlp, ui->localname); if(parent) { urlp->parent_url = dllist_append(urlp->parent_url, (dllist_t)parent); urlp->level = parent->level + 1; } else { urlp->status |= URL_ISSTARTING; } if(ui->type == URLI_FORM) { form_info *fi; dllist *ptr; urlp->status |= URL_FORM_ACTION; fi = _malloc(sizeof(form_info)); fi->method = ui->method; fi->encoding = ui->encoding; fi->action = NULL; fi->text = NULL; fi->infos = NULL; fi->parent_url = NULL; ptr = ui->fields; while(ptr) { fi->infos = dllist_append(fi->infos, (dllist_t)form_field_duplicate((form_field *) ptr->data)); ptr = ptr->next; } urlp->extension = fi; } if(!prottable[urlp->type].supported || url_was_befor(urlp)) { if(!prottable[urlp->type].supported) { xprintf(1, gettext("Removing unsupported URL: %s\n"), ui->urlstr); } free_deep_url(urlp); _free(urlp); } else append_url_to_list(urlp); return urlp; } static void _append_starting_urls(void) { dllist *dptr; for(dptr = cfg.request; dptr; dptr = dptr->next) { url_info *ui = (url_info *) dptr->data; append_starting_url(ui, NULL); } } static void absi_conf(void) { #ifdef HAVE_MOZJS pjs_destroy(); pjs_init(); #endif #ifdef USE_SSL my_ssl_init_start(); #endif } void absi_restart(void) { int i; #ifdef I_FACE #ifdef HAVE_MT _config_struct_priv_t privcfg; #if defined (__OSF__) || defined (__osf__) #define __builtin_try #define __builtin_finally #endif privcfg_make_copy(&privcfg); pthread_setspecific(cfg.privcfg_key, (void *) (&privcfg)); pthread_cleanup_push((void *) privcfg_free, (void *) (&privcfg)); #endif cfg.rbreak = FALSE; cfg.stop = FALSE; #endif absi_conf(); cfg.start_time = time(NULL); gettimeofday(&cfg.hr_start_time, NULL); cfg.fail_cnt = 0; cfg.process_cnt = 0; cfg.reject_cnt = 0; cfg.mode_started = FALSE; cfg.prev_mode = cfg.mode; cfg.trans_size = 0; /*** cleanup ***/ free_all(); gui_create_tree_root_node(); cfg.total_cnt = 0; cfg.urlstack = NULL; switch (cfg.mode) { case MODE_SINGLE: case MODE_SREGET: case MODE_NORMAL: case MODE_NOSTORE: case MODE_FTPDIR: if(!cfg.xi_face) if(!cfg.request) usage_short(); if(cfg.request) { _append_starting_urls(); cfg.mode_started = TRUE; recurse(TRUE); } else if(cfg.xi_face) gui_set_msg(gettext("Specify at least one starting URL!"), 5); else xprintf(1, gettext("Specify at least one starting URL!\n")); break; case MODE_LNUPD: if(!priv_cfg.subdir) { for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].supported && prottable[i].dirname) { char *pom; pom = tl_str_concat(NULL, priv_cfg.cache_dir, "/", prottable[i].dirname, NULL); if(!access(pom, F_OK)) { LOCK_DIRR; update_links(pom); UNLOCK_DIRR; } _free(pom); } } } else { LOCK_DIRR; update_links(priv_cfg.subdir); UNLOCK_DIRR; } break; case MODE_SYNC: cfg.total_cnt = 0; cfg.urlstack = NULL; if(cfg.request) { _append_starting_urls(); } if((cfg.remove_old && priv_cfg.subdir) || !cfg.request) { if(!priv_cfg.subdir) { for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].supported && prottable[i].dirname) { char *pom; pom = tl_str_concat(NULL, priv_cfg.cache_dir, "/", prottable[i].dirname, NULL); if(!access(pom, F_OK)) { LOCK_DIRR; get_urls_to_synchronize(pom, &cfg.urls_in_dir); UNLOCK_DIRR; } _free(pom); } } } else { LOCK_DIRR; get_urls_to_synchronize(priv_cfg.subdir, &cfg.urls_in_dir); UNLOCK_DIRR; } /* rather check files from directory scan */ /* before each others because we can this */ /* way workaround the inability to use %E */ /* and %M in -fnrules and it won't break */ /* anything */ /* if (!cfg.request) */ { while(cfg.urls_in_dir) { url *purl = (url *) cfg.urls_in_dir->data; append_url_to_list(purl); cfg.urls_in_dir = dllist_remove_entry(cfg.urls_in_dir, cfg.urls_in_dir); } } } cfg.mode_started = TRUE; recurse(TRUE); if(!cfg.urlstack) { while(cfg.urls_in_dir) { url *purl = (url *) cfg.urls_in_dir->data; purl->status |= URL_NORECURSE; if(url_was_befor(purl)) { free_deep_url(purl); _free(purl); } else append_url_to_list(purl); cfg.urls_in_dir = dllist_remove_entry(cfg.urls_in_dir, cfg.urls_in_dir); } if(cfg.urlstack) recurse(FALSE); } break; case MODE_MIRROR: cfg.total_cnt = 0; cfg.urlstack = NULL; if(cfg.request) { _append_starting_urls(); } if((cfg.remove_old && priv_cfg.subdir) || !cfg.request) { if(!priv_cfg.subdir) { for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].supported && prottable[i].dirname) { char *pom; pom = tl_str_concat(NULL, priv_cfg.cache_dir, "/", prottable[i].dirname, NULL); if(!access(pom, F_OK)) { LOCK_DIRR; get_urls_to_synchronize(pom, &cfg.urls_in_dir); UNLOCK_DIRR; } _free(pom); } } } else { LOCK_DIRR; get_urls_to_synchronize(priv_cfg.subdir, &cfg.urls_in_dir); UNLOCK_DIRR; } /* we will not be able to use %E */ /* and %M in -fnrules */ } cfg.mode_started = TRUE; recurse(TRUE); if(!cfg.urlstack) { /* If everything was successful we remove all files we had before that were not downloaded */ while(cfg.urls_in_dir) { url *purl = (url *) cfg.urls_in_dir->data; purl->status |= URL_NORECURSE; if(url_was_befor(purl)) { free_deep_url(purl); _free(purl); } else { printf("no longer there; delete '%s'\n", purl->local_name); doc_remove(purl); } cfg.urls_in_dir = dllist_remove_entry(cfg.urls_in_dir, cfg.urls_in_dir); } } break; case MODE_RESUME: cfg.total_cnt = 0; cfg.urlstack = NULL; if(!priv_cfg.subdir) { for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].supported && prottable[i].dirname) { char *pom; pom = tl_str_concat(NULL, priv_cfg.cache_dir, "/", prottable[i].dirname, NULL); if(!access(pom, F_OK)) { LOCK_DIRR; get_urls_to_resume(pom); UNLOCK_DIRR; } _free(pom); } } } else { LOCK_DIRR; get_urls_to_resume(priv_cfg.subdir); UNLOCK_DIRR; } cfg.mode_started = TRUE; recurse(TRUE); break; case MODE_REMIND: remind_load_db(); remind_start_add(); remind_do(); remind_save_db(); if(!cfg.stop && !cfg.rbreak) remind_send_result(); break; default: break; } #if defined(I_FACE) && defined(HAVE_MT) pthread_cleanup_pop(TRUE); if(cfg.xi_face) gui_finish_download(FALSE); #endif } void absi_cont(void) { int i; #if defined(I_FACE) && defined(HAVE_MT) _config_struct_priv_t privcfg; #endif if(cfg.mode == MODE_MIRROR) return; #ifdef I_FACE #ifdef HAVE_MT privcfg_make_copy(&privcfg); pthread_setspecific(cfg.privcfg_key, (void *) (&privcfg)); pthread_cleanup_push((void *) privcfg_free, (void *) (&privcfg)); #endif cfg.rbreak = FALSE; cfg.stop = FALSE; #endif absi_conf(); switch (cfg.mode) { case MODE_SINGLE: case MODE_SREGET: case MODE_RESUME: case MODE_NORMAL: case MODE_NOSTORE: case MODE_FTPDIR: recurse(FALSE); break; case MODE_SYNC: recurse(FALSE); if(!cfg.urlstack) { while(cfg.urls_in_dir) { url *purl = (url *) cfg.urls_in_dir->data; purl->status |= URL_NORECURSE; if(url_was_befor(purl)) { free_deep_url(purl); _free(purl); } else append_url_to_list(purl); cfg.urls_in_dir = dllist_remove_entry(cfg.urls_in_dir, cfg.urls_in_dir); } if(cfg.urlstack) recurse(FALSE); } break; case MODE_LNUPD: if(!priv_cfg.subdir) { for(i = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].supported && prottable[i].dirname) { char *pom; pom = tl_str_concat(NULL, priv_cfg.cache_dir, "/", prottable[i].dirname, NULL); if(!access(pom, F_OK)) { LOCK_DIRR; update_links(pom); UNLOCK_DIRR; } _free(pom); } } } else { LOCK_DIRR; update_links(priv_cfg.subdir); UNLOCK_DIRR; } break; case MODE_REMIND: remind_start_add(); remind_do(); remind_save_db(); if(!cfg.stop && !cfg.rbreak) remind_send_result(); default: break; } #if defined(I_FACE) && defined(HAVE_MT) pthread_cleanup_pop(TRUE); if(cfg.xi_face) gui_finish_download(FALSE); #endif } #ifdef GETTEXT_NLS char **get_available_languages(void) { DIR *dir; struct dirent *dent; char msgfile[PATH_MAX]; char **retv = NULL; int nr = 0; LOCK_DIRR; if(!cfg.msgcatd || !(dir = opendir(cfg.msgcatd))) { UNLOCK_DIRR; xprintf(0, gettext("Can't list available message catalogs\n")); return NULL; } while((dent = readdir(dir))) { if(!strcmp(dent->d_name, ".")) continue; if(!strcmp(dent->d_name, "..")) continue; snprintf(msgfile, sizeof(msgfile), "%s/%s/LC_MESSAGES/%s.mo", cfg.msgcatd, dent->d_name, PACKAGE); if(!access(msgfile, R_OK)) { nr++; retv = _realloc(retv, (nr + 1) * sizeof(char *)); retv[nr - 1] = tl_strdup(dent->d_name); retv[nr] = NULL; } } closedir(dir); UNLOCK_DIRR; if(retv) tl_strv_sort(retv); return retv; } #endif pavuk-0.9.35/src/ainterface.h0000644000175000001440000000124410251617052012714 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _ainterface_h_ #define _ainterface_h_ #include "url.h" #ifdef GETTEXT_NLS extern char **get_available_languages(void); #endif extern void absi_cont(void); extern void absi_restart(void); extern void free_all(void); extern url *append_starting_url(url_info *, url *); #endif pavuk-0.9.35/src/jstrans.c0000644000175000001440000000377410151321433012276 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include "config.h" #include "jstrans.h" #include "tools.h" #ifdef HAVE_REGEX void js_transform_free(js_transform_t *jt) { re_free(jt->re); _free(jt->transform); _free(jt->tag); _free(jt->attrib); _free(jt); } js_transform_t *js_transform_new(const char *pattern, const char *transform, const char *tag, const char *attrib, int type) { js_transform_t *rv; re_entry *re; if(!pattern || !transform || !tag || !attrib || !*pattern || !*transform) return NULL; re = re_make(pattern); if(!re) return NULL; rv = _malloc(sizeof(js_transform_t)); rv->type = type; rv->re = re; rv->transform = tl_strdup(transform); rv->tag = tl_strdup(tag); rv->attrib = tl_strdup(attrib); return rv; } int js_transform_match_tag(js_transform_t *jt, const char *tag) { int l; if(jt->tag[0] == '*') return TRUE; l = strcspn(tag + 1, " \t\r\n>"); if(!strncasecmp(tag + 1, jt->tag, l) && (l == strlen(jt->tag))) return TRUE; return FALSE; } char *js_transform_apply(js_transform_t *jt, const char *attr, int nsub, int *subs) { char *rv; int n, l; l = strcspn(jt->transform, "$"); rv = tl_strndup(jt->transform, l); do { if(jt->transform[l] == '$') { n = atoi(jt->transform + l + 1); if(n <= nsub) { rv = tl_str_nappend(rv, attr + subs[2 * n], subs[2 * n + 1] - subs[2 * n]); } l += 1 + strspn(jt->transform + l + 1, "0123456789"); } n = strcspn(jt->transform + l, "$"); rv = tl_str_nappend(rv, jt->transform + l, n); l += n; } while(jt->transform[l]); return rv; } #endif pavuk-0.9.35/src/jstrans.h0000644000175000001440000000157210151316762012306 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _jstrans_h_ #define _jstrans_h_ #ifdef HAVE_REGEX #include "re.h" typedef struct { int type; re_entry *re; char *transform; char *tag; char *attrib; } js_transform_t; extern js_transform_t *js_transform_new(const char *, const char *, const char *, const char *, int); extern void js_transform_free(js_transform_t *); extern int js_transform_match_tag(js_transform_t *, const char *); extern char *js_transform_apply(js_transform_t *, const char *, int, int *); #endif #endif pavuk-0.9.35/src/pavukrc.h0000644000175000001440000000065510142077741012277 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #define PAVUK_ICON 10000 pavuk-0.9.35/src/myssl_nss.c0000644000175000001440000003376510300054562012651 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #if defined(USE_SSL) && defined(USE_SSL_IMPL_NSS) #include #include #include #include #include #include "myssl.h" #include "http.h" #include "bufio.h" #include "errcode.h" #include "tools.h" #define PR_DESC_PAVUK_BUFIO 8 static PRInt32 PR_CALLBACK myssl_bufio_avail(PRFileDesc * fd) { PRInt32 result; bufio *sock; sock = (bufio *) fd->secret; if(ioctl(sock->fd, FIONREAD, &result) < 0) result = -1; else result += sock->buf_end - sock->buf_start; return result; } static PRInt64 PR_CALLBACK myssl_bufio_avail64(PRFileDesc * fd) { return myssl_bufio_avail(fd); } static PRStatus PR_CALLBACK myssl_bufio_close(PRFileDesc * fd) { return PR_SUCCESS; } static PRStatus PR_CALLBACK myssl_bufio_sync(PRFileDesc * fd) { return PR_SUCCESS; } static PRStatus PR_CALLBACK myssl_bufio_connect(PRFileDesc * fd, const PRNetAddr * addr, PRIntervalTime timeout) { return PR_SUCCESS; } static PRInt32 PR_CALLBACK myssl_bufio_read(PRFileDesc * fd, void *buf, PRInt32 len) { PRInt32 rv; bufio *sock; sock = (bufio *) fd->secret; rv = bufio_nbfread(sock, buf, len); return rv; } static PRInt32 PR_CALLBACK myssl_bufio_recv(PRFileDesc * fd, void *buf, PRInt32 len, PRIntn flags, PRIntervalTime timeout) { return myssl_bufio_read(fd, buf, len); } static PRInt32 PR_CALLBACK myssl_bufio_write(PRFileDesc * fd, void *buf, PRInt32 len) { PRInt32 rv; bufio *sock; sock = (bufio *) fd->secret; rv = bufio_write(sock, buf, len); return rv; } static PRInt32 PR_CALLBACK myssl_bufio_send(PRFileDesc * fd, void *buf, PRInt32 len, PRIntn flags, PRIntervalTime timeout) { return myssl_bufio_write(fd, buf, len); } static PRInt16 PR_CALLBACK myssl_bufio_poll(PRFileDesc * fd, PRInt16 in_flags, PRInt16 * out_flags) { *out_flags = 0; if((in_flags & PR_POLL_READ) && myssl_bufio_avail(fd) > 0) *out_flags = PR_POLL_READ; return in_flags; } static PRStatus PR_CALLBACK myssl_bufio_getpeername(PRFileDesc * fd, PRNetAddr * addr) { bufio *sock; PRUint32 len; len = sizeof(PRNetAddr); sock = (bufio *) fd->secret; if(!getpeername(bufio_getfd(sock), (struct sockaddr *) addr, &len)) return PR_SUCCESS; else return PR_FAILURE; } static PRStatus PR_CALLBACK myssl_bufio_getsockopt(PRFileDesc * fd, PRSocketOptionData * data) { if(data->option == PR_SockOpt_Nonblocking) { data->value.non_blocking = FALSE; return PR_SUCCESS; } return PR_FAILURE; } /* FIXME: externs should be in an include file */ extern PRIntn _PR_InvalidInt(void); extern PRInt64 _PR_InvalidInt64(void); extern PRStatus _PR_InvalidStatus(void); extern PRFileDesc *_PR_InvalidDesc(void); static const PRIOMethods myssl_bufio_methods = { PR_DESC_PAVUK_BUFIO, myssl_bufio_close, myssl_bufio_read, myssl_bufio_write, myssl_bufio_avail, myssl_bufio_avail64, myssl_bufio_sync, (PRSeekFN) _PR_InvalidInt, (PRSeek64FN) _PR_InvalidInt64, (PRFileInfoFN) _PR_InvalidStatus, (PRFileInfo64FN) _PR_InvalidStatus, (PRWritevFN) _PR_InvalidInt, myssl_bufio_connect, (PRAcceptFN) _PR_InvalidDesc, (PRBindFN) _PR_InvalidStatus, (PRListenFN) _PR_InvalidStatus, (PRShutdownFN) _PR_InvalidStatus, myssl_bufio_recv, myssl_bufio_send, (PRRecvfromFN) _PR_InvalidInt, (PRSendtoFN) _PR_InvalidInt, (PRPollFN) myssl_bufio_poll, (PRAcceptreadFN) _PR_InvalidInt, (PRTransmitfileFN) _PR_InvalidInt, (PRGetsocknameFN) _PR_InvalidStatus, myssl_bufio_getpeername, (PRReservedFN) _PR_InvalidInt, (PRReservedFN) _PR_InvalidInt, myssl_bufio_getsockopt, (PRSetsocketoptionFN) _PR_InvalidStatus, (PRSendfileFN) _PR_InvalidInt, (PRReservedFN) _PR_InvalidInt, (PRReservedFN) _PR_InvalidInt, (PRReservedFN) _PR_InvalidInt, (PRReservedFN) _PR_InvalidInt, (PRReservedFN) _PR_InvalidInt, }; static void myssl_bufio_init_io_layer(void) { static int inited = FALSE; if(!inited) { myssl_bufio_methods.file_type = PR_GetUniqueIdentity("Pavuk_bufio"); inited = FALSE; } inited = TRUE; } static PRFileDesc *myssl_bufio_get_io_layer(void) { myssl_bufio_init_io_layer(); return PR_CreateIOLayerStub(myssl_bufio_methods.file_type, &myssl_bufio_methods); } static PRFileDesc *myssl_bufio_new_socket(bufio * sock) { PRFileDesc *fd; fd = myssl_bufio_get_io_layer(); fd->secret = (PRFilePrivate *) sock; return fd; } static char *my_ssl_passwd_callback(PK11SlotInfo * slot, PRBool retry, void *arg) { char *passwd = NULL; if(!retry && arg) passwd = PL_strdup((char *) arg); return passwd; } static SECStatus my_ssl_verify_callback(void *arg, PRFileDesc * fd, PRBool check_sig, PRBool is_server) { SECStatus rv; CERTCertificate *cert; cert = SSL_PeerCertificate(fd); DEBUG_SSL("Subject: %s\n", cert->subjectName); DEBUG_SSL("Issuer: %s\n", cert->issuerName); rv = SSL_AuthCertificate(arg, fd, check_sig, is_server); if(rv == SECSuccess) DEBUG_SSL("SSL certificate valid.\n"); CERT_DestroyCertificate(cert); return rv; } static SECStatus my_ssl_verify_failed_callback(void *arg, PRFileDesc * fd) { int err = PR_GetError(); DEBUG_SSL("SSL certificate invalid (%d).\n", err); DEBUG_SSL("%s\n", SECU_Strerror(err)); return cfg.nss_accept_unknown_cert ? SECSuccess : SECFailure; } void my_ssl_init(void) { } void my_ssl_init_once(void) { PR_Init(PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1); } void my_ssl_init_start(void) { SECStatus rv; char *certDir = priv_cfg.nss_cert_dir; static bool_t called = FALSE; if(called) NSS_Shutdown(); else called = TRUE; if(!certDir) { /* Look in $SSL_DIR */ certDir = SECU_DefaultSSLDir(); /* call even if it's NULL */ certDir = SECU_ConfigDirectory(certDir); } DEBUG_SSL("myssl_nss: config dir %s\n", certDir ? certDir : "(null)"); if(priv_cfg.ssl_cert_passwd) PK11_SetPasswordFunc(my_ssl_passwd_callback); else PK11_SetPasswordFunc(SECU_GetModulePassword); rv = NSS_Init(certDir); if(rv != SECSuccess) xprintf(1, gettext("NSS_Init: Unable to open cert database")); if(cfg.nss_domestic_policy) NSS_SetDomesticPolicy(); else NSS_SetExportPolicy(); } void my_ssl_cleanup(void) { NSS_Shutdown(); PR_Cleanup(); } void my_ssl_connection_close(ssl_connection * con) { if(con->fd) PR_Close(con->fd); if(con->socket) bufio_close(con->socket); con->fd = NULL; con->socket = NULL; } void my_ssl_connection_destroy(ssl_connection * con) { my_ssl_connection_close(con); _free(con); } static ssl_connection *my_ssl_connection_new(void) { ssl_connection *con; con = _malloc(sizeof(ssl_connection)); con->fd = NULL; con->socket = NULL; return con; } static const struct { int cipher; char *name; } my_ssl_cipher_tab[] = { {SSL_EN_RC4_128_WITH_MD5, "EN_RC4_128_WITH_MD5"}, {SSL_EN_RC4_128_EXPORT40_WITH_MD5, "EN_RC4_128_EXPORT40_WITH_MD5"}, {SSL_EN_RC2_128_CBC_WITH_MD5, "EN_RC2_128_CBC_WITH_MD5"}, {SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5, "EN_RC2_128_CBC_EXPORT40_WITH_MD5"}, {SSL_EN_DES_64_CBC_WITH_MD5, "EN_DES_64_CBC_WITH_MD5"}, {SSL_EN_DES_192_EDE3_CBC_WITH_MD5, "EN_DES_192_EDE3_CBC_WITH_MD5"}, {SSL_NULL_WITH_NULL_NULL, "NULL_WITH_NULL_NULL"}, {SSL_RSA_WITH_NULL_MD5, "RSA_WITH_NULL_MD5"}, {SSL_RSA_WITH_NULL_SHA, "RSA_WITH_NULL_SHA"}, {SSL_RSA_EXPORT_WITH_RC4_40_MD5, "RSA_EXPORT_WITH_RC4_40_MD5"}, {SSL_RSA_WITH_RC4_128_MD5, "RSA_WITH_RC4_128_MD5"}, {SSL_RSA_WITH_RC4_128_SHA, "RSA_WITH_RC4_128_SHA"}, {SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, "RSA_EXPORT_WITH_RC2_CBC_40_MD5"}, {SSL_RSA_WITH_IDEA_CBC_SHA, "RSA_WITH_IDEA_CBC_SHA"}, {SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, "RSA_EXPORT_WITH_DES40_CBC_SHA"}, {SSL_RSA_WITH_DES_CBC_SHA, "RSA_WITH_DES_CBC_SHA"}, {SSL_RSA_WITH_3DES_EDE_CBC_SHA, "RSA_WITH_3DES_EDE_CBC_SHA"}, {SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, "DH_DSS_EXPORT_WITH_DES40_CBC_SHA"}, {SSL_DH_DSS_WITH_DES_CBC_SHA, "DH_DSS_WITH_DES_CBC_SHA"}, {SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA, "DH_DSS_WITH_3DES_EDE_CBC_SHA"}, {SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA, "DH_RSA_EXPORT_WITH_DES40_CBC_SHA"}, {SSL_DH_RSA_WITH_DES_CBC_SHA, "DH_RSA_WITH_DES_CBC_SHA"}, {SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA, "DH_RSA_WITH_3DES_EDE_CBC_SHA"}, {SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, "DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"}, {SSL_DHE_DSS_WITH_DES_CBC_SHA, "DHE_DSS_WITH_DES_CBC_SHA"}, {SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, "DHE_DSS_WITH_3DES_EDE_CBC_SHA"}, {SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, "DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"}, {SSL_DHE_RSA_WITH_DES_CBC_SHA, "DHE_RSA_WITH_DES_CBC_SHA"}, {SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, "DHE_RSA_WITH_3DES_EDE_CBC_SHA"}, {SSL_DH_ANON_EXPORT_WITH_RC4_40_MD5, "DH_ANON_EXPORT_WITH_RC4_40_MD5"}, {SSL_DH_ANON_WITH_RC4_128_MD5, "DH_ANON_WITH_RC4_128_MD5"}, {SSL_DH_ANON_EXPORT_WITH_DES40_CBC_SHA, "DH_ANON_EXPORT_WITH_DES40_CBC_SHA"}, {SSL_DH_ANON_WITH_DES_CBC_SHA, "DH_ANON_WITH_DES_CBC_SHA"}, {SSL_DH_ANON_WITH_3DES_EDE_CBC_SHA, "DH_ANON_WITH_3DES_EDE_CBC_SHA"}, {SSL_FORTEZZA_DMS_WITH_NULL_SHA, "FORTEZZA_DMS_WITH_NULL_SHA"}, {SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA, "FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA"}, {SSL_FORTEZZA_DMS_WITH_RC4_128_SHA, "FORTEZZA_DMS_WITH_RC4_128_SHA"}, {TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA, "RSA_EXPORT1024_WITH_DES_CBC_SHA"}, {TLS_RSA_EXPORT1024_WITH_RC4_56_SHA, "RSA_EXPORT1024_WITH_RC4_56_SHA"}, {TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, "DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA"}, {TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, "DHE_DSS_EXPORT1024_WITH_RC4_56_SHA"}, {TLS_DHE_DSS_WITH_RC4_128_SHA, "DHE_DSS_WITH_RC4_128_SHA"}, {SSL_RSA_OLDFIPS_WITH_3DES_EDE_CBC_SHA, "RSA_OLDFIPS_WITH_3DES_EDE_CBC_SHA"}, {SSL_RSA_OLDFIPS_WITH_DES_CBC_SHA, "RSA_OLDFIPS_WITH_DES_CBC_SHA"}, {SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, "RSA_FIPS_WITH_3DES_EDE_CBC_SHA"}, {SSL_RSA_FIPS_WITH_DES_CBC_SHA, "RSA_FIPS_WITH_DES_CBC_SHA"} }; static int my_ssl_get_cipher_by_name(char *n) { int i; for(i = 0; i < NUM_ELEM(my_ssl_cipher_tab); i++) { if(!strcasecmp(n, my_ssl_cipher_tab[i].name)) return my_ssl_cipher_tab[i].cipher; } DEBUG_SSL("unknown NSS3 SSL cipher %s\n", n); return -1; } static void my_ssl_set_ciphers(PRFileDesc * fd, char *ciphers) { char **c; int cipher, i; if(!strcasecmp(ciphers, "all")) return; c = tl_str_split(ciphers, ","); /* at first disable all ciphers */ for(i = 0; i < NUM_ELEM(my_ssl_cipher_tab); i++) { cipher = my_ssl_cipher_tab[i].cipher; if(fd) SSL_CipherPrefSet(fd, cipher, SSL_NOT_ALLOWED); } for(i = 0; c && c[i]; i++) { cipher = my_ssl_get_cipher_by_name(c[i]); if(cipher != -1 && fd) SSL_CipherPrefSet(fd, cipher, SSL_ALLOWED); } tl_strv_free(c); } bufio *my_ssl_do_connect(doc * docp, bufio * socket, ssl_connection * parent_ssl_con) { int rv; ssl_connection *con; PRFileDesc *model; CERTCertDBHandle *handle; my_ssl_init(); if(priv_cfg.ssl_proxy) { if(http_dumy_proxy_connect(docp, url_get_site(docp->doc_url), url_get_port(docp->doc_url), priv_cfg.ssl_proxy, cfg.ssl_proxy_port)) { docp->errcode = ERR_PROXY_CONNECT; return NULL; } } con = my_ssl_connection_new(); model = myssl_bufio_new_socket(socket); /* model = PR_ImportTCPSocket(bufio_getfd(socket)); */ con->fd = SSL_ImportFD(NULL, model); SSL_OptionSet(con->fd, SSL_SECURITY, PR_TRUE); SSL_OptionSet(con->fd, SSL_HANDSHAKE_AS_CLIENT, PR_TRUE); switch (cfg.ssl_version) { case 1: SSL_OptionSet(con->fd, SSL_ENABLE_SSL2, TRUE); SSL_OptionSet(con->fd, SSL_ENABLE_SSL3, FALSE); SSL_OptionSet(con->fd, SSL_ENABLE_TLS, FALSE); SSL_OptionSet(con->fd, SSL_V2_COMPATIBLE_HELLO, TRUE); break; case 2: SSL_OptionSet(con->fd, SSL_ENABLE_SSL2, TRUE); SSL_OptionSet(con->fd, SSL_ENABLE_SSL3, TRUE); SSL_OptionSet(con->fd, SSL_ENABLE_TLS, FALSE); SSL_OptionSet(con->fd, SSL_V2_COMPATIBLE_HELLO, TRUE); break; case 3: SSL_OptionSet(con->fd, SSL_ENABLE_SSL2, FALSE); SSL_OptionSet(con->fd, SSL_ENABLE_SSL3, TRUE); SSL_OptionSet(con->fd, SSL_ENABLE_TLS, FALSE); SSL_OptionSet(con->fd, SSL_V2_COMPATIBLE_HELLO, FALSE); break; case 4: SSL_OptionSet(con->fd, SSL_ENABLE_SSL2, FALSE); SSL_OptionSet(con->fd, SSL_ENABLE_SSL3, FALSE); SSL_OptionSet(con->fd, SSL_ENABLE_TLS, TRUE); SSL_OptionSet(con->fd, SSL_V2_COMPATIBLE_HELLO, FALSE); break; } SSL_OptionSet(con->fd, SSL_NO_CACHE, !cfg.unique_sslid); if(priv_cfg.ssl_cipher_list) my_ssl_set_ciphers(con->fd, priv_cfg.ssl_cipher_list); if(priv_cfg.ssl_cert_passwd) SSL_SetPKCS11PinArg(con->fd, priv_cfg.ssl_cert_passwd); handle = CERT_GetDefaultCertDB(); SSL_AuthCertificateHook(con->fd, my_ssl_verify_callback, (void *) handle); SSL_GetClientAuthDataHook(con->fd, NSS_GetClientAuthData, (void *) NULL); SSL_BadCertHook(con->fd, my_ssl_verify_failed_callback, (void *) NULL); SSL_SetURL(con->fd, url_get_site(docp->doc_url)); SSL_SetSockPeerID(con->fd, url_get_site(docp->doc_url)); rv = SSL_ResetHandshake(con->fd, 0); rv = SSL_ForceHandshake(con->fd); if(rv != SECSuccess) { const char *errstr; errstr = SECU_Strerror(PR_GetError()); xprintf(1, gettext("SSL connect failure - %s\n"), errstr); my_ssl_connection_destroy(con); return NULL; } con->socket = socket; return bufio_new_sslcon(socket, con); } int my_ssl_read(ssl_connection * ssl_con, char *buf, size_t len) { return PR_Read(ssl_con->fd, buf, len); } int my_ssl_write(ssl_connection * ssl_con, char *buf, size_t len) { return PR_Write(ssl_con->fd, buf, len); } int my_ssl_data_pending(ssl_connection * ssl_con) { return SSL_DataPending(ssl_con->fd); } void my_ssl_print_last_error(void) { char *errstr = SECU_Strerror(PR_GetError()); xprintf(1, gettext("SSL error - %s\n"), errstr); } #endif pavuk-0.9.35/src/myssl_nss.h0000644000175000001440000000125610142077741012654 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _myssl_nss_h_ #define _myssl_nss_h_ #if defined(USE_SSL) && defined(USE_SSL_IMPL_NSS) #include "bufio.h" #include #include #include #include #include typedef struct { PRFileDesc *fd; bufio *socket; } ssl_connection; #endif #endif pavuk-0.9.35/src/myssl_openssl.c0000644000175000001440000004161110300054562013516 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #if defined(USE_SSL) && defined(USE_SSL_IMPL_OPENSSL) #include #include #include #include #include #include #include #include #include "bufio.h" #include "errcode.h" #include "http.h" #include "myssl.h" #include "tools.h" /* Let's try to cache session ids! */ /* Very unlikely to have more than 4 session ids active, * so use cheap slow lookup */ typedef struct session_entry { int len; int family; struct sockaddr_in addr; SSL_SESSION *session; } session_entry; #define N_SESSIONS 10 static session_entry *session_map[N_SESSIONS]; static int session_map_init = -1; static int cmp_sockaddr(struct sockaddr_in *a, struct sockaddr_in *b) { return (a->sin_addr.s_addr != b->sin_addr.s_addr) || (a->sin_port != b->sin_port); } static void dump_session_id(SSL_SESSION * s) { int i; if(!s) { DEBUG_SSL("No session ID to dump?\n"); return; } DEBUG_SSL("ssl_session_id(%d) = [", s->session_id_length); for(i = 0; i < s->session_id_length; i++) { DEBUG_SSL(" %02x", s->session_id[i]); } DEBUG_SSL("]\n"); return; } static void map_init(void) { int i; if(session_map_init != -1) return; LOCK_SSL_MAP; if(session_map_init == -1) { for(i = 0; i < N_SESSIONS; i++) session_map[i] = 0; session_map_init = 1; } UNLOCK_SSL_MAP; } static SSL_SESSION *cache_locate_session_by_addr(struct sockaddr_in *addr, int dolock) { int i; map_init(); if(!addr) { DEBUG_SSL("No addr to locate session id by?\n"); return 0; } DEBUG_SSL("Trying to locate session id for ip %s:%d\n", inet_ntoa(addr->sin_addr), ntohs(addr->sin_port)); if(dolock) { LOCK_SSL_MAP; } for(i = 0; i < N_SESSIONS; i++) { if(session_map[i] && !cmp_sockaddr(addr, &session_map[i]->addr)) { if(dolock) { UNLOCK_SSL_MAP; } DEBUG_SSL("returning slot %d id for %s:%d\n", i, inet_ntoa(session_map[i]->addr.sin_addr), ntohs(session_map[i]->addr.sin_port)); dump_session_id(session_map[i]->session); return session_map[i]->session; } } if(dolock) { UNLOCK_SSL_MAP; } DEBUG_SSL("not cached\n"); return 0; } static void cache_session_by_addr(struct sockaddr_in *addr, SSL * con) { session_entry *p; int i; SSL_SESSION *s; map_init(); LOCK_SSL_MAP; /* see if this session is already in the map */ s = cache_locate_session_by_addr(addr, 0); if(s) { /* Yes, so simply return */ UNLOCK_SSL_MAP; DEBUG_SSL("session id for %s:%d already cached\n", inet_ntoa(addr->sin_addr), ntohs(addr->sin_port)); dump_session_id(s); return; } /* Install session in empty entry in map */ assert(con); s = SSL_get1_session(con); if(s == 0) { DEBUG_SSL("(cache session) No session id to cache?\n"); UNLOCK_SSL_MAP; return; } for(i = 0; i < N_SESSIONS; i++) { if(session_map[i] == 0) { p = malloc(sizeof(session_entry)); p->addr = *addr; p->session = s; session_map[i] = p; UNLOCK_SSL_MAP; DEBUG_SSL("(cache_session) session for %s:%d cached in slot %d\n", inet_ntoa(addr->sin_addr), ntohs(addr->sin_port), i); dump_session_id(p->session); return; } } DEBUG_SSL("(cache_session) You don't have a big enough map\n"); /* FIXME: Replace oldest entry */ UNLOCK_SSL_MAP; return; } static void cache_remove_session(SSL_SESSION * sess) { DEBUG_SSL("Turn your head and cough\n"); /* FIXME: WRITE ME */ } static int SSL_FD(SSL * ssl) { if(ssl == NULL) { return -1; } return BIO_get_fd(SSL_get_rbio(ssl), NULL); } static int ssl_new_session_cb(SSL * ssl, SSL_SESSION * sess) { int sock = SSL_FD(ssl); struct sockaddr_in sa; struct sockaddr_in *sp; socklen_t alen = sizeof(sa); SSL_SESSION *cached; assert(sock != -1); DEBUG_SSL("ssl_new_session_cb() called\n"); if(getpeername(sock, (struct sockaddr *) &sa, &alen)) return 1; DEBUG_SSL("ssl_new_session_cb(%s:%d)\n", inet_ntoa(sa.sin_addr), ntohs(sa.sin_port)); /* * Search in cache. */ cached = cache_locate_session_by_addr(&sa, 1); if(cached) { DEBUG_SSL("SSL session for %s:%d already cached.\n", inet_ntoa(sa.sin_addr), ntohs(sa.sin_port)); return 1; } sp = malloc(sizeof(struct sockaddr_in)); if(sp == NULL) return 1; *sp = sa; cached = SSL_get1_session(ssl); assert(cached == sess); cache_session_by_addr(sp, ssl); DEBUG_SSL("SSL session for %s:%d now cached\n", inet_ntoa(sa.sin_addr), ntohs(sa.sin_port)); return 1; } static SSL_SESSION *ssl_get_session_cb(SSL * ssl, unsigned char *data, int len, int *copy) { DEBUG_SSL("ssl_get_session_cb()\n"); return NULL; } static void ssl_remove_session_cb(SSL_CTX * ssl, SSL_SESSION * sess) { cache_remove_session(sess); } static void ssl_assign_cached_session(SSL * ssl, struct sockaddr_in *peer) { SSL_SESSION *sess; DEBUG_SSL("ssl_assign_cached_session() called\n"); if(peer == NULL) return; DEBUG_SSL("ssl_assign_cached_session(%s:%d)\n", inet_ntoa(peer->sin_addr), ntohs(peer->sin_port)); sess = cache_locate_session_by_addr(peer, 1); if(sess == NULL) { DEBUG_SSL("SSL session for %s:%d not cached yet\n", inet_ntoa(peer->sin_addr), ntohs(peer->sin_port)); return; } DEBUG_SSL("Setting SSL session for %s:%d\n", inet_ntoa(peer->sin_addr), ntohs(peer->sin_port)); dump_session_id(sess); if(SSL_set_session(ssl, sess) == 0) { DEBUG_SSL("Failed to assign cached SSL session for %s:%d\n", inet_ntoa(peer->sin_addr), ntohs(peer->sin_port)); return; } DEBUG_SSL("SSL session for %s:%d found in cache\n", inet_ntoa(peer->sin_addr), ntohs(peer->sin_port)); } static void ssl_assign_cached_session_by_doc(SSL * ssl, doc * docp) { char *hp; int alen; struct sockaddr_in addr; int family; map_init(); DEBUG_SSL("assign_cached_session_by_doc()\n"); if(!docp) { DEBUG_SSL("(assign cached session by doc) No doc?\n"); return; } if(!docp->doc_url) { DEBUG_SSL("(assign cached session by doc) Doc has no url?\n"); return; } hp = docp->doc_url->p.http.host; if(dns_gethostbyname(hp, &alen, (char *) &addr.sin_addr, &family) < 0) { DEBUG_SSL("(assign cached session by doc) Unable to get dns for %s\n", hp); return; } assert(family == AF_INET); assert(alen == sizeof(addr.sin_addr)); addr.sin_port = htons(docp->doc_url->p.http.port); ssl_assign_cached_session(ssl, &addr); } /* Most of this code is inspired by example programs from SSLeay package */ static int my_ssl_passwd_callback(char *buf, int num, int verify) { if(verify) xprintf(1, "%s\n", buf); else { if(num > strlen(priv_cfg.ssl_cert_passwd)) { strcpy(buf, priv_cfg.ssl_cert_passwd); return strlen(buf); } } return 0; } static void my_ssl_info_callback(const SSL * con, int where, int ret) { if(where & SSL_CB_LOOP) { DEBUG_SSL("SSL_CB_LOOP: (%s) %s\n", SSL_state_string(con), SSL_state_string_long(con)); } else if(where & SSL_CB_ALERT) { DEBUG_SSL("SSL_CB_ALERT: %s:%s\n", SSL_alert_type_string_long(ret), SSL_alert_desc_string_long(ret)); } else if((where & SSL_CB_EXIT) && (ret <= 0)) { /* If we print 'unknown' errors, we end up spewing the same */ /* message dozens of times. This avoids that */ if(SSL_alert_type_string(ret)[0] == 'U') return; DEBUG_SSL("SSL_CB_EXIT: [%s:%s] (%s) %s\n", SSL_alert_type_string_long(ret), SSL_alert_desc_string_long(ret), SSL_state_string(con), SSL_state_string_long(con)); } } static int my_ssl_verify_callback(int ok, X509_STORE_CTX * ctx) { char buf[256]; X509 *err_cert; int err, depth; err_cert = X509_STORE_CTX_get_current_cert(ctx); err = X509_STORE_CTX_get_error(ctx); depth = X509_STORE_CTX_get_error_depth(ctx); X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256); DEBUG_SSL("Depth: %d\n", depth); DEBUG_SSL("Subject: %s\n", buf); if(!ok) { DEBUG_SSL("verify error:num=%d:%s\n", err, X509_verify_cert_error_string(err)); if(0 >= depth) ok = 1; else ok = 0; } switch (ctx->error) { case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert), buf, 256); DEBUG_SSL("Issuer: %s\n", buf); break; case X509_V_ERR_CERT_NOT_YET_VALID: case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: DEBUG_SSL("Error: SSL certificate not yet valid!\n"); break; case X509_V_ERR_CERT_HAS_EXPIRED: case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: DEBUG_SSL("Error: SSL certificate has expired!\n"); break; } DEBUG_SSL("Verify status:%d\n", ok); return ok; } void my_ssl_init_once(void) { } void my_ssl_init_start(void) { } void my_ssl_init(void) { unsigned char rnd_stack_data[64], *p = NULL; int rv = 0; #ifdef HAVE_RAND_EGD if(!RAND_status()) { char random_dev[PATH_MAX + 1]; const char *p; if(priv_cfg.egd_socket) { strncpy(random_dev, priv_cfg.egd_socket, PATH_MAX); random_dev[PATH_MAX] = '\0'; } else { #ifdef EGD_SOCKET_NAME strncpy(random_dev, EGD_SOCKET_NAME, PATH_MAX); random_dev[PATH_MAX] = '\0'; #else /* we do not have /dev/random so need to seed entropy pool from an external source */ p = RAND_file_name(random_dev, PATH_MAX + 1); if(!p) { xprintf(1, gettext("Failed obtaining entropy pathname\n")); rv = -1; } #endif } if(rv != -1) { rv = RAND_egd(random_dev); if(rv == -1) { xprintf(1, gettext ("Failed to initialize random seed for OpenSSL via EGD daemon\n")); } } } #endif if(rv == -1) { p = rnd_stack_data; time((time_t *) p); RAND_seed(rnd_stack_data, sizeof(rnd_stack_data)); xprintf(1, gettext("Seeding entropy pool INSECURELY!\n")); } SSL_load_error_strings(); SSLeay_add_ssl_algorithms(); } void my_ssl_cleanup(void) { } void my_ssl_connection_close(ssl_connection * con) { if(con->ssl_con) { SSL_set_shutdown(con->ssl_con, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); SSL_free(con->ssl_con); } if(con->ssl_ctx) SSL_CTX_free(con->ssl_ctx); if(con->socket) bufio_close(con->socket); con->ssl_con = NULL; con->ssl_ctx = NULL; con->socket = NULL; } void my_ssl_connection_destroy(ssl_connection * con) { my_ssl_connection_close(con); _free(con); } static ssl_connection *my_ssl_connection_new(void) { ssl_connection *con; con = _malloc(sizeof(ssl_connection)); con->ssl_con = NULL; con->ssl_ctx = NULL; con->socket = NULL; return con; } bufio *my_ssl_do_connect(doc * docp, bufio * socket, ssl_connection * parent_ssl_con) { SSL_METHOD *method; BIO *bio; ssl_connection *con; int rv; my_ssl_init(); if(priv_cfg.ssl_proxy) { if(http_dumy_proxy_connect(docp, url_get_site(docp->doc_url), url_get_port(docp->doc_url), priv_cfg.ssl_proxy, cfg.ssl_proxy_port)) { docp->errcode = ERR_PROXY_CONNECT; return FALSE; } } con = my_ssl_connection_new(); switch (cfg.ssl_version) { case 2: method = SSLv2_client_method(); break; case 3: method = SSLv3_client_method(); break; #ifdef WITH_SSL_TLS1 case 4: method = TLSv1_client_method(); break; #endif default: method = SSLv23_client_method(); break; } con->ssl_ctx = SSL_CTX_new(method); /* Bugs compatibility */ SSL_CTX_set_options(con->ssl_ctx, SSL_OP_ALL); /* Modes of SSL_send() */ SSL_CTX_set_mode(con->ssl_ctx, SSL_MODE_ENABLE_PARTIAL_WRITE); SSL_CTX_set_mode(con->ssl_ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER); SSL_CTX_set_timeout(con->ssl_ctx, 3600); if(cfg.unique_sslid) { /* Cache sessions */ DEBUG_SSL("Going to cache session ids!\n"); SSL_CTX_set_session_cache_mode(con->ssl_ctx, SSL_SESS_CACHE_CLIENT); SSL_CTX_sess_set_cache_size(con->ssl_ctx, 16); /* * Session cache management. */ SSL_CTX_sess_set_new_cb(con->ssl_ctx, ssl_new_session_cb); SSL_CTX_sess_set_get_cb(con->ssl_ctx, ssl_get_session_cb); SSL_CTX_sess_set_remove_cb(con->ssl_ctx, ssl_remove_session_cb); } if(cfg.condition.verify) { SSL_CTX_set_info_callback(con->ssl_ctx, my_ssl_info_callback); SSL_CTX_set_verify(con->ssl_ctx, SSL_VERIFY_NONE, my_ssl_verify_callback); SSL_CTX_set_verify_depth(con->ssl_ctx, 10); } if(priv_cfg.ssl_cipher_list) SSL_CTX_set_cipher_list(con->ssl_ctx, priv_cfg.ssl_cipher_list); /* SSL Certification stuff */ if(priv_cfg.ssl_cert_file != NULL) { SSL *ssl; X509 *x509; DEBUG_SSL("Setting cert file to %s\n", priv_cfg.ssl_cert_file); if(priv_cfg.ssl_cert_passwd) #ifdef OPENSSL SSL_CTX_set_default_passwd_cb(con->ssl_ctx, (pem_password_cb *) my_ssl_passwd_callback); #else SSL_CTX_set_default_passwd_cb(con->ssl_ctx, my_ssl_passwd_callback); #endif if(SSL_CTX_use_certificate_file(con->ssl_ctx, priv_cfg.ssl_cert_file, SSL_FILETYPE_PEM) <= 0) { xprintf(1, gettext("Unable to set certificate file (wrong password?)\n")); my_ssl_connection_destroy(con); return FALSE; } if(priv_cfg.ssl_key_file == NULL) priv_cfg.ssl_key_file = tl_strdup(priv_cfg.ssl_cert_file); if(SSL_CTX_use_PrivateKey_file(con->ssl_ctx, priv_cfg.ssl_key_file, SSL_FILETYPE_PEM) <= 0) { xprintf(1, gettext("Unable to set public key file\n")); my_ssl_connection_destroy(con); return NULL; } ssl = SSL_new(con->ssl_ctx); x509 = SSL_get_certificate(ssl); if(x509 != NULL) EVP_PKEY_copy_parameters(X509_get_pubkey(x509), SSL_get_privatekey(ssl)); SSL_free(ssl); if(!SSL_CTX_check_private_key(con->ssl_ctx)) { xprintf(1, gettext("Private key does not match the certificate public key\n")); my_ssl_connection_destroy(con); return NULL; } } /* End SSL Certification stuff */ con->ssl_con = SSL_new(con->ssl_ctx); bio = BIO_new_socket(bufio_getfd(socket), BIO_NOCLOSE); SSL_set_bio(con->ssl_con, bio, bio); if(cfg.unique_sslid) { DEBUG_SSL("assigning caching SSL session ID\n"); ssl_assign_cached_session_by_doc(con->ssl_con, docp); } DEBUG_SSL("Connecting\n"); SSL_connect(con->ssl_con); DEBUG_SSL("Connecting done\n"); while((rv = SSL_in_init(con->ssl_con)) && SSL_get_error(con->ssl_con, rv) == SSL_ERROR_WANT_CONNECT) { tl_msleep(2); } if(rv < 0) { SSL_get_error(con->ssl_con, -1); ERR_print_errors_fp(stderr); my_ssl_connection_destroy(con); return NULL; } con->socket = socket; return bufio_new_sslcon(socket, con); } int my_ssl_read(ssl_connection * ssl_con, char *buf, size_t len) { int rv = -1; bool_t stopread = FALSE; while(!stopread) { rv = SSL_read(ssl_con->ssl_con, buf, (int) len); if(rv == 0) /* Nothing read */ { stopread = TRUE; break; } switch (SSL_get_error(ssl_con->ssl_con, rv)) { case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: tl_msleep(10); break; case SSL_ERROR_SSL: ERR_print_errors_fp(stdout); stopread = TRUE; rv = -1; break; case SSL_ERROR_SYSCALL: if((errno != EWOULDBLOCK) && (errno != EAGAIN)) { len = 0; stopread = TRUE; rv = -1; } else tl_msleep(10); break; default: stopread = TRUE; break; } } return rv; } int my_ssl_write(ssl_connection * ssl_con, char *buf, size_t len) { int rv = 0; while(len) { rv = SSL_write(ssl_con->ssl_con, buf, (int) len); switch (SSL_get_error(ssl_con->ssl_con, rv)) { case SSL_ERROR_NONE: len -= rv; buf += rv; if(rv <= 0) len = 0; break; case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_READ: tl_msleep(10); break; case SSL_ERROR_SSL: ERR_print_errors_fp(stdout); /* MJF: HACK -- ssl doesn't set errno, but because of the -1 return, our caller will try to print it, so we set errno to something "reasonable". */ errno = EIO; rv = -1; len = 0; break; case SSL_ERROR_SYSCALL: if((errno != EWOULDBLOCK) && (errno != EAGAIN)) { len = 0; rv = -1; } else tl_msleep(10); break; default: len = 0; break; } } return rv; } int my_ssl_data_pending(ssl_connection * ssl_con) { return SSL_pending(ssl_con->ssl_con); } void my_ssl_print_last_error(void) { ERR_print_errors_fp(stdout); } #endif pavuk-0.9.35/src/myssl_openssl.h0000644000175000001440000000173610142077741013537 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _myopenssl_h_ #define _myopenssl_h_ #if defined(USE_SSL) && defined(USE_SSL_IMPL_OPENSSL) #include #ifdef OPENSSL #include #include #include #include #include #include #include #include #else #include #include #include #include #include #include #include #include #endif typedef struct { SSL *ssl_con; SSL_CTX *ssl_ctx; bufio *socket; } ssl_connection; #endif #endif pavuk-0.9.35/src/icons.c0000644000175000001440000001237510142077740011733 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #ifdef I_FACE #include "gui.h" #include "gui_api.h" #include "tools.h" #ifdef WITH_TREE #include "xpm/audio.xpm" #include "xpm/binary.xpm" #include "xpm/html.xpm" #include "xpm/image.xpm" #include "xpm/video.xpm" #include "xpm/text.xpm" #include "xpm/gopherdir.xpm" #include "xpm/ftpdir.xpm" #include "xpm/broken.xpm" #include "xpm/redirected.xpm" #include "xpm/rejected.xpm" #include "xpm/notprocessed.xpm" #include "xpm/cantaccess.xpm" #include "xpm/incomplete.xpm" #include "xpm/local.xpm" #include "xpm/compressed.xpm" #endif void icons_set_for_doc(doc * docp) { #ifdef WITH_TREE Icon *icn; int i; icn = gui_cfg.icon.binary; if(docp->doc_url->status & URL_MOVED) icn = gui_cfg.icon.redirected; else if(docp->doc_url->status & URL_TRUNCATED) icn = gui_cfg.icon.incomplete; else if(docp->doc_url->status & URL_REJECTED) icn = gui_cfg.icon.rejected; else if((docp->doc_url->status & URL_NOT_FOUND) || (docp->doc_url->status & URL_ERR_UNREC)) icn = gui_cfg.icon.broken; else if(docp->doc_url->status & URL_ERR_REC) icn = gui_cfg.icon.cantaccess; else if((docp->doc_url->type == URLT_FTP || docp->doc_url->type == URLT_FTPS) && docp->doc_url->p.ftp.dir) icn = gui_cfg.icon.ftpdir; else if((docp->doc_url->type == URLT_GOPHER) && (docp->doc_url->p.gopher.selector[0] == 'I')) icn = gui_cfg.icon.image; else if((docp->doc_url->type == URLT_GOPHER) && (docp->doc_url->p.gopher.selector[0] == '0')) icn = gui_cfg.icon.text; else if((docp->doc_url->type == URLT_GOPHER) && (docp->doc_url->p.gopher.selector[0] == '1')) icn = gui_cfg.icon.gopherdir; else if(docp->type_str) { if(!strncasecmp(docp->type_str, "text/html", 9)) icn = gui_cfg.icon.html; else if(!strncasecmp(docp->type_str, "text/", 5)) icn = gui_cfg.icon.text; else if(!strncasecmp(docp->type_str, "audio/", 6)) icn = gui_cfg.icon.audio; else if(!strncasecmp(docp->type_str, "image/", 6)) icn = gui_cfg.icon.image; else if(!strncasecmp(docp->type_str, "video/", 6)) icn = gui_cfg.icon.video; else if(str_is_in_list(0, tl_get_extension(url_get_path(docp->doc_url)), "gz", "arj", "zip", "lha", "pak", "lzh", "bz", "bz2", "rar", "uc2", "ha", "tgz", NULL)) icn = gui_cfg.icon.compressed; else icn = gui_cfg.icon.binary; } else if(str_is_in_list(0, tl_get_extension(url_get_path(docp->doc_url)), "html", "htm", "shtml", "phtml", NULL)) icn = gui_cfg.icon.html; else if(str_is_in_list(0, tl_get_extension(url_get_path(docp->doc_url)), "txt", NULL)) icn = gui_cfg.icon.text; else if(str_is_in_list(0, tl_get_extension(url_get_path(docp->doc_url)), "mov", "avi", "mpg", "mpeg", "fli", "flc", NULL)) icn = gui_cfg.icon.video; else if(str_is_in_list(0, tl_get_extension(url_get_path(docp->doc_url)), "jpg", "jpeg", "png", "gif", "bmp", "pic", "ppm", "pbm", "pgm", "pnm", "xbm ", "xpm", NULL)) icn = gui_cfg.icon.image; else if(str_is_in_list(0, tl_get_extension(url_get_path(docp->doc_url)), "voc", "au", "wav", "midi", "mp3", NULL)) icn = gui_cfg.icon.audio; else if(str_is_in_list(0, tl_get_extension(url_get_path(docp->doc_url)), "gz", "arj", "zip", "lha", "pak", "lzh", "bz", "bz2", "rar", "uc2", "ha", "tgz", NULL)) icn = gui_cfg.icon.compressed; else if((docp->doc_url->type == URLT_FILE) || (docp->doc_url->status & URL_REDIRECT)) icn = gui_cfg.icon.local; #ifdef GTK_FACE LOCK_URL(docp->doc_url); for(i = 0; i < docp->doc_url->ref_cnt; i++) { char *p = url_to_urlstr(docp->doc_url, FALSE); LOCK_GTKTREE; GDK_THREADS_ENTER(); gtk_ctree_set_node_info(GTK_CTREE(gui_cfg.tree_widget), docp->doc_url->tree_nfo[i], p, 8, icn->pixmap, icn->shape, icn->pixmap, icn->shape, FALSE, TRUE); GDK_THREADS_LEAVE(); UNLOCK_GTKTREE; _free(p); } UNLOCK_URL(docp->doc_url); #endif _Xt_Serve; #endif } void icons_load(void) { #ifdef WITH_TREE gui_cfg.icon.audio = guitl_load_pixmap(audio_xpm); gui_cfg.icon.binary = guitl_load_pixmap(binary_xpm); gui_cfg.icon.html = guitl_load_pixmap(html_xpm); gui_cfg.icon.image = guitl_load_pixmap(image_xpm); gui_cfg.icon.video = guitl_load_pixmap(video_xpm); gui_cfg.icon.text = guitl_load_pixmap(text_xpm); gui_cfg.icon.gopherdir = guitl_load_pixmap(gopherdir_xpm); gui_cfg.icon.ftpdir = guitl_load_pixmap(ftpdir_xpm); gui_cfg.icon.broken = guitl_load_pixmap(broken_xpm); gui_cfg.icon.redirected = guitl_load_pixmap(redirected_xpm); gui_cfg.icon.rejected = guitl_load_pixmap(rejected_xpm); gui_cfg.icon.notprocessed = guitl_load_pixmap(notprocessed_xpm); gui_cfg.icon.cantaccess = guitl_load_pixmap(cantaccess_xpm); gui_cfg.icon.incomplete = guitl_load_pixmap(incomplete_xpm); gui_cfg.icon.local = guitl_load_pixmap(local_xpm); gui_cfg.icon.compressed = guitl_load_pixmap(compressed_xpm); #endif } #endif pavuk-0.9.35/src/icons.h0000644000175000001440000000155010142077740011731 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _icons_h_ #define _icons_h_ #include "doc.h" typedef struct { Icon *audio; Icon *binary; Icon *html; Icon *image; Icon *video; Icon *text; Icon *file; Icon *gopherdir; Icon *ftpdir; Icon *broken; Icon *redirected; Icon *rejected; Icon *notprocessed; Icon *cantaccess; Icon *incomplete; Icon *local; Icon *compressed; } urltype_icon; extern void icons_load(void); extern void icons_set_for_doc(doc *); #define MAX_PIX_HEIGHT 14 #endif pavuk-0.9.35/src/pavuk.c0000644000175000001440000002526510565333072011752 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __CYGWIN__ #include #endif #include "recurse.h" #include "http.h" #include "ftp.h" #include "update_links.h" #include "mode.h" #include "url.h" #include "dns.h" #include "ainterface.h" #include "times.h" #include "schedule.h" #include "dlhash_tools.h" #include "nscache.h" #include "log.h" #include "authinfo.h" #include "cookie.h" #include "net.h" #include "gui_api.h" #include "gui.h" #include "myssl.h" #define STDOUT 1 _config_struct_t cfg; #ifdef WIN32 /* * read string value from HKEY_LOCAL_MACHINE */ char *read_lmachine_registry_val(char *path, char *var) { HKEY hKey; char rpath[2048]; DWORD sz = sizeof(rpath); DWORD type; char *rv = NULL; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0, KEY_READ, &hKey) != ERROR_SUCCESS) return NULL; if(RegQueryValueEx(hKey, var, NULL, &type, rpath, &sz) == ERROR_SUCCESS) rv = tl_strdup(rpath); RegCloseKey(hKey); return rv; } #endif static char *pavuk_get_install_path(void) { char *rv = NULL; #ifdef WIN32 rv = read_lmachine_registry_val("Software\\Stefan Ondrejicka\\Pavuk", "Install Path"); if(rv) { char *p = rv; rv = cvt_win32_to_unix_path(p); _free(p); } else rv = tl_strdup("/cygdrive/c"); #else #ifdef INSTALL_PREFIX rv = tl_strdup(INSTALL_PREFIX); #else rv = tl_strdup("/usr/local"); #endif #endif return rv; } static void pavuk_quit(int signum) { printf(gettext("QUIT signal catched\n")); cfg.xi_face = FALSE; cfg.rbreak = TRUE; cfg.stop = TRUE; } static void pavuk_alarm(int signum) { printf(gettext("Program has been forcefully terminated\n")); exit(10); } static void pavuk_end(int signum) { signal(SIGALRM, pavuk_alarm); signal(SIGINT, SIG_IGN); signal(SIGTERM, SIG_IGN); printf(gettext("TERM signal catched\n")); cfg.xi_face = FALSE; cfg.rbreak = TRUE; cfg.stop = TRUE; alarm(1); } static void init_values(int argc, char **argv) { char *d; uid_t uid; time_t __time = time(NULL); char pom[PATH_MAX]; struct hostent *hp = NULL; struct passwd *pwstruct; #if defined(GETTEXT_NLS) || defined(I_FACE) int i; #endif memset(&cfg, '\0', sizeof(cfg)); #ifdef I_FACE memset(&gui_cfg, '\0', sizeof(gui_cfg)); #endif cfg.prg_path = argv[0]; cfg.install_path = pavuk_get_install_path(); #ifdef HAVE_MT mt_init(); #endif init_locale_env(); #ifdef GTK_FACE cfg.path_to_home = tl_strdup(g_get_home_dir()); #endif if(!cfg.path_to_home) cfg.path_to_home = tl_strdup(getenv("HOME")); if(!cfg.path_to_home) cfg.path_to_home = tl_strdup("/tmp/"); #ifdef HAVE_TZSET tzset(); #endif #ifdef I_FACE cfg.done = FALSE; #endif cfg.urlstack = NULL; cfg.urls_in_dir = NULL; cfg.total_cnt = 0; cfg.time = new_tm(localtime(&__time)); cfg.time->tm_year += 1900; cfg.fail_cnt = 0; cfg.docnr = 0; cfg.url_hash_tbl = NULL; cfg.fn_hash_tbl = NULL; cfg.last_used_proxy_node = NULL; cfg_setup_default(); #ifdef GETTEXT_NLS #ifdef GETTEXT_DEFAULT_CATALOG_DIR cfg.msgcatd = tl_strdup(GETTEXT_DEFAULT_CATALOG_DIR); #endif #ifdef __CYGWIN__ _free(cfg.msgcatd); cfg.msgcatd = tl_str_concat(NULL, cfg.install_path, "/share/locale", NULL); #endif #else cfg.language = "C"; #endif _INIT_NLS; #ifdef SOCKS SOCKSinit(argv[0]); #endif if(!(d = getenv("USER"))) { uid = getuid(); if((pwstruct = getpwuid(uid))) d = tl_strdup(pwstruct->pw_name); } else d = tl_strdup(d); if(gethostname(pom, sizeof(pom))) { perror("gethostname"); } else { cfg.local_host = tl_strdup(pom); hp = gethostbyname(pom); } if(hp) { if(d) snprintf(pom, sizeof(pom), "%s@%s", d, hp->h_name); else snprintf(pom, sizeof(pom), "pavuk@%s", hp->h_name); } else { if(d) snprintf(pom, sizeof(pom), "%s@unknown.sk", d); else strcpy(pom, "pavuk@unknown.sk"); } _free(d); cfg.from = tl_strdup(pom); cfg_load_setup(); cfg.xi_face = FALSE; #ifdef I_FACE cfg.stop = FALSE; cfg.rbreak = FALSE; for(i = 1; i < argc; i++) { /*** load preferences ***/ if(!strcasecmp(argv[i], "-prefs")) cfg.use_prefs = TRUE; else if(!strcasecmp(argv[i], "-noprefs")) cfg.use_prefs = FALSE; /**** we want to run GUI ****/ else if(!strcasecmp(argv[i], "-X")) cfg.xi_face = TRUE; } if(cfg.use_prefs && cfg.xi_face) cfg_load_pref(); #endif _INIT_NLS; #ifdef GETTEXT_NLS /*** these parameters have to be resolved before each other ***/ for(i = 1; i < argc; i++) { if(!strcasecmp(argv[i], "-msgcat")) { i++; if(i < argc) { cfg.msgcatd = tl_strdup(argv[i]); } else { xprintf(0, gettext("Not enough number of parameters \"-msgcat\"\n")); usage(); } } if(!strcasecmp(argv[i], "-language")) { i++; if(i < argc) { cfg.language = tl_strdup(argv[i]); } else { xprintf(0, gettext("Not enough number of parameters \"-scenario\"\n")); /* FIXME: Wrong string? */ usage(); } } } #endif _INIT_NLS; cfg_setup_cmdln(argc, argv); /**** if requested, create GUI ****/ if(cfg.xi_face) { #if defined I_FACE && !defined HAVE_MT dns_serv_start(); #endif gui_start(&argc, argv); } #ifdef GETTEXT_NLS cfg.language = tl_strdup(getenv("LC_MESSAGES")); #endif if(cfg.dumpfd >= 0) { if((fcntl(cfg.dumpfd, F_GETFD) < 0) && (errno == EBADF)) { xprintf(0, gettext("Error: Supplied bad file descriptor in -dumpfd option\n"), cfg.dumpfd); exit(PAVUK_EXIT_CFG_ERR); } } if(cfg.dump_urlfd >= 0) { if((fcntl(cfg.dump_urlfd, F_GETFD) < 0) && (errno == EBADF)) { xprintf(0, gettext ("Error: Supplied bad file descriptor in -dump_urlfd option\n"), cfg.dumpfd); exit(PAVUK_EXIT_CFG_ERR); } } cfg.url_hash_tbl = dlhash_new(cfg.hash_size, url_key_func, url_hash_func, dllist_url_compare); dlhash_set_free_func(cfg.url_hash_tbl, url_free_func, NULL); cfg.fn_hash_tbl = dlhash_new(cfg.hash_size, fn_key_func, str_hash_func, str_comp_func); dlhash_set_free_func(cfg.fn_hash_tbl, NULL, NULL); memset(&cfg.local_ip_addr, '\0', sizeof(cfg.local_ip_addr)); if(cfg.local_ip && net_host_to_in_addr(cfg.local_ip, &cfg.local_ip_addr)) { xherror(cfg.local_ip); } if(cfg.cache_dir) { d = cfg.cache_dir; cfg.cache_dir = get_abs_file_path_oss(cfg.cache_dir); free(d); } else { getcwd(pom, sizeof(pom)); cfg.cache_dir = tl_strdup(pom); } if(cfg.subdir) { d = cfg.subdir; cfg.subdir = get_abs_file_path_oss(cfg.subdir); free(d); if(tl_is_dirname(cfg.subdir)) *(cfg.subdir + strlen(cfg.subdir) - 1) = '\0'; } cfg.prev_mode = cfg.mode; if(cfg.save_scn) { if(cfg.scndir) { snprintf(pom, sizeof(pom), "%s/%s", cfg.scndir, cfg.save_scn); cfg_dump(pom); } else { xprintf(0, gettext ("WARNING: scndir not specified - saving to current directory\n")); cfg_dump(cfg.save_scn); } exit(PAVUK_EXIT_OK); } if(cfg.cookie_file) cookie_read_file(cfg.cookie_file); if(cfg.auth_file) authinfo_load(cfg.auth_file); log_start(cfg.logfile); if(!cfg.sched_cmd) cfg.sched_cmd = tl_strdup(AT_CMD); if(cfg.schtime) { _free(cfg.time); cfg.time = new_tm(localtime(&cfg.schtime)); } if(!cfg.index_name) cfg.index_name = tl_strdup("_._.html"); #ifdef USE_SSL my_ssl_init_once(); #endif if(cfg.bgmode) { pid_t ppid; ppid = fork(); if(ppid < 0) { xperror("fork"); xprintf(1, gettext ("Unable to fork pavuk to background - running in foreground\n")); } else if(ppid != 0) { xprintf(0, gettext("Pavuk will run at backround as PID %d\n"), (int) ppid); exit(PAVUK_EXIT_CFG_ERR); } #ifdef __CYGWIN__ FreeConsole(); #endif } } static void read_urls(char *filename) { bufio *fd; char lnbuf[4096]; int n; bool_t isstdin; isstdin = !strcmp(cfg.urls_file, "-"); DEBUG_MISC(gettext("reading URLs from file - %s\n"), filename); if(isstdin) fd = bufio_fdopen(0); else fd = bufio_open(filename, O_BINARY | O_RDONLY); if(!fd) { xperror(filename); return; } while((n = bufio_readln(fd, lnbuf, sizeof(lnbuf))) > 0) { strip_nl(lnbuf); if(!strcmp(lnbuf, ".")) break; if(lnbuf[0]) { url_info *ui; ui = url_info_new(lnbuf); cfg.request = dllist_append(cfg.request, (dllist_t) ui); } } if(n < 0) xperror("reading stdin"); if(isstdin) bufio_free(fd); else bufio_close(fd); } int main(int argc, char **argv) { time_t __time = time(NULL); init_values(argc, argv); atexit(pavuk_do_at_exit); /* pro: We do not fully trust pavuk to stop working after the timeout expired, so we order the OS to send us an ALARM signal one minute after the timeout expires. If the program still runs at that time it will be aborted once the signal strikes home. */ if(cfg.max_time > 0) { alarm((int) ((cfg.max_time + 1) * 60)); } if(cfg.urls_file) { read_urls(cfg.urls_file); _free(cfg.urls_file); } /* pro: Set seed for random generator; needed to find a port for active ftp. */ srand(time(NULL) ^ getpid()); signal(SIGINT, pavuk_end); signal(SIGTERM, pavuk_end); signal(SIGALRM, pavuk_end); signal(SIGPIPE, SIG_IGN); /**** spustenie algoritmu alebo rozhrania ****/ /**** FIXME: Translate me! ****/ if(cfg.xi_face) { cfg.prev_mode = cfg.mode; cfg.mode_started = FALSE; gui_main(); } else { signal(SIGQUIT, pavuk_quit); if(cfg.schtime) { cfg.schtime = (time_t) 0; if(at_schedule()) { xprintf(0, gettext("Error scheduling\n")); } } else { if(cfg.reschedh) { __time += 3600 * cfg.reschedh; _free(cfg.time); cfg.time = new_tm(localtime(&__time)); at_schedule(); } absi_restart(); } } log_start(NULL); return cfg.fail_cnt ? PAVUK_EXIT_DOC_ERR : PAVUK_EXIT_OK; } pavuk-0.9.35/src/gui_tools.c0000644000175000001440000006156710151373021012622 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #ifdef GTK_FACE #include "gui.h" #include "icons/append.xpm" #include "icons/ok.xpm" #include "icons/browse.xpm" #include "icons/clear.xpm" #include "icons/delete.xpm" #include "icons/modify.xpm" GtkWidget *guitl_timesel_new(GtkWidget ** calendar, GtkWidget ** hour_entry, GtkWidget ** min_entry, GtkWidget ** month_combo, GtkWidget ** year_entry) { GtkWidget *col, *frame, *brow, *label; GtkAdjustment *adj; col = gtk_vbox_new(0, 10); gtk_widget_show(col); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(col), frame, FALSE, FALSE, 5); *calendar = gtk_calendar_new(); gtk_widget_show(*calendar); gtk_container_add(GTK_CONTAINER(frame), *calendar); gtk_calendar_display_options(GTK_CALENDAR(*calendar), GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES); *year_entry = NULL; *month_combo = NULL; brow = gtk_hbox_new(0, 5); gtk_widget_show(brow); gtk_box_pack_start(GTK_BOX(col), brow, FALSE, FALSE, 4); label = gtk_label_new(gettext("Time: ")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(brow), label, FALSE, FALSE, 0); adj = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 23.0, 1.0, 5.0, 0.0); *hour_entry = gtk_spin_button_new(adj, 0, 0); gtk_widget_show(*hour_entry); gtk_box_pack_start(GTK_BOX(brow), *hour_entry, FALSE, FALSE, 0); label = gtk_label_new(gettext(" : ")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(brow), label, FALSE, FALSE, 0); adj = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 59.0, 1.0, 5.0, 0.0); *min_entry = gtk_spin_button_new(adj, 0, 0); gtk_widget_show(*min_entry); gtk_box_pack_start(GTK_BOX(brow), *min_entry, FALSE, FALSE, 0); return col; } GtkWidget *guitl_tab_add_entry(GtkWidget * table, char *label, guint col, guint row, guint passw) { GtkWidget *entry, *labelw; labelw = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(labelw), 0, 0.5); gtk_table_attach(GTK_TABLE(table), labelw, col, col + 1, row, row + 1, GTK_FILL | GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(labelw); entry = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), entry, col + 1, col + 2, row, row + 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 2); if(passw) gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); gtk_widget_show(entry); return entry; } GtkWidget *guitl_tab_add_numentry(GtkWidget * table, char *label, guint col, guint row, guint max_val) { GtkWidget *entry, *labelw; GtkAdjustment *adj; GdkFont *font; labelw = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(labelw), 0, 0.5); gtk_table_attach(GTK_TABLE(table), labelw, col, col + 1, row, row + 1, GTK_FILL | GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(labelw); adj = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, (float) max_val, 1.0, 5.0, 0.0); entry = gtk_spin_button_new(adj, 0, 0); gtk_table_attach(GTK_TABLE(table), entry, col + 1, col + 2, row, row + 1, 0, GTK_FILL, 2, 2); #if GTK_FACE < 2 font = entry->style->font; #else font = gtk_style_get_font(entry->style); #endif gtk_widget_set_usize(entry, gdk_string_width(font, "000000000"), -1); gtk_widget_show(entry); return entry; } GtkWidget *guitl_tab_add_doubleentry(GtkWidget * table, char *label, guint col, guint row, guint max_val, guint decimals) { GtkWidget *entry, *labelw; GtkAdjustment *adj; GdkFont *font; labelw = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(labelw), 0, 0.5); gtk_table_attach(GTK_TABLE(table), labelw, col, col + 1, row, row + 1, GTK_FILL | GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(labelw); adj = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, (float) max_val, 1.0, 5.0, 0.0); entry = gtk_spin_button_new(adj, 0, decimals); gtk_table_attach(GTK_TABLE(table), entry, col + 1, col + 2, row, row + 1, 0, GTK_FILL, 2, 2); #if GTK_FACE < 2 font = entry->style->font; #else font = gtk_style_get_font(entry->style); #endif gtk_widget_set_usize(entry, gdk_string_width(font, "000000000.000"), -1); gtk_widget_show(entry); return entry; } GtkWidget *guitl_tab_add_enum(GtkWidget * table, char *label, guint col, guint row, const char **vals, guint edit) { GtkWidget *entry, *labelw; GList *ptr; int i; labelw = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(labelw), 0, 0.5); gtk_table_attach(GTK_TABLE(table), labelw, col, col + 1, row, row + 1, GTK_FILL | GTK_SHRINK, GTK_FILL, 2, 2); gtk_widget_show(labelw); entry = gtk_combo_new(); ptr = NULL; for(i = 0; vals[i]; i++) ptr = g_list_append(ptr, (char *) vals[i]); gtk_combo_set_popdown_strings(GTK_COMBO(entry), ptr); gtk_table_attach(GTK_TABLE(table), entry, col + 1, col + 2, row, row + 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 2); gtk_widget_show(entry); while(ptr) ptr = g_list_remove_link(ptr, ptr); return GTK_COMBO(entry)->entry; } static void DestroyW(GtkObject * object, gpointer func_data) { gtk_widget_destroy(GTK_WIDGET(func_data)); } struct edit_entry_info { GtkWidget *entry; GtkWidget *tl; GtkWidget *list; GtkWidget *list_entry; char *label; char *tlabel; guint quoted; }; static void edit_entry_ok(GtkWidget * w, struct edit_entry_info *info) { char *p = NULL; char *pom; int i; for(i = 0; i < GTK_CLIST(info->list)->rows; i++) { gtk_clist_get_text(GTK_CLIST(info->list), i, 0, &pom); if(info->quoted) { char *p1; p1 = escape_str(pom, "\\\""); p = tl_str_concat(p, p ? " " : "", "\"", p1, "\"", NULL); _free(p1); } else p = tl_str_concat(p, p ? "," : "", pom, NULL); } gtk_entry_set_text(GTK_ENTRY(info->entry), p ? p : ""); _free(p); gtk_widget_destroy(info->tl); } static void edit_entry_start_edit(GtkWidget * w, struct edit_entry_info *info) { const char *p; if(!info->tl) { GtkWidget *brow, *col, *button, *frame; char pom[2048]; snprintf(pom, sizeof(pom), gettext("Pavuk: edit %s"), info->tlabel ? info->tlabel : gettext("entry")); info->tl = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_border_width(GTK_CONTAINER(info->tl), 5); gtk_window_set_title(GTK_WINDOW(info->tl), pom); gtk_signal_connect(GTK_OBJECT(info->tl), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &(info->tl)); col = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(info->tl), col); gtk_widget_show(col); frame = gtk_frame_new(NULL); gtk_container_add(GTK_CONTAINER(col), frame); gtk_widget_show(frame); brow = guitl_new_edit_list(&info->list, &info->list_entry, info->label, NULL, NULL, NULL, NULL, TRUE, NULL); gtk_container_add(GTK_CONTAINER(frame), brow); gtk_widget_show(brow); brow = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); gtk_box_pack_end(GTK_BOX(col), brow, FALSE, FALSE, 1); gtk_widget_show(brow); button = guitl_pixmap_button(ok_xpm, NULL, gettext("OK")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(edit_entry_ok), (gpointer) info); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); button = guitl_pixmap_button(ok_xpm, NULL, gettext("Cancel")); gtk_container_add(GTK_CONTAINER(brow), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(DestroyW), (gpointer) info->tl); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); } p = gtk_entry_get_text(GTK_ENTRY(info->entry)); gtk_clist_clear(GTK_CLIST(info->list)); if(info->quoted) { if(*p == '\"') { for(p = get_1qstr(p); p; p = get_1qstr(NULL)) gtk_clist_append(GTK_CLIST(info->list), (gchar **) &p); } else if(*p) gtk_clist_append(GTK_CLIST(info->list), (gchar **) &p); } else { char **v; int i; v = tl_str_split(p, ","); for(i = 0; v && v[i]; i++) gtk_clist_append(GTK_CLIST(info->list), &(v[i])); tl_strv_free(v); } if(GTK_WIDGET_REALIZED(info->tl)) gdk_window_raise(info->tl->window); gtk_widget_show(info->tl); } static void edit_entry_info_destroy(GtkWidget * w, struct edit_entry_info *info) { if(info->tl) { gtk_signal_disconnect_by_func(GTK_OBJECT(info->tl), GTK_SIGNAL_FUNC(gtk_widget_destroyed), &(info->tl)); gtk_widget_destroy(info->tl); } _free(info->label); _free(info->tlabel); _free(info); } static void edit_entry_info_hide(GtkWidget * w, struct edit_entry_info *info) { if(info->tl) gtk_widget_destroy(info->tl); } GtkWidget *guitl_tab_add_edit_entry(GtkWidget * table, char *label, char *elabel, guint col, guint row, guint quoted) { GtkWidget *entry, *labelw, *pom, *button, *box; struct edit_entry_info *info; int ofs = 0; info = _malloc(sizeof(struct edit_entry_info)); memset(info, '\0', sizeof(struct edit_entry_info)); info->tlabel = elabel ? tl_strdup(elabel) : (label ? tl_strndup(label, strlen(label) - 2) : NULL); info->label = tl_strdup(label); info->quoted = quoted; box = gtk_hbox_new(0, 0); gtk_widget_show(box); gtk_table_attach(GTK_TABLE(table), box, col, col + 1, row, row + 1, GTK_FILL | GTK_SHRINK, GTK_FILL, 2, 2); if(label) { labelw = gtk_label_new(label); gtk_box_pack_start(GTK_BOX(box), labelw, FALSE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(labelw), 0.0, 0.5); gtk_widget_show(labelw); ofs = 1; } pom = gtk_hbox_new(FALSE, 0); gtk_widget_show(pom); gtk_table_attach(GTK_TABLE(table), pom, col + ofs, col + ofs + 1, row, row + 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 2); info->entry = entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(pom), entry, TRUE, TRUE, 0); gtk_widget_show(entry); gtk_signal_connect(GTK_OBJECT(entry), "destroy", GTK_SIGNAL_FUNC(edit_entry_info_destroy), (gpointer) info); gtk_signal_connect(GTK_OBJECT(gtk_widget_get_toplevel(GTK_WIDGET(entry))), "hide", GTK_SIGNAL_FUNC(edit_entry_info_hide), (gpointer) info); button = guitl_pixmap_button(browse_xpm, NULL, gettext("Edit ...")); gtk_box_pack_end(GTK_BOX(pom), button, FALSE, TRUE, 2); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(edit_entry_start_edit), (gpointer) info); return entry; } struct path_entry_info { GtkWidget *entry; GtkWidget *fs; char *label; char *fslabel; int isdir; }; static void SetFileEntry(GtkObject * object, struct path_entry_info *info) { const gchar *p; gboolean ok = TRUE; p = gtk_file_selection_get_filename(GTK_FILE_SELECTION(info->fs)); if(!info->isdir) { struct stat estat; if(!stat(p, &estat) && !S_ISREG(estat.st_mode)) ok = FALSE; } if(ok) { gtk_entry_set_text(GTK_ENTRY(info->entry), p); gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(object))); } else { gdk_beep(); } } static void GetFile(GtkObject * object, struct path_entry_info *info) { if(!info->fs) { const gchar *p; char pom[2048]; snprintf(pom, sizeof(pom), gettext("Pavuk: select %s"), info->label ? info->label : gettext("file")); info->fs = gtk_file_selection_new(info->fslabel ? info->fslabel : pom); if(info->isdir) gtk_widget_set_sensitive(GTK_FILE_SELECTION(info->fs)->file_list, FALSE); gtk_signal_connect(GTK_OBJECT(info->fs), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &(info->fs)); p = gtk_entry_get_text(GTK_ENTRY(info->entry)); if(p && p[0]) gtk_file_selection_set_filename(GTK_FILE_SELECTION(info->fs), p); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(info->fs)->ok_button), "clicked", GTK_SIGNAL_FUNC(SetFileEntry), (gpointer) info); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(info->fs)-> cancel_button), "clicked", GTK_SIGNAL_FUNC(DestroyW), (gpointer) info->fs); } if(GTK_WIDGET_REALIZED(info->fs)) gdk_window_raise(info->fs->window); gtk_widget_show(info->fs); } static void path_entry_info_destroy(GtkWidget * w, struct path_entry_info *info) { if(info->fs) { gtk_signal_disconnect_by_func(GTK_OBJECT(info->fs), GTK_SIGNAL_FUNC(gtk_widget_destroyed), &(info->fs)); gtk_widget_destroy(info->fs); } _free(info->label); _free(info->fslabel); _free(info); } static void path_entry_info_hide(GtkWidget * w, struct path_entry_info *info) { if(info->fs) gtk_widget_destroy(info->fs); } GtkWidget *guitl_tab_add_path_entry_full(GtkWidget * table, char *label, guint col, guint row, int dir, char *fslabel) { GtkWidget *entry, *labelw, *pom, *button, *box; struct path_entry_info *info; int ofs = 0; info = _malloc(sizeof(struct path_entry_info)); info->fs = NULL; info->label = label ? tl_strndup(label, strlen(label) - 2) : NULL; info->fslabel = tl_strdup(fslabel); info->isdir = dir; box = gtk_hbox_new(0, 0); gtk_widget_show(box); gtk_table_attach(GTK_TABLE(table), box, col, col + 1, row, row + 1, GTK_FILL | GTK_SHRINK, GTK_FILL, 2, 2); if(label) { labelw = gtk_label_new(label); gtk_box_pack_start(GTK_BOX(box), labelw, FALSE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(labelw), 0.0, 0.5); gtk_widget_show(labelw); ofs = 1; } pom = gtk_hbox_new(FALSE, 0); gtk_widget_show(pom); gtk_table_attach(GTK_TABLE(table), pom, col + ofs, col + ofs + 1, row, row + 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 2); info->entry = entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(pom), entry, TRUE, TRUE, 0); gtk_widget_show(entry); gtk_signal_connect(GTK_OBJECT(entry), "destroy", GTK_SIGNAL_FUNC(path_entry_info_destroy), (gpointer) info); gtk_signal_connect(GTK_OBJECT(gtk_widget_get_toplevel(GTK_WIDGET(entry))), "hide", GTK_SIGNAL_FUNC(path_entry_info_hide), (gpointer) info); button = guitl_pixmap_button(browse_xpm, NULL, gettext("Browse ...")); gtk_box_pack_end(GTK_BOX(pom), button, FALSE, TRUE, 2); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(GetFile), (gpointer) info); return entry; } GtkWidget *guitl_tab_add_path_entry(GtkWidget * table, char *label, guint col, guint row, int dir) { return guitl_tab_add_path_entry_full(table, label, col, row, dir, NULL); } void guitl_ListDeleteSelected(GtkObject * object, gpointer func_data) { GtkWidget *w = (GtkWidget *) func_data; gtk_clist_freeze(GTK_CLIST(w)); if(GTK_CLIST(w)->selection) { gtk_clist_remove(GTK_CLIST(w), GPOINTER_TO_INT(GTK_CLIST(w)->selection->data)); } gtk_clist_thaw(GTK_CLIST(w)); if(!GTK_CLIST(w)->rows) gtk_signal_emit_by_name(GTK_OBJECT(func_data), "select_row", 0, 0, NULL); } void guitl_ListInsertEntry(GtkObject * object, gpointer func_data) { listanfo *lnfo = (listanfo *) func_data; const char *p; p = gtk_entry_get_text(GTK_ENTRY(lnfo->entry)); if(p && *p) { gtk_clist_append(GTK_CLIST(lnfo->list), (gchar **) &p); } else gdk_beep(); } void guitl_ListModifyEntry(GtkObject * object, gpointer func_data) { listanfo *lnfo = (listanfo *) func_data; const char *p; p = gtk_entry_get_text(GTK_ENTRY(lnfo->entry)); if(p && *p && GTK_CLIST(lnfo->list)->selection) { int row = GPOINTER_TO_INT(GTK_CLIST(lnfo->list)->selection->data); gtk_clist_set_text(GTK_CLIST(lnfo->list), row, 0, p); } else gdk_beep(); } void guitl_ListClear(GtkObject * object, gpointer func_data) { gtk_clist_freeze(GTK_CLIST(func_data)); gtk_clist_clear(GTK_CLIST(func_data)); gtk_clist_thaw(GTK_CLIST(func_data)); gtk_signal_emit_by_name(GTK_OBJECT(func_data), "select_row", 0, 0, NULL); } void guitl_ListCopyToEntry(GtkObject * object, int row, int col, GdkEvent * event, gpointer func_data) { GtkWidget *entry = (GtkWidget *) func_data; char *p = NULL; if(GTK_CLIST(object)->selection) gtk_clist_get_text(GTK_CLIST(object), row, 0, &p); if(!p) p = ""; if(entry) gtk_entry_set_text(GTK_ENTRY(entry), p); } void guitl_ListInsertList(GtkObject * object, gpointer func_data) { listanfo *lnfo = (listanfo *) func_data; GList *dlist = GTK_CLIST(lnfo->entry)->selection; char *p; if(!dlist) gdk_beep(); while(dlist) { gtk_clist_get_text(GTK_CLIST(lnfo->entry), GPOINTER_TO_INT(dlist->data), 0, &p); gtk_clist_append(GTK_CLIST(lnfo->list), &p); dlist = dlist->next; } } GtkWidget *guitl_new_edit_list(GtkWidget ** list, GtkWidget ** entry, char *label, GtkWidget ** dbutton, GtkWidget ** mbutton, GtkWidget ** cbutton, GtkWidget ** abutton, gboolean connect_entry, const char **vals) { GtkWidget *swin; GtkWidget *box, *brow, *button; listanfo *p = NULL; box = gtk_table_new(3, 1, FALSE); gtk_widget_show(box); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_table_attach_defaults(GTK_TABLE(box), swin, 0, 1, 0, 1); gtk_widget_show(swin); *list = gtk_clist_new(1); gtk_clist_set_selection_mode(GTK_CLIST(*list), GTK_SELECTION_BROWSE); gtk_clist_set_reorderable(GTK_CLIST(*list), TRUE); gtk_clist_set_column_auto_resize(GTK_CLIST(*list), 0, TRUE); gtk_container_add(GTK_CONTAINER(swin), *list); gtk_widget_show(*list); brow = gtk_table_new(1, 2, FALSE); gtk_table_attach(GTK_TABLE(box), brow, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 5); gtk_widget_show(brow); if(vals) *entry = guitl_tab_add_enum(brow, label, 0, 0, vals, TRUE); else *entry = guitl_tab_add_entry(brow, label, 0, 0, FALSE); if(connect_entry) gtk_signal_connect(GTK_OBJECT(*list), "select_row", GTK_SIGNAL_FUNC(guitl_ListCopyToEntry), (gpointer) * entry); brow = gtk_hbutton_box_new(); gtk_table_attach(GTK_TABLE(box), brow, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 5); gtk_hbutton_box_set_spacing_default(1); gtk_widget_show(brow); gtk_button_box_set_layout(GTK_BUTTON_BOX(brow), GTK_BUTTONBOX_SPREAD); button = guitl_pixmap_button(append_xpm, NULL, gettext("Append")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); if(!abutton) { p = g_malloc(sizeof(listanfo)); p->list = *list; p->entry = *entry; gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListInsertEntry), (gpointer) p); gtk_signal_connect(GTK_OBJECT(*entry), "activate", GTK_SIGNAL_FUNC(guitl_ListInsertEntry), (gpointer) p); } else *abutton = button; button = guitl_pixmap_button(modify_xpm, NULL, gettext("Modify")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); if(!mbutton) { gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListModifyEntry), (gpointer) p); } else *mbutton = button; button = guitl_pixmap_button(clear_xpm, NULL, gettext("Clear")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); if(!cbutton) { gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListClear), (gpointer) * list); } else *cbutton = button; button = guitl_pixmap_button(delete_xpm, NULL, gettext("Delete")); gtk_container_border_width(GTK_CONTAINER(button), 0); gtk_container_add(GTK_CONTAINER(brow), button); gtk_widget_show(button); if(!dbutton) { gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_ListDeleteSelected), (gpointer) * list); } else *dbutton = button; return box; } Icon *guitl_load_pixmap(char **pmap) { GdkWindow *win = GTK_WIDGET(gui_cfg.toplevel)->window; Icon *icon = malloc(sizeof(Icon)); icon->pixmap = gdk_pixmap_create_from_xpm_d(win, &icon->shape, NULL, pmap); return icon; } GtkWidget *guitl_pixmap_button(char **pm, char *alticon, char *label) { GtkWidget *btn; GtkWidget *pixmap = NULL; Icon *icon; btn = gtk_button_new(); if(alticon) { GdkPixmap *pm; GdkBitmap *mask; pm = gdk_pixmap_create_from_xpm(GTK_WIDGET(gui_cfg.toplevel)->window, &mask, NULL, alticon); if(pm) { pixmap = gtk_pixmap_new(pm, mask); } } if(!pixmap) { icon = guitl_load_pixmap(pm); pixmap = gtk_pixmap_new(icon->pixmap, icon->shape); _free(icon); } if(label) { GtkWidget *box; GtkWidget *lbl; box = gtk_hbox_new(FALSE, 1); gtk_container_add(GTK_CONTAINER(btn), box); gtk_widget_show(box); gtk_box_pack_start(GTK_BOX(box), pixmap, TRUE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(pixmap), 1.0, 0.5); gtk_widget_show(pixmap); lbl = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(lbl), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(box), lbl, TRUE, TRUE, 0); gtk_widget_show(lbl); } else { gtk_container_add(GTK_CONTAINER(btn), pixmap); gtk_widget_show(pixmap); } return btn; } void guitl_PopdownW(GtkObject * object, gpointer func_data) { GtkWidget *w = (GtkWidget *) func_data; gtk_widget_hide(w); } static void menu_kill(GtkWidget * w, GtkWidget * menu) { gtk_widget_destroy(menu); } void guitl_menu_attach(GtkWidget * menu, GtkWidget * parent) { gtk_signal_connect(GTK_OBJECT(parent), "destroy", GTK_SIGNAL_FUNC(menu_kill), menu); gtk_object_set_data(GTK_OBJECT(menu), "guitl_menu_parent", parent); } GtkWidget *guitl_menu_parent(GtkWidget * menu) { return gtk_object_get_data(GTK_OBJECT(menu), "guitl_menu_parent"); } static char *guitl_selection_content = NULL; enum { GUITL_SEL_TYPE_NONE, GUITL_COMPOUND_TEXT, GUITL_STRING, GUITL_TEXT, GUITL_LAST_SEL_TYPE }; static gint guitl_selection_clear(GtkWidget * widget, GdkEventSelection * event) { g_free(guitl_selection_content); guitl_selection_content = NULL; return TRUE; } static void guitl_selection_get(GtkWidget * widget, GtkSelectionData * selection_data, guint info, guint time, gpointer data) { GdkAtom type = GDK_NONE; switch (info) { case GUITL_COMPOUND_TEXT: type = gdk_atom_intern("COMPOUND_TEXT", FALSE); break; case GUITL_TEXT: type = gdk_atom_intern("TEXT", FALSE); break; case GUITL_STRING: type = gdk_atom_intern("STRING", FALSE); break; } gtk_selection_data_set(selection_data, type, 8 * sizeof(gchar), guitl_selection_content, strlen(guitl_selection_content)); } void guitl_set_clipboard_content(char *content) { GdkAtom clipboard_atom; static bool_t initialized = FALSE; static GtkTargetEntry targetlist[] = { {"STRING", 0, GUITL_STRING}, {"TEXT", 0, GUITL_TEXT}, {"COMPOUND_TEXT", 0, GUITL_COMPOUND_TEXT} }; if(!initialized) { initialized = TRUE; clipboard_atom = gdk_atom_intern("CLIPBOARD", FALSE); gtk_selection_add_targets(gui_cfg.toplevel, GDK_SELECTION_PRIMARY, targetlist, sizeof(targetlist) / sizeof(targetlist[0])); gtk_selection_add_targets(gui_cfg.toplevel, clipboard_atom, targetlist, sizeof(targetlist) / sizeof(targetlist[0])); gtk_signal_connect(GTK_OBJECT(gui_cfg.toplevel), "selection_get", GTK_SIGNAL_FUNC(guitl_selection_get), NULL); gtk_signal_connect(GTK_OBJECT(gui_cfg.toplevel), "selection_clear_event", GTK_SIGNAL_FUNC(guitl_selection_clear), NULL); } g_free(guitl_selection_content); guitl_selection_content = g_strdup(content); gtk_selection_owner_set(gui_cfg.toplevel, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME); clipboard_atom = gdk_atom_intern("CLIPBOARD", FALSE); gtk_selection_owner_set(gui_cfg.toplevel, clipboard_atom, GDK_CURRENT_TIME); } void guitl_clist_selection_to_clipboard(GtkWidget * w, GtkWidget * clist) { char *t = NULL, *p; GList *sel; for(sel = GTK_CLIST(clist)->selection; sel; sel = sel->next) { int row = GPOINTER_TO_INT(sel->data); gtk_clist_get_text(GTK_CLIST(clist), row, 0, &p); t = tl_str_concat(t, p, "\n", NULL); } if(t) { guitl_set_clipboard_content(t); _free(t); } } GtkWidget *guitl_toolbar_button(GtkWidget * parent, char *label, char *help, char **pmap, GtkSignalFunc cb, gpointer cb_data, char *alticon) { GtkWidget *button = NULL; GtkWidget *pixmap = NULL; Icon *icon; if(alticon) { GdkPixmap *pm; GdkBitmap *mask; pm = gdk_pixmap_create_from_xpm(GTK_WIDGET(gui_cfg.toplevel)->window, &mask, NULL, alticon); if(pm) pixmap = gtk_pixmap_new(pm, mask); } if(pmap && !pixmap) { icon = guitl_load_pixmap(pmap); pixmap = gtk_pixmap_new(icon->pixmap, icon->shape); _free(icon); } button = gtk_toolbar_append_item(GTK_TOOLBAR(parent), label, help, "", pixmap, cb, cb_data); return button; } #endif pavuk-0.9.35/src/abstract.c0000644000175000001440000002406310142077736012425 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include #include #include #include #include #include "config.h" #include "doc.h" #include "file.h" #include "http.h" #include "ftp.h" #include "gopher.h" #include "url.h" #include "mode.h" #include "nscache.h" #include "iecache.h" #include "mozcache.h" #include "errcode.h" #include "abstract.h" static void abs_sleep(void) { int st; if(cfg.sleep) { if(cfg.rsleep) st = rand() % cfg.sleep; else st = cfg.sleep; xprintf(1, gettext("Suspending download for %d seconds.\n"), st); tl_sleep(st); } } /********************************************************/ /* parameter - URL dokumentu */ /* vracia deskriptor soketu alebo suboru pre dokument */ /* osetrenie vyskytu v lokalnom strome */ /********************************************************/ bufio *abs_get_data_socket(doc * docp) { char *fn; bufio *sock; struct stat estat; url *urlr = docp->doc_url; docp->errcode = ERR_NOERROR; urlr->status &= ~URL_REDIRECT; if(cfg.mode != MODE_SYNC && cfg.mode != MODE_MIRROR) { fn = url_to_filename(urlr, TRUE); if(!access(fn, R_OK) && urlr->type != URLT_FILE) { urlr->status |= URL_REDIRECT; if(stat(fn, &estat) == 0) { if(!S_ISDIR(estat.st_mode)) { if(!(sock = bufio_open(fn, O_BINARY | O_RDONLY))) { xperror(fn); docp->errcode = ERR_FILE_OPEN; } xprintf(1, gettext("File redirect\n")); docp->totsz = estat.st_size; if(docp->datasock) { docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); } return sock; } } } #ifdef HAVE_BDB_18x else if(cfg.ns_cache_dir && urlr->type != URLT_FILE) { char *cfn; char *urlstr = url_to_urlstr(urlr, FALSE); cfn = ns_cache_find_localname(urlstr); _free(urlstr); if(cfn) { sock = bufio_open(cfn, O_BINARY | O_RDONLY); if(sock) { if(docp->datasock) { docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); } /*!!! clever will be to look at MIME type !!! */ if(file_is_html(cfn)) urlr->status |= URL_ISHTML; urlr->status |= URL_INNSCACHE; xprintf(1, gettext("Loading copy from local NS cache - %s\n"), cfn); if(stat(cfn, &estat) == 0) docp->totsz = estat.st_size; _free(cfn); return sock; } _free(cfn); } } else if(cfg.moz_cache_dir && urlr->type != URLT_FILE) { char *cfn; char *urlstr = url_to_urlstr(urlr, FALSE); cfn = moz_cache_find_localname(urlstr); _free(urlstr); if(cfn) { sock = bufio_open(cfn, O_BINARY | O_RDONLY); if(sock) { if(docp->datasock) { docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); } /*!!! clever will be to look at MIME type !!! */ if(file_is_html(cfn)) urlr->status |= URL_ISHTML; urlr->status |= URL_INNSCACHE; xprintf(1, gettext("Loading copy from local Mozilla cache - %s\n"), cfn); if(stat(cfn, &estat) == 0) docp->totsz = estat.st_size; _free(cfn); return sock; } _free(cfn); } } #endif #ifdef __CYGWIN__ else if(cfg.ie_cache && urlr->type != URLT_FILE) { char *cfn; char *urlstr = url_to_urlstr(urlr, FALSE); cfn = ie_cache_find_localname(urlstr); _free(urlstr); if(cfn) { sock = bufio_open(cfn, O_BINARY | O_RDONLY); if(sock) { if(docp->datasock) { docp->is_persistent = FALSE; abs_close_socket(docp, FALSE); } if(file_is_html(cfn)) urlr->status |= URL_ISHTML; urlr->status |= URL_INNSCACHE; xprintf(1, gettext("Loading copy from local MSIE cache - %s\n"), cfn); if(stat(cfn, &estat) == 0) docp->totsz = estat.st_size; _free(cfn); return sock; } _free(cfn); } } #endif } if(docp->is_http_transfer) { abs_sleep(); urlr->status &= ~URL_REDIRECT; return http_get_data_socket(docp); } else if(urlr->type == URLT_FTP || urlr->type == URLT_FTPS) { abs_sleep(); urlr->status &= ~URL_REDIRECT; return ftp_get_data_socket(docp); } else if(urlr->type == URLT_GOPHER) { abs_sleep(); urlr->status &= ~URL_REDIRECT; return gopher_get_data_socket(docp); } else if(urlr->type == URLT_FILE) { urlr->status &= ~URL_REDIRECT; return get_file_data_socket(docp); } xprintf(1, gettext("Unsupported URL\n")); return NULL; } static int should_leave_persistent(doc * docp) { return (docp->is_persistent && !(docp->doc_url->status & URL_REDIRECT) && docp->errcode != ERR_STORE_DOC && docp->errcode != ERR_UNKNOWN && docp->errcode != ERR_READ && docp->errcode != ERR_BIGGER && docp->errcode != ERR_NOMIMET && docp->errcode != ERR_BREAK && docp->errcode != ERR_OUTTIME && docp->errcode != ERR_SMALLER && docp->errcode != ERR_LOW_TRANSFER_RATE && docp->errcode != ERR_QUOTA_FILE && docp->errcode != ERR_QUOTA_TRANS && docp->errcode != ERR_QUOTA_FS && docp->errcode != ERR_QUOTA_TIME && docp->errcode != ERR_HTTP_UNKNOWN && docp->errcode != ERR_HTTP_TRUNC && docp->errcode != ERR_HTTP_SNDREQ && docp->errcode != ERR_HTTP_NOREGET && docp->errcode != ERR_HTTP_CLOSURE && docp->errcode != ERR_HTTP_TIMEOUT); } /********************************************************/ /* close socket for current document if should */ /********************************************************/ void abs_close_socket(doc * docp, int read_status) { url *urlr = docp->doc_url; if(!docp->datasock) return; switch (urlr->type) { case URLT_FILE: bufio_close(docp->datasock); docp->datasock = NULL; break; case URLT_HTTP: case URLT_HTTPS: if(should_leave_persistent(docp)) { DEBUG_NET("Leaving opened persistent HTTP connection\n"); break; } else { bufio_close(docp->datasock); docp->datasock = NULL; } break; case URLT_GOPHER: if(docp->is_http_transfer && should_leave_persistent(docp)) { DEBUG_NET("Leaving opened persistent HTTP connection\n"); break; } else { bufio_close(docp->datasock); docp->datasock = NULL; } break; case URLT_FTP: case URLT_FTPS: if(docp->is_http_transfer && should_leave_persistent(docp)) { DEBUG_NET("Leaving opened persistent HTTP connection\n"); break; } else { bufio_close(docp->datasock); docp->datasock = NULL; } if(urlr->status & URL_REDIRECT) return; if(docp->ftp_control && read_status) { if(ftp_get_response(docp, NULL, FALSE) >= 400) { xprintf(1, gettext("Warning: broken ftp transfer ...\n")); docp->errcode = ERR_FTP_TRUNC; docp->ftp_fatal_err = TRUE; } } if((docp->errcode == ERR_NOERROR) && cfg.del_after) { if(ftp_remove(docp)) xprintf(1, gettext("Error removing FTP document from remote server\n")); } if(docp->ftp_control && docp->ftp_fatal_err) { bufio_close(docp->ftp_control); docp->ftp_control = NULL; } break; default: bufio_close(docp->datasock); docp->datasock = NULL; } } int abs_read(bufio * sock, char *buf, size_t bufsize) { return bufio_nbfread(sock, buf, bufsize); } int abs_readln(bufio * sock, char *buf, size_t bufsize) { return bufio_readln(sock, buf, bufsize); } int abs_write(bufio * sock, char *buf, size_t bufsize) { return bufio_write(sock, buf, bufsize); } int abs_read_data(doc * docp, bufio * sock, char *buf, size_t bufsize) { int rv; if(docp->is_http11 && docp->is_chunked) { char pombuf[1024]; rv = 0; if(docp->read_chunksize) { char *endp; rv = abs_readln(sock, pombuf, sizeof(pombuf) - 1); if(rv <= 0) { xprintf(1, gettext ("Error reading document with \"chunked\" transfer encoding!\n")); rv = -1; } else { docp->chunk_size = strtol(pombuf, &endp, 16); docp->read_chunksize = FALSE; if(docp->chunk_size == 0) docp->read_trailer = TRUE; rv = 0; } } if(!rv && docp->read_trailer) { while((rv = abs_readln(sock, pombuf, sizeof(pombuf) - 1)) >= 0) { if(!rv) { rv = -1; break; } if(strcspn(pombuf, "\r\n") == 0) { rv = 0; break; } } } if(!rv && docp->chunk_size > 0) { size_t rs; rs = (bufsize < (size_t) docp->chunk_size) ? bufsize : (size_t) docp->chunk_size; rv = bufio_nbfread(sock, buf, rs); if(rv > 0) docp->chunk_size -= rv; if(docp->chunk_size == 0) { abs_readln(sock, pombuf, sizeof(pombuf) - 1); docp->read_chunksize = TRUE; } } } else if((docp->is_persistent || (cfg.check_size && docp->doc_url->type == URLT_HTTP)) && !(docp->doc_url->status & URL_REDIRECT) && docp->totsz >= 0) { size_t rs; rs = (docp->totsz - docp->rest_pos) - docp->size; if(rs > bufsize) rs = bufsize; if(rs) { rv = bufio_nbfread(sock, buf, rs); } else rv = 0; } else { rv = bufio_nbfread(sock, buf, bufsize); } return rv; } pavuk-0.9.35/src/abstract.h0000644000175000001440000000141410142077736012425 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _abstract_h_ #define _abstract_h_ #include #include "doc.h" #include "bufio.h" extern bufio *abs_get_data_socket(doc *); extern void abs_close_socket(doc *, int); extern int abs_read(bufio *, char *, size_t); extern int abs_readln(bufio *, char *, size_t); extern int abs_write(bufio *, char *, size_t); extern int abs_read_data(doc *, bufio *, char *, size_t); #endif pavuk-0.9.35/src/errcode.c0000644000175000001440000002702510142077737012247 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include "config.h" #include "errcode.h" void report_error(doc * docp, char *str) { if(cfg.rbreak) { xprintf(1, gettext("%s: user break\n"), str); return; } switch (docp->errcode) { case ERR_NOERROR: xprintf(1, gettext("%s: OK\n"), str); break; case ERR_STORE_DOC: xprintf(1, gettext("%s: ERROR: storing document\n"), str); break; case ERR_FILE_OPEN: xprintf(1, gettext("%s: ERROR: opening file\n"), str); break; case ERR_DIR_URL: xprintf(1, gettext ("%s: ERROR: URL pointing to local directory is not supported\n"), str); break; case ERR_UNKNOWN: xprintf(1, gettext("%s: ERROR: unknown\n"), str); break; case ERR_LOCKED: xprintf(1, gettext("%s: ERROR: document is locked\n"), str); break; case ERR_READ: xprintf(1, gettext("%s: ERROR: reading socket\n"), str); break; case ERR_BIGGER: xprintf(1, gettext("%s: MESSAGE: bigger than maximal allowed size\n"), str); break; case ERR_SCRIPT_DISABLED: xprintf(1, gettext("%s: MESSAGE: disabled by user-exit script condition\n"), str); break; case ERR_SMALLER: xprintf(1, gettext("%s: MESSAGE: smaller than minimal allowed size\n"), str); break; case ERR_NOMIMET: xprintf(1, gettext("%s: MESSAGE: this mime type is not allowed (%s)\n"), str, docp->type_str ? docp->type_str : "unknown"); break; case ERR_PROXY_CONNECT: xprintf(1, gettext("%s: ERROR: error in proxy connect\n"), str); break; case ERR_BREAK: xprintf(1, gettext("%s: ERROR: transfer broken by user\n"), str); break; case ERR_OUTTIME: xprintf(1, gettext ("%s: MESSAGE: file modification time doesn't fit to specified interval\n"), str); break; case ERR_ZERO_SIZE: xprintf(1, gettext("%s: ERROR: file has zero size - possible error\n"), str); break; case ERR_PROCESSED: xprintf(1, gettext("%s: MESSAGE: document was already processed\n"), str); break; case ERR_UDISABLED: xprintf(1, gettext("%s: MESSAGE: document was disabled by user\n"), str); break; case ERR_RDISABLED: xprintf(1, gettext("%s: MESSAGE: document was disabled by limiting rules\n"), str); break; case ERR_LOW_TRANSFER_RATE: xprintf(1, gettext("%s: WARNING: transfer rate lower than minimal allowed\n"), str); break; case ERR_QUOTA_FILE: xprintf(1, gettext ("%s: WARNING: file size quota exceeded, rest will be truncated\n"), str); break; case ERR_QUOTA_TRANS: xprintf(1, gettext("%s: WARNING: transfer quota exceeded, breaking download\n"), str); break; case ERR_QUOTA_FS: xprintf(1, gettext("%s: ERROR: low free space on filesystem, breaking transfer\n"), str); break; case ERR_QUOTA_TIME: xprintf(1, gettext ("%s: WARNING: maximal allowed running time exceeded, downloading will break\n"), str); break; case ERR_FTP_UNKNOWN: xprintf(1, gettext("%s: ERROR: unnown FTP error\n"), str); break; case ERR_FTP_NOREGET: xprintf(1, gettext("%s: ERROR: FTP server doesn't support REST command\n"), str); break; case ERR_FTP_BDIR: case ERR_FTP_NODIR: xprintf(1, gettext("%s: ERROR: unable to list directory content\n"), str); break; case ERR_FTP_CONNECT: xprintf(1, gettext("%s: ERROR: unable to connect to FTP server\n"), str); break; case ERR_FTP_BUSER: xprintf(1, gettext("%s: ERROR: FTP authentification - bad username\n"), str); break; case ERR_FTP_BPASS: xprintf(1, gettext("%s: ERROR: FTP authentification - bad password\n"), str); break; case ERR_FTP_BPROXYUSER: xprintf(1, gettext("%s: ERROR: FTP proxy authentification - bad username\n"), str); break; case ERR_FTP_BPROXYPASS: xprintf(1, gettext("%s: ERROR: FTP proxy authentification - bad password\n"), str); break; case ERR_FTP_DATACON: xprintf(1, gettext("%s: ERROR: unable to open FTP data connection\n"), str); break; case ERR_FTP_GET: xprintf(1, gettext("%s: ERROR: unable to get file from FTP server\n"), str); break; case ERR_FTP_NOMDTM: xprintf(1, gettext("%s: ERROR: FTP server doesn't support MDTM command\n"), str); break; case ERR_FTP_TRUNC: xprintf(1, gettext("%s: ERROR: file from FTP server is truncated\n"), str); break; case ERR_HTTP_ACTUAL: case ERR_FTP_ACTUAL: xprintf(1, gettext("%s: MESSAGE: reget unneeded - file is up to date\n"), str); break; case ERR_FTP_NOTRANSFER: xprintf(1, gettext("%s: MESSAGE: FTP transfer not allowed because of rules\n"), str); break; case ERR_FTP_DIRNO: xprintf(1, gettext ("%s: WARNING: FTP directory URL, but FTP directory not allowed (-FTPdir)\n"), str); break; case ERR_FTP_LOGIN_HANDSHAKE: xprintf(1, gettext("%s: WARNING: FTP login_handshake failed\n"), str); break; case ERR_HTTP_UNKNOWN: xprintf(1, gettext("%s: ERROR: unknown HTTP error\n"), str); break; case ERR_HTTP_CONNECT: xprintf(1, gettext("%s: ERROR: unable to connect to HTTP server\n"), str); break; case ERR_HTTP_NOREGET: xprintf(1, gettext ("%s: ERROR: HTTP server doesn't support partial content retrieving\n"), str); break; case ERR_HTTP_SNDREQ: xprintf(1, gettext("%s: ERROR: broken HTTP request send\n"), str); break; case ERR_HTTP_RCVRESP: xprintf(1, gettext("%s: ERROR: failed to read HTTP response\n"), str); break; case ERR_HTTP_FAILREGET: xprintf(1, gettext ("%s: ERROR: unexpected HTTP response code after trying to reget\n"), str); break; case ERR_HTTP_SNDREQDATA: xprintf(1, gettext("%s: ERROR: unable to send HTTP request data\n"), str); break; case ERR_HTTP_REDIR: xprintf(1, gettext("%s: MESSAGE: redirecting to another location\n"), str); break; case ERR_HTTP_TRUNC: xprintf(1, gettext("%s: ERROR: HTTP document is truncated\n"), str); break; case ERR_HTTP_CYCLIC: xprintf(1, gettext("%s: ERROR: cyclic redirection!\n"), str); break; case ERR_HTTP_UNSUPREDIR: xprintf(1, gettext("%s: ERROR: redirecting to unsupported URL\n"), str); break; case ERR_HTTP_PROXY_CONN: xprintf(1, gettext("%s: ERROR: unable to connect to proxy server\n"), str); break; case ERR_HTTP_BADREDIRECT: xprintf(1, gettext("%s: ERROR: received bad redirect response from server\n"), str); break; case ERR_HTTP_AUTH_NTLM: xprintf(1, gettext("%s: ERROR: unable to do NTLM authorization\n"), str); break; case ERR_HTTP_AUTH_DIGEST: xprintf(1, gettext("%s: ERROR: unable to do HTTP Digest authorization\n"), str); break; case ERR_HTTP_PROAUTH_NTLM: xprintf(1, gettext("%s: ERROR: unable to do NTLM proxy authorization\n"), str); break; case ERR_HTTP_PROAUTH_DIGEST: xprintf(1, gettext("%s: ERROR: unable to do HTTP proxy Digest authorization\n"), str); break; case ERR_HTTP_BADRQ: xprintf(1, gettext("%s: ERROR: HTTP client sends bad request\n"), str); break; case ERR_HTTP_AUTH: xprintf(1, gettext("%s: ERROR: HTTP authentication is required\n"), str); break; case ERR_HTTP_PROXY_AUTH: xprintf(1, gettext("%s: ERROR: HTTP proxy authentication is required\n"), str); break; case ERR_HTTP_PAY: xprintf(1, gettext("%s: ERROR: HTTP payment required\n"), str); break; case ERR_HTTP_FORB: xprintf(1, gettext("%s: ERROR: forbidden HTTP request\n"), str); break; case ERR_HTTP_NFOUND: xprintf(1, gettext("%s: ERROR: HTTP document not found\n"), str); break; case ERR_HTTP_SERV: xprintf(1, gettext("%s: ERROR: HTTP remote server error\n"), str); break; case ERR_HTTP_TIMEOUT: xprintf(1, gettext ("%s: ERROR: HTTP server replied with connection timeout response\n"), str); break; case ERR_HTTP_CONFLICT: xprintf(1, gettext("%s: ERROR: HTTP server replied with conflict response\n"), str); break; case ERR_HTTP_GONE: xprintf(1, gettext("%s: ERROR: document was removed from HTTP server\n"), str); break; case ERR_HTTP_USE_PROXY: xprintf(1, gettext("%s: ERROR: you must use proxy to access this URL\n"), str); break; case ERR_HTTP_306: xprintf(1, gettext("%s: ERROR: 306\n"), str); break; case ERR_HTTP_NALLOW: xprintf(1, gettext ("%s: ERROR: used HTTP method is not supported or not allowed for this URL\n"), str); break; case ERR_HTTP_NACCEPT: xprintf(1, gettext ("%s: ERROR: client doesn't accept MIME type of requested URL\n"), str); break; case ERR_HTTP_MISSLEN: xprintf(1, gettext ("%s: ERROR: in request header is missing Content-Length: header\n"), str); break; case ERR_HTTP_PREC_FAIL: xprintf(1, gettext ("%s: ERROR: preconditions in request failed for requested URL\n"), str); break; case ERR_HTTP_TOO_LARGE: xprintf(1, gettext("%s: ERROR: request body too large\n"), str); break; case ERR_HTTP_LONG_URL: xprintf(1, gettext("%s: ERROR: request URL too long\n"), str); break; case ERR_HTTP_UNSUP_MEDIA: xprintf(1, gettext("%s: ERROR: resource in format unsupported for this request\n"), str); break; case ERR_HTTP_BAD_RANGE: xprintf(1, gettext("%s: ERROR: requested bad range of document\n"), str); break; case ERR_HTTP_EXPECT_FAIL: xprintf(1, gettext("%s: ERROR: failed to fulfill expectation from request\n"), str); break; case ERR_HTTP_NOT_IMPL: xprintf(1, gettext ("%s: ERROR: requested HTTP method not implemented on server side\n"), str); break; case ERR_HTTP_BAD_GW: xprintf(1, gettext("%s: ERROR: gatewaying failed for this URL\n"), str); break; case ERR_HTTP_SERV_UNAVAIL: xprintf(1, gettext ("%s: ERROR: HTTP service currently not available, check later\n"), str); break; case ERR_HTTP_GW_TIMEOUT: xprintf(1, gettext ("%s: ERROR: timeout occured in communication between gateway and remote server\n"), str); break; case ERR_HTTP_VER_UNSUP: xprintf(1, gettext ("%s: ERROR: HTTP version used in request is unsupported by remote server\n"), str); break; case ERR_GOPHER_CONNECT: xprintf(1, gettext("%s: ERROR: unable to connect to GOPHER server\n"), str); break; case ERR_GOPHER_UNKNOWN: xprintf(1, gettext("%s: ERROR: unknown GOPHER error\n"), str); break; case ERR_HTTPS_CONNECT: xprintf(1, gettext("%s: ERROR: unable to connect to HTTPS server\n"), str); break; case ERR_FTPS_CONNECT: xprintf(1, gettext ("%s: ERROR: unable to establish SSL control connection to FTPS server\n"), str); break; case ERR_FTPS_UNSUPORTED: xprintf(1, gettext("%s: ERROR: this FTP server doesn't support SSL connections\n"), str); break; case ERR_FTPS_DATASSLCONNECT: xprintf(1, gettext ("%s: ERROR: unable to establish SSL data connection to FTPS server\n"), str); break; default: xprintf(1, gettext("%s: ERROR: unknown errcode : %d\n"), str, docp->errcode); } } pavuk-0.9.35/src/errcode.h0000644000175000001440000001605610142077737012256 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _errcode_h_ #define _errcode_h_ #include "doc.h" #define ERR_NOERROR 0 #define ERR_STORE_DOC 1 /*** error string document to local file ***/ #define ERR_FILE_OPEN 2 /*** unable to open local file ***/ #define ERR_DIR_URL 3 /*** FILE URL points to directory ***/ #define ERR_UNKNOWN 5 #define ERR_LOCKED 6 /*** document is locked by another pavuk instance ***/ #define ERR_READ 7 /*** error while reading from socket/file ***/ #define ERR_BIGGER 8 /*** file is bigger than max. allowed ***/ #define ERR_NOMIMET 9 /*** file MIME type is not allowed ***/ #define ERR_PROXY_CONNECT 10 /*** error while connecting to proxy server ***/ #define ERR_BREAK 11 /*** user break ***/ #define ERR_OUTTIME 12 /*** file modification time doesn't fit in allowed time interval ***/ #define ERR_SCRIPT_DISABLED 13 /*** disabled by uexit script ***/ #define ERR_SMALLER 14 /*** file is smaller than minimal allowed ***/ #define ERR_ZERO_SIZE 15 /*** if file have zero size ***/ #define ERR_PROCESSED 16 /*** document was allready processed ***/ #define ERR_UDISABLED 17 /*** user disables manualy the processing of this URL ***/ #define ERR_RDISABLED 18 /*** this document is disabled because of rules ***/ #define ERR_LOW_TRANSFER_RATE 19 /*** transfer rate lower than minimal requested ***/ #define ERR_QUOTA_FILE 20 /*** rich maximal allowed size of file ***/ #define ERR_QUOTA_TRANS 21 /*** quota for transfer exceeded ***/ #define ERR_QUOTA_FS 22 /*** low space on filesystem ***/ #define ERR_QUOTA_TIME 23 /*** maximal allowed running time exceeded ***/ #define ERR_FTP_UNKNOWN 1000 /*** unknown error ***/ #define ERR_FTP_NOREGET 1001 /*** server doesm't support reget ***/ #define ERR_FTP_BDIR 1002 /*** directory list error ***/ #define ERR_FTP_CONNECT 1003 /*** error conecting ***/ #define ERR_FTP_BUSER 1004 /*** USER error ***/ #define ERR_FTP_BPASS 1005 /*** PASS error ***/ #define ERR_FTP_DATACON 1006 /*** error seting up data connection ***/ #define ERR_FTP_GET 1007 /*** error when trying to transfer file or dir ***/ #define ERR_FTP_NODIR 1008 /*** directory doesn't exist or is not accesible ***/ #define ERR_FTP_TRUNC 1009 /*** truncated file ?? ***/ #define ERR_FTP_ACTUAL 1010 /*** ftp file is actual (no transfer) ***/ #define ERR_FTP_NOTRANSFER 1011 /*** nothing to transfer ***/ #define ERR_FTP_NOMDTM 1012 /*** server doesn't suport MDTM command ***/ #define ERR_FTP_DIRNO 1013 /*** directory , but not allowed ***/ #define ERR_FTP_BPROXYUSER 1014 /*** proxy USER error ***/ #define ERR_FTP_BPROXYPASS 1015 /*** proxy PASS error ***/ #define ERR_FTP_LOGIN_HANDSHAKE 1016 /*** failed custom login handshake ***/ #define ERR_HTTP_UNKNOWN 2000 /*** unknown error ***/ #define ERR_HTTP_CONNECT 2001 /*** connection error ***/ #define ERR_HTTP_NOREGET 2002 /*** reget not supported ***/ #define ERR_HTTP_SNDREQ 2003 /*** error sending request ***/ #define ERR_HTTP_REDIR 2004 /*** redirect ***/ #define ERR_HTTP_TRUNC 2005 /*** truncated ***/ #define ERR_HTTP_CYCLIC 2006 /*** cyclic redirection ***/ #define ERR_HTTP_UNSUPREDIR 2007 /*** unsupported URL in redirection ***/ #define ERR_HTTP_SNDREQDATA 2008 /*** error sending request data ***/ #define ERR_HTTP_PROXY_CONN 2009 /*** error connecting to HTTP proxy ***/ #define ERR_HTTP_BADREDIRECT 2010 /*** after redirect Loacation: is missing ***/ #define ERR_HTTP_AUTH_NTLM 2011 /*** error doing NTLM authorization ***/ #define ERR_HTTP_AUTH_DIGEST 2012 /*** error doing HTTP Digest authorization ***/ #define ERR_HTTP_PROAUTH_NTLM 2013 /*** error doing NTLM proxy authorization ***/ #define ERR_HTTP_PROAUTH_DIGEST 2014 /*** error doing HTTP proxy Digest authorization ***/ #define ERR_HTTP_CLOSURE 2015 /*** persistent connection was closed ***/ #define ERR_HTTP_RCVRESP 2016 /*** error reading response ***/ #define ERR_HTTP_FAILREGET 2017 /*** bad answer on reget request ***/ #define ERR_HTTP_ACTUAL 2304 /*** not modified ***/ #define ERR_HTTP_USE_PROXY 2305 /*** Use Proxy ***/ #define ERR_HTTP_306 2306 /*** 306 Unsupported by HTTP/1.1 ***/ #define ERR_HTTP_REDIR2 2307 /*** Temporary Redirect ***/ #define ERR_HTTP_BADRQ 2400 /*** bad request ***/ #define ERR_HTTP_AUTH 2401 /*** authorization error ***/ #define ERR_HTTP_PAY 2402 /*** payment required ***/ #define ERR_HTTP_FORB 2403 /*** forbiden request ***/ #define ERR_HTTP_NFOUND 2404 /*** not found ***/ #define ERR_HTTP_NALLOW 2405 /*** Method Not Allowed ***/ #define ERR_HTTP_NACCEPT 2406 /*** Not Acceptable ***/ #define ERR_HTTP_PROXY_AUTH 2407 /*** proxy authorization error ***/ #define ERR_HTTP_TIMEOUT 2408 /*** HTTP connection timeout ***/ #define ERR_HTTP_CONFLICT 2409 /*** conflict ***/ #define ERR_HTTP_GONE 2410 /*** gone ***/ #define ERR_HTTP_MISSLEN 2411 /*** Length Required ***/ #define ERR_HTTP_PREC_FAIL 2412 /*** Precondition Failed ***/ #define ERR_HTTP_TOO_LARGE 2413 /*** Request Entity Too Large ***/ #define ERR_HTTP_LONG_URL 2414 /*** Request-URI Too Long ***/ #define ERR_HTTP_UNSUP_MEDIA 2415 /*** unsupported media type ***/ #define ERR_HTTP_BAD_RANGE 2416 /*** Requested Range Not Satisfiable ***/ #define ERR_HTTP_EXPECT_FAIL 2417 /*** Expectation Failed ***/ #define ERR_HTTP_SERV 2500 /*** server error ***/ #define ERR_HTTP_NOT_IMPL 2501 /*** not implemented ***/ #define ERR_HTTP_BAD_GW 2502 /*** Bad Gateway ***/ #define ERR_HTTP_SERV_UNAVAIL 2503 /*** Service Unavailable ***/ #define ERR_HTTP_GW_TIMEOUT 2504 /*** Gateway Timeout ***/ #define ERR_HTTP_VER_UNSUP 2505 /*** HTTP Version Not Supported ***/ #define ERR_GOPHER_UNKNOWN 3000 /*** unknown error ***/ #define ERR_GOPHER_CONNECT 3001 /*** error connecting ***/ #define ERR_HTTPS_CONNECT 4001 /*** error connecting to HTTPS server ***/ #define ERR_FTPS_CONNECT 5001 #define ERR_FTPS_UNSUPORTED 5002 #define ERR_FTPS_DATASSLCONNECT 5003 extern void report_error(doc *, char *); #endif pavuk-0.9.35/src/gui_about.c0000644000175000001440000000534710146657462012610 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #ifdef GTK_FACE #include #include #include "icons/cancel.xpm" #include "pavuk_logo.xpm" void gui_build_about(int popup) { GtkWidget *col, *button, *frame, *label, *pixmap, *row; GtkAccelGroup *accel_group; static Icon *icon = NULL; char pom[1024]; if(gui_cfg.about_shell) { if(popup) { gtk_widget_show_all(gui_cfg.about_shell); if(GTK_WIDGET_REALIZED(gui_cfg.about_shell)) gdk_window_raise(gui_cfg.about_shell->window); } return; } gui_cfg.about_shell = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(gui_cfg.about_shell), gettext("Pavuk: About")); gtk_container_border_width(GTK_CONTAINER(gui_cfg.about_shell), 3); gtk_signal_connect(GTK_OBJECT(gui_cfg.about_shell), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.about_shell); col = gtk_vbox_new(0, 5); gtk_container_add(GTK_CONTAINER(gui_cfg.about_shell), col); gtk_widget_show(col); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(col), frame); row = gtk_hbox_new(0, 10); gtk_widget_show(row); gtk_container_add(GTK_CONTAINER(frame), row); if(!icon) icon = guitl_load_pixmap(pavuk_logo_xpm); pixmap = gtk_pixmap_new(icon->pixmap, icon->shape); gtk_container_add(GTK_CONTAINER(row), pixmap); gtk_widget_show(pixmap); snprintf(pom, sizeof(pom), gettext("Pavuk %s %s\n\n" "an automatic WEB file grabber\n\n" "By Stefan Ondrejicka\n\n" "URL: http://pavuk.sourceforge.net/\n"), VERSION, HOSTTYPE); label = gtk_label_new(pom); gtk_misc_set_padding(GTK_MISC(label), 15, 15); gtk_container_add(GTK_CONTAINER(row), label); gtk_widget_show(label); button = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel")); gtk_container_add(GTK_CONTAINER(col), button); accel_group = gtk_accel_group_new(); gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(gui_cfg.about_shell), accel_group); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) gui_cfg.about_shell); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); if(popup) gtk_widget_show(gui_cfg.about_shell); } #endif pavuk-0.9.35/src/gui_jscons.c0000644000175000001440000001524010146657462012766 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #include "jsbind.h" #if defined(GTK_FACE) && defined(HAVE_MOZJS) #include #include #include "icons/cancel.xpm" #include "icons/restart_small.xpm" #include "icons/save.xpm" #include "icons/load.xpm" #include "icons/append.xpm" static GtkWidget *pjs_source_text; static GtkWidget *pjs_file; static GtkWidget *pjs_prompt; static void load_script_file(void) { char *fn; char *fc; fn = gtk_entry_get_text(GTK_ENTRY(pjs_file)); if(!fn || !fn[0]) { gdk_beep(); return; } _free(cfg.js_script_file); cfg.js_script_file = tl_strdup(fn); fc = tl_load_text_file(fn); gtk_text_set_point(GTK_TEXT(pjs_source_text), 0); gtk_text_forward_delete(GTK_TEXT(pjs_source_text), gtk_text_get_length(GTK_TEXT(pjs_source_text))); gtk_text_insert(GTK_TEXT(pjs_source_text), NULL, NULL, NULL, fc, strlen(fc)); _free(fc); } static void save_script_file(void) { char *fn; char *fc; int len; fn = gtk_entry_get_text(GTK_ENTRY(pjs_file)); if(!fn || !fn[0]) { gdk_beep(); return; } _free(cfg.js_script_file); cfg.js_script_file = tl_strdup(fn); len = gtk_text_get_length(GTK_TEXT(pjs_source_text)); fc = gtk_editable_get_chars(GTK_EDITABLE(pjs_source_text), 0, len); if(tl_save_text_file(fn, fc, len)) gdk_beep(); g_free(fc); } static void restart_runtime(void) { char *fn; fn = gtk_entry_get_text(GTK_ENTRY(pjs_file)); _free(cfg.js_script_file); if(fn && fn[0]) cfg.js_script_file = tl_strdup(fn); pjs_destroy(); pjs_init(); } static void set_script(void) { int len; char *fc; len = gtk_text_get_length(GTK_TEXT(pjs_source_text)); fc = gtk_editable_get_chars(GTK_EDITABLE(pjs_source_text), 0, len); if(len && fc) { if(pjs_load_script_string(fc)) gdk_beep(); } else gdk_beep(); } static void evaluate_script(void) { char *fc; fc = gtk_entry_get_text(GTK_ENTRY(pjs_prompt)); if(fc && fc[0]) { if(!pjs_execute(fc)) gdk_beep(); else gtk_entry_select_region(GTK_ENTRY(pjs_prompt), 0, strlen(fc)); } else gdk_beep(); } void gui_pjs_console(int popup) { GtkWidget *col, *row, *button, *sep; GtkWidget *hsb, *vsb; GtkAdjustment *hadj, *vadj; GtkAccelGroup *accel_group; if(gui_cfg.pjs_console_shell) { if(popup) { gtk_widget_show_all(gui_cfg.pjs_console_shell); if(GTK_WIDGET_REALIZED(gui_cfg.pjs_console_shell)) gdk_window_raise(gui_cfg.pjs_console_shell->window); } return; } pjs_init(); gui_cfg.pjs_console_shell = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(gui_cfg.pjs_console_shell), gettext("Pavuk: JavaScript console")); gtk_container_border_width(GTK_CONTAINER(gui_cfg.pjs_console_shell), 3); gtk_signal_connect(GTK_OBJECT(gui_cfg.pjs_console_shell), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.pjs_console_shell); col = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(gui_cfg.pjs_console_shell), col); gtk_widget_show(col); row = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); gtk_box_pack_start(GTK_BOX(col), row, FALSE, FALSE, 1); gtk_toolbar_set_button_relief(GTK_TOOLBAR(row), GTK_RELIEF_NONE); gtk_toolbar_set_space_size(GTK_TOOLBAR(row), 10); gtk_widget_show(row); button = guitl_toolbar_button(row, NULL, gettext("Reload script file"), load_xpm, GTK_SIGNAL_FUNC(load_script_file), NULL, NULL); button = guitl_toolbar_button(row, NULL, gettext("Save script to file"), save_xpm, GTK_SIGNAL_FUNC(save_script_file), (gpointer) gui_cfg.pjs_console_shell, NULL); gtk_toolbar_append_space(GTK_TOOLBAR(row)); button = guitl_toolbar_button(row, NULL, gettext("Load script to JavaScript runtime"), append_xpm, GTK_SIGNAL_FUNC(set_script), NULL, NULL); button = guitl_toolbar_button(row, NULL, gettext("Restart JavaScript runtime"), restart_small_xpm, GTK_SIGNAL_FUNC(restart_runtime), NULL, NULL); gtk_toolbar_append_space(GTK_TOOLBAR(row)); button = guitl_toolbar_button(row, NULL, gettext("Close"), cancel_xpm, GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) gui_cfg.pjs_console_shell, NULL); accel_group = gtk_accel_group_new(); gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(gui_cfg.pjs_console_shell), accel_group); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(col), sep, FALSE, TRUE, 1); gtk_widget_show(sep); row = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(col), row, FALSE, FALSE, 2); gtk_widget_show(row); pjs_prompt = guitl_tab_add_entry(row, gettext("Prompt: "), 0, 0, FALSE); gtk_signal_connect(GTK_OBJECT(pjs_prompt), "activate", GTK_SIGNAL_FUNC(evaluate_script), NULL); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(col), sep, FALSE, TRUE, 1); gtk_widget_show(sep); row = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(col), row, FALSE, FALSE, 2); gtk_widget_show(row); pjs_file = guitl_tab_add_path_entry(row, gettext("JavaScript source file: "), 0, 0, FALSE); gtk_entry_set_text(GTK_ENTRY(pjs_file), cfg.js_script_file ? cfg.js_script_file : ""); row = gtk_table_new(2, 2, FALSE); gtk_box_pack_start(GTK_BOX(col), row, TRUE, TRUE, 2); gtk_widget_show(row); hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); hsb = gtk_hscrollbar_new(hadj); gtk_table_attach(GTK_TABLE(row), hsb, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show(hsb); vadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); vsb = gtk_vscrollbar_new(vadj); gtk_table_attach(GTK_TABLE(row), vsb, 1, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(vsb); pjs_source_text = gtk_text_new(hadj, vadj); gtk_widget_set_usize(pjs_source_text, 400, 300); gtk_text_set_editable(GTK_TEXT(pjs_source_text), TRUE); gtk_table_attach(GTK_TABLE(row), pjs_source_text, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(pjs_source_text); if(cfg.js_script_file) load_script_file(); if(popup) { gtk_widget_show(gui_cfg.pjs_console_shell); if(GTK_WIDGET_REALIZED(gui_cfg.pjs_console_shell)) gdk_window_raise(gui_cfg.pjs_console_shell->window); } } #endif pavuk-0.9.35/src/digest_auth.c0000644000175000001440000001157610142077736013127 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include "config.h" #include "url.h" #include "http.h" #include "base64.h" #include "tools.h" #include "errcode.h" #include "authinfo.h" #include "html.h" #include "abstract.h" #include "myssl.h" #if defined(USE_SSL) && defined(USE_SSL_IMPL_OPENSSL) #define _MD5_CTX MD5_CTX #define _MD5Init MD5_Init #define _MD5Update MD5_Update #define _MD5Final MD5_Final #else #include "md5c.h" #endif /* this function is stolen from apache md5_util.c by Jeff Hostetler */ char *_md5(unsigned char *data) { _MD5_CTX md5ctx; unsigned char md5s[16]; unsigned char result[33]; unsigned char pom[3]; int i; _MD5Init(&md5ctx); _MD5Update(&md5ctx, data, strlen(data)); _MD5Final(md5s, &md5ctx); result[0] = '\0'; for(i = 0; i < 16; i++) { sprintf(pom, "%02x", md5s[i]); strcat(result, pom); } return tl_strdup(result); } void http_digest_deep_free(http_digest_info * digest) { _free(digest->nonce); _free(digest->opaque); _free(digest->realm); _free(digest->site); _free(digest); } http_digest_info *http_digest_parse(char *authtag) { http_digest_info *retv = NULL; if(authtag) { if(!strncmp(authtag, "Digest ", 7)) { retv = _malloc(sizeof(http_digest_info)); retv->nonce = html_get_attrib_from_tag(authtag, "nonce"); retv->opaque = html_get_attrib_from_tag(authtag, "opague"); retv->realm = html_get_attrib_from_tag(authtag, "realm"); retv->site = NULL; retv->port = 0; } } return retv; } char *http_get_digest_auth_str(http_digest_info * auth_digest, char *method, char *user, char *pass, url * urlp, char *buf, size_t size) { char pom[1024]; char *a1, *a2, *a3; char *d = url_encode_str(urlp->p.http.document, URL_PATH_UNSAFE); size_t used; snprintf(pom, sizeof(pom), "%s:%s:%s", user, auth_digest->realm, pass); a1 = _md5(pom); snprintf(pom, sizeof(pom), "%s:%s", method, d); a2 = _md5(pom); snprintf(pom, sizeof(pom), "%s:%s:%s", a1, auth_digest->nonce, a2); a3 = _md5(pom); snprintf(buf, size, "Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", response=\"%s\"", user, auth_digest->realm, auth_digest->nonce, d, a3); if(auth_digest->opaque) { used = strlen(buf); snprintf(buf + used, size - used, ", opaque=\"%s\"", auth_digest->opaque); } _free(d); _free(a1); _free(a2); _free(a3); return buf; } /* * -1 - failure before sending auth data - http_process_response() can * continue safely * 0 - OK - http_process_response() must return immediatly * 1 - failure after sending auth data - http_process_response() must * return immediatly */ int http_digest_do_auth(doc * docu, char *authtag) { int rv = 0; http_digest_info *digest; /*** clean old digest info, we are sure ***/ /*** going to do negotiation of new nonce ***/ if(docu->auth_digest) { http_digest_deep_free((http_digest_info *) docu->auth_digest); docu->auth_digest = NULL; } /*** to prevent looping here ***/ if(docu->num_auth > (1 + (cfg.auth_reuse_nonce ? 1 : 0))) return -1; docu->num_auth++; xprintf(1, gettext("Trying to do HTTP Digest authorization\n")); digest = http_digest_parse(authtag); digest->site = tl_strdup(url_get_site(docu->doc_url)); digest->port = url_get_port(docu->doc_url); docu->auth_digest = digest; /*** read body of the 401 response ***/ rv = http_throw_message_body(docu); if(rv) docu->is_persistent = FALSE; /*** to cleanly support also HTTP/1.0 we need to ***/ /*** close connection which must not be persistant ***/ abs_close_socket(docu, FALSE); _free(docu->mime); _free(docu->type_str); if(rv) return 1; /*** send new request with new authenthication info ***/ if(http_repeat_request(docu)) rv = 1; return rv; } int http_digest_do_proxy_auth(doc * docu, char *authtag) { int rv = 0; http_digest_info *digest; if(docu->auth_proxy_digest) { http_digest_deep_free((http_digest_info *) docu->auth_proxy_digest); docu->auth_proxy_digest = NULL; } if(docu->num_proxy_auth > (1 + (cfg.auth_reuse_proxy_nonce ? 1 : 0))) return -1; docu->num_proxy_auth++; xprintf(1, gettext("Trying to do HTTP proxy Digest authorization\n")); digest = http_digest_parse(authtag); docu->auth_proxy_digest = digest; rv = http_throw_message_body(docu); if(rv) docu->is_persistent = FALSE; abs_close_socket(docu, FALSE); if(rv) return 1; _free(docu->mime); _free(docu->type_str); if(http_repeat_request(docu)) rv = 1; return rv; } pavuk-0.9.35/src/digest_auth.h0000644000175000001440000000162710142077736013130 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _digest_auth_h_ #define _digest_auth_h_ #include "url.h" #include "doc.h" typedef struct { char *nonce; char *opaque; char *realm; char *site; unsigned short port; } http_digest_info; extern http_digest_info *http_digest_parse(char *); extern void http_digest_deep_free(http_digest_info *); extern char *http_get_digest_auth_str(http_digest_info *, char *, char *, char *, url *, char *, size_t); extern int http_digest_do_proxy_auth(doc *, char *); extern int http_digest_do_auth(doc *, char *); #endif pavuk-0.9.35/src/pavukrc.rc0000644000175000001440000000006407667306551012462 00000000000000#include "pavukrc.h" PAVUK_ICON ICON "pavuk.ico" pavuk-0.9.35/src/schedule.c0000644000175000001440000000376710400623655012420 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #include #include #include #include #include #include #include "config.h" #include "schedule.h" #include "mode.h" /************************************************/ /* naplanovanie vykonania programu v danom case */ /* pri aktualnej konfiguracii */ /* FIXME: Translate me! */ /************************************************/ int at_schedule(void) { int tfd; char *p, *op; char pcmd[10*PATH_MAX]; char cmd[PATH_MAX]; char tmp[PATH_MAX]; char tform[3] = "%s"; #ifdef I_FACE bool_t xi_save; #endif strcpy(tmp, "pavuk_schedule.tmp.XXXXXX"); tfd = tl_mkstemp(tmp); if(tfd < 0) { xperror("tl_mkstemp"); return -1; } strcpy(cmd, cfg.sched_cmd ? cfg.sched_cmd : AT_CMD); p = cmd; op = pcmd; *op = '\0'; while(*p) { if(*p == '%') { p++; switch (*p) { case 'f': strcat(op, tmp); break; case 't': strftime(op, 10, "%H:%M", cfg.time); break; default: tform[1] = *p; strftime(op, 10, tform, cfg.time); } p++; while(*op) op++; } else { *op = *p; op++; p++; *op = '\0'; } } #ifdef I_FACE xi_save = cfg.xi_face; cfg.xi_face = FALSE; #endif cfg_dump_cmd_fd(tfd); #ifdef I_FACE cfg.xi_face = xi_save; #endif if(tl_system(pcmd)) { xperror(pcmd); if(unlink(tmp)) xperror(tmp); return -1; } if(unlink(tmp)) xperror(tmp); close(tfd); return 0; } pavuk-0.9.35/src/schedule.h0000644000175000001440000000102510142077741012410 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _schedule_h_ #define _schedule_h_ #ifndef AT_CMD #define AT_CMD "at -f %f %t %d.%m.%Y" #endif extern int at_schedule(void); #endif pavuk-0.9.35/src/gopher.c0000644000175000001440000001012210146657462012101 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include #include #include "abstract.h" #include "doc.h" #include "errcode.h" #include "gopher.h" #include "http.h" #include "net.h" #include "url.h" /********************************************************/ /* otvori spojenie na gopher server pre dane gopher URL */ /* FIXME: Translate me! */ /********************************************************/ bufio *gopher_get_data_socket(doc * docp) { char pom[2048]; char *host; int port; if(priv_cfg.gopher_proxy) { host = priv_cfg.gopher_proxy; port = cfg.gopher_proxy_port; } else { host = docp->doc_url->p.gopher.host; port = docp->doc_url->p.gopher.port; } docp->datasock = bufio_sock_fdopen(net_connect(host, port, docp)); if(docp->datasock) { if(priv_cfg.gopher_proxy) { if(http_dumy_proxy_connect(docp, url_get_site(docp->doc_url), url_get_port(docp->doc_url), host, port)) { docp->errcode = ERR_PROXY_CONNECT; bufio_close(docp->datasock); docp->datasock = NULL; return NULL; } } snprintf(pom, sizeof(pom), "%s\r\n", docp->doc_url->p.gopher.selector + 1); abs_write(docp->datasock, pom, strlen(pom)); DEBUG_PROTOC(gettext ("********************* Gopher request **************\n")); DEBUG_PROTOC("%s", pom); DEBUG_PROTOC("***************************************************\n"); } else { docp->errcode = ERR_GOPHER_CONNECT; if(_h_errno_) xherror(host); else xperror("net_connect"); } return docp->datasock; } /********************************************************/ /* z gopher adresara urobi HTML dokument */ /* FIXME: Translate me! */ /********************************************************/ void gopher_dir_to_html(doc * docp) { char *p, *res = NULL; char pom[8192]; int tsize; char tp; char *title; char *host; char *sel; int port; int ilen; bool_t last = 1; if(docp->doc_url->p.gopher.selector[0] != '1') return; snprintf(pom, sizeof(pom), gettext("\n" "\n\nDirectory of gopher://%s:%hu/%s\n\n" "\n

                                                                  " "Directory of gopher://%s:%hu/%s



                                                                    "), docp->doc_url->p.gopher.host, docp->doc_url->p.gopher.port, docp->doc_url->p.gopher.selector, docp->doc_url->p.gopher.host, docp->doc_url->p.gopher.port, docp->doc_url->p.gopher.selector); res = new_string(pom); tsize = strlen(pom); p = docp->contents; while(*p) { char **fields; ilen = strcspn(p, "\r\n"); if(*(p + ilen)) *(p + ilen) = '\0'; else last = 0; if(*p == '.') break; fields = tl_str_split(p, "\t"); if(tl_strv_length(fields) > 3) { title = fields[0]; tp = *title; title++; sel = url_encode_str(fields[1], URL_PATH_UNSAFE); host = fields[2]; port = _atoi(fields[3]); snprintf(pom, sizeof(pom), "
                                                                  • " ""%s"
                                                                  • \n", host, port, tp, sel, title); _free(sel); tsize += strlen(pom); res = _realloc(res, tsize + 1); strcat(res, pom); } else { xprintf(1, gettext("Failed to parse Gopher directory entry:\n%s\n"), p); } p += ilen + last; p += strspn(p, "\r\n"); tl_strv_free(fields); } tsize += 22; res = _realloc(res, tsize + 1); strcat(res, "
                                                                  \n\n\n"); _free(docp->contents); docp->contents = res; docp->size = tsize; } pavuk-0.9.35/src/gopher.h0000644000175000001440000000116510142077737012112 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _gopher_h_ #define _gopher_h_ #include "bufio.h" #include "doc.h" #define DEFAULT_GOPHER_PORT 70 #define DEFAULT_GOPHER_PROXY_PORT 8080 extern bufio *gopher_get_data_socket(doc *); extern void gopher_dir_to_html(doc *); #endif pavuk-0.9.35/src/gui_scenario.c0000644000175000001440000001475210151315532013262 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include "gui.h" #include #ifdef GTK_FACE #include "ainterface.h" #include "uconfig.h" #include "net.h" static void SaveScn(GtkObject * object, gpointer func_data) { const char *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(gui_cfg. scn_save_shell)); if(fn && *fn) { cfg_dump(fn); gtk_widget_hide(gui_cfg.scn_save_shell); } else gdk_beep(); } void gui_build_scenario_saver(int popup) { if(gui_cfg.scn_save_shell) { if(popup) { gtk_widget_show_all(gui_cfg.scn_save_shell); if(GTK_WIDGET_REALIZED(gui_cfg.scn_save_shell)) gdk_window_raise(gui_cfg.scn_save_shell->window); } return; } gui_cfg.scn_save_shell = gtk_file_selection_new(gettext("Pavuk: Scenario saver")); gtk_signal_connect(GTK_OBJECT(gui_cfg.scn_save_shell), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.scn_save_shell); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(gui_cfg.scn_save_shell)-> ok_button), "clicked", GTK_SIGNAL_FUNC(SaveScn), gui_cfg.scn_save_shell); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(gui_cfg.scn_save_shell)-> cancel_button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), gui_cfg.scn_save_shell); if(popup) gtk_widget_show(gui_cfg.scn_save_shell); } static void LoadScn(GtkObject * object, gpointer func_data) { const char *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(gui_cfg. scn_load_shell)); if(fn && *fn) { int rv; LOCK_GCFG; cfg_set_all_to_default(); cfg.xi_face = TRUE; rv = cfg_load(fn); _MT_CFGSTAMP; UNLOCK_GCFG; memset(&cfg.local_ip_addr, '\0', sizeof(cfg.local_ip_addr)); if(cfg.local_ip && (net_host_to_in_addr(cfg.local_ip, &cfg.local_ip_addr))) { xherror(cfg.local_ip); } if(rv) gdk_beep(); else { gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(gui_cfg.modegr[cfg. mode]), TRUE); if(!cfg.processing) { gtk_widget_set_sensitive(gui_cfg.bt_start, FALSE); gtk_widget_set_sensitive(gui_cfg.mea_start, FALSE); gtk_widget_set_sensitive(gui_cfg.mtb_start, FALSE); free_all(); cfg.total_cnt = 0; cfg.urlstack = NULL; cfg.mode_started = FALSE; } if(gui_cfg.cfg_limits) xset_cfg_values_lim(); if(gui_cfg.config_shell) xset_cfg_values_comm(); #ifdef DEBUG gui_set_debug_level_mi(); gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(gui_cfg.me_debug), cfg.debug); #endif #ifdef HAVE_MT gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(gui_cfg.immessages), cfg.immessages); #endif gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(gui_cfg.me_quiet), cfg.quiet); gtk_widget_hide(gui_cfg.scn_load_shell); } } else gdk_beep(); } void gui_build_scenario_loader(int popup) { if(gui_cfg.scn_load_shell) { if(popup) { gtk_widget_show_all(gui_cfg.scn_load_shell); if(GTK_WIDGET_REALIZED(gui_cfg.scn_load_shell)) gdk_window_raise(gui_cfg.scn_load_shell->window); } return; } gui_cfg.scn_load_shell = gtk_file_selection_new(gettext("Pavuk: Scenario loader")); gtk_signal_connect(GTK_OBJECT(gui_cfg.scn_load_shell), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.scn_load_shell); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(gui_cfg.scn_load_shell)-> ok_button), "clicked", GTK_SIGNAL_FUNC(LoadScn), gui_cfg.scn_load_shell); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(gui_cfg.scn_load_shell)-> cancel_button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), gui_cfg.scn_load_shell); if(popup) gtk_widget_show(gui_cfg.scn_load_shell); } static void AddScn(GtkObject * object, gpointer func_data) { const char *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(gui_cfg. scn_add_shell)); if(fn && *fn) { int rv; LOCK_GCFG; rv = cfg_load(fn); _MT_CFGSTAMP; UNLOCK_GCFG; memset(&cfg.local_ip_addr, '\0', sizeof(cfg.local_ip_addr)); if(cfg.local_ip && (net_host_to_in_addr(cfg.local_ip, &cfg.local_ip_addr))) { xherror(cfg.local_ip); } if(rv) gdk_beep(); else { gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(gui_cfg.modegr[cfg. mode]), TRUE); if(!cfg.processing) { gtk_widget_set_sensitive(gui_cfg.bt_start, FALSE); gtk_widget_set_sensitive(gui_cfg.mea_start, FALSE); gtk_widget_set_sensitive(gui_cfg.mtb_start, FALSE); free_all(); cfg.total_cnt = 0; cfg.urlstack = NULL; cfg.mode_started = FALSE; } if(gui_cfg.cfg_limits) xset_cfg_values_lim(); if(gui_cfg.config_shell) xset_cfg_values_comm(); #ifdef DEBUG gui_set_debug_level_mi(); gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(gui_cfg.me_debug), cfg.debug); #endif #ifdef HAVE_MT gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(gui_cfg.immessages), cfg.immessages); #endif gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(gui_cfg.me_quiet), cfg.quiet); gtk_widget_hide(gui_cfg.scn_add_shell); } } else gdk_beep(); } void gui_build_scenario_adder(int popup) { if(gui_cfg.scn_add_shell) { if(popup) { gtk_widget_show_all(gui_cfg.scn_add_shell); if(GTK_WIDGET_REALIZED(gui_cfg.scn_add_shell)) gdk_window_raise(gui_cfg.scn_add_shell->window); } return; } gui_cfg.scn_add_shell = gtk_file_selection_new(gettext("Pavuk: Scenario add")); gtk_signal_connect(GTK_OBJECT(gui_cfg.scn_add_shell), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.scn_add_shell); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(gui_cfg.scn_add_shell)-> ok_button), "clicked", GTK_SIGNAL_FUNC(AddScn), gui_cfg.scn_add_shell); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(gui_cfg.scn_add_shell)-> cancel_button), "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), gui_cfg.scn_add_shell); if(popup) gtk_widget_show(gui_cfg.scn_add_shell); } #endif /* GTK_FACE */ pavuk-0.9.35/src/base64.c0000644000175000001440000000606310142077736011706 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include #include #include #ifdef BSDEBUG #define _malloc malloc #define _free free #define TRUE 1 #define FALSE 0 #else #include "config.h" #include "tools.h" #endif #include "base64.h" static const char base64_etab[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; char *base64_encode(const char *str) { return base64_encode_data(str, strlen(str)); } char *base64_encode_data(const char *data, int len) { char *outstr = (char *) _malloc((len / 3 + 1) * 4 + 1); unsigned char *instr = (unsigned char *) _malloc(len + 3); int idx = 0, outidx = 0; memset(instr, '\0', len + 3); memcpy(instr, data, len); memset(outstr, '\0', (len / 3 + 1) * 4 + 1); while(idx < len) { if(idx % 3 == 0) { outstr[outidx] = base64_etab[(int) (instr[idx] >> 2)]; outidx++; } else if(idx % 3 == 1) { outstr[outidx] = base64_etab[(int) (((instr[idx - 1] << 4) & 0x30) | ((instr[idx] >> 4) & 0x0f))]; outidx++; outstr[outidx] = base64_etab[(int) (((instr[idx] << 2) & 0x3c) | ((instr[idx + 1] >> 6) & 0x03))]; outidx++; } else { outstr[outidx] = base64_etab[(int) (instr[idx] & 0x3f)]; outidx++; } idx++; } if(idx % 3 == 1) { outstr[outidx] = base64_etab[(int) (((instr[idx - 1] << 4) & 0x30) | ((instr[idx] >> 4) & 0x0f))]; outstr[outidx + 1] = '='; outstr[outidx + 2] = '='; } else if(idx % 3 == 2) { outstr[outidx] = '='; } _free(instr); return outstr; } static int base64_chrindex(const char *str, int chr) { char *p; p = strchr(str, chr); if(!p) return -1; else return p - str; } int base64_decode_data(const char *inbuf, char **outbuf) { char *rv = _malloc(((strlen(inbuf) + 1) * 3) / 4 + 1); int len = 0; int stop = FALSE, err = FALSE; while(*inbuf) { int n = 0; int c[4] = { 0, 0, 0, 0 }; int nt[5] = { 0, 1, 1, 2, 3 }; unsigned char triple[3] = { '\0', '\0', '\0' }; for(n = 0; n < 4; n++) { if(!inbuf[n] || inbuf[n] == '=') { stop = TRUE; break; } else c[n] = base64_chrindex(base64_etab, inbuf[n]); if(c[n] < 0) { err = TRUE; stop = TRUE; break; } } triple[0] = (c[0] << 2) | (c[1] >> 4); triple[1] = (c[1] & 0x3f) << 4 | ((c[2] & 0x3c) >> 2); triple[2] = (c[2] & 0x3) << 6 | (c[3] & 0x3f); memcpy(rv + len, triple, nt[n]); if(stop) { len += nt[n]; break; } else len += 3; inbuf += 4; } if(err) { _free(rv); len = -1; } else { rv[len] = '\0'; *outbuf = rv; } return len; } pavuk-0.9.35/src/base64.h0000644000175000001440000000111210142077736011701 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _base64_h_ #define _base64_h_ extern char *base64_encode_data(const char *, int); extern char *base64_encode(const char *); extern int base64_decode_data(const char *, char **); #endif pavuk-0.9.35/src/mimetype.c0000644000175000001440000000542410251617052012443 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "mimetype.h" const char *mimetypes[] = { "application/activemessage", "application/andrew-insert", "application/applefile", "application/atomicmail", "application/dca-rft", "application/dec-dx", "application/mac-binhex40", "application/macwriteii", "application/msword", "application/news-message-id", "application/news-transmission", "application/octet-stream", "application/oda", "application/pdf", "application/postscript", "application/remote-printing", "application/rtf", "application/slate", "application/x-mif", "application/wita", "application/wordperfect5.1", "application/x-csh", "application/x-dvi", "application/x-hdf", "application/x-latex", "application/x-netcdf", "application/x-sh", "application/x-tcl", "application/x-tex", "application/x-texinfo", "application/x-troff", "application/x-troff-man", "application/x-troff-me", "application/x-troff-ms", "application/x-wais-source", "application/zip", "application/x-bcpio", "application/x-cpio", "application/x-gtar", "application/x-shar", "application/x-sv4cpio", "application/x-sv4crc", "application/x-tar", "application/x-ustar", "audio/basic", "audio/x-aiff", "audio/x-wav", "image/gif", "image/ief", "image/jpeg", "image/pjpeg", "image/tiff", "image/x-cmu-raster", "image/x-portable-anymap", "image/x-portable-bitmap", "image/x-portable-graymap", "image/x-portable-pixmap", "image/x-rgb", "image/x-xbitmap", "image/x-xpixmap", "image/x-xwindowdump", "message/external-body", "message/news", "message/partial", "message/rfc822", "multipart/alternative", "multipart/appledouble", "multipart/digest", "multipart/mixed", "multipart/parallel", "text/html", "text/plain", "text/richtext", "text/tab-separated-values", "text/x-setext", "video/mpeg", "video/quicktime", "video/x-msvideo", "video/x-sgi-movie", 0 }; const struct mime_type_ext mime_type_exts[] = { {"text/html*", ".html"}, {"text/js", ".js"}, {"text/plain", ".txt"}, {"image/jpeg", ".jpg"}, {"image/pjpeg", ".jpg"}, {"image/gif", ".gif"}, {"image/png", ".png"}, {"image/tiff", ".tiff"}, {"application/pdf", ".pdf"}, {"application/msword", ".doc"}, {"application/postscript", ".ps"}, {"application/rtf", ".rtf"}, {"application/wordperfect5.1", ".wps"}, {"application/zip", ".zip"}, {"video/mpeg", ".mpg"}, {0, 0} }; pavuk-0.9.35/src/mimetype.h0000644000175000001440000000112110151322142012426 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #ifndef _mimetype_h_ #define _mimetype_h_ struct mime_type_ext { const char *mimet; const char *ext; }; extern const char *mimetypes[]; extern const struct mime_type_ext mime_type_exts[]; #endif pavuk-0.9.35/src/htmlparser.c0000644000175000001440000011160010557340626012776 00000000000000/***************************************************************************/ /* This code is part of WWW grabber called pavuk */ /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ /* Distributed under GPL 2 or later */ /***************************************************************************/ #include "config.h" #include #include #include #include #include #include "htmlparser.h" #include "tools.h" #include "css.h" #include "re.h" #include "ftp.h" #include "jstrans.h" static dlhash *html_parser_tag_hash = NULL; #define COMMENT_PREFIX "" #define ADVERT_PREFIX "adv" static int html_parser_tag_comp_func(dllist_t key1, dllist_t key2) { return (!strcasecmp((void *) key1, (void *) key2)); } static unsigned int html_parser_tag_hash_func(unsigned int size, dllist_t key) { unsigned char *p = (unsigned char *) key; unsigned int retv = 0; while(*p) { retv = (retv + tl_ascii_tolower(*p)) % size; p++; } return retv; } static dllist_t html_parser_tag_key_func(dllist_t data) { return (dllist_t) ((html_tag_t *) data)->tag; } html_parser_t *html_parser_init(html_tag_t * tags, int ntags, int with_tag_rewriting, int purestyle, int purescript) { html_parser_t *rv; int i; rv = _malloc(sizeof(html_parser_t)); rv->rewrite = with_tag_rewriting; rv->purestyle = purestyle; rv->purescript = purescript; rv->in_content = NULL; rv->out_content = NULL; rv->in_size = 0; rv->aout_size = 0; rv->out_offset = 0; rv->in_offset = 0; rv->stack = NULL; rv->stack_size = 0; rv->stack_offset = 0; rv->base = NULL; rv->baset = NULL; rv->tag_attrib = NULL; rv->tag_funcs = NULL; rv->attrib_funcs = NULL; rv->style_funcs = NULL; rv->script_funcs = NULL; rv->current_tag = NULL; rv->current_attrib = NULL; LOCK_TAG_HASH; if(html_parser_tag_hash) rv->tag_hash = html_parser_tag_hash; else { rv->tag_hash = dlhash_new(20, html_parser_tag_key_func, html_parser_tag_hash_func, html_parser_tag_comp_func); for(i = 0; i < ntags; i++) dlhash_insert(rv->tag_hash, (dllist_t) &tags[i]); html_parser_tag_hash = rv->tag_hash; } UNLOCK_TAG_HASH; return rv; } void html_parser_do_cleanup(void) { if(html_parser_tag_hash) dlhash_free(html_parser_tag_hash); } void html_parser_kill(html_parser_t * hpinfo) { #define KILL_FUNC_CHAIN(chain) \ while (chain) \ { \ if(chain->data) free((void *)chain->data);\ chain = dllist_remove_entry(chain, chain);\ } KILL_FUNC_CHAIN(hpinfo->tag_funcs); KILL_FUNC_CHAIN(hpinfo->attrib_funcs); KILL_FUNC_CHAIN(hpinfo->style_funcs); KILL_FUNC_CHAIN(hpinfo->script_funcs); _free(hpinfo->stack); _free(hpinfo->out_content); _free(hpinfo->base); _free(hpinfo->baset); _free(hpinfo); } void html_parser_add_tag_func(html_parser_t * hpinfo, html_parser_func_t func, void *data) { html_parser_func_info_t *nfunc; nfunc = _malloc(sizeof(html_parser_func_info_t)); nfunc->func = func; nfunc->data = data; hpinfo->tag_funcs = dllist_append(hpinfo->tag_funcs, (dllist_t) nfunc); } void html_parser_add_attrib_func(html_parser_t * hpinfo, html_parser_func_t func, void *data) { html_parser_func_info_t *nfunc; nfunc = _malloc(sizeof(html_parser_func_info_t)); nfunc->func = func; nfunc->data = data; hpinfo->attrib_funcs = dllist_append(hpinfo->attrib_funcs, (dllist_t) nfunc); } void html_parser_add_style_func(html_parser_t * hpinfo, html_parser_func_t func, void *data) { html_parser_func_info_t *nfunc; nfunc = _malloc(sizeof(html_parser_func_info_t)); nfunc->func = func; nfunc->data = data; hpinfo->style_funcs = dllist_append(hpinfo->style_funcs, (dllist_t) nfunc); } void html_parser_add_script_func(html_parser_t * hpinfo, html_parser_func_t func, void *data) { html_parser_func_info_t *nfunc; nfunc = _malloc(sizeof(html_parser_func_info_t)); nfunc->func = func; nfunc->data = data; hpinfo->script_funcs = dllist_append(hpinfo->script_funcs, (dllist_t) nfunc); } void html_parser_set_document(html_parser_t * hpinfo, url * doc_url, char *content, ssize_t size) { hpinfo->doc_url = doc_url; hpinfo->in_content = content; hpinfo->in_size = size; } void html_parser_take_document(html_parser_t * hpinfo, char **out_content, ssize_t * out_size) { *out_content = hpinfo->out_content; *out_size = hpinfo->out_offset; hpinfo->out_content = NULL; hpinfo->out_offset = 0; hpinfo->aout_size = 0; } void html_parser_set_base(html_parser_t * hpinfo, char *base, char *baset) { if(base) { _free(hpinfo->base); hpinfo->base = base; } if(baset) { _free(hpinfo->baset); hpinfo->baset = baset; } } static void html_parser_process_new_base_url(html_parser_t * hpinfo, char *baseattr) { url *purl; char *newbase; purl = url_parse(baseattr); assert(purl->type != URLT_FROMPARENT); if(!prottable[purl->type].supported) { xprintf(1, gettext("Unsupported BASE URL - %s (probably bad handled)\n"), baseattr); newbase = tl_strdup(baseattr); } else { char *idx; newbase = url_to_absolute_url(hpinfo->base, hpinfo->baset, hpinfo->doc_url, baseattr); if(!newbase) return; /* collect base="" and ignore it */ if((idx = strrchr(newbase, '?'))) *idx = '\0'; if(!tl_is_dirname(newbase)) { idx = strrchr(newbase, '/'); if(idx) *(idx + 1) = '\0'; } } DEBUG_HTML("NEW BASE URL - %s\n", newbase); free_deep_url(purl); _free(purl); _free(hpinfo->base); hpinfo->base = newbase; } static void html_parser_call_funcs(html_parser_t * hpinfo, dllist * funcs) { dllist *ptr; for(ptr = funcs; ptr; ptr = ptr->next) { html_parser_func_info_t *fi = (html_parser_func_info_t *) ptr->data; fi->func(hpinfo, hpinfo->stack, fi->data); } } static void html_parser_flush_stack_to_output(html_parser_t * hpinfo) { int l; if(!hpinfo->rewrite) return; l = strlen(hpinfo->stack); html_parser_MEXPAND(hpinfo, l) memcpy(hpinfo->out_content + hpinfo->out_offset, hpinfo->stack, l); hpinfo->out_offset += l; hpinfo->stack_offset = 0; } static int html_parser_check_tag(html_parser_t * hpinfo, char *tagstart) { int tl; hpinfo->current_tag = NULL; for(tl = 0; tl_ascii_isalpha(tagstart[tl]); tl++); if(strchr(" \t\r\n>", tagstart[tl])) { char *tagname; tagname = tl_strndup(tagstart, tl); hpinfo->current_tag = (html_tag_t *) dlhash_find_by_key(hpinfo->tag_hash, (dllist_t) tagname); _free(tagname); } return (hpinfo->current_tag != NULL); } static void html_parser_parse_init(html_parser_t * hpinfo) { hpinfo->in_offset = 0; if(hpinfo->rewrite) { hpinfo->aout_size = hpinfo->in_size + html_parser_FENDER; hpinfo->out_content = _malloc(hpinfo->aout_size); hpinfo->out_offset = 0; } hpinfo->stack_size = 2 * html_parser_FENDER; hpinfo->stack = _malloc(hpinfo->stack_size); hpinfo->stack_offset = 0; } void html_parser_parse(html_parser_t * hpinfo) { int tagstart = FALSE; int scriptstart = FALSE; int commentstart = FALSE; int stylestart = FALSE; int singlequoteintag = FALSE; int doublequoteintag = FALSE; char *p; html_parser_parse_init(hpinfo); if(hpinfo->purestyle) stylestart = TRUE; if(hpinfo->purescript) scriptstart = TRUE; for(p = hpinfo->in_content; (p - hpinfo->in_content) < hpinfo->in_size; p++, hpinfo->in_offset++) { if(stylestart) { if(!strncasecmp(p, "stack[hpinfo->stack_offset] = *p; hpinfo->stack[hpinfo->stack_offset + 1] = '\0'; html_parser_call_funcs(hpinfo, hpinfo->style_funcs); html_parser_flush_stack_to_output(hpinfo); } else { html_parser_SEXPAND(hpinfo, 1) hpinfo->stack[hpinfo->stack_offset] = *p; hpinfo->stack_offset++; } continue; } if(scriptstart) { if(!strncasecmp(p + 1, "stack[hpinfo->stack_offset] = *p; hpinfo->stack[hpinfo->stack_offset + 1] = '\0'; html_parser_call_funcs(hpinfo, hpinfo->script_funcs); html_parser_flush_stack_to_output(hpinfo); } else { html_parser_SEXPAND(hpinfo, 1) hpinfo->stack[hpinfo->stack_offset] = *p; hpinfo->stack_offset++; } continue; } if(commentstart) { if(!strncmp(p, "-->", 3)) commentstart = FALSE; if(hpinfo->rewrite) { hpinfo->out_content[hpinfo->out_offset] = *p; hpinfo->out_offset++; } continue; } if((*p == '\"') && tagstart && !singlequoteintag) { if(doublequoteintag) { doublequoteintag = FALSE; } else { doublequoteintag = TRUE; } } else if((*p == '\'') && tagstart && !doublequoteintag) { if(singlequoteintag) { singlequoteintag = FALSE; } else { singlequoteintag = TRUE; } } else if(*p == '<') { if(singlequoteintag || doublequoteintag) { continue; } if(tagstart) { hpinfo->stack[hpinfo->stack_offset] = '\0'; html_parser_flush_stack_to_output(hpinfo); } tagstart = FALSE; if(!strncasecmp(p, "stack_offset = 0; } else if(!strncmp(p, "